direvent-5.2/0000755000175000017500000000000013512403134013162 5ustar00graygray00000000000000direvent-5.2/ABOUT-NLS0000644000175000017500000027215513244106111014422 0ustar00graygray000000000000001 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. When reporting bugs in the `intl/' directory or bugs which may be related to internationalization, you should tell about the version of `gettext' which is used. The information can be found in the `intl/VERSION' file, in internationalized packages. 1.1 Quick configuration advice ============================== If you want to exploit the full power of internationalization, you should configure it using ./configure --with-included-gettext to force usage of internationalizing routines provided within this package, despite the existence of internationalizing capabilities in the operating system where this package is being installed. So far, only the `gettext' implementation in the GNU C library version 2 provides as many features (such as locale alias, message inheritance, automatic charset conversion or plural form handling) as the implementation here. It is also not possible to offer this additional functionality on top of a `catgets' implementation. Future versions of GNU `gettext' will very likely convey even more functionality. So it might be a good idea to change to GNU `gettext' as soon as possible. So you need _not_ provide this option if you are using GNU libc 2 or you have installed a recent copy of the GNU gettext package with the included `libintl'. 1.2 INSTALL Matters =================== Some packages are "localizable" when properly installed; the programs they contain can be made to speak your own native language. Most such packages use GNU `gettext'. Other packages have their own ways to internationalization, predating GNU `gettext'. By default, this package will be installed to allow translation of messages. It will automatically detect whether the system already provides the GNU `gettext' functions. If not, the included GNU `gettext' library will be used. This library is wholly contained within this package, usually in the `intl/' subdirectory, so prior installation of the GNU `gettext' package is _not_ required. Installers may use special options at configuration time for changing the default behaviour. The commands: ./configure --with-included-gettext ./configure --disable-nls will, respectively, bypass any pre-existing `gettext' to use the internationalizing routines provided within this package, or else, _totally_ disable translation of messages. When you already have GNU `gettext' installed on your system and run configure without an option for your new package, `configure' will probably detect the previously built and installed `libintl.a' file and will decide to use this. This might not be desirable. You should use the more recent version of the GNU `gettext' library. I.e. if the file `intl/VERSION' shows that the library which comes with this package is more recent, you should use ./configure --with-included-gettext to prevent auto-detection. The configuration process will not test for the `catgets' function and therefore it will not be used. The reason is that even an emulation of `gettext' on top of `catgets' could not provide all the extensions of the GNU `gettext' library. Internationalized packages 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.3 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.4 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.5 Available Packages ====================== Languages are not equally supported in all packages. The following matrix shows the current state of internationalization, as of May 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 ar as ast az be be@latin bg bn_IN bs ca crh +---------------------------------------------------+ 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 ar as ast az be be@latin bg bn_IN bs ca crh 6 0 2 3 19 1 11 3 28 3 1 38 5 cs da de el en en_GB en_ZA eo es et eu fa fi +-------------------------------------------------+ 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 | [] [] [] [] [] [] | +-------------------------------------------------+ cs da de el en en_GB en_ZA eo es et eu fa fi 64 105 117 18 1 8 0 28 89 18 19 0 104 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 | [] [] [] [] | +------------------------------------------------+ fr ga gl gu he hi hr hu hy id is it ja ka kn 121 53 20 4 8 2 5 53 2 120 5 83 66 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 12 48 4 2 2 4 24 10 19 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 61 47 91 3 55 47 8 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 | [] [] | 11 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 | [] [] [] [] [] [] | 13 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 | [] [] [] [] [] [] [] | 30 gettext-tools | [] [] [] [] [] [] | 22 gip | [] [] [] [] | 22 gjay | [] | 3 gliv | [] [] [] | 14 glunarclock | [] [] [] [] [] | 19 gnubiff | [] [] | 4 gnucash | () [] () () | 9 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 | [] [] [] [] | 22 gst-plugins-base | [] [] [] [] [] | 24 gst-plugins-good | [] [] [] [] [] | 25 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 | [] () | 6 libextractor | [] | 1 libgnutls | [] [] [] | 9 libgpewidget | [] [] [] | 14 libgpg-error | [] [] [] | 9 libgphoto2 | [] [] | 8 libgphoto2_port | [] [] [] [] | 13 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 | [] [] [] [] | 16 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 | [] [] [] [] [] [] [] [] [] | 60 xkeyboard-config | [] [] [] [] | 25 +---------------------------------------------------+ 84 teams sv sw ta te tg th tr uk vi wa zh_CN zh_HK zh_TW 178 domains 119 1 3 2 0 10 66 50 155 17 97 7 41 2610 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 May 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.6 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.2/Makefile.am0000644000175000017500000000203412764623664015241 0ustar00graygray00000000000000# This file is part of Direvent -*- autoconf -*- # Copyright (C) 2012-2016 Sergey Poznyakoff # # 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. # # 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 . 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.2/acinclude.m40000644000175000017500000000254412764623664015404 0ustar00graygray00000000000000# This file is part of Direvent -*- autoconf -*- # Copyright (C) 2012-2016 Sergey Poznyakoff # # 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. # # 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 . AC_DEFUN([DEVT_CC_OPT],[ m4_pushdef([devt_optname],translit($1,[-],[_])) AC_MSG_CHECKING(whether $CC accepts $1) devt_save_cc="$CC" CC="$CC $1" AC_TRY_RUN([int main() { return 0; }], [devt_cv_cc_]devt_optname=yes, [devt_cv_cc_]devt_optname=no, [devt_cv_cc_]devt_optname=no) CC="$devt_save_cc" AC_MSG_RESULT($[devt_cv_cc_]devt_optname) if test $[devt_cv_cc_]devt_optname = yes; then ifelse([$2],,:,[$2]) ifelse([$3],,,else [$3]) fi m4_popdef([devt_optname]) ]) AC_DEFUN([DEVT_CC_OPT_CFLAGS],[ DEVT_CC_OPT([$1],[CFLAGS="$CFLAGS $1"]) ]) AC_DEFUN([DEVT_CC_PAREN_QUIRK],[ DEVT_CC_OPT_CFLAGS([-Wno-parentheses]) ]) direvent-5.2/doc/0000755000175000017500000000000013512403134013727 5ustar00graygray00000000000000direvent-5.2/doc/fdl.texi0000644000175000017500000005071412625627743015420 0ustar00graygray00000000000000@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.2/doc/direvent.conf.50000644000175000017500000004434012764623664016612 0ustar00graygray00000000000000.\" direvent - directory content watcher daemon -*- nroff -*- .\" Copyright (C) 2012-2016 Sergey Poznyakoff .\" .\" 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. .\" .\" 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 20, 2016" "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 charriage 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. Two or more adjacent quoted strings are concatenated, which gives another way to split long strings over several lines to improve readability. The following fragment produces the same result as the example above: .sp .nf .in +4 "a long string may be" " split over several lines" .in .fi .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.2/doc/gendocs_template0000644000175000017500000000550112625627743017212 0ustar00graygray00000000000000

The manual for %%PACKAGE%% is available in the following formats:

(This page is generated by the %%SCRIPTNAME%% script.)

direvent-5.2/doc/stamp-vti0000644000175000017500000000014313512402634015600 0ustar00graygray00000000000000@set UPDATED 10 September 2016 @set UPDATED-MONTH September 2016 @set EDITION 5.2 @set VERSION 5.2 direvent-5.2/doc/Makefile.am0000644000175000017500000000244612764623664016015 0ustar00graygray00000000000000# This file is part of Direvent -*- autoconf -*- # Copyright (C) 2012-2016 Sergey Poznyakoff # # 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. # # 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 . info_TEXINFOS=direvent.texi direvent_TEXINFOS=\ fdl.texi dist_man_MANS=direvent.8 direvent.conf.5 EXTRA_DIST = \ gendocs_template\ gendocs.sh clean-local: @rm -rf manual GENDOCS=$(srcdir)/gendocs.sh --no-copy-images --html '--init-file=$(abs_srcdir)/html.init' TEXI2DVI=texi2dvi -t '@set $(RENDITION)' .PHONY: manual manual: TEXINPUTS=$(srcdir):$(top_srcdir)/build-aux:$(TEXINPUTS) \ MAKEINFO="$(MAKEINFO) $(MAKEINFOFLAGS) $(AM_MAKEINFOFLAGS)" \ TEXI2DVI="$(TEXI2DVI)" \ $(GENDOCS) $(PACKAGE) '$(PACKAGE_NAME) manual' manual.tar.bz2: manual tar cfj manual.tar.bz2 manual man-tar: manual.tar.bz2 direvent-5.2/doc/direvent.80000644000175000017500000003471712764623664015700 0ustar00graygray00000000000000.\" direvent - directory content watcher daemon -*- nroff -*- .\" Copyright (C) 2012-2016 Sergey Poznyakoff .\" .\" 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. .\" .\" 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 "August 25, 2016" "DIREVENT" "Direvent User Reference" .SH NAME direvent \- directory event monitor .SH SYNOPSIS \fBdirevent\fR [\fB\-HVdfh\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\-\-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 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=\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 MACRO 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, asteriscs, 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 Adjacent quoted strings are concatenated. .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 3. 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 \fBenviron\fR statement is present in the watcher, the environment is 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. See the section .B MACRO 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]. Word splitting is performed on the resulting command line. The first word is treated as the pathname of the program to be executed. .IP \n+[step]. The program is invoked. .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 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. .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, 2013 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.2/doc/version.texi0000644000175000017500000000014313512402634016311 0ustar00graygray00000000000000@set UPDATED 10 September 2016 @set UPDATED-MONTH September 2016 @set EDITION 5.2 @set VERSION 5.2 direvent-5.2/doc/direvent.info0000644000175000017500000021410713512402636016437 0ustar00graygray00000000000000This is direvent.info, produced by makeinfo version 5.9.93 from direvent.texi. Copyright (C) 2013-2016 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 10 September 2016, documents GNU Direvent Version 5.2. * Menu: * Intro:: Introduction. * Overview:: * Quick start:: * Invocation:: * Configuration:: * System dependencies:: * Reporting Bugs:: How to Report a Bug. Appendices * Copying This Manual:: The GNU Free Documentation License. * Concept Index:: Index of Concepts.  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.2 '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: create A file was created. delete A file was deleted; write A file was written to; 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, asteriscs, 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 ENV-SPEC; option STRING-LIST; } Each 'watcher' statement instructs 'direvent' to monitor events listed in EVENT-LIST occurring in the 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 'environ' statement is present in the watcher, the environment is modified according to its rules. (*note environment modification: environ.) 3. The standard input is closed. 4. If the 'stdout' option is supplied, the standard output is captured and redirected to the syslog. Otherwise it is closed. 5. If the 'stderr' option is supplied, the standard error is captured and redirected to the syslog. Otherwise it is closed. 6. File descriptors above 2 are closed. 7. Macro variables are expanded. *Note macro expansion::. 8. If the 'shell' option is set, the handler is invoked via the shell, as '/bin/sh -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 macro 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:: * macro expansion:: * general settings:: * syslog:: * watcher::  File: direvent.info, Node: syntax, Next: macro 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/5.2/include' * 'PREFIX/share/direvent/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. Two or more adjacent quoted strings are concatenated, which gives another way to split long strings over several lines to improve readability. The following fragment produces the same result as the example above: "a long string may be" " split over several lines" 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: Copying This Manual, Next: Concept Index, Prev: Reporting Bugs, Up: Top Appendix A 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. A.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, BSD: bsd. (line 30) * attrib, generic event: Overview. (line 26) * ATTRIB, linux event: linux. (line 26) * block statement: Statements. (line 129) * boolean value: Statements. (line 25) * BSD: bsd. (line 6) * CLOSE_NOWRITE, linux event: linux. (line 30) * CLOSE_WRITE, linux event: linux. (line 28) * command: watcher. (line 95) * Comments in a configuration file: Comments. (line 6) * comments, pragmatic: Pragmatic Comments. (line 6) * configuration file statements: Statements. (line 6) * create, generic event: Overview. (line 21) * CREATE, linux event: linux. (line 32) * Darwin: darwin. (line 6) * debug: general settings. (line 17) * DELETE, BSD: bsd. (line 25) * delete, generic event: Overview. (line 22) * DELETE, linux event: linux. (line 34) * DIREVENT_FILE, environment variable: watcher. (line 153) * DIREVENT_GENEV_CODE, environment variable: watcher. (line 147) * DIREVENT_GENEV_NAME, environment variable: watcher. (line 150) * DIREVENT_SYSEV_CODE, environment variable: watcher. (line 142) * DIREVENT_SYSEV_NAME, environment variable: watcher. (line 144) * environ: watcher. (line 138) * environment modification: watcher. (line 158) * environment, handler: watcher. (line 142) * escape sequence: Statements. (line 33) * event: watcher. (line 83) * 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 28) * facility: syslog. (line 22) * facility, syslog: syslog. (line 23) * FDL, GNU Free Documentation License: Copying This Manual. (line 6) * file: watcher. (line 58) * file system events: Overview. (line 12) * file, macro variable: macro expansion. (line 16) * foreground: general settings. (line 10) * fs.inotify.max_user_watches: linux. (line 9) * generic events: Overview. (line 19) * genev_code, macro variable: macro expansion. (line 19) * genev_name, macro variable: macro expansion. (line 23) * GNU/Linux: linux. (line 6) * Handler environment variables: watcher. (line 142) * handler execution environment: Quick start. (line 43) * handler, defining: watcher. (line 96) * handler, introduced: Overview. (line 31) * here-document: Statements. (line 73) * include directories, preprocessor: Pragmatic Comments. (line 28) * include search path, preprocessor: Pragmatic Comments. (line 28) * inotify: linux. (line 6) * kqueue: bsd. (line 6) * LINK, BSD: bsd. (line 32) * linux kernel: linux. (line 6) * list: Statements. (line 113) * logging: syslog. (line 6) * Mac OS X: darwin. (line 6) * macro expansion: macro expansion. (line 6) * 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, linux event: linux. (line 42) * option: watcher. (line 119) * path: watcher. (line 24) * 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) * RENAME, BSD: bsd. (line 34) * self-test mode: Invocation. (line 41) * self_test_pid: macro expansion. (line 29) * sentinel: watcher. (line 41) * shell, watcher option: watcher. (line 123) * simple statements: Statements. (line 6) * single-line comments: Comments. (line 6) * statement, block: Statements. (line 129) * statement, simple: Statements. (line 6) * statements, configuration file: Statements. (line 6) * stdout, watcher option: watcher. (line 131) * strerr, watcher option: watcher. (line 135) * string, quoted: Statements. (line 33) * string, unquoted: Statements. (line 29) * sysctl: linux. (line 9) * sysctl.conf: linux. (line 19) * sysev_code, macro variable: macro expansion. (line 34) * sysev_name, macro variable: macro expansion. (line 38) * 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 115) * user: general settings. (line 6) * user <1>: watcher. (line 112) * wait, watcher option: watcher. (line 126) * watcher declaration: watcher. (line 11) * watcher declaration, summary: Overview. (line 60) * watcher, complete description: watcher. (line 6) * watcher, introduced: Overview. (line 31) * WRITE, BSD: bsd. (line 26) * write, generic event: Overview. (line 24)  Tag Table: Node: Top645 Node: Intro1143 Node: Overview2051 Ref: handler3065 Ref: Overview-Footnote-16449 Ref: Overview-Footnote-26534 Node: Quick start6584 Ref: handler environment8278 Node: Invocation9312 Ref: include option9818 Ref: self-test mode10582 Node: Configuration12657 Node: syntax12877 Node: Comments13420 Node: Pragmatic Comments14094 Ref: include search path15267 Node: Statements16860 Ref: backslash-interpretation18059 Ref: here-document19422 Node: macro expansion21838 Ref: $file22506 Ref: $genev_code22560 Ref: $genev_name22695 Ref: $sysev_code23139 Ref: $sysev_name23264 Node: general settings23566 Node: syslog24108 Node: watcher25321 Ref: path25960 Ref: environ30621 Node: System dependencies33634 Node: linux33959 Node: bsd35293 Node: darwin36747 Node: Reporting Bugs37134 Node: Copying This Manual37996 Node: Concept Index60426  End Tag Table direvent-5.2/doc/Makefile.in0000644000175000017500000007415113512402622016005 0ustar00graygray00000000000000# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 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 Direvent -*- autoconf -*- # Copyright (C) 2012-2016 Sergey Poznyakoff # # 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. # # 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 . 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)/acinclude.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 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@ 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@ 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@ 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@ 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_template\ gendocs.sh GENDOCS = $(srcdir)/gendocs.sh --no-copy-images --html '--init-file=$(abs_srcdir)/html.init' TEXI2DVI = texi2dvi -t '@set $(RENDITION)' 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__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ 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: $(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: TEXINPUTS=$(srcdir):$(top_srcdir)/build-aux:$(TEXINPUTS) \ MAKEINFO="$(MAKEINFO) $(MAKEINFOFLAGS) $(AM_MAKEINFOFLAGS)" \ TEXI2DVI="$(TEXI2DVI)" \ $(GENDOCS) $(PACKAGE) '$(PACKAGE_NAME) 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.2/doc/direvent.texi0000644000175000017500000012302612764623664016472 0ustar00graygray00000000000000\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-2016 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 * Copying This Manual:: The GNU Free Documentation License. * Concept Index:: Index of Concepts. @detailmenu @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 The generic events are: @table @asis @cindex create, generic event @item create A file was created. @cindex delete, generic event @item delete A file was deleted; @cindex write, generic event @item write A file was written to; @cindex attrib, generic event @item attrib File attributes have changed. This includes changes in the file ownership, mode, link count, etc. @end table @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, asteriscs, 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 @var{env-spec}; option @var{string-list}; @} @end group @end example Each @code{watcher} statement instructs @command{direvent} to monitor events listed in @var{event-list} occurring in the 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 @code{environ} statement is present in the watcher, the environment is 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. @xref{macro expansion}. @item If the @samp{shell} option is set, the handler is invoked via the shell, as @code{/bin/sh -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{macro 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:: * macro expansion:: * general settings:: * syslog:: * 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/@value{VERSION}/include} @item @file{@var{prefix}/share/direvent/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. Two or more adjacent quoted strings are concatenated, which gives another way to split long strings over several lines to improve readability. The following fragment produces the same result as the example above: @smallexample @group "a long string may be" " split over several lines" @end group @end smallexample @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 <. # # Original author: Mohit Agarwal. # Send bug reports and any other correspondence to bug-texinfo@gnu.org. # # The latest version of this script, and the companion template, is # available from Texinfo CVS: # http://savannah.gnu.org/cgi-bin/viewcvs/texinfo/texinfo/util/gendocs.sh # http://savannah.gnu.org/cgi-bin/viewcvs/texinfo/texinfo/util/gendocs_template # # An up-to-date copy is also maintained in Gnulib (gnu.org/software/gnulib). # TODO: # - image importation was only implemented for HTML generated by # makeinfo. But it should be simple enough to adjust. # - images are not imported in the source tarball. All the needed # formats (PDF, PNG, etc.) should be included. prog=`basename "$0"` srcdir=`pwd` scripturl="http://savannah.gnu.org/cgi-bin/viewcvs/~checkout~/texinfo/texinfo/util/gendocs.sh" templateurl="http://savannah.gnu.org/cgi-bin/viewcvs/~checkout~/texinfo/texinfo/util/gendocs_template" : ${SETLANG="env LANG= LC_MESSAGES= LC_ALL= LANGUAGE="} : ${MAKEINFO="makeinfo"} : ${TEXI2DVI="texi2dvi -t @finalout"} : ${DOCBOOK2HTML="docbook2html"} : ${DOCBOOK2PDF="docbook2pdf"} : ${DOCBOOK2TXT="docbook2txt"} : ${GENDOCS_TEMPLATE_DIR="."} : ${PERL='perl'} : ${TEXI2HTML="texi2html"} unset CDPATH unset use_texi2html version="gendocs.sh $scriptversion Copyright 2013 Free Software Foundation, Inc. There is NO warranty. You may redistribute this software under the terms of the GNU General Public License. For more information about these matters, see the files named COPYING." usage="Usage: $prog [OPTION]... PACKAGE MANUAL-TITLE Generate output in various formats from PACKAGE.texinfo (or .texi or .txi) source. See the GNU Maintainers document for a more extensive discussion: http://www.gnu.org/prep/maintain_toc.html Options: --email ADR use ADR as contact in generated web pages; always give this. -s SRCFILE read Texinfo from SRCFILE, instead of PACKAGE.{texinfo|texi|txi} -o OUTDIR write files into OUTDIR, instead of manual/. -I DIR append DIR to the Texinfo search path. --common ARG pass ARG in all invocations. --html ARG pass ARG to makeinfo or texi2html for HTML targets. --info ARG pass ARG to makeinfo for Info, instead of --no-split. --no-ascii skip generating the plain text output. --no-copy-images don't try to copy images referenced by img HTML tags, --source ARG include ARG in tar archive of sources. --split HOW make split HTML by node, section, chapter; default node. --texi2html use texi2html to make HTML target, with all split versions. --docbook convert through DocBook too (xml, txt, html, pdf). --help display this help and exit successfully. --version display version information and exit successfully. Simple example: $prog --email bug-gnu-emacs@gnu.org emacs \"GNU Emacs Manual\" Typical sequence: cd PACKAGESOURCE/doc wget \"$scripturl\" wget \"$templateurl\" $prog --email BUGLIST MANUAL \"GNU MANUAL - One-line description\" Output will be in a new subdirectory \"manual\" (by default; use -o OUTDIR to override). Move all the new files into your web CVS tree, as explained in the Web Pages node of maintain.texi. Please use the --email ADDRESS option so your own bug-reporting address will be used in the generated HTML pages. MANUAL-TITLE is included as part of the HTML of the overall manual/index.html file. It should include the name of the package being documented. manual/index.html is created by substitution from the file $GENDOCS_TEMPLATE_DIR/gendocs_template. (Feel free to modify the generic template for your own purposes.) If you have several manuals, you'll need to run this script several times with different MANUAL values, specifying a different output directory with -o each time. Then write (by hand) an overall index.html with links to them all. If a manual's Texinfo sources are spread across several directories, first copy or symlink all Texinfo sources into a single directory. (Part of the script's work is to make a tar.gz of the sources.) As implied above, by default monolithic Info files are generated. If you want split Info, or other Info options, use --info to override. You can set the environment variables MAKEINFO, TEXI2DVI, TEXI2HTML, and PERL to control the programs that get executed, and GENDOCS_TEMPLATE_DIR to control where the gendocs_template file is looked for. With --docbook, the environment variables DOCBOOK2HTML, DOCBOOK2PDF, and DOCBOOK2TXT are also consulted. By default, makeinfo and texi2dvi are run in the default (English) locale, since that's the language of most Texinfo manuals. If you happen to have a non-English manual and non-English web site, see the SETLANG setting in the source. Email bug reports or enhancement requests to bug-texinfo@gnu.org. " MANUAL_TITLE= PACKAGE= EMAIL=webmasters@gnu.org # please override with --email commonarg= # passed to all makeinfo/texi2html invcations. dirargs= # passed to all tools (-I dir). dirs= # -I's directories. htmlarg= infoarg=--no-split generate_ascii=true outdir=manual source_extra= split=default srcfile= no_copy_images= while test $# -gt 0; do case $1 in -s) shift; srcfile=$1;; -o) shift; outdir=$1;; -I) shift; dirargs="$dirargs -I '$1'"; dirs="$dirs $1";; --common) shift; commonarg=$1;; --docbook) docbook=yes;; --email) shift; EMAIL=$1;; --html) shift; htmlarg=$1;; --info) shift; infoarg=$1;; --no-ascii) generate_ascii=false;; --source) shift; source_extra=$1;; --split) shift; split=$1;; --texi2html) use_texi2html=1;; --no-copy-images) no_copy_images=1;; --help) echo "$usage"; exit 0;; --version) echo "$version"; exit 0;; -*) echo "$0: Unknown option \`$1'." >&2 echo "$0: Try \`--help' for more information." >&2 exit 1;; *) if test -z "$PACKAGE"; then PACKAGE=$1 elif test -z "$MANUAL_TITLE"; then MANUAL_TITLE=$1 else echo "$0: extra non-option argument \`$1'." >&2 exit 1 fi;; esac shift done # makeinfo uses the dirargs, but texi2dvi doesn't. commonarg=" $dirargs $commonarg" # For most of the following, the base name is just $PACKAGE base=$PACKAGE if test -n "$srcfile"; then # but here, we use the basename of $srcfile base=`basename "$srcfile"` case $base in *.txi|*.texi|*.texinfo) base=`echo "$base"|sed 's/\.[texinfo]*$//'`;; esac PACKAGE=$base elif test -s "$srcdir/$PACKAGE.texinfo"; then srcfile=$srcdir/$PACKAGE.texinfo elif test -s "$srcdir/$PACKAGE.texi"; then srcfile=$srcdir/$PACKAGE.texi elif test -s "$srcdir/$PACKAGE.txi"; then srcfile=$srcdir/$PACKAGE.txi else echo "$0: cannot find .texinfo or .texi or .txi for $PACKAGE in $srcdir." >&2 exit 1 fi if test ! -r $GENDOCS_TEMPLATE_DIR/gendocs_template; then echo "$0: cannot read $GENDOCS_TEMPLATE_DIR/gendocs_template." >&2 echo "$0: it is available from $templateurl." >&2 exit 1 fi # Function to return size of $1 in something resembling kilobytes. calcsize() { size=`ls -ksl $1 | awk '{print $1}'` echo $size } # copy_images OUTDIR HTML-FILE... # ------------------------------- # Copy all the images needed by the HTML-FILEs into OUTDIR. Look # for them in the -I directories. copy_images() { test -n "$no_copy_images" && return local odir odir=$1 shift $PERL -n -e " BEGIN { \$me = '$prog'; \$odir = '$odir'; @dirs = qw($dirs); } " -e ' /<img src="(.*?)"/g && ++$need{$1}; END { #print "$me: @{[keys %need]}\n"; # for debugging, show images found. FILE: for my $f (keys %need) { for my $d (@dirs) { if (-f "$d/$f") { use File::Basename; my $dest = dirname ("$odir/$f"); # use File::Path; -d $dest || mkpath ($dest) || die "$me: cannot mkdir $dest: $!\n"; # use File::Copy; copy ("$d/$f", $dest) || die "$me: cannot copy $d/$f to $dest: $!\n"; next FILE; } } die "$me: $ARGV: cannot find image $f\n"; } } ' -- "$@" || exit 1 } case $outdir in /*) abs_outdir=$outdir;; *) abs_outdir=$srcdir/$outdir;; esac echo "Making output for $srcfile" echo " in `pwd`" mkdir -p "$outdir/" cmd="$SETLANG $MAKEINFO -o $PACKAGE.info $commonarg $infoarg \"$srcfile\"" echo "Generating info... ($cmd)" rm -f $PACKAGE.info* # get rid of any strays eval "$cmd" tar czf "$outdir/$PACKAGE.info.tar.gz" $PACKAGE.info* ls -l "$outdir/$PACKAGE.info.tar.gz" info_tgz_size=`calcsize "$outdir/$PACKAGE.info.tar.gz"` # do not mv the info files, there's no point in having them available # separately on the web. cmd="$SETLANG $TEXI2DVI $dirargs \"$srcfile\"" printf "\nGenerating dvi... ($cmd)\n" eval "$cmd" # compress/finish dvi: gzip -f -9 $PACKAGE.dvi dvi_gz_size=`calcsize $PACKAGE.dvi.gz` mv $PACKAGE.dvi.gz "$outdir/" ls -l "$outdir/$PACKAGE.dvi.gz" cmd="$SETLANG $TEXI2DVI --pdf $dirargs \"$srcfile\"" printf "\nGenerating pdf... ($cmd)\n" eval "$cmd" pdf_size=`calcsize $PACKAGE.pdf` mv $PACKAGE.pdf "$outdir/" ls -l "$outdir/$PACKAGE.pdf" if $generate_ascii; then opt="-o $PACKAGE.txt --no-split --no-headers $commonarg" cmd="$SETLANG $MAKEINFO $opt \"$srcfile\"" printf "\nGenerating ascii... ($cmd)\n" eval "$cmd" ascii_size=`calcsize $PACKAGE.txt` gzip -f -9 -c $PACKAGE.txt >"$outdir/$PACKAGE.txt.gz" ascii_gz_size=`calcsize "$outdir/$PACKAGE.txt.gz"` mv $PACKAGE.txt "$outdir/" ls -l "$outdir/$PACKAGE.txt" "$outdir/$PACKAGE.txt.gz" fi # Split HTML at level $2 using program $1. Used for texi2html. html_split() { opt="--split=$2 --node-files $commonarg $htmlarg" cmd="$SETLANG $1 --output $PACKAGE.html $opt \"$srcfile\"" printf "\nGenerating html by $2... ($cmd)\n" eval "$cmd" split_html_dir=$PACKAGE.html ( cd ${split_html_dir} || exit 1 if test ! -e index.html; then if test -f ${PACKAGE}.html; then ln -sf ${PACKAGE}.html index.html else echo >&2 "$0: ${split_html_dir}/${PACKAGE}.html does not exist" fi fi tar -czf "$abs_outdir/${PACKAGE}.html_$2.tar.gz" -- *.html ) eval html_$2_tgz_size=`calcsize "$outdir/${PACKAGE}.html_$2.tar.gz"` rm -f "$outdir"/html_$2/*.html mkdir -p "$outdir/html_$2/" mv ${split_html_dir}/*.html "$outdir/html_$2/" rmdir ${split_html_dir} } if test -z "$use_texi2html"; then opt="--no-split --html -o $PACKAGE.html $commonarg $htmlarg" cmd="$SETLANG $MAKEINFO $opt \"$srcfile\"" printf "\nGenerating monolithic html... ($cmd)\n" rm -rf $PACKAGE.html # in case a directory is left over eval "$cmd" html_mono_size=`calcsize $PACKAGE.html` gzip -f -9 -c $PACKAGE.html >"$outdir/$PACKAGE.html.gz" html_mono_gz_size=`calcsize "$outdir/$PACKAGE.html.gz"` copy_images "$outdir/" $PACKAGE.html mv $PACKAGE.html "$outdir/" ls -l "$outdir/$PACKAGE.html" "$outdir/$PACKAGE.html.gz" version=`makeinfo --version|sed -n '1s/.* \([0-9][0-9]*\)\.[0-9.]*/\1/p'` case $version in [0-9]*) ;; *) version=4;; esac # Before Texinfo 5.0, makeinfo did not accept a --split=HOW option, # it just always split by node. So if we're splitting by node anyway, # leave it out. if test $version -lt 5 -o "x$split" != xdefault; then split_arg=--split=$split opt="--html -o $PACKAGE.html $split_arg $commonarg $htmlarg" cmd="$SETLANG $MAKEINFO $opt \"$srcfile\"" printf "\nGenerating html by $split... ($cmd)\n" eval "$cmd" split_html_dir=$PACKAGE.html copy_images $split_html_dir/ $split_html_dir/*.html ( cd $split_html_dir || exit 1 tar -czf "$abs_outdir/$PACKAGE.html_$split.tar.gz" -- * ) eval \ html_${split}_tgz_size=`calcsize "$outdir/$PACKAGE.html_$split.tar.gz"` rm -rf "$outdir/html_$split/" mv $split_html_dir "$outdir/html_$split/" du -s "$outdir/html_$split/" ls -l "$outdir/$PACKAGE.html_$split.tar.gz" CONDS="/%%IF *HTML_SECTION%%/,/%%ENDIF *HTML_SECTION%%/d;\ /%%IF *HTML_CHAPTER%%/,/%%ENDIF *HTML_CHAPTER%%/d" else html_split "$MAKEINFO --html" node html_split "$MAKEINFO --html" chapter html_split "$MAKEINFO --html" section # should take account of --split here. CONDS="/%%ENDIF.*%%/d;/%%IF *HTML_SECTION%%/d;/%%IF *HTML_CHAPTER%%/d" fi else # use texi2html: opt="--output $PACKAGE.html $commonarg $htmlarg" cmd="$SETLANG $TEXI2HTML $opt \"$srcfile\"" printf "\nGenerating monolithic html with texi2html... ($cmd)\n" rm -rf $PACKAGE.html # in case a directory is left over eval "$cmd" html_mono_size=`calcsize $PACKAGE.html` gzip -f -9 -c $PACKAGE.html >"$outdir/$PACKAGE.html.gz" html_mono_gz_size=`calcsize "$outdir/$PACKAGE.html.gz"` mv $PACKAGE.html "$outdir/" html_split "$TEXI2HTML" node html_split "$TEXI2HTML" chapter html_split "$TEXI2HTML" section CONDS="/%%ENDIF.*%%/d;/%%IF *HTML_SECTION%%/d;/%%IF *HTML_CHAPTER%%/d" fi printf "\nMaking .tar.gz for sources...\n" d=`dirname $srcfile` ( cd "$d" srcfiles=`ls -d *.texinfo *.texi *.txi *.eps $source_extra 2>/dev/null` || true tar czfh "$abs_outdir/$PACKAGE.texi.tar.gz" $srcfiles ls -l "$abs_outdir/$PACKAGE.texi.tar.gz" ) texi_tgz_size=`calcsize "$outdir/$PACKAGE.texi.tar.gz"` if test -n "$docbook"; then opt="-o - --docbook $commonarg" cmd="$SETLANG $MAKEINFO $opt \"$srcfile\" >${srcdir}/$PACKAGE-db.xml" printf "\nGenerating docbook XML... ($cmd)\n" eval "$cmd" docbook_xml_size=`calcsize $PACKAGE-db.xml` gzip -f -9 -c $PACKAGE-db.xml >"$outdir/$PACKAGE-db.xml.gz" docbook_xml_gz_size=`calcsize "$outdir/$PACKAGE-db.xml.gz"` mv $PACKAGE-db.xml "$outdir/" split_html_db_dir=html_node_db opt="$commonarg -o $split_html_db_dir" cmd="$DOCBOOK2HTML $opt \"${outdir}/$PACKAGE-db.xml\"" printf "\nGenerating docbook HTML... ($cmd)\n" eval "$cmd" ( cd ${split_html_db_dir} || exit 1 tar -czf "$abs_outdir/${PACKAGE}.html_node_db.tar.gz" -- *.html ) html_node_db_tgz_size=`calcsize "$outdir/${PACKAGE}.html_node_db.tar.gz"` rm -f "$outdir"/html_node_db/*.html mkdir -p "$outdir/html_node_db" mv ${split_html_db_dir}/*.html "$outdir/html_node_db/" rmdir ${split_html_db_dir} cmd="$DOCBOOK2TXT \"${outdir}/$PACKAGE-db.xml\"" printf "\nGenerating docbook ASCII... ($cmd)\n" eval "$cmd" docbook_ascii_size=`calcsize $PACKAGE-db.txt` mv $PACKAGE-db.txt "$outdir/" cmd="$DOCBOOK2PDF \"${outdir}/$PACKAGE-db.xml\"" printf "\nGenerating docbook PDF... ($cmd)\n" eval "$cmd" docbook_pdf_size=`calcsize $PACKAGE-db.pdf` mv $PACKAGE-db.pdf "$outdir/" fi printf "\nMaking index file...\n" curdate=`$SETLANG date '+%B %d, %Y'` sed \ -e "s!%%TITLE%%!$MANUAL_TITLE!g" \ -e "s!%%EMAIL%%!$EMAIL!g" \ -e "s!%%PACKAGE%%!$PACKAGE!g" \ -e "s!%%DATE%%!$curdate!g" \ -e "s!%%HTML_MONO_SIZE%%!$html_mono_size!g" \ -e "s!%%HTML_MONO_GZ_SIZE%%!$html_mono_gz_size!g" \ -e "s!%%HTML_NODE_TGZ_SIZE%%!$html_node_tgz_size!g" \ -e "s!%%HTML_SECTION_TGZ_SIZE%%!$html_section_tgz_size!g" \ -e "s!%%HTML_CHAPTER_TGZ_SIZE%%!$html_chapter_tgz_size!g" \ -e "s!%%INFO_TGZ_SIZE%%!$info_tgz_size!g" \ -e "s!%%DVI_GZ_SIZE%%!$dvi_gz_size!g" \ -e "s!%%PDF_SIZE%%!$pdf_size!g" \ -e "s!%%ASCII_SIZE%%!$ascii_size!g" \ -e "s!%%ASCII_GZ_SIZE%%!$ascii_gz_size!g" \ -e "s!%%TEXI_TGZ_SIZE%%!$texi_tgz_size!g" \ -e "s!%%DOCBOOK_HTML_NODE_TGZ_SIZE%%!$html_node_db_tgz_size!g" \ -e "s!%%DOCBOOK_ASCII_SIZE%%!$docbook_ascii_size!g" \ -e "s!%%DOCBOOK_PDF_SIZE%%!$docbook_pdf_size!g" \ -e "s!%%DOCBOOK_XML_SIZE%%!$docbook_xml_size!g" \ -e "s!%%DOCBOOK_XML_GZ_SIZE%%!$docbook_xml_gz_size!g" \ -e "s,%%SCRIPTURL%%,$scripturl,g" \ -e "s!%%SCRIPTNAME%%!$prog!g" \ -e "$CONDS" \ $GENDOCS_TEMPLATE_DIR/gendocs_template >"$outdir/index.html" echo "Done, see $outdir/ subdirectory for new files." # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/ChangeLog������������������������������������������������������������������������������0000644�0001750�0001750�00000124233�13512403133�014740� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������2019-07-13 Sergey Poznyakoff <gray@gnu.org> Version 5.2 2019-07-10 Sergey Poznyakoff <gray@gnu.org> Switch to grecs b06fb7d3 2016-08-25 Sergey Poznyakoff <gray@gnu.org> Update the documentation 2016-08-25 Sergey Poznyakoff <gray@gnu.org.ua> Get rid of hashtab.c, use symtab from grecs instead. * grecs: Pull new version. * src/hashtab.c: Remove. * po/POTFILES.in: Remove src/hashtab.c * src/Makefile.am (direvent_SOURCES): Remove hashtab.c * src/config.c (grecs_parser_options): Set GRECS_OPTION_QUOTED_STRING_CONCAT. * src/direvent.h: Remove hashtab prototypes. * src/event.c: Use grecs_symtab. * src/watcher.c: Likewise. Rename a test case * tests/Makefile.am: Update. * tests/testsuite.at: Update. * tests/conv.at: Rename to tests/file.at Fix new functionality on BSD hosts. Some minor fixes. * src/direvent.c (main): Call watchpoint_gc in the main loop. * src/direvent.h (watchpoint) <isdir>: New member. (deliver_ev_create,subwatcher_create): Change signature. * src/ev_kqueue.c (sysev_add_watch): Always monitor NOTE_DELETE. (process_event): Special handling for file deletion. * src/handler.c (handler_list_remove): Return the number of elements remaining in the list. * src/hashtab.c (hashtab_remove): Ignore unexisting entries * src/progman.c (close_fds): Determine the highest used fd by dup'ing standard input. * src/watcher.c (watchpoint_install): Always increase refcnt. (watchpoint_gc_list): New variable. (watchpoint_gc): Iterate over watchpoint_gc_list deleting elements from it. (watchpoint_suspend): Install sentinels only for top-level watchpoints that were removed. (sentinel_handler_run): Deliver the create event. (watchpoint_install_sentinel): Monitor generic create event. (convert_watcher): Remove. (subwatcher_create): Remove the isdir parameter. (watch_subdirs): Exit early if the watchpoint is not a directory. (deliver_ev_create): Change signature. Take both directory and file name as arguments. All uses changes. * tests/conv.at: Clear expected stderr. * tests/sent.at: Fix race condition. Add new tests + minor fixes. * src/direvent.h (filpatlist_is_empty): New proto. * src/fnpat.c (filpatlist_is_empty): New function. * src/watcher.c (convert_watcher): Fix error handling. (watchpoint_init): Remove spurious notice. * tests/conv.at: New test. * tests/sent.at: New test. * tests/Makefile.am: Add new tests. * tests/testsuite.at: Likewise. Further modify struct handler. Instead of accomodating two types of functionality, the new struct handler has a pointer to the function that is responsible for handling the event, and a pointer to data for that function (closure). Additionally, a pointer to deallocator function is also provided. Existing functionality is reimplemented using this new struct. New types of handlers can easily be added. * src/config.c (eventconf)<ev_mask,fpat,prog_handler>: New members <handler>: Remove. All uses changed. * src/direvent.h (filpatlist_t) (event_handler_fn, handler_free_fn): New data types. (handler): Remove union and type. Add two pointer to functions that are to implement the functionality (run and free) and a pointer to data for them. (prog_handler): New struct. (prog_handler_alloc,prog_handler_free) (prog_handler_envrealloc) (watchpoint_run_handlers): New protos. (run_handler,filename_pattern_free) (filename_pattern_match): Remove (filpatlist_add, filpatlist_add_exact) (filpatlist_destroy, filpatlist_match): New protos. * src/ev_inotify.c (process_event): Use watchpoint_run_handlers * src/ev_kqueue.c: Likewise. * src/fnpat.c: Major rewrite. * src/handler.c (handler_copy) (handler_envrealloc,handler_add_pattern) (handler_add_exact_filename): Remove (handler_alloc): Change arguments. (watchpoint_run_handlers): New function. * src/progman.c (prog_handler_alloc) (prog_handler_envrealloc): New functions. * src/watcher.c: Reimplement sentinel watchers. Rename: struct dirwatcher -> struct watchpoint Implement sentinel handlers. Sentinel handlers wait for a creation of a directory. When the target directory is created, the sentinel handler installs the actual handler for that directory and destroys itself. Thus, basically sentinel handlers provide a way to defer setting a watchpoint on a directory until it is created. * src/handler.c: New source. * src/Makefile.am (direvent_SOURCES): Add handler.c * src/config.c: Move handler-specific stuff to handler.c * src/direvent.h: Rename direvent_handler_ to handler_ (handler_free, handler_copy) (handler_envrealloc) (dirwatcher_init,dirwatcher_gc): New protos. (dirwatcher_install_ptr) (dirwatcher_install_sentinel): New protos. * src/ev_inotify.c (process_event): Special handling for IN_IGNORED. (sysev_select): Ignore signo==0. * src/hashtab.c (hashtab_remove): Add missing return statement. (hashtab_foreach): Break out of look instead of returning from it. * src/progman.c (run_sentinel): Implement. * src/watcher.c (+dirwatcher_install_ptr): New function. (dirwatcher_gc): New function. Bugfix * src/hashtab.c (hashent_list_append): Fix allocated memory size. Initial preparation for having distinct handler types. * src/direvent.h (pattern_type): New enum, instead of PAT_* defines. (filename_pattern): use enum pattern_type. (handler_type): New enum. (handler): Can be of two types: HANDLER_EXTERN, which handles external programs and is equivalent to the prior content of the structure, and HANDLER_SENTINEL, which is planned to be a built-in handler for configuring watchpoints for newly created directories. All uses changed. (dirwatcher) <refcnt>: Change type to size_t. (handler_alloc,handler_add_pattern) (handler_add_exact_filename): New protos. * src/hashtab.c: Provisions for safe adding and removing from the hashtable when iterating over it. (hashtab) <flags>: Removed. <itr_level, list_new, list_del>: New members. (hashtab_remove): When iterating, place pointer to the removed entry in list_del instead of actually removing it. (hashtab_lookup_or_install): When iterating, add a pointer to the newly created entry to the list_new list, instead of adding it immediately. (hashtab_foreach): Flush list_del and list_new at the end of the topmost iteration. * src/config.c (handler_alloc): Rename to handler_copy (handler_alloc): New function. (handler_free): Two types of handlers. (handler_add_pattern) (handler_add_exact_filename): New functions. (file_name_pattern): Takes struct handler * as its first argument. (cb_file_pattern): Change accordingly. * src/fnpat.c (filename_pattern_free): Handle PAT_EXACT. (filename_pattern_match): Likewise. * src/progman.c (run_handler): Two types of handlers. * src/watcher.c (dirwatcher_install): Restore missing gettext marker. Allocate handler_list. (dirwatcher_init): Convert non-directory watchpoints to directory ones. 2016-08-20 Sergey Poznyakoff <gray@gnu.org> Fix environment modification code Port fixes from rush 2016-08-13 Sergey Poznyakoff <gray@gnu.org> Clean-up handler initialization routines. In particular, this change allows for placing several environ statements in a single watcher statement. Such environ statements accumulate. * src/config.c (eventconf): Simplify the structure. (handler_alloc): Take a pointer to struct handler as argument. (handler_envrealloc): New function. (handler_free): Rename to handler_listent_free. All uses updated. (handler_free): New function. (eventconf_flush,cb_option,cb_user): Reflect changes to struct eventconf (cb_environ): Likewise. Reallocate env as necessary. * doc/direvent.texi: Document the change. * NEWS: Document the changes. Limit memory usage. Don't create duplicates of handler structs for each pathname watched. Instead keep a count of references to each handler and handler list and deallocate them when the count falls to zero. * src/config.c (direvent_handler_list): New struct. (direvent_handler_first,direvent_handler_next) (direvent_handler_current) (direvent_handler_list_create) (direvent_handler_list_copy) (direvent_handler_list_unref) (direvent_handler_list_append): New functions. (eventconf_flush): Create a single copy of watcher. * src/direvent.c (main): Call shutdown_watchers before terminating. * src/direvent.h (handler) <next>: Remove. <refcnt>: New member. <prog>: Remove const qualifier. (direvent_handler_list_t) (direvent_handler_iterator_t): New data types. (dirwatcher): Remove handler_tail. Change type of handler_list to direvent_handler_list_t. (shutdown_watchers) (direvent_handler_first,direvent_handler_next) (direvent_handler_current) (direvent_handler_list_create) (direvent_handler_list_copy) (direvent_handler_list_unref) (direvent_handler_list_append): New protos. (for_each_handler): New define. * src/watcher.c (dirwatcher_unref): Call direvent_handler_list_unref. (all functions): Use handler iterators where necessary (shutdown_watchers): New function. * src/ev_inotify.c: Use handler iterators. * src/ev_kqueue.c: Likewise. Fix comments 2016-08-12 Sergey Poznyakoff <gray@gnu.org.ua> Version 5.1.90 * NEWS: Update. * configure.ac: Update. * src/watcher.c (setwatcher): Fix conditional. * src/direvent.h (dirwatcher_pattern_match): Add missing prototype. Don't keep watchpoint descriptor table During the lifetime of a watcher, its descriptor can change, so it cannot be reliably used to identify the watcher outside of the ev_*.c module. E.g. for kqueue interface, descriptors change after compacting the event table, which happens when a watcher is closed and removed. Finding the watcher for the given event is now the responsibility of the event module. * src/direvent.h (dirwatcher_ref) (dirwatcher_unref): New protos. (dirwatcher_lookup_wd): Remove. * src/watcher.c (dirwatcher_ref): New function. (dirwatcher_register, dirwatcher_lookup_wd) (dirwatcher_remove_wd): Remove. All uses updated. (setwatcher): Indicate successful initialization for the caller. (setup_watchers): Check success flag. * src/ev_inotify.c (dwreg, dwunreg) (dwget): New functions to keep track of the registered watchers and their descriptors. (sysev_add_watch): Register watcher. (sysev_rm_watch): Deregister it. * src/ev_kqueue.c (check_created): Skip directory entries that don't match pattern. 2016-08-11 Sergey Poznyakoff <gray@gnu.org.ua> Bugfixes * src/Makefile.am (AM_CPPFLAGS): Define SYSCONFDIR. * src/direvent.c (mkfilename): Don't append trailing / if filename is empty. * src/direvent.h (hashtab_count_entries): Remove. * src/ev_inotify.c (process_event): Translate IN_IGNORED to IN_DELETE. Remove the watcher only after all handlers have been invoked. * src/hashtab.c (hashtab) <elcount>: New member. Keep the number of actually used elements. (hashtab_remove, hashtab_lookup_or_install) (hashtab_create,hashtab_clear): Keep track of the number of actually used elements. (hashtab_count_entries): Remove duplicate function. (hashtab_count): Return elcount without recomputing. * src/watcher.c (texttab): Rename to nametab for clarity. (dirwatcher_pattern_match): New function. (watch_subdirs): Ignore subdirs that don't match file name pattern. (dirwatcher_destroy): Exit immediately if no more watchers are left. 2016-07-06 Sergey Poznyakoff <gray@gnu.org.ua> Version 5.1 2016-07-04 Sergey Poznyakoff <gray@gnu.org.ua> Remove unused variables Use latest commit of grecs Update copyright years 2016-06-20 Sergey Poznyakoff <gray@gnu.org> Update grecs Make sure descriptor 0 is allocated before calling detach. * grecs: Upgrade to 9161098. Bugfix * configure.ac (INCLUDE_PATH_ARGS): Quote definition for shell Implement search path for #include and #include_once. * src/Makefile.am (AM_CPPFLAGS): Define INCLUDE_PATH_ARGS * src/cmdline.opt: New option --include-directory (-I). (help_hook): Print the actual content of the include search path. * src/config.c (config_finish): Remove. (config_init): New function. Set up include search path. (config_parse): New function. * src/direvent.c (main): Call config_init and config_parse. * src/direvent.h (config_finish): Remove. (config_init,config_parse): New proto. * grecs: Upgrade. * NEWS: Document changes. * README: Document the --with-include-path option. * configure.ac: New option --with-include-path. * doc/direvent.8: Document the -I option and include search paths. * doc/direvent.conf.5: Document include search paths. * doc/direvent.texi: Document the -I option and include search paths. 2016-06-18 Sergey Poznyakoff <gray@gnu.org> New option to invoke handlers via /bin/sh * src/config.c (cb_option): New option 'shell'. * src/direvent.h (HF_SHELL): New flag. * src/progman.c (runcmd): Optionally run program via /bin/sh * NEWS: Mention new option. * doc/direvent.conf.5: Document the 'shell' option. * grecs: Update. * tests/shell.at: New test case. * tests/Makefile.am: Add new test. * tests/testsuite.at: Add new test. Globbing patterns in #include and #include_once * grecs: Update. * src/direvent.c (main): Allocate tag to avoid coredump if redefined in the config. * tests/re05.at: Escape backslash. * NEWS: Update. * doc/direvent.conf.5: Update. * doc/direvent.texi: Update. 2015-04-23 Sergey Poznyakoff <gray@gnu.org.ua> Fix doc generation. Default Config file applied to all output formats, which is wrong. Use a dedicated configuration file for html output formats, and defaults for the rest. * doc/Makefile.am (GENDOCS): Add html-specific configuration file. * doc/Config: Rename to doc/html.init (with changes). 2015-04-16 Sergey Poznyakoff <gray@gnu.org.ua> Version 5.0.90 2015-03-01 Sergey Poznyakoff <gray@gnu.org> Switch to Texinfo 5.0 * doc/Config: Rewrite. * doc/Makefile.am: Use Makeinfo 5 instead of texi2htm * doc/gendocs_template: Ps is not built * imprimatur: Upgrade. 2014-09-18 Sergey Poznyakoff <gray@gnu.org.ua> Minor documentation fixes. * doc/direvent.8: Escape dashes in examples. * doc/direvent.conf.5: Likewise. * doc/direvent.texi: Reword copyright statement (part about covers). 2014-09-06 Sergey Poznyakoff <gray@gnu.org> Version 5.0 2014-09-06 Sergey Poznyakoff <gray@gnu.org.ua> Add new test * tests/samepath.at: New file. * tests/Makefile.am: Add new testcase. * tests/testsuite.at: Likewise. * NEWS: Update * README: Update 2014-09-01 Sergey Poznyakoff <gray@gnu.org> Version 4.1.91 Improve I18N * po/POTFILES.in: Add grecs sources. * src/Makefile.am (AM_CPPFLAGS): Add the definition of LOCALEDIR. * src/cmdline.opt (help_hook): Add missing gettext markers. * src/direvent.c (maint): Initialize libintl 2014-09-01 Sergey Poznyakoff <gray@gnu.org.ua> Improve and document self-test mode * src/direvent.c (self_test): Run the program as /bin/sh -c program. * doc/direvent.texi: Document self-test mode and missing options. * doc/direvent.8: Document self-test. * doc/direvent.conf.5: Likewise. * src/cmdline.opt: Fix option declarations. 2014-09-01 Sergey Poznyakoff <gray@gnu.org> bootstrap: add option to get update po files and exit 2014-08-31 Sergey Poznyakoff <gray@gnu.org> Accept multpile watchers for the same path * src/direvent.h (dirwatcher)<handler_tail>: New member. * src/config.c (eventconf_flush): Use handler_tail to update the handler list. Remove erroneous check. 2014-08-27 Sergey Poznyakoff <gray@gnu.org> Minor changes * src/direvent.c (get_user_groups): Fix typo in a diagnostic message. bootstrap: download po files 2014-08-25 Sergey Poznyakoff <gray@gnu.org> Update NEWS Upgrade grecs I18N * .gitignore: Add am * bootstrap: Create am, unless exists. * Makefile.am (SUBDIRS): Add po * acinclude.m4: New file. * configure.ac: Use gettext * doc/direvent.texi: Update * po/.gitignore: New file * po/POTFILES.in: New file. * po/Makevars: New file. * src/Makefile.am (LDADD): Add @LIBINTL@ (noinst_HEADERS): Add gettext.h * src/config.c: gettextize * src/direvent.c: Likewise. * src/environ.c: Likewise. * src/hashtab.c: Likewise. * src/progman.c: Likewise. * src/watcher.c: Likewise. * src/gettext.h: New file. * src/direvent.h: Add missing prototypes. * tests/re05.at: Remove superfluous quoting. 2014-08-22 Sergey Poznyakoff <gray@gnu.org> Update docs 2014-08-21 Sergey Poznyakoff <gray@gnu.org> Minor fix in docs Direvent is dubbed GNU program * configure.ac: Change package name to GNU Direvent * doc/direvent.8: Reflect we are GNU * doc/direvent.texi: Likewise. * src/cmdline.opt: Likewise. 2014-08-17 Sergey Poznyakoff <gray@gnu.org> Rewrite testsuite. Get rid of the kludgy waitpid; use the built-in self-test mode instead. * src/cmdline.opt: New option --self-test. * src/direvent.c (self_test_prog,self_test_pid) (exit_code): New globals. (self_test): New function. (main): Call self_test if required. If stop is set, break the loop immediately. Return exit_code. * src/direvent.h (stop,self_test_pid,exit_code): New externs. * src/environ.c (environ_setup): Always define DIREVENT_SELF_TEST_PID when in self-test mode. * src/progman.c (process_cleanup): Special handling for termination of the self-test script. (runcmd): Define self_test_pid envvar in self-test mode. * tests/Makefile.am: Remove waitpid. * tests/waitfile.c: Removed. * tests/printname: Send HUP to the self-test PID if sentinel file is created. * tests/envdump.c (read_pid_and_sig): Restore arg to its pristine state before exiting. * tests/testsuite.at (AT_DIREVENT_TEST): New macro. * tests/attrib.at: Rewrite using AT_DIREVENT_TEST. * tests/cmdexp.at: Likewise. * tests/create.at: Likewise. * tests/createrec.at: Likewise. * tests/delete.at: Likewise. * tests/env00.at: Likewise. * tests/env01.at: Likewise. * tests/env02.at: Likewise. * tests/env03.at: Likewise. * tests/glob01.at: Likewise. * tests/glob02.at: Likewise. * tests/re01.at: Likewise. * tests/re02.at: Likewise. * tests/re03.at: Likewise. * tests/re04.at: Likewise. * tests/re05.at: Likewise. * tests/write.at: Likewise. * grecs (untracked content) Rename project to direvent. 2014-08-10 Sergey Poznyakoff <gray@gnu.org> Version 4.1.90 * NEWS: Change version number * configure.ac: Likewise. * doc/dircond.conf.5: Update copyright years. * doc/dircond.texi: Update copyright years. * src/config.c: Update copyright years. * src/dircond.h: Update copyright years. * src/fnpat.c: Update copyright years. * tests/envdump.c: Update copyright years. 2014-07-29 Sergey Poznyakoff <gray@gnu.org> Introduce pattern negation. * doc/dircond.conf.5: Document negated patterns. * doc/dircond.texi: Likewise. * src/config.c (file_name_pattern): A ! in front of a pattern indicates negation. * src/dircond.h (filename_pattern)<neg>: New member. * src/fnpat.c: Honor neg member. * tests/envdump.c (main): don't depend on the order of command line options. * tests/glob02.at: New test case. * tests/re05.at: Likewise. * tests/Makefile.am: Add new files. * tests/testsuite.at: Include new testcases. 2013-12-27 Sergey Poznyakoff <gray@gnu.org.ua> Remove trailing tabs in doc/dircond.8 Update gendocs_template Update dircond.conf.5 Version 4.1 * NEWS: Document new release. * Makefile.am * configure.ac: Enable silent rules. Set version number 4.1 * doc/Makefile.am: Add copyleft header. * src/Makefile.am: Likewise. * tests/Makefile.am: Add missing silent rule markers. Fix documentation of the "file" statement. Implement filename selection * NEWS: Update. * doc/dircond.texi: Document the file statement. * src/fnpat.c: New file. * src/Makefile.am (dircond_SOURCES): Add fnpat.c * src/config.c (eventconf) <fnames>: New member. (eventconf_free): Free fnames. (eventconf_flush): Set fnames. (watcher_kw) <file>: New statement. * src/dircond.h (filename_pattern): New struct. (handler) <fnames>: New member. (handler_matches_event): New macro. (filename_pattern_free) (filename_pattern_match): New proto. * src/ev_inotify.c (process_event): Use handler_matches_event. * src/ev_kqueue.c: Likewise. * src/watcher.c (deliver_ev_create): Likewise. * tests/Makefile.am: Add new tests. * tests/testsuite.at: Likewise. * tests/create.at: Add a distinctive keyword. * tests/glob01.at: New testcase. * tests/re01.at: New testcase. * tests/re02.at: Likewise. * tests/re03.at: Likewise. * tests/re04.at: Likewise. 2013-12-17 Sergey Poznyakoff <gray@gnu.org> Upgrade grecs 2013-10-02 Sergey Poznyakoff <gray@gnu.org.ua> Fix the testsuite, bump version number * configure.ac: Update version number. * NEWS: Update version number. * tests/Makefile.am: Distribute printname. * tests/printname: New file. * tests/atlocal.in (SRCDIR): New variable. * tests/createrec.at: Fix path to printname. 2013-09-29 Sergey Poznyakoff <gray@gnu.org.ua> Generate genev_create event for subdirectories. A genev_create event is generated for all files and directories below the newly created one, if required by the configuration. At the same time, new watchers are installed. This is illustrated by the testcase "createrec.at", which version 4.0 wouldn't pass, because it incorrectly assumed that a notification would arrive for each subdirectory or subfile, once the watcher is installed for the parent directory. * src/watcher.c (subwatcher_create): Return integer. Take additional argument (notify). If it is true, register watchers for the subdirectories. (deliver_ev_create): New function. (watch_subdirs): Return number of watchers installed or -1 on error. (watch_pathname): Remove. All callers use subwatcher_create instead. * tests/Makefile.am: Add new test. * tests/testsuite.at: Likewise. * tests/attrib.at: Use pwd -P, instead of plain pwd. * tests/cmdexp.at: Likewise. * tests/create.at: Likewise. * tests/delete.at: Likewise. * tests/env00.at: Likewise. * tests/env01.at: Likewise. * tests/env02.at: Likewise. * tests/env03.at: Likewise. * tests/write.at: Likewise. 2013-09-15 Sergey Poznyakoff <gray@gnu.org.ua> Minor fixes in the docs. 2013-06-05 Sergey Poznyakoff <gray@gnu.org.ua> Fix typos in manpages Update scripts for generating documentation output. 2013-06-04 Sergey Poznyakoff <gray@gnu.org.ua> Update dircond manpage Finish the docs. Set version number 4.0. Change bug-report address. Update docs. * NEWS: Update. * doc/dircond.conf.5: Update. * doc/dircond.texi: Update. * src/config.c (cb_watcher): Treat missing "event" statement as "all events". * src/dircond.h (evtsetall): New prototype. * src/event.c (evtsetall): New function. * src/environ.c: Minor fix. inotify: fix definition of the generic write event * src/ev_inotify.c (genev_xlat): Translate IN_MODIFY|IN_CLOSE_WRITE to GENEV_WRITE. Update docs 2013-06-03 Sergey Poznyakoff <gray@gnu.org.ua> Reorganize namespace. Revamp initialization system in a cleaner way. * src/Makefile.am: Use the proper detach-*.c source depending on the configuration output. * src/rdaemon.c: Remove. * src/detach-std.c: New file. * src/detach-bsd.c: New file. * src/detach-darwin.c: New file. * src/dircond.c (signal_setup): Use sigv_set_all. (sigmain): Do not reinstall the handler. (main): Use detach() instead of daemon(). * src/dircond.h (detach): New proto. (NITEMS): New macro. (sigv_set_action, sigv_set_all) (sigv_set_tab, sigv_set_action_tab): New protos. * src/sigv.c: New file. * tests/waitfile.c: Remove unused variable. * doc/dircond.8: Update. * doc/dircond.texi: Update. Improve docs 2013-06-02 Sergey Poznyakoff <gray@gnu.org.ua> Fix a copy-paste error. Write the docs in manpage format: * doc/.gitignore * doc/Makefile.am: Add rules for texinfo documents. * doc/dircond.1: Removed. * doc/dircond.8: New file. * doc/dircond.conf.5: New file. * doc/dircond.texi: New file (a placeholder). * doc/fdl.texi: New file. * doc/gendocs_template: New file. Rename event variables and the corresponding environment ones: * src/environ.c * src/dircond.c * src/progman.c * tests/.gitignore * tests/attrib.at * tests/cmdexp.at * tests/create.at * tests/delete.at * tests/env00.at * tests/env01.at * tests/env03.at * tests/remove.at * tests/write.at 2013-06-01 Sergey Poznyakoff <gray@gnu.org.ua> Bugfix * src/dircond.c (vdiag): Fix memory allocation Uograde grecs Upgrade grecs Initial support for Darwin. Basically the same as BSD, except that it lacks rfork, which makes it impossible to initialize watchers before daemonizing. * configure.ac: Check for rfork, define the DIRCOND_FORK conditional if present. * src/Makefile.am [DIRCOND_KQUEUE][DIRCOND_RFORK]: Add rdaemon.c to the sources. * src/dircond.c: Define INIT_EARLY if it is safe to initialize the event system before forking. Currently the only supported system that's not capable of that is Darwin. (main): Call setup_watchers conditionally, before or after the call to daemon. Move call to evsys_init to setup_watchers. Reorganize the main loop. * src/dircond.h (event_mask_init): Change signature. The third argument specifies which mask bits we're interested in. All uses changed. * src/event.c: Ditto. * src/watcher.c (setup_watchers): Call evsys_init. Test environment modifications. * src/config.c (cb_environ): Accept list argument. * tests/Makefile.am: Add new tests. * tests/testsuite.at: Add new tests. * tests/env00.at: New file. * tests/env01.at: New file. * tests/env02.at: New file. * tests/env03.at: New file. Test command line expansions. * envdump.c: Accept unrecognized command line parameters. Use -f option to redirect output to a file. All uses updated. * cmdexp.at: New file. * Makefile.am: Add cmdexp.at * testsuite.at: Include cmdexp.at Fix CREATE detection with kqueue. * src/ev_kqueue.c (check_created): Fall back to hash lookup to see if the file is recently created. * tests/create.at: Remove the sleep. Wait for the pidfile to appear before proceding with the test. * tests/delete.at: Wait for the pidfile to appear before proceding with the test. * tests/remove.at: Likewise. * tests/write.at: Likewise. Minor fixes. Minor fixes Fix daemon mode on BSD. Provide a testsuite. * configure.ac: Initialize the testsuite. * src/Makefile.am [DIRCOND_KQUEUE] (dircond_SOURCES): Add rdaemon.c * src/rdaemon.c: New file. * src/cmdline.opt: New option -l. * src/config.c (get_priority): New function. * src/dircond.c (log_to_stderr): New variable. (vdiag): Optionally output the message both to stderr and syslog. (stop): New global. (sigmain): Set stop. (main): Initialize logging early. Loop until stop is set. Remove pidfile before returning. * src/dircond.h (read_facility): Remove. (get_facility,get_priority): New protos. * src/ev_kqueue.c (evsys_select): Fix error handling. * tests/.gitignore: New file. * tests/Makefile.am: Provide autotest framework. * tests/atlocal.in: New file. * tests/attrib.at: New file. * tests/create.at: New file. * tests/delete.at: New file. * tests/remove.at: New file. * tests/testsuite.at: New file. * tests/envdump.c: Add more features. * tests/waitfile.c: New file. Add tests directory. * Makefile.am (SUBDIRS): Add tests * configure.ac: Build tests/Makefile. * tests/.gitignore: New file * tests/Makefile.am: New file. * tests/envdump.c: New file. Minor fixes * src/cmdline.opt (help_hook): Change wording. * src/config.c (config_help): Fix a typo. * src/dircond.c (signal_setup): Include SIGCHLD (main): Reset grecs_log_to_stderr. * src/progman.c (run_handler): SIGCHLD is handled by signal_setup. Improve command line handling. * configure.ac (GRECS_SETUP): Request getopt. * src/.gitignore: Add cmdline.h * src/cmdline.opt: New file. * src/Makefile.am: Add new rules. * src/config.c: New statement "user". * src/dircond.c: Change command line handling. Control execution environment and handler arguments. * src/environ.c: New file. * src/Makefile.am: Add environ.c * src/config.c: Rename "event" compound statement to "watcher". New statement "environ". * src/dircond.h (handler) <env>: New member. (environ_setup): New proto. * src/progman.c (event_to_env): Remove function. (runcmd): New function. (run_handler): Call runcmd to prepare execution environment and launch the handler. Minor improvements * /src/dircond.c (vdiag): Implement print-priority. (main): Print version number along with the startup and shutdown messages. Upgrade grecs Add bootstrap Rewrite configuration support using grecs. * grecs: Incorporate grecs as a submodule * .gitmodules: New file. * src/config.c: Rewrite. * src/dircond.c: Use grecs. * src/dircond.h (opt_facility): Remove (syslog_include_prio): New global. (pathent) <next>: Remove. * pathdefn.c: Remove. Switch to deep structure. Change version number. Update THANKS file. Improve -h output. Make sure directory and filename parts are meaningful when calling the handler. * dircond.h (dirwatcher) <split_p>: New member. <file_mode>: Change type to mode_t. (run_handler): Change signature. (split_pathname,unsplit_pathname): New protos. * ev_inotify.c (process_event): Use split_pathname to obtain file and directory parts if the watched object is not a directory. * ev_kqueue.c (filename): Remove function. (check_created): Change call to run_handler. (process_event): Use split_pathname to obtain file and directory parts. * progman.c (run_handler): Change signature and calling convention. * watcher.c (watch_subdirs): Fix diagnostics message. (split_pathname,unsplit_pathname): New functions. One more fix. * dircond.c (trans_strtotok): 2nd arg is const * dircond.h: Ditto. Add missing include. Keep separate process entries for redirectors. * dircond.h: Remove unneeded prototypes. * progman.c (process) <type,v>: New members. (register_process): Take process type as the first argument. (process_cleanup): Update. (open_redirector): Change type of the last argument. (run_handler): Reflect changes in open_redirector. Move process management functions into a separate module. Minor fixes. Introduce system-independent event codes. * config.c (parse_event, parse_onevent): Use event_mask structure. * dircond.c (trans_strtotok, trans_toktostr) (trans_toknext,trans_tokfirst) (ev_log): New functions (event_to_env): New static. (run_handler): Take a pointer to event_mask. Use event_to_env to construct the environment. (man): Initialize system-independent events. * dircond.h (SIE_CREATE, SIE_WRITE) (SIE_ATTRIB, SIE_DELETE): System-independent event codes. (event_mask): New typedef. (event): Remove structure. (transtab): New structure. (handler) <ev_mask>: Change type to event_mask. (evsys_filemask): New proto. (evsys_add_watch,run_handler): Change signature. (defevt, getevt): Likewise, (evtnullp, event_mask_init): New protos. (sie_xlat, sie_trans, evsys_transtab): New externs. (trans_strtotok, trans_toktostr) (trans_tokfirst, trans_toknext): New protos. * ev_inotify.c (evsys_transtab): New global. (sie_xlat): New global. (ev_log): Remove. (evsys_filemask): Remove variable, add function. (evsys_add_watch): Change signature. * ev_kqueue.c (events): Remove. (evsys_transtab): New global. (evsys_name_to_code, evsys_code_to_name): Remove. (evsys_filemask): Remove variable, add function. (ev_log): Remove. (sie_xlat): New global. (evsys_add_watch): Change signature. Add NOTE_WRITE to directory flags if SIE_CREATE is requested. (check_created): Deliver the SIE_CREATE event. (process_event): Update. * event.c (symevt) <mask>: Change type to event_mask. (defevt,getevt): Rewrite taking event_mask as additional argument. (evtnullp): New function (sie_trans): New global. (event_mask_init): New function. * watcher.c (dirwatcher_init): Initialize both system-dependent and system-independent event masks. (watch_subdirs): Call evsys_filemask to decide which files to watch. Use fd_set capable of keeping sysconf(_SC_OPEN_MAX) descriptors. * dircond.c (bigfd_set): New type (BIGFD_SET_COUNT, BIGFD_SET_ALLOC) (BIGFD_SET, BIGFD_ISSET): New macros. (close_fds): Use bigfd_set. All callers updated. Bugfix * dircond.h (dirwatcher_lookup): New proto. * watcher.c (dirwatcher_lookup): Remove static qualifier. kqueue: handle file creates and deletes. * dircond.h (dirwatcher) [USE_IFACE == IFACE_KQUEUE] <file_mode> <file_ctime>: New members. (remove_watcher): Remove prototype. (dirwatcher_destroy,watch_pathname): New protos. * ev_inotify.c (remove_watcher): New function (from watcher.c) * ev_kqueue.c (evsys_add_watch): Use EV_CLEAR instead of EV_ONESHOT. Initialize file_mode and file_ctime. (evsys_rm_watch): Fix conditional. (check_created): New function. (process_event): Handle file additions and deletions. * watcher.c (watch_subdirs): Use watch_pathname. (watch_pathname): New function. Restore default timeout. The default timeout setting was inadvertently lost in 02f27691. * config.c (opt_timeout): Initialize. * dircond.h (DEFAILT_TIMEOUT): New constant. Bugfix. * ev_kqueue.c (process_event): Strip directory prefix off the file name. Move commonly used headers to dircond.h Change main loop. * dircond.c: Change main loop. * dircond.h (evsys_loop): Remove. (evsys_select): New proto. * ev_inotify.c: Likewise. * ev_kqueue.c: Likewise. Initial implementation of kqueue support. * ev_inotify.c: New file. * ev_kqueue.c: New file. * configure.ac: Set up automake conditionals and defines depending on the selected interface. Bail out if no suitable interface is found. * Makefile.am: Add the right ev_*.c source to dircond_SOURCES. * dircond.c (run_handler): Remove static qualifier. (process_event): Remove. (main): Use evsys_* calls for interface-dependent operations. * dircond.h (event): New struct. (ifd): Remove extern. (signo): New extern. (ev_name_to_code): Rename to evsys_name_to_code. (ev_code_to_name): Rename to evsys_code_to_name. (ev_log): Remove. (evsys_init,evsys_add_watch) (evsys_rm_watch,evsys_loop): New protos. (evsys_filemask): New extern. * event.c: Remove interface-dependent stuff. * watcher.c (dirwatcher_install): Initialize wd to -1. (watch_subdirs): Use evsys_filemask to decide whether to scan the directory. All functions: Use evsys_* calls for interface-dependent operations. Autoconfiscate * .gitignore: Update * AUTHORS: New file. * Makefile.am: New file. * THANKS: New file. * configure.ac: New file. * Makefile: Remove. * NEWS: Update. * dircond.c: Include config.h * event.c: Likewise. * hashtab.c: Likewise. * pathdefn.c: Likewise. * watcher.c: Likewise. Update NEWS 2013-05-30 Sergey Poznyakoff <gray@gnu.org.ua> Fix a typo 2013-05-29 Sergey Poznyakoff <gray@gnu.org.ua> Bugfix * watcher.c (watch_subdirs): Fix erroneous conversion specifier in the diagnostics message. 2013-05-28 Sergey Poznyakoff <gray@gnu.org.ua> Bugfix. * config.c (parse_option): Fix the sense of the nowait option. Fix help output. 2013-05-27 Sergey Poznyakoff <gray@gnu.org.ua> Restore default timeout. The default timeout setting was inadvertently lost in 02f27691. * config.c (opt_timeout): Initialize. * dircond.h (DEFAILT_TIMEOUT): New constant. Bugfix. * pathdefn.c (pathdefn_get): Fix return value. 2013-05-26 Sergey Poznyakoff <gray@gnu.org.ua> Lint mode * dircond.c (main): Use the -L option to introduce syslog tag and the -t option to request "lint" behavior. * dircond.1: Update. 2013-03-22 Sergey Poznyakoff <gray@gnu.org.ua> Bugfix * dircond.c (setuser): Set up supplementary groups of the user. 2013-03-08 Sergey Poznyakoff <gray@gnu.org.ua> New feature: run handler as a specified user. * config.c (parse_onevent): Change "call" to "run". Retain the latter for compatibility. Hanlde optional "as USER" clause. Bugfix: initialize hp->next. * dircond.1: Document changes. * dircond.c (run_handler): Switch to the requested user privileges before running the handler. * dircond.h (handler) <uid,gidv,gidc>: New members. 2013-03-07 Sergey Poznyakoff <gray@gnu.org.ua> Fix syslog vs. stderr inconsistency. * config.c (opt_facility): new global. (parse_syslog): Set opt_facility, unless it is already set (in the command line). * dircond.c (main) <opt_facility>: Remove (now global). * dircond.h (opt_facility): New extern. * Makefile (clean): add dircond 2013-03-06 Sergey Poznyakoff <gray@gnu.org.ua> More fixes. * dircond.c (print_status): Take sigset_t* as the second argument. Mask out diagnostic messages according to it. (process_cleanup): Mask out SIGTERM and SIGKILL as needed. (run_handler): Swap redirectors syslog priorities: stderr goes to LOG_ERR, and stdout to LOG_INFO. Bugfixes. * config.c (read_facility): Fix return value. * dircond.c: Fix help output. * dircond.1: Fix incorrect example. 2013-02-14 Sergey Poznyakoff <gray@gnu.org.ua> Update docs. New option -V * Makefile (CPPFLAGS): Define VERSION * dircond.c: New option -V (print version). * dircond.1: Document new option. Bugfixes. * Makefile (DISTFILES): Bugfix. * config.c (parse_event): Bugfix. * NEWS: Update (version 3.0, preliminary) 2013-01-29 Sergey Poznyakoff <gray@gnu.org.ua> Bugfixes. * config.c (nextln): Fix out of range read. * dircond.1: Update. * event.c (ev_code_to_name): Find first matching event. Do not rely on exact match, because the even mask may have several bits set. Improve error handling. * config.c (parse_path): Bail out if incorrect option is given. * dircond.h (hashtab_count): New proto. * hashtab.c (hashtab_count): New function. * watcher.c (setup_watchers): Bail out if no handlers configured or if unable to install any. Improve configuration syntax, document the changes. * config.c (path statement): New keyword "recursive". * dircond.c (process_event): Provide a detailed event logging. * event.c (ev_log): New function. * dircond.1: Document all changes. * dircond.h: Add file. Major revamp All configuration moved to configuration file (default: /etc/dircond.conf). Only a few command line options have been retained. Watcher structures are kept in hash tables, which allows for faster lookups, especially if there are many watchers. * Makefile: Add new source. * config.c: New file. * dircond.c (conffile): New global. (facility): Default to stderr. Will be changed by main if going daemon. (handler_timeout, autowatch): Remove. Move datatype definitions and macros to dircond.h (ev_name_to_code, ev_code_to_name): Move to event.c (erealloc, estrdup): New functions. (proc_unlink, proc_pop, proc_push): Define explicitly, now that dlist.c is gone. (read_facility): Move to config.c, changing signature. (set_handler): Remove. (dirwatcher_free, dirwatcher_create) (dirwatcher_destroy, dirwatcher_find_wd) (dirwatcher_find_name): Remove. See watcher.c (remove_watcher, subwatcher_create) (check_new_watcher, watch_subdirs): Move to watcher.c (get_facility): New function. (process_event): New function. (main): Parse configuration file. Use command line options to override its settings. * dlist.c: Remove. * event.c: New file. * hashtab.c: New file. * pathdefn.c: New file. * watcher.c: New file. 2013-01-17 Sergey Poznyakoff <gray@gnu.org.ua> Revamp the event and handler system. Events are directly mapped to those of inotify. Handlers are kept in a doubly-linked list; a special field keeps the mask of supported events. The accepted '-p' syntax is changed accordingly. Docs are not yet updated. * dircond.c (event): New struct. (evtab): New global. (handler) <prev,next,ev_mask>: New members. (dirwatcher) <handler_list>: New member (instead of the handler array). (handler_list,handler_mask): New globals. (ev_name_to_code,ev_code_to_name): New functions. (set_handler): Change accepted syntax. The new syntax is event[,event...][:flag[,flag...]]:pathname (dirwatcher_create): Use handler_mask instead of the hardcoded mask. (dirwatcher_destroy): Free the handler list, if this is a top-level watcher. (subwatcher_create): Update to use new variables. (main): Likewise. 2013-01-10 Sergey Poznyakoff <gray@gnu.org.ua> Improve error reporting. * dircond.c (run_handler,set_handler): Check if the handler can be executed. Update documentation Watch existing subdirectories, as requested by the autowatch option. * dircond.c (subwatcher_create): New function. (check_new_watcher): Use subwatcher_create. (watch_subdirs): New function. (main): Recursively add directories after watchpoint if autowatch requests so. Make autowatch feature watchpoint-specific. Each particular watchpount can have its own setting of autowatch, as specified by the -a option. * dircond.c (dirwatcher) <autowatch>: New member. (dirwatcher_create): Fill allocated structure with zeroes. (dirlevel): Remove function. (check_new_watcher): Use dirwatcher->autowatch to determine whether to watch the new directory. Inherit autowatch setting. (main): Set dirwatcher->autowatch. New flag "timeout=" * dircond.c (set_handler): The timeout=N flag sets timeout for that particular handler (equivalent to -T option used before -p). * dircond.1: Document the new flag. 2013-01-09 Sergey Poznyakoff <gray@gnu.org.ua> Add documentation files. Raise version to 2.0 * .gitignore: Update. * Makefile: Add NEWS and ChangeLog, generate the latter. * NEWS: New file. * git2chg.awk: New file. Fix help output. Support multiple per-directory handlers. * dircond.c (handler) <timeout>: New member. (dirwatcher) <handler>: New member. (process) <master>: Remove. <timeout>: New member. Fix comments. (set_handler): Change supported syntax. The program name is separated from the event spec and optional flags by a semicolon. It can be empty, allowing to cancel a prior definition of the same handler. (register_process): Take timeout as the third argument. (process_timeouts): Use per-process timeout. (open_redirector): Fix the use of facility. (run_handler): Change signature. (main): Change option handling, allowing to intermix handler and watchpoint definitions. * README: Update. * dircond.1: Update. * dlist.c: Add copyright header. Fix a "fencepost" error in close_fds. * dircond.c (close_fds): Start iterating from max_fd-1. 2012-12-31 Sergey Poznyakoff <gray@gnu.org.ua> Minor fixes. * COPYING: New file. * Makefile: Distribute COPYING. * dircond.c (main): tag is now const char *. Switch to user privileges only if -u option is explicitly given. Improve documentation. 2012-12-24 Sergey Poznyakoff <gray@gnu.org.ua> Add a manpage. * Makefile: Add a manpage. * dircond.c (run_handler): Pass event code and event symbolic name to the handler. Add support for IN_MOVED_FROM and IN_MOVED_TO. Initial commit Local Variables: mode: change-log version-control: never buffer-read-only: t End: ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/README���������������������������������������������������������������������������������0000644�0001750�0001750�00000004727�12764623664�014100� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Direvent README. Copyright (C) 2012-2016 Sergey Poznyakoff See the end of file for copying conditions. * Overview Direvent is a directory content watcher daemon, i.e. a program that monitors a set of directories on the file system and reacts when their content changes. When a change is detected, the daemon reacts by invoking an external command configured for that kind of change. The program aims to provide a uniform and system-independent command-level interface for file system events. This version is known to work on GNU/Linux (kernels starting from v. 2.6.13) and BSD systems (FreeBSD, NetBSD, OpenBSD, Darwin). * Building and Configuring The usual incantation applies: ./configure [OPTIONS] make make install See the file INSTALL for the description of ./configure and its generic options. Following are the package-specific options: --with-include-path=PATH Define standard include path. This is a list of directories where files given in the #include and #include_once configuration statements will be searched. PATH is a list of directories separated by colons. Directory names can contain references to Makefile variables, which will be expanded to their actual values at compile time. The default PATH is $(pkgdatadir)/$(VERSION):$(pkgdatadir)/include See the documentation, section 5.1.2 "Pragmatic Comments", for a detailed description of #include and #include_path statements and the meaning of the include search path. * Usage Instructions Complete documentation is included with the package, both in man and Texinfo formats. After successful installation, use info direvent to read the Texinfo documentation. To read the manpages, use: man 8 direvent man 5 direvent.conf An online copy of the documentation in various formats is available at http://direvent.man.gnu.org.ua. * Copyright information: Copyright (C) 2012-2016 Sergey Poznyakoff Permission is granted to anyone to make or distribute verbatim copies of this document as received, in any medium, provided that the copyright notice and this permission notice are preserved, thus giving the recipient permission to redistribute in turn. Permission is granted to distribute modified versions of this document, or of portions of it, under the above conditions, provided also that they carry prominent notices stating who last changed them. Local Variables: mode: outline paragraph-separate: "[ ]*$" version-control: never End: �����������������������������������������direvent-5.2/po/������������������������������������������������������������������������������������0000755�0001750�0001750�00000000000�13512403134�013600� 5����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/po/es.po�������������������������������������������������������������������������������0000644�0001750�0001750�00000052642�13512402637�014567� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Spanish translation for direvent 5.1. # Copyright (C) 2018 Free Software Foundation, Inc. # This file is distributed under the same license as the direvent package. # Francisco Javier Serrador <fserrador@gmail.com>, 2018. # msgid "" msgstr "" "Project-Id-Version: direvent 5.1\n" "Report-Msgid-Bugs-To: bug-direvent@gnu.org.ua\n" "POT-Creation-Date: 2019-07-13 19:23+0300\n" "PO-Revision-Date: 2018-04-29 10:30+0200\n" "Last-Translator: Francisco Javier Serrador <fserrador@gmail.com>\n" "Language-Team: Spanish <es@tp.org.es>\n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" "X-Generator: Poedit 2.0.4\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: cmdline.opt:26 msgid "increase debug level" msgstr "incrementar nivel de depuración" #: cmdline.opt:32 msgid "PRIO" msgstr "PRIO" #: cmdline.opt:32 msgid "" "log everything with priority PRIO and higher to the stderr, as well as to " "the syslog" msgstr "" "boletinar todo elemento con prioridad PRIO y superior al stderr, además al " "boletín del sistema syslog" #: cmdline.opt:41 msgid "NAME" msgstr "NOMBRE" #: cmdline.opt:41 msgid "set syslog facility" msgstr "establecer capacidad syslog" #: cmdline.opt:47 msgid "remain in foreground" msgstr "permanecer en primer plano" #: cmdline.opt:53 msgid "DIR" msgstr "DIR" #: cmdline.opt:53 msgid "add include directory" msgstr "añade directorio incluido" #: cmdline.opt:59 msgid "PROG" msgstr "PROG" #: cmdline.opt:59 msgid "self-test mode" msgstr "modo auto-probado" #: cmdline.opt:65 msgid "FILE" msgstr "FICHERO" #: cmdline.opt:65 msgid "set PID file" msgstr "establecer fichero PID" #: cmdline.opt:71 msgid "check configuration file and exit" msgstr "marca fichero de configuración y sale" #: cmdline.opt:77 msgid "USER" msgstr "USUARIO" #: cmdline.opt:77 msgid "run as this user" msgstr "ejecuta como este usuario" #: cmdline.opt:87 msgid "show configuration file summary" msgstr "muestra resumen del fichero de configuración" #: cmdline.opt:81 msgid "Other options" msgstr "Otras opciones" #: cmdline.opt:93 msgid "Give this help list" msgstr "Da este listado de ayuda" #: cmdline.opt:93 msgid "Give a short usage message" msgstr "Da un mensaje de empleo corto" #: cmdline.opt:93 msgid "Print program version" msgstr "Escribe la versión del programa" #: cmdline.opt:13 msgid "GNU direvent monitors changes in directories" msgstr "Evento direccional GNU modifica en directorios" #: cmdline.opt:15 msgid "[CONFIG]" msgstr "[CONFIGURACIÓN]" #: cmdline.opt:95 #, c-format msgid "" "The optional CONFIG argument supplies the name of the configuration file\n" "to use instead of %s.\n" "\n" msgstr "" "El argumento CONFIG opcional suministra el nombre del fichero de " "configuración\n" "a emplear en ligar de %s\n" "\n" #. TRANSLATORS: %s is one of: inotify, kqueue #: cmdline.opt:99 #, c-format msgid "" "This direvent uses %s interface.\n" "\n" msgstr "" "Este directorio de evento utiliza %s interfaz.\n" "\n" #: cmdline.opt:102 #, c-format msgid "Include search path:\n" msgstr "Incluye ruta de búsqueda:\n" #: cmdline.opt:105 #, c-format msgid "No include search path.\n" msgstr "No incluir ruta de búsqueda.\n" #: src/config.c:63 #, c-format msgid "unknown syslog facility: %s" msgstr "capacidad de syslog desconocida: %s" #: src/config.c:80 #, c-format msgid "unknown syslog priority: %s" msgstr "prioridad de syslog desconocida: %s" #: src/config.c:88 msgid "unexpected block statement" msgstr "bloque de declaración inesperada" #: src/config.c:97 #, c-format msgid "expected %s" msgstr "esperaba %s" #: src/config.c:102 #, c-format msgid "expected %s, but found %s" msgstr "esperaba %s, pero encontré %s" #: src/config.c:124 #, c-format msgid "unknown syslog facility `%s'" msgstr "capacidad de boletín de sistema desconocido «%s»" #: src/config.c:133 src/config.c:606 msgid "name" msgstr "name" #: src/config.c:134 msgid "" "Set syslog facility. Arg is one of the following: user, daemon, auth, " "authpriv, mail, cron, local0 through local7 (case-insensitive), or a " "facility number." msgstr "" "Establece capacidad syslog. Arg es uno de los siguientes: usuario, demonio, " "autoridad, autoridadpriv, correo, cron, local0 a tracés de local7 " "(indistinguible mayúsculas), o un número capacitado." #: src/config.c:139 grecs/src/format.c:36 grecs/src/tree.c:69 msgid "string" msgstr "cadena" #: src/config.c:139 msgid "Tag syslog messages with this string" msgstr "Etiquetar mensajes syslog con esta cadena textual" #: src/config.c:142 grecs/src/format.c:141 msgid "arg" msgstr "arg" #: src/config.c:143 msgid "Prefix each message with its priority" msgstr "Prefija cada mensaje con su prioridad" #: src/config.c:191 #, c-format msgid "%s: recursion depth does not match previous definition" msgstr "%s: profundidad recursiva no coincide definición anterior" #: src/config.c:212 msgid "no paths configured" msgstr "sin rutas configuradas" #: src/config.c:217 msgid "no command configured" msgstr "ningún mandato configurado" #: src/config.c:229 grecs/src/tree.c:665 msgid "invalid use of block statement" msgstr "empleo inválido de bloque de sentencia" #: src/config.c:274 msgid "expected \"recursive\" or end of statement" msgstr "esperado «recursivo» o final de declaración" #: src/config.c:289 msgid "surplus argument" msgstr "sin más argumento" #: src/config.c:295 src/config.c:446 msgid "unexpected list" msgstr "lista no esperada" #: src/config.c:326 src/config.c:341 src/config.c:356 msgid "unrecognized event code" msgstr "código eventual no reconocido" #: src/config.c:438 msgid "surplus arguments" msgstr "sin más argumentos" #: src/config.c:452 msgid "no such user" msgstr "sin tal usuario" #: src/config.c:459 msgid "no such group" msgstr "sin tal grupo" #: src/config.c:501 msgid "unrecognized option" msgstr "opción no reconocida" #: src/config.c:595 msgid "Pathname to watch" msgstr "Ruta nombrada a vigilar" #: src/config.c:598 msgid "Events to watch for" msgstr "Eventos a vigilar para" #: src/config.c:601 msgid "regexp" msgstr "expreg" #: src/config.c:601 msgid "Files to watch for" msgstr "VFicheros a vigilar para" #: src/config.c:604 msgid "Command to execute on event" msgstr "Mandato a ejecutar en evento" #: src/config.c:606 msgid "Run command as this user" msgstr "Ejecuta mandato como este usuario" #: src/config.c:609 msgid "seconds" msgstr "segundos" #: src/config.c:609 msgid "Timeout for the command" msgstr "Tiempo agotado para la mandato" #: src/config.c:611 msgid "List of additional options" msgstr "Listado de opciones adicionales" #: src/config.c:614 msgid "<arg: string> <arg: string>..." msgstr "<arg: cadena> <arg: cadena>..." #: src/config.c:615 msgid "Modify environment" msgstr "Modifica entorno" #: src/config.c:622 msgid "Run as this user" msgstr "Ejecuta como este usuario" #: src/config.c:624 msgid "Run in foreground" msgstr "Ejecuta en primer plano" #: src/config.c:626 msgid "file" msgstr "fichero" #: src/config.c:626 msgid "Set pid file name" msgstr "Establece nombre del fichero de pid" #: src/config.c:628 msgid "Configure syslog logging" msgstr "Configura bitácora para registro de sistema" #: src/config.c:630 msgid "level" msgstr "nivel" #: src/config.c:630 msgid "Set debug level" msgstr "Establecer nivel de depuración" #: src/config.c:632 msgid "Configure event watcher" msgstr "Configurar vigía de evento" #: src/config.c:643 msgid "" "Configuration file structure for direvent.\n" "For more information, use `info direvent configuration'." msgstr "" "Fichero de configuración estructurada para evento directorio.\n" "Para más información, emplee `info direvent configuration'." #: src/direvent.c:142 src/direvent.c:164 src/watcher.c:93 src/watcher.c:125 msgid "not enough memory" msgstr "sin memoria suficiente" #: src/direvent.c:274 #, c-format msgid "cannot open pidfile %s for writing: %s" msgstr "no puede abrir fichero pid %s para escritura: %s" #: src/direvent.c:302 #, c-format msgid "no user with UID %lu" msgstr "sin usuario con UID %lu" #: src/direvent.c:420 #, c-format msgid "cannot run `%s': fork failed: %s" msgstr "no puede ejecutar «%s»: bifurcación fallada: %s" #: src/direvent.c:480 msgid "too many arguments" msgstr "demasiados argumentos" #: src/direvent.c:522 #, c-format msgid "%s %s started" msgstr "%s %s iniciado" #: src/direvent.c:546 #, c-format msgid "%s %s stopped" msgstr "%s %s detenido" #: src/environ.c:25 msgid "environment: " msgstr "entorno: " #: src/progman.c:142 #, c-format msgid "process %lu exited successfully" msgstr "proceso %lu finalizado correctamente" #: src/progman.c:145 #, c-format msgid "process %lu failed with status %d" msgstr "proceso %lu fallado con estado %d" #: src/progman.c:155 #, c-format msgid "process %lu terminated on signal %d" msgstr "proceso %lu terminado con señal %d" #: src/progman.c:158 #, c-format msgid "process %lu stopped on signal %d" msgstr "proceso %lu detenido con señal %d" #: src/progman.c:163 #, c-format msgid "process %lu dumped core" msgstr "procesa %lu volcado del núcleo" #: src/progman.c:167 #, c-format msgid "process %lu terminated with unrecognized status" msgstr "proceso %lu terminado con estado no reconocido" #: src/progman.c:228 msgid "begin scanning process list" msgstr "iniciar listado de proceso analítico" #: src/progman.c:232 #, c-format msgid "process %lu timed out" msgstr "proceso temporal %lu agotado" #: src/progman.c:241 #, c-format msgid "scheduling alarm in %lu seconds" msgstr "horario de alarma en %lu segundos" #: src/progman.c:322 #, c-format msgid "cannot start redirector for %s, pipe failed: %s" msgstr "no puede iniciar redirector para %s, tubería fallada: %s" #: src/progman.c:354 #, c-format msgid "cannot run redirector `%s': fork failed: %s" msgstr "no puede ejecutar redirección «%s»: bifurcación fallada: %s" #: src/progman.c:359 #, c-format msgid "redirector for %s started, pid=%lu" msgstr "redirector para %s iniciado, pid=%lu" #: src/progman.c:455 #, c-format msgid "starting %s, dir=%s, file=%s" msgstr "iniciando %s, dir=%s, fichero=%s" #: src/progman.c:484 #, c-format msgid "cannot change to %s: %s" msgstr "no puede modificar a %s: %s" #: src/progman.c:512 #, c-format msgid "%s running; dir=%s, file=%s, pid=%lu" msgstr "%s ejecutando; dir=%s, fichero=%s, pid=%lu" #: src/progman.c:534 #, c-format msgid "waiting for %s (%lu) to terminate" msgstr "esperando a %s (%lu) para terminar" #: src/watcher.c:183 src/watcher.c:513 #, c-format msgid "removing watcher %s" msgstr "quitando vigía %s" #: src/watcher.c:195 msgid "no watchers left; exiting now" msgstr "" #: src/watcher.c:262 #, c-format msgid "installing CREATE sentinel for %s" msgstr "" #: src/watcher.c:275 #, c-format msgid "creating watcher %s" msgstr "creando vigía %s" #: src/watcher.c:281 src/watcher.c:296 #, c-format msgid "cannot set watcher on %s: %s" msgstr "no puede establecer vigía en: %s: %s" #: src/watcher.c:377 #, c-format msgid "cannot create watcher %s/%s: not enough memory" msgstr "no puede crear vigía %s/%s: sin memoria suficiente" #: src/watcher.c:384 #, c-format msgid "cannot create watcher %s/%s, stat failed: %s" msgstr "no puede crear vigía %s/%s, estadística fallada: %s" #: src/watcher.c:430 #, c-format msgid "cannot open directory %s: %s" msgstr "no puede abrir el directorio %s: %s" #: src/watcher.c:447 #, c-format msgid "cannot stat %s/%s: not enough memory" msgstr "no puede declarar %s/%s: sin suficiente memoria" #: src/watcher.c:452 #, c-format msgid "cannot stat %s: %s" msgstr "no puede declarar %s: %s" #: src/watcher.c:497 msgid "no event handlers configured" msgstr "ningún manipulador eventual configurado" #: src/watcher.c:502 msgid "no event handlers installed" msgstr "ningún manipulador eventual instalado" #: grecs/src/format.c:33 msgid "void" msgstr "" #: grecs/src/format.c:46 msgid "number" msgstr "" #: grecs/src/format.c:49 msgid "time" msgstr "" #: grecs/src/format.c:52 msgid "boolean" msgstr "" #: grecs/src/format.c:55 msgid "IPv4" msgstr "" #: grecs/src/format.c:58 msgid "CIDR" msgstr "" #: grecs/src/format.c:61 #, fuzzy msgid "hostname" msgstr "name" #: grecs/src/format.c:64 msgid "sockaddr" msgstr "" #: grecs/src/format.c:67 msgid "section" msgstr "" #: grecs/src/format.c:70 msgid "null" msgstr "" #: grecs/src/format.c:133 msgid "Disabled;" msgstr "Desactivado;" #: grecs/src/opthelp.c:123 grecs/src/opthelp.c:269 msgid "Usage:" msgstr "Modo de empleo:" #: grecs/src/opthelp.c:127 msgid "OPTION" msgstr "OPCIÓN" #: grecs/src/opthelp.c:132 grecs/src/opthelp.c:427 msgid "Aliases" msgstr "Aliases" #: grecs/src/opthelp.c:132 grecs/src/opthelp.c:427 msgid "Alias" msgstr "Alias" #: grecs/src/opthelp.c:186 msgid "" "Mandatory or optional arguments to long options are also mandatory or " "optional for any corresponding short options." msgstr "" "Argumentos obligatorios u opcionales para opciones largas son también " "obligatorios u opcionales para opciones correspondientes cortas." #. TRANSLATORS: The placeholder indicates the bug-reporting #. address for this package. Please add _another line_ saying #. "Report translation bugs to <...>\n" with the address for #. translation bugs (typically your translation team's web or #. email address). #: grecs/src/opthelp.c:202 #, c-format msgid "Report bugs to %s.\n" msgstr "Comunique defectos a: %s.\n" #: grecs/src/opthelp.c:205 #, c-format msgid "%s home page: <%s>\n" msgstr "%s página inicial: <%s>\n" #. TRANSLATORS: Translate "(C)" to the copyright symbol #. (C-in-a-circle), if this symbol is available in the user's #. locale. Otherwise, do not translate "(C)"; leave it as-is. #: grecs/src/opthelp.c:457 msgid "(C)" msgstr "©" #: grecs/src/opthelp.c:466 msgid "" "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." "html>\n" "This is free software: you are free to change and redistribute it.\n" "There is NO WARRANTY, to the extent permitted by law.\n" "\n" msgstr "" "Licencia GPLv3+: GPL de GNU versión 3 o posterior\n" "<http://gnu.org/licenses/gpl.html>.\n" "Esto es software libre: usted es libre de cambiarlo y redistribuirlo.\n" "No hay NINGUNA GARANTÃA, hasta donde permite la ley.\n" "\n" #: grecs/src/opthelp.c:483 msgid "Written by " msgstr "Escrito por " #. TRANSLATORS: This string is used as a delimiter between #. authors' names as in: #. #. Written by Winnie the Pooh, Piglet ... #. #: grecs/src/opthelp.c:489 msgid ", " msgstr ", " #. TRANSLATORS: This string acts as a delimiter before the #. last author's names, e.g.: #. #. Written by Winnie the Pooh, Piglet and Christopher Robin. #. #: grecs/src/opthelp.c:495 msgid " and " msgstr " y " #: grecs/src/path-parser.c:62 #, c-format msgid "cannot open `%s'" msgstr "no puede abrir «%s»" #: grecs/src/path-parser.c:108 grecs/src/path-parser.c:123 msgid "unexpected end of file" msgstr "final de fichero no esperado" #: grecs/src/path-parser.c:143 msgid "parse error" msgstr "incapaz resolverse lo que usted signific decir" #: grecs/src/preproc.c:448 grecs/src/preproc.c:470 #, c-format msgid "Cannot stat `%s'" msgstr "No puedo declarar «%s»" #: grecs/src/preproc.c:453 grecs/src/preproc.c:458 msgid "Recursive inclusion" msgstr "Inclusión recursiva" #: grecs/src/preproc.c:461 #, c-format msgid "`%s' already included here" msgstr "«%s» ya incluido aquí" #: grecs/src/preproc.c:465 #, c-format msgid "`%s' already included at top level" msgstr "«%s» ya incluido en nivel superior" #: grecs/src/preproc.c:480 #, c-format msgid "Cannot open `%s'" msgstr "No puede abrir «%s»" #: grecs/src/preproc.c:595 msgid "Cannot parse include line" msgstr "No puedo interpretar línea incluida" #: grecs/src/preproc.c:598 msgid "invalid include statement" msgstr "declaración incluida inválida" #: grecs/src/preproc.c:624 msgid "read error" msgstr "error de lectura" #: grecs/src/preproc.c:632 #, c-format msgid "%s: No such file or directory" msgstr "%s: sin tal fichero o directorio" #: grecs/src/preproc.c:698 #, c-format msgid "Unable to start external preprocessor `%s'" msgstr "Incapaz de iniciar un preprocesado externo «%s»" #: grecs/src/preproc.c:773 grecs/src/preproc.c:793 #, c-format msgid "Cannot run `%s'" msgstr "No puedo ejecutar «%s»" #: grecs/src/symtab.c:236 msgid "element not found in table" msgstr "elemento no encontrado en tabla" #: grecs/src/symtab.c:238 msgid "symbol table is full" msgstr "lista simbólica está llena" #: grecs/src/tree.c:70 msgid "list" msgstr "" #: grecs/src/tree.c:71 #, fuzzy msgid "one or more arguments" msgstr "demasiados argumentos" #: grecs/src/tree.c:75 #, fuzzy msgid "unrecognized type; please report" msgstr "código eventual no reconocido" #: grecs/src/tree.c:320 msgid "section keyword used as a scalar" msgstr "" #: grecs/src/tree.c:322 msgid "scalar keyword used as a section" msgstr "" #: grecs/src/tree.c:325 #, fuzzy msgid "unknown keyword" msgstr "Palabra clave desconocida" #: grecs/src/tree.c:360 #, c-format msgid "%s: not a valid boolean value" msgstr "%s: no un valor booleana válido" #: grecs/src/tree.c:391 #, c-format msgid "%s: UNIX socket name too long" msgstr "%s: nombre de socket UNIX demasiado largo" #: grecs/src/tree.c:420 grecs/src/tree.c:644 #, c-format msgid "%s: not a valid IP address or hostname" msgstr "%s: no una dirección IP válida u nombre hospedante" #: grecs/src/tree.c:444 #, c-format msgid "%s: not a valid port number" msgstr "%s: no un número de puerto válido" #: grecs/src/tree.c:452 msgid "missing port number" msgstr "falta el número de puerto" #: grecs/src/tree.c:501 msgid "numeric overflow" msgstr "desbordamiento numérico" #: grecs/src/tree.c:506 msgid "value out of allowed range" msgstr "valor fuera de rango permitido" #: grecs/src/tree.c:541 grecs/src/tree.c:571 #, c-format msgid "not a number (stopped near `%s')" msgstr "no un número (detenido cerca de «%s»)" #: grecs/src/tree.c:635 #, c-format msgid "%s: not a valid IP address" msgstr "%s: no una dirección IP válida" #: grecs/src/tree.c:774 #, c-format msgid "too many arguments to `%s'; missing semicolon?" msgstr "demasiados argumentos a «%s»; ¿faltan punto y como?" #: grecs/src/tree.c:788 grecs/src/tree.c:836 #, c-format msgid "INTERNAL ERROR at %s:%d: unhandled data type %d" msgstr "ERROR INTERNO en %s:%d: tipo de datos %d no manipulado" #: grecs/src/tree.c:803 #, c-format msgid "%s: incompatible data type in list item #%d" msgstr "%s: tipo de datos incompatibles dentro de ítem de lista #%d" #: grecs/src/tree.c:823 #, c-format msgid "incompatible data type for `%s'" msgstr "tipo de datos incompatible para «%s»" #: grecs/wordsplit/wordsplit.c:69 grecs/wordsplit/wordsplit.c:2855 msgid "memory exhausted" msgstr "memoria agotada" #: grecs/wordsplit/wordsplit.c:121 msgid "memory exhausted while trying to store error context" msgstr "" #: grecs/wordsplit/wordsplit.c:868 msgid "Restarting" msgstr "" #: grecs/wordsplit/wordsplit.c:1607 #, c-format msgid "%.*s: variable null or not set" msgstr "%.*s: variable nula o no establecida" #: grecs/wordsplit/wordsplit.c:1637 #, c-format msgid "warning: undefined variable `%.*s'" msgstr "cuidado: variable no definida `%.*s'" #: grecs/wordsplit/wordsplit.c:2141 #, c-format msgid "no files match pattern %s" msgstr "sin ficheros coinciden con patrón %s" #: grecs/wordsplit/wordsplit.c:2603 msgid "WS trimming" msgstr "Recortando WS" #: grecs/wordsplit/wordsplit.c:2605 msgid "command substitution" msgstr "sustitución de mandato" #: grecs/wordsplit/wordsplit.c:2607 grecs/wordsplit/wordsplit.c:2615 msgid "coalesce list" msgstr "lista cualificada" #: grecs/wordsplit/wordsplit.c:2609 msgid "tilde expansion" msgstr "expansión tilde" #: grecs/wordsplit/wordsplit.c:2611 msgid "variable expansion" msgstr "expansión variable" #: grecs/wordsplit/wordsplit.c:2613 msgid "quote removal" msgstr "supresión de comillas" #: grecs/wordsplit/wordsplit.c:2617 msgid "path expansion" msgstr "expansión de ruta" #: grecs/wordsplit/wordsplit.c:2642 #, c-format msgid "(%02d) Input:%.*s;" msgstr "(%02d) Entrada:%.*s;" #: grecs/wordsplit/wordsplit.c:2668 msgid "Initial list:" msgstr "Lista inicial:" #: grecs/wordsplit/wordsplit.c:2683 msgid "Coalesced list:" msgstr "Lista especificada:" #: grecs/wordsplit/wordsplit.c:2853 msgid "no error" msgstr "sin error" #: grecs/wordsplit/wordsplit.c:2854 msgid "missing closing quote" msgstr "faltando cierre de comilla" #: grecs/wordsplit/wordsplit.c:2856 msgid "invalid wordsplit usage" msgstr "divisor de palabras mandado inválido" #: grecs/wordsplit/wordsplit.c:2857 msgid "unbalanced curly brace" msgstr "rama curly desbalanceada" #: grecs/wordsplit/wordsplit.c:2858 msgid "undefined variable" msgstr "variable no definida" #: grecs/wordsplit/wordsplit.c:2859 msgid "input exhausted" msgstr "entrada agotada" #: grecs/wordsplit/wordsplit.c:2860 msgid "unbalanced parenthesis" msgstr "paréntesis desequilibrados" #: grecs/wordsplit/wordsplit.c:2861 msgid "globbing error" msgstr "error globalizado" #: grecs/wordsplit/wordsplit.c:2862 #, fuzzy msgid "user-defined error" msgstr "error de lectura" #: grecs/wordsplit/wordsplit.c:2863 msgid "invalid parameter number in assignment" msgstr "" #: grecs/wordsplit/wordsplit.c:2875 msgid "unknown error" msgstr "error desconocido" #: grecs/wordsplit/wordsplit.c:2884 #, c-format msgid "missing closing %c (start near #%lu)" msgstr "faltando cierre %c (inicio cerca #%lu)" #~ msgid "unterminated regexp" #~ msgstr "expreg sin terminar" #~ msgid "unrecognized flag: %c" #~ msgstr "maraca no reconocida: %c" #~ msgid "out of memory" #~ msgstr "memoria agotada" #~ msgid "%s: unknown keyword" #~ msgstr "%s: palabra clave desconocida" #~ msgid "(%02d) Restart:%.*s;" #~ msgstr "(%02d) Reiniciar:%.*s;" ����������������������������������������������������������������������������������������������direvent-5.2/po/sr.po�������������������������������������������������������������������������������0000644�0001750�0001750�00000063233�13512402637�014602� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Serbian translation for direvent. # Copyright © 2016 Free Software Foundation, Inc. # This file is distributed under the same license as the direvent package. # МироÑлав Ðиколић <miroslavnikolic@rocketmail.com>, 2016. msgid "" msgstr "" "Project-Id-Version: direvent-5.1\n" "Report-Msgid-Bugs-To: bug-direvent@gnu.org.ua\n" "POT-Creation-Date: 2019-07-13 19:23+0300\n" "PO-Revision-Date: 2016-08-07 19:04+0200\n" "Last-Translator: МироÑлав Ðиколић <miroslavnikolic@rocketmail.com>\n" "Language-Team: Serbian <(nothing)>\n" "Language: sr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #: cmdline.opt:26 msgid "increase debug level" msgstr "повећава ниво прочишћавања" #: cmdline.opt:32 msgid "PRIO" msgstr "ПРИО" #: cmdline.opt:32 msgid "" "log everything with priority PRIO and higher to the stderr, as well as to " "the syslog" msgstr "" "запиÑује Ñве Ñа ПРИОРИТЕТОМ и већим на Ñтандардну грешку, као и у ÑиÑтемÑки " "дневник" #: cmdline.opt:41 msgid "NAME" msgstr "ÐÐЗИВ" #: cmdline.opt:41 msgid "set syslog facility" msgstr "подешава помоћника ÑиÑтемÑког дневника" #: cmdline.opt:47 msgid "remain in foreground" msgstr "оÑтаје у позадини" #: cmdline.opt:53 msgid "DIR" msgstr "ДИР" #: cmdline.opt:53 msgid "add include directory" msgstr "додаје укључујући директоријум" #: cmdline.opt:59 msgid "PROG" msgstr "ПРОГ" #: cmdline.opt:59 msgid "self-test mode" msgstr "режим ÑамотеÑтирања" #: cmdline.opt:65 msgid "FILE" msgstr "ДÐТОТЕКÐ" #: cmdline.opt:65 msgid "set PID file" msgstr "поÑтавља датотеку броја процеÑа" #: cmdline.opt:71 msgid "check configuration file and exit" msgstr "проверава датотеку подешавања и излази" #: cmdline.opt:77 msgid "USER" msgstr "КОРИСÐИК" #: cmdline.opt:77 msgid "run as this user" msgstr "покреће Ñе као овај кориÑник" #: cmdline.opt:87 msgid "show configuration file summary" msgstr "приказује Ñажетак датотеке подешавања" #: cmdline.opt:81 msgid "Other options" msgstr "ОÑтале могућноÑти" #: cmdline.opt:93 msgid "Give this help list" msgstr "Приказује овај ÑпиÑак помоћи" #: cmdline.opt:93 msgid "Give a short usage message" msgstr "Приказује кратку поруку коришћења" #: cmdline.opt:93 msgid "Print program version" msgstr "ИÑпиÑује издање програма" #: cmdline.opt:13 msgid "GNU direvent monitors changes in directories" msgstr "Гнуов диревент надгледа промене у директоријумима" #: cmdline.opt:15 msgid "[CONFIG]" msgstr "[ПОДЕШÐÐ’ÐЊÐ]" #: cmdline.opt:95 #, c-format msgid "" "The optional CONFIG argument supplies the name of the configuration file\n" "to use instead of %s.\n" "\n" msgstr "" "Изборни аргумент ПОДЕШÐÐ’ÐЊРдоÑтавља назив датотеке подешавања\n" "која ће Ñе кориÑтити умеÑто „%s“.\n" "\n" #. TRANSLATORS: %s is one of: inotify, kqueue #: cmdline.opt:99 #, c-format msgid "" "This direvent uses %s interface.\n" "\n" msgstr "" "Овај диревент кориÑти Ñучеље „%s“.\n" "\n" #: cmdline.opt:102 #, c-format msgid "Include search path:\n" msgstr "Укључите путању претраге:\n" #: cmdline.opt:105 #, c-format msgid "No include search path.\n" msgstr "Ðе укључује путању претраге.\n" #: src/config.c:63 #, c-format msgid "unknown syslog facility: %s" msgstr "непознат помоћник ÑиÑтемÑког дневника: %s" #: src/config.c:80 #, c-format msgid "unknown syslog priority: %s" msgstr "непознат приоритет ÑиÑтемÑког дневника: %s" #: src/config.c:88 msgid "unexpected block statement" msgstr "неочекивана изјава блока" #: src/config.c:97 #, c-format msgid "expected %s" msgstr "очекивах „%s“" #: src/config.c:102 #, c-format msgid "expected %s, but found %s" msgstr "очекивах „%s“, али добих „%s“" #: src/config.c:124 #, c-format msgid "unknown syslog facility `%s'" msgstr "непознат помоћник ÑиÑтемÑког дневника „%s“" #: src/config.c:133 src/config.c:606 msgid "name" msgstr "name" #: src/config.c:134 msgid "" "Set syslog facility. Arg is one of the following: user, daemon, auth, " "authpriv, mail, cron, local0 through local7 (case-insensitive), or a " "facility number." msgstr "" "Подешава помоћника ÑиÑтемÑког дневника. Ðргумент може бити: user, daemon, " "auth, authpriv, mail, cron, од local0 до local7 (не разликује величину " "Ñлова), или број помоћника." #: src/config.c:139 grecs/src/format.c:36 grecs/src/tree.c:69 msgid "string" msgstr "string" #: src/config.c:139 msgid "Tag syslog messages with this string" msgstr "Означава поруке ÑиÑтемÑког дневника овом ниÑком" #: src/config.c:142 grecs/src/format.c:141 msgid "arg" msgstr "arg" #: src/config.c:143 msgid "Prefix each message with its priority" msgstr "Ставља приоритет Ñваке поруке као префикÑ" #: src/config.c:191 #, c-format msgid "%s: recursion depth does not match previous definition" msgstr "%s: дубина дубачења не одговара претходној одредници" #: src/config.c:212 msgid "no paths configured" msgstr "нема подешених путања" #: src/config.c:217 msgid "no command configured" msgstr "нема подешених наредби" #: src/config.c:229 grecs/src/tree.c:665 msgid "invalid use of block statement" msgstr "неиÑправна употреба изјаве блока" #: src/config.c:274 msgid "expected \"recursive\" or end of statement" msgstr "очекивах „recursive“ или крај изјаве" #: src/config.c:289 msgid "surplus argument" msgstr "Ñувишан аргумент" #: src/config.c:295 src/config.c:446 msgid "unexpected list" msgstr "неочекивани ÑпиÑак" #: src/config.c:326 src/config.c:341 src/config.c:356 msgid "unrecognized event code" msgstr "непозната шифра догађаја" #: src/config.c:438 msgid "surplus arguments" msgstr "Ñувишни аргументи" #: src/config.c:452 msgid "no such user" msgstr "нема таквог кориÑника" #: src/config.c:459 msgid "no such group" msgstr "нема такве групе" #: src/config.c:501 msgid "unrecognized option" msgstr "непозната опција" #: src/config.c:595 msgid "Pathname to watch" msgstr "Путања за оÑматрање" #: src/config.c:598 msgid "Events to watch for" msgstr "Догађаји за оÑматрање" #: src/config.c:601 msgid "regexp" msgstr "regexp" #: src/config.c:601 msgid "Files to watch for" msgstr "Датотеке за оÑматрање" #: src/config.c:604 msgid "Command to execute on event" msgstr "Ðаредба за извршавање при догађају" #: src/config.c:606 msgid "Run command as this user" msgstr "Покрени наредбу као овај кориÑник" #: src/config.c:609 msgid "seconds" msgstr "seconds" #: src/config.c:609 msgid "Timeout for the command" msgstr "ВременÑки рок за наредбу" #: src/config.c:611 msgid "List of additional options" msgstr "СпиÑак додатних могућноÑти" #: src/config.c:614 msgid "<arg: string> <arg: string>..." msgstr "<arg: ниÑка> <arg: ниÑка>..." #: src/config.c:615 msgid "Modify environment" msgstr "Мења окружење" #: src/config.c:622 msgid "Run as this user" msgstr "Покреће Ñе као овај кориÑник" #: src/config.c:624 msgid "Run in foreground" msgstr "Ради у позадини" #: src/config.c:626 msgid "file" msgstr "file" #: src/config.c:626 msgid "Set pid file name" msgstr "Подешава назив датотеке броја процеÑа" #: src/config.c:628 msgid "Configure syslog logging" msgstr "Подешава запиÑивање ÑиÑтемÑког дневника" #: src/config.c:630 msgid "level" msgstr "level" #: src/config.c:630 msgid "Set debug level" msgstr "Подешава ниво прочишћавања" #: src/config.c:632 msgid "Configure event watcher" msgstr "Подешава оÑматрача догађаја" #: src/config.c:643 msgid "" "Configuration file structure for direvent.\n" "For more information, use `info direvent configuration'." msgstr "" "Структура датотеке подешавања за диревент.\n" "За више података, кориÑтите „info direvent configuration“." #: src/direvent.c:142 src/direvent.c:164 src/watcher.c:93 src/watcher.c:125 msgid "not enough memory" msgstr "нема довољно меморије" #: src/direvent.c:274 #, c-format msgid "cannot open pidfile %s for writing: %s" msgstr "не могу да отворим датотеку броја процеÑа „%s“ зарад пиÑања: %s" #: src/direvent.c:302 #, c-format msgid "no user with UID %lu" msgstr "нема кориÑника Ñа одредником %lu" #: src/direvent.c:420 #, c-format msgid "cannot run `%s': fork failed: %s" msgstr "не могу да покренем „%s“: рачвање није уÑпело: %s" #: src/direvent.c:480 msgid "too many arguments" msgstr "превише аргумената" #: src/direvent.c:522 #, c-format msgid "%s %s started" msgstr "„%s“ %s је покренут" #: src/direvent.c:546 #, c-format msgid "%s %s stopped" msgstr "„%s“ %s је зауÑтављен" #: src/environ.c:25 msgid "environment: " msgstr "окружење:" #: src/progman.c:142 #, c-format msgid "process %lu exited successfully" msgstr "Ð¿Ñ€Ð¾Ñ†ÐµÑ %lu је уÑпешно изашао" #: src/progman.c:145 #, c-format msgid "process %lu failed with status %d" msgstr "Ð¿Ñ€Ð¾Ñ†ÐµÑ %lu није уÑпео Ñа Ñтањем „%d“" #: src/progman.c:155 #, c-format msgid "process %lu terminated on signal %d" msgstr "Ð¿Ñ€Ð¾Ñ†ÐµÑ %lu је окончан при Ñигналу „%d“" #: src/progman.c:158 #, c-format msgid "process %lu stopped on signal %d" msgstr "Ð¿Ñ€Ð¾Ñ†ÐµÑ %lu је зауÑтављен при Ñигналу „%d“" #: src/progman.c:163 #, c-format msgid "process %lu dumped core" msgstr "Ð¿Ñ€Ð¾Ñ†ÐµÑ %lu је избацио језгро" #: src/progman.c:167 #, c-format msgid "process %lu terminated with unrecognized status" msgstr "Ð¿Ñ€Ð¾Ñ†ÐµÑ %lu је окончан Ñа непознатим Ñтањем" #: src/progman.c:228 msgid "begin scanning process list" msgstr "почиње преглед ÑпиÑка процеÑа" #: src/progman.c:232 #, c-format msgid "process %lu timed out" msgstr "иÑтекло је време процеÑу %lu" #: src/progman.c:241 #, c-format msgid "scheduling alarm in %lu seconds" msgstr "заказујем аларм за %lu Ñекунде" #: src/progman.c:322 #, c-format msgid "cannot start redirector for %s, pipe failed: %s" msgstr "не могу да покренем преуÑмеривача за „%s“, Ñпојка није уÑпела: %s" #: src/progman.c:354 #, c-format msgid "cannot run redirector `%s': fork failed: %s" msgstr "не могу да покренем преуÑмеривача „%s“: рачвање није уÑпело: %s" #: src/progman.c:359 #, c-format msgid "redirector for %s started, pid=%lu" msgstr "преуÑмеривач за „%s“ је покренут, пид=%lu" #: src/progman.c:455 #, c-format msgid "starting %s, dir=%s, file=%s" msgstr "покрећем „%s“, дир=%s, датотека=%s" #: src/progman.c:484 #, c-format msgid "cannot change to %s: %s" msgstr "не могу да пређем у „%s“: %s" #: src/progman.c:512 #, c-format msgid "%s running; dir=%s, file=%s, pid=%lu" msgstr "„%s“ је покренут; дир=%s, датотека=%s, пид=%lu" #: src/progman.c:534 #, c-format msgid "waiting for %s (%lu) to terminate" msgstr "чекам на „%s“ (%lu) да заврши" #: src/watcher.c:183 src/watcher.c:513 #, c-format msgid "removing watcher %s" msgstr "уклањам оÑматрача „%s“" #: src/watcher.c:195 msgid "no watchers left; exiting now" msgstr "" #: src/watcher.c:262 #, c-format msgid "installing CREATE sentinel for %s" msgstr "" #: src/watcher.c:275 #, c-format msgid "creating watcher %s" msgstr "правим оÑматрача „%s“" #: src/watcher.c:281 src/watcher.c:296 #, c-format msgid "cannot set watcher on %s: %s" msgstr "не могу да подеÑим оÑматрача на „%s“: %s" #: src/watcher.c:377 #, c-format msgid "cannot create watcher %s/%s: not enough memory" msgstr "не могу да направим оÑматрача „%s/%s“: нема довољно меморије" #: src/watcher.c:384 #, c-format msgid "cannot create watcher %s/%s, stat failed: %s" msgstr "" "не могу да направим оÑматрача „%s/%s“, ниÑам уÑпео да добавим податке: %s" #: src/watcher.c:430 #, c-format msgid "cannot open directory %s: %s" msgstr "не могу да отворим директоријум „%s“: %s" #: src/watcher.c:447 #, c-format msgid "cannot stat %s/%s: not enough memory" msgstr "не могу да добавим податке за „%s/%s“: нема довољно меморије" #: src/watcher.c:452 #, c-format msgid "cannot stat %s: %s" msgstr "не могу да добавим податке за „%s“: %s" #: src/watcher.c:497 msgid "no event handlers configured" msgstr "нема подешених руковалаца догађаја" #: src/watcher.c:502 msgid "no event handlers installed" msgstr "нема инÑталираних руковалаца догађаја" #: grecs/src/format.c:33 msgid "void" msgstr "" #: grecs/src/format.c:46 msgid "number" msgstr "" #: grecs/src/format.c:49 msgid "time" msgstr "" #: grecs/src/format.c:52 msgid "boolean" msgstr "" #: grecs/src/format.c:55 msgid "IPv4" msgstr "" #: grecs/src/format.c:58 msgid "CIDR" msgstr "" #: grecs/src/format.c:61 #, fuzzy msgid "hostname" msgstr "name" #: grecs/src/format.c:64 msgid "sockaddr" msgstr "" #: grecs/src/format.c:67 msgid "section" msgstr "" #: grecs/src/format.c:70 msgid "null" msgstr "" #: grecs/src/format.c:133 msgid "Disabled;" msgstr "ИÑкључен;" #: grecs/src/opthelp.c:123 grecs/src/opthelp.c:269 msgid "Usage:" msgstr "Употреба:" #: grecs/src/opthelp.c:127 msgid "OPTION" msgstr "МОГУЋÐОСТ" #: grecs/src/opthelp.c:132 grecs/src/opthelp.c:427 msgid "Aliases" msgstr "ÐлијаÑи" #: grecs/src/opthelp.c:132 grecs/src/opthelp.c:427 msgid "Alias" msgstr "ÐлијаÑ" #: grecs/src/opthelp.c:186 msgid "" "Mandatory or optional arguments to long options are also mandatory or " "optional for any corresponding short options." msgstr "" "Обавезни или изборни аргументи за дуге опције Ñу такође обавезни или изборни " "за било које одговарајуће кратке опције." #. TRANSLATORS: The placeholder indicates the bug-reporting #. address for this package. Please add _another line_ saying #. "Report translation bugs to <...>\n" with the address for #. translation bugs (typically your translation team's web or #. email address). #: grecs/src/opthelp.c:202 #, c-format msgid "Report bugs to %s.\n" msgstr "Грешке пријавите на „%s“.\n" #: grecs/src/opthelp.c:205 #, c-format msgid "%s home page: <%s>\n" msgstr "Матична Ñтраница „%s“: <%s>.\n" #. TRANSLATORS: Translate "(C)" to the copyright symbol #. (C-in-a-circle), if this symbol is available in the user's #. locale. Otherwise, do not translate "(C)"; leave it as-is. #: grecs/src/opthelp.c:457 msgid "(C)" msgstr "©" #: grecs/src/opthelp.c:466 msgid "" "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." "html>\n" "This is free software: you are free to change and redistribute it.\n" "There is NO WARRANTY, to the extent permitted by law.\n" "\n" msgstr "" "Лиценца ОЈЛв3+: Гнуова ОЈЛ 3. издање или новије <http://gnu.org/licenses/gpl." "html>\n" "Ово је Ñлободан Ñофтвер: Ñлободни Ñте да га мењате и раÑподељујете.\n" "Ðе поÑтоји ÐИКÐКВРГÐРÐÐЦИЈÐ, у оквирима дозвољеним законом.\n" "\n" #: grecs/src/opthelp.c:483 msgid "Written by " msgstr "Приредио " #. TRANSLATORS: This string is used as a delimiter between #. authors' names as in: #. #. Written by Winnie the Pooh, Piglet ... #. #: grecs/src/opthelp.c:489 msgid ", " msgstr ", " #. TRANSLATORS: This string acts as a delimiter before the #. last author's names, e.g.: #. #. Written by Winnie the Pooh, Piglet and Christopher Robin. #. #: grecs/src/opthelp.c:495 msgid " and " msgstr " и " #: grecs/src/path-parser.c:62 #, c-format msgid "cannot open `%s'" msgstr "не могу да отворим „%s“" #: grecs/src/path-parser.c:108 grecs/src/path-parser.c:123 msgid "unexpected end of file" msgstr "неочекивани крај датотеке" #: grecs/src/path-parser.c:143 msgid "parse error" msgstr "грешка обраде" #: grecs/src/preproc.c:448 grecs/src/preproc.c:470 #, c-format msgid "Cannot stat `%s'" msgstr "Ðе могу да добавим податке за „%s“" #: grecs/src/preproc.c:453 grecs/src/preproc.c:458 msgid "Recursive inclusion" msgstr "ДубинÑко укључивање" #: grecs/src/preproc.c:461 #, c-format msgid "`%s' already included here" msgstr "„%s“ је већ укључено овде" #: grecs/src/preproc.c:465 #, c-format msgid "`%s' already included at top level" msgstr "„%s“ је већ укључено на највишем нивоу" #: grecs/src/preproc.c:480 #, c-format msgid "Cannot open `%s'" msgstr "Ðе могу да отворим „%s“" #: grecs/src/preproc.c:595 msgid "Cannot parse include line" msgstr "Ðе могу да обрадим ред укључивања" #: grecs/src/preproc.c:598 msgid "invalid include statement" msgstr "неиÑправна изјава укључивања" #: grecs/src/preproc.c:624 msgid "read error" msgstr "грешка читања" #: grecs/src/preproc.c:632 #, c-format msgid "%s: No such file or directory" msgstr "%s: Ðема такве датотеке или директоријума" #: grecs/src/preproc.c:698 #, c-format msgid "Unable to start external preprocessor `%s'" msgstr "Ðе могу да покренем Ñпољног предобрађивача „%s“" #: grecs/src/preproc.c:773 grecs/src/preproc.c:793 #, c-format msgid "Cannot run `%s'" msgstr "Ðе могу да покренем „%s“" #: grecs/src/symtab.c:236 msgid "element not found in table" msgstr "ниÑам нашао елемент у табели" #: grecs/src/symtab.c:238 msgid "symbol table is full" msgstr "табела Ñимбола је пуна" #: grecs/src/tree.c:70 msgid "list" msgstr "" #: grecs/src/tree.c:71 #, fuzzy msgid "one or more arguments" msgstr "превише аргумената" #: grecs/src/tree.c:75 #, fuzzy msgid "unrecognized type; please report" msgstr "непозната шифра догађаја" #: grecs/src/tree.c:320 msgid "section keyword used as a scalar" msgstr "" #: grecs/src/tree.c:322 msgid "scalar keyword used as a section" msgstr "" #: grecs/src/tree.c:325 #, fuzzy msgid "unknown keyword" msgstr "Ðепозната кључна реч" #: grecs/src/tree.c:360 #, c-format msgid "%s: not a valid boolean value" msgstr "%s: није иÑправна логичка вредноÑÑ‚" #: grecs/src/tree.c:391 #, c-format msgid "%s: UNIX socket name too long" msgstr "%s: назив ЈУÐИКС прикључнице је предуг" #: grecs/src/tree.c:420 grecs/src/tree.c:644 #, c-format msgid "%s: not a valid IP address or hostname" msgstr "%s: није иÑправна ИП адреÑа или назив домаћина" #: grecs/src/tree.c:444 #, c-format msgid "%s: not a valid port number" msgstr "%s: није иÑправан број прикључника" #: grecs/src/tree.c:452 msgid "missing port number" msgstr "недоÑтаје број прикључника" #: grecs/src/tree.c:501 msgid "numeric overflow" msgstr "прекорачење бројева" #: grecs/src/tree.c:506 msgid "value out of allowed range" msgstr "вредноÑÑ‚ је изван дозвољеног опÑега" #: grecs/src/tree.c:541 grecs/src/tree.c:571 #, c-format msgid "not a number (stopped near `%s')" msgstr "није број (Ñтадох близу „%s“)" #: grecs/src/tree.c:635 #, c-format msgid "%s: not a valid IP address" msgstr "%s: није иÑправна ИП адреÑа" #: grecs/src/tree.c:774 #, c-format msgid "too many arguments to `%s'; missing semicolon?" msgstr "превише аргумената за „%s“; недоÑтаје запетачка?" #: grecs/src/tree.c:788 grecs/src/tree.c:836 #, c-format msgid "INTERNAL ERROR at %s:%d: unhandled data type %d" msgstr "УÐУТРÐШЊРГРЕШКРна „%s“:%d: непозната врÑта података „%d“" #: grecs/src/tree.c:803 #, c-format msgid "%s: incompatible data type in list item #%d" msgstr "%s: неÑаглаÑна врÑта података у %d. Ñтавци ÑпиÑка" #: grecs/src/tree.c:823 #, c-format msgid "incompatible data type for `%s'" msgstr "неÑаглаÑна врÑта података за „%s“" #: grecs/wordsplit/wordsplit.c:69 grecs/wordsplit/wordsplit.c:2855 msgid "memory exhausted" msgstr "нема више меморије" #: grecs/wordsplit/wordsplit.c:121 msgid "memory exhausted while trying to store error context" msgstr "" #: grecs/wordsplit/wordsplit.c:868 msgid "Restarting" msgstr "" #: grecs/wordsplit/wordsplit.c:1607 #, c-format msgid "%.*s: variable null or not set" msgstr "%.*s: променљива је ништавна или није поÑтављена" #: grecs/wordsplit/wordsplit.c:1637 #, c-format msgid "warning: undefined variable `%.*s'" msgstr "упозорење: неодређена променљива „%.*s“" #: grecs/wordsplit/wordsplit.c:2141 #, c-format msgid "no files match pattern %s" msgstr "нема датотека које одговарају обраÑцу „%s“" #: grecs/wordsplit/wordsplit.c:2603 msgid "WS trimming" msgstr "Ñкраћивање поделе речи" #: grecs/wordsplit/wordsplit.c:2605 msgid "command substitution" msgstr "замена наредбе" #: grecs/wordsplit/wordsplit.c:2607 grecs/wordsplit/wordsplit.c:2615 msgid "coalesce list" msgstr "Ñпаја ÑпиÑак" #: grecs/wordsplit/wordsplit.c:2609 msgid "tilde expansion" msgstr "ширење тилде" #: grecs/wordsplit/wordsplit.c:2611 msgid "variable expansion" msgstr "ширење променљиве" #: grecs/wordsplit/wordsplit.c:2613 msgid "quote removal" msgstr "уклањање цитата" #: grecs/wordsplit/wordsplit.c:2617 msgid "path expansion" msgstr "ширење путање" #: grecs/wordsplit/wordsplit.c:2642 #, c-format msgid "(%02d) Input:%.*s;" msgstr "(%02d) Улаз:%.*s;" #: grecs/wordsplit/wordsplit.c:2668 msgid "Initial list:" msgstr "Почетни ÑпиÑак:" #: grecs/wordsplit/wordsplit.c:2683 msgid "Coalesced list:" msgstr "Спојени ÑпиÑак:" #: grecs/wordsplit/wordsplit.c:2853 msgid "no error" msgstr "нема грешке" #: grecs/wordsplit/wordsplit.c:2854 msgid "missing closing quote" msgstr "недоÑтају затварајући наводници" #: grecs/wordsplit/wordsplit.c:2856 msgid "invalid wordsplit usage" msgstr "неиÑправна употреба поделе речи" #: grecs/wordsplit/wordsplit.c:2857 msgid "unbalanced curly brace" msgstr "неуравнотежена витичаÑта заграда" #: grecs/wordsplit/wordsplit.c:2858 msgid "undefined variable" msgstr "неодређена променљива" #: grecs/wordsplit/wordsplit.c:2859 msgid "input exhausted" msgstr "нема више улаза" #: grecs/wordsplit/wordsplit.c:2860 msgid "unbalanced parenthesis" msgstr "неуравнотежени наводници" #: grecs/wordsplit/wordsplit.c:2861 msgid "globbing error" msgstr "грешка шаблонирања" #: grecs/wordsplit/wordsplit.c:2862 #, fuzzy msgid "user-defined error" msgstr "грешка читања" #: grecs/wordsplit/wordsplit.c:2863 msgid "invalid parameter number in assignment" msgstr "" #: grecs/wordsplit/wordsplit.c:2875 msgid "unknown error" msgstr "непозната грешка" #: grecs/wordsplit/wordsplit.c:2884 #, c-format msgid "missing closing %c (start near #%lu)" msgstr "недоÑтаје затварајућа %c (почиње близу #%lu)" #~ msgid "unterminated regexp" #~ msgstr "недовршен рег. израз" #~ msgid "unrecognized flag: %c" #~ msgstr "непозната заÑтавица: %c" #~ msgid "out of memory" #~ msgstr "нема више меморије" #~ msgid "%s: unknown keyword" #~ msgstr "%s: непозната кључна реч" #~ msgid "(%02d) Restart:%.*s;" #~ msgstr "(%02d) Поновно покретање:%.*s;" #~ msgid "INTERNAL ERROR at %s:%d" #~ msgstr "УÐУТРÐШЊРГРЕШКРна „%s“:%d" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/po/remove-potcdate.sin�����������������������������������������������������������������0000644�0001750�0001750�00000000660�13244106112�017411� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Sed script that remove the POT-Creation-Date line in the header entry # from a POT file. # # The distinction between the first and the following occurrences of the # pattern is achieved by looking at the hold space. /^"POT-Creation-Date: .*"$/{ x # Test if the hold space is empty. s/P/P/ ta # Yes it was empty. First occurrence. Remove the line. g d bb :a # The hold space was nonempty. Following occurrences. Do nothing. x :b } ��������������������������������������������������������������������������������direvent-5.2/po/stamp-po����������������������������������������������������������������������������0000644�0001750�0001750�00000000012�13512402637�015263� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������timestamp ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/po/pt_BR.gmo���������������������������������������������������������������������������0000644�0001750�0001750�00000033716�13512402637�015333� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Þ•����«������t��å���Ì ������`�����a�����g�� ���†�� ���”�����¢��$���¶�����Û�����ù��+��������C��&���^�����…�����£��6���¿�����ö����� ����� ����������/�����5�����=�����N�����h�����x�����‰�����™��c���µ����������1�����J�� ���N�����X�����l�����q��,���„�����±�����Ì��/���à������� ���&��È���4�����ý��s��������Œ�����Ÿ�����¤�����½�� ���Ä�����Ò�����×�����Ü��%���î����������*�����>�����R�����c�����|�����Ž�����ž��›���°��$���L��`���q��"���Ò�����õ����� ��*��������=�� ���D�� ���P�����\��"���e�����ˆ�����£�����¹�����½�����Ù��,���ñ��.��������M�����^��&���{�� ���¢��+���Ã�����ï��/��� ��$���<�����a��!���t�� ���–�����¤�����¹�����Í�� ���è��(���ö�� ��������+�����E�����J�����Y�����y�����Ž�����ž�����¸�����×�����ï��T���õ�����J��$���[�����€�����–�����ª�����¯�����Å�����Î�����ë����������!�� ���5�� ���C�����P�� ���e�����†�����˜�� ���©�����µ�����Ä�����Ü��!���ü�� �����#���?��/���c�����“�� ���©�� ���·��"���Â�����å�����ì���������������&�����F�����N�� ���]�����j�����~�����ž�����»�����Â�����Ó�����å�����ú����� ��.��������L�����c�����z����������¨�����¿�� ���Ï�����Ý�����ú����������2�����J�����^�����y��!���Œ��"���®����Ñ�����ç!��%���ë!�� ���"�� ���"�����+"��-���="��*���k"��%���–"��4���¼"��#���ñ"��;���#��%���Q#��'���w#��H���Ÿ#�����è#�����ý#�����$�����$�����!$�����)$�����2$��-���P$�� ���~$��'���Ÿ$�����Ç$�����Ù$��p���ù$�����j%�����‰%�����£%�� ���§%�����µ%�����Ì%�����Ô%��1���ì%��!���&�����@&��3���\&��"���&�����³&��Ø���Â&�����›'�����¸'�����H(�����Z(��)���_(�����‰(�����‘(�����¡(�����¦(�����«(��)���¾(�����è(�����)�����)�����/)��"���J)�����m)�����‡)�����¤)��Å���¿)��%���…*��f���«*��%���+��#���8+�����\+��6���e+�����œ+�����¡+�� ���µ+�����Â+��#���Ë+�����ï+�� ���,�����&,��*���*,��&���U,��:���|,��@���·,�����ø,��,���-��9���C-��'���}-��5���¥-��%���Û-��D���.��<���F.��)���ƒ.��(���­.�����Ö.�����í.�����/��"���/�� ���@/��+���K/�� ���w/�����ƒ/�����¡/��(���©/��%���Ò/�����ø/�����0�����)0��&���H0��'���o0�����—0��Z���ž0�����ù0��,��� 1�����81�����N1�����h1�����m1�� ���ˆ1��(���”1��&���½1��(���ä1����� 2�����(2�����:2�����O2��(���k2�����”2�����ª2�����¼2�����Ì2��#���á2�����3��#���%3��!���I3��%���k3��3���‘3��#���Å3�����é3�����ü3��(��� 4�����54�����H4�����b4�����z4�� ���•4�����¶4�����¿4�����Ï4�����â4��*���ý4�� ���(5�����I5�����O5�����d5��"���z5�����5�����®5��7���À5�����ø5�����6�����06�� ���H6�����i6�����6�����’6��#���¤6��"���È6��"���ë6��"���7�����17��!���J7�����l7��$���ƒ7��%���¨7�����Z������U���£������� ���2�������A���P���3���‡��������������h���M���4���™���K���7�������_�������T���B���Y���—����������I�������[��������������¨���¦���&�������š���”�������¢���`�������œ���6������!���������������˜�������Ž������\��������������"���(�������•���>������f���¤�������@���9���������)�������€���������������ž���N���,���Š���q���¥���Ÿ���������������{���g���/���«���+���E���V���0����������-���5������x���G��� ���J������� ���l���L���.����������“���R�������k��������������t����������W���o���„���¡���†���H���=������^���������������u�������#���~��� ���X���ƒ���Q�������r�������F��������������������������§���}���‘���%���w�������n���c��� �������‚������:�������j�������1���y���v������m���*���ˆ������������…������’���b���<���O���–�������d���©���e���p���s���›���$���Œ���;���‰����������]���|���C�������ª���S���'�������?���‹��� ������8������� ����������������������a����������i�������z���D���� and �%.*s: variable null or not set�%s %s started�%s %s stopped�%s home page: <%s> �%s running; dir=%s, file=%s, pid=%lu�%s: No such file or directory�%s: UNIX socket name too long�%s: incompatible data type in list item #%d�%s: not a valid IP address�%s: not a valid IP address or hostname�%s: not a valid boolean value�%s: not a valid port number�%s: recursion depth does not match previous definition�(%02d) Input:%.*s;�(C)�, �<arg: string> <arg: string>...�Alias�Aliases�Cannot open `%s'�Cannot parse include line�Cannot run `%s'�Cannot stat `%s'�Coalesced list:�Command to execute on event�Configuration file structure for direvent. For more information, use `info direvent configuration'.�Configure event watcher�Configure syslog logging�DIR�Disabled;�Events to watch for�FILE�Files to watch for�GNU direvent monitors changes in directories�Give a short usage message�Give this help list�INTERNAL ERROR at %s:%d: unhandled data type %d�Include search path: �Initial list:�License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. �List of additional options�Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options.�Modify environment�NAME�No include search path. �OPTION�Other options�PRIO�PROG�Pathname to watch�Prefix each message with its priority�Print program version�Recursive inclusion�Report bugs to %s. �Run as this user�Run command as this user�Run in foreground�Set debug level�Set pid file name�Set syslog facility. Arg is one of the following: user, daemon, auth, authpriv, mail, cron, local0 through local7 (case-insensitive), or a facility number.�Tag syslog messages with this string�The optional CONFIG argument supplies the name of the configuration file to use instead of %s. �This direvent uses %s interface. �Timeout for the command�USER�Unable to start external preprocessor `%s'�Usage:�WS trimming�Written by �[CONFIG]�`%s' already included at top level�`%s' already included here�add include directory�arg�begin scanning process list�cannot change to %s: %s�cannot create watcher %s/%s, stat failed: %s�cannot create watcher %s/%s: not enough memory�cannot open `%s'�cannot open directory %s: %s�cannot open pidfile %s for writing: %s�cannot run `%s': fork failed: %s�cannot run redirector `%s': fork failed: %s�cannot set watcher on %s: %s�cannot start redirector for %s, pipe failed: %s�cannot stat %s/%s: not enough memory�cannot stat %s: %s�check configuration file and exit�coalesce list�command substitution�creating watcher %s�element not found in table�environment: �expected "recursive" or end of statement�expected %s�expected %s, but found %s�file�globbing error�incompatible data type for `%s'�increase debug level�input exhausted�invalid include statement�invalid use of block statement�invalid wordsplit usage�level�log everything with priority PRIO and higher to the stderr, as well as to the syslog�memory exhausted�missing closing %c (start near #%lu)�missing closing quote�missing port number�name�no command configured�no error�no event handlers configured�no event handlers installed�no files match pattern %s�no paths configured�no such group�no such user�no user with UID %lu�not a number (stopped near `%s')�not enough memory�numeric overflow�parse error�path expansion�process %lu dumped core�process %lu exited successfully�process %lu failed with status %d�process %lu stopped on signal %d�process %lu terminated on signal %d�process %lu terminated with unrecognized status�process %lu timed out�quote removal�read error�redirector for %s started, pid=%lu�regexp�remain in foreground�removing watcher %s�run as this user�scheduling alarm in %lu seconds�seconds�self-test mode�set PID file�set syslog facility�show configuration file summary�starting %s, dir=%s, file=%s�string�surplus argument�surplus arguments�symbol table is full�tilde expansion�too many arguments�too many arguments to `%s'; missing semicolon?�unbalanced curly brace�unbalanced parenthesis�undefined variable�unexpected block statement�unexpected end of file�unexpected list�unknown error�unknown syslog facility `%s'�unknown syslog facility: %s�unknown syslog priority: %s�unrecognized event code�unrecognized option�value out of allowed range�variable expansion�waiting for %s (%lu) to terminate�warning: undefined variable `%.*s'�Project-Id-Version: direvent 5.1 Report-Msgid-Bugs-To: bug-direvent@gnu.org.ua POT-Creation-Date: 2019-07-13 19:23+0300 PO-Revision-Date: 2016-08-09 15:33-0200 Last-Translator: Rafael Fontenelle <rafaelff@gnome.org> Language-Team: Brazilian Portuguese <ldpbr-translation@lists.sourceforge.net> Language: pt_BR MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Bugs: Report translation errors to the Language-Team address. Plural-Forms: nplurals=2; plural=(n > 1); X-Generator: Virtaal 0.7.1 � e �%.*s: variável nula ou não definida�%s %s iniciou�%s %s parou�Site do %s: <%s> �%s em execução, dir=%s, arquivo=%s, pid=%lu�%s: Arquivo ou diretório não encontrados�%s: nome de soquete UNIX longo demais�%s: tipo de dados incompatível na item de lista #%d�%s: não é um endereço IP válido�%s: não é um endereço de IP ou nome de máquina válidos�%s: não é um valor booleano válido�%s: não é um número de porta válido�%s: a profundidade de recursão não corresponde ao definido previamente�(%02d) Entrada:%.*s;�(C)�, �<arg: texto> <arg: texto>...�Apelido�Apelidos�Não foi possível abrir "%s"�Não foi possível analisar a linha incluída�Não foi possível executar "%s"�Não foi possível obter status de "%s"�Lista coalescida:�Comando para executar no evento�Estrutura de arquivo de configuração para direvent. Para mais informação, use "info direvent configuration".�Configure observador de evento�Configura registro syslog�DIR�Desabilitado;�Eventos a observar por�ARQUIVO�Arquivos a observar por�GNU direvent monitora alterações em diretórios�Fornece uma mensagem curta de uso�Fornece essa lista de ajuda�ERRO INTERNO em %s:%d: tipo de dados não lidado %d�Caminho de pesquisa de inclusão: �Lista inicial:�Licença GPLv3+: GNU GPL versão 3 ou posterior <http://gnu.org/licenses/gpl.html>. Esse é um software livre: você é livre para modificá-lo e redistribuí-lo. NÃO Hà GARANTIA, na extensão permitida pela lei. �Lista de opções adicionais�Parâmetros obrigatórios ou opcionais para opções longas são também obrigatórios ou opcionais para qualquer opção curta correspondente.�Modifica ambiente�NOME�Nenhum caminho de pesquisa de inclusão. �OPÇÃO�Outras opções�PRIO�PROG�Caminho a observar�Prefixa cada mensagem com essa prioridade�Exibe a versão do programa�Inclusão recursiva�Relate erros para %s. �Executa como esse usuário�Executa comando como esse usuário�Executa em primeiro plano�Define nível de depuração�Define nome de arquivo pid�Define facilidade syslog. Arg é um dentre os seguintes: user, daemon, auth, authpriv, mail, cron, local0 até local7 (sem diferenciação de maiúsculo/minúsculo) ou uo número de uma facilidade.�Marca mensagens syslog com esse texto�O argumento opcional CONFIG fornece o nome do arquivo de configuração a ser usado ao invés de %s. �Esse direvent usa uma interface %s. �Tempo limite de espera pelo comando�USUÃRIO�Não foi possível iniciar preprocessador externo "%s"�Uso:�Aparar alterações�Escrito por �[CONFIG]�"%s" já incluso no nível superior�"%s" já incluso aqui�adiciona diretório de inclusão�arg�início de varredura de lista de processos�não foi possível alterar para %s: %s�não foi possível criar observador %s/%s, stat falhou: %s�não foi possível criar observador %s/%s: memória insuficiente�não foi possível abrir o %s�não foi possível abrir o diretório %s: %s�não é possível abrir o arquivo PID %s para escrita: %s�não é possível "%s": fork falhou: %s�não foi possível redirecionar "%s": fork falhou: %s�não foi definir observador em %s: %s�não foi possível iniciar o redirecionador para %s, pipe falhou: %s�não foi possível obter status %s/%s: memória insuficiente�não foi possível obter status de %s: %s�verifica arquivo de configuração e sai�lista de coalescência�substituição de comando�criando observador %s�elemento não encontrado na tabela�ambiente: �esperado "recursive" ou fim de declaração�esperava %s�esperava %s, mas encontrou %s�arquivo�erro de casamento de padrões (globbing)�tipo de dados incompatível para "%s"�aumenta o nível de depuração�entrada esgotada�declaração inclusa inválida�uso inválido de declaração de bloco�uso inválido de separação de palavra�nível�registra tudo com prioridade PRIO ou maior para a saída de erro, assim como para o syslog�memória esgotada�faltando fechar %c (início próximo a #%lu)�faltando fechar aspas�faltando número de porta�nome�nenhum comando configurado�nenhum erro�nenhum manipulador de evento configurado�nenhum manipulador de evento instalado�nenhum arquivo corresponde ao padrão %s�nenhum caminho configurado�grupo inexistente�usuário inexistente�nenhum usuário com UID %lu�não é um número (parou perto de "%s")�memória insuficiente�estouro numérico�erro de analise�expansão de caminho�o processo %lu despejou seu núcleo�o processo %lu saiu com sucesso�o processo %lu saiu com o status %d�o processo %lu parou com sinal %d�o processo %lu terminado com sinal %d�o processo %lu terminou com status não reconhecido�o processo %lu esgotou tempo limite�remoção de aspas�erro de leitura�redirecionador para %s iniciado, pid=%lu�expressão regular�mantém em primeiro plano�removendo observador %s�executa como esse usuário�agendando alarme em %lu segundos�segundos�modo auto-teste�define arquivo PID�define a facilidade syslog�mostra resumo do arquivo de configuração�iniciando %s, dir=%s, arquivo=%s�texto�argumento em excesso�argumentos em excesso�tabela de símbolos está completo�expansão de til�argumentos demais�argumentos demais para "%s"; faltando ponto-e-vírgula?�chave "{}" não balanceada�parênteses não balanceados�variável não definida�declaração de bloco inesperada�fim de linha inesperado�lista inesperada�erro desconhecido�facilidade syslog desconhecida "%s"�facilidade syslog desconhecida: %s�prioridade syslog desconhecida: %s�código de evento não reconhecido�opção não reconhecida�valor fora do intervalo permitido�expansão de variável�esperando por %s (%lu) ser terminado�aviso: variável não definida "%.*s"���������������������������������������������������direvent-5.2/po/insert-header.sin�������������������������������������������������������������������0000644�0001750�0001750�00000001240�13244106112�017040� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Sed script that inserts the file called HEADER before the header entry. # # At each occurrence of a line starting with "msgid ", we execute the following # commands. At the first occurrence, insert the file. At the following # occurrences, do nothing. The distinction between the first and the following # occurrences is achieved by looking at the hold space. /^msgid /{ x # Test if the hold space is empty. s/m/m/ ta # Yes it was empty. First occurrence. Read the file. r HEADER # Output the file's contents by reading the next line. But don't lose the # current line while doing this. g N bb :a # The hold space was nonempty. Following occurrences. Do nothing. x :b } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/po/es.gmo������������������������������������������������������������������������������0000644�0001750�0001750�00000033444�13512402637�014732� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Þ•����«������t��å���Ì ������`�����a�����g�� ���†�� ���”�����¢��$���¶�����Û�����ù��+��������C��&���^�����…�����£��6���¿�����ö����� ����� ����������/�����5�����=�����N�����h�����x�����‰�����™��c���µ����������1�����J�� ���N�����X�����l�����q��,���„�����±�����Ì��/���à������� ���&��È���4�����ý��s��������Œ�����Ÿ�����¤�����½�� ���Ä�����Ò�����×�����Ü��%���î����������*�����>�����R�����c�����|�����Ž�����ž��›���°��$���L��`���q��"���Ò�����õ����� ��*��������=�� ���D�� ���P�����\��"���e�����ˆ�����£�����¹�����½�����Ù��,���ñ��.��������M�����^��&���{�� ���¢��+���Ã�����ï��/��� ��$���<�����a��!���t�� ���–�����¤�����¹�����Í�� ���è��(���ö�� ��������+�����E�����J�����Y�����y�����Ž�����ž�����¸�����×�����ï��T���õ�����J��$���[�����€�����–�����ª�����¯�����Å�����Î�����ë����������!�� ���5�� ���C�����P�� ���e�����†�����˜�� ���©�����µ�����Ä�����Ü��!���ü�� �����#���?��/���c�����“�� ���©�� ���·��"���Â�����å�����ì���������������&�����F�����N�� ���]�����j�����~�����ž�����»�����Â�����Ó�����å�����ú����� ��.��������L�����c�����z����������¨�����¿�� ���Ï�����Ý�����ú����������2�����J�����^�����y��!���Œ��"���®��ó��Ñ�����Å!��$���É!�����î!�����ý!����� "��*���&"�� ���Q"��)���r"��<���œ"�� ���Ù"��4���ú"�� ���/#��#���P#��:���t#�����¯#�����Ä#�����Ç#�����Ê#�����é#�����ï#�����÷#��$��� $�����2$�����K$�����d$�����x$��|���•$�����%��,���.%�����[%�� ���_%�����l%�����ƒ%�����‹%��.���¤%�����Ó%�����ñ%��6��� &�����A&�����]&��Ô���l&�����A'��‡���a'�����é'�����ú'�����(����� (�����((�����7(�����<(�����A(��%���Y(�� ���(����� (�����µ(�����Ð(��!���ê(����� )�����$)��#���D)��Å���h)��1���.*��j���`*��0���Ë*�����ü*�����+��1���#+�����U+�� ���e+�� ���s+�����€+��$���‘+�����¶+�����Ï+�����ê+��%���î+�����,��5���0,��3���f,�����š,��#���°,��0���Ô,��2���-��?���8-��%���x-��9���ž-��/���Ø-�����.��&���!.�����H.�����Z.�����r.�����„.�� ���¤.��.���®.�� ���Ý.�����é.�����/�����/��'���"/�� ���J/�����k/�����{/��'���›/��%���Ã/�����é/��g���ï/�����W0��&���g0�����Ž0�����©0�����Ä0�����É0�� ���å0��(���ï0��&���1��%���?1�����e1�� ���|1�����Š1�����š1��(���²1�����Û1�����ò1��.��� 2�����:2�����M2��$���m2��!���’2��"���´2��#���×2��.���û2�����*3�����G3�����^3��$���o3�����”3�����›3�����¶3�����É3��!���ã3�����4�����4����� 4�����74��-���S4�� ���4�����¢4�����©4�����¼4�����Ð4�����í4�����þ4��6���5�����K5�����d5�����€5��!���•5�����·5�����Ô5�����æ5��3���ø5��#���,6��#���P6�����t6�����“6�����©6�����È6��"���Ü6��$���ÿ6�����Z������U���£������� ���2�������A���P���3���‡��������������h���M���4���™���K���7�������_�������T���B���Y���—����������I�������[��������������¨���¦���&�������š���”�������¢���`�������œ���6������!���������������˜�������Ž������\��������������"���(�������•���>������f���¤�������@���9���������)�������€���������������ž���N���,���Š���q���¥���Ÿ���������������{���g���/���«���+���E���V���0����������-���5������x���G��� ���J������� ���l���L���.����������“���R�������k��������������t����������W���o���„���¡���†���H���=������^���������������u�������#���~��� ���X���ƒ���Q�������r�������F��������������������������§���}���‘���%���w�������n���c��� �������‚������:�������j�������1���y���v������m���*���ˆ������������…������’���b���<���O���–�������d���©���e���p���s���›���$���Œ���;���‰����������]���|���C�������ª���S���'�������?���‹��� ������8������� ����������������������a����������i�������z���D���� and �%.*s: variable null or not set�%s %s started�%s %s stopped�%s home page: <%s> �%s running; dir=%s, file=%s, pid=%lu�%s: No such file or directory�%s: UNIX socket name too long�%s: incompatible data type in list item #%d�%s: not a valid IP address�%s: not a valid IP address or hostname�%s: not a valid boolean value�%s: not a valid port number�%s: recursion depth does not match previous definition�(%02d) Input:%.*s;�(C)�, �<arg: string> <arg: string>...�Alias�Aliases�Cannot open `%s'�Cannot parse include line�Cannot run `%s'�Cannot stat `%s'�Coalesced list:�Command to execute on event�Configuration file structure for direvent. For more information, use `info direvent configuration'.�Configure event watcher�Configure syslog logging�DIR�Disabled;�Events to watch for�FILE�Files to watch for�GNU direvent monitors changes in directories�Give a short usage message�Give this help list�INTERNAL ERROR at %s:%d: unhandled data type %d�Include search path: �Initial list:�License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. �List of additional options�Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options.�Modify environment�NAME�No include search path. �OPTION�Other options�PRIO�PROG�Pathname to watch�Prefix each message with its priority�Print program version�Recursive inclusion�Report bugs to %s. �Run as this user�Run command as this user�Run in foreground�Set debug level�Set pid file name�Set syslog facility. Arg is one of the following: user, daemon, auth, authpriv, mail, cron, local0 through local7 (case-insensitive), or a facility number.�Tag syslog messages with this string�The optional CONFIG argument supplies the name of the configuration file to use instead of %s. �This direvent uses %s interface. �Timeout for the command�USER�Unable to start external preprocessor `%s'�Usage:�WS trimming�Written by �[CONFIG]�`%s' already included at top level�`%s' already included here�add include directory�arg�begin scanning process list�cannot change to %s: %s�cannot create watcher %s/%s, stat failed: %s�cannot create watcher %s/%s: not enough memory�cannot open `%s'�cannot open directory %s: %s�cannot open pidfile %s for writing: %s�cannot run `%s': fork failed: %s�cannot run redirector `%s': fork failed: %s�cannot set watcher on %s: %s�cannot start redirector for %s, pipe failed: %s�cannot stat %s/%s: not enough memory�cannot stat %s: %s�check configuration file and exit�coalesce list�command substitution�creating watcher %s�element not found in table�environment: �expected "recursive" or end of statement�expected %s�expected %s, but found %s�file�globbing error�incompatible data type for `%s'�increase debug level�input exhausted�invalid include statement�invalid use of block statement�invalid wordsplit usage�level�log everything with priority PRIO and higher to the stderr, as well as to the syslog�memory exhausted�missing closing %c (start near #%lu)�missing closing quote�missing port number�name�no command configured�no error�no event handlers configured�no event handlers installed�no files match pattern %s�no paths configured�no such group�no such user�no user with UID %lu�not a number (stopped near `%s')�not enough memory�numeric overflow�parse error�path expansion�process %lu dumped core�process %lu exited successfully�process %lu failed with status %d�process %lu stopped on signal %d�process %lu terminated on signal %d�process %lu terminated with unrecognized status�process %lu timed out�quote removal�read error�redirector for %s started, pid=%lu�regexp�remain in foreground�removing watcher %s�run as this user�scheduling alarm in %lu seconds�seconds�self-test mode�set PID file�set syslog facility�show configuration file summary�starting %s, dir=%s, file=%s�string�surplus argument�surplus arguments�symbol table is full�tilde expansion�too many arguments�too many arguments to `%s'; missing semicolon?�unbalanced curly brace�unbalanced parenthesis�undefined variable�unexpected block statement�unexpected end of file�unexpected list�unknown error�unknown syslog facility `%s'�unknown syslog facility: %s�unknown syslog priority: %s�unrecognized event code�unrecognized option�value out of allowed range�variable expansion�waiting for %s (%lu) to terminate�warning: undefined variable `%.*s'�Project-Id-Version: direvent 5.1 Report-Msgid-Bugs-To: bug-direvent@gnu.org.ua POT-Creation-Date: 2019-07-13 19:23+0300 PO-Revision-Date: 2018-04-29 10:30+0200 Last-Translator: Francisco Javier Serrador <fserrador@gmail.com> Language-Team: Spanish <es@tp.org.es> Language: es MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Bugs: Report translation errors to the Language-Team address. X-Generator: Poedit 2.0.4 Plural-Forms: nplurals=2; plural=(n != 1); � y �%.*s: variable nula o no establecida�%s %s iniciado�%s %s detenido�%s página inicial: <%s> �%s ejecutando; dir=%s, fichero=%s, pid=%lu�%s: sin tal fichero o directorio�%s: nombre de socket UNIX demasiado largo�%s: tipo de datos incompatibles dentro de ítem de lista #%d�%s: no una dirección IP válida�%s: no una dirección IP válida u nombre hospedante�%s: no un valor booleana válido�%s: no un número de puerto válido�%s: profundidad recursiva no coincide definición anterior�(%02d) Entrada:%.*s;�©�, �<arg: cadena> <arg: cadena>...�Alias�Aliases�No puede abrir «%s»�No puedo interpretar línea incluida�No puedo ejecutar «%s»�No puedo declarar «%s»�Lista especificada:�Mandato a ejecutar en evento�Fichero de configuración estructurada para evento directorio. Para más información, emplee `info direvent configuration'.�Configurar vigía de evento�Configura bitácora para registro de sistema�DIR�Desactivado;�Eventos a vigilar para�FICHERO�VFicheros a vigilar para�Evento direccional GNU modifica en directorios�Da un mensaje de empleo corto�Da este listado de ayuda�ERROR INTERNO en %s:%d: tipo de datos %d no manipulado�Incluye ruta de búsqueda: �Lista inicial:�Licencia GPLv3+: GPL de GNU versión 3 o posterior <http://gnu.org/licenses/gpl.html>. Esto es software libre: usted es libre de cambiarlo y redistribuirlo. No hay NINGUNA GARANTÃA, hasta donde permite la ley. �Listado de opciones adicionales�Argumentos obligatorios u opcionales para opciones largas son también obligatorios u opcionales para opciones correspondientes cortas.�Modifica entorno�NOMBRE�No incluir ruta de búsqueda. �OPCIÓN�Otras opciones�PRIO�PROG�Ruta nombrada a vigilar�Prefija cada mensaje con su prioridad�Escribe la versión del programa�Inclusión recursiva�Comunique defectos a: %s. �Ejecuta como este usuario�Ejecuta mandato como este usuario�Ejecuta en primer plano�Establecer nivel de depuración�Establece nombre del fichero de pid�Establece capacidad syslog. Arg es uno de los siguientes: usuario, demonio, autoridad, autoridadpriv, correo, cron, local0 a tracés de local7 (indistinguible mayúsculas), o un número capacitado.�Etiquetar mensajes syslog con esta cadena textual�El argumento CONFIG opcional suministra el nombre del fichero de configuración a emplear en ligar de %s �Este directorio de evento utiliza %s interfaz. �Tiempo agotado para la mandato�USUARIO�Incapaz de iniciar un preprocesado externo «%s»�Modo de empleo:�Recortando WS�Escrito por �[CONFIGURACIÓN]�«%s» ya incluido en nivel superior�«%s» ya incluido aquí�añade directorio incluido�arg�iniciar listado de proceso analítico�no puede modificar a %s: %s�no puede crear vigía %s/%s, estadística fallada: %s�no puede crear vigía %s/%s: sin memoria suficiente�no puede abrir «%s»�no puede abrir el directorio %s: %s�no puede abrir fichero pid %s para escritura: %s�no puede ejecutar «%s»: bifurcación fallada: %s�no puede ejecutar redirección «%s»: bifurcación fallada: %s�no puede establecer vigía en: %s: %s�no puede iniciar redirector para %s, tubería fallada: %s�no puede declarar %s/%s: sin suficiente memoria�no puede declarar %s: %s�marca fichero de configuración y sale�lista cualificada�sustitución de mandato�creando vigía %s�elemento no encontrado en tabla�entorno: �esperado «recursivo» o final de declaración�esperaba %s�esperaba %s, pero encontré %s�fichero�error globalizado�tipo de datos incompatible para «%s»�incrementar nivel de depuración�entrada agotada�declaración incluida inválida�empleo inválido de bloque de sentencia�divisor de palabras mandado inválido�nivel�boletinar todo elemento con prioridad PRIO y superior al stderr, además al boletín del sistema syslog�memoria agotada�faltando cierre %c (inicio cerca #%lu)�faltando cierre de comilla�falta el número de puerto�name�ningún mandato configurado�sin error�ningún manipulador eventual configurado�ningún manipulador eventual instalado�sin ficheros coinciden con patrón %s�sin rutas configuradas�sin tal grupo�sin tal usuario�sin usuario con UID %lu�no un número (detenido cerca de «%s»)�sin memoria suficiente�desbordamiento numérico�incapaz resolverse lo que usted signific decir�expansión de ruta�procesa %lu volcado del núcleo�proceso %lu finalizado correctamente�proceso %lu fallado con estado %d�proceso %lu detenido con señal %d�proceso %lu terminado con señal %d�proceso %lu terminado con estado no reconocido�proceso temporal %lu agotado�supresión de comillas�error de lectura�redirector para %s iniciado, pid=%lu�expreg�permanecer en primer plano�quitando vigía %s�ejecuta como este usuario�horario de alarma en %lu segundos�segundos�modo auto-probado�establecer fichero PID�establecer capacidad syslog�muestra resumen del fichero de configuración�iniciando %s, dir=%s, fichero=%s�cadena�sin más argumento�sin más argumentos�lista simbólica está llena�expansión tilde�demasiados argumentos�demasiados argumentos a «%s»; ¿faltan punto y como?�rama curly desbalanceada�paréntesis desequilibrados�variable no definida�bloque de declaración inesperada�final de fichero no esperado�lista no esperada�error desconocido�capacidad de boletín de sistema desconocido «%s»�capacidad de syslog desconocida: %s�prioridad de syslog desconocida: %s�código eventual no reconocido�opción no reconocida�valor fuera de rango permitido�expansión variable�esperando a %s (%lu) para terminar�cuidado: variable no definida `%.*s'�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/po/pl.po�������������������������������������������������������������������������������0000644�0001750�0001750�00000053460�13512402637�014572� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Polish translations for GNU Direvent. # This file is distributed under the same license as the direvent package. # Copyright (C) 2016 Free Software Foundation, Inc. # # Sergey Poznyakoff <gray@gnu.org>, 2014, 2016. # msgid "" msgstr "" "Project-Id-Version: direvent 5.1\n" "Report-Msgid-Bugs-To: bug-direvent@gnu.org.ua\n" "POT-Creation-Date: 2019-07-13 19:23+0300\n" "PO-Revision-Date: 2016-08-08 16:54+0300\n" "Last-Translator: Sergey Poznyakoff <gray@gnu.org>\n" "Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n" "Language: pl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" "Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2;\n" #: cmdline.opt:26 msgid "increase debug level" msgstr "zwiÄ™kszenie poziomu diagnostyki" #: cmdline.opt:32 msgid "PRIO" msgstr "PRIO" #: cmdline.opt:32 msgid "" "log everything with priority PRIO and higher to the stderr, as well as to " "the syslog" msgstr "" "wyÅ›wietla komunikaty o priorytecie PRIO i wyższym na stderr oraz syslog" #: cmdline.opt:41 msgid "NAME" msgstr "NAZWA" #: cmdline.opt:41 msgid "set syslog facility" msgstr "ustawia urzÄ…dzenie syslogu" #: cmdline.opt:47 msgid "remain in foreground" msgstr "dziaÅ‚anie na pierwszym planie" #: cmdline.opt:53 msgid "DIR" msgstr "KATALOG" #: cmdline.opt:53 msgid "add include directory" msgstr "dodaje katalog plików nagłówkowych" #: cmdline.opt:59 msgid "PROG" msgstr "PROG" #: cmdline.opt:59 msgid "self-test mode" msgstr "ustawia tryb samotestowania" #: cmdline.opt:65 msgid "FILE" msgstr "PLIK" #: cmdline.opt:65 msgid "set PID file" msgstr "ustawia nazwÄ™ pliku PID" #: cmdline.opt:71 msgid "check configuration file and exit" msgstr "sprawdza jedynie skÅ‚adniÄ™ pliku konfiguracyjnego" #: cmdline.opt:77 msgid "USER" msgstr "UÅ»YTKOWNIK" # #: cmdline.opt:77 msgid "run as this user" msgstr "przechodzi do uprawnieÅ„ podanego użytkownika" #: cmdline.opt:87 msgid "show configuration file summary" msgstr "wyÅ›wietla podsumowanie instrukcji konfiguracyjnych" #: cmdline.opt:81 msgid "Other options" msgstr "Inne opcje" #: cmdline.opt:93 msgid "Give this help list" msgstr "WyÅ›wietl ten tekst pomocy" #: cmdline.opt:93 msgid "Give a short usage message" msgstr "WyÅ›wietl krótkie informacje o skÅ‚adni polecenia" #: cmdline.opt:93 msgid "Print program version" msgstr "WyÅ›wietl wersjÄ™ programu" #: cmdline.opt:13 msgid "GNU direvent monitors changes in directories" msgstr "GNU direvent monitoruje zmiany w katalogach" #: cmdline.opt:15 msgid "[CONFIG]" msgstr "[KONFIG]" #: cmdline.opt:95 #, c-format msgid "" "The optional CONFIG argument supplies the name of the configuration file\n" "to use instead of %s.\n" "\n" msgstr "" "Opcjonalny argument KONFIG podaje nazwÄ™ pliku konfiguracyjnego\n" "(domyÅ›lnie %s).\n" "\n" #. TRANSLATORS: %s is one of: inotify, kqueue #: cmdline.opt:99 #, c-format msgid "" "This direvent uses %s interface.\n" "\n" msgstr "Ten direvent używa interfejsu %s.\n" #: cmdline.opt:102 #, c-format msgid "Include search path:\n" msgstr "Åšcieżka szukania plików nagłówkowych\n" #: cmdline.opt:105 #, c-format msgid "No include search path.\n" msgstr "Brak katalogów plików nagłówkowych\n" #: src/config.c:63 #, c-format msgid "unknown syslog facility: %s" msgstr "nieznane urzÄ…dzenie syslog `%s'" #: src/config.c:80 #, c-format msgid "unknown syslog priority: %s" msgstr "nieznany priorytet syslog `%s'" #: src/config.c:88 msgid "unexpected block statement" msgstr "nieoczekiwana instrukcja blokowa" #: src/config.c:97 #, c-format msgid "expected %s" msgstr "oczekiwano %s" #: src/config.c:102 #, c-format msgid "expected %s, but found %s" msgstr "oczekiwano %s, ale znaleziono %s" #: src/config.c:124 #, c-format msgid "unknown syslog facility `%s'" msgstr "nieznane urzÄ…dzenie syslog `%s'" #: src/config.c:133 src/config.c:606 msgid "name" msgstr "nazwa" #: src/config.c:134 msgid "" "Set syslog facility. Arg is one of the following: user, daemon, auth, " "authpriv, mail, cron, local0 through local7 (case-insensitive), or a " "facility number." msgstr "" "Ustawia urzÄ…dzenie syslog. Dozwolone wartoÅ›ci argumentu: user, daemon, auth, " "authpriv, mail, cron, local0 do local7 (bez rozróżniania maÅ‚ych i wielkich " "liter), lub numer urzÄ…dzenia." #: src/config.c:139 grecs/src/format.c:36 grecs/src/tree.c:69 msgid "string" msgstr "Å‚aÅ„cuch" #: src/config.c:139 msgid "Tag syslog messages with this string" msgstr "Ustawia znacznik komunikatów." #: src/config.c:142 grecs/src/format.c:141 msgid "arg" msgstr "arg" #: src/config.c:143 msgid "Prefix each message with its priority" msgstr "Dodaje przedrostek priorytety do komunikatów" #: src/config.c:191 #, c-format msgid "%s: recursion depth does not match previous definition" msgstr "%s: głębokość rekurencji nie pasuje do poprzednio zdefiniowanej" # #: src/config.c:212 msgid "no paths configured" msgstr "brak skonfigurowanych Å›cieżek" #: src/config.c:217 msgid "no command configured" msgstr "brak skonfigurowanego polecenia" #: src/config.c:229 grecs/src/tree.c:665 msgid "invalid use of block statement" msgstr "nieprawidÅ‚owe użycie instrukcji blokowej" #: src/config.c:274 msgid "expected \"recursive\" or end of statement" msgstr "oczekiwano \"recursive\" lub koÅ„ca instrukcji" #: src/config.c:289 msgid "surplus argument" msgstr "za wiele argumentów" #: src/config.c:295 src/config.c:446 msgid "unexpected list" msgstr "nieoczekiwana lista" #: src/config.c:326 src/config.c:341 src/config.c:356 msgid "unrecognized event code" msgstr "nieznany kod wydarzenia" #: src/config.c:438 msgid "surplus arguments" msgstr "dodatkowe argumenty" #: src/config.c:452 msgid "no such user" msgstr "nie ma takiego użytkownika" #: src/config.c:459 msgid "no such group" msgstr "nie ma takiej grupy" #: src/config.c:501 msgid "unrecognized option" msgstr "nierozpoznana opcja" #: src/config.c:595 msgid "Pathname to watch" msgstr "Åšcieżka do obserwacji" #: src/config.c:598 msgid "Events to watch for" msgstr "Wydarzenia do obserwacji" #: src/config.c:601 msgid "regexp" msgstr "wyr.reg." #: src/config.c:601 msgid "Files to watch for" msgstr "Pliki do obserwowania" #: src/config.c:604 msgid "Command to execute on event" msgstr "Polecenie do wykonania w razie nastÄ…pienia wydarzenia" #: src/config.c:606 msgid "Run command as this user" msgstr "Wykonywanie poleceÅ„ z uprawnieniami podanego użytkownika" #: src/config.c:609 msgid "seconds" msgstr "sekundy" #: src/config.c:609 msgid "Timeout for the command" msgstr "Czas oczekiwania na zakoÅ„czenie wykonania polecenia" #: src/config.c:611 msgid "List of additional options" msgstr "Lista dodatkowych opcji" #: src/config.c:614 msgid "<arg: string> <arg: string>..." msgstr "<arg: Å‚aÅ„cuch> <arg: Å‚aÅ„cuch>..." #: src/config.c:615 msgid "Modify environment" msgstr "Modyfikacja Å›rodowiska" #: src/config.c:622 msgid "Run as this user" msgstr "Wykonywanie z uprawnieniami podanego użytkownika" #: src/config.c:624 msgid "Run in foreground" msgstr "DziaÅ‚anie w trybie pierwszoplanowym" #: src/config.c:626 msgid "file" msgstr "plik" #: src/config.c:626 msgid "Set pid file name" msgstr "Ustawia nazwÄ™ pliku PID" #: src/config.c:628 msgid "Configure syslog logging" msgstr "Konfiguracja rejestrowania zdarzeÅ„ przez syslog" #: src/config.c:630 msgid "level" msgstr "poziom" #: src/config.c:630 msgid "Set debug level" msgstr "Ustawienie poziomu diagnostyki" #: src/config.c:632 msgid "Configure event watcher" msgstr "Konfiguracja obserwatora wydarzeÅ„" #: src/config.c:643 msgid "" "Configuration file structure for direvent.\n" "For more information, use `info direvent configuration'." msgstr "" "Struktura pliku konfiguracyjnego programu direvent.\n" "Å»eby otrzymać wiÄ™cej informacji uruchom `info direvent configuration'." #: src/direvent.c:142 src/direvent.c:164 src/watcher.c:93 src/watcher.c:125 msgid "not enough memory" msgstr "brak pamiÄ™ci" #: src/direvent.c:274 #, c-format msgid "cannot open pidfile %s for writing: %s" msgstr "nie można otworzyć pliku %s do zapisu: %s" #: src/direvent.c:302 #, c-format msgid "no user with UID %lu" msgstr "brak użytkownika o UID %lu" #: src/direvent.c:420 #, c-format msgid "cannot run `%s': fork failed: %s" msgstr "nie udaje siÄ™ uruchomić `%s': wywoÅ‚anie fork nie powiodÅ‚o siÄ™: %s" #: src/direvent.c:480 msgid "too many arguments" msgstr "za dużo argumentów" #: src/direvent.c:522 #, c-format msgid "%s %s started" msgstr "%s %s uruchomiony" #: src/direvent.c:546 #, c-format msgid "%s %s stopped" msgstr "%s %s skoÅ„czyÅ‚ pracÄ™" #: src/environ.c:25 msgid "environment: " msgstr "Å›rodowisko: " #: src/progman.c:142 #, c-format msgid "process %lu exited successfully" msgstr "proces %lu zakoÅ„czyÅ‚ siÄ™ pomyÅ›lnie" #: src/progman.c:145 #, c-format msgid "process %lu failed with status %d" msgstr "proces %lu zakoÅ„czyÅ‚ siÄ™ ze stanem %d" #: src/progman.c:155 #, c-format msgid "process %lu terminated on signal %d" msgstr "proces %lu zakoÅ„czyÅ‚ siÄ™ na sygnaÅ‚ %d" #: src/progman.c:158 #, c-format msgid "process %lu stopped on signal %d" msgstr "proces %lu zatrzymaÅ‚ siÄ™ na sygnaÅ‚ %d" #: src/progman.c:163 #, c-format msgid "process %lu dumped core" msgstr "proces %lu zrzuciÅ‚ rdzeÅ„" #: src/progman.c:167 #, c-format msgid "process %lu terminated with unrecognized status" msgstr "proces %lu zakoÅ„czyÅ‚ siÄ™ z nierozpoznanym kodem" #: src/progman.c:228 msgid "begin scanning process list" msgstr "skanowanie listy procesów" #: src/progman.c:232 #, c-format msgid "process %lu timed out" msgstr "przekroczenie czasu oczekiwania na proces %lu" #: src/progman.c:241 #, c-format msgid "scheduling alarm in %lu seconds" msgstr "alarm za %lu sekund" #: src/progman.c:322 #, c-format msgid "cannot start redirector for %s, pipe failed: %s" msgstr "" "nie można uruchomić urzÄ…dzenia przekierowywujÄ…cego %s: zawiódÅ‚ pipe: %s" #: src/progman.c:354 #, c-format msgid "cannot run redirector `%s': fork failed: %s" msgstr "" "nie można uruchomić urzÄ…dzenia przekierowywujÄ…cego `%s': zawiódÅ‚ fork: %s" #: src/progman.c:359 #, c-format msgid "redirector for %s started, pid=%lu" msgstr "uruchomiono urzÄ…dzenie przekierowywujÄ…ce %s, pid=%lu" #: src/progman.c:455 #, c-format msgid "starting %s, dir=%s, file=%s" msgstr "rozruch %s, katalog=%s, plik=%s" #: src/progman.c:484 #, c-format msgid "cannot change to %s: %s" msgstr "nie można przejść do katalogu %s: %s" #: src/progman.c:512 #, c-format msgid "%s running; dir=%s, file=%s, pid=%lu" msgstr "uruchomiono %s; katalog=%s, plik=%s, pid=%lu" #: src/progman.c:534 #, c-format msgid "waiting for %s (%lu) to terminate" msgstr "czekanie na zakoÅ„czenie %s (%lu)" #: src/watcher.c:183 src/watcher.c:513 #, c-format msgid "removing watcher %s" msgstr "usuniÄ™cie obserwatora %s" #: src/watcher.c:195 msgid "no watchers left; exiting now" msgstr "" #: src/watcher.c:262 #, c-format msgid "installing CREATE sentinel for %s" msgstr "" #: src/watcher.c:275 #, c-format msgid "creating watcher %s" msgstr "utworzenie obserwatora %s" #: src/watcher.c:281 src/watcher.c:296 #, c-format msgid "cannot set watcher on %s: %s" msgstr "nie można ustawić obserwatora na %s: %s" #: src/watcher.c:377 #, c-format msgid "cannot create watcher %s/%s: not enough memory" msgstr "nie można stworzyć obserwatora %s/%s: brak pamiÄ™ci" #: src/watcher.c:384 #, c-format msgid "cannot create watcher %s/%s, stat failed: %s" msgstr "cannot create watcher %s/%s: błąd wywoÅ‚ania stat: %s" #: src/watcher.c:430 #, c-format msgid "cannot open directory %s: %s" msgstr "nie można otworzyć katalogu %s: %s" #: src/watcher.c:447 #, c-format msgid "cannot stat %s/%s: not enough memory" msgstr "stat %s/%s: brak pamiÄ™ci" #: src/watcher.c:452 #, c-format msgid "cannot stat %s: %s" msgstr "stat(%s) nie powiódÅ‚ siÄ™: %s" # #: src/watcher.c:497 msgid "no event handlers configured" msgstr "brak skonfigurowanych programów obsÅ‚ugi wydarzeÅ„" #: src/watcher.c:502 msgid "no event handlers installed" msgstr "nie zainstalowano żadnych programów obsÅ‚ugi wydarzeÅ„" #: grecs/src/format.c:33 msgid "void" msgstr "" #: grecs/src/format.c:46 msgid "number" msgstr "" #: grecs/src/format.c:49 msgid "time" msgstr "" #: grecs/src/format.c:52 msgid "boolean" msgstr "" #: grecs/src/format.c:55 msgid "IPv4" msgstr "" #: grecs/src/format.c:58 msgid "CIDR" msgstr "" #: grecs/src/format.c:61 #, fuzzy msgid "hostname" msgstr "nazwa" #: grecs/src/format.c:64 msgid "sockaddr" msgstr "" #: grecs/src/format.c:67 msgid "section" msgstr "" #: grecs/src/format.c:70 msgid "null" msgstr "" #: grecs/src/format.c:133 msgid "Disabled;" msgstr "Wyłączono;" #: grecs/src/opthelp.c:123 grecs/src/opthelp.c:269 msgid "Usage:" msgstr "SkÅ‚adnia:" #: grecs/src/opthelp.c:127 msgid "OPTION" msgstr "OPCJA" #: grecs/src/opthelp.c:132 grecs/src/opthelp.c:427 msgid "Aliases" msgstr "Aliasy" #: grecs/src/opthelp.c:132 grecs/src/opthelp.c:427 msgid "Alias" msgstr "Alias" #: grecs/src/opthelp.c:186 msgid "" "Mandatory or optional arguments to long options are also mandatory or " "optional for any corresponding short options." msgstr "" "Argumenty obowiÄ…zkowe lub opcjonalne dla dÅ‚ugich opcji sÄ… również " "obowiÄ…zkowe lub opcjonalne dla odpowiednich krótkich opcji." #. TRANSLATORS: The placeholder indicates the bug-reporting #. address for this package. Please add _another line_ saying #. "Report translation bugs to <...>\n" with the address for #. translation bugs (typically your translation team's web or #. email address). #: grecs/src/opthelp.c:202 #, c-format msgid "Report bugs to %s.\n" msgstr "Raporty o błędach należy wysyÅ‚ać do %s.\n" #: grecs/src/opthelp.c:205 #, c-format msgid "%s home page: <%s>\n" msgstr "strona domowa %s: <%s>\n" #. TRANSLATORS: Translate "(C)" to the copyright symbol #. (C-in-a-circle), if this symbol is available in the user's #. locale. Otherwise, do not translate "(C)"; leave it as-is. #: grecs/src/opthelp.c:457 msgid "(C)" msgstr "©" #: grecs/src/opthelp.c:466 msgid "" "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." "html>\n" "This is free software: you are free to change and redistribute it.\n" "There is NO WARRANTY, to the extent permitted by law.\n" "\n" msgstr "" "Licencja GPLv3+: GNU GPL wersja 3 albo późniejsza <http://gnu.org/licenses/" "gpl.html>\n" "To jest wolne oprogramowanie: możesz je modyfikować i rozpowszechniać.\n" "Autorzy NIE DAJÄ„ GWARANCJI w granicach dozwolonych prawem.\n" "\n" #: grecs/src/opthelp.c:483 msgid "Written by " msgstr "Stworzony przez" #. TRANSLATORS: This string is used as a delimiter between #. authors' names as in: #. #. Written by Winnie the Pooh, Piglet ... #. #: grecs/src/opthelp.c:489 msgid ", " msgstr ", " #. TRANSLATORS: This string acts as a delimiter before the #. last author's names, e.g.: #. #. Written by Winnie the Pooh, Piglet and Christopher Robin. #. #: grecs/src/opthelp.c:495 msgid " and " msgstr " i " #: grecs/src/path-parser.c:62 #, c-format msgid "cannot open `%s'" msgstr "nie można otworzyć `%s'" #: grecs/src/path-parser.c:108 grecs/src/path-parser.c:123 msgid "unexpected end of file" msgstr "nieoczekiwany koniec pliku" #: grecs/src/path-parser.c:143 msgid "parse error" msgstr "błąd analizy" #: grecs/src/preproc.c:448 grecs/src/preproc.c:470 #, c-format msgid "Cannot stat `%s'" msgstr "WywoÅ‚anie stat(%s) nie powiodÅ‚o siÄ™" #: grecs/src/preproc.c:453 grecs/src/preproc.c:458 msgid "Recursive inclusion" msgstr "Dołączanie rekurencyjne" #: grecs/src/preproc.c:461 #, c-format msgid "`%s' already included here" msgstr "`%s' już zostaÅ‚ dołączony tutaj" #: grecs/src/preproc.c:465 #, c-format msgid "`%s' already included at top level" msgstr "`%s' zostaÅ‚ dołączony na poziomie najwyższym" #: grecs/src/preproc.c:480 #, c-format msgid "Cannot open `%s'" msgstr "Nie można otworzyć `%s'" #: grecs/src/preproc.c:595 msgid "Cannot parse include line" msgstr "Analiza polecenia dołączania nie powiodÅ‚a siÄ™" #: grecs/src/preproc.c:598 msgid "invalid include statement" msgstr "nieprawidÅ‚owe polecenie dołączania" #: grecs/src/preproc.c:624 msgid "read error" msgstr "błąd odczytu" #: grecs/src/preproc.c:632 #, c-format msgid "%s: No such file or directory" msgstr "%s: Nie ma takiego pliku lub katalogu" #: grecs/src/preproc.c:698 #, c-format msgid "Unable to start external preprocessor `%s'" msgstr "Nie mogÄ™ uruchomić preprocesora `%s'" #: grecs/src/preproc.c:773 grecs/src/preproc.c:793 #, c-format msgid "Cannot run `%s'" msgstr "Nie można wykonać `%s'" #: grecs/src/symtab.c:236 msgid "element not found in table" msgstr "nie znaleziono elementu w tablicy" #: grecs/src/symtab.c:238 msgid "symbol table is full" msgstr "tablica symboli przepeÅ‚niona" #: grecs/src/tree.c:70 msgid "list" msgstr "" #: grecs/src/tree.c:71 #, fuzzy msgid "one or more arguments" msgstr "za dużo argumentów" #: grecs/src/tree.c:75 #, fuzzy msgid "unrecognized type; please report" msgstr "nieznany kod wydarzenia" #: grecs/src/tree.c:320 msgid "section keyword used as a scalar" msgstr "" #: grecs/src/tree.c:322 msgid "scalar keyword used as a section" msgstr "" #: grecs/src/tree.c:325 #, fuzzy msgid "unknown keyword" msgstr "Nieznane sÅ‚owo kluczowe" #: grecs/src/tree.c:360 #, c-format msgid "%s: not a valid boolean value" msgstr "%s nie jest poprawnÄ… wartoÅ›ciÄ… boole'owskÄ…" #: grecs/src/tree.c:391 #, c-format msgid "%s: UNIX socket name too long" msgstr "%s: za dÅ‚uga nazwa gniazda" #: grecs/src/tree.c:420 grecs/src/tree.c:644 #, c-format msgid "%s: not a valid IP address or hostname" msgstr "%s: niepoprawny adres IPv4 lub nazwa hosta" #: grecs/src/tree.c:444 #, c-format msgid "%s: not a valid port number" msgstr "%s: niepoprawny numer portu" #: grecs/src/tree.c:452 msgid "missing port number" msgstr "brak numeru portu" #: grecs/src/tree.c:501 msgid "numeric overflow" msgstr "przepeÅ‚nienie arytmetyczne" #: grecs/src/tree.c:506 msgid "value out of allowed range" msgstr "wartość poza dozwolonym zakresem" #: grecs/src/tree.c:541 grecs/src/tree.c:571 #, c-format msgid "not a number (stopped near `%s')" msgstr "nie jest liczbÄ… (zatrzymano przy `%s')" #: grecs/src/tree.c:635 #, c-format msgid "%s: not a valid IP address" msgstr "%s: niepoprawny adres IP" #: grecs/src/tree.c:774 #, c-format msgid "too many arguments to `%s'; missing semicolon?" msgstr "zbyt dużo argumentów do `%s': brak Å›rednika?" #: grecs/src/tree.c:788 grecs/src/tree.c:836 #, c-format msgid "INTERNAL ERROR at %s:%d: unhandled data type %d" msgstr "BÅÄ„D WEWNĘTRZNY przy %s:%d: nieobsÅ‚ugiwany typ danych %d" #: grecs/src/tree.c:803 #, c-format msgid "%s: incompatible data type in list item #%d" msgstr "%s: element listy #%d ma niekompatybilny typ danych" #: grecs/src/tree.c:823 #, c-format msgid "incompatible data type for `%s'" msgstr "niekompatybilny typ danych dla `%s'" #: grecs/wordsplit/wordsplit.c:69 grecs/wordsplit/wordsplit.c:2855 msgid "memory exhausted" msgstr "pamięć wyczerpana" #: grecs/wordsplit/wordsplit.c:121 msgid "memory exhausted while trying to store error context" msgstr "" #: grecs/wordsplit/wordsplit.c:868 msgid "Restarting" msgstr "" #: grecs/wordsplit/wordsplit.c:1607 #, c-format msgid "%.*s: variable null or not set" msgstr "%.*s: zmienna pusta lub nie ustawiona" #: grecs/wordsplit/wordsplit.c:1637 #, c-format msgid "warning: undefined variable `%.*s'" msgstr "ostrzeżenie: niezdefiniowana zmienna `%.*s'" #: grecs/wordsplit/wordsplit.c:2141 #, c-format msgid "no files match pattern %s" msgstr "żaden plik nie pasuje do wzoru %s" #: grecs/wordsplit/wordsplit.c:2603 msgid "WS trimming" msgstr "usuniÄ™cie biaÅ‚ych znaków" #: grecs/wordsplit/wordsplit.c:2605 msgid "command substitution" msgstr "rozszerzenie poleceÅ„" #: grecs/wordsplit/wordsplit.c:2607 grecs/wordsplit/wordsplit.c:2615 msgid "coalesce list" msgstr "zjednoczenie listy" #: grecs/wordsplit/wordsplit.c:2609 msgid "tilde expansion" msgstr "rozszerzenie tyldy" #: grecs/wordsplit/wordsplit.c:2611 msgid "variable expansion" msgstr "rozszerzenie zmiennych" #: grecs/wordsplit/wordsplit.c:2613 msgid "quote removal" msgstr "usuniÄ™cie cudzysÅ‚owów" #: grecs/wordsplit/wordsplit.c:2617 msgid "path expansion" msgstr "rozszerzenie Å›cieżek" #: grecs/wordsplit/wordsplit.c:2642 #, c-format msgid "(%02d) Input:%.*s;" msgstr "(%02d) WejÅ›cie:%.*s;" #: grecs/wordsplit/wordsplit.c:2668 msgid "Initial list:" msgstr "Lista poczÄ…tkowa:" #: grecs/wordsplit/wordsplit.c:2683 msgid "Coalesced list:" msgstr "Zjednoczona lista:" #: grecs/wordsplit/wordsplit.c:2853 msgid "no error" msgstr "żadnego błędu" #: grecs/wordsplit/wordsplit.c:2854 msgid "missing closing quote" msgstr "brak cudzysÅ‚owu zamykajÄ…cego" #: grecs/wordsplit/wordsplit.c:2856 msgid "invalid wordsplit usage" msgstr "niepoprawne użycie funkcji wordsplit" #: grecs/wordsplit/wordsplit.c:2857 msgid "unbalanced curly brace" msgstr "niezbilansowany nawias klamrowy" #: grecs/wordsplit/wordsplit.c:2858 msgid "undefined variable" msgstr "niezdefiniowana zmienna" #: grecs/wordsplit/wordsplit.c:2859 msgid "input exhausted" msgstr "wejÅ›cie wyczerpane" #: grecs/wordsplit/wordsplit.c:2860 msgid "unbalanced parenthesis" msgstr "niezbilansowane nawiasy" #: grecs/wordsplit/wordsplit.c:2861 msgid "globbing error" msgstr "błąd dopasowania" #: grecs/wordsplit/wordsplit.c:2862 #, fuzzy msgid "user-defined error" msgstr "błąd odczytu" #: grecs/wordsplit/wordsplit.c:2863 msgid "invalid parameter number in assignment" msgstr "" #: grecs/wordsplit/wordsplit.c:2875 msgid "unknown error" msgstr "nieznany błąd" #: grecs/wordsplit/wordsplit.c:2884 #, c-format msgid "missing closing %c (start near #%lu)" msgstr "brak zamykajÄ…cego znaku %c (poczÄ…tek przy #%lu)" #~ msgid "unterminated regexp" #~ msgstr "niezakoÅ„czone wyrażenie regularne" #~ msgid "unrecognized flag: %c" #~ msgstr "nierozpoznany znacznik: %c" #~ msgid "out of memory" #~ msgstr "brak pamiÄ™ci" #~ msgid "%s: unknown keyword" #~ msgstr "%s: nieznane sÅ‚owo kluczowe" #~ msgid "(%02d) Restart:%.*s;" #~ msgstr "(%02d) Restart:%.*s;" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/po/de.gmo������������������������������������������������������������������������������0000644�0001750�0001750�00000034615�13512402637�014714� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Þ•����«������t��å���Ì ������`�����a�����g�� ���†�� ���”�����¢��$���¶�����Û�����ù��+��������C��&���^�����…�����£��6���¿�����ö����� ����� ����������/�����5�����=�����N�����h�����x�����‰�����™��c���µ����������1�����J�� ���N�����X�����l�����q��,���„�����±�����Ì��/���à������� ���&��È���4�����ý��s��������Œ�����Ÿ�����¤�����½�� ���Ä�����Ò�����×�����Ü��%���î����������*�����>�����R�����c�����|�����Ž�����ž��›���°��$���L��`���q��"���Ò�����õ����� ��*��������=�� ���D�� ���P�����\��"���e�����ˆ�����£�����¹�����½�����Ù��,���ñ��.��������M�����^��&���{�� ���¢��+���Ã�����ï��/��� ��$���<�����a��!���t�� ���–�����¤�����¹�����Í�� ���è��(���ö�� ��������+�����E�����J�����Y�����y�����Ž�����ž�����¸�����×�����ï��T���õ�����J��$���[�����€�����–�����ª�����¯�����Å�����Î�����ë����������!�� ���5�� ���C�����P�� ���e�����†�����˜�� ���©�����µ�����Ä�����Ü��!���ü�� �����#���?��/���c�����“�� ���©�� ���·��"���Â�����å�����ì���������������&�����F�����N�� ���]�����j�����~�����ž�����»�����Â�����Ó�����å�����ú����� ��.��������L�����c�����z����������¨�����¿�� ���Ï�����Ý�����ú����������2�����J�����^�����y��!���Œ��"���®����Ñ�����ã!��*���è!�����"�����#"�����2"��%���I"��)���o"��%���™"��/���¿"�����ï"��+��� #��"���9#�����\#��>���{#�����º#�����Ï#�����Ó#��+���Ö#�����$�����$��"���$��+���2$��$���^$��*���ƒ$�����®$��3���Ç$��w���û$�����s%��!���“%�����µ%�� ���º%�����Ç%�����ã%�����é%��5���&��!���8&�����Z&��4���o&�����¤&�����·&��Ø���Ë&�� ���¤'��Ž���Å'�����T(�����q(�����v(�����Ž(�����•(�����¦(�����«(�����°(��+���Ë(�����÷(�����)��t���')�����œ)��%���»)�����á)�����û)�����*��Ñ���.*��0����+��l���1+��<���ž+��#���Û+�����ÿ+��G���,�����P,�����X,�����n,�����,��0���ˆ,��#���¹,�����Ý,�����ý,��'���-�� ���)-��T���J-��F���Ÿ-��"���æ-��.��� .��<���8.��?���u.��R���µ.��9���/��P���B/��G���“/��.���Û/��,��� 0�����70�����N0�����_0��'���|0�� ���¤0��.���®0�� ���Ý0�����é0�����1����� 1��"���1�����B1�����W1��-���m1��+���›1�����Ç1�����á1��s���ç1�����[2��,���r2�� ���Ÿ2�����À2�����Ñ2�����Ö2�� ���ï2��#���û2��"���3��,���B3�����o3�����ˆ3�����œ3��"���²3�� ���Õ3�����ö3�����4�� ���%4�����34��0���B4��%���s4��(���™4��"���Â4��!���å4��2���5��#���:5�����^5�� ���v5��(���5�� ���ª5�����¸5�����Ï5�����ì5����� 6�����+6�����46�����D6��"���X6��0���{6��+���¬6�� ���Ø6�����å6�����ý6�����7�����,7�����<7��0���O7��&���€7�����§7�����Å7�����ß7�����û7�����8�����)8��+���<8��,���h8��-���•8�����Ã8�����à8��,���ö8�����#9��-���79��'���e9�����Z������U���£������� ���2�������A���P���3���‡��������������h���M���4���™���K���7�������_�������T���B���Y���—����������I�������[��������������¨���¦���&�������š���”�������¢���`�������œ���6������!���������������˜�������Ž������\��������������"���(�������•���>������f���¤�������@���9���������)�������€���������������ž���N���,���Š���q���¥���Ÿ���������������{���g���/���«���+���E���V���0����������-���5������x���G��� ���J������� ���l���L���.����������“���R�������k��������������t����������W���o���„���¡���†���H���=������^���������������u�������#���~��� ���X���ƒ���Q�������r�������F��������������������������§���}���‘���%���w�������n���c��� �������‚������:�������j�������1���y���v������m���*���ˆ������������…������’���b���<���O���–�������d���©���e���p���s���›���$���Œ���;���‰����������]���|���C�������ª���S���'�������?���‹��� ������8������� ����������������������a����������i�������z���D���� and �%.*s: variable null or not set�%s %s started�%s %s stopped�%s home page: <%s> �%s running; dir=%s, file=%s, pid=%lu�%s: No such file or directory�%s: UNIX socket name too long�%s: incompatible data type in list item #%d�%s: not a valid IP address�%s: not a valid IP address or hostname�%s: not a valid boolean value�%s: not a valid port number�%s: recursion depth does not match previous definition�(%02d) Input:%.*s;�(C)�, �<arg: string> <arg: string>...�Alias�Aliases�Cannot open `%s'�Cannot parse include line�Cannot run `%s'�Cannot stat `%s'�Coalesced list:�Command to execute on event�Configuration file structure for direvent. For more information, use `info direvent configuration'.�Configure event watcher�Configure syslog logging�DIR�Disabled;�Events to watch for�FILE�Files to watch for�GNU direvent monitors changes in directories�Give a short usage message�Give this help list�INTERNAL ERROR at %s:%d: unhandled data type %d�Include search path: �Initial list:�License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. �List of additional options�Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options.�Modify environment�NAME�No include search path. �OPTION�Other options�PRIO�PROG�Pathname to watch�Prefix each message with its priority�Print program version�Recursive inclusion�Report bugs to %s. �Run as this user�Run command as this user�Run in foreground�Set debug level�Set pid file name�Set syslog facility. Arg is one of the following: user, daemon, auth, authpriv, mail, cron, local0 through local7 (case-insensitive), or a facility number.�Tag syslog messages with this string�The optional CONFIG argument supplies the name of the configuration file to use instead of %s. �This direvent uses %s interface. �Timeout for the command�USER�Unable to start external preprocessor `%s'�Usage:�WS trimming�Written by �[CONFIG]�`%s' already included at top level�`%s' already included here�add include directory�arg�begin scanning process list�cannot change to %s: %s�cannot create watcher %s/%s, stat failed: %s�cannot create watcher %s/%s: not enough memory�cannot open `%s'�cannot open directory %s: %s�cannot open pidfile %s for writing: %s�cannot run `%s': fork failed: %s�cannot run redirector `%s': fork failed: %s�cannot set watcher on %s: %s�cannot start redirector for %s, pipe failed: %s�cannot stat %s/%s: not enough memory�cannot stat %s: %s�check configuration file and exit�coalesce list�command substitution�creating watcher %s�element not found in table�environment: �expected "recursive" or end of statement�expected %s�expected %s, but found %s�file�globbing error�incompatible data type for `%s'�increase debug level�input exhausted�invalid include statement�invalid use of block statement�invalid wordsplit usage�level�log everything with priority PRIO and higher to the stderr, as well as to the syslog�memory exhausted�missing closing %c (start near #%lu)�missing closing quote�missing port number�name�no command configured�no error�no event handlers configured�no event handlers installed�no files match pattern %s�no paths configured�no such group�no such user�no user with UID %lu�not a number (stopped near `%s')�not enough memory�numeric overflow�parse error�path expansion�process %lu dumped core�process %lu exited successfully�process %lu failed with status %d�process %lu stopped on signal %d�process %lu terminated on signal %d�process %lu terminated with unrecognized status�process %lu timed out�quote removal�read error�redirector for %s started, pid=%lu�regexp�remain in foreground�removing watcher %s�run as this user�scheduling alarm in %lu seconds�seconds�self-test mode�set PID file�set syslog facility�show configuration file summary�starting %s, dir=%s, file=%s�string�surplus argument�surplus arguments�symbol table is full�tilde expansion�too many arguments�too many arguments to `%s'; missing semicolon?�unbalanced curly brace�unbalanced parenthesis�undefined variable�unexpected block statement�unexpected end of file�unexpected list�unknown error�unknown syslog facility `%s'�unknown syslog facility: %s�unknown syslog priority: %s�unrecognized event code�unrecognized option�value out of allowed range�variable expansion�waiting for %s (%lu) to terminate�warning: undefined variable `%.*s'�Project-Id-Version: direvent 5.1 Report-Msgid-Bugs-To: bug-direvent@gnu.org.ua POT-Creation-Date: 2019-07-13 19:23+0300 PO-Revision-Date: 2016-07-07 22:45+0200 Last-Translator: Mario Blättermann <mario.blaettermann@gmail.com> Language-Team: German <translation-team-de@lists.sourceforge.net> Language: de MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Bugs: Report translation errors to the Language-Team address. Plural-Forms: nplurals=2; plural=n != 1; X-Generator: Poedit 1.8.7.1 � und�%.*s: Variable ist Null oder nicht gesetzt�%s %s gestartet�%s %s gestoppt�Webseite von %s: <%s> �%s läuft; Verz=%s, Datei=%s, PID=%lu�%s: Datei oder Verzeichnis nicht gefunden�%s: UNIX-Name des Sockets ist zu lang�%s: inkompatibler Datentyp im Listeneintrag #%d�%s: Keine gültige IP-Adresse�%s: Kein gültiger Hostname oder IP-Adresse�%s: Kein gültiger boolescher Wert�%s: Keine gültige Port-Nummer�%s: Rekursionstiefe entspricht nicht der vorherigen Definition�(%02d) Eingabe:%.*s;�(C)�, �<Arg: Zeichenkette> <Arg: Zeichenkette> …�Alias�Aliase�»%s« kann nicht geöffnet werden�include-Zeile kann nicht verarbeitet werden�»%s« kann nicht ausgeführt werden�Aufruf von »stat« für %s nicht möglich�Zusammengeführte Liste:�Bei Eintritt des Ereignisses auszuführender Befehl�Struktur der Konfigurationsdatei für direvent. Weitere Informationen erhalten Sie mit »info direvent configuration«.�Ereignisüberwachung einrichten�Syslog-Protokollierung einrichten�VERZ�Deaktiviert;�Zu überwachende Ereignisse�DATEI�Zu überwachende Dateien�GNU direvent überwacht Änderungen in Verzeichnissen�Kurzen Bedienungshinweis ausgeben�Diese Hilfe ausgeben�INTERNER FEHLER bei %s:%d: unbehandelter Datentyp %d�Include-Suchpfad: �Anfängliche Liste:�Lizenz GPLv3+: GNU GPL Version 3 oder neuer <http://www.gnu.org/licenses/gpl.html>. Dies ist freie Software: Sie dürfen diese ändern und weitergeben. Es wird keine Garantie gegeben, soweit das Gesetz es zulässt. �Liste der zusätzlichen Optionen�Vorgeschriebene oder optionale Argumente für lange Optionen sind ebenfalls vorgeschrieben oder optional für die entsprechenden Kurzoptionen.�Ausführungsumgebung ändern�NAME�Kein Include-Suchpfad. �OPTION�Weitere Optionen�PRIO�PROG�Zu überwachender Pfadname�Jeder Meldung deren Priorität voranstellen�Programmversion ausgeben�Rekursive Einbeziehung�Melden Sie Fehler an %s. Fehler in der Übersetzung melden Sie bitte an <translation-team-de@lists.sourceforge.net> �Als dieser Benutzer ausführen�Befehl als dieser Benutzer ausführen�Im Vordergrund ausführen�Debug-Stufe festlegen�Name der PID-Datei festlegen�Leistung des Systemprotokolls festlegen. Argument ist eines der folgenden: user, daemon, auth, authpriv, mail, cron, local0, local7 (Groß-/Kleinschreibung spielt keine Rolle), oder eine Nummer einer Leistung.�Syslog-Meldungen diese Zeichenkette voranstellen�Das optionale Argument CONFIG übergibt den Namen der anstelle von %s zu verwendenden Konfigurationsdatei. �Diese Version von direvent verwendet die %s-Schnittstelle. �Zeitüberschreitung für den Befehl�BENUTZER�Externes Vorverarbeitungsprogramm »%s« konnte nicht aufgerufen werden�Aufruf:�Leerzeichenentfernung�Geschrieben von �[CONFIG]�»%s« wird bereits in oberster Ebene einbezogen�»%s« wird hier bereits einbezogen�Include-Verzeichnis hinzufügen�Arg�Einlesen der Prozessliste wird begonnen�Wechsel in %s nicht möglich: %s�Überwachung für %s%s konnte nicht eingerichtet werden, »stat« fehlgeschlagen: %s�Überwacher %s/%s kann nicht erstellt werden: nicht genügend Speicher�»%s« kann nicht geöffnet werden�Verzeichnis %s kann nicht geöffnet werden: %s�PID-Datei %s konnte nicht zum Schreiben geöffnet werden: %s�»%s« kann nicht ausgeführt werden: fork() fehlgeschlagen: %s�Weiterleitung für %s konnte nicht ausgeführt werden, »fork« fehlgeschlagen: %s�Überwachung für %s konnte nicht eingerichtet werden: %s�Weiterleitung für %s konnte nicht gestartet werden, »pipe« fehlgeschlagen: %s�Aufruf von »stat« für %s/%s nicht möglich: nicht genügend Speicher�Aufruf von »stat« für %s nicht möglich: %s�Konfigurationsdatei überprüfen und beenden�Zusammenführungsliste�Befehlsersetzung�Überwacher %s wird erstellt�Element wurde in Tabelle nicht gefunden�Umgebung:�»recursive« oder Ende der Anweisung erwartet�%s erwartet�%s erwartet, aber %s gefunden�Datei�Platzhalterfehler�Inkompatibler Datentyp für »%s«�Debug-Stufe erhöhen�Eingabe ausgeschöpft�Ungültige Verwendung einer Include-Anweisung�Ungültige Verwendung einer Block-Anweisung�unzulässige Worttrennung�Stufe�Alles mit Priorität PRIO oder höher sowohl in die Standardfehlerausgabe als auch in das Systemprotokoll schreiben�Speicher ausgeschöpft�fehlendes schließendes %c (Beginn bei #%lu)�schließendes Zitatzeichen fehlt�Portnummer fehlt�Name�Kein Befehl eingerichtet�Kein Fehler�Keine Ereignis-Handler eingerichtet�Keine Ereignis-Handler installiert�Keine Dateien, die dem Muster %s entsprechen�Keine Pfade eingerichtet�Keine solche Gruppe�Kein solcher Benutzer�Kein Benutzer mit UID %lu gefunden�Keine Zahl (gestoppt bei »%s«)�Nicht genügend Speicher�Numerischer Überlauf�Einlesefehler�Pfad-Ersetzung�Für Prozess %lu wurde Speicherabzug geschrieben�Prozess %lu wurde erfolgreich beendet�Prozess %lu mit Status %d fehlgeschlagen�Prozess %lu mit Signal %d gestoppt�Prozess %lu mit Signal %d beendet�Prozess %lu mit nicht erkanntem Status abgebrochen�Zeitüberschreitung bei Prozess %lu�Zitatzeichen-Entfernung�Lesefehler�Weiterleitung für %s gestartet, PID=%lu�Reg. Ausdruck�Im Vordergrund bleiben�Überwacher %s wird entfernt�Als dieser Benutzer ausführen�Geplanter Alarm in %lu Sekunden�Sekunden�Selbsttestmodus�PID-Datei festlegen�Systemprotokoll-Leistung festlegen�Zusammenfassung der Konfigurationsdatei anzeigen�%s wird gestartet, Verzeichnis=%s, Datei=%s�Zeichenkette�Überzähliges Argument�Überzählige Argumente�Symboltabelle ist voll�Tilde-Ersetzung�Zu viele Argumente�Zu viele Argumente für »%s«; Semikolon fehlt?�Nicht geschlossene geschweifte Klammer�Unvollständiges Klammernpaar�nicht definierte Variable�Unerwartete Block-Anweisung�Unerwartetes Ende der Datei�Unerwartete Liste�Unbekannter Fehler�Unbekannte Leistung des Sytemprotokolls: %s�unbekannte Leistung des Systemprotokolls: %s�Unbekannte Priorität des Sytemprotokolls: %s�Nicht erkannter Ereigniscode�Nicht erkannte Option�Wert ist außerhalb des zulässigen Bereichs�Variablen-Ersetzung�Es wird auf das Beenden von %s (%lu) gewartet�Warnung: Undefinierte Variable »%.*s«��������������������������������������������������������������������������������������������������������������������direvent-5.2/po/sv.gmo������������������������������������������������������������������������������0000644�0001750�0001750�00000033277�13512402637�014757� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Þ•����«������t��å���Ì ������`�����a�����g�� ���†�� ���”�����¢��$���¶�����Û�����ù��+��������C��&���^�����…�����£��6���¿�����ö����� ����� ����������/�����5�����=�����N�����h�����x�����‰�����™��c���µ����������1�����J�� ���N�����X�����l�����q��,���„�����±�����Ì��/���à������� ���&��È���4�����ý��s��������Œ�����Ÿ�����¤�����½�� ���Ä�����Ò�����×�����Ü��%���î����������*�����>�����R�����c�����|�����Ž�����ž��›���°��$���L��`���q��"���Ò�����õ����� ��*��������=�� ���D�� ���P�����\��"���e�����ˆ�����£�����¹�����½�����Ù��,���ñ��.��������M�����^��&���{�� ���¢��+���Ã�����ï��/��� ��$���<�����a��!���t�� ���–�����¤�����¹�����Í�� ���è��(���ö�� ��������+�����E�����J�����Y�����y�����Ž�����ž�����¸�����×�����ï��T���õ�����J��$���[�����€�����–�����ª�����¯�����Å�����Î�����ë����������!�� ���5�� ���C�����P�� ���e�����†�����˜�� ���©�����µ�����Ä�����Ü��!���ü�� �����#���?��/���c�����“�� ���©�� ���·��"���Â�����å�����ì���������������&�����F�����N�� ���]�����j�����~�����ž�����»�����Â�����Ó�����å�����ú����� ��.��������L�����c�����z����������¨�����¿�� ���Ï�����Ý�����ú����������2�����J�����^�����y��!���Œ��"���®��Ñ��Ñ�����£!��(���©!�����Ò!�����â!�����ò!�� ��� "��"���+"��,���N"��'���{"�����£"��,���À"��$���í"�����#��7���2#�����j#�����~#�����#�� ���„#�����¥#�����«#��!���±#��'���Ó#�� ���û#��(���$�����E$��#���U$��i���y$�� ���ã$�����%����� %�� ���$%�����1%�����J%�����N%��.���b%��$���‘%�����¶%��+���Í%�����ù%�����&��Ñ���(&�����ú&�����'�����š'�����«'��!���°'�����Ò'�� ���Ù'�����ç'�����ì'�����ñ'��,���(�����5(�����M(��[���b(�����¾(��"���Ø(�����û(�����)�����*)��±���@)��*���ò)��o���*��,���*�����º*�� ���Ô*��,���ß*�� ��� +�����+�� ���-+�����9+��'���B+�����j+�����‰+�����¨+��$���¬+��*���Ñ+��G���ü+��:���D,��!���,��)���¡,��7���Ë,��=���-��K���A-��3���-��J���Á-��6��� .��&���C.��)���j.�� ���”.�����¢.�����·.�����Í.�����ì.��0���õ.�����&/�����6/�����V/�� ���Z/��"���h/�����‹/�����¢/�����²/�� ���Ë/�����ì/����� 0��T���0�� ���f0��)���t0�����ž0�����¼0�����Î0�����Ó0�� ���ï0��%���ù0��$���1�����D1�����d1�����‚1�����•1�����­1��&���Ê1�����ñ1�����2�� ���2�����#2��%���62��#���\2��&���€2��"���§2��#���Ê2��(���î2��'���3�����?3�����P3��'���X3�����€3�����ˆ3�����¢3�����º3��#���Ô3�����ø3�����4�����4�����$4��(���D4�����m4�����ˆ4�����4�����§4�����¾4�����Ö4�����æ4��5���û4�����15�����M5�����b5�����w5�����Š5�����›5�� ���ª5��%���µ5�� ���Û5�����ü5�����6�� ���,6��#���:6�����^6��%���p6��(���–6�����Z������U���£������� ���2�������A���P���3���‡��������������h���M���4���™���K���7�������_�������T���B���Y���—����������I�������[��������������¨���¦���&�������š���”�������¢���`�������œ���6������!���������������˜�������Ž������\��������������"���(�������•���>������f���¤�������@���9���������)�������€���������������ž���N���,���Š���q���¥���Ÿ���������������{���g���/���«���+���E���V���0����������-���5������x���G��� ���J������� ���l���L���.����������“���R�������k��������������t����������W���o���„���¡���†���H���=������^���������������u�������#���~��� ���X���ƒ���Q�������r�������F��������������������������§���}���‘���%���w�������n���c��� �������‚������:�������j�������1���y���v������m���*���ˆ������������…������’���b���<���O���–�������d���©���e���p���s���›���$���Œ���;���‰����������]���|���C�������ª���S���'�������?���‹��� ������8������� ����������������������a����������i�������z���D���� and �%.*s: variable null or not set�%s %s started�%s %s stopped�%s home page: <%s> �%s running; dir=%s, file=%s, pid=%lu�%s: No such file or directory�%s: UNIX socket name too long�%s: incompatible data type in list item #%d�%s: not a valid IP address�%s: not a valid IP address or hostname�%s: not a valid boolean value�%s: not a valid port number�%s: recursion depth does not match previous definition�(%02d) Input:%.*s;�(C)�, �<arg: string> <arg: string>...�Alias�Aliases�Cannot open `%s'�Cannot parse include line�Cannot run `%s'�Cannot stat `%s'�Coalesced list:�Command to execute on event�Configuration file structure for direvent. For more information, use `info direvent configuration'.�Configure event watcher�Configure syslog logging�DIR�Disabled;�Events to watch for�FILE�Files to watch for�GNU direvent monitors changes in directories�Give a short usage message�Give this help list�INTERNAL ERROR at %s:%d: unhandled data type %d�Include search path: �Initial list:�License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. �List of additional options�Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options.�Modify environment�NAME�No include search path. �OPTION�Other options�PRIO�PROG�Pathname to watch�Prefix each message with its priority�Print program version�Recursive inclusion�Report bugs to %s. �Run as this user�Run command as this user�Run in foreground�Set debug level�Set pid file name�Set syslog facility. Arg is one of the following: user, daemon, auth, authpriv, mail, cron, local0 through local7 (case-insensitive), or a facility number.�Tag syslog messages with this string�The optional CONFIG argument supplies the name of the configuration file to use instead of %s. �This direvent uses %s interface. �Timeout for the command�USER�Unable to start external preprocessor `%s'�Usage:�WS trimming�Written by �[CONFIG]�`%s' already included at top level�`%s' already included here�add include directory�arg�begin scanning process list�cannot change to %s: %s�cannot create watcher %s/%s, stat failed: %s�cannot create watcher %s/%s: not enough memory�cannot open `%s'�cannot open directory %s: %s�cannot open pidfile %s for writing: %s�cannot run `%s': fork failed: %s�cannot run redirector `%s': fork failed: %s�cannot set watcher on %s: %s�cannot start redirector for %s, pipe failed: %s�cannot stat %s/%s: not enough memory�cannot stat %s: %s�check configuration file and exit�coalesce list�command substitution�creating watcher %s�element not found in table�environment: �expected "recursive" or end of statement�expected %s�expected %s, but found %s�file�globbing error�incompatible data type for `%s'�increase debug level�input exhausted�invalid include statement�invalid use of block statement�invalid wordsplit usage�level�log everything with priority PRIO and higher to the stderr, as well as to the syslog�memory exhausted�missing closing %c (start near #%lu)�missing closing quote�missing port number�name�no command configured�no error�no event handlers configured�no event handlers installed�no files match pattern %s�no paths configured�no such group�no such user�no user with UID %lu�not a number (stopped near `%s')�not enough memory�numeric overflow�parse error�path expansion�process %lu dumped core�process %lu exited successfully�process %lu failed with status %d�process %lu stopped on signal %d�process %lu terminated on signal %d�process %lu terminated with unrecognized status�process %lu timed out�quote removal�read error�redirector for %s started, pid=%lu�regexp�remain in foreground�removing watcher %s�run as this user�scheduling alarm in %lu seconds�seconds�self-test mode�set PID file�set syslog facility�show configuration file summary�starting %s, dir=%s, file=%s�string�surplus argument�surplus arguments�symbol table is full�tilde expansion�too many arguments�too many arguments to `%s'; missing semicolon?�unbalanced curly brace�unbalanced parenthesis�undefined variable�unexpected block statement�unexpected end of file�unexpected list�unknown error�unknown syslog facility `%s'�unknown syslog facility: %s�unknown syslog priority: %s�unrecognized event code�unrecognized option�value out of allowed range�variable expansion�waiting for %s (%lu) to terminate�warning: undefined variable `%.*s'�Project-Id-Version: direvent 5.1 Report-Msgid-Bugs-To: bug-direvent@gnu.org.ua POT-Creation-Date: 2019-07-13 19:23+0300 PO-Revision-Date: 2017-07-17 23:18+0200 Last-Translator: Anders Jonsson <anders.jonsson@norsjovallen.se> Language-Team: Swedish <tp-sv@listor.tp-sv.se> Language: sv MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Bugs: Report translation errors to the Language-Team address. X-Generator: Poedit 2.0.2 � och �%.*s: variabel null eller inte inställd�%s %s startades�%s %s stoppades�Webbsida för %s: <%s> �%s kör; kat=%s, fil=%s, pid=%lu�%s: Ingen sÃ¥dan fil eller katalog�%s: namn pÃ¥ UNIX-uttag (socket) för lÃ¥ngt�%s: inkompatibel datatyp i listpost #%d�%s: inte en giltig IP-adress�%s: inte en giltig IP-adress eller värdnamn�%s: inte ett giltigt booleskt värde�%s: inte ett giltigt portnummer�%s: rekursionsdjup matchar inte föregÃ¥ende definition�(%02d) Indata:%.*s;�©�, �<arg: sträng> <arg: sträng>…�Alias�Alias�Det gÃ¥r inte att öppna â€%sâ€�Det gÃ¥r inte att tolka inkluderingsrad�Det gÃ¥r inte att köra â€%sâ€�Det gÃ¥r inte att ta status pÃ¥ â€%sâ€�Förenad lista:�Kommando att exekvera vid händelse�Konfigurationsfilstruktur för direvent. För mer information, använd â€info direvent configurationâ€.�Konfigurera händelseövervakare�Konfigurera syslog-loggning�KAT�Inaktiverad;�Händelser att övervaka�FIL�Filer att övervaka�GNU direvent övervakar ändringar i kataloger�Visa ett kort användningsmeddelande�Visa denna hjälplista�INTERNT FEL vid %s:%d: ohanterad datatyp %d�Sökväg för inkludering: �Ursprunglig lista:�Licens GPLv3+: GNU GPL version 3 eller senare <http://gnu.org/licenses/gpl.html> Det här är fri programvara: du fÃ¥r ändra och distribuera den. Det finns INGEN GARANTI, sÃ¥ lÃ¥ngt som tillÃ¥ts enligt lag. �Lista över ytterligare flaggor�Obligatoriska eller valfria argument till lÃ¥nga flaggor är ocksÃ¥ obligatoriska eller valfria för motsvarande korta flaggor.�Modifiera miljö�NAMN�Ingen sökväg för inkludering. �FLAGGA�Andra flaggor�PRIO�PROG�Sökväg att övervaka�FöregÃ¥ varje meddelande med dess prioritet�Skriv ut programversion�Rekursiv inkludering�Rapportera fel till %s Skicka synpunkter pÃ¥ översättningen till <tp-sv@listor.tp-sv.se> �Kör som denna användare�Kör kommando som denna användare�Kör i förgrunden�Ställ in felsökningsnivÃ¥�Ställ in pid-filnamn�Ställ in syslog-funktionalitet. Arg är en av följande: user, daemon, auth, authpriv, mail, cron, local0 till local7 (inte skiftlägeskänsligt), eller ett funktionalitetstal.�Tagga syslog-meddelanden med denna sträng�Det valfria KONFIG-argumentet tillhandahÃ¥ller namnet pÃ¥ konfigurationsfilen att använda istället för %s. �Detta direvent använder gränssnittet %s. �Tidsgräns för kommandot�ANVÄNDARE�Kan inte starta extern preprocessor â€%sâ€�Användning:�blankteckentrimning�Skriven av �[KONFIG]�â€%s†redan inkluderad pÃ¥ toppnivÃ¥�â€%s†redan inkluderad här�lägg till inkluderingskatalog�arg�börja genomsökning av processlista�det gÃ¥r inte att byta katalog till %s: %s�det gÃ¥r inte att skapa övervakaren %s/%s, â€stat†misslyckades: %s�det gÃ¥r inte att skapa övervakare %s/%s: för lite minne�det gÃ¥r inte att öppna â€%sâ€�det gÃ¥r inte att öppna katalogen %s: %s�det gÃ¥r inte att öppna pidfilen %s för skrivning: %s�det gÃ¥r inte att köra â€%sâ€: â€fork†misslyckades: %s�det gÃ¥r inte att köra omdirigeraren â€%sâ€, â€fork†misslyckades: %s�det gÃ¥r inte att ställa in övervakare pÃ¥ %s: %s�det gÃ¥r inte att starta omdirigerare för %s, â€pipe†misslyckades: %s�det gÃ¥r inte att ta status pÃ¥ %s/%s: för lite minne�det gÃ¥r inte att ta status pÃ¥ %s: %s�kontrollera konfigurationsfil och avsluta�förena lista�kommandosubstitution�skapar övervakare %s�element hittades inte i tabell�miljö: �förväntade â€recursive†eller slut pÃ¥ sats�förväntade %s�förväntade %s, men hittade %s�fil�matchningsfel�inkompatibel datatyp för â€%sâ€�öka felsökningsnivÃ¥�slut pÃ¥ indata�ogiltig inkluderingssats�ogiltig användning av blocksats�ogiltig orddelningsanvändning�nivÃ¥�logga allt med prioritet PRIO och högre till standard fel, sÃ¥ väl som till syslog�minne uttömt�saknar stängande %c (starten nära #%lu)�saknar avslutande citattecken�saknar portnummer�namn�inget kommando konfigurerat�inget fel�inga händelsehanterare konfigurerade�inga händelsehanterare installerade�inga filer matchar mönstret %s�inga sökvägar konfigurerade�ingen sÃ¥dan grupp�ingen sÃ¥dan användare�ingen användare med UID %lu�inte ett tal (stoppade nära â€%sâ€)�för lite minne�numeriskt överspill�tolkningsfel�sökvägsexpansion�process %lu skapade en minnesutskrift�process %lu avslutades utan problem�process %lu misslyckades med status %d�process %lu stoppades av signal %d�process %lu avslutades av signal %d�process %lu avslutades med okänd status�tidsgräns överskreds för process %lu�citatborttagning�läsfel�omdirigerare för %s startades, pid=%lu�reguttr�stanna kvar i förgrunden�tar bort övervakare %s�kör som denna användare�schemalägger alarm om %lu sekunder�sekunder�självtestsläge�ställ in PID-fil�ställ in syslog-funktionalitet�visa sammanfattning av konfigurationsfil�startar %s, kat=%s, fil=%s�sträng�överflödigt argument�överflödiga argument�symboltabellen är full�tilde-expansion�för mÃ¥nga argument�för mÃ¥nga argument till â€%sâ€, saknas semikolon?�obalanserad klammerparentes�obalanserad parentes�odefinierad variabel�oväntad blocksats�oväntat filslut�oväntad lista�okänt fel�okänd syslog-funktionalitet â€%sâ€�okänd syslog-funktionalitet: %s�okänd syslog-prioritet: %s�okänd händelsekod�okänd flagga�värde utanför tillÃ¥tet intervall�variabelexpansion�väntar pÃ¥ att %s (%lu) ska avslutas�varning: odefinierad variabel â€%.*sâ€����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/po/fr.gmo������������������������������������������������������������������������������0000644�0001750�0001750�00000034552�13512402637�014733� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Þ•����«������t��å���Ì ������`�����a�����g�� ���†�� ���”�����¢��$���¶�����Û�����ù��+��������C��&���^�����…�����£��6���¿�����ö����� ����� ����������/�����5�����=�����N�����h�����x�����‰�����™��c���µ����������1�����J�� ���N�����X�����l�����q��,���„�����±�����Ì��/���à������� ���&��È���4�����ý��s��������Œ�����Ÿ�����¤�����½�� ���Ä�����Ò�����×�����Ü��%���î����������*�����>�����R�����c�����|�����Ž�����ž��›���°��$���L��`���q��"���Ò�����õ����� ��*��������=�� ���D�� ���P�����\��"���e�����ˆ�����£�����¹�����½�����Ù��,���ñ��.��������M�����^��&���{�� ���¢��+���Ã�����ï��/��� ��$���<�����a��!���t�� ���–�����¤�����¹�����Í�� ���è��(���ö�� ��������+�����E�����J�����Y�����y�����Ž�����ž�����¸�����×�����ï��T���õ�����J��$���[�����€�����–�����ª�����¯�����Å�����Î�����ë����������!�� ���5�� ���C�����P�� ���e�����†�����˜�� ���©�����µ�����Ä�����Ü��!���ü�� �����#���?��/���c�����“�� ���©�� ���·��"���Â�����å�����ì���������������&�����F�����N�� ���]�����j�����~�����ž�����»�����Â�����Ó�����å�����ú����� ��.��������L�����c�����z����������¨�����¿�� ���Ï�����Ý�����ú����������2�����J�����^�����y��!���Œ��"���®��Ô��Ñ�����¦!��$���«!�����Ð!�����à!�����ï!��)��� "��*���4"�� ���_"��C���€"��$���Ä"��6���é"��%��� #��(���F#��P���o#�����À#�����Õ#�����Ø#�� ���Û#�����ü#�����$�����$��0���'$��!���X$��&���z$�����¡$��,���²$��y���ß$��+���Y%��#���…%�����©%�� ���®%�����»%�����Ö%�����Þ%��=���õ%��*���3&�����^&��6���z&��-���±&�����ß&��è���ï&�����Ø'��…���÷'�����}(�����–(��3���š(�����Î(�����Õ(�����ä(�����é(�����î(��-���)�� ���1)�����R)��U���g)�����½)��+���Ý)����� *��$���!*��#���F*��¢���j*��1��� +��b���?+��%���¢+��"���È+�� ���ë+��<���÷+�����4,�����;,�� ���S,�����_,��,���h,�����•,��"���²,�����Õ,��,���Ù,��!���-��>���(-��@���g-�����¨-��)���Ç-��6���ñ-��6���(.��E���_.��.���¥.��C���Ô.��<���/��"���U/��1���x/�����ª/�����¿/�����Ø/��#���ô/�����0��.���(0�� ���W0�����b0�����€0�����ˆ0��,���¦0�� ���Ó0�����ô0�� ���1��+���'1��)���S1�����}1��Q���„1�����Ö1��0���é1�����2�����92�����R2�����V2�� ���r2��+���2��*���«2��'���Ö2�����þ2�����3�����,3��!���I3��,���k3�����˜3�����®3�����Æ3�����×3��)���î3��,���4��-���E4��5���s4��5���©4��:���ß4��-���5�����H5�����c5��'���u5�����5�����´5�� ���Ë5�����ì5��,��� 6�����96�����B6�����S6��'���p6��/���˜6��%���È6�����î6�����ö6����� 7��!���&7�����H7�����^7��9���o7�����©7�����Â7�����Þ7�����ô7�����8�����*8�����;8��%���K8�����q8�����8�����®8�����Í8�� ���á8�����9�����9��-���<9�����Z������U���£������� ���2�������A���P���3���‡��������������h���M���4���™���K���7�������_�������T���B���Y���—����������I�������[��������������¨���¦���&�������š���”�������¢���`�������œ���6������!���������������˜�������Ž������\��������������"���(�������•���>������f���¤�������@���9���������)�������€���������������ž���N���,���Š���q���¥���Ÿ���������������{���g���/���«���+���E���V���0����������-���5������x���G��� ���J������� ���l���L���.����������“���R�������k��������������t����������W���o���„���¡���†���H���=������^���������������u�������#���~��� ���X���ƒ���Q�������r�������F��������������������������§���}���‘���%���w�������n���c��� �������‚������:�������j�������1���y���v������m���*���ˆ������������…������’���b���<���O���–�������d���©���e���p���s���›���$���Œ���;���‰����������]���|���C�������ª���S���'�������?���‹��� ������8������� ����������������������a����������i�������z���D���� and �%.*s: variable null or not set�%s %s started�%s %s stopped�%s home page: <%s> �%s running; dir=%s, file=%s, pid=%lu�%s: No such file or directory�%s: UNIX socket name too long�%s: incompatible data type in list item #%d�%s: not a valid IP address�%s: not a valid IP address or hostname�%s: not a valid boolean value�%s: not a valid port number�%s: recursion depth does not match previous definition�(%02d) Input:%.*s;�(C)�, �<arg: string> <arg: string>...�Alias�Aliases�Cannot open `%s'�Cannot parse include line�Cannot run `%s'�Cannot stat `%s'�Coalesced list:�Command to execute on event�Configuration file structure for direvent. For more information, use `info direvent configuration'.�Configure event watcher�Configure syslog logging�DIR�Disabled;�Events to watch for�FILE�Files to watch for�GNU direvent monitors changes in directories�Give a short usage message�Give this help list�INTERNAL ERROR at %s:%d: unhandled data type %d�Include search path: �Initial list:�License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. �List of additional options�Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options.�Modify environment�NAME�No include search path. �OPTION�Other options�PRIO�PROG�Pathname to watch�Prefix each message with its priority�Print program version�Recursive inclusion�Report bugs to %s. �Run as this user�Run command as this user�Run in foreground�Set debug level�Set pid file name�Set syslog facility. Arg is one of the following: user, daemon, auth, authpriv, mail, cron, local0 through local7 (case-insensitive), or a facility number.�Tag syslog messages with this string�The optional CONFIG argument supplies the name of the configuration file to use instead of %s. �This direvent uses %s interface. �Timeout for the command�USER�Unable to start external preprocessor `%s'�Usage:�WS trimming�Written by �[CONFIG]�`%s' already included at top level�`%s' already included here�add include directory�arg�begin scanning process list�cannot change to %s: %s�cannot create watcher %s/%s, stat failed: %s�cannot create watcher %s/%s: not enough memory�cannot open `%s'�cannot open directory %s: %s�cannot open pidfile %s for writing: %s�cannot run `%s': fork failed: %s�cannot run redirector `%s': fork failed: %s�cannot set watcher on %s: %s�cannot start redirector for %s, pipe failed: %s�cannot stat %s/%s: not enough memory�cannot stat %s: %s�check configuration file and exit�coalesce list�command substitution�creating watcher %s�element not found in table�environment: �expected "recursive" or end of statement�expected %s�expected %s, but found %s�file�globbing error�incompatible data type for `%s'�increase debug level�input exhausted�invalid include statement�invalid use of block statement�invalid wordsplit usage�level�log everything with priority PRIO and higher to the stderr, as well as to the syslog�memory exhausted�missing closing %c (start near #%lu)�missing closing quote�missing port number�name�no command configured�no error�no event handlers configured�no event handlers installed�no files match pattern %s�no paths configured�no such group�no such user�no user with UID %lu�not a number (stopped near `%s')�not enough memory�numeric overflow�parse error�path expansion�process %lu dumped core�process %lu exited successfully�process %lu failed with status %d�process %lu stopped on signal %d�process %lu terminated on signal %d�process %lu terminated with unrecognized status�process %lu timed out�quote removal�read error�redirector for %s started, pid=%lu�regexp�remain in foreground�removing watcher %s�run as this user�scheduling alarm in %lu seconds�seconds�self-test mode�set PID file�set syslog facility�show configuration file summary�starting %s, dir=%s, file=%s�string�surplus argument�surplus arguments�symbol table is full�tilde expansion�too many arguments�too many arguments to `%s'; missing semicolon?�unbalanced curly brace�unbalanced parenthesis�undefined variable�unexpected block statement�unexpected end of file�unexpected list�unknown error�unknown syslog facility `%s'�unknown syslog facility: %s�unknown syslog priority: %s�unrecognized event code�unrecognized option�value out of allowed range�variable expansion�waiting for %s (%lu) to terminate�warning: undefined variable `%.*s'�Project-Id-Version: direvent 5.1 Report-Msgid-Bugs-To: bug-direvent@gnu.org.ua POT-Creation-Date: 2019-07-13 19:23+0300 PO-Revision-Date: 2016-07-08 14:27+0200 Last-Translator: Frédéric Marchal <fmarchal@perso.be> Language-Team: French <traduc@traduc.org> Language: fr MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Bugs: Report translation errors to the Language-Team address. Plural-Forms: nplurals=2; plural=(n > 1); � et �%.*s: variable nulle ou pas définie�%s %s démarré�%s %s arrêté�site internet de %s: <%s> �%s en cours; rép=%s, fichier=%s, pid=%lu�%s: Ce fichier ou répertoire n'existe pas�%s: Nom de socket UNIX trop long�%s: type de donnée incompatible dans l'élément n°%d de la liste�%s: n'est pas une adresse IP valable�%s: n'est pas une adresse IP ou un nom d'hôte valable�%s: pas une valeur booléenne valable�%s: n'est pas un numéro de port valable�%s: la profondeur de récursion ne correspond pas à la définition précédente�(%02d) Entrée:%.*s;�©�, �<arg: chaîne> <arg: chaîne>…�Alias�Alias�Impossible d'ouvrir « %s »�La ligne d'inclusion ne peut pas être analysée�Impossible d'exécuter « %s »�Impossible d'exécuter stat « %s »�Liste combinée:�Commande à exécuter suite à l'événement�Structure du fichier de configuration de direvent. Pour plus d'information, utilisez « info direvent configuration ».�Configurer la surveillance de l'événement�Configurer la journalisation syslog�RÉP�Désactivé;�Événements à surveiller�FICHIER�Fichiers à surveiller�GNU direvent surveilles les changements dans des répertoires�Montrer un court message sur l'utilisation�Afficher cette liste d'aide�ERREUR INTERNE à %s:%d: type de donnée %d non géré�Chemin de recherche des fichiers à inclure: �Liste initiale:�Licence GPLv3+: GNU GPL version 3 ou ultérieure <http://gnu.org/licenses/gpl.html>. Ceci est un logiciel libre: vous êtes libre de le modifier et de le redistribuer. Il n'y a PAS de GARANTIE dans les limites permises par la loi. �Liste d'options additionnelles�Les arguments requis ou optionnels pour les options longues sont aussi requis ou optionnels pour les options courtes correspondantes.�Modifier l'environnement�NOM�Aucun chemin de recherche des fichiers à inclure. �OPTION�Autres options�PRIO�PROG�Chemin à surveiller�Préfixer chaque message avec cette priorité�Afficher la version du programme�Inclusion récursive�Signalez les bogues à %s. Signalez les bogues de traduction à <traduc@traduc.org>. �Exécuter comme cet utilisateur�Exécuter la commande comme cet utilisateur�Exécuter en avant plan�Sélectionner le niveau de débogage�Sélectionner le nom du fichier pid�La catégorie syslog. Arg peut prendre la valeur: user, daemon, auth, authpriv, mail, cron, local0 à local7 (insensible à la casse) ou un numéro de catégorie.�Étiqueter les messages syslog avec cette chaîne�L'argument optionnel CONFIG fourni le nom du fichier de configuration à utiliser au lieu de %s. �Ce direvent utilise l'interface %s. �Délai d'expiration de la commande�UTILISATEUR�Impossible de démarrer le préprocesseur externe « %s »�Usage:�Suppression des espaces�Écrit par �[CONFIG]�« %s » déjà inclus au plus haut niveau�« %s » déjà inclus ici�ajouter le répertoire d'inclusion�arg�début du parcours de la liste des processus�impossible de changer vers %s: %s�impossible de créer le superviseur %s/%s, stat a échoué: %s�impossible de créer le superviseur %s/%s: pas assez de mémoire�impossible d'ouvrir « %s »�impossible d'ouvrir le répertoire %s: %s�impossible d'ouvrir le fichier pid %s en écriture: %s�impossible d'exécuter « %s »: fork a échoué: %s�impossible d'exécuter la redirection « %s »: fork a échoué: %s�impossible de mettre un superviseur sur %s: %s�impossible de démarrer la redirection pour %s, pipe a échoué: %s�impossible d'exécuter stat sur %s/%s: pas assez de mémoire�impossible d'exécuter stat %s: %s�vérifier le fichier de configuration et terminer�combinaison de liste�substitution de commande�création du superviseur %s�élément pas trouvé dans la table�environnement: �« recursive » ou fin d'instruction attendu�%s attendu�%s attendu mais %s rencontré�fichier�erreur d'expansion des jokers�type de donnée incompatible pour « %s »�augmenter le niveau de débogage�entrée épuisée�instruction d'inclusion invalide�utilisation invalide d'une instruction bloc�utilisation de « wordsplit » invalide�niveau�journaliser tout avec la priorité PRIO ou plus vers stderr ainsi que vers syslog�mémoire épuisée�la fermeture de %c manque (début près de #%lu)�parenthèse fermante manquante�numéro de port manquant�nom�aucune commande configurée�pas d'erreur�aucun gestionnaire d'événement configuré�aucun gestionnaire d'événement installé�aucun fichier ne correspond au motif %s�aucun chemin configuré�ce group n'existe pas�cet utilisateur n'existe pas�pas d'utilisateur avec le UID %lu�pas un nombre (arrêté près de « %s »)�pas assez de mémoire�débordement numérique�erreur d'analyse�remplacement de chemin�le processus %lu a créé un fichier core�le processus %lu s'est terminé avec succès�le processus %lu a échoué avec le statut %d�le processus %lu s'est arrêté à cause du signal %d�le processus %lu s'est terminé à cause du signal %d�le processus %lu s'est terminé avec un statut non reconnu�le processus %lu a dépassé le temps imparti�suppression des guillemets�erreur de lecture�redirection pour %s démarrée, pid=%lu�expression régulière�rester au premier plan�suppression de la supervision %s�exécuter comme cet utilisateur�planification d'une alarme dans %lu secondes�secondes�mode d'auto-test�sélectionner le fichier PID�sélectionner la catégorie pour syslog�montrer le résumé du fichier de configuration�démarrage de %s, rép=%s, fichier=%s�chaîne�argument surnuméraire�arguments surnuméraires�la table des symboles est remplie�remplacement du tilde�trop d'arguments�trop d'arguments à « %s »: point-virgule manquant ?�accolades non appariées�parenthèses non appariées�variable non définie�instruction bloc inattendue�fin de fichier inattendue�liste inattendue�erreur inconnue�catégorie syslog « %s » inconnue�catégorie syslog inconnue: %s�priorité syslog inconnue: %s�code d'événement non reconnu�option non reconnue�valeur hors des limites permises�remplacement de variables�attente que %s (%lu) se termine�attention: variable « %.*s » non définie�������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/po/boldquot.sed������������������������������������������������������������������������0000644�0001750�0001750�00000000331�13244106112�016121� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������s/"\([^"]*\)"/“\1â€/g s/`\([^`']*\)'/‘\1’/g s/ '\([^`']*\)' / ‘\1’ /g s/ '\([^`']*\)'$/ ‘\1’/g s/^'\([^`']*\)' /‘\1’ /g s/“â€/""/g s/“/“/g s/â€/â€/g s/‘/‘/g s/’/’/g �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/po/uk.gmo������������������������������������������������������������������������������0000644�0001750�0001750�00000045144�13512402637�014742� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Þ•����«������t��å���Ì ������`�����a�����g�� ���†�� ���”�����¢��$���¶�����Û�����ù��+��������C��&���^�����…�����£��6���¿�����ö����� ����� ����������/�����5�����=�����N�����h�����x�����‰�����™��c���µ����������1�����J�� ���N�����X�����l�����q��,���„�����±�����Ì��/���à������� ���&��È���4�����ý��s��������Œ�����Ÿ�����¤�����½�� ���Ä�����Ò�����×�����Ü��%���î����������*�����>�����R�����c�����|�����Ž�����ž��›���°��$���L��`���q��"���Ò�����õ����� ��*��������=�� ���D�� ���P�����\��"���e�����ˆ�����£�����¹�����½�����Ù��,���ñ��.��������M�����^��&���{�� ���¢��+���Ã�����ï��/��� ��$���<�����a��!���t�� ���–�����¤�����¹�����Í�� ���è��(���ö�� ��������+�����E�����J�����Y�����y�����Ž�����ž�����¸�����×�����ï��T���õ�����J��$���[�����€�����–�����ª�����¯�����Å�����Î�����ë����������!�� ���5�� ���C�����P�� ���e�����†�����˜�� ���©�����µ�����Ä�����Ü��!���ü�� �����#���?��/���c�����“�� ���©�� ���·��"���Â�����å�����ì���������������&�����F�����N�� ���]�����j�����~�����ž�����»�����Â�����Ó�����å�����ú����� ��.��������L�����c�����z����������¨�����¿�� ���Ï�����Ý�����ú����������2�����J�����^�����y��!���Œ��"���®��N��Ñ����� "��Z���'"�����‚"��%���™"��)���¿"��8���é"��>���"#��;���a#��J���#��0���è#��O���$��@���i$��8���ª$��k���ã$��"���O%�����r%�����u%��,���x%�����¥%�����¶%��+���É%��B���õ%��+���8&��T���d&��#���¹&��X���Ý&��®���6'��F���å'��;���,(�����h(�����o(��J���(�����Ì(��J���Õ(��E��� )��X���f)��/���¿)��i���ï)��(���Y*��"���‚*��¶��¥*��6���\,����“,��#���¦-�� ���Ê-��5���Õ-����� .�����.�����8.�����A.��_���R.��v���².��>���)/��'���h/��?���/��L���Ð/��[���0��W���y0��8���Ñ0��.��� 1����91��J���W2��Ä���¢2��L���g3��%���´3�����Ú3��q���ï3�����a4��#���{4�����Ÿ4�����®4��;���É4��%���5��.���+5�����Z5��E���a5��.���§5��‘���Ö5��n���h6��+���×6��:���7��W���>7��Z���–7��{���ñ7��E���m8��‰���³8��{���=9��T���¹9��W���:�� ���f:�����‡:��1���¡:��-���Ó:�����;��W���;�����p;��)���…;�����¯;��<���¸;��4���õ;��<���*<��(���g<��6���<��M���Ç<��C���=�� ���Y=��‘���f=�� ���ø=��I���>��,���c>��+���>�� ���¼>��(���Ç>�����ð>��H���?��H���O?��=���˜?��(���Ö?�� ���ÿ?��@��� @��,���a@��>���Ž@��&���Í@��4���ô@�����)A��!���GA��5���iA��=���ŸA��L���ÝA��D���*B��F���oB��]���¶B��V���C�����kC�����‰C��F���§C�����îC��6���D��&���:D��L���aD��C���®D�����òD��%���E�����'E��0���GE��H���xE��H���ÁE�� ��� F�����F�����3F��G���QF��#���™F��%���½F��a���ãF��,���EG��*���rG��#���G��4���ÁG��;���öG��%���2H�����XH��4���xH��0���­H��8���ÞH��,���I��+���DI��E���pI��%���¶I��@���ÜI��F���J�����Z������U���£������� ���2�������A���P���3���‡��������������h���M���4���™���K���7�������_�������T���B���Y���—����������I�������[��������������¨���¦���&�������š���”�������¢���`�������œ���6������!���������������˜�������Ž������\��������������"���(�������•���>������f���¤�������@���9���������)�������€���������������ž���N���,���Š���q���¥���Ÿ���������������{���g���/���«���+���E���V���0����������-���5������x���G��� ���J������� ���l���L���.����������“���R�������k��������������t����������W���o���„���¡���†���H���=������^���������������u�������#���~��� ���X���ƒ���Q�������r�������F��������������������������§���}���‘���%���w�������n���c��� �������‚������:�������j�������1���y���v������m���*���ˆ������������…������’���b���<���O���–�������d���©���e���p���s���›���$���Œ���;���‰����������]���|���C�������ª���S���'�������?���‹��� ������8������� ����������������������a����������i�������z���D���� and �%.*s: variable null or not set�%s %s started�%s %s stopped�%s home page: <%s> �%s running; dir=%s, file=%s, pid=%lu�%s: No such file or directory�%s: UNIX socket name too long�%s: incompatible data type in list item #%d�%s: not a valid IP address�%s: not a valid IP address or hostname�%s: not a valid boolean value�%s: not a valid port number�%s: recursion depth does not match previous definition�(%02d) Input:%.*s;�(C)�, �<arg: string> <arg: string>...�Alias�Aliases�Cannot open `%s'�Cannot parse include line�Cannot run `%s'�Cannot stat `%s'�Coalesced list:�Command to execute on event�Configuration file structure for direvent. For more information, use `info direvent configuration'.�Configure event watcher�Configure syslog logging�DIR�Disabled;�Events to watch for�FILE�Files to watch for�GNU direvent monitors changes in directories�Give a short usage message�Give this help list�INTERNAL ERROR at %s:%d: unhandled data type %d�Include search path: �Initial list:�License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. �List of additional options�Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options.�Modify environment�NAME�No include search path. �OPTION�Other options�PRIO�PROG�Pathname to watch�Prefix each message with its priority�Print program version�Recursive inclusion�Report bugs to %s. �Run as this user�Run command as this user�Run in foreground�Set debug level�Set pid file name�Set syslog facility. Arg is one of the following: user, daemon, auth, authpriv, mail, cron, local0 through local7 (case-insensitive), or a facility number.�Tag syslog messages with this string�The optional CONFIG argument supplies the name of the configuration file to use instead of %s. �This direvent uses %s interface. �Timeout for the command�USER�Unable to start external preprocessor `%s'�Usage:�WS trimming�Written by �[CONFIG]�`%s' already included at top level�`%s' already included here�add include directory�arg�begin scanning process list�cannot change to %s: %s�cannot create watcher %s/%s, stat failed: %s�cannot create watcher %s/%s: not enough memory�cannot open `%s'�cannot open directory %s: %s�cannot open pidfile %s for writing: %s�cannot run `%s': fork failed: %s�cannot run redirector `%s': fork failed: %s�cannot set watcher on %s: %s�cannot start redirector for %s, pipe failed: %s�cannot stat %s/%s: not enough memory�cannot stat %s: %s�check configuration file and exit�coalesce list�command substitution�creating watcher %s�element not found in table�environment: �expected "recursive" or end of statement�expected %s�expected %s, but found %s�file�globbing error�incompatible data type for `%s'�increase debug level�input exhausted�invalid include statement�invalid use of block statement�invalid wordsplit usage�level�log everything with priority PRIO and higher to the stderr, as well as to the syslog�memory exhausted�missing closing %c (start near #%lu)�missing closing quote�missing port number�name�no command configured�no error�no event handlers configured�no event handlers installed�no files match pattern %s�no paths configured�no such group�no such user�no user with UID %lu�not a number (stopped near `%s')�not enough memory�numeric overflow�parse error�path expansion�process %lu dumped core�process %lu exited successfully�process %lu failed with status %d�process %lu stopped on signal %d�process %lu terminated on signal %d�process %lu terminated with unrecognized status�process %lu timed out�quote removal�read error�redirector for %s started, pid=%lu�regexp�remain in foreground�removing watcher %s�run as this user�scheduling alarm in %lu seconds�seconds�self-test mode�set PID file�set syslog facility�show configuration file summary�starting %s, dir=%s, file=%s�string�surplus argument�surplus arguments�symbol table is full�tilde expansion�too many arguments�too many arguments to `%s'; missing semicolon?�unbalanced curly brace�unbalanced parenthesis�undefined variable�unexpected block statement�unexpected end of file�unexpected list�unknown error�unknown syslog facility `%s'�unknown syslog facility: %s�unknown syslog priority: %s�unrecognized event code�unrecognized option�value out of allowed range�variable expansion�waiting for %s (%lu) to terminate�warning: undefined variable `%.*s'�Project-Id-Version: direvent 5.1 Report-Msgid-Bugs-To: bug-direvent@gnu.org.ua POT-Creation-Date: 2019-07-13 19:23+0300 PO-Revision-Date: 2016-07-07 22:43+0300 Last-Translator: Yuri Chornoivan <yurchor@ukr.net> Language-Team: Ukrainian <translation-team-uk@lists.sourceforge.net> Language: uk MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Bugs: Report translation errors to the Language-Team address. Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2); X-Generator: Lokalize 1.5 � та �%.*s: змінна Ð¿Ð¾Ñ€Ð¾Ð¶Ð½Ñ Ð°Ð±Ð¾ Ñ—Ñ— Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð½Ðµ вÑтановлено�Запущено %s %s�Завершено роботу %s %s�Ð”Ð¾Ð¼Ð°ÑˆÐ½Ñ Ñторінка %s: <%s> �працює %s; каталог=%s, файл=%s, pid=%lu�%s: немає такого файла або каталогу�%s: назва Ñокета UNIX Ñ” надто довгою�%s: неÑуміÑний тип даних у пункті ÑпиÑку %d�%s: не Ñ” коректною IP-адреÑою�%s: не Ñ” коректною IP-адреÑою або назвою вузла�%s: не Ñ” коректним булевим значеннÑм�%s: не Ñ” коректним номером порту�%s: глибина рекурÑÑ–Ñ— не відповідає попередньому визначенню�(%02d) Вхідні дані:%.*s;�©�, �<арг: Ñ€Ñдок> <арг: Ñ€Ñдок>...�Замінник�Замінники�Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ «%s»�Ðе вдалоÑÑ Ð¾Ð±Ñ€Ð¾Ð±Ð¸Ñ‚Ð¸ Ñ€Ñдок включеннÑ�Ðе вдалоÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ «%s»�Ðе вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ ÑтатиÑтичні дані щодо «%s»�Об’єднаний ÑпиÑок:�Команда, Ñку Ñлід виконати, Ñкщо ÑтанетьÑÑ Ð¿Ð¾Ð´Ñ–Ñ�Структура файла налаштувань Ð´Ð»Ñ direvent. Щоб дізнатиÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ, віддайте команду «info direvent configuration».�Ðалаштувати заÑіб ÑÑ‚ÐµÐ¶ÐµÐ½Ð½Ñ Ð·Ð° подіÑми�Ðалаштувати Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð¶ÑƒÑ€Ð½Ð°Ð»Ñƒ syslog�КÐТ�Вимкнено;�Події, за Ñкими Ñлід веÑти ÑпоÑтереженнÑ�ФÐЙЛ�Файли, за Ñкими Ñлід веÑти ÑпоÑтереженнÑ�GNU direvent Ñтежить за змінами у каталогах�ВивеÑти коротке Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ñ‰Ð¾Ð´Ð¾ викориÑтаннÑ�ВивеÑти ці довідкові дані�Ð’ÐУТРІШÐЯ ПОМИЛКÐ, %s:%d: непридатний до обробки тип даних %d�ШлÑÑ… пошуку включень: �Початковий ÑпиÑок:�Умови Ð»Ñ–Ñ†ÐµÐ½Ð·ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð¸ÐºÐ»Ð°Ð´ÐµÐ½Ð¾ у GPLv3+: GNU GPL верÑÑ–Ñ— 3 або новішій, <http://gnuorg/licenses/gpl.html> Це вільне програмне забезпеченнÑ: ви можете вільно змінювати Ñ– поширювати його. Вам не надаєтьÑÑ Ð–ÐžÐ”ÐИХ ГÐРÐÐТІЙ, окрім гарантій передбачених законодавÑтвом. �СпиÑок додаткових параметрів�Обов’Ñзкові Ñ– додаткові аргументи до довгих форм запиÑу параметрів Ñ” також об’Ñзовими або додатковими Ð´Ð»Ñ Ð²ÑÑ–Ñ… відповідних Ñкорочених форм запиÑу.�Змінити Ñередовище�ÐÐЗВÐ�Ðемає шлÑху пошуку включень. �ПÐРÐМЕТР�Інші параметри�ПРІО�ПРОГРÐМÐ�ШлÑÑ… до каталогу, за Ñким веÑтиметьÑÑ ÑпоÑтереженнÑ�Додавати перед кожним повідомленнÑм його рівень пріоритетноÑті�ВивеÑти дані щодо верÑÑ–Ñ— програми�РекурÑивне включеннÑ�ПовідомлÑйте про вади на адреÑу %s. �Виконати від імені вказаного кориÑтувача�КориÑтувач, від імені Ñкого Ñлід виконати команду�Ðе переходити у фоновий режим під Ñ‡Ð°Ñ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ�Ð’Ñтановити рівень діагноÑтики�Ð’Ñтановити назву файла pid�Ð’Ñтановити можливоÑті syslog. Ðргументом, арг, може бути один з таких Ñ€Ñдків: user, daemon, auth, authpriv, mail, cron, local0 through local7 (без Ð²Ñ€Ð°Ñ…ÑƒÐ²Ð°Ð½Ð½Ñ Ñ€ÐµÐ³Ñ–Ñтру) або номер можливоÑті.�Мітити Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ syslog вказаним Ñ€Ñдком�Ðеобов’Ñзковий аргумент ÐÐЛÐШТУВÐÐÐЯ визначає назву файл налаштувань, Ñким Ñлід ÑкориÑтатиÑÑ Ð·Ð°Ð¼Ñ–Ñть %s. �Ð¦Ñ Ð²ÐµÑ€ÑÑ–Ñ direvent викориÑтовує Ñ–Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ %s. �Тайм-аут Ð´Ð»Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸�КОРИСТУВÐЧ�Ðе вдалоÑÑ Ð·Ð°Ð¿ÑƒÑтити зовнішній заÑіб попередньої обробки «%s»�ВикориÑтаннÑ:�ÐžÐ±Ñ€Ñ–Ð·Ð°Ð½Ð½Ñ Ð¿Ñ€Ð¾Ð±Ñ–Ð»Ñ–Ð²�Ðвтор —�[ÐÐЛÐШТУВÐÐÐЯ]�«%s» вже включено на вищому рівні�«%s» вже включено тут�додати каталог включеннÑ�арг�розпочато ÑÐºÐ°Ð½ÑƒÐ²Ð°Ð½Ð½Ñ ÑпиÑку процеÑів�не вдалоÑÑ Ð¿ÐµÑ€ÐµÐ¹Ñ‚Ð¸ до %s: %s�не вдалоÑÑ Ñтворити заÑіб ÑÑ‚ÐµÐ¶ÐµÐ½Ð½Ñ %s/%s, помилка Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ ÑтатиÑтичних даних: %s�не вдалоÑÑ Ñтворити заÑіб ÑÑ‚ÐµÐ¶ÐµÐ½Ð½Ñ %s/%s, недоÑтатньо пам’Ñті�не вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ «%s»�не вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ каталог %s: %s�не вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ файл pid %s Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñу даних: %s�не вдалоÑÑ Ð·Ð°Ð¿ÑƒÑтити «%s»: помилка розгалуженнÑ: %s�не вдалоÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ переÑпрÑÐ¼Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Â«%s»: помилка розгалуженнÑ: %s�не вдалоÑÑ Ð²Ñтановити ÑÑ‚ÐµÐ¶ÐµÐ½Ð½Ñ Ð·Ð° %s: %s�не вдалоÑÑ Ð·Ð°Ð¿ÑƒÑтити переÑпрÑмовувач Ð´Ð»Ñ %s, помилка Ð¿ÐµÑ€ÐµÐ´Ð°Ð²Ð°Ð½Ð½Ñ ÐºÐ°Ð½Ð°Ð»Ð¾Ð¼: %s�не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ ÑтатиÑтичні дані щодо %s/%s: недоÑтатньо пам’Ñті�не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ ÑтатиÑтичні дані щодо %s: %s�перевірити файл налаштувань Ñ– завершити роботу�об’єднати ÑпиÑок�заміна команд�Ñтворюємо заÑіб ÑÑ‚ÐµÐ¶ÐµÐ½Ð½Ñ %s�елемента немає у таблиці�Ñередовище: �мало бути вказано «recursive» або завершено команду�мало бути %s�мало бути %s, виÑвлено %s�файл�помилка викориÑÑ‚Ð°Ð½Ð½Ñ Ð·Ð°Ð¼Ñ–Ð½Ð½Ð¸ÐºÑ–Ð²�неÑуміÑний тип даних Ð´Ð»Ñ Â«%s»�підвищити рівень діагноÑтуваннÑ�вичерпано вхідні дані�некоректна команда включеннÑ�некоректне викориÑÑ‚Ð°Ð½Ð½Ñ Ð±Ð»Ð¾ÐºÐ¾Ð²Ð¾Ñ— команди�некоректне викориÑÑ‚Ð°Ð½Ð½Ñ Ð¿Ð¾Ð´Ñ–Ð»Ñƒ Ñлів�рівень�запиÑати журнал уÑÑ–Ñ… подій з пріоритетніÑтю ПРІО та вищою до stderr, а також до syslog�пам'Ñть вичерпано�пропущено кінцеве %c (початок у районі %lu)�пропущено кінцеві лапки�не вказано номера порту�назва�команд не налаштовано�без помилок�не налаштовано жодного обробника подій�не вÑтановлено жодного обробника подій�жоден файл не відповідає зразку %s�шлÑхів не налаштовано�такої групи немає�такого запиÑу кориÑтувача не Ñ–Ñнує�немає кориÑтувача з UID %lu�не Ñ” чиÑлом (зупинено у районі «%s»)�недоÑтатньо пам’Ñті�Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ñ‡Ð¸Ñлового типу�помилка обробки�Ñ€Ð¾Ð·Ð³Ð¾Ñ€Ñ‚Ð°Ð½Ð½Ñ ÑˆÐ»Ñху�Ñтворено дамп Ñдра процеÑу %lu�Ð¿Ñ€Ð¾Ñ†ÐµÑ %lu уÑпішно завершив роботу�Ð¿Ñ€Ð¾Ñ†ÐµÑ %lu завершив роботу помилкою, Ñтан %d�роботу процеÑу %lu зупинено Ñигналом %d�роботу процеÑу %lu перервано Ñигналом %d�роботу процеÑу %lu перервано з нерозпізнаним Ñтаном�Ñ‡Ð°Ñ Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ð° дані від процеÑу %lu завершено�Ð²Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ð»Ð°Ð¿Ð¾Ðº�помилка читаннÑ�запущено переÑпрÑÐ¼Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ %s, pid=%lu�форм. вираз�не переходити у фоновий режим�вилучаємо ÑÑ‚ÐµÐ¶ÐµÐ½Ð½Ñ %s�виконати від імені вказаного кориÑтувача�Ð½Ð°Ð³Ð°Ð´ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð°Ð¿Ð»Ð°Ð½Ð¾Ð²Ð°Ð½Ð¾ за %lu Ñекунд�Ñекунди�режим Ñамоперевірки�Ñтановити файл PID�вÑтановити можливоÑті syslog�показати резюме щодо файла налаштувань�розпочинаємо роботу %s, каталог=%s, файл=%s�Ñ€Ñдок�зайвий аргумент�зайві аргументи�у таблиці Ñимволів не залишилоÑÑ Ð¼Ñ–ÑцÑ�Ñ€Ð¾Ð·Ð³Ð¾Ñ€Ñ‚Ð°Ð½Ð½Ñ Ñ‚Ð¸Ð»ÑŒÐ´Ð¸�забагато аргументів�забагато аргументів до «%s»; пропущено крапку з комою?�незакрита фігурна дужка�дужка без відповідника�невизначена змінна�неочікувана блокова команда�неочікуваний Ñимвол ÐºÑ–Ð½Ñ†Ñ Ñ„Ð°Ð¹Ð»Ð°�неочікуваний ÑпиÑок�невідома помилка�невідомі можливоÑті syslog: «%s»�невідомі можливоÑті syslog: %s�невідома пріоритетніÑть syslog: %s�нерозпізнаний код події�нерозпізнаний параметр�Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð¾Ð·Ð° припуÑтимим діапазоном�Ñ€Ð¾Ð·Ð³Ð¾Ñ€Ñ‚Ð°Ð½Ð½Ñ Ð·Ð¼Ñ–Ð½Ð½Ð¸Ñ…�очікуємо на Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸ %s (%lu)�попередженнÑ: невизначена змінна «%.*s»�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/po/eo.po�������������������������������������������������������������������������������0000644�0001750�0001750�00000052041�13512402637�014554� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Esperanto translation # Copyright (C) 2015, 2017 Free Software Foundation, Inc. # This file is distributed under the same license as the direvent package. # Felipe Castro <fefcas@gmail.com>, 2015, 2017. # msgid "" msgstr "" "Project-Id-Version: direvent 5.1\n" "Report-Msgid-Bugs-To: bug-direvent@gnu.org.ua\n" "POT-Creation-Date: 2019-07-13 19:23+0300\n" "PO-Revision-Date: 2017-01-23 12:35-0300\n" "Last-Translator: Felipe Castro <fefcas@gmail.com>\n" "Language-Team: Esperanto <translation-team-eo@lists.sourceforge.net>\n" "Language: eo\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" "X-Generator: Poedit 1.5.4\n" #: cmdline.opt:26 msgid "increase debug level" msgstr "alkrementi Äustigan nivelon" #: cmdline.opt:32 msgid "PRIO" msgstr "PRIO" #: cmdline.opt:32 msgid "" "log everything with priority PRIO and higher to the stderr, as well as to " "the syslog" msgstr "" "protokoli ĉion kun prioritato PRIO aÅ­ pli alta al la ĉeferarujo, samkiel al " "la syslog" #: cmdline.opt:41 msgid "NAME" msgstr "NOMO" #: cmdline.opt:41 msgid "set syslog facility" msgstr "aktivigi la utilaĵon syslog" #: cmdline.opt:47 msgid "remain in foreground" msgstr "resti malfone" #: cmdline.opt:53 msgid "DIR" msgstr "UJO" #: cmdline.opt:53 msgid "add include directory" msgstr "aldoni inkluzivan dosierujon" #: cmdline.opt:59 msgid "PROG" msgstr "PROG" #: cmdline.opt:59 msgid "self-test mode" msgstr "memtesta reÄimo" #: cmdline.opt:65 msgid "FILE" msgstr "DOSIERO" #: cmdline.opt:65 msgid "set PID file" msgstr "difini PID-dosieron" #: cmdline.opt:71 msgid "check configuration file and exit" msgstr "kontroli agordan dosieron kaj eliri" #: cmdline.opt:77 msgid "USER" msgstr "UZANTO" #: cmdline.opt:77 msgid "run as this user" msgstr "funkcii kiel tiu ĉi uzanto" #: cmdline.opt:87 msgid "show configuration file summary" msgstr "montri agord-dosieran resumon" #: cmdline.opt:81 msgid "Other options" msgstr "Aliaj modifiloj" #: cmdline.opt:93 msgid "Give this help list" msgstr "Montri tiun ĉi help-liston" #: cmdline.opt:93 msgid "Give a short usage message" msgstr "Montri mallongan mesaÄon pri la uzado" #: cmdline.opt:93 msgid "Print program version" msgstr "Montri program-version" #: cmdline.opt:13 msgid "GNU direvent monitors changes in directories" msgstr "GNU direvent kontroladas ÅanÄojn en dosierujojn" #: cmdline.opt:15 msgid "[CONFIG]" msgstr "[AGORDO]" #: cmdline.opt:95 #, c-format msgid "" "The optional CONFIG argument supplies the name of the configuration file\n" "to use instead of %s.\n" "\n" msgstr "" "La nedeviga argumento AGORDO indikas la nomon de agordo-dosiero por uzi\n" "anstataŭ %s.\n" "\n" #. TRANSLATORS: %s is one of: inotify, kqueue #: cmdline.opt:99 #, c-format msgid "" "This direvent uses %s interface.\n" "\n" msgstr "" "Tiu ĉi direvent uzas la interfacon %s.\n" "\n" #: cmdline.opt:102 #, c-format msgid "Include search path:\n" msgstr "Inkluziva serĉ-vojo:\n" #: cmdline.opt:105 #, c-format msgid "No include search path.\n" msgstr "Malinkluziva serĉ-vojo.\n" #: src/config.c:63 #, c-format msgid "unknown syslog facility: %s" msgstr "nekonata utilaĵo de syslog: %s" #: src/config.c:80 #, c-format msgid "unknown syslog priority: %s" msgstr "nekonata prioritato de syslog: %s" #: src/config.c:88 msgid "unexpected block statement" msgstr "neatendita bloka komando" #: src/config.c:97 #, c-format msgid "expected %s" msgstr "ni atendis %s" #: src/config.c:102 #, c-format msgid "expected %s, but found %s" msgstr "ni atendis %s, sed trovis %s" #: src/config.c:124 #, c-format msgid "unknown syslog facility `%s'" msgstr "nekonata utilaĵo syslog '%s'" #: src/config.c:133 src/config.c:606 msgid "name" msgstr "nomo" #: src/config.c:134 msgid "" "Set syslog facility. Arg is one of the following: user, daemon, auth, " "authpriv, mail, cron, local0 through local7 (case-insensitive), or a " "facility number." msgstr "" "Difini utilaĵon syslog. Arg estas unu el la jena: user, daemon, auth, " "authpriv, mail, cron, local0 Äis local7 (ajn usklece), aÅ­ numero de utilaĵo." #: src/config.c:139 grecs/src/format.c:36 grecs/src/tree.c:69 msgid "string" msgstr "ĉeno" #: src/config.c:139 msgid "Tag syslog messages with this string" msgstr "Marki mesaÄojn de syslog per tiu ĉi ĉeno" #: src/config.c:142 grecs/src/format.c:141 msgid "arg" msgstr "arg" #: src/config.c:143 msgid "Prefix each message with its priority" msgstr "Prefiksi ĉiun mesaÄon per Äia prioritato" #: src/config.c:191 #, c-format msgid "%s: recursion depth does not match previous definition" msgstr "%s: rikura profundo ne akordas al antaÅ­a difino" #: src/config.c:212 msgid "no paths configured" msgstr "neniu vojo estas agordita" #: src/config.c:217 msgid "no command configured" msgstr "neniu komando estas agordita" #: src/config.c:229 grecs/src/tree.c:665 msgid "invalid use of block statement" msgstr "malvalida uzo de bloka komando" #: src/config.c:274 msgid "expected \"recursive\" or end of statement" msgstr "ni atendis \"recursive\" aÅ­ la finon de komando" #: src/config.c:289 msgid "surplus argument" msgstr "troa argumento" #: src/config.c:295 src/config.c:446 msgid "unexpected list" msgstr "ne atendita listo" #: src/config.c:326 src/config.c:341 src/config.c:356 msgid "unrecognized event code" msgstr "nerekonita eventkodo" #: src/config.c:438 msgid "surplus arguments" msgstr "troaj argumentoj" #: src/config.c:452 msgid "no such user" msgstr "neniu tia uzanto" #: src/config.c:459 msgid "no such group" msgstr "neniu tia grupo" #: src/config.c:501 msgid "unrecognized option" msgstr "nerekonita modifilo" #: src/config.c:595 msgid "Pathname to watch" msgstr "Vojnomo por esti observata" #: src/config.c:598 msgid "Events to watch for" msgstr "Eventoj por esti observataj" #: src/config.c:601 msgid "regexp" msgstr "regulesprimo" #: src/config.c:601 msgid "Files to watch for" msgstr "Dosieroj por esti observataj" #: src/config.c:604 msgid "Command to execute on event" msgstr "Komando por esti lanĉata pro evento" #: src/config.c:606 msgid "Run command as this user" msgstr "Lanĉi la komandon kiel tiu ĉi uzanto" #: src/config.c:609 msgid "seconds" msgstr "sekundoj" #: src/config.c:609 msgid "Timeout for the command" msgstr "Tempolimo por la komando" #: src/config.c:611 msgid "List of additional options" msgstr "Listo de kromaj preferoj" #: src/config.c:614 msgid "<arg: string> <arg: string>..." msgstr "<arg: ĉeno> <arg: ĉeno>..." #: src/config.c:615 msgid "Modify environment" msgstr "ÅœanÄi medion" #: src/config.c:622 msgid "Run as this user" msgstr "Ruli kiel tiu ĉi uzanto" #: src/config.c:624 msgid "Run in foreground" msgstr "Ruli malfone" #: src/config.c:626 msgid "file" msgstr "dosiero" #: src/config.c:626 msgid "Set pid file name" msgstr "Difini pid-dosiernomon" #: src/config.c:628 msgid "Configure syslog logging" msgstr "Agordi protokoligo de syslog" #: src/config.c:630 msgid "level" msgstr "nivelo" #: src/config.c:630 msgid "Set debug level" msgstr "Difini Äustigan nivelon" #: src/config.c:632 msgid "Configure event watcher" msgstr "Agordi event-observanton" #: src/config.c:643 msgid "" "Configuration file structure for direvent.\n" "For more information, use `info direvent configuration'." msgstr "" "Strukturo de agorda dosiero por direvent.\n" "Por pli da informo, uzu 'info direvent configuration'." #: src/direvent.c:142 src/direvent.c:164 src/watcher.c:93 src/watcher.c:125 msgid "not enough memory" msgstr "ne sufiĉe da memoro" #: src/direvent.c:274 #, c-format msgid "cannot open pidfile %s for writing: %s" msgstr "ne eblas malfermi la pid-dosieron %s por skribi: %s" #: src/direvent.c:302 #, c-format msgid "no user with UID %lu" msgstr "neniu uzanto kun UID: %lu" #: src/direvent.c:420 #, c-format msgid "cannot run `%s': fork failed: %s" msgstr "ne eblas lanĉi '%s': forko fiaskis: %s" #: src/direvent.c:480 msgid "too many arguments" msgstr "tro multaj argumentoj" #: src/direvent.c:522 #, c-format msgid "%s %s started" msgstr "%s %s lanĉita" #: src/direvent.c:546 #, c-format msgid "%s %s stopped" msgstr "%s %s haltigita" #: src/environ.c:25 msgid "environment: " msgstr "medio: " #: src/progman.c:142 #, c-format msgid "process %lu exited successfully" msgstr "la procezo %lu ĉesis sukcese" #: src/progman.c:145 #, c-format msgid "process %lu failed with status %d" msgstr "la procezo %lu fiaskis kun elir-stato %d" #: src/progman.c:155 #, c-format msgid "process %lu terminated on signal %d" msgstr "la procezo %lu ĉesis pro signalo %d" #: src/progman.c:158 #, c-format msgid "process %lu stopped on signal %d" msgstr "la procezo %lu haltis pro signalo %d" #: src/progman.c:163 #, c-format msgid "process %lu dumped core" msgstr "nekropsio de procezo %lu" #: src/progman.c:167 #, c-format msgid "process %lu terminated with unrecognized status" msgstr "la procezo %lu ĉesis kun nerekonita stato" #: src/progman.c:228 msgid "begin scanning process list" msgstr "komenci skanadon de procez-listo" #: src/progman.c:232 #, c-format msgid "process %lu timed out" msgstr "la procezo %lu eltempiÄis" #: src/progman.c:241 #, c-format msgid "scheduling alarm in %lu seconds" msgstr "ni planas alarmon por %lu sekundoj" #: src/progman.c:322 #, c-format msgid "cannot start redirector for %s, pipe failed: %s" msgstr "ne eblas lanĉi redirektilo por %s, dukto fiaskis: %s" #: src/progman.c:354 #, c-format msgid "cannot run redirector `%s': fork failed: %s" msgstr "ne eblas lanĉi la redirektilon '%s': forko fiaskis: %s" #: src/progman.c:359 #, c-format msgid "redirector for %s started, pid=%lu" msgstr "redirektilo por %s komencis, pid=%lu" #: src/progman.c:455 #, c-format msgid "starting %s, dir=%s, file=%s" msgstr "Ekigo de %s, ujo=%s, dosiero=%s" #: src/progman.c:484 #, c-format msgid "cannot change to %s: %s" msgstr "ne eblas ÅanÄi al %s: %s" #: src/progman.c:512 #, c-format msgid "%s running; dir=%s, file=%s, pid=%lu" msgstr "%s rulas; ujo=%s, dosiero=%s, pid=%lu" #: src/progman.c:534 #, c-format msgid "waiting for %s (%lu) to terminate" msgstr "ni atendas ke %s (%lu) ĉesu" #: src/watcher.c:183 src/watcher.c:513 #, c-format msgid "removing watcher %s" msgstr "ni forigas observanton %s" #: src/watcher.c:195 msgid "no watchers left; exiting now" msgstr "" #: src/watcher.c:262 #, c-format msgid "installing CREATE sentinel for %s" msgstr "" #: src/watcher.c:275 #, c-format msgid "creating watcher %s" msgstr "ni kreas observanton %s" #: src/watcher.c:281 src/watcher.c:296 #, c-format msgid "cannot set watcher on %s: %s" msgstr "ne eblas agordi observanton en %s: %s" #: src/watcher.c:377 #, c-format msgid "cannot create watcher %s/%s: not enough memory" msgstr "ne eblas krei observanton %s/%s: mankas memoro" #: src/watcher.c:384 #, c-format msgid "cannot create watcher %s/%s, stat failed: %s" msgstr "ne eblas krei observanton %s/%s, stat fiaksis: %s" #: src/watcher.c:430 #, c-format msgid "cannot open directory %s: %s" msgstr "ne eblas malfermi dosierujon %s: %s" #: src/watcher.c:447 #, c-format msgid "cannot stat %s/%s: not enough memory" msgstr "ne eblas apliki 'stat' %s/%s: mankas memoro" #: src/watcher.c:452 #, c-format msgid "cannot stat %s: %s" msgstr "Ne eblas apliki 'stat' %s: %s" #: src/watcher.c:497 msgid "no event handlers configured" msgstr "neniu evento-traktilo estas difinita" #: src/watcher.c:502 msgid "no event handlers installed" msgstr "neniu evento-traktilo estas instalita" #: grecs/src/format.c:33 msgid "void" msgstr "" #: grecs/src/format.c:46 msgid "number" msgstr "" #: grecs/src/format.c:49 msgid "time" msgstr "" #: grecs/src/format.c:52 msgid "boolean" msgstr "" #: grecs/src/format.c:55 msgid "IPv4" msgstr "" #: grecs/src/format.c:58 msgid "CIDR" msgstr "" #: grecs/src/format.c:61 #, fuzzy msgid "hostname" msgstr "nomo" #: grecs/src/format.c:64 msgid "sockaddr" msgstr "" #: grecs/src/format.c:67 msgid "section" msgstr "" #: grecs/src/format.c:70 msgid "null" msgstr "" #: grecs/src/format.c:133 msgid "Disabled;" msgstr "Malebligata;" #: grecs/src/opthelp.c:123 grecs/src/opthelp.c:269 msgid "Usage:" msgstr "Uzmaniero:" #: grecs/src/opthelp.c:127 msgid "OPTION" msgstr "MODIFILO" #: grecs/src/opthelp.c:132 grecs/src/opthelp.c:427 msgid "Aliases" msgstr "Kromnomoj" #: grecs/src/opthelp.c:132 grecs/src/opthelp.c:427 msgid "Alias" msgstr "Kromnomo" #: grecs/src/opthelp.c:186 msgid "" "Mandatory or optional arguments to long options are also mandatory or " "optional for any corresponding short options." msgstr "" "Nepraj kaj malnepraj argumentoj por longaj modifiloj ankaÅ­ estas nepraj kaj " "malnepraj por la koresponda mallonga modifilo." #. TRANSLATORS: The placeholder indicates the bug-reporting #. address for this package. Please add _another line_ saying #. "Report translation bugs to <...>\n" with the address for #. translation bugs (typically your translation team's web or #. email address). #: grecs/src/opthelp.c:202 #, c-format msgid "Report bugs to %s.\n" msgstr "" "Raportu cimojn al: %s.\n" "Kaj mistradukojn al <translation-team-eo@lists.sourceforge.net>\n" #: grecs/src/opthelp.c:205 #, c-format msgid "%s home page: <%s>\n" msgstr "HejmpaÄo de %s: <%s>\n" #. TRANSLATORS: Translate "(C)" to the copyright symbol #. (C-in-a-circle), if this symbol is available in the user's #. locale. Otherwise, do not translate "(C)"; leave it as-is. #: grecs/src/opthelp.c:457 msgid "(C)" msgstr "©" #: grecs/src/opthelp.c:466 msgid "" "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." "html>\n" "This is free software: you are free to change and redistribute it.\n" "There is NO WARRANTY, to the extent permitted by law.\n" "\n" msgstr "" "Permeso GPLv3+: GNU GPL versio 3 aÅ­ posta <http://gnu.org/licenses/gpl." "html>\n" "Tio ĉi estas libera programaro: vi estas libera por ÅanÄi kaj redisdoni " "Äin.\n" "Ekzistas NENIU GARANTIO, laÅ­ plej amplekse permesate de la leÄoj.\n" "\n" #: grecs/src/opthelp.c:483 msgid "Written by " msgstr "Verkita de " #. TRANSLATORS: This string is used as a delimiter between #. authors' names as in: #. #. Written by Winnie the Pooh, Piglet ... #. #: grecs/src/opthelp.c:489 msgid ", " msgstr "; " #. TRANSLATORS: This string acts as a delimiter before the #. last author's names, e.g.: #. #. Written by Winnie the Pooh, Piglet and Christopher Robin. #. #: grecs/src/opthelp.c:495 msgid " and " msgstr " kaj " #: grecs/src/path-parser.c:62 #, c-format msgid "cannot open `%s'" msgstr "ne eblas malfermi '%s'" #: grecs/src/path-parser.c:108 grecs/src/path-parser.c:123 msgid "unexpected end of file" msgstr "neatendita fino de dosiero" #: grecs/src/path-parser.c:143 msgid "parse error" msgstr "analiz-eraro" #: grecs/src/preproc.c:448 grecs/src/preproc.c:470 #, c-format msgid "Cannot stat `%s'" msgstr "Ne eblas apliki stat '%s'" #: grecs/src/preproc.c:453 grecs/src/preproc.c:458 msgid "Recursive inclusion" msgstr "Rikura enmeto" #: grecs/src/preproc.c:461 #, c-format msgid "`%s' already included here" msgstr "'%s' jam estas enmetita ĉi tie" #: grecs/src/preproc.c:465 #, c-format msgid "`%s' already included at top level" msgstr "'%s' jam estas enmetita ĉe la supera nivelo" #: grecs/src/preproc.c:480 #, c-format msgid "Cannot open `%s'" msgstr "Ne eblas malfermi '%s'" #: grecs/src/preproc.c:595 msgid "Cannot parse include line" msgstr "Ne eblas analizi enmetan linion" #: grecs/src/preproc.c:598 msgid "invalid include statement" msgstr "malvalida enmeta komando" #: grecs/src/preproc.c:624 msgid "read error" msgstr "leg-eraro" #: grecs/src/preproc.c:632 #, c-format msgid "%s: No such file or directory" msgstr "%s: neniu tia dosierujo aÅ­ dosiero" #: grecs/src/preproc.c:698 #, c-format msgid "Unable to start external preprocessor `%s'" msgstr "Ne eblas ekigi eksteran antaÅ­procezilon '%s'" #: grecs/src/preproc.c:773 grecs/src/preproc.c:793 #, c-format msgid "Cannot run `%s'" msgstr "Ne eblas lanĉi '%s'" #: grecs/src/symtab.c:236 msgid "element not found in table" msgstr "elemento ne estas trovita en tabelo" #: grecs/src/symtab.c:238 msgid "symbol table is full" msgstr "simboltabelo estas plena" #: grecs/src/tree.c:70 msgid "list" msgstr "" #: grecs/src/tree.c:71 #, fuzzy msgid "one or more arguments" msgstr "tro multaj argumentoj" #: grecs/src/tree.c:75 #, fuzzy msgid "unrecognized type; please report" msgstr "nerekonita eventkodo" #: grecs/src/tree.c:320 msgid "section keyword used as a scalar" msgstr "" #: grecs/src/tree.c:322 msgid "scalar keyword used as a section" msgstr "" #: grecs/src/tree.c:325 #, fuzzy msgid "unknown keyword" msgstr "Nekonata Ålosilvorto" #: grecs/src/tree.c:360 #, c-format msgid "%s: not a valid boolean value" msgstr "%s: ne estas valida bulea valoro" #: grecs/src/tree.c:391 #, c-format msgid "%s: UNIX socket name too long" msgstr "%s: tro longa ingo-nomo de UNIX" #: grecs/src/tree.c:420 grecs/src/tree.c:644 #, c-format msgid "%s: not a valid IP address or hostname" msgstr "%s: ne estas valida IP-adsero aÅ­ gastigant-nomo" #: grecs/src/tree.c:444 #, c-format msgid "%s: not a valid port number" msgstr "%s: ne estas valida pord-numero" #: grecs/src/tree.c:452 msgid "missing port number" msgstr "mankas pordo-numero" #: grecs/src/tree.c:501 msgid "numeric overflow" msgstr "numera troo" #: grecs/src/tree.c:506 msgid "value out of allowed range" msgstr "valoro estas for de permesata intervalo" #: grecs/src/tree.c:541 grecs/src/tree.c:571 #, c-format msgid "not a number (stopped near `%s')" msgstr "ne estas numero (haltis proksime de '%s')" #: grecs/src/tree.c:635 #, c-format msgid "%s: not a valid IP address" msgstr "%s: neniu valida IP-adreso" #: grecs/src/tree.c:774 #, c-format msgid "too many arguments to `%s'; missing semicolon?" msgstr "tro multaj argumentoj por '%s'; ĉu mankas punkto-komo?" #: grecs/src/tree.c:788 grecs/src/tree.c:836 #, c-format msgid "INTERNAL ERROR at %s:%d: unhandled data type %d" msgstr "INTERNA ERARO ĉe %s:%d: netraktebla datumartipo %d" #: grecs/src/tree.c:803 #, c-format msgid "%s: incompatible data type in list item #%d" msgstr "%s: nekongrua datumartipo en listero #%d" #: grecs/src/tree.c:823 #, c-format msgid "incompatible data type for `%s'" msgstr "nekongrua datumartipo por '%s'" #: grecs/wordsplit/wordsplit.c:69 grecs/wordsplit/wordsplit.c:2855 msgid "memory exhausted" msgstr "memoro estas elĉerpita" #: grecs/wordsplit/wordsplit.c:121 msgid "memory exhausted while trying to store error context" msgstr "" #: grecs/wordsplit/wordsplit.c:868 msgid "Restarting" msgstr "" #: grecs/wordsplit/wordsplit.c:1607 #, c-format msgid "%.*s: variable null or not set" msgstr "%.*s: variablo nula aÅ­ ne difinita" #: grecs/wordsplit/wordsplit.c:1637 #, c-format msgid "warning: undefined variable `%.*s'" msgstr "averto: nedifinita variablo '%.*s'" #: grecs/wordsplit/wordsplit.c:2141 #, c-format msgid "no files match pattern %s" msgstr "neniu dosiero kongruas al Åablono %s" #: grecs/wordsplit/wordsplit.c:2603 msgid "WS trimming" msgstr "Agordado de WS" #: grecs/wordsplit/wordsplit.c:2605 msgid "command substitution" msgstr "komand-antataÅ­igo" #: grecs/wordsplit/wordsplit.c:2607 grecs/wordsplit/wordsplit.c:2615 msgid "coalesce list" msgstr "kunfanda listo" #: grecs/wordsplit/wordsplit.c:2609 msgid "tilde expansion" msgstr "etendigo de tildo" #: grecs/wordsplit/wordsplit.c:2611 msgid "variable expansion" msgstr "etendigo de variablo" #: grecs/wordsplit/wordsplit.c:2613 msgid "quote removal" msgstr "forigo de citilo" #: grecs/wordsplit/wordsplit.c:2617 msgid "path expansion" msgstr "etendigo de vojo" #: grecs/wordsplit/wordsplit.c:2642 #, c-format msgid "(%02d) Input:%.*s;" msgstr "(%02d) Enigo:%.*s;" #: grecs/wordsplit/wordsplit.c:2668 msgid "Initial list:" msgstr "Komenca listo:" #: grecs/wordsplit/wordsplit.c:2683 msgid "Coalesced list:" msgstr "Kunfandita listo:" #: grecs/wordsplit/wordsplit.c:2853 msgid "no error" msgstr "neniu eraro" #: grecs/wordsplit/wordsplit.c:2854 msgid "missing closing quote" msgstr "mankas ferma citilo" #: grecs/wordsplit/wordsplit.c:2856 msgid "invalid wordsplit usage" msgstr "malvalida uzo de 'wordsplit'" #: grecs/wordsplit/wordsplit.c:2857 msgid "unbalanced curly brace" msgstr "ne spegulita kurba krampo" #: grecs/wordsplit/wordsplit.c:2858 msgid "undefined variable" msgstr "nedifinita variablo" #: grecs/wordsplit/wordsplit.c:2859 msgid "input exhausted" msgstr "enigo estas elĉerpita" #: grecs/wordsplit/wordsplit.c:2860 msgid "unbalanced parenthesis" msgstr "ne spegulita ronda krampo" #: grecs/wordsplit/wordsplit.c:2861 msgid "globbing error" msgstr "eraro de 'globbing'" #: grecs/wordsplit/wordsplit.c:2862 #, fuzzy msgid "user-defined error" msgstr "leg-eraro" #: grecs/wordsplit/wordsplit.c:2863 msgid "invalid parameter number in assignment" msgstr "" #: grecs/wordsplit/wordsplit.c:2875 msgid "unknown error" msgstr "nekonata eraro" #: grecs/wordsplit/wordsplit.c:2884 #, c-format msgid "missing closing %c (start near #%lu)" msgstr "mankas ferma %c (komencas proksime de #%lu)" #~ msgid "unterminated regexp" #~ msgstr "nefinigita regulesprimo" #~ msgid "unrecognized flag: %c" #~ msgstr "nerekonita flago: %c" #~ msgid "out of memory" #~ msgstr "mankas memoro" #~ msgid "%s: unknown keyword" #~ msgstr "%s: nekonata Ålosilvorto" #~ msgid "(%02d) Restart:%.*s;" #~ msgstr "(%02d) Rekomenco:%.*s;" #~ msgid "INTERNAL ERROR at %s:%d" #~ msgstr "INTERNA ERARO ĉe %s:%d" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/po/vi.po�������������������������������������������������������������������������������0000644�0001750�0001750�00000056367�13512402637�014606� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Vietnamese translations for direvent package. # Bản dịch tiếng Việt cho gói direvent. # Copyright (C) 2016 Free Software Foundation, Inc. # Copyright (C) 2016 Sergey Poznyakoff (msgid). # This file is distributed under the same license as the direvent package. # Trần Ngá»c Quân <vnwildman@gmail.com>, 2014, 2016. # msgid "" msgstr "" "Project-Id-Version: direvent 5.1\n" "Report-Msgid-Bugs-To: bug-direvent@gnu.org.ua\n" "POT-Creation-Date: 2019-07-13 19:23+0300\n" "PO-Revision-Date: 2016-07-08 07:55+0700\n" "Last-Translator: Trần Ngá»c Quân <vnwildman@gmail.com>\n" "Language-Team: Vietnamese <translation-team-vi@lists.sourceforge.net>\n" "Language: vi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Gtranslator 2.91.7\n" #: cmdline.opt:26 msgid "increase debug level" msgstr "tăng mức gỡ lá»—i" #: cmdline.opt:32 msgid "PRIO" msgstr "ƯUTIÊN" #: cmdline.opt:32 msgid "" "log everything with priority PRIO and higher to the stderr, as well as to " "the syslog" msgstr "" "ghi nhật ký má»i thứ mà mức ưu tiên bằng hay cao hÆ¡n ƯUTIÊN ra đầu ra lá»—i " "chuẩn, cÅ©ng như là syslog" #: cmdline.opt:41 msgid "NAME" msgstr "TÊN" #: cmdline.opt:41 msgid "set syslog facility" msgstr "đặt cÆ¡ sở hạ tầng ghi nhật ký" #: cmdline.opt:47 msgid "remain in foreground" msgstr "vẫn ở trên tiá»n cảnh" #: cmdline.opt:53 msgid "DIR" msgstr "TMỤC" #: cmdline.opt:53 msgid "add include directory" msgstr "thêm thư mục bao gồm" #: cmdline.opt:59 msgid "PROG" msgstr "TRÃŒNH" #: cmdline.opt:59 msgid "self-test mode" msgstr "chế độ tá»± kiểm tra" #: cmdline.opt:65 msgid "FILE" msgstr "TẬP-TIN" #: cmdline.opt:65 msgid "set PID file" msgstr "đặt tập tin ghi mã số tiến trình" #: cmdline.opt:71 msgid "check configuration file and exit" msgstr "kiểm tra tập tin cấu hình rồi thoát" #: cmdline.opt:77 msgid "USER" msgstr "NGƯỜI_DÙNG" #: cmdline.opt:77 msgid "run as this user" msgstr "chạy dưới tài khoản này" #: cmdline.opt:87 msgid "show configuration file summary" msgstr "hiển thị tổng hợp vá» tập tin cấu hình" #: cmdline.opt:81 msgid "Other options" msgstr "Tùy chá»n khác" #: cmdline.opt:93 msgid "Give this help list" msgstr "ÄÆ°a ra danh sách trợ giúp" #: cmdline.opt:93 msgid "Give a short usage message" msgstr "ÄÆ°a ra trợ giúp dạng ngắn gá»n" #: cmdline.opt:93 msgid "Print program version" msgstr "In ra phiên bản chương trình" #: cmdline.opt:13 msgid "GNU direvent monitors changes in directories" msgstr "GNU direvent theo dõi các thay đổi trong các thư mục" #: cmdline.opt:15 msgid "[CONFIG]" msgstr "[CẤUHÃŒNH]" #: cmdline.opt:95 #, c-format msgid "" "The optional CONFIG argument supplies the name of the configuration file\n" "to use instead of %s.\n" "\n" msgstr "" "Äối số tùy chá»n CONFIG cung cấp tên cá»§a tập tin cấu hình\n" "được dùng thay cho %s.\n" "\n" #. TRANSLATORS: %s is one of: inotify, kqueue #: cmdline.opt:99 #, c-format msgid "" "This direvent uses %s interface.\n" "\n" msgstr "" "direvent này dùng giao diện %s.\n" "\n" #: cmdline.opt:102 #, c-format msgid "Include search path:\n" msgstr "ÄÆ°á»ng dẫn tìm kiếm bao gồm:\n" #: cmdline.opt:105 #, c-format msgid "No include search path.\n" msgstr "ÄÆ°á»ng dẫn tìm kiếm không bao gồm:\n" #: src/config.c:63 #, c-format msgid "unknown syslog facility: %s" msgstr "không hiểu cÆ¡ sở hạ tầng ghi nhật ký: “%sâ€" #: src/config.c:80 #, c-format msgid "unknown syslog priority: %s" msgstr "không hiểu mức ưu tiên ghi nhật ký: “%sâ€" #: src/config.c:88 msgid "unexpected block statement" msgstr "gặp biểu thức khối không cần" #: src/config.c:97 #, c-format msgid "expected %s" msgstr "cần %s" #: src/config.c:102 #, c-format msgid "expected %s, but found %s" msgstr "cần %s, nhưng lại nhận được %s" #: src/config.c:124 #, c-format msgid "unknown syslog facility `%s'" msgstr "không hiểu cÆ¡ sở hạ tầng ghi nhật ký “%sâ€" #: src/config.c:133 src/config.c:606 msgid "name" msgstr "tên" #: src/config.c:134 msgid "" "Set syslog facility. Arg is one of the following: user, daemon, auth, " "authpriv, mail, cron, local0 through local7 (case-insensitive), or a " "facility number." msgstr "" "Äặt cÆ¡ sở hạ tầng syslog. Äối số là má»™t trong số sau: user, daemon, auth, " "authpriv, mail, cron, local0 đến local7 (phân biệt HOA/thưá»ng), hoặc là số " "cá»§a cÆ¡ sở hạ tầng." #: src/config.c:139 grecs/src/format.c:36 grecs/src/tree.c:69 msgid "string" msgstr "chuá»—i" #: src/config.c:139 msgid "Tag syslog messages with this string" msgstr "Äánh dấu thông tin nhật ký vá»›i chuá»—i này" #: src/config.c:142 grecs/src/format.c:141 msgid "arg" msgstr "đối-số" #: src/config.c:143 msgid "Prefix each message with its priority" msgstr "Nối thêm tiá»n tố từng lá»i nhắn bằng mức ưu tiên cá»§a nó" #: src/config.c:191 #, c-format msgid "%s: recursion depth does not match previous definition" msgstr "%s: độ sâu đệ quy không khá»›p vá»›i định nghÄ©a trước đó" #: src/config.c:212 msgid "no paths configured" msgstr "chưa có đưá»ng dẫn nào được cấu hình" #: src/config.c:217 msgid "no command configured" msgstr "chưa cấu hình lệnh nào" #: src/config.c:229 grecs/src/tree.c:665 msgid "invalid use of block statement" msgstr "cách dùng biểu thức khối không hợp lệ" #: src/config.c:274 msgid "expected \"recursive\" or end of statement" msgstr "cần \"recursive\" hoặc kết thúc câu lệnh" #: src/config.c:289 msgid "surplus argument" msgstr "tham số thừa" #: src/config.c:295 src/config.c:446 msgid "unexpected list" msgstr "gặp danh sách không cần" #: src/config.c:326 src/config.c:341 src/config.c:356 msgid "unrecognized event code" msgstr "không nhận ra mã sá»± kiện" #: src/config.c:438 msgid "surplus arguments" msgstr "các đối số thừa" #: src/config.c:452 msgid "no such user" msgstr "không có ngưá»i dùng như vậy" #: src/config.c:459 msgid "no such group" msgstr "không có nhóm như vậy" #: src/config.c:501 msgid "unrecognized option" msgstr "không nhận ra tùy chá»n" #: src/config.c:595 msgid "Pathname to watch" msgstr "Tên đưá»ng dẫn cần theo dõi" #: src/config.c:598 msgid "Events to watch for" msgstr "Sá»± kiện cần theo dõi" #: src/config.c:601 msgid "regexp" msgstr "BTCQ" #: src/config.c:601 msgid "Files to watch for" msgstr "Các tập tin cần theo dõi" #: src/config.c:604 msgid "Command to execute on event" msgstr "Lệnh thá»±c thi cho sá»± kiện" #: src/config.c:606 msgid "Run command as this user" msgstr "Chạy lệnh dưới tư cách ngưá»i dùng này" #: src/config.c:609 msgid "seconds" msgstr "giây" #: src/config.c:609 msgid "Timeout for the command" msgstr "Thá»i gian chá» lệnh tối Ä‘a" #: src/config.c:611 msgid "List of additional options" msgstr "Danh sách các tùy chá»n bổ xung" #: src/config.c:614 msgid "<arg: string> <arg: string>..." msgstr "<đối-số: chuá»—i> <đối-số: chuá»—i>…" #: src/config.c:615 msgid "Modify environment" msgstr "Biến đổi biến môi trưá»ng" #: src/config.c:622 msgid "Run as this user" msgstr "chạy như là ngưá»i dùng này" #: src/config.c:624 msgid "Run in foreground" msgstr "Chạy trên ná»n" #: src/config.c:626 msgid "file" msgstr "tập_tin" #: src/config.c:626 msgid "Set pid file name" msgstr "Äặt tên tập tin lưu mã số tiến trình" #: src/config.c:628 msgid "Configure syslog logging" msgstr "Cấu hình ghi nhật ký syslog" #: src/config.c:630 msgid "level" msgstr "mức" #: src/config.c:630 msgid "Set debug level" msgstr "Äặt mức gỡ lá»—i" #: src/config.c:632 msgid "Configure event watcher" msgstr "Cấu hình bá»™ theo dõi sá»± kiện" #: src/config.c:643 msgid "" "Configuration file structure for direvent.\n" "For more information, use `info direvent configuration'." msgstr "" "Cấu trúc tập tin cấu hình cho direvent.\n" "Äể biết thêm thông tin vui lòng xem “info direvent configurationâ€." #: src/direvent.c:142 src/direvent.c:164 src/watcher.c:93 src/watcher.c:125 msgid "not enough memory" msgstr "không đủ bá»™ nhá»›" #: src/direvent.c:274 #, c-format msgid "cannot open pidfile %s for writing: %s" msgstr "không thể mở tập-tin mã số tiến trình %s để ghi: %s" #: src/direvent.c:302 #, c-format msgid "no user with UID %lu" msgstr "không có ngưá»i dùng vá»›i mã số là %lu" #: src/direvent.c:420 #, c-format msgid "cannot run `%s': fork failed: %s" msgstr "không thể chạy “%sâ€: gặp lá»—i khi rẽ nhánh tiến trình: %s" #: src/direvent.c:480 msgid "too many arguments" msgstr "quá nhiá»u đối số" #: src/direvent.c:522 #, c-format msgid "%s %s started" msgstr "%s %s đã chạy" #: src/direvent.c:546 #, c-format msgid "%s %s stopped" msgstr "%s %s đã dừng" #: src/environ.c:25 msgid "environment: " msgstr "môi trưá»ng: " #: src/progman.c:142 #, c-format msgid "process %lu exited successfully" msgstr "tiến trình %lu đã thoát thành công" #: src/progman.c:145 #, c-format msgid "process %lu failed with status %d" msgstr "tiến trình %lu gặp lá»—i vá»›i trạng thái %d" #: src/progman.c:155 #, c-format msgid "process %lu terminated on signal %d" msgstr "tiến trình %lu chấm dứt trên tín hiệu %d" #: src/progman.c:158 #, c-format msgid "process %lu stopped on signal %d" msgstr "tiến trình %lu dừng trên tín hiệu %d" #: src/progman.c:163 #, c-format msgid "process %lu dumped core" msgstr "tiến trình %lu bị đổ lõi" #: src/progman.c:167 #, c-format msgid "process %lu terminated with unrecognized status" msgstr "tiến trình %lu chấm dứt vá»›i trạng thái không nhận ra" #: src/progman.c:228 msgid "begin scanning process list" msgstr "Ä‘ang bắt đầu quét tìm danh sách xá»­ lý" #: src/progman.c:232 #, c-format msgid "process %lu timed out" msgstr "tiến trình %lu bị lá»—i quá thá»i gian" #: src/progman.c:241 #, c-format msgid "scheduling alarm in %lu seconds" msgstr "lập lịch phát âm báo trong %lu giây" #: src/progman.c:322 #, c-format msgid "cannot start redirector for %s, pipe failed: %s" msgstr "không thể khởi chạy bá»™ chuyển hướng cho %s, gặp lá»—i vá»›i đưá»ng ống: %s" #: src/progman.c:354 #, c-format msgid "cannot run redirector `%s': fork failed: %s" msgstr "" "không thể chạy bá»™ chuyển hướng “%sâ€: gặp lá»—i khi rẽ nhánh tiến trình: %s" #: src/progman.c:359 #, c-format msgid "redirector for %s started, pid=%lu" msgstr "bá»™ chuyển hướng cho %s đã khởi chạy, pid=%lu" #: src/progman.c:455 #, c-format msgid "starting %s, dir=%s, file=%s" msgstr "Ä‘ang khởi chạy %s, thư-mục=%s, tập-tin=%s" #: src/progman.c:484 #, c-format msgid "cannot change to %s: %s" msgstr "không thể chuyển đổi sang %s: %s" #: src/progman.c:512 #, c-format msgid "%s running; dir=%s, file=%s, pid=%lu" msgstr "%s Ä‘ang chạy; thư-mục=%s, tập-tin=%s, mã-số-tiến-trình=%lu" #: src/progman.c:534 #, c-format msgid "waiting for %s (%lu) to terminate" msgstr "chá» %s (%lu) chấm dứt" #: src/watcher.c:183 src/watcher.c:513 #, c-format msgid "removing watcher %s" msgstr "gỡ bá» bá»™ theo dõi %s" #: src/watcher.c:195 msgid "no watchers left; exiting now" msgstr "" #: src/watcher.c:262 #, c-format msgid "installing CREATE sentinel for %s" msgstr "" #: src/watcher.c:275 #, c-format msgid "creating watcher %s" msgstr "Ä‘ang tạo bá»™ theo dõi %s" #: src/watcher.c:281 src/watcher.c:296 #, c-format msgid "cannot set watcher on %s: %s" msgstr "không thể đặt bá»™ theo dõi trên %s: %s" #: src/watcher.c:377 #, c-format msgid "cannot create watcher %s/%s: not enough memory" msgstr "không thể tạo bá»™ theo dõi %s/%s: không đủ bá»™ nhá»›" #: src/watcher.c:384 #, c-format msgid "cannot create watcher %s/%s, stat failed: %s" msgstr "không thể tạo bá»™ theo dõi %s/%s, gặp lá»—i khi lấy thống kê: %s" #: src/watcher.c:430 #, c-format msgid "cannot open directory %s: %s" msgstr "không thể mở thư mục %s: %s" #: src/watcher.c:447 #, c-format msgid "cannot stat %s/%s: not enough memory" msgstr "không thể lấy thống kê %s/%s: không đủ bá»™ nhá»›" #: src/watcher.c:452 #, c-format msgid "cannot stat %s: %s" msgstr "không thể lấy thống kê %s: %s" #: src/watcher.c:497 msgid "no event handlers configured" msgstr "chưa cấu hình bá»™ tiếp hợp sá»± kiện nào" #: src/watcher.c:502 msgid "no event handlers installed" msgstr "chưa cài đặt bá»™ tiếp hợp sá»± kiện nào" #: grecs/src/format.c:33 msgid "void" msgstr "" #: grecs/src/format.c:46 msgid "number" msgstr "" #: grecs/src/format.c:49 msgid "time" msgstr "" #: grecs/src/format.c:52 msgid "boolean" msgstr "" #: grecs/src/format.c:55 msgid "IPv4" msgstr "" #: grecs/src/format.c:58 msgid "CIDR" msgstr "" #: grecs/src/format.c:61 #, fuzzy msgid "hostname" msgstr "tên" #: grecs/src/format.c:64 msgid "sockaddr" msgstr "" #: grecs/src/format.c:67 msgid "section" msgstr "" #: grecs/src/format.c:70 msgid "null" msgstr "" #: grecs/src/format.c:133 msgid "Disabled;" msgstr "Äã tắt;" #: grecs/src/opthelp.c:123 grecs/src/opthelp.c:269 msgid "Usage:" msgstr "Cách dùng:" #: grecs/src/opthelp.c:127 msgid "OPTION" msgstr "TÙY_CHỌN" #: grecs/src/opthelp.c:132 grecs/src/opthelp.c:427 msgid "Aliases" msgstr "Bí danh" #: grecs/src/opthelp.c:132 grecs/src/opthelp.c:427 msgid "Alias" msgstr "Bí danh" #: grecs/src/opthelp.c:186 msgid "" "Mandatory or optional arguments to long options are also mandatory or " "optional for any corresponding short options." msgstr "" "Tất cả đối số bắt buá»™c phải sá»­ dụng vá»›i tùy chá»n dài cÅ©ng bắt buá»™c vá»›i tùy " "chá»n ngắn tương ứng." #. TRANSLATORS: The placeholder indicates the bug-reporting #. address for this package. Please add _another line_ saying #. "Report translation bugs to <...>\n" with the address for #. translation bugs (typically your translation team's web or #. email address). #: grecs/src/opthelp.c:202 #, c-format msgid "Report bugs to %s.\n" msgstr "" "Thông báo lá»—i cho %s.\n" "Báo cáo lá»—i dịch cho nhóm dịch tiếng Việt tại TranslationProject:\n" "\t<translation-team-vi@lists.sourceforge.net>\n" #: grecs/src/opthelp.c:205 #, c-format msgid "%s home page: <%s>\n" msgstr "Trang chá»§ %s: <%s>\n" #. TRANSLATORS: Translate "(C)" to the copyright symbol #. (C-in-a-circle), if this symbol is available in the user's #. locale. Otherwise, do not translate "(C)"; leave it as-is. #: grecs/src/opthelp.c:457 msgid "(C)" msgstr "©" #: grecs/src/opthelp.c:466 msgid "" "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." "html>\n" "This is free software: you are free to change and redistribute it.\n" "There is NO WARRANTY, to the extent permitted by law.\n" "\n" msgstr "" "Giấy phép GPL pb3+: Giấy phép Công cá»™ng GNU phiên bản 3 hay sau\n" "<http://gnu.org/licenses/gpl.html>\n" "Äây là phần má»m tá»± do: bạn có quyá»n sá»­a đổi và phát hành lại nó.\n" "KHÔNG CÓ BẢO HÀNH GÃŒ CẢ, vá»›i Ä‘iá»u khiển được pháp luật cho phép.\n" "\n" #: grecs/src/opthelp.c:483 msgid "Written by " msgstr "Tác giả " #. TRANSLATORS: This string is used as a delimiter between #. authors' names as in: #. #. Written by Winnie the Pooh, Piglet ... #. #: grecs/src/opthelp.c:489 msgid ", " msgstr ", " #. TRANSLATORS: This string acts as a delimiter before the #. last author's names, e.g.: #. #. Written by Winnie the Pooh, Piglet and Christopher Robin. #. #: grecs/src/opthelp.c:495 msgid " and " msgstr " và " #: grecs/src/path-parser.c:62 #, c-format msgid "cannot open `%s'" msgstr "không thể mở “%sâ€" #: grecs/src/path-parser.c:108 grecs/src/path-parser.c:123 msgid "unexpected end of file" msgstr "kết thúc tập tin đột xuất" #: grecs/src/path-parser.c:143 msgid "parse error" msgstr "lá»—i phân tích cú pháp" #: grecs/src/preproc.c:448 grecs/src/preproc.c:470 #, c-format msgid "Cannot stat `%s'" msgstr "không thể lấy thông tin thống kê vỠ“%sâ€" #: grecs/src/preproc.c:453 grecs/src/preproc.c:458 msgid "Recursive inclusion" msgstr "Bao gồm đệ quy" #: grecs/src/preproc.c:461 #, c-format msgid "`%s' already included here" msgstr "\"%s\" đã được bao gồm ở đây" #: grecs/src/preproc.c:465 #, c-format msgid "`%s' already included at top level" msgstr "\"%s\" đã bao gồm ở cấp đầu" #: grecs/src/preproc.c:480 #, c-format msgid "Cannot open `%s'" msgstr "Không thể mở “%sâ€" #: grecs/src/preproc.c:595 msgid "Cannot parse include line" msgstr "Không thể phân tích cú pháp cá»§a bao gồm" #: grecs/src/preproc.c:598 msgid "invalid include statement" msgstr "câu lệnh bao gồm sai" #: grecs/src/preproc.c:624 msgid "read error" msgstr "lá»—i Ä‘á»c" #: grecs/src/preproc.c:632 #, c-format msgid "%s: No such file or directory" msgstr "%s: Không có tập tin hoặc thư mục như vậy" #: grecs/src/preproc.c:698 #, c-format msgid "Unable to start external preprocessor `%s'" msgstr "Không thể khởi động bá»™ tiá»n xá»­ lý bên ngoài “%sâ€" #: grecs/src/preproc.c:773 grecs/src/preproc.c:793 #, c-format msgid "Cannot run `%s'" msgstr " Không thể chạy “%sâ€" #: grecs/src/symtab.c:236 msgid "element not found in table" msgstr "phần tá»­ không tìm thấy trong bảng" #: grecs/src/symtab.c:238 msgid "symbol table is full" msgstr "bảng ký hiệu đã đầy" #: grecs/src/tree.c:70 msgid "list" msgstr "" #: grecs/src/tree.c:71 #, fuzzy msgid "one or more arguments" msgstr "quá nhiá»u đối số" #: grecs/src/tree.c:75 #, fuzzy msgid "unrecognized type; please report" msgstr "không nhận ra mã sá»± kiện" #: grecs/src/tree.c:320 msgid "section keyword used as a scalar" msgstr "" #: grecs/src/tree.c:322 msgid "scalar keyword used as a section" msgstr "" #: grecs/src/tree.c:325 #, fuzzy msgid "unknown keyword" msgstr "Không hiểu từ khóa" #: grecs/src/tree.c:360 #, c-format msgid "%s: not a valid boolean value" msgstr "%s: không phải là giá trị lô gíc" #: grecs/src/tree.c:391 #, c-format msgid "%s: UNIX socket name too long" msgstr "%s: tên ổ cắm UNIX quá dài" #: grecs/src/tree.c:420 grecs/src/tree.c:644 #, c-format msgid "%s: not a valid IP address or hostname" msgstr "%s: không phải là địa chỉ IP hay tên máy hợp lệ" #: grecs/src/tree.c:444 #, c-format msgid "%s: not a valid port number" msgstr "%s: số hiệu cổng không hợp lệ" #: grecs/src/tree.c:452 msgid "missing port number" msgstr "thiếu số hiệu cá»§a cổng" #: grecs/src/tree.c:501 msgid "numeric overflow" msgstr "tràn số" #: grecs/src/tree.c:506 msgid "value out of allowed range" msgstr "số nằm ngoài phạm vi được phép" #: grecs/src/tree.c:541 grecs/src/tree.c:571 #, c-format msgid "not a number (stopped near `%s')" msgstr "không là kiểu số (dừng ở gần “%sâ€)" #: grecs/src/tree.c:635 #, c-format msgid "%s: not a valid IP address" msgstr "%s: không phải là địa chỉ IP hợp lệ" #: grecs/src/tree.c:774 #, c-format msgid "too many arguments to `%s'; missing semicolon?" msgstr "quá nhiá»u đối số cho “%sâ€; thiếu dấu chấm phẩy à?" #: grecs/src/tree.c:788 grecs/src/tree.c:836 #, c-format msgid "INTERNAL ERROR at %s:%d: unhandled data type %d" msgstr "Lá»–I NỘI TẠI ở %s:%d: kiểu dữ liệu không thể xá»­ lý %d" #: grecs/src/tree.c:803 #, c-format msgid "%s: incompatible data type in list item #%d" msgstr "%s: kiểu dữ liệu không tương thích trong mục tin #%d cá»§a danh sách" #: grecs/src/tree.c:823 #, c-format msgid "incompatible data type for `%s'" msgstr "kiểu dữ liệu không tương thích vá»›i “%sâ€" #: grecs/wordsplit/wordsplit.c:69 grecs/wordsplit/wordsplit.c:2855 msgid "memory exhausted" msgstr "hết bá»™ nhá»›" #: grecs/wordsplit/wordsplit.c:121 msgid "memory exhausted while trying to store error context" msgstr "" #: grecs/wordsplit/wordsplit.c:868 msgid "Restarting" msgstr "" #: grecs/wordsplit/wordsplit.c:1607 #, c-format msgid "%.*s: variable null or not set" msgstr "%.*s: biến null hoặc chưa được đặt" #: grecs/wordsplit/wordsplit.c:1637 #, c-format msgid "warning: undefined variable `%.*s'" msgstr "cảnh báo: chưa định nghÄ©a biến “%.*sâ€" #: grecs/wordsplit/wordsplit.c:2141 #, c-format msgid "no files match pattern %s" msgstr "không có tập tin nào khá»›p mẫu %s" #: grecs/wordsplit/wordsplit.c:2603 msgid "WS trimming" msgstr "cắt WS" #: grecs/wordsplit/wordsplit.c:2605 msgid "command substitution" msgstr "thay thế lệnh" #: grecs/wordsplit/wordsplit.c:2607 grecs/wordsplit/wordsplit.c:2615 msgid "coalesce list" msgstr "co danh sách" #: grecs/wordsplit/wordsplit.c:2609 msgid "tilde expansion" msgstr "khai triển dấu ~" #: grecs/wordsplit/wordsplit.c:2611 msgid "variable expansion" msgstr "khai triển biến" #: grecs/wordsplit/wordsplit.c:2613 msgid "quote removal" msgstr "gỡ bá» dấu trích dẫn" #: grecs/wordsplit/wordsplit.c:2617 msgid "path expansion" msgstr "khai triển đưá»ng dẫn" #: grecs/wordsplit/wordsplit.c:2642 #, c-format msgid "(%02d) Input:%.*s;" msgstr "(%02d) Äầu vào:%.*s;" #: grecs/wordsplit/wordsplit.c:2668 msgid "Initial list:" msgstr "Danh sách khởi tạo:" #: grecs/wordsplit/wordsplit.c:2683 msgid "Coalesced list:" msgstr "Danh sách đã co:" #: grecs/wordsplit/wordsplit.c:2853 msgid "no error" msgstr "không lá»—i" #: grecs/wordsplit/wordsplit.c:2854 msgid "missing closing quote" msgstr "thiếu dấu trích dẫn đóng" #: grecs/wordsplit/wordsplit.c:2856 msgid "invalid wordsplit usage" msgstr "cách dùng wordsplit (tách chữ) không hợp lệ" #: grecs/wordsplit/wordsplit.c:2857 msgid "unbalanced curly brace" msgstr "chưa khá»›p cặp dấu ngoặc" #: grecs/wordsplit/wordsplit.c:2858 msgid "undefined variable" msgstr "biến chưa được định nghÄ©a" #: grecs/wordsplit/wordsplit.c:2859 msgid "input exhausted" msgstr "đầu vào đã hết" #: grecs/wordsplit/wordsplit.c:2860 msgid "unbalanced parenthesis" msgstr "Chưa đủ cặp ngoặc đơn" #: grecs/wordsplit/wordsplit.c:2861 msgid "globbing error" msgstr "lá»—i globbing" #: grecs/wordsplit/wordsplit.c:2862 #, fuzzy msgid "user-defined error" msgstr "lá»—i Ä‘á»c" #: grecs/wordsplit/wordsplit.c:2863 msgid "invalid parameter number in assignment" msgstr "" #: grecs/wordsplit/wordsplit.c:2875 msgid "unknown error" msgstr "lá»—i không rõ" #: grecs/wordsplit/wordsplit.c:2884 #, c-format msgid "missing closing %c (start near #%lu)" msgstr "thiếu đóng %c (bắt đầu gần #%lu)" #~ msgid "unterminated regexp" #~ msgstr "biểu thức chính quy chưa được chấm dứt" #~ msgid "unrecognized flag: %c" #~ msgstr "không nhận ra cá»: “%câ€" #~ msgid "out of memory" #~ msgstr "hết bá»™ nhá»›" #~ msgid "%s: unknown keyword" #~ msgstr "%s: không hiểu từ khóa" #~ msgid "(%02d) Restart:%.*s;" #~ msgstr "(%02d) Khởi động lại:%.*s;" #~ msgid "INTERNAL ERROR at %s:%d" #~ msgstr "Lá»–I NỘI BỘ ở %s:%d" #~ msgid "ignoring duplicate definition" #~ msgstr "bá» qua định nghÄ©a bị trùng lặp" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/po/nl.gmo������������������������������������������������������������������������������0000644�0001750�0001750�00000033621�13512402637�014731� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Þ•����«������t��å���Ì ������`�����a�����g�� ���†�� ���”�����¢��$���¶�����Û�����ù��+��������C��&���^�����…�����£��6���¿�����ö����� ����� ����������/�����5�����=�����N�����h�����x�����‰�����™��c���µ����������1�����J�� ���N�����X�����l�����q��,���„�����±�����Ì��/���à������� ���&��È���4�����ý��s��������Œ�����Ÿ�����¤�����½�� ���Ä�����Ò�����×�����Ü��%���î����������*�����>�����R�����c�����|�����Ž�����ž��›���°��$���L��`���q��"���Ò�����õ����� ��*��������=�� ���D�� ���P�����\��"���e�����ˆ�����£�����¹�����½�����Ù��,���ñ��.��������M�����^��&���{�� ���¢��+���Ã�����ï��/��� ��$���<�����a��!���t�� ���–�����¤�����¹�����Í�� ���è��(���ö�� ��������+�����E�����J�����Y�����y�����Ž�����ž�����¸�����×�����ï��T���õ�����J��$���[�����€�����–�����ª�����¯�����Å�����Î�����ë����������!�� ���5�� ���C�����P�� ���e�����†�����˜�� ���©�����µ�����Ä�����Ü��!���ü�� �����#���?��/���c�����“�� ���©�� ���·��"���Â�����å�����ì���������������&�����F�����N�� ���]�����j�����~�����ž�����»�����Â�����Ó�����å�����ú����� ��.��������L�����c�����z����������¨�����¿�� ���Ï�����Ý�����ú����������2�����J�����^�����y��!���Œ��"���®��ô��Ñ�����Æ!��)���Ë!�����õ!�����"�����"��&���1"�����X"�����x"��.���—"�����Æ"��&���á"��$���#�����-#��9���K#�����…#�����™#�����œ#��&���Ÿ#�����Æ#�����Ì#�����Õ#��!���ê#����� $��$���$$�����I$��&���^$��n���…$�����ô$�����%�����)%�� ���-%�����7%�����S%�����[%��0���r%��$���£%�����È%��?���Ý%�����&�� ���5&��&��A&�����h'��p���…'�����ö'����� (�����(�����((�����.(�����=(�� ���B(�����L(��(���a(�����Š(�����£(��j���¹(�����$)��%���A)�����g)�����)�����–)��³���¯)��,���c*��u���*��+���+�����2+�� ���O+��*���Y+�� ���„+�����Ž+����� +�����±+��&���º+�����á+�����ü+�����,�����,��!���=,��6���_,��A���–,�����Ø,�����í,��2���-��.���;-��5���j-��!��� -��8���Â-��G���û-��&���C.��*���j.�����•.�����§.�����».�����Ó.�� ���ò.��-���ý.�� ���+/�����9/�����U/�� ���]/��#���k/�����/�����¥/�����µ/��#���Ò/��#���ö/�����0��Y���!0�� ���{0��2���œ0��%���Ï0�����õ0����� 1�����1�� ���.1��,���81��,���e1��.���’1�����Á1�����Û1�����ò1�� ��� 2��%���.2�� ���T2�����u2�����ˆ2�� ���—2��'���£2��#���Ë2��*���ï2��(���3��(���C3��8���l3��%���¥3�����Ë3�����ç3��$���ö3�����4�����$4�����<4�����W4��2���t4�����§4�����°4�����¿4�����Ø4��.���÷4��"���&5�� ���I5�����T5�����h5�����5�����”5�����£5��3���¶5�����ê5�����þ5�����6�����)6�����C6�����`6�����r6��!���6�����£6�����Ã6�����ã6�����7�����7�����+7��"���?7��.���b7�����Z������U���£������� ���2�������A���P���3���‡��������������h���M���4���™���K���7�������_�������T���B���Y���—����������I�������[��������������¨���¦���&�������š���”�������¢���`�������œ���6������!���������������˜�������Ž������\��������������"���(�������•���>������f���¤�������@���9���������)�������€���������������ž���N���,���Š���q���¥���Ÿ���������������{���g���/���«���+���E���V���0����������-���5������x���G��� ���J������� ���l���L���.����������“���R�������k��������������t����������W���o���„���¡���†���H���=������^���������������u�������#���~��� ���X���ƒ���Q�������r�������F��������������������������§���}���‘���%���w�������n���c��� �������‚������:�������j�������1���y���v������m���*���ˆ������������…������’���b���<���O���–�������d���©���e���p���s���›���$���Œ���;���‰����������]���|���C�������ª���S���'�������?���‹��� ������8������� ����������������������a����������i�������z���D���� and �%.*s: variable null or not set�%s %s started�%s %s stopped�%s home page: <%s> �%s running; dir=%s, file=%s, pid=%lu�%s: No such file or directory�%s: UNIX socket name too long�%s: incompatible data type in list item #%d�%s: not a valid IP address�%s: not a valid IP address or hostname�%s: not a valid boolean value�%s: not a valid port number�%s: recursion depth does not match previous definition�(%02d) Input:%.*s;�(C)�, �<arg: string> <arg: string>...�Alias�Aliases�Cannot open `%s'�Cannot parse include line�Cannot run `%s'�Cannot stat `%s'�Coalesced list:�Command to execute on event�Configuration file structure for direvent. For more information, use `info direvent configuration'.�Configure event watcher�Configure syslog logging�DIR�Disabled;�Events to watch for�FILE�Files to watch for�GNU direvent monitors changes in directories�Give a short usage message�Give this help list�INTERNAL ERROR at %s:%d: unhandled data type %d�Include search path: �Initial list:�License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. �List of additional options�Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options.�Modify environment�NAME�No include search path. �OPTION�Other options�PRIO�PROG�Pathname to watch�Prefix each message with its priority�Print program version�Recursive inclusion�Report bugs to %s. �Run as this user�Run command as this user�Run in foreground�Set debug level�Set pid file name�Set syslog facility. Arg is one of the following: user, daemon, auth, authpriv, mail, cron, local0 through local7 (case-insensitive), or a facility number.�Tag syslog messages with this string�The optional CONFIG argument supplies the name of the configuration file to use instead of %s. �This direvent uses %s interface. �Timeout for the command�USER�Unable to start external preprocessor `%s'�Usage:�WS trimming�Written by �[CONFIG]�`%s' already included at top level�`%s' already included here�add include directory�arg�begin scanning process list�cannot change to %s: %s�cannot create watcher %s/%s, stat failed: %s�cannot create watcher %s/%s: not enough memory�cannot open `%s'�cannot open directory %s: %s�cannot open pidfile %s for writing: %s�cannot run `%s': fork failed: %s�cannot run redirector `%s': fork failed: %s�cannot set watcher on %s: %s�cannot start redirector for %s, pipe failed: %s�cannot stat %s/%s: not enough memory�cannot stat %s: %s�check configuration file and exit�coalesce list�command substitution�creating watcher %s�element not found in table�environment: �expected "recursive" or end of statement�expected %s�expected %s, but found %s�file�globbing error�incompatible data type for `%s'�increase debug level�input exhausted�invalid include statement�invalid use of block statement�invalid wordsplit usage�level�log everything with priority PRIO and higher to the stderr, as well as to the syslog�memory exhausted�missing closing %c (start near #%lu)�missing closing quote�missing port number�name�no command configured�no error�no event handlers configured�no event handlers installed�no files match pattern %s�no paths configured�no such group�no such user�no user with UID %lu�not a number (stopped near `%s')�not enough memory�numeric overflow�parse error�path expansion�process %lu dumped core�process %lu exited successfully�process %lu failed with status %d�process %lu stopped on signal %d�process %lu terminated on signal %d�process %lu terminated with unrecognized status�process %lu timed out�quote removal�read error�redirector for %s started, pid=%lu�regexp�remain in foreground�removing watcher %s�run as this user�scheduling alarm in %lu seconds�seconds�self-test mode�set PID file�set syslog facility�show configuration file summary�starting %s, dir=%s, file=%s�string�surplus argument�surplus arguments�symbol table is full�tilde expansion�too many arguments�too many arguments to `%s'; missing semicolon?�unbalanced curly brace�unbalanced parenthesis�undefined variable�unexpected block statement�unexpected end of file�unexpected list�unknown error�unknown syslog facility `%s'�unknown syslog facility: %s�unknown syslog priority: %s�unrecognized event code�unrecognized option�value out of allowed range�variable expansion�waiting for %s (%lu) to terminate�warning: undefined variable `%.*s'�Project-Id-Version: direvent-5.1 Report-Msgid-Bugs-To: bug-direvent@gnu.org.ua POT-Creation-Date: 2019-07-13 19:23+0300 PO-Revision-Date: 2016-08-07 19:57+0200 Last-Translator: Benno Schulenberg <benno@vertaalt.nl> Language-Team: Dutch <vertaling@vrijschrift.org> Language: nl MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Bugs: Report translation errors to the Language-Team address. X-Generator: Lokalize 1.0 Plural-Forms: nplurals=2; plural=(n != 1); � en �%.*s: variabele is null of niet ingesteld�%s %s is gestart�%s %s is gestopt�Webpagina van '%s': <%s> �%s draait; map=%s, bestand=%s, PID=%lu�%s: Bestand of map bestaat niet�%s: UNIX-socketnaam is te lang�%s: incompatibel gegevenstype in lijstitem #%d�%s is geen geldig IP-adres�%s is geen geldig IP-adres of hostnaam�%s is geen geldige booleaanse waarde�%s is geen geldig poortnummer�%s: recursiediepte komt niet overeen met vorige definitie�(%02d) Invoer:%.*s;�©�, �<arg: tekenreeks> <arg: tekenreeks>...�Alias�Aliassen�Kan '%s' niet openen�Kan 'include'-regel niet ontleden�Kan '%s' niet uitvoeren�Kan de status van '%s' niet opvragen�Samengevoegde lijst:�uit te voeren opdracht bij gebeurtenis�Structuur van het configuratiebestand voor 'direvent'. Zie 'info direvent configuration' voor meer informatie.�gebeurtenismonitor instellen�syslog-loggen instellen�MAP�uitgezet;�te monitoren gebeurtenissen�BESTAND�te monitoren bestanden�GNU 'direvent' monitort veranderingen in mappen.�een korte gebruikssamenvatting tonen�deze hulptekst tonen�**interne programmafout** bij %s:%d: onverwerkt gegevenstype %d�Zoekpad voor includes: �Beginlijst:�Dit is vrije software: u mag het vrijelijk wijzigen en verder verspreiden. De precieze licentie is GPL-3+: GNU General Public License versie 3 of later. Zie <http://gnu.org/licenses/gpl.html> voor de volledige (Engelse) tekst. Deze software kent GEEN GARANTIE, voor zover de wet dit toestaat. �lijst van additionele opties�Een argument dat verplicht of optioneel is voor een lange optie, is dat ook voor de overeenkomstige korte optie.�de omgeving aanpassen�NAAM�Geen include-zoekpad. �OPTIE�Overige opties�PRIO�PROGRAMMA�te monitoren padnaam�aan elk bericht de prioriteit voorvoegen�de programmaversie tonen�Recursieve insluiting�Rapporteer gebreken in het programma aan %s; meld fouten in de vertaling aan <vertaling@vrijschrift.org>. �uitvoeren als deze gebruiker�opdracht uitvoeren als deze gebruiker�in de voorgrond draaien�debug-niveau instellen�te gebruiken PID-bestand�Te gebruiken syslog-faciliteit. Het argument is één van: 'user', 'daemon', 'auth', 'authpriv', 'mail', 'cron', 'local0'..'local7' (hoofdlettegevoelig), of een faciliteitnummer.�syslog-berichten labelen met deze tekenreeks�Het optionele argument CONFIG is de naam van het configuratiebestand dat gebruikt dient te worden in plaats van %s. �Deze 'direvent' gebruikt de %s-interface. �tijdslimiet voor de opdracht�GEBRUIKER�Kan externe preprocessor '%s' niet starten�Gebruik: �witruimte trimmen�Geschreven door �[CONFIG]�'%s' is al ingesloten op het topniveau�'%s' is hier al ingesloten�een include-map toevoegen�ARGUMENT�scannen van de processenlijst�kan map niet wijzigen naar %s: %s�kan monitor %s/%s niet aanmaken, stat() is mislukt: %s�kan monitor %s/%s niet aanmaken: onvoldoende geheugen beschikbaar�kan '%s' niet openen�kan map %s niet openen: %s�kan PID-bestand %s niet openen om te schrijven: %s�kan '%s' niet uitvoeren: fork() is mislukt: %s�kan omleider '%s' niet draaien, fork() is mislukt: %s�kan geen monitor zetten op %s: %s�kan omleider niet starten voor %s, pipe() is mislukt: %s�kan de status van %s/%s niet opvragen: onvoldoende geheugen beschikbaar�kan de status van %s niet opvragen: %s�configuratiebestand controleren en stoppen�lijst samenvoegen�opdrachtsubstitutie�aanmaken van monitor %s�element niet gevonden in tabel�omgeving: �verwachtte "recursive" of einde van statement�verwachtte %s�verwachtte %s, maar vond %s�BESTAND�globbing-fout�incompatibel gegevenstype voor '%s'�debug-niveau verhogen�de invoer is op�ongeldig 'include'-statement�ongeldig gebruik van blok-statement�ongeldig gebruik van woordscheiding�NIVEAU�alles met een prioriteit hoger dan PRIO loggen naar zowel standaardfoutuitvoer als syslog�onvoldoende geheugen beschikbaar�ontbrekend afsluitend %c (begon ongeveer bij #%lu)�ontbrekend afsluitend aanhalingsteken�ontbrekend poortnummer�NAAM�geen commando geconfigureerd�geen fout�geen gebeurtenis-afhandelaars geconfigureerd�geen gebeurtenis-afhandelaars geïnstalleerd�geen bestanden die overeenkomen met patroon %s�geen paden geconfigureerd�die groep bestaat niet�die gebruiker bestaat niet�er is geen gebruiker met UID %lu�is geen getal (gestopt dichtbij '%s')�onvoldoende geheugen beschikbaar�numerieke overloop�ontledingsfout�padexpansie�process %lu heeft een core-dump gemaakt�proces %lu is met succes afgesloten�proces %lu is mislukt met afsluitwaarde %d�proces %lu is gepauzeerd door signaal %d�proces %lu is beëindigd door signaal %d�proces %lu is beëindigd met een onbekende afsluitwaarde�proces %lu overschreed de tijdslimiet�aanhalingstekenverwijdering�fout bij lezen�omleider voor %s is gestart, PID=%lu�reg.exp.�in de voorgrond blijven�verwijderen van monitor %s�uitvoeren als deze gebruiker�een alarm wordt geagendeerd voor over %lu seconden�SECONDEN�zelftest-modus�te gebruiken PID-bestand�te gebruiken syslog-faciliteit�samenvatting van configuratiebestand weergeven�starten van %s, map=%s, bestand=%s�TEKENREEKS�overtollig argument�overtollige argumenten�symbolentabel is vol�tilde-expansie�te veel argumenten�te veel argumenten van '%s'; ontbrekende puntkomma?�ongepaarde accolade�ongepaard haakje�ongedefinieerde variabele�onverwacht blok-statement�onverwacht einde van bestand�onverwachte lijst�onbekende fout�onbekende syslog-faciliteit: '%s'�onbekende syslog-faciliteit: %s�onbekende syslog-prioriteit: %s�niet-herkende gebeurteniscode�onbekende optie�waarde ligt buiten bereik�variabelen-expansie�wachtend op afsluiten van %s (%lu)�waarschuwing: ongedefinieerde variabele '%.*s'����������������������������������������������������������������������������������������������������������������direvent-5.2/po/Rules-quot��������������������������������������������������������������������������0000644�0001750�0001750�00000003400�13244106112�015576� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Special Makefile rules for English message catalogs with quotation marks. DISTFILES.common.extra1 = quot.sed boldquot.sed en@quot.header en@boldquot.header insert-header.sin Rules-quot .SUFFIXES: .insert-header .po-update-en en@quot.po-create: $(MAKE) en@quot.po-update en@boldquot.po-create: $(MAKE) en@boldquot.po-update en@quot.po-update: en@quot.po-update-en en@boldquot.po-update: en@boldquot.po-update-en .insert-header.po-update-en: @lang=`echo $@ | sed -e 's/\.po-update-en$$//'`; \ if test "$(PACKAGE)" = "gettext"; then PATH=`pwd`/../src:$$PATH; GETTEXTLIBDIR=`cd $(top_srcdir)/src && pwd`; export GETTEXTLIBDIR; fi; \ tmpdir=`pwd`; \ echo "$$lang:"; \ ll=`echo $$lang | sed -e 's/@.*//'`; \ LC_ALL=C; export LC_ALL; \ cd $(srcdir); \ if $(MSGINIT) -i $(DOMAIN).pot --no-translator -l $$lang -o - 2>/dev/null | sed -f $$tmpdir/$$lang.insert-header | $(MSGCONV) -t UTF-8 | $(MSGFILTER) sed -f `echo $$lang | sed -e 's/.*@//'`.sed 2>/dev/null > $$tmpdir/$$lang.new.po; then \ if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ rm -f $$tmpdir/$$lang.new.po; \ else \ if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ :; \ else \ echo "creation of $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ exit 1; \ fi; \ fi; \ else \ echo "creation of $$lang.po failed!" 1>&2; \ rm -f $$tmpdir/$$lang.new.po; \ fi en@quot.insert-header: insert-header.sin sed -e '/^#/d' -e 's/HEADER/en@quot.header/g' $(srcdir)/insert-header.sin > en@quot.insert-header en@boldquot.insert-header: insert-header.sin sed -e '/^#/d' -e 's/HEADER/en@boldquot.header/g' $(srcdir)/insert-header.sin > en@boldquot.insert-header mostlyclean: mostlyclean-quot mostlyclean-quot: rm -f *.insert-header ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/po/da.gmo������������������������������������������������������������������������������0000644�0001750�0001750�00000032771�13512402637�014711� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Þ•����«������t��å���Ì ������`�����a�����g�� ���†�� ���”�����¢��$���¶�����Û�����ù��+��������C��&���^�����…�����£��6���¿�����ö����� ����� ����������/�����5�����=�����N�����h�����x�����‰�����™��c���µ����������1�����J�� ���N�����X�����l�����q��,���„�����±�����Ì��/���à������� ���&��È���4�����ý��s��������Œ�����Ÿ�����¤�����½�� ���Ä�����Ò�����×�����Ü��%���î����������*�����>�����R�����c�����|�����Ž�����ž��›���°��$���L��`���q��"���Ò�����õ����� ��*��������=�� ���D�� ���P�����\��"���e�����ˆ�����£�����¹�����½�����Ù��,���ñ��.��������M�����^��&���{�� ���¢��+���Ã�����ï��/��� ��$���<�����a��!���t�� ���–�����¤�����¹�����Í�� ���è��(���ö�� ��������+�����E�����J�����Y�����y�����Ž�����ž�����¸�����×�����ï��T���õ�����J��$���[�����€�����–�����ª�����¯�����Å�����Î�����ë����������!�� ���5�� ���C�����P�� ���e�����†�����˜�� ���©�����µ�����Ä�����Ü��!���ü�� �����#���?��/���c�����“�� ���©�� ���·��"���Â�����å�����ì���������������&�����F�����N�� ���]�����j�����~�����ž�����»�����Â�����Ó�����å�����ú����� ��.��������L�����c�����z����������¨�����¿�� ���Ï�����Ý�����ú����������2�����J�����^�����y��!���Œ��"���®��Ó��Ñ�����¥!��)���ª!�� ���Ô!�� ���â!�����ð!��#��� "�� ���-"�� ���N"��3���o"�����£"��.���Á"��!���ð"�����#��7���1#�����i#�����~#�����#�����„#�����£#�����©#�����²#�����È#�����è#�����þ#�����$�����2$��h���R$�����»$�����Û$�����õ$�� ���û$�����%����� %�����$%��+���7%�����c%�����{%��8���•%�����Î%�� ���å%��Ö���ñ%�����È&��‚���æ&�� ���i'�����v'�����{'�����”'�� ���œ'�����ª'�����¯'�����´'��#���É'�����í'������(��¿���(�����Ó(�����é(�����)�����)�����4)��°���F)��&���÷)��g���*��)���†*�����°*�����È*��*���Ï*�����ú*�� ����+�� ���+�����+��(���#+�����L+�����k+�����+�����…+�����¤+��B���¿+��7���,�����:,�����P,��-���m,��1���›,��>���Í,��%��� -��>���2-��2���q-�����¤-��&���Ã-�����ê-�����ü-�����.�� ���(.�����I.��4���R.�� ���‡.�����•.�����±.�� ���µ.��'���¿.�����ç.�����/�����/�����-/�����L/�����c/��J���j/�����µ/��(���Ì/��!���õ/�����0�����*0�����/0�� ���N0��(���Y0��)���‚0�����¬0�����Ì0�����è0�����ü0�����1��"���*1�����M1�����a1�����s1�����„1�����“1�����¯1��'���Ê1��&���ò1��)���2��+���C2�����o2�����Œ2�� ���›2��$���¥2�����Ê2�����Û2�����í2�����3��!���3�����;3�����D3�� ���V3�����d3�����{3�����™3�����¶3�����½3�����Ó3�����ë3�����ÿ3�����4��5���%4�� ���[4�����|4�����’4�����¦4�����½4�� ���Ó4�� ���á4�����í4����� 5�����(5�����D5�����Z5��*���i5�����”5��#���§5��-���Ë5�����Z������U���£������� ���2�������A���P���3���‡��������������h���M���4���™���K���7�������_�������T���B���Y���—����������I�������[��������������¨���¦���&�������š���”�������¢���`�������œ���6������!���������������˜�������Ž������\��������������"���(�������•���>������f���¤�������@���9���������)�������€���������������ž���N���,���Š���q���¥���Ÿ���������������{���g���/���«���+���E���V���0����������-���5������x���G��� ���J������� ���l���L���.����������“���R�������k��������������t����������W���o���„���¡���†���H���=������^���������������u�������#���~��� ���X���ƒ���Q�������r�������F��������������������������§���}���‘���%���w�������n���c��� �������‚������:�������j�������1���y���v������m���*���ˆ������������…������’���b���<���O���–�������d���©���e���p���s���›���$���Œ���;���‰����������]���|���C�������ª���S���'�������?���‹��� ������8������� ����������������������a����������i�������z���D���� and �%.*s: variable null or not set�%s %s started�%s %s stopped�%s home page: <%s> �%s running; dir=%s, file=%s, pid=%lu�%s: No such file or directory�%s: UNIX socket name too long�%s: incompatible data type in list item #%d�%s: not a valid IP address�%s: not a valid IP address or hostname�%s: not a valid boolean value�%s: not a valid port number�%s: recursion depth does not match previous definition�(%02d) Input:%.*s;�(C)�, �<arg: string> <arg: string>...�Alias�Aliases�Cannot open `%s'�Cannot parse include line�Cannot run `%s'�Cannot stat `%s'�Coalesced list:�Command to execute on event�Configuration file structure for direvent. For more information, use `info direvent configuration'.�Configure event watcher�Configure syslog logging�DIR�Disabled;�Events to watch for�FILE�Files to watch for�GNU direvent monitors changes in directories�Give a short usage message�Give this help list�INTERNAL ERROR at %s:%d: unhandled data type %d�Include search path: �Initial list:�License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. �List of additional options�Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options.�Modify environment�NAME�No include search path. �OPTION�Other options�PRIO�PROG�Pathname to watch�Prefix each message with its priority�Print program version�Recursive inclusion�Report bugs to %s. �Run as this user�Run command as this user�Run in foreground�Set debug level�Set pid file name�Set syslog facility. Arg is one of the following: user, daemon, auth, authpriv, mail, cron, local0 through local7 (case-insensitive), or a facility number.�Tag syslog messages with this string�The optional CONFIG argument supplies the name of the configuration file to use instead of %s. �This direvent uses %s interface. �Timeout for the command�USER�Unable to start external preprocessor `%s'�Usage:�WS trimming�Written by �[CONFIG]�`%s' already included at top level�`%s' already included here�add include directory�arg�begin scanning process list�cannot change to %s: %s�cannot create watcher %s/%s, stat failed: %s�cannot create watcher %s/%s: not enough memory�cannot open `%s'�cannot open directory %s: %s�cannot open pidfile %s for writing: %s�cannot run `%s': fork failed: %s�cannot run redirector `%s': fork failed: %s�cannot set watcher on %s: %s�cannot start redirector for %s, pipe failed: %s�cannot stat %s/%s: not enough memory�cannot stat %s: %s�check configuration file and exit�coalesce list�command substitution�creating watcher %s�element not found in table�environment: �expected "recursive" or end of statement�expected %s�expected %s, but found %s�file�globbing error�incompatible data type for `%s'�increase debug level�input exhausted�invalid include statement�invalid use of block statement�invalid wordsplit usage�level�log everything with priority PRIO and higher to the stderr, as well as to the syslog�memory exhausted�missing closing %c (start near #%lu)�missing closing quote�missing port number�name�no command configured�no error�no event handlers configured�no event handlers installed�no files match pattern %s�no paths configured�no such group�no such user�no user with UID %lu�not a number (stopped near `%s')�not enough memory�numeric overflow�parse error�path expansion�process %lu dumped core�process %lu exited successfully�process %lu failed with status %d�process %lu stopped on signal %d�process %lu terminated on signal %d�process %lu terminated with unrecognized status�process %lu timed out�quote removal�read error�redirector for %s started, pid=%lu�regexp�remain in foreground�removing watcher %s�run as this user�scheduling alarm in %lu seconds�seconds�self-test mode�set PID file�set syslog facility�show configuration file summary�starting %s, dir=%s, file=%s�string�surplus argument�surplus arguments�symbol table is full�tilde expansion�too many arguments�too many arguments to `%s'; missing semicolon?�unbalanced curly brace�unbalanced parenthesis�undefined variable�unexpected block statement�unexpected end of file�unexpected list�unknown error�unknown syslog facility `%s'�unknown syslog facility: %s�unknown syslog priority: %s�unrecognized event code�unrecognized option�value out of allowed range�variable expansion�waiting for %s (%lu) to terminate�warning: undefined variable `%.*s'�Project-Id-Version: direvent-5.1 Report-Msgid-Bugs-To: bug-direvent@gnu.org.ua POT-Creation-Date: 2019-07-13 19:23+0300 PO-Revision-Date: 2016-11-03 16:00+0000 Last-Translator: Joe Hansen <joedalton2@yahoo.dk> Language-Team: Danish <dansk@dansk-gruppen.dk> Language: da MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Bugs: Report translation errors to the Language-Team address. Plural-Forms: nplurals=2; plural=(n != 1); � og �%.*s: variabel er null eller ikke angivet�%s %s startet�%s %s stoppet�Hjemmeside for %s: <%s> �%s kører; mappe=%s fil=%s, pid=%lu�%s: Ingen sÃ¥dan fil eller mappe�%s: UNIX-sokkelnavn er for langt�%s: datatypen i listepunktet #%d er ikke kompatibel�%s: ikke en gyldig IP-adresse�%s: ikke en gyldig IP-adresse eller værtsnavn�%s: ikke en gyldig boolesk værdi�%s: ikke et gyldigt portnummer�%s: rekursionsdybde matcher ikke foregÃ¥ende definition�(%02d) Inddata:%.*s;�©�, �<arg: streng> <arg: streng>...�Alias�Aliasser�Kan ikke Ã¥bne »%s«�Kan ikke fortolke include-linje�Kan ikke køre »%s«�Kan ikke køre stat pÃ¥ »%s«�Sammensmeltet liste:�Kommando at køre ved hændelse�Konfigurationsfilstruktur for direvent. Brug »info direvent configuration« for yderligere information.�Konfigurer hændelsesovervÃ¥ger�Konfigurer syslog-logning�MAPPE�Deaktiveret;�Hændelser at overvÃ¥ge�FIL�Filer at overvÃ¥ge�GNU direvent overvÃ¥ger ændringer i mapper�Vis en kort brugsbesked�Vis denne hjælpeoversigt�INTERN FEJL ved %s:%d: datatypen %d blev ikke hÃ¥ndteret�Søgesti for include: �Startliste:�Licens GPLv3+: GNU GPL version 3 eller senere <http://gnu.org/licenses/gpl.html>. Dette er et frit program: du kan frit ændre og videredistribuere programmet. Der er INGEN GARANTI, inden for lovens udstrækning. �Liste over yderligere tilvalg�Obligatoriske eller valgfrie parametre til lange tilvalg er ogsÃ¥ obligatoriske eller valgfrie for alle tilsvarende korte tilvalg.�Ændr miljø�NAVN�Ingen include-søgesti. �TILVALG�Andre tilvalg�PRIO�PROG�Stinavn at overvÃ¥ge�Foranstil prioritet for hver besked�Vis programversion�Rekursiv inklusion�Rapporter fejl til %s. Oversættelse: Joe Hansen, 2015-2016. Rapporter fejl i oversættelsen til Danskgruppen. Dansk-gruppen <dansk@dansk-gruppen.dk> Mere info: http://www.dansk-gruppen.dk �Kør som denne bruger�Kør kommando som denne bruger�Kør i forgrunden�Angiv fejlsøgningsniveau�Angiv pid-filnavn�Angiv syslog-facilitet. Arg er en af de følgende: user, daeon, auth, authpriv, mail, cron, local0 til local7 (ikke forskel pÃ¥ smÃ¥/store bogstaver), eller et facilitetnummer.�Mærk syslog-beskeder med denne streng�Det valgfrie argument CONFIG leverer navnet pÃ¥ konfigurationsfilen, der skal bruges i stedet for %s. �Denne direvent bruger %s-grænsefladen. �Tidsudløb for kommando�BRUGER�Kan ikke starte ekstern forbrænder »%s«�Brug:�WS-tilpasning�Skrevet af �[CONFIG]�»%s« allerede inkluderet pÃ¥ topniveau�»%s« allerede inkluderet her�tilføj include-mappe�arg�begynd skanning af procesliste�kan ikke ændre til %s: %s�kan ikke oprette overvÃ¥ger %s/%s, kørsel af stat mislykkedes: %s�kan ikke oprettet overvÃ¥ger %s/%s: ikke nok hukommelse�kan ikke Ã¥bne »%s«�kan ikke Ã¥bne mappen %s: %s�kan ikke Ã¥bne pid-filen %s til skrivning: %s�kan ikke køre »%s«: forgrening mislykkedes: %s�kan ikke køre videresender »%s«: forgrening mislykkedes: %s�kan ikke angive overvÃ¥ger pÃ¥ %s: %s�kan ikke starte videresender for %s; datakanal mislykkedes: %s�kan ikke køre stat pÃ¥ %s/%s: ikke nok hukommelse�kan ikke køre stat pÃ¥ %s: %s�kontroller konfigurationsfil og afslut�sammensmelt liste�kommandosubstitution�opretter overvÃ¥ger %s�element blev ikke fundet i tabel�miljø: �forventede »recursive« eller erklæringsafslutning�forventede %s�forventede %s, men fandt %s�fil�glob-fejl�datatypen for »%s« er ikke kompatibel�øg fejlsøgningsniveauet�inddata opbrugt�ugyldigt include-erklæring�ugyldig brug af blokerklæring�ugyldig orddelingsbrug�niveau�log alt med prioritet PRIO og højere til standardfejl, samt til sysloggen�hukommelsen er opbrugt�mangler afsluttende %c (start nær #%lu)�mangler afsluttende citationstegn�mangler portnummer�navn�ingen kommando er konfigureret�ingen fejl�ingen hændelseshÃ¥ndtering konfigureret�ingen hændelseshÃ¥ndteringer installeret�ingen filer matcher mønster %s�ingen stier er konfigureret�ingen sÃ¥dan gruppe�ingen sÃ¥dan bruger�ingen bruger med UID: %lu�ikke et tal (stoppede nær »%s«)�ikke nok hukommelse�numerisk overløb�fortolkningsfejl�sti-erstatning�processen %lu dumpede kerne�processen %lu blev udført�processen %lu mislykkedes med status %d�processen %lu stoppede ved signalet %d�processen %lu afsluttedes ved signalet %d�processen %lu afsluttedes med ukendt status�processen %lu fik tidsudløb�citatfjernelse�læsefejl�videresender for %s startet, pid=%lu�regulært udtryk�bliv i forgrunden�fjerner overvÃ¥ger %s�kør som denne bruger�planlægger alarm om %lu sekunder�sekunder�egentest-tilstand�angiv PID-fil�angiv syslog-facilitet�vis konfigurationsfiloverblik�starter %s, mappe=%s, fil=%s�streng�overskydende argument�overskydende argumenter�symboltabel er fuld�tilde-erstatning�for mange argumenter�for mange argumenter for »%s«; manglende semikolon?�krøllet parentes er ikke lukket�parentes uden modpart�udefineret variabel�uventet blokerklæring�uventet filafslutning�uventet liste�ukendt fejl�ukendt syslog-facilitet »%s«�ukendt syslog-facilitet: %s�ukendt syslog-prioritet: %s�ukendt hændelseskode�ukendt tilvalg�værdien er uden for det tilladte interval�variabelerstatning�venter pÃ¥ %s (%lu) for at afslutte�advarsel: variabel er ikke defineret »%.*s«��������direvent-5.2/po/de.po�������������������������������������������������������������������������������0000644�0001750�0001750�00000054325�13512402637�014550� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# German translation of direvent. # Copyright (C) 2014 Free Software Foundation, Inc. # This file is distributed under the same license as the direvent package. # Mario Blättermann <mario.blaettermann@gmail.com>, 2014, 2016. # msgid "" msgstr "" "Project-Id-Version: direvent 5.1\n" "Report-Msgid-Bugs-To: bug-direvent@gnu.org.ua\n" "POT-Creation-Date: 2019-07-13 19:23+0300\n" "PO-Revision-Date: 2016-07-07 22:45+0200\n" "Last-Translator: Mario Blättermann <mario.blaettermann@gmail.com>\n" "Language-Team: German <translation-team-de@lists.sourceforge.net>\n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Poedit 1.8.7.1\n" #: cmdline.opt:26 msgid "increase debug level" msgstr "Debug-Stufe erhöhen" #: cmdline.opt:32 msgid "PRIO" msgstr "PRIO" #: cmdline.opt:32 msgid "" "log everything with priority PRIO and higher to the stderr, as well as to " "the syslog" msgstr "" "Alles mit Priorität PRIO oder höher sowohl in die Standardfehlerausgabe als " "auch in das Systemprotokoll schreiben" #: cmdline.opt:41 msgid "NAME" msgstr "NAME" #: cmdline.opt:41 msgid "set syslog facility" msgstr "Systemprotokoll-Leistung festlegen" #: cmdline.opt:47 msgid "remain in foreground" msgstr "Im Vordergrund bleiben" #: cmdline.opt:53 msgid "DIR" msgstr "VERZ" #: cmdline.opt:53 msgid "add include directory" msgstr "Include-Verzeichnis hinzufügen" #: cmdline.opt:59 msgid "PROG" msgstr "PROG" #: cmdline.opt:59 msgid "self-test mode" msgstr "Selbsttestmodus" #: cmdline.opt:65 msgid "FILE" msgstr "DATEI" #: cmdline.opt:65 msgid "set PID file" msgstr "PID-Datei festlegen" #: cmdline.opt:71 msgid "check configuration file and exit" msgstr "Konfigurationsdatei überprüfen und beenden" #: cmdline.opt:77 msgid "USER" msgstr "BENUTZER" #: cmdline.opt:77 msgid "run as this user" msgstr "Als dieser Benutzer ausführen" #: cmdline.opt:87 msgid "show configuration file summary" msgstr "Zusammenfassung der Konfigurationsdatei anzeigen" #: cmdline.opt:81 msgid "Other options" msgstr "Weitere Optionen" #: cmdline.opt:93 msgid "Give this help list" msgstr "Diese Hilfe ausgeben" #: cmdline.opt:93 msgid "Give a short usage message" msgstr "Kurzen Bedienungshinweis ausgeben" #: cmdline.opt:93 msgid "Print program version" msgstr "Programmversion ausgeben" #: cmdline.opt:13 msgid "GNU direvent monitors changes in directories" msgstr "GNU direvent überwacht Änderungen in Verzeichnissen" #: cmdline.opt:15 msgid "[CONFIG]" msgstr "[CONFIG]" #: cmdline.opt:95 #, c-format msgid "" "The optional CONFIG argument supplies the name of the configuration file\n" "to use instead of %s.\n" "\n" msgstr "" "Das optionale Argument CONFIG übergibt den Namen der anstelle von\n" "%s zu verwendenden Konfigurationsdatei.\n" "\n" #. TRANSLATORS: %s is one of: inotify, kqueue #: cmdline.opt:99 #, c-format msgid "" "This direvent uses %s interface.\n" "\n" msgstr "" "Diese Version von direvent verwendet die %s-Schnittstelle.\n" "\n" #: cmdline.opt:102 #, c-format msgid "Include search path:\n" msgstr "Include-Suchpfad:\n" #: cmdline.opt:105 #, c-format msgid "No include search path.\n" msgstr "Kein Include-Suchpfad.\n" #: src/config.c:63 #, c-format msgid "unknown syslog facility: %s" msgstr "unbekannte Leistung des Systemprotokolls: %s" #: src/config.c:80 #, c-format msgid "unknown syslog priority: %s" msgstr "Unbekannte Priorität des Sytemprotokolls: %s" #: src/config.c:88 msgid "unexpected block statement" msgstr "Unerwartete Block-Anweisung" #: src/config.c:97 #, c-format msgid "expected %s" msgstr "%s erwartet" #: src/config.c:102 #, c-format msgid "expected %s, but found %s" msgstr "%s erwartet, aber %s gefunden" #: src/config.c:124 #, c-format msgid "unknown syslog facility `%s'" msgstr "Unbekannte Leistung des Sytemprotokolls: %s" #: src/config.c:133 src/config.c:606 msgid "name" msgstr "Name" #: src/config.c:134 msgid "" "Set syslog facility. Arg is one of the following: user, daemon, auth, " "authpriv, mail, cron, local0 through local7 (case-insensitive), or a " "facility number." msgstr "" "Leistung des Systemprotokolls festlegen. Argument ist eines der folgenden: " "user, daemon, auth, authpriv, mail, cron, local0, local7 (Groß-/" "Kleinschreibung spielt keine Rolle), oder eine Nummer einer Leistung." #: src/config.c:139 grecs/src/format.c:36 grecs/src/tree.c:69 msgid "string" msgstr "Zeichenkette" #: src/config.c:139 msgid "Tag syslog messages with this string" msgstr "Syslog-Meldungen diese Zeichenkette voranstellen" #: src/config.c:142 grecs/src/format.c:141 msgid "arg" msgstr "Arg" #: src/config.c:143 msgid "Prefix each message with its priority" msgstr "Jeder Meldung deren Priorität voranstellen" #: src/config.c:191 #, c-format msgid "%s: recursion depth does not match previous definition" msgstr "%s: Rekursionstiefe entspricht nicht der vorherigen Definition" #: src/config.c:212 msgid "no paths configured" msgstr "Keine Pfade eingerichtet" #: src/config.c:217 msgid "no command configured" msgstr "Kein Befehl eingerichtet" #: src/config.c:229 grecs/src/tree.c:665 msgid "invalid use of block statement" msgstr "Ungültige Verwendung einer Block-Anweisung" #: src/config.c:274 msgid "expected \"recursive\" or end of statement" msgstr "»recursive« oder Ende der Anweisung erwartet" #: src/config.c:289 msgid "surplus argument" msgstr "Überzähliges Argument" #: src/config.c:295 src/config.c:446 msgid "unexpected list" msgstr "Unerwartete Liste" #: src/config.c:326 src/config.c:341 src/config.c:356 msgid "unrecognized event code" msgstr "Nicht erkannter Ereigniscode" #: src/config.c:438 msgid "surplus arguments" msgstr "Überzählige Argumente" #: src/config.c:452 msgid "no such user" msgstr "Kein solcher Benutzer" #: src/config.c:459 msgid "no such group" msgstr "Keine solche Gruppe" #: src/config.c:501 msgid "unrecognized option" msgstr "Nicht erkannte Option" #: src/config.c:595 msgid "Pathname to watch" msgstr "Zu überwachender Pfadname" #: src/config.c:598 msgid "Events to watch for" msgstr "Zu überwachende Ereignisse" #: src/config.c:601 msgid "regexp" msgstr "Reg. Ausdruck" #: src/config.c:601 msgid "Files to watch for" msgstr "Zu überwachende Dateien" #: src/config.c:604 msgid "Command to execute on event" msgstr "Bei Eintritt des Ereignisses auszuführender Befehl" #: src/config.c:606 msgid "Run command as this user" msgstr "Befehl als dieser Benutzer ausführen" #: src/config.c:609 msgid "seconds" msgstr "Sekunden" #: src/config.c:609 msgid "Timeout for the command" msgstr "Zeitüberschreitung für den Befehl" #: src/config.c:611 msgid "List of additional options" msgstr "Liste der zusätzlichen Optionen" #: src/config.c:614 msgid "<arg: string> <arg: string>..." msgstr "<Arg: Zeichenkette> <Arg: Zeichenkette> …" #: src/config.c:615 msgid "Modify environment" msgstr "Ausführungsumgebung ändern" #: src/config.c:622 msgid "Run as this user" msgstr "Als dieser Benutzer ausführen" #: src/config.c:624 msgid "Run in foreground" msgstr "Im Vordergrund ausführen" #: src/config.c:626 msgid "file" msgstr "Datei" #: src/config.c:626 msgid "Set pid file name" msgstr "Name der PID-Datei festlegen" #: src/config.c:628 msgid "Configure syslog logging" msgstr "Syslog-Protokollierung einrichten" #: src/config.c:630 msgid "level" msgstr "Stufe" #: src/config.c:630 msgid "Set debug level" msgstr "Debug-Stufe festlegen" #: src/config.c:632 msgid "Configure event watcher" msgstr "Ereignisüberwachung einrichten" #: src/config.c:643 msgid "" "Configuration file structure for direvent.\n" "For more information, use `info direvent configuration'." msgstr "" "Struktur der Konfigurationsdatei für direvent.\n" "Weitere Informationen erhalten Sie mit »info direvent configuration«." #: src/direvent.c:142 src/direvent.c:164 src/watcher.c:93 src/watcher.c:125 msgid "not enough memory" msgstr "Nicht genügend Speicher" #: src/direvent.c:274 #, c-format msgid "cannot open pidfile %s for writing: %s" msgstr "PID-Datei %s konnte nicht zum Schreiben geöffnet werden: %s" #: src/direvent.c:302 #, c-format msgid "no user with UID %lu" msgstr "Kein Benutzer mit UID %lu gefunden" #: src/direvent.c:420 #, c-format msgid "cannot run `%s': fork failed: %s" msgstr "»%s« kann nicht ausgeführt werden: fork() fehlgeschlagen: %s" #: src/direvent.c:480 msgid "too many arguments" msgstr "Zu viele Argumente" #: src/direvent.c:522 #, c-format msgid "%s %s started" msgstr "%s %s gestartet" #: src/direvent.c:546 #, c-format msgid "%s %s stopped" msgstr "%s %s gestoppt" #: src/environ.c:25 msgid "environment: " msgstr "Umgebung:" #: src/progman.c:142 #, c-format msgid "process %lu exited successfully" msgstr "Prozess %lu wurde erfolgreich beendet" #: src/progman.c:145 #, c-format msgid "process %lu failed with status %d" msgstr "Prozess %lu mit Status %d fehlgeschlagen" #: src/progman.c:155 #, c-format msgid "process %lu terminated on signal %d" msgstr "Prozess %lu mit Signal %d beendet" #: src/progman.c:158 #, c-format msgid "process %lu stopped on signal %d" msgstr "Prozess %lu mit Signal %d gestoppt" #: src/progman.c:163 #, c-format msgid "process %lu dumped core" msgstr "Für Prozess %lu wurde Speicherabzug geschrieben" #: src/progman.c:167 #, c-format msgid "process %lu terminated with unrecognized status" msgstr "Prozess %lu mit nicht erkanntem Status abgebrochen" #: src/progman.c:228 msgid "begin scanning process list" msgstr "Einlesen der Prozessliste wird begonnen" #: src/progman.c:232 #, c-format msgid "process %lu timed out" msgstr "Zeitüberschreitung bei Prozess %lu" #: src/progman.c:241 #, c-format msgid "scheduling alarm in %lu seconds" msgstr "Geplanter Alarm in %lu Sekunden" #: src/progman.c:322 #, c-format msgid "cannot start redirector for %s, pipe failed: %s" msgstr "" "Weiterleitung für %s konnte nicht gestartet werden, »pipe« fehlgeschlagen: %s" #: src/progman.c:354 #, c-format msgid "cannot run redirector `%s': fork failed: %s" msgstr "" "Weiterleitung für %s konnte nicht ausgeführt werden, »fork« fehlgeschlagen: " "%s" #: src/progman.c:359 #, c-format msgid "redirector for %s started, pid=%lu" msgstr "Weiterleitung für %s gestartet, PID=%lu" #: src/progman.c:455 #, c-format msgid "starting %s, dir=%s, file=%s" msgstr "%s wird gestartet, Verzeichnis=%s, Datei=%s" #: src/progman.c:484 #, c-format msgid "cannot change to %s: %s" msgstr "Wechsel in %s nicht möglich: %s" #: src/progman.c:512 #, c-format msgid "%s running; dir=%s, file=%s, pid=%lu" msgstr "%s läuft; Verz=%s, Datei=%s, PID=%lu" #: src/progman.c:534 #, c-format msgid "waiting for %s (%lu) to terminate" msgstr "Es wird auf das Beenden von %s (%lu) gewartet" #: src/watcher.c:183 src/watcher.c:513 #, c-format msgid "removing watcher %s" msgstr "Überwacher %s wird entfernt" #: src/watcher.c:195 msgid "no watchers left; exiting now" msgstr "" #: src/watcher.c:262 #, c-format msgid "installing CREATE sentinel for %s" msgstr "" #: src/watcher.c:275 #, c-format msgid "creating watcher %s" msgstr "Überwacher %s wird erstellt" #: src/watcher.c:281 src/watcher.c:296 #, c-format msgid "cannot set watcher on %s: %s" msgstr "Überwachung für %s konnte nicht eingerichtet werden: %s" #: src/watcher.c:377 #, c-format msgid "cannot create watcher %s/%s: not enough memory" msgstr "Überwacher %s/%s kann nicht erstellt werden: nicht genügend Speicher" #: src/watcher.c:384 #, c-format msgid "cannot create watcher %s/%s, stat failed: %s" msgstr "" "Überwachung für %s%s konnte nicht eingerichtet werden, »stat« " "fehlgeschlagen: %s" #: src/watcher.c:430 #, c-format msgid "cannot open directory %s: %s" msgstr "Verzeichnis %s kann nicht geöffnet werden: %s" #: src/watcher.c:447 #, c-format msgid "cannot stat %s/%s: not enough memory" msgstr "Aufruf von »stat« für %s/%s nicht möglich: nicht genügend Speicher" #: src/watcher.c:452 #, c-format msgid "cannot stat %s: %s" msgstr "Aufruf von »stat« für %s nicht möglich: %s" #: src/watcher.c:497 msgid "no event handlers configured" msgstr "Keine Ereignis-Handler eingerichtet" #: src/watcher.c:502 msgid "no event handlers installed" msgstr "Keine Ereignis-Handler installiert" #: grecs/src/format.c:33 msgid "void" msgstr "" #: grecs/src/format.c:46 msgid "number" msgstr "" #: grecs/src/format.c:49 msgid "time" msgstr "" #: grecs/src/format.c:52 msgid "boolean" msgstr "" #: grecs/src/format.c:55 msgid "IPv4" msgstr "" #: grecs/src/format.c:58 msgid "CIDR" msgstr "" #: grecs/src/format.c:61 #, fuzzy msgid "hostname" msgstr "Name" #: grecs/src/format.c:64 msgid "sockaddr" msgstr "" #: grecs/src/format.c:67 msgid "section" msgstr "" #: grecs/src/format.c:70 msgid "null" msgstr "" #: grecs/src/format.c:133 msgid "Disabled;" msgstr "Deaktiviert;" #: grecs/src/opthelp.c:123 grecs/src/opthelp.c:269 msgid "Usage:" msgstr "Aufruf:" #: grecs/src/opthelp.c:127 msgid "OPTION" msgstr "OPTION" #: grecs/src/opthelp.c:132 grecs/src/opthelp.c:427 msgid "Aliases" msgstr "Aliase" #: grecs/src/opthelp.c:132 grecs/src/opthelp.c:427 msgid "Alias" msgstr "Alias" #: grecs/src/opthelp.c:186 msgid "" "Mandatory or optional arguments to long options are also mandatory or " "optional for any corresponding short options." msgstr "" "Vorgeschriebene oder optionale Argumente für lange Optionen sind ebenfalls " "vorgeschrieben oder optional für die entsprechenden Kurzoptionen." #. TRANSLATORS: The placeholder indicates the bug-reporting #. address for this package. Please add _another line_ saying #. "Report translation bugs to <...>\n" with the address for #. translation bugs (typically your translation team's web or #. email address). #: grecs/src/opthelp.c:202 #, c-format msgid "Report bugs to %s.\n" msgstr "" "Melden Sie Fehler an %s.\n" "Fehler in der Übersetzung melden Sie bitte an\n" "<translation-team-de@lists.sourceforge.net>\n" #: grecs/src/opthelp.c:205 #, c-format msgid "%s home page: <%s>\n" msgstr "Webseite von %s: <%s>\n" #. TRANSLATORS: Translate "(C)" to the copyright symbol #. (C-in-a-circle), if this symbol is available in the user's #. locale. Otherwise, do not translate "(C)"; leave it as-is. #: grecs/src/opthelp.c:457 msgid "(C)" msgstr "(C)" #: grecs/src/opthelp.c:466 msgid "" "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." "html>\n" "This is free software: you are free to change and redistribute it.\n" "There is NO WARRANTY, to the extent permitted by law.\n" "\n" msgstr "" "Lizenz GPLv3+: GNU GPL Version 3 oder neuer\n" "<http://www.gnu.org/licenses/gpl.html>.\n" "Dies ist freie Software: Sie dürfen diese ändern und weitergeben.\n" "Es wird keine Garantie gegeben, soweit das Gesetz es zulässt.\n" "\n" #: grecs/src/opthelp.c:483 msgid "Written by " msgstr "Geschrieben von " #. TRANSLATORS: This string is used as a delimiter between #. authors' names as in: #. #. Written by Winnie the Pooh, Piglet ... #. #: grecs/src/opthelp.c:489 msgid ", " msgstr ", " #. TRANSLATORS: This string acts as a delimiter before the #. last author's names, e.g.: #. #. Written by Winnie the Pooh, Piglet and Christopher Robin. #. #: grecs/src/opthelp.c:495 msgid " and " msgstr " und" #: grecs/src/path-parser.c:62 #, c-format msgid "cannot open `%s'" msgstr "»%s« kann nicht geöffnet werden" #: grecs/src/path-parser.c:108 grecs/src/path-parser.c:123 msgid "unexpected end of file" msgstr "Unerwartetes Ende der Datei" #: grecs/src/path-parser.c:143 msgid "parse error" msgstr "Einlesefehler" #: grecs/src/preproc.c:448 grecs/src/preproc.c:470 #, c-format msgid "Cannot stat `%s'" msgstr "Aufruf von »stat« für %s nicht möglich" #: grecs/src/preproc.c:453 grecs/src/preproc.c:458 msgid "Recursive inclusion" msgstr "Rekursive Einbeziehung" #: grecs/src/preproc.c:461 #, c-format msgid "`%s' already included here" msgstr "»%s« wird hier bereits einbezogen" #: grecs/src/preproc.c:465 #, c-format msgid "`%s' already included at top level" msgstr "»%s« wird bereits in oberster Ebene einbezogen" #: grecs/src/preproc.c:480 #, c-format msgid "Cannot open `%s'" msgstr "»%s« kann nicht geöffnet werden" #: grecs/src/preproc.c:595 msgid "Cannot parse include line" msgstr "include-Zeile kann nicht verarbeitet werden" #: grecs/src/preproc.c:598 msgid "invalid include statement" msgstr "Ungültige Verwendung einer Include-Anweisung" #: grecs/src/preproc.c:624 msgid "read error" msgstr "Lesefehler" #: grecs/src/preproc.c:632 #, c-format msgid "%s: No such file or directory" msgstr "%s: Datei oder Verzeichnis nicht gefunden" #: grecs/src/preproc.c:698 #, c-format msgid "Unable to start external preprocessor `%s'" msgstr "Externes Vorverarbeitungsprogramm »%s« konnte nicht aufgerufen werden" #: grecs/src/preproc.c:773 grecs/src/preproc.c:793 #, c-format msgid "Cannot run `%s'" msgstr "»%s« kann nicht ausgeführt werden" #: grecs/src/symtab.c:236 msgid "element not found in table" msgstr "Element wurde in Tabelle nicht gefunden" #: grecs/src/symtab.c:238 msgid "symbol table is full" msgstr "Symboltabelle ist voll" #: grecs/src/tree.c:70 msgid "list" msgstr "" #: grecs/src/tree.c:71 #, fuzzy msgid "one or more arguments" msgstr "Zu viele Argumente" #: grecs/src/tree.c:75 #, fuzzy msgid "unrecognized type; please report" msgstr "Nicht erkannter Ereigniscode" #: grecs/src/tree.c:320 msgid "section keyword used as a scalar" msgstr "" #: grecs/src/tree.c:322 msgid "scalar keyword used as a section" msgstr "" #: grecs/src/tree.c:325 #, fuzzy msgid "unknown keyword" msgstr "Unbekanntes Schlüsselwort" #: grecs/src/tree.c:360 #, c-format msgid "%s: not a valid boolean value" msgstr "%s: Kein gültiger boolescher Wert" #: grecs/src/tree.c:391 #, c-format msgid "%s: UNIX socket name too long" msgstr "%s: UNIX-Name des Sockets ist zu lang" #: grecs/src/tree.c:420 grecs/src/tree.c:644 #, c-format msgid "%s: not a valid IP address or hostname" msgstr "%s: Kein gültiger Hostname oder IP-Adresse" #: grecs/src/tree.c:444 #, c-format msgid "%s: not a valid port number" msgstr "%s: Keine gültige Port-Nummer" #: grecs/src/tree.c:452 msgid "missing port number" msgstr "Portnummer fehlt" #: grecs/src/tree.c:501 msgid "numeric overflow" msgstr "Numerischer Überlauf" #: grecs/src/tree.c:506 msgid "value out of allowed range" msgstr "Wert ist außerhalb des zulässigen Bereichs" #: grecs/src/tree.c:541 grecs/src/tree.c:571 #, c-format msgid "not a number (stopped near `%s')" msgstr "Keine Zahl (gestoppt bei »%s«)" #: grecs/src/tree.c:635 #, c-format msgid "%s: not a valid IP address" msgstr "%s: Keine gültige IP-Adresse" #: grecs/src/tree.c:774 #, c-format msgid "too many arguments to `%s'; missing semicolon?" msgstr "Zu viele Argumente für »%s«; Semikolon fehlt?" #: grecs/src/tree.c:788 grecs/src/tree.c:836 #, c-format msgid "INTERNAL ERROR at %s:%d: unhandled data type %d" msgstr "INTERNER FEHLER bei %s:%d: unbehandelter Datentyp %d" #: grecs/src/tree.c:803 #, c-format msgid "%s: incompatible data type in list item #%d" msgstr "%s: inkompatibler Datentyp im Listeneintrag #%d" #: grecs/src/tree.c:823 #, c-format msgid "incompatible data type for `%s'" msgstr "Inkompatibler Datentyp für »%s«" #: grecs/wordsplit/wordsplit.c:69 grecs/wordsplit/wordsplit.c:2855 msgid "memory exhausted" msgstr "Speicher ausgeschöpft" #: grecs/wordsplit/wordsplit.c:121 msgid "memory exhausted while trying to store error context" msgstr "" #: grecs/wordsplit/wordsplit.c:868 msgid "Restarting" msgstr "" #: grecs/wordsplit/wordsplit.c:1607 #, c-format msgid "%.*s: variable null or not set" msgstr "%.*s: Variable ist Null oder nicht gesetzt" #: grecs/wordsplit/wordsplit.c:1637 #, c-format msgid "warning: undefined variable `%.*s'" msgstr "Warnung: Undefinierte Variable »%.*s«" #: grecs/wordsplit/wordsplit.c:2141 #, c-format msgid "no files match pattern %s" msgstr "Keine Dateien, die dem Muster %s entsprechen" #: grecs/wordsplit/wordsplit.c:2603 msgid "WS trimming" msgstr "Leerzeichenentfernung" #: grecs/wordsplit/wordsplit.c:2605 msgid "command substitution" msgstr "Befehlsersetzung" #: grecs/wordsplit/wordsplit.c:2607 grecs/wordsplit/wordsplit.c:2615 msgid "coalesce list" msgstr "Zusammenführungsliste" #: grecs/wordsplit/wordsplit.c:2609 msgid "tilde expansion" msgstr "Tilde-Ersetzung" #: grecs/wordsplit/wordsplit.c:2611 msgid "variable expansion" msgstr "Variablen-Ersetzung" #: grecs/wordsplit/wordsplit.c:2613 msgid "quote removal" msgstr "Zitatzeichen-Entfernung" #: grecs/wordsplit/wordsplit.c:2617 msgid "path expansion" msgstr "Pfad-Ersetzung" #: grecs/wordsplit/wordsplit.c:2642 #, c-format msgid "(%02d) Input:%.*s;" msgstr "(%02d) Eingabe:%.*s;" #: grecs/wordsplit/wordsplit.c:2668 msgid "Initial list:" msgstr "Anfängliche Liste:" #: grecs/wordsplit/wordsplit.c:2683 msgid "Coalesced list:" msgstr "Zusammengeführte Liste:" #: grecs/wordsplit/wordsplit.c:2853 msgid "no error" msgstr "Kein Fehler" #: grecs/wordsplit/wordsplit.c:2854 msgid "missing closing quote" msgstr "schließendes Zitatzeichen fehlt" #: grecs/wordsplit/wordsplit.c:2856 msgid "invalid wordsplit usage" msgstr "unzulässige Worttrennung" #: grecs/wordsplit/wordsplit.c:2857 msgid "unbalanced curly brace" msgstr "Nicht geschlossene geschweifte Klammer" #: grecs/wordsplit/wordsplit.c:2858 msgid "undefined variable" msgstr "nicht definierte Variable" #: grecs/wordsplit/wordsplit.c:2859 msgid "input exhausted" msgstr "Eingabe ausgeschöpft" #: grecs/wordsplit/wordsplit.c:2860 msgid "unbalanced parenthesis" msgstr "Unvollständiges Klammernpaar" #: grecs/wordsplit/wordsplit.c:2861 msgid "globbing error" msgstr "Platzhalterfehler" #: grecs/wordsplit/wordsplit.c:2862 #, fuzzy msgid "user-defined error" msgstr "Lesefehler" #: grecs/wordsplit/wordsplit.c:2863 msgid "invalid parameter number in assignment" msgstr "" #: grecs/wordsplit/wordsplit.c:2875 msgid "unknown error" msgstr "Unbekannter Fehler" #: grecs/wordsplit/wordsplit.c:2884 #, c-format msgid "missing closing %c (start near #%lu)" msgstr "fehlendes schließendes %c (Beginn bei #%lu)" #~ msgid "unterminated regexp" #~ msgstr "Nicht beendeter regulärer Ausdruck" #~ msgid "unrecognized flag: %c" #~ msgstr "Nicht erkannter Schalter: %c" #~ msgid "out of memory" #~ msgstr "Speicher erschöpft" #~ msgid "%s: unknown keyword" #~ msgstr "%s: Unbekanntes Schlüsselwort" #~ msgid "(%02d) Restart:%.*s;" #~ msgstr "(%02d) Neustart:%.*s;" #~ msgid "INTERNAL ERROR at %s:%d" #~ msgstr "INTERNER FEHLER bei %s:%d" #~ msgid "ignoring duplicate definition" #~ msgstr "Doppelte Definition wird ignoriert" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/po/vi.gmo������������������������������������������������������������������������������0000644�0001750�0001750�00000036440�13512402637�014740� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Þ•����«������t��å���Ì ������`�����a�����g�� ���†�� ���”�����¢��$���¶�����Û�����ù��+��������C��&���^�����…�����£��6���¿�����ö����� ����� ����������/�����5�����=�����N�����h�����x�����‰�����™��c���µ����������1�����J�� ���N�����X�����l�����q��,���„�����±�����Ì��/���à������� ���&��È���4�����ý��s��������Œ�����Ÿ�����¤�����½�� ���Ä�����Ò�����×�����Ü��%���î����������*�����>�����R�����c�����|�����Ž�����ž��›���°��$���L��`���q��"���Ò�����õ����� ��*��������=�� ���D�� ���P�����\��"���e�����ˆ�����£�����¹�����½�����Ù��,���ñ��.��������M�����^��&���{�� ���¢��+���Ã�����ï��/��� ��$���<�����a��!���t�� ���–�����¤�����¹�����Í�� ���è��(���ö�� ��������+�����E�����J�����Y�����y�����Ž�����ž�����¸�����×�����ï��T���õ�����J��$���[�����€�����–�����ª�����¯�����Å�����Î�����ë����������!�� ���5�� ���C�����P�� ���e�����†�����˜�� ���©�����µ�����Ä�����Ü��!���ü�� �����#���?��/���c�����“�� ���©�� ���·��"���Â�����å�����ì���������������&�����F�����N�� ���]�����j�����~�����ž�����»�����Â�����Ó�����å�����ú����� ��.��������L�����c�����z����������¨�����¿�� ���Ï�����Ý�����ú����������2�����J�����^�����y��!���Œ��"���®�� ��Ñ�����Þ!��.���ä!�����"�����%"�����7"��H���M"��5���–"��!���Ì"��Q���î"��0���@#��>���q#��)���°#��(���Ú#��I���$�����M$�����f$�����i$��0���l$�����$�����¦$�����¯$��2���Ê$�����ý$��7���%�����S%��!���g%��~���‰%��&���&��!���/&�����Q&�� ���X&�����d&�� ���€&�����Š&��=���©&��(���ç&�����'��H���0'��'���y'�����¡'��"��º'��%���Ý(��ˆ���)��#���Œ)�����°)��.���µ)�� ���ä)�����ð)�����*����� *��$���*��L���7*��"���„*�����§*��˜���»*��#���T+��3���x+�����¬+�����¿+��1���×+��Ò��� ,��5���Ü,��h���-��%���{-��"���¡-�����Ä-��E���Ó-�� ���.�����&.�� ���/.�� ���;.��$���H.��&���m.�����”.�� ���¯.��1���».��(���í.��N���/��@���e/�����¦/��#���Á/��C���å/��K���)0��b���u0��/���Ø0��_���1��=���h1��%���¦1��-���Ì1�� ���ú1�����2�����2��+���82�����d2��0���u2�����¦2��)���¯2�� ���Ù2�����ã2��7���ò2�����*3�����A3�����X3��2���r3��5���¥3�����Û3��}���á3�����_4��+���p4��!���œ4�� ���¾4�����ß4�����ä4�� ���5��4���5��4���D5��)���y5��3���£5�����×5��$���ó5��0���6��2���I6�����|6�� ���”6�����Ÿ6�����»6��!���Ø6��*���ú6��4���%7��-���Z7��3���ˆ7��C���¼7��-����8�����.8�� ���K8��9���X8�����’8�����—8�����µ8�� ���Ñ8��+���ò8�����9�����$9��+���@9��*���l9��4���—9��3���Ì9������:�����:�����:�����1:�����O:�����d:��F���}:�� ���Ä:�����å:��$���;��'���*;��#���R;�����v;�����”;��:���¥;��;���à;��6���<�� ���S<�����t<��*���‘<�����¼<�����Ð<��3���ì<�����Z������U���£������� ���2�������A���P���3���‡��������������h���M���4���™���K���7�������_�������T���B���Y���—����������I�������[��������������¨���¦���&�������š���”�������¢���`�������œ���6������!���������������˜�������Ž������\��������������"���(�������•���>������f���¤�������@���9���������)�������€���������������ž���N���,���Š���q���¥���Ÿ���������������{���g���/���«���+���E���V���0����������-���5������x���G��� ���J������� ���l���L���.����������“���R�������k��������������t����������W���o���„���¡���†���H���=������^���������������u�������#���~��� ���X���ƒ���Q�������r�������F��������������������������§���}���‘���%���w�������n���c��� �������‚������:�������j�������1���y���v������m���*���ˆ������������…������’���b���<���O���–�������d���©���e���p���s���›���$���Œ���;���‰����������]���|���C�������ª���S���'�������?���‹��� ������8������� ����������������������a����������i�������z���D���� and �%.*s: variable null or not set�%s %s started�%s %s stopped�%s home page: <%s> �%s running; dir=%s, file=%s, pid=%lu�%s: No such file or directory�%s: UNIX socket name too long�%s: incompatible data type in list item #%d�%s: not a valid IP address�%s: not a valid IP address or hostname�%s: not a valid boolean value�%s: not a valid port number�%s: recursion depth does not match previous definition�(%02d) Input:%.*s;�(C)�, �<arg: string> <arg: string>...�Alias�Aliases�Cannot open `%s'�Cannot parse include line�Cannot run `%s'�Cannot stat `%s'�Coalesced list:�Command to execute on event�Configuration file structure for direvent. For more information, use `info direvent configuration'.�Configure event watcher�Configure syslog logging�DIR�Disabled;�Events to watch for�FILE�Files to watch for�GNU direvent monitors changes in directories�Give a short usage message�Give this help list�INTERNAL ERROR at %s:%d: unhandled data type %d�Include search path: �Initial list:�License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. �List of additional options�Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options.�Modify environment�NAME�No include search path. �OPTION�Other options�PRIO�PROG�Pathname to watch�Prefix each message with its priority�Print program version�Recursive inclusion�Report bugs to %s. �Run as this user�Run command as this user�Run in foreground�Set debug level�Set pid file name�Set syslog facility. Arg is one of the following: user, daemon, auth, authpriv, mail, cron, local0 through local7 (case-insensitive), or a facility number.�Tag syslog messages with this string�The optional CONFIG argument supplies the name of the configuration file to use instead of %s. �This direvent uses %s interface. �Timeout for the command�USER�Unable to start external preprocessor `%s'�Usage:�WS trimming�Written by �[CONFIG]�`%s' already included at top level�`%s' already included here�add include directory�arg�begin scanning process list�cannot change to %s: %s�cannot create watcher %s/%s, stat failed: %s�cannot create watcher %s/%s: not enough memory�cannot open `%s'�cannot open directory %s: %s�cannot open pidfile %s for writing: %s�cannot run `%s': fork failed: %s�cannot run redirector `%s': fork failed: %s�cannot set watcher on %s: %s�cannot start redirector for %s, pipe failed: %s�cannot stat %s/%s: not enough memory�cannot stat %s: %s�check configuration file and exit�coalesce list�command substitution�creating watcher %s�element not found in table�environment: �expected "recursive" or end of statement�expected %s�expected %s, but found %s�file�globbing error�incompatible data type for `%s'�increase debug level�input exhausted�invalid include statement�invalid use of block statement�invalid wordsplit usage�level�log everything with priority PRIO and higher to the stderr, as well as to the syslog�memory exhausted�missing closing %c (start near #%lu)�missing closing quote�missing port number�name�no command configured�no error�no event handlers configured�no event handlers installed�no files match pattern %s�no paths configured�no such group�no such user�no user with UID %lu�not a number (stopped near `%s')�not enough memory�numeric overflow�parse error�path expansion�process %lu dumped core�process %lu exited successfully�process %lu failed with status %d�process %lu stopped on signal %d�process %lu terminated on signal %d�process %lu terminated with unrecognized status�process %lu timed out�quote removal�read error�redirector for %s started, pid=%lu�regexp�remain in foreground�removing watcher %s�run as this user�scheduling alarm in %lu seconds�seconds�self-test mode�set PID file�set syslog facility�show configuration file summary�starting %s, dir=%s, file=%s�string�surplus argument�surplus arguments�symbol table is full�tilde expansion�too many arguments�too many arguments to `%s'; missing semicolon?�unbalanced curly brace�unbalanced parenthesis�undefined variable�unexpected block statement�unexpected end of file�unexpected list�unknown error�unknown syslog facility `%s'�unknown syslog facility: %s�unknown syslog priority: %s�unrecognized event code�unrecognized option�value out of allowed range�variable expansion�waiting for %s (%lu) to terminate�warning: undefined variable `%.*s'�Project-Id-Version: direvent 5.1 Report-Msgid-Bugs-To: bug-direvent@gnu.org.ua POT-Creation-Date: 2019-07-13 19:23+0300 PO-Revision-Date: 2016-07-08 07:55+0700 Last-Translator: Trần Ngá»c Quân <vnwildman@gmail.com> Language-Team: Vietnamese <translation-team-vi@lists.sourceforge.net> Language: vi MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Bugs: Report translation errors to the Language-Team address. Plural-Forms: nplurals=1; plural=0; X-Generator: Gtranslator 2.91.7 � và �%.*s: biến null hoặc chưa được đặt�%s %s đã chạy�%s %s đã dừng�Trang chá»§ %s: <%s> �%s Ä‘ang chạy; thư-mục=%s, tập-tin=%s, mã-số-tiến-trình=%lu�%s: Không có tập tin hoặc thư mục như vậy�%s: tên ổ cắm UNIX quá dài�%s: kiểu dữ liệu không tương thích trong mục tin #%d cá»§a danh sách�%s: không phải là địa chỉ IP hợp lệ�%s: không phải là địa chỉ IP hay tên máy hợp lệ�%s: không phải là giá trị lô gíc�%s: số hiệu cổng không hợp lệ�%s: độ sâu đệ quy không khá»›p vá»›i định nghÄ©a trước đó�(%02d) Äầu vào:%.*s;�©�, �<đối-số: chuá»—i> <đối-số: chuá»—i>…�Bí danh�Bí danh�Không thể mở “%sâ€�Không thể phân tích cú pháp cá»§a bao gồm� Không thể chạy “%sâ€�không thể lấy thông tin thống kê vỠ“%sâ€�Danh sách đã co:�Lệnh thá»±c thi cho sá»± kiện�Cấu trúc tập tin cấu hình cho direvent. Äể biết thêm thông tin vui lòng xem “info direvent configurationâ€.�Cấu hình bá»™ theo dõi sá»± kiện�Cấu hình ghi nhật ký syslog�TMỤC�Äã tắt;�Sá»± kiện cần theo dõi�TẬP-TIN�Các tập tin cần theo dõi�GNU direvent theo dõi các thay đổi trong các thư mục�ÄÆ°a ra trợ giúp dạng ngắn gá»n�ÄÆ°a ra danh sách trợ giúp�Lá»–I NỘI TẠI ở %s:%d: kiểu dữ liệu không thể xá»­ lý %d�ÄÆ°á»ng dẫn tìm kiếm bao gồm: �Danh sách khởi tạo:�Giấy phép GPL pb3+: Giấy phép Công cá»™ng GNU phiên bản 3 hay sau <http://gnu.org/licenses/gpl.html> Äây là phần má»m tá»± do: bạn có quyá»n sá»­a đổi và phát hành lại nó. KHÔNG CÓ BẢO HÀNH GÃŒ CẢ, vá»›i Ä‘iá»u khiển được pháp luật cho phép. �Danh sách các tùy chá»n bổ xung�Tất cả đối số bắt buá»™c phải sá»­ dụng vá»›i tùy chá»n dài cÅ©ng bắt buá»™c vá»›i tùy chá»n ngắn tương ứng.�Biến đổi biến môi trưá»ng�TÊN�ÄÆ°á»ng dẫn tìm kiếm không bao gồm: �TÙY_CHỌN�Tùy chá»n khác�ƯUTIÊN�TRÃŒNH�Tên đưá»ng dẫn cần theo dõi�Nối thêm tiá»n tố từng lá»i nhắn bằng mức ưu tiên cá»§a nó�In ra phiên bản chương trình�Bao gồm đệ quy�Thông báo lá»—i cho %s. Báo cáo lá»—i dịch cho nhóm dịch tiếng Việt tại TranslationProject: <translation-team-vi@lists.sourceforge.net> �chạy như là ngưá»i dùng này�Chạy lệnh dưới tư cách ngưá»i dùng này�Chạy trên ná»n�Äặt mức gỡ lá»—i�Äặt tên tập tin lưu mã số tiến trình�Äặt cÆ¡ sở hạ tầng syslog. Äối số là má»™t trong số sau: user, daemon, auth, authpriv, mail, cron, local0 đến local7 (phân biệt HOA/thưá»ng), hoặc là số cá»§a cÆ¡ sở hạ tầng.�Äánh dấu thông tin nhật ký vá»›i chuá»—i này�Äối số tùy chá»n CONFIG cung cấp tên cá»§a tập tin cấu hình được dùng thay cho %s. �direvent này dùng giao diện %s. �Thá»i gian chá» lệnh tối Ä‘a�NGƯỜI_DÙNG�Không thể khởi động bá»™ tiá»n xá»­ lý bên ngoài “%sâ€�Cách dùng:�cắt WS�Tác giả �[CẤUHÃŒNH]�"%s" đã bao gồm ở cấp đầu�"%s" đã được bao gồm ở đây�thêm thư mục bao gồm�đối-số�Ä‘ang bắt đầu quét tìm danh sách xá»­ lý�không thể chuyển đổi sang %s: %s�không thể tạo bá»™ theo dõi %s/%s, gặp lá»—i khi lấy thống kê: %s�không thể tạo bá»™ theo dõi %s/%s: không đủ bá»™ nhá»›�không thể mở “%sâ€�không thể mở thư mục %s: %s�không thể mở tập-tin mã số tiến trình %s để ghi: %s�không thể chạy “%sâ€: gặp lá»—i khi rẽ nhánh tiến trình: %s�không thể chạy bá»™ chuyển hướng “%sâ€: gặp lá»—i khi rẽ nhánh tiến trình: %s�không thể đặt bá»™ theo dõi trên %s: %s�không thể khởi chạy bá»™ chuyển hướng cho %s, gặp lá»—i vá»›i đưá»ng ống: %s�không thể lấy thống kê %s/%s: không đủ bá»™ nhá»›�không thể lấy thống kê %s: %s�kiểm tra tập tin cấu hình rồi thoát�co danh sách�thay thế lệnh�Ä‘ang tạo bá»™ theo dõi %s�phần tá»­ không tìm thấy trong bảng�môi trưá»ng: �cần "recursive" hoặc kết thúc câu lệnh�cần %s�cần %s, nhưng lại nhận được %s�tập_tin�lá»—i globbing�kiểu dữ liệu không tương thích vá»›i “%sâ€�tăng mức gỡ lá»—i�đầu vào đã hết�câu lệnh bao gồm sai�cách dùng biểu thức khối không hợp lệ�cách dùng wordsplit (tách chữ) không hợp lệ�mức�ghi nhật ký má»i thứ mà mức ưu tiên bằng hay cao hÆ¡n ƯUTIÊN ra đầu ra lá»—i chuẩn, cÅ©ng như là syslog�hết bá»™ nhá»›�thiếu đóng %c (bắt đầu gần #%lu)�thiếu dấu trích dẫn đóng�thiếu số hiệu cá»§a cổng�tên�chưa cấu hình lệnh nào�không lá»—i�chưa cấu hình bá»™ tiếp hợp sá»± kiện nào�chưa cài đặt bá»™ tiếp hợp sá»± kiện nào�không có tập tin nào khá»›p mẫu %s�chưa có đưá»ng dẫn nào được cấu hình�không có nhóm như vậy�không có ngưá»i dùng như vậy�không có ngưá»i dùng vá»›i mã số là %lu�không là kiểu số (dừng ở gần “%sâ€)�không đủ bá»™ nhá»›�tràn số�lá»—i phân tích cú pháp�khai triển đưá»ng dẫn�tiến trình %lu bị đổ lõi�tiến trình %lu đã thoát thành công�tiến trình %lu gặp lá»—i vá»›i trạng thái %d�tiến trình %lu dừng trên tín hiệu %d�tiến trình %lu chấm dứt trên tín hiệu %d�tiến trình %lu chấm dứt vá»›i trạng thái không nhận ra�tiến trình %lu bị lá»—i quá thá»i gian�gỡ bá» dấu trích dẫn�lá»—i Ä‘á»c�bá»™ chuyển hướng cho %s đã khởi chạy, pid=%lu�BTCQ�vẫn ở trên tiá»n cảnh�gỡ bá» bá»™ theo dõi %s�chạy dưới tài khoản này�lập lịch phát âm báo trong %lu giây�giây�chế độ tá»± kiểm tra�đặt tập tin ghi mã số tiến trình�đặt cÆ¡ sở hạ tầng ghi nhật ký�hiển thị tổng hợp vá» tập tin cấu hình�Ä‘ang khởi chạy %s, thư-mục=%s, tập-tin=%s�chuá»—i�tham số thừa�các đối số thừa�bảng ký hiệu đã đầy�khai triển dấu ~�quá nhiá»u đối số�quá nhiá»u đối số cho “%sâ€; thiếu dấu chấm phẩy à?�chưa khá»›p cặp dấu ngoặc�Chưa đủ cặp ngoặc đơn�biến chưa được định nghÄ©a�gặp biểu thức khối không cần�kết thúc tập tin đột xuất�gặp danh sách không cần�lá»—i không rõ�không hiểu cÆ¡ sở hạ tầng ghi nhật ký “%sâ€�không hiểu cÆ¡ sở hạ tầng ghi nhật ký: “%sâ€�không hiểu mức ưu tiên ghi nhật ký: “%sâ€�không nhận ra mã sá»± kiện�không nhận ra tùy chá»n�số nằm ngoài phạm vi được phép�khai triển biến�chá» %s (%lu) chấm dứt�cảnh báo: chưa định nghÄ©a biến “%.*sâ€���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/po/POTFILES.in�������������������������������������������������������������������������0000644�0001750�0001750�00000000444�13511404060�015355� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# List of source files which contain translatable strings. src/cmdline.h src/config.c src/direvent.c src/environ.c src/progman.c src/watcher.c grecs/src/format.c grecs/src/opthelp.c grecs/src/path-parser.c grecs/src/preproc.c grecs/src/symtab.c grecs/src/tree.c grecs/wordsplit/wordsplit.c ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/po/sv.po�������������������������������������������������������������������������������0000644�0001750�0001750�00000052404�13512402637�014604� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Swedish translation for direvent. # Copyright © 2017 Free Software Foundation, Inc. # This file is distributed under the same license as the direvent package. # Anders Jonsson <anders.jonsson@norsjovallen.se>, 2017. # msgid "" msgstr "" "Project-Id-Version: direvent 5.1\n" "Report-Msgid-Bugs-To: bug-direvent@gnu.org.ua\n" "POT-Creation-Date: 2019-07-13 19:23+0300\n" "PO-Revision-Date: 2017-07-17 23:18+0200\n" "Last-Translator: Anders Jonsson <anders.jonsson@norsjovallen.se>\n" "Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n" "Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" "X-Generator: Poedit 2.0.2\n" #: cmdline.opt:26 msgid "increase debug level" msgstr "öka felsökningsnivÃ¥" #: cmdline.opt:32 msgid "PRIO" msgstr "PRIO" #: cmdline.opt:32 msgid "" "log everything with priority PRIO and higher to the stderr, as well as to " "the syslog" msgstr "" "logga allt med prioritet PRIO och högre till standard fel, sÃ¥ väl som till " "syslog" #: cmdline.opt:41 msgid "NAME" msgstr "NAMN" #: cmdline.opt:41 msgid "set syslog facility" msgstr "ställ in syslog-funktionalitet" #: cmdline.opt:47 msgid "remain in foreground" msgstr "stanna kvar i förgrunden" #: cmdline.opt:53 msgid "DIR" msgstr "KAT" #: cmdline.opt:53 msgid "add include directory" msgstr "lägg till inkluderingskatalog" #: cmdline.opt:59 msgid "PROG" msgstr "PROG" #: cmdline.opt:59 msgid "self-test mode" msgstr "självtestsläge" #: cmdline.opt:65 msgid "FILE" msgstr "FIL" #: cmdline.opt:65 msgid "set PID file" msgstr "ställ in PID-fil" #: cmdline.opt:71 msgid "check configuration file and exit" msgstr "kontrollera konfigurationsfil och avsluta" #: cmdline.opt:77 msgid "USER" msgstr "ANVÄNDARE" #: cmdline.opt:77 msgid "run as this user" msgstr "kör som denna användare" #: cmdline.opt:87 msgid "show configuration file summary" msgstr "visa sammanfattning av konfigurationsfil" #: cmdline.opt:81 msgid "Other options" msgstr "Andra flaggor" #: cmdline.opt:93 msgid "Give this help list" msgstr "Visa denna hjälplista" #: cmdline.opt:93 msgid "Give a short usage message" msgstr "Visa ett kort användningsmeddelande" #: cmdline.opt:93 msgid "Print program version" msgstr "Skriv ut programversion" #: cmdline.opt:13 msgid "GNU direvent monitors changes in directories" msgstr "GNU direvent övervakar ändringar i kataloger" #: cmdline.opt:15 msgid "[CONFIG]" msgstr "[KONFIG]" #: cmdline.opt:95 #, c-format msgid "" "The optional CONFIG argument supplies the name of the configuration file\n" "to use instead of %s.\n" "\n" msgstr "" "Det valfria KONFIG-argumentet tillhandahÃ¥ller namnet pÃ¥\n" "konfigurationsfilen att använda istället för %s.\n" "\n" #. TRANSLATORS: %s is one of: inotify, kqueue #: cmdline.opt:99 #, c-format msgid "" "This direvent uses %s interface.\n" "\n" msgstr "" "Detta direvent använder gränssnittet %s.\n" "\n" #: cmdline.opt:102 #, c-format msgid "Include search path:\n" msgstr "Sökväg för inkludering:\n" #: cmdline.opt:105 #, c-format msgid "No include search path.\n" msgstr "Ingen sökväg för inkludering.\n" #: src/config.c:63 #, c-format msgid "unknown syslog facility: %s" msgstr "okänd syslog-funktionalitet: %s" #: src/config.c:80 #, c-format msgid "unknown syslog priority: %s" msgstr "okänd syslog-prioritet: %s" #: src/config.c:88 msgid "unexpected block statement" msgstr "oväntad blocksats" #: src/config.c:97 #, c-format msgid "expected %s" msgstr "förväntade %s" #: src/config.c:102 #, c-format msgid "expected %s, but found %s" msgstr "förväntade %s, men hittade %s" #: src/config.c:124 #, c-format msgid "unknown syslog facility `%s'" msgstr "okänd syslog-funktionalitet â€%sâ€" #: src/config.c:133 src/config.c:606 msgid "name" msgstr "namn" #: src/config.c:134 msgid "" "Set syslog facility. Arg is one of the following: user, daemon, auth, " "authpriv, mail, cron, local0 through local7 (case-insensitive), or a " "facility number." msgstr "" "Ställ in syslog-funktionalitet. Arg är en av följande: user, daemon, auth, " "authpriv, mail, cron, local0 till local7 (inte skiftlägeskänsligt), eller " "ett funktionalitetstal." #: src/config.c:139 grecs/src/format.c:36 grecs/src/tree.c:69 msgid "string" msgstr "sträng" #: src/config.c:139 msgid "Tag syslog messages with this string" msgstr "Tagga syslog-meddelanden med denna sträng" #: src/config.c:142 grecs/src/format.c:141 msgid "arg" msgstr "arg" #: src/config.c:143 msgid "Prefix each message with its priority" msgstr "FöregÃ¥ varje meddelande med dess prioritet" #: src/config.c:191 #, c-format msgid "%s: recursion depth does not match previous definition" msgstr "%s: rekursionsdjup matchar inte föregÃ¥ende definition" #: src/config.c:212 msgid "no paths configured" msgstr "inga sökvägar konfigurerade" #: src/config.c:217 msgid "no command configured" msgstr "inget kommando konfigurerat" #: src/config.c:229 grecs/src/tree.c:665 msgid "invalid use of block statement" msgstr "ogiltig användning av blocksats" #: src/config.c:274 msgid "expected \"recursive\" or end of statement" msgstr "förväntade â€recursive†eller slut pÃ¥ sats" #: src/config.c:289 msgid "surplus argument" msgstr "överflödigt argument" #: src/config.c:295 src/config.c:446 msgid "unexpected list" msgstr "oväntad lista" #: src/config.c:326 src/config.c:341 src/config.c:356 msgid "unrecognized event code" msgstr "okänd händelsekod" #: src/config.c:438 msgid "surplus arguments" msgstr "överflödiga argument" #: src/config.c:452 msgid "no such user" msgstr "ingen sÃ¥dan användare" #: src/config.c:459 msgid "no such group" msgstr "ingen sÃ¥dan grupp" #: src/config.c:501 msgid "unrecognized option" msgstr "okänd flagga" #: src/config.c:595 msgid "Pathname to watch" msgstr "Sökväg att övervaka" #: src/config.c:598 msgid "Events to watch for" msgstr "Händelser att övervaka" #: src/config.c:601 msgid "regexp" msgstr "reguttr" #: src/config.c:601 msgid "Files to watch for" msgstr "Filer att övervaka" #: src/config.c:604 msgid "Command to execute on event" msgstr "Kommando att exekvera vid händelse" #: src/config.c:606 msgid "Run command as this user" msgstr "Kör kommando som denna användare" #: src/config.c:609 msgid "seconds" msgstr "sekunder" #: src/config.c:609 msgid "Timeout for the command" msgstr "Tidsgräns för kommandot" #: src/config.c:611 msgid "List of additional options" msgstr "Lista över ytterligare flaggor" #: src/config.c:614 msgid "<arg: string> <arg: string>..." msgstr "<arg: sträng> <arg: sträng>…" #: src/config.c:615 msgid "Modify environment" msgstr "Modifiera miljö" #: src/config.c:622 msgid "Run as this user" msgstr "Kör som denna användare" #: src/config.c:624 msgid "Run in foreground" msgstr "Kör i förgrunden" #: src/config.c:626 msgid "file" msgstr "fil" #: src/config.c:626 msgid "Set pid file name" msgstr "Ställ in pid-filnamn" #: src/config.c:628 msgid "Configure syslog logging" msgstr "Konfigurera syslog-loggning" #: src/config.c:630 msgid "level" msgstr "nivÃ¥" #: src/config.c:630 msgid "Set debug level" msgstr "Ställ in felsökningsnivÃ¥" #: src/config.c:632 msgid "Configure event watcher" msgstr "Konfigurera händelseövervakare" #: src/config.c:643 msgid "" "Configuration file structure for direvent.\n" "For more information, use `info direvent configuration'." msgstr "" "Konfigurationsfilstruktur för direvent.\n" "För mer information, använd â€info direvent configurationâ€." #: src/direvent.c:142 src/direvent.c:164 src/watcher.c:93 src/watcher.c:125 msgid "not enough memory" msgstr "för lite minne" #: src/direvent.c:274 #, c-format msgid "cannot open pidfile %s for writing: %s" msgstr "det gÃ¥r inte att öppna pidfilen %s för skrivning: %s" #: src/direvent.c:302 #, c-format msgid "no user with UID %lu" msgstr "ingen användare med UID %lu" #: src/direvent.c:420 #, c-format msgid "cannot run `%s': fork failed: %s" msgstr "det gÃ¥r inte att köra â€%sâ€: â€fork†misslyckades: %s" #: src/direvent.c:480 msgid "too many arguments" msgstr "för mÃ¥nga argument" #: src/direvent.c:522 #, c-format msgid "%s %s started" msgstr "%s %s startades" #: src/direvent.c:546 #, c-format msgid "%s %s stopped" msgstr "%s %s stoppades" #: src/environ.c:25 msgid "environment: " msgstr "miljö: " #: src/progman.c:142 #, c-format msgid "process %lu exited successfully" msgstr "process %lu avslutades utan problem" #: src/progman.c:145 #, c-format msgid "process %lu failed with status %d" msgstr "process %lu misslyckades med status %d" #: src/progman.c:155 #, c-format msgid "process %lu terminated on signal %d" msgstr "process %lu avslutades av signal %d" #: src/progman.c:158 #, c-format msgid "process %lu stopped on signal %d" msgstr "process %lu stoppades av signal %d" #: src/progman.c:163 #, c-format msgid "process %lu dumped core" msgstr "process %lu skapade en minnesutskrift" #: src/progman.c:167 #, c-format msgid "process %lu terminated with unrecognized status" msgstr "process %lu avslutades med okänd status" #: src/progman.c:228 msgid "begin scanning process list" msgstr "börja genomsökning av processlista" #: src/progman.c:232 #, c-format msgid "process %lu timed out" msgstr "tidsgräns överskreds för process %lu" #: src/progman.c:241 #, c-format msgid "scheduling alarm in %lu seconds" msgstr "schemalägger alarm om %lu sekunder" #: src/progman.c:322 #, c-format msgid "cannot start redirector for %s, pipe failed: %s" msgstr "det gÃ¥r inte att starta omdirigerare för %s, â€pipe†misslyckades: %s" #: src/progman.c:354 #, c-format msgid "cannot run redirector `%s': fork failed: %s" msgstr "det gÃ¥r inte att köra omdirigeraren â€%sâ€, â€fork†misslyckades: %s" #: src/progman.c:359 #, c-format msgid "redirector for %s started, pid=%lu" msgstr "omdirigerare för %s startades, pid=%lu" #: src/progman.c:455 #, c-format msgid "starting %s, dir=%s, file=%s" msgstr "startar %s, kat=%s, fil=%s" #: src/progman.c:484 #, c-format msgid "cannot change to %s: %s" msgstr "det gÃ¥r inte att byta katalog till %s: %s" #: src/progman.c:512 #, c-format msgid "%s running; dir=%s, file=%s, pid=%lu" msgstr "%s kör; kat=%s, fil=%s, pid=%lu" #: src/progman.c:534 #, c-format msgid "waiting for %s (%lu) to terminate" msgstr "väntar pÃ¥ att %s (%lu) ska avslutas" #: src/watcher.c:183 src/watcher.c:513 #, c-format msgid "removing watcher %s" msgstr "tar bort övervakare %s" #: src/watcher.c:195 msgid "no watchers left; exiting now" msgstr "" #: src/watcher.c:262 #, c-format msgid "installing CREATE sentinel for %s" msgstr "" #: src/watcher.c:275 #, c-format msgid "creating watcher %s" msgstr "skapar övervakare %s" #: src/watcher.c:281 src/watcher.c:296 #, c-format msgid "cannot set watcher on %s: %s" msgstr "det gÃ¥r inte att ställa in övervakare pÃ¥ %s: %s" #: src/watcher.c:377 #, c-format msgid "cannot create watcher %s/%s: not enough memory" msgstr "det gÃ¥r inte att skapa övervakare %s/%s: för lite minne" #: src/watcher.c:384 #, c-format msgid "cannot create watcher %s/%s, stat failed: %s" msgstr "det gÃ¥r inte att skapa övervakaren %s/%s, â€stat†misslyckades: %s" #: src/watcher.c:430 #, c-format msgid "cannot open directory %s: %s" msgstr "det gÃ¥r inte att öppna katalogen %s: %s" #: src/watcher.c:447 #, c-format msgid "cannot stat %s/%s: not enough memory" msgstr "det gÃ¥r inte att ta status pÃ¥ %s/%s: för lite minne" #: src/watcher.c:452 #, c-format msgid "cannot stat %s: %s" msgstr "det gÃ¥r inte att ta status pÃ¥ %s: %s" #: src/watcher.c:497 msgid "no event handlers configured" msgstr "inga händelsehanterare konfigurerade" #: src/watcher.c:502 msgid "no event handlers installed" msgstr "inga händelsehanterare installerade" #: grecs/src/format.c:33 msgid "void" msgstr "" #: grecs/src/format.c:46 msgid "number" msgstr "" #: grecs/src/format.c:49 msgid "time" msgstr "" #: grecs/src/format.c:52 msgid "boolean" msgstr "" #: grecs/src/format.c:55 msgid "IPv4" msgstr "" #: grecs/src/format.c:58 msgid "CIDR" msgstr "" #: grecs/src/format.c:61 #, fuzzy msgid "hostname" msgstr "namn" #: grecs/src/format.c:64 msgid "sockaddr" msgstr "" #: grecs/src/format.c:67 msgid "section" msgstr "" #: grecs/src/format.c:70 msgid "null" msgstr "" #: grecs/src/format.c:133 msgid "Disabled;" msgstr "Inaktiverad;" #: grecs/src/opthelp.c:123 grecs/src/opthelp.c:269 msgid "Usage:" msgstr "Användning:" #: grecs/src/opthelp.c:127 msgid "OPTION" msgstr "FLAGGA" #: grecs/src/opthelp.c:132 grecs/src/opthelp.c:427 msgid "Aliases" msgstr "Alias" #: grecs/src/opthelp.c:132 grecs/src/opthelp.c:427 msgid "Alias" msgstr "Alias" #: grecs/src/opthelp.c:186 msgid "" "Mandatory or optional arguments to long options are also mandatory or " "optional for any corresponding short options." msgstr "" "Obligatoriska eller valfria argument till lÃ¥nga flaggor är ocksÃ¥ " "obligatoriska eller valfria för motsvarande korta flaggor." #. TRANSLATORS: The placeholder indicates the bug-reporting #. address for this package. Please add _another line_ saying #. "Report translation bugs to <...>\n" with the address for #. translation bugs (typically your translation team's web or #. email address). #: grecs/src/opthelp.c:202 #, c-format msgid "Report bugs to %s.\n" msgstr "" "Rapportera fel till %s\n" "Skicka synpunkter pÃ¥ översättningen till <tp-sv@listor.tp-sv.se>\n" #: grecs/src/opthelp.c:205 #, c-format msgid "%s home page: <%s>\n" msgstr "Webbsida för %s: <%s>\n" #. TRANSLATORS: Translate "(C)" to the copyright symbol #. (C-in-a-circle), if this symbol is available in the user's #. locale. Otherwise, do not translate "(C)"; leave it as-is. #: grecs/src/opthelp.c:457 msgid "(C)" msgstr "©" #: grecs/src/opthelp.c:466 msgid "" "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." "html>\n" "This is free software: you are free to change and redistribute it.\n" "There is NO WARRANTY, to the extent permitted by law.\n" "\n" msgstr "" "Licens GPLv3+: GNU GPL version 3 eller senare <http://gnu.org/licenses/gpl." "html>\n" "Det här är fri programvara: du fÃ¥r ändra och distribuera den.\n" "Det finns INGEN GARANTI, sÃ¥ lÃ¥ngt som tillÃ¥ts enligt lag.\n" "\n" #: grecs/src/opthelp.c:483 msgid "Written by " msgstr "Skriven av " #. TRANSLATORS: This string is used as a delimiter between #. authors' names as in: #. #. Written by Winnie the Pooh, Piglet ... #. #: grecs/src/opthelp.c:489 msgid ", " msgstr ", " #. TRANSLATORS: This string acts as a delimiter before the #. last author's names, e.g.: #. #. Written by Winnie the Pooh, Piglet and Christopher Robin. #. #: grecs/src/opthelp.c:495 msgid " and " msgstr " och " #: grecs/src/path-parser.c:62 #, c-format msgid "cannot open `%s'" msgstr "det gÃ¥r inte att öppna â€%sâ€" #: grecs/src/path-parser.c:108 grecs/src/path-parser.c:123 msgid "unexpected end of file" msgstr "oväntat filslut" #: grecs/src/path-parser.c:143 msgid "parse error" msgstr "tolkningsfel" #: grecs/src/preproc.c:448 grecs/src/preproc.c:470 #, c-format msgid "Cannot stat `%s'" msgstr "Det gÃ¥r inte att ta status pÃ¥ â€%sâ€" #: grecs/src/preproc.c:453 grecs/src/preproc.c:458 msgid "Recursive inclusion" msgstr "Rekursiv inkludering" #: grecs/src/preproc.c:461 #, c-format msgid "`%s' already included here" msgstr "â€%s†redan inkluderad här" #: grecs/src/preproc.c:465 #, c-format msgid "`%s' already included at top level" msgstr "â€%s†redan inkluderad pÃ¥ toppnivÃ¥" #: grecs/src/preproc.c:480 #, c-format msgid "Cannot open `%s'" msgstr "Det gÃ¥r inte att öppna â€%sâ€" #: grecs/src/preproc.c:595 msgid "Cannot parse include line" msgstr "Det gÃ¥r inte att tolka inkluderingsrad" #: grecs/src/preproc.c:598 msgid "invalid include statement" msgstr "ogiltig inkluderingssats" #: grecs/src/preproc.c:624 msgid "read error" msgstr "läsfel" #: grecs/src/preproc.c:632 #, c-format msgid "%s: No such file or directory" msgstr "%s: Ingen sÃ¥dan fil eller katalog" #: grecs/src/preproc.c:698 #, c-format msgid "Unable to start external preprocessor `%s'" msgstr "Kan inte starta extern preprocessor â€%sâ€" #: grecs/src/preproc.c:773 grecs/src/preproc.c:793 #, c-format msgid "Cannot run `%s'" msgstr "Det gÃ¥r inte att köra â€%sâ€" #: grecs/src/symtab.c:236 msgid "element not found in table" msgstr "element hittades inte i tabell" #: grecs/src/symtab.c:238 msgid "symbol table is full" msgstr "symboltabellen är full" #: grecs/src/tree.c:70 msgid "list" msgstr "" #: grecs/src/tree.c:71 #, fuzzy msgid "one or more arguments" msgstr "för mÃ¥nga argument" #: grecs/src/tree.c:75 #, fuzzy msgid "unrecognized type; please report" msgstr "okänd händelsekod" #: grecs/src/tree.c:320 msgid "section keyword used as a scalar" msgstr "" #: grecs/src/tree.c:322 msgid "scalar keyword used as a section" msgstr "" #: grecs/src/tree.c:325 #, fuzzy msgid "unknown keyword" msgstr "Okänt nyckelord" #: grecs/src/tree.c:360 #, c-format msgid "%s: not a valid boolean value" msgstr "%s: inte ett giltigt booleskt värde" #: grecs/src/tree.c:391 #, c-format msgid "%s: UNIX socket name too long" msgstr "%s: namn pÃ¥ UNIX-uttag (socket) för lÃ¥ngt" #: grecs/src/tree.c:420 grecs/src/tree.c:644 #, c-format msgid "%s: not a valid IP address or hostname" msgstr "%s: inte en giltig IP-adress eller värdnamn" #: grecs/src/tree.c:444 #, c-format msgid "%s: not a valid port number" msgstr "%s: inte ett giltigt portnummer" #: grecs/src/tree.c:452 msgid "missing port number" msgstr "saknar portnummer" #: grecs/src/tree.c:501 msgid "numeric overflow" msgstr "numeriskt överspill" #: grecs/src/tree.c:506 msgid "value out of allowed range" msgstr "värde utanför tillÃ¥tet intervall" #: grecs/src/tree.c:541 grecs/src/tree.c:571 #, c-format msgid "not a number (stopped near `%s')" msgstr "inte ett tal (stoppade nära â€%sâ€)" #: grecs/src/tree.c:635 #, c-format msgid "%s: not a valid IP address" msgstr "%s: inte en giltig IP-adress" #: grecs/src/tree.c:774 #, c-format msgid "too many arguments to `%s'; missing semicolon?" msgstr "för mÃ¥nga argument till â€%sâ€, saknas semikolon?" #: grecs/src/tree.c:788 grecs/src/tree.c:836 #, c-format msgid "INTERNAL ERROR at %s:%d: unhandled data type %d" msgstr "INTERNT FEL vid %s:%d: ohanterad datatyp %d" #: grecs/src/tree.c:803 #, c-format msgid "%s: incompatible data type in list item #%d" msgstr "%s: inkompatibel datatyp i listpost #%d" #: grecs/src/tree.c:823 #, c-format msgid "incompatible data type for `%s'" msgstr "inkompatibel datatyp för â€%sâ€" #: grecs/wordsplit/wordsplit.c:69 grecs/wordsplit/wordsplit.c:2855 msgid "memory exhausted" msgstr "minne uttömt" #: grecs/wordsplit/wordsplit.c:121 msgid "memory exhausted while trying to store error context" msgstr "" #: grecs/wordsplit/wordsplit.c:868 msgid "Restarting" msgstr "" #: grecs/wordsplit/wordsplit.c:1607 #, c-format msgid "%.*s: variable null or not set" msgstr "%.*s: variabel null eller inte inställd" #: grecs/wordsplit/wordsplit.c:1637 #, c-format msgid "warning: undefined variable `%.*s'" msgstr "varning: odefinierad variabel â€%.*sâ€" #: grecs/wordsplit/wordsplit.c:2141 #, c-format msgid "no files match pattern %s" msgstr "inga filer matchar mönstret %s" #: grecs/wordsplit/wordsplit.c:2603 msgid "WS trimming" msgstr "blankteckentrimning" #: grecs/wordsplit/wordsplit.c:2605 msgid "command substitution" msgstr "kommandosubstitution" #: grecs/wordsplit/wordsplit.c:2607 grecs/wordsplit/wordsplit.c:2615 msgid "coalesce list" msgstr "förena lista" #: grecs/wordsplit/wordsplit.c:2609 msgid "tilde expansion" msgstr "tilde-expansion" #: grecs/wordsplit/wordsplit.c:2611 msgid "variable expansion" msgstr "variabelexpansion" #: grecs/wordsplit/wordsplit.c:2613 msgid "quote removal" msgstr "citatborttagning" #: grecs/wordsplit/wordsplit.c:2617 msgid "path expansion" msgstr "sökvägsexpansion" #: grecs/wordsplit/wordsplit.c:2642 #, c-format msgid "(%02d) Input:%.*s;" msgstr "(%02d) Indata:%.*s;" #: grecs/wordsplit/wordsplit.c:2668 msgid "Initial list:" msgstr "Ursprunglig lista:" #: grecs/wordsplit/wordsplit.c:2683 msgid "Coalesced list:" msgstr "Förenad lista:" #: grecs/wordsplit/wordsplit.c:2853 msgid "no error" msgstr "inget fel" #: grecs/wordsplit/wordsplit.c:2854 msgid "missing closing quote" msgstr "saknar avslutande citattecken" #: grecs/wordsplit/wordsplit.c:2856 msgid "invalid wordsplit usage" msgstr "ogiltig orddelningsanvändning" #: grecs/wordsplit/wordsplit.c:2857 msgid "unbalanced curly brace" msgstr "obalanserad klammerparentes" #: grecs/wordsplit/wordsplit.c:2858 msgid "undefined variable" msgstr "odefinierad variabel" #: grecs/wordsplit/wordsplit.c:2859 msgid "input exhausted" msgstr "slut pÃ¥ indata" #: grecs/wordsplit/wordsplit.c:2860 msgid "unbalanced parenthesis" msgstr "obalanserad parentes" #: grecs/wordsplit/wordsplit.c:2861 msgid "globbing error" msgstr "matchningsfel" #: grecs/wordsplit/wordsplit.c:2862 #, fuzzy msgid "user-defined error" msgstr "läsfel" #: grecs/wordsplit/wordsplit.c:2863 msgid "invalid parameter number in assignment" msgstr "" #: grecs/wordsplit/wordsplit.c:2875 msgid "unknown error" msgstr "okänt fel" #: grecs/wordsplit/wordsplit.c:2884 #, c-format msgid "missing closing %c (start near #%lu)" msgstr "saknar stängande %c (starten nära #%lu)" #~ msgid "unterminated regexp" #~ msgstr "oavslutat reguttr" #~ msgid "unrecognized flag: %c" #~ msgstr "okänd flagga: %c" #~ msgid "out of memory" #~ msgstr "slut pÃ¥ minne" #~ msgid "%s: unknown keyword" #~ msgstr "%s: okänt nyckelord" #~ msgid "(%02d) Restart:%.*s;" #~ msgstr "(%02d) Omstart:%.*s;" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/po/LINGUAS�����������������������������������������������������������������������������0000644�0001750�0001750�00000000052�13511403766�014634� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������da de eo es fr hu nl pl pt_BR sr sv uk vi ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/po/en@quot.header����������������������������������������������������������������������0000644�0001750�0001750�00000002263�13244106112�016366� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# All this catalog "translates" are quotation characters. # The msgids must be ASCII and therefore cannot contain real quotation # characters, only substitutes like grave accent (0x60), apostrophe (0x27) # and double quote (0x22). These substitutes look strange; see # http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html # # This catalog translates grave accent (0x60) and apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019). # It also translates pairs of apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019) # and pairs of quotation mark (0x22) to # left double quotation mark (U+201C) and right double quotation mark (U+201D). # # When output to an UTF-8 terminal, the quotation characters appear perfectly. # When output to an ISO-8859-1 terminal, the single quotation marks are # transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to # grave/acute accent (by libiconv), and the double quotation marks are # transliterated to 0x22. # When output to an ASCII terminal, the single quotation marks are # transliterated to apostrophes, and the double quotation marks are # transliterated to 0x22. # ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/po/uk.po�������������������������������������������������������������������������������0000644�0001750�0001750�00000065203�13512402637�014574� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Ukrainian translation of direvent. # Copyright (C) 2014 Free Software Foundation, Inc. # Copyright (C) 2014 Sergey Poznyakoff # This file is distributed under the same license as the direvent package. # # Yuri Chornoivan <yurchor@ukr.net>, 2014, 2016. msgid "" msgstr "" "Project-Id-Version: direvent 5.1\n" "Report-Msgid-Bugs-To: bug-direvent@gnu.org.ua\n" "POT-Creation-Date: 2019-07-13 19:23+0300\n" "PO-Revision-Date: 2016-07-07 22:43+0300\n" "Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n" "Language-Team: Ukrainian <translation-team-uk@lists.sourceforge.net>\n" "Language: uk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Generator: Lokalize 1.5\n" #: cmdline.opt:26 msgid "increase debug level" msgstr "підвищити рівень діагноÑтуваннÑ" #: cmdline.opt:32 msgid "PRIO" msgstr "ПРІО" #: cmdline.opt:32 msgid "" "log everything with priority PRIO and higher to the stderr, as well as to " "the syslog" msgstr "" "запиÑати журнал уÑÑ–Ñ… подій з пріоритетніÑтю ПРІО та вищою до stderr, а також " "до syslog" #: cmdline.opt:41 msgid "NAME" msgstr "ÐÐЗВÐ" #: cmdline.opt:41 msgid "set syslog facility" msgstr "вÑтановити можливоÑті syslog" #: cmdline.opt:47 msgid "remain in foreground" msgstr "не переходити у фоновий режим" #: cmdline.opt:53 msgid "DIR" msgstr "КÐТ" #: cmdline.opt:53 msgid "add include directory" msgstr "додати каталог включеннÑ" #: cmdline.opt:59 msgid "PROG" msgstr "ПРОГРÐМÐ" #: cmdline.opt:59 msgid "self-test mode" msgstr "режим Ñамоперевірки" #: cmdline.opt:65 msgid "FILE" msgstr "ФÐЙЛ" #: cmdline.opt:65 msgid "set PID file" msgstr "Ñтановити файл PID" #: cmdline.opt:71 msgid "check configuration file and exit" msgstr "перевірити файл налаштувань Ñ– завершити роботу" #: cmdline.opt:77 msgid "USER" msgstr "КОРИСТУВÐЧ" #: cmdline.opt:77 msgid "run as this user" msgstr "виконати від імені вказаного кориÑтувача" #: cmdline.opt:87 msgid "show configuration file summary" msgstr "показати резюме щодо файла налаштувань" #: cmdline.opt:81 msgid "Other options" msgstr "Інші параметри" #: cmdline.opt:93 msgid "Give this help list" msgstr "ВивеÑти ці довідкові дані" #: cmdline.opt:93 msgid "Give a short usage message" msgstr "ВивеÑти коротке Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ñ‰Ð¾Ð´Ð¾ викориÑтаннÑ" #: cmdline.opt:93 msgid "Print program version" msgstr "ВивеÑти дані щодо верÑÑ–Ñ— програми" #: cmdline.opt:13 msgid "GNU direvent monitors changes in directories" msgstr "GNU direvent Ñтежить за змінами у каталогах" #: cmdline.opt:15 msgid "[CONFIG]" msgstr "[ÐÐЛÐШТУВÐÐÐЯ]" #: cmdline.opt:95 #, c-format msgid "" "The optional CONFIG argument supplies the name of the configuration file\n" "to use instead of %s.\n" "\n" msgstr "" "Ðеобов’Ñзковий аргумент ÐÐЛÐШТУВÐÐÐЯ визначає назву файл налаштувань,\n" "Ñким Ñлід ÑкориÑтатиÑÑ Ð·Ð°Ð¼Ñ–Ñть %s.\n" "\n" #. TRANSLATORS: %s is one of: inotify, kqueue #: cmdline.opt:99 #, c-format msgid "" "This direvent uses %s interface.\n" "\n" msgstr "" "Ð¦Ñ Ð²ÐµÑ€ÑÑ–Ñ direvent викориÑтовує Ñ–Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ %s.\n" "\n" #: cmdline.opt:102 #, c-format msgid "Include search path:\n" msgstr "ШлÑÑ… пошуку включень:\n" #: cmdline.opt:105 #, c-format msgid "No include search path.\n" msgstr "Ðемає шлÑху пошуку включень.\n" #: src/config.c:63 #, c-format msgid "unknown syslog facility: %s" msgstr "невідомі можливоÑті syslog: %s" #: src/config.c:80 #, c-format msgid "unknown syslog priority: %s" msgstr "невідома пріоритетніÑть syslog: %s" #: src/config.c:88 msgid "unexpected block statement" msgstr "неочікувана блокова команда" #: src/config.c:97 #, c-format msgid "expected %s" msgstr "мало бути %s" #: src/config.c:102 #, c-format msgid "expected %s, but found %s" msgstr "мало бути %s, виÑвлено %s" #: src/config.c:124 #, c-format msgid "unknown syslog facility `%s'" msgstr "невідомі можливоÑті syslog: «%s»" #: src/config.c:133 src/config.c:606 msgid "name" msgstr "назва" #: src/config.c:134 msgid "" "Set syslog facility. Arg is one of the following: user, daemon, auth, " "authpriv, mail, cron, local0 through local7 (case-insensitive), or a " "facility number." msgstr "" "Ð’Ñтановити можливоÑті syslog. Ðргументом, арг, може бути один з таких " "Ñ€Ñдків: user, daemon, auth, authpriv, mail, cron, local0 through local7 (без " "Ð²Ñ€Ð°Ñ…ÑƒÐ²Ð°Ð½Ð½Ñ Ñ€ÐµÐ³Ñ–Ñтру) або номер можливоÑті." #: src/config.c:139 grecs/src/format.c:36 grecs/src/tree.c:69 msgid "string" msgstr "Ñ€Ñдок" #: src/config.c:139 msgid "Tag syslog messages with this string" msgstr "Мітити Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ syslog вказаним Ñ€Ñдком" #: src/config.c:142 grecs/src/format.c:141 msgid "arg" msgstr "арг" #: src/config.c:143 msgid "Prefix each message with its priority" msgstr "Додавати перед кожним повідомленнÑм його рівень пріоритетноÑті" #: src/config.c:191 #, c-format msgid "%s: recursion depth does not match previous definition" msgstr "%s: глибина рекурÑÑ–Ñ— не відповідає попередньому визначенню" #: src/config.c:212 msgid "no paths configured" msgstr "шлÑхів не налаштовано" #: src/config.c:217 msgid "no command configured" msgstr "команд не налаштовано" #: src/config.c:229 grecs/src/tree.c:665 msgid "invalid use of block statement" msgstr "некоректне викориÑÑ‚Ð°Ð½Ð½Ñ Ð±Ð»Ð¾ÐºÐ¾Ð²Ð¾Ñ— команди" #: src/config.c:274 msgid "expected \"recursive\" or end of statement" msgstr "мало бути вказано «recursive» або завершено команду" #: src/config.c:289 msgid "surplus argument" msgstr "зайвий аргумент" #: src/config.c:295 src/config.c:446 msgid "unexpected list" msgstr "неочікуваний ÑпиÑок" #: src/config.c:326 src/config.c:341 src/config.c:356 msgid "unrecognized event code" msgstr "нерозпізнаний код події" #: src/config.c:438 msgid "surplus arguments" msgstr "зайві аргументи" #: src/config.c:452 msgid "no such user" msgstr "такого запиÑу кориÑтувача не Ñ–Ñнує" #: src/config.c:459 msgid "no such group" msgstr "такої групи немає" #: src/config.c:501 msgid "unrecognized option" msgstr "нерозпізнаний параметр" #: src/config.c:595 msgid "Pathname to watch" msgstr "ШлÑÑ… до каталогу, за Ñким веÑтиметьÑÑ ÑпоÑтереженнÑ" #: src/config.c:598 msgid "Events to watch for" msgstr "Події, за Ñкими Ñлід веÑти ÑпоÑтереженнÑ" #: src/config.c:601 msgid "regexp" msgstr "форм. вираз" #: src/config.c:601 msgid "Files to watch for" msgstr "Файли, за Ñкими Ñлід веÑти ÑпоÑтереженнÑ" #: src/config.c:604 msgid "Command to execute on event" msgstr "Команда, Ñку Ñлід виконати, Ñкщо ÑтанетьÑÑ Ð¿Ð¾Ð´Ñ–Ñ" #: src/config.c:606 msgid "Run command as this user" msgstr "КориÑтувач, від імені Ñкого Ñлід виконати команду" #: src/config.c:609 msgid "seconds" msgstr "Ñекунди" #: src/config.c:609 msgid "Timeout for the command" msgstr "Тайм-аут Ð´Ð»Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸" #: src/config.c:611 msgid "List of additional options" msgstr "СпиÑок додаткових параметрів" #: src/config.c:614 msgid "<arg: string> <arg: string>..." msgstr "<арг: Ñ€Ñдок> <арг: Ñ€Ñдок>..." #: src/config.c:615 msgid "Modify environment" msgstr "Змінити Ñередовище" #: src/config.c:622 msgid "Run as this user" msgstr "Виконати від імені вказаного кориÑтувача" #: src/config.c:624 msgid "Run in foreground" msgstr "Ðе переходити у фоновий режим під Ñ‡Ð°Ñ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ" #: src/config.c:626 msgid "file" msgstr "файл" #: src/config.c:626 msgid "Set pid file name" msgstr "Ð’Ñтановити назву файла pid" #: src/config.c:628 msgid "Configure syslog logging" msgstr "Ðалаштувати Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð¶ÑƒÑ€Ð½Ð°Ð»Ñƒ syslog" #: src/config.c:630 msgid "level" msgstr "рівень" #: src/config.c:630 msgid "Set debug level" msgstr "Ð’Ñтановити рівень діагноÑтики" #: src/config.c:632 msgid "Configure event watcher" msgstr "Ðалаштувати заÑіб ÑÑ‚ÐµÐ¶ÐµÐ½Ð½Ñ Ð·Ð° подіÑми" #: src/config.c:643 msgid "" "Configuration file structure for direvent.\n" "For more information, use `info direvent configuration'." msgstr "" "Структура файла налаштувань Ð´Ð»Ñ direvent.\n" "Щоб дізнатиÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ, віддайте команду «info direvent configuration»." #: src/direvent.c:142 src/direvent.c:164 src/watcher.c:93 src/watcher.c:125 msgid "not enough memory" msgstr "недоÑтатньо пам’Ñті" #: src/direvent.c:274 #, c-format msgid "cannot open pidfile %s for writing: %s" msgstr "не вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ файл pid %s Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñу даних: %s" #: src/direvent.c:302 #, c-format msgid "no user with UID %lu" msgstr "немає кориÑтувача з UID %lu" #: src/direvent.c:420 #, c-format msgid "cannot run `%s': fork failed: %s" msgstr "не вдалоÑÑ Ð·Ð°Ð¿ÑƒÑтити «%s»: помилка розгалуженнÑ: %s" #: src/direvent.c:480 msgid "too many arguments" msgstr "забагато аргументів" #: src/direvent.c:522 #, c-format msgid "%s %s started" msgstr "Запущено %s %s" #: src/direvent.c:546 #, c-format msgid "%s %s stopped" msgstr "Завершено роботу %s %s" #: src/environ.c:25 msgid "environment: " msgstr "Ñередовище: " #: src/progman.c:142 #, c-format msgid "process %lu exited successfully" msgstr "Ð¿Ñ€Ð¾Ñ†ÐµÑ %lu уÑпішно завершив роботу" #: src/progman.c:145 #, c-format msgid "process %lu failed with status %d" msgstr "Ð¿Ñ€Ð¾Ñ†ÐµÑ %lu завершив роботу помилкою, Ñтан %d" #: src/progman.c:155 #, c-format msgid "process %lu terminated on signal %d" msgstr "роботу процеÑу %lu перервано Ñигналом %d" #: src/progman.c:158 #, c-format msgid "process %lu stopped on signal %d" msgstr "роботу процеÑу %lu зупинено Ñигналом %d" #: src/progman.c:163 #, c-format msgid "process %lu dumped core" msgstr "Ñтворено дамп Ñдра процеÑу %lu" #: src/progman.c:167 #, c-format msgid "process %lu terminated with unrecognized status" msgstr "роботу процеÑу %lu перервано з нерозпізнаним Ñтаном" #: src/progman.c:228 msgid "begin scanning process list" msgstr "розпочато ÑÐºÐ°Ð½ÑƒÐ²Ð°Ð½Ð½Ñ ÑпиÑку процеÑів" #: src/progman.c:232 #, c-format msgid "process %lu timed out" msgstr "Ñ‡Ð°Ñ Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ð° дані від процеÑу %lu завершено" #: src/progman.c:241 #, c-format msgid "scheduling alarm in %lu seconds" msgstr "Ð½Ð°Ð³Ð°Ð´ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð°Ð¿Ð»Ð°Ð½Ð¾Ð²Ð°Ð½Ð¾ за %lu Ñекунд" #: src/progman.c:322 #, c-format msgid "cannot start redirector for %s, pipe failed: %s" msgstr "" "не вдалоÑÑ Ð·Ð°Ð¿ÑƒÑтити переÑпрÑмовувач Ð´Ð»Ñ %s, помилка Ð¿ÐµÑ€ÐµÐ´Ð°Ð²Ð°Ð½Ð½Ñ ÐºÐ°Ð½Ð°Ð»Ð¾Ð¼: %s" #: src/progman.c:354 #, c-format msgid "cannot run redirector `%s': fork failed: %s" msgstr "не вдалоÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ переÑпрÑÐ¼Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Â«%s»: помилка розгалуженнÑ: %s" #: src/progman.c:359 #, c-format msgid "redirector for %s started, pid=%lu" msgstr "запущено переÑпрÑÐ¼Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ %s, pid=%lu" #: src/progman.c:455 #, c-format msgid "starting %s, dir=%s, file=%s" msgstr "розпочинаємо роботу %s, каталог=%s, файл=%s" #: src/progman.c:484 #, c-format msgid "cannot change to %s: %s" msgstr "не вдалоÑÑ Ð¿ÐµÑ€ÐµÐ¹Ñ‚Ð¸ до %s: %s" #: src/progman.c:512 #, c-format msgid "%s running; dir=%s, file=%s, pid=%lu" msgstr "працює %s; каталог=%s, файл=%s, pid=%lu" #: src/progman.c:534 #, c-format msgid "waiting for %s (%lu) to terminate" msgstr "очікуємо на Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸ %s (%lu)" #: src/watcher.c:183 src/watcher.c:513 #, c-format msgid "removing watcher %s" msgstr "вилучаємо ÑÑ‚ÐµÐ¶ÐµÐ½Ð½Ñ %s" #: src/watcher.c:195 msgid "no watchers left; exiting now" msgstr "" #: src/watcher.c:262 #, c-format msgid "installing CREATE sentinel for %s" msgstr "" #: src/watcher.c:275 #, c-format msgid "creating watcher %s" msgstr "Ñтворюємо заÑіб ÑÑ‚ÐµÐ¶ÐµÐ½Ð½Ñ %s" #: src/watcher.c:281 src/watcher.c:296 #, c-format msgid "cannot set watcher on %s: %s" msgstr "не вдалоÑÑ Ð²Ñтановити ÑÑ‚ÐµÐ¶ÐµÐ½Ð½Ñ Ð·Ð° %s: %s" #: src/watcher.c:377 #, c-format msgid "cannot create watcher %s/%s: not enough memory" msgstr "не вдалоÑÑ Ñтворити заÑіб ÑÑ‚ÐµÐ¶ÐµÐ½Ð½Ñ %s/%s, недоÑтатньо пам’Ñті" #: src/watcher.c:384 #, c-format msgid "cannot create watcher %s/%s, stat failed: %s" msgstr "" "не вдалоÑÑ Ñтворити заÑіб ÑÑ‚ÐµÐ¶ÐµÐ½Ð½Ñ %s/%s, помилка Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ ÑтатиÑтичних " "даних: %s" #: src/watcher.c:430 #, c-format msgid "cannot open directory %s: %s" msgstr "не вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ каталог %s: %s" #: src/watcher.c:447 #, c-format msgid "cannot stat %s/%s: not enough memory" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ ÑтатиÑтичні дані щодо %s/%s: недоÑтатньо пам’Ñті" #: src/watcher.c:452 #, c-format msgid "cannot stat %s: %s" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ ÑтатиÑтичні дані щодо %s: %s" #: src/watcher.c:497 msgid "no event handlers configured" msgstr "не налаштовано жодного обробника подій" #: src/watcher.c:502 msgid "no event handlers installed" msgstr "не вÑтановлено жодного обробника подій" #: grecs/src/format.c:33 msgid "void" msgstr "" #: grecs/src/format.c:46 msgid "number" msgstr "" #: grecs/src/format.c:49 msgid "time" msgstr "" #: grecs/src/format.c:52 msgid "boolean" msgstr "" #: grecs/src/format.c:55 msgid "IPv4" msgstr "" #: grecs/src/format.c:58 msgid "CIDR" msgstr "" #: grecs/src/format.c:61 #, fuzzy msgid "hostname" msgstr "назва" #: grecs/src/format.c:64 msgid "sockaddr" msgstr "" #: grecs/src/format.c:67 msgid "section" msgstr "" #: grecs/src/format.c:70 msgid "null" msgstr "" #: grecs/src/format.c:133 msgid "Disabled;" msgstr "Вимкнено;" #: grecs/src/opthelp.c:123 grecs/src/opthelp.c:269 msgid "Usage:" msgstr "ВикориÑтаннÑ:" #: grecs/src/opthelp.c:127 msgid "OPTION" msgstr "ПÐРÐМЕТР" #: grecs/src/opthelp.c:132 grecs/src/opthelp.c:427 msgid "Aliases" msgstr "Замінники" #: grecs/src/opthelp.c:132 grecs/src/opthelp.c:427 msgid "Alias" msgstr "Замінник" #: grecs/src/opthelp.c:186 msgid "" "Mandatory or optional arguments to long options are also mandatory or " "optional for any corresponding short options." msgstr "" "Обов’Ñзкові Ñ– додаткові аргументи до довгих форм запиÑу параметрів Ñ” також " "об’Ñзовими або додатковими Ð´Ð»Ñ Ð²ÑÑ–Ñ… відповідних Ñкорочених форм запиÑу." #. TRANSLATORS: The placeholder indicates the bug-reporting #. address for this package. Please add _another line_ saying #. "Report translation bugs to <...>\n" with the address for #. translation bugs (typically your translation team's web or #. email address). #: grecs/src/opthelp.c:202 #, c-format msgid "Report bugs to %s.\n" msgstr "ПовідомлÑйте про вади на адреÑу %s.\n" #: grecs/src/opthelp.c:205 #, c-format msgid "%s home page: <%s>\n" msgstr "Ð”Ð¾Ð¼Ð°ÑˆÐ½Ñ Ñторінка %s: <%s>\n" #. TRANSLATORS: Translate "(C)" to the copyright symbol #. (C-in-a-circle), if this symbol is available in the user's #. locale. Otherwise, do not translate "(C)"; leave it as-is. #: grecs/src/opthelp.c:457 msgid "(C)" msgstr "©" #: grecs/src/opthelp.c:466 msgid "" "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." "html>\n" "This is free software: you are free to change and redistribute it.\n" "There is NO WARRANTY, to the extent permitted by law.\n" "\n" msgstr "" "Умови Ð»Ñ–Ñ†ÐµÐ½Ð·ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð¸ÐºÐ»Ð°Ð´ÐµÐ½Ð¾ у GPLv3+: GNU GPL верÑÑ–Ñ— 3 або новішій, <http://" "gnuorg/licenses/gpl.html>\n" "Це вільне програмне забезпеченнÑ: ви можете вільно змінювати Ñ– поширювати " "його.\n" "Вам не надаєтьÑÑ Ð–ÐžÐ”ÐИХ ГÐРÐÐТІЙ, окрім гарантій передбачених " "законодавÑтвом.\n" #: grecs/src/opthelp.c:483 msgid "Written by " msgstr "Ðвтор —" #. TRANSLATORS: This string is used as a delimiter between #. authors' names as in: #. #. Written by Winnie the Pooh, Piglet ... #. #: grecs/src/opthelp.c:489 msgid ", " msgstr ", " #. TRANSLATORS: This string acts as a delimiter before the #. last author's names, e.g.: #. #. Written by Winnie the Pooh, Piglet and Christopher Robin. #. #: grecs/src/opthelp.c:495 msgid " and " msgstr " та " #: grecs/src/path-parser.c:62 #, c-format msgid "cannot open `%s'" msgstr "не вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ «%s»" #: grecs/src/path-parser.c:108 grecs/src/path-parser.c:123 msgid "unexpected end of file" msgstr "неочікуваний Ñимвол ÐºÑ–Ð½Ñ†Ñ Ñ„Ð°Ð¹Ð»Ð°" #: grecs/src/path-parser.c:143 msgid "parse error" msgstr "помилка обробки" #: grecs/src/preproc.c:448 grecs/src/preproc.c:470 #, c-format msgid "Cannot stat `%s'" msgstr "Ðе вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ ÑтатиÑтичні дані щодо «%s»" #: grecs/src/preproc.c:453 grecs/src/preproc.c:458 msgid "Recursive inclusion" msgstr "РекурÑивне включеннÑ" #: grecs/src/preproc.c:461 #, c-format msgid "`%s' already included here" msgstr "«%s» вже включено тут" #: grecs/src/preproc.c:465 #, c-format msgid "`%s' already included at top level" msgstr "«%s» вже включено на вищому рівні" #: grecs/src/preproc.c:480 #, c-format msgid "Cannot open `%s'" msgstr "Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ «%s»" #: grecs/src/preproc.c:595 msgid "Cannot parse include line" msgstr "Ðе вдалоÑÑ Ð¾Ð±Ñ€Ð¾Ð±Ð¸Ñ‚Ð¸ Ñ€Ñдок включеннÑ" #: grecs/src/preproc.c:598 msgid "invalid include statement" msgstr "некоректна команда включеннÑ" #: grecs/src/preproc.c:624 msgid "read error" msgstr "помилка читаннÑ" #: grecs/src/preproc.c:632 #, c-format msgid "%s: No such file or directory" msgstr "%s: немає такого файла або каталогу" #: grecs/src/preproc.c:698 #, c-format msgid "Unable to start external preprocessor `%s'" msgstr "Ðе вдалоÑÑ Ð·Ð°Ð¿ÑƒÑтити зовнішній заÑіб попередньої обробки «%s»" #: grecs/src/preproc.c:773 grecs/src/preproc.c:793 #, c-format msgid "Cannot run `%s'" msgstr "Ðе вдалоÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ «%s»" #: grecs/src/symtab.c:236 msgid "element not found in table" msgstr "елемента немає у таблиці" #: grecs/src/symtab.c:238 msgid "symbol table is full" msgstr "у таблиці Ñимволів не залишилоÑÑ Ð¼Ñ–ÑцÑ" #: grecs/src/tree.c:70 msgid "list" msgstr "" #: grecs/src/tree.c:71 #, fuzzy msgid "one or more arguments" msgstr "забагато аргументів" #: grecs/src/tree.c:75 #, fuzzy msgid "unrecognized type; please report" msgstr "нерозпізнаний код події" #: grecs/src/tree.c:320 msgid "section keyword used as a scalar" msgstr "" #: grecs/src/tree.c:322 msgid "scalar keyword used as a section" msgstr "" #: grecs/src/tree.c:325 #, fuzzy msgid "unknown keyword" msgstr "Ðевідоме ключове Ñлово" #: grecs/src/tree.c:360 #, c-format msgid "%s: not a valid boolean value" msgstr "%s: не Ñ” коректним булевим значеннÑм" #: grecs/src/tree.c:391 #, c-format msgid "%s: UNIX socket name too long" msgstr "%s: назва Ñокета UNIX Ñ” надто довгою" #: grecs/src/tree.c:420 grecs/src/tree.c:644 #, c-format msgid "%s: not a valid IP address or hostname" msgstr "%s: не Ñ” коректною IP-адреÑою або назвою вузла" #: grecs/src/tree.c:444 #, c-format msgid "%s: not a valid port number" msgstr "%s: не Ñ” коректним номером порту" #: grecs/src/tree.c:452 msgid "missing port number" msgstr "не вказано номера порту" #: grecs/src/tree.c:501 msgid "numeric overflow" msgstr "Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ñ‡Ð¸Ñлового типу" #: grecs/src/tree.c:506 msgid "value out of allowed range" msgstr "Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð¾Ð·Ð° припуÑтимим діапазоном" #: grecs/src/tree.c:541 grecs/src/tree.c:571 #, c-format msgid "not a number (stopped near `%s')" msgstr "не Ñ” чиÑлом (зупинено у районі «%s»)" #: grecs/src/tree.c:635 #, c-format msgid "%s: not a valid IP address" msgstr "%s: не Ñ” коректною IP-адреÑою" #: grecs/src/tree.c:774 #, c-format msgid "too many arguments to `%s'; missing semicolon?" msgstr "забагато аргументів до «%s»; пропущено крапку з комою?" #: grecs/src/tree.c:788 grecs/src/tree.c:836 #, c-format msgid "INTERNAL ERROR at %s:%d: unhandled data type %d" msgstr "Ð’ÐУТРІШÐЯ ПОМИЛКÐ, %s:%d: непридатний до обробки тип даних %d" #: grecs/src/tree.c:803 #, c-format msgid "%s: incompatible data type in list item #%d" msgstr "%s: неÑуміÑний тип даних у пункті ÑпиÑку %d" #: grecs/src/tree.c:823 #, c-format msgid "incompatible data type for `%s'" msgstr "неÑуміÑний тип даних Ð´Ð»Ñ Â«%s»" #: grecs/wordsplit/wordsplit.c:69 grecs/wordsplit/wordsplit.c:2855 msgid "memory exhausted" msgstr "пам'Ñть вичерпано" #: grecs/wordsplit/wordsplit.c:121 msgid "memory exhausted while trying to store error context" msgstr "" #: grecs/wordsplit/wordsplit.c:868 msgid "Restarting" msgstr "" #: grecs/wordsplit/wordsplit.c:1607 #, c-format msgid "%.*s: variable null or not set" msgstr "%.*s: змінна Ð¿Ð¾Ñ€Ð¾Ð¶Ð½Ñ Ð°Ð±Ð¾ Ñ—Ñ— Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð½Ðµ вÑтановлено" #: grecs/wordsplit/wordsplit.c:1637 #, c-format msgid "warning: undefined variable `%.*s'" msgstr "попередженнÑ: невизначена змінна «%.*s»" #: grecs/wordsplit/wordsplit.c:2141 #, c-format msgid "no files match pattern %s" msgstr "жоден файл не відповідає зразку %s" #: grecs/wordsplit/wordsplit.c:2603 msgid "WS trimming" msgstr "ÐžÐ±Ñ€Ñ–Ð·Ð°Ð½Ð½Ñ Ð¿Ñ€Ð¾Ð±Ñ–Ð»Ñ–Ð²" #: grecs/wordsplit/wordsplit.c:2605 msgid "command substitution" msgstr "заміна команд" #: grecs/wordsplit/wordsplit.c:2607 grecs/wordsplit/wordsplit.c:2615 msgid "coalesce list" msgstr "об’єднати ÑпиÑок" #: grecs/wordsplit/wordsplit.c:2609 msgid "tilde expansion" msgstr "Ñ€Ð¾Ð·Ð³Ð¾Ñ€Ñ‚Ð°Ð½Ð½Ñ Ñ‚Ð¸Ð»ÑŒÐ´Ð¸" #: grecs/wordsplit/wordsplit.c:2611 msgid "variable expansion" msgstr "Ñ€Ð¾Ð·Ð³Ð¾Ñ€Ñ‚Ð°Ð½Ð½Ñ Ð·Ð¼Ñ–Ð½Ð½Ð¸Ñ…" #: grecs/wordsplit/wordsplit.c:2613 msgid "quote removal" msgstr "Ð²Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ð»Ð°Ð¿Ð¾Ðº" #: grecs/wordsplit/wordsplit.c:2617 msgid "path expansion" msgstr "Ñ€Ð¾Ð·Ð³Ð¾Ñ€Ñ‚Ð°Ð½Ð½Ñ ÑˆÐ»Ñху" #: grecs/wordsplit/wordsplit.c:2642 #, c-format msgid "(%02d) Input:%.*s;" msgstr "(%02d) Вхідні дані:%.*s;" #: grecs/wordsplit/wordsplit.c:2668 msgid "Initial list:" msgstr "Початковий ÑпиÑок:" #: grecs/wordsplit/wordsplit.c:2683 msgid "Coalesced list:" msgstr "Об’єднаний ÑпиÑок:" #: grecs/wordsplit/wordsplit.c:2853 msgid "no error" msgstr "без помилок" #: grecs/wordsplit/wordsplit.c:2854 msgid "missing closing quote" msgstr "пропущено кінцеві лапки" #: grecs/wordsplit/wordsplit.c:2856 msgid "invalid wordsplit usage" msgstr "некоректне викориÑÑ‚Ð°Ð½Ð½Ñ Ð¿Ð¾Ð´Ñ–Ð»Ñƒ Ñлів" #: grecs/wordsplit/wordsplit.c:2857 msgid "unbalanced curly brace" msgstr "незакрита фігурна дужка" #: grecs/wordsplit/wordsplit.c:2858 msgid "undefined variable" msgstr "невизначена змінна" #: grecs/wordsplit/wordsplit.c:2859 msgid "input exhausted" msgstr "вичерпано вхідні дані" #: grecs/wordsplit/wordsplit.c:2860 msgid "unbalanced parenthesis" msgstr "дужка без відповідника" #: grecs/wordsplit/wordsplit.c:2861 msgid "globbing error" msgstr "помилка викориÑÑ‚Ð°Ð½Ð½Ñ Ð·Ð°Ð¼Ñ–Ð½Ð½Ð¸ÐºÑ–Ð²" #: grecs/wordsplit/wordsplit.c:2862 #, fuzzy msgid "user-defined error" msgstr "помилка читаннÑ" #: grecs/wordsplit/wordsplit.c:2863 msgid "invalid parameter number in assignment" msgstr "" #: grecs/wordsplit/wordsplit.c:2875 msgid "unknown error" msgstr "невідома помилка" #: grecs/wordsplit/wordsplit.c:2884 #, c-format msgid "missing closing %c (start near #%lu)" msgstr "пропущено кінцеве %c (початок у районі %lu)" #~ msgid "unterminated regexp" #~ msgstr "незавершений формальний вираз" #~ msgid "unrecognized flag: %c" #~ msgstr "нерозпізнаний прапорець: %c" #~ msgid "out of memory" #~ msgstr "недоÑтатньо пам’Ñті" #~ msgid "%s: unknown keyword" #~ msgstr "%s: невідоме ключове Ñлово" #~ msgid "(%02d) Restart:%.*s;" #~ msgstr "(%02d) ПерезапуÑк:%.*s;" #~ msgid "INTERNAL ERROR at %s:%d" #~ msgstr "Ð’ÐУТРІШÐЯ ПОМИЛКÐ, %s:%d" #~ msgid "ignoring duplicate definition" #~ msgstr "ігноруємо дублікат визначеннÑ" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/po/hu.po�������������������������������������������������������������������������������0000644�0001750�0001750�00000053677�13512402637�014605� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Hungarian translation for direvent. # Copyright (C) 2014, 2015, 2017 Free Software Foundation, Inc. # This file is distributed under the same license as the direvent package. # # Balázs Úr <urbalazs@gmail.com>, 2014, 2015, 2017. msgid "" msgstr "" "Project-Id-Version: direvent 5.1\n" "Report-Msgid-Bugs-To: bug-direvent@gnu.org.ua\n" "POT-Creation-Date: 2019-07-13 19:23+0300\n" "PO-Revision-Date: 2017-04-27 22:18+0200\n" "Last-Translator: Balázs Úr <urbalazs@gmail.com>\n" "Language-Team: Hungarian <translation-team-hu@lists.sourceforge.net>\n" "Language: hu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Lokalize 1.2\n" #: cmdline.opt:26 msgid "increase debug level" msgstr "hibakeresési szint növelése" #: cmdline.opt:32 msgid "PRIO" msgstr "PRIO" #: cmdline.opt:32 msgid "" "log everything with priority PRIO and higher to the stderr, as well as to " "the syslog" msgstr "" "minden PRIO és magasabb prioritással rendelkezÅ‘ naplózása a szabványos " "hibakimenetre, valamint a syslog programba" #: cmdline.opt:41 msgid "NAME" msgstr "NÉV" #: cmdline.opt:41 msgid "set syslog facility" msgstr "syslog képesség beállítása" #: cmdline.opt:47 msgid "remain in foreground" msgstr "maradjon elÅ‘térben" #: cmdline.opt:53 msgid "DIR" msgstr "KÖNYVTÃR" #: cmdline.opt:53 msgid "add include directory" msgstr "felvételi könyvtár hozzáadása" #: cmdline.opt:59 msgid "PROG" msgstr "PROG" #: cmdline.opt:59 msgid "self-test mode" msgstr "önellenÅ‘rzÅ‘ mód" #: cmdline.opt:65 msgid "FILE" msgstr "FÃJL" #: cmdline.opt:65 msgid "set PID file" msgstr "PID fájl beállítása" #: cmdline.opt:71 msgid "check configuration file and exit" msgstr "beállítófájl ellenÅ‘rzése és kilépés" #: cmdline.opt:77 msgid "USER" msgstr "FELHASZNÃLÓ" #: cmdline.opt:77 msgid "run as this user" msgstr "futtatás ezen felhasználóként" #: cmdline.opt:87 msgid "show configuration file summary" msgstr "beállítófájl összegzés megjelenítése" #: cmdline.opt:81 msgid "Other options" msgstr "Egyéb beállítások" #: cmdline.opt:93 msgid "Give this help list" msgstr "Ezen súgólista megjelenítése" #: cmdline.opt:93 msgid "Give a short usage message" msgstr "Egy rövid használati utasítás megjelenítése" #: cmdline.opt:93 msgid "Print program version" msgstr "Programverzió kiírása" #: cmdline.opt:13 msgid "GNU direvent monitors changes in directories" msgstr "A GNU direvent változásokat figyel meg a könyvtárakban" #: cmdline.opt:15 msgid "[CONFIG]" msgstr "[BEÃLLÃTÃS]" #: cmdline.opt:95 #, c-format msgid "" "The optional CONFIG argument supplies the name of the configuration file\n" "to use instead of %s.\n" "\n" msgstr "" "Az elhagyható BEÃLLÃTÃS argumentum szolgáltatja a használandó beállítófájl\n" "nevét %s helyett.\n" "\n" #. TRANSLATORS: %s is one of: inotify, kqueue #: cmdline.opt:99 #, c-format msgid "" "This direvent uses %s interface.\n" "\n" msgstr "" "Ez a direvent %s felületet használ.\n" "\n" #: cmdline.opt:102 #, c-format msgid "Include search path:\n" msgstr "Felvételi keresési útvonal:\n" #: cmdline.opt:105 #, c-format msgid "No include search path.\n" msgstr "Nincs felvételi keresési útvonal.\n" #: src/config.c:63 #, c-format msgid "unknown syslog facility: %s" msgstr "ismeretlen syslog képesség: %s" #: src/config.c:80 #, c-format msgid "unknown syslog priority: %s" msgstr "ismeretlen syslog prioritás: %s" #: src/config.c:88 msgid "unexpected block statement" msgstr "nem várt blokk utasítás" #: src/config.c:97 #, c-format msgid "expected %s" msgstr "várt érték: %s" #: src/config.c:102 #, c-format msgid "expected %s, but found %s" msgstr "várt érték: %s, de %s található" #: src/config.c:124 #, c-format msgid "unknown syslog facility `%s'" msgstr "ismeretlen syslog képesség: „%sâ€" #: src/config.c:133 src/config.c:606 msgid "name" msgstr "név" #: src/config.c:134 msgid "" "Set syslog facility. Arg is one of the following: user, daemon, auth, " "authpriv, mail, cron, local0 through local7 (case-insensitive), or a " "facility number." msgstr "" "Syslog képesség beállítása. Az argumentum a következÅ‘k egyike lehet: user, " "daemon, auth, authpriv, mail, cron, local0 és local7 között (kis- és " "nagybetű érzéketlen) vagy egy képesség szám." #: src/config.c:139 grecs/src/format.c:36 grecs/src/tree.c:69 msgid "string" msgstr "szöveg" #: src/config.c:139 msgid "Tag syslog messages with this string" msgstr "Syslog üzenetek címkézése ezzel a szöveggel" #: src/config.c:142 grecs/src/format.c:141 msgid "arg" msgstr "arg" #: src/config.c:143 msgid "Prefix each message with its priority" msgstr "Minden üzenet elé elÅ‘tag tétele a prioritásával" #: src/config.c:191 #, c-format msgid "%s: recursion depth does not match previous definition" msgstr "%s: a rekurziómélység nem egyezik a korábbi meghatározással" #: src/config.c:212 msgid "no paths configured" msgstr "nincsenek útvonalak beállítva" #: src/config.c:217 msgid "no command configured" msgstr "nincs parancs beállítva" #: src/config.c:229 grecs/src/tree.c:665 msgid "invalid use of block statement" msgstr "érvénytelen blokk utasítás használata" #: src/config.c:274 msgid "expected \"recursive\" or end of statement" msgstr "várt érték: „recursive†vagy utasítás vége" #: src/config.c:289 msgid "surplus argument" msgstr "többlet argumentum" #: src/config.c:295 src/config.c:446 msgid "unexpected list" msgstr "nem várt lista" #: src/config.c:326 src/config.c:341 src/config.c:356 msgid "unrecognized event code" msgstr "azonosítatlan eseménykód" #: src/config.c:438 msgid "surplus arguments" msgstr "többlet argumentumok" #: src/config.c:452 msgid "no such user" msgstr "nincs ilyen felhasználó" #: src/config.c:459 msgid "no such group" msgstr "nincs ilyen csoport" #: src/config.c:501 msgid "unrecognized option" msgstr "azonosítatlan kapcsoló" #: src/config.c:595 msgid "Pathname to watch" msgstr "FigyelendÅ‘ útvonalnév" #: src/config.c:598 msgid "Events to watch for" msgstr "FigyelendÅ‘ események" #: src/config.c:601 msgid "regexp" msgstr "reguláris kifejezés" #: src/config.c:601 msgid "Files to watch for" msgstr "FigyelendÅ‘ fájlok" #: src/config.c:604 msgid "Command to execute on event" msgstr "Az eseménykor végrehajtandó parancs" #: src/config.c:606 msgid "Run command as this user" msgstr "Parancs futtatása ezen felhasználóként" #: src/config.c:609 msgid "seconds" msgstr "másodperc" #: src/config.c:609 msgid "Timeout for the command" msgstr "A parancs idÅ‘korlátja" #: src/config.c:611 msgid "List of additional options" msgstr "További beállítások listája" #: src/config.c:614 msgid "<arg: string> <arg: string>..." msgstr "<arg: szöveg> <arg: szöveg>…" #: src/config.c:615 msgid "Modify environment" msgstr "Környezet módosítása" #: src/config.c:622 msgid "Run as this user" msgstr "Futtatás ezen felhasználóként" #: src/config.c:624 msgid "Run in foreground" msgstr "Futtatás az elÅ‘térben" #: src/config.c:626 msgid "file" msgstr "fájl" #: src/config.c:626 msgid "Set pid file name" msgstr "PID fájlnév beállítása" #: src/config.c:628 msgid "Configure syslog logging" msgstr "Syslog naplózás beállítása" #: src/config.c:630 msgid "level" msgstr "szint" #: src/config.c:630 msgid "Set debug level" msgstr "Hibakeresési szint beállítása" #: src/config.c:632 msgid "Configure event watcher" msgstr "EseményfigyelÅ‘ beállítása" #: src/config.c:643 msgid "" "Configuration file structure for direvent.\n" "For more information, use `info direvent configuration'." msgstr "" "A direvent beállítófájl szerkezete.\n" "További információkért használja az „info direvent configuration†parancsot." #: src/direvent.c:142 src/direvent.c:164 src/watcher.c:93 src/watcher.c:125 msgid "not enough memory" msgstr "nincs elég memória" #: src/direvent.c:274 #, c-format msgid "cannot open pidfile %s for writing: %s" msgstr "nem lehet megnyitni a(z) %s pid fájlt írásra: %s" #: src/direvent.c:302 #, c-format msgid "no user with UID %lu" msgstr "nincs %lu UID-val rendelkezÅ‘ felhasználó" #: src/direvent.c:420 #, c-format msgid "cannot run `%s': fork failed: %s" msgstr "nem lehet futtatni: „%sâ€: elágazás sikertelen: %s" #: src/direvent.c:480 msgid "too many arguments" msgstr "túl sok argumentum" #: src/direvent.c:522 #, c-format msgid "%s %s started" msgstr "%s %s elindítva" #: src/direvent.c:546 #, c-format msgid "%s %s stopped" msgstr "%s %s leállítva" #: src/environ.c:25 msgid "environment: " msgstr "környezet: " #: src/progman.c:142 #, c-format msgid "process %lu exited successfully" msgstr "a(z) %lu folyamat sikeresen kilépett" #: src/progman.c:145 #, c-format msgid "process %lu failed with status %d" msgstr "a(z) %lu folyamat meghiúsult ezzel az állapottal: %d" #: src/progman.c:155 #, c-format msgid "process %lu terminated on signal %d" msgstr "a(z) %lu folyamat megszakadt ennél a szignálnál: %d" #: src/progman.c:158 #, c-format msgid "process %lu stopped on signal %d" msgstr "a(z) %lu folyamat leállt ennél a szignálnál: %d" #: src/progman.c:163 #, c-format msgid "process %lu dumped core" msgstr "a(z) %lu folyamat kiírta a magot" #: src/progman.c:167 #, c-format msgid "process %lu terminated with unrecognized status" msgstr "a(z) %lu folyamat megszakadt azonosítatlan állapottal" #: src/progman.c:228 msgid "begin scanning process list" msgstr "folyamatlista vizsgálatának elkezdése" #: src/progman.c:232 #, c-format msgid "process %lu timed out" msgstr "a(z) %lu folyamat túllépte az idÅ‘korlátot" #: src/progman.c:241 #, c-format msgid "scheduling alarm in %lu seconds" msgstr "ütemezett riasztás %lu másodperc múlva" #: src/progman.c:322 #, c-format msgid "cannot start redirector for %s, pipe failed: %s" msgstr "" "nem lehet elindítani a(z) %s átirányítóját, az adatcsatorna sikertelen: %s" #: src/progman.c:354 #, c-format msgid "cannot run redirector `%s': fork failed: %s" msgstr "nem lehet a(z) „%s†átirányítót futtatni: elágazás sikertelen: %s" #: src/progman.c:359 #, c-format msgid "redirector for %s started, pid=%lu" msgstr "a(z) %s átirányítója elindult, pid=%lu" #: src/progman.c:455 #, c-format msgid "starting %s, dir=%s, file=%s" msgstr "%s indítása, kvt=%s, fájl=%s" #: src/progman.c:484 #, c-format msgid "cannot change to %s: %s" msgstr "nem lehet erre változtatni: %s: %s" #: src/progman.c:512 #, c-format msgid "%s running; dir=%s, file=%s, pid=%lu" msgstr "%s fut; kvt=%s, fájl=%s, pid=%lu" #: src/progman.c:534 #, c-format msgid "waiting for %s (%lu) to terminate" msgstr "várakozás %s (%lu) befejezésére" #: src/watcher.c:183 src/watcher.c:513 #, c-format msgid "removing watcher %s" msgstr "figyelÅ‘ eltávolítása: %s" #: src/watcher.c:195 msgid "no watchers left; exiting now" msgstr "" #: src/watcher.c:262 #, c-format msgid "installing CREATE sentinel for %s" msgstr "" #: src/watcher.c:275 #, c-format msgid "creating watcher %s" msgstr "figyelÅ‘ létrehozása: %s" #: src/watcher.c:281 src/watcher.c:296 #, c-format msgid "cannot set watcher on %s: %s" msgstr "nem lehet figyelÅ‘t beállítani ezen: %s: %s" #: src/watcher.c:377 #, c-format msgid "cannot create watcher %s/%s: not enough memory" msgstr "nem lehet létrehozni a figyelÅ‘t: %s/%s: nincs elég memória" #: src/watcher.c:384 #, c-format msgid "cannot create watcher %s/%s, stat failed: %s" msgstr "nem lehet létrehozni a figyelÅ‘t: %s/%s, elérés sikertelen: %s" #: src/watcher.c:430 #, c-format msgid "cannot open directory %s: %s" msgstr "nem lehet megnyitni a(z) %s könyvtárat: %s" #: src/watcher.c:447 #, c-format msgid "cannot stat %s/%s: not enough memory" msgstr "nem lehet elérni: %s/%s: nincs elég memória" #: src/watcher.c:452 #, c-format msgid "cannot stat %s: %s" msgstr "nem lehet elérni: %s: %s" #: src/watcher.c:497 msgid "no event handlers configured" msgstr "nincsenek eseménykezelÅ‘k beállítva" #: src/watcher.c:502 msgid "no event handlers installed" msgstr "nincsenek eseménykezelÅ‘k telepítve" #: grecs/src/format.c:33 msgid "void" msgstr "" #: grecs/src/format.c:46 msgid "number" msgstr "" #: grecs/src/format.c:49 msgid "time" msgstr "" #: grecs/src/format.c:52 msgid "boolean" msgstr "" #: grecs/src/format.c:55 msgid "IPv4" msgstr "" #: grecs/src/format.c:58 msgid "CIDR" msgstr "" #: grecs/src/format.c:61 #, fuzzy msgid "hostname" msgstr "név" #: grecs/src/format.c:64 msgid "sockaddr" msgstr "" #: grecs/src/format.c:67 msgid "section" msgstr "" #: grecs/src/format.c:70 msgid "null" msgstr "" #: grecs/src/format.c:133 msgid "Disabled;" msgstr "Letiltva;" #: grecs/src/opthelp.c:123 grecs/src/opthelp.c:269 msgid "Usage:" msgstr "Használat:" #: grecs/src/opthelp.c:127 msgid "OPTION" msgstr "KAPCSOLÓ" #: grecs/src/opthelp.c:132 grecs/src/opthelp.c:427 msgid "Aliases" msgstr "Ãlnevek" #: grecs/src/opthelp.c:132 grecs/src/opthelp.c:427 msgid "Alias" msgstr "Ãlnév" #: grecs/src/opthelp.c:186 msgid "" "Mandatory or optional arguments to long options are also mandatory or " "optional for any corresponding short options." msgstr "" "A hosszú kapcsolók kötelezÅ‘ vagy elhagyható argumentumai a megfelelÅ‘ rövid " "kapcsolóknál is kötelezÅ‘k vagy elhagyhatók." #. TRANSLATORS: The placeholder indicates the bug-reporting #. address for this package. Please add _another line_ saying #. "Report translation bugs to <...>\n" with the address for #. translation bugs (typically your translation team's web or #. email address). #: grecs/src/opthelp.c:202 #, c-format msgid "Report bugs to %s.\n" msgstr "A hibákat ide jelentse: %s.\n" #: grecs/src/opthelp.c:205 #, c-format msgid "%s home page: <%s>\n" msgstr "A(z) %s honlapja: <%s>\n" #. TRANSLATORS: Translate "(C)" to the copyright symbol #. (C-in-a-circle), if this symbol is available in the user's #. locale. Otherwise, do not translate "(C)"; leave it as-is. #: grecs/src/opthelp.c:457 msgid "(C)" msgstr "©" #: grecs/src/opthelp.c:466 msgid "" "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." "html>\n" "This is free software: you are free to change and redistribute it.\n" "There is NO WARRANTY, to the extent permitted by law.\n" "\n" msgstr "" "GPLv3+ licenc: GNU GPL 3. verziója vagy késÅ‘bbi változat <http://gnu.org/" "licenses/gpl.html>\n" "Ez szabad szoftver: szabadon módosíthatja és továbbadhatja.\n" "NINCS GARANCIA, már amennyire ezt a törvény engedi.\n" "\n" #: grecs/src/opthelp.c:483 msgid "Written by " msgstr "Ãrta " #. TRANSLATORS: This string is used as a delimiter between #. authors' names as in: #. #. Written by Winnie the Pooh, Piglet ... #. #: grecs/src/opthelp.c:489 msgid ", " msgstr ", " #. TRANSLATORS: This string acts as a delimiter before the #. last author's names, e.g.: #. #. Written by Winnie the Pooh, Piglet and Christopher Robin. #. #: grecs/src/opthelp.c:495 msgid " and " msgstr " és " #: grecs/src/path-parser.c:62 #, c-format msgid "cannot open `%s'" msgstr "nem lehet megnyitni: „%sâ€" #: grecs/src/path-parser.c:108 grecs/src/path-parser.c:123 msgid "unexpected end of file" msgstr "váratlan fájlvég" #: grecs/src/path-parser.c:143 msgid "parse error" msgstr "feldolgozási hiba" #: grecs/src/preproc.c:448 grecs/src/preproc.c:470 #, c-format msgid "Cannot stat `%s'" msgstr "Nem lehet elérni: „%sâ€" #: grecs/src/preproc.c:453 grecs/src/preproc.c:458 msgid "Recursive inclusion" msgstr "Rekurzív felvétel" #: grecs/src/preproc.c:461 #, c-format msgid "`%s' already included here" msgstr "„%s†már fel van véve itt" #: grecs/src/preproc.c:465 #, c-format msgid "`%s' already included at top level" msgstr "„%s†már fel van véve a felsÅ‘ szinten" #: grecs/src/preproc.c:480 #, c-format msgid "Cannot open `%s'" msgstr "Nem lehet megnyitni: „%sâ€" #: grecs/src/preproc.c:595 msgid "Cannot parse include line" msgstr "Nem lehet feldolgozni a felvételi sort" #: grecs/src/preproc.c:598 msgid "invalid include statement" msgstr "érvénytelen felvételi utasítás" #: grecs/src/preproc.c:624 msgid "read error" msgstr "olvasási hiba" #: grecs/src/preproc.c:632 #, c-format msgid "%s: No such file or directory" msgstr "%s: Nincs ilyen fájl vagy könyvtár" #: grecs/src/preproc.c:698 #, c-format msgid "Unable to start external preprocessor `%s'" msgstr "Nem sikerült elindítani a külsÅ‘ elÅ‘feldolgozót: „%sâ€" #: grecs/src/preproc.c:773 grecs/src/preproc.c:793 #, c-format msgid "Cannot run `%s'" msgstr "Nem lehet futtatni: „%sâ€" #: grecs/src/symtab.c:236 msgid "element not found in table" msgstr "az elem nem található a táblában" #: grecs/src/symtab.c:238 msgid "symbol table is full" msgstr "a szimbólumtábla tele van" #: grecs/src/tree.c:70 msgid "list" msgstr "" #: grecs/src/tree.c:71 #, fuzzy msgid "one or more arguments" msgstr "túl sok argumentum" #: grecs/src/tree.c:75 #, fuzzy msgid "unrecognized type; please report" msgstr "azonosítatlan eseménykód" #: grecs/src/tree.c:320 msgid "section keyword used as a scalar" msgstr "" #: grecs/src/tree.c:322 msgid "scalar keyword used as a section" msgstr "" #: grecs/src/tree.c:325 #, fuzzy msgid "unknown keyword" msgstr "Ismeretlen kulcsszó" #: grecs/src/tree.c:360 #, c-format msgid "%s: not a valid boolean value" msgstr "%s: nem érvényes logikai érték" #: grecs/src/tree.c:391 #, c-format msgid "%s: UNIX socket name too long" msgstr "%s: a UNIX foglalat neve túl hosszú" #: grecs/src/tree.c:420 grecs/src/tree.c:644 #, c-format msgid "%s: not a valid IP address or hostname" msgstr "%s: nem érvényes IP-cím vagy gépnév" #: grecs/src/tree.c:444 #, c-format msgid "%s: not a valid port number" msgstr "%s: nem érvényes portszám" #: grecs/src/tree.c:452 msgid "missing port number" msgstr "hiányzó portszám" #: grecs/src/tree.c:501 msgid "numeric overflow" msgstr "számszerű túlcsordulás" #: grecs/src/tree.c:506 msgid "value out of allowed range" msgstr "az érték a megengedett tartományon kívüli" #: grecs/src/tree.c:541 grecs/src/tree.c:571 #, c-format msgid "not a number (stopped near `%s')" msgstr "nem szám (leállítva „%s†környékén)" #: grecs/src/tree.c:635 #, c-format msgid "%s: not a valid IP address" msgstr "%s: nem érvényes IP-cím" #: grecs/src/tree.c:774 #, c-format msgid "too many arguments to `%s'; missing semicolon?" msgstr "túl sok argumentum ehhez: „%sâ€; hiányzó pontosvesszÅ‘?" #: grecs/src/tree.c:788 grecs/src/tree.c:836 #, c-format msgid "INTERNAL ERROR at %s:%d: unhandled data type %d" msgstr "BELSÅ HIBA itt: %s:%d: kezeletlen %d adattípus" #: grecs/src/tree.c:803 #, c-format msgid "%s: incompatible data type in list item #%d" msgstr "%s: összeférhetetlen adattípus a(z) #%d. listaelemben" #: grecs/src/tree.c:823 #, c-format msgid "incompatible data type for `%s'" msgstr "összeférhetetlen adattípus ennél: „%sâ€" #: grecs/wordsplit/wordsplit.c:69 grecs/wordsplit/wordsplit.c:2855 msgid "memory exhausted" msgstr "elfogyott a memória" #: grecs/wordsplit/wordsplit.c:121 msgid "memory exhausted while trying to store error context" msgstr "" #: grecs/wordsplit/wordsplit.c:868 msgid "Restarting" msgstr "" #: grecs/wordsplit/wordsplit.c:1607 #, c-format msgid "%.*s: variable null or not set" msgstr "%.*s: a változó üres vagy nincs beállítva" #: grecs/wordsplit/wordsplit.c:1637 #, c-format msgid "warning: undefined variable `%.*s'" msgstr "figyelmeztetés: nem meghatározott változó: „%.*sâ€" #: grecs/wordsplit/wordsplit.c:2141 #, c-format msgid "no files match pattern %s" msgstr "nem illeszkednek fájlok erre a mintára: %s" #: grecs/wordsplit/wordsplit.c:2603 msgid "WS trimming" msgstr "WS levágása" #: grecs/wordsplit/wordsplit.c:2605 msgid "command substitution" msgstr "parancshelyettesítés" #: grecs/wordsplit/wordsplit.c:2607 grecs/wordsplit/wordsplit.c:2615 msgid "coalesce list" msgstr "lista egyesítése" #: grecs/wordsplit/wordsplit.c:2609 msgid "tilde expansion" msgstr "hullámjel-kiterjesztés" #: grecs/wordsplit/wordsplit.c:2611 msgid "variable expansion" msgstr "változó-kiterjesztés" #: grecs/wordsplit/wordsplit.c:2613 msgid "quote removal" msgstr "idézés-eltávolítás" #: grecs/wordsplit/wordsplit.c:2617 msgid "path expansion" msgstr "útvonal-kiterjesztés" #: grecs/wordsplit/wordsplit.c:2642 #, c-format msgid "(%02d) Input:%.*s;" msgstr "(%02d) Bemenet:%.*s;" #: grecs/wordsplit/wordsplit.c:2668 msgid "Initial list:" msgstr "Kezdeti lista:" #: grecs/wordsplit/wordsplit.c:2683 msgid "Coalesced list:" msgstr "Egyesített lista:" #: grecs/wordsplit/wordsplit.c:2853 msgid "no error" msgstr "nincs hiba" #: grecs/wordsplit/wordsplit.c:2854 msgid "missing closing quote" msgstr "hiányzó lezáró idézÅ‘jel" #: grecs/wordsplit/wordsplit.c:2856 msgid "invalid wordsplit usage" msgstr "érvénytelen szófelosztás használat" #: grecs/wordsplit/wordsplit.c:2857 msgid "unbalanced curly brace" msgstr "a kapcsos zárójelek száma nem egyezik" #: grecs/wordsplit/wordsplit.c:2858 msgid "undefined variable" msgstr "nem meghatározott változó" #: grecs/wordsplit/wordsplit.c:2859 msgid "input exhausted" msgstr "elfogyott a bemenet" #: grecs/wordsplit/wordsplit.c:2860 msgid "unbalanced parenthesis" msgstr "zárójelek nincsenek egyensúlyban" #: grecs/wordsplit/wordsplit.c:2861 msgid "globbing error" msgstr "csillogás hiba" #: grecs/wordsplit/wordsplit.c:2862 #, fuzzy msgid "user-defined error" msgstr "olvasási hiba" #: grecs/wordsplit/wordsplit.c:2863 msgid "invalid parameter number in assignment" msgstr "" #: grecs/wordsplit/wordsplit.c:2875 msgid "unknown error" msgstr "ismeretlen hiba" #: grecs/wordsplit/wordsplit.c:2884 #, c-format msgid "missing closing %c (start near #%lu)" msgstr "hiányzó lezáró %c (#%lu környékén kezdve)" #~ msgid "unterminated regexp" #~ msgstr "befejezetlen reguláris kifejezés" #~ msgid "unrecognized flag: %c" #~ msgstr "azonosítatlan jelzÅ‘: %c" #~ msgid "out of memory" #~ msgstr "nincs elég memória" #~ msgid "%s: unknown keyword" #~ msgstr "%s: ismeretlen kulcsszó" #~ msgid "(%02d) Restart:%.*s;" #~ msgstr "(%02d) Újraindítás:%.*s;" �����������������������������������������������������������������direvent-5.2/po/eo.gmo������������������������������������������������������������������������������0000644�0001750�0001750�00000032610�13512402637�014720� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Þ•����«������t��å���Ì ������`�����a�����g�� ���†�� ���”�����¢��$���¶�����Û�����ù��+��������C��&���^�����…�����£��6���¿�����ö����� ����� ����������/�����5�����=�����N�����h�����x�����‰�����™��c���µ����������1�����J�� ���N�����X�����l�����q��,���„�����±�����Ì��/���à������� ���&��È���4�����ý��s��������Œ�����Ÿ�����¤�����½�� ���Ä�����Ò�����×�����Ü��%���î����������*�����>�����R�����c�����|�����Ž�����ž��›���°��$���L��`���q��"���Ò�����õ����� ��*��������=�� ���D�� ���P�����\��"���e�����ˆ�����£�����¹�����½�����Ù��,���ñ��.��������M�����^��&���{�� ���¢��+���Ã�����ï��/��� ��$���<�����a��!���t�� ���–�����¤�����¹�����Í�� ���è��(���ö�� ��������+�����E�����J�����Y�����y�����Ž�����ž�����¸�����×�����ï��T���õ�����J��$���[�����€�����–�����ª�����¯�����Å�����Î�����ë����������!�� ���5�� ���C�����P�� ���e�����†�����˜�� ���©�����µ�����Ä�����Ü��!���ü�� �����#���?��/���c�����“�� ���©�� ���·��"���Â�����å�����ì���������������&�����F�����N�� ���]�����j�����~�����ž�����»�����Â�����Ó�����å�����ú����� ��.��������L�����c�����z����������¨�����¿�� ���Ï�����Ý�����ú����������2�����J�����^�����y��!���Œ��"���®��Ø��Ñ�����ª!��#���°!�����Ô!�����ã!�����ó!��%��� "��#���0"�����T"��(���t"�����"��0���¸"�� ���é"����� #��0���*#�����[#�����n#�����q#�����t#�����‘#�� ���š#�����¤#�����»#�����Û#�����ð#����� $��$���$��`���A$�����¢$�����»$�����Ø$�� ���Ü$�����é$�����%����� %��1���*%��&���\%�����ƒ%��3���Ÿ%�����Ó%�����ê%��ä���ù%�����Þ&��{���÷&�����s'�����‚'�����‡'�����¡'�����ª'�����º'�����¿'�����Ä'��+���ß'����� (�� ���"(��W���0(�����ˆ(��&���¡(�� ���È(�����Õ(�����î(��–���)��+���œ)��X���È)��)���!*�����K*�����d*��-���k*�� ���™*�����¤*�� ���³*�����¿*��,���È*�����õ*�����+�����2+�� ���6+�����W+��1���r+��.���¤+�����Ó+��#���ê+��3���,��'���B,��7���j,��%���¢,��5���È,��+���þ,�����*-��#���H-�����l-�����{-�����Ž-��#���¦-�����Ê-��.���Ò-�� ���.�����.�����,.�����4.�����H.�����g.�����„.�����›.�����´.�����Ó.�����ð.��X���÷.�����P/��+���h/�����”/�����¨/�����¼/�����Á/�� ���Þ/��$���ê/��%���0��%���50�����[0�����u0�����…0�����–0��)���°0�����Ú0�� ���ï0�� ���û0�����1�����1�����21��(���P1��$���y1��$���ž1��*���Ã1�����î1����� 2�� ���2��$���$2�� ���I2�� ���V2�����d2�����~2��"���š2�����½2�����Æ2�����×2�����ë2�����3�����&3�����F3�����L3�����[3�����l3�����…3�����—3��7���­3�����å3�����ÿ3�����4�����-4�����F4�����a4�����s4�����‚4����� 4��!���À4�����â4�����÷4��'��� 5�����35�����H5��"���e5�����Z������U���£������� ���2�������A���P���3���‡��������������h���M���4���™���K���7�������_�������T���B���Y���—����������I�������[��������������¨���¦���&�������š���”�������¢���`�������œ���6������!���������������˜�������Ž������\��������������"���(�������•���>������f���¤�������@���9���������)�������€���������������ž���N���,���Š���q���¥���Ÿ���������������{���g���/���«���+���E���V���0����������-���5������x���G��� ���J������� ���l���L���.����������“���R�������k��������������t����������W���o���„���¡���†���H���=������^���������������u�������#���~��� ���X���ƒ���Q�������r�������F��������������������������§���}���‘���%���w�������n���c��� �������‚������:�������j�������1���y���v������m���*���ˆ������������…������’���b���<���O���–�������d���©���e���p���s���›���$���Œ���;���‰����������]���|���C�������ª���S���'�������?���‹��� ������8������� ����������������������a����������i�������z���D���� and �%.*s: variable null or not set�%s %s started�%s %s stopped�%s home page: <%s> �%s running; dir=%s, file=%s, pid=%lu�%s: No such file or directory�%s: UNIX socket name too long�%s: incompatible data type in list item #%d�%s: not a valid IP address�%s: not a valid IP address or hostname�%s: not a valid boolean value�%s: not a valid port number�%s: recursion depth does not match previous definition�(%02d) Input:%.*s;�(C)�, �<arg: string> <arg: string>...�Alias�Aliases�Cannot open `%s'�Cannot parse include line�Cannot run `%s'�Cannot stat `%s'�Coalesced list:�Command to execute on event�Configuration file structure for direvent. For more information, use `info direvent configuration'.�Configure event watcher�Configure syslog logging�DIR�Disabled;�Events to watch for�FILE�Files to watch for�GNU direvent monitors changes in directories�Give a short usage message�Give this help list�INTERNAL ERROR at %s:%d: unhandled data type %d�Include search path: �Initial list:�License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. �List of additional options�Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options.�Modify environment�NAME�No include search path. �OPTION�Other options�PRIO�PROG�Pathname to watch�Prefix each message with its priority�Print program version�Recursive inclusion�Report bugs to %s. �Run as this user�Run command as this user�Run in foreground�Set debug level�Set pid file name�Set syslog facility. Arg is one of the following: user, daemon, auth, authpriv, mail, cron, local0 through local7 (case-insensitive), or a facility number.�Tag syslog messages with this string�The optional CONFIG argument supplies the name of the configuration file to use instead of %s. �This direvent uses %s interface. �Timeout for the command�USER�Unable to start external preprocessor `%s'�Usage:�WS trimming�Written by �[CONFIG]�`%s' already included at top level�`%s' already included here�add include directory�arg�begin scanning process list�cannot change to %s: %s�cannot create watcher %s/%s, stat failed: %s�cannot create watcher %s/%s: not enough memory�cannot open `%s'�cannot open directory %s: %s�cannot open pidfile %s for writing: %s�cannot run `%s': fork failed: %s�cannot run redirector `%s': fork failed: %s�cannot set watcher on %s: %s�cannot start redirector for %s, pipe failed: %s�cannot stat %s/%s: not enough memory�cannot stat %s: %s�check configuration file and exit�coalesce list�command substitution�creating watcher %s�element not found in table�environment: �expected "recursive" or end of statement�expected %s�expected %s, but found %s�file�globbing error�incompatible data type for `%s'�increase debug level�input exhausted�invalid include statement�invalid use of block statement�invalid wordsplit usage�level�log everything with priority PRIO and higher to the stderr, as well as to the syslog�memory exhausted�missing closing %c (start near #%lu)�missing closing quote�missing port number�name�no command configured�no error�no event handlers configured�no event handlers installed�no files match pattern %s�no paths configured�no such group�no such user�no user with UID %lu�not a number (stopped near `%s')�not enough memory�numeric overflow�parse error�path expansion�process %lu dumped core�process %lu exited successfully�process %lu failed with status %d�process %lu stopped on signal %d�process %lu terminated on signal %d�process %lu terminated with unrecognized status�process %lu timed out�quote removal�read error�redirector for %s started, pid=%lu�regexp�remain in foreground�removing watcher %s�run as this user�scheduling alarm in %lu seconds�seconds�self-test mode�set PID file�set syslog facility�show configuration file summary�starting %s, dir=%s, file=%s�string�surplus argument�surplus arguments�symbol table is full�tilde expansion�too many arguments�too many arguments to `%s'; missing semicolon?�unbalanced curly brace�unbalanced parenthesis�undefined variable�unexpected block statement�unexpected end of file�unexpected list�unknown error�unknown syslog facility `%s'�unknown syslog facility: %s�unknown syslog priority: %s�unrecognized event code�unrecognized option�value out of allowed range�variable expansion�waiting for %s (%lu) to terminate�warning: undefined variable `%.*s'�Project-Id-Version: direvent 5.1 Report-Msgid-Bugs-To: bug-direvent@gnu.org.ua POT-Creation-Date: 2019-07-13 19:23+0300 PO-Revision-Date: 2017-01-23 12:35-0300 Last-Translator: Felipe Castro <fefcas@gmail.com> Language-Team: Esperanto <translation-team-eo@lists.sourceforge.net> Language: eo MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Bugs: Report translation errors to the Language-Team address. X-Generator: Poedit 1.5.4 � kaj �%.*s: variablo nula aÅ­ ne difinita�%s %s lanĉita�%s %s haltigita�HejmpaÄo de %s: <%s> �%s rulas; ujo=%s, dosiero=%s, pid=%lu�%s: neniu tia dosierujo aÅ­ dosiero�%s: tro longa ingo-nomo de UNIX�%s: nekongrua datumartipo en listero #%d�%s: neniu valida IP-adreso�%s: ne estas valida IP-adsero aÅ­ gastigant-nomo�%s: ne estas valida bulea valoro�%s: ne estas valida pord-numero�%s: rikura profundo ne akordas al antaÅ­a difino�(%02d) Enigo:%.*s;�©�; �<arg: ĉeno> <arg: ĉeno>...�Kromnomo�Kromnomoj�Ne eblas malfermi '%s'�Ne eblas analizi enmetan linion�Ne eblas lanĉi '%s'�Ne eblas apliki stat '%s'�Kunfandita listo:�Komando por esti lanĉata pro evento�Strukturo de agorda dosiero por direvent. Por pli da informo, uzu 'info direvent configuration'.�Agordi event-observanton�Agordi protokoligo de syslog�UJO�Malebligata;�Eventoj por esti observataj�DOSIERO�Dosieroj por esti observataj�GNU direvent kontroladas ÅanÄojn en dosierujojn�Montri mallongan mesaÄon pri la uzado�Montri tiun ĉi help-liston�INTERNA ERARO ĉe %s:%d: netraktebla datumartipo %d�Inkluziva serĉ-vojo: �Komenca listo:�Permeso GPLv3+: GNU GPL versio 3 aÅ­ posta <http://gnu.org/licenses/gpl.html> Tio ĉi estas libera programaro: vi estas libera por ÅanÄi kaj redisdoni Äin. Ekzistas NENIU GARANTIO, laÅ­ plej amplekse permesate de la leÄoj. �Listo de kromaj preferoj�Nepraj kaj malnepraj argumentoj por longaj modifiloj ankaÅ­ estas nepraj kaj malnepraj por la koresponda mallonga modifilo.�ÅœanÄi medion�NOMO�Malinkluziva serĉ-vojo. �MODIFILO�Aliaj modifiloj�PRIO�PROG�Vojnomo por esti observata�Prefiksi ĉiun mesaÄon per Äia prioritato�Montri program-version�Rikura enmeto�Raportu cimojn al: %s. Kaj mistradukojn al <translation-team-eo@lists.sourceforge.net> �Ruli kiel tiu ĉi uzanto�Lanĉi la komandon kiel tiu ĉi uzanto�Ruli malfone�Difini Äustigan nivelon�Difini pid-dosiernomon�Difini utilaĵon syslog. Arg estas unu el la jena: user, daemon, auth, authpriv, mail, cron, local0 Äis local7 (ajn usklece), aÅ­ numero de utilaĵo.�Marki mesaÄojn de syslog per tiu ĉi ĉeno�La nedeviga argumento AGORDO indikas la nomon de agordo-dosiero por uzi anstataŭ %s. �Tiu ĉi direvent uzas la interfacon %s. �Tempolimo por la komando�UZANTO�Ne eblas ekigi eksteran antaÅ­procezilon '%s'�Uzmaniero:�Agordado de WS�Verkita de �[AGORDO]�'%s' jam estas enmetita ĉe la supera nivelo�'%s' jam estas enmetita ĉi tie�aldoni inkluzivan dosierujon�arg�komenci skanadon de procez-listo�ne eblas ÅanÄi al %s: %s�ne eblas krei observanton %s/%s, stat fiaksis: %s�ne eblas krei observanton %s/%s: mankas memoro�ne eblas malfermi '%s'�ne eblas malfermi dosierujon %s: %s�ne eblas malfermi la pid-dosieron %s por skribi: %s�ne eblas lanĉi '%s': forko fiaskis: %s�ne eblas lanĉi la redirektilon '%s': forko fiaskis: %s�ne eblas agordi observanton en %s: %s�ne eblas lanĉi redirektilo por %s, dukto fiaskis: %s�ne eblas apliki 'stat' %s/%s: mankas memoro�Ne eblas apliki 'stat' %s: %s�kontroli agordan dosieron kaj eliri�kunfanda listo�komand-antataÅ­igo�ni kreas observanton %s�elemento ne estas trovita en tabelo�medio: �ni atendis "recursive" aÅ­ la finon de komando�ni atendis %s�ni atendis %s, sed trovis %s�dosiero�eraro de 'globbing'�nekongrua datumartipo por '%s'�alkrementi Äustigan nivelon�enigo estas elĉerpita�malvalida enmeta komando�malvalida uzo de bloka komando�malvalida uzo de 'wordsplit'�nivelo�protokoli ĉion kun prioritato PRIO aÅ­ pli alta al la ĉeferarujo, samkiel al la syslog�memoro estas elĉerpita�mankas ferma %c (komencas proksime de #%lu)�mankas ferma citilo�mankas pordo-numero�nomo�neniu komando estas agordita�neniu eraro�neniu evento-traktilo estas difinita�neniu evento-traktilo estas instalita�neniu dosiero kongruas al Åablono %s�neniu vojo estas agordita�neniu tia grupo�neniu tia uzanto�neniu uzanto kun UID: %lu�ne estas numero (haltis proksime de '%s')�ne sufiĉe da memoro�numera troo�analiz-eraro�etendigo de vojo�nekropsio de procezo %lu�la procezo %lu ĉesis sukcese�la procezo %lu fiaskis kun elir-stato %d�la procezo %lu haltis pro signalo %d�la procezo %lu ĉesis pro signalo %d�la procezo %lu ĉesis kun nerekonita stato�la procezo %lu eltempiÄis�forigo de citilo�leg-eraro�redirektilo por %s komencis, pid=%lu�regulesprimo�resti malfone�ni forigas observanton %s�funkcii kiel tiu ĉi uzanto�ni planas alarmon por %lu sekundoj�sekundoj�memtesta reÄimo�difini PID-dosieron�aktivigi la utilaĵon syslog�montri agord-dosieran resumon�Ekigo de %s, ujo=%s, dosiero=%s�ĉeno�troa argumento�troaj argumentoj�simboltabelo estas plena�etendigo de tildo�tro multaj argumentoj�tro multaj argumentoj por '%s'; ĉu mankas punkto-komo?�ne spegulita kurba krampo�ne spegulita ronda krampo�nedifinita variablo�neatendita bloka komando�neatendita fino de dosiero�ne atendita listo�nekonata eraro�nekonata utilaĵo syslog '%s'�nekonata utilaĵo de syslog: %s�nekonata prioritato de syslog: %s�nerekonita eventkodo�nerekonita modifilo�valoro estas for de permesata intervalo�etendigo de variablo�ni atendas ke %s (%lu) ĉesu�averto: nedifinita variablo '%.*s'�������������������������������������������������������������������������������������������������������������������������direvent-5.2/po/direvent.pot������������������������������������������������������������������������0000644�0001750�0001750�00000036774�13512402637�016174� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Sergey Poznyakoff # This file is distributed under the same license as the direvent package. # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: direvent 5.2\n" "Report-Msgid-Bugs-To: bug-direvent@gnu.org.ua\n" "POT-Creation-Date: 2019-07-13 19:23+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" #: cmdline.opt:26 msgid "increase debug level" msgstr "" #: cmdline.opt:32 msgid "PRIO" msgstr "" #: cmdline.opt:32 msgid "" "log everything with priority PRIO and higher to the stderr, as well as to " "the syslog" msgstr "" #: cmdline.opt:41 msgid "NAME" msgstr "" #: cmdline.opt:41 msgid "set syslog facility" msgstr "" #: cmdline.opt:47 msgid "remain in foreground" msgstr "" #: cmdline.opt:53 msgid "DIR" msgstr "" #: cmdline.opt:53 msgid "add include directory" msgstr "" #: cmdline.opt:59 msgid "PROG" msgstr "" #: cmdline.opt:59 msgid "self-test mode" msgstr "" #: cmdline.opt:65 msgid "FILE" msgstr "" #: cmdline.opt:65 msgid "set PID file" msgstr "" #: cmdline.opt:71 msgid "check configuration file and exit" msgstr "" #: cmdline.opt:77 msgid "USER" msgstr "" #: cmdline.opt:77 msgid "run as this user" msgstr "" #: cmdline.opt:87 msgid "show configuration file summary" msgstr "" #: cmdline.opt:81 msgid "Other options" msgstr "" #: cmdline.opt:93 msgid "Give this help list" msgstr "" #: cmdline.opt:93 msgid "Give a short usage message" msgstr "" #: cmdline.opt:93 msgid "Print program version" msgstr "" #: cmdline.opt:13 msgid "GNU direvent monitors changes in directories" msgstr "" #: cmdline.opt:15 msgid "[CONFIG]" msgstr "" #: cmdline.opt:95 #, c-format msgid "" "The optional CONFIG argument supplies the name of the configuration file\n" "to use instead of %s.\n" "\n" msgstr "" #. TRANSLATORS: %s is one of: inotify, kqueue #: cmdline.opt:99 #, c-format msgid "" "This direvent uses %s interface.\n" "\n" msgstr "" #: cmdline.opt:102 #, c-format msgid "Include search path:\n" msgstr "" #: cmdline.opt:105 #, c-format msgid "No include search path.\n" msgstr "" #: src/config.c:63 #, c-format msgid "unknown syslog facility: %s" msgstr "" #: src/config.c:80 #, c-format msgid "unknown syslog priority: %s" msgstr "" #: src/config.c:88 msgid "unexpected block statement" msgstr "" #: src/config.c:97 #, c-format msgid "expected %s" msgstr "" #: src/config.c:102 #, c-format msgid "expected %s, but found %s" msgstr "" #: src/config.c:124 #, c-format msgid "unknown syslog facility `%s'" msgstr "" #: src/config.c:133 src/config.c:606 msgid "name" msgstr "" #: src/config.c:134 msgid "" "Set syslog facility. Arg is one of the following: user, daemon, auth, " "authpriv, mail, cron, local0 through local7 (case-insensitive), or a " "facility number." msgstr "" #: src/config.c:139 grecs/src/format.c:36 grecs/src/tree.c:69 msgid "string" msgstr "" #: src/config.c:139 msgid "Tag syslog messages with this string" msgstr "" #: src/config.c:142 grecs/src/format.c:141 msgid "arg" msgstr "" #: src/config.c:143 msgid "Prefix each message with its priority" msgstr "" #: src/config.c:191 #, c-format msgid "%s: recursion depth does not match previous definition" msgstr "" #: src/config.c:212 msgid "no paths configured" msgstr "" #: src/config.c:217 msgid "no command configured" msgstr "" #: src/config.c:229 grecs/src/tree.c:665 msgid "invalid use of block statement" msgstr "" #: src/config.c:274 msgid "expected \"recursive\" or end of statement" msgstr "" #: src/config.c:289 msgid "surplus argument" msgstr "" #: src/config.c:295 src/config.c:446 msgid "unexpected list" msgstr "" #: src/config.c:326 src/config.c:341 src/config.c:356 msgid "unrecognized event code" msgstr "" #: src/config.c:438 msgid "surplus arguments" msgstr "" #: src/config.c:452 msgid "no such user" msgstr "" #: src/config.c:459 msgid "no such group" msgstr "" #: src/config.c:501 msgid "unrecognized option" msgstr "" #: src/config.c:595 msgid "Pathname to watch" msgstr "" #: src/config.c:598 msgid "Events to watch for" msgstr "" #: src/config.c:601 msgid "regexp" msgstr "" #: src/config.c:601 msgid "Files to watch for" msgstr "" #: src/config.c:604 msgid "Command to execute on event" msgstr "" #: src/config.c:606 msgid "Run command as this user" msgstr "" #: src/config.c:609 msgid "seconds" msgstr "" #: src/config.c:609 msgid "Timeout for the command" msgstr "" #: src/config.c:611 msgid "List of additional options" msgstr "" #: src/config.c:614 msgid "<arg: string> <arg: string>..." msgstr "" #: src/config.c:615 msgid "Modify environment" msgstr "" #: src/config.c:622 msgid "Run as this user" msgstr "" #: src/config.c:624 msgid "Run in foreground" msgstr "" #: src/config.c:626 msgid "file" msgstr "" #: src/config.c:626 msgid "Set pid file name" msgstr "" #: src/config.c:628 msgid "Configure syslog logging" msgstr "" #: src/config.c:630 msgid "level" msgstr "" #: src/config.c:630 msgid "Set debug level" msgstr "" #: src/config.c:632 msgid "Configure event watcher" msgstr "" #: src/config.c:643 msgid "" "Configuration file structure for direvent.\n" "For more information, use `info direvent configuration'." msgstr "" #: src/direvent.c:142 src/direvent.c:164 src/watcher.c:93 src/watcher.c:125 msgid "not enough memory" msgstr "" #: src/direvent.c:274 #, c-format msgid "cannot open pidfile %s for writing: %s" msgstr "" #: src/direvent.c:302 #, c-format msgid "no user with UID %lu" msgstr "" #: src/direvent.c:420 #, c-format msgid "cannot run `%s': fork failed: %s" msgstr "" #: src/direvent.c:480 msgid "too many arguments" msgstr "" #: src/direvent.c:522 #, c-format msgid "%s %s started" msgstr "" #: src/direvent.c:546 #, c-format msgid "%s %s stopped" msgstr "" #: src/environ.c:25 msgid "environment: " msgstr "" #: src/progman.c:142 #, c-format msgid "process %lu exited successfully" msgstr "" #: src/progman.c:145 #, c-format msgid "process %lu failed with status %d" msgstr "" #: src/progman.c:155 #, c-format msgid "process %lu terminated on signal %d" msgstr "" #: src/progman.c:158 #, c-format msgid "process %lu stopped on signal %d" msgstr "" #: src/progman.c:163 #, c-format msgid "process %lu dumped core" msgstr "" #: src/progman.c:167 #, c-format msgid "process %lu terminated with unrecognized status" msgstr "" #: src/progman.c:228 msgid "begin scanning process list" msgstr "" #: src/progman.c:232 #, c-format msgid "process %lu timed out" msgstr "" #: src/progman.c:241 #, c-format msgid "scheduling alarm in %lu seconds" msgstr "" #: src/progman.c:322 #, c-format msgid "cannot start redirector for %s, pipe failed: %s" msgstr "" #: src/progman.c:354 #, c-format msgid "cannot run redirector `%s': fork failed: %s" msgstr "" #: src/progman.c:359 #, c-format msgid "redirector for %s started, pid=%lu" msgstr "" #: src/progman.c:455 #, c-format msgid "starting %s, dir=%s, file=%s" msgstr "" #: src/progman.c:484 #, c-format msgid "cannot change to %s: %s" msgstr "" #: src/progman.c:512 #, c-format msgid "%s running; dir=%s, file=%s, pid=%lu" msgstr "" #: src/progman.c:534 #, c-format msgid "waiting for %s (%lu) to terminate" msgstr "" #: src/watcher.c:183 src/watcher.c:513 #, c-format msgid "removing watcher %s" msgstr "" #: src/watcher.c:195 msgid "no watchers left; exiting now" msgstr "" #: src/watcher.c:262 #, c-format msgid "installing CREATE sentinel for %s" msgstr "" #: src/watcher.c:275 #, c-format msgid "creating watcher %s" msgstr "" #: src/watcher.c:281 src/watcher.c:296 #, c-format msgid "cannot set watcher on %s: %s" msgstr "" #: src/watcher.c:377 #, c-format msgid "cannot create watcher %s/%s: not enough memory" msgstr "" #: src/watcher.c:384 #, c-format msgid "cannot create watcher %s/%s, stat failed: %s" msgstr "" #: src/watcher.c:430 #, c-format msgid "cannot open directory %s: %s" msgstr "" #: src/watcher.c:447 #, c-format msgid "cannot stat %s/%s: not enough memory" msgstr "" #: src/watcher.c:452 #, c-format msgid "cannot stat %s: %s" msgstr "" #: src/watcher.c:497 msgid "no event handlers configured" msgstr "" #: src/watcher.c:502 msgid "no event handlers installed" msgstr "" #: grecs/src/format.c:33 msgid "void" msgstr "" #: grecs/src/format.c:46 msgid "number" msgstr "" #: grecs/src/format.c:49 msgid "time" msgstr "" #: grecs/src/format.c:52 msgid "boolean" msgstr "" #: grecs/src/format.c:55 msgid "IPv4" msgstr "" #: grecs/src/format.c:58 msgid "CIDR" msgstr "" #: grecs/src/format.c:61 msgid "hostname" msgstr "" #: grecs/src/format.c:64 msgid "sockaddr" msgstr "" #: grecs/src/format.c:67 msgid "section" msgstr "" #: grecs/src/format.c:70 msgid "null" msgstr "" #: grecs/src/format.c:133 msgid "Disabled;" msgstr "" #: grecs/src/opthelp.c:123 grecs/src/opthelp.c:269 msgid "Usage:" msgstr "" #: grecs/src/opthelp.c:127 msgid "OPTION" msgstr "" #: grecs/src/opthelp.c:132 grecs/src/opthelp.c:427 msgid "Aliases" msgstr "" #: grecs/src/opthelp.c:132 grecs/src/opthelp.c:427 msgid "Alias" msgstr "" #: grecs/src/opthelp.c:186 msgid "" "Mandatory or optional arguments to long options are also mandatory or " "optional for any corresponding short options." msgstr "" #. TRANSLATORS: The placeholder indicates the bug-reporting #. address for this package. Please add _another line_ saying #. "Report translation bugs to <...>\n" with the address for #. translation bugs (typically your translation team's web or #. email address). #: grecs/src/opthelp.c:202 #, c-format msgid "Report bugs to %s.\n" msgstr "" #: grecs/src/opthelp.c:205 #, c-format msgid "%s home page: <%s>\n" msgstr "" #. TRANSLATORS: Translate "(C)" to the copyright symbol #. (C-in-a-circle), if this symbol is available in the user's #. locale. Otherwise, do not translate "(C)"; leave it as-is. #: grecs/src/opthelp.c:457 msgid "(C)" msgstr "" #: grecs/src/opthelp.c:466 msgid "" "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." "html>\n" "This is free software: you are free to change and redistribute it.\n" "There is NO WARRANTY, to the extent permitted by law.\n" "\n" msgstr "" #: grecs/src/opthelp.c:483 msgid "Written by " msgstr "" #. TRANSLATORS: This string is used as a delimiter between #. authors' names as in: #. #. Written by Winnie the Pooh, Piglet ... #. #: grecs/src/opthelp.c:489 msgid ", " msgstr "" #. TRANSLATORS: This string acts as a delimiter before the #. last author's names, e.g.: #. #. Written by Winnie the Pooh, Piglet and Christopher Robin. #. #: grecs/src/opthelp.c:495 msgid " and " msgstr "" #: grecs/src/path-parser.c:62 #, c-format msgid "cannot open `%s'" msgstr "" #: grecs/src/path-parser.c:108 grecs/src/path-parser.c:123 msgid "unexpected end of file" msgstr "" #: grecs/src/path-parser.c:143 msgid "parse error" msgstr "" #: grecs/src/preproc.c:448 grecs/src/preproc.c:470 #, c-format msgid "Cannot stat `%s'" msgstr "" #: grecs/src/preproc.c:453 grecs/src/preproc.c:458 msgid "Recursive inclusion" msgstr "" #: grecs/src/preproc.c:461 #, c-format msgid "`%s' already included here" msgstr "" #: grecs/src/preproc.c:465 #, c-format msgid "`%s' already included at top level" msgstr "" #: grecs/src/preproc.c:480 #, c-format msgid "Cannot open `%s'" msgstr "" #: grecs/src/preproc.c:595 msgid "Cannot parse include line" msgstr "" #: grecs/src/preproc.c:598 msgid "invalid include statement" msgstr "" #: grecs/src/preproc.c:624 msgid "read error" msgstr "" #: grecs/src/preproc.c:632 #, c-format msgid "%s: No such file or directory" msgstr "" #: grecs/src/preproc.c:698 #, c-format msgid "Unable to start external preprocessor `%s'" msgstr "" #: grecs/src/preproc.c:773 grecs/src/preproc.c:793 #, c-format msgid "Cannot run `%s'" msgstr "" #: grecs/src/symtab.c:236 msgid "element not found in table" msgstr "" #: grecs/src/symtab.c:238 msgid "symbol table is full" msgstr "" #: grecs/src/tree.c:70 msgid "list" msgstr "" #: grecs/src/tree.c:71 msgid "one or more arguments" msgstr "" #: grecs/src/tree.c:75 msgid "unrecognized type; please report" msgstr "" #: grecs/src/tree.c:320 msgid "section keyword used as a scalar" msgstr "" #: grecs/src/tree.c:322 msgid "scalar keyword used as a section" msgstr "" #: grecs/src/tree.c:325 msgid "unknown keyword" msgstr "" #: grecs/src/tree.c:360 #, c-format msgid "%s: not a valid boolean value" msgstr "" #: grecs/src/tree.c:391 #, c-format msgid "%s: UNIX socket name too long" msgstr "" #: grecs/src/tree.c:420 grecs/src/tree.c:644 #, c-format msgid "%s: not a valid IP address or hostname" msgstr "" #: grecs/src/tree.c:444 #, c-format msgid "%s: not a valid port number" msgstr "" #: grecs/src/tree.c:452 msgid "missing port number" msgstr "" #: grecs/src/tree.c:501 msgid "numeric overflow" msgstr "" #: grecs/src/tree.c:506 msgid "value out of allowed range" msgstr "" #: grecs/src/tree.c:541 grecs/src/tree.c:571 #, c-format msgid "not a number (stopped near `%s')" msgstr "" #: grecs/src/tree.c:635 #, c-format msgid "%s: not a valid IP address" msgstr "" #: grecs/src/tree.c:774 #, c-format msgid "too many arguments to `%s'; missing semicolon?" msgstr "" #: grecs/src/tree.c:788 grecs/src/tree.c:836 #, c-format msgid "INTERNAL ERROR at %s:%d: unhandled data type %d" msgstr "" #: grecs/src/tree.c:803 #, c-format msgid "%s: incompatible data type in list item #%d" msgstr "" #: grecs/src/tree.c:823 #, c-format msgid "incompatible data type for `%s'" msgstr "" #: grecs/wordsplit/wordsplit.c:69 grecs/wordsplit/wordsplit.c:2855 msgid "memory exhausted" msgstr "" #: grecs/wordsplit/wordsplit.c:121 msgid "memory exhausted while trying to store error context" msgstr "" #: grecs/wordsplit/wordsplit.c:868 msgid "Restarting" msgstr "" #: grecs/wordsplit/wordsplit.c:1607 #, c-format msgid "%.*s: variable null or not set" msgstr "" #: grecs/wordsplit/wordsplit.c:1637 #, c-format msgid "warning: undefined variable `%.*s'" msgstr "" #: grecs/wordsplit/wordsplit.c:2141 #, c-format msgid "no files match pattern %s" msgstr "" #: grecs/wordsplit/wordsplit.c:2603 msgid "WS trimming" msgstr "" #: grecs/wordsplit/wordsplit.c:2605 msgid "command substitution" msgstr "" #: grecs/wordsplit/wordsplit.c:2607 grecs/wordsplit/wordsplit.c:2615 msgid "coalesce list" msgstr "" #: grecs/wordsplit/wordsplit.c:2609 msgid "tilde expansion" msgstr "" #: grecs/wordsplit/wordsplit.c:2611 msgid "variable expansion" msgstr "" #: grecs/wordsplit/wordsplit.c:2613 msgid "quote removal" msgstr "" #: grecs/wordsplit/wordsplit.c:2617 msgid "path expansion" msgstr "" #: grecs/wordsplit/wordsplit.c:2642 #, c-format msgid "(%02d) Input:%.*s;" msgstr "" #: grecs/wordsplit/wordsplit.c:2668 msgid "Initial list:" msgstr "" #: grecs/wordsplit/wordsplit.c:2683 msgid "Coalesced list:" msgstr "" #: grecs/wordsplit/wordsplit.c:2853 msgid "no error" msgstr "" #: grecs/wordsplit/wordsplit.c:2854 msgid "missing closing quote" msgstr "" #: grecs/wordsplit/wordsplit.c:2856 msgid "invalid wordsplit usage" msgstr "" #: grecs/wordsplit/wordsplit.c:2857 msgid "unbalanced curly brace" msgstr "" #: grecs/wordsplit/wordsplit.c:2858 msgid "undefined variable" msgstr "" #: grecs/wordsplit/wordsplit.c:2859 msgid "input exhausted" msgstr "" #: grecs/wordsplit/wordsplit.c:2860 msgid "unbalanced parenthesis" msgstr "" #: grecs/wordsplit/wordsplit.c:2861 msgid "globbing error" msgstr "" #: grecs/wordsplit/wordsplit.c:2862 msgid "user-defined error" msgstr "" #: grecs/wordsplit/wordsplit.c:2863 msgid "invalid parameter number in assignment" msgstr "" #: grecs/wordsplit/wordsplit.c:2875 msgid "unknown error" msgstr "" #: grecs/wordsplit/wordsplit.c:2884 #, c-format msgid "missing closing %c (start near #%lu)" msgstr "" ����direvent-5.2/po/en@boldquot.header������������������������������������������������������������������0000644�0001750�0001750�00000002471�13244106112�017230� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# All this catalog "translates" are quotation characters. # The msgids must be ASCII and therefore cannot contain real quotation # characters, only substitutes like grave accent (0x60), apostrophe (0x27) # and double quote (0x22). These substitutes look strange; see # http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html # # This catalog translates grave accent (0x60) and apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019). # It also translates pairs of apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019) # and pairs of quotation mark (0x22) to # left double quotation mark (U+201C) and right double quotation mark (U+201D). # # When output to an UTF-8 terminal, the quotation characters appear perfectly. # When output to an ISO-8859-1 terminal, the single quotation marks are # transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to # grave/acute accent (by libiconv), and the double quotation marks are # transliterated to 0x22. # When output to an ASCII terminal, the single quotation marks are # transliterated to apostrophes, and the double quotation marks are # transliterated to 0x22. # # This catalog furthermore displays the text between the quotation marks in # bold face, assuming the VT100/XTerm escape sequences. # �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/po/pl.gmo������������������������������������������������������������������������������0000644�0001750�0001750�00000034261�13512402637�014734� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Þ•����«������t��å���Ì ������`�����a�����g�� ���†�� ���”�����¢��$���¶�����Û�����ù��+��������C��&���^�����…�����£��6���¿�����ö����� ����� ����������/�����5�����=�����N�����h�����x�����‰�����™��c���µ����������1�����J�� ���N�����X�����l�����q��,���„�����±�����Ì��/���à������� ���&��È���4�����ý��s��������Œ�����Ÿ�����¤�����½�� ���Ä�����Ò�����×�����Ü��%���î����������*�����>�����R�����c�����|�����Ž�����ž��›���°��$���L��`���q��"���Ò�����õ����� ��*��������=�� ���D�� ���P�����\��"���e�����ˆ�����£�����¹�����½�����Ù��,���ñ��.��������M�����^��&���{�� ���¢��+���Ã�����ï��/��� ��$���<�����a��!���t�� ���–�����¤�����¹�����Í�� ���è��(���ö�� ��������+�����E�����J�����Y�����y�����Ž�����ž�����¸�����×�����ï��T���õ�����J��$���[�����€�����–�����ª�����¯�����Å�����Î�����ë����������!�� ���5�� ���C�����P�� ���e�����†�����˜�� ���©�����µ�����Ä�����Ü��!���ü�� �����#���?��/���c�����“�� ���©�� ���·��"���Â�����å�����ì���������������&�����F�����N�� ���]�����j�����~�����ž�����»�����Â�����Ó�����å�����ú����� ��.��������L�����c�����z����������¨�����¿�� ���Ï�����Ý�����ú����������2�����J�����^�����y��!���Œ��"���®����Ñ�����ð!��%���ô!�����"�����,"�����D"��,���\"��%���‰"�����¯"��3���Ë"�����ÿ"��*���#��.���C#�����r#��C���Ž#�����Ò#�����è#�����ë#��$���î#�����$�����$����� $��1���:$�����l$��&���…$�����¬$��6���¿$��}���ö$��"���t%��0���—%�����È%�� ���Ð%�����Ý%�����ö%�����û%��+���&��2���=&�����p&��<���‹&��*���È&�����ó&��ß���'�����æ'��„���þ'�����ƒ(�����›(��'���¡(�����É(�� ���Ï(�����Ú(�����ß(�����ä(��-���ü(�����*)�����E)��-���_)��1���)��:���¿)��$���ú)�����*�����>*��»���W*�����+��R���2+��#���…+��4���©+�� ���Þ+��&���ê+�� ���,�����,�����8,�����H,��0���Q,��#���‚,��%���¦,�����Ì,�����Ð,��'���ë,��7���-��5���K-�����-��$���›-��+���À-��F���ì-��O���3.��)���ƒ.��M���­.�����û.�����/��2���5/�����h/�����{/�����‘/��!���«/�� ���Í/��,���Û/�� ���0�� ���0�����70�����<0��#���O0�� ���s0�����”0��%���¨0��*���Î0��%���ù0�����1��I���&1�����p1��1���„1�����¶1�����Õ1�����ç1�����í1����� 2��3���2��8���R2��"���‹2�����®2�����Î2�����â2�����þ2��'���3�� ���B3�����P3�����l3�����{3�����’3��&���­3��(���Ô3��(���ý3��)���&4��2���P4��-���ƒ4�����±4�����Ê4��6���Ù4�����5�����5�����85��.���R5�����5�����•5�����5�����¹5�����Ò5��3���î5�����"6�� ���B6�����L6�����a6�����u6�����“6�����¦6��/���»6�����ë6����� 7�����#7�� ���;7�����\7�����w7�����‹7�� ���›7�� ���¼7�����Ý7�����ü7�����8��"���(8�����K8��!���b8��,���„8�����Z������U���£������� ���2�������A���P���3���‡��������������h���M���4���™���K���7�������_�������T���B���Y���—����������I�������[��������������¨���¦���&�������š���”�������¢���`�������œ���6������!���������������˜�������Ž������\��������������"���(�������•���>������f���¤�������@���9���������)�������€���������������ž���N���,���Š���q���¥���Ÿ���������������{���g���/���«���+���E���V���0����������-���5������x���G��� ���J������� ���l���L���.����������“���R�������k��������������t����������W���o���„���¡���†���H���=������^���������������u�������#���~��� ���X���ƒ���Q�������r�������F��������������������������§���}���‘���%���w�������n���c��� �������‚������:�������j�������1���y���v������m���*���ˆ������������…������’���b���<���O���–�������d���©���e���p���s���›���$���Œ���;���‰����������]���|���C�������ª���S���'�������?���‹��� ������8������� ����������������������a����������i�������z���D���� and �%.*s: variable null or not set�%s %s started�%s %s stopped�%s home page: <%s> �%s running; dir=%s, file=%s, pid=%lu�%s: No such file or directory�%s: UNIX socket name too long�%s: incompatible data type in list item #%d�%s: not a valid IP address�%s: not a valid IP address or hostname�%s: not a valid boolean value�%s: not a valid port number�%s: recursion depth does not match previous definition�(%02d) Input:%.*s;�(C)�, �<arg: string> <arg: string>...�Alias�Aliases�Cannot open `%s'�Cannot parse include line�Cannot run `%s'�Cannot stat `%s'�Coalesced list:�Command to execute on event�Configuration file structure for direvent. For more information, use `info direvent configuration'.�Configure event watcher�Configure syslog logging�DIR�Disabled;�Events to watch for�FILE�Files to watch for�GNU direvent monitors changes in directories�Give a short usage message�Give this help list�INTERNAL ERROR at %s:%d: unhandled data type %d�Include search path: �Initial list:�License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. �List of additional options�Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options.�Modify environment�NAME�No include search path. �OPTION�Other options�PRIO�PROG�Pathname to watch�Prefix each message with its priority�Print program version�Recursive inclusion�Report bugs to %s. �Run as this user�Run command as this user�Run in foreground�Set debug level�Set pid file name�Set syslog facility. Arg is one of the following: user, daemon, auth, authpriv, mail, cron, local0 through local7 (case-insensitive), or a facility number.�Tag syslog messages with this string�The optional CONFIG argument supplies the name of the configuration file to use instead of %s. �This direvent uses %s interface. �Timeout for the command�USER�Unable to start external preprocessor `%s'�Usage:�WS trimming�Written by �[CONFIG]�`%s' already included at top level�`%s' already included here�add include directory�arg�begin scanning process list�cannot change to %s: %s�cannot create watcher %s/%s, stat failed: %s�cannot create watcher %s/%s: not enough memory�cannot open `%s'�cannot open directory %s: %s�cannot open pidfile %s for writing: %s�cannot run `%s': fork failed: %s�cannot run redirector `%s': fork failed: %s�cannot set watcher on %s: %s�cannot start redirector for %s, pipe failed: %s�cannot stat %s/%s: not enough memory�cannot stat %s: %s�check configuration file and exit�coalesce list�command substitution�creating watcher %s�element not found in table�environment: �expected "recursive" or end of statement�expected %s�expected %s, but found %s�file�globbing error�incompatible data type for `%s'�increase debug level�input exhausted�invalid include statement�invalid use of block statement�invalid wordsplit usage�level�log everything with priority PRIO and higher to the stderr, as well as to the syslog�memory exhausted�missing closing %c (start near #%lu)�missing closing quote�missing port number�name�no command configured�no error�no event handlers configured�no event handlers installed�no files match pattern %s�no paths configured�no such group�no such user�no user with UID %lu�not a number (stopped near `%s')�not enough memory�numeric overflow�parse error�path expansion�process %lu dumped core�process %lu exited successfully�process %lu failed with status %d�process %lu stopped on signal %d�process %lu terminated on signal %d�process %lu terminated with unrecognized status�process %lu timed out�quote removal�read error�redirector for %s started, pid=%lu�regexp�remain in foreground�removing watcher %s�run as this user�scheduling alarm in %lu seconds�seconds�self-test mode�set PID file�set syslog facility�show configuration file summary�starting %s, dir=%s, file=%s�string�surplus argument�surplus arguments�symbol table is full�tilde expansion�too many arguments�too many arguments to `%s'; missing semicolon?�unbalanced curly brace�unbalanced parenthesis�undefined variable�unexpected block statement�unexpected end of file�unexpected list�unknown error�unknown syslog facility `%s'�unknown syslog facility: %s�unknown syslog priority: %s�unrecognized event code�unrecognized option�value out of allowed range�variable expansion�waiting for %s (%lu) to terminate�warning: undefined variable `%.*s'�Project-Id-Version: direvent 5.1 Report-Msgid-Bugs-To: bug-direvent@gnu.org.ua POT-Creation-Date: 2019-07-13 19:23+0300 PO-Revision-Date: 2016-08-08 16:54+0300 Last-Translator: Sergey Poznyakoff <gray@gnu.org> Language-Team: Polish <translation-team-pl@lists.sourceforge.net> Language: pl MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Bugs: Report translation errors to the Language-Team address. Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2; � i �%.*s: zmienna pusta lub nie ustawiona�%s %s uruchomiony�%s %s skoÅ„czyÅ‚ pracÄ™�strona domowa %s: <%s> �uruchomiono %s; katalog=%s, plik=%s, pid=%lu�%s: Nie ma takiego pliku lub katalogu�%s: za dÅ‚uga nazwa gniazda�%s: element listy #%d ma niekompatybilny typ danych�%s: niepoprawny adres IP�%s: niepoprawny adres IPv4 lub nazwa hosta�%s nie jest poprawnÄ… wartoÅ›ciÄ… boole'owskÄ…�%s: niepoprawny numer portu�%s: głębokość rekurencji nie pasuje do poprzednio zdefiniowanej�(%02d) WejÅ›cie:%.*s;�©�, �<arg: Å‚aÅ„cuch> <arg: Å‚aÅ„cuch>...�Alias�Aliasy�Nie można otworzyć `%s'�Analiza polecenia dołączania nie powiodÅ‚a siÄ™�Nie można wykonać `%s'�WywoÅ‚anie stat(%s) nie powiodÅ‚o siÄ™�Zjednoczona lista:�Polecenie do wykonania w razie nastÄ…pienia wydarzenia�Struktura pliku konfiguracyjnego programu direvent. Å»eby otrzymać wiÄ™cej informacji uruchom `info direvent configuration'.�Konfiguracja obserwatora wydarzeÅ„�Konfiguracja rejestrowania zdarzeÅ„ przez syslog�KATALOG�Wyłączono;�Wydarzenia do obserwacji�PLIK�Pliki do obserwowania�GNU direvent monitoruje zmiany w katalogach�WyÅ›wietl krótkie informacje o skÅ‚adni polecenia�WyÅ›wietl ten tekst pomocy�BÅÄ„D WEWNĘTRZNY przy %s:%d: nieobsÅ‚ugiwany typ danych %d�Åšcieżka szukania plików nagłówkowych �Lista poczÄ…tkowa:�Licencja GPLv3+: GNU GPL wersja 3 albo późniejsza <http://gnu.org/licenses/gpl.html> To jest wolne oprogramowanie: możesz je modyfikować i rozpowszechniać. Autorzy NIE DAJÄ„ GWARANCJI w granicach dozwolonych prawem. �Lista dodatkowych opcji�Argumenty obowiÄ…zkowe lub opcjonalne dla dÅ‚ugich opcji sÄ… również obowiÄ…zkowe lub opcjonalne dla odpowiednich krótkich opcji.�Modyfikacja Å›rodowiska�NAZWA�Brak katalogów plików nagłówkowych �OPCJA�Inne opcje�PRIO�PROG�Åšcieżka do obserwacji�Dodaje przedrostek priorytety do komunikatów�WyÅ›wietl wersjÄ™ programu�Dołączanie rekurencyjne�Raporty o błędach należy wysyÅ‚ać do %s. �Wykonywanie z uprawnieniami podanego użytkownika�Wykonywanie poleceÅ„ z uprawnieniami podanego użytkownika�DziaÅ‚anie w trybie pierwszoplanowym�Ustawienie poziomu diagnostyki�Ustawia nazwÄ™ pliku PID�Ustawia urzÄ…dzenie syslog. Dozwolone wartoÅ›ci argumentu: user, daemon, auth, authpriv, mail, cron, local0 do local7 (bez rozróżniania maÅ‚ych i wielkich liter), lub numer urzÄ…dzenia.�Ustawia znacznik komunikatów.�Opcjonalny argument KONFIG podaje nazwÄ™ pliku konfiguracyjnego (domyÅ›lnie %s). �Ten direvent używa interfejsu %s. �Czas oczekiwania na zakoÅ„czenie wykonania polecenia�UÅ»YTKOWNIK�Nie mogÄ™ uruchomić preprocesora `%s'�SkÅ‚adnia:�usuniÄ™cie biaÅ‚ych znaków�Stworzony przez�[KONFIG]�`%s' zostaÅ‚ dołączony na poziomie najwyższym�`%s' już zostaÅ‚ dołączony tutaj�dodaje katalog plików nagłówkowych�arg�skanowanie listy procesów�nie można przejść do katalogu %s: %s�cannot create watcher %s/%s: błąd wywoÅ‚ania stat: %s�nie można stworzyć obserwatora %s/%s: brak pamiÄ™ci�nie można otworzyć `%s'�nie można otworzyć katalogu %s: %s�nie można otworzyć pliku %s do zapisu: %s�nie udaje siÄ™ uruchomić `%s': wywoÅ‚anie fork nie powiodÅ‚o siÄ™: %s�nie można uruchomić urzÄ…dzenia przekierowywujÄ…cego `%s': zawiódÅ‚ fork: %s�nie można ustawić obserwatora na %s: %s�nie można uruchomić urzÄ…dzenia przekierowywujÄ…cego %s: zawiódÅ‚ pipe: %s�stat %s/%s: brak pamiÄ™ci�stat(%s) nie powiódÅ‚ siÄ™: %s�sprawdza jedynie skÅ‚adniÄ™ pliku konfiguracyjnego�zjednoczenie listy�rozszerzenie poleceÅ„�utworzenie obserwatora %s�nie znaleziono elementu w tablicy�Å›rodowisko: �oczekiwano "recursive" lub koÅ„ca instrukcji�oczekiwano %s�oczekiwano %s, ale znaleziono %s�plik�błąd dopasowania�niekompatybilny typ danych dla `%s'�zwiÄ™kszenie poziomu diagnostyki�wejÅ›cie wyczerpane�nieprawidÅ‚owe polecenie dołączania�nieprawidÅ‚owe użycie instrukcji blokowej�niepoprawne użycie funkcji wordsplit�poziom�wyÅ›wietla komunikaty o priorytecie PRIO i wyższym na stderr oraz syslog�pamięć wyczerpana�brak zamykajÄ…cego znaku %c (poczÄ…tek przy #%lu)�brak cudzysÅ‚owu zamykajÄ…cego�brak numeru portu�nazwa�brak skonfigurowanego polecenia�żadnego błędu�brak skonfigurowanych programów obsÅ‚ugi wydarzeÅ„�nie zainstalowano żadnych programów obsÅ‚ugi wydarzeÅ„�żaden plik nie pasuje do wzoru %s�brak skonfigurowanych Å›cieżek�nie ma takiej grupy�nie ma takiego użytkownika�brak użytkownika o UID %lu�nie jest liczbÄ… (zatrzymano przy `%s')�brak pamiÄ™ci�przepeÅ‚nienie arytmetyczne�błąd analizy�rozszerzenie Å›cieżek�proces %lu zrzuciÅ‚ rdzeÅ„�proces %lu zakoÅ„czyÅ‚ siÄ™ pomyÅ›lnie�proces %lu zakoÅ„czyÅ‚ siÄ™ ze stanem %d�proces %lu zatrzymaÅ‚ siÄ™ na sygnaÅ‚ %d�proces %lu zakoÅ„czyÅ‚ siÄ™ na sygnaÅ‚ %d�proces %lu zakoÅ„czyÅ‚ siÄ™ z nierozpoznanym kodem�przekroczenie czasu oczekiwania na proces %lu�usuniÄ™cie cudzysÅ‚owów�błąd odczytu�uruchomiono urzÄ…dzenie przekierowywujÄ…ce %s, pid=%lu�wyr.reg.�dziaÅ‚anie na pierwszym planie�usuniÄ™cie obserwatora %s�przechodzi do uprawnieÅ„ podanego użytkownika�alarm za %lu sekund�sekundy�ustawia tryb samotestowania�ustawia nazwÄ™ pliku PID�ustawia urzÄ…dzenie syslogu�wyÅ›wietla podsumowanie instrukcji konfiguracyjnych�rozruch %s, katalog=%s, plik=%s�Å‚aÅ„cuch�za wiele argumentów�dodatkowe argumenty�tablica symboli przepeÅ‚niona�rozszerzenie tyldy�za dużo argumentów�zbyt dużo argumentów do `%s': brak Å›rednika?�niezbilansowany nawias klamrowy�niezbilansowane nawiasy�niezdefiniowana zmienna�nieoczekiwana instrukcja blokowa�nieoczekiwany koniec pliku�nieoczekiwana lista�nieznany błąd�nieznane urzÄ…dzenie syslog `%s'�nieznane urzÄ…dzenie syslog `%s'�nieznany priorytet syslog `%s'�nieznany kod wydarzenia�nierozpoznana opcja�wartość poza dozwolonym zakresem�rozszerzenie zmiennych�czekanie na zakoÅ„czenie %s (%lu)�ostrzeżenie: niezdefiniowana zmienna `%.*s'������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/po/Makevars����������������������������������������������������������������������������0000644�0001750�0001750�00000003431�12625627743�015317� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile variables for PO directory in any package using GNU gettext. # Usually the message domain is the same as the package name. DOMAIN = $(PACKAGE) # These two variables depend on the location of this directory. subdir = po top_builddir = .. # These options get passed to xgettext. XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ # This is the copyright holder that gets inserted into the header of the # $(DOMAIN).pot file. Set this to the copyright holder of the surrounding # package. (Note that the msgstr strings, extracted from the package's # sources, belong to the copyright holder of the package.) Translators are # expected to transfer the copyright for their translations to this person # or entity, or to disclaim their copyright. The empty string stands for # the public domain; in this case the translators are expected to disclaim # their copyright. COPYRIGHT_HOLDER = Sergey Poznyakoff # This is the email address or URL to which the translators shall report # bugs in the untranslated strings: # - Strings which are not entire sentences, see the maintainer guidelines # in the GNU gettext documentation, section 'Preparing Strings'. # - Strings which use unclear terms or require additional context to be # understood. # - Strings which make invalid assumptions about notation of date, time or # money. # - Pluralisation problems. # - Incorrect English spelling. # - Incorrect formatting. # It can be your email address, or a mailing list address where translators # can write to without being subscribed, or the URL of a web page through # which the translators can contact you. MSGID_BUGS_ADDRESS = bug-direvent@gnu.org.ua # This is the list of locale categories, beyond LC_MESSAGES, for which the # message catalogs shall be used. It is usually empty. EXTRA_LOCALE_CATEGORIES = ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/po/hu.gmo������������������������������������������������������������������������������0000644�0001750�0001750�00000034462�13512402637�014740� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Þ•����«������t��å���Ì ������`�����a�����g�� ���†�� ���”�����¢��$���¶�����Û�����ù��+��������C��&���^�����…�����£��6���¿�����ö����� ����� ����������/�����5�����=�����N�����h�����x�����‰�����™��c���µ����������1�����J�� ���N�����X�����l�����q��,���„�����±�����Ì��/���à������� ���&��È���4�����ý��s��������Œ�����Ÿ�����¤�����½�� ���Ä�����Ò�����×�����Ü��%���î����������*�����>�����R�����c�����|�����Ž�����ž��›���°��$���L��`���q��"���Ò�����õ����� ��*��������=�� ���D�� ���P�����\��"���e�����ˆ�����£�����¹�����½�����Ù��,���ñ��.��������M�����^��&���{�� ���¢��+���Ã�����ï��/��� ��$���<�����a��!���t�� ���–�����¤�����¹�����Í�� ���è��(���ö�� ��������+�����E�����J�����Y�����y�����Ž�����ž�����¸�����×�����ï��T���õ�����J��$���[�����€�����–�����ª�����¯�����Å�����Î�����ë����������!�� ���5�� ���C�����P�� ���e�����†�����˜�� ���©�����µ�����Ä�����Ü��!���ü�� �����#���?��/���c�����“�� ���©�� ���·��"���Â�����å�����ì���������������&�����F�����N�� ���]�����j�����~�����ž�����»�����Â�����Ó�����å�����ú����� ��.��������L�����c�����z����������¨�����¿�� ���Ï�����Ý�����ú����������2�����J�����^�����y��!���Œ��"���®����Ñ�����Õ!��.���Û!����� "�����"�����-"��!���E"��%���g"��%���"��8���³"�����ì"��(���#��"���0#�����S#��A���p#�����²#�����Ç#�����Ê#�� ���Í#�����î#�����ö#�����ÿ#��'���$�����E$�����b$�����~$��&���‘$��}���¸$�����6%�����U%�� ���u%�� ���€%�����Š%�����¡%�����§%��:���»%��1���ö%�� ���(&��0���I&�����z&�����š&��Ø���©&�� ���‚'��‚���£'�����&(�����?(��%���D(�� ���j(�����t(�����Š(�����(�����”(��5���­(�����ã(�����ü(�����)��!���.)��*���P)�����{)��!���”)�����¶)��Í���Ò)��0��� *��j���Ñ*��'���<+�����d+�� ���|+��>���Š+�� ���É+�� ���Õ+�����ã+�����ê+��,���ù+�����&,��"���F,�����i,��(���m,��#���–,��A���º,��>���ü,�����;-��,���Y-��3���†-��7���º-��K���ò-��-���>.��P���l.��.���½.�����ì.��,���/�����3/�����F/�����]/��$���x/�� ���/��4���ª/�����ß/��$���ñ/�����0�����0��.���,0�����[0�����z0��#���Ž0��*���²0��'���Ý0�����1��w��� 1�����ƒ1��0���˜1�����É1�����ç1�����û1������2�� ���2��&���%2��%���L2��,���r2�� ���Ÿ2�����À2�����Ô2��+���î2��-���3�����H3�����]3�����x3�����‹3��!���¢3��%���Ä3��6���ê3��3���!4��6���U4��7���Œ4��-���Ä4�����ò4����� 5��*���5�����D5�����Z5�����o5��!���Œ5��*���®5�� ���Ù5�����ä5�����ø5�����6��,���06�����]6�����}6�����…6�����™6�����¯6�����Ë6�����ä6��=���ø6��(���67��#���_7�����ƒ7����� 7�����»7�����Ï7�����ß7��&���ï7�� ���8�� ���78�����X8�����t8��.���8�����¼8��#���Ô8��9���ø8�����Z������U���£������� ���2�������A���P���3���‡��������������h���M���4���™���K���7�������_�������T���B���Y���—����������I�������[��������������¨���¦���&�������š���”�������¢���`�������œ���6������!���������������˜�������Ž������\��������������"���(�������•���>������f���¤�������@���9���������)�������€���������������ž���N���,���Š���q���¥���Ÿ���������������{���g���/���«���+���E���V���0����������-���5������x���G��� ���J������� ���l���L���.����������“���R�������k��������������t����������W���o���„���¡���†���H���=������^���������������u�������#���~��� ���X���ƒ���Q�������r�������F��������������������������§���}���‘���%���w�������n���c��� �������‚������:�������j�������1���y���v������m���*���ˆ������������…������’���b���<���O���–�������d���©���e���p���s���›���$���Œ���;���‰����������]���|���C�������ª���S���'�������?���‹��� ������8������� ����������������������a����������i�������z���D���� and �%.*s: variable null or not set�%s %s started�%s %s stopped�%s home page: <%s> �%s running; dir=%s, file=%s, pid=%lu�%s: No such file or directory�%s: UNIX socket name too long�%s: incompatible data type in list item #%d�%s: not a valid IP address�%s: not a valid IP address or hostname�%s: not a valid boolean value�%s: not a valid port number�%s: recursion depth does not match previous definition�(%02d) Input:%.*s;�(C)�, �<arg: string> <arg: string>...�Alias�Aliases�Cannot open `%s'�Cannot parse include line�Cannot run `%s'�Cannot stat `%s'�Coalesced list:�Command to execute on event�Configuration file structure for direvent. For more information, use `info direvent configuration'.�Configure event watcher�Configure syslog logging�DIR�Disabled;�Events to watch for�FILE�Files to watch for�GNU direvent monitors changes in directories�Give a short usage message�Give this help list�INTERNAL ERROR at %s:%d: unhandled data type %d�Include search path: �Initial list:�License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. �List of additional options�Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options.�Modify environment�NAME�No include search path. �OPTION�Other options�PRIO�PROG�Pathname to watch�Prefix each message with its priority�Print program version�Recursive inclusion�Report bugs to %s. �Run as this user�Run command as this user�Run in foreground�Set debug level�Set pid file name�Set syslog facility. Arg is one of the following: user, daemon, auth, authpriv, mail, cron, local0 through local7 (case-insensitive), or a facility number.�Tag syslog messages with this string�The optional CONFIG argument supplies the name of the configuration file to use instead of %s. �This direvent uses %s interface. �Timeout for the command�USER�Unable to start external preprocessor `%s'�Usage:�WS trimming�Written by �[CONFIG]�`%s' already included at top level�`%s' already included here�add include directory�arg�begin scanning process list�cannot change to %s: %s�cannot create watcher %s/%s, stat failed: %s�cannot create watcher %s/%s: not enough memory�cannot open `%s'�cannot open directory %s: %s�cannot open pidfile %s for writing: %s�cannot run `%s': fork failed: %s�cannot run redirector `%s': fork failed: %s�cannot set watcher on %s: %s�cannot start redirector for %s, pipe failed: %s�cannot stat %s/%s: not enough memory�cannot stat %s: %s�check configuration file and exit�coalesce list�command substitution�creating watcher %s�element not found in table�environment: �expected "recursive" or end of statement�expected %s�expected %s, but found %s�file�globbing error�incompatible data type for `%s'�increase debug level�input exhausted�invalid include statement�invalid use of block statement�invalid wordsplit usage�level�log everything with priority PRIO and higher to the stderr, as well as to the syslog�memory exhausted�missing closing %c (start near #%lu)�missing closing quote�missing port number�name�no command configured�no error�no event handlers configured�no event handlers installed�no files match pattern %s�no paths configured�no such group�no such user�no user with UID %lu�not a number (stopped near `%s')�not enough memory�numeric overflow�parse error�path expansion�process %lu dumped core�process %lu exited successfully�process %lu failed with status %d�process %lu stopped on signal %d�process %lu terminated on signal %d�process %lu terminated with unrecognized status�process %lu timed out�quote removal�read error�redirector for %s started, pid=%lu�regexp�remain in foreground�removing watcher %s�run as this user�scheduling alarm in %lu seconds�seconds�self-test mode�set PID file�set syslog facility�show configuration file summary�starting %s, dir=%s, file=%s�string�surplus argument�surplus arguments�symbol table is full�tilde expansion�too many arguments�too many arguments to `%s'; missing semicolon?�unbalanced curly brace�unbalanced parenthesis�undefined variable�unexpected block statement�unexpected end of file�unexpected list�unknown error�unknown syslog facility `%s'�unknown syslog facility: %s�unknown syslog priority: %s�unrecognized event code�unrecognized option�value out of allowed range�variable expansion�waiting for %s (%lu) to terminate�warning: undefined variable `%.*s'�Project-Id-Version: direvent 5.1 Report-Msgid-Bugs-To: bug-direvent@gnu.org.ua POT-Creation-Date: 2019-07-13 19:23+0300 PO-Revision-Date: 2017-04-27 22:18+0200 Last-Translator: Balázs Úr <urbalazs@gmail.com> Language-Team: Hungarian <translation-team-hu@lists.sourceforge.net> Language: hu MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Bugs: Report translation errors to the Language-Team address. Plural-Forms: nplurals=2; plural=(n != 1); X-Generator: Lokalize 1.2 � és �%.*s: a változó üres vagy nincs beállítva�%s %s elindítva�%s %s leállítva�A(z) %s honlapja: <%s> �%s fut; kvt=%s, fájl=%s, pid=%lu�%s: Nincs ilyen fájl vagy könyvtár�%s: a UNIX foglalat neve túl hosszú�%s: összeférhetetlen adattípus a(z) #%d. listaelemben�%s: nem érvényes IP-cím�%s: nem érvényes IP-cím vagy gépnév�%s: nem érvényes logikai érték�%s: nem érvényes portszám�%s: a rekurziómélység nem egyezik a korábbi meghatározással�(%02d) Bemenet:%.*s;�©�, �<arg: szöveg> <arg: szöveg>…�Ãlnév�Ãlnevek�Nem lehet megnyitni: „%sâ€�Nem lehet feldolgozni a felvételi sort�Nem lehet futtatni: „%sâ€�Nem lehet elérni: „%sâ€�Egyesített lista:�Az eseménykor végrehajtandó parancs�A direvent beállítófájl szerkezete. További információkért használja az „info direvent configuration†parancsot.�EseményfigyelÅ‘ beállítása�Syslog naplózás beállítása�KÖNYVTÃR�Letiltva;�FigyelendÅ‘ események�FÃJL�FigyelendÅ‘ fájlok�A GNU direvent változásokat figyel meg a könyvtárakban�Egy rövid használati utasítás megjelenítése�Ezen súgólista megjelenítése�BELSÅ HIBA itt: %s:%d: kezeletlen %d adattípus�Felvételi keresési útvonal: �Kezdeti lista:�GPLv3+ licenc: GNU GPL 3. verziója vagy késÅ‘bbi változat <http://gnu.org/licenses/gpl.html> Ez szabad szoftver: szabadon módosíthatja és továbbadhatja. NINCS GARANCIA, már amennyire ezt a törvény engedi. �További beállítások listája�A hosszú kapcsolók kötelezÅ‘ vagy elhagyható argumentumai a megfelelÅ‘ rövid kapcsolóknál is kötelezÅ‘k vagy elhagyhatók.�Környezet módosítása�NÉV�Nincs felvételi keresési útvonal. �KAPCSOLÓ�Egyéb beállítások�PRIO�PROG�FigyelendÅ‘ útvonalnév�Minden üzenet elé elÅ‘tag tétele a prioritásával�Programverzió kiírása�Rekurzív felvétel�A hibákat ide jelentse: %s. �Futtatás ezen felhasználóként�Parancs futtatása ezen felhasználóként�Futtatás az elÅ‘térben�Hibakeresési szint beállítása�PID fájlnév beállítása�Syslog képesség beállítása. Az argumentum a következÅ‘k egyike lehet: user, daemon, auth, authpriv, mail, cron, local0 és local7 között (kis- és nagybetű érzéketlen) vagy egy képesség szám.�Syslog üzenetek címkézése ezzel a szöveggel�Az elhagyható BEÃLLÃTÃS argumentum szolgáltatja a használandó beállítófájl nevét %s helyett. �Ez a direvent %s felületet használ. �A parancs idÅ‘korlátja�FELHASZNÃLÓ�Nem sikerült elindítani a külsÅ‘ elÅ‘feldolgozót: „%sâ€�Használat:�WS levágása�Ãrta �[BEÃLLÃTÃS]�„%s†már fel van véve a felsÅ‘ szinten�„%s†már fel van véve itt�felvételi könyvtár hozzáadása�arg�folyamatlista vizsgálatának elkezdése�nem lehet erre változtatni: %s: %s�nem lehet létrehozni a figyelÅ‘t: %s/%s, elérés sikertelen: %s�nem lehet létrehozni a figyelÅ‘t: %s/%s: nincs elég memória�nem lehet megnyitni: „%sâ€�nem lehet megnyitni a(z) %s könyvtárat: %s�nem lehet megnyitni a(z) %s pid fájlt írásra: %s�nem lehet futtatni: „%sâ€: elágazás sikertelen: %s�nem lehet a(z) „%s†átirányítót futtatni: elágazás sikertelen: %s�nem lehet figyelÅ‘t beállítani ezen: %s: %s�nem lehet elindítani a(z) %s átirányítóját, az adatcsatorna sikertelen: %s�nem lehet elérni: %s/%s: nincs elég memória�nem lehet elérni: %s: %s�beállítófájl ellenÅ‘rzése és kilépés�lista egyesítése�parancshelyettesítés�figyelÅ‘ létrehozása: %s�az elem nem található a táblában�környezet: �várt érték: „recursive†vagy utasítás vége�várt érték: %s�várt érték: %s, de %s található�fájl�csillogás hiba�összeférhetetlen adattípus ennél: „%sâ€�hibakeresési szint növelése�elfogyott a bemenet�érvénytelen felvételi utasítás�érvénytelen blokk utasítás használata�érvénytelen szófelosztás használat�szint�minden PRIO és magasabb prioritással rendelkezÅ‘ naplózása a szabványos hibakimenetre, valamint a syslog programba�elfogyott a memória�hiányzó lezáró %c (#%lu környékén kezdve)�hiányzó lezáró idézÅ‘jel�hiányzó portszám�név�nincs parancs beállítva�nincs hiba�nincsenek eseménykezelÅ‘k beállítva�nincsenek eseménykezelÅ‘k telepítve�nem illeszkednek fájlok erre a mintára: %s�nincsenek útvonalak beállítva�nincs ilyen csoport�nincs ilyen felhasználó�nincs %lu UID-val rendelkezÅ‘ felhasználó�nem szám (leállítva „%s†környékén)�nincs elég memória�számszerű túlcsordulás�feldolgozási hiba�útvonal-kiterjesztés�a(z) %lu folyamat kiírta a magot�a(z) %lu folyamat sikeresen kilépett�a(z) %lu folyamat meghiúsult ezzel az állapottal: %d�a(z) %lu folyamat leállt ennél a szignálnál: %d�a(z) %lu folyamat megszakadt ennél a szignálnál: %d�a(z) %lu folyamat megszakadt azonosítatlan állapottal�a(z) %lu folyamat túllépte az idÅ‘korlátot�idézés-eltávolítás�olvasási hiba�a(z) %s átirányítója elindult, pid=%lu�reguláris kifejezés�maradjon elÅ‘térben�figyelÅ‘ eltávolítása: %s�futtatás ezen felhasználóként�ütemezett riasztás %lu másodperc múlva�másodperc�önellenÅ‘rzÅ‘ mód�PID fájl beállítása�syslog képesség beállítása�beállítófájl összegzés megjelenítése�%s indítása, kvt=%s, fájl=%s�szöveg�többlet argumentum�többlet argumentumok�a szimbólumtábla tele van�hullámjel-kiterjesztés�túl sok argumentum�túl sok argumentum ehhez: „%sâ€; hiányzó pontosvesszÅ‘?�a kapcsos zárójelek száma nem egyezik�zárójelek nincsenek egyensúlyban�nem meghatározott változó�nem várt blokk utasítás�váratlan fájlvég�nem várt lista�ismeretlen hiba�ismeretlen syslog képesség: „%sâ€�ismeretlen syslog képesség: %s�ismeretlen syslog prioritás: %s�azonosítatlan eseménykód�azonosítatlan kapcsoló�az érték a megengedett tartományon kívüli�változó-kiterjesztés�várakozás %s (%lu) befejezésére�figyelmeztetés: nem meghatározott változó: „%.*sâ€���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/po/pt_BR.po����������������������������������������������������������������������������0000644�0001750�0001750�00000053531�13512402637�015164� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Brazilian Portuguese translation for direvent # Copyright (C) 2016 Free Software Foundation, Inc. # Copyright (C) 2016 Sergey Poznyakoff # This file is distributed under the same license as the direvent package. # Rafael Fontenelle <rafaelff@gnome.org>, 2014, 2016. msgid "" msgstr "" "Project-Id-Version: direvent 5.1\n" "Report-Msgid-Bugs-To: bug-direvent@gnu.org.ua\n" "POT-Creation-Date: 2019-07-13 19:23+0300\n" "PO-Revision-Date: 2016-08-09 15:33-0200\n" "Last-Translator: Rafael Fontenelle <rafaelff@gnome.org>\n" "Language-Team: Brazilian Portuguese <ldpbr-translation@lists.sourceforge." "net>\n" "Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "X-Generator: Virtaal 0.7.1\n" #: cmdline.opt:26 msgid "increase debug level" msgstr "aumenta o nível de depuração" #: cmdline.opt:32 msgid "PRIO" msgstr "PRIO" #: cmdline.opt:32 msgid "" "log everything with priority PRIO and higher to the stderr, as well as to " "the syslog" msgstr "" "registra tudo com prioridade PRIO ou maior para a saída de erro, assim como " "para o syslog" #: cmdline.opt:41 msgid "NAME" msgstr "NOME" #: cmdline.opt:41 msgid "set syslog facility" msgstr "define a facilidade syslog" #: cmdline.opt:47 msgid "remain in foreground" msgstr "mantém em primeiro plano" #: cmdline.opt:53 msgid "DIR" msgstr "DIR" #: cmdline.opt:53 msgid "add include directory" msgstr "adiciona diretório de inclusão" #: cmdline.opt:59 msgid "PROG" msgstr "PROG" #: cmdline.opt:59 msgid "self-test mode" msgstr "modo auto-teste" #: cmdline.opt:65 msgid "FILE" msgstr "ARQUIVO" #: cmdline.opt:65 msgid "set PID file" msgstr "define arquivo PID" #: cmdline.opt:71 msgid "check configuration file and exit" msgstr "verifica arquivo de configuração e sai" #: cmdline.opt:77 msgid "USER" msgstr "USUÃRIO" #: cmdline.opt:77 msgid "run as this user" msgstr "executa como esse usuário" #: cmdline.opt:87 msgid "show configuration file summary" msgstr "mostra resumo do arquivo de configuração" #: cmdline.opt:81 msgid "Other options" msgstr "Outras opções" #: cmdline.opt:93 msgid "Give this help list" msgstr "Fornece essa lista de ajuda" #: cmdline.opt:93 msgid "Give a short usage message" msgstr "Fornece uma mensagem curta de uso" #: cmdline.opt:93 msgid "Print program version" msgstr "Exibe a versão do programa" #: cmdline.opt:13 msgid "GNU direvent monitors changes in directories" msgstr "GNU direvent monitora alterações em diretórios" #: cmdline.opt:15 msgid "[CONFIG]" msgstr "[CONFIG]" #: cmdline.opt:95 #, c-format msgid "" "The optional CONFIG argument supplies the name of the configuration file\n" "to use instead of %s.\n" "\n" msgstr "" "O argumento opcional CONFIG fornece o nome do arquivo de configuração\n" "a ser usado ao invés de %s.\n" "\n" #. TRANSLATORS: %s is one of: inotify, kqueue #: cmdline.opt:99 #, c-format msgid "" "This direvent uses %s interface.\n" "\n" msgstr "" "Esse direvent usa uma interface %s.\n" "\n" #: cmdline.opt:102 #, c-format msgid "Include search path:\n" msgstr "Caminho de pesquisa de inclusão:\n" #: cmdline.opt:105 #, c-format msgid "No include search path.\n" msgstr "Nenhum caminho de pesquisa de inclusão.\n" #: src/config.c:63 #, c-format msgid "unknown syslog facility: %s" msgstr "facilidade syslog desconhecida: %s" #: src/config.c:80 #, c-format msgid "unknown syslog priority: %s" msgstr "prioridade syslog desconhecida: %s" #: src/config.c:88 msgid "unexpected block statement" msgstr "declaração de bloco inesperada" #: src/config.c:97 #, c-format msgid "expected %s" msgstr "esperava %s" #: src/config.c:102 #, c-format msgid "expected %s, but found %s" msgstr "esperava %s, mas encontrou %s" #: src/config.c:124 #, c-format msgid "unknown syslog facility `%s'" msgstr "facilidade syslog desconhecida \"%s\"" #: src/config.c:133 src/config.c:606 msgid "name" msgstr "nome" #: src/config.c:134 msgid "" "Set syslog facility. Arg is one of the following: user, daemon, auth, " "authpriv, mail, cron, local0 through local7 (case-insensitive), or a " "facility number." msgstr "" "Define facilidade syslog. Arg é um dentre os seguintes: user, daemon, auth, " "authpriv, mail, cron, local0 até local7 (sem diferenciação de maiúsculo/" "minúsculo) ou uo número de uma facilidade." #: src/config.c:139 grecs/src/format.c:36 grecs/src/tree.c:69 msgid "string" msgstr "texto" #: src/config.c:139 msgid "Tag syslog messages with this string" msgstr "Marca mensagens syslog com esse texto" #: src/config.c:142 grecs/src/format.c:141 msgid "arg" msgstr "arg" #: src/config.c:143 msgid "Prefix each message with its priority" msgstr "Prefixa cada mensagem com essa prioridade" #: src/config.c:191 #, c-format msgid "%s: recursion depth does not match previous definition" msgstr "%s: a profundidade de recursão não corresponde ao definido previamente" #: src/config.c:212 msgid "no paths configured" msgstr "nenhum caminho configurado" #: src/config.c:217 msgid "no command configured" msgstr "nenhum comando configurado" #: src/config.c:229 grecs/src/tree.c:665 msgid "invalid use of block statement" msgstr "uso inválido de declaração de bloco" #: src/config.c:274 msgid "expected \"recursive\" or end of statement" msgstr "esperado \"recursive\" ou fim de declaração" #: src/config.c:289 msgid "surplus argument" msgstr "argumento em excesso" #: src/config.c:295 src/config.c:446 msgid "unexpected list" msgstr "lista inesperada" #: src/config.c:326 src/config.c:341 src/config.c:356 msgid "unrecognized event code" msgstr "código de evento não reconhecido" #: src/config.c:438 msgid "surplus arguments" msgstr "argumentos em excesso" #: src/config.c:452 msgid "no such user" msgstr "usuário inexistente" #: src/config.c:459 msgid "no such group" msgstr "grupo inexistente" #: src/config.c:501 msgid "unrecognized option" msgstr "opção não reconhecida" #: src/config.c:595 msgid "Pathname to watch" msgstr "Caminho a observar" #: src/config.c:598 msgid "Events to watch for" msgstr "Eventos a observar por" #: src/config.c:601 msgid "regexp" msgstr "expressão regular" #: src/config.c:601 msgid "Files to watch for" msgstr "Arquivos a observar por" #: src/config.c:604 msgid "Command to execute on event" msgstr "Comando para executar no evento" #: src/config.c:606 msgid "Run command as this user" msgstr "Executa comando como esse usuário" #: src/config.c:609 msgid "seconds" msgstr "segundos" #: src/config.c:609 msgid "Timeout for the command" msgstr "Tempo limite de espera pelo comando" #: src/config.c:611 msgid "List of additional options" msgstr "Lista de opções adicionais" #: src/config.c:614 msgid "<arg: string> <arg: string>..." msgstr "<arg: texto> <arg: texto>..." #: src/config.c:615 msgid "Modify environment" msgstr "Modifica ambiente" #: src/config.c:622 msgid "Run as this user" msgstr "Executa como esse usuário" #: src/config.c:624 msgid "Run in foreground" msgstr "Executa em primeiro plano" #: src/config.c:626 msgid "file" msgstr "arquivo" #: src/config.c:626 msgid "Set pid file name" msgstr "Define nome de arquivo pid" #: src/config.c:628 msgid "Configure syslog logging" msgstr "Configura registro syslog" #: src/config.c:630 msgid "level" msgstr "nível" #: src/config.c:630 msgid "Set debug level" msgstr "Define nível de depuração" #: src/config.c:632 msgid "Configure event watcher" msgstr "Configure observador de evento" #: src/config.c:643 msgid "" "Configuration file structure for direvent.\n" "For more information, use `info direvent configuration'." msgstr "" "Estrutura de arquivo de configuração para direvent.\n" "Para mais informação, use \"info direvent configuration\"." #: src/direvent.c:142 src/direvent.c:164 src/watcher.c:93 src/watcher.c:125 msgid "not enough memory" msgstr "memória insuficiente" #: src/direvent.c:274 #, c-format msgid "cannot open pidfile %s for writing: %s" msgstr "não é possível abrir o arquivo PID %s para escrita: %s" #: src/direvent.c:302 #, c-format msgid "no user with UID %lu" msgstr "nenhum usuário com UID %lu" #: src/direvent.c:420 #, c-format msgid "cannot run `%s': fork failed: %s" msgstr "não é possível \"%s\": fork falhou: %s" #: src/direvent.c:480 msgid "too many arguments" msgstr "argumentos demais" #: src/direvent.c:522 #, c-format msgid "%s %s started" msgstr "%s %s iniciou" #: src/direvent.c:546 #, c-format msgid "%s %s stopped" msgstr "%s %s parou" #: src/environ.c:25 msgid "environment: " msgstr "ambiente: " #: src/progman.c:142 #, c-format msgid "process %lu exited successfully" msgstr "o processo %lu saiu com sucesso" #: src/progman.c:145 #, c-format msgid "process %lu failed with status %d" msgstr "o processo %lu saiu com o status %d" #: src/progman.c:155 #, c-format msgid "process %lu terminated on signal %d" msgstr "o processo %lu terminado com sinal %d" #: src/progman.c:158 #, c-format msgid "process %lu stopped on signal %d" msgstr "o processo %lu parou com sinal %d" #: src/progman.c:163 #, c-format msgid "process %lu dumped core" msgstr "o processo %lu despejou seu núcleo" #: src/progman.c:167 #, c-format msgid "process %lu terminated with unrecognized status" msgstr "o processo %lu terminou com status não reconhecido" #: src/progman.c:228 msgid "begin scanning process list" msgstr "início de varredura de lista de processos" #: src/progman.c:232 #, c-format msgid "process %lu timed out" msgstr "o processo %lu esgotou tempo limite" #: src/progman.c:241 #, c-format msgid "scheduling alarm in %lu seconds" msgstr "agendando alarme em %lu segundos" #: src/progman.c:322 #, c-format msgid "cannot start redirector for %s, pipe failed: %s" msgstr "não foi possível iniciar o redirecionador para %s, pipe falhou: %s" #: src/progman.c:354 #, c-format msgid "cannot run redirector `%s': fork failed: %s" msgstr "não foi possível redirecionar \"%s\": fork falhou: %s" #: src/progman.c:359 #, c-format msgid "redirector for %s started, pid=%lu" msgstr "redirecionador para %s iniciado, pid=%lu" #: src/progman.c:455 #, c-format msgid "starting %s, dir=%s, file=%s" msgstr "iniciando %s, dir=%s, arquivo=%s" #: src/progman.c:484 #, c-format msgid "cannot change to %s: %s" msgstr "não foi possível alterar para %s: %s" #: src/progman.c:512 #, c-format msgid "%s running; dir=%s, file=%s, pid=%lu" msgstr "%s em execução, dir=%s, arquivo=%s, pid=%lu" #: src/progman.c:534 #, c-format msgid "waiting for %s (%lu) to terminate" msgstr "esperando por %s (%lu) ser terminado" #: src/watcher.c:183 src/watcher.c:513 #, c-format msgid "removing watcher %s" msgstr "removendo observador %s" #: src/watcher.c:195 msgid "no watchers left; exiting now" msgstr "" #: src/watcher.c:262 #, c-format msgid "installing CREATE sentinel for %s" msgstr "" #: src/watcher.c:275 #, c-format msgid "creating watcher %s" msgstr "criando observador %s" #: src/watcher.c:281 src/watcher.c:296 #, c-format msgid "cannot set watcher on %s: %s" msgstr "não foi definir observador em %s: %s" #: src/watcher.c:377 #, c-format msgid "cannot create watcher %s/%s: not enough memory" msgstr "não foi possível criar observador %s/%s: memória insuficiente" #: src/watcher.c:384 #, c-format msgid "cannot create watcher %s/%s, stat failed: %s" msgstr "não foi possível criar observador %s/%s, stat falhou: %s" #: src/watcher.c:430 #, c-format msgid "cannot open directory %s: %s" msgstr "não foi possível abrir o diretório %s: %s" #: src/watcher.c:447 #, c-format msgid "cannot stat %s/%s: not enough memory" msgstr "não foi possível obter status %s/%s: memória insuficiente" #: src/watcher.c:452 #, c-format msgid "cannot stat %s: %s" msgstr "não foi possível obter status de %s: %s" #: src/watcher.c:497 msgid "no event handlers configured" msgstr "nenhum manipulador de evento configurado" #: src/watcher.c:502 msgid "no event handlers installed" msgstr "nenhum manipulador de evento instalado" #: grecs/src/format.c:33 msgid "void" msgstr "" #: grecs/src/format.c:46 msgid "number" msgstr "" #: grecs/src/format.c:49 msgid "time" msgstr "" #: grecs/src/format.c:52 msgid "boolean" msgstr "" #: grecs/src/format.c:55 msgid "IPv4" msgstr "" #: grecs/src/format.c:58 msgid "CIDR" msgstr "" #: grecs/src/format.c:61 #, fuzzy msgid "hostname" msgstr "nome" #: grecs/src/format.c:64 msgid "sockaddr" msgstr "" #: grecs/src/format.c:67 msgid "section" msgstr "" #: grecs/src/format.c:70 msgid "null" msgstr "" #: grecs/src/format.c:133 msgid "Disabled;" msgstr "Desabilitado;" #: grecs/src/opthelp.c:123 grecs/src/opthelp.c:269 msgid "Usage:" msgstr "Uso:" #: grecs/src/opthelp.c:127 msgid "OPTION" msgstr "OPÇÃO" #: grecs/src/opthelp.c:132 grecs/src/opthelp.c:427 msgid "Aliases" msgstr "Apelidos" #: grecs/src/opthelp.c:132 grecs/src/opthelp.c:427 msgid "Alias" msgstr "Apelido" #: grecs/src/opthelp.c:186 msgid "" "Mandatory or optional arguments to long options are also mandatory or " "optional for any corresponding short options." msgstr "" "Parâmetros obrigatórios ou opcionais para opções longas são também " "obrigatórios ou opcionais para qualquer opção curta correspondente." #. TRANSLATORS: The placeholder indicates the bug-reporting #. address for this package. Please add _another line_ saying #. "Report translation bugs to <...>\n" with the address for #. translation bugs (typically your translation team's web or #. email address). #: grecs/src/opthelp.c:202 #, c-format msgid "Report bugs to %s.\n" msgstr "Relate erros para %s.\n" #: grecs/src/opthelp.c:205 #, c-format msgid "%s home page: <%s>\n" msgstr "Site do %s: <%s>\n" #. TRANSLATORS: Translate "(C)" to the copyright symbol #. (C-in-a-circle), if this symbol is available in the user's #. locale. Otherwise, do not translate "(C)"; leave it as-is. #: grecs/src/opthelp.c:457 msgid "(C)" msgstr "(C)" #: grecs/src/opthelp.c:466 msgid "" "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." "html>\n" "This is free software: you are free to change and redistribute it.\n" "There is NO WARRANTY, to the extent permitted by law.\n" "\n" msgstr "" "Licença GPLv3+: GNU GPL versão 3 ou posterior <http://gnu.org/licenses/gpl." "html>.\n" "Esse é um software livre: você é livre para modificá-lo e redistribuí-lo.\n" "NÃO Hà GARANTIA, na extensão permitida pela lei.\n" "\n" #: grecs/src/opthelp.c:483 msgid "Written by " msgstr "Escrito por " #. TRANSLATORS: This string is used as a delimiter between #. authors' names as in: #. #. Written by Winnie the Pooh, Piglet ... #. #: grecs/src/opthelp.c:489 msgid ", " msgstr ", " #. TRANSLATORS: This string acts as a delimiter before the #. last author's names, e.g.: #. #. Written by Winnie the Pooh, Piglet and Christopher Robin. #. #: grecs/src/opthelp.c:495 msgid " and " msgstr " e " # , c-format #: grecs/src/path-parser.c:62 #, c-format msgid "cannot open `%s'" msgstr "não foi possível abrir o %s" #: grecs/src/path-parser.c:108 grecs/src/path-parser.c:123 msgid "unexpected end of file" msgstr "fim de linha inesperado" #: grecs/src/path-parser.c:143 msgid "parse error" msgstr "erro de analise" #: grecs/src/preproc.c:448 grecs/src/preproc.c:470 #, c-format msgid "Cannot stat `%s'" msgstr "Não foi possível obter status de \"%s\"" #: grecs/src/preproc.c:453 grecs/src/preproc.c:458 msgid "Recursive inclusion" msgstr "Inclusão recursiva" #: grecs/src/preproc.c:461 #, c-format msgid "`%s' already included here" msgstr "\"%s\" já incluso aqui" #: grecs/src/preproc.c:465 #, c-format msgid "`%s' already included at top level" msgstr "\"%s\" já incluso no nível superior" #: grecs/src/preproc.c:480 #, c-format msgid "Cannot open `%s'" msgstr "Não foi possível abrir \"%s\"" #: grecs/src/preproc.c:595 msgid "Cannot parse include line" msgstr "Não foi possível analisar a linha incluída" #: grecs/src/preproc.c:598 msgid "invalid include statement" msgstr "declaração inclusa inválida" #: grecs/src/preproc.c:624 msgid "read error" msgstr "erro de leitura" #: grecs/src/preproc.c:632 #, c-format msgid "%s: No such file or directory" msgstr "%s: Arquivo ou diretório não encontrados" #: grecs/src/preproc.c:698 #, c-format msgid "Unable to start external preprocessor `%s'" msgstr "Não foi possível iniciar preprocessador externo \"%s\"" #: grecs/src/preproc.c:773 grecs/src/preproc.c:793 #, c-format msgid "Cannot run `%s'" msgstr "Não foi possível executar \"%s\"" #: grecs/src/symtab.c:236 msgid "element not found in table" msgstr "elemento não encontrado na tabela" #: grecs/src/symtab.c:238 msgid "symbol table is full" msgstr "tabela de símbolos está completo" #: grecs/src/tree.c:70 msgid "list" msgstr "" #: grecs/src/tree.c:71 #, fuzzy msgid "one or more arguments" msgstr "argumentos demais" #: grecs/src/tree.c:75 #, fuzzy msgid "unrecognized type; please report" msgstr "código de evento não reconhecido" #: grecs/src/tree.c:320 msgid "section keyword used as a scalar" msgstr "" #: grecs/src/tree.c:322 msgid "scalar keyword used as a section" msgstr "" #: grecs/src/tree.c:325 #, fuzzy msgid "unknown keyword" msgstr "Palavra-chave desconhecida" #: grecs/src/tree.c:360 #, c-format msgid "%s: not a valid boolean value" msgstr "%s: não é um valor booleano válido" #: grecs/src/tree.c:391 #, c-format msgid "%s: UNIX socket name too long" msgstr "%s: nome de soquete UNIX longo demais" #: grecs/src/tree.c:420 grecs/src/tree.c:644 #, c-format msgid "%s: not a valid IP address or hostname" msgstr "%s: não é um endereço de IP ou nome de máquina válidos" #: grecs/src/tree.c:444 #, c-format msgid "%s: not a valid port number" msgstr "%s: não é um número de porta válido" #: grecs/src/tree.c:452 msgid "missing port number" msgstr "faltando número de porta" #: grecs/src/tree.c:501 msgid "numeric overflow" msgstr "estouro numérico" #: grecs/src/tree.c:506 msgid "value out of allowed range" msgstr "valor fora do intervalo permitido" #: grecs/src/tree.c:541 grecs/src/tree.c:571 #, c-format msgid "not a number (stopped near `%s')" msgstr "não é um número (parou perto de \"%s\")" #: grecs/src/tree.c:635 #, c-format msgid "%s: not a valid IP address" msgstr "%s: não é um endereço IP válido" #: grecs/src/tree.c:774 #, c-format msgid "too many arguments to `%s'; missing semicolon?" msgstr "argumentos demais para \"%s\"; faltando ponto-e-vírgula?" #: grecs/src/tree.c:788 grecs/src/tree.c:836 #, c-format msgid "INTERNAL ERROR at %s:%d: unhandled data type %d" msgstr "ERRO INTERNO em %s:%d: tipo de dados não lidado %d" #: grecs/src/tree.c:803 #, c-format msgid "%s: incompatible data type in list item #%d" msgstr "%s: tipo de dados incompatível na item de lista #%d" #: grecs/src/tree.c:823 #, c-format msgid "incompatible data type for `%s'" msgstr "tipo de dados incompatível para \"%s\"" #: grecs/wordsplit/wordsplit.c:69 grecs/wordsplit/wordsplit.c:2855 msgid "memory exhausted" msgstr "memória esgotada" #: grecs/wordsplit/wordsplit.c:121 msgid "memory exhausted while trying to store error context" msgstr "" #: grecs/wordsplit/wordsplit.c:868 msgid "Restarting" msgstr "" #: grecs/wordsplit/wordsplit.c:1607 #, c-format msgid "%.*s: variable null or not set" msgstr "%.*s: variável nula ou não definida" #: grecs/wordsplit/wordsplit.c:1637 #, c-format msgid "warning: undefined variable `%.*s'" msgstr "aviso: variável não definida \"%.*s\"" #: grecs/wordsplit/wordsplit.c:2141 #, c-format msgid "no files match pattern %s" msgstr "nenhum arquivo corresponde ao padrão %s" #: grecs/wordsplit/wordsplit.c:2603 msgid "WS trimming" msgstr "Aparar alterações" #: grecs/wordsplit/wordsplit.c:2605 msgid "command substitution" msgstr "substituição de comando" #: grecs/wordsplit/wordsplit.c:2607 grecs/wordsplit/wordsplit.c:2615 msgid "coalesce list" msgstr "lista de coalescência" #: grecs/wordsplit/wordsplit.c:2609 msgid "tilde expansion" msgstr "expansão de til" #: grecs/wordsplit/wordsplit.c:2611 msgid "variable expansion" msgstr "expansão de variável" #: grecs/wordsplit/wordsplit.c:2613 msgid "quote removal" msgstr "remoção de aspas" #: grecs/wordsplit/wordsplit.c:2617 msgid "path expansion" msgstr "expansão de caminho" #: grecs/wordsplit/wordsplit.c:2642 #, c-format msgid "(%02d) Input:%.*s;" msgstr "(%02d) Entrada:%.*s;" #: grecs/wordsplit/wordsplit.c:2668 msgid "Initial list:" msgstr "Lista inicial:" #: grecs/wordsplit/wordsplit.c:2683 msgid "Coalesced list:" msgstr "Lista coalescida:" #: grecs/wordsplit/wordsplit.c:2853 msgid "no error" msgstr "nenhum erro" #: grecs/wordsplit/wordsplit.c:2854 msgid "missing closing quote" msgstr "faltando fechar aspas" #: grecs/wordsplit/wordsplit.c:2856 msgid "invalid wordsplit usage" msgstr "uso inválido de separação de palavra" #: grecs/wordsplit/wordsplit.c:2857 msgid "unbalanced curly brace" msgstr "chave \"{}\" não balanceada" #: grecs/wordsplit/wordsplit.c:2858 msgid "undefined variable" msgstr "variável não definida" #: grecs/wordsplit/wordsplit.c:2859 msgid "input exhausted" msgstr "entrada esgotada" #: grecs/wordsplit/wordsplit.c:2860 msgid "unbalanced parenthesis" msgstr "parênteses não balanceados" #: grecs/wordsplit/wordsplit.c:2861 msgid "globbing error" msgstr "erro de casamento de padrões (globbing)" #: grecs/wordsplit/wordsplit.c:2862 #, fuzzy msgid "user-defined error" msgstr "erro de leitura" #: grecs/wordsplit/wordsplit.c:2863 msgid "invalid parameter number in assignment" msgstr "" #: grecs/wordsplit/wordsplit.c:2875 msgid "unknown error" msgstr "erro desconhecido" #: grecs/wordsplit/wordsplit.c:2884 #, c-format msgid "missing closing %c (start near #%lu)" msgstr "faltando fechar %c (início próximo a #%lu)" #~ msgid "unterminated regexp" #~ msgstr "expressão regular não terminada" #~ msgid "unrecognized flag: %c" #~ msgstr "opção não reconhecida: %c" #~ msgid "out of memory" #~ msgstr "memória insuficiente" #~ msgid "%s: unknown keyword" #~ msgstr "%s: palavra-chave desconhecida" #~ msgid "(%02d) Restart:%.*s;" #~ msgstr "(%02d) Reiniciar:%.*s;" #~ msgid "INTERNAL ERROR at %s:%d" #~ msgstr "ERRO INTERNO em %s:%d" #~ msgid "ignoring duplicate definition" #~ msgstr "ignorando definição duplicada" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/po/fr.po�������������������������������������������������������������������������������0000644�0001750�0001750�00000054207�13512402637�014566� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Messages français pour direvent # Copyright (C) 2016 Free Software Foundation, Inc. # This file is distributed under the same license as the direvent package. # Frédéric Marchal <fmarchal@perso.be>, 2016. # msgid "" msgstr "" "Project-Id-Version: direvent 5.1\n" "Report-Msgid-Bugs-To: bug-direvent@gnu.org.ua\n" "POT-Creation-Date: 2019-07-13 19:23+0300\n" "PO-Revision-Date: 2016-07-08 14:27+0200\n" "Last-Translator: Frédéric Marchal <fmarchal@perso.be>\n" "Language-Team: French <traduc@traduc.org>\n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: cmdline.opt:26 msgid "increase debug level" msgstr "augmenter le niveau de débogage" #: cmdline.opt:32 msgid "PRIO" msgstr "PRIO" #: cmdline.opt:32 msgid "" "log everything with priority PRIO and higher to the stderr, as well as to " "the syslog" msgstr "" "journaliser tout avec la priorité PRIO ou plus vers stderr ainsi que vers " "syslog" #: cmdline.opt:41 msgid "NAME" msgstr "NOM" #: cmdline.opt:41 msgid "set syslog facility" msgstr "sélectionner la catégorie pour syslog" #: cmdline.opt:47 msgid "remain in foreground" msgstr "rester au premier plan" #: cmdline.opt:53 msgid "DIR" msgstr "RÉP" #: cmdline.opt:53 msgid "add include directory" msgstr "ajouter le répertoire d'inclusion" #: cmdline.opt:59 msgid "PROG" msgstr "PROG" #: cmdline.opt:59 msgid "self-test mode" msgstr "mode d'auto-test" #: cmdline.opt:65 msgid "FILE" msgstr "FICHIER" #: cmdline.opt:65 msgid "set PID file" msgstr "sélectionner le fichier PID" #: cmdline.opt:71 msgid "check configuration file and exit" msgstr "vérifier le fichier de configuration et terminer" #: cmdline.opt:77 msgid "USER" msgstr "UTILISATEUR" #: cmdline.opt:77 msgid "run as this user" msgstr "exécuter comme cet utilisateur" #: cmdline.opt:87 msgid "show configuration file summary" msgstr "montrer le résumé du fichier de configuration" #: cmdline.opt:81 msgid "Other options" msgstr "Autres options" #: cmdline.opt:93 msgid "Give this help list" msgstr "Afficher cette liste d'aide" #: cmdline.opt:93 msgid "Give a short usage message" msgstr "Montrer un court message sur l'utilisation" #: cmdline.opt:93 msgid "Print program version" msgstr "Afficher la version du programme" #: cmdline.opt:13 msgid "GNU direvent monitors changes in directories" msgstr "GNU direvent surveilles les changements dans des répertoires" #: cmdline.opt:15 msgid "[CONFIG]" msgstr "[CONFIG]" #: cmdline.opt:95 #, c-format msgid "" "The optional CONFIG argument supplies the name of the configuration file\n" "to use instead of %s.\n" "\n" msgstr "" "L'argument optionnel CONFIG fourni le nom du fichier de configuration\n" "à utiliser au lieu de %s.\n" "\n" #. TRANSLATORS: %s is one of: inotify, kqueue #: cmdline.opt:99 #, c-format msgid "" "This direvent uses %s interface.\n" "\n" msgstr "" "Ce direvent utilise l'interface %s.\n" "\n" #: cmdline.opt:102 #, c-format msgid "Include search path:\n" msgstr "Chemin de recherche des fichiers à inclure:\n" #: cmdline.opt:105 #, c-format msgid "No include search path.\n" msgstr "Aucun chemin de recherche des fichiers à inclure.\n" #: src/config.c:63 #, c-format msgid "unknown syslog facility: %s" msgstr "catégorie syslog inconnue: %s" #: src/config.c:80 #, c-format msgid "unknown syslog priority: %s" msgstr "priorité syslog inconnue: %s" #: src/config.c:88 msgid "unexpected block statement" msgstr "instruction bloc inattendue" #: src/config.c:97 #, c-format msgid "expected %s" msgstr "%s attendu" #: src/config.c:102 #, c-format msgid "expected %s, but found %s" msgstr "%s attendu mais %s rencontré" #: src/config.c:124 #, c-format msgid "unknown syslog facility `%s'" msgstr "catégorie syslog « %s » inconnue" #: src/config.c:133 src/config.c:606 msgid "name" msgstr "nom" #: src/config.c:134 msgid "" "Set syslog facility. Arg is one of the following: user, daemon, auth, " "authpriv, mail, cron, local0 through local7 (case-insensitive), or a " "facility number." msgstr "" "La catégorie syslog. Arg peut prendre la valeur: user, daemon, auth, " "authpriv, mail, cron, local0 à local7 (insensible à la casse) ou un numéro " "de catégorie." #: src/config.c:139 grecs/src/format.c:36 grecs/src/tree.c:69 msgid "string" msgstr "chaîne" #: src/config.c:139 msgid "Tag syslog messages with this string" msgstr "Étiqueter les messages syslog avec cette chaîne" #: src/config.c:142 grecs/src/format.c:141 msgid "arg" msgstr "arg" #: src/config.c:143 msgid "Prefix each message with its priority" msgstr "Préfixer chaque message avec cette priorité" #: src/config.c:191 #, c-format msgid "%s: recursion depth does not match previous definition" msgstr "" "%s: la profondeur de récursion ne correspond pas à la définition précédente" #: src/config.c:212 msgid "no paths configured" msgstr "aucun chemin configuré" #: src/config.c:217 msgid "no command configured" msgstr "aucune commande configurée" #: src/config.c:229 grecs/src/tree.c:665 msgid "invalid use of block statement" msgstr "utilisation invalide d'une instruction bloc" #: src/config.c:274 msgid "expected \"recursive\" or end of statement" msgstr "« recursive » ou fin d'instruction attendu" #: src/config.c:289 msgid "surplus argument" msgstr "argument surnuméraire" #: src/config.c:295 src/config.c:446 msgid "unexpected list" msgstr "liste inattendue" #: src/config.c:326 src/config.c:341 src/config.c:356 msgid "unrecognized event code" msgstr "code d'événement non reconnu" #: src/config.c:438 msgid "surplus arguments" msgstr "arguments surnuméraires" #: src/config.c:452 msgid "no such user" msgstr "cet utilisateur n'existe pas" #: src/config.c:459 msgid "no such group" msgstr "ce group n'existe pas" #: src/config.c:501 msgid "unrecognized option" msgstr "option non reconnue" #: src/config.c:595 msgid "Pathname to watch" msgstr "Chemin à surveiller" #: src/config.c:598 msgid "Events to watch for" msgstr "Événements à surveiller" #: src/config.c:601 msgid "regexp" msgstr "expression régulière" #: src/config.c:601 msgid "Files to watch for" msgstr "Fichiers à surveiller" #: src/config.c:604 msgid "Command to execute on event" msgstr "Commande à exécuter suite à l'événement" #: src/config.c:606 msgid "Run command as this user" msgstr "Exécuter la commande comme cet utilisateur" #: src/config.c:609 msgid "seconds" msgstr "secondes" #: src/config.c:609 msgid "Timeout for the command" msgstr "Délai d'expiration de la commande" #: src/config.c:611 msgid "List of additional options" msgstr "Liste d'options additionnelles" #: src/config.c:614 msgid "<arg: string> <arg: string>..." msgstr "<arg: chaîne> <arg: chaîne>…" #: src/config.c:615 msgid "Modify environment" msgstr "Modifier l'environnement" #: src/config.c:622 msgid "Run as this user" msgstr "Exécuter comme cet utilisateur" #: src/config.c:624 msgid "Run in foreground" msgstr "Exécuter en avant plan" #: src/config.c:626 msgid "file" msgstr "fichier" #: src/config.c:626 msgid "Set pid file name" msgstr "Sélectionner le nom du fichier pid" #: src/config.c:628 msgid "Configure syslog logging" msgstr "Configurer la journalisation syslog" #: src/config.c:630 msgid "level" msgstr "niveau" #: src/config.c:630 msgid "Set debug level" msgstr "Sélectionner le niveau de débogage" #: src/config.c:632 msgid "Configure event watcher" msgstr "Configurer la surveillance de l'événement" #: src/config.c:643 msgid "" "Configuration file structure for direvent.\n" "For more information, use `info direvent configuration'." msgstr "" "Structure du fichier de configuration de direvent.\n" "Pour plus d'information, utilisez « info direvent configuration »." #: src/direvent.c:142 src/direvent.c:164 src/watcher.c:93 src/watcher.c:125 msgid "not enough memory" msgstr "pas assez de mémoire" #: src/direvent.c:274 #, c-format msgid "cannot open pidfile %s for writing: %s" msgstr "impossible d'ouvrir le fichier pid %s en écriture: %s" #: src/direvent.c:302 #, c-format msgid "no user with UID %lu" msgstr "pas d'utilisateur avec le UID %lu" #: src/direvent.c:420 #, c-format msgid "cannot run `%s': fork failed: %s" msgstr "impossible d'exécuter « %s »: fork a échoué: %s" #: src/direvent.c:480 msgid "too many arguments" msgstr "trop d'arguments" #: src/direvent.c:522 #, c-format msgid "%s %s started" msgstr "%s %s démarré" #: src/direvent.c:546 #, c-format msgid "%s %s stopped" msgstr "%s %s arrêté" #: src/environ.c:25 msgid "environment: " msgstr "environnement: " #: src/progman.c:142 #, c-format msgid "process %lu exited successfully" msgstr "le processus %lu s'est terminé avec succès" #: src/progman.c:145 #, c-format msgid "process %lu failed with status %d" msgstr "le processus %lu a échoué avec le statut %d" #: src/progman.c:155 #, c-format msgid "process %lu terminated on signal %d" msgstr "le processus %lu s'est terminé à cause du signal %d" #: src/progman.c:158 #, c-format msgid "process %lu stopped on signal %d" msgstr "le processus %lu s'est arrêté à cause du signal %d" #: src/progman.c:163 #, c-format msgid "process %lu dumped core" msgstr "le processus %lu a créé un fichier core" #: src/progman.c:167 #, c-format msgid "process %lu terminated with unrecognized status" msgstr "le processus %lu s'est terminé avec un statut non reconnu" #: src/progman.c:228 msgid "begin scanning process list" msgstr "début du parcours de la liste des processus" #: src/progman.c:232 #, c-format msgid "process %lu timed out" msgstr "le processus %lu a dépassé le temps imparti" #: src/progman.c:241 #, c-format msgid "scheduling alarm in %lu seconds" msgstr "planification d'une alarme dans %lu secondes" #: src/progman.c:322 #, c-format msgid "cannot start redirector for %s, pipe failed: %s" msgstr "impossible de démarrer la redirection pour %s, pipe a échoué: %s" #: src/progman.c:354 #, c-format msgid "cannot run redirector `%s': fork failed: %s" msgstr "impossible d'exécuter la redirection « %s »: fork a échoué: %s" #: src/progman.c:359 #, c-format msgid "redirector for %s started, pid=%lu" msgstr "redirection pour %s démarrée, pid=%lu" #: src/progman.c:455 #, c-format msgid "starting %s, dir=%s, file=%s" msgstr "démarrage de %s, rép=%s, fichier=%s" #: src/progman.c:484 #, c-format msgid "cannot change to %s: %s" msgstr "impossible de changer vers %s: %s" #: src/progman.c:512 #, c-format msgid "%s running; dir=%s, file=%s, pid=%lu" msgstr "%s en cours; rép=%s, fichier=%s, pid=%lu" #: src/progman.c:534 #, c-format msgid "waiting for %s (%lu) to terminate" msgstr "attente que %s (%lu) se termine" #: src/watcher.c:183 src/watcher.c:513 #, c-format msgid "removing watcher %s" msgstr "suppression de la supervision %s" #: src/watcher.c:195 msgid "no watchers left; exiting now" msgstr "" #: src/watcher.c:262 #, c-format msgid "installing CREATE sentinel for %s" msgstr "" #: src/watcher.c:275 #, c-format msgid "creating watcher %s" msgstr "création du superviseur %s" #: src/watcher.c:281 src/watcher.c:296 #, c-format msgid "cannot set watcher on %s: %s" msgstr "impossible de mettre un superviseur sur %s: %s" #: src/watcher.c:377 #, c-format msgid "cannot create watcher %s/%s: not enough memory" msgstr "impossible de créer le superviseur %s/%s: pas assez de mémoire" #: src/watcher.c:384 #, c-format msgid "cannot create watcher %s/%s, stat failed: %s" msgstr "impossible de créer le superviseur %s/%s, stat a échoué: %s" #: src/watcher.c:430 #, c-format msgid "cannot open directory %s: %s" msgstr "impossible d'ouvrir le répertoire %s: %s" #: src/watcher.c:447 #, c-format msgid "cannot stat %s/%s: not enough memory" msgstr "impossible d'exécuter stat sur %s/%s: pas assez de mémoire" #: src/watcher.c:452 #, c-format msgid "cannot stat %s: %s" msgstr "impossible d'exécuter stat %s: %s" #: src/watcher.c:497 msgid "no event handlers configured" msgstr "aucun gestionnaire d'événement configuré" #: src/watcher.c:502 msgid "no event handlers installed" msgstr "aucun gestionnaire d'événement installé" #: grecs/src/format.c:33 msgid "void" msgstr "" #: grecs/src/format.c:46 msgid "number" msgstr "" #: grecs/src/format.c:49 msgid "time" msgstr "" #: grecs/src/format.c:52 msgid "boolean" msgstr "" #: grecs/src/format.c:55 msgid "IPv4" msgstr "" #: grecs/src/format.c:58 msgid "CIDR" msgstr "" #: grecs/src/format.c:61 #, fuzzy msgid "hostname" msgstr "nom" #: grecs/src/format.c:64 msgid "sockaddr" msgstr "" #: grecs/src/format.c:67 msgid "section" msgstr "" #: grecs/src/format.c:70 msgid "null" msgstr "" #: grecs/src/format.c:133 msgid "Disabled;" msgstr "Désactivé;" #: grecs/src/opthelp.c:123 grecs/src/opthelp.c:269 msgid "Usage:" msgstr "Usage:" #: grecs/src/opthelp.c:127 msgid "OPTION" msgstr "OPTION" #: grecs/src/opthelp.c:132 grecs/src/opthelp.c:427 msgid "Aliases" msgstr "Alias" #: grecs/src/opthelp.c:132 grecs/src/opthelp.c:427 msgid "Alias" msgstr "Alias" #: grecs/src/opthelp.c:186 msgid "" "Mandatory or optional arguments to long options are also mandatory or " "optional for any corresponding short options." msgstr "" "Les arguments requis ou optionnels pour les options longues sont aussi " "requis ou optionnels pour les options courtes correspondantes." #. TRANSLATORS: The placeholder indicates the bug-reporting #. address for this package. Please add _another line_ saying #. "Report translation bugs to <...>\n" with the address for #. translation bugs (typically your translation team's web or #. email address). #: grecs/src/opthelp.c:202 #, c-format msgid "Report bugs to %s.\n" msgstr "" "Signalez les bogues à %s.\n" "Signalez les bogues de traduction à <traduc@traduc.org>.\n" #: grecs/src/opthelp.c:205 #, c-format msgid "%s home page: <%s>\n" msgstr "site internet de %s: <%s>\n" #. TRANSLATORS: Translate "(C)" to the copyright symbol #. (C-in-a-circle), if this symbol is available in the user's #. locale. Otherwise, do not translate "(C)"; leave it as-is. #: grecs/src/opthelp.c:457 msgid "(C)" msgstr "©" #: grecs/src/opthelp.c:466 msgid "" "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." "html>\n" "This is free software: you are free to change and redistribute it.\n" "There is NO WARRANTY, to the extent permitted by law.\n" "\n" msgstr "" "Licence GPLv3+: GNU GPL version 3 ou ultérieure <http://gnu.org/licenses/gpl." "html>.\n" "Ceci est un logiciel libre: vous êtes libre de le modifier et de le " "redistribuer.\n" "Il n'y a PAS de GARANTIE dans les limites permises par la loi.\n" "\n" #: grecs/src/opthelp.c:483 msgid "Written by " msgstr "Écrit par " #. TRANSLATORS: This string is used as a delimiter between #. authors' names as in: #. #. Written by Winnie the Pooh, Piglet ... #. #: grecs/src/opthelp.c:489 msgid ", " msgstr ", " #. TRANSLATORS: This string acts as a delimiter before the #. last author's names, e.g.: #. #. Written by Winnie the Pooh, Piglet and Christopher Robin. #. #: grecs/src/opthelp.c:495 msgid " and " msgstr " et " #: grecs/src/path-parser.c:62 #, c-format msgid "cannot open `%s'" msgstr "impossible d'ouvrir « %s »" #: grecs/src/path-parser.c:108 grecs/src/path-parser.c:123 msgid "unexpected end of file" msgstr "fin de fichier inattendue" #: grecs/src/path-parser.c:143 msgid "parse error" msgstr "erreur d'analyse" #: grecs/src/preproc.c:448 grecs/src/preproc.c:470 #, c-format msgid "Cannot stat `%s'" msgstr "Impossible d'exécuter stat « %s »" #: grecs/src/preproc.c:453 grecs/src/preproc.c:458 msgid "Recursive inclusion" msgstr "Inclusion récursive" #: grecs/src/preproc.c:461 #, c-format msgid "`%s' already included here" msgstr "« %s » déjà inclus ici" #: grecs/src/preproc.c:465 #, c-format msgid "`%s' already included at top level" msgstr "« %s » déjà inclus au plus haut niveau" #: grecs/src/preproc.c:480 #, c-format msgid "Cannot open `%s'" msgstr "Impossible d'ouvrir « %s »" #: grecs/src/preproc.c:595 msgid "Cannot parse include line" msgstr "La ligne d'inclusion ne peut pas être analysée" #: grecs/src/preproc.c:598 msgid "invalid include statement" msgstr "instruction d'inclusion invalide" #: grecs/src/preproc.c:624 msgid "read error" msgstr "erreur de lecture" #: grecs/src/preproc.c:632 #, c-format msgid "%s: No such file or directory" msgstr "%s: Ce fichier ou répertoire n'existe pas" #: grecs/src/preproc.c:698 #, c-format msgid "Unable to start external preprocessor `%s'" msgstr "Impossible de démarrer le préprocesseur externe « %s »" #: grecs/src/preproc.c:773 grecs/src/preproc.c:793 #, c-format msgid "Cannot run `%s'" msgstr "Impossible d'exécuter « %s »" #: grecs/src/symtab.c:236 msgid "element not found in table" msgstr "élément pas trouvé dans la table" #: grecs/src/symtab.c:238 msgid "symbol table is full" msgstr "la table des symboles est remplie" #: grecs/src/tree.c:70 msgid "list" msgstr "" #: grecs/src/tree.c:71 #, fuzzy msgid "one or more arguments" msgstr "trop d'arguments" #: grecs/src/tree.c:75 #, fuzzy msgid "unrecognized type; please report" msgstr "code d'événement non reconnu" #: grecs/src/tree.c:320 msgid "section keyword used as a scalar" msgstr "" #: grecs/src/tree.c:322 msgid "scalar keyword used as a section" msgstr "" #: grecs/src/tree.c:325 #, fuzzy msgid "unknown keyword" msgstr "Mot clé inconnu" #: grecs/src/tree.c:360 #, c-format msgid "%s: not a valid boolean value" msgstr "%s: pas une valeur booléenne valable" #: grecs/src/tree.c:391 #, c-format msgid "%s: UNIX socket name too long" msgstr "%s: Nom de socket UNIX trop long" #: grecs/src/tree.c:420 grecs/src/tree.c:644 #, c-format msgid "%s: not a valid IP address or hostname" msgstr "%s: n'est pas une adresse IP ou un nom d'hôte valable" #: grecs/src/tree.c:444 #, c-format msgid "%s: not a valid port number" msgstr "%s: n'est pas un numéro de port valable" #: grecs/src/tree.c:452 msgid "missing port number" msgstr "numéro de port manquant" #: grecs/src/tree.c:501 msgid "numeric overflow" msgstr "débordement numérique" #: grecs/src/tree.c:506 msgid "value out of allowed range" msgstr "valeur hors des limites permises" #: grecs/src/tree.c:541 grecs/src/tree.c:571 #, c-format msgid "not a number (stopped near `%s')" msgstr "pas un nombre (arrêté près de « %s »)" #: grecs/src/tree.c:635 #, c-format msgid "%s: not a valid IP address" msgstr "%s: n'est pas une adresse IP valable" #: grecs/src/tree.c:774 #, c-format msgid "too many arguments to `%s'; missing semicolon?" msgstr "trop d'arguments à « %s »: point-virgule manquant ?" #: grecs/src/tree.c:788 grecs/src/tree.c:836 #, c-format msgid "INTERNAL ERROR at %s:%d: unhandled data type %d" msgstr "ERREUR INTERNE à %s:%d: type de donnée %d non géré" #: grecs/src/tree.c:803 #, c-format msgid "%s: incompatible data type in list item #%d" msgstr "%s: type de donnée incompatible dans l'élément n°%d de la liste" #: grecs/src/tree.c:823 #, c-format msgid "incompatible data type for `%s'" msgstr "type de donnée incompatible pour « %s »" #: grecs/wordsplit/wordsplit.c:69 grecs/wordsplit/wordsplit.c:2855 msgid "memory exhausted" msgstr "mémoire épuisée" #: grecs/wordsplit/wordsplit.c:121 msgid "memory exhausted while trying to store error context" msgstr "" #: grecs/wordsplit/wordsplit.c:868 msgid "Restarting" msgstr "" #: grecs/wordsplit/wordsplit.c:1607 #, c-format msgid "%.*s: variable null or not set" msgstr "%.*s: variable nulle ou pas définie" #: grecs/wordsplit/wordsplit.c:1637 #, c-format msgid "warning: undefined variable `%.*s'" msgstr "attention: variable « %.*s » non définie" #: grecs/wordsplit/wordsplit.c:2141 #, c-format msgid "no files match pattern %s" msgstr "aucun fichier ne correspond au motif %s" #: grecs/wordsplit/wordsplit.c:2603 msgid "WS trimming" msgstr "Suppression des espaces" #: grecs/wordsplit/wordsplit.c:2605 msgid "command substitution" msgstr "substitution de commande" #: grecs/wordsplit/wordsplit.c:2607 grecs/wordsplit/wordsplit.c:2615 msgid "coalesce list" msgstr "combinaison de liste" #: grecs/wordsplit/wordsplit.c:2609 msgid "tilde expansion" msgstr "remplacement du tilde" #: grecs/wordsplit/wordsplit.c:2611 msgid "variable expansion" msgstr "remplacement de variables" #: grecs/wordsplit/wordsplit.c:2613 msgid "quote removal" msgstr "suppression des guillemets" #: grecs/wordsplit/wordsplit.c:2617 msgid "path expansion" msgstr "remplacement de chemin" #: grecs/wordsplit/wordsplit.c:2642 #, c-format msgid "(%02d) Input:%.*s;" msgstr "(%02d) Entrée:%.*s;" #: grecs/wordsplit/wordsplit.c:2668 msgid "Initial list:" msgstr "Liste initiale:" #: grecs/wordsplit/wordsplit.c:2683 msgid "Coalesced list:" msgstr "Liste combinée:" #: grecs/wordsplit/wordsplit.c:2853 msgid "no error" msgstr "pas d'erreur" #: grecs/wordsplit/wordsplit.c:2854 msgid "missing closing quote" msgstr "parenthèse fermante manquante" #: grecs/wordsplit/wordsplit.c:2856 msgid "invalid wordsplit usage" msgstr "utilisation de « wordsplit » invalide" #: grecs/wordsplit/wordsplit.c:2857 msgid "unbalanced curly brace" msgstr "accolades non appariées" #: grecs/wordsplit/wordsplit.c:2858 msgid "undefined variable" msgstr "variable non définie" #: grecs/wordsplit/wordsplit.c:2859 msgid "input exhausted" msgstr "entrée épuisée" #: grecs/wordsplit/wordsplit.c:2860 msgid "unbalanced parenthesis" msgstr "parenthèses non appariées" #: grecs/wordsplit/wordsplit.c:2861 msgid "globbing error" msgstr "erreur d'expansion des jokers" #: grecs/wordsplit/wordsplit.c:2862 #, fuzzy msgid "user-defined error" msgstr "erreur de lecture" #: grecs/wordsplit/wordsplit.c:2863 msgid "invalid parameter number in assignment" msgstr "" #: grecs/wordsplit/wordsplit.c:2875 msgid "unknown error" msgstr "erreur inconnue" #: grecs/wordsplit/wordsplit.c:2884 #, c-format msgid "missing closing %c (start near #%lu)" msgstr "la fermeture de %c manque (début près de #%lu)" #~ msgid "unterminated regexp" #~ msgstr "expression régulière non terminée" #~ msgid "unrecognized flag: %c" #~ msgstr "fanion non reconnu: %c" #~ msgid "out of memory" #~ msgstr "à cours de mémoire" #~ msgid "%s: unknown keyword" #~ msgstr "%s: mot clé inconnu" #~ msgid "(%02d) Restart:%.*s;" #~ msgstr "(%02d) Redémarrage:%.*s;" #~ msgid "INTERNAL ERROR at %s:%d" #~ msgstr "ERREUR INTERNE à %s:%d" #~ msgid "ignoring duplicate definition" #~ msgstr "les définitions en double sont ignorées" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/po/quot.sed����������������������������������������������������������������������������0000644�0001750�0001750�00000000231�13244106112�015257� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������s/"\([^"]*\)"/“\1â€/g s/`\([^`']*\)'/‘\1’/g s/ '\([^`']*\)' / ‘\1’ /g s/ '\([^`']*\)'$/ ‘\1’/g s/^'\([^`']*\)' /‘\1’ /g s/“â€/""/g �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/po/sr.gmo������������������������������������������������������������������������������0000644�0001750�0001750�00000043445�13512402637�014751� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Þ•����«������t��å���Ì ������`�����a�����g�� ���†�� ���”�����¢��$���¶�����Û�����ù��+��������C��&���^�����…�����£��6���¿�����ö����� ����� ����������/�����5�����=�����N�����h�����x�����‰�����™��c���µ����������1�����J�� ���N�����X�����l�����q��,���„�����±�����Ì��/���à������� ���&��È���4�����ý��s��������Œ�����Ÿ�����¤�����½�� ���Ä�����Ò�����×�����Ü��%���î����������*�����>�����R�����c�����|�����Ž�����ž��›���°��$���L��`���q��"���Ò�����õ����� ��*��������=�� ���D�� ���P�����\��"���e�����ˆ�����£�����¹�����½�����Ù��,���ñ��.��������M�����^��&���{�� ���¢��+���Ã�����ï��/��� ��$���<�����a��!���t�� ���–�����¤�����¹�����Í�� ���è��(���ö�� ��������+�����E�����J�����Y�����y�����Ž�����ž�����¸�����×�����ï��T���õ�����J��$���[�����€�����–�����ª�����¯�����Å�����Î�����ë����������!�� ���5�� ���C�����P�� ���e�����†�����˜�� ���©�����µ�����Ä�����Ü��!���ü�� �����#���?��/���c�����“�� ���©�� ���·��"���Â�����å�����ì���������������&�����F�����N�� ���]�����j�����~�����ž�����»�����Â�����Ó�����å�����ú����� ��.��������L�����c�����z����������¨�����¿�� ���Ï�����Ý�����ú����������2�����J�����^�����y��!���Œ��"���®��1��Ñ�����"��U���"��!���^"��%���€"��0���¦"��J���×"��J���"#��D���m#��U���²#��/���$��R���8$��=���‹$��=���É$��_���%�����g%�����}%�����€%��&���ƒ%�� ���ª%�����·%��*���Æ%��=���ñ%��,���/&��>���\&�����›&��@���¸&��¥���ù&��4���Ÿ'��K���Ô'����� (�����'(��(���9(�����b(��(���s(��]���œ(��?���ú(��5���:)��i���p)��0���Ú)����� *��b��(*��2���‹+��Ø���¾+�����—,�� ���±,��5���¼,�����ò,��!���-�����'-�����0-��$���9-��M���^-��.���¬-��%���Û-��/���.��4���1.��>���f.�����¥.��2���Â.��F���õ.�� ��</��Y���H0��µ���¢0��A���X1��-���š1�����È1��X���Ù1�����22��*���D2�����o2�����2��F���˜2��.���ß2��:���3�����I3��7���M3��/���…3��€���µ3��l���64��*���£4��G���Î4��q���5��V���ˆ5��q���ß5��F���Q6��t���˜6��k��� 7��B���y7��H���¼7�����8�����8��(���98��4���b8�����—8��=���©8�����ç8��5���9�����79��#���<9��>���`9��2���Ÿ9�����Ò9��6���ï9��=���&:��;���d:����� :��˜���¦:��"���?;��K���b;��<���®;��2���ë;�����<��*���#<�����N<��A���d<��G���¦<��O���î<��(���>=�����g=��(���†=��9���¯=��4���é=��(���>��%���G>�����m>�����‡>��1���¡>��1���Ó>��?���?��I���E?��C���?��K���Ó?��1���@�����Q@�����o@��H���‰@�����Ò@�� ���Ù@��*���ú@��4���%A��5���ZA�����A��%���˜A��;���¾A��I���úA��G���DB��9���ŒB�����ÆB�����ÍB��!���íB��)���C�����9C��#���QC��Y���uC��>���ÏC��/���D��)���>D��.���hD��0���—D��#���ÈD�����ìD��P��� E��K���]E��M���©E��.���÷E�����&F��B���FF��!���‰F��0���«F��H���ÜF�����Z������U���£������� ���2�������A���P���3���‡��������������h���M���4���™���K���7�������_�������T���B���Y���—����������I�������[��������������¨���¦���&�������š���”�������¢���`�������œ���6������!���������������˜�������Ž������\��������������"���(�������•���>������f���¤�������@���9���������)�������€���������������ž���N���,���Š���q���¥���Ÿ���������������{���g���/���«���+���E���V���0����������-���5������x���G��� ���J������� ���l���L���.����������“���R�������k��������������t����������W���o���„���¡���†���H���=������^���������������u�������#���~��� ���X���ƒ���Q�������r�������F��������������������������§���}���‘���%���w�������n���c��� �������‚������:�������j�������1���y���v������m���*���ˆ������������…������’���b���<���O���–�������d���©���e���p���s���›���$���Œ���;���‰����������]���|���C�������ª���S���'�������?���‹��� ������8������� ����������������������a����������i�������z���D���� and �%.*s: variable null or not set�%s %s started�%s %s stopped�%s home page: <%s> �%s running; dir=%s, file=%s, pid=%lu�%s: No such file or directory�%s: UNIX socket name too long�%s: incompatible data type in list item #%d�%s: not a valid IP address�%s: not a valid IP address or hostname�%s: not a valid boolean value�%s: not a valid port number�%s: recursion depth does not match previous definition�(%02d) Input:%.*s;�(C)�, �<arg: string> <arg: string>...�Alias�Aliases�Cannot open `%s'�Cannot parse include line�Cannot run `%s'�Cannot stat `%s'�Coalesced list:�Command to execute on event�Configuration file structure for direvent. For more information, use `info direvent configuration'.�Configure event watcher�Configure syslog logging�DIR�Disabled;�Events to watch for�FILE�Files to watch for�GNU direvent monitors changes in directories�Give a short usage message�Give this help list�INTERNAL ERROR at %s:%d: unhandled data type %d�Include search path: �Initial list:�License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. �List of additional options�Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options.�Modify environment�NAME�No include search path. �OPTION�Other options�PRIO�PROG�Pathname to watch�Prefix each message with its priority�Print program version�Recursive inclusion�Report bugs to %s. �Run as this user�Run command as this user�Run in foreground�Set debug level�Set pid file name�Set syslog facility. Arg is one of the following: user, daemon, auth, authpriv, mail, cron, local0 through local7 (case-insensitive), or a facility number.�Tag syslog messages with this string�The optional CONFIG argument supplies the name of the configuration file to use instead of %s. �This direvent uses %s interface. �Timeout for the command�USER�Unable to start external preprocessor `%s'�Usage:�WS trimming�Written by �[CONFIG]�`%s' already included at top level�`%s' already included here�add include directory�arg�begin scanning process list�cannot change to %s: %s�cannot create watcher %s/%s, stat failed: %s�cannot create watcher %s/%s: not enough memory�cannot open `%s'�cannot open directory %s: %s�cannot open pidfile %s for writing: %s�cannot run `%s': fork failed: %s�cannot run redirector `%s': fork failed: %s�cannot set watcher on %s: %s�cannot start redirector for %s, pipe failed: %s�cannot stat %s/%s: not enough memory�cannot stat %s: %s�check configuration file and exit�coalesce list�command substitution�creating watcher %s�element not found in table�environment: �expected "recursive" or end of statement�expected %s�expected %s, but found %s�file�globbing error�incompatible data type for `%s'�increase debug level�input exhausted�invalid include statement�invalid use of block statement�invalid wordsplit usage�level�log everything with priority PRIO and higher to the stderr, as well as to the syslog�memory exhausted�missing closing %c (start near #%lu)�missing closing quote�missing port number�name�no command configured�no error�no event handlers configured�no event handlers installed�no files match pattern %s�no paths configured�no such group�no such user�no user with UID %lu�not a number (stopped near `%s')�not enough memory�numeric overflow�parse error�path expansion�process %lu dumped core�process %lu exited successfully�process %lu failed with status %d�process %lu stopped on signal %d�process %lu terminated on signal %d�process %lu terminated with unrecognized status�process %lu timed out�quote removal�read error�redirector for %s started, pid=%lu�regexp�remain in foreground�removing watcher %s�run as this user�scheduling alarm in %lu seconds�seconds�self-test mode�set PID file�set syslog facility�show configuration file summary�starting %s, dir=%s, file=%s�string�surplus argument�surplus arguments�symbol table is full�tilde expansion�too many arguments�too many arguments to `%s'; missing semicolon?�unbalanced curly brace�unbalanced parenthesis�undefined variable�unexpected block statement�unexpected end of file�unexpected list�unknown error�unknown syslog facility `%s'�unknown syslog facility: %s�unknown syslog priority: %s�unrecognized event code�unrecognized option�value out of allowed range�variable expansion�waiting for %s (%lu) to terminate�warning: undefined variable `%.*s'�Project-Id-Version: direvent-5.1 Report-Msgid-Bugs-To: bug-direvent@gnu.org.ua POT-Creation-Date: 2019-07-13 19:23+0300 PO-Revision-Date: 2016-08-07 19:04+0200 Last-Translator: МироÑлав Ðиколић <miroslavnikolic@rocketmail.com> Language-Team: Serbian <(nothing)> Language: sr MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Bugs: Report translation errors to the Language-Team address. Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2); � и �%.*s: променљива је ништавна или није поÑтављена�„%s“ %s је покренут�„%s“ %s је зауÑтављен�Матична Ñтраница „%s“: <%s>. �„%s“ је покренут; дир=%s, датотека=%s, пид=%lu�%s: Ðема такве датотеке или директоријума�%s: назив ЈУÐИКС прикључнице је предуг�%s: неÑаглаÑна врÑта података у %d. Ñтавци ÑпиÑка�%s: није иÑправна ИП адреÑа�%s: није иÑправна ИП адреÑа или назив домаћина�%s: није иÑправна логичка вредноÑÑ‚�%s: није иÑправан број прикључника�%s: дубина дубачења не одговара претходној одредници�(%02d) Улаз:%.*s;�©�, �<arg: ниÑка> <arg: ниÑка>...�ÐлијаÑ�ÐлијаÑи�Ðе могу да отворим „%s“�Ðе могу да обрадим ред укључивања�Ðе могу да покренем „%s“�Ðе могу да добавим податке за „%s“�Спојени ÑпиÑак:�Ðаредба за извршавање при догађају�Структура датотеке подешавања за диревент. За више података, кориÑтите „info direvent configuration“.�Подешава оÑматрача догађаја�Подешава запиÑивање ÑиÑтемÑког дневника�ДИР�ИÑкључен;�Догађаји за оÑматрање�ДÐТОТЕКÐ�Датотеке за оÑматрање�Гнуов диревент надгледа промене у директоријумима�Приказује кратку поруку коришћења�Приказује овај ÑпиÑак помоћи�УÐУТРÐШЊРГРЕШКРна „%s“:%d: непозната врÑта података „%d“�Укључите путању претраге: �Почетни ÑпиÑак:�Лиценца ОЈЛв3+: Гнуова ОЈЛ 3. издање или новије <http://gnu.org/licenses/gpl.html> Ово је Ñлободан Ñофтвер: Ñлободни Ñте да га мењате и раÑподељујете. Ðе поÑтоји ÐИКÐКВРГÐРÐÐЦИЈÐ, у оквирима дозвољеним законом. �СпиÑак додатних могућноÑти�Обавезни или изборни аргументи за дуге опције Ñу такође обавезни или изборни за било које одговарајуће кратке опције.�Мења окружење�ÐÐЗИВ�Ðе укључује путању претраге. �МОГУЋÐОСТ�ОÑтале могућноÑти�ПРИО�ПРОГ�Путања за оÑматрање�Ставља приоритет Ñваке поруке као префикÑ�ИÑпиÑује издање програма�ДубинÑко укључивање�Грешке пријавите на „%s“. �Покреће Ñе као овај кориÑник�Покрени наредбу као овај кориÑник�Ради у позадини�Подешава ниво прочишћавања�Подешава назив датотеке броја процеÑа�Подешава помоћника ÑиÑтемÑког дневника. Ðргумент може бити: user, daemon, auth, authpriv, mail, cron, од local0 до local7 (не разликује величину Ñлова), или број помоћника.�Означава поруке ÑиÑтемÑког дневника овом ниÑком�Изборни аргумент ПОДЕШÐÐ’ÐЊРдоÑтавља назив датотеке подешавања која ће Ñе кориÑтити умеÑто „%s“. �Овај диревент кориÑти Ñучеље „%s“. �ВременÑки рок за наредбу�КОРИСÐИК�Ðе могу да покренем Ñпољног предобрађивача „%s“�Употреба:�Ñкраћивање поделе речи�Приредио �[ПОДЕШÐÐ’ÐЊÐ]�„%s“ је већ укључено на највишем нивоу�„%s“ је већ укључено овде�додаје укључујући директоријум�arg�почиње преглед ÑпиÑка процеÑа�не могу да пређем у „%s“: %s�не могу да направим оÑматрача „%s/%s“, ниÑам уÑпео да добавим податке: %s�не могу да направим оÑматрача „%s/%s“: нема довољно меморије�не могу да отворим „%s“�не могу да отворим директоријум „%s“: %s�не могу да отворим датотеку броја процеÑа „%s“ зарад пиÑања: %s�не могу да покренем „%s“: рачвање није уÑпело: %s�не могу да покренем преуÑмеривача „%s“: рачвање није уÑпело: %s�не могу да подеÑим оÑматрача на „%s“: %s�не могу да покренем преуÑмеривача за „%s“, Ñпојка није уÑпела: %s�не могу да добавим податке за „%s/%s“: нема довољно меморије�не могу да добавим податке за „%s“: %s�проверава датотеку подешавања и излази�Ñпаја ÑпиÑак�замена наредбе�правим оÑматрача „%s“�ниÑам нашао елемент у табели�окружење:�очекивах „recursive“ или крај изјаве�очекивах „%s“�очекивах „%s“, али добих „%s“�file�грешка шаблонирања�неÑаглаÑна врÑта података за „%s“�повећава ниво прочишћавања�нема више улаза�неиÑправна изјава укључивања�неиÑправна употреба изјаве блока�неиÑправна употреба поделе речи�level�запиÑује Ñве Ñа ПРИОРИТЕТОМ и већим на Ñтандардну грешку, као и у ÑиÑтемÑки дневник�нема више меморије�недоÑтаје затварајућа %c (почиње близу #%lu)�недоÑтају затварајући наводници�недоÑтаје број прикључника�name�нема подешених наредби�нема грешке�нема подешених руковалаца догађаја�нема инÑталираних руковалаца догађаја�нема датотека које одговарају обраÑцу „%s“�нема подешених путања�нема такве групе�нема таквог кориÑника�нема кориÑника Ñа одредником %lu�није број (Ñтадох близу „%s“)�нема довољно меморије�прекорачење бројева�грешка обраде�ширење путање�Ð¿Ñ€Ð¾Ñ†ÐµÑ %lu је избацио језгро�Ð¿Ñ€Ð¾Ñ†ÐµÑ %lu је уÑпешно изашао�Ð¿Ñ€Ð¾Ñ†ÐµÑ %lu није уÑпео Ñа Ñтањем „%d“�Ð¿Ñ€Ð¾Ñ†ÐµÑ %lu је зауÑтављен при Ñигналу „%d“�Ð¿Ñ€Ð¾Ñ†ÐµÑ %lu је окончан при Ñигналу „%d“�Ð¿Ñ€Ð¾Ñ†ÐµÑ %lu је окончан Ñа непознатим Ñтањем�иÑтекло је време процеÑу %lu�уклањање цитата�грешка читања�преуÑмеривач за „%s“ је покренут, пид=%lu�regexp�оÑтаје у позадини�уклањам оÑматрача „%s“�покреће Ñе као овај кориÑник�заказујем аларм за %lu Ñекунде�seconds�режим ÑамотеÑтирања�поÑтавља датотеку броја процеÑа�подешава помоћника ÑиÑтемÑког дневника�приказује Ñажетак датотеке подешавања�покрећем „%s“, дир=%s, датотека=%s�string�Ñувишан аргумент�Ñувишни аргументи�табела Ñимбола је пуна�ширење тилде�превише аргумената�превише аргумената за „%s“; недоÑтаје запетачка?�неуравнотежена витичаÑта заграда�неуравнотежени наводници�неодређена променљива�неочекивана изјава блока�неочекивани крај датотеке�неочекивани ÑпиÑак�непозната грешка�непознат помоћник ÑиÑтемÑког дневника „%s“�непознат помоћник ÑиÑтемÑког дневника: %s�непознат приоритет ÑиÑтемÑког дневника: %s�непозната шифра догађаја�непозната опција�вредноÑÑ‚ је изван дозвољеног опÑега�ширење променљиве�чекам на „%s“ (%lu) да заврши�упозорење: неодређена променљива „%.*s“����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/po/nl.po�������������������������������������������������������������������������������0000644�0001750�0001750�00000053417�13512402637�014572� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Dutch translations for GNU direvent. # Copyright (C) 2016 Free Software Foundation, Inc. # This file is distributed under the same license as the direvent package. # # "Alsof kleine kaboutertjes zachtjes in je ballen knijpen." # # Benno Schulenberg <benno@vertaalt.nl>, 2014, 2016. msgid "" msgstr "" "Project-Id-Version: direvent-5.1\n" "Report-Msgid-Bugs-To: bug-direvent@gnu.org.ua\n" "POT-Creation-Date: 2019-07-13 19:23+0300\n" "PO-Revision-Date: 2016-08-07 19:57+0200\n" "Last-Translator: Benno Schulenberg <benno@vertaalt.nl>\n" "Language-Team: Dutch <vertaling@vrijschrift.org>\n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" "X-Generator: Lokalize 1.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: cmdline.opt:26 msgid "increase debug level" msgstr "debug-niveau verhogen" #: cmdline.opt:32 msgid "PRIO" msgstr "PRIO" #: cmdline.opt:32 msgid "" "log everything with priority PRIO and higher to the stderr, as well as to " "the syslog" msgstr "" "alles met een prioriteit hoger dan PRIO loggen naar zowel " "standaardfoutuitvoer als syslog" #: cmdline.opt:41 msgid "NAME" msgstr "NAAM" #: cmdline.opt:41 msgid "set syslog facility" msgstr "te gebruiken syslog-faciliteit" #: cmdline.opt:47 msgid "remain in foreground" msgstr "in de voorgrond blijven" #: cmdline.opt:53 msgid "DIR" msgstr "MAP" #: cmdline.opt:53 msgid "add include directory" msgstr "een include-map toevoegen" #: cmdline.opt:59 msgid "PROG" msgstr "PROGRAMMA" #: cmdline.opt:59 msgid "self-test mode" msgstr "zelftest-modus" #: cmdline.opt:65 msgid "FILE" msgstr "BESTAND" #: cmdline.opt:65 msgid "set PID file" msgstr "te gebruiken PID-bestand" #: cmdline.opt:71 msgid "check configuration file and exit" msgstr "configuratiebestand controleren en stoppen" #: cmdline.opt:77 msgid "USER" msgstr "GEBRUIKER" #: cmdline.opt:77 msgid "run as this user" msgstr "uitvoeren als deze gebruiker" #: cmdline.opt:87 msgid "show configuration file summary" msgstr "samenvatting van configuratiebestand weergeven" #: cmdline.opt:81 msgid "Other options" msgstr "Overige opties" #: cmdline.opt:93 msgid "Give this help list" msgstr "deze hulptekst tonen" #: cmdline.opt:93 msgid "Give a short usage message" msgstr "een korte gebruikssamenvatting tonen" #: cmdline.opt:93 msgid "Print program version" msgstr "de programmaversie tonen" #: cmdline.opt:13 msgid "GNU direvent monitors changes in directories" msgstr "GNU 'direvent' monitort veranderingen in mappen." #: cmdline.opt:15 msgid "[CONFIG]" msgstr "[CONFIG]" #: cmdline.opt:95 #, c-format msgid "" "The optional CONFIG argument supplies the name of the configuration file\n" "to use instead of %s.\n" "\n" msgstr "" "Het optionele argument CONFIG is de naam van het configuratiebestand\n" "dat gebruikt dient te worden in plaats van %s.\n" "\n" #. TRANSLATORS: %s is one of: inotify, kqueue #: cmdline.opt:99 #, c-format msgid "" "This direvent uses %s interface.\n" "\n" msgstr "" "Deze 'direvent' gebruikt de %s-interface.\n" "\n" #: cmdline.opt:102 #, c-format msgid "Include search path:\n" msgstr "Zoekpad voor includes:\n" #: cmdline.opt:105 #, c-format msgid "No include search path.\n" msgstr "Geen include-zoekpad.\n" #: src/config.c:63 #, c-format msgid "unknown syslog facility: %s" msgstr "onbekende syslog-faciliteit: %s" #: src/config.c:80 #, c-format msgid "unknown syslog priority: %s" msgstr "onbekende syslog-prioriteit: %s" #: src/config.c:88 msgid "unexpected block statement" msgstr "onverwacht blok-statement" #: src/config.c:97 #, c-format msgid "expected %s" msgstr "verwachtte %s" #: src/config.c:102 #, c-format msgid "expected %s, but found %s" msgstr "verwachtte %s, maar vond %s" #: src/config.c:124 #, c-format msgid "unknown syslog facility `%s'" msgstr "onbekende syslog-faciliteit: '%s'" #: src/config.c:133 src/config.c:606 msgid "name" msgstr "NAAM" #: src/config.c:134 msgid "" "Set syslog facility. Arg is one of the following: user, daemon, auth, " "authpriv, mail, cron, local0 through local7 (case-insensitive), or a " "facility number." msgstr "" "Te gebruiken syslog-faciliteit. Het argument is één van: 'user', 'daemon', " "'auth', 'authpriv', 'mail', 'cron', 'local0'..'local7' (hoofdlettegevoelig), " "of een faciliteitnummer." #: src/config.c:139 grecs/src/format.c:36 grecs/src/tree.c:69 msgid "string" msgstr "TEKENREEKS" #: src/config.c:139 msgid "Tag syslog messages with this string" msgstr "syslog-berichten labelen met deze tekenreeks" #: src/config.c:142 grecs/src/format.c:141 msgid "arg" msgstr "ARGUMENT" #: src/config.c:143 msgid "Prefix each message with its priority" msgstr "aan elk bericht de prioriteit voorvoegen" #: src/config.c:191 #, c-format msgid "%s: recursion depth does not match previous definition" msgstr "%s: recursiediepte komt niet overeen met vorige definitie" #: src/config.c:212 msgid "no paths configured" msgstr "geen paden geconfigureerd" #: src/config.c:217 msgid "no command configured" msgstr "geen commando geconfigureerd" #: src/config.c:229 grecs/src/tree.c:665 msgid "invalid use of block statement" msgstr "ongeldig gebruik van blok-statement" #: src/config.c:274 msgid "expected \"recursive\" or end of statement" msgstr "verwachtte \"recursive\" of einde van statement" #: src/config.c:289 msgid "surplus argument" msgstr "overtollig argument" #: src/config.c:295 src/config.c:446 msgid "unexpected list" msgstr "onverwachte lijst" #: src/config.c:326 src/config.c:341 src/config.c:356 msgid "unrecognized event code" msgstr "niet-herkende gebeurteniscode" #: src/config.c:438 msgid "surplus arguments" msgstr "overtollige argumenten" #: src/config.c:452 msgid "no such user" msgstr "die gebruiker bestaat niet" #: src/config.c:459 msgid "no such group" msgstr "die groep bestaat niet" #: src/config.c:501 msgid "unrecognized option" msgstr "onbekende optie" #: src/config.c:595 msgid "Pathname to watch" msgstr "te monitoren padnaam" #: src/config.c:598 msgid "Events to watch for" msgstr "te monitoren gebeurtenissen" #: src/config.c:601 msgid "regexp" msgstr "reg.exp." #: src/config.c:601 msgid "Files to watch for" msgstr "te monitoren bestanden" #: src/config.c:604 msgid "Command to execute on event" msgstr "uit te voeren opdracht bij gebeurtenis" #: src/config.c:606 msgid "Run command as this user" msgstr "opdracht uitvoeren als deze gebruiker" #: src/config.c:609 msgid "seconds" msgstr "SECONDEN" #: src/config.c:609 msgid "Timeout for the command" msgstr "tijdslimiet voor de opdracht" #: src/config.c:611 msgid "List of additional options" msgstr "lijst van additionele opties" #: src/config.c:614 msgid "<arg: string> <arg: string>..." msgstr "<arg: tekenreeks> <arg: tekenreeks>..." #: src/config.c:615 msgid "Modify environment" msgstr "de omgeving aanpassen" #: src/config.c:622 msgid "Run as this user" msgstr "uitvoeren als deze gebruiker" #: src/config.c:624 msgid "Run in foreground" msgstr "in de voorgrond draaien" #: src/config.c:626 msgid "file" msgstr "BESTAND" #: src/config.c:626 msgid "Set pid file name" msgstr "te gebruiken PID-bestand" #: src/config.c:628 msgid "Configure syslog logging" msgstr "syslog-loggen instellen" #: src/config.c:630 msgid "level" msgstr "NIVEAU" #: src/config.c:630 msgid "Set debug level" msgstr "debug-niveau instellen" #: src/config.c:632 msgid "Configure event watcher" msgstr "gebeurtenismonitor instellen" #: src/config.c:643 msgid "" "Configuration file structure for direvent.\n" "For more information, use `info direvent configuration'." msgstr "" "Structuur van het configuratiebestand voor 'direvent'.\n" "Zie 'info direvent configuration' voor meer informatie." #: src/direvent.c:142 src/direvent.c:164 src/watcher.c:93 src/watcher.c:125 msgid "not enough memory" msgstr "onvoldoende geheugen beschikbaar" #: src/direvent.c:274 #, c-format msgid "cannot open pidfile %s for writing: %s" msgstr "kan PID-bestand %s niet openen om te schrijven: %s" #: src/direvent.c:302 #, c-format msgid "no user with UID %lu" msgstr "er is geen gebruiker met UID %lu" #: src/direvent.c:420 #, c-format msgid "cannot run `%s': fork failed: %s" msgstr "kan '%s' niet uitvoeren: fork() is mislukt: %s" #: src/direvent.c:480 msgid "too many arguments" msgstr "te veel argumenten" #: src/direvent.c:522 #, c-format msgid "%s %s started" msgstr "%s %s is gestart" #: src/direvent.c:546 #, c-format msgid "%s %s stopped" msgstr "%s %s is gestopt" #: src/environ.c:25 msgid "environment: " msgstr "omgeving: " #: src/progman.c:142 #, c-format msgid "process %lu exited successfully" msgstr "proces %lu is met succes afgesloten" #: src/progman.c:145 #, c-format msgid "process %lu failed with status %d" msgstr "proces %lu is mislukt met afsluitwaarde %d" #: src/progman.c:155 #, c-format msgid "process %lu terminated on signal %d" msgstr "proces %lu is beëindigd door signaal %d" #: src/progman.c:158 #, c-format msgid "process %lu stopped on signal %d" msgstr "proces %lu is gepauzeerd door signaal %d" #: src/progman.c:163 #, c-format msgid "process %lu dumped core" msgstr "process %lu heeft een core-dump gemaakt" #: src/progman.c:167 #, c-format msgid "process %lu terminated with unrecognized status" msgstr "proces %lu is beëindigd met een onbekende afsluitwaarde" #: src/progman.c:228 msgid "begin scanning process list" msgstr "scannen van de processenlijst" #: src/progman.c:232 #, c-format msgid "process %lu timed out" msgstr "proces %lu overschreed de tijdslimiet" #: src/progman.c:241 #, c-format msgid "scheduling alarm in %lu seconds" msgstr "een alarm wordt geagendeerd voor over %lu seconden" #: src/progman.c:322 #, c-format msgid "cannot start redirector for %s, pipe failed: %s" msgstr "kan omleider niet starten voor %s, pipe() is mislukt: %s" #: src/progman.c:354 #, c-format msgid "cannot run redirector `%s': fork failed: %s" msgstr "kan omleider '%s' niet draaien, fork() is mislukt: %s" #: src/progman.c:359 #, c-format msgid "redirector for %s started, pid=%lu" msgstr "omleider voor %s is gestart, PID=%lu" #: src/progman.c:455 #, c-format msgid "starting %s, dir=%s, file=%s" msgstr "starten van %s, map=%s, bestand=%s" #: src/progman.c:484 #, c-format msgid "cannot change to %s: %s" msgstr "kan map niet wijzigen naar %s: %s" #: src/progman.c:512 #, c-format msgid "%s running; dir=%s, file=%s, pid=%lu" msgstr "%s draait; map=%s, bestand=%s, PID=%lu" #: src/progman.c:534 #, c-format msgid "waiting for %s (%lu) to terminate" msgstr "wachtend op afsluiten van %s (%lu)" #: src/watcher.c:183 src/watcher.c:513 #, c-format msgid "removing watcher %s" msgstr "verwijderen van monitor %s" #: src/watcher.c:195 msgid "no watchers left; exiting now" msgstr "" #: src/watcher.c:262 #, c-format msgid "installing CREATE sentinel for %s" msgstr "" #: src/watcher.c:275 #, c-format msgid "creating watcher %s" msgstr "aanmaken van monitor %s" #: src/watcher.c:281 src/watcher.c:296 #, c-format msgid "cannot set watcher on %s: %s" msgstr "kan geen monitor zetten op %s: %s" #: src/watcher.c:377 #, c-format msgid "cannot create watcher %s/%s: not enough memory" msgstr "kan monitor %s/%s niet aanmaken: onvoldoende geheugen beschikbaar" #: src/watcher.c:384 #, c-format msgid "cannot create watcher %s/%s, stat failed: %s" msgstr "kan monitor %s/%s niet aanmaken, stat() is mislukt: %s" #: src/watcher.c:430 #, c-format msgid "cannot open directory %s: %s" msgstr "kan map %s niet openen: %s" #: src/watcher.c:447 #, c-format msgid "cannot stat %s/%s: not enough memory" msgstr "" "kan de status van %s/%s niet opvragen: onvoldoende geheugen beschikbaar" #: src/watcher.c:452 #, c-format msgid "cannot stat %s: %s" msgstr "kan de status van %s niet opvragen: %s" #: src/watcher.c:497 msgid "no event handlers configured" msgstr "geen gebeurtenis-afhandelaars geconfigureerd" #: src/watcher.c:502 msgid "no event handlers installed" msgstr "geen gebeurtenis-afhandelaars geïnstalleerd" #: grecs/src/format.c:33 msgid "void" msgstr "" #: grecs/src/format.c:46 msgid "number" msgstr "" #: grecs/src/format.c:49 msgid "time" msgstr "" #: grecs/src/format.c:52 msgid "boolean" msgstr "" #: grecs/src/format.c:55 msgid "IPv4" msgstr "" #: grecs/src/format.c:58 msgid "CIDR" msgstr "" #: grecs/src/format.c:61 #, fuzzy msgid "hostname" msgstr "NAAM" #: grecs/src/format.c:64 msgid "sockaddr" msgstr "" #: grecs/src/format.c:67 msgid "section" msgstr "" #: grecs/src/format.c:70 msgid "null" msgstr "" #: grecs/src/format.c:133 msgid "Disabled;" msgstr "uitgezet;" #: grecs/src/opthelp.c:123 grecs/src/opthelp.c:269 msgid "Usage:" msgstr "Gebruik: " #: grecs/src/opthelp.c:127 msgid "OPTION" msgstr "OPTIE" #: grecs/src/opthelp.c:132 grecs/src/opthelp.c:427 msgid "Aliases" msgstr "Aliassen" #: grecs/src/opthelp.c:132 grecs/src/opthelp.c:427 msgid "Alias" msgstr "Alias" #: grecs/src/opthelp.c:186 msgid "" "Mandatory or optional arguments to long options are also mandatory or " "optional for any corresponding short options." msgstr "" "Een argument dat verplicht of optioneel is voor een lange optie, is dat\n" "ook voor de overeenkomstige korte optie." #. TRANSLATORS: The placeholder indicates the bug-reporting #. address for this package. Please add _another line_ saying #. "Report translation bugs to <...>\n" with the address for #. translation bugs (typically your translation team's web or #. email address). #: grecs/src/opthelp.c:202 #, c-format msgid "Report bugs to %s.\n" msgstr "" "Rapporteer gebreken in het programma aan %s;\n" "meld fouten in de vertaling aan <vertaling@vrijschrift.org>.\n" #: grecs/src/opthelp.c:205 #, c-format msgid "%s home page: <%s>\n" msgstr "Webpagina van '%s': <%s>\n" #. TRANSLATORS: Translate "(C)" to the copyright symbol #. (C-in-a-circle), if this symbol is available in the user's #. locale. Otherwise, do not translate "(C)"; leave it as-is. #: grecs/src/opthelp.c:457 msgid "(C)" msgstr "©" #: grecs/src/opthelp.c:466 msgid "" "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." "html>\n" "This is free software: you are free to change and redistribute it.\n" "There is NO WARRANTY, to the extent permitted by law.\n" "\n" msgstr "" "Dit is vrije software: u mag het vrijelijk wijzigen en verder verspreiden.\n" "De precieze licentie is GPL-3+: GNU General Public License versie 3 of " "later.\n" "Zie <http://gnu.org/licenses/gpl.html> voor de volledige (Engelse) tekst.\n" "Deze software kent GEEN GARANTIE, voor zover de wet dit toestaat.\n" "\n" #: grecs/src/opthelp.c:483 msgid "Written by " msgstr "Geschreven door " #. TRANSLATORS: This string is used as a delimiter between #. authors' names as in: #. #. Written by Winnie the Pooh, Piglet ... #. #: grecs/src/opthelp.c:489 msgid ", " msgstr ", " #. TRANSLATORS: This string acts as a delimiter before the #. last author's names, e.g.: #. #. Written by Winnie the Pooh, Piglet and Christopher Robin. #. #: grecs/src/opthelp.c:495 msgid " and " msgstr " en " #: grecs/src/path-parser.c:62 #, c-format msgid "cannot open `%s'" msgstr "kan '%s' niet openen" #: grecs/src/path-parser.c:108 grecs/src/path-parser.c:123 msgid "unexpected end of file" msgstr "onverwacht einde van bestand" #: grecs/src/path-parser.c:143 msgid "parse error" msgstr "ontledingsfout" #: grecs/src/preproc.c:448 grecs/src/preproc.c:470 #, c-format msgid "Cannot stat `%s'" msgstr "Kan de status van '%s' niet opvragen" #: grecs/src/preproc.c:453 grecs/src/preproc.c:458 msgid "Recursive inclusion" msgstr "Recursieve insluiting" #: grecs/src/preproc.c:461 #, c-format msgid "`%s' already included here" msgstr "'%s' is hier al ingesloten" #: grecs/src/preproc.c:465 #, c-format msgid "`%s' already included at top level" msgstr "'%s' is al ingesloten op het topniveau" #: grecs/src/preproc.c:480 #, c-format msgid "Cannot open `%s'" msgstr "Kan '%s' niet openen" #: grecs/src/preproc.c:595 msgid "Cannot parse include line" msgstr "Kan 'include'-regel niet ontleden" #: grecs/src/preproc.c:598 msgid "invalid include statement" msgstr "ongeldig 'include'-statement" #: grecs/src/preproc.c:624 msgid "read error" msgstr "fout bij lezen" #: grecs/src/preproc.c:632 #, c-format msgid "%s: No such file or directory" msgstr "%s: Bestand of map bestaat niet" #: grecs/src/preproc.c:698 #, c-format msgid "Unable to start external preprocessor `%s'" msgstr "Kan externe preprocessor '%s' niet starten" #: grecs/src/preproc.c:773 grecs/src/preproc.c:793 #, c-format msgid "Cannot run `%s'" msgstr "Kan '%s' niet uitvoeren" #: grecs/src/symtab.c:236 msgid "element not found in table" msgstr "element niet gevonden in tabel" #: grecs/src/symtab.c:238 msgid "symbol table is full" msgstr "symbolentabel is vol" #: grecs/src/tree.c:70 msgid "list" msgstr "" #: grecs/src/tree.c:71 #, fuzzy msgid "one or more arguments" msgstr "te veel argumenten" #: grecs/src/tree.c:75 #, fuzzy msgid "unrecognized type; please report" msgstr "niet-herkende gebeurteniscode" #: grecs/src/tree.c:320 msgid "section keyword used as a scalar" msgstr "" #: grecs/src/tree.c:322 msgid "scalar keyword used as a section" msgstr "" #: grecs/src/tree.c:325 #, fuzzy msgid "unknown keyword" msgstr "Onbekend sleutelwoord" #: grecs/src/tree.c:360 #, c-format msgid "%s: not a valid boolean value" msgstr "%s is geen geldige booleaanse waarde" #: grecs/src/tree.c:391 #, c-format msgid "%s: UNIX socket name too long" msgstr "%s: UNIX-socketnaam is te lang" #: grecs/src/tree.c:420 grecs/src/tree.c:644 #, c-format msgid "%s: not a valid IP address or hostname" msgstr "%s is geen geldig IP-adres of hostnaam" #: grecs/src/tree.c:444 #, c-format msgid "%s: not a valid port number" msgstr "%s is geen geldig poortnummer" #: grecs/src/tree.c:452 msgid "missing port number" msgstr "ontbrekend poortnummer" #: grecs/src/tree.c:501 msgid "numeric overflow" msgstr "numerieke overloop" #: grecs/src/tree.c:506 msgid "value out of allowed range" msgstr "waarde ligt buiten bereik" #: grecs/src/tree.c:541 grecs/src/tree.c:571 #, c-format msgid "not a number (stopped near `%s')" msgstr "is geen getal (gestopt dichtbij '%s')" #: grecs/src/tree.c:635 #, c-format msgid "%s: not a valid IP address" msgstr "%s is geen geldig IP-adres" #: grecs/src/tree.c:774 #, c-format msgid "too many arguments to `%s'; missing semicolon?" msgstr "te veel argumenten van '%s'; ontbrekende puntkomma?" #: grecs/src/tree.c:788 grecs/src/tree.c:836 #, c-format msgid "INTERNAL ERROR at %s:%d: unhandled data type %d" msgstr "**interne programmafout** bij %s:%d: onverwerkt gegevenstype %d" #: grecs/src/tree.c:803 #, c-format msgid "%s: incompatible data type in list item #%d" msgstr "%s: incompatibel gegevenstype in lijstitem #%d" #: grecs/src/tree.c:823 #, c-format msgid "incompatible data type for `%s'" msgstr "incompatibel gegevenstype voor '%s'" #: grecs/wordsplit/wordsplit.c:69 grecs/wordsplit/wordsplit.c:2855 msgid "memory exhausted" msgstr "onvoldoende geheugen beschikbaar" #: grecs/wordsplit/wordsplit.c:121 msgid "memory exhausted while trying to store error context" msgstr "" #: grecs/wordsplit/wordsplit.c:868 msgid "Restarting" msgstr "" #: grecs/wordsplit/wordsplit.c:1607 #, c-format msgid "%.*s: variable null or not set" msgstr "%.*s: variabele is null of niet ingesteld" #: grecs/wordsplit/wordsplit.c:1637 #, c-format msgid "warning: undefined variable `%.*s'" msgstr "waarschuwing: ongedefinieerde variabele '%.*s'" #: grecs/wordsplit/wordsplit.c:2141 #, c-format msgid "no files match pattern %s" msgstr "geen bestanden die overeenkomen met patroon %s" #: grecs/wordsplit/wordsplit.c:2603 msgid "WS trimming" msgstr "witruimte trimmen" #: grecs/wordsplit/wordsplit.c:2605 msgid "command substitution" msgstr "opdrachtsubstitutie" #: grecs/wordsplit/wordsplit.c:2607 grecs/wordsplit/wordsplit.c:2615 msgid "coalesce list" msgstr "lijst samenvoegen" #: grecs/wordsplit/wordsplit.c:2609 msgid "tilde expansion" msgstr "tilde-expansie" #: grecs/wordsplit/wordsplit.c:2611 msgid "variable expansion" msgstr "variabelen-expansie" #: grecs/wordsplit/wordsplit.c:2613 msgid "quote removal" msgstr "aanhalingstekenverwijdering" #: grecs/wordsplit/wordsplit.c:2617 msgid "path expansion" msgstr "padexpansie" #: grecs/wordsplit/wordsplit.c:2642 #, c-format msgid "(%02d) Input:%.*s;" msgstr "(%02d) Invoer:%.*s;" #: grecs/wordsplit/wordsplit.c:2668 msgid "Initial list:" msgstr "Beginlijst:" #: grecs/wordsplit/wordsplit.c:2683 msgid "Coalesced list:" msgstr "Samengevoegde lijst:" #: grecs/wordsplit/wordsplit.c:2853 msgid "no error" msgstr "geen fout" #: grecs/wordsplit/wordsplit.c:2854 msgid "missing closing quote" msgstr "ontbrekend afsluitend aanhalingsteken" #: grecs/wordsplit/wordsplit.c:2856 msgid "invalid wordsplit usage" msgstr "ongeldig gebruik van woordscheiding" #: grecs/wordsplit/wordsplit.c:2857 msgid "unbalanced curly brace" msgstr "ongepaarde accolade" #: grecs/wordsplit/wordsplit.c:2858 msgid "undefined variable" msgstr "ongedefinieerde variabele" #: grecs/wordsplit/wordsplit.c:2859 msgid "input exhausted" msgstr "de invoer is op" #: grecs/wordsplit/wordsplit.c:2860 msgid "unbalanced parenthesis" msgstr "ongepaard haakje" #: grecs/wordsplit/wordsplit.c:2861 msgid "globbing error" msgstr "globbing-fout" #: grecs/wordsplit/wordsplit.c:2862 #, fuzzy msgid "user-defined error" msgstr "fout bij lezen" #: grecs/wordsplit/wordsplit.c:2863 msgid "invalid parameter number in assignment" msgstr "" #: grecs/wordsplit/wordsplit.c:2875 msgid "unknown error" msgstr "onbekende fout" #: grecs/wordsplit/wordsplit.c:2884 #, c-format msgid "missing closing %c (start near #%lu)" msgstr "ontbrekend afsluitend %c (begon ongeveer bij #%lu)" #~ msgid "unterminated regexp" #~ msgstr "onafgesloten reguliere expressie" #~ msgid "unrecognized flag: %c" #~ msgstr "niet-herkende vlag: %c" #~ msgid "out of memory" #~ msgstr "onvoldoende geheugen beschikbaar" #~ msgid "%s: unknown keyword" #~ msgstr "%s: onbekend sleutelwoord" #~ msgid "(%02d) Restart:%.*s;" #~ msgstr "(%02d) Herstart:%.*s;" #~ msgid "INTERNAL ERROR at %s:%d" #~ msgstr "**interne programmafout** bij %s:%d" #~ msgid "ignoring duplicate definition" #~ msgstr "dubbele definitie wordt genegeerd" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/po/Makefile.in.in����������������������������������������������������������������������0000644�0001750�0001750�00000037442�13244106112�016262� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile for PO directory in any package using GNU gettext. # Copyright (C) 1995-1997, 2000-2007, 2009-2010 by Ulrich Drepper <drepper@gnu.ai.mit.edu> # # This file can be copied and used freely without restrictions. It can # be used in projects which are not available under the GNU General Public # License but which still want to provide support for the GNU gettext # functionality. # Please note that the actual code of GNU gettext is covered by the GNU # General Public License and is *not* in the public domain. # # Origin: gettext-0.18 GETTEXT_MACRO_VERSION = 0.18 PACKAGE = @PACKAGE@ VERSION = @VERSION@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ SHELL = /bin/sh @SET_MAKE@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ datarootdir = @datarootdir@ datadir = @datadir@ localedir = @localedir@ gettextsrcdir = $(datadir)/gettext/po INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ # We use $(mkdir_p). # In automake <= 1.9.x, $(mkdir_p) is defined either as "mkdir -p --" or as # "$(mkinstalldirs)" or as "$(install_sh) -d". For these automake versions, # @install_sh@ does not start with $(SHELL), so we add it. # In automake >= 1.10, @mkdir_p@ is derived from ${MKDIR_P}, which is defined # either as "/path/to/mkdir -p" or ".../install-sh -c -d". For these automake # versions, $(mkinstalldirs) and $(install_sh) are unused. mkinstalldirs = $(SHELL) @install_sh@ -d install_sh = $(SHELL) @install_sh@ MKDIR_P = @MKDIR_P@ mkdir_p = @mkdir_p@ GMSGFMT_ = @GMSGFMT@ GMSGFMT_no = @GMSGFMT@ GMSGFMT_yes = @GMSGFMT_015@ GMSGFMT = $(GMSGFMT_$(USE_MSGCTXT)) MSGFMT_ = @MSGFMT@ MSGFMT_no = @MSGFMT@ MSGFMT_yes = @MSGFMT_015@ MSGFMT = $(MSGFMT_$(USE_MSGCTXT)) XGETTEXT_ = @XGETTEXT@ XGETTEXT_no = @XGETTEXT@ XGETTEXT_yes = @XGETTEXT_015@ XGETTEXT = $(XGETTEXT_$(USE_MSGCTXT)) MSGMERGE = msgmerge MSGMERGE_UPDATE = @MSGMERGE@ --update MSGINIT = msginit MSGCONV = msgconv MSGFILTER = msgfilter POFILES = @POFILES@ GMOFILES = @GMOFILES@ UPDATEPOFILES = @UPDATEPOFILES@ DUMMYPOFILES = @DUMMYPOFILES@ DISTFILES.common = Makefile.in.in remove-potcdate.sin \ $(DISTFILES.common.extra1) $(DISTFILES.common.extra2) $(DISTFILES.common.extra3) DISTFILES = $(DISTFILES.common) Makevars POTFILES.in \ $(POFILES) $(GMOFILES) \ $(DISTFILES.extra1) $(DISTFILES.extra2) $(DISTFILES.extra3) POTFILES = \ CATALOGS = @CATALOGS@ # Makevars gets inserted here. (Don't remove this line!) .SUFFIXES: .SUFFIXES: .po .gmo .mo .sed .sin .nop .po-create .po-update .po.mo: @echo "$(MSGFMT) -c -o $@ $<"; \ $(MSGFMT) -c -o t-$@ $< && mv t-$@ $@ .po.gmo: @lang=`echo $* | sed -e 's,.*/,,'`; \ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ echo "$${cdcmd}rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics --verbose -o $${lang}.gmo $${lang}.po"; \ cd $(srcdir) && rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics --verbose -o t-$${lang}.gmo $${lang}.po && mv t-$${lang}.gmo $${lang}.gmo .sin.sed: sed -e '/^#/d' $< > t-$@ mv t-$@ $@ all: check-macro-version all-@USE_NLS@ all-yes: stamp-po all-no: # Ensure that the gettext macros and this Makefile.in.in are in sync. check-macro-version: @test "$(GETTEXT_MACRO_VERSION)" = "@GETTEXT_MACRO_VERSION@" \ || { echo "*** error: gettext infrastructure mismatch: using a Makefile.in.in from gettext version $(GETTEXT_MACRO_VERSION) but the autoconf macros are from gettext version @GETTEXT_MACRO_VERSION@" 1>&2; \ exit 1; \ } # $(srcdir)/$(DOMAIN).pot is only created when needed. When xgettext finds no # internationalized messages, no $(srcdir)/$(DOMAIN).pot is created (because # we don't want to bother translators with empty POT files). We assume that # LINGUAS is empty in this case, i.e. $(POFILES) and $(GMOFILES) are empty. # In this case, stamp-po is a nop (i.e. a phony target). # stamp-po is a timestamp denoting the last time at which the CATALOGS have # been loosely updated. Its purpose is that when a developer or translator # checks out the package via CVS, and the $(DOMAIN).pot file is not in CVS, # "make" will update the $(DOMAIN).pot and the $(CATALOGS), but subsequent # invocations of "make" will do nothing. This timestamp would not be necessary # if updating the $(CATALOGS) would always touch them; however, the rule for # $(POFILES) has been designed to not touch files that don't need to be # changed. stamp-po: $(srcdir)/$(DOMAIN).pot test ! -f $(srcdir)/$(DOMAIN).pot || \ test -z "$(GMOFILES)" || $(MAKE) $(GMOFILES) @test ! -f $(srcdir)/$(DOMAIN).pot || { \ echo "touch stamp-po" && \ echo timestamp > stamp-poT && \ mv stamp-poT stamp-po; \ } # Note: Target 'all' must not depend on target '$(DOMAIN).pot-update', # otherwise packages like GCC can not be built if only parts of the source # have been downloaded. # This target rebuilds $(DOMAIN).pot; it is an expensive operation. # Note that $(DOMAIN).pot is not touched if it doesn't need to be changed. $(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed if LC_ALL=C grep 'GNU @PACKAGE@' $(top_srcdir)/* 2>/dev/null | grep -v 'libtool:' >/dev/null; then \ package_gnu='GNU '; \ else \ package_gnu=''; \ fi; \ if test -n '$(MSGID_BUGS_ADDRESS)' || test '$(PACKAGE_BUGREPORT)' = '@'PACKAGE_BUGREPORT'@'; then \ msgid_bugs_address='$(MSGID_BUGS_ADDRESS)'; \ else \ msgid_bugs_address='$(PACKAGE_BUGREPORT)'; \ fi; \ case `$(XGETTEXT) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-5] | 0.1[0-5].* | 0.16 | 0.16.[0-1]*) \ $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \ --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \ --files-from=$(srcdir)/POTFILES.in \ --copyright-holder='$(COPYRIGHT_HOLDER)' \ --msgid-bugs-address="$$msgid_bugs_address" \ ;; \ *) \ $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \ --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \ --files-from=$(srcdir)/POTFILES.in \ --copyright-holder='$(COPYRIGHT_HOLDER)' \ --package-name="$${package_gnu}@PACKAGE@" \ --package-version='@VERSION@' \ --msgid-bugs-address="$$msgid_bugs_address" \ ;; \ esac test ! -f $(DOMAIN).po || { \ if test -f $(srcdir)/$(DOMAIN).pot; then \ sed -f remove-potcdate.sed < $(srcdir)/$(DOMAIN).pot > $(DOMAIN).1po && \ sed -f remove-potcdate.sed < $(DOMAIN).po > $(DOMAIN).2po && \ if cmp $(DOMAIN).1po $(DOMAIN).2po >/dev/null 2>&1; then \ rm -f $(DOMAIN).1po $(DOMAIN).2po $(DOMAIN).po; \ else \ rm -f $(DOMAIN).1po $(DOMAIN).2po $(srcdir)/$(DOMAIN).pot && \ mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \ fi; \ else \ mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \ fi; \ } # This rule has no dependencies: we don't need to update $(DOMAIN).pot at # every "make" invocation, only create it when it is missing. # Only "make $(DOMAIN).pot-update" or "make dist" will force an update. $(srcdir)/$(DOMAIN).pot: $(MAKE) $(DOMAIN).pot-update # This target rebuilds a PO file if $(DOMAIN).pot has changed. # Note that a PO file is not touched if it doesn't need to be changed. $(POFILES): $(srcdir)/$(DOMAIN).pot @lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \ if test -f "$(srcdir)/$${lang}.po"; then \ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ echo "$${cdcmd}$(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} $${lang}.po $(DOMAIN).pot"; \ cd $(srcdir) \ && { case `$(MSGMERGE_UPDATE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-7] | 0.1[0-7].*) \ $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) $${lang}.po $(DOMAIN).pot;; \ *) \ $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} $${lang}.po $(DOMAIN).pot;; \ esac; \ }; \ else \ $(MAKE) $${lang}.po-create; \ fi install: install-exec install-data install-exec: install-data: install-data-@USE_NLS@ if test "$(PACKAGE)" = "gettext-tools"; then \ $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \ for file in $(DISTFILES.common) Makevars.template; do \ $(INSTALL_DATA) $(srcdir)/$$file \ $(DESTDIR)$(gettextsrcdir)/$$file; \ done; \ for file in Makevars; do \ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ done; \ else \ : ; \ fi install-data-no: all install-data-yes: all @catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ dir=$(localedir)/$$lang/LC_MESSAGES; \ $(mkdir_p) $(DESTDIR)$$dir; \ if test -r $$cat; then realcat=$$cat; else realcat=$(srcdir)/$$cat; fi; \ $(INSTALL_DATA) $$realcat $(DESTDIR)$$dir/$(DOMAIN).mo; \ echo "installing $$realcat as $(DESTDIR)$$dir/$(DOMAIN).mo"; \ for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \ if test -n "$$lc"; then \ if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \ link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \ mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \ for file in *; do \ if test -f $$file; then \ ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \ fi; \ done); \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ else \ if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \ :; \ else \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ fi; \ fi; \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ ln -s ../LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \ ln $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \ cp -p $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ echo "installing $$realcat link as $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo"; \ fi; \ done; \ done install-strip: install installdirs: installdirs-exec installdirs-data installdirs-exec: installdirs-data: installdirs-data-@USE_NLS@ if test "$(PACKAGE)" = "gettext-tools"; then \ $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \ else \ : ; \ fi installdirs-data-no: installdirs-data-yes: @catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ dir=$(localedir)/$$lang/LC_MESSAGES; \ $(mkdir_p) $(DESTDIR)$$dir; \ for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \ if test -n "$$lc"; then \ if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \ link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \ mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \ for file in *; do \ if test -f $$file; then \ ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \ fi; \ done); \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ else \ if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \ :; \ else \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ fi; \ fi; \ fi; \ done; \ done # Define this as empty until I found a useful application. installcheck: uninstall: uninstall-exec uninstall-data uninstall-exec: uninstall-data: uninstall-data-@USE_NLS@ if test "$(PACKAGE)" = "gettext-tools"; then \ for file in $(DISTFILES.common) Makevars.template; do \ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ done; \ else \ : ; \ fi uninstall-data-no: uninstall-data-yes: catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ for lc in LC_MESSAGES $(EXTRA_LOCALE_CATEGORIES); do \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ done; \ done check: all info dvi ps pdf html tags TAGS ctags CTAGS ID: mostlyclean: rm -f remove-potcdate.sed rm -f stamp-poT rm -f core core.* $(DOMAIN).po $(DOMAIN).1po $(DOMAIN).2po *.new.po rm -fr *.o clean: mostlyclean distclean: clean rm -f Makefile Makefile.in POTFILES *.mo maintainer-clean: distclean @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." rm -f stamp-po $(GMOFILES) distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) dist distdir: $(MAKE) update-po @$(MAKE) dist2 # This is a separate target because 'update-po' must be executed before. dist2: stamp-po $(DISTFILES) dists="$(DISTFILES)"; \ if test "$(PACKAGE)" = "gettext-tools"; then \ dists="$$dists Makevars.template"; \ fi; \ if test -f $(srcdir)/$(DOMAIN).pot; then \ dists="$$dists $(DOMAIN).pot stamp-po"; \ fi; \ if test -f $(srcdir)/ChangeLog; then \ dists="$$dists ChangeLog"; \ fi; \ for i in 0 1 2 3 4 5 6 7 8 9; do \ if test -f $(srcdir)/ChangeLog.$$i; then \ dists="$$dists ChangeLog.$$i"; \ fi; \ done; \ if test -f $(srcdir)/LINGUAS; then dists="$$dists LINGUAS"; fi; \ for file in $$dists; do \ if test -f $$file; then \ cp -p $$file $(distdir) || exit 1; \ else \ cp -p $(srcdir)/$$file $(distdir) || exit 1; \ fi; \ done update-po: Makefile $(MAKE) $(DOMAIN).pot-update test -z "$(UPDATEPOFILES)" || $(MAKE) $(UPDATEPOFILES) $(MAKE) update-gmo # General rule for creating PO files. .nop.po-create: @lang=`echo $@ | sed -e 's/\.po-create$$//'`; \ echo "File $$lang.po does not exist. If you are a translator, you can create it through 'msginit'." 1>&2; \ exit 1 # General rule for updating PO files. .nop.po-update: @lang=`echo $@ | sed -e 's/\.po-update$$//'`; \ if test "$(PACKAGE)" = "gettext-tools"; then PATH=`pwd`/../src:$$PATH; fi; \ tmpdir=`pwd`; \ echo "$$lang:"; \ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ echo "$${cdcmd}$(MSGMERGE) $(MSGMERGE_OPTIONS) --lang=$$lang $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \ cd $(srcdir); \ if { case `$(MSGMERGE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-7] | 0.1[0-7].*) \ $(MSGMERGE) $(MSGMERGE_OPTIONS) -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \ *) \ $(MSGMERGE) $(MSGMERGE_OPTIONS) --lang=$$lang -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \ esac; \ }; then \ if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ rm -f $$tmpdir/$$lang.new.po; \ else \ if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ :; \ else \ echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ exit 1; \ fi; \ fi; \ else \ echo "msgmerge for $$lang.po failed!" 1>&2; \ rm -f $$tmpdir/$$lang.new.po; \ fi $(DUMMYPOFILES): update-gmo: Makefile $(GMOFILES) @: # Recreate Makefile by invoking config.status. Explicitly invoke the shell, # because execution permission bits may not work on the current file system. # Use @SHELL@, which is the shell determined by autoconf for the use by its # scripts, not $(SHELL) which is hardwired to /bin/sh and may be deficient. Makefile: Makefile.in.in Makevars $(top_builddir)/config.status @POMAKEFILEDEPS@ cd $(top_builddir) \ && @SHELL@ ./config.status $(subdir)/$@.in po-directories force: # Tell versions [3.59,3.63) of GNU make not to export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/po/da.po�������������������������������������������������������������������������������0000644�0001750�0001750�00000054237�13512402637�014546� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Danish translation libgsasl. # Copyright (C) 2016 Free Software Foundation, Inc. # This file is distributed under the same license as the direvent package. # Joe Hansen <joedalton2@yahoo.dk>, 2015, 2016. # # statement -> erklæring (i programmering) # syslog er ikke oversat til systemlog # msgid "" msgstr "" "Project-Id-Version: direvent-5.1\n" "Report-Msgid-Bugs-To: bug-direvent@gnu.org.ua\n" "POT-Creation-Date: 2019-07-13 19:23+0300\n" "PO-Revision-Date: 2016-11-03 16:00+0000\n" "Last-Translator: Joe Hansen <joedalton2@yahoo.dk>\n" "Language-Team: Danish <dansk@dansk-gruppen.dk>\n" "Language: da\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: cmdline.opt:26 msgid "increase debug level" msgstr "øg fejlsøgningsniveauet" #: cmdline.opt:32 msgid "PRIO" msgstr "PRIO" #: cmdline.opt:32 msgid "" "log everything with priority PRIO and higher to the stderr, as well as to " "the syslog" msgstr "" "log alt med prioritet PRIO og højere til standardfejl, samt til sysloggen" #: cmdline.opt:41 msgid "NAME" msgstr "NAVN" #: cmdline.opt:41 msgid "set syslog facility" msgstr "angiv syslog-facilitet" #: cmdline.opt:47 msgid "remain in foreground" msgstr "bliv i forgrunden" #: cmdline.opt:53 msgid "DIR" msgstr "MAPPE" #: cmdline.opt:53 msgid "add include directory" msgstr "tilføj include-mappe" #: cmdline.opt:59 msgid "PROG" msgstr "PROG" #: cmdline.opt:59 msgid "self-test mode" msgstr "egentest-tilstand" #: cmdline.opt:65 msgid "FILE" msgstr "FIL" #: cmdline.opt:65 msgid "set PID file" msgstr "angiv PID-fil" #: cmdline.opt:71 msgid "check configuration file and exit" msgstr "kontroller konfigurationsfil og afslut" #: cmdline.opt:77 msgid "USER" msgstr "BRUGER" #: cmdline.opt:77 msgid "run as this user" msgstr "kør som denne bruger" #: cmdline.opt:87 msgid "show configuration file summary" msgstr "vis konfigurationsfiloverblik" #: cmdline.opt:81 msgid "Other options" msgstr "Andre tilvalg" #: cmdline.opt:93 msgid "Give this help list" msgstr "Vis denne hjælpeoversigt" #: cmdline.opt:93 msgid "Give a short usage message" msgstr "Vis en kort brugsbesked" #: cmdline.opt:93 msgid "Print program version" msgstr "Vis programversion" #: cmdline.opt:13 msgid "GNU direvent monitors changes in directories" msgstr "GNU direvent overvÃ¥ger ændringer i mapper" #: cmdline.opt:15 msgid "[CONFIG]" msgstr "[CONFIG]" #: cmdline.opt:95 #, c-format msgid "" "The optional CONFIG argument supplies the name of the configuration file\n" "to use instead of %s.\n" "\n" msgstr "" "Det valgfrie argument CONFIG leverer navnet pÃ¥ konfigurationsfilen,\n" "der skal bruges i stedet for %s.\n" "\n" #. TRANSLATORS: %s is one of: inotify, kqueue #: cmdline.opt:99 #, c-format msgid "" "This direvent uses %s interface.\n" "\n" msgstr "" "Denne direvent bruger %s-grænsefladen.\n" "\n" # Hvis man linker til andre biblioteker nÃ¥r man kompilerer, skriver man # ofte "#include <stdio.h>", f.eks., og dette er nok søgestierne hvor # den kigger efter filer sÃ¥som stdio.h. #: cmdline.opt:102 #, c-format msgid "Include search path:\n" msgstr "Søgesti for include:\n" #: cmdline.opt:105 #, c-format msgid "No include search path.\n" msgstr "Ingen include-søgesti.\n" #: src/config.c:63 #, c-format msgid "unknown syslog facility: %s" msgstr "ukendt syslog-facilitet: %s" #: src/config.c:80 #, c-format msgid "unknown syslog priority: %s" msgstr "ukendt syslog-prioritet: %s" #: src/config.c:88 msgid "unexpected block statement" msgstr "uventet blokerklæring" #: src/config.c:97 #, c-format msgid "expected %s" msgstr "forventede %s" #: src/config.c:102 #, c-format msgid "expected %s, but found %s" msgstr "forventede %s, men fandt %s" #: src/config.c:124 #, c-format msgid "unknown syslog facility `%s'" msgstr "ukendt syslog-facilitet »%s«" #: src/config.c:133 src/config.c:606 msgid "name" msgstr "navn" #: src/config.c:134 msgid "" "Set syslog facility. Arg is one of the following: user, daemon, auth, " "authpriv, mail, cron, local0 through local7 (case-insensitive), or a " "facility number." msgstr "" "Angiv syslog-facilitet. Arg er en af de følgende: user, daeon, auth, " "authpriv, mail, cron, local0 til local7 (ikke forskel pÃ¥ smÃ¥/store " "bogstaver), eller et facilitetnummer." #: src/config.c:139 grecs/src/format.c:36 grecs/src/tree.c:69 msgid "string" msgstr "streng" #: src/config.c:139 msgid "Tag syslog messages with this string" msgstr "Mærk syslog-beskeder med denne streng" #: src/config.c:142 grecs/src/format.c:141 msgid "arg" msgstr "arg" #: src/config.c:143 msgid "Prefix each message with its priority" msgstr "Foranstil prioritet for hver besked" #: src/config.c:191 #, c-format msgid "%s: recursion depth does not match previous definition" msgstr "%s: rekursionsdybde matcher ikke foregÃ¥ende definition" #: src/config.c:212 msgid "no paths configured" msgstr "ingen stier er konfigureret" #: src/config.c:217 msgid "no command configured" msgstr "ingen kommando er konfigureret" #: src/config.c:229 grecs/src/tree.c:665 msgid "invalid use of block statement" msgstr "ugyldig brug af blokerklæring" #: src/config.c:274 msgid "expected \"recursive\" or end of statement" msgstr "forventede »recursive« eller erklæringsafslutning" #: src/config.c:289 msgid "surplus argument" msgstr "overskydende argument" #: src/config.c:295 src/config.c:446 msgid "unexpected list" msgstr "uventet liste" #: src/config.c:326 src/config.c:341 src/config.c:356 msgid "unrecognized event code" msgstr "ukendt hændelseskode" #: src/config.c:438 msgid "surplus arguments" msgstr "overskydende argumenter" #: src/config.c:452 msgid "no such user" msgstr "ingen sÃ¥dan bruger" #: src/config.c:459 msgid "no such group" msgstr "ingen sÃ¥dan gruppe" #: src/config.c:501 msgid "unrecognized option" msgstr "ukendt tilvalg" #: src/config.c:595 msgid "Pathname to watch" msgstr "Stinavn at overvÃ¥ge" #: src/config.c:598 msgid "Events to watch for" msgstr "Hændelser at overvÃ¥ge" #: src/config.c:601 msgid "regexp" msgstr "regulært udtryk" #: src/config.c:601 msgid "Files to watch for" msgstr "Filer at overvÃ¥ge" #: src/config.c:604 msgid "Command to execute on event" msgstr "Kommando at køre ved hændelse" #: src/config.c:606 msgid "Run command as this user" msgstr "Kør kommando som denne bruger" #: src/config.c:609 msgid "seconds" msgstr "sekunder" #: src/config.c:609 msgid "Timeout for the command" msgstr "Tidsudløb for kommando" #: src/config.c:611 msgid "List of additional options" msgstr "Liste over yderligere tilvalg" #: src/config.c:614 msgid "<arg: string> <arg: string>..." msgstr "<arg: streng> <arg: streng>..." #: src/config.c:615 msgid "Modify environment" msgstr "Ændr miljø" #: src/config.c:622 msgid "Run as this user" msgstr "Kør som denne bruger" #: src/config.c:624 msgid "Run in foreground" msgstr "Kør i forgrunden" #: src/config.c:626 msgid "file" msgstr "fil" #: src/config.c:626 msgid "Set pid file name" msgstr "Angiv pid-filnavn" #: src/config.c:628 msgid "Configure syslog logging" msgstr "Konfigurer syslog-logning" #: src/config.c:630 msgid "level" msgstr "niveau" #: src/config.c:630 msgid "Set debug level" msgstr "Angiv fejlsøgningsniveau" #: src/config.c:632 msgid "Configure event watcher" msgstr "Konfigurer hændelsesovervÃ¥ger" #: src/config.c:643 msgid "" "Configuration file structure for direvent.\n" "For more information, use `info direvent configuration'." msgstr "" "Konfigurationsfilstruktur for direvent.\n" "Brug »info direvent configuration« for yderligere information." #: src/direvent.c:142 src/direvent.c:164 src/watcher.c:93 src/watcher.c:125 msgid "not enough memory" msgstr "ikke nok hukommelse" #: src/direvent.c:274 #, c-format msgid "cannot open pidfile %s for writing: %s" msgstr "kan ikke Ã¥bne pid-filen %s til skrivning: %s" #: src/direvent.c:302 #, c-format msgid "no user with UID %lu" msgstr "ingen bruger med UID: %lu" #: src/direvent.c:420 #, c-format msgid "cannot run `%s': fork failed: %s" msgstr "kan ikke køre »%s«: forgrening mislykkedes: %s" #: src/direvent.c:480 msgid "too many arguments" msgstr "for mange argumenter" #: src/direvent.c:522 #, c-format msgid "%s %s started" msgstr "%s %s startet" #: src/direvent.c:546 #, c-format msgid "%s %s stopped" msgstr "%s %s stoppet" #: src/environ.c:25 msgid "environment: " msgstr "miljø: " #: src/progman.c:142 #, c-format msgid "process %lu exited successfully" msgstr "processen %lu blev udført" #: src/progman.c:145 #, c-format msgid "process %lu failed with status %d" msgstr "processen %lu mislykkedes med status %d" #: src/progman.c:155 #, c-format msgid "process %lu terminated on signal %d" msgstr "processen %lu afsluttedes ved signalet %d" #: src/progman.c:158 #, c-format msgid "process %lu stopped on signal %d" msgstr "processen %lu stoppede ved signalet %d" #: src/progman.c:163 #, c-format msgid "process %lu dumped core" msgstr "processen %lu dumpede kerne" #: src/progman.c:167 #, c-format msgid "process %lu terminated with unrecognized status" msgstr "processen %lu afsluttedes med ukendt status" #: src/progman.c:228 msgid "begin scanning process list" msgstr "begynd skanning af procesliste" #: src/progman.c:232 #, c-format msgid "process %lu timed out" msgstr "processen %lu fik tidsudløb" #: src/progman.c:241 #, c-format msgid "scheduling alarm in %lu seconds" msgstr "planlægger alarm om %lu sekunder" #: src/progman.c:322 #, c-format msgid "cannot start redirector for %s, pipe failed: %s" msgstr "kan ikke starte videresender for %s; datakanal mislykkedes: %s" #: src/progman.c:354 #, c-format msgid "cannot run redirector `%s': fork failed: %s" msgstr "kan ikke køre videresender »%s«: forgrening mislykkedes: %s" #: src/progman.c:359 #, c-format msgid "redirector for %s started, pid=%lu" msgstr "videresender for %s startet, pid=%lu" #: src/progman.c:455 #, c-format msgid "starting %s, dir=%s, file=%s" msgstr "starter %s, mappe=%s, fil=%s" #: src/progman.c:484 #, c-format msgid "cannot change to %s: %s" msgstr "kan ikke ændre til %s: %s" #: src/progman.c:512 #, c-format msgid "%s running; dir=%s, file=%s, pid=%lu" msgstr "%s kører; mappe=%s fil=%s, pid=%lu" #: src/progman.c:534 #, c-format msgid "waiting for %s (%lu) to terminate" msgstr "venter pÃ¥ %s (%lu) for at afslutte" #: src/watcher.c:183 src/watcher.c:513 #, c-format msgid "removing watcher %s" msgstr "fjerner overvÃ¥ger %s" #: src/watcher.c:195 msgid "no watchers left; exiting now" msgstr "" #: src/watcher.c:262 #, c-format msgid "installing CREATE sentinel for %s" msgstr "" #: src/watcher.c:275 #, c-format msgid "creating watcher %s" msgstr "opretter overvÃ¥ger %s" #: src/watcher.c:281 src/watcher.c:296 #, c-format msgid "cannot set watcher on %s: %s" msgstr "kan ikke angive overvÃ¥ger pÃ¥ %s: %s" #: src/watcher.c:377 #, c-format msgid "cannot create watcher %s/%s: not enough memory" msgstr "kan ikke oprettet overvÃ¥ger %s/%s: ikke nok hukommelse" #: src/watcher.c:384 #, c-format msgid "cannot create watcher %s/%s, stat failed: %s" msgstr "kan ikke oprette overvÃ¥ger %s/%s, kørsel af stat mislykkedes: %s" #: src/watcher.c:430 #, c-format msgid "cannot open directory %s: %s" msgstr "kan ikke Ã¥bne mappen %s: %s" #: src/watcher.c:447 #, c-format msgid "cannot stat %s/%s: not enough memory" msgstr "kan ikke køre stat pÃ¥ %s/%s: ikke nok hukommelse" #: src/watcher.c:452 #, c-format msgid "cannot stat %s: %s" msgstr "kan ikke køre stat pÃ¥ %s: %s" #: src/watcher.c:497 msgid "no event handlers configured" msgstr "ingen hændelseshÃ¥ndtering konfigureret" #: src/watcher.c:502 msgid "no event handlers installed" msgstr "ingen hændelseshÃ¥ndteringer installeret" #: grecs/src/format.c:33 msgid "void" msgstr "" #: grecs/src/format.c:46 msgid "number" msgstr "" #: grecs/src/format.c:49 msgid "time" msgstr "" #: grecs/src/format.c:52 msgid "boolean" msgstr "" #: grecs/src/format.c:55 msgid "IPv4" msgstr "" #: grecs/src/format.c:58 msgid "CIDR" msgstr "" #: grecs/src/format.c:61 #, fuzzy msgid "hostname" msgstr "navn" #: grecs/src/format.c:64 msgid "sockaddr" msgstr "" #: grecs/src/format.c:67 msgid "section" msgstr "" #: grecs/src/format.c:70 msgid "null" msgstr "" #: grecs/src/format.c:133 msgid "Disabled;" msgstr "Deaktiveret;" #: grecs/src/opthelp.c:123 grecs/src/opthelp.c:269 msgid "Usage:" msgstr "Brug:" #: grecs/src/opthelp.c:127 msgid "OPTION" msgstr "TILVALG" #: grecs/src/opthelp.c:132 grecs/src/opthelp.c:427 msgid "Aliases" msgstr "Aliasser" #: grecs/src/opthelp.c:132 grecs/src/opthelp.c:427 msgid "Alias" msgstr "Alias" #: grecs/src/opthelp.c:186 msgid "" "Mandatory or optional arguments to long options are also mandatory or " "optional for any corresponding short options." msgstr "" "Obligatoriske eller valgfrie parametre til lange tilvalg er ogsÃ¥ " "obligatoriske eller valgfrie for alle tilsvarende korte tilvalg." #. TRANSLATORS: The placeholder indicates the bug-reporting #. address for this package. Please add _another line_ saying #. "Report translation bugs to <...>\n" with the address for #. translation bugs (typically your translation team's web or #. email address). #: grecs/src/opthelp.c:202 #, c-format msgid "Report bugs to %s.\n" msgstr "" "Rapporter fejl til %s.\n" "\n" "Oversættelse:\n" "Joe Hansen, 2015-2016.\n" "\n" "Rapporter fejl i oversættelsen til Danskgruppen.\n" "Dansk-gruppen <dansk@dansk-gruppen.dk>\n" "Mere info: http://www.dansk-gruppen.dk\n" #: grecs/src/opthelp.c:205 #, c-format msgid "%s home page: <%s>\n" msgstr "Hjemmeside for %s: <%s>\n" #. TRANSLATORS: Translate "(C)" to the copyright symbol #. (C-in-a-circle), if this symbol is available in the user's #. locale. Otherwise, do not translate "(C)"; leave it as-is. #: grecs/src/opthelp.c:457 msgid "(C)" msgstr "©" #: grecs/src/opthelp.c:466 msgid "" "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." "html>\n" "This is free software: you are free to change and redistribute it.\n" "There is NO WARRANTY, to the extent permitted by law.\n" "\n" msgstr "" "Licens GPLv3+: GNU GPL version 3 eller senere <http://gnu.org/licenses/gpl." "html>.\n" "Dette er et frit program: du kan frit ændre og videredistribuere " "programmet.\n" "Der er INGEN GARANTI, inden for lovens udstrækning.\n" "\n" #: grecs/src/opthelp.c:483 msgid "Written by " msgstr "Skrevet af " #. TRANSLATORS: This string is used as a delimiter between #. authors' names as in: #. #. Written by Winnie the Pooh, Piglet ... #. #: grecs/src/opthelp.c:489 msgid ", " msgstr ", " #. TRANSLATORS: This string acts as a delimiter before the #. last author's names, e.g.: #. #. Written by Winnie the Pooh, Piglet and Christopher Robin. #. #: grecs/src/opthelp.c:495 msgid " and " msgstr " og " #: grecs/src/path-parser.c:62 #, c-format msgid "cannot open `%s'" msgstr "kan ikke Ã¥bne »%s«" #: grecs/src/path-parser.c:108 grecs/src/path-parser.c:123 msgid "unexpected end of file" msgstr "uventet filafslutning" #: grecs/src/path-parser.c:143 msgid "parse error" msgstr "fortolkningsfejl" #: grecs/src/preproc.c:448 grecs/src/preproc.c:470 #, c-format msgid "Cannot stat `%s'" msgstr "Kan ikke køre stat pÃ¥ »%s«" #: grecs/src/preproc.c:453 grecs/src/preproc.c:458 msgid "Recursive inclusion" msgstr "Rekursiv inklusion" #: grecs/src/preproc.c:461 #, c-format msgid "`%s' already included here" msgstr "»%s« allerede inkluderet her" #: grecs/src/preproc.c:465 #, c-format msgid "`%s' already included at top level" msgstr "»%s« allerede inkluderet pÃ¥ topniveau" #: grecs/src/preproc.c:480 #, c-format msgid "Cannot open `%s'" msgstr "Kan ikke Ã¥bne »%s«" #: grecs/src/preproc.c:595 msgid "Cannot parse include line" msgstr "Kan ikke fortolke include-linje" #: grecs/src/preproc.c:598 msgid "invalid include statement" msgstr "ugyldigt include-erklæring" #: grecs/src/preproc.c:624 msgid "read error" msgstr "læsefejl" #: grecs/src/preproc.c:632 #, c-format msgid "%s: No such file or directory" msgstr "%s: Ingen sÃ¥dan fil eller mappe" # præprocessoren/forbrænderen forbehandler C-kode før den kompileres. Det som # præprocessoren/forbrænderen gør er modificere teksten nÃ¥r den møder kommandoer. # F.eks. #include <filnavn> betyder "indsæt indholdet af <filnavn> her # midt inde i koden", og man kan ogsÃ¥ definere at f.eks. ORD skal # erstattes med en eller anden tekst #: grecs/src/preproc.c:698 #, c-format msgid "Unable to start external preprocessor `%s'" msgstr "Kan ikke starte ekstern forbrænder »%s«" #: grecs/src/preproc.c:773 grecs/src/preproc.c:793 #, c-format msgid "Cannot run `%s'" msgstr "Kan ikke køre »%s«" #: grecs/src/symtab.c:236 msgid "element not found in table" msgstr "element blev ikke fundet i tabel" #: grecs/src/symtab.c:238 msgid "symbol table is full" msgstr "symboltabel er fuld" #: grecs/src/tree.c:70 msgid "list" msgstr "" #: grecs/src/tree.c:71 #, fuzzy msgid "one or more arguments" msgstr "for mange argumenter" #: grecs/src/tree.c:75 #, fuzzy msgid "unrecognized type; please report" msgstr "ukendt hændelseskode" #: grecs/src/tree.c:320 msgid "section keyword used as a scalar" msgstr "" #: grecs/src/tree.c:322 msgid "scalar keyword used as a section" msgstr "" #: grecs/src/tree.c:325 #, fuzzy msgid "unknown keyword" msgstr "Ukendt nøgleord" #: grecs/src/tree.c:360 #, c-format msgid "%s: not a valid boolean value" msgstr "%s: ikke en gyldig boolesk værdi" #: grecs/src/tree.c:391 #, c-format msgid "%s: UNIX socket name too long" msgstr "%s: UNIX-sokkelnavn er for langt" #: grecs/src/tree.c:420 grecs/src/tree.c:644 #, c-format msgid "%s: not a valid IP address or hostname" msgstr "%s: ikke en gyldig IP-adresse eller værtsnavn" #: grecs/src/tree.c:444 #, c-format msgid "%s: not a valid port number" msgstr "%s: ikke et gyldigt portnummer" #: grecs/src/tree.c:452 msgid "missing port number" msgstr "mangler portnummer" #: grecs/src/tree.c:501 msgid "numeric overflow" msgstr "numerisk overløb" #: grecs/src/tree.c:506 msgid "value out of allowed range" msgstr "værdien er uden for det tilladte interval" #: grecs/src/tree.c:541 grecs/src/tree.c:571 #, c-format msgid "not a number (stopped near `%s')" msgstr "ikke et tal (stoppede nær »%s«)" #: grecs/src/tree.c:635 #, c-format msgid "%s: not a valid IP address" msgstr "%s: ikke en gyldig IP-adresse" #: grecs/src/tree.c:774 #, c-format msgid "too many arguments to `%s'; missing semicolon?" msgstr "for mange argumenter for »%s«; manglende semikolon?" #: grecs/src/tree.c:788 grecs/src/tree.c:836 #, c-format msgid "INTERNAL ERROR at %s:%d: unhandled data type %d" msgstr "INTERN FEJL ved %s:%d: datatypen %d blev ikke hÃ¥ndteret" #: grecs/src/tree.c:803 #, c-format msgid "%s: incompatible data type in list item #%d" msgstr "%s: datatypen i listepunktet #%d er ikke kompatibel" #: grecs/src/tree.c:823 #, c-format msgid "incompatible data type for `%s'" msgstr "datatypen for »%s« er ikke kompatibel" #: grecs/wordsplit/wordsplit.c:69 grecs/wordsplit/wordsplit.c:2855 msgid "memory exhausted" msgstr "hukommelsen er opbrugt" #: grecs/wordsplit/wordsplit.c:121 msgid "memory exhausted while trying to store error context" msgstr "" #: grecs/wordsplit/wordsplit.c:868 msgid "Restarting" msgstr "" #: grecs/wordsplit/wordsplit.c:1607 #, c-format msgid "%.*s: variable null or not set" msgstr "%.*s: variabel er null eller ikke angivet" #: grecs/wordsplit/wordsplit.c:1637 #, c-format msgid "warning: undefined variable `%.*s'" msgstr "advarsel: variabel er ikke defineret »%.*s«" #: grecs/wordsplit/wordsplit.c:2141 #, c-format msgid "no files match pattern %s" msgstr "ingen filer matcher mønster %s" #: grecs/wordsplit/wordsplit.c:2603 msgid "WS trimming" msgstr "WS-tilpasning" #: grecs/wordsplit/wordsplit.c:2605 msgid "command substitution" msgstr "kommandosubstitution" #: grecs/wordsplit/wordsplit.c:2607 grecs/wordsplit/wordsplit.c:2615 msgid "coalesce list" msgstr "sammensmelt liste" # expansion er her mere en evaluering eller udskrivning af noget # længere, f.eks. at konvertere ~brugernavn til /home/brugernavn. # Jeg ville sige tilde-erstatning, tilde-omskrivning eller lignende #: grecs/wordsplit/wordsplit.c:2609 msgid "tilde expansion" msgstr "tilde-erstatning" #: grecs/wordsplit/wordsplit.c:2611 msgid "variable expansion" msgstr "variabelerstatning" #: grecs/wordsplit/wordsplit.c:2613 msgid "quote removal" msgstr "citatfjernelse" #: grecs/wordsplit/wordsplit.c:2617 msgid "path expansion" msgstr "sti-erstatning" #: grecs/wordsplit/wordsplit.c:2642 #, c-format msgid "(%02d) Input:%.*s;" msgstr "(%02d) Inddata:%.*s;" #: grecs/wordsplit/wordsplit.c:2668 msgid "Initial list:" msgstr "Startliste:" #: grecs/wordsplit/wordsplit.c:2683 msgid "Coalesced list:" msgstr "Sammensmeltet liste:" #: grecs/wordsplit/wordsplit.c:2853 msgid "no error" msgstr "ingen fejl" #: grecs/wordsplit/wordsplit.c:2854 msgid "missing closing quote" msgstr "mangler afsluttende citationstegn" #: grecs/wordsplit/wordsplit.c:2856 msgid "invalid wordsplit usage" msgstr "ugyldig orddelingsbrug" #: grecs/wordsplit/wordsplit.c:2857 msgid "unbalanced curly brace" msgstr "krøllet parentes er ikke lukket" #: grecs/wordsplit/wordsplit.c:2858 msgid "undefined variable" msgstr "udefineret variabel" #: grecs/wordsplit/wordsplit.c:2859 msgid "input exhausted" msgstr "inddata opbrugt" #: grecs/wordsplit/wordsplit.c:2860 msgid "unbalanced parenthesis" msgstr "parentes uden modpart" # gerne glob-fejl # glob er nÃ¥r man siger "*.txt" og den laver stjernen om til en liste af # filer. globbing er et "improviseret" verbum, som ikke virkelig # findes, sÃ¥ pÃ¥ dansk er det bedre bare at sige glob (alternativt # "globningsfejl", men det er nok ikke sÃ¥ pænt) #: grecs/wordsplit/wordsplit.c:2861 msgid "globbing error" msgstr "glob-fejl" #: grecs/wordsplit/wordsplit.c:2862 #, fuzzy msgid "user-defined error" msgstr "læsefejl" #: grecs/wordsplit/wordsplit.c:2863 msgid "invalid parameter number in assignment" msgstr "" #: grecs/wordsplit/wordsplit.c:2875 msgid "unknown error" msgstr "ukendt fejl" #: grecs/wordsplit/wordsplit.c:2884 #, c-format msgid "missing closing %c (start near #%lu)" msgstr "mangler afsluttende %c (start nær #%lu)" #~ msgid "unterminated regexp" #~ msgstr "uafsluttet regulært udtryk" #~ msgid "unrecognized flag: %c" #~ msgstr "ukendt flag: %c" #~ msgid "out of memory" #~ msgstr "ikke mere hukommelse" #~ msgid "%s: unknown keyword" #~ msgstr "%s: ukendt nøgleord" #~ msgid "(%02d) Restart:%.*s;" #~ msgstr "(%02d) Genstart:%.*s;" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/AUTHORS��������������������������������������������������������������������������������0000644�0001750�0001750�00000000045�12625627743�014253� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Sergey Poznyakoff <gray@gnu.org.ua> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/THANKS���������������������������������������������������������������������������������0000644�0001750�0001750�00000000201�12625627743�014110� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Direvent THANKS file. Karl Berry <karl@freefriends.org> Natalia Alifanova <na@nxc.no> Zeus Panchenko <zeus@ibs.dn.ua> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/config.h.in����������������������������������������������������������������������������0000644�0001750�0001750�00000006431�13512402632�015213� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* config.h.in. Generated from configure.ac by autoheader. */ /* Supported event notification types */ #define IFACE_INOTIFY 0 /* inotify - Linux */ #define IFACE_KQUEUE 1 /* kqueue - BSD */ /* Define to 1 if translation of program messages to the user's native language is requested. */ #undef ENABLE_NLS /* Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the CoreFoundation framework. */ #undef HAVE_CFLOCALECOPYCURRENT /* Define to 1 if you have the MacOS X function CFPreferencesCopyAppValue in the CoreFoundation framework. */ #undef HAVE_CFPREFERENCESCOPYAPPVALUE /* Define if the GNU dcgettext() function is already present or preinstalled. */ #undef HAVE_DCGETTEXT /* Define to 1 if you have the `getdtablesize' function. */ #undef HAVE_GETDTABLESIZE /* Define to 1 if you have the <getopt.h> header file. */ #undef HAVE_GETOPT_H /* Define to 1 if you have the `getopt_long' function. */ #undef HAVE_GETOPT_LONG /* Define if the GNU gettext() function is already present or preinstalled. */ #undef HAVE_GETTEXT /* Define if you have the iconv() function and it works. */ #undef HAVE_ICONV /* Define to 1 if you have the `inotify_init' function. */ #undef HAVE_INOTIFY_INIT /* Define to 1 if you have the <inttypes.h> header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the `kqueue' function. */ #undef HAVE_KQUEUE /* Define to 1 if you have the <memory.h> header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the `rfork' function. */ #undef HAVE_RFORK /* Define to 1 if you have the <stdint.h> header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the <stdlib.h> header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the <strings.h> header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the <string.h> header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the `sysconf' function. */ #undef HAVE_SYSCONF /* Define to 1 if you have the <sys/event.h> header file. */ #undef HAVE_SYS_EVENT_H /* Define to 1 if you have the <sys/inotify.h> header file. */ #undef HAVE_SYS_INOTIFY_H /* Define to 1 if you have the <sys/stat.h> header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the <sys/types.h> header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have <sys/wait.h> that is POSIX.1 compatible. */ #undef HAVE_SYS_WAIT_H /* Define to 1 if you have the <unistd.h> header file. */ #undef HAVE_UNISTD_H /* Define as const if the declaration of iconv() needs const. */ #undef ICONV_CONST /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* event notification interface to use */ #undef USE_IFACE /* Version number of package */ #undef VERSION /* Define to 1 if `lex' declares `yytext' as a `char *' by default, not a `char[]'. */ #undef YYTEXT_POINTER ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/Makefile.in����������������������������������������������������������������������������0000644�0001750�0001750�00000066121�13512402622�015236� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 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 Direvent -*- autoconf -*- # Copyright (C) 2012-2016 Sergey Poznyakoff # # 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. # # 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 <http://www.gnu.org/licenses/>. 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 = . 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)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ $(am__configure_deps) $(am__DIST_COMMON) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = 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 = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ cscope distdir dist dist-all distcheck am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ $(LISP)config.h.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags CSCOPE = cscope DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.h.in \ $(top_srcdir)/build-aux/compile \ $(top_srcdir)/build-aux/config.guess \ $(top_srcdir)/build-aux/config.rpath \ $(top_srcdir)/build-aux/config.sub \ $(top_srcdir)/build-aux/install-sh \ $(top_srcdir)/build-aux/missing ABOUT-NLS AUTHORS COPYING \ ChangeLog INSTALL NEWS README THANKS build-aux/compile \ build-aux/config.guess build-aux/config.rpath \ build-aux/config.sub build-aux/depcomp build-aux/install-sh \ build-aux/mdate-sh build-aux/missing build-aux/texinfo.tex \ build-aux/ylwrap DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi am__post_remove_distdir = $(am__remove_distdir) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best DIST_TARGETS = dist-gzip distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = find . -type f -print 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@ 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@ 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@ 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@ 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@ ACLOCAL_AMFLAGS = -I am -I grecs/am SUBDIRS = grecs src tests doc po EXTRA_DIST = build-aux/config.rpath all: config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: am--refresh: Makefile @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --gnits'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --gnits \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnits Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): config.h: stamp-h1 @test -f $@ || rm -f stamp-h1 @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1 stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.h.in: $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscope: cscope.files test ! -s cscope.files \ || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) clean-cscope: -rm -f cscope.files cscope.files: clean-cscope cscopelist cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -rm -f cscope.out cscope.in.out cscope.po.out cscope.files distdir: $(DISTFILES) @case `sed 15q $(srcdir)/NEWS` in \ *"$(VERSION)"*) : ;; \ *) \ echo "NEWS not updated; not releasing" 1>&2; \ exit 1;; \ esac $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @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 @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__post_remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__post_remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__post_remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__post_remove_distdir) dist-shar: distdir @echo WARNING: "Support for shar distribution archives is" \ "deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__post_remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__post_remove_distdir) dist dist-all: $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' $(am__post_remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build/sub \ && ../../configure \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ --srcdir=../.. --prefix="$$dc_install_base" \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__post_remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @test -n '$(distuninstallcheck_dir)' || { \ echo 'ERROR: trying to run $@ with an empty' \ '$$(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ $(am__cd) '$(distuninstallcheck_dir)' || { \ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-recursive all-am: Makefile config.h installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: 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-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-hdr distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) all install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--refresh check check-am clean clean-cscope clean-generic \ cscope cscopelist-am ctags ctags-am dist dist-all dist-bzip2 \ dist-gzip dist-lzip dist-shar dist-tarZ dist-xz dist-zip \ distcheck distclean distclean-generic distclean-hdr \ distclean-tags distcleancheck distdir distuninstallcheck 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-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs installdirs-am \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am .PRECIOUS: Makefile .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 # 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.2/tests/���������������������������������������������������������������������������������0000755�0001750�0001750�00000000000�13512403134�014324� 5����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/tests/file.at��������������������������������������������������������������������������0000644�0001750�0001750�00000002676�12764623664�015630� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of Direvent testsuite. -*- Autotest -*- # Copyright (C) 2013-2016 Sergey Poznyakoff # # 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. # # 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 <http://www.gnu.org/licenses/>. AT_SETUP([File watcher]) AT_KEYWORDS([special file]) AT_DIREVENT_TEST_UNQUOTED([ debug 10; syslog { facility ${TESTSUITE_FACILITY:-local0}; tag direvent-test:create; } watcher { path $cwd/file; event (create,write,delete); option (stdout,stderr); command "$TESTDIR/envdump -s -i DIREVENT_FILE=:DIREVENT_GENEV_ -f $outfile -k\$self_test_pid"; } ], [echo "foo" > file ], [outfile=$cwd/dump echo "file" > file ], [sed '/^argv\[[[0-9]]\]=-k/d' $outfile ], [0], [# Dump of execution environment cwd is $cwd # Arguments argv[[0]]=$TESTDIR/envdump argv[[1]]=-s argv[[2]]=-i argv[[3]]=DIREVENT_FILE=:DIREVENT_GENEV_ argv[[4]]=-f argv[[5]]=$cwd/dump # Environment DIREVENT_FILE=file DIREVENT_GENEV_CODE=2 DIREVENT_GENEV_NAME=write # End ]) AT_CLEANUP ������������������������������������������������������������������direvent-5.2/tests/create.at������������������������������������������������������������������������0000644�0001750�0001750�00000002667�12764623664�016154� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of Direvent testsuite. -*- Autotest -*- # Copyright (C) 2013-2016 Sergey Poznyakoff # # 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. # # 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 <http://www.gnu.org/licenses/>. AT_SETUP([Create]) AT_KEYWORDS([create create01]) AT_DIREVENT_TEST([ debug 10; syslog { facility ${TESTSUITE_FACILITY:-local0}; tag direvent-test:create; } watcher { path $cwd/dir; event create; command "$TESTDIR/envdump -s -i DIREVENT_FILE=:DIREVENT_GENEV_ -f $outfile -k\$self_test_pid"; option (stdout,stderr); } ], [> dir/file], [outfile=$cwd/dump mkdir dir ], [sed "s^$cwd^(CWD)^;s^$TESTDIR^(TESTDIR)^;/^argv\[[[0-9]]\]=-k/d" $outfile ], [0], [# Dump of execution environment cwd is (CWD)/dir # Arguments argv[[0]]=(TESTDIR)/envdump argv[[1]]=-s argv[[2]]=-i argv[[3]]=DIREVENT_FILE=:DIREVENT_GENEV_ argv[[4]]=-f argv[[5]]=(CWD)/dump # Environment DIREVENT_FILE=file DIREVENT_GENEV_CODE=1 DIREVENT_GENEV_NAME=create # End ]) AT_CLEANUP �������������������������������������������������������������������������direvent-5.2/tests/Makefile.am����������������������������������������������������������������������0000644�0001750�0001750�00000004271�12764623664�016410� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of Direvent # Copyright (C) 2012-2016 Sergey Poznyakoff # # 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. # # 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 <http://www.gnu.org/licenses/>. EXTRA_DIST = $(TESTSUITE_AT) testsuite package.m4 printname DISTCLEANFILES = atconfig $(check_SCRIPTS) MAINTAINERCLEANFILES = Makefile.in $(TESTSUITE) ## ------------ ## ## package.m4. ## ## ------------ ## $(srcdir)/package.m4: $(top_srcdir)/configure.ac $(AM_V_GEN){ \ echo '# Signature of the current package.'; \ echo 'm4_define([AT_PACKAGE_NAME], [@PACKAGE_NAME@])'; \ echo 'm4_define([AT_PACKAGE_TARNAME], [@PACKAGE_TARNAME@])'; \ echo 'm4_define([AT_PACKAGE_VERSION], [@PACKAGE_VERSION@])'; \ echo 'm4_define([AT_PACKAGE_STRING], [@PACKAGE_STRING@])'; \ echo 'm4_define([AT_PACKAGE_BUGREPORT], [@PACKAGE_BUGREPORT@])'; \ } >$(srcdir)/package.m4 # ## ------------ ## ## Test suite. ## ## ------------ ## TESTSUITE_AT = \ attrib.at\ cmdexp.at\ create.at\ createrec.at\ delete.at\ env00.at\ env01.at\ env02.at\ env03.at\ file.at\ glob01.at\ glob02.at\ re01.at\ re02.at\ re03.at\ re04.at\ re05.at\ samepath.at\ shell.at\ sent.at\ testsuite.at\ write.at TESTSUITE = $(srcdir)/testsuite M4=m4 AUTOTEST = $(AUTOM4TE) --language=autotest $(TESTSUITE): package.m4 $(TESTSUITE_AT) $(AM_V_GEN)$(AUTOTEST) -I $(srcdir) testsuite.at -o $@.tmp $(AM_V_at)mv $@.tmp $@ atconfig: $(top_builddir)/config.status cd $(top_builddir) && ./config.status tests/$@ clean-local: @test ! -f $(TESTSUITE) || $(SHELL) $(TESTSUITE) --clean check-local: atconfig atlocal $(TESTSUITE) @$(SHELL) $(TESTSUITE) noinst_PROGRAMS=envdump ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/tests/testsuite.at���������������������������������������������������������������������0000644�0001750�0001750�00000003663�12764623664�016737� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of Direvent testsuite. -*- Autotest -*- # Copyright (C) 2013, 2014, 2016 Sergey Poznyakoff # # 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. # # 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 <http://www.gnu.org/licenses/>. m4_version_prereq([2.52g]) m4_define([AT_SKIP_TEST],[exit 77]) dnl m4_direvent_test([MOD], dnl [CONFIG],[SELFTEST],[PROLOGUE],[EPILOGUE],[CODE],[STDOUT], dnl [STDERR]) m4_define([m4_direvent_test],[ cwd=`pwd -P` AT_CHECK$1([ $4 cat > test.conf <<EOT [$2] EOT cat > selftest.sh <<EOT #!/bin/sh [$3] sleep 10 exit 21 EOT chmod +x selftest.sh direvent -lnotice -f --self-test $cwd/selftest.sh test.conf || exit $? $5 ], [$6], [$7], [$8])]) m4_define([AT_DIREVENT_TEST],[m4_direvent_test([],$@)]) m4_define([AT_DIREVENT_TEST_UNQUOTED],[m4_direvent_test([_UNQUOTED], $@)]) AT_INIT AT_TESTED([direvent]) m4_include([create.at]) m4_include([createrec.at]) m4_include([delete.at]) m4_include([write.at]) m4_include([attrib.at]) m4_include([cmdexp.at]) m4_include([samepath.at]) m4_include([shell.at]) AT_BANNER([Environment modifications]) m4_include([env00.at]) m4_include([env01.at]) m4_include([env02.at]) m4_include([env03.at]) AT_BANNER([Filename selection]) m4_include([glob01.at]) m4_include([glob02.at]) m4_include([re01.at]) m4_include([re02.at]) m4_include([re03.at]) m4_include([re04.at]) m4_include([re05.at]) AT_BANNER([Special watchpoints]) m4_include([file.at]) m4_include([sent.at]) �����������������������������������������������������������������������������direvent-5.2/tests/env00.at�������������������������������������������������������������������������0000644�0001750�0001750�00000003307�12764623664�015631� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of Direvent testsuite. -*- Autotest -*- # Copyright (C) 2013-2016 Sergey Poznyakoff # # 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. # # 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 <http://www.gnu.org/licenses/>. AT_SETUP([modify]) AT_KEYWORDS([environ env00]) AT_DIREVENT_TEST([ debug 10; syslog { facility ${TESTSUITE_FACILITY:-local0}; tag direvent-test:write; } watcher { path $cwd/dir; event write; command "$TESTDIR/envdump -s -i DIREVENT_FILE=:DIREVENT_GENEV_:VAR1=:VAR2=:VAR3=:FILE= -f $outfile -k\$self_test_pid"; option (stdout,stderr); environ ("VAR3=qux", "FILE=\$file"); } ], [echo "to come to" >> dir/testfile], [outfile=$cwd/dump mkdir dir cat > dir/testfile <<EOT now is the time for all men EOT VAR1=foo VAR2=bar export VAR1 VAR2 ], [ sed "s^$cwd^(CWD)^;s^$TESTDIR^(TESTDIR)^;s^\(DIREVENT_SYS.*\)=.*^\1=X^;/^argv\[[[0-9]]\]=-k/d" $outfile ], [0], [# Dump of execution environment cwd is (CWD)/dir # Arguments argv[[0]]=(TESTDIR)/envdump argv[[1]]=-s argv[[2]]=-i argv[[3]]=DIREVENT_FILE=:DIREVENT_GENEV_:VAR1=:VAR2=:VAR3=:FILE= argv[[4]]=-f argv[[5]]=(CWD)/dump # Environment DIREVENT_FILE=testfile DIREVENT_GENEV_CODE=2 DIREVENT_GENEV_NAME=write FILE=testfile VAR1=foo VAR2=bar VAR3=qux # End ]) AT_CLEANUP �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/tests/delete.at������������������������������������������������������������������������0000644�0001750�0001750�00000002672�12764623664�016147� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of Direvent testsuite. -*- Autotest -*- # Copyright (C) 2013-2016 Sergey Poznyakoff # # 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. # # 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 <http://www.gnu.org/licenses/>. AT_SETUP([Delete]) AT_KEYWORDS([delete]) AT_DIREVENT_TEST([ debug 10; syslog { facility ${TESTSUITE_FACILITY:-local0}; tag direvent-test:delete; } watcher { path $cwd/dir; event delete; command "$TESTDIR/envdump -s -i DIREVENT_FILE=:DIREVENT_GENEV_ -f $outfile -k\$self_test_pid"; option (stdout,stderr); } ], [rm dir/file], [outfile=$cwd/dump mkdir dir > dir/file ], [sed "s^$cwd^(CWD)^;s^$TESTDIR^(TESTDIR)^;/^argv\[[[0-9]]\]=-k/d" $outfile ], [0], [# Dump of execution environment cwd is (CWD)/dir # Arguments argv[[0]]=(TESTDIR)/envdump argv[[1]]=-s argv[[2]]=-i argv[[3]]=DIREVENT_FILE=:DIREVENT_GENEV_ argv[[4]]=-f argv[[5]]=(CWD)/dump # Environment DIREVENT_FILE=file DIREVENT_GENEV_CODE=8 DIREVENT_GENEV_NAME=delete # End ]) AT_CLEANUP ����������������������������������������������������������������������direvent-5.2/tests/glob02.at������������������������������������������������������������������������0000644�0001750�0001750�00000003051�12764623664�015762� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of Direvent testsuite. -*- Autotest -*- # Copyright (C) 2013-2016 Sergey Poznyakoff # # 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. # # 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 <http://www.gnu.org/licenses/>. AT_SETUP([Globbing pattern negation]) AT_KEYWORDS([create fname glob glob02 neg]) AT_DIREVENT_TEST([ debug 10; syslog { facility ${TESTSUITE_FACILITY:-local0}; tag direvent-test:create; } watcher { path $cwd/dir; event create; file "!*.tmp"; command "$TESTDIR/envdump -s -i DIREVENT_FILE=:DIREVENT_GENEV_ -f $outfile -a -k\$self_test_pid"; option (stdout,stderr); } ], [> dir/tempfile > dir/file.tmp ], [outfile=$cwd/dump mkdir dir ], [sed "s^$cwd^(CWD)^;s^$TESTDIR^(TESTDIR)^;/^argv\[[[0-9]]\]=-k/d;/DIREVENT_SELF_TEST_PID/d" $outfile ], [0], [# Dump of execution environment cwd is (CWD)/dir # Arguments argv[[0]]=(TESTDIR)/envdump argv[[1]]=-s argv[[2]]=-i argv[[3]]=DIREVENT_FILE=:DIREVENT_GENEV_ argv[[4]]=-f argv[[5]]=(CWD)/dump argv[[6]]=-a # Environment DIREVENT_FILE=tempfile DIREVENT_GENEV_CODE=1 DIREVENT_GENEV_NAME=create # End ]) AT_CLEANUP ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/tests/write.at�������������������������������������������������������������������������0000644�0001750�0001750�00000002761�12764623664�016036� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of Direvent testsuite. -*- Autotest -*- # Copyright (C) 2013-2016 Sergey Poznyakoff # # 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. # # 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 <http://www.gnu.org/licenses/>. AT_SETUP([Write]) AT_KEYWORDS([write]) AT_DIREVENT_TEST([ debug 10; syslog { facility ${TESTSUITE_FACILITY:-local0}; tag direvent-test:write; } watcher { path $cwd/dir; event write; command "$TESTDIR/envdump -s -i DIREVENT_FILE=:DIREVENT_GENEV_ -f $outfile -k\$self_test_pid"; option (stdout,stderr); } ], [echo "to come to" >> dir/file], [outfile=$cwd/dump mkdir dir cat > dir/file <<EOT now is the time for all men EOT ], [sed "s^$cwd^(CWD)^;s^$TESTDIR^(TESTDIR)^;/^argv\[[[0-9]]\]=-k/d" $outfile ], [0], [# Dump of execution environment cwd is (CWD)/dir # Arguments argv[[0]]=(TESTDIR)/envdump argv[[1]]=-s argv[[2]]=-i argv[[3]]=DIREVENT_FILE=:DIREVENT_GENEV_ argv[[4]]=-f argv[[5]]=(CWD)/dump # Environment DIREVENT_FILE=file DIREVENT_GENEV_CODE=2 DIREVENT_GENEV_NAME=write # End ]) AT_CLEANUP ���������������direvent-5.2/tests/testsuite������������������������������������������������������������������������0000755�0001750�0001750�00000320737�13512402634�016323� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Generated from testsuite.at by GNU Autoconf 2.69. # # Copyright (C) 2009-2012 Free Software Foundation, Inc. # # This test suite is free software; the Free Software Foundation gives # unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" SHELL=${CONFIG_SHELL-/bin/sh} # How were we run? at_cli_args="$@" # Not all shells have the 'times' builtin; the subshell is needed to make # sure we discard the 'times: not found' message from the shell. at_times_p=false (times) >/dev/null 2>&1 && at_times_p=: # CLI Arguments to pass to the debugging scripts. at_debug_args= # -e sets to true at_errexit_p=false # Shall we be verbose? ':' means no, empty means yes. at_verbose=: at_quiet= # Running several jobs in parallel, 0 means as many as test groups. at_jobs=1 at_traceon=: at_trace_echo=: at_check_filter_trace=: # Shall we keep the debug scripts? Must be `:' when the suite is # run by a debug script, so that the script doesn't remove itself. at_debug_p=false # Display help message? at_help_p=false # Display the version message? at_version_p=false # List test groups? at_list_p=false # --clean at_clean=false # Test groups to run at_groups= # Whether to rerun failed tests. at_recheck= # Whether a write failure occurred at_write_fail=0 # The directory we run the suite in. Default to . if no -C option. at_dir=`pwd` # An absolute reference to this testsuite script. case $as_myself in [\\/]* | ?:[\\/]* ) at_myself=$as_myself ;; * ) at_myself=$at_dir/$as_myself ;; esac # Whether -C is in effect. at_change_dir=false # Whether to enable colored test results. at_color=no # List of the tested programs. at_tested='direvent' # As many question marks as there are digits in the last test group number. # Used to normalize the test group numbers so that `ls' lists them in # numerical order. at_format='??' # Description of all the test groups. at_help_all="1;create.at:17;Create;create create01; 2;createrec.at:17;Create recursive;create createrec; 3;delete.at:17;Delete;delete; 4;write.at:17;Write;write; 5;attrib.at:17;Attrib;attrib; 6;cmdexp.at:17;Command line expansions;cmdexp; 7;samepath.at:17;Watchers with same paths;samepath; 8;shell.at:17;Shell;create shell; 9;env00.at:17;modify;environ env00; 10;env01.at:17;clear environment;environ env01; 11;env02.at:17;clear all environment;environ env02; 12;env03.at:17;clear and modify;environ env03; 13;glob01.at:17;Globbing pattern;create fname glob glob01; 14;glob02.at:17;Globbing pattern negation;create fname glob glob02 neg; 15;re01.at:17;Extended case-sensitive;create fname regexp re re01; 16;re02.at:17;Extended case-insensitive;create fname regexp re re02; 17;re03.at:17;Basic case-sensitive;create fname regexp re re03; 18;re04.at:17;Basic case-insensitive;create fname regexp re re04; 19;re05.at:17;Regexp negation;create fname regexp re re05 neg; 20;file.at:17;File watcher;special file; 21;sent.at:17;Sentinel;special sent sentinel; " # List of the all the test groups. at_groups_all=`$as_echo "$at_help_all" | sed 's/;.*//'` # at_fn_validate_ranges NAME... # ----------------------------- # Validate and normalize the test group number contained in each variable # NAME. Leading zeroes are treated as decimal. at_fn_validate_ranges () { for at_grp do eval at_value=\$$at_grp if test $at_value -lt 1 || test $at_value -gt 21; then $as_echo "invalid test group: $at_value" >&2 exit 1 fi case $at_value in 0*) # We want to treat leading 0 as decimal, like expr and test, but # AS_VAR_ARITH treats it as octal if it uses $(( )). # With XSI shells, ${at_value#${at_value%%[1-9]*}} avoids the # expr fork, but it is not worth the effort to determine if the # shell supports XSI when the user can just avoid leading 0. eval $at_grp='`expr $at_value + 0`' ;; esac done } at_prev= for at_option do # If the previous option needs an argument, assign it. if test -n "$at_prev"; then at_option=$at_prev=$at_option at_prev= fi case $at_option in *=?*) at_optarg=`expr "X$at_option" : '[^=]*=\(.*\)'` ;; *) at_optarg= ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $at_option in --help | -h ) at_help_p=: ;; --list | -l ) at_list_p=: ;; --version | -V ) at_version_p=: ;; --clean | -c ) at_clean=: ;; --color ) at_color=always ;; --color=* ) case $at_optarg in no | never | none) at_color=never ;; auto | tty | if-tty) at_color=auto ;; always | yes | force) at_color=always ;; *) at_optname=`echo " $at_option" | sed 's/^ //; s/=.*//'` as_fn_error $? "unrecognized argument to $at_optname: $at_optarg" ;; esac ;; --debug | -d ) at_debug_p=: ;; --errexit | -e ) at_debug_p=: at_errexit_p=: ;; --verbose | -v ) at_verbose=; at_quiet=: ;; --trace | -x ) at_traceon='set -x' at_trace_echo=echo at_check_filter_trace=at_fn_filter_trace ;; [0-9] | [0-9][0-9] | [0-9][0-9][0-9] | [0-9][0-9][0-9][0-9]) at_fn_validate_ranges at_option as_fn_append at_groups "$at_option$as_nl" ;; # Ranges [0-9]- | [0-9][0-9]- | [0-9][0-9][0-9]- | [0-9][0-9][0-9][0-9]-) at_range_start=`echo $at_option |tr -d X-` at_fn_validate_ranges at_range_start at_range=`$as_echo "$at_groups_all" | \ sed -ne '/^'$at_range_start'$/,$p'` as_fn_append at_groups "$at_range$as_nl" ;; -[0-9] | -[0-9][0-9] | -[0-9][0-9][0-9] | -[0-9][0-9][0-9][0-9]) at_range_end=`echo $at_option |tr -d X-` at_fn_validate_ranges at_range_end at_range=`$as_echo "$at_groups_all" | \ sed -ne '1,/^'$at_range_end'$/p'` as_fn_append at_groups "$at_range$as_nl" ;; [0-9]-[0-9] | [0-9]-[0-9][0-9] | [0-9]-[0-9][0-9][0-9] | \ [0-9]-[0-9][0-9][0-9][0-9] | [0-9][0-9]-[0-9][0-9] | \ [0-9][0-9]-[0-9][0-9][0-9] | [0-9][0-9]-[0-9][0-9][0-9][0-9] | \ [0-9][0-9][0-9]-[0-9][0-9][0-9] | \ [0-9][0-9][0-9]-[0-9][0-9][0-9][0-9] | \ [0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9] ) at_range_start=`expr $at_option : '\(.*\)-'` at_range_end=`expr $at_option : '.*-\(.*\)'` if test $at_range_start -gt $at_range_end; then at_tmp=$at_range_end at_range_end=$at_range_start at_range_start=$at_tmp fi at_fn_validate_ranges at_range_start at_range_end at_range=`$as_echo "$at_groups_all" | \ sed -ne '/^'$at_range_start'$/,/^'$at_range_end'$/p'` as_fn_append at_groups "$at_range$as_nl" ;; # Directory selection. --directory | -C ) at_prev=--directory ;; --directory=* ) at_change_dir=: at_dir=$at_optarg if test x- = "x$at_dir" ; then at_dir=./- fi ;; # Parallel execution. --jobs | -j ) at_jobs=0 ;; --jobs=* | -j[0-9]* ) if test -n "$at_optarg"; then at_jobs=$at_optarg else at_jobs=`expr X$at_option : 'X-j\(.*\)'` fi case $at_jobs in *[!0-9]*) at_optname=`echo " $at_option" | sed 's/^ //; s/[0-9=].*//'` as_fn_error $? "non-numeric argument to $at_optname: $at_jobs" ;; esac ;; # Keywords. --keywords | -k ) at_prev=--keywords ;; --keywords=* ) at_groups_selected=$at_help_all at_save_IFS=$IFS IFS=, set X $at_optarg shift IFS=$at_save_IFS for at_keyword do at_invert= case $at_keyword in '!'*) at_invert="-v" at_keyword=`expr "X$at_keyword" : 'X!\(.*\)'` ;; esac # It is on purpose that we match the test group titles too. at_groups_selected=`$as_echo "$at_groups_selected" | grep -i $at_invert "^[1-9][^;]*;.*[; ]$at_keyword[ ;]"` done # Smash the keywords. at_groups_selected=`$as_echo "$at_groups_selected" | sed 's/;.*//'` as_fn_append at_groups "$at_groups_selected$as_nl" ;; --recheck) at_recheck=: ;; *=*) at_envvar=`expr "x$at_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $at_envvar in '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$at_envvar'" ;; esac at_value=`$as_echo "$at_optarg" | sed "s/'/'\\\\\\\\''/g"` # Export now, but save eval for later and for debug scripts. export $at_envvar as_fn_append at_debug_args " $at_envvar='$at_value'" ;; *) $as_echo "$as_me: invalid option: $at_option" >&2 $as_echo "Try \`$0 --help' for more information." >&2 exit 1 ;; esac done # Verify our last option didn't require an argument if test -n "$at_prev"; then : as_fn_error $? "\`$at_prev' requires an argument" fi # The file containing the suite. at_suite_log=$at_dir/$as_me.log # Selected test groups. if test -z "$at_groups$at_recheck"; then at_groups=$at_groups_all else if test -n "$at_recheck" && test -r "$at_suite_log"; then at_oldfails=`sed -n ' /^Failed tests:$/,/^Skipped tests:$/{ s/^[ ]*\([1-9][0-9]*\):.*/\1/p } /^Unexpected passes:$/,/^## Detailed failed tests/{ s/^[ ]*\([1-9][0-9]*\):.*/\1/p } /^## Detailed failed tests/q ' "$at_suite_log"` as_fn_append at_groups "$at_oldfails$as_nl" fi # Sort the tests, removing duplicates. at_groups=`$as_echo "$at_groups" | sort -nu | sed '/^$/d'` fi if test x"$at_color" = xalways \ || { test x"$at_color" = xauto && test -t 1; }; then at_red=`printf '\033[0;31m'` at_grn=`printf '\033[0;32m'` at_lgn=`printf '\033[1;32m'` at_blu=`printf '\033[1;34m'` at_std=`printf '\033[m'` else at_red= at_grn= at_lgn= at_blu= at_std= fi # Help message. if $at_help_p; then cat <<_ATEOF || at_write_fail=1 Usage: $0 [OPTION]... [VARIABLE=VALUE]... [TESTS] Run all the tests, or the selected TESTS, given by numeric ranges, and save a detailed log file. Upon failure, create debugging scripts. Do not change environment variables directly. Instead, set them via command line arguments. Set \`AUTOTEST_PATH' to select the executables to exercise. Each relative directory is expanded as build and source directories relative to the top level of this distribution. E.g., from within the build directory /tmp/foo-1.0, invoking this: $ $0 AUTOTEST_PATH=bin is equivalent to the following, assuming the source directory is /src/foo-1.0: PATH=/tmp/foo-1.0/bin:/src/foo-1.0/bin:\$PATH $0 _ATEOF cat <<_ATEOF || at_write_fail=1 Operation modes: -h, --help print the help message, then exit -V, --version print version number, then exit -c, --clean remove all the files this test suite might create and exit -l, --list describes all the tests, or the selected TESTS _ATEOF cat <<_ATEOF || at_write_fail=1 Execution tuning: -C, --directory=DIR change to directory DIR before starting --color[=never|auto|always] enable colored test results on terminal, or always -j, --jobs[=N] Allow N jobs at once; infinite jobs with no arg (default 1) -k, --keywords=KEYWORDS select the tests matching all the comma-separated KEYWORDS multiple \`-k' accumulate; prefixed \`!' negates a KEYWORD --recheck select all tests that failed or passed unexpectedly last time -e, --errexit abort as soon as a test fails; implies --debug -v, --verbose force more detailed output default for debugging scripts -d, --debug inhibit clean up and top-level logging default for debugging scripts -x, --trace enable tests shell tracing _ATEOF cat <<_ATEOF || at_write_fail=1 Report bugs to <bug-direvent@gnu.org.ua>. General help using GNU software: <http://www.gnu.org/gethelp/>. _ATEOF exit $at_write_fail fi # List of tests. if $at_list_p; then cat <<_ATEOF || at_write_fail=1 GNU Direvent 5.2 test suite test groups: NUM: FILE-NAME:LINE TEST-GROUP-NAME KEYWORDS _ATEOF # Pass an empty line as separator between selected groups and help. $as_echo "$at_groups$as_nl$as_nl$at_help_all" | awk 'NF == 1 && FS != ";" { selected[$ 1] = 1 next } /^$/ { FS = ";" } NF > 0 { if (selected[$ 1]) { printf " %3d: %-18s %s\n", $ 1, $ 2, $ 3 if ($ 4) { lmax = 79 indent = " " line = indent len = length (line) n = split ($ 4, a, " ") for (i = 1; i <= n; i++) { l = length (a[i]) + 1 if (i > 1 && len + l > lmax) { print line line = indent " " a[i] len = length (line) } else { line = line " " a[i] len += l } } if (n) print line } } }' || at_write_fail=1 exit $at_write_fail fi if $at_version_p; then $as_echo "$as_me (GNU Direvent 5.2)" && cat <<\_ATEOF || at_write_fail=1 Copyright (C) 2012 Free Software Foundation, Inc. This test suite is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ATEOF exit $at_write_fail fi # Should we print banners? Yes if more than one test is run. case $at_groups in #( *$as_nl* ) at_print_banners=: ;; #( * ) at_print_banners=false ;; esac # Text for banner N, set to a single space once printed. # Banner 1. testsuite.at:60 # Category starts at test group 9. at_banner_text_1="Environment modifications" # Banner 2. testsuite.at:66 # Category starts at test group 13. at_banner_text_2="Filename selection" # Banner 3. testsuite.at:75 # Category starts at test group 20. at_banner_text_3="Special watchpoints" # Take any -C into account. if $at_change_dir ; then test x != "x$at_dir" && cd "$at_dir" \ || as_fn_error $? "unable to change directory" at_dir=`pwd` fi # Load the config files for any default variable assignments. for at_file in atconfig atlocal do test -r $at_file || continue . ./$at_file || as_fn_error $? "invalid content: $at_file" done # Autoconf <=2.59b set at_top_builddir instead of at_top_build_prefix: : "${at_top_build_prefix=$at_top_builddir}" # Perform any assignments requested during argument parsing. eval "$at_debug_args" # atconfig delivers names relative to the directory the test suite is # in, but the groups themselves are run in testsuite-dir/group-dir. if test -n "$at_top_srcdir"; then builddir=../.. for at_dir_var in srcdir top_srcdir top_build_prefix do eval at_val=\$at_$at_dir_var case $at_val in [\\/$]* | ?:[\\/]* ) at_prefix= ;; *) at_prefix=../../ ;; esac eval "$at_dir_var=\$at_prefix\$at_val" done fi ## -------------------- ## ## Directory structure. ## ## -------------------- ## # This is the set of directories and files used by this script # (non-literals are capitalized): # # TESTSUITE - the testsuite # TESTSUITE.log - summarizes the complete testsuite run # TESTSUITE.dir/ - created during a run, remains after -d or failed test # + at-groups/ - during a run: status of all groups in run # | + NNN/ - during a run: meta-data about test group NNN # | | + check-line - location (source file and line) of current AT_CHECK # | | + status - exit status of current AT_CHECK # | | + stdout - stdout of current AT_CHECK # | | + stder1 - stderr, including trace # | | + stderr - stderr, with trace filtered out # | | + test-source - portion of testsuite that defines group # | | + times - timestamps for computing duration # | | + pass - created if group passed # | | + xpass - created if group xpassed # | | + fail - created if group failed # | | + xfail - created if group xfailed # | | + skip - created if group skipped # + at-stop - during a run: end the run if this file exists # + at-source-lines - during a run: cache of TESTSUITE line numbers for extraction # + 0..NNN/ - created for each group NNN, remains after -d or failed test # | + TESTSUITE.log - summarizes the group results # | + ... - files created during the group # The directory the whole suite works in. # Should be absolute to let the user `cd' at will. at_suite_dir=$at_dir/$as_me.dir # The file containing the suite ($at_dir might have changed since earlier). at_suite_log=$at_dir/$as_me.log # The directory containing helper files per test group. at_helper_dir=$at_suite_dir/at-groups # Stop file: if it exists, do not start new jobs. at_stop_file=$at_suite_dir/at-stop # The fifo used for the job dispatcher. at_job_fifo=$at_suite_dir/at-job-fifo if $at_clean; then test -d "$at_suite_dir" && find "$at_suite_dir" -type d ! -perm -700 -exec chmod u+rwx \{\} \; rm -f -r "$at_suite_dir" "$at_suite_log" exit $? fi # Don't take risks: use only absolute directories in PATH. # # For stand-alone test suites (ie. atconfig was not found), # AUTOTEST_PATH is relative to `.'. # # For embedded test suites, AUTOTEST_PATH is relative to the top level # of the package. Then expand it into build/src parts, since users # may create executables in both places. AUTOTEST_PATH=`$as_echo "$AUTOTEST_PATH" | sed "s|:|$PATH_SEPARATOR|g"` at_path= as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $AUTOTEST_PATH $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -n "$at_path" && as_fn_append at_path $PATH_SEPARATOR case $as_dir in [\\/]* | ?:[\\/]* ) as_fn_append at_path "$as_dir" ;; * ) if test -z "$at_top_build_prefix"; then # Stand-alone test suite. as_fn_append at_path "$as_dir" else # Embedded test suite. as_fn_append at_path "$at_top_build_prefix$as_dir$PATH_SEPARATOR" as_fn_append at_path "$at_top_srcdir/$as_dir" fi ;; esac done IFS=$as_save_IFS # Now build and simplify PATH. # # There might be directories that don't exist, but don't redirect # builtins' (eg., cd) stderr directly: Ultrix's sh hates that. at_new_path= as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $at_path do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -d "$as_dir" || continue case $as_dir in [\\/]* | ?:[\\/]* ) ;; * ) as_dir=`(cd "$as_dir" && pwd) 2>/dev/null` ;; esac case $PATH_SEPARATOR$at_new_path$PATH_SEPARATOR in *$PATH_SEPARATOR$as_dir$PATH_SEPARATOR*) ;; $PATH_SEPARATOR$PATH_SEPARATOR) at_new_path=$as_dir ;; *) as_fn_append at_new_path "$PATH_SEPARATOR$as_dir" ;; esac done IFS=$as_save_IFS PATH=$at_new_path export PATH # Setting up the FDs. # 5 is the log file. Not to be overwritten if `-d'. if $at_debug_p; then at_suite_log=/dev/null else : >"$at_suite_log" fi exec 5>>"$at_suite_log" # Banners and logs. $as_echo "## ---------------------------- ## ## GNU Direvent 5.2 test suite. ## ## ---------------------------- ##" { $as_echo "## ---------------------------- ## ## GNU Direvent 5.2 test suite. ## ## ---------------------------- ##" echo $as_echo "$as_me: command line was:" $as_echo " \$ $0 $at_cli_args" echo # If ChangeLog exists, list a few lines in case it might help determining # the exact version. if test -n "$at_top_srcdir" && test -f "$at_top_srcdir/ChangeLog"; then $as_echo "## ---------- ## ## ChangeLog. ## ## ---------- ##" echo sed 's/^/| /;10q' "$at_top_srcdir/ChangeLog" echo fi { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } echo # Contents of the config files. for at_file in atconfig atlocal do test -r $at_file || continue $as_echo "$as_me: $at_file:" sed 's/^/| /' $at_file echo done } >&5 ## ------------------------- ## ## Autotest shell functions. ## ## ------------------------- ## # at_fn_banner NUMBER # ------------------- # Output banner NUMBER, provided the testsuite is running multiple groups and # this particular banner has not yet been printed. at_fn_banner () { $at_print_banners || return 0 eval at_banner_text=\$at_banner_text_$1 test "x$at_banner_text" = "x " && return 0 eval "at_banner_text_$1=\" \"" if test -z "$at_banner_text"; then $at_first || echo else $as_echo "$as_nl$at_banner_text$as_nl" fi } # at_fn_banner # at_fn_check_prepare_notrace REASON LINE # --------------------------------------- # Perform AT_CHECK preparations for the command at LINE for an untraceable # command; REASON is the reason for disabling tracing. at_fn_check_prepare_notrace () { $at_trace_echo "Not enabling shell tracing (command contains $1)" $as_echo "$2" >"$at_check_line_file" at_check_trace=: at_check_filter=: : >"$at_stdout"; : >"$at_stderr" } # at_fn_check_prepare_trace LINE # ------------------------------ # Perform AT_CHECK preparations for the command at LINE for a traceable # command. at_fn_check_prepare_trace () { $as_echo "$1" >"$at_check_line_file" at_check_trace=$at_traceon at_check_filter=$at_check_filter_trace : >"$at_stdout"; : >"$at_stderr" } # at_fn_check_prepare_dynamic COMMAND LINE # ---------------------------------------- # Decide if COMMAND at LINE is traceable at runtime, and call the appropriate # preparation function. at_fn_check_prepare_dynamic () { case $1 in *$as_nl*) at_fn_check_prepare_notrace 'an embedded newline' "$2" ;; *) at_fn_check_prepare_trace "$2" ;; esac } # at_fn_filter_trace # ------------------ # Remove the lines in the file "$at_stderr" generated by "set -x" and print # them to stderr. at_fn_filter_trace () { mv "$at_stderr" "$at_stder1" grep '^ *+' "$at_stder1" >&2 grep -v '^ *+' "$at_stder1" >"$at_stderr" } # at_fn_log_failure FILE-LIST # --------------------------- # Copy the files in the list on stdout with a "> " prefix, and exit the shell # with a failure exit code. at_fn_log_failure () { for file do $as_echo "$file:"; sed 's/^/> /' "$file"; done echo 1 > "$at_status_file" exit 1 } # at_fn_check_skip EXIT-CODE LINE # ------------------------------- # Check whether EXIT-CODE is a special exit code (77 or 99), and if so exit # the test group subshell with that same exit code. Use LINE in any report # about test failure. at_fn_check_skip () { case $1 in 99) echo 99 > "$at_status_file"; at_failed=: $as_echo "$2: hard failure"; exit 99;; 77) echo 77 > "$at_status_file"; exit 77;; esac } # at_fn_check_status EXPECTED EXIT-CODE LINE # ------------------------------------------ # Check whether EXIT-CODE is the EXPECTED exit code, and if so do nothing. # Otherwise, if it is 77 or 99, exit the test group subshell with that same # exit code; if it is anything else print an error message referring to LINE, # and fail the test. at_fn_check_status () { case $2 in $1 ) ;; 77) echo 77 > "$at_status_file"; exit 77;; 99) echo 99 > "$at_status_file"; at_failed=: $as_echo "$3: hard failure"; exit 99;; *) $as_echo "$3: exit code was $2, expected $1" at_failed=:;; esac } # at_fn_diff_devnull FILE # ----------------------- # Emit a diff between /dev/null and FILE. Uses "test -s" to avoid useless diff # invocations. at_fn_diff_devnull () { test -s "$1" || return 0 $at_diff "$at_devnull" "$1" } # at_fn_test NUMBER # ----------------- # Parse out test NUMBER from the tail of this file. at_fn_test () { eval at_sed=\$at_sed$1 sed "$at_sed" "$at_myself" > "$at_test_source" } # at_fn_create_debugging_script # ----------------------------- # Create the debugging script $at_group_dir/run which will reproduce the # current test group. at_fn_create_debugging_script () { { echo "#! /bin/sh" && echo 'test "${ZSH_VERSION+set}" = set && alias -g '\''${1+"$@"}'\''='\''"$@"'\''' && $as_echo "cd '$at_dir'" && $as_echo "exec \${CONFIG_SHELL-$SHELL} \"$at_myself\" -v -d $at_debug_args $at_group \${1+\"\$@\"}" && echo 'exit 1' } >"$at_group_dir/run" && chmod +x "$at_group_dir/run" } ## -------------------------------- ## ## End of autotest shell functions. ## ## -------------------------------- ## { $as_echo "## ---------------- ## ## Tested programs. ## ## ---------------- ##" echo } >&5 # Report what programs are being tested. for at_program in : $at_tested do test "$at_program" = : && continue case $at_program in [\\/]* | ?:[\\/]* ) $at_program_=$at_program ;; * ) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -f "$as_dir/$at_program" && break done IFS=$as_save_IFS at_program_=$as_dir/$at_program ;; esac if test -f "$at_program_"; then { $as_echo "$at_srcdir/testsuite.at:48: $at_program_ --version" "$at_program_" --version </dev/null echo } >&5 2>&1 else as_fn_error $? "cannot find $at_program" "$LINENO" 5 fi done { $as_echo "## ------------------ ## ## Running the tests. ## ## ------------------ ##" } >&5 at_start_date=`date` at_start_time=`date +%s 2>/dev/null` $as_echo "$as_me: starting at: $at_start_date" >&5 # Create the master directory if it doesn't already exist. as_dir="$at_suite_dir"; as_fn_mkdir_p || as_fn_error $? "cannot create \`$at_suite_dir'" "$LINENO" 5 # Can we diff with `/dev/null'? DU 5.0 refuses. if diff /dev/null /dev/null >/dev/null 2>&1; then at_devnull=/dev/null else at_devnull=$at_suite_dir/devnull >"$at_devnull" fi # Use `diff -u' when possible. if at_diff=`diff -u "$at_devnull" "$at_devnull" 2>&1` && test -z "$at_diff" then at_diff='diff -u' else at_diff=diff fi # Get the last needed group. for at_group in : $at_groups; do :; done # Extract the start and end lines of each test group at the tail # of this file awk ' BEGIN { FS="" } /^#AT_START_/ { start = NR } /^#AT_STOP_/ { test = substr ($ 0, 10) print "at_sed" test "=\"1," start "d;" (NR-1) "q\"" if (test == "'"$at_group"'") exit }' "$at_myself" > "$at_suite_dir/at-source-lines" && . "$at_suite_dir/at-source-lines" || as_fn_error $? "cannot create test line number cache" "$LINENO" 5 rm -f "$at_suite_dir/at-source-lines" # Set number of jobs for `-j'; avoid more jobs than test groups. set X $at_groups; shift; at_max_jobs=$# if test $at_max_jobs -eq 0; then at_jobs=1 fi if test $at_jobs -ne 1 && { test $at_jobs -eq 0 || test $at_jobs -gt $at_max_jobs; }; then at_jobs=$at_max_jobs fi # If parallel mode, don't output banners, don't split summary lines. if test $at_jobs -ne 1; then at_print_banners=false at_quiet=: fi # Set up helper dirs. rm -rf "$at_helper_dir" && mkdir "$at_helper_dir" && cd "$at_helper_dir" && { test -z "$at_groups" || mkdir $at_groups; } || as_fn_error $? "testsuite directory setup failed" "$LINENO" 5 # Functions for running a test group. We leave the actual # test group execution outside of a shell function in order # to avoid hitting zsh 4.x exit status bugs. # at_fn_group_prepare # ------------------- # Prepare for running a test group. at_fn_group_prepare () { # The directory for additional per-group helper files. at_job_dir=$at_helper_dir/$at_group # The file containing the location of the last AT_CHECK. at_check_line_file=$at_job_dir/check-line # The file containing the exit status of the last command. at_status_file=$at_job_dir/status # The files containing the output of the tested commands. at_stdout=$at_job_dir/stdout at_stder1=$at_job_dir/stder1 at_stderr=$at_job_dir/stderr # The file containing the code for a test group. at_test_source=$at_job_dir/test-source # The file containing dates. at_times_file=$at_job_dir/times # Be sure to come back to the top test directory. cd "$at_suite_dir" # Clearly separate the test groups when verbose. $at_first || $at_verbose echo at_group_normalized=$at_group eval 'while :; do case $at_group_normalized in #( '"$at_format"'*) break;; esac at_group_normalized=0$at_group_normalized done' # Create a fresh directory for the next test group, and enter. # If one already exists, the user may have invoked ./run from # within that directory; we remove the contents, but not the # directory itself, so that we aren't pulling the rug out from # under the shell's notion of the current directory. at_group_dir=$at_suite_dir/$at_group_normalized at_group_log=$at_group_dir/$as_me.log if test -d "$at_group_dir"; then find "$at_group_dir" -type d ! -perm -700 -exec chmod u+rwx {} \; rm -fr "$at_group_dir"/* "$at_group_dir"/.[!.] "$at_group_dir"/.??* fi || { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: test directory for $at_group_normalized could not be cleaned" >&5 $as_echo "$as_me: WARNING: test directory for $at_group_normalized could not be cleaned" >&2;} # Be tolerant if the above `rm' was not able to remove the directory. as_dir="$at_group_dir"; as_fn_mkdir_p echo 0 > "$at_status_file" # In verbose mode, append to the log file *and* show on # the standard output; in quiet mode only write to the log. if test -z "$at_verbose"; then at_tee_pipe='tee -a "$at_group_log"' else at_tee_pipe='cat >> "$at_group_log"' fi } # at_fn_group_banner ORDINAL LINE DESC PAD [BANNER] # ------------------------------------------------- # Declare the test group ORDINAL, located at LINE with group description DESC, # and residing under BANNER. Use PAD to align the status column. at_fn_group_banner () { at_setup_line="$2" test -n "$5" && at_fn_banner $5 at_desc="$3" case $1 in [0-9]) at_desc_line=" $1: ";; [0-9][0-9]) at_desc_line=" $1: " ;; *) at_desc_line="$1: " ;; esac as_fn_append at_desc_line "$3$4" $at_quiet $as_echo_n "$at_desc_line" echo "# -*- compilation -*-" >> "$at_group_log" } # at_fn_group_postprocess # ----------------------- # Perform cleanup after running a test group. at_fn_group_postprocess () { # Be sure to come back to the suite directory, in particular # since below we might `rm' the group directory we are in currently. cd "$at_suite_dir" if test ! -f "$at_check_line_file"; then sed "s/^ */$as_me: WARNING: /" <<_ATEOF A failure happened in a test group before any test could be run. This means that test suite is improperly designed. Please report this failure to <bug-direvent@gnu.org.ua>. _ATEOF $as_echo "$at_setup_line" >"$at_check_line_file" at_status=99 fi $at_verbose $as_echo_n "$at_group. $at_setup_line: " $as_echo_n "$at_group. $at_setup_line: " >> "$at_group_log" case $at_xfail:$at_status in yes:0) at_msg="UNEXPECTED PASS" at_res=xpass at_errexit=$at_errexit_p at_color=$at_red ;; no:0) at_msg="ok" at_res=pass at_errexit=false at_color=$at_grn ;; *:77) at_msg='skipped ('`cat "$at_check_line_file"`')' at_res=skip at_errexit=false at_color=$at_blu ;; no:* | *:99) at_msg='FAILED ('`cat "$at_check_line_file"`')' at_res=fail at_errexit=$at_errexit_p at_color=$at_red ;; yes:*) at_msg='expected failure ('`cat "$at_check_line_file"`')' at_res=xfail at_errexit=false at_color=$at_lgn ;; esac echo "$at_res" > "$at_job_dir/$at_res" # In parallel mode, output the summary line only afterwards. if test $at_jobs -ne 1 && test -n "$at_verbose"; then $as_echo "$at_desc_line $at_color$at_msg$at_std" else # Make sure there is a separator even with long titles. $as_echo " $at_color$at_msg$at_std" fi at_log_msg="$at_group. $at_desc ($at_setup_line): $at_msg" case $at_status in 0|77) # $at_times_file is only available if the group succeeded. # We're not including the group log, so the success message # is written in the global log separately. But we also # write to the group log in case they're using -d. if test -f "$at_times_file"; then at_log_msg="$at_log_msg ("`sed 1d "$at_times_file"`')' rm -f "$at_times_file" fi $as_echo "$at_log_msg" >> "$at_group_log" $as_echo "$at_log_msg" >&5 # Cleanup the group directory, unless the user wants the files # or the success was unexpected. if $at_debug_p || test $at_res = xpass; then at_fn_create_debugging_script if test $at_res = xpass && $at_errexit; then echo stop > "$at_stop_file" fi else if test -d "$at_group_dir"; then find "$at_group_dir" -type d ! -perm -700 -exec chmod u+rwx \{\} \; rm -fr "$at_group_dir" fi rm -f "$at_test_source" fi ;; *) # Upon failure, include the log into the testsuite's global # log. The failure message is written in the group log. It # is later included in the global log. $as_echo "$at_log_msg" >> "$at_group_log" # Upon failure, keep the group directory for autopsy, and create # the debugging script. With -e, do not start any further tests. at_fn_create_debugging_script if $at_errexit; then echo stop > "$at_stop_file" fi ;; esac } ## ------------ ## ## Driver loop. ## ## ------------ ## if (set -m && set +m && set +b) >/dev/null 2>&1; then set +b at_job_control_on='set -m' at_job_control_off='set +m' at_job_group=- else at_job_control_on=: at_job_control_off=: at_job_group= fi for at_signal in 1 2 15; do trap 'set +x; set +e $at_job_control_off at_signal='"$at_signal"' echo stop > "$at_stop_file" trap "" $at_signal at_pgids= for at_pgid in `jobs -p 2>/dev/null`; do at_pgids="$at_pgids $at_job_group$at_pgid" done test -z "$at_pgids" || kill -$at_signal $at_pgids 2>/dev/null wait if test "$at_jobs" -eq 1 || test -z "$at_verbose"; then echo >&2 fi at_signame=`kill -l $at_signal 2>&1 || echo $at_signal` set x $at_signame test 0 -gt 2 && at_signame=$at_signal { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: caught signal $at_signame, bailing out" >&5 $as_echo "$as_me: WARNING: caught signal $at_signame, bailing out" >&2;} as_fn_arith 128 + $at_signal && exit_status=$as_val as_fn_exit $exit_status' $at_signal done rm -f "$at_stop_file" at_first=: if test $at_jobs -ne 1 && rm -f "$at_job_fifo" && test -n "$at_job_group" && ( mkfifo "$at_job_fifo" && trap 'exit 1' PIPE STOP TSTP ) 2>/dev/null then # FIFO job dispatcher. trap 'at_pids= for at_pid in `jobs -p`; do at_pids="$at_pids $at_job_group$at_pid" done if test -n "$at_pids"; then at_sig=TSTP test "${TMOUT+set}" = set && at_sig=STOP kill -$at_sig $at_pids 2>/dev/null fi kill -STOP $$ test -z "$at_pids" || kill -CONT $at_pids 2>/dev/null' TSTP echo # Turn jobs into a list of numbers, starting from 1. at_joblist=`$as_echo "$at_groups" | sed -n 1,${at_jobs}p` set X $at_joblist shift for at_group in $at_groups; do $at_job_control_on 2>/dev/null ( # Start one test group. $at_job_control_off if $at_first; then exec 7>"$at_job_fifo" else exec 6<&- fi trap 'set +x; set +e trap "" PIPE echo stop > "$at_stop_file" echo >&7 as_fn_exit 141' PIPE at_fn_group_prepare if cd "$at_group_dir" && at_fn_test $at_group && . "$at_test_source" then :; else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unable to parse test group: $at_group" >&5 $as_echo "$as_me: WARNING: unable to parse test group: $at_group" >&2;} at_failed=: fi at_fn_group_postprocess echo >&7 ) & $at_job_control_off if $at_first; then at_first=false exec 6<"$at_job_fifo" 7>"$at_job_fifo" fi shift # Consume one token. if test $# -gt 0; then :; else read at_token <&6 || break set x $* fi test -f "$at_stop_file" && break done exec 7>&- # Read back the remaining ($at_jobs - 1) tokens. set X $at_joblist shift if test $# -gt 0; then shift for at_job do read at_token done <&6 fi exec 6<&- wait else # Run serially, avoid forks and other potential surprises. for at_group in $at_groups; do at_fn_group_prepare if cd "$at_group_dir" && at_fn_test $at_group && . "$at_test_source"; then :; else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unable to parse test group: $at_group" >&5 $as_echo "$as_me: WARNING: unable to parse test group: $at_group" >&2;} at_failed=: fi at_fn_group_postprocess test -f "$at_stop_file" && break at_first=false done fi # Wrap up the test suite with summary statistics. cd "$at_helper_dir" # Use ?..???? when the list must remain sorted, the faster * otherwise. at_pass_list=`for f in */pass; do echo $f; done | sed '/\*/d; s,/pass,,'` at_skip_list=`for f in */skip; do echo $f; done | sed '/\*/d; s,/skip,,'` at_xfail_list=`for f in */xfail; do echo $f; done | sed '/\*/d; s,/xfail,,'` at_xpass_list=`for f in ?/xpass ??/xpass ???/xpass ????/xpass; do echo $f; done | sed '/?/d; s,/xpass,,'` at_fail_list=`for f in ?/fail ??/fail ???/fail ????/fail; do echo $f; done | sed '/?/d; s,/fail,,'` set X $at_pass_list $at_xpass_list $at_xfail_list $at_fail_list $at_skip_list shift; at_group_count=$# set X $at_xpass_list; shift; at_xpass_count=$#; at_xpass_list=$* set X $at_xfail_list; shift; at_xfail_count=$# set X $at_fail_list; shift; at_fail_count=$#; at_fail_list=$* set X $at_skip_list; shift; at_skip_count=$# as_fn_arith $at_group_count - $at_skip_count && at_run_count=$as_val as_fn_arith $at_xpass_count + $at_fail_count && at_unexpected_count=$as_val as_fn_arith $at_xfail_count + $at_fail_count && at_total_fail_count=$as_val # Back to the top directory. cd "$at_dir" rm -rf "$at_helper_dir" # Compute the duration of the suite. at_stop_date=`date` at_stop_time=`date +%s 2>/dev/null` $as_echo "$as_me: ending at: $at_stop_date" >&5 case $at_start_time,$at_stop_time in [0-9]*,[0-9]*) as_fn_arith $at_stop_time - $at_start_time && at_duration_s=$as_val as_fn_arith $at_duration_s / 60 && at_duration_m=$as_val as_fn_arith $at_duration_m / 60 && at_duration_h=$as_val as_fn_arith $at_duration_s % 60 && at_duration_s=$as_val as_fn_arith $at_duration_m % 60 && at_duration_m=$as_val at_duration="${at_duration_h}h ${at_duration_m}m ${at_duration_s}s" $as_echo "$as_me: test suite duration: $at_duration" >&5 ;; esac echo $as_echo "## ------------- ## ## Test results. ## ## ------------- ##" echo { echo $as_echo "## ------------- ## ## Test results. ## ## ------------- ##" echo } >&5 if test $at_run_count = 1; then at_result="1 test" at_were=was else at_result="$at_run_count tests" at_were=were fi if $at_errexit_p && test $at_unexpected_count != 0; then if test $at_xpass_count = 1; then at_result="$at_result $at_were run, one passed" else at_result="$at_result $at_were run, one failed" fi at_result="$at_result unexpectedly and inhibited subsequent tests." at_color=$at_red else # Don't you just love exponential explosion of the number of cases? at_color=$at_red case $at_xpass_count:$at_fail_count:$at_xfail_count in # So far, so good. 0:0:0) at_result="$at_result $at_were successful." at_color=$at_grn ;; 0:0:*) at_result="$at_result behaved as expected." at_color=$at_lgn ;; # Some unexpected failures 0:*:0) at_result="$at_result $at_were run, $at_fail_count failed unexpectedly." ;; # Some failures, both expected and unexpected 0:*:1) at_result="$at_result $at_were run, $at_total_fail_count failed ($at_xfail_count expected failure)." ;; 0:*:*) at_result="$at_result $at_were run, $at_total_fail_count failed ($at_xfail_count expected failures)." ;; # No unexpected failures, but some xpasses *:0:*) at_result="$at_result $at_were run, $at_xpass_count passed unexpectedly." ;; # No expected failures, but failures and xpasses *:1:0) at_result="$at_result $at_were run, $at_unexpected_count did not behave as expected ($at_fail_count unexpected failure)." ;; *:*:0) at_result="$at_result $at_were run, $at_unexpected_count did not behave as expected ($at_fail_count unexpected failures)." ;; # All of them. *:*:1) at_result="$at_result $at_were run, $at_xpass_count passed unexpectedly, $at_total_fail_count failed ($at_xfail_count expected failure)." ;; *:*:*) at_result="$at_result $at_were run, $at_xpass_count passed unexpectedly, $at_total_fail_count failed ($at_xfail_count expected failures)." ;; esac if test $at_skip_count = 0 && test $at_run_count -gt 1; then at_result="All $at_result" fi fi # Now put skips in the mix. case $at_skip_count in 0) ;; 1) at_result="$at_result 1 test was skipped." ;; *) at_result="$at_result $at_skip_count tests were skipped." ;; esac if test $at_unexpected_count = 0; then echo "$at_color$at_result$at_std" echo "$at_result" >&5 else echo "${at_color}ERROR: $at_result$at_std" >&2 echo "ERROR: $at_result" >&5 { echo $as_echo "## ------------------------ ## ## Summary of the failures. ## ## ------------------------ ##" # Summary of failed and skipped tests. if test $at_fail_count != 0; then echo "Failed tests:" $SHELL "$at_myself" $at_fail_list --list echo fi if test $at_skip_count != 0; then echo "Skipped tests:" $SHELL "$at_myself" $at_skip_list --list echo fi if test $at_xpass_count != 0; then echo "Unexpected passes:" $SHELL "$at_myself" $at_xpass_list --list echo fi if test $at_fail_count != 0; then $as_echo "## ---------------------- ## ## Detailed failed tests. ## ## ---------------------- ##" echo for at_group in $at_fail_list do at_group_normalized=$at_group eval 'while :; do case $at_group_normalized in #( '"$at_format"'*) break;; esac at_group_normalized=0$at_group_normalized done' cat "$at_suite_dir/$at_group_normalized/$as_me.log" echo done echo fi if test -n "$at_top_srcdir"; then sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## ${at_top_build_prefix}config.log ## _ASBOX sed 's/^/| /' ${at_top_build_prefix}config.log echo fi } >&5 sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## $as_me.log was created. ## _ASBOX echo if $at_debug_p; then at_msg='per-test log files' else at_msg="\`${at_testdir+${at_testdir}/}$as_me.log'" fi $as_echo "Please send $at_msg and all information you think might help: To: <bug-direvent@gnu.org.ua> Subject: [GNU Direvent 5.2] $as_me: $at_fail_list${at_fail_list:+ failed${at_xpass_list:+, }}$at_xpass_list${at_xpass_list:+ passed unexpectedly} You may investigate any problem if you feel able to do so, in which case the test suite provides a good starting point. Its output may be found below \`${at_testdir+${at_testdir}/}$as_me.dir'. " exit 1 fi exit 0 ## ------------- ## ## Actual tests. ## ## ------------- ## #AT_START_1 at_fn_group_banner 1 'create.at:17' \ "Create" " " at_xfail=no ( $as_echo "1. $at_setup_line: testing $at_desc ..." $at_traceon cwd=`pwd -P` { set +x $as_echo "$at_srcdir/create.at:20: outfile=\$cwd/dump mkdir dir cat > test.conf <<EOT debug 10; syslog { facility \${TESTSUITE_FACILITY:-local0}; tag direvent-test:create; } watcher { path \$cwd/dir; event create; command \"\$TESTDIR/envdump -s -i DIREVENT_FILE=:DIREVENT_GENEV_ -f \$outfile -k\\\$self_test_pid\"; option (stdout,stderr); } EOT cat > selftest.sh <<EOT #!/bin/sh > dir/file sleep 10 exit 21 EOT chmod +x selftest.sh direvent -lnotice -f --self-test \$cwd/selftest.sh test.conf || exit \$? sed \"s^\$cwd^(CWD)^;s^\$TESTDIR^(TESTDIR)^;/^argv\\[[0-9]]\\=-k/d\" \$outfile " at_fn_check_prepare_notrace 'a ${...} parameter expansion' "create.at:20" ( $at_check_trace; outfile=$cwd/dump mkdir dir cat > test.conf <<EOT debug 10; syslog { facility ${TESTSUITE_FACILITY:-local0}; tag direvent-test:create; } watcher { path $cwd/dir; event create; command "$TESTDIR/envdump -s -i DIREVENT_FILE=:DIREVENT_GENEV_ -f $outfile -k\$self_test_pid"; option (stdout,stderr); } EOT cat > selftest.sh <<EOT #!/bin/sh > dir/file sleep 10 exit 21 EOT chmod +x selftest.sh direvent -lnotice -f --self-test $cwd/selftest.sh test.conf || exit $? sed "s^$cwd^(CWD)^;s^$TESTDIR^(TESTDIR)^;/^argv\[[0-9]]\=-k/d" $outfile ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "# Dump of execution environment cwd is (CWD)/dir # Arguments argv[0]=(TESTDIR)/envdump argv[1]=-s argv[2]=-i argv[3]=DIREVENT_FILE=:DIREVENT_GENEV_ argv[4]=-f argv[5]=(CWD)/dump # Environment DIREVENT_FILE=file DIREVENT_GENEV_CODE=1 DIREVENT_GENEV_NAME=create # End " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/create.at:20" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_1 #AT_START_2 at_fn_group_banner 2 'createrec.at:17' \ "Create recursive" " " at_xfail=no ( $as_echo "2. $at_setup_line: testing $at_desc ..." $at_traceon cwd=`pwd -P` { set +x $as_echo "$at_srcdir/createrec.at:20: outfile=\$cwd/dump mkdir dir mkdir a mkdir a/b mkdir a/b/c > a/af > a/af1 > a/b/bf cat > test.conf <<EOT debug 10; syslog { facility \${TESTSUITE_FACILITY:-local0}; tag direvent-test:create-recursive; } watcher { path \$cwd/dir recursive; event create; command \"\$SRCDIR/printname \$outfile\"; option (stdout,stderr); } EOT cat > selftest.sh <<EOT #!/bin/sh cp -r a dir touch dir/sentinel sleep 10 exit 21 EOT chmod +x selftest.sh direvent -lnotice -f --self-test \$cwd/selftest.sh test.conf || exit \$? sed \"s^\$cwd^(CWD)^;s^\$TESTDIR^(TESTDIR)^\" \$outfile | sort " at_fn_check_prepare_notrace 'a ${...} parameter expansion' "createrec.at:20" ( $at_check_trace; outfile=$cwd/dump mkdir dir mkdir a mkdir a/b mkdir a/b/c > a/af > a/af1 > a/b/bf cat > test.conf <<EOT debug 10; syslog { facility ${TESTSUITE_FACILITY:-local0}; tag direvent-test:create-recursive; } watcher { path $cwd/dir recursive; event create; command "$SRCDIR/printname $outfile"; option (stdout,stderr); } EOT cat > selftest.sh <<EOT #!/bin/sh cp -r a dir touch dir/sentinel sleep 10 exit 21 EOT chmod +x selftest.sh direvent -lnotice -f --self-test $cwd/selftest.sh test.conf || exit $? sed "s^$cwd^(CWD)^;s^$TESTDIR^(TESTDIR)^" $outfile | sort ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "(CWD)/dir/a (CWD)/dir/a/af (CWD)/dir/a/af1 (CWD)/dir/a/b (CWD)/dir/a/b/bf (CWD)/dir/a/b/c (CWD)/dir/sentinel " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/createrec.at:20" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_2 #AT_START_3 at_fn_group_banner 3 'delete.at:17' \ "Delete" " " at_xfail=no ( $as_echo "3. $at_setup_line: testing $at_desc ..." $at_traceon cwd=`pwd -P` { set +x $as_echo "$at_srcdir/delete.at:20: outfile=\$cwd/dump mkdir dir > dir/file cat > test.conf <<EOT debug 10; syslog { facility \${TESTSUITE_FACILITY:-local0}; tag direvent-test:delete; } watcher { path \$cwd/dir; event delete; command \"\$TESTDIR/envdump -s -i DIREVENT_FILE=:DIREVENT_GENEV_ -f \$outfile -k\\\$self_test_pid\"; option (stdout,stderr); } EOT cat > selftest.sh <<EOT #!/bin/sh rm dir/file sleep 10 exit 21 EOT chmod +x selftest.sh direvent -lnotice -f --self-test \$cwd/selftest.sh test.conf || exit \$? sed \"s^\$cwd^(CWD)^;s^\$TESTDIR^(TESTDIR)^;/^argv\\[[0-9]]\\=-k/d\" \$outfile " at_fn_check_prepare_notrace 'a ${...} parameter expansion' "delete.at:20" ( $at_check_trace; outfile=$cwd/dump mkdir dir > dir/file cat > test.conf <<EOT debug 10; syslog { facility ${TESTSUITE_FACILITY:-local0}; tag direvent-test:delete; } watcher { path $cwd/dir; event delete; command "$TESTDIR/envdump -s -i DIREVENT_FILE=:DIREVENT_GENEV_ -f $outfile -k\$self_test_pid"; option (stdout,stderr); } EOT cat > selftest.sh <<EOT #!/bin/sh rm dir/file sleep 10 exit 21 EOT chmod +x selftest.sh direvent -lnotice -f --self-test $cwd/selftest.sh test.conf || exit $? sed "s^$cwd^(CWD)^;s^$TESTDIR^(TESTDIR)^;/^argv\[[0-9]]\=-k/d" $outfile ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "# Dump of execution environment cwd is (CWD)/dir # Arguments argv[0]=(TESTDIR)/envdump argv[1]=-s argv[2]=-i argv[3]=DIREVENT_FILE=:DIREVENT_GENEV_ argv[4]=-f argv[5]=(CWD)/dump # Environment DIREVENT_FILE=file DIREVENT_GENEV_CODE=8 DIREVENT_GENEV_NAME=delete # End " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/delete.at:20" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_3 #AT_START_4 at_fn_group_banner 4 'write.at:17' \ "Write" " " at_xfail=no ( $as_echo "4. $at_setup_line: testing $at_desc ..." $at_traceon cwd=`pwd -P` { set +x $as_echo "$at_srcdir/write.at:20: outfile=\$cwd/dump mkdir dir cat > dir/file <<EOT now is the time for all men EOT cat > test.conf <<EOT debug 10; syslog { facility \${TESTSUITE_FACILITY:-local0}; tag direvent-test:write; } watcher { path \$cwd/dir; event write; command \"\$TESTDIR/envdump -s -i DIREVENT_FILE=:DIREVENT_GENEV_ -f \$outfile -k\\\$self_test_pid\"; option (stdout,stderr); } EOT cat > selftest.sh <<EOT #!/bin/sh echo \"to come to\" >> dir/file sleep 10 exit 21 EOT chmod +x selftest.sh direvent -lnotice -f --self-test \$cwd/selftest.sh test.conf || exit \$? sed \"s^\$cwd^(CWD)^;s^\$TESTDIR^(TESTDIR)^;/^argv\\[[0-9]]\\=-k/d\" \$outfile " at_fn_check_prepare_notrace 'a ${...} parameter expansion' "write.at:20" ( $at_check_trace; outfile=$cwd/dump mkdir dir cat > dir/file <<EOT now is the time for all men EOT cat > test.conf <<EOT debug 10; syslog { facility ${TESTSUITE_FACILITY:-local0}; tag direvent-test:write; } watcher { path $cwd/dir; event write; command "$TESTDIR/envdump -s -i DIREVENT_FILE=:DIREVENT_GENEV_ -f $outfile -k\$self_test_pid"; option (stdout,stderr); } EOT cat > selftest.sh <<EOT #!/bin/sh echo "to come to" >> dir/file sleep 10 exit 21 EOT chmod +x selftest.sh direvent -lnotice -f --self-test $cwd/selftest.sh test.conf || exit $? sed "s^$cwd^(CWD)^;s^$TESTDIR^(TESTDIR)^;/^argv\[[0-9]]\=-k/d" $outfile ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "# Dump of execution environment cwd is (CWD)/dir # Arguments argv[0]=(TESTDIR)/envdump argv[1]=-s argv[2]=-i argv[3]=DIREVENT_FILE=:DIREVENT_GENEV_ argv[4]=-f argv[5]=(CWD)/dump # Environment DIREVENT_FILE=file DIREVENT_GENEV_CODE=2 DIREVENT_GENEV_NAME=write # End " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/write.at:20" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_4 #AT_START_5 at_fn_group_banner 5 'attrib.at:17' \ "Attrib" " " at_xfail=no ( $as_echo "5. $at_setup_line: testing $at_desc ..." $at_traceon cwd=`pwd -P` { set +x $as_echo "$at_srcdir/attrib.at:20: outfile=\$cwd/dump mkdir dir > dir/file chmod 600 dir/file cat > test.conf <<EOT debug 10; syslog { facility \${TESTSUITE_FACILITY:-local0}; tag direvent-test:attrib; } watcher { path \$cwd/dir; event attrib; command \"\$TESTDIR/envdump -s -i DIREVENT_FILE=:DIREVENT_GENEV_ -f \$outfile -k\\\$self_test_pid\"; option (stdout,stderr); } EOT cat > selftest.sh <<EOT #!/bin/sh chmod 644 dir/file sleep 10 exit 21 EOT chmod +x selftest.sh direvent -lnotice -f --self-test \$cwd/selftest.sh test.conf || exit \$? sed \"s^\$cwd^(CWD)^;s^\$TESTDIR^(TESTDIR)^;/^argv\\[[0-9]]\\=-k/d\" \$outfile " at_fn_check_prepare_notrace 'a ${...} parameter expansion' "attrib.at:20" ( $at_check_trace; outfile=$cwd/dump mkdir dir > dir/file chmod 600 dir/file cat > test.conf <<EOT debug 10; syslog { facility ${TESTSUITE_FACILITY:-local0}; tag direvent-test:attrib; } watcher { path $cwd/dir; event attrib; command "$TESTDIR/envdump -s -i DIREVENT_FILE=:DIREVENT_GENEV_ -f $outfile -k\$self_test_pid"; option (stdout,stderr); } EOT cat > selftest.sh <<EOT #!/bin/sh chmod 644 dir/file sleep 10 exit 21 EOT chmod +x selftest.sh direvent -lnotice -f --self-test $cwd/selftest.sh test.conf || exit $? sed "s^$cwd^(CWD)^;s^$TESTDIR^(TESTDIR)^;/^argv\[[0-9]]\=-k/d" $outfile ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "# Dump of execution environment cwd is (CWD)/dir # Arguments argv[0]=(TESTDIR)/envdump argv[1]=-s argv[2]=-i argv[3]=DIREVENT_FILE=:DIREVENT_GENEV_ argv[4]=-f argv[5]=(CWD)/dump # Environment DIREVENT_FILE=file DIREVENT_GENEV_CODE=4 DIREVENT_GENEV_NAME=attrib # End " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/attrib.at:20" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_5 #AT_START_6 at_fn_group_banner 6 'cmdexp.at:17' \ "Command line expansions" " " at_xfail=no ( $as_echo "6. $at_setup_line: testing $at_desc ..." $at_traceon cwd=`pwd -P` { set +x $as_echo "$at_srcdir/cmdexp.at:20: outfile=\$cwd/dump mkdir dir cat > dir/testfile <<EOT now is the time for all men EOT cat > test.conf <<EOT debug 10; syslog { facility \${TESTSUITE_FACILITY:-local0}; tag direvent-test:write; } watcher { path \$cwd/dir; event write; command \"\$TESTDIR/envdump -s -i DIREVENT_FILE=:DIREVENT_GENEV_ -f \$outfile -k\\\$self_test_pid file=\\\$file event=\\\$genev_name\"; option (stdout,stderr); } EOT cat > selftest.sh <<EOT #!/bin/sh echo \"to come to\" >> dir/testfile sleep 10 exit 21 EOT chmod +x selftest.sh direvent -lnotice -f --self-test \$cwd/selftest.sh test.conf || exit \$? sed \"s^\$cwd^(CWD)^;s^\$TESTDIR^(TESTDIR)^;/^argv\\[[0-9]]\\=-k/d\" \$outfile " at_fn_check_prepare_notrace 'a ${...} parameter expansion' "cmdexp.at:20" ( $at_check_trace; outfile=$cwd/dump mkdir dir cat > dir/testfile <<EOT now is the time for all men EOT cat > test.conf <<EOT debug 10; syslog { facility ${TESTSUITE_FACILITY:-local0}; tag direvent-test:write; } watcher { path $cwd/dir; event write; command "$TESTDIR/envdump -s -i DIREVENT_FILE=:DIREVENT_GENEV_ -f $outfile -k\$self_test_pid file=\$file event=\$genev_name"; option (stdout,stderr); } EOT cat > selftest.sh <<EOT #!/bin/sh echo "to come to" >> dir/testfile sleep 10 exit 21 EOT chmod +x selftest.sh direvent -lnotice -f --self-test $cwd/selftest.sh test.conf || exit $? sed "s^$cwd^(CWD)^;s^$TESTDIR^(TESTDIR)^;/^argv\[[0-9]]\=-k/d" $outfile ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "# Dump of execution environment cwd is (CWD)/dir # Arguments argv[0]=(TESTDIR)/envdump argv[1]=-s argv[2]=-i argv[3]=DIREVENT_FILE=:DIREVENT_GENEV_ argv[4]=-f argv[5]=(CWD)/dump argv[7]=file=testfile argv[8]=event=write # Environment DIREVENT_FILE=testfile DIREVENT_GENEV_CODE=2 DIREVENT_GENEV_NAME=write # End " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/cmdexp.at:20" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_6 #AT_START_7 at_fn_group_banner 7 'samepath.at:17' \ "Watchers with same paths" " " at_xfail=no ( $as_echo "7. $at_setup_line: testing $at_desc ..." $at_traceon cwd=`pwd -P` { set +x $as_echo "$at_srcdir/samepath.at:20: outfile=\$cwd/dump mkdir dir >dir/file cat > test.conf <<EOT debug 10; syslog { facility \${TESTSUITE_FACILITY:-local0}; tag direvent-test:write; } watcher { path \$cwd/dir; event write; option (stdout,stderr); command \"\$TESTDIR/envdump -s -i DIREVENT_FILE=:DIREVENT_GENEV_NAME= -f \$outfile\"; } watcher { path \$cwd/dir; event delete; option (stdout,stderr); command \"\$TESTDIR/envdump -s -i DIREVENT_FILE=:DIREVENT_GENEV_NAME= -f \$outfile -a -k\\\$self_test_pid\"; } EOT cat > selftest.sh <<EOT #!/bin/sh echo \"x\" > dir/file rm dir/file sleep 10 exit 21 EOT chmod +x selftest.sh direvent -lnotice -f --self-test \$cwd/selftest.sh test.conf || exit \$? sed \"s^\$cwd^(CWD)^;s^\$TESTDIR^(TESTDIR)^;/^argv\\[[0-9]]\\=-k/d\" \$outfile " at_fn_check_prepare_notrace 'a ${...} parameter expansion' "samepath.at:20" ( $at_check_trace; outfile=$cwd/dump mkdir dir >dir/file cat > test.conf <<EOT debug 10; syslog { facility ${TESTSUITE_FACILITY:-local0}; tag direvent-test:write; } watcher { path $cwd/dir; event write; option (stdout,stderr); command "$TESTDIR/envdump -s -i DIREVENT_FILE=:DIREVENT_GENEV_NAME= -f $outfile"; } watcher { path $cwd/dir; event delete; option (stdout,stderr); command "$TESTDIR/envdump -s -i DIREVENT_FILE=:DIREVENT_GENEV_NAME= -f $outfile -a -k\$self_test_pid"; } EOT cat > selftest.sh <<EOT #!/bin/sh echo "x" > dir/file rm dir/file sleep 10 exit 21 EOT chmod +x selftest.sh direvent -lnotice -f --self-test $cwd/selftest.sh test.conf || exit $? sed "s^$cwd^(CWD)^;s^$TESTDIR^(TESTDIR)^;/^argv\[[0-9]]\=-k/d" $outfile ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "# Dump of execution environment cwd is (CWD)/dir # Arguments argv[0]=(TESTDIR)/envdump argv[1]=-s argv[2]=-i argv[3]=DIREVENT_FILE=:DIREVENT_GENEV_NAME= argv[4]=-f argv[5]=(CWD)/dump # Environment DIREVENT_FILE=file DIREVENT_GENEV_NAME=write # End # Dump of execution environment cwd is (CWD)/dir # Arguments argv[0]=(TESTDIR)/envdump argv[1]=-s argv[2]=-i argv[3]=DIREVENT_FILE=:DIREVENT_GENEV_NAME= argv[4]=-f argv[5]=(CWD)/dump argv[6]=-a # Environment DIREVENT_FILE=file DIREVENT_GENEV_NAME=delete # End " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/samepath.at:20" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_7 #AT_START_8 at_fn_group_banner 8 'shell.at:17' \ "Shell" " " at_xfail=no ( $as_echo "8. $at_setup_line: testing $at_desc ..." $at_traceon cwd=`pwd -P` { set +x $as_echo "$at_srcdir/shell.at:20: outfile=\$cwd/dump mkdir dir cat > test.conf <<EOT debug 10; syslog { facility \${TESTSUITE_FACILITY:-local0}; tag direvent-test:create; } watcher { path \$cwd/dir; event create; command \"echo SHELL=\\\$0 > \$outfile;\" \"\$TESTDIR/envdump -s -i DIREVENT_FILE=:DIREVENT_GENEV_ -af \$outfile -k\\\$self_test_pid\"; option (stdout,stderr,shell); } EOT cat > selftest.sh <<EOT #!/bin/sh > dir/file sleep 10 exit 21 EOT chmod +x selftest.sh direvent -lnotice -f --self-test \$cwd/selftest.sh test.conf || exit \$? sed \"s^\$cwd^(CWD)^;s^\$TESTDIR^(TESTDIR)^;/^argv\\[[0-9]]\\=-k/d\" \$outfile " at_fn_check_prepare_notrace 'a ${...} parameter expansion' "shell.at:20" ( $at_check_trace; outfile=$cwd/dump mkdir dir cat > test.conf <<EOT debug 10; syslog { facility ${TESTSUITE_FACILITY:-local0}; tag direvent-test:create; } watcher { path $cwd/dir; event create; command "echo SHELL=\$0 > $outfile;" "$TESTDIR/envdump -s -i DIREVENT_FILE=:DIREVENT_GENEV_ -af $outfile -k\$self_test_pid"; option (stdout,stderr,shell); } EOT cat > selftest.sh <<EOT #!/bin/sh > dir/file sleep 10 exit 21 EOT chmod +x selftest.sh direvent -lnotice -f --self-test $cwd/selftest.sh test.conf || exit $? sed "s^$cwd^(CWD)^;s^$TESTDIR^(TESTDIR)^;/^argv\[[0-9]]\=-k/d" $outfile ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "SHELL=/bin/sh # Dump of execution environment cwd is (CWD)/dir # Arguments argv[0]=(TESTDIR)/envdump argv[1]=-s argv[2]=-i argv[3]=DIREVENT_FILE=:DIREVENT_GENEV_ argv[4]=-af argv[5]=(CWD)/dump # Environment DIREVENT_FILE=file DIREVENT_GENEV_CODE=1 DIREVENT_GENEV_NAME=create # End " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/shell.at:20" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_8 #AT_START_9 at_fn_group_banner 9 'env00.at:17' \ "modify" " " 1 at_xfail=no ( $as_echo "9. $at_setup_line: testing $at_desc ..." $at_traceon cwd=`pwd -P` { set +x $as_echo "$at_srcdir/env00.at:20: outfile=\$cwd/dump mkdir dir cat > dir/testfile <<EOT now is the time for all men EOT VAR1=foo VAR2=bar export VAR1 VAR2 cat > test.conf <<EOT debug 10; syslog { facility \${TESTSUITE_FACILITY:-local0}; tag direvent-test:write; } watcher { path \$cwd/dir; event write; command \"\$TESTDIR/envdump -s -i DIREVENT_FILE=:DIREVENT_GENEV_:VAR1=:VAR2=:VAR3=:FILE= -f \$outfile -k\\\$self_test_pid\"; option (stdout,stderr); environ (\"VAR3=qux\", \"FILE=\\\$file\"); } EOT cat > selftest.sh <<EOT #!/bin/sh echo \"to come to\" >> dir/testfile sleep 10 exit 21 EOT chmod +x selftest.sh direvent -lnotice -f --self-test \$cwd/selftest.sh test.conf || exit \$? sed \"s^\$cwd^(CWD)^;s^\$TESTDIR^(TESTDIR)^;s^\\(DIREVENT_SYS.*\\)=.*^\\1=X^;/^argv\\[[0-9]]\\=-k/d\" \$outfile " at_fn_check_prepare_notrace 'a ${...} parameter expansion' "env00.at:20" ( $at_check_trace; outfile=$cwd/dump mkdir dir cat > dir/testfile <<EOT now is the time for all men EOT VAR1=foo VAR2=bar export VAR1 VAR2 cat > test.conf <<EOT debug 10; syslog { facility ${TESTSUITE_FACILITY:-local0}; tag direvent-test:write; } watcher { path $cwd/dir; event write; command "$TESTDIR/envdump -s -i DIREVENT_FILE=:DIREVENT_GENEV_:VAR1=:VAR2=:VAR3=:FILE= -f $outfile -k\$self_test_pid"; option (stdout,stderr); environ ("VAR3=qux", "FILE=\$file"); } EOT cat > selftest.sh <<EOT #!/bin/sh echo "to come to" >> dir/testfile sleep 10 exit 21 EOT chmod +x selftest.sh direvent -lnotice -f --self-test $cwd/selftest.sh test.conf || exit $? sed "s^$cwd^(CWD)^;s^$TESTDIR^(TESTDIR)^;s^\(DIREVENT_SYS.*\)=.*^\1=X^;/^argv\[[0-9]]\=-k/d" $outfile ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "# Dump of execution environment cwd is (CWD)/dir # Arguments argv[0]=(TESTDIR)/envdump argv[1]=-s argv[2]=-i argv[3]=DIREVENT_FILE=:DIREVENT_GENEV_:VAR1=:VAR2=:VAR3=:FILE= argv[4]=-f argv[5]=(CWD)/dump # Environment DIREVENT_FILE=testfile DIREVENT_GENEV_CODE=2 DIREVENT_GENEV_NAME=write FILE=testfile VAR1=foo VAR2=bar VAR3=qux # End " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/env00.at:20" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_9 #AT_START_10 at_fn_group_banner 10 'env01.at:17' \ "clear environment" " " 1 at_xfail=no ( $as_echo "10. $at_setup_line: testing $at_desc ..." $at_traceon cwd=`pwd -P` { set +x $as_echo "$at_srcdir/env01.at:20: outfile=\$cwd/dump mkdir dir cat > dir/testfile <<EOT now is the time for all men EOT cat > test.conf <<EOT debug 10; syslog { facility \${TESTSUITE_FACILITY:-local0}; tag direvent-test:write; } watcher { path \$cwd/dir; event write; command \"\$TESTDIR/envdump -s -f \$outfile -k\\\$self_test_pid\"; option (stdout,stderr); environ -; } EOT cat > selftest.sh <<EOT #!/bin/sh echo \"to come to\" >> dir/testfile sleep 10 exit 21 EOT chmod +x selftest.sh direvent -lnotice -f --self-test \$cwd/selftest.sh test.conf || exit \$? sed \"s^\$cwd^(CWD)^;s^\$TESTDIR^(TESTDIR)^;s^\\(DIREVENT_SYS.*\\)=.*^\\1=X^;/^argv\\[[0-9]]\\=-k/d;/DIREVENT_SELF_TEST_PID/d\" \$outfile " at_fn_check_prepare_notrace 'a ${...} parameter expansion' "env01.at:20" ( $at_check_trace; outfile=$cwd/dump mkdir dir cat > dir/testfile <<EOT now is the time for all men EOT cat > test.conf <<EOT debug 10; syslog { facility ${TESTSUITE_FACILITY:-local0}; tag direvent-test:write; } watcher { path $cwd/dir; event write; command "$TESTDIR/envdump -s -f $outfile -k\$self_test_pid"; option (stdout,stderr); environ -; } EOT cat > selftest.sh <<EOT #!/bin/sh echo "to come to" >> dir/testfile sleep 10 exit 21 EOT chmod +x selftest.sh direvent -lnotice -f --self-test $cwd/selftest.sh test.conf || exit $? sed "s^$cwd^(CWD)^;s^$TESTDIR^(TESTDIR)^;s^\(DIREVENT_SYS.*\)=.*^\1=X^;/^argv\[[0-9]]\=-k/d;/DIREVENT_SELF_TEST_PID/d" $outfile ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "# Dump of execution environment cwd is (CWD)/dir # Arguments argv[0]=(TESTDIR)/envdump argv[1]=-s argv[2]=-f argv[3]=(CWD)/dump # Environment DIREVENT_FILE=testfile DIREVENT_GENEV_CODE=2 DIREVENT_GENEV_NAME=write DIREVENT_SYSEV_CODE=X DIREVENT_SYSEV_NAME=X # End " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/env01.at:20" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_10 #AT_START_11 at_fn_group_banner 11 'env02.at:17' \ "clear all environment" " " 1 at_xfail=no ( $as_echo "11. $at_setup_line: testing $at_desc ..." $at_traceon cwd=`pwd -P` { set +x $as_echo "$at_srcdir/env02.at:20: outfile=\$cwd/dump mkdir dir cat > dir/testfile <<EOT now is the time for all men EOT cat > test.conf <<EOT debug 10; syslog { facility \${TESTSUITE_FACILITY:-local0}; tag direvent-test:write; } watcher { path \$cwd/dir; event write; command \"\$TESTDIR/envdump -s -f \$outfile -k\\\$self_test_pid\"; option (stdout,stderr); environ --; } EOT cat > selftest.sh <<EOT #!/bin/sh echo \"to come to\" >> dir/testfile sleep 10 exit 21 EOT chmod +x selftest.sh direvent -lnotice -f --self-test \$cwd/selftest.sh test.conf || exit \$? sed \"s^\$cwd^(CWD)^;s^\$TESTDIR^(TESTDIR)^;s^\\(DIREVENT_SYS.*\\)=.*^\\1=X^;/^argv\\[[0-9]]\\=-k/d;/DIREVENT_SELF_TEST_PID/d\" \$outfile " at_fn_check_prepare_notrace 'a ${...} parameter expansion' "env02.at:20" ( $at_check_trace; outfile=$cwd/dump mkdir dir cat > dir/testfile <<EOT now is the time for all men EOT cat > test.conf <<EOT debug 10; syslog { facility ${TESTSUITE_FACILITY:-local0}; tag direvent-test:write; } watcher { path $cwd/dir; event write; command "$TESTDIR/envdump -s -f $outfile -k\$self_test_pid"; option (stdout,stderr); environ --; } EOT cat > selftest.sh <<EOT #!/bin/sh echo "to come to" >> dir/testfile sleep 10 exit 21 EOT chmod +x selftest.sh direvent -lnotice -f --self-test $cwd/selftest.sh test.conf || exit $? sed "s^$cwd^(CWD)^;s^$TESTDIR^(TESTDIR)^;s^\(DIREVENT_SYS.*\)=.*^\1=X^;/^argv\[[0-9]]\=-k/d;/DIREVENT_SELF_TEST_PID/d" $outfile ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "# Dump of execution environment cwd is (CWD)/dir # Arguments argv[0]=(TESTDIR)/envdump argv[1]=-s argv[2]=-f argv[3]=(CWD)/dump # Environment # End " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/env02.at:20" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_11 #AT_START_12 at_fn_group_banner 12 'env03.at:17' \ "clear and modify" " " 1 at_xfail=no ( $as_echo "12. $at_setup_line: testing $at_desc ..." $at_traceon cwd=`pwd -P` { set +x $as_echo "$at_srcdir/env03.at:20: outfile=\$cwd/dump mkdir dir cat > dir/testfile <<EOT now is the time for all men EOT VAR1=foo VAR2=bar export VAR1 VAR2 cat > test.conf <<EOT debug 10; syslog { facility \${TESTSUITE_FACILITY:-local0}; tag direvent-test:write; } watcher { path \$cwd/dir; event write; command \"\$TESTDIR/envdump -s -f \$outfile -k\\\$self_test_pid\"; option (stdout,stderr); environ (--, VAR1, \"VAR2=baz\", \"FILE=\\\$file\", \"EVENT=\\\$genev_name\"); } EOT cat > selftest.sh <<EOT #!/bin/sh echo \"to come to\" >> dir/testfile sleep 10 exit 21 EOT chmod +x selftest.sh direvent -lnotice -f --self-test \$cwd/selftest.sh test.conf || exit \$? sed \"s^\$cwd^(CWD)^;s^\$TESTDIR^(TESTDIR)^;s^\\(DIREVENT_SYS.*\\)=.*^\\1=X^;/^argv\\[[0-9]]\\=-k/d;/DIREVENT_SELF_TEST_PID/d\" \$outfile " at_fn_check_prepare_notrace 'a ${...} parameter expansion' "env03.at:20" ( $at_check_trace; outfile=$cwd/dump mkdir dir cat > dir/testfile <<EOT now is the time for all men EOT VAR1=foo VAR2=bar export VAR1 VAR2 cat > test.conf <<EOT debug 10; syslog { facility ${TESTSUITE_FACILITY:-local0}; tag direvent-test:write; } watcher { path $cwd/dir; event write; command "$TESTDIR/envdump -s -f $outfile -k\$self_test_pid"; option (stdout,stderr); environ (--, VAR1, "VAR2=baz", "FILE=\$file", "EVENT=\$genev_name"); } EOT cat > selftest.sh <<EOT #!/bin/sh echo "to come to" >> dir/testfile sleep 10 exit 21 EOT chmod +x selftest.sh direvent -lnotice -f --self-test $cwd/selftest.sh test.conf || exit $? sed "s^$cwd^(CWD)^;s^$TESTDIR^(TESTDIR)^;s^\(DIREVENT_SYS.*\)=.*^\1=X^;/^argv\[[0-9]]\=-k/d;/DIREVENT_SELF_TEST_PID/d" $outfile ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "# Dump of execution environment cwd is (CWD)/dir # Arguments argv[0]=(TESTDIR)/envdump argv[1]=-s argv[2]=-f argv[3]=(CWD)/dump # Environment EVENT=write FILE=testfile VAR1=foo VAR2=baz # End " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/env03.at:20" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_12 #AT_START_13 at_fn_group_banner 13 'glob01.at:17' \ "Globbing pattern" " " 2 at_xfail=no ( $as_echo "13. $at_setup_line: testing $at_desc ..." $at_traceon cwd=`pwd -P` { set +x $as_echo "$at_srcdir/glob01.at:20: outfile=\$cwd/dump mkdir dir cat > test.conf <<EOT debug 10; syslog { facility \${TESTSUITE_FACILITY:-local0}; tag direvent-test:create; } watcher { path \$cwd/dir; event create; file temp.*; command \"\$TESTDIR/envdump -s -i DIREVENT_FILE=:DIREVENT_GENEV_ -f \$outfile -k\\\$self_test_pid\"; option (stdout,stderr); } EOT cat > selftest.sh <<EOT #!/bin/sh > dir/tempfile > dir/temp.txt sleep 10 exit 21 EOT chmod +x selftest.sh direvent -lnotice -f --self-test \$cwd/selftest.sh test.conf || exit \$? sed \"s^\$cwd^(CWD)^;s^\$TESTDIR^(TESTDIR)^;/^argv\\[[0-9]]\\=-k/d;/DIREVENT_SELF_TEST_PID/d\" \$outfile " at_fn_check_prepare_notrace 'a ${...} parameter expansion' "glob01.at:20" ( $at_check_trace; outfile=$cwd/dump mkdir dir cat > test.conf <<EOT debug 10; syslog { facility ${TESTSUITE_FACILITY:-local0}; tag direvent-test:create; } watcher { path $cwd/dir; event create; file temp.*; command "$TESTDIR/envdump -s -i DIREVENT_FILE=:DIREVENT_GENEV_ -f $outfile -k\$self_test_pid"; option (stdout,stderr); } EOT cat > selftest.sh <<EOT #!/bin/sh > dir/tempfile > dir/temp.txt sleep 10 exit 21 EOT chmod +x selftest.sh direvent -lnotice -f --self-test $cwd/selftest.sh test.conf || exit $? sed "s^$cwd^(CWD)^;s^$TESTDIR^(TESTDIR)^;/^argv\[[0-9]]\=-k/d;/DIREVENT_SELF_TEST_PID/d" $outfile ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "# Dump of execution environment cwd is (CWD)/dir # Arguments argv[0]=(TESTDIR)/envdump argv[1]=-s argv[2]=-i argv[3]=DIREVENT_FILE=:DIREVENT_GENEV_ argv[4]=-f argv[5]=(CWD)/dump # Environment DIREVENT_FILE=temp.txt DIREVENT_GENEV_CODE=1 DIREVENT_GENEV_NAME=create # End " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/glob01.at:20" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_13 #AT_START_14 at_fn_group_banner 14 'glob02.at:17' \ "Globbing pattern negation" " " 2 at_xfail=no ( $as_echo "14. $at_setup_line: testing $at_desc ..." $at_traceon cwd=`pwd -P` { set +x $as_echo "$at_srcdir/glob02.at:20: outfile=\$cwd/dump mkdir dir cat > test.conf <<EOT debug 10; syslog { facility \${TESTSUITE_FACILITY:-local0}; tag direvent-test:create; } watcher { path \$cwd/dir; event create; file \"!*.tmp\"; command \"\$TESTDIR/envdump -s -i DIREVENT_FILE=:DIREVENT_GENEV_ -f \$outfile -a -k\\\$self_test_pid\"; option (stdout,stderr); } EOT cat > selftest.sh <<EOT #!/bin/sh > dir/tempfile > dir/file.tmp sleep 10 exit 21 EOT chmod +x selftest.sh direvent -lnotice -f --self-test \$cwd/selftest.sh test.conf || exit \$? sed \"s^\$cwd^(CWD)^;s^\$TESTDIR^(TESTDIR)^;/^argv\\[[0-9]]\\=-k/d;/DIREVENT_SELF_TEST_PID/d\" \$outfile " at_fn_check_prepare_notrace 'a ${...} parameter expansion' "glob02.at:20" ( $at_check_trace; outfile=$cwd/dump mkdir dir cat > test.conf <<EOT debug 10; syslog { facility ${TESTSUITE_FACILITY:-local0}; tag direvent-test:create; } watcher { path $cwd/dir; event create; file "!*.tmp"; command "$TESTDIR/envdump -s -i DIREVENT_FILE=:DIREVENT_GENEV_ -f $outfile -a -k\$self_test_pid"; option (stdout,stderr); } EOT cat > selftest.sh <<EOT #!/bin/sh > dir/tempfile > dir/file.tmp sleep 10 exit 21 EOT chmod +x selftest.sh direvent -lnotice -f --self-test $cwd/selftest.sh test.conf || exit $? sed "s^$cwd^(CWD)^;s^$TESTDIR^(TESTDIR)^;/^argv\[[0-9]]\=-k/d;/DIREVENT_SELF_TEST_PID/d" $outfile ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "# Dump of execution environment cwd is (CWD)/dir # Arguments argv[0]=(TESTDIR)/envdump argv[1]=-s argv[2]=-i argv[3]=DIREVENT_FILE=:DIREVENT_GENEV_ argv[4]=-f argv[5]=(CWD)/dump argv[6]=-a # Environment DIREVENT_FILE=tempfile DIREVENT_GENEV_CODE=1 DIREVENT_GENEV_NAME=create # End " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/glob02.at:20" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_14 #AT_START_15 at_fn_group_banner 15 're01.at:17' \ "Extended case-sensitive" " " 2 at_xfail=no ( $as_echo "15. $at_setup_line: testing $at_desc ..." $at_traceon cwd=`pwd -P` { set +x $as_echo "$at_srcdir/re01.at:20: outfile=\$cwd/dump mkdir dir cat > test.conf <<EOT debug 10; syslog { facility \${TESTSUITE_FACILITY:-local0}; tag direvent-test:create; } watcher { path \$cwd/dir; event create; file /temp.*/; command \"\$TESTDIR/envdump -s -i DIREVENT_FILE=:DIREVENT_GENEV_ -f \$outfile -k\\\$self_test_pid\"; option (stdout,stderr); } EOT cat > selftest.sh <<EOT #!/bin/sh > dir/file > dir/tempfile sleep 10 exit 21 EOT chmod +x selftest.sh direvent -lnotice -f --self-test \$cwd/selftest.sh test.conf || exit \$? sed \"s^\$cwd^(CWD)^;s^\$TESTDIR^(TESTDIR)^;/^argv\\[[0-9]]\\=-k/d;/DIREVENT_SELF_TEST_PID/d\" \$outfile " at_fn_check_prepare_notrace 'a ${...} parameter expansion' "re01.at:20" ( $at_check_trace; outfile=$cwd/dump mkdir dir cat > test.conf <<EOT debug 10; syslog { facility ${TESTSUITE_FACILITY:-local0}; tag direvent-test:create; } watcher { path $cwd/dir; event create; file /temp.*/; command "$TESTDIR/envdump -s -i DIREVENT_FILE=:DIREVENT_GENEV_ -f $outfile -k\$self_test_pid"; option (stdout,stderr); } EOT cat > selftest.sh <<EOT #!/bin/sh > dir/file > dir/tempfile sleep 10 exit 21 EOT chmod +x selftest.sh direvent -lnotice -f --self-test $cwd/selftest.sh test.conf || exit $? sed "s^$cwd^(CWD)^;s^$TESTDIR^(TESTDIR)^;/^argv\[[0-9]]\=-k/d;/DIREVENT_SELF_TEST_PID/d" $outfile ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "# Dump of execution environment cwd is (CWD)/dir # Arguments argv[0]=(TESTDIR)/envdump argv[1]=-s argv[2]=-i argv[3]=DIREVENT_FILE=:DIREVENT_GENEV_ argv[4]=-f argv[5]=(CWD)/dump # Environment DIREVENT_FILE=tempfile DIREVENT_GENEV_CODE=1 DIREVENT_GENEV_NAME=create # End " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/re01.at:20" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_15 #AT_START_16 at_fn_group_banner 16 're02.at:17' \ "Extended case-insensitive" " " 2 at_xfail=no ( $as_echo "16. $at_setup_line: testing $at_desc ..." $at_traceon cwd=`pwd -P` { set +x $as_echo "$at_srcdir/re02.at:20: outfile=\$cwd/dump mkdir dir cat > test.conf <<EOT debug 10; syslog { facility \${TESTSUITE_FACILITY:-local0}; tag direvent-test:create; } watcher { path \$cwd/dir; event create; file /temp.*/i; command \"\$TESTDIR/envdump -s -i DIREVENT_FILE=:DIREVENT_GENEV_ -f \$outfile -k\\\$self_test_pid\"; option (stdout,stderr); } EOT cat > selftest.sh <<EOT #!/bin/sh > dir/file > dir/TEMPFILE sleep 10 exit 21 EOT chmod +x selftest.sh direvent -lnotice -f --self-test \$cwd/selftest.sh test.conf || exit \$? sed \"s^\$cwd^(CWD)^;s^\$TESTDIR^(TESTDIR)^;/^argv\\[[0-9]]\\=-k/d;/DIREVENT_SELF_TEST_PID/d\" \$outfile " at_fn_check_prepare_notrace 'a ${...} parameter expansion' "re02.at:20" ( $at_check_trace; outfile=$cwd/dump mkdir dir cat > test.conf <<EOT debug 10; syslog { facility ${TESTSUITE_FACILITY:-local0}; tag direvent-test:create; } watcher { path $cwd/dir; event create; file /temp.*/i; command "$TESTDIR/envdump -s -i DIREVENT_FILE=:DIREVENT_GENEV_ -f $outfile -k\$self_test_pid"; option (stdout,stderr); } EOT cat > selftest.sh <<EOT #!/bin/sh > dir/file > dir/TEMPFILE sleep 10 exit 21 EOT chmod +x selftest.sh direvent -lnotice -f --self-test $cwd/selftest.sh test.conf || exit $? sed "s^$cwd^(CWD)^;s^$TESTDIR^(TESTDIR)^;/^argv\[[0-9]]\=-k/d;/DIREVENT_SELF_TEST_PID/d" $outfile ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "# Dump of execution environment cwd is (CWD)/dir # Arguments argv[0]=(TESTDIR)/envdump argv[1]=-s argv[2]=-i argv[3]=DIREVENT_FILE=:DIREVENT_GENEV_ argv[4]=-f argv[5]=(CWD)/dump # Environment DIREVENT_FILE=TEMPFILE DIREVENT_GENEV_CODE=1 DIREVENT_GENEV_NAME=create # End " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/re02.at:20" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_16 #AT_START_17 at_fn_group_banner 17 're03.at:17' \ "Basic case-sensitive" " " 2 at_xfail=no ( $as_echo "17. $at_setup_line: testing $at_desc ..." $at_traceon cwd=`pwd -P` { set +x $as_echo "$at_srcdir/re03.at:20: outfile=\$cwd/dump mkdir dir cat > test.conf <<EOT debug 10; syslog { facility \${TESTSUITE_FACILITY:-local0}; tag direvent-test:create; } watcher { path \$cwd/dir; event create; file \"/a{2}.*/b\"; command \"\$TESTDIR/envdump -s -i DIREVENT_FILE=:DIREVENT_GENEV_ -f \$outfile -k\\\$self_test_pid\"; option (stdout,stderr); } EOT cat > selftest.sh <<EOT #!/bin/sh > dir/file > \"dir/a{2}file\" sleep 10 exit 21 EOT chmod +x selftest.sh direvent -lnotice -f --self-test \$cwd/selftest.sh test.conf || exit \$? sed \"s^\$cwd^(CWD)^;s^\$TESTDIR^(TESTDIR)^;/^argv\\[[0-9]]\\=-k/d;/DIREVENT_SELF_TEST_PID/d\" \$outfile " at_fn_check_prepare_notrace 'a ${...} parameter expansion' "re03.at:20" ( $at_check_trace; outfile=$cwd/dump mkdir dir cat > test.conf <<EOT debug 10; syslog { facility ${TESTSUITE_FACILITY:-local0}; tag direvent-test:create; } watcher { path $cwd/dir; event create; file "/a{2}.*/b"; command "$TESTDIR/envdump -s -i DIREVENT_FILE=:DIREVENT_GENEV_ -f $outfile -k\$self_test_pid"; option (stdout,stderr); } EOT cat > selftest.sh <<EOT #!/bin/sh > dir/file > "dir/a{2}file" sleep 10 exit 21 EOT chmod +x selftest.sh direvent -lnotice -f --self-test $cwd/selftest.sh test.conf || exit $? sed "s^$cwd^(CWD)^;s^$TESTDIR^(TESTDIR)^;/^argv\[[0-9]]\=-k/d;/DIREVENT_SELF_TEST_PID/d" $outfile ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "# Dump of execution environment cwd is (CWD)/dir # Arguments argv[0]=(TESTDIR)/envdump argv[1]=-s argv[2]=-i argv[3]=DIREVENT_FILE=:DIREVENT_GENEV_ argv[4]=-f argv[5]=(CWD)/dump # Environment DIREVENT_FILE=a{2}file DIREVENT_GENEV_CODE=1 DIREVENT_GENEV_NAME=create # End " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/re03.at:20" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_17 #AT_START_18 at_fn_group_banner 18 're04.at:17' \ "Basic case-insensitive" " " 2 at_xfail=no ( $as_echo "18. $at_setup_line: testing $at_desc ..." $at_traceon cwd=`pwd -P` { set +x $as_echo "$at_srcdir/re04.at:20: outfile=\$cwd/dump mkdir dir cat > test.conf <<EOT debug 10; syslog { facility \${TESTSUITE_FACILITY:-local0}; tag direvent-test:create; } watcher { path \$cwd/dir; event create; file \"/a{2}.*/bi\"; command \"\$TESTDIR/envdump -s -i DIREVENT_FILE=:DIREVENT_GENEV_ -f \$outfile -k\\\$self_test_pid\"; option (stdout,stderr); } EOT cat > selftest.sh <<EOT #!/bin/sh > dir/file > \"dir/A{2}file\" sleep 10 exit 21 EOT chmod +x selftest.sh direvent -lnotice -f --self-test \$cwd/selftest.sh test.conf || exit \$? sed \"s^\$cwd^(CWD)^;s^\$TESTDIR^(TESTDIR)^;/^argv\\[[0-9]]\\=-k/d;/DIREVENT_SELF_TEST_PID/d\" \$outfile " at_fn_check_prepare_notrace 'a ${...} parameter expansion' "re04.at:20" ( $at_check_trace; outfile=$cwd/dump mkdir dir cat > test.conf <<EOT debug 10; syslog { facility ${TESTSUITE_FACILITY:-local0}; tag direvent-test:create; } watcher { path $cwd/dir; event create; file "/a{2}.*/bi"; command "$TESTDIR/envdump -s -i DIREVENT_FILE=:DIREVENT_GENEV_ -f $outfile -k\$self_test_pid"; option (stdout,stderr); } EOT cat > selftest.sh <<EOT #!/bin/sh > dir/file > "dir/A{2}file" sleep 10 exit 21 EOT chmod +x selftest.sh direvent -lnotice -f --self-test $cwd/selftest.sh test.conf || exit $? sed "s^$cwd^(CWD)^;s^$TESTDIR^(TESTDIR)^;/^argv\[[0-9]]\=-k/d;/DIREVENT_SELF_TEST_PID/d" $outfile ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "# Dump of execution environment cwd is (CWD)/dir # Arguments argv[0]=(TESTDIR)/envdump argv[1]=-s argv[2]=-i argv[3]=DIREVENT_FILE=:DIREVENT_GENEV_ argv[4]=-f argv[5]=(CWD)/dump # Environment DIREVENT_FILE=A{2}file DIREVENT_GENEV_CODE=1 DIREVENT_GENEV_NAME=create # End " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/re04.at:20" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_18 #AT_START_19 at_fn_group_banner 19 're05.at:17' \ "Regexp negation" " " 2 at_xfail=no ( $as_echo "19. $at_setup_line: testing $at_desc ..." $at_traceon cwd=`pwd -P` { set +x $as_echo "$at_srcdir/re05.at:20: outfile=\$cwd/dump mkdir dir cat > test.conf <<EOT debug 10; syslog { facility \${TESTSUITE_FACILITY:-local0}; tag direvent-test:create; } watcher { path \$cwd/dir; event create; file \"!/\\\\\\\\.[0-9]+\$/\"; command \"\$TESTDIR/envdump -s -i DIREVENT_FILE=:DIREVENT_GENEV_ -f \$outfile -a -k\\\$self_test_pid\"; option (stdout,stderr); } EOT cat > selftest.sh <<EOT #!/bin/sh > dir/file > dir/file.1234 sleep 10 exit 21 EOT chmod +x selftest.sh direvent -lnotice -f --self-test \$cwd/selftest.sh test.conf || exit \$? sed \"s^\$cwd^(CWD)^;s^\$TESTDIR^(TESTDIR)^;/^argv\\[[0-9]]\\=-k/d;/DIREVENT_SELF_TEST_PID/d\" \$outfile " at_fn_check_prepare_notrace 'a ${...} parameter expansion' "re05.at:20" ( $at_check_trace; outfile=$cwd/dump mkdir dir cat > test.conf <<EOT debug 10; syslog { facility ${TESTSUITE_FACILITY:-local0}; tag direvent-test:create; } watcher { path $cwd/dir; event create; file "!/\\\\.[0-9]+$/"; command "$TESTDIR/envdump -s -i DIREVENT_FILE=:DIREVENT_GENEV_ -f $outfile -a -k\$self_test_pid"; option (stdout,stderr); } EOT cat > selftest.sh <<EOT #!/bin/sh > dir/file > dir/file.1234 sleep 10 exit 21 EOT chmod +x selftest.sh direvent -lnotice -f --self-test $cwd/selftest.sh test.conf || exit $? sed "s^$cwd^(CWD)^;s^$TESTDIR^(TESTDIR)^;/^argv\[[0-9]]\=-k/d;/DIREVENT_SELF_TEST_PID/d" $outfile ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "# Dump of execution environment cwd is (CWD)/dir # Arguments argv[0]=(TESTDIR)/envdump argv[1]=-s argv[2]=-i argv[3]=DIREVENT_FILE=:DIREVENT_GENEV_ argv[4]=-f argv[5]=(CWD)/dump argv[6]=-a # Environment DIREVENT_FILE=file DIREVENT_GENEV_CODE=1 DIREVENT_GENEV_NAME=create # End " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/re05.at:20" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_19 #AT_START_20 at_fn_group_banner 20 'file.at:17' \ "File watcher" " " 3 at_xfail=no ( $as_echo "20. $at_setup_line: testing $at_desc ..." $at_traceon cwd=`pwd -P` { set +x $as_echo "$at_srcdir/file.at:20: outfile=\$cwd/dump echo \"file\" > file cat > test.conf <<EOT debug 10; syslog { facility \${TESTSUITE_FACILITY:-local0}; tag direvent-test:create; } watcher { path \$cwd/file; event (create,write,delete); option (stdout,stderr); command \"\$TESTDIR/envdump -s -i DIREVENT_FILE=:DIREVENT_GENEV_ -f \$outfile -k\\\$self_test_pid\"; } EOT cat > selftest.sh <<EOT #!/bin/sh echo \"foo\" > file sleep 10 exit 21 EOT chmod +x selftest.sh direvent -lnotice -f --self-test \$cwd/selftest.sh test.conf || exit \$? sed '/^argv\\[[0-9]]\\=-k/d' \$outfile " at_fn_check_prepare_notrace 'a ${...} parameter expansion' "file.at:20" ( $at_check_trace; outfile=$cwd/dump echo "file" > file cat > test.conf <<EOT debug 10; syslog { facility ${TESTSUITE_FACILITY:-local0}; tag direvent-test:create; } watcher { path $cwd/file; event (create,write,delete); option (stdout,stderr); command "$TESTDIR/envdump -s -i DIREVENT_FILE=:DIREVENT_GENEV_ -f $outfile -k\$self_test_pid"; } EOT cat > selftest.sh <<EOT #!/bin/sh echo "foo" > file sleep 10 exit 21 EOT chmod +x selftest.sh direvent -lnotice -f --self-test $cwd/selftest.sh test.conf || exit $? sed '/^argv\[[0-9]]\=-k/d' $outfile ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "# Dump of execution environment cwd is $cwd # Arguments argv[0]=$TESTDIR/envdump argv[1]=-s argv[2]=-i argv[3]=DIREVENT_FILE=:DIREVENT_GENEV_ argv[4]=-f argv[5]=$cwd/dump # Environment DIREVENT_FILE=file DIREVENT_GENEV_CODE=2 DIREVENT_GENEV_NAME=write # End " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/file.at:20" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_20 #AT_START_21 at_fn_group_banner 21 'sent.at:17' \ "Sentinel" " " 3 at_xfail=no ( $as_echo "21. $at_setup_line: testing $at_desc ..." $at_traceon cwd=`pwd -P` { set +x $as_echo "$at_srcdir/sent.at:20: outfile=\$cwd/dump cat > test.conf <<EOT debug 10; syslog { facility \${TESTSUITE_FACILITY:-local0}; tag direvent-test:create; } watcher { path \$cwd/dir/sub; file \"foo\"; event (create); option (stdout,stderr); command \"\$TESTDIR/envdump -s -i DIREVENT_FILE=:DIREVENT_GENEV_ -a -f \$outfile -k\\\$self_test_pid\"; } EOT cat > selftest.sh <<EOT #!/bin/sh sleep 1 mkdir \$cwd/dir sleep 1 mkdir \$cwd/dir/sub sleep 1 echo \"bar\" > \$cwd/dir/sub/bar echo \"foo\" > \$cwd/dir/sub/foo sleep 10 exit 21 EOT chmod +x selftest.sh direvent -lnotice -f --self-test \$cwd/selftest.sh test.conf || exit \$? sed \"s^\$cwd^(CWD)^;s^\$TESTDIR^(TESTDIR)^;/^argv\\[[0-9]]\\=-k/d\" \$outfile " at_fn_check_prepare_notrace 'a ${...} parameter expansion' "sent.at:20" ( $at_check_trace; outfile=$cwd/dump cat > test.conf <<EOT debug 10; syslog { facility ${TESTSUITE_FACILITY:-local0}; tag direvent-test:create; } watcher { path $cwd/dir/sub; file "foo"; event (create); option (stdout,stderr); command "$TESTDIR/envdump -s -i DIREVENT_FILE=:DIREVENT_GENEV_ -a -f $outfile -k\$self_test_pid"; } EOT cat > selftest.sh <<EOT #!/bin/sh sleep 1 mkdir $cwd/dir sleep 1 mkdir $cwd/dir/sub sleep 1 echo "bar" > $cwd/dir/sub/bar echo "foo" > $cwd/dir/sub/foo sleep 10 exit 21 EOT chmod +x selftest.sh direvent -lnotice -f --self-test $cwd/selftest.sh test.conf || exit $? sed "s^$cwd^(CWD)^;s^$TESTDIR^(TESTDIR)^;/^argv\[[0-9]]\=-k/d" $outfile ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; $as_echo "direvent: [NOTICE] installing CREATE sentinel for $cwd/dir/sub direvent: [NOTICE] installing CREATE sentinel for $cwd/dir " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "# Dump of execution environment cwd is (CWD)/dir/sub # Arguments argv[0]=(TESTDIR)/envdump argv[1]=-s argv[2]=-i argv[3]=DIREVENT_FILE=:DIREVENT_GENEV_ argv[4]=-a argv[5]=-f argv[6]=(CWD)/dump # Environment DIREVENT_FILE=foo DIREVENT_GENEV_CODE=1 DIREVENT_GENEV_NAME=create # End " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/sent.at:20" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_21 ���������������������������������direvent-5.2/tests/re01.at��������������������������������������������������������������������������0000644�0001750�0001750�00000003022�12764623664�015442� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of Direvent testsuite. -*- Autotest -*- # Copyright (C) 2013-2016 Sergey Poznyakoff # # 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. # # 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 <http://www.gnu.org/licenses/>. AT_SETUP([Extended case-sensitive]) AT_KEYWORDS([create fname regexp re re01]) AT_DIREVENT_TEST([ debug 10; syslog { facility ${TESTSUITE_FACILITY:-local0}; tag direvent-test:create; } watcher { path $cwd/dir; event create; file /temp.*/; command "$TESTDIR/envdump -s -i DIREVENT_FILE=:DIREVENT_GENEV_ -f $outfile -k\$self_test_pid"; option (stdout,stderr); } ], [> dir/file > dir/tempfile ], [outfile=$cwd/dump mkdir dir ], [sed "s^$cwd^(CWD)^;s^$TESTDIR^(TESTDIR)^;/^argv\[[[0-9]]\]=-k/d;/DIREVENT_SELF_TEST_PID/d" $outfile ], [0], [# Dump of execution environment cwd is (CWD)/dir # Arguments argv[[0]]=(TESTDIR)/envdump argv[[1]]=-s argv[[2]]=-i argv[[3]]=DIREVENT_FILE=:DIREVENT_GENEV_ argv[[4]]=-f argv[[5]]=(CWD)/dump # Environment DIREVENT_FILE=tempfile DIREVENT_GENEV_CODE=1 DIREVENT_GENEV_NAME=create # End ]) AT_CLEANUP ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/tests/cmdexp.at������������������������������������������������������������������������0000644�0001750�0001750�00000003135�12764623664�016160� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of Direvent testsuite. -*- Autotest -*- # Copyright (C) 2013-2016 Sergey Poznyakoff # # 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. # # 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 <http://www.gnu.org/licenses/>. AT_SETUP([Command line expansions]) AT_KEYWORDS([cmdexp]) AT_DIREVENT_TEST([ debug 10; syslog { facility ${TESTSUITE_FACILITY:-local0}; tag direvent-test:write; } watcher { path $cwd/dir; event write; command "$TESTDIR/envdump -s -i DIREVENT_FILE=:DIREVENT_GENEV_ -f $outfile -k\$self_test_pid file=\$file event=\$genev_name"; option (stdout,stderr); } ], [echo "to come to" >> dir/testfile], [outfile=$cwd/dump mkdir dir cat > dir/testfile <<EOT now is the time for all men EOT ], [sed "s^$cwd^(CWD)^;s^$TESTDIR^(TESTDIR)^;/^argv\[[[0-9]]\]=-k/d" $outfile ], [0], [# Dump of execution environment cwd is (CWD)/dir # Arguments argv[[0]]=(TESTDIR)/envdump argv[[1]]=-s argv[[2]]=-i argv[[3]]=DIREVENT_FILE=:DIREVENT_GENEV_ argv[[4]]=-f argv[[5]]=(CWD)/dump argv[[7]]=file=testfile argv[[8]]=event=write # Environment DIREVENT_FILE=testfile DIREVENT_GENEV_CODE=2 DIREVENT_GENEV_NAME=write # End ]) AT_CLEANUP �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/tests/samepath.at����������������������������������������������������������������������0000644�0001750�0001750�00000003576�12764623664�016513� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of Direvent testsuite. -*- Autotest -*- # Copyright (C) 2014-2016 Sergey Poznyakoff # # 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. # # 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 <http://www.gnu.org/licenses/>. AT_SETUP([Watchers with same paths]) AT_KEYWORDS([samepath]) AT_DIREVENT_TEST([ debug 10; syslog { facility ${TESTSUITE_FACILITY:-local0}; tag direvent-test:write; } watcher { path $cwd/dir; event write; option (stdout,stderr); command "$TESTDIR/envdump -s -i DIREVENT_FILE=:DIREVENT_GENEV_NAME= -f $outfile"; } watcher { path $cwd/dir; event delete; option (stdout,stderr); command "$TESTDIR/envdump -s -i DIREVENT_FILE=:DIREVENT_GENEV_NAME= -f $outfile -a -k\$self_test_pid"; } ], [echo "x" > dir/file rm dir/file], [outfile=$cwd/dump mkdir dir >dir/file], [sed "s^$cwd^(CWD)^;s^$TESTDIR^(TESTDIR)^;/^argv\[[[0-9]]\]=-k/d" $outfile], [0], [# Dump of execution environment cwd is (CWD)/dir # Arguments argv[[0]]=(TESTDIR)/envdump argv[[1]]=-s argv[[2]]=-i argv[[3]]=DIREVENT_FILE=:DIREVENT_GENEV_NAME= argv[[4]]=-f argv[[5]]=(CWD)/dump # Environment DIREVENT_FILE=file DIREVENT_GENEV_NAME=write # End # Dump of execution environment cwd is (CWD)/dir # Arguments argv[[0]]=(TESTDIR)/envdump argv[[1]]=-s argv[[2]]=-i argv[[3]]=DIREVENT_FILE=:DIREVENT_GENEV_NAME= argv[[4]]=-f argv[[5]]=(CWD)/dump argv[[6]]=-a # Environment DIREVENT_FILE=file DIREVENT_GENEV_NAME=delete # End ]) AT_CLEANUP ����������������������������������������������������������������������������������������������������������������������������������direvent-5.2/tests/createrec.at���������������������������������������������������������������������0000644�0001750�0001750�00000002457�12764623664�016643� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of Direvent testsuite. -*- Autotest -*- # Copyright (C) 2013-2016 Sergey Poznyakoff # # 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. # # 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 <http://www.gnu.org/licenses/>. AT_SETUP([Create recursive]) AT_KEYWORDS([create createrec]) AT_DIREVENT_TEST([ debug 10; syslog { facility ${TESTSUITE_FACILITY:-local0}; tag direvent-test:create-recursive; } watcher { path $cwd/dir recursive; event create; command "$SRCDIR/printname $outfile"; option (stdout,stderr); } ], [cp -r a dir touch dir/sentinel ], [outfile=$cwd/dump mkdir dir mkdir a mkdir a/b mkdir a/b/c > a/af > a/af1 > a/b/bf ], [sed "s^$cwd^(CWD)^;s^$TESTDIR^(TESTDIR)^" $outfile | sort ], [0], [(CWD)/dir/a (CWD)/dir/a/af (CWD)/dir/a/af1 (CWD)/dir/a/b (CWD)/dir/a/b/bf (CWD)/dir/a/b/c (CWD)/dir/sentinel ]) AT_CLEANUP �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/tests/envdump.c������������������������������������������������������������������������0000644�0001750�0001750�00000011454�12764623664�016177� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* envdump.c - dump execution environment This file is part of Direvent testsuite. Copyright (C) 2013-2016 Sergey Poznyakoff 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. 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 <http://www.gnu.org/licenses/>. */ #include <stdio.h> #include <stdlib.h> #include <errno.h> #include <unistd.h> #include <string.h> #include <signal.h> extern char **environ; char *progname; char * agetcwd() { char *buf = NULL; size_t bufsize = 128; for (;;) { errno = 0; buf = malloc(bufsize); if (!buf) { fprintf(stderr, "%s: not enough memory\n", progname); return NULL; } if (getcwd(buf, bufsize)) break; free(buf); if (errno != ERANGE) { fprintf(stderr, "%s: ", progname); perror("getcwd"); return NULL; } bufsize += bufsize / 16; bufsize += 32; } return buf; } int compvar(char *enva, char *envb, int lazy) { int c; for (; *envb; enva++, envb++) { if (*enva == 0) { if (lazy) return 0; break; } if (c = *enva - *envb) return c; if (*enva == '=' || *envb == '=') return c; } return *enva - *envb; } int compenv(const void *a, const void *b) { return compvar(*(char * const *)a, *(char * const *)b, 0); } char * locate(char **itab, char *s) { for (;*itab;itab++) { if (compvar(*itab, s, 1) == 0) break; } return *itab; } struct sigtab { char *name; int sig; } sigtab[] = { { "HUP", SIGHUP }, { "INT", SIGINT }, { "QUIT", SIGQUIT }, { "ILL", SIGILL }, { "ABRT", SIGABRT }, { "FPE", SIGFPE }, { "KILL", SIGKILL }, { "SEGV", SIGSEGV }, { "PIPE", SIGPIPE }, { "ALRM", SIGALRM }, { "TERM", SIGTERM }, { "USR1", SIGUSR1 }, { "USR2", SIGUSR2 }, { "CHLD", SIGCHLD }, { NULL } }; int strtosig(char *str) { struct sigtab *sp; int sig; char *end; if (strncmp(str, "SIG", 3) == 0) str += 3; for (sp = sigtab; sp->name; sp++) if (strcmp(sp->name, str) == 0) return sp->sig; sig = strtoul(str, &end, 10); if (*end) { fprintf(stderr, "%s: bad signal number (near %s)\n", progname, end); exit(1); } return sig; } void read_pid_and_sig(char *arg, pid_t *pid, int *sig) { char *p, *end; unsigned long n; p = strchr(arg, ':'); if (p) *p++ = 0; if (arg[0] == '@') { FILE *fp = fopen(++arg, "r"); if (!fp) { fprintf(stderr, "%s: cannot open ", progname); perror(arg); exit(1); } if (fscanf(fp, "%lu", &n) != 1) { fprintf(stderr, "%s: no PID found in %s\n", progname, arg); exit(1); } fclose(fp); *pid = n; } else { *pid = strtoul(arg, &end, 10); if (*end) { fprintf(stderr, "%s: bad PID (near %s)\n", progname, end); exit(1); } } if (p) { *sig = strtosig(p); p[-1] = ':'; } } int main(int argc, char **argv) { int i; char *p; FILE *fp = NULL; char *file; char *mode = "w"; int sortenv = 0; char *include = NULL; char **itab = NULL; pid_t pid = 0; int sig = SIGHUP; progname = strrchr(argv[0], '/'); if (progname) progname++; else progname = argv[0]; while ((i = getopt(argc, argv, "af:hi:k:s")) != EOF) switch (i) { case 'a': mode = "a"; break; case 'f': file = optarg; break; case 'h': printf("usage: %s [-ahsx] [-f FILE] [-i INCLUDELIST] [-k [@]PID[:SIG]] [ARGS...]\n", progname); return 0; case 's': sortenv = 1; break; case 'i': include = optarg; break; case 'k': read_pid_and_sig(optarg, &pid, &sig); break; default: return 1; } if (file) { fp = fopen(file, mode); if (!fp) { fprintf(stderr, "%s: ", progname); perror(file); return 1; } } else fp = stderr; fprintf(fp, "# Dump of execution environment\n"); p = agetcwd(); if (p) { fprintf(fp, "cwd is %s\n", p); free(p); } fprintf(fp, "# Arguments\n"); for (i = 0; i < argc; i++) fprintf(fp, "argv[%d]=%s\n", i, argv[i]); if (sortenv) { for (i = 0; environ[i]; i++); qsort(environ, i, sizeof(environ[0]), compenv); } if (include) { i = 1; for (p = include; *p; p++) { if (*p == ':') i++; } itab = calloc(i + 1, sizeof(itab)); itab[0] = include; for (p = include, i = 1; *p; p++) { if (*p == ':') { *p = 0; itab[i++] = p + 1; } } itab[i] = NULL; } fprintf(fp, "# Environment\n"); for (i = 0; environ[i]; i++) { if (!itab || locate(itab, environ[i])) fprintf(fp, "%s\n", environ[i]); } fprintf(fp, "# End\n"); if (pid) kill(pid, sig); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/tests/shell.at�������������������������������������������������������������������������0000644�0001750�0001750�00000002757�12764623664�016020� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of Direvent testsuite. -*- Autotest -*- # Copyright (C) 2013-2016 Sergey Poznyakoff # # 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. # # 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 <http://www.gnu.org/licenses/>. AT_SETUP([Shell]) AT_KEYWORDS([create shell]) AT_DIREVENT_TEST([ debug 10; syslog { facility ${TESTSUITE_FACILITY:-local0}; tag direvent-test:create; } watcher { path $cwd/dir; event create; command "echo SHELL=\$0 > $outfile;" "$TESTDIR/envdump -s -i DIREVENT_FILE=:DIREVENT_GENEV_ -af $outfile -k\$self_test_pid"; option (stdout,stderr,shell); } ], [> dir/file], [outfile=$cwd/dump mkdir dir ], [sed "s^$cwd^(CWD)^;s^$TESTDIR^(TESTDIR)^;/^argv\[[[0-9]]\]=-k/d" $outfile ], [0], [SHELL=/bin/sh # Dump of execution environment cwd is (CWD)/dir # Arguments argv[[0]]=(TESTDIR)/envdump argv[[1]]=-s argv[[2]]=-i argv[[3]]=DIREVENT_FILE=:DIREVENT_GENEV_ argv[[4]]=-af argv[[5]]=(CWD)/dump # Environment DIREVENT_FILE=file DIREVENT_GENEV_CODE=1 DIREVENT_GENEV_NAME=create # End ]) AT_CLEANUP �����������������direvent-5.2/tests/env01.at�������������������������������������������������������������������������0000644�0001750�0001750�00000003051�12764623664�015626� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of Direvent testsuite. -*- Autotest -*- # Copyright (C) 2013-2016 Sergey Poznyakoff # # 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. # # 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 <http://www.gnu.org/licenses/>. AT_SETUP([clear environment]) AT_KEYWORDS([environ env01]) AT_DIREVENT_TEST([ debug 10; syslog { facility ${TESTSUITE_FACILITY:-local0}; tag direvent-test:write; } watcher { path $cwd/dir; event write; command "$TESTDIR/envdump -s -f $outfile -k\$self_test_pid"; option (stdout,stderr); environ -; } ], [echo "to come to" >> dir/testfile], [outfile=$cwd/dump mkdir dir cat > dir/testfile <<EOT now is the time for all men EOT ], [sed "s^$cwd^(CWD)^;s^$TESTDIR^(TESTDIR)^;s^\(DIREVENT_SYS.*\)=.*^\1=X^;/^argv\[[[0-9]]\]=-k/d;/DIREVENT_SELF_TEST_PID/d" $outfile ], [0], [# Dump of execution environment cwd is (CWD)/dir # Arguments argv[[0]]=(TESTDIR)/envdump argv[[1]]=-s argv[[2]]=-f argv[[3]]=(CWD)/dump # Environment DIREVENT_FILE=testfile DIREVENT_GENEV_CODE=2 DIREVENT_GENEV_NAME=write DIREVENT_SYSEV_CODE=X DIREVENT_SYSEV_NAME=X # End ]) AT_CLEANUP ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/tests/re04.at��������������������������������������������������������������������������0000644�0001750�0001750�00000003027�12764623664�015452� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of Direvent testsuite. -*- Autotest -*- # Copyright (C) 2013-2016 Sergey Poznyakoff # # 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. # # 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 <http://www.gnu.org/licenses/>. AT_SETUP([Basic case-insensitive]) AT_KEYWORDS([create fname regexp re re04]) AT_DIREVENT_TEST([ debug 10; syslog { facility ${TESTSUITE_FACILITY:-local0}; tag direvent-test:create; } watcher { path $cwd/dir; event create; file "/a{2}.*/bi"; command "$TESTDIR/envdump -s -i DIREVENT_FILE=:DIREVENT_GENEV_ -f $outfile -k\$self_test_pid"; option (stdout,stderr); } ], [> dir/file > "dir/A{2}file" ], [outfile=$cwd/dump mkdir dir ], [sed "s^$cwd^(CWD)^;s^$TESTDIR^(TESTDIR)^;/^argv\[[[0-9]]\]=-k/d;/DIREVENT_SELF_TEST_PID/d" $outfile ], [0], [# Dump of execution environment cwd is (CWD)/dir # Arguments argv[[0]]=(TESTDIR)/envdump argv[[1]]=-s argv[[2]]=-i argv[[3]]=DIREVENT_FILE=:DIREVENT_GENEV_ argv[[4]]=-f argv[[5]]=(CWD)/dump # Environment DIREVENT_FILE=A{2}file DIREVENT_GENEV_CODE=1 DIREVENT_GENEV_NAME=create # End ]) AT_CLEANUP ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/tests/Makefile.in����������������������������������������������������������������������0000644�0001750�0001750�00000046315�13512402623�016404� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 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 Direvent # Copyright (C) 2012-2016 Sergey Poznyakoff # # 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. # # 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 <http://www.gnu.org/licenses/>. 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@ noinst_PROGRAMS = envdump$(EXEEXT) subdir = tests 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)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = atlocal CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) envdump_SOURCES = envdump.c envdump_OBJECTS = envdump.$(OBJEXT) envdump_LDADD = $(LDADD) 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 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = envdump.c DIST_SOURCES = envdump.c am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/atlocal.in \ $(top_srcdir)/build-aux/depcomp 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@ 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@ 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@ 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@ 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@ EXTRA_DIST = $(TESTSUITE_AT) testsuite package.m4 printname DISTCLEANFILES = atconfig $(check_SCRIPTS) MAINTAINERCLEANFILES = Makefile.in $(TESTSUITE) # TESTSUITE_AT = \ attrib.at\ cmdexp.at\ create.at\ createrec.at\ delete.at\ env00.at\ env01.at\ env02.at\ env03.at\ file.at\ glob01.at\ glob02.at\ re01.at\ re02.at\ re03.at\ re04.at\ re05.at\ samepath.at\ shell.at\ sent.at\ testsuite.at\ write.at TESTSUITE = $(srcdir)/testsuite M4 = m4 AUTOTEST = $(AUTOM4TE) --language=autotest all: all-am .SUFFIXES: .SUFFIXES: .c .o .obj $(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 tests/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnits tests/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__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ 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): atlocal: $(top_builddir)/config.status $(srcdir)/atlocal.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ clean-noinstPROGRAMS: -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS) envdump$(EXEEXT): $(envdump_OBJECTS) $(envdump_DEPENDENCIES) $(EXTRA_envdump_DEPENDENCIES) @rm -f envdump$(EXEEXT) $(AM_V_CCLD)$(LINK) $(envdump_OBJECTS) $(envdump_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/envdump.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(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 check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-local check: check-am all-am: Makefile $(PROGRAMS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: 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) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-local clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am check-local clean \ clean-generic clean-local clean-noinstPROGRAMS cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-tags 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-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am .PRECIOUS: Makefile $(srcdir)/package.m4: $(top_srcdir)/configure.ac $(AM_V_GEN){ \ echo '# Signature of the current package.'; \ echo 'm4_define([AT_PACKAGE_NAME], [@PACKAGE_NAME@])'; \ echo 'm4_define([AT_PACKAGE_TARNAME], [@PACKAGE_TARNAME@])'; \ echo 'm4_define([AT_PACKAGE_VERSION], [@PACKAGE_VERSION@])'; \ echo 'm4_define([AT_PACKAGE_STRING], [@PACKAGE_STRING@])'; \ echo 'm4_define([AT_PACKAGE_BUGREPORT], [@PACKAGE_BUGREPORT@])'; \ } >$(srcdir)/package.m4 $(TESTSUITE): package.m4 $(TESTSUITE_AT) $(AM_V_GEN)$(AUTOTEST) -I $(srcdir) testsuite.at -o $@.tmp $(AM_V_at)mv $@.tmp $@ atconfig: $(top_builddir)/config.status cd $(top_builddir) && ./config.status tests/$@ clean-local: @test ! -f $(TESTSUITE) || $(SHELL) $(TESTSUITE) --clean check-local: atconfig atlocal $(TESTSUITE) @$(SHELL) $(TESTSUITE) # 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.2/tests/atlocal.in�����������������������������������������������������������������������0000644�0001750�0001750�00000000571�12764623664�016322� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# @configure_input@ -*- shell-script -*- # Configurable variable values for Direvent test suite. # Copyright (C) 2012-2016 Sergey Poznyakoff PATH=@abs_builddir@:@abs_top_builddir@/src:@abs_top_srcdir@/build-aux:$top_srcdir:$srcdir:$PATH SRCDIR=@abs_top_srcdir@/tests TESTDIR=@abs_top_builddir@/tests #TESTSUITE_FACILITY=@TESTSUITE_FACILITY@���������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/tests/attrib.at������������������������������������������������������������������������0000644�0001750�0001750�00000002724�12764623664�016170� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of Direvent testsuite. -*- Autotest -*- # Copyright (C) 2013-2016 Sergey Poznyakoff # # 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. # # 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 <http://www.gnu.org/licenses/>. AT_SETUP([Attrib]) AT_KEYWORDS([attrib]) AT_DIREVENT_TEST([ debug 10; syslog { facility ${TESTSUITE_FACILITY:-local0}; tag direvent-test:attrib; } watcher { path $cwd/dir; event attrib; command "$TESTDIR/envdump -s -i DIREVENT_FILE=:DIREVENT_GENEV_ -f $outfile -k\$self_test_pid"; option (stdout,stderr); } ], [chmod 644 dir/file], [outfile=$cwd/dump mkdir dir > dir/file chmod 600 dir/file ], [sed "s^$cwd^(CWD)^;s^$TESTDIR^(TESTDIR)^;/^argv\[[[0-9]]\]=-k/d" $outfile ], [0], [# Dump of execution environment cwd is (CWD)/dir # Arguments argv[[0]]=(TESTDIR)/envdump argv[[1]]=-s argv[[2]]=-i argv[[3]]=DIREVENT_FILE=:DIREVENT_GENEV_ argv[[4]]=-f argv[[5]]=(CWD)/dump # Environment DIREVENT_FILE=file DIREVENT_GENEV_CODE=4 DIREVENT_GENEV_NAME=attrib # End ]) AT_CLEANUP ��������������������������������������������direvent-5.2/tests/re05.at��������������������������������������������������������������������������0000644�0001750�0001750�00000003044�12764623664�015452� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of Direvent testsuite. -*- Autotest -*- # Copyright (C) 2014-2016 Sergey Poznyakoff # # 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. # # 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 <http://www.gnu.org/licenses/>. AT_SETUP([Regexp negation]) AT_KEYWORDS([create fname regexp re re05 neg]) AT_DIREVENT_TEST([ debug 10; syslog { facility ${TESTSUITE_FACILITY:-local0}; tag direvent-test:create; } watcher { path $cwd/dir; event create; file "!/\\\\.[0-9]+$/"; command "$TESTDIR/envdump -s -i DIREVENT_FILE=:DIREVENT_GENEV_ -f $outfile -a -k\$self_test_pid"; option (stdout,stderr); } ], [> dir/file > dir/file.1234 ], [outfile=$cwd/dump mkdir dir ], [sed "s^$cwd^(CWD)^;s^$TESTDIR^(TESTDIR)^;/^argv\[[[0-9]]\]=-k/d;/DIREVENT_SELF_TEST_PID/d" $outfile ], [0], [# Dump of execution environment cwd is (CWD)/dir # Arguments argv[[0]]=(TESTDIR)/envdump argv[[1]]=-s argv[[2]]=-i argv[[3]]=DIREVENT_FILE=:DIREVENT_GENEV_ argv[[4]]=-f argv[[5]]=(CWD)/dump argv[[6]]=-a # Environment DIREVENT_FILE=file DIREVENT_GENEV_CODE=1 DIREVENT_GENEV_NAME=create # End ]) AT_CLEANUP ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/tests/package.m4�����������������������������������������������������������������������0000644�0001750�0001750�00000000440�13512402634�016163� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Signature of the current package. m4_define([AT_PACKAGE_NAME], [GNU Direvent]) m4_define([AT_PACKAGE_TARNAME], [direvent]) m4_define([AT_PACKAGE_VERSION], [5.2]) m4_define([AT_PACKAGE_STRING], [GNU Direvent 5.2]) m4_define([AT_PACKAGE_BUGREPORT], [bug-direvent@gnu.org.ua]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/tests/sent.at��������������������������������������������������������������������������0000644�0001750�0001750�00000003324�12764623664�015651� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of Direvent testsuite. -*- Autotest -*- # Copyright (C) 2013-2016 Sergey Poznyakoff # # 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. # # 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 <http://www.gnu.org/licenses/>. AT_SETUP([Sentinel]) AT_KEYWORDS([special sent sentinel]) AT_DIREVENT_TEST_UNQUOTED([ debug 10; syslog { facility ${TESTSUITE_FACILITY:-local0}; tag direvent-test:create; } watcher { path $cwd/dir/sub; file "foo"; event (create); option (stdout,stderr); command "$TESTDIR/envdump -s -i DIREVENT_FILE=:DIREVENT_GENEV_ -a -f $outfile -k\$self_test_pid"; } ], [sleep 1 mkdir $cwd/dir sleep 1 mkdir $cwd/dir/sub sleep 1 echo "bar" > $cwd/dir/sub/bar echo "foo" > $cwd/dir/sub/foo ], [outfile=$cwd/dump ], [sed "s^$cwd^(CWD)^;s^$TESTDIR^(TESTDIR)^;/^argv\[[[0-9]]\]=-k/d" $outfile ], [0], [# Dump of execution environment cwd is (CWD)/dir/sub # Arguments argv[[0]]=(TESTDIR)/envdump argv[[1]]=-s argv[[2]]=-i argv[[3]]=DIREVENT_FILE=:DIREVENT_GENEV_ argv[[4]]=-a argv[[5]]=-f argv[[6]]=(CWD)/dump # Environment DIREVENT_FILE=foo DIREVENT_GENEV_CODE=1 DIREVENT_GENEV_NAME=create # End ], [direvent: [[NOTICE]] installing CREATE sentinel for $cwd/dir/sub direvent: [[NOTICE]] installing CREATE sentinel for $cwd/dir ]) AT_CLEANUP ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/tests/env03.at�������������������������������������������������������������������������0000644�0001750�0001750�00000003077�12764623664�015640� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of Direvent testsuite. -*- Autotest -*- # Copyright (C) 2013-2016 Sergey Poznyakoff # # 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. # # 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 <http://www.gnu.org/licenses/>. AT_SETUP([clear and modify]) AT_KEYWORDS([environ env03]) AT_DIREVENT_TEST([ debug 10; syslog { facility ${TESTSUITE_FACILITY:-local0}; tag direvent-test:write; } watcher { path $cwd/dir; event write; command "$TESTDIR/envdump -s -f $outfile -k\$self_test_pid"; option (stdout,stderr); environ (--, VAR1, "VAR2=baz", "FILE=\$file", "EVENT=\$genev_name"); } ], [echo "to come to" >> dir/testfile], [outfile=$cwd/dump mkdir dir cat > dir/testfile <<EOT now is the time for all men EOT VAR1=foo VAR2=bar export VAR1 VAR2 ], [sed "s^$cwd^(CWD)^;s^$TESTDIR^(TESTDIR)^;s^\(DIREVENT_SYS.*\)=.*^\1=X^;/^argv\[[[0-9]]\]=-k/d;/DIREVENT_SELF_TEST_PID/d" $outfile ], [0], [# Dump of execution environment cwd is (CWD)/dir # Arguments argv[[0]]=(TESTDIR)/envdump argv[[1]]=-s argv[[2]]=-f argv[[3]]=(CWD)/dump # Environment EVENT=write FILE=testfile VAR1=foo VAR2=baz # End ]) AT_CLEANUP �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/tests/env02.at�������������������������������������������������������������������������0000644�0001750�0001750�00000002673�12764623664�015640� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of Direvent testsuite. -*- Autotest -*- # Copyright (C) 2013-2016 Sergey Poznyakoff # # 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. # # 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 <http://www.gnu.org/licenses/>. AT_SETUP([clear all environment]) AT_KEYWORDS([environ env02]) AT_DIREVENT_TEST([ debug 10; syslog { facility ${TESTSUITE_FACILITY:-local0}; tag direvent-test:write; } watcher { path $cwd/dir; event write; command "$TESTDIR/envdump -s -f $outfile -k\$self_test_pid"; option (stdout,stderr); environ --; } ], [echo "to come to" >> dir/testfile], [outfile=$cwd/dump mkdir dir cat > dir/testfile <<EOT now is the time for all men EOT ], [sed "s^$cwd^(CWD)^;s^$TESTDIR^(TESTDIR)^;s^\(DIREVENT_SYS.*\)=.*^\1=X^;/^argv\[[[0-9]]\]=-k/d;/DIREVENT_SELF_TEST_PID/d" $outfile ], [0], [# Dump of execution environment cwd is (CWD)/dir # Arguments argv[[0]]=(TESTDIR)/envdump argv[[1]]=-s argv[[2]]=-f argv[[3]]=(CWD)/dump # Environment # End ]) AT_CLEANUP ���������������������������������������������������������������������direvent-5.2/tests/glob01.at������������������������������������������������������������������������0000644�0001750�0001750�00000003012�12764623664�015756� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of Direvent testsuite. -*- Autotest -*- # Copyright (C) 2013-2016 Sergey Poznyakoff # # 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. # # 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 <http://www.gnu.org/licenses/>. AT_SETUP([Globbing pattern]) AT_KEYWORDS([create fname glob glob01]) AT_DIREVENT_TEST([ debug 10; syslog { facility ${TESTSUITE_FACILITY:-local0}; tag direvent-test:create; } watcher { path $cwd/dir; event create; file temp.*; command "$TESTDIR/envdump -s -i DIREVENT_FILE=:DIREVENT_GENEV_ -f $outfile -k\$self_test_pid"; option (stdout,stderr); } ], [> dir/tempfile > dir/temp.txt ], [outfile=$cwd/dump mkdir dir ], [sed "s^$cwd^(CWD)^;s^$TESTDIR^(TESTDIR)^;/^argv\[[[0-9]]\]=-k/d;/DIREVENT_SELF_TEST_PID/d" $outfile ], [0], [# Dump of execution environment cwd is (CWD)/dir # Arguments argv[[0]]=(TESTDIR)/envdump argv[[1]]=-s argv[[2]]=-i argv[[3]]=DIREVENT_FILE=:DIREVENT_GENEV_ argv[[4]]=-f argv[[5]]=(CWD)/dump # Environment DIREVENT_FILE=temp.txt DIREVENT_GENEV_CODE=1 DIREVENT_GENEV_NAME=create # End ]) AT_CLEANUP ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/tests/re03.at��������������������������������������������������������������������������0000644�0001750�0001750�00000003024�12764623664�015446� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of Direvent testsuite. -*- Autotest -*- # Copyright (C) 2013-2016 Sergey Poznyakoff # # 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. # # 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 <http://www.gnu.org/licenses/>. AT_SETUP([Basic case-sensitive]) AT_KEYWORDS([create fname regexp re re03]) AT_DIREVENT_TEST([ debug 10; syslog { facility ${TESTSUITE_FACILITY:-local0}; tag direvent-test:create; } watcher { path $cwd/dir; event create; file "/a{2}.*/b"; command "$TESTDIR/envdump -s -i DIREVENT_FILE=:DIREVENT_GENEV_ -f $outfile -k\$self_test_pid"; option (stdout,stderr); } ], [> dir/file > "dir/a{2}file" ], [outfile=$cwd/dump mkdir dir ], [sed "s^$cwd^(CWD)^;s^$TESTDIR^(TESTDIR)^;/^argv\[[[0-9]]\]=-k/d;/DIREVENT_SELF_TEST_PID/d" $outfile ], [0], [# Dump of execution environment cwd is (CWD)/dir # Arguments argv[[0]]=(TESTDIR)/envdump argv[[1]]=-s argv[[2]]=-i argv[[3]]=DIREVENT_FILE=:DIREVENT_GENEV_ argv[[4]]=-f argv[[5]]=(CWD)/dump # Environment DIREVENT_FILE=a{2}file DIREVENT_GENEV_CODE=1 DIREVENT_GENEV_NAME=create # End ]) AT_CLEANUP ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/tests/re02.at��������������������������������������������������������������������������0000644�0001750�0001750�00000003024�12764623664�015445� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of Direvent testsuite. -*- Autotest -*- # Copyright (C) 2013-2016 Sergey Poznyakoff # # 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. # # 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 <http://www.gnu.org/licenses/>. AT_SETUP([Extended case-insensitive]) AT_KEYWORDS([create fname regexp re re02]) AT_DIREVENT_TEST([ debug 10; syslog { facility ${TESTSUITE_FACILITY:-local0}; tag direvent-test:create; } watcher { path $cwd/dir; event create; file /temp.*/i; command "$TESTDIR/envdump -s -i DIREVENT_FILE=:DIREVENT_GENEV_ -f $outfile -k\$self_test_pid"; option (stdout,stderr); } ], [> dir/file > dir/TEMPFILE ], [outfile=$cwd/dump mkdir dir ], [sed "s^$cwd^(CWD)^;s^$TESTDIR^(TESTDIR)^;/^argv\[[[0-9]]\]=-k/d;/DIREVENT_SELF_TEST_PID/d" $outfile], [0], [# Dump of execution environment cwd is (CWD)/dir # Arguments argv[[0]]=(TESTDIR)/envdump argv[[1]]=-s argv[[2]]=-i argv[[3]]=DIREVENT_FILE=:DIREVENT_GENEV_ argv[[4]]=-f argv[[5]]=(CWD)/dump # Environment DIREVENT_FILE=TEMPFILE DIREVENT_GENEV_CODE=1 DIREVENT_GENEV_NAME=create # End ]) AT_CLEANUP ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/tests/printname������������������������������������������������������������������������0000755�0001750�0001750�00000000172�12625627743�016271� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh echo `pwd`/$DIREVENT_FILE >> $1 if test $DIREVENT_FILE = sentinel; then kill -HUP $DIREVENT_SELF_TEST_PID; fi ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/COPYING��������������������������������������������������������������������������������0000644�0001750�0001750�00000104374�12625627743�014250� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. <one line to give the program's name and a brief idea of what it does.> Copyright (C) <year> <name of author> This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: <program> Copyright (C) <year> <name of author> This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see <http://www.gnu.org/licenses/>. The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read <http://www.gnu.org/philosophy/why-not-lgpl.html>. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/configure.ac���������������������������������������������������������������������������0000644�0001750�0001750�00000005733�13512402577�015472� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of Direvent -*- autoconf -*- # Copyright (C) 2012-2019 Sergey Poznyakoff # # 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. # # 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 <http://www.gnu.org/licenses/>. AC_PREREQ([2.69]) AC_INIT([GNU Direvent], [5.2], [bug-direvent@gnu.org.ua], [direvent], [http://www.gnu.org.ua/software/direvent]) AC_CONFIG_SRCDIR([src/direvent.c]) AC_CONFIG_HEADERS([config.h]) AC_CONFIG_AUX_DIR([build-aux]) AM_INIT_AUTOMAKE([1.11.5 gnits tar-ustar silent-rules]) # Enable silent rules by default: AM_SILENT_RULES([yes]) # Checks for programs. AC_PROG_AWK AC_PROG_CC DEVT_CC_PAREN_QUIRK AC_PROG_RANLIB AC_PROG_INSTALL AC_PROG_MAKE_SET # Checks for libraries. # Checks for header files. AC_CHECK_HEADERS([sys/inotify.h sys/event.h]) # Checks for typedefs, structures, and compiler characteristics. # Checks for library functions. AC_CHECK_FUNCS([inotify_init kqueue rfork]) if test "$ac_cv_header_sys_inotify_h/$ac_cv_func_inotify_init" = yes/yes; then iface=inotify elif test "$ac_cv_header_sys_event_h/$ac_cv_func_kqueue" = yes/yes; then iface=kqueue else AC_MSG_ERROR([no suitable interface found]) fi AM_CONDITIONAL([DIREVENT_INOTIFY],[test $iface = inotify]) AM_CONDITIONAL([DIREVENT_KQUEUE],[test $iface = kqueue]) AC_SUBST(IFACE, $iface) AC_DEFINE_UNQUOTED(USE_IFACE,IFACE_`echo $iface|tr a-z A-Z`, [event notification interface to use]) AM_CONDITIONAL([DIREVENT_RFORK], [test "$ac_cv_func_rfork" = yes]) AH_TOP([ /* Supported event notification types */ #define IFACE_INOTIFY 0 /* inotify - Linux */ #define IFACE_KQUEUE 1 /* kqueue - BSD */ ]) # Grecs subsystem GRECS_SETUP([grecs],[tree-api git2chg no-preproc getopt tests]) GRECS_HOST_PROJECT_INCLUDES='-I$(top_srcdir)/src' # Gettext. AM_ICONV AM_GNU_GETTEXT([external], [need-formatstring-macros]) AM_GNU_GETTEXT_VERSION([0.18]) AC_SUBST(INCLUDE_PATH_ARGS,['$(pkgdatadir)/$(VERSION):$(pkgdatadir)/include']) AC_ARG_WITH([include-path], [AC_HELP_STRING([--with-include-path=PATH], [set direvent runtime include path])], [INCLUDE_PATH_ARGS=$withval]) INCLUDE_PATH_ARGS=$(echo "$INCLUDE_PATH_ARGS" | sed 's/:/\",\"/g;s/^/\"/;s/$/\"/') # Initialize the test suite. AC_CONFIG_TESTDIR(tests) AC_CONFIG_FILES([tests/Makefile tests/atlocal po/Makefile.in]) AM_MISSING_PROG([AUTOM4TE], [autom4te]) AC_CONFIG_COMMANDS([status],[ cat <<EOT Selected interface: $iface EOT ],[ iface=$iface ]) AC_CONFIG_FILES([Makefile src/Makefile doc/Makefile]) AC_OUTPUT �������������������������������������direvent-5.2/aclocal.m4�����������������������������������������������������������������������������0000644�0001750�0001750�00000126401�13512402621�015026� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# generated automatically by aclocal 1.15 -*- Autoconf -*- # Copyright (C) 1996-2014 Free Software Foundation, Inc. # This file 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. m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, [m4_warning([this file was generated for autoconf 2.69. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) # Copyright (C) 2002-2014 Free Software Foundation, Inc. # # This file 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. # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.15' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.15], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.15])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file 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. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to # '$srcdir', '$srcdir/..', or '$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is '.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997-2014 Free Software Foundation, Inc. # # This file 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. # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ([2.52])dnl m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999-2014 Free Software Foundation, Inc. # # This file 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. # There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], [$1], [CXX], [depcc="$CXX" am_compiler_list=], [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], [$1], [UPC], [depcc="$UPC" am_compiler_list=], [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES. AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE([dependency-tracking], [dnl AS_HELP_STRING( [--enable-dependency-tracking], [do not reject slow dependency extractors]) AS_HELP_STRING( [--disable-dependency-tracking], [speeds up one-time build])]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl AC_SUBST([am__nodep])dnl _AM_SUBST_NOTMAKE([am__nodep])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999-2014 Free Software Foundation, Inc. # # This file 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. # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named 'Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running 'make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "$am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each '.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996-2014 Free Software Foundation, Inc. # # This file 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 macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O. m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC]) [_AM_PROG_CC_C_O ]) # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.65])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [AC_DIAGNOSE([obsolete], [$0: two- and three-arguments forms are deprecated.]) m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if( m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), [ok:ok],, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) AM_MISSING_PROG([AUTOCONF], [autoconf]) AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) AM_MISSING_PROG([AUTOHEADER], [autoheader]) AM_MISSING_PROG([MAKEINFO], [makeinfo]) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html> # <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html> AC_SUBST([mkdir_p], ['$(MKDIR_P)']) # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES([CC])], [m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES([CXX])], [m4_define([AC_PROG_CXX], m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES([OBJC])], [m4_define([AC_PROG_OBJC], m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], [_AM_DEPENDENCIES([OBJCXX])], [m4_define([AC_PROG_OBJCXX], m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl ]) AC_REQUIRE([AM_SILENT_RULES])dnl dnl The testsuite driver may need to know about EXEEXT, so add the dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542> Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: <http://www.gnu.org/software/coreutils/>. If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) fi fi dnl The trailing newline in this macro's definition is deliberate, for dnl backward compatibility and to allow trailing 'dnl'-style comments dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841. ]) dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file 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. # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST([install_sh])]) # Copyright (C) 2003-2014 Free Software Foundation, Inc. # # This file 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. # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Copyright (C) 1998-2014 Free Software Foundation, Inc. # # This file 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. # AM_PROG_LEX # ----------- # Autoconf leaves LEX=: if lex or flex can't be found. Change that to a # "missing" invocation, for better error output. AC_DEFUN([AM_PROG_LEX], [AC_PREREQ([2.50])dnl AC_REQUIRE([AM_MISSING_HAS_RUN])dnl AC_REQUIRE([AC_PROG_LEX])dnl if test "$LEX" = :; then LEX=${am_missing_run}flex fi]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file 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. # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from 'make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997-2014 Free Software Foundation, Inc. # # This file 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. # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it is modern enough. # If it is, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= AC_MSG_WARN(['missing' script is too old or missing]) fi ]) # Copyright (C) 2003-2014 Free Software Foundation, Inc. # # This file 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. # AM_PROG_MKDIR_P # --------------- # Check for 'mkdir -p'. AC_DEFUN([AM_PROG_MKDIR_P], [AC_PREREQ([2.60])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl dnl FIXME we are no longer going to remove this! adjust warning dnl FIXME message accordingly. AC_DIAGNOSE([obsolete], [$0: this macro is deprecated, and will soon be removed. You should use the Autoconf-provided 'AC][_PROG_MKDIR_P' macro instead, and use '$(MKDIR_P)' instead of '$(mkdir_p)'in your Makefile.am files.]) dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, dnl while keeping a definition of mkdir_p for backward compatibility. dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of dnl Makefile.ins that do not define MKDIR_P, so we do our own dnl adjustment using top_builddir (which is defined more often than dnl MKDIR_P). AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl case $mkdir_p in [[\\/$]]* | ?:[[\\/]]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file 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. # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), [1])]) # _AM_SET_OPTIONS(OPTIONS) # ------------------------ # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Copyright (C) 1999-2014 Free Software Foundation, Inc. # # This file 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. # _AM_PROG_CC_C_O # --------------- # Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC # to automatically call this. AC_DEFUN([_AM_PROG_CC_C_O], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([compile])dnl AC_LANG_PUSH([C])dnl AC_CACHE_CHECK( [whether $CC understands -c and -o together], [am_cv_prog_cc_c_o], [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i]) if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) # Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file 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. # AM_RUN_LOG(COMMAND) # ------------------- # Run COMMAND, save the exit status in ac_status, and log it. # (This has been adapted from Autoconf's _AC_RUN_LOG macro.) AC_DEFUN([AM_RUN_LOG], [{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD (exit $ac_status); }]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996-2014 Free Software Foundation, Inc. # # This file 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. # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi if test "$[2]" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT([yes]) # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi AC_CONFIG_COMMANDS_PRE( [AC_MSG_CHECKING([that generated files are newer than configure]) if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi AC_MSG_RESULT([done])]) rm -f conftest.file ]) # Copyright (C) 2009-2014 Free Software Foundation, Inc. # # This file 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. # AM_SILENT_RULES([DEFAULT]) # -------------------------- # Enable less verbose build rules; with the default set to DEFAULT # ("yes" being less verbose, "no" or empty being verbose). AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], [dnl AS_HELP_STRING( [--enable-silent-rules], [less verbose build output (undo: "make V=1")]) AS_HELP_STRING( [--disable-silent-rules], [verbose build output (undo: "make V=0")])dnl ]) case $enable_silent_rules in @%:@ ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; esac dnl dnl A few 'make' implementations (e.g., NonStop OS and NextStep) dnl do not support nested variable expansions. dnl See automake bug#9928 and bug#10237. am_make=${MAKE-make} AC_CACHE_CHECK([whether $am_make supports nested variables], [am_cv_make_support_nested_variables], [if AS_ECHO([['TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi]) if test $am_cv_make_support_nested_variables = yes; then dnl Using '$V' instead of '$(V)' breaks IRIX make. AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AC_SUBST([AM_V])dnl AM_SUBST_NOTMAKE([AM_V])dnl AC_SUBST([AM_DEFAULT_V])dnl AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl AC_SUBST([AM_DEFAULT_VERBOSITY])dnl AM_BACKSLASH='\' AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) # Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file 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. # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor 'install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in "make install-strip", and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006-2014 Free Software Foundation, Inc. # # This file 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. # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # -------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004-2014 Free Software Foundation, Inc. # # This file 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. # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of 'v7', 'ustar', or 'pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar # AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar], [# The POSIX 1988 'ustar' format is defined with fixed-size fields. # There is notably a 21 bits limit for the UID and the GID. In fact, # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 # and bug#13588). am_max_uid=2097151 # 2^21 - 1 am_max_gid=$am_max_uid # The $UID and $GID variables are not portable, so we need to resort # to the POSIX-mandated id(1) utility. Errors in the 'id' calls # below are definitely unexpected, so allow the users to see them # (that is, avoid stderr redirection). am_uid=`id -u || echo unknown` am_gid=`id -g || echo unknown` AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) if test $am_uid -le $am_max_uid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) if test $am_gid -le $am_max_gid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi], [pax], [], [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Go ahead even if we have the value already cached. We do so because we # need to set the values for the 'am__tar' and 'am__untar' variables. _am_tools=${am_cv_prog_tar_$1-$_am_tools} for _am_tool in $_am_tools; do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works. rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar <conftest.tar]) AM_RUN_LOG([cat conftest.dir/file]) grep GrepMe conftest.dir/file >/dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([grecs/am/grecs.m4]) m4_include([am/gettext.m4]) m4_include([am/iconv.m4]) m4_include([am/intlmacosx.m4]) m4_include([am/lib-ld.m4]) m4_include([am/lib-link.m4]) m4_include([am/lib-prefix.m4]) m4_include([am/nls.m4]) m4_include([am/po.m4]) m4_include([am/progtest.m4]) m4_include([acinclude.m4]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/INSTALL��������������������������������������������������������������������������������0000644�0001750�0000000�00000036610�13266701462�014240� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Installation Instructions ************************* Copyright (C) 1994-1996, 1999-2002, 2004-2013 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. This file is offered as-is, without warranty of any kind. Basic Installation ================== Briefly, the shell command `./configure && make && make install' should configure, build, and install this package. The following more-detailed instructions are generic; see the `README' file for instructions specific to this package. Some packages provide this `INSTALL' file but do not implement all of the features documented below. The lack of an optional feature in a given package is not necessarily a bug. More recommendations for GNU packages can be found in *note Makefile Conventions: (standards)Makefile Conventions. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). It can also use an optional file (typically called `config.cache' and enabled with `--cache-file=config.cache' or simply `-C') that saves the results of its tests to speed up reconfiguring. Caching is disabled by default to prevent problems with accidental use of stale cache files. If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README' so they can be considered for the next release. If you are using the cache, and at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.ac' (or `configure.in') is used to create `configure' by a program called `autoconf'. You need `configure.ac' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. Running `configure' might take a while. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package, generally using the just-built uninstalled binaries. 4. Type `make install' to install the programs and any data files and documentation. When installing into a prefix owned by root, it is recommended that the package be configured and built as a regular user, and only the `make install' phase executed with root privileges. 5. Optionally, type `make installcheck' to repeat any self-tests, but this time using the binaries in their final installed location. This target does not install anything. Running this target as a regular user, particularly if the prior `make install' required root privileges, verifies that the installation completed correctly. 6. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. 7. Often, you can also type `make uninstall' to remove the installed files again. In practice, not all packages have tested that uninstallation works correctly, even though it is required by the GNU Coding Standards. 8. Some packages, particularly those that use Automake, provide `make distcheck', which can by used by developers to test that all other targets like `make install' and `make uninstall' work correctly. This target is generally not run by end users. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. Run `./configure --help' for details on some of the pertinent environment variables. You can give `configure' initial values for configuration parameters by setting variables in the command line or in the environment. Here is an example: ./configure CC=c99 CFLAGS=-g LIBS=-lposix *Note Defining Variables::, for more details. Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you can use GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. This is known as a "VPATH" build. With a non-GNU `make', it is safer to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. On MacOS X 10.5 and later systems, you can create libraries and executables that work on multiple system types--known as "fat" or "universal" binaries--by specifying multiple `-arch' options to the compiler but only a single `-arch' option to the preprocessor. Like this: ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CPP="gcc -E" CXXCPP="g++ -E" This is not guaranteed to produce working output in all cases, you may have to build one architecture at a time and combine the results using the `lipo' tool if you have problems. Installation Names ================== By default, `make install' installs the package's commands under `/usr/local/bin', include files under `/usr/local/include', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PREFIX', where PREFIX must be an absolute file name. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you pass the option `--exec-prefix=PREFIX' to `configure', the package uses PREFIX as the prefix for installing programs and libraries. Documentation and other data files still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=DIR' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories you can set and what kinds of files go in them. In general, the default for these options is expressed in terms of `${prefix}', so that specifying just `--prefix' will affect all of the other directory specifications that were not explicitly provided. The most portable way to affect installation locations is to pass the correct locations to `configure'; however, many packages provide one or both of the following shortcuts of passing variable assignments to the `make install' command line to change installation locations without having to reconfigure or recompile. The first method involves providing an override variable for each affected directory. For example, `make install prefix=/alternate/directory' will choose an alternate location for all directory configuration variables that were expressed in terms of `${prefix}'. Any directories that were specified during `configure', but not in terms of `${prefix}', must each be overridden at install time for the entire installation to be relocated. The approach of makefile variable overrides for each directory variable is required by the GNU Coding Standards, and ideally causes no recompilation. However, some platforms have known limitations with the semantics of shared libraries that end up requiring recompilation when using this method, particularly noticeable in packages that use GNU Libtool. The second method involves providing the `DESTDIR' variable. For example, `make install DESTDIR=/alternate/directory' will prepend `/alternate/directory' before all installation names. The approach of `DESTDIR' overrides is not required by the GNU Coding Standards, and does not work on platforms that have drive letters. On the other hand, it does better at avoiding recompilation issues, and works well even when some directory options were not specified in terms of `${prefix}' at `configure' time. Optional Features ================= If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The `README' should mention any `--enable-' and `--with-' options that the package recognizes. For packages that use the X Window System, `configure' can usually find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. Some packages offer the ability to configure how verbose the execution of `make' will be. For these packages, running `./configure --enable-silent-rules' sets the default to minimal output, which can be overridden with `make V=1'; while running `./configure --disable-silent-rules' sets the default to verbose, which can be overridden with `make V=0'. Particular systems ================== On HP-UX, the default C compiler is not ANSI C compatible. If GNU CC is not installed, it is recommended to use the following options in order to use an ANSI C compiler: ./configure CC="cc -Ae -D_XOPEN_SOURCE=500" and if that doesn't work, install pre-built binaries of GCC for HP-UX. HP-UX `make' updates targets which have the same time stamps as their prerequisites, which makes it generally unusable when shipped generated files such as `configure' are involved. Use GNU `make' instead. On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot parse its `<wchar.h>' header file. The option `-nodtk' can be used as a workaround. If GNU CC is not installed, it is therefore recommended to try ./configure CC="cc" and if that doesn't work, try ./configure CC="cc -nodtk" On Solaris, don't put `/usr/ucb' early in your `PATH'. This directory contains several dysfunctional programs; working variants of these programs are available in `/usr/bin'. So, if you need `/usr/ucb' in your `PATH', put it _after_ `/usr/bin'. On Haiku, software installed for all users goes in `/boot/common', not `/usr/local'. It is recommended to use the following options: ./configure --prefix=/boot/common Specifying the System Type ========================== There may be some features `configure' cannot figure out automatically, but needs to determine by the type of machine the package will run on. Usually, assuming the package is built to be run on the _same_ architectures, `configure' can figure that out, but if it prints a message saying it cannot guess the machine type, give it the `--build=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name which has the form: CPU-COMPANY-SYSTEM where SYSTEM can have one of these forms: OS KERNEL-OS See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the machine type. If you are _building_ compiler tools for cross-compiling, you should use the option `--target=TYPE' to select the type of system they will produce code for. If you want to _use_ a cross compiler, that generates code for a platform different from the build platform, you should specify the "host" platform (i.e., that on which the generated programs will eventually be run) with `--host=TYPE'. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. Defining Variables ================== Variables not defined in a site shell script can be set in the environment passed to `configure'. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set them in the `configure' command line, using `VAR=value'. For example: ./configure CC=/usr/local2/bin/gcc causes the specified `gcc' to be used as the C compiler (unless it is overridden in the site shell script). Unfortunately, this technique does not work for `CONFIG_SHELL' due to an Autoconf limitation. Until the limitation is lifted, you can use this workaround: CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash `configure' Invocation ====================== `configure' recognizes the following options to control how it operates. `--help' `-h' Print a summary of all of the options to `configure', and exit. `--help=short' `--help=recursive' Print a summary of the options unique to this package's `configure', and exit. The `short' variant lists options used only in the top level, while the `recursive' variant lists options also present in any nested packages. `--version' `-V' Print the version of Autoconf used to generate the `configure' script, and exit. `--cache-file=FILE' Enable the cache: use and save the results of the tests in FILE, traditionally `config.cache'. FILE defaults to `/dev/null' to disable caching. `--config-cache' `-C' Alias for `--cache-file=config.cache'. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to `/dev/null' (any error messages will still be shown). `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `--prefix=DIR' Use DIR as the installation prefix. *note Installation Names:: for more details, including other options available for fine-tuning the installation locations. `--no-create' `-n' Run the configure checks, but stop before creating any output files. `configure' also accepts some other, not widely useful, options. Run `configure --help' for more details. ������������������������������������������������������������������������������������������������������������������������direvent-5.2/am/������������������������������������������������������������������������������������0000755�0001750�0001750�00000000000�13512403133�013556� 5����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/am/lib-link.m4�������������������������������������������������������������������������0000644�0001750�0001750�00000100202�13244106112�015513� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# lib-link.m4 serial 21 (gettext-0.18) dnl Copyright (C) 2001-2010 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. AC_PREREQ([2.54]) dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and dnl the libraries corresponding to explicit and implicit dependencies. dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and dnl augments the CPPFLAGS variable. dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem. AC_DEFUN([AC_LIB_LINKFLAGS], [ AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) pushdef([Name],[translit([$1],[./-], [___])]) pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [ AC_LIB_LINKFLAGS_BODY([$1], [$2]) ac_cv_lib[]Name[]_libs="$LIB[]NAME" ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME" ac_cv_lib[]Name[]_cppflags="$INC[]NAME" ac_cv_lib[]Name[]_prefix="$LIB[]NAME[]_PREFIX" ]) LIB[]NAME="$ac_cv_lib[]Name[]_libs" LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs" INC[]NAME="$ac_cv_lib[]Name[]_cppflags" LIB[]NAME[]_PREFIX="$ac_cv_lib[]Name[]_prefix" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) AC_SUBST([LIB]NAME) AC_SUBST([LTLIB]NAME) AC_SUBST([LIB]NAME[_PREFIX]) dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the dnl results of this search when this library appears as a dependency. HAVE_LIB[]NAME=yes popdef([NAME]) popdef([Name]) ]) dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode, [missing-message]) dnl searches for libname and the libraries corresponding to explicit and dnl implicit dependencies, together with the specified include files and dnl the ability to compile and link the specified testcode. The missing-message dnl defaults to 'no' and may contain additional hints for the user. dnl If found, it sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} dnl and LTLIB${NAME} variables and augments the CPPFLAGS variable, and dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty. dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem. AC_DEFUN([AC_LIB_HAVE_LINKFLAGS], [ AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) pushdef([Name],[translit([$1],[./-], [___])]) pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME dnl accordingly. AC_LIB_LINKFLAGS_BODY([$1], [$2]) dnl Add $INC[]NAME to CPPFLAGS before performing the following checks, dnl because if the user has installed lib[]Name and not disabled its use dnl via --without-lib[]Name-prefix, he wants to use it. ac_save_CPPFLAGS="$CPPFLAGS" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [ ac_save_LIBS="$LIBS" dnl If $LIB[]NAME contains some -l options, add it to the end of LIBS, dnl because these -l options might require -L options that are present in dnl LIBS. -l options benefit only from the -L options listed before it. dnl Otherwise, add it to the front of LIBS, because it may be a static dnl library that depends on another static library that is present in LIBS. dnl Static libraries benefit only from the static libraries listed after dnl it. case " $LIB[]NAME" in *" -l"*) LIBS="$LIBS $LIB[]NAME" ;; *) LIBS="$LIB[]NAME $LIBS" ;; esac AC_TRY_LINK([$3], [$4], [ac_cv_lib[]Name=yes], [ac_cv_lib[]Name='m4_if([$5], [], [no], [[$5]])']) LIBS="$ac_save_LIBS" ]) if test "$ac_cv_lib[]Name" = yes; then HAVE_LIB[]NAME=yes AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the lib][$1 library.]) AC_MSG_CHECKING([how to link with lib[]$1]) AC_MSG_RESULT([$LIB[]NAME]) else HAVE_LIB[]NAME=no dnl If $LIB[]NAME didn't lead to a usable library, we don't need dnl $INC[]NAME either. CPPFLAGS="$ac_save_CPPFLAGS" LIB[]NAME= LTLIB[]NAME= LIB[]NAME[]_PREFIX= fi AC_SUBST([HAVE_LIB]NAME) AC_SUBST([LIB]NAME) AC_SUBST([LTLIB]NAME) AC_SUBST([LIB]NAME[_PREFIX]) popdef([NAME]) popdef([Name]) ]) dnl Determine the platform dependent parameters needed to use rpath: dnl acl_libext, dnl acl_shlibext, dnl acl_hardcode_libdir_flag_spec, dnl acl_hardcode_libdir_separator, dnl acl_hardcode_direct, dnl acl_hardcode_minus_L. AC_DEFUN([AC_LIB_RPATH], [ dnl Tell automake >= 1.10 to complain if config.rpath is missing. m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([config.rpath])]) AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir AC_CACHE_CHECK([for shared library run path origin], [acl_cv_rpath], [ CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh . ./conftest.sh rm -f ./conftest.sh acl_cv_rpath=done ]) wl="$acl_cv_wl" acl_libext="$acl_cv_libext" acl_shlibext="$acl_cv_shlibext" acl_libname_spec="$acl_cv_libname_spec" acl_library_names_spec="$acl_cv_library_names_spec" acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" acl_hardcode_direct="$acl_cv_hardcode_direct" acl_hardcode_minus_L="$acl_cv_hardcode_minus_L" dnl Determine whether the user wants rpath handling at all. AC_ARG_ENABLE([rpath], [ --disable-rpath do not hardcode runtime library paths], :, enable_rpath=yes) ]) dnl AC_LIB_FROMPACKAGE(name, package) dnl declares that libname comes from the given package. The configure file dnl will then not have a --with-libname-prefix option but a dnl --with-package-prefix option. Several libraries can come from the same dnl package. This declaration must occur before an AC_LIB_LINKFLAGS or similar dnl macro call that searches for libname. AC_DEFUN([AC_LIB_FROMPACKAGE], [ pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) define([acl_frompackage_]NAME, [$2]) popdef([NAME]) pushdef([PACK],[$2]) pushdef([PACKUP],[translit(PACK,[abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) define([acl_libsinpackage_]PACKUP, m4_ifdef([acl_libsinpackage_]PACKUP, [acl_libsinpackage_]PACKUP[[, ]],)[lib$1]) popdef([PACKUP]) popdef([PACK]) ]) dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and dnl the libraries corresponding to explicit and implicit dependencies. dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables. dnl Also, sets the LIB${NAME}_PREFIX variable to nonempty if libname was found dnl in ${LIB${NAME}_PREFIX}/$acl_libdirstem. AC_DEFUN([AC_LIB_LINKFLAGS_BODY], [ AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) pushdef([PACK],[m4_ifdef([acl_frompackage_]NAME, [acl_frompackage_]NAME, lib[$1])]) pushdef([PACKUP],[translit(PACK,[abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) pushdef([PACKLIBS],[m4_ifdef([acl_frompackage_]NAME, [acl_libsinpackage_]PACKUP, lib[$1])]) dnl Autoconf >= 2.61 supports dots in --with options. pushdef([P_A_C_K],[m4_if(m4_version_compare(m4_defn([m4_PACKAGE_VERSION]),[2.61]),[-1],[translit(PACK,[.],[_])],PACK)]) dnl By default, look in $includedir and $libdir. use_additional=yes AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) AC_ARG_WITH(P_A_C_K[-prefix], [[ --with-]]P_A_C_K[[-prefix[=DIR] search for ]PACKLIBS[ in DIR/include and DIR/lib --without-]]P_A_C_K[[-prefix don't search for ]PACKLIBS[ in includedir and libdir]], [ if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" if test "$acl_libdirstem2" != "$acl_libdirstem" \ && ! test -d "$withval/$acl_libdirstem"; then additional_libdir="$withval/$acl_libdirstem2" fi fi fi ]) dnl Search the library and its dependencies in $additional_libdir and dnl $LDFLAGS. Using breadth-first-seach. LIB[]NAME= LTLIB[]NAME= INC[]NAME= LIB[]NAME[]_PREFIX= dnl HAVE_LIB${NAME} is an indicator that LIB${NAME}, LTLIB${NAME} have been dnl computed. So it has to be reset here. HAVE_LIB[]NAME= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='$1 $2' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" dnl See if it was already located by an earlier AC_LIB_LINKFLAGS dnl or AC_LIB_HAVE_LINKFLAGS call. uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value" else dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined dnl that this library doesn't exist. So just drop it. : fi else dnl Search the library lib$name in $additional_libdir and $LDFLAGS dnl and the already constructed $LIBNAME/$LTLIBNAME. found_dir= found_la= found_so= found_a= eval libname=\"$acl_libname_spec\" # typically: libname=lib$name if test -n "$acl_shlibext"; then shrext=".$acl_shlibext" # typically: shrext=.so else shrext= fi if test $use_additional = yes; then dir="$additional_libdir" dnl The same code as in the loop below: dnl First look for a shared library. if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi dnl Then look for a static library. if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` dnl First look for a shared library. if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi dnl Then look for a static library. if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then dnl Found the library. LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then dnl Linking with a shared library. We attempt to hardcode its dnl directory into the executable's runpath, unless it's the dnl standard /usr/lib. if test "$enable_rpath" = no \ || test "X$found_dir" = "X/usr/$acl_libdirstem" \ || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then dnl No hardcoding is needed. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else dnl Use an explicit option to hardcode DIR into the resulting dnl binary. dnl Potentially add DIR to ltrpathdirs. dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi dnl The hardcoding into $LIBNAME is system dependent. if test "$acl_hardcode_direct" = yes; then dnl Using DIR/libNAME.so during linking hardcodes DIR into the dnl resulting binary. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then dnl Use an explicit option to hardcode DIR into the resulting dnl binary. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" dnl Potentially add DIR to rpathdirs. dnl The rpathdirs will be appended to $LIBNAME at the end. haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else dnl Rely on "-L$found_dir". dnl But don't add it if it's already contained in the LDFLAGS dnl or the already constructed $LIBNAME haveit= for x in $LDFLAGS $LIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir" fi if test "$acl_hardcode_minus_L" != no; then dnl FIXME: Not sure whether we should use dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" dnl here. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else dnl We cannot use $acl_hardcode_runpath_var and LD_RUN_PATH dnl here, because this doesn't fit in flags passed to the dnl compiler. So give up. No hardcoding. This affects only dnl very old systems. dnl FIXME: Not sure whether we should use dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" dnl here. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then dnl Linking with a static library. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a" else dnl We shouldn't come here, but anyway it's good to have a dnl fallback. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name" fi fi dnl Assume the include files are nearby. additional_includedir= case "$found_dir" in */$acl_libdirstem | */$acl_libdirstem/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` if test "$name" = '$1'; then LIB[]NAME[]_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem2 | */$acl_libdirstem2/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` if test "$name" = '$1'; then LIB[]NAME[]_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then dnl Potentially add $additional_includedir to $INCNAME. dnl But don't add it dnl 1. if it's the standard /usr/include, dnl 2. if it's /usr/local/include and we are using GCC on Linux, dnl 3. if it's already present in $CPPFLAGS or the already dnl constructed $INCNAME, dnl 4. if it doesn't exist as a directory. if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INC[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then dnl Really add $additional_includedir to $INCNAME. INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir" fi fi fi fi fi dnl Look for dependencies. if test -n "$found_la"; then dnl Read the .la file. It defines the variables dnl dlname, library_names, old_library, dependency_libs, current, dnl age, revision, installed, dlopen, dlpreopen, libdir. save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" dnl We use only dependency_libs. for dep in $dependency_libs; do case "$dep" in -L*) additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME. dnl But don't add it dnl 1. if it's the standard /usr/lib, dnl 2. if it's /usr/local/lib and we are using GCC on Linux, dnl 3. if it's already present in $LDFLAGS or the already dnl constructed $LIBNAME, dnl 4. if it doesn't exist as a directory. if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \ && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then haveit= if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LIBNAME. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir" fi fi haveit= for x in $LDFLAGS $LTLIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LTLIBNAME. LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then dnl Potentially add DIR to rpathdirs. dnl The rpathdirs will be appended to $LIBNAME at the end. haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi dnl Potentially add DIR to ltrpathdirs. dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) dnl Handle this in the next round. names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` ;; *.la) dnl Handle this in the next round. Throw away the .la's dnl directory; it is already contained in a preceding -L dnl option. names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) dnl Most likely an immediate library name. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep" LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep" ;; esac done fi else dnl Didn't find the library; assume it is in the system directories dnl known to the linker and runtime loader. (All the system dnl directories known to the linker should also be known to the dnl runtime loader, otherwise the system is severely misconfigured.) LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$acl_hardcode_libdir_separator"; then dnl Weird platform: only the last -rpath option counts, the user must dnl pass all path elements in one option. We can arrange that for a dnl single library, but not when more than one $LIBNAMEs are used. alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" done dnl Note: acl_hardcode_libdir_flag_spec uses $libdir and $wl. acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" else dnl The -rpath options are cumulative. for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then dnl When using libtool, the option that works for both libraries and dnl executables is -R. The -R options are cumulative. for found_dir in $ltrpathdirs; do LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir" done fi popdef([P_A_C_K]) popdef([PACKLIBS]) popdef([PACKUP]) popdef([PACK]) popdef([NAME]) ]) dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR, dnl unless already present in VAR. dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes dnl contains two or three consecutive elements that belong together. AC_DEFUN([AC_LIB_APPENDTOVAR], [ for element in [$2]; do haveit= for x in $[$1]; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then [$1]="${[$1]}${[$1]:+ }$element" fi done ]) dnl For those cases where a variable contains several -L and -l options dnl referring to unknown libraries and directories, this macro determines the dnl necessary additional linker options for the runtime path. dnl AC_LIB_LINKFLAGS_FROM_LIBS([LDADDVAR], [LIBSVALUE], [USE-LIBTOOL]) dnl sets LDADDVAR to linker options needed together with LIBSVALUE. dnl If USE-LIBTOOL evaluates to non-empty, linking with libtool is assumed, dnl otherwise linking without libtool is assumed. AC_DEFUN([AC_LIB_LINKFLAGS_FROM_LIBS], [ AC_REQUIRE([AC_LIB_RPATH]) AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) $1= if test "$enable_rpath" != no; then if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then dnl Use an explicit option to hardcode directories into the resulting dnl binary. rpathdirs= next= for opt in $2; do if test -n "$next"; then dir="$next" dnl No need to hardcode the standard /usr/lib. if test "X$dir" != "X/usr/$acl_libdirstem" \ && test "X$dir" != "X/usr/$acl_libdirstem2"; then rpathdirs="$rpathdirs $dir" fi next= else case $opt in -L) next=yes ;; -L*) dir=`echo "X$opt" | sed -e 's,^X-L,,'` dnl No need to hardcode the standard /usr/lib. if test "X$dir" != "X/usr/$acl_libdirstem" \ && test "X$dir" != "X/usr/$acl_libdirstem2"; then rpathdirs="$rpathdirs $dir" fi next= ;; *) next= ;; esac fi done if test "X$rpathdirs" != "X"; then if test -n ""$3""; then dnl libtool is used for linking. Use -R options. for dir in $rpathdirs; do $1="${$1}${$1:+ }-R$dir" done else dnl The linker is used for linking directly. if test -n "$acl_hardcode_libdir_separator"; then dnl Weird platform: only the last -rpath option counts, the user dnl must pass all path elements in one option. alldirs= for dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$dir" done acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" $1="$flag" else dnl The -rpath options are cumulative. for dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" $1="${$1}${$1:+ }$flag" done fi fi fi fi fi AC_SUBST([$1]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/am/progtest.m4�������������������������������������������������������������������������0000644�0001750�0001750�00000005573�13244106112�015700� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# progtest.m4 serial 6 (gettext-0.18) dnl Copyright (C) 1996-2003, 2005, 2008-2010 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper <drepper@cygnus.com>, 1996. AC_PREREQ([2.50]) # Search path for a program which passes the given test. dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR, dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]]) AC_DEFUN([AM_PATH_PROG_WITH_TEST], [ # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi # Find out how to test for executable files. Don't use a zero-byte file, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "$2", so it can be a program name with args. set dummy $2; ac_word=[$]2 AC_MSG_CHECKING([for $ac_word]) AC_CACHE_VAL([ac_cv_path_$1], [case "[$]$1" in [[\\/]]* | ?:[[\\/]]*) ac_cv_path_$1="[$]$1" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in ifelse([$5], , $PATH, [$5]); do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then echo "$as_me: trying $ac_dir/$ac_word..." >&AS_MESSAGE_LOG_FD if [$3]; then ac_cv_path_$1="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" dnl If no 4th arg is given, leave the cache variable unset, dnl so AC_PATH_PROGS will keep looking. ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" ])dnl ;; esac])dnl $1="$ac_cv_path_$1" if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then AC_MSG_RESULT([$][$1]) else AC_MSG_RESULT([no]) fi AC_SUBST([$1])dnl ]) �������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/am/lib-prefix.m4�����������������������������������������������������������������������0000644�0001750�0001750�00000020422�13244106112�016060� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# lib-prefix.m4 serial 7 (gettext-0.18) dnl Copyright (C) 2001-2005, 2008-2010 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't dnl require excessive bracketing. ifdef([AC_HELP_STRING], [AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])], [AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])]) dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed dnl to access previously installed libraries. The basic assumption is that dnl a user will want packages to use other packages he previously installed dnl with the same --prefix option. dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate dnl libraries, but is otherwise very convenient. AC_DEFUN([AC_LIB_PREFIX], [ AC_BEFORE([$0], [AC_LIB_LINKFLAGS]) AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) dnl By default, look in $includedir and $libdir. use_additional=yes AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) AC_LIB_ARG_WITH([lib-prefix], [ --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib --without-lib-prefix don't search for libraries in includedir and libdir], [ if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" fi fi ]) if test $use_additional = yes; then dnl Potentially add $additional_includedir to $CPPFLAGS. dnl But don't add it dnl 1. if it's the standard /usr/include, dnl 2. if it's already present in $CPPFLAGS, dnl 3. if it's /usr/local/include and we are using GCC on Linux, dnl 4. if it doesn't exist as a directory. if test "X$additional_includedir" != "X/usr/include"; then haveit= for x in $CPPFLAGS; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then if test -d "$additional_includedir"; then dnl Really add $additional_includedir to $CPPFLAGS. CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir" fi fi fi fi dnl Potentially add $additional_libdir to $LDFLAGS. dnl But don't add it dnl 1. if it's the standard /usr/lib, dnl 2. if it's already present in $LDFLAGS, dnl 3. if it's /usr/local/lib and we are using GCC on Linux, dnl 4. if it doesn't exist as a directory. if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then haveit= for x in $LDFLAGS; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then if test -n "$GCC"; then case $host_os in linux*) haveit=yes;; esac fi fi if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LDFLAGS. LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir" fi fi fi fi fi ]) dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix, dnl acl_final_exec_prefix, containing the values to which $prefix and dnl $exec_prefix will expand at the end of the configure script. AC_DEFUN([AC_LIB_PREPARE_PREFIX], [ dnl Unfortunately, prefix and exec_prefix get only finally determined dnl at the end of configure. if test "X$prefix" = "XNONE"; then acl_final_prefix="$ac_default_prefix" else acl_final_prefix="$prefix" fi if test "X$exec_prefix" = "XNONE"; then acl_final_exec_prefix='${prefix}' else acl_final_exec_prefix="$exec_prefix" fi acl_save_prefix="$prefix" prefix="$acl_final_prefix" eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" prefix="$acl_save_prefix" ]) dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the dnl variables prefix and exec_prefix bound to the values they will have dnl at the end of the configure script. AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX], [ acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" $1 exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" ]) dnl AC_LIB_PREPARE_MULTILIB creates dnl - a variable acl_libdirstem, containing the basename of the libdir, either dnl "lib" or "lib64" or "lib/64", dnl - a variable acl_libdirstem2, as a secondary possible value for dnl acl_libdirstem, either the same as acl_libdirstem or "lib/sparcv9" or dnl "lib/amd64". AC_DEFUN([AC_LIB_PREPARE_MULTILIB], [ dnl There is no formal standard regarding lib and lib64. dnl On glibc systems, the current practice is that on a system supporting dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under dnl $prefix/lib64 and 32-bit libraries go under $prefix/lib. We determine dnl the compiler's default mode by looking at the compiler's library search dnl path. If at least one of its elements ends in /lib64 or points to a dnl directory whose absolute pathname ends in /lib64, we assume a 64-bit ABI. dnl Otherwise we use the default, namely "lib". dnl On Solaris systems, the current practice is that on a system supporting dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under dnl $prefix/lib/64 (which is a symlink to either $prefix/lib/sparcv9 or dnl $prefix/lib/amd64) and 32-bit libraries go under $prefix/lib. AC_REQUIRE([AC_CANONICAL_HOST]) acl_libdirstem=lib acl_libdirstem2= case "$host_os" in solaris*) dnl See Solaris 10 Software Developer Collection > Solaris 64-bit Developer's Guide > The Development Environment dnl <http://docs.sun.com/app/docs/doc/816-5138/dev-env?l=en&a=view>. dnl "Portable Makefiles should refer to any library directories using the 64 symbolic link." dnl But we want to recognize the sparcv9 or amd64 subdirectory also if the dnl symlink is missing, so we set acl_libdirstem2 too. AC_CACHE_CHECK([for 64-bit host], [gl_cv_solaris_64bit], [AC_EGREP_CPP([sixtyfour bits], [ #ifdef _LP64 sixtyfour bits #endif ], [gl_cv_solaris_64bit=yes], [gl_cv_solaris_64bit=no]) ]) if test $gl_cv_solaris_64bit = yes; then acl_libdirstem=lib/64 case "$host_cpu" in sparc*) acl_libdirstem2=lib/sparcv9 ;; i*86 | x86_64) acl_libdirstem2=lib/amd64 ;; esac fi ;; *) searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` if test -n "$searchpath"; then acl_save_IFS="${IFS= }"; IFS=":" for searchdir in $searchpath; do if test -d "$searchdir"; then case "$searchdir" in */lib64/ | */lib64 ) acl_libdirstem=lib64 ;; */../ | */.. ) # Better ignore directories of this form. They are misleading. ;; *) searchdir=`cd "$searchdir" && pwd` case "$searchdir" in */lib64 ) acl_libdirstem=lib64 ;; esac ;; esac fi done IFS="$acl_save_IFS" fi ;; esac test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem" ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/am/nls.m4������������������������������������������������������������������������������0000644�0001750�0001750�00000002315�13244106112�014614� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# nls.m4 serial 5 (gettext-0.18) dnl Copyright (C) 1995-2003, 2005-2006, 2008-2010 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper <drepper@cygnus.com>, 1995-2000. dnl Bruno Haible <haible@clisp.cons.org>, 2000-2003. AC_PREREQ([2.50]) AC_DEFUN([AM_NLS], [ AC_MSG_CHECKING([whether NLS is requested]) dnl Default is enabled NLS AC_ARG_ENABLE([nls], [ --disable-nls do not use Native Language Support], USE_NLS=$enableval, USE_NLS=yes) AC_MSG_RESULT([$USE_NLS]) AC_SUBST([USE_NLS]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/am/gettext.m4��������������������������������������������������������������������������0000644�0001750�0001750�00000035132�13244106112�015507� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# gettext.m4 serial 63 (gettext-0.18) dnl Copyright (C) 1995-2010 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper <drepper@cygnus.com>, 1995-2000. dnl Bruno Haible <haible@clisp.cons.org>, 2000-2006, 2008-2010. dnl Macro to add for using GNU gettext. dnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]). dnl INTLSYMBOL can be one of 'external', 'no-libtool', 'use-libtool'. The dnl default (if it is not specified or empty) is 'no-libtool'. dnl INTLSYMBOL should be 'external' for packages with no intl directory, dnl and 'no-libtool' or 'use-libtool' for packages with an intl directory. dnl If INTLSYMBOL is 'use-libtool', then a libtool library dnl $(top_builddir)/intl/libintl.la will be created (shared and/or static, dnl depending on --{enable,disable}-{shared,static} and on the presence of dnl AM-DISABLE-SHARED). If INTLSYMBOL is 'no-libtool', a static library dnl $(top_builddir)/intl/libintl.a will be created. dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext dnl implementations (in libc or libintl) without the ngettext() function dnl will be ignored. If NEEDSYMBOL is specified and is dnl 'need-formatstring-macros', then GNU gettext implementations that don't dnl support the ISO C 99 <inttypes.h> formatstring macros will be ignored. dnl INTLDIR is used to find the intl libraries. If empty, dnl the value `$(top_builddir)/intl/' is used. dnl dnl The result of the configuration is one of three cases: dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled dnl and used. dnl Catalog format: GNU --> install in $(datadir) dnl Catalog extension: .mo after installation, .gmo in source tree dnl 2) GNU gettext has been found in the system's C library. dnl Catalog format: GNU --> install in $(datadir) dnl Catalog extension: .mo after installation, .gmo in source tree dnl 3) No internationalization, always use English msgid. dnl Catalog format: none dnl Catalog extension: none dnl If INTLSYMBOL is 'external', only cases 2 and 3 can occur. dnl The use of .gmo is historical (it was needed to avoid overwriting the dnl GNU format catalogs when building on a platform with an X/Open gettext), dnl but we keep it in order not to force irrelevant filename changes on the dnl maintainers. dnl AC_DEFUN([AM_GNU_GETTEXT], [ dnl Argument checking. ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [no-libtool], , [ifelse([$1], [use-libtool], , [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT ])])])])]) ifelse(ifelse([$1], [], [old])[]ifelse([$1], [no-libtool], [old]), [old], [AC_DIAGNOSE([obsolete], [Use of AM_GNU_GETTEXT without [external] argument is deprecated.])]) ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], , [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT ])])])]) define([gt_included_intl], ifelse([$1], [external], ifdef([AM_GNU_GETTEXT_][INTL_SUBDIR], [yes], [no]), [yes])) define([gt_libtool_suffix_prefix], ifelse([$1], [use-libtool], [l], [])) gt_NEEDS_INIT AM_GNU_GETTEXT_NEED([$2]) AC_REQUIRE([AM_PO_SUBDIRS])dnl ifelse(gt_included_intl, yes, [ AC_REQUIRE([AM_INTL_SUBDIR])dnl ]) dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) dnl Sometimes libintl requires libiconv, so first search for libiconv. dnl Ideally we would do this search only after the dnl if test "$USE_NLS" = "yes"; then dnl if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then dnl tests. But if configure.in invokes AM_ICONV after AM_GNU_GETTEXT dnl the configure script would need to contain the same shell code dnl again, outside any 'if'. There are two solutions: dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'. dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE. dnl Since AC_PROVIDE_IFELSE is only in autoconf >= 2.52 and not dnl documented, we avoid it. ifelse(gt_included_intl, yes, , [ AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) ]) dnl Sometimes, on MacOS X, libintl requires linking with CoreFoundation. gt_INTL_MACOSX dnl Set USE_NLS. AC_REQUIRE([AM_NLS]) ifelse(gt_included_intl, yes, [ BUILD_INCLUDED_LIBINTL=no USE_INCLUDED_LIBINTL=no ]) LIBINTL= LTLIBINTL= POSUB= dnl Add a version number to the cache macros. case " $gt_needs " in *" need-formatstring-macros "*) gt_api_version=3 ;; *" need-ngettext "*) gt_api_version=2 ;; *) gt_api_version=1 ;; esac gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc" gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl" dnl If we use NLS figure out what method if test "$USE_NLS" = "yes"; then gt_use_preinstalled_gnugettext=no ifelse(gt_included_intl, yes, [ AC_MSG_CHECKING([whether included gettext is requested]) AC_ARG_WITH([included-gettext], [ --with-included-gettext use the GNU gettext library included here], nls_cv_force_use_gnu_gettext=$withval, nls_cv_force_use_gnu_gettext=no) AC_MSG_RESULT([$nls_cv_force_use_gnu_gettext]) nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext" if test "$nls_cv_force_use_gnu_gettext" != "yes"; then ]) dnl User does not insist on using GNU NLS library. Figure out what dnl to use. If GNU gettext is available we use this. Else we have dnl to fall back to GNU NLS library. if test $gt_api_version -ge 3; then gt_revision_test_code=' #ifndef __GNU_GETTEXT_SUPPORTED_REVISION #define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) #endif changequote(,)dnl typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; changequote([,])dnl ' else gt_revision_test_code= fi if test $gt_api_version -ge 2; then gt_expression_test_code=' + * ngettext ("", "", 0)' else gt_expression_test_code= fi AC_CACHE_CHECK([for GNU gettext in libc], [$gt_func_gnugettext_libc], [AC_TRY_LINK([#include <libintl.h> $gt_revision_test_code extern int _nl_msg_cat_cntr; extern int *_nl_domain_bindings;], [bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_bindings], [eval "$gt_func_gnugettext_libc=yes"], [eval "$gt_func_gnugettext_libc=no"])]) if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then dnl Sometimes libintl requires libiconv, so first search for libiconv. ifelse(gt_included_intl, yes, , [ AM_ICONV_LINK ]) dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL dnl accordingly. Don't use AC_LIB_LINKFLAGS_BODY([intl],[iconv]) dnl because that would add "-liconv" to LIBINTL and LTLIBINTL dnl even if libiconv doesn't exist. AC_LIB_LINKFLAGS_BODY([intl]) AC_CACHE_CHECK([for GNU gettext in libintl], [$gt_func_gnugettext_libintl], [gt_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $INCINTL" gt_save_LIBS="$LIBS" LIBS="$LIBS $LIBINTL" dnl Now see whether libintl exists and does not depend on libiconv. AC_TRY_LINK([#include <libintl.h> $gt_revision_test_code extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (const char *);], [bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")], [eval "$gt_func_gnugettext_libintl=yes"], [eval "$gt_func_gnugettext_libintl=no"]) dnl Now see whether libintl exists and depends on libiconv. if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then LIBS="$LIBS $LIBICONV" AC_TRY_LINK([#include <libintl.h> $gt_revision_test_code extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (const char *);], [bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")], [LIBINTL="$LIBINTL $LIBICONV" LTLIBINTL="$LTLIBINTL $LTLIBICONV" eval "$gt_func_gnugettext_libintl=yes" ]) fi CPPFLAGS="$gt_save_CPPFLAGS" LIBS="$gt_save_LIBS"]) fi dnl If an already present or preinstalled GNU gettext() is found, dnl use it. But if this macro is used in GNU gettext, and GNU dnl gettext is already preinstalled in libintl, we update this dnl libintl. (Cf. the install rule in intl/Makefile.in.) if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \ || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \ && test "$PACKAGE" != gettext-runtime \ && test "$PACKAGE" != gettext-tools; }; then gt_use_preinstalled_gnugettext=yes else dnl Reset the values set by searching for libintl. LIBINTL= LTLIBINTL= INCINTL= fi ifelse(gt_included_intl, yes, [ if test "$gt_use_preinstalled_gnugettext" != "yes"; then dnl GNU gettext is not found in the C library. dnl Fall back on included GNU gettext library. nls_cv_use_gnu_gettext=yes fi fi if test "$nls_cv_use_gnu_gettext" = "yes"; then dnl Mark actions used to generate GNU NLS library. BUILD_INCLUDED_LIBINTL=yes USE_INCLUDED_LIBINTL=yes LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LIBICONV $LIBTHREAD" LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV $LTLIBTHREAD" LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'` fi CATOBJEXT= if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then dnl Mark actions to use GNU gettext tools. CATOBJEXT=.gmo fi ]) if test -n "$INTL_MACOSX_LIBS"; then if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then dnl Some extra flags are needed during linking. LIBINTL="$LIBINTL $INTL_MACOSX_LIBS" LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS" fi fi if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then AC_DEFINE([ENABLE_NLS], [1], [Define to 1 if translation of program messages to the user's native language is requested.]) else USE_NLS=no fi fi AC_MSG_CHECKING([whether to use NLS]) AC_MSG_RESULT([$USE_NLS]) if test "$USE_NLS" = "yes"; then AC_MSG_CHECKING([where the gettext function comes from]) if test "$gt_use_preinstalled_gnugettext" = "yes"; then if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then gt_source="external libintl" else gt_source="libc" fi else gt_source="included intl directory" fi AC_MSG_RESULT([$gt_source]) fi if test "$USE_NLS" = "yes"; then if test "$gt_use_preinstalled_gnugettext" = "yes"; then if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then AC_MSG_CHECKING([how to link with libintl]) AC_MSG_RESULT([$LIBINTL]) AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCINTL]) fi dnl For backward compatibility. Some packages may be using this. AC_DEFINE([HAVE_GETTEXT], [1], [Define if the GNU gettext() function is already present or preinstalled.]) AC_DEFINE([HAVE_DCGETTEXT], [1], [Define if the GNU dcgettext() function is already present or preinstalled.]) fi dnl We need to process the po/ directory. POSUB=po fi ifelse(gt_included_intl, yes, [ dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL dnl to 'yes' because some of the testsuite requires it. if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then BUILD_INCLUDED_LIBINTL=yes fi dnl Make all variables we use known to autoconf. AC_SUBST([BUILD_INCLUDED_LIBINTL]) AC_SUBST([USE_INCLUDED_LIBINTL]) AC_SUBST([CATOBJEXT]) dnl For backward compatibility. Some configure.ins may be using this. nls_cv_header_intl= nls_cv_header_libgt= dnl For backward compatibility. Some Makefiles may be using this. DATADIRNAME=share AC_SUBST([DATADIRNAME]) dnl For backward compatibility. Some Makefiles may be using this. INSTOBJEXT=.mo AC_SUBST([INSTOBJEXT]) dnl For backward compatibility. Some Makefiles may be using this. GENCAT=gencat AC_SUBST([GENCAT]) dnl For backward compatibility. Some Makefiles may be using this. INTLOBJS= if test "$USE_INCLUDED_LIBINTL" = yes; then INTLOBJS="\$(GETTOBJS)" fi AC_SUBST([INTLOBJS]) dnl Enable libtool support if the surrounding package wishes it. INTL_LIBTOOL_SUFFIX_PREFIX=gt_libtool_suffix_prefix AC_SUBST([INTL_LIBTOOL_SUFFIX_PREFIX]) ]) dnl For backward compatibility. Some Makefiles may be using this. INTLLIBS="$LIBINTL" AC_SUBST([INTLLIBS]) dnl Make all documented variables known to autoconf. AC_SUBST([LIBINTL]) AC_SUBST([LTLIBINTL]) AC_SUBST([POSUB]) ]) dnl gt_NEEDS_INIT ensures that the gt_needs variable is initialized. m4_define([gt_NEEDS_INIT], [ m4_divert_text([DEFAULTS], [gt_needs=]) m4_define([gt_NEEDS_INIT], []) ]) dnl Usage: AM_GNU_GETTEXT_NEED([NEEDSYMBOL]) AC_DEFUN([AM_GNU_GETTEXT_NEED], [ m4_divert_text([INIT_PREPARE], [gt_needs="$gt_needs $1"]) ]) dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version]) AC_DEFUN([AM_GNU_GETTEXT_VERSION], []) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/am/po.m4�������������������������������������������������������������������������������0000644�0001750�0001750�00000044616�13244106112�014450� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# po.m4 serial 17 (gettext-0.18) dnl Copyright (C) 1995-2010 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper <drepper@cygnus.com>, 1995-2000. dnl Bruno Haible <haible@clisp.cons.org>, 2000-2003. AC_PREREQ([2.50]) dnl Checks for all prerequisites of the po subdirectory. AC_DEFUN([AM_PO_SUBDIRS], [ AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl AC_REQUIRE([AM_PROG_MKDIR_P])dnl defined by automake AC_REQUIRE([AM_NLS])dnl dnl Release version of the gettext macros. This is used to ensure that dnl the gettext macros and po/Makefile.in.in are in sync. AC_SUBST([GETTEXT_MACRO_VERSION], [0.18]) dnl Perform the following tests also if --disable-nls has been given, dnl because they are needed for "make dist" to work. dnl Search for GNU msgfmt in the PATH. dnl The first test excludes Solaris msgfmt and early GNU msgfmt versions. dnl The second test excludes FreeBSD msgfmt. AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, [$ac_dir/$ac_word --statistics /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 && (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], :) AC_PATH_PROG([GMSGFMT], [gmsgfmt], [$MSGFMT]) dnl Test whether it is GNU msgfmt >= 0.15. changequote(,)dnl case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;; *) MSGFMT_015=$MSGFMT ;; esac changequote([,])dnl AC_SUBST([MSGFMT_015]) changequote(,)dnl case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;; *) GMSGFMT_015=$GMSGFMT ;; esac changequote([,])dnl AC_SUBST([GMSGFMT_015]) dnl Search for GNU xgettext 0.12 or newer in the PATH. dnl The first test excludes Solaris xgettext and early GNU xgettext versions. dnl The second test excludes FreeBSD xgettext. AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, [$ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 && (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], :) dnl Remove leftover from FreeBSD xgettext call. rm -f messages.po dnl Test whether it is GNU xgettext >= 0.15. changequote(,)dnl case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;; *) XGETTEXT_015=$XGETTEXT ;; esac changequote([,])dnl AC_SUBST([XGETTEXT_015]) dnl Search for GNU msgmerge 0.11 or newer in the PATH. AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge, [$ac_dir/$ac_word --update -q /dev/null /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1], :) dnl Installation directories. dnl Autoconf >= 2.60 defines localedir. For older versions of autoconf, we dnl have to define it here, so that it can be used in po/Makefile. test -n "$localedir" || localedir='${datadir}/locale' AC_SUBST([localedir]) dnl Support for AM_XGETTEXT_OPTION. test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS= AC_SUBST([XGETTEXT_EXTRA_OPTIONS]) AC_CONFIG_COMMANDS([po-directories], [[ for ac_file in $CONFIG_FILES; do # Support "outfile[:infile[:infile...]]" case "$ac_file" in *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; esac # PO directories have a Makefile.in generated from Makefile.in.in. case "$ac_file" in */Makefile.in) # Adjust a relative srcdir. ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` # In autoconf-2.13 it is called $ac_given_srcdir. # In autoconf-2.50 it is called $srcdir. test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" case "$ac_given_srcdir" in .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; /*) top_srcdir="$ac_given_srcdir" ;; *) top_srcdir="$ac_dots$ac_given_srcdir" ;; esac # Treat a directory as a PO directory if and only if it has a # POTFILES.in file. This allows packages to have multiple PO # directories under different names or in different locations. if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then rm -f "$ac_dir/POTFILES" test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" POMAKEFILEDEPS="POTFILES.in" # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend # on $ac_dir but don't depend on user-specified configuration # parameters. if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then # The LINGUAS file contains the set of available languages. if test -n "$OBSOLETE_ALL_LINGUAS"; then test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" fi ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"` # Hide the ALL_LINGUAS assigment from automake < 1.5. eval 'ALL_LINGUAS''=$ALL_LINGUAS_' POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" else # The set of available languages was given in configure.in. # Hide the ALL_LINGUAS assigment from automake < 1.5. eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS' fi # Compute POFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) # Compute UPDATEPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) # Compute DUMMYPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) # Compute GMOFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) case "$ac_given_srcdir" in .) srcdirpre= ;; *) srcdirpre='$(srcdir)/' ;; esac POFILES= UPDATEPOFILES= DUMMYPOFILES= GMOFILES= for lang in $ALL_LINGUAS; do POFILES="$POFILES $srcdirpre$lang.po" UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" DUMMYPOFILES="$DUMMYPOFILES $lang.nop" GMOFILES="$GMOFILES $srcdirpre$lang.gmo" done # CATALOGS depends on both $ac_dir and the user's LINGUAS # environment variable. INST_LINGUAS= if test -n "$ALL_LINGUAS"; then for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "$LINGUAS"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then INST_LINGUAS="$INST_LINGUAS $presentlang" fi done fi CATALOGS= if test -n "$INST_LINGUAS"; then for lang in $INST_LINGUAS; do CATALOGS="$CATALOGS $lang.gmo" done fi test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do if test -f "$f"; then case "$f" in *.orig | *.bak | *~) ;; *) cat "$f" >> "$ac_dir/Makefile" ;; esac fi done fi ;; esac done]], [# Capture the value of obsolete ALL_LINGUAS because we need it to compute # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it # from automake < 1.5. eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"' # Capture the value of LINGUAS because we need it to compute CATALOGS. LINGUAS="${LINGUAS-%UNSET%}" ]) ]) dnl Postprocesses a Makefile in a directory containing PO files. AC_DEFUN([AM_POSTPROCESS_PO_MAKEFILE], [ # When this code is run, in config.status, two variables have already been # set: # - OBSOLETE_ALL_LINGUAS is the value of LINGUAS set in configure.in, # - LINGUAS is the value of the environment variable LINGUAS at configure # time. changequote(,)dnl # Adjust a relative srcdir. ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` # In autoconf-2.13 it is called $ac_given_srcdir. # In autoconf-2.50 it is called $srcdir. test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" case "$ac_given_srcdir" in .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; /*) top_srcdir="$ac_given_srcdir" ;; *) top_srcdir="$ac_dots$ac_given_srcdir" ;; esac # Find a way to echo strings without interpreting backslash. if test "X`(echo '\t') 2>/dev/null`" = 'X\t'; then gt_echo='echo' else if test "X`(printf '%s\n' '\t') 2>/dev/null`" = 'X\t'; then gt_echo='printf %s\n' else echo_func () { cat <<EOT $* EOT } gt_echo='echo_func' fi fi # A sed script that extracts the value of VARIABLE from a Makefile. sed_x_variable=' # Test if the hold space is empty. x s/P/P/ x ta # Yes it was empty. Look if we have the expected variable definition. /^[ ]*VARIABLE[ ]*=/{ # Seen the first line of the variable definition. s/^[ ]*VARIABLE[ ]*=// ba } bd :a # Here we are processing a line from the variable definition. # Remove comment, more precisely replace it with a space. s/#.*$/ / # See if the line ends in a backslash. tb :b s/\\$// # Print the line, without the trailing backslash. p tc # There was no trailing backslash. The end of the variable definition is # reached. Clear the hold space. s/^.*$// x bd :c # A trailing backslash means that the variable definition continues in the # next line. Put a nonempty string into the hold space to indicate this. s/^.*$/P/ x :d ' changequote([,])dnl # Set POTFILES to the value of the Makefile variable POTFILES. sed_x_POTFILES=`$gt_echo "$sed_x_variable" | sed -e '/^ *#/d' -e 's/VARIABLE/POTFILES/g'` POTFILES=`sed -n -e "$sed_x_POTFILES" < "$ac_file"` # Compute POTFILES_DEPS as # $(foreach file, $(POTFILES), $(top_srcdir)/$(file)) POTFILES_DEPS= for file in $POTFILES; do POTFILES_DEPS="$POTFILES_DEPS "'$(top_srcdir)/'"$file" done POMAKEFILEDEPS="" if test -n "$OBSOLETE_ALL_LINGUAS"; then test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" fi if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then # The LINGUAS file contains the set of available languages. ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"` POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" else # Set ALL_LINGUAS to the value of the Makefile variable LINGUAS. sed_x_LINGUAS=`$gt_echo "$sed_x_variable" | sed -e '/^ *#/d' -e 's/VARIABLE/LINGUAS/g'` ALL_LINGUAS_=`sed -n -e "$sed_x_LINGUAS" < "$ac_file"` fi # Hide the ALL_LINGUAS assigment from automake < 1.5. eval 'ALL_LINGUAS''=$ALL_LINGUAS_' # Compute POFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) # Compute UPDATEPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) # Compute DUMMYPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) # Compute GMOFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) # Compute PROPERTIESFILES # as $(foreach lang, $(ALL_LINGUAS), $(top_srcdir)/$(DOMAIN)_$(lang).properties) # Compute CLASSFILES # as $(foreach lang, $(ALL_LINGUAS), $(top_srcdir)/$(DOMAIN)_$(lang).class) # Compute QMFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).qm) # Compute MSGFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(frob $(lang)).msg) # Compute RESOURCESDLLFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(frob $(lang))/$(DOMAIN).resources.dll) case "$ac_given_srcdir" in .) srcdirpre= ;; *) srcdirpre='$(srcdir)/' ;; esac POFILES= UPDATEPOFILES= DUMMYPOFILES= GMOFILES= PROPERTIESFILES= CLASSFILES= QMFILES= MSGFILES= RESOURCESDLLFILES= for lang in $ALL_LINGUAS; do POFILES="$POFILES $srcdirpre$lang.po" UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" DUMMYPOFILES="$DUMMYPOFILES $lang.nop" GMOFILES="$GMOFILES $srcdirpre$lang.gmo" PROPERTIESFILES="$PROPERTIESFILES \$(top_srcdir)/\$(DOMAIN)_$lang.properties" CLASSFILES="$CLASSFILES \$(top_srcdir)/\$(DOMAIN)_$lang.class" QMFILES="$QMFILES $srcdirpre$lang.qm" frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'` MSGFILES="$MSGFILES $srcdirpre$frobbedlang.msg" frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'` RESOURCESDLLFILES="$RESOURCESDLLFILES $srcdirpre$frobbedlang/\$(DOMAIN).resources.dll" done # CATALOGS depends on both $ac_dir and the user's LINGUAS # environment variable. INST_LINGUAS= if test -n "$ALL_LINGUAS"; then for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "$LINGUAS"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then INST_LINGUAS="$INST_LINGUAS $presentlang" fi done fi CATALOGS= JAVACATALOGS= QTCATALOGS= TCLCATALOGS= CSHARPCATALOGS= if test -n "$INST_LINGUAS"; then for lang in $INST_LINGUAS; do CATALOGS="$CATALOGS $lang.gmo" JAVACATALOGS="$JAVACATALOGS \$(DOMAIN)_$lang.properties" QTCATALOGS="$QTCATALOGS $lang.qm" frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'` TCLCATALOGS="$TCLCATALOGS $frobbedlang.msg" frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'` CSHARPCATALOGS="$CSHARPCATALOGS $frobbedlang/\$(DOMAIN).resources.dll" done fi sed -e "s|@POTFILES_DEPS@|$POTFILES_DEPS|g" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@PROPERTIESFILES@|$PROPERTIESFILES|g" -e "s|@CLASSFILES@|$CLASSFILES|g" -e "s|@QMFILES@|$QMFILES|g" -e "s|@MSGFILES@|$MSGFILES|g" -e "s|@RESOURCESDLLFILES@|$RESOURCESDLLFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@JAVACATALOGS@|$JAVACATALOGS|g" -e "s|@QTCATALOGS@|$QTCATALOGS|g" -e "s|@TCLCATALOGS@|$TCLCATALOGS|g" -e "s|@CSHARPCATALOGS@|$CSHARPCATALOGS|g" -e 's,^#distdir:,distdir:,' < "$ac_file" > "$ac_file.tmp" if grep -l '@TCLCATALOGS@' "$ac_file" > /dev/null; then # Add dependencies that cannot be formulated as a simple suffix rule. for lang in $ALL_LINGUAS; do frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'` cat >> "$ac_file.tmp" <<EOF $frobbedlang.msg: $lang.po @echo "\$(MSGFMT) -c --tcl -d \$(srcdir) -l $lang $srcdirpre$lang.po"; \ \$(MSGFMT) -c --tcl -d "\$(srcdir)" -l $lang $srcdirpre$lang.po || { rm -f "\$(srcdir)/$frobbedlang.msg"; exit 1; } EOF done fi if grep -l '@CSHARPCATALOGS@' "$ac_file" > /dev/null; then # Add dependencies that cannot be formulated as a simple suffix rule. for lang in $ALL_LINGUAS; do frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'` cat >> "$ac_file.tmp" <<EOF $frobbedlang/\$(DOMAIN).resources.dll: $lang.po @echo "\$(MSGFMT) -c --csharp -d \$(srcdir) -l $lang $srcdirpre$lang.po -r \$(DOMAIN)"; \ \$(MSGFMT) -c --csharp -d "\$(srcdir)" -l $lang $srcdirpre$lang.po -r "\$(DOMAIN)" || { rm -f "\$(srcdir)/$frobbedlang.msg"; exit 1; } EOF done fi if test -n "$POMAKEFILEDEPS"; then cat >> "$ac_file.tmp" <<EOF Makefile: $POMAKEFILEDEPS EOF fi mv "$ac_file.tmp" "$ac_file" ]) dnl Initializes the accumulator used by AM_XGETTEXT_OPTION. AC_DEFUN([AM_XGETTEXT_OPTION_INIT], [ XGETTEXT_EXTRA_OPTIONS= ]) dnl Registers an option to be passed to xgettext in the po subdirectory. AC_DEFUN([AM_XGETTEXT_OPTION], [ AC_REQUIRE([AM_XGETTEXT_OPTION_INIT]) XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS $1" ]) ������������������������������������������������������������������������������������������������������������������direvent-5.2/am/iconv.m4����������������������������������������������������������������������������0000644�0001750�0001750�00000015226�13244106112�015143� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# iconv.m4 serial 9 (gettext-0.18) dnl Copyright (C) 2000-2002, 2007-2010 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. AC_DEFUN([AM_ICONV_LINKFLAGS_BODY], [ dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV dnl accordingly. AC_LIB_LINKFLAGS_BODY([iconv]) ]) AC_DEFUN([AM_ICONV_LINK], [ dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and dnl those with the standalone portable GNU libiconv installed). AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV dnl accordingly. AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) dnl Add $INCICONV to CPPFLAGS before performing the following checks, dnl because if the user has installed libiconv and not disabled its use dnl via --without-libiconv-prefix, he wants to use it. The first dnl AC_TRY_LINK will then fail, the second AC_TRY_LINK will succeed. am_save_CPPFLAGS="$CPPFLAGS" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV]) AC_CACHE_CHECK([for iconv], [am_cv_func_iconv], [ am_cv_func_iconv="no, consider installing GNU libiconv" am_cv_lib_iconv=no AC_TRY_LINK([#include <stdlib.h> #include <iconv.h>], [iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd);], [am_cv_func_iconv=yes]) if test "$am_cv_func_iconv" != yes; then am_save_LIBS="$LIBS" LIBS="$LIBS $LIBICONV" AC_TRY_LINK([#include <stdlib.h> #include <iconv.h>], [iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd);], [am_cv_lib_iconv=yes] [am_cv_func_iconv=yes]) LIBS="$am_save_LIBS" fi ]) if test "$am_cv_func_iconv" = yes; then AC_CACHE_CHECK([for working iconv], [am_cv_func_iconv_works], [ dnl This tests against bugs in AIX 5.1, HP-UX 11.11, Solaris 10. am_save_LIBS="$LIBS" if test $am_cv_lib_iconv = yes; then LIBS="$LIBS $LIBICONV" fi AC_TRY_RUN([ #include <iconv.h> #include <string.h> int main () { /* Test against AIX 5.1 bug: Failures are not distinguishable from successful returns. */ { iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8"); if (cd_utf8_to_88591 != (iconv_t)(-1)) { static const char input[] = "\342\202\254"; /* EURO SIGN */ char buf[10]; const char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_utf8_to_88591, (char **) &inptr, &inbytesleft, &outptr, &outbytesleft); if (res == 0) return 1; } } /* Test against Solaris 10 bug: Failures are not distinguishable from successful returns. */ { iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646"); if (cd_ascii_to_88591 != (iconv_t)(-1)) { static const char input[] = "\263"; char buf[10]; const char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_ascii_to_88591, (char **) &inptr, &inbytesleft, &outptr, &outbytesleft); if (res == 0) return 1; } } #if 0 /* This bug could be worked around by the caller. */ /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */ { iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591"); if (cd_88591_to_utf8 != (iconv_t)(-1)) { static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; char buf[50]; const char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_88591_to_utf8, (char **) &inptr, &inbytesleft, &outptr, &outbytesleft); if ((int)res > 0) return 1; } } #endif /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is provided. */ if (/* Try standardized names. */ iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1) /* Try IRIX, OSF/1 names. */ && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1) /* Try AIX names. */ && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1) /* Try HP-UX names. */ && iconv_open ("utf8", "eucJP") == (iconv_t)(-1)) return 1; return 0; }], [am_cv_func_iconv_works=yes], [am_cv_func_iconv_works=no], [case "$host_os" in aix* | hpux*) am_cv_func_iconv_works="guessing no" ;; *) am_cv_func_iconv_works="guessing yes" ;; esac]) LIBS="$am_save_LIBS" ]) case "$am_cv_func_iconv_works" in *no) am_func_iconv=no am_cv_lib_iconv=no ;; *) am_func_iconv=yes ;; esac else am_func_iconv=no am_cv_lib_iconv=no fi if test "$am_func_iconv" = yes; then AC_DEFINE([HAVE_ICONV], [1], [Define if you have the iconv() function and it works.]) fi if test "$am_cv_lib_iconv" = yes; then AC_MSG_CHECKING([how to link with libiconv]) AC_MSG_RESULT([$LIBICONV]) else dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV dnl either. CPPFLAGS="$am_save_CPPFLAGS" LIBICONV= LTLIBICONV= fi AC_SUBST([LIBICONV]) AC_SUBST([LTLIBICONV]) ]) AC_DEFUN([AM_ICONV], [ AM_ICONV_LINK if test "$am_cv_func_iconv" = yes; then AC_MSG_CHECKING([for iconv declaration]) AC_CACHE_VAL([am_cv_proto_iconv], [ AC_TRY_COMPILE([ #include <stdlib.h> #include <iconv.h> extern #ifdef __cplusplus "C" #endif #if defined(__STDC__) || defined(__cplusplus) size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); #else size_t iconv(); #endif ], [], [am_cv_proto_iconv_arg1=""], [am_cv_proto_iconv_arg1="const"]) am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"]) am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` AC_MSG_RESULT([ $am_cv_proto_iconv]) AC_DEFINE_UNQUOTED([ICONV_CONST], [$am_cv_proto_iconv_arg1], [Define as const if the declaration of iconv() needs const.]) fi ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/am/lib-ld.m4���������������������������������������������������������������������������0000644�0001750�0001750�00000006603�13244106112�015167� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# lib-ld.m4 serial 4 (gettext-0.18) dnl Copyright (C) 1996-2003, 2009-2010 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Subroutines of libtool.m4, dnl with replacements s/AC_/AC_LIB/ and s/lt_cv/acl_cv/ to avoid collision dnl with libtool.m4. dnl From libtool-1.4. Sets the variable with_gnu_ld to yes or no. AC_DEFUN([AC_LIB_PROG_LD_GNU], [AC_CACHE_CHECK([if the linker ($LD) is GNU ld], [acl_cv_prog_gnu_ld], [# I'd rather use --version here, but apparently some GNU ld's only accept -v. case `$LD -v 2>&1 </dev/null` in *GNU* | *'with BFD'*) acl_cv_prog_gnu_ld=yes ;; *) acl_cv_prog_gnu_ld=no ;; esac]) with_gnu_ld=$acl_cv_prog_gnu_ld ]) dnl From libtool-1.4. Sets the variable LD. AC_DEFUN([AC_LIB_PROG_LD], [AC_ARG_WITH([gnu-ld], [ --with-gnu-ld assume the C compiler uses GNU ld [default=no]], test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no) AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by GCC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]* | [A-Za-z]:[\\/]*)] [re_direlt='/[^/][^/]*/\.\./'] # Canonicalize the path of ld ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL([acl_cv_path_LD], [if test -z "$LD"; then IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then acl_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some GNU ld's only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in *GNU* | *'with BFD'*) test "$with_gnu_ld" != no && break ;; *) test "$with_gnu_ld" != yes && break ;; esac fi done IFS="$ac_save_ifs" else acl_cv_path_LD="$LD" # Let the user override the test with a path. fi]) LD="$acl_cv_path_LD" if test -n "$LD"; then AC_MSG_RESULT([$LD]) else AC_MSG_RESULT([no]) fi test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH]) AC_LIB_PROG_LD_GNU ]) �����������������������������������������������������������������������������������������������������������������������������direvent-5.2/am/intlmacosx.m4�����������������������������������������������������������������������0000644�0001750�0001750�00000004575�13244106112�016213� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# intlmacosx.m4 serial 3 (gettext-0.18) dnl Copyright (C) 2004-2010 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Checks for special options needed on MacOS X. dnl Defines INTL_MACOSX_LIBS. AC_DEFUN([gt_INTL_MACOSX], [ dnl Check for API introduced in MacOS X 10.2. AC_CACHE_CHECK([for CFPreferencesCopyAppValue], [gt_cv_func_CFPreferencesCopyAppValue], [gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" AC_TRY_LINK([#include <CoreFoundation/CFPreferences.h>], [CFPreferencesCopyAppValue(NULL, NULL)], [gt_cv_func_CFPreferencesCopyAppValue=yes], [gt_cv_func_CFPreferencesCopyAppValue=no]) LIBS="$gt_save_LIBS"]) if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then AC_DEFINE([HAVE_CFPREFERENCESCOPYAPPVALUE], [1], [Define to 1 if you have the MacOS X function CFPreferencesCopyAppValue in the CoreFoundation framework.]) fi dnl Check for API introduced in MacOS X 10.3. AC_CACHE_CHECK([for CFLocaleCopyCurrent], [gt_cv_func_CFLocaleCopyCurrent], [gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" AC_TRY_LINK([#include <CoreFoundation/CFLocale.h>], [CFLocaleCopyCurrent();], [gt_cv_func_CFLocaleCopyCurrent=yes], [gt_cv_func_CFLocaleCopyCurrent=no]) LIBS="$gt_save_LIBS"]) if test $gt_cv_func_CFLocaleCopyCurrent = yes; then AC_DEFINE([HAVE_CFLOCALECOPYCURRENT], [1], [Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the CoreFoundation framework.]) fi INTL_MACOSX_LIBS= if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" fi AC_SUBST([INTL_MACOSX_LIBS]) ]) �����������������������������������������������������������������������������������������������������������������������������������direvent-5.2/NEWS�����������������������������������������������������������������������������������0000644�0001750�0001750�00000013104�13512402453�013663� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent -- history of user-visible changes. 2019-07-13 Copyright (C) 2012-2019 Sergey Poznyakoff See the end of file for copying conditions. Please send direvent bug reports to <bug-direvent@gnu.org.ua> Version 5.2, 2019-07-13 * The path statement can refer to a regular file. Prior versions of direvent required the argument to the "path" statement to refer to an existing directory. This requirement is now lifted. The pathname can refer to any type of file (not only a directory). Moreover, the file is not required to exist. If it does not exist, direvent will set up an auxiliary watcher (called a "sentinel"), that will wake up upon creation of the file with that pathname and will set up the configured watcher once it is created. The process is reversed when the file referred to by the "path" statement is deleted. In that case, the configured watcher is deactivated and a sentinel is set up which will bring it back when the destination file or directory is created. This mode of operation ensures that the configured watcher will always be operational. * Fix watcher removal on BSD-like systems. * Configuration changes ** multiple environ statements Multiple environ statements can be used within a single watcher block. Such statements accumulate. Version 5.1, 2016-07-06 * Globbing patterns in #include statement If argument to the #include statement contains wildcard characters (*, [, ], or ?), it is interpreted as 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. * New watcher option 'shell' The 'shell' option causes watcher command to be executed via '/bin/sh' (by default it is invoked directly, using the 'execve' function). For example: watcher { path "/etc/httpd/vhosts"; command "/usr/bin/scanhosts && service httpd restart"; option (shell); } * Include path If the argument to the #include (#include_once) statement is not an absolute file name or globbing pattern, it is looked up in the include search path. The order of look up is as follows. First, directories given with '-I' options (see below) are scanned, in the same order as given on the command line. If no matching file is found in any of them, directories in the standard include search path are scanned. By default, the standard include search path contains two directories: '$(pkgdatadir)/$(VERSION)' and '$(pkgdatadir)/include', where $(pkgdatadir) and $(VERSION) stand for the package data directory, and package version, correspondingly. It can be redefined at compile time using the '--with-include-path' to configure, e.g.: ./configure --with-include-path='$(sysconfdir)/direvent.d:$(pkgdatadir)/$(VERSION):$(pkgdatadir)/include' (see the file INSTALL, section "Building and Configuring", for a detailed discussion of this option). To inspect the actual path at runtime, run 'direvent --help', and look for the string 'Include search path:' in its output. * New command line option -I (--include) The '-I DIR' command line option adds DIR to the include search path. When looking for include files, directories given with '-I' options are scanned first. If the file is not found, the directories in the standard include path are scanned. Version 5.0, 2014-09-06 * An official GNU release * The "file" statement allows for negating patterns * I18N Version 4.1, 2013-12-27 * New features A watcher can be configured to react only on certain files. To that effect, a new statement "file" is introduced. This statement defines a list of regular expressions one of which the file name must match in order for the watcher to wake up. * Bugfixes Upon creation of a directory, a genev_create event is generated for all files and directories below the newly created one (if required by the configuration). At the same time, new watchers are installed. The version 4.0 incorrectly assumed that a notification would arrive for each subdirectory or subfile, once the watcher is installed for the parent directory. This created a race condition, which could cause some create events to come unnoticed. Version 4.0, 2013-06-04 This is a complete rewrite of the project. It uses a new configuration file format and works on Linux, BSD and Darwin. Version 3.0 (Git) Introduce a configuration file. Version 2.0, 2013-01-11 * Change command line handling Dircond accepts handler definitions interspersed with directory name. This allows for having different per-directory handlers. Similarly, the autowatch options ("-a" and "-l") affect the directories specified after them in the command line and their effect is changed by the next occurrence of the corresponding option. * Bugfixes Fix a minor error in fd_set handling. Version 1.0, 2012-12-30 Initial release ========================================================================= Copyright information: Copyright (C) 2012-2019 Sergey Poznyakoff Permission is granted to anyone to make or distribute verbatim copies of this document as received, in any medium, provided that the copyright notice and this permission notice are preserved, thus giving the recipient permission to redistribute in turn. Permission is granted to distribute modified versions of this document, or of portions of it, under the above conditions, provided also that they carry prominent notices stating who last changed them. Local variables: mode: outline paragraph-separate: "[ ]*$" eval: (add-hook 'write-file-hooks 'time-stamp) time-stamp-start: "changes. " time-stamp-format: "%:y-%02m-%02d" time-stamp-end: "\n" end: ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/build-aux/�����������������������������������������������������������������������������0000755�0001750�0001750�00000000000�13512403133�015053� 5����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/build-aux/missing����������������������������������������������������������������������0000755�0001750�0000000�00000015330�13266701462�016474� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Common wrapper for a few potentially missing GNU programs. scriptversion=2013-10-28.13; # UTC # Copyright (C) 1996-2014 Free Software Foundation, Inc. # Originally written by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try '$0 --help' for more information" exit 1 fi case $1 in --is-lightweight) # Used by our autoconf macros to check whether the available missing # script is modern enough. exit 0 ;; --run) # Back-compat with the calling convention used by older automake. shift ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due to PROGRAM being missing or too old. Options: -h, --help display this help and exit -v, --version output version information and exit Supported PROGRAM values: aclocal autoconf autoheader autom4te automake makeinfo bison yacc flex lex help2man Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and 'g' are ignored when checking the name. Send bug reports to <bug-automake@gnu.org>." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: unknown '$1' option" echo 1>&2 "Try '$0 --help' for more information" exit 1 ;; esac # Run the given program, remember its exit status. "$@"; st=$? # If it succeeded, we are done. test $st -eq 0 && exit 0 # Also exit now if we it failed (or wasn't found), and '--version' was # passed; such an option is passed most likely to detect whether the # program is present and works. case $2 in --version|--help) exit $st;; esac # Exit code 63 means version mismatch. This often happens when the user # tries to use an ancient version of a tool on a file that requires a # minimum version. if test $st -eq 63; then msg="probably too old" elif test $st -eq 127; then # Program was missing. msg="missing on your system" else # Program was found and executed, but failed. Give up. exit $st fi perl_URL=http://www.perl.org/ flex_URL=http://flex.sourceforge.net/ gnu_software_URL=http://www.gnu.org/software program_details () { case $1 in aclocal|automake) echo "The '$1' program is part of the GNU Automake package:" echo "<$gnu_software_URL/automake>" echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/autoconf>" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; autoconf|autom4te|autoheader) echo "The '$1' program is part of the GNU Autoconf package:" echo "<$gnu_software_URL/autoconf/>" echo "It also requires GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; esac } give_advice () { # Normalize program name to check for. normalized_program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` printf '%s\n' "'$1' is $msg." configure_deps="'configure.ac' or m4 files included by 'configure.ac'" case $normalized_program in autoconf*) echo "You should only need it if you modified 'configure.ac'," echo "or m4 files included by it." program_details 'autoconf' ;; autoheader*) echo "You should only need it if you modified 'acconfig.h' or" echo "$configure_deps." program_details 'autoheader' ;; automake*) echo "You should only need it if you modified 'Makefile.am' or" echo "$configure_deps." program_details 'automake' ;; aclocal*) echo "You should only need it if you modified 'acinclude.m4' or" echo "$configure_deps." program_details 'aclocal' ;; autom4te*) echo "You might have modified some maintainer files that require" echo "the 'autom4te' program to be rebuilt." program_details 'autom4te' ;; bison*|yacc*) echo "You should only need it if you modified a '.y' file." echo "You may want to install the GNU Bison package:" echo "<$gnu_software_URL/bison/>" ;; lex*|flex*) echo "You should only need it if you modified a '.l' file." echo "You may want to install the Fast Lexical Analyzer package:" echo "<$flex_URL>" ;; help2man*) echo "You should only need it if you modified a dependency" \ "of a man page." echo "You may want to install the GNU Help2man package:" echo "<$gnu_software_URL/help2man/>" ;; makeinfo*) echo "You should only need it if you modified a '.texi' file, or" echo "any other file indirectly affecting the aspect of the manual." echo "You might want to install the Texinfo package:" echo "<$gnu_software_URL/texinfo/>" echo "The spurious makeinfo call might also be the consequence of" echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" echo "want to install GNU make:" echo "<$gnu_software_URL/make/>" ;; *) echo "You might have modified some files without having the proper" echo "tools for further handling them. Check the 'README' file, it" echo "often tells you about the needed prerequisites for installing" echo "this package. You may also peek at any GNU archive site, in" echo "case some other package contains this missing '$1' program." ;; esac } give_advice "$1" | sed -e '1s/^/WARNING: /' \ -e '2,$s/^/ /' >&2 # Propagate the correct exit status (expected to be 127 for a program # not found, 63 for a program that failed due to version mismatch). exit $st # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/build-aux/config.rpath�����������������������������������������������������������������0000755�0001750�0001750�00000044012�13244106111�017362� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Output a system dependent set of variables, describing how to set the # run time search path of shared libraries in an executable. # # Copyright 1996-2010 Free Software Foundation, Inc. # Taken from GNU libtool, 2001 # Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 # # This file 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. # # The first argument passed to this file is the canonical host specification, # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld # should be set by the caller. # # The set of defined variables is at the end of this script. # Known limitations: # - On IRIX 6.5 with CC="cc", the run time search patch must not be longer # than 256 bytes, otherwise the compiler driver will dump core. The only # known workaround is to choose shorter directory names for the build # directory and/or the installation directory. # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a shrext=.so host="$1" host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` # Code taken from libtool.m4's _LT_CC_BASENAME. for cc_temp in $CC""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'` # Code taken from libtool.m4's _LT_COMPILER_PIC. wl= if test "$GCC" = yes; then wl='-Wl,' else case "$host_os" in aix*) wl='-Wl,' ;; darwin*) case $cc_basename in xlc*) wl='-Wl,' ;; esac ;; mingw* | cygwin* | pw32* | os2* | cegcc*) ;; hpux9* | hpux10* | hpux11*) wl='-Wl,' ;; irix5* | irix6* | nonstopux*) wl='-Wl,' ;; newsos6) ;; linux* | k*bsd*-gnu) case $cc_basename in ecc*) wl='-Wl,' ;; icc* | ifort*) wl='-Wl,' ;; lf95*) wl='-Wl,' ;; pgcc | pgf77 | pgf90) wl='-Wl,' ;; ccc*) wl='-Wl,' ;; como) wl='-lopt=' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) wl='-Wl,' ;; esac ;; esac ;; osf3* | osf4* | osf5*) wl='-Wl,' ;; rdos*) ;; solaris*) wl='-Wl,' ;; sunos4*) wl='-Qoption ld ' ;; sysv4 | sysv4.2uw2* | sysv4.3*) wl='-Wl,' ;; sysv4*MP*) ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) wl='-Wl,' ;; unicos*) wl='-Wl,' ;; uts4*) ;; esac fi # Code taken from libtool.m4's _LT_LINKER_SHLIBS. hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_direct=no hardcode_minus_L=no case "$host_os" in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs=yes if test "$with_gnu_ld" = yes; then # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. # Unlike libtool, we use -rpath here, not --rpath, since the documented # option of GNU ld is called -rpath, not --rpath. hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' case "$host_os" in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no fi ;; amigaos*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports # that the semantics of dynamic libraries on AmigaOS, at least up # to version 4, is to share data among multiple programs linked # with the same dynamic library. Since this doesn't match the # behavior of shared libraries on other platforms, we cannot use # them. ld_shlibs=no ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then : else ld_shlibs=no fi ;; interix[3-9]*) hardcode_direct=no hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; gnu* | linux* | k*bsd*-gnu) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; netbsd*) ;; solaris*) if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then ld_shlibs=no elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' else ld_shlibs=no fi ;; esac ;; sunos4*) hardcode_direct=yes ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = no; then hardcode_libdir_flag_spec= fi else case "$host_os" in aix3*) # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac fi hardcode_direct=yes hardcode_libdir_separator=':' if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct=unsupported hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac fi # Begin _LT_AC_SYS_LIBPATH_AIX. echo 'int main () { return 0; }' > conftest.c ${CC} ${LDFLAGS} conftest.c -o conftest aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` fi if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib" fi rm -f conftest.c conftest # End _LT_AC_SYS_LIBPATH_AIX. if test "$aix_use_runtimelinking" = yes; then hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' else hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" fi fi ;; amigaos*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes # see comment about different semantics on the GNU ld section ld_shlibs=no ;; bsdi[45]*) ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec=' ' libext=lib ;; darwin* | rhapsody*) hardcode_direct=no if test "$GCC" = yes ; then : else case $cc_basename in xlc*) ;; *) ld_shlibs=no ;; esac fi ;; dgux*) hardcode_libdir_flag_spec='-L$libdir' ;; freebsd1*) ld_shlibs=no ;; freebsd2.2*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; freebsd2*) hardcode_direct=yes hardcode_minus_L=yes ;; freebsd* | dragonfly*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; hpux9*) hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; hpux10*) if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no ;; *) hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; netbsd*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; newsos6) hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then hardcode_libdir_flag_spec='${wl}-rpath,$libdir' else case "$host_os" in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) hardcode_libdir_flag_spec='-R$libdir' ;; *) hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; osf3*) hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) if test "$GCC" = yes; then hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else # Both cc and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi hardcode_libdir_separator=: ;; solaris*) hardcode_libdir_flag_spec='-R$libdir' ;; sunos4*) hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes ;; sysv4) case $host_vendor in sni) hardcode_direct=yes # is this really true??? ;; siemens) hardcode_direct=no ;; motorola) hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac ;; sysv4.3*) ;; sysv4*MP*) if test -d /usr/nec; then ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) ;; sysv5* | sco3.2v5* | sco5v6*) hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' hardcode_libdir_separator=':' ;; uts4*) hardcode_libdir_flag_spec='-L$libdir' ;; *) ld_shlibs=no ;; esac fi # Check dynamic linker characteristics # Code taken from libtool.m4's _LT_SYS_DYNAMIC_LINKER. # Unlike libtool.m4, here we don't care about _all_ names of the library, but # only about the one the linker finds when passed -lNAME. This is the last # element of library_names_spec in libtool.m4, or possibly two of them if the # linker has special search rules. library_names_spec= # the last element of library_names_spec in libtool.m4 libname_spec='lib$name' case "$host_os" in aix3*) library_names_spec='$libname.a' ;; aix[4-9]*) library_names_spec='$libname$shrext' ;; amigaos*) library_names_spec='$libname.a' ;; beos*) library_names_spec='$libname$shrext' ;; bsdi[45]*) library_names_spec='$libname$shrext' ;; cygwin* | mingw* | pw32* | cegcc*) shrext=.dll library_names_spec='$libname.dll.a $libname.lib' ;; darwin* | rhapsody*) shrext=.dylib library_names_spec='$libname$shrext' ;; dgux*) library_names_spec='$libname$shrext' ;; freebsd1*) ;; freebsd* | dragonfly*) case "$host_os" in freebsd[123]*) library_names_spec='$libname$shrext$versuffix' ;; *) library_names_spec='$libname$shrext' ;; esac ;; gnu*) library_names_spec='$libname$shrext' ;; hpux9* | hpux10* | hpux11*) case $host_cpu in ia64*) shrext=.so ;; hppa*64*) shrext=.sl ;; *) shrext=.sl ;; esac library_names_spec='$libname$shrext' ;; interix[3-9]*) library_names_spec='$libname$shrext' ;; irix5* | irix6* | nonstopux*) library_names_spec='$libname$shrext' case "$host_os" in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;; *) libsuff= shlibsuff= ;; esac ;; esac ;; linux*oldld* | linux*aout* | linux*coff*) ;; linux* | k*bsd*-gnu) library_names_spec='$libname$shrext' ;; knetbsd*-gnu) library_names_spec='$libname$shrext' ;; netbsd*) library_names_spec='$libname$shrext' ;; newsos6) library_names_spec='$libname$shrext' ;; nto-qnx*) library_names_spec='$libname$shrext' ;; openbsd*) library_names_spec='$libname$shrext$versuffix' ;; os2*) libname_spec='$name' shrext=.dll library_names_spec='$libname.a' ;; osf3* | osf4* | osf5*) library_names_spec='$libname$shrext' ;; rdos*) ;; solaris*) library_names_spec='$libname$shrext' ;; sunos4*) library_names_spec='$libname$shrext$versuffix' ;; sysv4 | sysv4.3*) library_names_spec='$libname$shrext' ;; sysv4*MP*) library_names_spec='$libname$shrext' ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) library_names_spec='$libname$shrext' ;; uts4*) library_names_spec='$libname$shrext' ;; esac sed_quote_subst='s/\(["`$\\]\)/\\\1/g' escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"` shlibext=`echo "$shrext" | sed -e 's,^\.,,'` escaped_libname_spec=`echo "X$libname_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` escaped_library_names_spec=`echo "X$library_names_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <<EOF # How to pass a linker flag through the compiler. wl="$escaped_wl" # Static library suffix (normally "a"). libext="$libext" # Shared library suffix (normally "so"). shlibext="$shlibext" # Format of library name prefix. libname_spec="$escaped_libname_spec" # Library names that the linker finds when passed -lNAME. library_names_spec="$escaped_library_names_spec" # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist. hardcode_libdir_flag_spec="$escaped_hardcode_libdir_flag_spec" # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator="$hardcode_libdir_separator" # Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the # resulting binary. hardcode_direct="$hardcode_direct" # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L="$hardcode_minus_L" EOF ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/build-aux/compile����������������������������������������������������������������������0000755�0001750�0000000�00000016245�13266701462�016461� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Wrapper for compilers which do not understand '-c -o'. scriptversion=2012-10-14.11; # UTC # Copyright (C) 1999-2014 Free Software Foundation, Inc. # Written by Tom Tromey <tromey@cygnus.com>. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to <bug-automake@gnu.org> or send patches to # <automake-patches@gnu.org>. nl=' ' # We need space, tab and new line, in precisely that order. Quoting is # there to prevent tools from complaining about whitespace usage. IFS=" "" $nl" file_conv= # func_file_conv build_file lazy # Convert a $build file to $host form and store it in $file # Currently only supports Windows hosts. If the determined conversion # type is listed in (the comma separated) LAZY, no conversion will # take place. func_file_conv () { file=$1 case $file in / | /[!/]*) # absolute file, and not a UNC file if test -z "$file_conv"; then # lazily determine how to convert abs files case `uname -s` in MINGW*) file_conv=mingw ;; CYGWIN*) file_conv=cygwin ;; *) file_conv=wine ;; esac fi case $file_conv/,$2, in *,$file_conv,*) ;; mingw/*) file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` ;; cygwin/*) file=`cygpath -m "$file" || echo "$file"` ;; wine/*) file=`winepath -w "$file" || echo "$file"` ;; esac ;; esac } # func_cl_dashL linkdir # Make cl look for libraries in LINKDIR func_cl_dashL () { func_file_conv "$1" if test -z "$lib_path"; then lib_path=$file else lib_path="$lib_path;$file" fi linker_opts="$linker_opts -LIBPATH:$file" } # func_cl_dashl library # Do a library search-path lookup for cl func_cl_dashl () { lib=$1 found=no save_IFS=$IFS IFS=';' for dir in $lib_path $LIB do IFS=$save_IFS if $shared && test -f "$dir/$lib.dll.lib"; then found=yes lib=$dir/$lib.dll.lib break fi if test -f "$dir/$lib.lib"; then found=yes lib=$dir/$lib.lib break fi if test -f "$dir/lib$lib.a"; then found=yes lib=$dir/lib$lib.a break fi done IFS=$save_IFS if test "$found" != yes; then lib=$lib.lib fi } # func_cl_wrapper cl arg... # Adjust compile command to suit cl func_cl_wrapper () { # Assume a capable shell lib_path= shared=: linker_opts= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. eat=1 case $2 in *.o | *.[oO][bB][jJ]) func_file_conv "$2" set x "$@" -Fo"$file" shift ;; *) func_file_conv "$2" set x "$@" -Fe"$file" shift ;; esac ;; -I) eat=1 func_file_conv "$2" mingw set x "$@" -I"$file" shift ;; -I*) func_file_conv "${1#-I}" mingw set x "$@" -I"$file" shift ;; -l) eat=1 func_cl_dashl "$2" set x "$@" "$lib" shift ;; -l*) func_cl_dashl "${1#-l}" set x "$@" "$lib" shift ;; -L) eat=1 func_cl_dashL "$2" ;; -L*) func_cl_dashL "${1#-L}" ;; -static) shared=false ;; -Wl,*) arg=${1#-Wl,} save_ifs="$IFS"; IFS=',' for flag in $arg; do IFS="$save_ifs" linker_opts="$linker_opts $flag" done IFS="$save_ifs" ;; -Xlinker) eat=1 linker_opts="$linker_opts $2" ;; -*) set x "$@" "$1" shift ;; *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) func_file_conv "$1" set x "$@" -Tp"$file" shift ;; *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) func_file_conv "$1" mingw set x "$@" "$file" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -n "$linker_opts"; then linker_opts="-link$linker_opts" fi exec "$@" $linker_opts exit 1 } eat= case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: compile [--help] [--version] PROGRAM [ARGS] Wrapper for compilers which do not understand '-c -o'. Remove '-o dest.o' from ARGS, run PROGRAM with the remaining arguments, and rename the output as expected. If you are trying to build a whole package this is not the right script to run: please start by reading the file 'INSTALL'. Report bugs to <bug-automake@gnu.org>. EOF exit $? ;; -v | --v*) echo "compile $scriptversion" exit $? ;; cl | *[/\\]cl | cl.exe | *[/\\]cl.exe ) func_cl_wrapper "$@" # Doesn't return... ;; esac ofile= cfile= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. # So we strip '-o arg' only if arg is an object. eat=1 case $2 in *.o | *.obj) ofile=$2 ;; *) set x "$@" -o "$2" shift ;; esac ;; *.c) cfile=$1 set x "$@" "$1" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -z "$ofile" || test -z "$cfile"; then # If no '-o' option was seen then we might have been invoked from a # pattern rule where we don't need one. That is ok -- this is a # normal compilation that the losing compiler can handle. If no # '.c' file was seen then we are probably linking. That is also # ok. exec "$@" fi # Name of file we expect compiler to create. cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` # Create the lock directory. # Note: use '[/\\:.-]' here to ensure that we don't use the same name # that we are using for the .o file. Also, base the name on the expected # object file name, since that is what matters with a parallel build. lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d while true; do if mkdir "$lockdir" >/dev/null 2>&1; then break fi sleep 1 done # FIXME: race condition here if user kills between mkdir and trap. trap "rmdir '$lockdir'; exit 1" 1 2 15 # Run the compile. "$@" ret=$? if test -f "$cofile"; then test "$cofile" = "$ofile" || mv "$cofile" "$ofile" elif test -f "${cofile}bj"; then test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" fi rmdir "$lockdir" exit $ret # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/build-aux/mdate-sh���������������������������������������������������������������������0000755�0001750�0000000�00000013637�13266701462�016535� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Get modification time of a file or directory and pretty-print it. scriptversion=2010-08-21.06; # UTC # Copyright (C) 1995-2014 Free Software Foundation, Inc. # written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, June 1995 # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to <bug-automake@gnu.org> or send patches to # <automake-patches@gnu.org>. if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST fi case $1 in '') echo "$0: No file. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: mdate-sh [--help] [--version] FILE Pretty-print the modification day of FILE, in the format: 1 January 1970 Report bugs to <bug-automake@gnu.org>. EOF exit $? ;; -v | --v*) echo "mdate-sh $scriptversion" exit $? ;; esac error () { echo "$0: $1" >&2 exit 1 } # Prevent date giving response in another language. LANG=C export LANG LC_ALL=C export LC_ALL LC_TIME=C export LC_TIME # GNU ls changes its time format in response to the TIME_STYLE # variable. Since we cannot assume 'unset' works, revert this # variable to its documented default. if test "${TIME_STYLE+set}" = set; then TIME_STYLE=posix-long-iso export TIME_STYLE fi save_arg1=$1 # Find out how to get the extended ls output of a file or directory. if ls -L /dev/null 1>/dev/null 2>&1; then ls_command='ls -L -l -d' else ls_command='ls -l -d' fi # Avoid user/group names that might have spaces, when possible. if ls -n /dev/null 1>/dev/null 2>&1; then ls_command="$ls_command -n" fi # A 'ls -l' line looks as follows on OS/2. # drwxrwx--- 0 Aug 11 2001 foo # This differs from Unix, which adds ownership information. # drwxrwx--- 2 root root 4096 Aug 11 2001 foo # # To find the date, we split the line on spaces and iterate on words # until we find a month. This cannot work with files whose owner is a # user named "Jan", or "Feb", etc. However, it's unlikely that '/' # will be owned by a user whose name is a month. So we first look at # the extended ls output of the root directory to decide how many # words should be skipped to get the date. # On HPUX /bin/sh, "set" interprets "-rw-r--r--" as options, so the "x" below. set x`$ls_command /` # Find which argument is the month. month= command= until test $month do test $# -gt 0 || error "failed parsing '$ls_command /' output" shift # Add another shift to the command. command="$command shift;" case $1 in Jan) month=January; nummonth=1;; Feb) month=February; nummonth=2;; Mar) month=March; nummonth=3;; Apr) month=April; nummonth=4;; May) month=May; nummonth=5;; Jun) month=June; nummonth=6;; Jul) month=July; nummonth=7;; Aug) month=August; nummonth=8;; Sep) month=September; nummonth=9;; Oct) month=October; nummonth=10;; Nov) month=November; nummonth=11;; Dec) month=December; nummonth=12;; esac done test -n "$month" || error "failed parsing '$ls_command /' output" # Get the extended ls output of the file or directory. set dummy x`eval "$ls_command \"\\\$save_arg1\""` # Remove all preceding arguments eval $command # Because of the dummy argument above, month is in $2. # # On a POSIX system, we should have # # $# = 5 # $1 = file size # $2 = month # $3 = day # $4 = year or time # $5 = filename # # On Darwin 7.7.0 and 7.6.0, we have # # $# = 4 # $1 = day # $2 = month # $3 = year or time # $4 = filename # Get the month. case $2 in Jan) month=January; nummonth=1;; Feb) month=February; nummonth=2;; Mar) month=March; nummonth=3;; Apr) month=April; nummonth=4;; May) month=May; nummonth=5;; Jun) month=June; nummonth=6;; Jul) month=July; nummonth=7;; Aug) month=August; nummonth=8;; Sep) month=September; nummonth=9;; Oct) month=October; nummonth=10;; Nov) month=November; nummonth=11;; Dec) month=December; nummonth=12;; esac case $3 in ???*) day=$1;; *) day=$3; shift;; esac # Here we have to deal with the problem that the ls output gives either # the time of day or the year. case $3 in *:*) set `date`; eval year=\$$# case $2 in Jan) nummonthtod=1;; Feb) nummonthtod=2;; Mar) nummonthtod=3;; Apr) nummonthtod=4;; May) nummonthtod=5;; Jun) nummonthtod=6;; Jul) nummonthtod=7;; Aug) nummonthtod=8;; Sep) nummonthtod=9;; Oct) nummonthtod=10;; Nov) nummonthtod=11;; Dec) nummonthtod=12;; esac # For the first six month of the year the time notation can also # be used for files modified in the last year. if (expr $nummonth \> $nummonthtod) > /dev/null; then year=`expr $year - 1` fi;; *) year=$3;; esac # The result. echo $day $month $year # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: �������������������������������������������������������������������������������������������������direvent-5.2/build-aux/install-sh�������������������������������������������������������������������0000755�0001750�0000000�00000034523�13266701462�017106� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # install - install a program, script, or datafile scriptversion=2013-12-25.23; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # 'make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. tab=' ' nl=' ' IFS=" $tab$nl" # Set DOITPROG to "echo" to test this script. doit=${DOITPROG-} doit_exec=${doit:-exec} # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false is_target_a_directory=possibly usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) is_target_a_directory=always dst_arg=$2 # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) is_target_a_directory=never;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done # We allow the use of options -d and -T together, by making -d # take the precedence; this is for compatibility with GNU install. if test -n "$dir_arg"; then if test -n "$dst_arg"; then echo "$0: target directory not allowed when installing a directory." >&2 exit 1 fi fi if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call 'install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then if test $# -gt 1 || test "$is_target_a_directory" = always; then if test ! -d "$dst_arg"; then echo "$0: $dst_arg: Is not a directory." >&2 exit 1 fi fi fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names problematic for 'test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test "$is_target_a_directory" = never; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else dstdir=`dirname "$dst"` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/d" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac oIFS=$IFS IFS=/ set -f set fnord $dstdir shift set +f IFS=$oIFS prefixes= for d do test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/build-aux/config.sub�������������������������������������������������������������������0000755�0001750�0000000�00000106223�13266701462�017062� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Configuration validation subroutine script. # Copyright 1992-2014 Free Software Foundation, Inc. timestamp='2014-12-03' # This file 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. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see <http://www.gnu.org/licenses/>. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # Please send patches to <config-patches@gnu.org>. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to <config-patches@gnu.org>." version="\ GNU config.sub ($timestamp) Copyright 1992-2014 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | \ kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; android-linux) os=-linux-android basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray | -microblaze*) os= basic_machine=$1 ;; -bluegene*) os=-cnk ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*178) os=-lynxos178 ;; -lynx*5) os=-lynxos5 ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | aarch64 | aarch64_be \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arceb \ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ | avr | avr32 \ | be32 | be64 \ | bfin \ | c4x | c8051 | clipper \ | d10v | d30v | dlx | dsp16xx \ | epiphany \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | k1om \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa32r6 | mipsisa32r6el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64r6 | mipsisa64r6el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipsr5900 | mipsr5900el \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nios | nios2 | nios2eb | nios2el \ | ns16k | ns32k \ | open8 | or1k | or1knd | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ | riscv32 | riscv64 \ | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu \ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | visium \ | we32k \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; c54x) basic_machine=tic54x-unknown ;; c55x) basic_machine=tic55x-unknown ;; c6x) basic_machine=tic6x-unknown ;; leon|leon[3-9]) basic_machine=sparc-$basic_machine ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; strongarm | thumb | xscale) basic_machine=arm-unknown ;; xgate) basic_machine=$basic_machine-unknown os=-none ;; xscaleeb) basic_machine=armeb-unknown ;; xscaleel) basic_machine=armel-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | c8051-* | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | k1om-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ | microblaze-* | microblazeel-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ | mips64r5900-* | mips64r5900el-* \ | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa32r6-* | mipsisa32r6el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64r6-* | mipsisa64r6el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipsr5900-* | mipsr5900el-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* | nios2eb-* | nios2el-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | or1k*-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pyramid-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ | visium-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aros) basic_machine=i386-pc os=-aros ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; bluegene*) basic_machine=powerpc-ibm os=-cnk ;; c54x-*) basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c55x-*) basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c6x-*) basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c90) basic_machine=c90-cray os=-unicos ;; cegcc) basic_machine=arm-unknown os=-cegcc ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16 | cr16-*) basic_machine=cr16-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dicos) basic_machine=i686-pc os=-dicos ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; leon-*|leon[3-9]-*) basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'` ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; microblaze*) basic_machine=microblaze-xilinx ;; mingw64) basic_machine=x86_64-pc os=-mingw64 ;; mingw32) basic_machine=i686-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; moxiebox) basic_machine=moxie-unknown os=-moxiebox ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; msys) basic_machine=i686-pc os=-msys ;; mvs) basic_machine=i370-ibm os=-mvs ;; nacl) basic_machine=le32-unknown os=-nacl ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; neo-tandem) basic_machine=neo-tandem ;; nse-tandem) basic_machine=nse-tandem ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc | ppcbe) basic_machine=powerpc-unknown ;; ppc-* | ppcbe-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos | rdos64) basic_machine=x86_64-pc os=-rdos ;; rdos32) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; strongarm-* | thumb-*) basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tile*) basic_machine=$basic_machine-unknown os=-linux-gnu ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; xscale-* | xscalee[bl]-*) basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; z80-*-coff) basic_machine=z80-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -auroraux) os=-auroraux ;; -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* | -plan9* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -bitrig* | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-musl* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* | -tirtos*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -nacl*) ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; c8051-*) os=-elf ;; hexagon-*) os=-elf ;; tic54x-*) os=-coff ;; tic55x-*) os=-coff ;; tic6x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -cnk*|-aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/build-aux/ylwrap�����������������������������������������������������������������������0000755�0001750�0000000�00000015312�13266701462�016341� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # ylwrap - wrapper for lex/yacc invocations. scriptversion=2013-01-12.17; # UTC # Copyright (C) 1996-2014 Free Software Foundation, Inc. # # Written by Tom Tromey <tromey@cygnus.com>. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to <bug-automake@gnu.org> or send patches to # <automake-patches@gnu.org>. get_dirname () { case $1 in */*|*\\*) printf '%s\n' "$1" | sed -e 's|\([\\/]\)[^\\/]*$|\1|';; # Otherwise, we want the empty string (not "."). esac } # guard FILE # ---------- # The CPP macro used to guard inclusion of FILE. guard () { printf '%s\n' "$1" \ | sed \ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' \ -e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]/_/g' \ -e 's/__*/_/g' } # quote_for_sed [STRING] # ---------------------- # Return STRING (or stdin) quoted to be used as a sed pattern. quote_for_sed () { case $# in 0) cat;; 1) printf '%s\n' "$1";; esac \ | sed -e 's|[][\\.*]|\\&|g' } case "$1" in '') echo "$0: No files given. Try '$0 --help' for more information." 1>&2 exit 1 ;; --basedir) basedir=$2 shift 2 ;; -h|--h*) cat <<\EOF Usage: ylwrap [--help|--version] INPUT [OUTPUT DESIRED]... -- PROGRAM [ARGS]... Wrapper for lex/yacc invocations, renaming files as desired. INPUT is the input file OUTPUT is one file PROG generates DESIRED is the file we actually want instead of OUTPUT PROGRAM is program to run ARGS are passed to PROG Any number of OUTPUT,DESIRED pairs may be used. Report bugs to <bug-automake@gnu.org>. EOF exit $? ;; -v|--v*) echo "ylwrap $scriptversion" exit $? ;; esac # The input. input=$1 shift # We'll later need for a correct munging of "#line" directives. input_sub_rx=`get_dirname "$input" | quote_for_sed` case $input in [\\/]* | ?:[\\/]*) # Absolute path; do nothing. ;; *) # Relative path. Make it absolute. input=`pwd`/$input ;; esac input_rx=`get_dirname "$input" | quote_for_sed` # Since DOS filename conventions don't allow two dots, # the DOS version of Bison writes out y_tab.c instead of y.tab.c # and y_tab.h instead of y.tab.h. Test to see if this is the case. y_tab_nodot=false if test -f y_tab.c || test -f y_tab.h; then y_tab_nodot=true fi # The parser itself, the first file, is the destination of the .y.c # rule in the Makefile. parser=$1 # A sed program to s/FROM/TO/g for all the FROM/TO so that, for # instance, we rename #include "y.tab.h" into #include "parse.h" # during the conversion from y.tab.c to parse.c. sed_fix_filenames= # Also rename header guards, as Bison 2.7 for instance uses its header # guard in its implementation file. sed_fix_header_guards= while test $# -ne 0; do if test x"$1" = x"--"; then shift break fi from=$1 # Handle y_tab.c and y_tab.h output by DOS if $y_tab_nodot; then case $from in "y.tab.c") from=y_tab.c;; "y.tab.h") from=y_tab.h;; esac fi shift to=$1 shift sed_fix_filenames="${sed_fix_filenames}s|"`quote_for_sed "$from"`"|$to|g;" sed_fix_header_guards="${sed_fix_header_guards}s|"`guard "$from"`"|"`guard "$to"`"|g;" done # The program to run. prog=$1 shift # Make any relative path in $prog absolute. case $prog in [\\/]* | ?:[\\/]*) ;; *[\\/]*) prog=`pwd`/$prog ;; esac dirname=ylwrap$$ do_exit="cd '`pwd`' && rm -rf $dirname > /dev/null 2>&1;"' (exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 mkdir $dirname || exit 1 cd $dirname case $# in 0) "$prog" "$input" ;; *) "$prog" "$@" "$input" ;; esac ret=$? if test $ret -eq 0; then for from in * do to=`printf '%s\n' "$from" | sed "$sed_fix_filenames"` if test -f "$from"; then # If $2 is an absolute path name, then just use that, # otherwise prepend '../'. case $to in [\\/]* | ?:[\\/]*) target=$to;; *) target=../$to;; esac # Do not overwrite unchanged header files to avoid useless # recompilations. Always update the parser itself: it is the # destination of the .y.c rule in the Makefile. Divert the # output of all other files to a temporary file so we can # compare them to existing versions. if test $from != $parser; then realtarget=$target target=tmp-`printf '%s\n' "$target" | sed 's|.*[\\/]||g'` fi # Munge "#line" or "#" directives. Don't let the resulting # debug information point at an absolute srcdir. Use the real # output file name, not yy.lex.c for instance. Adjust the # include guards too. sed -e "/^#/!b" \ -e "s|$input_rx|$input_sub_rx|" \ -e "$sed_fix_filenames" \ -e "$sed_fix_header_guards" \ "$from" >"$target" || ret=$? # Check whether files must be updated. if test "$from" != "$parser"; then if test -f "$realtarget" && cmp -s "$realtarget" "$target"; then echo "$to is unchanged" rm -f "$target" else echo "updating $to" mv -f "$target" "$realtarget" fi fi else # A missing file is only an error for the parser. This is a # blatant hack to let us support using "yacc -d". If -d is not # specified, don't fail when the header file is "missing". if test "$from" = "$parser"; then ret=1 fi fi done fi # Remove the directory. cd .. rm -rf $dirname exit $ret # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/build-aux/depcomp����������������������������������������������������������������������0000755�0001750�0000000�00000056016�13266701462�016460� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2013-05-30.07; # UTC # Copyright (C) 1999-2014 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by 'PROGRAMS ARGS'. object Object file output by 'PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to <bug-automake@gnu.org>. EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac # Get the directory component of the given path, and save it in the # global variables '$dir'. Note that this directory component will # be either empty or ending with a '/' character. This is deliberate. set_dir_from () { case $1 in */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; *) dir=;; esac } # Get the suffix-stripped basename of the given path, and save it the # global variable '$base'. set_base_from () { base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` } # If no dependency file was actually created by the compiler invocation, # we still have to create a dummy depfile, to avoid errors with the # Makefile "include basename.Plo" scheme. make_dummy_depfile () { echo "#dummy" > "$depfile" } # Factor out some common post-processing of the generated depfile. # Requires the auxiliary global variable '$tmpdepfile' to be set. aix_post_process_depfile () { # If the compiler actually managed to produce a dependency file, # post-process it. if test -f "$tmpdepfile"; then # Each line is of the form 'foo.o: dependency.h'. # Do two passes, one to just change these to # $object: dependency.h # and one to simply output # dependency.h: # which is needed to avoid the deleted-header problem. { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" } > "$depfile" rm -f "$tmpdepfile" else make_dummy_depfile fi } # A tabulation character. tab=' ' # A newline character. nl=' ' # Character ranges might be problematic outside the C locale. # These definitions help. upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ lower=abcdefghijklmnopqrstuvwxyz digits=0123456789 alpha=${upper}${lower} if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Avoid interferences from the environment. gccflag= dashmflag= # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then # This is just like msvc7 but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvc7 fi if test "$depmode" = xlc; then # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. gccflag=-qmakedep=gcc,-MF depmode=gcc fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. ## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. ## (see the conditional assignment to $gccflag above). ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). Also, it might not be ## supported by the other compilers which use the 'gcc' depmode. ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The second -e expression handles DOS-style file names with drive # letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the "deleted header file" problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. ## Some versions of gcc put a space before the ':'. On the theory ## that the space means something, we add a space to the output as ## well. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like '#:fec' to the end of the # dependency line. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ | tr "$nl" ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" ;; xlc) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts '$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done aix_post_process_depfile ;; tcc) # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 # FIXME: That version still under development at the moment of writing. # Make that this statement remains true also for stable, released # versions. # It will wrap lines (doesn't matter whether long or short) with a # trailing '\', as in: # # foo.o : \ # foo.c \ # foo.h \ # # It will put a trailing '\' even on the last line, and will use leading # spaces rather than leading tabs (at least since its commit 0394caf7 # "Emit spaces for -MD"). "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. # We have to change lines of the first kind to '$object: \'. sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" # And for each line of the second kind, we have to emit a 'dep.h:' # dummy dependency, to avoid the deleted-header problem. sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; ## The order of this option in the case statement is important, since the ## shell code in configure will try each of these formats in the order ## listed in this file. A plain '-MD' option would be understood by many ## compilers, so we must ensure this comes after the gcc and icc options. pgcc) # Portland's C compiler understands '-MD'. # Will always output deps to 'file.d' where file is the root name of the # source file under compilation, even if file resides in a subdirectory. # The object file name does not affect the name of the '.d' file. # pgcc 10.2 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using '\' : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... set_dir_from "$object" # Use the source, not the object, to determine the base name, since # that's sadly what pgcc will do too. set_base_from "$source" tmpdepfile=$base.d # For projects that build the same source file twice into different object # files, the pgcc approach of using the *source* file root name can cause # problems in parallel builds. Use a locking strategy to avoid stomping on # the same $tmpdepfile. lockdir=$base.d-lock trap " echo '$0: caught signal, cleaning up...' >&2 rmdir '$lockdir' exit 1 " 1 2 13 15 numtries=100 i=$numtries while test $i -gt 0; do # mkdir is a portable test-and-set. if mkdir "$lockdir" 2>/dev/null; then # This process acquired the lock. "$@" -MD stat=$? # Release the lock. rmdir "$lockdir" break else # If the lock is being held by a different process, wait # until the winning process is done or we timeout. while test -d "$lockdir" && test $i -gt 0; do sleep 1 i=`expr $i - 1` done fi i=`expr $i - 1` done trap - 1 2 13 15 if test $i -le 0; then echo "$0: failed to acquire lock after $numtries attempts" >&2 echo "$0: check lockdir '$lockdir'" >&2 exit 1 fi if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in 'foo.d' instead, so we check for that too. # Subdirectories are respected. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then # Libtool generates 2 separate objects for the 2 libraries. These # two compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir$base.o.d # libtool 1.5 tmpdepfile2=$dir.libs/$base.o.d # Likewise. tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d "$@" -MD fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done # Same post-processing that is required for AIX mode. aix_post_process_depfile ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/'"$tab"'\1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/'"$tab"'/ G p }' >> "$depfile" echo >> "$depfile" # make sure the fragment doesn't end with a backslash rm -f "$tmpdepfile" ;; msvc7msys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for ':' # in the target name. This is to cope with DOS-style filenames: # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. "$@" $dashmflag | sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this sed invocation # correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process the last invocation # correctly. Breaking it into two sed invocations is a workaround. sed '1,2d' "$tmpdepfile" \ | tr ' ' "$nl" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E \ | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" echo "$tab" >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/build-aux/config.guess�����������������������������������������������������������������0000755�0001750�0000000�00000123672�13266701462�017426� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2014 Free Software Foundation, Inc. timestamp='2014-11-04' # This file 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. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see <http://www.gnu.org/licenses/>. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # # Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD # # Please send patches to <config-patches@gnu.org>. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to <config-patches@gnu.org>." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright 1992-2014 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown case "${UNAME_SYSTEM}" in Linux|GNU|GNU/*) # If the system lacks a compiler, then just pick glibc. # We could probably try harder. LIBC=gnu eval $set_cc_for_build cat <<-EOF > $dummy.c #include <features.h> #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #else LIBC=gnu #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` ;; esac # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm*:riscos:*:*|arm*:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux${UNAME_RELEASE} exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval $set_cc_for_build SUN_ARCH="i386" # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH="x86_64" fi fi echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include <stdio.h> /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include <sys/systemcfg.h> main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/lslpp ] ; then IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include <stdlib.h> #include <unistd.h> int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include <unistd.h> int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case ${UNAME_PROCESSOR} in amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW64*:*) echo ${UNAME_MACHINE}-pc-mingw64 exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; *:MSYS*:*) echo ${UNAME_MACHINE}-pc-msys exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; authenticamd | genuineintel | EM64T) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; IA64) echo ia64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; 8664:Windows_NT:*) echo x86_64-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; aarch64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC="gnulibc1" ; fi echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arc:Linux:*:* | arceb:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo ${UNAME_MACHINE}-unknown-linux-${LIBC} else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi else echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf fi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; cris:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; crisv32:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; frv:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; hexagon:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:Linux:*:*) echo ${UNAME_MACHINE}-pc-linux-${LIBC} exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } ;; openrisc*:Linux:*:*) echo or1k-unknown-linux-${LIBC} exit ;; or32:Linux:*:* | or1k*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; padre:Linux:*:*) echo sparc-unknown-linux-${LIBC} exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-${LIBC} exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-${LIBC} ;; PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; *) echo hppa-unknown-linux-${LIBC} ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-${LIBC} exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-${LIBC} exit ;; ppc64le:Linux:*:*) echo powerpc64le-unknown-linux-${LIBC} exit ;; ppcle:Linux:*:*) echo powerpcle-unknown-linux-${LIBC} exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux-${LIBC} exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; tile*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-${LIBC} exit ;; x86_64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name` echo ${UNAME_MACHINE}-pc-isc$UNAME_REL elif /bin/uname -X 2>/dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configury will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says <Richard.M.Bartel@ccMail.Census.GOV> echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes <hewes@openmarket.com>. # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; x86_64:Haiku:*:*) echo x86_64-unknown-haiku exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux${UNAME_RELEASE} exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux${UNAME_RELEASE} exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown eval $set_cc_for_build if test "$UNAME_PROCESSOR" = unknown ; then UNAME_PROCESSOR=powerpc fi if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi fi elif test "$UNAME_PROCESSOR" = i386 ; then # Avoid executing cc on OS X 10.9, as it ships with a stub # that puts up a graphical alert prompting to install # developer tools. Any system running Mac OS X 10.7 or # later (Darwin 11 and later) is required to have a 64-bit # processor. This is not true of the ARM version of Darwin # that Apple uses in portable devices. UNAME_PROCESSOR=x86_64 fi echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NEO-?:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk${UNAME_RELEASE} exit ;; NSE-*:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; i*86:AROS:*:*) echo ${UNAME_MACHINE}-pc-aros exit ;; x86_64:VMkernel:*:*) echo ${UNAME_MACHINE}-unknown-esx exit ;; esac cat >&2 <<EOF $0: unable to guess system type This script, last modified $timestamp, has failed to recognize the operating system you are using. It is advised that you download the most up to date version of the config scripts from http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD and http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD If the version you run ($0) is already up to date, please send the following data and any information you think might be pertinent to <config-patches@gnu.org> in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: ����������������������������������������������������������������������direvent-5.2/build-aux/texinfo.tex������������������������������������������������������������������0000644�0001750�0000000�00001167036�13266701462�017307� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������% texinfo.tex -- TeX macros to handle Texinfo files. % % Load plain if necessary, i.e., if running under initex. \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi % \def\texinfoversion{2013-02-01.11} % % Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995, % 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, % 2007, 2008, 2009, 2010, 2011, 2012, 2013 Free Software Foundation, Inc. % % This texinfo.tex file 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. % % This texinfo.tex file is distributed in the hope that it will be % useful, but WITHOUT ANY WARRANTY; without even the implied warranty % of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU % General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see <http://www.gnu.org/licenses/>. % % As a special exception, when this file is read by TeX when processing % a Texinfo source document, you may use the result without % restriction. This Exception is an additional permission under section 7 % of the GNU General Public License, version 3 ("GPLv3"). % % Please try the latest version of texinfo.tex before submitting bug % reports; you can get the latest version from: % http://ftp.gnu.org/gnu/texinfo/ (the Texinfo release area), or % http://ftpmirror.gnu.org/texinfo/ (same, via a mirror), or % http://www.gnu.org/software/texinfo/ (the Texinfo home page) % The texinfo.tex in any given distribution could well be out % of date, so if that's what you're using, please check. % % Send bug reports to bug-texinfo@gnu.org. Please include including a % complete document in each bug report with which we can reproduce the % problem. Patches are, of course, greatly appreciated. % % To process a Texinfo manual with TeX, it's most reliable to use the % texi2dvi shell script that comes with the distribution. For a simple % manual foo.texi, however, you can get away with this: % tex foo.texi % texindex foo.?? % tex foo.texi % tex foo.texi % dvips foo.dvi -o # or whatever; this makes foo.ps. % The extra TeX runs get the cross-reference information correct. % Sometimes one run after texindex suffices, and sometimes you need more % than two; texi2dvi does it as many times as necessary. % % It is possible to adapt texinfo.tex for other languages, to some % extent. You can get the existing language-specific files from the % full Texinfo distribution. % % The GNU Texinfo home page is http://www.gnu.org/software/texinfo. \message{Loading texinfo [version \texinfoversion]:} % If in a .fmt file, print the version number % and turn on active characters that we couldn't do earlier because % they might have appeared in the input file name. \everyjob{\message{[Texinfo version \texinfoversion]}% \catcode`+=\active \catcode`\_=\active} \chardef\other=12 % We never want plain's \outer definition of \+ in Texinfo. % For @tex, we can use \tabalign. \let\+ = \relax % Save some plain tex macros whose names we will redefine. \let\ptexb=\b \let\ptexbullet=\bullet \let\ptexc=\c \let\ptexcomma=\, \let\ptexdot=\. \let\ptexdots=\dots \let\ptexend=\end \let\ptexequiv=\equiv \let\ptexexclam=\! \let\ptexfootnote=\footnote \let\ptexgtr=> \let\ptexhat=^ \let\ptexi=\i \let\ptexindent=\indent \let\ptexinsert=\insert \let\ptexlbrace=\{ \let\ptexless=< \let\ptexnewwrite\newwrite \let\ptexnoindent=\noindent \let\ptexplus=+ \let\ptexraggedright=\raggedright \let\ptexrbrace=\} \let\ptexslash=\/ \let\ptexstar=\* \let\ptext=\t \let\ptextop=\top {\catcode`\'=\active \global\let\ptexquoteright'}% active in plain's math mode % If this character appears in an error message or help string, it % starts a new line in the output. \newlinechar = `^^J % Use TeX 3.0's \inputlineno to get the line number, for better error % messages, but if we're using an old version of TeX, don't do anything. % \ifx\inputlineno\thisisundefined \let\linenumber = \empty % Pre-3.0. \else \def\linenumber{l.\the\inputlineno:\space} \fi % Set up fixed words for English if not already set. \ifx\putwordAppendix\undefined \gdef\putwordAppendix{Appendix}\fi \ifx\putwordChapter\undefined \gdef\putwordChapter{Chapter}\fi \ifx\putworderror\undefined \gdef\putworderror{error}\fi \ifx\putwordfile\undefined \gdef\putwordfile{file}\fi \ifx\putwordin\undefined \gdef\putwordin{in}\fi \ifx\putwordIndexIsEmpty\undefined \gdef\putwordIndexIsEmpty{(Index is empty)}\fi \ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi \ifx\putwordInfo\undefined \gdef\putwordInfo{Info}\fi \ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi \ifx\putwordMethodon\undefined \gdef\putwordMethodon{Method on}\fi \ifx\putwordNoTitle\undefined \gdef\putwordNoTitle{No Title}\fi \ifx\putwordof\undefined \gdef\putwordof{of}\fi \ifx\putwordon\undefined \gdef\putwordon{on}\fi \ifx\putwordpage\undefined \gdef\putwordpage{page}\fi \ifx\putwordsection\undefined \gdef\putwordsection{section}\fi \ifx\putwordSection\undefined \gdef\putwordSection{Section}\fi \ifx\putwordsee\undefined \gdef\putwordsee{see}\fi \ifx\putwordSee\undefined \gdef\putwordSee{See}\fi \ifx\putwordShortTOC\undefined \gdef\putwordShortTOC{Short Contents}\fi \ifx\putwordTOC\undefined \gdef\putwordTOC{Table of Contents}\fi % \ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi \ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi \ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi \ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi \ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi \ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi \ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi \ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi \ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi \ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi \ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi \ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi % \ifx\putwordDefmac\undefined \gdef\putwordDefmac{Macro}\fi \ifx\putwordDefspec\undefined \gdef\putwordDefspec{Special Form}\fi \ifx\putwordDefvar\undefined \gdef\putwordDefvar{Variable}\fi \ifx\putwordDefopt\undefined \gdef\putwordDefopt{User Option}\fi \ifx\putwordDeffunc\undefined \gdef\putwordDeffunc{Function}\fi % Since the category of space is not known, we have to be careful. \chardef\spacecat = 10 \def\spaceisspace{\catcode`\ =\spacecat} % sometimes characters are active, so we need control sequences. \chardef\ampChar = `\& \chardef\colonChar = `\: \chardef\commaChar = `\, \chardef\dashChar = `\- \chardef\dotChar = `\. \chardef\exclamChar= `\! \chardef\hashChar = `\# \chardef\lquoteChar= `\` \chardef\questChar = `\? \chardef\rquoteChar= `\' \chardef\semiChar = `\; \chardef\slashChar = `\/ \chardef\underChar = `\_ % Ignore a token. % \def\gobble#1{} % The following is used inside several \edef's. \def\makecsname#1{\expandafter\noexpand\csname#1\endcsname} % Hyphenation fixes. \hyphenation{ Flor-i-da Ghost-script Ghost-view Mac-OS Post-Script ap-pen-dix bit-map bit-maps data-base data-bases eshell fall-ing half-way long-est man-u-script man-u-scripts mini-buf-fer mini-buf-fers over-view par-a-digm par-a-digms rath-er rec-tan-gu-lar ro-bot-ics se-vere-ly set-up spa-ces spell-ing spell-ings stand-alone strong-est time-stamp time-stamps which-ever white-space wide-spread wrap-around } % Margin to add to right of even pages, to left of odd pages. \newdimen\bindingoffset \newdimen\normaloffset \newdimen\pagewidth \newdimen\pageheight % For a final copy, take out the rectangles % that mark overfull boxes (in case you have decided % that the text looks ok even though it passes the margin). % \def\finalout{\overfullrule=0pt } % Sometimes it is convenient to have everything in the transcript file % and nothing on the terminal. We don't just call \tracingall here, % since that produces some useless output on the terminal. We also make % some effort to order the tracing commands to reduce output in the log % file; cf. trace.sty in LaTeX. % \def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}% \def\loggingall{% \tracingstats2 \tracingpages1 \tracinglostchars2 % 2 gives us more in etex \tracingparagraphs1 \tracingoutput1 \tracingmacros2 \tracingrestores1 \showboxbreadth\maxdimen \showboxdepth\maxdimen \ifx\eTeXversion\thisisundefined\else % etex gives us more logging \tracingscantokens1 \tracingifs1 \tracinggroups1 \tracingnesting2 \tracingassigns1 \fi \tracingcommands3 % 3 gives us more in etex \errorcontextlines16 }% % @errormsg{MSG}. Do the index-like expansions on MSG, but if things % aren't perfect, it's not the end of the world, being an error message, % after all. % \def\errormsg{\begingroup \indexnofonts \doerrormsg} \def\doerrormsg#1{\errmessage{#1}} % add check for \lastpenalty to plain's definitions. If the last thing % we did was a \nobreak, we don't want to insert more space. % \def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount \removelastskip\penalty-50\smallskip\fi\fi} \def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount \removelastskip\penalty-100\medskip\fi\fi} \def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount \removelastskip\penalty-200\bigskip\fi\fi} % Do @cropmarks to get crop marks. % \newif\ifcropmarks \let\cropmarks = \cropmarkstrue % % Dimensions to add cropmarks at corners. % Added by P. A. MacKay, 12 Nov. 1986 % \newdimen\outerhsize \newdimen\outervsize % set by the paper size routines \newdimen\cornerlong \cornerlong=1pc \newdimen\cornerthick \cornerthick=.3pt \newdimen\topandbottommargin \topandbottommargin=.75in % Output a mark which sets \thischapter, \thissection and \thiscolor. % We dump everything together because we only have one kind of mark. % This works because we only use \botmark / \topmark, not \firstmark. % % A mark contains a subexpression of the \ifcase ... \fi construct. % \get*marks macros below extract the needed part using \ifcase. % % Another complication is to let the user choose whether \thischapter % (\thissection) refers to the chapter (section) in effect at the top % of a page, or that at the bottom of a page. The solution is % described on page 260 of The TeXbook. It involves outputting two % marks for the sectioning macros, one before the section break, and % one after. I won't pretend I can describe this better than DEK... \def\domark{% \toks0=\expandafter{\lastchapterdefs}% \toks2=\expandafter{\lastsectiondefs}% \toks4=\expandafter{\prevchapterdefs}% \toks6=\expandafter{\prevsectiondefs}% \toks8=\expandafter{\lastcolordefs}% \mark{% \the\toks0 \the\toks2 \noexpand\or \the\toks4 \the\toks6 \noexpand\else \the\toks8 }% } % \topmark doesn't work for the very first chapter (after the title % page or the contents), so we use \firstmark there -- this gets us % the mark with the chapter defs, unless the user sneaks in, e.g., % @setcolor (or @url, or @link, etc.) between @contents and the very % first @chapter. \def\gettopheadingmarks{% \ifcase0\topmark\fi \ifx\thischapter\empty \ifcase0\firstmark\fi \fi } \def\getbottomheadingmarks{\ifcase1\botmark\fi} \def\getcolormarks{\ifcase2\topmark\fi} % Avoid "undefined control sequence" errors. \def\lastchapterdefs{} \def\lastsectiondefs{} \def\prevchapterdefs{} \def\prevsectiondefs{} \def\lastcolordefs{} % Main output routine. \chardef\PAGE = 255 \output = {\onepageout{\pagecontents\PAGE}} \newbox\headlinebox \newbox\footlinebox % \onepageout takes a vbox as an argument. Note that \pagecontents % does insertions, but you have to call it yourself. \def\onepageout#1{% \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi % \ifodd\pageno \advance\hoffset by \bindingoffset \else \advance\hoffset by -\bindingoffset\fi % % Do this outside of the \shipout so @code etc. will be expanded in % the headline as they should be, not taken literally (outputting ''code). \ifodd\pageno \getoddheadingmarks \else \getevenheadingmarks \fi \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}% \ifodd\pageno \getoddfootingmarks \else \getevenfootingmarks \fi \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}% % {% % Have to do this stuff outside the \shipout because we want it to % take effect in \write's, yet the group defined by the \vbox ends % before the \shipout runs. % \indexdummies % don't expand commands in the output. \normalturnoffactive % \ in index entries must not stay \, e.g., if % the page break happens to be in the middle of an example. % We don't want .vr (or whatever) entries like this: % \entry{{\tt \indexbackslash }acronym}{32}{\code {\acronym}} % "\acronym" won't work when it's read back in; % it needs to be % {\code {{\tt \backslashcurfont }acronym} \shipout\vbox{% % Do this early so pdf references go to the beginning of the page. \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi % \ifcropmarks \vbox to \outervsize\bgroup \hsize = \outerhsize \vskip-\topandbottommargin \vtop to0pt{% \line{\ewtop\hfil\ewtop}% \nointerlineskip \line{% \vbox{\moveleft\cornerthick\nstop}% \hfill \vbox{\moveright\cornerthick\nstop}% }% \vss}% \vskip\topandbottommargin \line\bgroup \hfil % center the page within the outer (page) hsize. \ifodd\pageno\hskip\bindingoffset\fi \vbox\bgroup \fi % \unvbox\headlinebox \pagebody{#1}% \ifdim\ht\footlinebox > 0pt % Only leave this space if the footline is nonempty. % (We lessened \vsize for it in \oddfootingyyy.) % The \baselineskip=24pt in plain's \makefootline has no effect. \vskip 24pt \unvbox\footlinebox \fi % \ifcropmarks \egroup % end of \vbox\bgroup \hfil\egroup % end of (centering) \line\bgroup \vskip\topandbottommargin plus1fill minus1fill \boxmaxdepth = \cornerthick \vbox to0pt{\vss \line{% \vbox{\moveleft\cornerthick\nsbot}% \hfill \vbox{\moveright\cornerthick\nsbot}% }% \nointerlineskip \line{\ewbot\hfil\ewbot}% }% \egroup % \vbox from first cropmarks clause \fi }% end of \shipout\vbox }% end of group with \indexdummies \advancepageno \ifnum\outputpenalty>-20000 \else\dosupereject\fi } \newinsert\margin \dimen\margin=\maxdimen \def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}} {\catcode`\@ =11 \gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi % marginal hacks, juha@viisa.uucp (Juha Takala) \ifvoid\margin\else % marginal info is present \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi \dimen@=\dp#1\relax \unvbox#1\relax \ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi \ifr@ggedbottom \kern-\dimen@ \vfil \fi} } % Here are the rules for the cropmarks. Note that they are % offset so that the space between them is truly \outerhsize or \outervsize % (P. A. MacKay, 12 November, 1986) % \def\ewtop{\vrule height\cornerthick depth0pt width\cornerlong} \def\nstop{\vbox {\hrule height\cornerthick depth\cornerlong width\cornerthick}} \def\ewbot{\vrule height0pt depth\cornerthick width\cornerlong} \def\nsbot{\vbox {\hrule height\cornerlong depth\cornerthick width\cornerthick}} % Parse an argument, then pass it to #1. The argument is the rest of % the input line (except we remove a trailing comment). #1 should be a % macro which expects an ordinary undelimited TeX argument. % \def\parsearg{\parseargusing{}} \def\parseargusing#1#2{% \def\argtorun{#2}% \begingroup \obeylines \spaceisspace #1% \parseargline\empty% Insert the \empty token, see \finishparsearg below. } {\obeylines % \gdef\parseargline#1^^M{% \endgroup % End of the group started in \parsearg. \argremovecomment #1\comment\ArgTerm% }% } % First remove any @comment, then any @c comment. \def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm} \def\argremovec#1\c#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm} % Each occurrence of `\^^M' or `<space>\^^M' is replaced by a single space. % % \argremovec might leave us with trailing space, e.g., % @end itemize @c foo % This space token undergoes the same procedure and is eventually removed % by \finishparsearg. % \def\argcheckspaces#1\^^M{\argcheckspacesX#1\^^M \^^M} \def\argcheckspacesX#1 \^^M{\argcheckspacesY#1\^^M} \def\argcheckspacesY#1\^^M#2\^^M#3\ArgTerm{% \def\temp{#3}% \ifx\temp\empty % Do not use \next, perhaps the caller of \parsearg uses it; reuse \temp: \let\temp\finishparsearg \else \let\temp\argcheckspaces \fi % Put the space token in: \temp#1 #3\ArgTerm } % If a _delimited_ argument is enclosed in braces, they get stripped; so % to get _exactly_ the rest of the line, we had to prevent such situation. % We prepended an \empty token at the very beginning and we expand it now, % just before passing the control to \argtorun. % (Similarly, we have to think about #3 of \argcheckspacesY above: it is % either the null string, or it ends with \^^M---thus there is no danger % that a pair of braces would be stripped. % % But first, we have to remove the trailing space token. % \def\finishparsearg#1 \ArgTerm{\expandafter\argtorun\expandafter{#1}} % \parseargdef\foo{...} % is roughly equivalent to % \def\foo{\parsearg\Xfoo} % \def\Xfoo#1{...} % % Actually, I use \csname\string\foo\endcsname, ie. \\foo, as it is my % favourite TeX trick. --kasal, 16nov03 \def\parseargdef#1{% \expandafter \doparseargdef \csname\string#1\endcsname #1% } \def\doparseargdef#1#2{% \def#2{\parsearg#1}% \def#1##1% } % Several utility definitions with active space: { \obeyspaces \gdef\obeyedspace{ } % Make each space character in the input produce a normal interword % space in the output. Don't allow a line break at this space, as this % is used only in environments like @example, where each line of input % should produce a line of output anyway. % \gdef\sepspaces{\obeyspaces\let =\tie} % If an index command is used in an @example environment, any spaces % therein should become regular spaces in the raw index file, not the % expansion of \tie (\leavevmode \penalty \@M \ ). \gdef\unsepspaces{\let =\space} } \def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next} % Define the framework for environments in texinfo.tex. It's used like this: % % \envdef\foo{...} % \def\Efoo{...} % % It's the responsibility of \envdef to insert \begingroup before the % actual body; @end closes the group after calling \Efoo. \envdef also % defines \thisenv, so the current environment is known; @end checks % whether the environment name matches. The \checkenv macro can also be % used to check whether the current environment is the one expected. % % Non-false conditionals (@iftex, @ifset) don't fit into this, so they % are not treated as environments; they don't open a group. (The % implementation of @end takes care not to call \endgroup in this % special case.) % At run-time, environments start with this: \def\startenvironment#1{\begingroup\def\thisenv{#1}} % initialize \let\thisenv\empty % ... but they get defined via ``\envdef\foo{...}'': \long\def\envdef#1#2{\def#1{\startenvironment#1#2}} \def\envparseargdef#1#2{\parseargdef#1{\startenvironment#1#2}} % Check whether we're in the right environment: \def\checkenv#1{% \def\temp{#1}% \ifx\thisenv\temp \else \badenverr \fi } % Environment mismatch, #1 expected: \def\badenverr{% \errhelp = \EMsimple \errmessage{This command can appear only \inenvironment\temp, not \inenvironment\thisenv}% } \def\inenvironment#1{% \ifx#1\empty outside of any environment% \else in environment \expandafter\string#1% \fi } % @end foo executes the definition of \Efoo. % But first, it executes a specialized version of \checkenv % \parseargdef\end{% \if 1\csname iscond.#1\endcsname \else % The general wording of \badenverr may not be ideal. \expandafter\checkenv\csname#1\endcsname \csname E#1\endcsname \endgroup \fi } \newhelp\EMsimple{Press RETURN to continue.} % Be sure we're in horizontal mode when doing a tie, since we make space % equivalent to this in @example-like environments. Otherwise, a space % at the beginning of a line will start with \penalty -- and % since \penalty is valid in vertical mode, we'd end up putting the % penalty on the vertical list instead of in the new paragraph. {\catcode`@ = 11 % Avoid using \@M directly, because that causes trouble % if the definition is written into an index file. \global\let\tiepenalty = \@M \gdef\tie{\leavevmode\penalty\tiepenalty\ } } % @: forces normal size whitespace following. \def\:{\spacefactor=1000 } % @* forces a line break. \def\*{\unskip\hfil\break\hbox{}\ignorespaces} % @/ allows a line break. \let\/=\allowbreak % @. is an end-of-sentence period. \def\.{.\spacefactor=\endofsentencespacefactor\space} % @! is an end-of-sentence bang. \def\!{!\spacefactor=\endofsentencespacefactor\space} % @? is an end-of-sentence query. \def\?{?\spacefactor=\endofsentencespacefactor\space} % @frenchspacing on|off says whether to put extra space after punctuation. % \def\onword{on} \def\offword{off} % \parseargdef\frenchspacing{% \def\temp{#1}% \ifx\temp\onword \plainfrenchspacing \else\ifx\temp\offword \plainnonfrenchspacing \else \errhelp = \EMsimple \errmessage{Unknown @frenchspacing option `\temp', must be on|off}% \fi\fi } % @w prevents a word break. Without the \leavevmode, @w at the % beginning of a paragraph, when TeX is still in vertical mode, would % produce a whole line of output instead of starting the paragraph. \def\w#1{\leavevmode\hbox{#1}} % @group ... @end group forces ... to be all on one page, by enclosing % it in a TeX vbox. We use \vtop instead of \vbox to construct the box % to keep its height that of a normal line. According to the rules for % \topskip (p.114 of the TeXbook), the glue inserted is % max (\topskip - \ht (first item), 0). If that height is large, % therefore, no glue is inserted, and the space between the headline and % the text is small, which looks bad. % % Another complication is that the group might be very large. This can % cause the glue on the previous page to be unduly stretched, because it % does not have much material. In this case, it's better to add an % explicit \vfill so that the extra space is at the bottom. The % threshold for doing this is if the group is more than \vfilllimit % percent of a page (\vfilllimit can be changed inside of @tex). % \newbox\groupbox \def\vfilllimit{0.7} % \envdef\group{% \ifnum\catcode`\^^M=\active \else \errhelp = \groupinvalidhelp \errmessage{@group invalid in context where filling is enabled}% \fi \startsavinginserts % \setbox\groupbox = \vtop\bgroup % Do @comment since we are called inside an environment such as % @example, where each end-of-line in the input causes an % end-of-line in the output. We don't want the end-of-line after % the `@group' to put extra space in the output. Since @group % should appear on a line by itself (according to the Texinfo % manual), we don't worry about eating any user text. \comment } % % The \vtop produces a box with normal height and large depth; thus, TeX puts % \baselineskip glue before it, and (when the next line of text is done) % \lineskip glue after it. Thus, space below is not quite equal to space % above. But it's pretty close. \def\Egroup{% % To get correct interline space between the last line of the group % and the first line afterwards, we have to propagate \prevdepth. \endgraf % Not \par, as it may have been set to \lisppar. \global\dimen1 = \prevdepth \egroup % End the \vtop. % \dimen0 is the vertical size of the group's box. \dimen0 = \ht\groupbox \advance\dimen0 by \dp\groupbox % \dimen2 is how much space is left on the page (more or less). \dimen2 = \pageheight \advance\dimen2 by -\pagetotal % if the group doesn't fit on the current page, and it's a big big % group, force a page break. \ifdim \dimen0 > \dimen2 \ifdim \pagetotal < \vfilllimit\pageheight \page \fi \fi \box\groupbox \prevdepth = \dimen1 \checkinserts } % % TeX puts in an \escapechar (i.e., `@') at the beginning of the help % message, so this ends up printing `@group can only ...'. % \newhelp\groupinvalidhelp{% group can only be used in environments such as @example,^^J% where each line of input produces a line of output.} % @need space-in-mils % forces a page break if there is not space-in-mils remaining. \newdimen\mil \mil=0.001in \parseargdef\need{% % Ensure vertical mode, so we don't make a big box in the middle of a % paragraph. \par % % If the @need value is less than one line space, it's useless. \dimen0 = #1\mil \dimen2 = \ht\strutbox \advance\dimen2 by \dp\strutbox \ifdim\dimen0 > \dimen2 % % Do a \strut just to make the height of this box be normal, so the % normal leading is inserted relative to the preceding line. % And a page break here is fine. \vtop to #1\mil{\strut\vfil}% % % TeX does not even consider page breaks if a penalty added to the % main vertical list is 10000 or more. But in order to see if the % empty box we just added fits on the page, we must make it consider % page breaks. On the other hand, we don't want to actually break the % page after the empty box. So we use a penalty of 9999. % % There is an extremely small chance that TeX will actually break the % page at this \penalty, if there are no other feasible breakpoints in % sight. (If the user is using lots of big @group commands, which % almost-but-not-quite fill up a page, TeX will have a hard time doing % good page breaking, for example.) However, I could not construct an % example where a page broke at this \penalty; if it happens in a real % document, then we can reconsider our strategy. \penalty9999 % % Back up by the size of the box, whether we did a page break or not. \kern -#1\mil % % Do not allow a page break right after this kern. \nobreak \fi } % @br forces paragraph break (and is undocumented). \let\br = \par % @page forces the start of a new page. % \def\page{\par\vfill\supereject} % @exdent text.... % outputs text on separate line in roman font, starting at standard page margin % This records the amount of indent in the innermost environment. % That's how much \exdent should take out. \newskip\exdentamount % This defn is used inside fill environments such as @defun. \parseargdef\exdent{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break} % This defn is used inside nofill environments such as @example. \parseargdef\nofillexdent{{\advance \leftskip by -\exdentamount \leftline{\hskip\leftskip{\rm#1}}}} % @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current % paragraph. For more general purposes, use the \margin insertion % class. WHICH is `l' or `r'. Not documented, written for gawk manual. % \newskip\inmarginspacing \inmarginspacing=1cm \def\strutdepth{\dp\strutbox} % \def\doinmargin#1#2{\strut\vadjust{% \nobreak \kern-\strutdepth \vtop to \strutdepth{% \baselineskip=\strutdepth \vss % if you have multiple lines of stuff to put here, you'll need to % make the vbox yourself of the appropriate size. \ifx#1l% \llap{\ignorespaces #2\hskip\inmarginspacing}% \else \rlap{\hskip\hsize \hskip\inmarginspacing \ignorespaces #2}% \fi \null }% }} \def\inleftmargin{\doinmargin l} \def\inrightmargin{\doinmargin r} % % @inmargin{TEXT [, RIGHT-TEXT]} % (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right; % else use TEXT for both). % \def\inmargin#1{\parseinmargin #1,,\finish} \def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing. \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0 > 0pt \def\lefttext{#1}% have both texts \def\righttext{#2}% \else \def\lefttext{#1}% have only one text \def\righttext{#1}% \fi % \ifodd\pageno \def\temp{\inrightmargin\righttext}% odd page -> outside is right margin \else \def\temp{\inleftmargin\lefttext}% \fi \temp } % @| inserts a changebar to the left of the current line. It should % surround any changed text. This approach does *not* work if the % change spans more than two lines of output. To handle that, we would % have adopt a much more difficult approach (putting marks into the main % vertical list for the beginning and end of each change). This command % is not documented, not supported, and doesn't work. % \def\|{% % \vadjust can only be used in horizontal mode. \leavevmode % % Append this vertical mode material after the current line in the output. \vadjust{% % We want to insert a rule with the height and depth of the current % leading; that is exactly what \strutbox is supposed to record. \vskip-\baselineskip % % \vadjust-items are inserted at the left edge of the type. So % the \llap here moves out into the left-hand margin. \llap{% % % For a thicker or thinner bar, change the `1pt'. \vrule height\baselineskip width1pt % % This is the space between the bar and the text. \hskip 12pt }% }% } % @include FILE -- \input text of FILE. % \def\include{\parseargusing\filenamecatcodes\includezzz} \def\includezzz#1{% \pushthisfilestack \def\thisfile{#1}% {% \makevalueexpandable % we want to expand any @value in FILE. \turnoffactive % and allow special characters in the expansion \indexnofonts % Allow `@@' and other weird things in file names. \wlog{texinfo.tex: doing @include of #1^^J}% \edef\temp{\noexpand\input #1 }% % % This trickery is to read FILE outside of a group, in case it makes % definitions, etc. \expandafter }\temp \popthisfilestack } \def\filenamecatcodes{% \catcode`\\=\other \catcode`~=\other \catcode`^=\other \catcode`_=\other \catcode`|=\other \catcode`<=\other \catcode`>=\other \catcode`+=\other \catcode`-=\other \catcode`\`=\other \catcode`\'=\other } \def\pushthisfilestack{% \expandafter\pushthisfilestackX\popthisfilestack\StackTerm } \def\pushthisfilestackX{% \expandafter\pushthisfilestackY\thisfile\StackTerm } \def\pushthisfilestackY #1\StackTerm #2\StackTerm {% \gdef\popthisfilestack{\gdef\thisfile{#1}\gdef\popthisfilestack{#2}}% } \def\popthisfilestack{\errthisfilestackempty} \def\errthisfilestackempty{\errmessage{Internal error: the stack of filenames is empty.}} % \def\thisfile{} % @center line % outputs that line, centered. % \parseargdef\center{% \ifhmode \let\centersub\centerH \else \let\centersub\centerV \fi \centersub{\hfil \ignorespaces#1\unskip \hfil}% \let\centersub\relax % don't let the definition persist, just in case } \def\centerH#1{{% \hfil\break \advance\hsize by -\leftskip \advance\hsize by -\rightskip \line{#1}% \break }} % \newcount\centerpenalty \def\centerV#1{% % The idea here is the same as in \startdefun, \cartouche, etc.: if % @center is the first thing after a section heading, we need to wipe % out the negative parskip inserted by \sectionheading, but still % prevent a page break here. \centerpenalty = \lastpenalty \ifnum\centerpenalty>10000 \vskip\parskip \fi \ifnum\centerpenalty>9999 \penalty\centerpenalty \fi \line{\kern\leftskip #1\kern\rightskip}% } % @sp n outputs n lines of vertical space % \parseargdef\sp{\vskip #1\baselineskip} % @comment ...line which is ignored... % @c is the same as @comment % @ignore ... @end ignore is another way to write a comment % \def\comment{\begingroup \catcode`\^^M=\other% \catcode`\@=\other \catcode`\{=\other \catcode`\}=\other% \commentxxx} {\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}} % \let\c=\comment % @paragraphindent NCHARS % We'll use ems for NCHARS, close enough. % NCHARS can also be the word `asis' or `none'. % We cannot feasibly implement @paragraphindent asis, though. % \def\asisword{asis} % no translation, these are keywords \def\noneword{none} % \parseargdef\paragraphindent{% \def\temp{#1}% \ifx\temp\asisword \else \ifx\temp\noneword \defaultparindent = 0pt \else \defaultparindent = #1em \fi \fi \parindent = \defaultparindent } % @exampleindent NCHARS % We'll use ems for NCHARS like @paragraphindent. % It seems @exampleindent asis isn't necessary, but % I preserve it to make it similar to @paragraphindent. \parseargdef\exampleindent{% \def\temp{#1}% \ifx\temp\asisword \else \ifx\temp\noneword \lispnarrowing = 0pt \else \lispnarrowing = #1em \fi \fi } % @firstparagraphindent WORD % If WORD is `none', then suppress indentation of the first paragraph % after a section heading. If WORD is `insert', then do indent at such % paragraphs. % % The paragraph indentation is suppressed or not by calling % \suppressfirstparagraphindent, which the sectioning commands do. % We switch the definition of this back and forth according to WORD. % By default, we suppress indentation. % \def\suppressfirstparagraphindent{\dosuppressfirstparagraphindent} \def\insertword{insert} % \parseargdef\firstparagraphindent{% \def\temp{#1}% \ifx\temp\noneword \let\suppressfirstparagraphindent = \dosuppressfirstparagraphindent \else\ifx\temp\insertword \let\suppressfirstparagraphindent = \relax \else \errhelp = \EMsimple \errmessage{Unknown @firstparagraphindent option `\temp'}% \fi\fi } % Here is how we actually suppress indentation. Redefine \everypar to % \kern backwards by \parindent, and then reset itself to empty. % % We also make \indent itself not actually do anything until the next % paragraph. % \gdef\dosuppressfirstparagraphindent{% \gdef\indent{% \restorefirstparagraphindent \indent }% \gdef\noindent{% \restorefirstparagraphindent \noindent }% \global\everypar = {% \kern -\parindent \restorefirstparagraphindent }% } \gdef\restorefirstparagraphindent{% \global \let \indent = \ptexindent \global \let \noindent = \ptexnoindent \global \everypar = {}% } % @refill is a no-op. \let\refill=\relax % If working on a large document in chapters, it is convenient to % be able to disable indexing, cross-referencing, and contents, for test runs. % This is done with @novalidate (before @setfilename). % \newif\iflinks \linkstrue % by default we want the aux files. \let\novalidate = \linksfalse % @setfilename is done at the beginning of every texinfo file. % So open here the files we need to have open while reading the input. % This makes it possible to make a .fmt file for texinfo. \def\setfilename{% \fixbackslash % Turn off hack to swallow `\input texinfo'. \iflinks \tryauxfile % Open the new aux file. TeX will close it automatically at exit. \immediate\openout\auxfile=\jobname.aux \fi % \openindices needs to do some work in any case. \openindices \let\setfilename=\comment % Ignore extra @setfilename cmds. % % If texinfo.cnf is present on the system, read it. % Useful for site-wide @afourpaper, etc. \openin 1 texinfo.cnf \ifeof 1 \else \input texinfo.cnf \fi \closein 1 % \comment % Ignore the actual filename. } % Called from \setfilename. % \def\openindices{% \newindex{cp}% \newcodeindex{fn}% \newcodeindex{vr}% \newcodeindex{tp}% \newcodeindex{ky}% \newcodeindex{pg}% } % @bye. \outer\def\bye{\pagealignmacro\tracingstats=1\ptexend} \message{pdf,} % adobe `portable' document format \newcount\tempnum \newcount\lnkcount \newtoks\filename \newcount\filenamelength \newcount\pgn \newtoks\toksA \newtoks\toksB \newtoks\toksC \newtoks\toksD \newbox\boxA \newcount\countA \newif\ifpdf \newif\ifpdfmakepagedest % when pdftex is run in dvi mode, \pdfoutput is defined (so \pdfoutput=1 % can be set). So we test for \relax and 0 as well as being undefined. \ifx\pdfoutput\thisisundefined \else \ifx\pdfoutput\relax \else \ifcase\pdfoutput \else \pdftrue \fi \fi \fi % PDF uses PostScript string constants for the names of xref targets, % for display in the outlines, and in other places. Thus, we have to % double any backslashes. Otherwise, a name like "\node" will be % interpreted as a newline (\n), followed by o, d, e. Not good. % % See http://www.ntg.nl/pipermail/ntg-pdftex/2004-July/000654.html and % related messages. The final outcome is that it is up to the TeX user % to double the backslashes and otherwise make the string valid, so % that's what we do. pdftex 1.30.0 (ca.2005) introduced a primitive to % do this reliably, so we use it. % #1 is a control sequence in which to do the replacements, % which we \xdef. \def\txiescapepdf#1{% \ifx\pdfescapestring\thisisundefined % No primitive available; should we give a warning or log? % Many times it won't matter. \else % The expandable \pdfescapestring primitive escapes parentheses, % backslashes, and other special chars. \xdef#1{\pdfescapestring{#1}}% \fi } \newhelp\nopdfimagehelp{Texinfo supports .png, .jpg, .jpeg, and .pdf images with PDF output, and none of those formats could be found. (.eps cannot be supported due to the design of the PDF format; use regular TeX (DVI output) for that.)} \ifpdf % % Color manipulation macros based on pdfcolor.tex, % except using rgb instead of cmyk; the latter is said to render as a % very dark gray on-screen and a very dark halftone in print, instead % of actual black. \def\rgbDarkRed{0.50 0.09 0.12} \def\rgbBlack{0 0 0} % % k sets the color for filling (usual text, etc.); % K sets the color for stroking (thin rules, e.g., normal _'s). \def\pdfsetcolor#1{\pdfliteral{#1 rg #1 RG}} % % Set color, and create a mark which defines \thiscolor accordingly, % so that \makeheadline knows which color to restore. \def\setcolor#1{% \xdef\lastcolordefs{\gdef\noexpand\thiscolor{#1}}% \domark \pdfsetcolor{#1}% } % \def\maincolor{\rgbBlack} \pdfsetcolor{\maincolor} \edef\thiscolor{\maincolor} \def\lastcolordefs{} % \def\makefootline{% \baselineskip24pt \line{\pdfsetcolor{\maincolor}\the\footline}% } % \def\makeheadline{% \vbox to 0pt{% \vskip-22.5pt \line{% \vbox to8.5pt{}% % Extract \thiscolor definition from the marks. \getcolormarks % Typeset the headline with \maincolor, then restore the color. \pdfsetcolor{\maincolor}\the\headline\pdfsetcolor{\thiscolor}% }% \vss }% \nointerlineskip } % % \pdfcatalog{/PageMode /UseOutlines} % % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto). \def\dopdfimage#1#2#3{% \def\pdfimagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}% \def\pdfimageheight{#3}\setbox2 = \hbox{\ignorespaces #3}% % % pdftex (and the PDF format) support .pdf, .png, .jpg (among % others). Let's try in that order, PDF first since if % someone has a scalable image, presumably better to use that than a % bitmap. \let\pdfimgext=\empty \begingroup \openin 1 #1.pdf \ifeof 1 \openin 1 #1.PDF \ifeof 1 \openin 1 #1.png \ifeof 1 \openin 1 #1.jpg \ifeof 1 \openin 1 #1.jpeg \ifeof 1 \openin 1 #1.JPG \ifeof 1 \errhelp = \nopdfimagehelp \errmessage{Could not find image file #1 for pdf}% \else \gdef\pdfimgext{JPG}% \fi \else \gdef\pdfimgext{jpeg}% \fi \else \gdef\pdfimgext{jpg}% \fi \else \gdef\pdfimgext{png}% \fi \else \gdef\pdfimgext{PDF}% \fi \else \gdef\pdfimgext{pdf}% \fi \closein 1 \endgroup % % without \immediate, ancient pdftex seg faults when the same image is % included twice. (Version 3.14159-pre-1.0-unofficial-20010704.) \ifnum\pdftexversion < 14 \immediate\pdfimage \else \immediate\pdfximage \fi \ifdim \wd0 >0pt width \pdfimagewidth \fi \ifdim \wd2 >0pt height \pdfimageheight \fi \ifnum\pdftexversion<13 #1.\pdfimgext \else {#1.\pdfimgext}% \fi \ifnum\pdftexversion < 14 \else \pdfrefximage \pdflastximage \fi} % \def\pdfmkdest#1{{% % We have to set dummies so commands such as @code, and characters % such as \, aren't expanded when present in a section title. \indexnofonts \turnoffactive \makevalueexpandable \def\pdfdestname{#1}% \txiescapepdf\pdfdestname \safewhatsit{\pdfdest name{\pdfdestname} xyz}% }} % % used to mark target names; must be expandable. \def\pdfmkpgn#1{#1} % % by default, use a color that is dark enough to print on paper as % nearly black, but still distinguishable for online viewing. \def\urlcolor{\rgbDarkRed} \def\linkcolor{\rgbDarkRed} \def\endlink{\setcolor{\maincolor}\pdfendlink} % % Adding outlines to PDF; macros for calculating structure of outlines % come from Petr Olsak \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0% \else \csname#1\endcsname \fi} \def\advancenumber#1{\tempnum=\expnumber{#1}\relax \advance\tempnum by 1 \expandafter\xdef\csname#1\endcsname{\the\tempnum}} % % #1 is the section text, which is what will be displayed in the % outline by the pdf viewer. #2 is the pdf expression for the number % of subentries (or empty, for subsubsections). #3 is the node text, % which might be empty if this toc entry had no corresponding node. % #4 is the page number % \def\dopdfoutline#1#2#3#4{% % Generate a link to the node text if that exists; else, use the % page number. We could generate a destination for the section % text in the case where a section has no node, but it doesn't % seem worth the trouble, since most documents are normally structured. \edef\pdfoutlinedest{#3}% \ifx\pdfoutlinedest\empty \def\pdfoutlinedest{#4}% \else \txiescapepdf\pdfoutlinedest \fi % % Also escape PDF chars in the display string. \edef\pdfoutlinetext{#1}% \txiescapepdf\pdfoutlinetext % \pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{\pdfoutlinetext}% } % \def\pdfmakeoutlines{% \begingroup % Read toc silently, to get counts of subentries for \pdfoutline. \def\partentry##1##2##3##4{}% ignore parts in the outlines \def\numchapentry##1##2##3##4{% \def\thischapnum{##2}% \def\thissecnum{0}% \def\thissubsecnum{0}% }% \def\numsecentry##1##2##3##4{% \advancenumber{chap\thischapnum}% \def\thissecnum{##2}% \def\thissubsecnum{0}% }% \def\numsubsecentry##1##2##3##4{% \advancenumber{sec\thissecnum}% \def\thissubsecnum{##2}% }% \def\numsubsubsecentry##1##2##3##4{% \advancenumber{subsec\thissubsecnum}% }% \def\thischapnum{0}% \def\thissecnum{0}% \def\thissubsecnum{0}% % % use \def rather than \let here because we redefine \chapentry et % al. a second time, below. \def\appentry{\numchapentry}% \def\appsecentry{\numsecentry}% \def\appsubsecentry{\numsubsecentry}% \def\appsubsubsecentry{\numsubsubsecentry}% \def\unnchapentry{\numchapentry}% \def\unnsecentry{\numsecentry}% \def\unnsubsecentry{\numsubsecentry}% \def\unnsubsubsecentry{\numsubsubsecentry}% \readdatafile{toc}% % % Read toc second time, this time actually producing the outlines. % The `-' means take the \expnumber as the absolute number of % subentries, which we calculated on our first read of the .toc above. % % We use the node names as the destinations. \def\numchapentry##1##2##3##4{% \dopdfoutline{##1}{count-\expnumber{chap##2}}{##3}{##4}}% \def\numsecentry##1##2##3##4{% \dopdfoutline{##1}{count-\expnumber{sec##2}}{##3}{##4}}% \def\numsubsecentry##1##2##3##4{% \dopdfoutline{##1}{count-\expnumber{subsec##2}}{##3}{##4}}% \def\numsubsubsecentry##1##2##3##4{% count is always zero \dopdfoutline{##1}{}{##3}{##4}}% % % PDF outlines are displayed using system fonts, instead of % document fonts. Therefore we cannot use special characters, % since the encoding is unknown. For example, the eogonek from % Latin 2 (0xea) gets translated to a | character. Info from % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100. % % TODO this right, we have to translate 8-bit characters to % their "best" equivalent, based on the @documentencoding. Too % much work for too little return. Just use the ASCII equivalents % we use for the index sort strings. % \indexnofonts \setupdatafile % We can have normal brace characters in the PDF outlines, unlike % Texinfo index files. So set that up. \def\{{\lbracecharliteral}% \def\}{\rbracecharliteral}% \catcode`\\=\active \otherbackslash \input \tocreadfilename \endgroup } {\catcode`[=1 \catcode`]=2 \catcode`{=\other \catcode`}=\other \gdef\lbracecharliteral[{]% \gdef\rbracecharliteral[}]% ] % \def\skipspaces#1{\def\PP{#1}\def\D{|}% \ifx\PP\D\let\nextsp\relax \else\let\nextsp\skipspaces \addtokens{\filename}{\PP}% \advance\filenamelength by 1 \fi \nextsp} \def\getfilename#1{% \filenamelength=0 % If we don't expand the argument now, \skipspaces will get % snagged on things like "@value{foo}". \edef\temp{#1}% \expandafter\skipspaces\temp|\relax } \ifnum\pdftexversion < 14 \let \startlink \pdfannotlink \else \let \startlink \pdfstartlink \fi % make a live url in pdf output. \def\pdfurl#1{% \begingroup % it seems we really need yet another set of dummies; have not % tried to figure out what each command should do in the context % of @url. for now, just make @/ a no-op, that's the only one % people have actually reported a problem with. % \normalturnoffactive \def\@{@}% \let\/=\empty \makevalueexpandable % do we want to go so far as to use \indexnofonts instead of just % special-casing \var here? \def\var##1{##1}% % \leavevmode\setcolor{\urlcolor}% \startlink attr{/Border [0 0 0]}% user{/Subtype /Link /A << /S /URI /URI (#1) >>}% \endgroup} \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}} \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks} \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks} \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}} \def\maketoks{% \expandafter\poptoks\the\toksA|ENDTOKS|\relax \ifx\first0\adn0 \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3 \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6 \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9 \else \ifnum0=\countA\else\makelink\fi \ifx\first.\let\next=\done\else \let\next=\maketoks \addtokens{\toksB}{\the\toksD} \ifx\first,\addtokens{\toksB}{\space}\fi \fi \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \next} \def\makelink{\addtokens{\toksB}% {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0} \def\pdflink#1{% \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}} \setcolor{\linkcolor}#1\endlink} \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st} \else % non-pdf mode \let\pdfmkdest = \gobble \let\pdfurl = \gobble \let\endlink = \relax \let\setcolor = \gobble \let\pdfsetcolor = \gobble \let\pdfmakeoutlines = \relax \fi % \ifx\pdfoutput \message{fonts,} % Change the current font style to #1, remembering it in \curfontstyle. % For now, we do not accumulate font styles: @b{@i{foo}} prints foo in % italics, not bold italics. % \def\setfontstyle#1{% \def\curfontstyle{#1}% not as a control sequence, because we are \edef'd. \csname ten#1\endcsname % change the current font } % Select #1 fonts with the current style. % \def\selectfonts#1{\csname #1fonts\endcsname \csname\curfontstyle\endcsname} \def\rm{\fam=0 \setfontstyle{rm}} \def\it{\fam=\itfam \setfontstyle{it}} \def\sl{\fam=\slfam \setfontstyle{sl}} \def\bf{\fam=\bffam \setfontstyle{bf}}\def\bfstylename{bf} \def\tt{\fam=\ttfam \setfontstyle{tt}} % Unfortunately, we have to override this for titles and the like, since % in those cases "rm" is bold. Sigh. \def\rmisbold{\rm\def\curfontstyle{bf}} % Texinfo sort of supports the sans serif font style, which plain TeX does not. % So we set up a \sf. \newfam\sffam \def\sf{\fam=\sffam \setfontstyle{sf}} \let\li = \sf % Sometimes we call it \li, not \sf. % We don't need math for this font style. \def\ttsl{\setfontstyle{ttsl}} % Set the baselineskip to #1, and the lineskip and strut size % correspondingly. There is no deep meaning behind these magic numbers % used as factors; they just match (closely enough) what Knuth defined. % \def\lineskipfactor{.08333} \def\strutheightpercent{.70833} \def\strutdepthpercent {.29167} % % can get a sort of poor man's double spacing by redefining this. \def\baselinefactor{1} % \newdimen\textleading \def\setleading#1{% \dimen0 = #1\relax \normalbaselineskip = \baselinefactor\dimen0 \normallineskip = \lineskipfactor\normalbaselineskip \normalbaselines \setbox\strutbox =\hbox{% \vrule width0pt height\strutheightpercent\baselineskip depth \strutdepthpercent \baselineskip }% } % PDF CMaps. See also LaTeX's t1.cmap. % % do nothing with this by default. \expandafter\let\csname cmapOT1\endcsname\gobble \expandafter\let\csname cmapOT1IT\endcsname\gobble \expandafter\let\csname cmapOT1TT\endcsname\gobble % if we are producing pdf, and we have \pdffontattr, then define cmaps. % (\pdffontattr was introduced many years ago, but people still run % older pdftex's; it's easy to conditionalize, so we do.) \ifpdf \ifx\pdffontattr\thisisundefined \else \begingroup \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (TeX-OT1-0) %%Title: (TeX-OT1-0 TeX OT1 0) %%Version: 1.000 %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo << /Registry (TeX) /Ordering (OT1) /Supplement 0 >> def /CMapName /TeX-OT1-0 def /CMapType 2 def 1 begincodespacerange <00> <7F> endcodespacerange 8 beginbfrange <00> <01> <0393> <09> <0A> <03A8> <23> <26> <0023> <28> <3B> <0028> <3F> <5B> <003F> <5D> <5E> <005D> <61> <7A> <0061> <7B> <7C> <2013> endbfrange 40 beginbfchar <02> <0398> <03> <039B> <04> <039E> <05> <03A0> <06> <03A3> <07> <03D2> <08> <03A6> <0B> <00660066> <0C> <00660069> <0D> <0066006C> <0E> <006600660069> <0F> <00660066006C> <10> <0131> <11> <0237> <12> <0060> <13> <00B4> <14> <02C7> <15> <02D8> <16> <00AF> <17> <02DA> <18> <00B8> <19> <00DF> <1A> <00E6> <1B> <0153> <1C> <00F8> <1D> <00C6> <1E> <0152> <1F> <00D8> <21> <0021> <22> <201D> <27> <2019> <3C> <00A1> <3D> <003D> <3E> <00BF> <5C> <201C> <5F> <02D9> <60> <2018> <7D> <02DD> <7E> <007E> <7F> <00A8> endbfchar endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF }\endgroup \expandafter\edef\csname cmapOT1\endcsname#1{% \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% }% % % \cmapOT1IT \begingroup \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (TeX-OT1IT-0) %%Title: (TeX-OT1IT-0 TeX OT1IT 0) %%Version: 1.000 %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo << /Registry (TeX) /Ordering (OT1IT) /Supplement 0 >> def /CMapName /TeX-OT1IT-0 def /CMapType 2 def 1 begincodespacerange <00> <7F> endcodespacerange 8 beginbfrange <00> <01> <0393> <09> <0A> <03A8> <25> <26> <0025> <28> <3B> <0028> <3F> <5B> <003F> <5D> <5E> <005D> <61> <7A> <0061> <7B> <7C> <2013> endbfrange 42 beginbfchar <02> <0398> <03> <039B> <04> <039E> <05> <03A0> <06> <03A3> <07> <03D2> <08> <03A6> <0B> <00660066> <0C> <00660069> <0D> <0066006C> <0E> <006600660069> <0F> <00660066006C> <10> <0131> <11> <0237> <12> <0060> <13> <00B4> <14> <02C7> <15> <02D8> <16> <00AF> <17> <02DA> <18> <00B8> <19> <00DF> <1A> <00E6> <1B> <0153> <1C> <00F8> <1D> <00C6> <1E> <0152> <1F> <00D8> <21> <0021> <22> <201D> <23> <0023> <24> <00A3> <27> <2019> <3C> <00A1> <3D> <003D> <3E> <00BF> <5C> <201C> <5F> <02D9> <60> <2018> <7D> <02DD> <7E> <007E> <7F> <00A8> endbfchar endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF }\endgroup \expandafter\edef\csname cmapOT1IT\endcsname#1{% \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% }% % % \cmapOT1TT \begingroup \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (TeX-OT1TT-0) %%Title: (TeX-OT1TT-0 TeX OT1TT 0) %%Version: 1.000 %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo << /Registry (TeX) /Ordering (OT1TT) /Supplement 0 >> def /CMapName /TeX-OT1TT-0 def /CMapType 2 def 1 begincodespacerange <00> <7F> endcodespacerange 5 beginbfrange <00> <01> <0393> <09> <0A> <03A8> <21> <26> <0021> <28> <5F> <0028> <61> <7E> <0061> endbfrange 32 beginbfchar <02> <0398> <03> <039B> <04> <039E> <05> <03A0> <06> <03A3> <07> <03D2> <08> <03A6> <0B> <2191> <0C> <2193> <0D> <0027> <0E> <00A1> <0F> <00BF> <10> <0131> <11> <0237> <12> <0060> <13> <00B4> <14> <02C7> <15> <02D8> <16> <00AF> <17> <02DA> <18> <00B8> <19> <00DF> <1A> <00E6> <1B> <0153> <1C> <00F8> <1D> <00C6> <1E> <0152> <1F> <00D8> <20> <2423> <27> <2019> <60> <2018> <7F> <00A8> endbfchar endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF }\endgroup \expandafter\edef\csname cmapOT1TT\endcsname#1{% \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% }% \fi\fi % Set the font macro #1 to the font named \fontprefix#2. % #3 is the font's design size, #4 is a scale factor, #5 is the CMap % encoding (only OT1, OT1IT and OT1TT are allowed, or empty to omit). % Example: % #1 = \textrm % #2 = \rmshape % #3 = 10 % #4 = \mainmagstep % #5 = OT1 % \def\setfont#1#2#3#4#5{% \font#1=\fontprefix#2#3 scaled #4 \csname cmap#5\endcsname#1% } % This is what gets called when #5 of \setfont is empty. \let\cmap\gobble % % (end of cmaps) % Use cm as the default font prefix. % To specify the font prefix, you must define \fontprefix % before you read in texinfo.tex. \ifx\fontprefix\thisisundefined \def\fontprefix{cm} \fi % Support font families that don't use the same naming scheme as CM. \def\rmshape{r} \def\rmbshape{bx} % where the normal face is bold \def\bfshape{b} \def\bxshape{bx} \def\ttshape{tt} \def\ttbshape{tt} \def\ttslshape{sltt} \def\itshape{ti} \def\itbshape{bxti} \def\slshape{sl} \def\slbshape{bxsl} \def\sfshape{ss} \def\sfbshape{ss} \def\scshape{csc} \def\scbshape{csc} % Definitions for a main text size of 11pt. (The default in Texinfo.) % \def\definetextfontsizexi{% % Text fonts (11.2pt, magstep1). \def\textnominalsize{11pt} \edef\mainmagstep{\magstephalf} \setfont\textrm\rmshape{10}{\mainmagstep}{OT1} \setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT} \setfont\textbf\bfshape{10}{\mainmagstep}{OT1} \setfont\textit\itshape{10}{\mainmagstep}{OT1IT} \setfont\textsl\slshape{10}{\mainmagstep}{OT1} \setfont\textsf\sfshape{10}{\mainmagstep}{OT1} \setfont\textsc\scshape{10}{\mainmagstep}{OT1} \setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT} \font\texti=cmmi10 scaled \mainmagstep \font\textsy=cmsy10 scaled \mainmagstep \def\textecsize{1095} % A few fonts for @defun names and args. \setfont\defbf\bfshape{10}{\magstep1}{OT1} \setfont\deftt\ttshape{10}{\magstep1}{OT1TT} \setfont\defttsl\ttslshape{10}{\magstep1}{OT1TT} \def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf} % Fonts for indices, footnotes, small examples (9pt). \def\smallnominalsize{9pt} \setfont\smallrm\rmshape{9}{1000}{OT1} \setfont\smalltt\ttshape{9}{1000}{OT1TT} \setfont\smallbf\bfshape{10}{900}{OT1} \setfont\smallit\itshape{9}{1000}{OT1IT} \setfont\smallsl\slshape{9}{1000}{OT1} \setfont\smallsf\sfshape{9}{1000}{OT1} \setfont\smallsc\scshape{10}{900}{OT1} \setfont\smallttsl\ttslshape{10}{900}{OT1TT} \font\smalli=cmmi9 \font\smallsy=cmsy9 \def\smallecsize{0900} % Fonts for small examples (8pt). \def\smallernominalsize{8pt} \setfont\smallerrm\rmshape{8}{1000}{OT1} \setfont\smallertt\ttshape{8}{1000}{OT1TT} \setfont\smallerbf\bfshape{10}{800}{OT1} \setfont\smallerit\itshape{8}{1000}{OT1IT} \setfont\smallersl\slshape{8}{1000}{OT1} \setfont\smallersf\sfshape{8}{1000}{OT1} \setfont\smallersc\scshape{10}{800}{OT1} \setfont\smallerttsl\ttslshape{10}{800}{OT1TT} \font\smalleri=cmmi8 \font\smallersy=cmsy8 \def\smallerecsize{0800} % Fonts for title page (20.4pt): \def\titlenominalsize{20pt} \setfont\titlerm\rmbshape{12}{\magstep3}{OT1} \setfont\titleit\itbshape{10}{\magstep4}{OT1IT} \setfont\titlesl\slbshape{10}{\magstep4}{OT1} \setfont\titlett\ttbshape{12}{\magstep3}{OT1TT} \setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT} \setfont\titlesf\sfbshape{17}{\magstep1}{OT1} \let\titlebf=\titlerm \setfont\titlesc\scbshape{10}{\magstep4}{OT1} \font\titlei=cmmi12 scaled \magstep3 \font\titlesy=cmsy10 scaled \magstep4 \def\titleecsize{2074} % Chapter (and unnumbered) fonts (17.28pt). \def\chapnominalsize{17pt} \setfont\chaprm\rmbshape{12}{\magstep2}{OT1} \setfont\chapit\itbshape{10}{\magstep3}{OT1IT} \setfont\chapsl\slbshape{10}{\magstep3}{OT1} \setfont\chaptt\ttbshape{12}{\magstep2}{OT1TT} \setfont\chapttsl\ttslshape{10}{\magstep3}{OT1TT} \setfont\chapsf\sfbshape{17}{1000}{OT1} \let\chapbf=\chaprm \setfont\chapsc\scbshape{10}{\magstep3}{OT1} \font\chapi=cmmi12 scaled \magstep2 \font\chapsy=cmsy10 scaled \magstep3 \def\chapecsize{1728} % Section fonts (14.4pt). \def\secnominalsize{14pt} \setfont\secrm\rmbshape{12}{\magstep1}{OT1} \setfont\secit\itbshape{10}{\magstep2}{OT1IT} \setfont\secsl\slbshape{10}{\magstep2}{OT1} \setfont\sectt\ttbshape{12}{\magstep1}{OT1TT} \setfont\secttsl\ttslshape{10}{\magstep2}{OT1TT} \setfont\secsf\sfbshape{12}{\magstep1}{OT1} \let\secbf\secrm \setfont\secsc\scbshape{10}{\magstep2}{OT1} \font\seci=cmmi12 scaled \magstep1 \font\secsy=cmsy10 scaled \magstep2 \def\sececsize{1440} % Subsection fonts (13.15pt). \def\ssecnominalsize{13pt} \setfont\ssecrm\rmbshape{12}{\magstephalf}{OT1} \setfont\ssecit\itbshape{10}{1315}{OT1IT} \setfont\ssecsl\slbshape{10}{1315}{OT1} \setfont\ssectt\ttbshape{12}{\magstephalf}{OT1TT} \setfont\ssecttsl\ttslshape{10}{1315}{OT1TT} \setfont\ssecsf\sfbshape{12}{\magstephalf}{OT1} \let\ssecbf\ssecrm \setfont\ssecsc\scbshape{10}{1315}{OT1} \font\sseci=cmmi12 scaled \magstephalf \font\ssecsy=cmsy10 scaled 1315 \def\ssececsize{1200} % Reduced fonts for @acro in text (10pt). \def\reducednominalsize{10pt} \setfont\reducedrm\rmshape{10}{1000}{OT1} \setfont\reducedtt\ttshape{10}{1000}{OT1TT} \setfont\reducedbf\bfshape{10}{1000}{OT1} \setfont\reducedit\itshape{10}{1000}{OT1IT} \setfont\reducedsl\slshape{10}{1000}{OT1} \setfont\reducedsf\sfshape{10}{1000}{OT1} \setfont\reducedsc\scshape{10}{1000}{OT1} \setfont\reducedttsl\ttslshape{10}{1000}{OT1TT} \font\reducedi=cmmi10 \font\reducedsy=cmsy10 \def\reducedecsize{1000} \textleading = 13.2pt % line spacing for 11pt CM \textfonts % reset the current fonts \rm } % end of 11pt text font size definitions, \definetextfontsizexi % Definitions to make the main text be 10pt Computer Modern, with % section, chapter, etc., sizes following suit. This is for the GNU % Press printing of the Emacs 22 manual. Maybe other manuals in the % future. Used with @smallbook, which sets the leading to 12pt. % \def\definetextfontsizex{% % Text fonts (10pt). \def\textnominalsize{10pt} \edef\mainmagstep{1000} \setfont\textrm\rmshape{10}{\mainmagstep}{OT1} \setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT} \setfont\textbf\bfshape{10}{\mainmagstep}{OT1} \setfont\textit\itshape{10}{\mainmagstep}{OT1IT} \setfont\textsl\slshape{10}{\mainmagstep}{OT1} \setfont\textsf\sfshape{10}{\mainmagstep}{OT1} \setfont\textsc\scshape{10}{\mainmagstep}{OT1} \setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT} \font\texti=cmmi10 scaled \mainmagstep \font\textsy=cmsy10 scaled \mainmagstep \def\textecsize{1000} % A few fonts for @defun names and args. \setfont\defbf\bfshape{10}{\magstephalf}{OT1} \setfont\deftt\ttshape{10}{\magstephalf}{OT1TT} \setfont\defttsl\ttslshape{10}{\magstephalf}{OT1TT} \def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf} % Fonts for indices, footnotes, small examples (9pt). \def\smallnominalsize{9pt} \setfont\smallrm\rmshape{9}{1000}{OT1} \setfont\smalltt\ttshape{9}{1000}{OT1TT} \setfont\smallbf\bfshape{10}{900}{OT1} \setfont\smallit\itshape{9}{1000}{OT1IT} \setfont\smallsl\slshape{9}{1000}{OT1} \setfont\smallsf\sfshape{9}{1000}{OT1} \setfont\smallsc\scshape{10}{900}{OT1} \setfont\smallttsl\ttslshape{10}{900}{OT1TT} \font\smalli=cmmi9 \font\smallsy=cmsy9 \def\smallecsize{0900} % Fonts for small examples (8pt). \def\smallernominalsize{8pt} \setfont\smallerrm\rmshape{8}{1000}{OT1} \setfont\smallertt\ttshape{8}{1000}{OT1TT} \setfont\smallerbf\bfshape{10}{800}{OT1} \setfont\smallerit\itshape{8}{1000}{OT1IT} \setfont\smallersl\slshape{8}{1000}{OT1} \setfont\smallersf\sfshape{8}{1000}{OT1} \setfont\smallersc\scshape{10}{800}{OT1} \setfont\smallerttsl\ttslshape{10}{800}{OT1TT} \font\smalleri=cmmi8 \font\smallersy=cmsy8 \def\smallerecsize{0800} % Fonts for title page (20.4pt): \def\titlenominalsize{20pt} \setfont\titlerm\rmbshape{12}{\magstep3}{OT1} \setfont\titleit\itbshape{10}{\magstep4}{OT1IT} \setfont\titlesl\slbshape{10}{\magstep4}{OT1} \setfont\titlett\ttbshape{12}{\magstep3}{OT1TT} \setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT} \setfont\titlesf\sfbshape{17}{\magstep1}{OT1} \let\titlebf=\titlerm \setfont\titlesc\scbshape{10}{\magstep4}{OT1} \font\titlei=cmmi12 scaled \magstep3 \font\titlesy=cmsy10 scaled \magstep4 \def\titleecsize{2074} % Chapter fonts (14.4pt). \def\chapnominalsize{14pt} \setfont\chaprm\rmbshape{12}{\magstep1}{OT1} \setfont\chapit\itbshape{10}{\magstep2}{OT1IT} \setfont\chapsl\slbshape{10}{\magstep2}{OT1} \setfont\chaptt\ttbshape{12}{\magstep1}{OT1TT} \setfont\chapttsl\ttslshape{10}{\magstep2}{OT1TT} \setfont\chapsf\sfbshape{12}{\magstep1}{OT1} \let\chapbf\chaprm \setfont\chapsc\scbshape{10}{\magstep2}{OT1} \font\chapi=cmmi12 scaled \magstep1 \font\chapsy=cmsy10 scaled \magstep2 \def\chapecsize{1440} % Section fonts (12pt). \def\secnominalsize{12pt} \setfont\secrm\rmbshape{12}{1000}{OT1} \setfont\secit\itbshape{10}{\magstep1}{OT1IT} \setfont\secsl\slbshape{10}{\magstep1}{OT1} \setfont\sectt\ttbshape{12}{1000}{OT1TT} \setfont\secttsl\ttslshape{10}{\magstep1}{OT1TT} \setfont\secsf\sfbshape{12}{1000}{OT1} \let\secbf\secrm \setfont\secsc\scbshape{10}{\magstep1}{OT1} \font\seci=cmmi12 \font\secsy=cmsy10 scaled \magstep1 \def\sececsize{1200} % Subsection fonts (10pt). \def\ssecnominalsize{10pt} \setfont\ssecrm\rmbshape{10}{1000}{OT1} \setfont\ssecit\itbshape{10}{1000}{OT1IT} \setfont\ssecsl\slbshape{10}{1000}{OT1} \setfont\ssectt\ttbshape{10}{1000}{OT1TT} \setfont\ssecttsl\ttslshape{10}{1000}{OT1TT} \setfont\ssecsf\sfbshape{10}{1000}{OT1} \let\ssecbf\ssecrm \setfont\ssecsc\scbshape{10}{1000}{OT1} \font\sseci=cmmi10 \font\ssecsy=cmsy10 \def\ssececsize{1000} % Reduced fonts for @acro in text (9pt). \def\reducednominalsize{9pt} \setfont\reducedrm\rmshape{9}{1000}{OT1} \setfont\reducedtt\ttshape{9}{1000}{OT1TT} \setfont\reducedbf\bfshape{10}{900}{OT1} \setfont\reducedit\itshape{9}{1000}{OT1IT} \setfont\reducedsl\slshape{9}{1000}{OT1} \setfont\reducedsf\sfshape{9}{1000}{OT1} \setfont\reducedsc\scshape{10}{900}{OT1} \setfont\reducedttsl\ttslshape{10}{900}{OT1TT} \font\reducedi=cmmi9 \font\reducedsy=cmsy9 \def\reducedecsize{0900} \divide\parskip by 2 % reduce space between paragraphs \textleading = 12pt % line spacing for 10pt CM \textfonts % reset the current fonts \rm } % end of 10pt text font size definitions, \definetextfontsizex % We provide the user-level command % @fonttextsize 10 % (or 11) to redefine the text font size. pt is assumed. % \def\xiword{11} \def\xword{10} \def\xwordpt{10pt} % \parseargdef\fonttextsize{% \def\textsizearg{#1}% %\wlog{doing @fonttextsize \textsizearg}% % % Set \globaldefs so that documents can use this inside @tex, since % makeinfo 4.8 does not support it, but we need it nonetheless. % \begingroup \globaldefs=1 \ifx\textsizearg\xword \definetextfontsizex \else \ifx\textsizearg\xiword \definetextfontsizexi \else \errhelp=\EMsimple \errmessage{@fonttextsize only supports `10' or `11', not `\textsizearg'} \fi\fi \endgroup } % In order for the font changes to affect most math symbols and letters, % we have to define the \textfont of the standard families. Since % texinfo doesn't allow for producing subscripts and superscripts except % in the main text, we don't bother to reset \scriptfont and % \scriptscriptfont (which would also require loading a lot more fonts). % \def\resetmathfonts{% \textfont0=\tenrm \textfont1=\teni \textfont2=\tensy \textfont\itfam=\tenit \textfont\slfam=\tensl \textfont\bffam=\tenbf \textfont\ttfam=\tentt \textfont\sffam=\tensf } % The font-changing commands redefine the meanings of \tenSTYLE, instead % of just \STYLE. We do this because \STYLE needs to also set the % current \fam for math mode. Our \STYLE (e.g., \rm) commands hardwire % \tenSTYLE to set the current font. % % Each font-changing command also sets the names \lsize (one size lower) % and \lllsize (three sizes lower). These relative commands are used in % the LaTeX logo and acronyms. % % This all needs generalizing, badly. % \def\textfonts{% \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy \let\tenttsl=\textttsl \def\curfontsize{text}% \def\lsize{reduced}\def\lllsize{smaller}% \resetmathfonts \setleading{\textleading}} \def\titlefonts{% \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy \let\tenttsl=\titlettsl \def\curfontsize{title}% \def\lsize{chap}\def\lllsize{subsec}% \resetmathfonts \setleading{27pt}} \def\titlefont#1{{\titlefonts\rmisbold #1}} \def\chapfonts{% \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy \let\tenttsl=\chapttsl \def\curfontsize{chap}% \def\lsize{sec}\def\lllsize{text}% \resetmathfonts \setleading{19pt}} \def\secfonts{% \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy \let\tenttsl=\secttsl \def\curfontsize{sec}% \def\lsize{subsec}\def\lllsize{reduced}% \resetmathfonts \setleading{16pt}} \def\subsecfonts{% \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy \let\tenttsl=\ssecttsl \def\curfontsize{ssec}% \def\lsize{text}\def\lllsize{small}% \resetmathfonts \setleading{15pt}} \let\subsubsecfonts = \subsecfonts \def\reducedfonts{% \let\tenrm=\reducedrm \let\tenit=\reducedit \let\tensl=\reducedsl \let\tenbf=\reducedbf \let\tentt=\reducedtt \let\reducedcaps=\reducedsc \let\tensf=\reducedsf \let\teni=\reducedi \let\tensy=\reducedsy \let\tenttsl=\reducedttsl \def\curfontsize{reduced}% \def\lsize{small}\def\lllsize{smaller}% \resetmathfonts \setleading{10.5pt}} \def\smallfonts{% \let\tenrm=\smallrm \let\tenit=\smallit \let\tensl=\smallsl \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy \let\tenttsl=\smallttsl \def\curfontsize{small}% \def\lsize{smaller}\def\lllsize{smaller}% \resetmathfonts \setleading{10.5pt}} \def\smallerfonts{% \let\tenrm=\smallerrm \let\tenit=\smallerit \let\tensl=\smallersl \let\tenbf=\smallerbf \let\tentt=\smallertt \let\smallcaps=\smallersc \let\tensf=\smallersf \let\teni=\smalleri \let\tensy=\smallersy \let\tenttsl=\smallerttsl \def\curfontsize{smaller}% \def\lsize{smaller}\def\lllsize{smaller}% \resetmathfonts \setleading{9.5pt}} % Fonts for short table of contents. \setfont\shortcontrm\rmshape{12}{1000}{OT1} \setfont\shortcontbf\bfshape{10}{\magstep1}{OT1} % no cmb12 \setfont\shortcontsl\slshape{12}{1000}{OT1} \setfont\shortconttt\ttshape{12}{1000}{OT1TT} % Define these just so they can be easily changed for other fonts. \def\angleleft{$\langle$} \def\angleright{$\rangle$} % Set the fonts to use with the @small... environments. \let\smallexamplefonts = \smallfonts % About \smallexamplefonts. If we use \smallfonts (9pt), @smallexample % can fit this many characters: % 8.5x11=86 smallbook=72 a4=90 a5=69 % If we use \scriptfonts (8pt), then we can fit this many characters: % 8.5x11=90+ smallbook=80 a4=90+ a5=77 % For me, subjectively, the few extra characters that fit aren't worth % the additional smallness of 8pt. So I'm making the default 9pt. % % By the way, for comparison, here's what fits with @example (10pt): % 8.5x11=71 smallbook=60 a4=75 a5=58 % --karl, 24jan03. % Set up the default fonts, so we can use them for creating boxes. % \definetextfontsizexi \message{markup,} % Check if we are currently using a typewriter font. Since all the % Computer Modern typewriter fonts have zero interword stretch (and % shrink), and it is reasonable to expect all typewriter fonts to have % this property, we can check that font parameter. % \def\ifmonospace{\ifdim\fontdimen3\font=0pt } % Markup style infrastructure. \defmarkupstylesetup\INITMACRO will % define and register \INITMACRO to be called on markup style changes. % \INITMACRO can check \currentmarkupstyle for the innermost % style and the set of \ifmarkupSTYLE switches for all styles % currently in effect. \newif\ifmarkupvar \newif\ifmarkupsamp \newif\ifmarkupkey %\newif\ifmarkupfile % @file == @samp. %\newif\ifmarkupoption % @option == @samp. \newif\ifmarkupcode \newif\ifmarkupkbd %\newif\ifmarkupenv % @env == @code. %\newif\ifmarkupcommand % @command == @code. \newif\ifmarkuptex % @tex (and part of @math, for now). \newif\ifmarkupexample \newif\ifmarkupverb \newif\ifmarkupverbatim \let\currentmarkupstyle\empty \def\setupmarkupstyle#1{% \csname markup#1true\endcsname \def\currentmarkupstyle{#1}% \markupstylesetup } \let\markupstylesetup\empty \def\defmarkupstylesetup#1{% \expandafter\def\expandafter\markupstylesetup \expandafter{\markupstylesetup #1}% \def#1% } % Markup style setup for left and right quotes. \defmarkupstylesetup\markupsetuplq{% \expandafter\let\expandafter \temp \csname markupsetuplq\currentmarkupstyle\endcsname \ifx\temp\relax \markupsetuplqdefault \else \temp \fi } \defmarkupstylesetup\markupsetuprq{% \expandafter\let\expandafter \temp \csname markupsetuprq\currentmarkupstyle\endcsname \ifx\temp\relax \markupsetuprqdefault \else \temp \fi } { \catcode`\'=\active \catcode`\`=\active \gdef\markupsetuplqdefault{\let`\lq} \gdef\markupsetuprqdefault{\let'\rq} \gdef\markupsetcodequoteleft{\let`\codequoteleft} \gdef\markupsetcodequoteright{\let'\codequoteright} } \let\markupsetuplqcode \markupsetcodequoteleft \let\markupsetuprqcode \markupsetcodequoteright % \let\markupsetuplqexample \markupsetcodequoteleft \let\markupsetuprqexample \markupsetcodequoteright % \let\markupsetuplqkbd \markupsetcodequoteleft \let\markupsetuprqkbd \markupsetcodequoteright % \let\markupsetuplqsamp \markupsetcodequoteleft \let\markupsetuprqsamp \markupsetcodequoteright % \let\markupsetuplqverb \markupsetcodequoteleft \let\markupsetuprqverb \markupsetcodequoteright % \let\markupsetuplqverbatim \markupsetcodequoteleft \let\markupsetuprqverbatim \markupsetcodequoteright % Allow an option to not use regular directed right quote/apostrophe % (char 0x27), but instead the undirected quote from cmtt (char 0x0d). % The undirected quote is ugly, so don't make it the default, but it % works for pasting with more pdf viewers (at least evince), the % lilypond developers report. xpdf does work with the regular 0x27. % \def\codequoteright{% \expandafter\ifx\csname SETtxicodequoteundirected\endcsname\relax \expandafter\ifx\csname SETcodequoteundirected\endcsname\relax '% \else \char'15 \fi \else \char'15 \fi } % % and a similar option for the left quote char vs. a grave accent. % Modern fonts display ASCII 0x60 as a grave accent, so some people like % the code environments to do likewise. % \def\codequoteleft{% \expandafter\ifx\csname SETtxicodequotebacktick\endcsname\relax \expandafter\ifx\csname SETcodequotebacktick\endcsname\relax % [Knuth] pp. 380,381,391 % \relax disables Spanish ligatures ?` and !` of \tt font. \relax`% \else \char'22 \fi \else \char'22 \fi } % Commands to set the quote options. % \parseargdef\codequoteundirected{% \def\temp{#1}% \ifx\temp\onword \expandafter\let\csname SETtxicodequoteundirected\endcsname = t% \else\ifx\temp\offword \expandafter\let\csname SETtxicodequoteundirected\endcsname = \relax \else \errhelp = \EMsimple \errmessage{Unknown @codequoteundirected value `\temp', must be on|off}% \fi\fi } % \parseargdef\codequotebacktick{% \def\temp{#1}% \ifx\temp\onword \expandafter\let\csname SETtxicodequotebacktick\endcsname = t% \else\ifx\temp\offword \expandafter\let\csname SETtxicodequotebacktick\endcsname = \relax \else \errhelp = \EMsimple \errmessage{Unknown @codequotebacktick value `\temp', must be on|off}% \fi\fi } % [Knuth] pp. 380,381,391, disable Spanish ligatures ?` and !` of \tt font. \def\noligaturesquoteleft{\relax\lq} % Count depth in font-changes, for error checks \newcount\fontdepth \fontdepth=0 % Font commands. % #1 is the font command (\sl or \it), #2 is the text to slant. % If we are in a monospaced environment, however, 1) always use \ttsl, % and 2) do not add an italic correction. \def\dosmartslant#1#2{% \ifusingtt {{\ttsl #2}\let\next=\relax}% {\def\next{{#1#2}\futurelet\next\smartitaliccorrection}}% \next } \def\smartslanted{\dosmartslant\sl} \def\smartitalic{\dosmartslant\it} % Output an italic correction unless \next (presumed to be the following % character) is such as not to need one. \def\smartitaliccorrection{% \ifx\next,% \else\ifx\next-% \else\ifx\next.% \else\ptexslash \fi\fi\fi \aftersmartic } % Unconditional use \ttsl, and no ic. @var is set to this for defuns. \def\ttslanted#1{{\ttsl #1}} % @cite is like \smartslanted except unconditionally use \sl. We never want % ttsl for book titles, do we? \def\cite#1{{\sl #1}\futurelet\next\smartitaliccorrection} \def\aftersmartic{} \def\var#1{% \let\saveaftersmartic = \aftersmartic \def\aftersmartic{\null\let\aftersmartic=\saveaftersmartic}% \smartslanted{#1}% } \let\i=\smartitalic \let\slanted=\smartslanted \let\dfn=\smartslanted \let\emph=\smartitalic % Explicit font changes: @r, @sc, undocumented @ii. \def\r#1{{\rm #1}} % roman font \def\sc#1{{\smallcaps#1}} % smallcaps font \def\ii#1{{\it #1}} % italic font % @b, explicit bold. Also @strong. \def\b#1{{\bf #1}} \let\strong=\b % @sansserif, explicit sans. \def\sansserif#1{{\sf #1}} % We can't just use \exhyphenpenalty, because that only has effect at % the end of a paragraph. Restore normal hyphenation at the end of the % group within which \nohyphenation is presumably called. % \def\nohyphenation{\hyphenchar\font = -1 \aftergroup\restorehyphenation} \def\restorehyphenation{\hyphenchar\font = `- } % Set sfcode to normal for the chars that usually have another value. % Can't use plain's \frenchspacing because it uses the `\x notation, and % sometimes \x has an active definition that messes things up. % \catcode`@=11 \def\plainfrenchspacing{% \sfcode\dotChar =\@m \sfcode\questChar=\@m \sfcode\exclamChar=\@m \sfcode\colonChar=\@m \sfcode\semiChar =\@m \sfcode\commaChar =\@m \def\endofsentencespacefactor{1000}% for @. and friends } \def\plainnonfrenchspacing{% \sfcode`\.3000\sfcode`\?3000\sfcode`\!3000 \sfcode`\:2000\sfcode`\;1500\sfcode`\,1250 \def\endofsentencespacefactor{3000}% for @. and friends } \catcode`@=\other \def\endofsentencespacefactor{3000}% default % @t, explicit typewriter. \def\t#1{% {\tt \rawbackslash \plainfrenchspacing #1}% \null } % @samp. \def\samp#1{{\setupmarkupstyle{samp}\lq\tclose{#1}\rq\null}} % @indicateurl is \samp, that is, with quotes. \let\indicateurl=\samp % @code (and similar) prints in typewriter, but with spaces the same % size as normal in the surrounding text, without hyphenation, etc. % This is a subroutine for that. \def\tclose#1{% {% % Change normal interword space to be same as for the current font. \spaceskip = \fontdimen2\font % % Switch to typewriter. \tt % % But `\ ' produces the large typewriter interword space. \def\ {{\spaceskip = 0pt{} }}% % % Turn off hyphenation. \nohyphenation % \rawbackslash \plainfrenchspacing #1% }% \null % reset spacefactor to 1000 } % We *must* turn on hyphenation at `-' and `_' in @code. % Otherwise, it is too hard to avoid overfull hboxes % in the Emacs manual, the Library manual, etc. % % Unfortunately, TeX uses one parameter (\hyphenchar) to control % both hyphenation at - and hyphenation within words. % We must therefore turn them both off (\tclose does that) % and arrange explicitly to hyphenate at a dash. % -- rms. { \catcode`\-=\active \catcode`\_=\active \catcode`\'=\active \catcode`\`=\active \global\let'=\rq \global\let`=\lq % default definitions % \global\def\code{\begingroup \setupmarkupstyle{code}% % The following should really be moved into \setupmarkupstyle handlers. \catcode\dashChar=\active \catcode\underChar=\active \ifallowcodebreaks \let-\codedash \let_\codeunder \else \let-\normaldash \let_\realunder \fi \codex } } \def\codex #1{\tclose{#1}\endgroup} \def\normaldash{-} \def\codedash{-\discretionary{}{}{}} \def\codeunder{% % this is all so @math{@code{var_name}+1} can work. In math mode, _ % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.) % will therefore expand the active definition of _, which is us % (inside @code that is), therefore an endless loop. \ifusingtt{\ifmmode \mathchar"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_. \else\normalunderscore \fi \discretionary{}{}{}}% {\_}% } % An additional complication: the above will allow breaks after, e.g., % each of the four underscores in __typeof__. This is bad. % @allowcodebreaks provides a document-level way to turn breaking at - % and _ on and off. % \newif\ifallowcodebreaks \allowcodebreakstrue \def\keywordtrue{true} \def\keywordfalse{false} \parseargdef\allowcodebreaks{% \def\txiarg{#1}% \ifx\txiarg\keywordtrue \allowcodebreakstrue \else\ifx\txiarg\keywordfalse \allowcodebreaksfalse \else \errhelp = \EMsimple \errmessage{Unknown @allowcodebreaks option `\txiarg', must be true|false}% \fi\fi } % For @command, @env, @file, @option quotes seem unnecessary, % so use \code rather than \samp. \let\command=\code \let\env=\code \let\file=\code \let\option=\code % @uref (abbreviation for `urlref') takes an optional (comma-separated) % second argument specifying the text to display and an optional third % arg as text to display instead of (rather than in addition to) the url % itself. First (mandatory) arg is the url. % (This \urefnobreak definition isn't used now, leaving it for a while % for comparison.) \def\urefnobreak#1{\dourefnobreak #1,,,\finish} \def\dourefnobreak#1,#2,#3,#4\finish{\begingroup \unsepspaces \pdfurl{#1}% \setbox0 = \hbox{\ignorespaces #3}% \ifdim\wd0 > 0pt \unhbox0 % third arg given, show only that \else \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0 > 0pt \ifpdf \unhbox0 % PDF: 2nd arg given, show only it \else \unhbox0\ (\code{#1})% DVI: 2nd arg given, show both it and url \fi \else \code{#1}% only url given, so show it \fi \fi \endlink \endgroup} % This \urefbreak definition is the active one. \def\urefbreak{\begingroup \urefcatcodes \dourefbreak} \let\uref=\urefbreak \def\dourefbreak#1{\urefbreakfinish #1,,,\finish} \def\urefbreakfinish#1,#2,#3,#4\finish{% doesn't work in @example \unsepspaces \pdfurl{#1}% \setbox0 = \hbox{\ignorespaces #3}% \ifdim\wd0 > 0pt \unhbox0 % third arg given, show only that \else \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0 > 0pt \ifpdf \unhbox0 % PDF: 2nd arg given, show only it \else \unhbox0\ (\urefcode{#1})% DVI: 2nd arg given, show both it and url \fi \else \urefcode{#1}% only url given, so show it \fi \fi \endlink \endgroup} % Allow line breaks around only a few characters (only). \def\urefcatcodes{% \catcode\ampChar=\active \catcode\dotChar=\active \catcode\hashChar=\active \catcode\questChar=\active \catcode\slashChar=\active } { \urefcatcodes % \global\def\urefcode{\begingroup \setupmarkupstyle{code}% \urefcatcodes \let&\urefcodeamp \let.\urefcodedot \let#\urefcodehash \let?\urefcodequest \let/\urefcodeslash \codex } % % By default, they are just regular characters. \global\def&{\normalamp} \global\def.{\normaldot} \global\def#{\normalhash} \global\def?{\normalquest} \global\def/{\normalslash} } % we put a little stretch before and after the breakable chars, to help % line breaking of long url's. The unequal skips make look better in % cmtt at least, especially for dots. \def\urefprestretch{\urefprebreak \hskip0pt plus.13em } \def\urefpoststretch{\urefpostbreak \hskip0pt plus.1em } % \def\urefcodeamp{\urefprestretch \&\urefpoststretch} \def\urefcodedot{\urefprestretch .\urefpoststretch} \def\urefcodehash{\urefprestretch \#\urefpoststretch} \def\urefcodequest{\urefprestretch ?\urefpoststretch} \def\urefcodeslash{\futurelet\next\urefcodeslashfinish} { \catcode`\/=\active \global\def\urefcodeslashfinish{% \urefprestretch \slashChar % Allow line break only after the final / in a sequence of % slashes, to avoid line break between the slashes in http://. \ifx\next/\else \urefpoststretch \fi } } % One more complication: by default we'll break after the special % characters, but some people like to break before the special chars, so % allow that. Also allow no breaking at all, for manual control. % \parseargdef\urefbreakstyle{% \def\txiarg{#1}% \ifx\txiarg\wordnone \def\urefprebreak{\nobreak}\def\urefpostbreak{\nobreak} \else\ifx\txiarg\wordbefore \def\urefprebreak{\allowbreak}\def\urefpostbreak{\nobreak} \else\ifx\txiarg\wordafter \def\urefprebreak{\nobreak}\def\urefpostbreak{\allowbreak} \else \errhelp = \EMsimple \errmessage{Unknown @urefbreakstyle setting `\txiarg'}% \fi\fi\fi } \def\wordafter{after} \def\wordbefore{before} \def\wordnone{none} \urefbreakstyle after % @url synonym for @uref, since that's how everyone uses it. % \let\url=\uref % rms does not like angle brackets --karl, 17may97. % So now @email is just like @uref, unless we are pdf. % %\def\email#1{\angleleft{\tt #1}\angleright} \ifpdf \def\email#1{\doemail#1,,\finish} \def\doemail#1,#2,#3\finish{\begingroup \unsepspaces \pdfurl{mailto:#1}% \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi \endlink \endgroup} \else \let\email=\uref \fi % @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always), % `example' (@kbd uses ttsl only inside of @example and friends), % or `code' (@kbd uses normal tty font always). \parseargdef\kbdinputstyle{% \def\txiarg{#1}% \ifx\txiarg\worddistinct \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}% \else\ifx\txiarg\wordexample \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}% \else\ifx\txiarg\wordcode \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}% \else \errhelp = \EMsimple \errmessage{Unknown @kbdinputstyle setting `\txiarg'}% \fi\fi\fi } \def\worddistinct{distinct} \def\wordexample{example} \def\wordcode{code} % Default is `distinct'. \kbdinputstyle distinct % @kbd is like @code, except that if the argument is just one @key command, % then @kbd has no effect. \def\kbd#1{{\def\look{#1}\expandafter\kbdsub\look??\par}} \def\xkey{\key} \def\kbdsub#1#2#3\par{% \def\one{#1}\def\three{#3}\def\threex{??}% \ifx\one\xkey\ifx\threex\three \key{#2}% \else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi \else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi } % definition of @key that produces a lozenge. Doesn't adjust to text size. %\setfont\keyrm\rmshape{8}{1000}{OT1} %\font\keysy=cmsy9 %\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{% % \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{% % \vbox{\hrule\kern-0.4pt % \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}% % \kern-0.4pt\hrule}% % \kern-.06em\raise0.4pt\hbox{\angleright}}}} % definition of @key with no lozenge. If the current font is already % monospace, don't change it; that way, we respect @kbdinputstyle. But % if it isn't monospace, then use \tt. % \def\key#1{{\setupmarkupstyle{key}% \nohyphenation \ifmonospace\else\tt\fi #1}\null} % @clicksequence{File @click{} Open ...} \def\clicksequence#1{\begingroup #1\endgroup} % @clickstyle @arrow (by default) \parseargdef\clickstyle{\def\click{#1}} \def\click{\arrow} % Typeset a dimension, e.g., `in' or `pt'. The only reason for the % argument is to make the input look right: @dmn{pt} instead of @dmn{}pt. % \def\dmn#1{\thinspace #1} % @l was never documented to mean ``switch to the Lisp font'', % and it is not used as such in any manual I can find. We need it for % Polish suppressed-l. --karl, 22sep96. %\def\l#1{{\li #1}\null} % @acronym for "FBI", "NATO", and the like. % We print this one point size smaller, since it's intended for % all-uppercase. % \def\acronym#1{\doacronym #1,,\finish} \def\doacronym#1,#2,#3\finish{% {\selectfonts\lsize #1}% \def\temp{#2}% \ifx\temp\empty \else \space ({\unsepspaces \ignorespaces \temp \unskip})% \fi \null % reset \spacefactor=1000 } % @abbr for "Comput. J." and the like. % No font change, but don't do end-of-sentence spacing. % \def\abbr#1{\doabbr #1,,\finish} \def\doabbr#1,#2,#3\finish{% {\plainfrenchspacing #1}% \def\temp{#2}% \ifx\temp\empty \else \space ({\unsepspaces \ignorespaces \temp \unskip})% \fi \null % reset \spacefactor=1000 } % @asis just yields its argument. Used with @table, for example. % \def\asis#1{#1} % @math outputs its argument in math mode. % % One complication: _ usually means subscripts, but it could also mean % an actual _ character, as in @math{@var{some_variable} + 1}. So make % _ active, and distinguish by seeing if the current family is \slfam, % which is what @var uses. { \catcode`\_ = \active \gdef\mathunderscore{% \catcode`\_=\active \def_{\ifnum\fam=\slfam \_\else\sb\fi}% } } % Another complication: we want \\ (and @\) to output a math (or tt) \. % FYI, plain.tex uses \\ as a temporary control sequence (for no % particular reason), but this is not advertised and we don't care. % % The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\. \def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi} % \def\math{% \tex \mathunderscore \let\\ = \mathbackslash \mathactive % make the texinfo accent commands work in math mode \let\"=\ddot \let\'=\acute \let\==\bar \let\^=\hat \let\`=\grave \let\u=\breve \let\v=\check \let\~=\tilde \let\dotaccent=\dot $\finishmath } \def\finishmath#1{#1$\endgroup} % Close the group opened by \tex. % Some active characters (such as <) are spaced differently in math. % We have to reset their definitions in case the @math was an argument % to a command which sets the catcodes (such as @item or @section). % { \catcode`^ = \active \catcode`< = \active \catcode`> = \active \catcode`+ = \active \catcode`' = \active \gdef\mathactive{% \let^ = \ptexhat \let< = \ptexless \let> = \ptexgtr \let+ = \ptexplus \let' = \ptexquoteright } } % ctrl is no longer a Texinfo command, but leave this definition for fun. \def\ctrl #1{{\tt \rawbackslash \hat}#1} % @inlinefmt{FMTNAME,PROCESSED-TEXT} and @inlineraw{FMTNAME,RAW-TEXT}. % Ignore unless FMTNAME == tex; then it is like @iftex and @tex, % except specified as a normal braced arg, so no newlines to worry about. % \def\outfmtnametex{tex} % \long\def\inlinefmt#1{\doinlinefmt #1,\finish} \long\def\doinlinefmt#1,#2,\finish{% \def\inlinefmtname{#1}% \ifx\inlinefmtname\outfmtnametex \ignorespaces #2\fi } % For raw, must switch into @tex before parsing the argument, to avoid % setting catcodes prematurely. Doing it this way means that, for % example, @inlineraw{html, foo{bar} gets a parse error instead of being % ignored. But this isn't important because if people want a literal % *right* brace they would have to use a command anyway, so they may as % well use a command to get a left brace too. We could re-use the % delimiter character idea from \verb, but it seems like overkill. % \long\def\inlineraw{\tex \doinlineraw} \long\def\doinlineraw#1{\doinlinerawtwo #1,\finish} \def\doinlinerawtwo#1,#2,\finish{% \def\inlinerawname{#1}% \ifx\inlinerawname\outfmtnametex \ignorespaces #2\fi \endgroup % close group opened by \tex. } \message{glyphs,} % and logos. % @@ prints an @, as does @atchar{}. \def\@{\char64 } \let\atchar=\@ % @{ @} @lbracechar{} @rbracechar{} all generate brace characters. % Unless we're in typewriter, use \ecfont because the CM text fonts do % not have braces, and we don't want to switch into math. \def\mylbrace{{\ifmonospace\else\ecfont\fi \char123}} \def\myrbrace{{\ifmonospace\else\ecfont\fi \char125}} \let\{=\mylbrace \let\lbracechar=\{ \let\}=\myrbrace \let\rbracechar=\} \begingroup % Definitions to produce \{ and \} commands for indices, % and @{ and @} for the aux/toc files. \catcode`\{ = \other \catcode`\} = \other \catcode`\[ = 1 \catcode`\] = 2 \catcode`\! = 0 \catcode`\\ = \other !gdef!lbracecmd[\{]% !gdef!rbracecmd[\}]% !gdef!lbraceatcmd[@{]% !gdef!rbraceatcmd[@}]% !endgroup % @comma{} to avoid , parsing problems. \let\comma = , % Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent % Others are defined by plain TeX: @` @' @" @^ @~ @= @u @v @H. \let\, = \ptexc \let\dotaccent = \ptexdot \def\ringaccent#1{{\accent23 #1}} \let\tieaccent = \ptext \let\ubaraccent = \ptexb \let\udotaccent = \d % Other special characters: @questiondown @exclamdown @ordf @ordm % Plain TeX defines: @AA @AE @O @OE @L (plus lowercase versions) @ss. \def\questiondown{?`} \def\exclamdown{!`} \def\ordf{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{a}}} \def\ordm{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{o}}} % Dotless i and dotless j, used for accents. \def\imacro{i} \def\jmacro{j} \def\dotless#1{% \def\temp{#1}% \ifx\temp\imacro \ifmmode\imath \else\ptexi \fi \else\ifx\temp\jmacro \ifmmode\jmath \else\j \fi \else \errmessage{@dotless can be used only with i or j}% \fi\fi } % The \TeX{} logo, as in plain, but resetting the spacing so that a % period following counts as ending a sentence. (Idea found in latex.) % \edef\TeX{\TeX \spacefactor=1000 } % @LaTeX{} logo. Not quite the same results as the definition in % latex.ltx, since we use a different font for the raised A; it's most % convenient for us to use an explicitly smaller font, rather than using % the \scriptstyle font (since we don't reset \scriptstyle and % \scriptscriptstyle). % \def\LaTeX{% L\kern-.36em {\setbox0=\hbox{T}% \vbox to \ht0{\hbox{% \ifx\textnominalsize\xwordpt % for 10pt running text, \lllsize (8pt) is too small for the A in LaTeX. % Revert to plain's \scriptsize, which is 7pt. \count255=\the\fam $\fam\count255 \scriptstyle A$% \else % For 11pt, we can use our lllsize. \selectfonts\lllsize A% \fi }% \vss }}% \kern-.15em \TeX } % Some math mode symbols. \def\bullet{$\ptexbullet$} \def\geq{\ifmmode \ge\else $\ge$\fi} \def\leq{\ifmmode \le\else $\le$\fi} \def\minus{\ifmmode -\else $-$\fi} % @dots{} outputs an ellipsis using the current font. % We do .5em per period so that it has the same spacing in the cm % typewriter fonts as three actual period characters; on the other hand, % in other typewriter fonts three periods are wider than 1.5em. So do % whichever is larger. % \def\dots{% \leavevmode \setbox0=\hbox{...}% get width of three periods \ifdim\wd0 > 1.5em \dimen0 = \wd0 \else \dimen0 = 1.5em \fi \hbox to \dimen0{% \hskip 0pt plus.25fil .\hskip 0pt plus1fil .\hskip 0pt plus1fil .\hskip 0pt plus.5fil }% } % @enddots{} is an end-of-sentence ellipsis. % \def\enddots{% \dots \spacefactor=\endofsentencespacefactor } % @point{}, @result{}, @expansion{}, @print{}, @equiv{}. % % Since these characters are used in examples, they should be an even number of % \tt widths. Each \tt character is 1en, so two makes it 1em. % \def\point{$\star$} \def\arrow{\leavevmode\raise.05ex\hbox to 1em{\hfil$\rightarrow$\hfil}} \def\result{\leavevmode\raise.05ex\hbox to 1em{\hfil$\Rightarrow$\hfil}} \def\expansion{\leavevmode\hbox to 1em{\hfil$\mapsto$\hfil}} \def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}} \def\equiv{\leavevmode\hbox to 1em{\hfil$\ptexequiv$\hfil}} % The @error{} command. % Adapted from the TeXbook's \boxit. % \newbox\errorbox % {\tentt \global\dimen0 = 3em}% Width of the box. \dimen2 = .55pt % Thickness of rules % The text. (`r' is open on the right, `e' somewhat less so on the left.) \setbox0 = \hbox{\kern-.75pt \reducedsf \putworderror\kern-1.5pt} % \setbox\errorbox=\hbox to \dimen0{\hfil \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right. \advance\hsize by -2\dimen2 % Rules. \vbox{% \hrule height\dimen2 \hbox{\vrule width\dimen2 \kern3pt % Space to left of text. \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below. \kern3pt\vrule width\dimen2}% Space to right. \hrule height\dimen2} \hfil} % \def\error{\leavevmode\lower.7ex\copy\errorbox} % @pounds{} is a sterling sign, which Knuth put in the CM italic font. % \def\pounds{{\it\$}} % @euro{} comes from a separate font, depending on the current style. % We use the free feym* fonts from the eurosym package by Henrik % Theiling, which support regular, slanted, bold and bold slanted (and % "outlined" (blackboard board, sort of) versions, which we don't need). % It is available from http://www.ctan.org/tex-archive/fonts/eurosym. % % Although only regular is the truly official Euro symbol, we ignore % that. The Euro is designed to be slightly taller than the regular % font height. % % feymr - regular % feymo - slanted % feybr - bold % feybo - bold slanted % % There is no good (free) typewriter version, to my knowledge. % A feymr10 euro is ~7.3pt wide, while a normal cmtt10 char is ~5.25pt wide. % Hmm. % % Also doesn't work in math. Do we need to do math with euro symbols? % Hope not. % % \def\euro{{\eurofont e}} \def\eurofont{% % We set the font at each command, rather than predefining it in % \textfonts and the other font-switching commands, so that % installations which never need the symbol don't have to have the % font installed. % % There is only one designed size (nominal 10pt), so we always scale % that to the current nominal size. % % By the way, simply using "at 1em" works for cmr10 and the like, but % does not work for cmbx10 and other extended/shrunken fonts. % \def\eurosize{\csname\curfontsize nominalsize\endcsname}% % \ifx\curfontstyle\bfstylename % bold: \font\thiseurofont = \ifusingit{feybo10}{feybr10} at \eurosize \else % regular: \font\thiseurofont = \ifusingit{feymo10}{feymr10} at \eurosize \fi \thiseurofont } % Glyphs from the EC fonts. We don't use \let for the aliases, because % sometimes we redefine the original macro, and the alias should reflect % the redefinition. % % Use LaTeX names for the Icelandic letters. \def\DH{{\ecfont \char"D0}} % Eth \def\dh{{\ecfont \char"F0}} % eth \def\TH{{\ecfont \char"DE}} % Thorn \def\th{{\ecfont \char"FE}} % thorn % \def\guillemetleft{{\ecfont \char"13}} \def\guillemotleft{\guillemetleft} \def\guillemetright{{\ecfont \char"14}} \def\guillemotright{\guillemetright} \def\guilsinglleft{{\ecfont \char"0E}} \def\guilsinglright{{\ecfont \char"0F}} \def\quotedblbase{{\ecfont \char"12}} \def\quotesinglbase{{\ecfont \char"0D}} % % This positioning is not perfect (see the ogonek LaTeX package), but % we have the precomposed glyphs for the most common cases. We put the % tests to use those glyphs in the single \ogonek macro so we have fewer % dummy definitions to worry about for index entries, etc. % % ogonek is also used with other letters in Lithuanian (IOU), but using % the precomposed glyphs for those is not so easy since they aren't in % the same EC font. \def\ogonek#1{{% \def\temp{#1}% \ifx\temp\macrocharA\Aogonek \else\ifx\temp\macrochara\aogonek \else\ifx\temp\macrocharE\Eogonek \else\ifx\temp\macrochare\eogonek \else \ecfont \setbox0=\hbox{#1}% \ifdim\ht0=1ex\accent"0C #1% \else\ooalign{\unhbox0\crcr\hidewidth\char"0C \hidewidth}% \fi \fi\fi\fi\fi }% } \def\Aogonek{{\ecfont \char"81}}\def\macrocharA{A} \def\aogonek{{\ecfont \char"A1}}\def\macrochara{a} \def\Eogonek{{\ecfont \char"86}}\def\macrocharE{E} \def\eogonek{{\ecfont \char"A6}}\def\macrochare{e} % % Use the ec* fonts (cm-super in outline format) for non-CM glyphs. \def\ecfont{% % We can't distinguish serif/sans and italic/slanted, but this % is used for crude hacks anyway (like adding French and German % quotes to documents typeset with CM, where we lose kerning), so % hopefully nobody will notice/care. \edef\ecsize{\csname\curfontsize ecsize\endcsname}% \edef\nominalsize{\csname\curfontsize nominalsize\endcsname}% \ifmonospace % typewriter: \font\thisecfont = ectt\ecsize \space at \nominalsize \else \ifx\curfontstyle\bfstylename % bold: \font\thisecfont = ecb\ifusingit{i}{x}\ecsize \space at \nominalsize \else % regular: \font\thisecfont = ec\ifusingit{ti}{rm}\ecsize \space at \nominalsize \fi \fi \thisecfont } % @registeredsymbol - R in a circle. The font for the R should really % be smaller yet, but lllsize is the best we can do for now. % Adapted from the plain.tex definition of \copyright. % \def\registeredsymbol{% $^{{\ooalign{\hfil\raise.07ex\hbox{\selectfonts\lllsize R}% \hfil\crcr\Orb}}% }$% } % @textdegree - the normal degrees sign. % \def\textdegree{$^\circ$} % Laurent Siebenmann reports \Orb undefined with: % Textures 1.7.7 (preloaded format=plain 93.10.14) (68K) 16 APR 2004 02:38 % so we'll define it if necessary. % \ifx\Orb\thisisundefined \def\Orb{\mathhexbox20D} \fi % Quotes. \chardef\quotedblleft="5C \chardef\quotedblright=`\" \chardef\quoteleft=`\` \chardef\quoteright=`\' \message{page headings,} \newskip\titlepagetopglue \titlepagetopglue = 1.5in \newskip\titlepagebottomglue \titlepagebottomglue = 2pc % First the title page. Must do @settitle before @titlepage. \newif\ifseenauthor \newif\iffinishedtitlepage % Do an implicit @contents or @shortcontents after @end titlepage if the % user says @setcontentsaftertitlepage or @setshortcontentsaftertitlepage. % \newif\ifsetcontentsaftertitlepage \let\setcontentsaftertitlepage = \setcontentsaftertitlepagetrue \newif\ifsetshortcontentsaftertitlepage \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue \parseargdef\shorttitlepage{% \begingroup \hbox{}\vskip 1.5in \chaprm \centerline{#1}% \endgroup\page\hbox{}\page} \envdef\titlepage{% % Open one extra group, as we want to close it in the middle of \Etitlepage. \begingroup \parindent=0pt \textfonts % Leave some space at the very top of the page. \vglue\titlepagetopglue % No rule at page bottom unless we print one at the top with @title. \finishedtitlepagetrue % % Most title ``pages'' are actually two pages long, with space % at the top of the second. We don't want the ragged left on the second. \let\oldpage = \page \def\page{% \iffinishedtitlepage\else \finishtitlepage \fi \let\page = \oldpage \page \null }% } \def\Etitlepage{% \iffinishedtitlepage\else \finishtitlepage \fi % It is important to do the page break before ending the group, % because the headline and footline are only empty inside the group. % If we use the new definition of \page, we always get a blank page % after the title page, which we certainly don't want. \oldpage \endgroup % % Need this before the \...aftertitlepage checks so that if they are % in effect the toc pages will come out with page numbers. \HEADINGSon % % If they want short, they certainly want long too. \ifsetshortcontentsaftertitlepage \shortcontents \contents \global\let\shortcontents = \relax \global\let\contents = \relax \fi % \ifsetcontentsaftertitlepage \contents \global\let\contents = \relax \global\let\shortcontents = \relax \fi } \def\finishtitlepage{% \vskip4pt \hrule height 2pt width \hsize \vskip\titlepagebottomglue \finishedtitlepagetrue } % Settings used for typesetting titles: no hyphenation, no indentation, % don't worry much about spacing, ragged right. This should be used % inside a \vbox, and fonts need to be set appropriately first. Because % it is always used for titles, nothing else, we call \rmisbold. \par % should be specified before the end of the \vbox, since a vbox is a group. % \def\raggedtitlesettings{% \rmisbold \hyphenpenalty=10000 \parindent=0pt \tolerance=5000 \ptexraggedright } % Macros to be used within @titlepage: \let\subtitlerm=\tenrm \def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines} \parseargdef\title{% \checkenv\titlepage \vbox{\titlefonts \raggedtitlesettings #1\par}% % print a rule at the page bottom also. \finishedtitlepagefalse \vskip4pt \hrule height 4pt width \hsize \vskip4pt } \parseargdef\subtitle{% \checkenv\titlepage {\subtitlefont \rightline{#1}}% } % @author should come last, but may come many times. % It can also be used inside @quotation. % \parseargdef\author{% \def\temp{\quotation}% \ifx\thisenv\temp \def\quotationauthor{#1}% printed in \Equotation. \else \checkenv\titlepage \ifseenauthor\else \vskip 0pt plus 1filll \seenauthortrue \fi {\secfonts\rmisbold \leftline{#1}}% \fi } % Set up page headings and footings. \let\thispage=\folio \newtoks\evenheadline % headline on even pages \newtoks\oddheadline % headline on odd pages \newtoks\evenfootline % footline on even pages \newtoks\oddfootline % footline on odd pages % Now make TeX use those variables \headline={{\textfonts\rm \ifodd\pageno \the\oddheadline \else \the\evenheadline \fi}} \footline={{\textfonts\rm \ifodd\pageno \the\oddfootline \else \the\evenfootline \fi}\HEADINGShook} \let\HEADINGShook=\relax % Commands to set those variables. % For example, this is what @headings on does % @evenheading @thistitle|@thispage|@thischapter % @oddheading @thischapter|@thispage|@thistitle % @evenfooting @thisfile|| % @oddfooting ||@thisfile \def\evenheading{\parsearg\evenheadingxxx} \def\evenheadingxxx #1{\evenheadingyyy #1\|\|\|\|\finish} \def\evenheadingyyy #1\|#2\|#3\|#4\finish{% \global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} \def\oddheading{\parsearg\oddheadingxxx} \def\oddheadingxxx #1{\oddheadingyyy #1\|\|\|\|\finish} \def\oddheadingyyy #1\|#2\|#3\|#4\finish{% \global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} \parseargdef\everyheading{\oddheadingxxx{#1}\evenheadingxxx{#1}}% \def\evenfooting{\parsearg\evenfootingxxx} \def\evenfootingxxx #1{\evenfootingyyy #1\|\|\|\|\finish} \def\evenfootingyyy #1\|#2\|#3\|#4\finish{% \global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} \def\oddfooting{\parsearg\oddfootingxxx} \def\oddfootingxxx #1{\oddfootingyyy #1\|\|\|\|\finish} \def\oddfootingyyy #1\|#2\|#3\|#4\finish{% \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}% % % Leave some space for the footline. Hopefully ok to assume % @evenfooting will not be used by itself. \global\advance\pageheight by -12pt \global\advance\vsize by -12pt } \parseargdef\everyfooting{\oddfootingxxx{#1}\evenfootingxxx{#1}} % @evenheadingmarks top \thischapter <- chapter at the top of a page % @evenheadingmarks bottom \thischapter <- chapter at the bottom of a page % % The same set of arguments for: % % @oddheadingmarks % @evenfootingmarks % @oddfootingmarks % @everyheadingmarks % @everyfootingmarks \def\evenheadingmarks{\headingmarks{even}{heading}} \def\oddheadingmarks{\headingmarks{odd}{heading}} \def\evenfootingmarks{\headingmarks{even}{footing}} \def\oddfootingmarks{\headingmarks{odd}{footing}} \def\everyheadingmarks#1 {\headingmarks{even}{heading}{#1} \headingmarks{odd}{heading}{#1} } \def\everyfootingmarks#1 {\headingmarks{even}{footing}{#1} \headingmarks{odd}{footing}{#1} } % #1 = even/odd, #2 = heading/footing, #3 = top/bottom. \def\headingmarks#1#2#3 {% \expandafter\let\expandafter\temp \csname get#3headingmarks\endcsname \global\expandafter\let\csname get#1#2marks\endcsname \temp } \everyheadingmarks bottom \everyfootingmarks bottom % @headings double turns headings on for double-sided printing. % @headings single turns headings on for single-sided printing. % @headings off turns them off. % @headings on same as @headings double, retained for compatibility. % @headings after turns on double-sided headings after this page. % @headings doubleafter turns on double-sided headings after this page. % @headings singleafter turns on single-sided headings after this page. % By default, they are off at the start of a document, % and turned `on' after @end titlepage. \def\headings #1 {\csname HEADINGS#1\endcsname} \def\headingsoff{% non-global headings elimination \evenheadline={\hfil}\evenfootline={\hfil}% \oddheadline={\hfil}\oddfootline={\hfil}% } \def\HEADINGSoff{{\globaldefs=1 \headingsoff}} % global setting \HEADINGSoff % it's the default % When we turn headings on, set the page number to 1. % For double-sided printing, put current file name in lower left corner, % chapter name on inside top of right hand pages, document % title on inside top of left hand pages, and page numbers on outside top % edge of all pages. \def\HEADINGSdouble{% \global\pageno=1 \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\folio\hfil\thistitle}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chapoddpage } \let\contentsalignmacro = \chappager % For single-sided printing, chapter title goes across top left of page, % page number on top right. \def\HEADINGSsingle{% \global\pageno=1 \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\thischapter\hfil\folio}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chappager } \def\HEADINGSon{\HEADINGSdouble} \def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex} \let\HEADINGSdoubleafter=\HEADINGSafter \def\HEADINGSdoublex{% \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\folio\hfil\thistitle}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chapoddpage } \def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex} \def\HEADINGSsinglex{% \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\thischapter\hfil\folio}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chappager } % Subroutines used in generating headings % This produces Day Month Year style of output. % Only define if not already defined, in case a txi-??.tex file has set % up a different format (e.g., txi-cs.tex does this). \ifx\today\thisisundefined \def\today{% \number\day\space \ifcase\month \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec \fi \space\number\year} \fi % @settitle line... specifies the title of the document, for headings. % It generates no output of its own. \def\thistitle{\putwordNoTitle} \def\settitle{\parsearg{\gdef\thistitle}} \message{tables,} % Tables -- @table, @ftable, @vtable, @item(x). % default indentation of table text \newdimen\tableindent \tableindent=.8in % default indentation of @itemize and @enumerate text \newdimen\itemindent \itemindent=.3in % margin between end of table item and start of table text. \newdimen\itemmargin \itemmargin=.1in % used internally for \itemindent minus \itemmargin \newdimen\itemmax % Note @table, @ftable, and @vtable define @item, @itemx, etc., with % these defs. % They also define \itemindex % to index the item name in whatever manner is desired (perhaps none). \newif\ifitemxneedsnegativevskip \def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi} \def\internalBitem{\smallbreak \parsearg\itemzzz} \def\internalBitemx{\itemxpar \parsearg\itemzzz} \def\itemzzz #1{\begingroup % \advance\hsize by -\rightskip \advance\hsize by -\tableindent \setbox0=\hbox{\itemindicate{#1}}% \itemindex{#1}% \nobreak % This prevents a break before @itemx. % % If the item text does not fit in the space we have, put it on a line % by itself, and do not allow a page break either before or after that % line. We do not start a paragraph here because then if the next % command is, e.g., @kindex, the whatsit would get put into the % horizontal list on a line by itself, resulting in extra blank space. \ifdim \wd0>\itemmax % % Make this a paragraph so we get the \parskip glue and wrapping, % but leave it ragged-right. \begingroup \advance\leftskip by-\tableindent \advance\hsize by\tableindent \advance\rightskip by0pt plus1fil\relax \leavevmode\unhbox0\par \endgroup % % We're going to be starting a paragraph, but we don't want the % \parskip glue -- logically it's part of the @item we just started. \nobreak \vskip-\parskip % % Stop a page break at the \parskip glue coming up. However, if % what follows is an environment such as @example, there will be no % \parskip glue; then the negative vskip we just inserted would % cause the example and the item to crash together. So we use this % bizarre value of 10001 as a signal to \aboveenvbreak to insert % \parskip glue after all. Section titles are handled this way also. % \penalty 10001 \endgroup \itemxneedsnegativevskipfalse \else % The item text fits into the space. Start a paragraph, so that the % following text (if any) will end up on the same line. \noindent % Do this with kerns and \unhbox so that if there is a footnote in % the item text, it can migrate to the main vertical list and % eventually be printed. \nobreak\kern-\tableindent \dimen0 = \itemmax \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0 \unhbox0 \nobreak\kern\dimen0 \endgroup \itemxneedsnegativevskiptrue \fi } \def\item{\errmessage{@item while not in a list environment}} \def\itemx{\errmessage{@itemx while not in a list environment}} % @table, @ftable, @vtable. \envdef\table{% \let\itemindex\gobble \tablecheck{table}% } \envdef\ftable{% \def\itemindex ##1{\doind {fn}{\code{##1}}}% \tablecheck{ftable}% } \envdef\vtable{% \def\itemindex ##1{\doind {vr}{\code{##1}}}% \tablecheck{vtable}% } \def\tablecheck#1{% \ifnum \the\catcode`\^^M=\active \endgroup \errmessage{This command won't work in this context; perhaps the problem is that we are \inenvironment\thisenv}% \def\next{\doignore{#1}}% \else \let\next\tablex \fi \next } \def\tablex#1{% \def\itemindicate{#1}% \parsearg\tabley } \def\tabley#1{% {% \makevalueexpandable \edef\temp{\noexpand\tablez #1\space\space\space}% \expandafter }\temp \endtablez } \def\tablez #1 #2 #3 #4\endtablez{% \aboveenvbreak \ifnum 0#1>0 \advance \leftskip by #1\mil \fi \ifnum 0#2>0 \tableindent=#2\mil \fi \ifnum 0#3>0 \advance \rightskip by #3\mil \fi \itemmax=\tableindent \advance \itemmax by -\itemmargin \advance \leftskip by \tableindent \exdentamount=\tableindent \parindent = 0pt \parskip = \smallskipamount \ifdim \parskip=0pt \parskip=2pt \fi \let\item = \internalBitem \let\itemx = \internalBitemx } \def\Etable{\endgraf\afterenvbreak} \let\Eftable\Etable \let\Evtable\Etable \let\Eitemize\Etable \let\Eenumerate\Etable % This is the counter used by @enumerate, which is really @itemize \newcount \itemno \envdef\itemize{\parsearg\doitemize} \def\doitemize#1{% \aboveenvbreak \itemmax=\itemindent \advance\itemmax by -\itemmargin \advance\leftskip by \itemindent \exdentamount=\itemindent \parindent=0pt \parskip=\smallskipamount \ifdim\parskip=0pt \parskip=2pt \fi % % Try typesetting the item mark that if the document erroneously says % something like @itemize @samp (intending @table), there's an error % right away at the @itemize. It's not the best error message in the % world, but it's better than leaving it to the @item. This means if % the user wants an empty mark, they have to say @w{} not just @w. \def\itemcontents{#1}% \setbox0 = \hbox{\itemcontents}% % % @itemize with no arg is equivalent to @itemize @bullet. \ifx\itemcontents\empty\def\itemcontents{\bullet}\fi % \let\item=\itemizeitem } % Definition of @item while inside @itemize and @enumerate. % \def\itemizeitem{% \advance\itemno by 1 % for enumerations {\let\par=\endgraf \smallbreak}% reasonable place to break {% % If the document has an @itemize directly after a section title, a % \nobreak will be last on the list, and \sectionheading will have % done a \vskip-\parskip. In that case, we don't want to zero % parskip, or the item text will crash with the heading. On the % other hand, when there is normal text preceding the item (as there % usually is), we do want to zero parskip, or there would be too much % space. In that case, we won't have a \nobreak before. At least % that's the theory. \ifnum\lastpenalty<10000 \parskip=0in \fi \noindent \hbox to 0pt{\hss \itemcontents \kern\itemmargin}% % \vadjust{\penalty 1200}}% not good to break after first line of item. \flushcr } % \splitoff TOKENS\endmark defines \first to be the first token in % TOKENS, and \rest to be the remainder. % \def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}% % Allow an optional argument of an uppercase letter, lowercase letter, % or number, to specify the first label in the enumerated list. No % argument is the same as `1'. % \envparseargdef\enumerate{\enumeratey #1 \endenumeratey} \def\enumeratey #1 #2\endenumeratey{% % If we were given no argument, pretend we were given `1'. \def\thearg{#1}% \ifx\thearg\empty \def\thearg{1}\fi % % Detect if the argument is a single token. If so, it might be a % letter. Otherwise, the only valid thing it can be is a number. % (We will always have one token, because of the test we just made. % This is a good thing, since \splitoff doesn't work given nothing at % all -- the first parameter is undelimited.) \expandafter\splitoff\thearg\endmark \ifx\rest\empty % Only one token in the argument. It could still be anything. % A ``lowercase letter'' is one whose \lccode is nonzero. % An ``uppercase letter'' is one whose \lccode is both nonzero, and % not equal to itself. % Otherwise, we assume it's a number. % % We need the \relax at the end of the \ifnum lines to stop TeX from % continuing to look for a <number>. % \ifnum\lccode\expandafter`\thearg=0\relax \numericenumerate % a number (we hope) \else % It's a letter. \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax \lowercaseenumerate % lowercase letter \else \uppercaseenumerate % uppercase letter \fi \fi \else % Multiple tokens in the argument. We hope it's a number. \numericenumerate \fi } % An @enumerate whose labels are integers. The starting integer is % given in \thearg. % \def\numericenumerate{% \itemno = \thearg \startenumeration{\the\itemno}% } % The starting (lowercase) letter is in \thearg. \def\lowercaseenumerate{% \itemno = \expandafter`\thearg \startenumeration{% % Be sure we're not beyond the end of the alphabet. \ifnum\itemno=0 \errmessage{No more lowercase letters in @enumerate; get a bigger alphabet}% \fi \char\lccode\itemno }% } % The starting (uppercase) letter is in \thearg. \def\uppercaseenumerate{% \itemno = \expandafter`\thearg \startenumeration{% % Be sure we're not beyond the end of the alphabet. \ifnum\itemno=0 \errmessage{No more uppercase letters in @enumerate; get a bigger alphabet} \fi \char\uccode\itemno }% } % Call \doitemize, adding a period to the first argument and supplying the % common last two arguments. Also subtract one from the initial value in % \itemno, since @item increments \itemno. % \def\startenumeration#1{% \advance\itemno by -1 \doitemize{#1.}\flushcr } % @alphaenumerate and @capsenumerate are abbreviations for giving an arg % to @enumerate. % \def\alphaenumerate{\enumerate{a}} \def\capsenumerate{\enumerate{A}} \def\Ealphaenumerate{\Eenumerate} \def\Ecapsenumerate{\Eenumerate} % @multitable macros % Amy Hendrickson, 8/18/94, 3/6/96 % % @multitable ... @end multitable will make as many columns as desired. % Contents of each column will wrap at width given in preamble. Width % can be specified either with sample text given in a template line, % or in percent of \hsize, the current width of text on page. % Table can continue over pages but will only break between lines. % To make preamble: % % Either define widths of columns in terms of percent of \hsize: % @multitable @columnfractions .25 .3 .45 % @item ... % % Numbers following @columnfractions are the percent of the total % current hsize to be used for each column. You may use as many % columns as desired. % Or use a template: % @multitable {Column 1 template} {Column 2 template} {Column 3 template} % @item ... % using the widest term desired in each column. % Each new table line starts with @item, each subsequent new column % starts with @tab. Empty columns may be produced by supplying @tab's % with nothing between them for as many times as empty columns are needed, % ie, @tab@tab@tab will produce two empty columns. % @item, @tab do not need to be on their own lines, but it will not hurt % if they are. % Sample multitable: % @multitable {Column 1 template} {Column 2 template} {Column 3 template} % @item first col stuff @tab second col stuff @tab third col % @item % first col stuff % @tab % second col stuff % @tab % third col % @item first col stuff @tab second col stuff % @tab Many paragraphs of text may be used in any column. % % They will wrap at the width determined by the template. % @item@tab@tab This will be in third column. % @end multitable % Default dimensions may be reset by user. % @multitableparskip is vertical space between paragraphs in table. % @multitableparindent is paragraph indent in table. % @multitablecolmargin is horizontal space to be left between columns. % @multitablelinespace is space to leave between table items, baseline % to baseline. % 0pt means it depends on current normal line spacing. % \newskip\multitableparskip \newskip\multitableparindent \newdimen\multitablecolspace \newskip\multitablelinespace \multitableparskip=0pt \multitableparindent=6pt \multitablecolspace=12pt \multitablelinespace=0pt % Macros used to set up halign preamble: % \let\endsetuptable\relax \def\xendsetuptable{\endsetuptable} \let\columnfractions\relax \def\xcolumnfractions{\columnfractions} \newif\ifsetpercent % #1 is the @columnfraction, usually a decimal number like .5, but might % be just 1. We just use it, whatever it is. % \def\pickupwholefraction#1 {% \global\advance\colcount by 1 \expandafter\xdef\csname col\the\colcount\endcsname{#1\hsize}% \setuptable } \newcount\colcount \def\setuptable#1{% \def\firstarg{#1}% \ifx\firstarg\xendsetuptable \let\go = \relax \else \ifx\firstarg\xcolumnfractions \global\setpercenttrue \else \ifsetpercent \let\go\pickupwholefraction \else \global\advance\colcount by 1 \setbox0=\hbox{#1\unskip\space}% Add a normal word space as a % separator; typically that is always in the input, anyway. \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}% \fi \fi \ifx\go\pickupwholefraction % Put the argument back for the \pickupwholefraction call, so % we'll always have a period there to be parsed. \def\go{\pickupwholefraction#1}% \else \let\go = \setuptable \fi% \fi \go } % multitable-only commands. % % @headitem starts a heading row, which we typeset in bold. % Assignments have to be global since we are inside the implicit group % of an alignment entry. \everycr resets \everytab so we don't have to % undo it ourselves. \def\headitemfont{\b}% for people to use in the template row; not changeable \def\headitem{% \checkenv\multitable \crcr \global\everytab={\bf}% can't use \headitemfont since the parsing differs \the\everytab % for the first item }% % % A \tab used to include \hskip1sp. But then the space in a template % line is not enough. That is bad. So let's go back to just `&' until % we again encounter the problem the 1sp was intended to solve. % --karl, nathan@acm.org, 20apr99. \def\tab{\checkenv\multitable &\the\everytab}% % @multitable ... @end multitable definitions: % \newtoks\everytab % insert after every tab. % \envdef\multitable{% \vskip\parskip \startsavinginserts % % @item within a multitable starts a normal row. % We use \def instead of \let so that if one of the multitable entries % contains an @itemize, we don't choke on the \item (seen as \crcr aka % \endtemplate) expanding \doitemize. \def\item{\crcr}% % \tolerance=9500 \hbadness=9500 \setmultitablespacing \parskip=\multitableparskip \parindent=\multitableparindent \overfullrule=0pt \global\colcount=0 % \everycr = {% \noalign{% \global\everytab={}% \global\colcount=0 % Reset the column counter. % Check for saved footnotes, etc. \checkinserts % Keeps underfull box messages off when table breaks over pages. %\filbreak % Maybe so, but it also creates really weird page breaks when the % table breaks over pages. Wouldn't \vfil be better? Wait until the % problem manifests itself, so it can be fixed for real --karl. }% }% % \parsearg\domultitable } \def\domultitable#1{% % To parse everything between @multitable and @item: \setuptable#1 \endsetuptable % % This preamble sets up a generic column definition, which will % be used as many times as user calls for columns. % \vtop will set a single line and will also let text wrap and % continue for many paragraphs if desired. \halign\bgroup &% \global\advance\colcount by 1 \multistrut \vtop{% % Use the current \colcount to find the correct column width: \hsize=\expandafter\csname col\the\colcount\endcsname % % In order to keep entries from bumping into each other % we will add a \leftskip of \multitablecolspace to all columns after % the first one. % % If a template has been used, we will add \multitablecolspace % to the width of each template entry. % % If the user has set preamble in terms of percent of \hsize we will % use that dimension as the width of the column, and the \leftskip % will keep entries from bumping into each other. Table will start at % left margin and final column will justify at right margin. % % Make sure we don't inherit \rightskip from the outer environment. \rightskip=0pt \ifnum\colcount=1 % The first column will be indented with the surrounding text. \advance\hsize by\leftskip \else \ifsetpercent \else % If user has not set preamble in terms of percent of \hsize % we will advance \hsize by \multitablecolspace. \advance\hsize by \multitablecolspace \fi % In either case we will make \leftskip=\multitablecolspace: \leftskip=\multitablecolspace \fi % Ignoring space at the beginning and end avoids an occasional spurious % blank line, when TeX decides to break the line at the space before the % box from the multistrut, so the strut ends up on a line by itself. % For example: % @multitable @columnfractions .11 .89 % @item @code{#} % @tab Legal holiday which is valid in major parts of the whole country. % Is automatically provided with highlighting sequences respectively % marking characters. \noindent\ignorespaces##\unskip\multistrut }\cr } \def\Emultitable{% \crcr \egroup % end the \halign \global\setpercentfalse } \def\setmultitablespacing{% \def\multistrut{\strut}% just use the standard line spacing % % Compute \multitablelinespace (if not defined by user) for use in % \multitableparskip calculation. We used define \multistrut based on % this, but (ironically) that caused the spacing to be off. % See bug-texinfo report from Werner Lemberg, 31 Oct 2004 12:52:20 +0100. \ifdim\multitablelinespace=0pt \setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip \global\advance\multitablelinespace by-\ht0 \fi % Test to see if parskip is larger than space between lines of % table. If not, do nothing. % If so, set to same dimension as multitablelinespace. \ifdim\multitableparskip>\multitablelinespace \global\multitableparskip=\multitablelinespace \global\advance\multitableparskip-7pt % to keep parskip somewhat smaller % than skip between lines in the table. \fi% \ifdim\multitableparskip=0pt \global\multitableparskip=\multitablelinespace \global\advance\multitableparskip-7pt % to keep parskip somewhat smaller % than skip between lines in the table. \fi} \message{conditionals,} % @iftex, @ifnotdocbook, @ifnothtml, @ifnotinfo, @ifnotplaintext, % @ifnotxml always succeed. They currently do nothing; we don't % attempt to check whether the conditionals are properly nested. But we % have to remember that they are conditionals, so that @end doesn't % attempt to close an environment group. % \def\makecond#1{% \expandafter\let\csname #1\endcsname = \relax \expandafter\let\csname iscond.#1\endcsname = 1 } \makecond{iftex} \makecond{ifnotdocbook} \makecond{ifnothtml} \makecond{ifnotinfo} \makecond{ifnotplaintext} \makecond{ifnotxml} % Ignore @ignore, @ifhtml, @ifinfo, and the like. % \def\direntry{\doignore{direntry}} \def\documentdescription{\doignore{documentdescription}} \def\docbook{\doignore{docbook}} \def\html{\doignore{html}} \def\ifdocbook{\doignore{ifdocbook}} \def\ifhtml{\doignore{ifhtml}} \def\ifinfo{\doignore{ifinfo}} \def\ifnottex{\doignore{ifnottex}} \def\ifplaintext{\doignore{ifplaintext}} \def\ifxml{\doignore{ifxml}} \def\ignore{\doignore{ignore}} \def\menu{\doignore{menu}} \def\xml{\doignore{xml}} % Ignore text until a line `@end #1', keeping track of nested conditionals. % % A count to remember the depth of nesting. \newcount\doignorecount \def\doignore#1{\begingroup % Scan in ``verbatim'' mode: \obeylines \catcode`\@ = \other \catcode`\{ = \other \catcode`\} = \other % % Make sure that spaces turn into tokens that match what \doignoretext wants. \spaceisspace % % Count number of #1's that we've seen. \doignorecount = 0 % % Swallow text until we reach the matching `@end #1'. \dodoignore{#1}% } { \catcode`_=11 % We want to use \_STOP_ which cannot appear in texinfo source. \obeylines % % \gdef\dodoignore#1{% % #1 contains the command name as a string, e.g., `ifinfo'. % % Define a command to find the next `@end #1'. \long\def\doignoretext##1^^M@end #1{% \doignoretextyyy##1^^M@#1\_STOP_}% % % And this command to find another #1 command, at the beginning of a % line. (Otherwise, we would consider a line `@c @ifset', for % example, to count as an @ifset for nesting.) \long\def\doignoretextyyy##1^^M@#1##2\_STOP_{\doignoreyyy{##2}\_STOP_}% % % And now expand that command. \doignoretext ^^M% }% } \def\doignoreyyy#1{% \def\temp{#1}% \ifx\temp\empty % Nothing found. \let\next\doignoretextzzz \else % Found a nested condition, ... \advance\doignorecount by 1 \let\next\doignoretextyyy % ..., look for another. % If we're here, #1 ends with ^^M\ifinfo (for example). \fi \next #1% the token \_STOP_ is present just after this macro. } % We have to swallow the remaining "\_STOP_". % \def\doignoretextzzz#1{% \ifnum\doignorecount = 0 % We have just found the outermost @end. \let\next\enddoignore \else % Still inside a nested condition. \advance\doignorecount by -1 \let\next\doignoretext % Look for the next @end. \fi \next } % Finish off ignored text. { \obeylines% % Ignore anything after the last `@end #1'; this matters in verbatim % environments, where otherwise the newline after an ignored conditional % would result in a blank line in the output. \gdef\enddoignore#1^^M{\endgroup\ignorespaces}% } % @set VAR sets the variable VAR to an empty value. % @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE. % % Since we want to separate VAR from REST-OF-LINE (which might be % empty), we can't just use \parsearg; we have to insert a space of our % own to delimit the rest of the line, and then take it out again if we % didn't need it. % We rely on the fact that \parsearg sets \catcode`\ =10. % \parseargdef\set{\setyyy#1 \endsetyyy} \def\setyyy#1 #2\endsetyyy{% {% \makevalueexpandable \def\temp{#2}% \edef\next{\gdef\makecsname{SET#1}}% \ifx\temp\empty \next{}% \else \setzzz#2\endsetzzz \fi }% } % Remove the trailing space \setxxx inserted. \def\setzzz#1 \endsetzzz{\next{#1}} % @clear VAR clears (i.e., unsets) the variable VAR. % \parseargdef\clear{% {% \makevalueexpandable \global\expandafter\let\csname SET#1\endcsname=\relax }% } % @value{foo} gets the text saved in variable foo. \def\value{\begingroup\makevalueexpandable\valuexxx} \def\valuexxx#1{\expandablevalue{#1}\endgroup} { \catcode`\- = \active \catcode`\_ = \active % \gdef\makevalueexpandable{% \let\value = \expandablevalue % We don't want these characters active, ... \catcode`\-=\other \catcode`\_=\other % ..., but we might end up with active ones in the argument if % we're called from @code, as @code{@value{foo-bar_}}, though. % So \let them to their normal equivalents. \let-\normaldash \let_\normalunderscore } } % We have this subroutine so that we can handle at least some @value's % properly in indexes (we call \makevalueexpandable in \indexdummies). % The command has to be fully expandable (if the variable is set), since % the result winds up in the index file. This means that if the % variable's value contains other Texinfo commands, it's almost certain % it will fail (although perhaps we could fix that with sufficient work % to do a one-level expansion on the result, instead of complete). % \def\expandablevalue#1{% \expandafter\ifx\csname SET#1\endcsname\relax {[No value for ``#1'']}% \message{Variable `#1', used in @value, is not set.}% \else \csname SET#1\endcsname \fi } % @ifset VAR ... @end ifset reads the `...' iff VAR has been defined % with @set. % % To get special treatment of `@end ifset,' call \makeond and the redefine. % \makecond{ifset} \def\ifset{\parsearg{\doifset{\let\next=\ifsetfail}}} \def\doifset#1#2{% {% \makevalueexpandable \let\next=\empty \expandafter\ifx\csname SET#2\endcsname\relax #1% If not set, redefine \next. \fi \expandafter }\next } \def\ifsetfail{\doignore{ifset}} % @ifclear VAR ... @end executes the `...' iff VAR has never been % defined with @set, or has been undefined with @clear. % % The `\else' inside the `\doifset' parameter is a trick to reuse the % above code: if the variable is not set, do nothing, if it is set, % then redefine \next to \ifclearfail. % \makecond{ifclear} \def\ifclear{\parsearg{\doifset{\else \let\next=\ifclearfail}}} \def\ifclearfail{\doignore{ifclear}} % @ifcommandisdefined CMD ... @end executes the `...' if CMD (written % without the @) is in fact defined. We can only feasibly check at the % TeX level, so something like `mathcode' is going to considered % defined even though it is not a Texinfo command. % \makecond{ifcommanddefined} \def\ifcommanddefined{\parsearg{\doifcmddefined{\let\next=\ifcmddefinedfail}}} % \def\doifcmddefined#1#2{{% \makevalueexpandable \let\next=\empty \expandafter\ifx\csname #2\endcsname\relax #1% If not defined, \let\next as above. \fi \expandafter }\next } \def\ifcmddefinedfail{\doignore{ifcommanddefined}} % @ifcommandnotdefined CMD ... handled similar to @ifclear above. \makecond{ifcommandnotdefined} \def\ifcommandnotdefined{% \parsearg{\doifcmddefined{\else \let\next=\ifcmdnotdefinedfail}}} \def\ifcmdnotdefinedfail{\doignore{ifcommandnotdefined}} % Set the `txicommandconditionals' variable, so documents have a way to % test if the @ifcommand...defined conditionals are available. \set txicommandconditionals % @dircategory CATEGORY -- specify a category of the dir file % which this file should belong to. Ignore this in TeX. \let\dircategory=\comment % @defininfoenclose. \let\definfoenclose=\comment \message{indexing,} % Index generation facilities % Define \newwrite to be identical to plain tex's \newwrite % except not \outer, so it can be used within macros and \if's. \edef\newwrite{\makecsname{ptexnewwrite}} % \newindex {foo} defines an index named foo. % It automatically defines \fooindex such that % \fooindex ...rest of line... puts an entry in the index foo. % It also defines \fooindfile to be the number of the output channel for % the file that accumulates this index. The file's extension is foo. % The name of an index should be no more than 2 characters long % for the sake of vms. % \def\newindex#1{% \iflinks \expandafter\newwrite \csname#1indfile\endcsname \openout \csname#1indfile\endcsname \jobname.#1 % Open the file \fi \expandafter\xdef\csname#1index\endcsname{% % Define @#1index \noexpand\doindex{#1}} } % @defindex foo == \newindex{foo} % \def\defindex{\parsearg\newindex} % Define @defcodeindex, like @defindex except put all entries in @code. % \def\defcodeindex{\parsearg\newcodeindex} % \def\newcodeindex#1{% \iflinks \expandafter\newwrite \csname#1indfile\endcsname \openout \csname#1indfile\endcsname \jobname.#1 \fi \expandafter\xdef\csname#1index\endcsname{% \noexpand\docodeindex{#1}}% } % @synindex foo bar makes index foo feed into index bar. % Do this instead of @defindex foo if you don't want it as a separate index. % % @syncodeindex foo bar similar, but put all entries made for index foo % inside @code. % \def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}} \def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}} % #1 is \doindex or \docodeindex, #2 the index getting redefined (foo), % #3 the target index (bar). \def\dosynindex#1#2#3{% % Only do \closeout if we haven't already done it, else we'll end up % closing the target index. \expandafter \ifx\csname donesynindex#2\endcsname \relax % The \closeout helps reduce unnecessary open files; the limit on the % Acorn RISC OS is a mere 16 files. \expandafter\closeout\csname#2indfile\endcsname \expandafter\let\csname donesynindex#2\endcsname = 1 \fi % redefine \fooindfile: \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname \expandafter\let\csname#2indfile\endcsname=\temp % redefine \fooindex: \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}% } % Define \doindex, the driver for all \fooindex macros. % Argument #1 is generated by the calling \fooindex macro, % and it is "foo", the name of the index. % \doindex just uses \parsearg; it calls \doind for the actual work. % This is because \doind is more useful to call from other macros. % There is also \dosubind {index}{topic}{subtopic} % which makes an entry in a two-level index such as the operation index. \def\doindex#1{\edef\indexname{#1}\parsearg\singleindexer} \def\singleindexer #1{\doind{\indexname}{#1}} % like the previous two, but they put @code around the argument. \def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer} \def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}} % Take care of Texinfo commands that can appear in an index entry. % Since there are some commands we want to expand, and others we don't, % we have to laboriously prevent expansion for those that we don't. % \def\indexdummies{% \escapechar = `\\ % use backslash in output files. \def\@{@}% change to @@ when we switch to @ as escape char in index files. \def\ {\realbackslash\space }% % % Need these unexpandable (because we define \tt as a dummy) % definitions when @{ or @} appear in index entry text. Also, more % complicated, when \tex is in effect and \{ is a \delimiter again. % We can't use \lbracecmd and \rbracecmd because texindex assumes % braces and backslashes are used only as delimiters. Perhaps we % should define @lbrace and @rbrace commands a la @comma. \def\{{{\tt\char123}}% \def\}{{\tt\char125}}% % % I don't entirely understand this, but when an index entry is % generated from a macro call, the \endinput which \scanmacro inserts % causes processing to be prematurely terminated. This is, % apparently, because \indexsorttmp is fully expanded, and \endinput % is an expandable command. The redefinition below makes \endinput % disappear altogether for that purpose -- although logging shows that % processing continues to some further point. On the other hand, it % seems \endinput does not hurt in the printed index arg, since that % is still getting written without apparent harm. % % Sample source (mac-idx3.tex, reported by Graham Percival to % help-texinfo, 22may06): % @macro funindex {WORD} % @findex xyz % @end macro % ... % @funindex commtest % % The above is not enough to reproduce the bug, but it gives the flavor. % % Sample whatsit resulting: % .@write3{\entry{xyz}{@folio }{@code {xyz@endinput }}} % % So: \let\endinput = \empty % % Do the redefinitions. \commondummies } % For the aux and toc files, @ is the escape character. So we want to % redefine everything using @ as the escape character (instead of % \realbackslash, still used for index files). When everything uses @, % this will be simpler. % \def\atdummies{% \def\@{@@}% \def\ {@ }% \let\{ = \lbraceatcmd \let\} = \rbraceatcmd % % Do the redefinitions. \commondummies \otherbackslash } % Called from \indexdummies and \atdummies. % \def\commondummies{% % % \definedummyword defines \#1 as \string\#1\space, thus effectively % preventing its expansion. This is used only for control words, % not control letters, because the \space would be incorrect for % control characters, but is needed to separate the control word % from whatever follows. % % For control letters, we have \definedummyletter, which omits the % space. % % These can be used both for control words that take an argument and % those that do not. If it is followed by {arg} in the input, then % that will dutifully get written to the index (or wherever). % \def\definedummyword ##1{\def##1{\string##1\space}}% \def\definedummyletter##1{\def##1{\string##1}}% \let\definedummyaccent\definedummyletter % \commondummiesnofonts % \definedummyletter\_% \definedummyletter\-% % % Non-English letters. \definedummyword\AA \definedummyword\AE \definedummyword\DH \definedummyword\L \definedummyword\O \definedummyword\OE \definedummyword\TH \definedummyword\aa \definedummyword\ae \definedummyword\dh \definedummyword\exclamdown \definedummyword\l \definedummyword\o \definedummyword\oe \definedummyword\ordf \definedummyword\ordm \definedummyword\questiondown \definedummyword\ss \definedummyword\th % % Although these internal commands shouldn't show up, sometimes they do. \definedummyword\bf \definedummyword\gtr \definedummyword\hat \definedummyword\less \definedummyword\sf \definedummyword\sl \definedummyword\tclose \definedummyword\tt % \definedummyword\LaTeX \definedummyword\TeX % % Assorted special characters. \definedummyword\arrow \definedummyword\bullet \definedummyword\comma \definedummyword\copyright \definedummyword\registeredsymbol \definedummyword\dots \definedummyword\enddots \definedummyword\entrybreak \definedummyword\equiv \definedummyword\error \definedummyword\euro \definedummyword\expansion \definedummyword\geq \definedummyword\guillemetleft \definedummyword\guillemetright \definedummyword\guilsinglleft \definedummyword\guilsinglright \definedummyword\lbracechar \definedummyword\leq \definedummyword\minus \definedummyword\ogonek \definedummyword\pounds \definedummyword\point \definedummyword\print \definedummyword\quotedblbase \definedummyword\quotedblleft \definedummyword\quotedblright \definedummyword\quoteleft \definedummyword\quoteright \definedummyword\quotesinglbase \definedummyword\rbracechar \definedummyword\result \definedummyword\textdegree % % We want to disable all macros so that they are not expanded by \write. \macrolist % \normalturnoffactive % % Handle some cases of @value -- where it does not contain any % (non-fully-expandable) commands. \makevalueexpandable } % \commondummiesnofonts: common to \commondummies and \indexnofonts. % \def\commondummiesnofonts{% % Control letters and accents. \definedummyletter\!% \definedummyaccent\"% \definedummyaccent\'% \definedummyletter\*% \definedummyaccent\,% \definedummyletter\.% \definedummyletter\/% \definedummyletter\:% \definedummyaccent\=% \definedummyletter\?% \definedummyaccent\^% \definedummyaccent\`% \definedummyaccent\~% \definedummyword\u \definedummyword\v \definedummyword\H \definedummyword\dotaccent \definedummyword\ogonek \definedummyword\ringaccent \definedummyword\tieaccent \definedummyword\ubaraccent \definedummyword\udotaccent \definedummyword\dotless % % Texinfo font commands. \definedummyword\b \definedummyword\i \definedummyword\r \definedummyword\sansserif \definedummyword\sc \definedummyword\slanted \definedummyword\t % % Commands that take arguments. \definedummyword\abbr \definedummyword\acronym \definedummyword\anchor \definedummyword\cite \definedummyword\code \definedummyword\command \definedummyword\dfn \definedummyword\dmn \definedummyword\email \definedummyword\emph \definedummyword\env \definedummyword\file \definedummyword\image \definedummyword\indicateurl \definedummyword\inforef \definedummyword\kbd \definedummyword\key \definedummyword\math \definedummyword\option \definedummyword\pxref \definedummyword\ref \definedummyword\samp \definedummyword\strong \definedummyword\tie \definedummyword\uref \definedummyword\url \definedummyword\var \definedummyword\verb \definedummyword\w \definedummyword\xref } % \indexnofonts is used when outputting the strings to sort the index % by, and when constructing control sequence names. It eliminates all % control sequences and just writes whatever the best ASCII sort string % would be for a given command (usually its argument). % \def\indexnofonts{% % Accent commands should become @asis. \def\definedummyaccent##1{\let##1\asis}% % We can just ignore other control letters. \def\definedummyletter##1{\let##1\empty}% % All control words become @asis by default; overrides below. \let\definedummyword\definedummyaccent % \commondummiesnofonts % % Don't no-op \tt, since it isn't a user-level command % and is used in the definitions of the active chars like <, >, |, etc. % Likewise with the other plain tex font commands. %\let\tt=\asis % \def\ { }% \def\@{@}% \def\_{\normalunderscore}% \def\-{}% @- shouldn't affect sorting % % Unfortunately, texindex is not prepared to handle braces in the % content at all. So for index sorting, we map @{ and @} to strings % starting with |, since that ASCII character is between ASCII { and }. \def\{{|a}% \def\lbracechar{|a}% % \def\}{|b}% \def\rbracechar{|b}% % % Non-English letters. \def\AA{AA}% \def\AE{AE}% \def\DH{DZZ}% \def\L{L}% \def\OE{OE}% \def\O{O}% \def\TH{ZZZ}% \def\aa{aa}% \def\ae{ae}% \def\dh{dzz}% \def\exclamdown{!}% \def\l{l}% \def\oe{oe}% \def\ordf{a}% \def\ordm{o}% \def\o{o}% \def\questiondown{?}% \def\ss{ss}% \def\th{zzz}% % \def\LaTeX{LaTeX}% \def\TeX{TeX}% % % Assorted special characters. % (The following {} will end up in the sort string, but that's ok.) \def\arrow{->}% \def\bullet{bullet}% \def\comma{,}% \def\copyright{copyright}% \def\dots{...}% \def\enddots{...}% \def\equiv{==}% \def\error{error}% \def\euro{euro}% \def\expansion{==>}% \def\geq{>=}% \def\guillemetleft{<<}% \def\guillemetright{>>}% \def\guilsinglleft{<}% \def\guilsinglright{>}% \def\leq{<=}% \def\minus{-}% \def\point{.}% \def\pounds{pounds}% \def\print{-|}% \def\quotedblbase{"}% \def\quotedblleft{"}% \def\quotedblright{"}% \def\quoteleft{`}% \def\quoteright{'}% \def\quotesinglbase{,}% \def\registeredsymbol{R}% \def\result{=>}% \def\textdegree{o}% % \expandafter\ifx\csname SETtxiindexlquoteignore\endcsname\relax \else \indexlquoteignore \fi % % We need to get rid of all macros, leaving only the arguments (if present). % Of course this is not nearly correct, but it is the best we can do for now. % makeinfo does not expand macros in the argument to @deffn, which ends up % writing an index entry, and texindex isn't prepared for an index sort entry % that starts with \. % % Since macro invocations are followed by braces, we can just redefine them % to take a single TeX argument. The case of a macro invocation that % goes to end-of-line is not handled. % \macrolist } % Undocumented (for FSFS 2nd ed.): @set txiindexlquoteignore makes us % ignore left quotes in the sort term. {\catcode`\`=\active \gdef\indexlquoteignore{\let`=\empty}} \let\indexbackslash=0 %overridden during \printindex. \let\SETmarginindex=\relax % put index entries in margin (undocumented)? % Most index entries go through here, but \dosubind is the general case. % #1 is the index name, #2 is the entry text. \def\doind#1#2{\dosubind{#1}{#2}{}} % Workhorse for all \fooindexes. % #1 is name of index, #2 is stuff to put there, #3 is subentry -- % empty if called from \doind, as we usually are (the main exception % is with most defuns, which call us directly). % \def\dosubind#1#2#3{% \iflinks {% % Store the main index entry text (including the third arg). \toks0 = {#2}% % If third arg is present, precede it with a space. \def\thirdarg{#3}% \ifx\thirdarg\empty \else \toks0 = \expandafter{\the\toks0 \space #3}% \fi % \edef\writeto{\csname#1indfile\endcsname}% % \safewhatsit\dosubindwrite }% \fi } % Write the entry in \toks0 to the index file: % \def\dosubindwrite{% % Put the index entry in the margin if desired. \ifx\SETmarginindex\relax\else \insert\margin{\hbox{\vrule height8pt depth3pt width0pt \the\toks0}}% \fi % % Remember, we are within a group. \indexdummies % Must do this here, since \bf, etc expand at this stage \def\backslashcurfont{\indexbackslash}% \indexbackslash isn't defined now % so it will be output as is; and it will print as backslash. % % Process the index entry with all font commands turned off, to % get the string to sort by. {\indexnofonts \edef\temp{\the\toks0}% need full expansion \xdef\indexsorttmp{\temp}% }% % % Set up the complete index entry, with both the sort key and % the original text, including any font commands. We write % three arguments to \entry to the .?? file (four in the % subentry case), texindex reduces to two when writing the .??s % sorted result. \edef\temp{% \write\writeto{% \string\entry{\indexsorttmp}{\noexpand\folio}{\the\toks0}}% }% \temp } % Take care of unwanted page breaks/skips around a whatsit: % % If a skip is the last thing on the list now, preserve it % by backing up by \lastskip, doing the \write, then inserting % the skip again. Otherwise, the whatsit generated by the % \write or \pdfdest will make \lastskip zero. The result is that % sequences like this: % @end defun % @tindex whatever % @defun ... % will have extra space inserted, because the \medbreak in the % start of the @defun won't see the skip inserted by the @end of % the previous defun. % % But don't do any of this if we're not in vertical mode. We % don't want to do a \vskip and prematurely end a paragraph. % % Avoid page breaks due to these extra skips, too. % % But wait, there is a catch there: % We'll have to check whether \lastskip is zero skip. \ifdim is not % sufficient for this purpose, as it ignores stretch and shrink parts % of the skip. The only way seems to be to check the textual % representation of the skip. % % The following is almost like \def\zeroskipmacro{0.0pt} except that % the ``p'' and ``t'' characters have catcode \other, not 11 (letter). % \edef\zeroskipmacro{\expandafter\the\csname z@skip\endcsname} % \newskip\whatsitskip \newcount\whatsitpenalty % % ..., ready, GO: % \def\safewhatsit#1{\ifhmode #1% \else % \lastskip and \lastpenalty cannot both be nonzero simultaneously. \whatsitskip = \lastskip \edef\lastskipmacro{\the\lastskip}% \whatsitpenalty = \lastpenalty % % If \lastskip is nonzero, that means the last item was a % skip. And since a skip is discardable, that means this % -\whatsitskip glue we're inserting is preceded by a % non-discardable item, therefore it is not a potential % breakpoint, therefore no \nobreak needed. \ifx\lastskipmacro\zeroskipmacro \else \vskip-\whatsitskip \fi % #1% % \ifx\lastskipmacro\zeroskipmacro % If \lastskip was zero, perhaps the last item was a penalty, and % perhaps it was >=10000, e.g., a \nobreak. In that case, we want % to re-insert the same penalty (values >10000 are used for various % signals); since we just inserted a non-discardable item, any % following glue (such as a \parskip) would be a breakpoint. For example: % @deffn deffn-whatever % @vindex index-whatever % Description. % would allow a break between the index-whatever whatsit % and the "Description." paragraph. \ifnum\whatsitpenalty>9999 \penalty\whatsitpenalty \fi \else % On the other hand, if we had a nonzero \lastskip, % this make-up glue would be preceded by a non-discardable item % (the whatsit from the \write), so we must insert a \nobreak. \nobreak\vskip\whatsitskip \fi \fi} % The index entry written in the file actually looks like % \entry {sortstring}{page}{topic} % or % \entry {sortstring}{page}{topic}{subtopic} % The texindex program reads in these files and writes files % containing these kinds of lines: % \initial {c} % before the first topic whose initial is c % \entry {topic}{pagelist} % for a topic that is used without subtopics % \primary {topic} % for the beginning of a topic that is used with subtopics % \secondary {subtopic}{pagelist} % for each subtopic. % Define the user-accessible indexing commands % @findex, @vindex, @kindex, @cindex. \def\findex {\fnindex} \def\kindex {\kyindex} \def\cindex {\cpindex} \def\vindex {\vrindex} \def\tindex {\tpindex} \def\pindex {\pgindex} \def\cindexsub {\begingroup\obeylines\cindexsub} {\obeylines % \gdef\cindexsub "#1" #2^^M{\endgroup % \dosubind{cp}{#2}{#1}}} % Define the macros used in formatting output of the sorted index material. % @printindex causes a particular index (the ??s file) to get printed. % It does not print any chapter heading (usually an @unnumbered). % \parseargdef\printindex{\begingroup \dobreak \chapheadingskip{10000}% % \smallfonts \rm \tolerance = 9500 \plainfrenchspacing \everypar = {}% don't want the \kern\-parindent from indentation suppression. % % See if the index file exists and is nonempty. % Change catcode of @ here so that if the index file contains % \initial {@} % as its first line, TeX doesn't complain about mismatched braces % (because it thinks @} is a control sequence). \catcode`\@ = 11 \openin 1 \jobname.#1s \ifeof 1 % \enddoublecolumns gets confused if there is no text in the index, % and it loses the chapter title and the aux file entries for the % index. The easiest way to prevent this problem is to make sure % there is some text. \putwordIndexNonexistent \else % % If the index file exists but is empty, then \openin leaves \ifeof % false. We have to make TeX try to read something from the file, so % it can discover if there is anything in it. \read 1 to \temp \ifeof 1 \putwordIndexIsEmpty \else % Index files are almost Texinfo source, but we use \ as the escape % character. It would be better to use @, but that's too big a change % to make right now. \def\indexbackslash{\backslashcurfont}% \catcode`\\ = 0 \escapechar = `\\ \begindoublecolumns \input \jobname.#1s \enddoublecolumns \fi \fi \closein 1 \endgroup} % These macros are used by the sorted index file itself. % Change them to control the appearance of the index. \def\initial#1{{% % Some minor font changes for the special characters. \let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt % % Remove any glue we may have, we'll be inserting our own. \removelastskip % % We like breaks before the index initials, so insert a bonus. \nobreak \vskip 0pt plus 3\baselineskip \penalty 0 \vskip 0pt plus -3\baselineskip % % Typeset the initial. Making this add up to a whole number of % baselineskips increases the chance of the dots lining up from column % to column. It still won't often be perfect, because of the stretch % we need before each entry, but it's better. % % No shrink because it confuses \balancecolumns. \vskip 1.67\baselineskip plus .5\baselineskip \leftline{\secbf #1}% % Do our best not to break after the initial. \nobreak \vskip .33\baselineskip plus .1\baselineskip }} % \entry typesets a paragraph consisting of the text (#1), dot leaders, and % then page number (#2) flushed to the right margin. It is used for index % and table of contents entries. The paragraph is indented by \leftskip. % % A straightforward implementation would start like this: % \def\entry#1#2{... % But this freezes the catcodes in the argument, and can cause problems to % @code, which sets - active. This problem was fixed by a kludge--- % ``-'' was active throughout whole index, but this isn't really right. % The right solution is to prevent \entry from swallowing the whole text. % --kasal, 21nov03 \def\entry{% \begingroup % % Start a new paragraph if necessary, so our assignments below can't % affect previous text. \par % % Do not fill out the last line with white space. \parfillskip = 0in % % No extra space above this paragraph. \parskip = 0in % % Do not prefer a separate line ending with a hyphen to fewer lines. \finalhyphendemerits = 0 % % \hangindent is only relevant when the entry text and page number % don't both fit on one line. In that case, bob suggests starting the % dots pretty far over on the line. Unfortunately, a large % indentation looks wrong when the entry text itself is broken across % lines. So we use a small indentation and put up with long leaders. % % \hangafter is reset to 1 (which is the value we want) at the start % of each paragraph, so we need not do anything with that. \hangindent = 2em % % When the entry text needs to be broken, just fill out the first line % with blank space. \rightskip = 0pt plus1fil % % A bit of stretch before each entry for the benefit of balancing % columns. \vskip 0pt plus1pt % % When reading the text of entry, convert explicit line breaks % from @* into spaces. The user might give these in long section % titles, for instance. \def\*{\unskip\space\ignorespaces}% \def\entrybreak{\hfil\break}% % % Swallow the left brace of the text (first parameter): \afterassignment\doentry \let\temp = } \def\entrybreak{\unskip\space\ignorespaces}% \def\doentry{% \bgroup % Instead of the swallowed brace. \noindent \aftergroup\finishentry % And now comes the text of the entry. } \def\finishentry#1{% % #1 is the page number. % % The following is kludged to not output a line of dots in the index if % there are no page numbers. The next person who breaks this will be % cursed by a Unix daemon. \setbox\boxA = \hbox{#1}% \ifdim\wd\boxA = 0pt \ % \else % % If we must, put the page number on a line of its own, and fill out % this line with blank space. (The \hfil is overwhelmed with the % fill leaders glue in \indexdotfill if the page number does fit.) \hfil\penalty50 \null\nobreak\indexdotfill % Have leaders before the page number. % % The `\ ' here is removed by the implicit \unskip that TeX does as % part of (the primitive) \par. Without it, a spurious underfull % \hbox ensues. \ifpdf \pdfgettoks#1.% \ \the\toksA \else \ #1% \fi \fi \par \endgroup } % Like plain.tex's \dotfill, except uses up at least 1 em. \def\indexdotfill{\cleaders \hbox{$\mathsurround=0pt \mkern1.5mu.\mkern1.5mu$}\hskip 1em plus 1fill} \def\primary #1{\line{#1\hfil}} \newskip\secondaryindent \secondaryindent=0.5cm \def\secondary#1#2{{% \parfillskip=0in \parskip=0in \hangindent=1in \hangafter=1 \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill \ifpdf \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph. \else #2 \fi \par }} % Define two-column mode, which we use to typeset indexes. % Adapted from the TeXbook, page 416, which is to say, % the manmac.tex format used to print the TeXbook itself. \catcode`\@=11 \newbox\partialpage \newdimen\doublecolumnhsize \def\begindoublecolumns{\begingroup % ended by \enddoublecolumns % Grab any single-column material above us. \output = {% % % Here is a possibility not foreseen in manmac: if we accumulate a % whole lot of material, we might end up calling this \output % routine twice in a row (see the doublecol-lose test, which is % essentially a couple of indexes with @setchapternewpage off). In % that case we just ship out what is in \partialpage with the normal % output routine. Generally, \partialpage will be empty when this % runs and this will be a no-op. See the indexspread.tex test case. \ifvoid\partialpage \else \onepageout{\pagecontents\partialpage}% \fi % \global\setbox\partialpage = \vbox{% % Unvbox the main output page. \unvbox\PAGE \kern-\topskip \kern\baselineskip }% }% \eject % run that output routine to set \partialpage % % Use the double-column output routine for subsequent pages. \output = {\doublecolumnout}% % % Change the page size parameters. We could do this once outside this % routine, in each of @smallbook, @afourpaper, and the default 8.5x11 % format, but then we repeat the same computation. Repeating a couple % of assignments once per index is clearly meaningless for the % execution time, so we may as well do it in one place. % % First we halve the line length, less a little for the gutter between % the columns. We compute the gutter based on the line length, so it % changes automatically with the paper format. The magic constant % below is chosen so that the gutter has the same value (well, +-<1pt) % as it did when we hard-coded it. % % We put the result in a separate register, \doublecolumhsize, so we % can restore it in \pagesofar, after \hsize itself has (potentially) % been clobbered. % \doublecolumnhsize = \hsize \advance\doublecolumnhsize by -.04154\hsize \divide\doublecolumnhsize by 2 \hsize = \doublecolumnhsize % % Double the \vsize as well. (We don't need a separate register here, % since nobody clobbers \vsize.) \vsize = 2\vsize } % The double-column output routine for all double-column pages except % the last. % \def\doublecolumnout{% \splittopskip=\topskip \splitmaxdepth=\maxdepth % Get the available space for the double columns -- the normal % (undoubled) page height minus any material left over from the % previous page. \dimen@ = \vsize \divide\dimen@ by 2 \advance\dimen@ by -\ht\partialpage % % box0 will be the left-hand column, box2 the right. \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@ \onepageout\pagesofar \unvbox255 \penalty\outputpenalty } % % Re-output the contents of the output page -- any previous material, % followed by the two boxes we just split, in box0 and box2. \def\pagesofar{% \unvbox\partialpage % \hsize = \doublecolumnhsize \wd0=\hsize \wd2=\hsize \hbox to\pagewidth{\box0\hfil\box2}% } % % All done with double columns. \def\enddoublecolumns{% % The following penalty ensures that the page builder is exercised % _before_ we change the output routine. This is necessary in the % following situation: % % The last section of the index consists only of a single entry. % Before this section, \pagetotal is less than \pagegoal, so no % break occurs before the last section starts. However, the last % section, consisting of \initial and the single \entry, does not % fit on the page and has to be broken off. Without the following % penalty the page builder will not be exercised until \eject % below, and by that time we'll already have changed the output % routine to the \balancecolumns version, so the next-to-last % double-column page will be processed with \balancecolumns, which % is wrong: The two columns will go to the main vertical list, with % the broken-off section in the recent contributions. As soon as % the output routine finishes, TeX starts reconsidering the page % break. The two columns and the broken-off section both fit on the % page, because the two columns now take up only half of the page % goal. When TeX sees \eject from below which follows the final % section, it invokes the new output routine that we've set after % \balancecolumns below; \onepageout will try to fit the two columns % and the final section into the vbox of \pageheight (see % \pagebody), causing an overfull box. % % Note that glue won't work here, because glue does not exercise the % page builder, unlike penalties (see The TeXbook, pp. 280-281). \penalty0 % \output = {% % Split the last of the double-column material. Leave it on the % current page, no automatic page break. \balancecolumns % % If we end up splitting too much material for the current page, % though, there will be another page break right after this \output % invocation ends. Having called \balancecolumns once, we do not % want to call it again. Therefore, reset \output to its normal % definition right away. (We hope \balancecolumns will never be % called on to balance too much material, but if it is, this makes % the output somewhat more palatable.) \global\output = {\onepageout{\pagecontents\PAGE}}% }% \eject \endgroup % started in \begindoublecolumns % % \pagegoal was set to the doubled \vsize above, since we restarted % the current page. We're now back to normal single-column % typesetting, so reset \pagegoal to the normal \vsize (after the % \endgroup where \vsize got restored). \pagegoal = \vsize } % % Called at the end of the double column material. \def\balancecolumns{% \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120. \dimen@ = \ht0 \advance\dimen@ by \topskip \advance\dimen@ by-\baselineskip \divide\dimen@ by 2 % target to split to %debug\message{final 2-column material height=\the\ht0, target=\the\dimen@.}% \splittopskip = \topskip % Loop until we get a decent breakpoint. {% \vbadness = 10000 \loop \global\setbox3 = \copy0 \global\setbox1 = \vsplit3 to \dimen@ \ifdim\ht3>\dimen@ \global\advance\dimen@ by 1pt \repeat }% %debug\message{split to \the\dimen@, column heights: \the\ht1, \the\ht3.}% \setbox0=\vbox to\dimen@{\unvbox1}% \setbox2=\vbox to\dimen@{\unvbox3}% % \pagesofar } \catcode`\@ = \other \message{sectioning,} % Chapters, sections, etc. % Let's start with @part. \outer\parseargdef\part{\partzzz{#1}} \def\partzzz#1{% \chapoddpage \null \vskip.3\vsize % move it down on the page a bit \begingroup \noindent \titlefonts\rmisbold #1\par % the text \let\lastnode=\empty % no node to associate with \writetocentry{part}{#1}{}% but put it in the toc \headingsoff % no headline or footline on the part page \chapoddpage \endgroup } % \unnumberedno is an oxymoron. But we count the unnumbered % sections so that we can refer to them unambiguously in the pdf % outlines by their "section number". We avoid collisions with chapter % numbers by starting them at 10000. (If a document ever has 10000 % chapters, we're in trouble anyway, I'm sure.) \newcount\unnumberedno \unnumberedno = 10000 \newcount\chapno \newcount\secno \secno=0 \newcount\subsecno \subsecno=0 \newcount\subsubsecno \subsubsecno=0 % This counter is funny since it counts through charcodes of letters A, B, ... \newcount\appendixno \appendixno = `\@ % % \def\appendixletter{\char\the\appendixno} % We do the following ugly conditional instead of the above simple % construct for the sake of pdftex, which needs the actual % letter in the expansion, not just typeset. % \def\appendixletter{% \ifnum\appendixno=`A A% \else\ifnum\appendixno=`B B% \else\ifnum\appendixno=`C C% \else\ifnum\appendixno=`D D% \else\ifnum\appendixno=`E E% \else\ifnum\appendixno=`F F% \else\ifnum\appendixno=`G G% \else\ifnum\appendixno=`H H% \else\ifnum\appendixno=`I I% \else\ifnum\appendixno=`J J% \else\ifnum\appendixno=`K K% \else\ifnum\appendixno=`L L% \else\ifnum\appendixno=`M M% \else\ifnum\appendixno=`N N% \else\ifnum\appendixno=`O O% \else\ifnum\appendixno=`P P% \else\ifnum\appendixno=`Q Q% \else\ifnum\appendixno=`R R% \else\ifnum\appendixno=`S S% \else\ifnum\appendixno=`T T% \else\ifnum\appendixno=`U U% \else\ifnum\appendixno=`V V% \else\ifnum\appendixno=`W W% \else\ifnum\appendixno=`X X% \else\ifnum\appendixno=`Y Y% \else\ifnum\appendixno=`Z Z% % The \the is necessary, despite appearances, because \appendixletter is % expanded while writing the .toc file. \char\appendixno is not % expandable, thus it is written literally, thus all appendixes come out % with the same letter (or @) in the toc without it. \else\char\the\appendixno \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi} % Each @chapter defines these (using marks) as the number+name, number % and name of the chapter. Page headings and footings can use % these. @section does likewise. \def\thischapter{} \def\thischapternum{} \def\thischaptername{} \def\thissection{} \def\thissectionnum{} \def\thissectionname{} \newcount\absseclevel % used to calculate proper heading level \newcount\secbase\secbase=0 % @raisesections/@lowersections modify this count % @raisesections: treat @section as chapter, @subsection as section, etc. \def\raisesections{\global\advance\secbase by -1} \let\up=\raisesections % original BFox name % @lowersections: treat @chapter as section, @section as subsection, etc. \def\lowersections{\global\advance\secbase by 1} \let\down=\lowersections % original BFox name % we only have subsub. \chardef\maxseclevel = 3 % % A numbered section within an unnumbered changes to unnumbered too. % To achieve this, remember the "biggest" unnum. sec. we are currently in: \chardef\unnlevel = \maxseclevel % % Trace whether the current chapter is an appendix or not: % \chapheadtype is "N" or "A", unnumbered chapters are ignored. \def\chapheadtype{N} % Choose a heading macro % #1 is heading type % #2 is heading level % #3 is text for heading \def\genhead#1#2#3{% % Compute the abs. sec. level: \absseclevel=#2 \advance\absseclevel by \secbase % Make sure \absseclevel doesn't fall outside the range: \ifnum \absseclevel < 0 \absseclevel = 0 \else \ifnum \absseclevel > 3 \absseclevel = 3 \fi \fi % The heading type: \def\headtype{#1}% \if \headtype U% \ifnum \absseclevel < \unnlevel \chardef\unnlevel = \absseclevel \fi \else % Check for appendix sections: \ifnum \absseclevel = 0 \edef\chapheadtype{\headtype}% \else \if \headtype A\if \chapheadtype N% \errmessage{@appendix... within a non-appendix chapter}% \fi\fi \fi % Check for numbered within unnumbered: \ifnum \absseclevel > \unnlevel \def\headtype{U}% \else \chardef\unnlevel = 3 \fi \fi % Now print the heading: \if \headtype U% \ifcase\absseclevel \unnumberedzzz{#3}% \or \unnumberedseczzz{#3}% \or \unnumberedsubseczzz{#3}% \or \unnumberedsubsubseczzz{#3}% \fi \else \if \headtype A% \ifcase\absseclevel \appendixzzz{#3}% \or \appendixsectionzzz{#3}% \or \appendixsubseczzz{#3}% \or \appendixsubsubseczzz{#3}% \fi \else \ifcase\absseclevel \chapterzzz{#3}% \or \seczzz{#3}% \or \numberedsubseczzz{#3}% \or \numberedsubsubseczzz{#3}% \fi \fi \fi \suppressfirstparagraphindent } % an interface: \def\numhead{\genhead N} \def\apphead{\genhead A} \def\unnmhead{\genhead U} % @chapter, @appendix, @unnumbered. Increment top-level counter, reset % all lower-level sectioning counters to zero. % % Also set \chaplevelprefix, which we prepend to @float sequence numbers % (e.g., figures), q.v. By default (before any chapter), that is empty. \let\chaplevelprefix = \empty % \outer\parseargdef\chapter{\numhead0{#1}} % normally numhead0 calls chapterzzz \def\chapterzzz#1{% % section resetting is \global in case the chapter is in a group, such % as an @include file. \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 \global\advance\chapno by 1 % % Used for \float. \gdef\chaplevelprefix{\the\chapno.}% \resetallfloatnos % % \putwordChapter can contain complex things in translations. \toks0=\expandafter{\putwordChapter}% \message{\the\toks0 \space \the\chapno}% % % Write the actual heading. \chapmacro{#1}{Ynumbered}{\the\chapno}% % % So @section and the like are numbered underneath this chapter. \global\let\section = \numberedsec \global\let\subsection = \numberedsubsec \global\let\subsubsection = \numberedsubsubsec } \outer\parseargdef\appendix{\apphead0{#1}} % normally calls appendixzzz % \def\appendixzzz#1{% \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 \global\advance\appendixno by 1 \gdef\chaplevelprefix{\appendixletter.}% \resetallfloatnos % % \putwordAppendix can contain complex things in translations. \toks0=\expandafter{\putwordAppendix}% \message{\the\toks0 \space \appendixletter}% % \chapmacro{#1}{Yappendix}{\appendixletter}% % \global\let\section = \appendixsec \global\let\subsection = \appendixsubsec \global\let\subsubsection = \appendixsubsubsec } % normally unnmhead0 calls unnumberedzzz: \outer\parseargdef\unnumbered{\unnmhead0{#1}} \def\unnumberedzzz#1{% \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 \global\advance\unnumberedno by 1 % % Since an unnumbered has no number, no prefix for figures. \global\let\chaplevelprefix = \empty \resetallfloatnos % % This used to be simply \message{#1}, but TeX fully expands the % argument to \message. Therefore, if #1 contained @-commands, TeX % expanded them. For example, in `@unnumbered The @cite{Book}', TeX % expanded @cite (which turns out to cause errors because \cite is meant % to be executed, not expanded). % % Anyway, we don't want the fully-expanded definition of @cite to appear % as a result of the \message, we just want `@cite' itself. We use % \the<toks register> to achieve this: TeX expands \the<toks> only once, % simply yielding the contents of <toks register>. (We also do this for % the toc entries.) \toks0 = {#1}% \message{(\the\toks0)}% % \chapmacro{#1}{Ynothing}{\the\unnumberedno}% % \global\let\section = \unnumberedsec \global\let\subsection = \unnumberedsubsec \global\let\subsubsection = \unnumberedsubsubsec } % @centerchap is like @unnumbered, but the heading is centered. \outer\parseargdef\centerchap{% % Well, we could do the following in a group, but that would break % an assumption that \chapmacro is called at the outermost level. % Thus we are safer this way: --kasal, 24feb04 \let\centerparametersmaybe = \centerparameters \unnmhead0{#1}% \let\centerparametersmaybe = \relax } % @top is like @unnumbered. \let\top\unnumbered % Sections. % \outer\parseargdef\numberedsec{\numhead1{#1}} % normally calls seczzz \def\seczzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 \sectionheading{#1}{sec}{Ynumbered}{\the\chapno.\the\secno}% } % normally calls appendixsectionzzz: \outer\parseargdef\appendixsection{\apphead1{#1}} \def\appendixsectionzzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 \sectionheading{#1}{sec}{Yappendix}{\appendixletter.\the\secno}% } \let\appendixsec\appendixsection % normally calls unnumberedseczzz: \outer\parseargdef\unnumberedsec{\unnmhead1{#1}} \def\unnumberedseczzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 \sectionheading{#1}{sec}{Ynothing}{\the\unnumberedno.\the\secno}% } % Subsections. % % normally calls numberedsubseczzz: \outer\parseargdef\numberedsubsec{\numhead2{#1}} \def\numberedsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Ynumbered}{\the\chapno.\the\secno.\the\subsecno}% } % normally calls appendixsubseczzz: \outer\parseargdef\appendixsubsec{\apphead2{#1}} \def\appendixsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Yappendix}% {\appendixletter.\the\secno.\the\subsecno}% } % normally calls unnumberedsubseczzz: \outer\parseargdef\unnumberedsubsec{\unnmhead2{#1}} \def\unnumberedsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Ynothing}% {\the\unnumberedno.\the\secno.\the\subsecno}% } % Subsubsections. % % normally numberedsubsubseczzz: \outer\parseargdef\numberedsubsubsec{\numhead3{#1}} \def\numberedsubsubseczzz#1{% \global\advance\subsubsecno by 1 \sectionheading{#1}{subsubsec}{Ynumbered}% {\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno}% } % normally appendixsubsubseczzz: \outer\parseargdef\appendixsubsubsec{\apphead3{#1}} \def\appendixsubsubseczzz#1{% \global\advance\subsubsecno by 1 \sectionheading{#1}{subsubsec}{Yappendix}% {\appendixletter.\the\secno.\the\subsecno.\the\subsubsecno}% } % normally unnumberedsubsubseczzz: \outer\parseargdef\unnumberedsubsubsec{\unnmhead3{#1}} \def\unnumberedsubsubseczzz#1{% \global\advance\subsubsecno by 1 \sectionheading{#1}{subsubsec}{Ynothing}% {\the\unnumberedno.\the\secno.\the\subsecno.\the\subsubsecno}% } % These macros control what the section commands do, according % to what kind of chapter we are in (ordinary, appendix, or unnumbered). % Define them by default for a numbered chapter. \let\section = \numberedsec \let\subsection = \numberedsubsec \let\subsubsection = \numberedsubsubsec % Define @majorheading, @heading and @subheading \def\majorheading{% {\advance\chapheadingskip by 10pt \chapbreak }% \parsearg\chapheadingzzz } \def\chapheading{\chapbreak \parsearg\chapheadingzzz} \def\chapheadingzzz#1{% \vbox{\chapfonts \raggedtitlesettings #1\par}% \nobreak\bigskip \nobreak \suppressfirstparagraphindent } % @heading, @subheading, @subsubheading. \parseargdef\heading{\sectionheading{#1}{sec}{Yomitfromtoc}{} \suppressfirstparagraphindent} \parseargdef\subheading{\sectionheading{#1}{subsec}{Yomitfromtoc}{} \suppressfirstparagraphindent} \parseargdef\subsubheading{\sectionheading{#1}{subsubsec}{Yomitfromtoc}{} \suppressfirstparagraphindent} % These macros generate a chapter, section, etc. heading only % (including whitespace, linebreaking, etc. around it), % given all the information in convenient, parsed form. % Args are the skip and penalty (usually negative) \def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi} % Parameter controlling skip before chapter headings (if needed) \newskip\chapheadingskip % Define plain chapter starts, and page on/off switching for it. \def\chapbreak{\dobreak \chapheadingskip {-4000}} \def\chappager{\par\vfill\supereject} % Because \domark is called before \chapoddpage, the filler page will % get the headings for the next chapter, which is wrong. But we don't % care -- we just disable all headings on the filler page. \def\chapoddpage{% \chappager \ifodd\pageno \else \begingroup \headingsoff \null \chappager \endgroup \fi } \def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname} \def\CHAPPAGoff{% \global\let\contentsalignmacro = \chappager \global\let\pchapsepmacro=\chapbreak \global\let\pagealignmacro=\chappager} \def\CHAPPAGon{% \global\let\contentsalignmacro = \chappager \global\let\pchapsepmacro=\chappager \global\let\pagealignmacro=\chappager \global\def\HEADINGSon{\HEADINGSsingle}} \def\CHAPPAGodd{% \global\let\contentsalignmacro = \chapoddpage \global\let\pchapsepmacro=\chapoddpage \global\let\pagealignmacro=\chapoddpage \global\def\HEADINGSon{\HEADINGSdouble}} \CHAPPAGon % Chapter opening. % % #1 is the text, #2 is the section type (Ynumbered, Ynothing, % Yappendix, Yomitfromtoc), #3 the chapter number. % % To test against our argument. \def\Ynothingkeyword{Ynothing} \def\Yomitfromtockeyword{Yomitfromtoc} \def\Yappendixkeyword{Yappendix} % \def\chapmacro#1#2#3{% % Insert the first mark before the heading break (see notes for \domark). \let\prevchapterdefs=\lastchapterdefs \let\prevsectiondefs=\lastsectiondefs \gdef\lastsectiondefs{\gdef\thissectionname{}\gdef\thissectionnum{}% \gdef\thissection{}}% % \def\temptype{#2}% \ifx\temptype\Ynothingkeyword \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}% \gdef\thischapter{\thischaptername}}% \else\ifx\temptype\Yomitfromtockeyword \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}% \gdef\thischapter{}}% \else\ifx\temptype\Yappendixkeyword \toks0={#1}% \xdef\lastchapterdefs{% \gdef\noexpand\thischaptername{\the\toks0}% \gdef\noexpand\thischapternum{\appendixletter}% % \noexpand\putwordAppendix avoids expanding indigestible % commands in some of the translations. \gdef\noexpand\thischapter{\noexpand\putwordAppendix{} \noexpand\thischapternum: \noexpand\thischaptername}% }% \else \toks0={#1}% \xdef\lastchapterdefs{% \gdef\noexpand\thischaptername{\the\toks0}% \gdef\noexpand\thischapternum{\the\chapno}% % \noexpand\putwordChapter avoids expanding indigestible % commands in some of the translations. \gdef\noexpand\thischapter{\noexpand\putwordChapter{} \noexpand\thischapternum: \noexpand\thischaptername}% }% \fi\fi\fi % % Output the mark. Pass it through \safewhatsit, to take care of % the preceding space. \safewhatsit\domark % % Insert the chapter heading break. \pchapsepmacro % % Now the second mark, after the heading break. No break points % between here and the heading. \let\prevchapterdefs=\lastchapterdefs \let\prevsectiondefs=\lastsectiondefs \domark % {% \chapfonts \rmisbold % % Have to define \lastsection before calling \donoderef, because the % xref code eventually uses it. On the other hand, it has to be called % after \pchapsepmacro, or the headline will change too soon. \gdef\lastsection{#1}% % % Only insert the separating space if we have a chapter/appendix % number, and don't print the unnumbered ``number''. \ifx\temptype\Ynothingkeyword \setbox0 = \hbox{}% \def\toctype{unnchap}% \else\ifx\temptype\Yomitfromtockeyword \setbox0 = \hbox{}% contents like unnumbered, but no toc entry \def\toctype{omit}% \else\ifx\temptype\Yappendixkeyword \setbox0 = \hbox{\putwordAppendix{} #3\enspace}% \def\toctype{app}% \else \setbox0 = \hbox{#3\enspace}% \def\toctype{numchap}% \fi\fi\fi % % Write the toc entry for this chapter. Must come before the % \donoderef, because we include the current node name in the toc % entry, and \donoderef resets it to empty. \writetocentry{\toctype}{#1}{#3}% % % For pdftex, we have to write out the node definition (aka, make % the pdfdest) after any page break, but before the actual text has % been typeset. If the destination for the pdf outline is after the % text, then jumping from the outline may wind up with the text not % being visible, for instance under high magnification. \donoderef{#2}% % % Typeset the actual heading. \nobreak % Avoid page breaks at the interline glue. \vbox{\raggedtitlesettings \hangindent=\wd0 \centerparametersmaybe \unhbox0 #1\par}% }% \nobreak\bigskip % no page break after a chapter title \nobreak } % @centerchap -- centered and unnumbered. \let\centerparametersmaybe = \relax \def\centerparameters{% \advance\rightskip by 3\rightskip \leftskip = \rightskip \parfillskip = 0pt } % I don't think this chapter style is supported any more, so I'm not % updating it with the new noderef stuff. We'll see. --karl, 11aug03. % \def\setchapterstyle #1 {\csname CHAPF#1\endcsname} % \def\unnchfopen #1{% \chapoddpage \vbox{\chapfonts \raggedtitlesettings #1\par}% \nobreak\bigskip\nobreak } \def\chfopen #1#2{\chapoddpage {\chapfonts \vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}% \par\penalty 5000 % } \def\centerchfopen #1{% \chapoddpage \vbox{\chapfonts \raggedtitlesettings \hfill #1\hfill}% \nobreak\bigskip \nobreak } \def\CHAPFopen{% \global\let\chapmacro=\chfopen \global\let\centerchapmacro=\centerchfopen} % Section titles. These macros combine the section number parts and % call the generic \sectionheading to do the printing. % \newskip\secheadingskip \def\secheadingbreak{\dobreak \secheadingskip{-1000}} % Subsection titles. \newskip\subsecheadingskip \def\subsecheadingbreak{\dobreak \subsecheadingskip{-500}} % Subsubsection titles. \def\subsubsecheadingskip{\subsecheadingskip} \def\subsubsecheadingbreak{\subsecheadingbreak} % Print any size, any type, section title. % % #1 is the text, #2 is the section level (sec/subsec/subsubsec), #3 is % the section type for xrefs (Ynumbered, Ynothing, Yappendix), #4 is the % section number. % \def\seckeyword{sec} % \def\sectionheading#1#2#3#4{% {% \checkenv{}% should not be in an environment. % % Switch to the right set of fonts. \csname #2fonts\endcsname \rmisbold % \def\sectionlevel{#2}% \def\temptype{#3}% % % Insert first mark before the heading break (see notes for \domark). \let\prevsectiondefs=\lastsectiondefs \ifx\temptype\Ynothingkeyword \ifx\sectionlevel\seckeyword \gdef\lastsectiondefs{\gdef\thissectionname{#1}\gdef\thissectionnum{}% \gdef\thissection{\thissectionname}}% \fi \else\ifx\temptype\Yomitfromtockeyword % Don't redefine \thissection. \else\ifx\temptype\Yappendixkeyword \ifx\sectionlevel\seckeyword \toks0={#1}% \xdef\lastsectiondefs{% \gdef\noexpand\thissectionname{\the\toks0}% \gdef\noexpand\thissectionnum{#4}% % \noexpand\putwordSection avoids expanding indigestible % commands in some of the translations. \gdef\noexpand\thissection{\noexpand\putwordSection{} \noexpand\thissectionnum: \noexpand\thissectionname}% }% \fi \else \ifx\sectionlevel\seckeyword \toks0={#1}% \xdef\lastsectiondefs{% \gdef\noexpand\thissectionname{\the\toks0}% \gdef\noexpand\thissectionnum{#4}% % \noexpand\putwordSection avoids expanding indigestible % commands in some of the translations. \gdef\noexpand\thissection{\noexpand\putwordSection{} \noexpand\thissectionnum: \noexpand\thissectionname}% }% \fi \fi\fi\fi % % Go into vertical mode. Usually we'll already be there, but we % don't want the following whatsit to end up in a preceding paragraph % if the document didn't happen to have a blank line. \par % % Output the mark. Pass it through \safewhatsit, to take care of % the preceding space. \safewhatsit\domark % % Insert space above the heading. \csname #2headingbreak\endcsname % % Now the second mark, after the heading break. No break points % between here and the heading. \let\prevsectiondefs=\lastsectiondefs \domark % % Only insert the space after the number if we have a section number. \ifx\temptype\Ynothingkeyword \setbox0 = \hbox{}% \def\toctype{unn}% \gdef\lastsection{#1}% \else\ifx\temptype\Yomitfromtockeyword % for @headings -- no section number, don't include in toc, % and don't redefine \lastsection. \setbox0 = \hbox{}% \def\toctype{omit}% \let\sectionlevel=\empty \else\ifx\temptype\Yappendixkeyword \setbox0 = \hbox{#4\enspace}% \def\toctype{app}% \gdef\lastsection{#1}% \else \setbox0 = \hbox{#4\enspace}% \def\toctype{num}% \gdef\lastsection{#1}% \fi\fi\fi % % Write the toc entry (before \donoderef). See comments in \chapmacro. \writetocentry{\toctype\sectionlevel}{#1}{#4}% % % Write the node reference (= pdf destination for pdftex). % Again, see comments in \chapmacro. \donoderef{#3}% % % Interline glue will be inserted when the vbox is completed. % That glue will be a valid breakpoint for the page, since it'll be % preceded by a whatsit (usually from the \donoderef, or from the % \writetocentry if there was no node). We don't want to allow that % break, since then the whatsits could end up on page n while the % section is on page n+1, thus toc/etc. are wrong. Debian bug 276000. \nobreak % % Output the actual section heading. \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \ptexraggedright \hangindent=\wd0 % zero if no section number \unhbox0 #1}% }% % Add extra space after the heading -- half of whatever came above it. % Don't allow stretch, though. \kern .5 \csname #2headingskip\endcsname % % Do not let the kern be a potential breakpoint, as it would be if it % was followed by glue. \nobreak % % We'll almost certainly start a paragraph next, so don't let that % glue accumulate. (Not a breakpoint because it's preceded by a % discardable item.) However, when a paragraph is not started next % (\startdefun, \cartouche, \center, etc.), this needs to be wiped out % or the negative glue will cause weirdly wrong output, typically % obscuring the section heading with something else. \vskip-\parskip % % This is so the last item on the main vertical list is a known % \penalty > 10000, so \startdefun, etc., can recognize the situation % and do the needful. \penalty 10001 } \message{toc,} % Table of contents. \newwrite\tocfile % Write an entry to the toc file, opening it if necessary. % Called from @chapter, etc. % % Example usage: \writetocentry{sec}{Section Name}{\the\chapno.\the\secno} % We append the current node name (if any) and page number as additional % arguments for the \{chap,sec,...}entry macros which will eventually % read this. The node name is used in the pdf outlines as the % destination to jump to. % % We open the .toc file for writing here instead of at @setfilename (or % any other fixed time) so that @contents can be anywhere in the document. % But if #1 is `omit', then we don't do anything. This is used for the % table of contents chapter openings themselves. % \newif\iftocfileopened \def\omitkeyword{omit}% % \def\writetocentry#1#2#3{% \edef\writetoctype{#1}% \ifx\writetoctype\omitkeyword \else \iftocfileopened\else \immediate\openout\tocfile = \jobname.toc \global\tocfileopenedtrue \fi % \iflinks {\atdummies \edef\temp{% \write\tocfile{@#1entry{#2}{#3}{\lastnode}{\noexpand\folio}}}% \temp }% \fi \fi % % Tell \shipout to create a pdf destination on each page, if we're % writing pdf. These are used in the table of contents. We can't % just write one on every page because the title pages are numbered % 1 and 2 (the page numbers aren't printed), and so are the first % two pages of the document. Thus, we'd have two destinations named % `1', and two named `2'. \ifpdf \global\pdfmakepagedesttrue \fi } % These characters do not print properly in the Computer Modern roman % fonts, so we must take special care. This is more or less redundant % with the Texinfo input format setup at the end of this file. % \def\activecatcodes{% \catcode`\"=\active \catcode`\$=\active \catcode`\<=\active \catcode`\>=\active \catcode`\\=\active \catcode`\^=\active \catcode`\_=\active \catcode`\|=\active \catcode`\~=\active } % Read the toc file, which is essentially Texinfo input. \def\readtocfile{% \setupdatafile \activecatcodes \input \tocreadfilename } \newskip\contentsrightmargin \contentsrightmargin=1in \newcount\savepageno \newcount\lastnegativepageno \lastnegativepageno = -1 % Prepare to read what we've written to \tocfile. % \def\startcontents#1{% % If @setchapternewpage on, and @headings double, the contents should % start on an odd page, unlike chapters. Thus, we maintain % \contentsalignmacro in parallel with \pagealignmacro. % From: Torbjorn Granlund <tege@matematik.su.se> \contentsalignmacro \immediate\closeout\tocfile % % Don't need to put `Contents' or `Short Contents' in the headline. % It is abundantly clear what they are. \chapmacro{#1}{Yomitfromtoc}{}% % \savepageno = \pageno \begingroup % Set up to handle contents files properly. \raggedbottom % Worry more about breakpoints than the bottom. \advance\hsize by -\contentsrightmargin % Don't use the full line length. % % Roman numerals for page numbers. \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi } % redefined for the two-volume lispref. We always output on % \jobname.toc even if this is redefined. % \def\tocreadfilename{\jobname.toc} % Normal (long) toc. % \def\contents{% \startcontents{\putwordTOC}% \openin 1 \tocreadfilename\space \ifeof 1 \else \readtocfile \fi \vfill \eject \contentsalignmacro % in case @setchapternewpage odd is in effect \ifeof 1 \else \pdfmakeoutlines \fi \closein 1 \endgroup \lastnegativepageno = \pageno \global\pageno = \savepageno } % And just the chapters. \def\summarycontents{% \startcontents{\putwordShortTOC}% % \let\partentry = \shortpartentry \let\numchapentry = \shortchapentry \let\appentry = \shortchapentry \let\unnchapentry = \shortunnchapentry % We want a true roman here for the page numbers. \secfonts \let\rm=\shortcontrm \let\bf=\shortcontbf \let\sl=\shortcontsl \let\tt=\shortconttt \rm \hyphenpenalty = 10000 \advance\baselineskip by 1pt % Open it up a little. \def\numsecentry##1##2##3##4{} \let\appsecentry = \numsecentry \let\unnsecentry = \numsecentry \let\numsubsecentry = \numsecentry \let\appsubsecentry = \numsecentry \let\unnsubsecentry = \numsecentry \let\numsubsubsecentry = \numsecentry \let\appsubsubsecentry = \numsecentry \let\unnsubsubsecentry = \numsecentry \openin 1 \tocreadfilename\space \ifeof 1 \else \readtocfile \fi \closein 1 \vfill \eject \contentsalignmacro % in case @setchapternewpage odd is in effect \endgroup \lastnegativepageno = \pageno \global\pageno = \savepageno } \let\shortcontents = \summarycontents % Typeset the label for a chapter or appendix for the short contents. % The arg is, e.g., `A' for an appendix, or `3' for a chapter. % \def\shortchaplabel#1{% % This space should be enough, since a single number is .5em, and the % widest letter (M) is 1em, at least in the Computer Modern fonts. % But use \hss just in case. % (This space doesn't include the extra space that gets added after % the label; that gets put in by \shortchapentry above.) % % We'd like to right-justify chapter numbers, but that looks strange % with appendix letters. And right-justifying numbers and % left-justifying letters looks strange when there is less than 10 % chapters. Have to read the whole toc once to know how many chapters % there are before deciding ... \hbox to 1em{#1\hss}% } % These macros generate individual entries in the table of contents. % The first argument is the chapter or section name. % The last argument is the page number. % The arguments in between are the chapter number, section number, ... % Parts, in the main contents. Replace the part number, which doesn't % exist, with an empty box. Let's hope all the numbers have the same width. % Also ignore the page number, which is conventionally not printed. \def\numeralbox{\setbox0=\hbox{8}\hbox to \wd0{\hfil}} \def\partentry#1#2#3#4{\dochapentry{\numeralbox\labelspace#1}{}} % % Parts, in the short toc. \def\shortpartentry#1#2#3#4{% \penalty-300 \vskip.5\baselineskip plus.15\baselineskip minus.1\baselineskip \shortchapentry{{\bf #1}}{\numeralbox}{}{}% } % Chapters, in the main contents. \def\numchapentry#1#2#3#4{\dochapentry{#2\labelspace#1}{#4}} % % Chapters, in the short toc. % See comments in \dochapentry re vbox and related settings. \def\shortchapentry#1#2#3#4{% \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#4\egroup}% } % Appendices, in the main contents. % Need the word Appendix, and a fixed-size box. % \def\appendixbox#1{% % We use M since it's probably the widest letter. \setbox0 = \hbox{\putwordAppendix{} M}% \hbox to \wd0{\putwordAppendix{} #1\hss}} % \def\appentry#1#2#3#4{\dochapentry{\appendixbox{#2}\labelspace#1}{#4}} % Unnumbered chapters. \def\unnchapentry#1#2#3#4{\dochapentry{#1}{#4}} \def\shortunnchapentry#1#2#3#4{\tocentry{#1}{\doshortpageno\bgroup#4\egroup}} % Sections. \def\numsecentry#1#2#3#4{\dosecentry{#2\labelspace#1}{#4}} \let\appsecentry=\numsecentry \def\unnsecentry#1#2#3#4{\dosecentry{#1}{#4}} % Subsections. \def\numsubsecentry#1#2#3#4{\dosubsecentry{#2\labelspace#1}{#4}} \let\appsubsecentry=\numsubsecentry \def\unnsubsecentry#1#2#3#4{\dosubsecentry{#1}{#4}} % And subsubsections. \def\numsubsubsecentry#1#2#3#4{\dosubsubsecentry{#2\labelspace#1}{#4}} \let\appsubsubsecentry=\numsubsubsecentry \def\unnsubsubsecentry#1#2#3#4{\dosubsubsecentry{#1}{#4}} % This parameter controls the indentation of the various levels. % Same as \defaultparindent. \newdimen\tocindent \tocindent = 15pt % Now for the actual typesetting. In all these, #1 is the text and #2 is the % page number. % % If the toc has to be broken over pages, we want it to be at chapters % if at all possible; hence the \penalty. \def\dochapentry#1#2{% \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip \begingroup \chapentryfonts \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup \nobreak\vskip .25\baselineskip plus.1\baselineskip } \def\dosecentry#1#2{\begingroup \secentryfonts \leftskip=\tocindent \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup} \def\dosubsecentry#1#2{\begingroup \subsecentryfonts \leftskip=2\tocindent \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup} \def\dosubsubsecentry#1#2{\begingroup \subsubsecentryfonts \leftskip=3\tocindent \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup} % We use the same \entry macro as for the index entries. \let\tocentry = \entry % Space between chapter (or whatever) number and the title. \def\labelspace{\hskip1em \relax} \def\dopageno#1{{\rm #1}} \def\doshortpageno#1{{\rm #1}} \def\chapentryfonts{\secfonts \rm} \def\secentryfonts{\textfonts} \def\subsecentryfonts{\textfonts} \def\subsubsecentryfonts{\textfonts} \message{environments,} % @foo ... @end foo. % @tex ... @end tex escapes into raw TeX temporarily. % One exception: @ is still an escape character, so that @end tex works. % But \@ or @@ will get a plain @ character. \envdef\tex{% \setupmarkupstyle{tex}% \catcode `\\=0 \catcode `\{=1 \catcode `\}=2 \catcode `\$=3 \catcode `\&=4 \catcode `\#=6 \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie \catcode `\%=14 \catcode `\+=\other \catcode `\"=\other \catcode `\|=\other \catcode `\<=\other \catcode `\>=\other \catcode`\`=\other \catcode`\'=\other \escapechar=`\\ % % ' is active in math mode (mathcode"8000). So reset it, and all our % other math active characters (just in case), to plain's definitions. \mathactive % \let\b=\ptexb \let\bullet=\ptexbullet \let\c=\ptexc \let\,=\ptexcomma \let\.=\ptexdot \let\dots=\ptexdots \let\equiv=\ptexequiv \let\!=\ptexexclam \let\i=\ptexi \let\indent=\ptexindent \let\noindent=\ptexnoindent \let\{=\ptexlbrace \let\+=\tabalign \let\}=\ptexrbrace \let\/=\ptexslash \let\*=\ptexstar \let\t=\ptext \expandafter \let\csname top\endcsname=\ptextop % outer \let\frenchspacing=\plainfrenchspacing % \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}% \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}% \def\@{@}% } % There is no need to define \Etex. % Define @lisp ... @end lisp. % @lisp environment forms a group so it can rebind things, % including the definition of @end lisp (which normally is erroneous). % Amount to narrow the margins by for @lisp. \newskip\lispnarrowing \lispnarrowing=0.4in % This is the definition that ^^M gets inside @lisp, @example, and other % such environments. \null is better than a space, since it doesn't % have any width. \def\lisppar{\null\endgraf} % This space is always present above and below environments. \newskip\envskipamount \envskipamount = 0pt % Make spacing and below environment symmetrical. We use \parskip here % to help in doing that, since in @example-like environments \parskip % is reset to zero; thus the \afterenvbreak inserts no space -- but the % start of the next paragraph will insert \parskip. % \def\aboveenvbreak{{% % =10000 instead of <10000 because of a special case in \itemzzz and % \sectionheading, q.v. \ifnum \lastpenalty=10000 \else \advance\envskipamount by \parskip \endgraf \ifdim\lastskip<\envskipamount \removelastskip % it's not a good place to break if the last penalty was \nobreak % or better ... \ifnum\lastpenalty<10000 \penalty-50 \fi \vskip\envskipamount \fi \fi }} \let\afterenvbreak = \aboveenvbreak % \nonarrowing is a flag. If "set", @lisp etc don't narrow margins; it will % also clear it, so that its embedded environments do the narrowing again. \let\nonarrowing=\relax % @cartouche ... @end cartouche: draw rectangle w/rounded corners around % environment contents. \font\circle=lcircle10 \newdimen\circthick \newdimen\cartouter\newdimen\cartinner \newskip\normbskip\newskip\normpskip\newskip\normlskip \circthick=\fontdimen8\circle % \def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth \def\ctr{{\hskip 6pt\circle\char'010}} \def\cbl{{\circle\char'012\hskip -6pt}} \def\cbr{{\hskip 6pt\circle\char'011}} \def\carttop{\hbox to \cartouter{\hskip\lskip \ctl\leaders\hrule height\circthick\hfil\ctr \hskip\rskip}} \def\cartbot{\hbox to \cartouter{\hskip\lskip \cbl\leaders\hrule height\circthick\hfil\cbr \hskip\rskip}} % \newskip\lskip\newskip\rskip \envdef\cartouche{% \ifhmode\par\fi % can't be in the midst of a paragraph. \startsavinginserts \lskip=\leftskip \rskip=\rightskip \leftskip=0pt\rightskip=0pt % we want these *outside*. \cartinner=\hsize \advance\cartinner by-\lskip \advance\cartinner by-\rskip \cartouter=\hsize \advance\cartouter by 18.4pt % allow for 3pt kerns on either % side, and for 6pt waste from % each corner char, and rule thickness \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip % Flag to tell @lisp, etc., not to narrow margin. \let\nonarrowing = t% % % If this cartouche directly follows a sectioning command, we need the % \parskip glue (backspaced over by default) or the cartouche can % collide with the section heading. \ifnum\lastpenalty>10000 \vskip\parskip \penalty\lastpenalty \fi % \vbox\bgroup \baselineskip=0pt\parskip=0pt\lineskip=0pt \carttop \hbox\bgroup \hskip\lskip \vrule\kern3pt \vbox\bgroup \kern3pt \hsize=\cartinner \baselineskip=\normbskip \lineskip=\normlskip \parskip=\normpskip \vskip -\parskip \comment % For explanation, see the end of def\group. } \def\Ecartouche{% \ifhmode\par\fi \kern3pt \egroup \kern3pt\vrule \hskip\rskip \egroup \cartbot \egroup \checkinserts } % This macro is called at the beginning of all the @example variants, % inside a group. \newdimen\nonfillparindent \def\nonfillstart{% \aboveenvbreak \hfuzz = 12pt % Don't be fussy \sepspaces % Make spaces be word-separators rather than space tokens. \let\par = \lisppar % don't ignore blank lines \obeylines % each line of input is a line of output \parskip = 0pt % Turn off paragraph indentation but redefine \indent to emulate % the normal \indent. \nonfillparindent=\parindent \parindent = 0pt \let\indent\nonfillindent % \emergencystretch = 0pt % don't try to avoid overfull boxes \ifx\nonarrowing\relax \advance \leftskip by \lispnarrowing \exdentamount=\lispnarrowing \else \let\nonarrowing = \relax \fi \let\exdent=\nofillexdent } \begingroup \obeyspaces % We want to swallow spaces (but not other tokens) after the fake % @indent in our nonfill-environments, where spaces are normally % active and set to @tie, resulting in them not being ignored after % @indent. \gdef\nonfillindent{\futurelet\temp\nonfillindentcheck}% \gdef\nonfillindentcheck{% \ifx\temp % \expandafter\nonfillindentgobble% \else% \leavevmode\nonfillindentbox% \fi% }% \endgroup \def\nonfillindentgobble#1{\nonfillindent} \def\nonfillindentbox{\hbox to \nonfillparindent{\hss}} % If you want all examples etc. small: @set dispenvsize small. % If you want even small examples the full size: @set dispenvsize nosmall. % This affects the following displayed environments: % @example, @display, @format, @lisp % \def\smallword{small} \def\nosmallword{nosmall} \let\SETdispenvsize\relax \def\setnormaldispenv{% \ifx\SETdispenvsize\smallword % end paragraph for sake of leading, in case document has no blank % line. This is redundant with what happens in \aboveenvbreak, but % we need to do it before changing the fonts, and it's inconvenient % to change the fonts afterward. \ifnum \lastpenalty=10000 \else \endgraf \fi \smallexamplefonts \rm \fi } \def\setsmalldispenv{% \ifx\SETdispenvsize\nosmallword \else \ifnum \lastpenalty=10000 \else \endgraf \fi \smallexamplefonts \rm \fi } % We often define two environments, @foo and @smallfoo. % Let's do it in one command. #1 is the env name, #2 the definition. \def\makedispenvdef#1#2{% \expandafter\envdef\csname#1\endcsname {\setnormaldispenv #2}% \expandafter\envdef\csname small#1\endcsname {\setsmalldispenv #2}% \expandafter\let\csname E#1\endcsname \afterenvbreak \expandafter\let\csname Esmall#1\endcsname \afterenvbreak } % Define two environment synonyms (#1 and #2) for an environment. \def\maketwodispenvdef#1#2#3{% \makedispenvdef{#1}{#3}% \makedispenvdef{#2}{#3}% } % % @lisp: indented, narrowed, typewriter font; % @example: same as @lisp. % % @smallexample and @smalllisp: use smaller fonts. % Originally contributed by Pavel@xerox. % \maketwodispenvdef{lisp}{example}{% \nonfillstart \tt\setupmarkupstyle{example}% \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special. \gobble % eat return } % @display/@smalldisplay: same as @lisp except keep current font. % \makedispenvdef{display}{% \nonfillstart \gobble } % @format/@smallformat: same as @display except don't narrow margins. % \makedispenvdef{format}{% \let\nonarrowing = t% \nonfillstart \gobble } % @flushleft: same as @format, but doesn't obey \SETdispenvsize. \envdef\flushleft{% \let\nonarrowing = t% \nonfillstart \gobble } \let\Eflushleft = \afterenvbreak % @flushright. % \envdef\flushright{% \let\nonarrowing = t% \nonfillstart \advance\leftskip by 0pt plus 1fill\relax \gobble } \let\Eflushright = \afterenvbreak % @raggedright does more-or-less normal line breaking but no right % justification. From plain.tex. \envdef\raggedright{% \rightskip0pt plus2em \spaceskip.3333em \xspaceskip.5em\relax } \let\Eraggedright\par \envdef\raggedleft{% \parindent=0pt \leftskip0pt plus2em \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt \hbadness=10000 % Last line will usually be underfull, so turn off % badness reporting. } \let\Eraggedleft\par \envdef\raggedcenter{% \parindent=0pt \rightskip0pt plus1em \leftskip0pt plus1em \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt \hbadness=10000 % Last line will usually be underfull, so turn off % badness reporting. } \let\Eraggedcenter\par % @quotation does normal linebreaking (hence we can't use \nonfillstart) % and narrows the margins. We keep \parskip nonzero in general, since % we're doing normal filling. So, when using \aboveenvbreak and % \afterenvbreak, temporarily make \parskip 0. % \makedispenvdef{quotation}{\quotationstart} % \def\quotationstart{% \indentedblockstart % same as \indentedblock, but increase right margin too. \ifx\nonarrowing\relax \advance\rightskip by \lispnarrowing \fi \parsearg\quotationlabel } % We have retained a nonzero parskip for the environment, since we're % doing normal filling. % \def\Equotation{% \par \ifx\quotationauthor\thisisundefined\else % indent a bit. \leftline{\kern 2\leftskip \sl ---\quotationauthor}% \fi {\parskip=0pt \afterenvbreak}% } \def\Esmallquotation{\Equotation} % If we're given an argument, typeset it in bold with a colon after. \def\quotationlabel#1{% \def\temp{#1}% \ifx\temp\empty \else {\bf #1: }% \fi } % @indentedblock is like @quotation, but indents only on the left and % has no optional argument. % \makedispenvdef{indentedblock}{\indentedblockstart} % \def\indentedblockstart{% {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip \parindent=0pt % % @cartouche defines \nonarrowing to inhibit narrowing at next level down. \ifx\nonarrowing\relax \advance\leftskip by \lispnarrowing \exdentamount = \lispnarrowing \else \let\nonarrowing = \relax \fi } % Keep a nonzero parskip for the environment, since we're doing normal filling. % \def\Eindentedblock{% \par {\parskip=0pt \afterenvbreak}% } \def\Esmallindentedblock{\Eindentedblock} % LaTeX-like @verbatim...@end verbatim and @verb{<char>...<char>} % If we want to allow any <char> as delimiter, % we need the curly braces so that makeinfo sees the @verb command, eg: % `@verbx...x' would look like the '@verbx' command. --janneke@gnu.org % % [Knuth]: Donald Ervin Knuth, 1996. The TeXbook. % % [Knuth] p.344; only we need to do the other characters Texinfo sets % active too. Otherwise, they get lost as the first character on a % verbatim line. \def\dospecials{% \do\ \do\\\do\{\do\}\do\$\do\&% \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~% \do\<\do\>\do\|\do\@\do+\do\"% % Don't do the quotes -- if we do, @set txicodequoteundirected and % @set txicodequotebacktick will not have effect on @verb and % @verbatim, and ?` and !` ligatures won't get disabled. %\do\`\do\'% } % % [Knuth] p. 380 \def\uncatcodespecials{% \def\do##1{\catcode`##1=\other}\dospecials} % % Setup for the @verb command. % % Eight spaces for a tab \begingroup \catcode`\^^I=\active \gdef\tabeightspaces{\catcode`\^^I=\active\def^^I{\ \ \ \ \ \ \ \ }} \endgroup % \def\setupverb{% \tt % easiest (and conventionally used) font for verbatim \def\par{\leavevmode\endgraf}% \setupmarkupstyle{verb}% \tabeightspaces % Respect line breaks, % print special symbols as themselves, and % make each space count % must do in this order: \obeylines \uncatcodespecials \sepspaces } % Setup for the @verbatim environment % % Real tab expansion. \newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount % % We typeset each line of the verbatim in an \hbox, so we can handle % tabs. The \global is in case the verbatim line starts with an accent, % or some other command that starts with a begin-group. Otherwise, the % entire \verbbox would disappear at the corresponding end-group, before % it is typeset. Meanwhile, we can't have nested verbatim commands % (can we?), so the \global won't be overwriting itself. \newbox\verbbox \def\starttabbox{\global\setbox\verbbox=\hbox\bgroup} % \begingroup \catcode`\^^I=\active \gdef\tabexpand{% \catcode`\^^I=\active \def^^I{\leavevmode\egroup \dimen\verbbox=\wd\verbbox % the width so far, or since the previous tab \divide\dimen\verbbox by\tabw \multiply\dimen\verbbox by\tabw % compute previous multiple of \tabw \advance\dimen\verbbox by\tabw % advance to next multiple of \tabw \wd\verbbox=\dimen\verbbox \box\verbbox \starttabbox }% } \endgroup % start the verbatim environment. \def\setupverbatim{% \let\nonarrowing = t% \nonfillstart \tt % easiest (and conventionally used) font for verbatim % The \leavevmode here is for blank lines. Otherwise, we would % never \starttabox and the \egroup would end verbatim mode. \def\par{\leavevmode\egroup\box\verbbox\endgraf}% \tabexpand \setupmarkupstyle{verbatim}% % Respect line breaks, % print special symbols as themselves, and % make each space count. % Must do in this order: \obeylines \uncatcodespecials \sepspaces \everypar{\starttabbox}% } % Do the @verb magic: verbatim text is quoted by unique % delimiter characters. Before first delimiter expect a % right brace, after last delimiter expect closing brace: % % \def\doverb'{'<char>#1<char>'}'{#1} % % [Knuth] p. 382; only eat outer {} \begingroup \catcode`[=1\catcode`]=2\catcode`\{=\other\catcode`\}=\other \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next] \endgroup % \def\verb{\begingroup\setupverb\doverb} % % % Do the @verbatim magic: define the macro \doverbatim so that % the (first) argument ends when '@end verbatim' is reached, ie: % % \def\doverbatim#1@end verbatim{#1} % % For Texinfo it's a lot easier than for LaTeX, % because texinfo's \verbatim doesn't stop at '\end{verbatim}': % we need not redefine '\', '{' and '}'. % % Inspired by LaTeX's verbatim command set [latex.ltx] % \begingroup \catcode`\ =\active \obeylines % % ignore everything up to the first ^^M, that's the newline at the end % of the @verbatim input line itself. Otherwise we get an extra blank % line in the output. \xdef\doverbatim#1^^M#2@end verbatim{#2\noexpand\end\gobble verbatim}% % We really want {...\end verbatim} in the body of the macro, but % without the active space; thus we have to use \xdef and \gobble. \endgroup % \envdef\verbatim{% \setupverbatim\doverbatim } \let\Everbatim = \afterenvbreak % @verbatiminclude FILE - insert text of file in verbatim environment. % \def\verbatiminclude{\parseargusing\filenamecatcodes\doverbatiminclude} % \def\doverbatiminclude#1{% {% \makevalueexpandable \setupverbatim \indexnofonts % Allow `@@' and other weird things in file names. \wlog{texinfo.tex: doing @verbatiminclude of #1^^J}% \input #1 \afterenvbreak }% } % @copying ... @end copying. % Save the text away for @insertcopying later. % % We save the uninterpreted tokens, rather than creating a box. % Saving the text in a box would be much easier, but then all the % typesetting commands (@smallbook, font changes, etc.) have to be done % beforehand -- and a) we want @copying to be done first in the source % file; b) letting users define the frontmatter in as flexible order as % possible is very desirable. % \def\copying{\checkenv{}\begingroup\scanargctxt\docopying} \def\docopying#1@end copying{\endgroup\def\copyingtext{#1}} % \def\insertcopying{% \begingroup \parindent = 0pt % paragraph indentation looks wrong on title page \scanexp\copyingtext \endgroup } \message{defuns,} % @defun etc. \newskip\defbodyindent \defbodyindent=.4in \newskip\defargsindent \defargsindent=50pt \newskip\deflastargmargin \deflastargmargin=18pt \newcount\defunpenalty % Start the processing of @deffn: \def\startdefun{% \ifnum\lastpenalty<10000 \medbreak \defunpenalty=10003 % Will keep this @deffn together with the % following @def command, see below. \else % If there are two @def commands in a row, we'll have a \nobreak, % which is there to keep the function description together with its % header. But if there's nothing but headers, we need to allow a % break somewhere. Check specifically for penalty 10002, inserted % by \printdefunline, instead of 10000, since the sectioning % commands also insert a nobreak penalty, and we don't want to allow % a break between a section heading and a defun. % % As a further refinement, we avoid "club" headers by signalling % with penalty of 10003 after the very first @deffn in the % sequence (see above), and penalty of 10002 after any following % @def command. \ifnum\lastpenalty=10002 \penalty2000 \else \defunpenalty=10002 \fi % % Similarly, after a section heading, do not allow a break. % But do insert the glue. \medskip % preceded by discardable penalty, so not a breakpoint \fi % \parindent=0in \advance\leftskip by \defbodyindent \exdentamount=\defbodyindent } \def\dodefunx#1{% % First, check whether we are in the right environment: \checkenv#1% % % As above, allow line break if we have multiple x headers in a row. % It's not a great place, though. \ifnum\lastpenalty=10002 \penalty3000 \else \defunpenalty=10002 \fi % % And now, it's time to reuse the body of the original defun: \expandafter\gobbledefun#1% } \def\gobbledefun#1\startdefun{} % \printdefunline \deffnheader{text} % \def\printdefunline#1#2{% \begingroup % call \deffnheader: #1#2 \endheader % common ending: \interlinepenalty = 10000 \advance\rightskip by 0pt plus 1fil\relax \endgraf \nobreak\vskip -\parskip \penalty\defunpenalty % signal to \startdefun and \dodefunx % Some of the @defun-type tags do not enable magic parentheses, % rendering the following check redundant. But we don't optimize. \checkparencounts \endgroup } \def\Edefun{\endgraf\medbreak} % \makedefun{deffn} creates \deffn, \deffnx and \Edeffn; % the only thing remaining is to define \deffnheader. % \def\makedefun#1{% \expandafter\let\csname E#1\endcsname = \Edefun \edef\temp{\noexpand\domakedefun \makecsname{#1}\makecsname{#1x}\makecsname{#1header}}% \temp } % \domakedefun \deffn \deffnx \deffnheader % % Define \deffn and \deffnx, without parameters. % \deffnheader has to be defined explicitly. % \def\domakedefun#1#2#3{% \envdef#1{% \startdefun \doingtypefnfalse % distinguish typed functions from all else \parseargusing\activeparens{\printdefunline#3}% }% \def#2{\dodefunx#1}% \def#3% } \newif\ifdoingtypefn % doing typed function? \newif\ifrettypeownline % typeset return type on its own line? % @deftypefnnewline on|off says whether the return type of typed functions % are printed on their own line. This affects @deftypefn, @deftypefun, % @deftypeop, and @deftypemethod. % \parseargdef\deftypefnnewline{% \def\temp{#1}% \ifx\temp\onword \expandafter\let\csname SETtxideftypefnnl\endcsname = \empty \else\ifx\temp\offword \expandafter\let\csname SETtxideftypefnnl\endcsname = \relax \else \errhelp = \EMsimple \errmessage{Unknown @txideftypefnnl value `\temp', must be on|off}% \fi\fi } % Untyped functions: % @deffn category name args \makedefun{deffn}{\deffngeneral{}} % @deffn category class name args \makedefun{defop}#1 {\defopon{#1\ \putwordon}} % \defopon {category on}class name args \def\defopon#1#2 {\deffngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } % \deffngeneral {subind}category name args % \def\deffngeneral#1#2 #3 #4\endheader{% % Remember that \dosubind{fn}{foo}{} is equivalent to \doind{fn}{foo}. \dosubind{fn}{\code{#3}}{#1}% \defname{#2}{}{#3}\magicamp\defunargs{#4\unskip}% } % Typed functions: % @deftypefn category type name args \makedefun{deftypefn}{\deftypefngeneral{}} % @deftypeop category class type name args \makedefun{deftypeop}#1 {\deftypeopon{#1\ \putwordon}} % \deftypeopon {category on}class type name args \def\deftypeopon#1#2 {\deftypefngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } % \deftypefngeneral {subind}category type name args % \def\deftypefngeneral#1#2 #3 #4 #5\endheader{% \dosubind{fn}{\code{#4}}{#1}% \doingtypefntrue \defname{#2}{#3}{#4}\defunargs{#5\unskip}% } % Typed variables: % @deftypevr category type var args \makedefun{deftypevr}{\deftypecvgeneral{}} % @deftypecv category class type var args \makedefun{deftypecv}#1 {\deftypecvof{#1\ \putwordof}} % \deftypecvof {category of}class type var args \def\deftypecvof#1#2 {\deftypecvgeneral{\putwordof\ \code{#2}}{#1\ \code{#2}} } % \deftypecvgeneral {subind}category type var args % \def\deftypecvgeneral#1#2 #3 #4 #5\endheader{% \dosubind{vr}{\code{#4}}{#1}% \defname{#2}{#3}{#4}\defunargs{#5\unskip}% } % Untyped variables: % @defvr category var args \makedefun{defvr}#1 {\deftypevrheader{#1} {} } % @defcv category class var args \makedefun{defcv}#1 {\defcvof{#1\ \putwordof}} % \defcvof {category of}class var args \def\defcvof#1#2 {\deftypecvof{#1}#2 {} } % Types: % @deftp category name args \makedefun{deftp}#1 #2 #3\endheader{% \doind{tp}{\code{#2}}% \defname{#1}{}{#2}\defunargs{#3\unskip}% } % Remaining @defun-like shortcuts: \makedefun{defun}{\deffnheader{\putwordDeffunc} } \makedefun{defmac}{\deffnheader{\putwordDefmac} } \makedefun{defspec}{\deffnheader{\putwordDefspec} } \makedefun{deftypefun}{\deftypefnheader{\putwordDeffunc} } \makedefun{defvar}{\defvrheader{\putwordDefvar} } \makedefun{defopt}{\defvrheader{\putwordDefopt} } \makedefun{deftypevar}{\deftypevrheader{\putwordDefvar} } \makedefun{defmethod}{\defopon\putwordMethodon} \makedefun{deftypemethod}{\deftypeopon\putwordMethodon} \makedefun{defivar}{\defcvof\putwordInstanceVariableof} \makedefun{deftypeivar}{\deftypecvof\putwordInstanceVariableof} % \defname, which formats the name of the @def (not the args). % #1 is the category, such as "Function". % #2 is the return type, if any. % #3 is the function name. % % We are followed by (but not passed) the arguments, if any. % \def\defname#1#2#3{% \par % Get the values of \leftskip and \rightskip as they were outside the @def... \advance\leftskip by -\defbodyindent % % Determine if we are typesetting the return type of a typed function % on a line by itself. \rettypeownlinefalse \ifdoingtypefn % doing a typed function specifically? % then check user option for putting return type on its own line: \expandafter\ifx\csname SETtxideftypefnnl\endcsname\relax \else \rettypeownlinetrue \fi \fi % % How we'll format the category name. Putting it in brackets helps % distinguish it from the body text that may end up on the next line % just below it. \def\temp{#1}% \setbox0=\hbox{\kern\deflastargmargin \ifx\temp\empty\else [\rm\temp]\fi} % % Figure out line sizes for the paragraph shape. We'll always have at % least two. \tempnum = 2 % % The first line needs space for \box0; but if \rightskip is nonzero, % we need only space for the part of \box0 which exceeds it: \dimen0=\hsize \advance\dimen0 by -\wd0 \advance\dimen0 by \rightskip % % If doing a return type on its own line, we'll have another line. \ifrettypeownline \advance\tempnum by 1 \def\maybeshapeline{0in \hsize}% \else \def\maybeshapeline{}% \fi % % The continuations: \dimen2=\hsize \advance\dimen2 by -\defargsindent % % The final paragraph shape: \parshape \tempnum 0in \dimen0 \maybeshapeline \defargsindent \dimen2 % % Put the category name at the right margin. \noindent \hbox to 0pt{% \hfil\box0 \kern-\hsize % \hsize has to be shortened this way: \kern\leftskip % Intentionally do not respect \rightskip, since we need the space. }% % % Allow all lines to be underfull without complaint: \tolerance=10000 \hbadness=10000 \exdentamount=\defbodyindent {% % defun fonts. We use typewriter by default (used to be bold) because: % . we're printing identifiers, they should be in tt in principle. % . in languages with many accents, such as Czech or French, it's % common to leave accents off identifiers. The result looks ok in % tt, but exceedingly strange in rm. % . we don't want -- and --- to be treated as ligatures. % . this still does not fix the ?` and !` ligatures, but so far no % one has made identifiers using them :). \df \tt \def\temp{#2}% text of the return type \ifx\temp\empty\else \tclose{\temp}% typeset the return type \ifrettypeownline % put return type on its own line; prohibit line break following: \hfil\vadjust{\nobreak}\break \else \space % type on same line, so just followed by a space \fi \fi % no return type #3% output function name }% {\rm\enskip}% hskip 0.5 em of \tenrm % \boldbrax % arguments will be output next, if any. } % Print arguments in slanted roman (not ttsl), inconsistently with using % tt for the name. This is because literal text is sometimes needed in % the argument list (groff manual), and ttsl and tt are not very % distinguishable. Prevent hyphenation at `-' chars. % \def\defunargs#1{% % use sl by default (not ttsl), % tt for the names. \df \sl \hyphenchar\font=0 % % On the other hand, if an argument has two dashes (for instance), we % want a way to get ttsl. We used to recommend @var for that, so % leave the code in, but it's strange for @var to lead to typewriter. % Nowadays we recommend @code, since the difference between a ttsl hyphen % and a tt hyphen is pretty tiny. @code also disables ?` !`. \def\var##1{{\setupmarkupstyle{var}\ttslanted{##1}}}% #1% \sl\hyphenchar\font=45 } % We want ()&[] to print specially on the defun line. % \def\activeparens{% \catcode`\(=\active \catcode`\)=\active \catcode`\[=\active \catcode`\]=\active \catcode`\&=\active } % Make control sequences which act like normal parenthesis chars. \let\lparen = ( \let\rparen = ) % Be sure that we always have a definition for `(', etc. For example, % if the fn name has parens in it, \boldbrax will not be in effect yet, % so TeX would otherwise complain about undefined control sequence. { \activeparens \global\let(=\lparen \global\let)=\rparen \global\let[=\lbrack \global\let]=\rbrack \global\let& = \& \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb} \gdef\magicamp{\let&=\amprm} } \newcount\parencount % If we encounter &foo, then turn on ()-hacking afterwards \newif\ifampseen \def\amprm#1 {\ampseentrue{\bf\ }} \def\parenfont{% \ifampseen % At the first level, print parens in roman, % otherwise use the default font. \ifnum \parencount=1 \rm \fi \else % The \sf parens (in \boldbrax) actually are a little bolder than % the contained text. This is especially needed for [ and ] . \sf \fi } \def\infirstlevel#1{% \ifampseen \ifnum\parencount=1 #1% \fi \fi } \def\bfafterword#1 {#1 \bf} \def\opnr{% \global\advance\parencount by 1 {\parenfont(}% \infirstlevel \bfafterword } \def\clnr{% {\parenfont)}% \infirstlevel \sl \global\advance\parencount by -1 } \newcount\brackcount \def\lbrb{% \global\advance\brackcount by 1 {\bf[}% } \def\rbrb{% {\bf]}% \global\advance\brackcount by -1 } \def\checkparencounts{% \ifnum\parencount=0 \else \badparencount \fi \ifnum\brackcount=0 \else \badbrackcount \fi } % these should not use \errmessage; the glibc manual, at least, actually % has such constructs (when documenting function pointers). \def\badparencount{% \message{Warning: unbalanced parentheses in @def...}% \global\parencount=0 } \def\badbrackcount{% \message{Warning: unbalanced square brackets in @def...}% \global\brackcount=0 } \message{macros,} % @macro. % To do this right we need a feature of e-TeX, \scantokens, % which we arrange to emulate with a temporary file in ordinary TeX. \ifx\eTeXversion\thisisundefined \newwrite\macscribble \def\scantokens#1{% \toks0={#1}% \immediate\openout\macscribble=\jobname.tmp \immediate\write\macscribble{\the\toks0}% \immediate\closeout\macscribble \input \jobname.tmp } \fi \def\scanmacro#1{\begingroup \newlinechar`\^^M \let\xeatspaces\eatspaces % % Undo catcode changes of \startcontents and \doprintindex % When called from @insertcopying or (short)caption, we need active % backslash to get it printed correctly. Previously, we had % \catcode`\\=\other instead. We'll see whether a problem appears % with macro expansion. --kasal, 19aug04 \catcode`\@=0 \catcode`\\=\active \escapechar=`\@ % % ... and for \example: \spaceisspace % % The \empty here causes a following catcode 5 newline to be eaten as % part of reading whitespace after a control sequence. It does not % eat a catcode 13 newline. There's no good way to handle the two % cases (untried: maybe e-TeX's \everyeof could help, though plain TeX % would then have different behavior). See the Macro Details node in % the manual for the workaround we recommend for macros and % line-oriented commands. % \scantokens{#1\empty}% \endgroup} \def\scanexp#1{% \edef\temp{\noexpand\scanmacro{#1}}% \temp } \newcount\paramno % Count of parameters \newtoks\macname % Macro name \newif\ifrecursive % Is it recursive? % List of all defined macros in the form % \definedummyword\macro1\definedummyword\macro2... % Currently is also contains all @aliases; the list can be split % if there is a need. \def\macrolist{} % Add the macro to \macrolist \def\addtomacrolist#1{\expandafter \addtomacrolistxxx \csname#1\endcsname} \def\addtomacrolistxxx#1{% \toks0 = \expandafter{\macrolist\definedummyword#1}% \xdef\macrolist{\the\toks0}% } % Utility routines. % This does \let #1 = #2, with \csnames; that is, % \let \csname#1\endcsname = \csname#2\endcsname % (except of course we have to play expansion games). % \def\cslet#1#2{% \expandafter\let \csname#1\expandafter\endcsname \csname#2\endcsname } % Trim leading and trailing spaces off a string. % Concepts from aro-bend problem 15 (see CTAN). {\catcode`\@=11 \gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }} \gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@} \gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @} \def\unbrace#1{#1} \unbrace{\gdef\trim@@@ #1 } #2@{#1} } % Trim a single trailing ^^M off a string. {\catcode`\^^M=\other \catcode`\Q=3% \gdef\eatcr #1{\eatcra #1Q^^MQ}% \gdef\eatcra#1^^MQ{\eatcrb#1Q}% \gdef\eatcrb#1Q#2Q{#1}% } % Macro bodies are absorbed as an argument in a context where % all characters are catcode 10, 11 or 12, except \ which is active % (as in normal texinfo). It is necessary to change the definition of \ % to recognize macro arguments; this is the job of \mbodybackslash. % % Non-ASCII encodings make 8-bit characters active, so un-activate % them to avoid their expansion. Must do this non-globally, to % confine the change to the current group. % % It's necessary to have hard CRs when the macro is executed. This is % done by making ^^M (\endlinechar) catcode 12 when reading the macro % body, and then making it the \newlinechar in \scanmacro. % \def\scanctxt{% used as subroutine \catcode`\"=\other \catcode`\+=\other \catcode`\<=\other \catcode`\>=\other \catcode`\@=\other \catcode`\^=\other \catcode`\_=\other \catcode`\|=\other \catcode`\~=\other \ifx\declaredencoding\ascii \else \setnonasciicharscatcodenonglobal\other \fi } \def\scanargctxt{% used for copying and captions, not macros. \scanctxt \catcode`\\=\other \catcode`\^^M=\other } \def\macrobodyctxt{% used for @macro definitions \scanctxt \catcode`\{=\other \catcode`\}=\other \catcode`\^^M=\other \usembodybackslash } \def\macroargctxt{% used when scanning invocations \scanctxt \catcode`\\=0 } % why catcode 0 for \ in the above? To recognize \\ \{ \} as "escapes" % for the single characters \ { }. Thus, we end up with the "commands" % that would be written @\ @{ @} in a Texinfo document. % % We already have @{ and @}. For @\, we define it here, and only for % this purpose, to produce a typewriter backslash (so, the @\ that we % define for @math can't be used with @macro calls): % \def\\{\normalbackslash}% % % We would like to do this for \, too, since that is what makeinfo does. % But it is not possible, because Texinfo already has a command @, for a % cedilla accent. Documents must use @comma{} instead. % % \anythingelse will almost certainly be an error of some kind. % \mbodybackslash is the definition of \ in @macro bodies. % It maps \foo\ => \csname macarg.foo\endcsname => #N % where N is the macro parameter number. % We define \csname macarg.\endcsname to be \realbackslash, so % \\ in macro replacement text gets you a backslash. % {\catcode`@=0 @catcode`@\=@active @gdef@usembodybackslash{@let\=@mbodybackslash} @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname} } \expandafter\def\csname macarg.\endcsname{\realbackslash} \def\margbackslash#1{\char`\#1 } \def\macro{\recursivefalse\parsearg\macroxxx} \def\rmacro{\recursivetrue\parsearg\macroxxx} \def\macroxxx#1{% \getargs{#1}% now \macname is the macname and \argl the arglist \ifx\argl\empty % no arguments \paramno=0\relax \else \expandafter\parsemargdef \argl;% \if\paramno>256\relax \ifx\eTeXversion\thisisundefined \errhelp = \EMsimple \errmessage{You need eTeX to compile a file with macros with more than 256 arguments} \fi \fi \fi \if1\csname ismacro.\the\macname\endcsname \message{Warning: redefining \the\macname}% \else \expandafter\ifx\csname \the\macname\endcsname \relax \else \errmessage{Macro name \the\macname\space already defined}\fi \global\cslet{macsave.\the\macname}{\the\macname}% \global\expandafter\let\csname ismacro.\the\macname\endcsname=1% \addtomacrolist{\the\macname}% \fi \begingroup \macrobodyctxt \ifrecursive \expandafter\parsermacbody \else \expandafter\parsemacbody \fi} \parseargdef\unmacro{% \if1\csname ismacro.#1\endcsname \global\cslet{#1}{macsave.#1}% \global\expandafter\let \csname ismacro.#1\endcsname=0% % Remove the macro name from \macrolist: \begingroup \expandafter\let\csname#1\endcsname \relax \let\definedummyword\unmacrodo \xdef\macrolist{\macrolist}% \endgroup \else \errmessage{Macro #1 not defined}% \fi } % Called by \do from \dounmacro on each macro. The idea is to omit any % macro definitions that have been changed to \relax. % \def\unmacrodo#1{% \ifx #1\relax % remove this \else \noexpand\definedummyword \noexpand#1% \fi } % This makes use of the obscure feature that if the last token of a % <parameter list> is #, then the preceding argument is delimited by % an opening brace, and that opening brace is not consumed. \def\getargs#1{\getargsxxx#1{}} \def\getargsxxx#1#{\getmacname #1 \relax\getmacargs} \def\getmacname#1 #2\relax{\macname={#1}} \def\getmacargs#1{\def\argl{#1}} % For macro processing make @ a letter so that we can make Texinfo private macro names. \edef\texiatcatcode{\the\catcode`\@} \catcode `@=11\relax % Parse the optional {params} list. Set up \paramno and \paramlist % so \defmacro knows what to do. Define \macarg.BLAH for each BLAH % in the params list to some hook where the argument si to be expanded. If % there are less than 10 arguments that hook is to be replaced by ##N where N % is the position in that list, that is to say the macro arguments are to be % defined `a la TeX in the macro body. % % That gets used by \mbodybackslash (above). % % We need to get `macro parameter char #' into several definitions. % The technique used is stolen from LaTeX: let \hash be something % unexpandable, insert that wherever you need a #, and then redefine % it to # just before using the token list produced. % % The same technique is used to protect \eatspaces till just before % the macro is used. % % If there are 10 or more arguments, a different technique is used, where the % hook remains in the body, and when macro is to be expanded the body is % processed again to replace the arguments. % % In that case, the hook is \the\toks N-1, and we simply set \toks N-1 to the % argument N value and then \edef the body (nothing else will expand because of % the catcode regime underwhich the body was input). % % If you compile with TeX (not eTeX), and you have macros with 10 or more % arguments, you need that no macro has more than 256 arguments, otherwise an % error is produced. \def\parsemargdef#1;{% \paramno=0\def\paramlist{}% \let\hash\relax \let\xeatspaces\relax \parsemargdefxxx#1,;,% % In case that there are 10 or more arguments we parse again the arguments % list to set new definitions for the \macarg.BLAH macros corresponding to % each BLAH argument. It was anyhow needed to parse already once this list % in order to count the arguments, and as macros with at most 9 arguments % are by far more frequent than macro with 10 or more arguments, defining % twice the \macarg.BLAH macros does not cost too much processing power. \ifnum\paramno<10\relax\else \paramno0\relax \parsemmanyargdef@@#1,;,% 10 or more arguments \fi } \def\parsemargdefxxx#1,{% \if#1;\let\next=\relax \else \let\next=\parsemargdefxxx \advance\paramno by 1 \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname {\xeatspaces{\hash\the\paramno}}% \edef\paramlist{\paramlist\hash\the\paramno,}% \fi\next} \def\parsemmanyargdef@@#1,{% \if#1;\let\next=\relax \else \let\next=\parsemmanyargdef@@ \edef\tempb{\eatspaces{#1}}% \expandafter\def\expandafter\tempa \expandafter{\csname macarg.\tempb\endcsname}% % Note that we need some extra \noexpand\noexpand, this is because we % don't want \the to be expanded in the \parsermacbody as it uses an % \xdef . \expandafter\edef\tempa {\noexpand\noexpand\noexpand\the\toks\the\paramno}% \advance\paramno by 1\relax \fi\next} % These two commands read recursive and nonrecursive macro bodies. % (They're different since rec and nonrec macros end differently.) % \catcode `\@\texiatcatcode \long\def\parsemacbody#1@end macro% {\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% \long\def\parsermacbody#1@end rmacro% {\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% \catcode `\@=11\relax \let\endargs@\relax \let\nil@\relax \def\nilm@{\nil@}% \long\def\nillm@{\nil@}% % This macro is expanded during the Texinfo macro expansion, not during its % definition. It gets all the arguments values and assigns them to macros % macarg.ARGNAME % % #1 is the macro name % #2 is the list of argument names % #3 is the list of argument values \def\getargvals@#1#2#3{% \def\macargdeflist@{}% \def\saveparamlist@{#2}% Need to keep a copy for parameter expansion. \def\paramlist{#2,\nil@}% \def\macroname{#1}% \begingroup \macroargctxt \def\argvaluelist{#3,\nil@}% \def\@tempa{#3}% \ifx\@tempa\empty \setemptyargvalues@ \else \getargvals@@ \fi } % \def\getargvals@@{% \ifx\paramlist\nilm@ % Some sanity check needed here that \argvaluelist is also empty. \ifx\argvaluelist\nillm@ \else \errhelp = \EMsimple \errmessage{Too many arguments in macro `\macroname'!}% \fi \let\next\macargexpandinbody@ \else \ifx\argvaluelist\nillm@ % No more arguments values passed to macro. Set remaining named-arg % macros to empty. \let\next\setemptyargvalues@ \else % pop current arg name into \@tempb \def\@tempa##1{\pop@{\@tempb}{\paramlist}##1\endargs@}% \expandafter\@tempa\expandafter{\paramlist}% % pop current argument value into \@tempc \def\@tempa##1{\longpop@{\@tempc}{\argvaluelist}##1\endargs@}% \expandafter\@tempa\expandafter{\argvaluelist}% % Here \@tempb is the current arg name and \@tempc is the current arg value. % First place the new argument macro definition into \@tempd \expandafter\macname\expandafter{\@tempc}% \expandafter\let\csname macarg.\@tempb\endcsname\relax \expandafter\def\expandafter\@tempe\expandafter{% \csname macarg.\@tempb\endcsname}% \edef\@tempd{\long\def\@tempe{\the\macname}}% \push@\@tempd\macargdeflist@ \let\next\getargvals@@ \fi \fi \next } \def\push@#1#2{% \expandafter\expandafter\expandafter\def \expandafter\expandafter\expandafter#2% \expandafter\expandafter\expandafter{% \expandafter#1#2}% } % Replace arguments by their values in the macro body, and place the result % in macro \@tempa \def\macvalstoargs@{% % To do this we use the property that token registers that are \the'ed % within an \edef expand only once. So we are going to place all argument % values into respective token registers. % % First we save the token context, and initialize argument numbering. \begingroup \paramno0\relax % Then, for each argument number #N, we place the corresponding argument % value into a new token list register \toks#N \expandafter\putargsintokens@\saveparamlist@,;,% % Then, we expand the body so that argument are replaced by their % values. The trick for values not to be expanded themselves is that they % are within tokens and that tokens expand only once in an \edef . \edef\@tempc{\csname mac.\macroname .body\endcsname}% % Now we restore the token stack pointer to free the token list registers % which we have used, but we make sure that expanded body is saved after % group. \expandafter \endgroup \expandafter\def\expandafter\@tempa\expandafter{\@tempc}% } \def\macargexpandinbody@{% %% Define the named-macro outside of this group and then close this group. \expandafter \endgroup \macargdeflist@ % First the replace in body the macro arguments by their values, the result % is in \@tempa . \macvalstoargs@ % Then we point at the \norecurse or \gobble (for recursive) macro value % with \@tempb . \expandafter\let\expandafter\@tempb\csname mac.\macroname .recurse\endcsname % Depending on whether it is recursive or not, we need some tailing % \egroup . \ifx\@tempb\gobble \let\@tempc\relax \else \let\@tempc\egroup \fi % And now we do the real job: \edef\@tempd{\noexpand\@tempb{\macroname}\noexpand\scanmacro{\@tempa}\@tempc}% \@tempd } \def\putargsintokens@#1,{% \if#1;\let\next\relax \else \let\next\putargsintokens@ % First we allocate the new token list register, and give it a temporary % alias \@tempb . \toksdef\@tempb\the\paramno % Then we place the argument value into that token list register. \expandafter\let\expandafter\@tempa\csname macarg.#1\endcsname \expandafter\@tempb\expandafter{\@tempa}% \advance\paramno by 1\relax \fi \next } % Save the token stack pointer into macro #1 \def\texisavetoksstackpoint#1{\edef#1{\the\@cclvi}} % Restore the token stack pointer from number in macro #1 \def\texirestoretoksstackpoint#1{\expandafter\mathchardef\expandafter\@cclvi#1\relax} % newtoks that can be used non \outer . \def\texinonouternewtoks{\alloc@ 5\toks \toksdef \@cclvi} % Tailing missing arguments are set to empty \def\setemptyargvalues@{% \ifx\paramlist\nilm@ \let\next\macargexpandinbody@ \else \expandafter\setemptyargvaluesparser@\paramlist\endargs@ \let\next\setemptyargvalues@ \fi \next } \def\setemptyargvaluesparser@#1,#2\endargs@{% \expandafter\def\expandafter\@tempa\expandafter{% \expandafter\def\csname macarg.#1\endcsname{}}% \push@\@tempa\macargdeflist@ \def\paramlist{#2}% } % #1 is the element target macro % #2 is the list macro % #3,#4\endargs@ is the list value \def\pop@#1#2#3,#4\endargs@{% \def#1{#3}% \def#2{#4}% } \long\def\longpop@#1#2#3,#4\endargs@{% \long\def#1{#3}% \long\def#2{#4}% } % This defines a Texinfo @macro. There are eight cases: recursive and % nonrecursive macros of zero, one, up to nine, and many arguments. % Much magic with \expandafter here. % \xdef is used so that macro definitions will survive the file % they're defined in; @include reads the file inside a group. % \def\defmacro{% \let\hash=##% convert placeholders to macro parameter chars \ifrecursive \ifcase\paramno % 0 \expandafter\xdef\csname\the\macname\endcsname{% \noexpand\scanmacro{\temp}}% \or % 1 \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \noexpand\braceorline \expandafter\noexpand\csname\the\macname xxx\endcsname}% \expandafter\xdef\csname\the\macname xxx\endcsname##1{% \egroup\noexpand\scanmacro{\temp}}% \else \ifnum\paramno<10\relax % at most 9 \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \noexpand\csname\the\macname xx\endcsname}% \expandafter\xdef\csname\the\macname xx\endcsname##1{% \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% \expandafter\expandafter \expandafter\xdef \expandafter\expandafter \csname\the\macname xxx\endcsname \paramlist{\egroup\noexpand\scanmacro{\temp}}% \else % 10 or more \expandafter\xdef\csname\the\macname\endcsname{% \noexpand\getargvals@{\the\macname}{\argl}% }% \global\expandafter\let\csname mac.\the\macname .body\endcsname\temp \global\expandafter\let\csname mac.\the\macname .recurse\endcsname\gobble \fi \fi \else \ifcase\paramno % 0 \expandafter\xdef\csname\the\macname\endcsname{% \noexpand\norecurse{\the\macname}% \noexpand\scanmacro{\temp}\egroup}% \or % 1 \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \noexpand\braceorline \expandafter\noexpand\csname\the\macname xxx\endcsname}% \expandafter\xdef\csname\the\macname xxx\endcsname##1{% \egroup \noexpand\norecurse{\the\macname}% \noexpand\scanmacro{\temp}\egroup}% \else % at most 9 \ifnum\paramno<10\relax \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \expandafter\noexpand\csname\the\macname xx\endcsname}% \expandafter\xdef\csname\the\macname xx\endcsname##1{% \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% \expandafter\expandafter \expandafter\xdef \expandafter\expandafter \csname\the\macname xxx\endcsname \paramlist{% \egroup \noexpand\norecurse{\the\macname}% \noexpand\scanmacro{\temp}\egroup}% \else % 10 or more: \expandafter\xdef\csname\the\macname\endcsname{% \noexpand\getargvals@{\the\macname}{\argl}% }% \global\expandafter\let\csname mac.\the\macname .body\endcsname\temp \global\expandafter\let\csname mac.\the\macname .recurse\endcsname\norecurse \fi \fi \fi} \catcode `\@\texiatcatcode\relax \def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}} % \braceorline decides whether the next nonwhitespace character is a % {. If so it reads up to the closing }, if not, it reads the whole % line. Whatever was read is then fed to the next control sequence % as an argument (by \parsebrace or \parsearg). % \def\braceorline#1{\let\macnamexxx=#1\futurelet\nchar\braceorlinexxx} \def\braceorlinexxx{% \ifx\nchar\bgroup\else \expandafter\parsearg \fi \macnamexxx} % @alias. % We need some trickery to remove the optional spaces around the equal % sign. Make them active and then expand them all to nothing. % \def\alias{\parseargusing\obeyspaces\aliasxxx} \def\aliasxxx #1{\aliasyyy#1\relax} \def\aliasyyy #1=#2\relax{% {% \expandafter\let\obeyedspace=\empty \addtomacrolist{#1}% \xdef\next{\global\let\makecsname{#1}=\makecsname{#2}}% }% \next } \message{cross references,} \newwrite\auxfile \newif\ifhavexrefs % True if xref values are known. \newif\ifwarnedxrefs % True if we warned once that they aren't known. % @inforef is relatively simple. \def\inforef #1{\inforefzzz #1,,,,**} \def\inforefzzz #1,#2,#3,#4**{% \putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}}, node \samp{\ignorespaces#1{}}} % @node's only job in TeX is to define \lastnode, which is used in % cross-references. The @node line might or might not have commas, and % might or might not have spaces before the first comma, like: % @node foo , bar , ... % We don't want such trailing spaces in the node name. % \parseargdef\node{\checkenv{}\donode #1 ,\finishnodeparse} % % also remove a trailing comma, in case of something like this: % @node Help-Cross, , , Cross-refs \def\donode#1 ,#2\finishnodeparse{\dodonode #1,\finishnodeparse} \def\dodonode#1,#2\finishnodeparse{\gdef\lastnode{#1}} \let\nwnode=\node \let\lastnode=\empty % Write a cross-reference definition for the current node. #1 is the % type (Ynumbered, Yappendix, Ynothing). % \def\donoderef#1{% \ifx\lastnode\empty\else \setref{\lastnode}{#1}% \global\let\lastnode=\empty \fi } % @anchor{NAME} -- define xref target at arbitrary point. % \newcount\savesfregister % \def\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi} \def\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi} \def\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces} % \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an % anchor), which consists of three parts: % 1) NAME-title - the current sectioning name taken from \lastsection, % or the anchor name. % 2) NAME-snt - section number and type, passed as the SNT arg, or % empty for anchors. % 3) NAME-pg - the page number. % % This is called from \donoderef, \anchor, and \dofloat. In the case of % floats, there is an additional part, which is not written here: % 4) NAME-lof - the text as it should appear in a @listoffloats. % \def\setref#1#2{% \pdfmkdest{#1}% \iflinks {% \atdummies % preserve commands, but don't expand them \edef\writexrdef##1##2{% \write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef ##1}{##2}}% these are parameters of \writexrdef }% \toks0 = \expandafter{\lastsection}% \immediate \writexrdef{title}{\the\toks0 }% \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc. \safewhatsit{\writexrdef{pg}{\folio}}% will be written later, at \shipout }% \fi } % @xrefautosectiontitle on|off says whether @section(ing) names are used % automatically in xrefs, if the third arg is not explicitly specified. % This was provided as a "secret" @set xref-automatic-section-title % variable, now it's official. % \parseargdef\xrefautomaticsectiontitle{% \def\temp{#1}% \ifx\temp\onword \expandafter\let\csname SETxref-automatic-section-title\endcsname = \empty \else\ifx\temp\offword \expandafter\let\csname SETxref-automatic-section-title\endcsname = \relax \else \errhelp = \EMsimple \errmessage{Unknown @xrefautomaticsectiontitle value `\temp', must be on|off}% \fi\fi } % % @xref, @pxref, and @ref generate cross-references. For \xrefX, #1 is % the node name, #2 the name of the Info cross-reference, #3 the printed % node name, #4 the name of the Info file, #5 the name of the printed % manual. All but the node name can be omitted. % \def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]} \def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]} \def\ref#1{\xrefX[#1,,,,,,,]} % \newbox\toprefbox \newbox\printedrefnamebox \newbox\infofilenamebox \newbox\printedmanualbox % \def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup \unsepspaces % % Get args without leading/trailing spaces. \def\printedrefname{\ignorespaces #3}% \setbox\printedrefnamebox = \hbox{\printedrefname\unskip}% % \def\infofilename{\ignorespaces #4}% \setbox\infofilenamebox = \hbox{\infofilename\unskip}% % \def\printedmanual{\ignorespaces #5}% \setbox\printedmanualbox = \hbox{\printedmanual\unskip}% % % If the printed reference name (arg #3) was not explicitly given in % the @xref, figure out what we want to use. \ifdim \wd\printedrefnamebox = 0pt % No printed node name was explicitly given. \expandafter\ifx\csname SETxref-automatic-section-title\endcsname \relax % Not auto section-title: use node name inside the square brackets. \def\printedrefname{\ignorespaces #1}% \else % Auto section-title: use chapter/section title inside % the square brackets if we have it. \ifdim \wd\printedmanualbox > 0pt % It is in another manual, so we don't have it; use node name. \def\printedrefname{\ignorespaces #1}% \else \ifhavexrefs % We (should) know the real title if we have the xref values. \def\printedrefname{\refx{#1-title}{}}% \else % Otherwise just copy the Info node name. \def\printedrefname{\ignorespaces #1}% \fi% \fi \fi \fi % % Make link in pdf output. \ifpdf {\indexnofonts \turnoffactive \makevalueexpandable % This expands tokens, so do it after making catcode changes, so _ % etc. don't get their TeX definitions. This ignores all spaces in % #4, including (wrongly) those in the middle of the filename. \getfilename{#4}% % % This (wrongly) does not take account of leading or trailing % spaces in #1, which should be ignored. \edef\pdfxrefdest{#1}% \ifx\pdfxrefdest\empty \def\pdfxrefdest{Top}% no empty targets \else \txiescapepdf\pdfxrefdest % escape PDF special chars \fi % \leavevmode \startlink attr{/Border [0 0 0]}% \ifnum\filenamelength>0 goto file{\the\filename.pdf} name{\pdfxrefdest}% \else goto name{\pdfmkpgn{\pdfxrefdest}}% \fi }% \setcolor{\linkcolor}% \fi % % Float references are printed completely differently: "Figure 1.2" % instead of "[somenode], p.3". We distinguish them by the % LABEL-title being set to a magic string. {% % Have to otherify everything special to allow the \csname to % include an _ in the xref name, etc. \indexnofonts \turnoffactive \expandafter\global\expandafter\let\expandafter\Xthisreftitle \csname XR#1-title\endcsname }% \iffloat\Xthisreftitle % If the user specified the print name (third arg) to the ref, % print it instead of our usual "Figure 1.2". \ifdim\wd\printedrefnamebox = 0pt \refx{#1-snt}{}% \else \printedrefname \fi % % If the user also gave the printed manual name (fifth arg), append % "in MANUALNAME". \ifdim \wd\printedmanualbox > 0pt \space \putwordin{} \cite{\printedmanual}% \fi \else % node/anchor (non-float) references. % % If we use \unhbox to print the node names, TeX does not insert % empty discretionaries after hyphens, which means that it will not % find a line break at a hyphen in a node names. Since some manuals % are best written with fairly long node names, containing hyphens, % this is a loss. Therefore, we give the text of the node name % again, so it is as if TeX is seeing it for the first time. % \ifdim \wd\printedmanualbox > 0pt % Cross-manual reference with a printed manual name. % \crossmanualxref{\cite{\printedmanual\unskip}}% % \else\ifdim \wd\infofilenamebox > 0pt % Cross-manual reference with only an info filename (arg 4), no % printed manual name (arg 5). This is essentially the same as % the case above; we output the filename, since we have nothing else. % \crossmanualxref{\code{\infofilename\unskip}}% % \else % Reference within this manual. % % _ (for example) has to be the character _ for the purposes of the % control sequence corresponding to the node, but it has to expand % into the usual \leavevmode...\vrule stuff for purposes of % printing. So we \turnoffactive for the \refx-snt, back on for the % printing, back off for the \refx-pg. {\turnoffactive % Only output a following space if the -snt ref is nonempty; for % @unnumbered and @anchor, it won't be. \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}% \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi }% % output the `[mynode]' via the macro below so it can be overridden. \xrefprintnodename\printedrefname % % But we always want a comma and a space: ,\space % % output the `page 3'. \turnoffactive \putwordpage\tie\refx{#1-pg}{}% \fi\fi \fi \endlink \endgroup} % Output a cross-manual xref to #1. Used just above (twice). % % Only include the text "Section ``foo'' in" if the foo is neither % missing or Top. Thus, @xref{,,,foo,The Foo Manual} outputs simply % "see The Foo Manual", the idea being to refer to the whole manual. % % But, this being TeX, we can't easily compare our node name against the % string "Top" while ignoring the possible spaces before and after in % the input. By adding the arbitrary 7sp below, we make it much less % likely that a real node name would have the same width as "Top" (e.g., % in a monospaced font). Hopefully it will never happen in practice. % % For the same basic reason, we retypeset the "Top" at every % reference, since the current font is indeterminate. % \def\crossmanualxref#1{% \setbox\toprefbox = \hbox{Top\kern7sp}% \setbox2 = \hbox{\ignorespaces \printedrefname \unskip \kern7sp}% \ifdim \wd2 > 7sp % nonempty? \ifdim \wd2 = \wd\toprefbox \else % same as Top? \putwordSection{} ``\printedrefname'' \putwordin{}\space \fi \fi #1% } % This macro is called from \xrefX for the `[nodename]' part of xref % output. It's a separate macro only so it can be changed more easily, % since square brackets don't work well in some documents. Particularly % one that Bob is working on :). % \def\xrefprintnodename#1{[#1]} % Things referred to by \setref. % \def\Ynothing{} \def\Yomitfromtoc{} \def\Ynumbered{% \ifnum\secno=0 \putwordChapter@tie \the\chapno \else \ifnum\subsecno=0 \putwordSection@tie \the\chapno.\the\secno \else \ifnum\subsubsecno=0 \putwordSection@tie \the\chapno.\the\secno.\the\subsecno \else \putwordSection@tie \the\chapno.\the\secno.\the\subsecno.\the\subsubsecno \fi\fi\fi } \def\Yappendix{% \ifnum\secno=0 \putwordAppendix@tie @char\the\appendixno{}% \else \ifnum\subsecno=0 \putwordSection@tie @char\the\appendixno.\the\secno \else \ifnum\subsubsecno=0 \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno \else \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno \fi\fi\fi } % Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME. % If its value is nonempty, SUFFIX is output afterward. % \def\refx#1#2{% {% \indexnofonts \otherbackslash \expandafter\global\expandafter\let\expandafter\thisrefX \csname XR#1\endcsname }% \ifx\thisrefX\relax % If not defined, say something at least. \angleleft un\-de\-fined\angleright \iflinks \ifhavexrefs {\toks0 = {#1}% avoid expansion of possibly-complex value \message{\linenumber Undefined cross reference `\the\toks0'.}}% \else \ifwarnedxrefs\else \global\warnedxrefstrue \message{Cross reference values unknown; you must run TeX again.}% \fi \fi \fi \else % It's defined, so just use it. \thisrefX \fi #2% Output the suffix in any case. } % This is the macro invoked by entries in the aux file. Usually it's % just a \def (we prepend XR to the control sequence name to avoid % collisions). But if this is a float type, we have more work to do. % \def\xrdef#1#2{% {% The node name might contain 8-bit characters, which in our current % implementation are changed to commands like @'e. Don't let these % mess up the control sequence name. \indexnofonts \turnoffactive \xdef\safexrefname{#1}% }% % \expandafter\gdef\csname XR\safexrefname\endcsname{#2}% remember this xref % % Was that xref control sequence that we just defined for a float? \expandafter\iffloat\csname XR\safexrefname\endcsname % it was a float, and we have the (safe) float type in \iffloattype. \expandafter\let\expandafter\floatlist \csname floatlist\iffloattype\endcsname % % Is this the first time we've seen this float type? \expandafter\ifx\floatlist\relax \toks0 = {\do}% yes, so just \do \else % had it before, so preserve previous elements in list. \toks0 = \expandafter{\floatlist\do}% \fi % % Remember this xref in the control sequence \floatlistFLOATTYPE, % for later use in \listoffloats. \expandafter\xdef\csname floatlist\iffloattype\endcsname{\the\toks0 {\safexrefname}}% \fi } % Read the last existing aux file, if any. No error if none exists. % \def\tryauxfile{% \openin 1 \jobname.aux \ifeof 1 \else \readdatafile{aux}% \global\havexrefstrue \fi \closein 1 } \def\setupdatafile{% \catcode`\^^@=\other \catcode`\^^A=\other \catcode`\^^B=\other \catcode`\^^C=\other \catcode`\^^D=\other \catcode`\^^E=\other \catcode`\^^F=\other \catcode`\^^G=\other \catcode`\^^H=\other \catcode`\^^K=\other \catcode`\^^L=\other \catcode`\^^N=\other \catcode`\^^P=\other \catcode`\^^Q=\other \catcode`\^^R=\other \catcode`\^^S=\other \catcode`\^^T=\other \catcode`\^^U=\other \catcode`\^^V=\other \catcode`\^^W=\other \catcode`\^^X=\other \catcode`\^^Z=\other \catcode`\^^[=\other \catcode`\^^\=\other \catcode`\^^]=\other \catcode`\^^^=\other \catcode`\^^_=\other % It was suggested to set the catcode of ^ to 7, which would allow ^^e4 etc. % in xref tags, i.e., node names. But since ^^e4 notation isn't % supported in the main text, it doesn't seem desirable. Furthermore, % that is not enough: for node names that actually contain a ^ % character, we would end up writing a line like this: 'xrdef {'hat % b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first % argument, and \hat is not an expandable control sequence. It could % all be worked out, but why? Either we support ^^ or we don't. % % The other change necessary for this was to define \auxhat: % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter % and then to call \auxhat in \setq. % \catcode`\^=\other % % Special characters. Should be turned off anyway, but... \catcode`\~=\other \catcode`\[=\other \catcode`\]=\other \catcode`\"=\other \catcode`\_=\other \catcode`\|=\other \catcode`\<=\other \catcode`\>=\other \catcode`\$=\other \catcode`\#=\other \catcode`\&=\other \catcode`\%=\other \catcode`+=\other % avoid \+ for paranoia even though we've turned it off % % This is to support \ in node names and titles, since the \ % characters end up in a \csname. It's easier than % leaving it active and making its active definition an actual \ % character. What I don't understand is why it works in the *value* % of the xrdef. Seems like it should be a catcode12 \, and that % should not typeset properly. But it works, so I'm moving on for % now. --karl, 15jan04. \catcode`\\=\other % % Make the characters 128-255 be printing characters. {% \count1=128 \def\loop{% \catcode\count1=\other \advance\count1 by 1 \ifnum \count1<256 \loop \fi }% }% % % @ is our escape character in .aux files, and we need braces. \catcode`\{=1 \catcode`\}=2 \catcode`\@=0 } \def\readdatafile#1{% \begingroup \setupdatafile \input\jobname.#1 \endgroup} \message{insertions,} % including footnotes. \newcount \footnoteno % The trailing space in the following definition for supereject is % vital for proper filling; pages come out unaligned when you do a % pagealignmacro call if that space before the closing brace is % removed. (Generally, numeric constants should always be followed by a % space to prevent strange expansion errors.) \def\supereject{\par\penalty -20000\footnoteno =0 } % @footnotestyle is meaningful for Info output only. \let\footnotestyle=\comment {\catcode `\@=11 % % Auto-number footnotes. Otherwise like plain. \gdef\footnote{% \let\indent=\ptexindent \let\noindent=\ptexnoindent \global\advance\footnoteno by \@ne \edef\thisfootno{$^{\the\footnoteno}$}% % % In case the footnote comes at the end of a sentence, preserve the % extra spacing after we do the footnote number. \let\@sf\empty \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\ptexslash\fi % % Remove inadvertent blank space before typesetting the footnote number. \unskip \thisfootno\@sf \dofootnote }% % Don't bother with the trickery in plain.tex to not require the % footnote text as a parameter. Our footnotes don't need to be so general. % % Oh yes, they do; otherwise, @ifset (and anything else that uses % \parseargline) fails inside footnotes because the tokens are fixed when % the footnote is read. --karl, 16nov96. % \gdef\dofootnote{% \insert\footins\bgroup % We want to typeset this text as a normal paragraph, even if the % footnote reference occurs in (for example) a display environment. % So reset some parameters. \hsize=\pagewidth \interlinepenalty\interfootnotelinepenalty \splittopskip\ht\strutbox % top baseline for broken footnotes \splitmaxdepth\dp\strutbox \floatingpenalty\@MM \leftskip\z@skip \rightskip\z@skip \spaceskip\z@skip \xspaceskip\z@skip \parindent\defaultparindent % \smallfonts \rm % % Because we use hanging indentation in footnotes, a @noindent appears % to exdent this text, so make it be a no-op. makeinfo does not use % hanging indentation so @noindent can still be needed within footnote % text after an @example or the like (not that this is good style). \let\noindent = \relax % % Hang the footnote text off the number. Use \everypar in case the % footnote extends for more than one paragraph. \everypar = {\hang}% \textindent{\thisfootno}% % % Don't crash into the line above the footnote text. Since this % expands into a box, it must come within the paragraph, lest it % provide a place where TeX can split the footnote. \footstrut % % Invoke rest of plain TeX footnote routine. \futurelet\next\fo@t } }%end \catcode `\@=11 % In case a @footnote appears in a vbox, save the footnote text and create % the real \insert just after the vbox finished. Otherwise, the insertion % would be lost. % Similarly, if a @footnote appears inside an alignment, save the footnote % text to a box and make the \insert when a row of the table is finished. % And the same can be done for other insert classes. --kasal, 16nov03. % Replace the \insert primitive by a cheating macro. % Deeper inside, just make sure that the saved insertions are not spilled % out prematurely. % \def\startsavinginserts{% \ifx \insert\ptexinsert \let\insert\saveinsert \else \let\checkinserts\relax \fi } % This \insert replacement works for both \insert\footins{foo} and % \insert\footins\bgroup foo\egroup, but it doesn't work for \insert27{foo}. % \def\saveinsert#1{% \edef\next{\noexpand\savetobox \makeSAVEname#1}% \afterassignment\next % swallow the left brace \let\temp = } \def\makeSAVEname#1{\makecsname{SAVE\expandafter\gobble\string#1}} \def\savetobox#1{\global\setbox#1 = \vbox\bgroup \unvbox#1} \def\checksaveins#1{\ifvoid#1\else \placesaveins#1\fi} \def\placesaveins#1{% \ptexinsert \csname\expandafter\gobblesave\string#1\endcsname {\box#1}% } % eat @SAVE -- beware, all of them have catcode \other: { \def\dospecials{\do S\do A\do V\do E} \uncatcodespecials % ;-) \gdef\gobblesave @SAVE{} } % initialization: \def\newsaveins #1{% \edef\next{\noexpand\newsaveinsX \makeSAVEname#1}% \next } \def\newsaveinsX #1{% \csname newbox\endcsname #1% \expandafter\def\expandafter\checkinserts\expandafter{\checkinserts \checksaveins #1}% } % initialize: \let\checkinserts\empty \newsaveins\footins \newsaveins\margin % @image. We use the macros from epsf.tex to support this. % If epsf.tex is not installed and @image is used, we complain. % % Check for and read epsf.tex up front. If we read it only at @image % time, we might be inside a group, and then its definitions would get % undone and the next image would fail. \openin 1 = epsf.tex \ifeof 1 \else % Do not bother showing banner with epsf.tex v2.7k (available in % doc/epsf.tex and on ctan). \def\epsfannounce{\toks0 = }% \input epsf.tex \fi \closein 1 % % We will only complain once about lack of epsf.tex. \newif\ifwarnednoepsf \newhelp\noepsfhelp{epsf.tex must be installed for images to work. It is also included in the Texinfo distribution, or you can get it from ftp://tug.org/tex/epsf.tex.} % \def\image#1{% \ifx\epsfbox\thisisundefined \ifwarnednoepsf \else \errhelp = \noepsfhelp \errmessage{epsf.tex not found, images will be ignored}% \global\warnednoepsftrue \fi \else \imagexxx #1,,,,,\finish \fi } % % Arguments to @image: % #1 is (mandatory) image filename; we tack on .eps extension. % #2 is (optional) width, #3 is (optional) height. % #4 is (ignored optional) html alt text. % #5 is (ignored optional) extension. % #6 is just the usual extra ignored arg for parsing stuff. \newif\ifimagevmode \def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup \catcode`\^^M = 5 % in case we're inside an example \normalturnoffactive % allow _ et al. in names % If the image is by itself, center it. \ifvmode \imagevmodetrue \else \ifx\centersub\centerV % for @center @image, we need a vbox so we can have our vertical space \imagevmodetrue \vbox\bgroup % vbox has better behavior than vtop herev \fi\fi % \ifimagevmode \nobreak\medskip % Usually we'll have text after the image which will insert % \parskip glue, so insert it here too to equalize the space % above and below. \nobreak\vskip\parskip \nobreak \fi % % Leave vertical mode so that indentation from an enclosing % environment such as @quotation is respected. % However, if we're at the top level, we don't want the % normal paragraph indentation. % On the other hand, if we are in the case of @center @image, we don't % want to start a paragraph, which will create a hsize-width box and % eradicate the centering. \ifx\centersub\centerV\else \noindent \fi % % Output the image. \ifpdf \dopdfimage{#1}{#2}{#3}% \else % \epsfbox itself resets \epsf?size at each figure. \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi \epsfbox{#1.eps}% \fi % \ifimagevmode \medskip % space after a standalone image \fi \ifx\centersub\centerV \egroup \fi \endgroup} % @float FLOATTYPE,LABEL,LOC ... @end float for displayed figures, tables, % etc. We don't actually implement floating yet, we always include the % float "here". But it seemed the best name for the future. % \envparseargdef\float{\eatcommaspace\eatcommaspace\dofloat#1, , ,\finish} % There may be a space before second and/or third parameter; delete it. \def\eatcommaspace#1, {#1,} % #1 is the optional FLOATTYPE, the text label for this float, typically % "Figure", "Table", "Example", etc. Can't contain commas. If omitted, % this float will not be numbered and cannot be referred to. % % #2 is the optional xref label. Also must be present for the float to % be referable. % % #3 is the optional positioning argument; for now, it is ignored. It % will somehow specify the positions allowed to float to (here, top, bottom). % % We keep a separate counter for each FLOATTYPE, which we reset at each % chapter-level command. \let\resetallfloatnos=\empty % \def\dofloat#1,#2,#3,#4\finish{% \let\thiscaption=\empty \let\thisshortcaption=\empty % % don't lose footnotes inside @float. % % BEWARE: when the floats start float, we have to issue warning whenever an % insert appears inside a float which could possibly float. --kasal, 26may04 % \startsavinginserts % % We can't be used inside a paragraph. \par % \vtop\bgroup \def\floattype{#1}% \def\floatlabel{#2}% \def\floatloc{#3}% we do nothing with this yet. % \ifx\floattype\empty \let\safefloattype=\empty \else {% % the floattype might have accents or other special characters, % but we need to use it in a control sequence name. \indexnofonts \turnoffactive \xdef\safefloattype{\floattype}% }% \fi % % If label is given but no type, we handle that as the empty type. \ifx\floatlabel\empty \else % We want each FLOATTYPE to be numbered separately (Figure 1, % Table 1, Figure 2, ...). (And if no label, no number.) % \expandafter\getfloatno\csname\safefloattype floatno\endcsname \global\advance\floatno by 1 % {% % This magic value for \lastsection is output by \setref as the % XREFLABEL-title value. \xrefX uses it to distinguish float % labels (which have a completely different output format) from % node and anchor labels. And \xrdef uses it to construct the % lists of floats. % \edef\lastsection{\floatmagic=\safefloattype}% \setref{\floatlabel}{Yfloat}% }% \fi % % start with \parskip glue, I guess. \vskip\parskip % % Don't suppress indentation if a float happens to start a section. \restorefirstparagraphindent } % we have these possibilities: % @float Foo,lbl & @caption{Cap}: Foo 1.1: Cap % @float Foo,lbl & no caption: Foo 1.1 % @float Foo & @caption{Cap}: Foo: Cap % @float Foo & no caption: Foo % @float ,lbl & Caption{Cap}: 1.1: Cap % @float ,lbl & no caption: 1.1 % @float & @caption{Cap}: Cap % @float & no caption: % \def\Efloat{% \let\floatident = \empty % % In all cases, if we have a float type, it comes first. \ifx\floattype\empty \else \def\floatident{\floattype}\fi % % If we have an xref label, the number comes next. \ifx\floatlabel\empty \else \ifx\floattype\empty \else % if also had float type, need tie first. \appendtomacro\floatident{\tie}% \fi % the number. \appendtomacro\floatident{\chaplevelprefix\the\floatno}% \fi % % Start the printed caption with what we've constructed in % \floatident, but keep it separate; we need \floatident again. \let\captionline = \floatident % \ifx\thiscaption\empty \else \ifx\floatident\empty \else \appendtomacro\captionline{: }% had ident, so need a colon between \fi % % caption text. \appendtomacro\captionline{\scanexp\thiscaption}% \fi % % If we have anything to print, print it, with space before. % Eventually this needs to become an \insert. \ifx\captionline\empty \else \vskip.5\parskip \captionline % % Space below caption. \vskip\parskip \fi % % If have an xref label, write the list of floats info. Do this % after the caption, to avoid chance of it being a breakpoint. \ifx\floatlabel\empty \else % Write the text that goes in the lof to the aux file as % \floatlabel-lof. Besides \floatident, we include the short % caption if specified, else the full caption if specified, else nothing. {% \atdummies % % since we read the caption text in the macro world, where ^^M % is turned into a normal character, we have to scan it back, so % we don't write the literal three characters "^^M" into the aux file. \scanexp{% \xdef\noexpand\gtemp{% \ifx\thisshortcaption\empty \thiscaption \else \thisshortcaption \fi }% }% \immediate\write\auxfile{@xrdef{\floatlabel-lof}{\floatident \ifx\gtemp\empty \else : \gtemp \fi}}% }% \fi \egroup % end of \vtop % % place the captured inserts % % BEWARE: when the floats start floating, we have to issue warning % whenever an insert appears inside a float which could possibly % float. --kasal, 26may04 % \checkinserts } % Append the tokens #2 to the definition of macro #1, not expanding either. % \def\appendtomacro#1#2{% \expandafter\def\expandafter#1\expandafter{#1#2}% } % @caption, @shortcaption % \def\caption{\docaption\thiscaption} \def\shortcaption{\docaption\thisshortcaption} \def\docaption{\checkenv\float \bgroup\scanargctxt\defcaption} \def\defcaption#1#2{\egroup \def#1{#2}} % The parameter is the control sequence identifying the counter we are % going to use. Create it if it doesn't exist and assign it to \floatno. \def\getfloatno#1{% \ifx#1\relax % Haven't seen this figure type before. \csname newcount\endcsname #1% % % Remember to reset this floatno at the next chap. \expandafter\gdef\expandafter\resetallfloatnos \expandafter{\resetallfloatnos #1=0 }% \fi \let\floatno#1% } % \setref calls this to get the XREFLABEL-snt value. We want an @xref % to the FLOATLABEL to expand to "Figure 3.1". We call \setref when we % first read the @float command. % \def\Yfloat{\floattype@tie \chaplevelprefix\the\floatno}% % Magic string used for the XREFLABEL-title value, so \xrefX can % distinguish floats from other xref types. \def\floatmagic{!!float!!} % #1 is the control sequence we are passed; we expand into a conditional % which is true if #1 represents a float ref. That is, the magic % \lastsection value which we \setref above. % \def\iffloat#1{\expandafter\doiffloat#1==\finish} % % #1 is (maybe) the \floatmagic string. If so, #2 will be the % (safe) float type for this float. We set \iffloattype to #2. % \def\doiffloat#1=#2=#3\finish{% \def\temp{#1}% \def\iffloattype{#2}% \ifx\temp\floatmagic } % @listoffloats FLOATTYPE - print a list of floats like a table of contents. % \parseargdef\listoffloats{% \def\floattype{#1}% floattype {% % the floattype might have accents or other special characters, % but we need to use it in a control sequence name. \indexnofonts \turnoffactive \xdef\safefloattype{\floattype}% }% % % \xrdef saves the floats as a \do-list in \floatlistSAFEFLOATTYPE. \expandafter\ifx\csname floatlist\safefloattype\endcsname \relax \ifhavexrefs % if the user said @listoffloats foo but never @float foo. \message{\linenumber No `\safefloattype' floats to list.}% \fi \else \begingroup \leftskip=\tocindent % indent these entries like a toc \let\do=\listoffloatsdo \csname floatlist\safefloattype\endcsname \endgroup \fi } % This is called on each entry in a list of floats. We're passed the % xref label, in the form LABEL-title, which is how we save it in the % aux file. We strip off the -title and look up \XRLABEL-lof, which % has the text we're supposed to typeset here. % % Figures without xref labels will not be included in the list (since % they won't appear in the aux file). % \def\listoffloatsdo#1{\listoffloatsdoentry#1\finish} \def\listoffloatsdoentry#1-title\finish{{% % Can't fully expand XR#1-lof because it can contain anything. Just % pass the control sequence. On the other hand, XR#1-pg is just the % page number, and we want to fully expand that so we can get a link % in pdf output. \toksA = \expandafter{\csname XR#1-lof\endcsname}% % % use the same \entry macro we use to generate the TOC and index. \edef\writeentry{\noexpand\entry{\the\toksA}{\csname XR#1-pg\endcsname}}% \writeentry }} \message{localization,} % For single-language documents, @documentlanguage is usually given very % early, just after @documentencoding. Single argument is the language % (de) or locale (de_DE) abbreviation. % { \catcode`\_ = \active \globaldefs=1 \parseargdef\documentlanguage{\begingroup \let_=\normalunderscore % normal _ character for filenames \tex % read txi-??.tex file in plain TeX. % Read the file by the name they passed if it exists. \openin 1 txi-#1.tex \ifeof 1 \documentlanguagetrywithoutunderscore{#1_\finish}% \else \globaldefs = 1 % everything in the txi-LL files needs to persist \input txi-#1.tex \fi \closein 1 \endgroup % end raw TeX \endgroup} % % If they passed de_DE, and txi-de_DE.tex doesn't exist, % try txi-de.tex. % \gdef\documentlanguagetrywithoutunderscore#1_#2\finish{% \openin 1 txi-#1.tex \ifeof 1 \errhelp = \nolanghelp \errmessage{Cannot read language file txi-#1.tex}% \else \globaldefs = 1 % everything in the txi-LL files needs to persist \input txi-#1.tex \fi \closein 1 } }% end of special _ catcode % \newhelp\nolanghelp{The given language definition file cannot be found or is empty. Maybe you need to install it? Putting it in the current directory should work if nowhere else does.} % This macro is called from txi-??.tex files; the first argument is the % \language name to set (without the "\lang@" prefix), the second and % third args are \{left,right}hyphenmin. % % The language names to pass are determined when the format is built. % See the etex.log file created at that time, e.g., % /usr/local/texlive/2008/texmf-var/web2c/pdftex/etex.log. % % With TeX Live 2008, etex now includes hyphenation patterns for all % available languages. This means we can support hyphenation in % Texinfo, at least to some extent. (This still doesn't solve the % accented characters problem.) % \catcode`@=11 \def\txisetlanguage#1#2#3{% % do not set the language if the name is undefined in the current TeX. \expandafter\ifx\csname lang@#1\endcsname \relax \message{no patterns for #1}% \else \global\language = \csname lang@#1\endcsname \fi % but there is no harm in adjusting the hyphenmin values regardless. \global\lefthyphenmin = #2\relax \global\righthyphenmin = #3\relax } % Helpers for encodings. % Set the catcode of characters 128 through 255 to the specified number. % \def\setnonasciicharscatcode#1{% \count255=128 \loop\ifnum\count255<256 \global\catcode\count255=#1\relax \advance\count255 by 1 \repeat } \def\setnonasciicharscatcodenonglobal#1{% \count255=128 \loop\ifnum\count255<256 \catcode\count255=#1\relax \advance\count255 by 1 \repeat } % @documentencoding sets the definition of non-ASCII characters % according to the specified encoding. % \parseargdef\documentencoding{% % Encoding being declared for the document. \def\declaredencoding{\csname #1.enc\endcsname}% % % Supported encodings: names converted to tokens in order to be able % to compare them with \ifx. \def\ascii{\csname US-ASCII.enc\endcsname}% \def\latnine{\csname ISO-8859-15.enc\endcsname}% \def\latone{\csname ISO-8859-1.enc\endcsname}% \def\lattwo{\csname ISO-8859-2.enc\endcsname}% \def\utfeight{\csname UTF-8.enc\endcsname}% % \ifx \declaredencoding \ascii \asciichardefs % \else \ifx \declaredencoding \lattwo \setnonasciicharscatcode\active \lattwochardefs % \else \ifx \declaredencoding \latone \setnonasciicharscatcode\active \latonechardefs % \else \ifx \declaredencoding \latnine \setnonasciicharscatcode\active \latninechardefs % \else \ifx \declaredencoding \utfeight \setnonasciicharscatcode\active \utfeightchardefs % \else \message{Unknown document encoding #1, ignoring.}% % \fi % utfeight \fi % latnine \fi % latone \fi % lattwo \fi % ascii } % A message to be logged when using a character that isn't available % the default font encoding (OT1). % \def\missingcharmsg#1{\message{Character missing in OT1 encoding: #1.}} % Take account of \c (plain) vs. \, (Texinfo) difference. \def\cedilla#1{\ifx\c\ptexc\c{#1}\else\,{#1}\fi} % First, make active non-ASCII characters in order for them to be % correctly categorized when TeX reads the replacement text of % macros containing the character definitions. \setnonasciicharscatcode\active % % Latin1 (ISO-8859-1) character definitions. \def\latonechardefs{% \gdef^^a0{\tie} \gdef^^a1{\exclamdown} \gdef^^a2{\missingcharmsg{CENT SIGN}} \gdef^^a3{{\pounds}} \gdef^^a4{\missingcharmsg{CURRENCY SIGN}} \gdef^^a5{\missingcharmsg{YEN SIGN}} \gdef^^a6{\missingcharmsg{BROKEN BAR}} \gdef^^a7{\S} \gdef^^a8{\"{}} \gdef^^a9{\copyright} \gdef^^aa{\ordf} \gdef^^ab{\guillemetleft} \gdef^^ac{$\lnot$} \gdef^^ad{\-} \gdef^^ae{\registeredsymbol} \gdef^^af{\={}} % \gdef^^b0{\textdegree} \gdef^^b1{$\pm$} \gdef^^b2{$^2$} \gdef^^b3{$^3$} \gdef^^b4{\'{}} \gdef^^b5{$\mu$} \gdef^^b6{\P} % \gdef^^b7{$^.$} \gdef^^b8{\cedilla\ } \gdef^^b9{$^1$} \gdef^^ba{\ordm} % \gdef^^bb{\guillemetright} \gdef^^bc{$1\over4$} \gdef^^bd{$1\over2$} \gdef^^be{$3\over4$} \gdef^^bf{\questiondown} % \gdef^^c0{\`A} \gdef^^c1{\'A} \gdef^^c2{\^A} \gdef^^c3{\~A} \gdef^^c4{\"A} \gdef^^c5{\ringaccent A} \gdef^^c6{\AE} \gdef^^c7{\cedilla C} \gdef^^c8{\`E} \gdef^^c9{\'E} \gdef^^ca{\^E} \gdef^^cb{\"E} \gdef^^cc{\`I} \gdef^^cd{\'I} \gdef^^ce{\^I} \gdef^^cf{\"I} % \gdef^^d0{\DH} \gdef^^d1{\~N} \gdef^^d2{\`O} \gdef^^d3{\'O} \gdef^^d4{\^O} \gdef^^d5{\~O} \gdef^^d6{\"O} \gdef^^d7{$\times$} \gdef^^d8{\O} \gdef^^d9{\`U} \gdef^^da{\'U} \gdef^^db{\^U} \gdef^^dc{\"U} \gdef^^dd{\'Y} \gdef^^de{\TH} \gdef^^df{\ss} % \gdef^^e0{\`a} \gdef^^e1{\'a} \gdef^^e2{\^a} \gdef^^e3{\~a} \gdef^^e4{\"a} \gdef^^e5{\ringaccent a} \gdef^^e6{\ae} \gdef^^e7{\cedilla c} \gdef^^e8{\`e} \gdef^^e9{\'e} \gdef^^ea{\^e} \gdef^^eb{\"e} \gdef^^ec{\`{\dotless i}} \gdef^^ed{\'{\dotless i}} \gdef^^ee{\^{\dotless i}} \gdef^^ef{\"{\dotless i}} % \gdef^^f0{\dh} \gdef^^f1{\~n} \gdef^^f2{\`o} \gdef^^f3{\'o} \gdef^^f4{\^o} \gdef^^f5{\~o} \gdef^^f6{\"o} \gdef^^f7{$\div$} \gdef^^f8{\o} \gdef^^f9{\`u} \gdef^^fa{\'u} \gdef^^fb{\^u} \gdef^^fc{\"u} \gdef^^fd{\'y} \gdef^^fe{\th} \gdef^^ff{\"y} } % Latin9 (ISO-8859-15) encoding character definitions. \def\latninechardefs{% % Encoding is almost identical to Latin1. \latonechardefs % \gdef^^a4{\euro} \gdef^^a6{\v S} \gdef^^a8{\v s} \gdef^^b4{\v Z} \gdef^^b8{\v z} \gdef^^bc{\OE} \gdef^^bd{\oe} \gdef^^be{\"Y} } % Latin2 (ISO-8859-2) character definitions. \def\lattwochardefs{% \gdef^^a0{\tie} \gdef^^a1{\ogonek{A}} \gdef^^a2{\u{}} \gdef^^a3{\L} \gdef^^a4{\missingcharmsg{CURRENCY SIGN}} \gdef^^a5{\v L} \gdef^^a6{\'S} \gdef^^a7{\S} \gdef^^a8{\"{}} \gdef^^a9{\v S} \gdef^^aa{\cedilla S} \gdef^^ab{\v T} \gdef^^ac{\'Z} \gdef^^ad{\-} \gdef^^ae{\v Z} \gdef^^af{\dotaccent Z} % \gdef^^b0{\textdegree} \gdef^^b1{\ogonek{a}} \gdef^^b2{\ogonek{ }} \gdef^^b3{\l} \gdef^^b4{\'{}} \gdef^^b5{\v l} \gdef^^b6{\'s} \gdef^^b7{\v{}} \gdef^^b8{\cedilla\ } \gdef^^b9{\v s} \gdef^^ba{\cedilla s} \gdef^^bb{\v t} \gdef^^bc{\'z} \gdef^^bd{\H{}} \gdef^^be{\v z} \gdef^^bf{\dotaccent z} % \gdef^^c0{\'R} \gdef^^c1{\'A} \gdef^^c2{\^A} \gdef^^c3{\u A} \gdef^^c4{\"A} \gdef^^c5{\'L} \gdef^^c6{\'C} \gdef^^c7{\cedilla C} \gdef^^c8{\v C} \gdef^^c9{\'E} \gdef^^ca{\ogonek{E}} \gdef^^cb{\"E} \gdef^^cc{\v E} \gdef^^cd{\'I} \gdef^^ce{\^I} \gdef^^cf{\v D} % \gdef^^d0{\DH} \gdef^^d1{\'N} \gdef^^d2{\v N} \gdef^^d3{\'O} \gdef^^d4{\^O} \gdef^^d5{\H O} \gdef^^d6{\"O} \gdef^^d7{$\times$} \gdef^^d8{\v R} \gdef^^d9{\ringaccent U} \gdef^^da{\'U} \gdef^^db{\H U} \gdef^^dc{\"U} \gdef^^dd{\'Y} \gdef^^de{\cedilla T} \gdef^^df{\ss} % \gdef^^e0{\'r} \gdef^^e1{\'a} \gdef^^e2{\^a} \gdef^^e3{\u a} \gdef^^e4{\"a} \gdef^^e5{\'l} \gdef^^e6{\'c} \gdef^^e7{\cedilla c} \gdef^^e8{\v c} \gdef^^e9{\'e} \gdef^^ea{\ogonek{e}} \gdef^^eb{\"e} \gdef^^ec{\v e} \gdef^^ed{\'{\dotless{i}}} \gdef^^ee{\^{\dotless{i}}} \gdef^^ef{\v d} % \gdef^^f0{\dh} \gdef^^f1{\'n} \gdef^^f2{\v n} \gdef^^f3{\'o} \gdef^^f4{\^o} \gdef^^f5{\H o} \gdef^^f6{\"o} \gdef^^f7{$\div$} \gdef^^f8{\v r} \gdef^^f9{\ringaccent u} \gdef^^fa{\'u} \gdef^^fb{\H u} \gdef^^fc{\"u} \gdef^^fd{\'y} \gdef^^fe{\cedilla t} \gdef^^ff{\dotaccent{}} } % UTF-8 character definitions. % % This code to support UTF-8 is based on LaTeX's utf8.def, with some % changes for Texinfo conventions. It is included here under the GPL by % permission from Frank Mittelbach and the LaTeX team. % \newcount\countUTFx \newcount\countUTFy \newcount\countUTFz \gdef\UTFviiiTwoOctets#1#2{\expandafter \UTFviiiDefined\csname u8:#1\string #2\endcsname} % \gdef\UTFviiiThreeOctets#1#2#3{\expandafter \UTFviiiDefined\csname u8:#1\string #2\string #3\endcsname} % \gdef\UTFviiiFourOctets#1#2#3#4{\expandafter \UTFviiiDefined\csname u8:#1\string #2\string #3\string #4\endcsname} \gdef\UTFviiiDefined#1{% \ifx #1\relax \message{\linenumber Unicode char \string #1 not defined for Texinfo}% \else \expandafter #1% \fi } \begingroup \catcode`\~13 \catcode`\"12 \def\UTFviiiLoop{% \global\catcode\countUTFx\active \uccode`\~\countUTFx \uppercase\expandafter{\UTFviiiTmp}% \advance\countUTFx by 1 \ifnum\countUTFx < \countUTFy \expandafter\UTFviiiLoop \fi} \countUTFx = "C2 \countUTFy = "E0 \def\UTFviiiTmp{% \xdef~{\noexpand\UTFviiiTwoOctets\string~}} \UTFviiiLoop \countUTFx = "E0 \countUTFy = "F0 \def\UTFviiiTmp{% \xdef~{\noexpand\UTFviiiThreeOctets\string~}} \UTFviiiLoop \countUTFx = "F0 \countUTFy = "F4 \def\UTFviiiTmp{% \xdef~{\noexpand\UTFviiiFourOctets\string~}} \UTFviiiLoop \endgroup \begingroup \catcode`\"=12 \catcode`\<=12 \catcode`\.=12 \catcode`\,=12 \catcode`\;=12 \catcode`\!=12 \catcode`\~=13 \gdef\DeclareUnicodeCharacter#1#2{% \countUTFz = "#1\relax %\wlog{\space\space defining Unicode char U+#1 (decimal \the\countUTFz)}% \begingroup \parseXMLCharref \def\UTFviiiTwoOctets##1##2{% \csname u8:##1\string ##2\endcsname}% \def\UTFviiiThreeOctets##1##2##3{% \csname u8:##1\string ##2\string ##3\endcsname}% \def\UTFviiiFourOctets##1##2##3##4{% \csname u8:##1\string ##2\string ##3\string ##4\endcsname}% \expandafter\expandafter\expandafter\expandafter \expandafter\expandafter\expandafter \gdef\UTFviiiTmp{#2}% \endgroup} \gdef\parseXMLCharref{% \ifnum\countUTFz < "A0\relax \errhelp = \EMsimple \errmessage{Cannot define Unicode char value < 00A0}% \else\ifnum\countUTFz < "800\relax \parseUTFviiiA,% \parseUTFviiiB C\UTFviiiTwoOctets.,% \else\ifnum\countUTFz < "10000\relax \parseUTFviiiA;% \parseUTFviiiA,% \parseUTFviiiB E\UTFviiiThreeOctets.{,;}% \else \parseUTFviiiA;% \parseUTFviiiA,% \parseUTFviiiA!% \parseUTFviiiB F\UTFviiiFourOctets.{!,;}% \fi\fi\fi } \gdef\parseUTFviiiA#1{% \countUTFx = \countUTFz \divide\countUTFz by 64 \countUTFy = \countUTFz \multiply\countUTFz by 64 \advance\countUTFx by -\countUTFz \advance\countUTFx by 128 \uccode `#1\countUTFx \countUTFz = \countUTFy} \gdef\parseUTFviiiB#1#2#3#4{% \advance\countUTFz by "#10\relax \uccode `#3\countUTFz \uppercase{\gdef\UTFviiiTmp{#2#3#4}}} \endgroup \def\utfeightchardefs{% \DeclareUnicodeCharacter{00A0}{\tie} \DeclareUnicodeCharacter{00A1}{\exclamdown} \DeclareUnicodeCharacter{00A3}{\pounds} \DeclareUnicodeCharacter{00A8}{\"{ }} \DeclareUnicodeCharacter{00A9}{\copyright} \DeclareUnicodeCharacter{00AA}{\ordf} \DeclareUnicodeCharacter{00AB}{\guillemetleft} \DeclareUnicodeCharacter{00AD}{\-} \DeclareUnicodeCharacter{00AE}{\registeredsymbol} \DeclareUnicodeCharacter{00AF}{\={ }} \DeclareUnicodeCharacter{00B0}{\ringaccent{ }} \DeclareUnicodeCharacter{00B4}{\'{ }} \DeclareUnicodeCharacter{00B8}{\cedilla{ }} \DeclareUnicodeCharacter{00BA}{\ordm} \DeclareUnicodeCharacter{00BB}{\guillemetright} \DeclareUnicodeCharacter{00BF}{\questiondown} \DeclareUnicodeCharacter{00C0}{\`A} \DeclareUnicodeCharacter{00C1}{\'A} \DeclareUnicodeCharacter{00C2}{\^A} \DeclareUnicodeCharacter{00C3}{\~A} \DeclareUnicodeCharacter{00C4}{\"A} \DeclareUnicodeCharacter{00C5}{\AA} \DeclareUnicodeCharacter{00C6}{\AE} \DeclareUnicodeCharacter{00C7}{\cedilla{C}} \DeclareUnicodeCharacter{00C8}{\`E} \DeclareUnicodeCharacter{00C9}{\'E} \DeclareUnicodeCharacter{00CA}{\^E} \DeclareUnicodeCharacter{00CB}{\"E} \DeclareUnicodeCharacter{00CC}{\`I} \DeclareUnicodeCharacter{00CD}{\'I} \DeclareUnicodeCharacter{00CE}{\^I} \DeclareUnicodeCharacter{00CF}{\"I} \DeclareUnicodeCharacter{00D0}{\DH} \DeclareUnicodeCharacter{00D1}{\~N} \DeclareUnicodeCharacter{00D2}{\`O} \DeclareUnicodeCharacter{00D3}{\'O} \DeclareUnicodeCharacter{00D4}{\^O} \DeclareUnicodeCharacter{00D5}{\~O} \DeclareUnicodeCharacter{00D6}{\"O} \DeclareUnicodeCharacter{00D8}{\O} \DeclareUnicodeCharacter{00D9}{\`U} \DeclareUnicodeCharacter{00DA}{\'U} \DeclareUnicodeCharacter{00DB}{\^U} \DeclareUnicodeCharacter{00DC}{\"U} \DeclareUnicodeCharacter{00DD}{\'Y} \DeclareUnicodeCharacter{00DE}{\TH} \DeclareUnicodeCharacter{00DF}{\ss} \DeclareUnicodeCharacter{00E0}{\`a} \DeclareUnicodeCharacter{00E1}{\'a} \DeclareUnicodeCharacter{00E2}{\^a} \DeclareUnicodeCharacter{00E3}{\~a} \DeclareUnicodeCharacter{00E4}{\"a} \DeclareUnicodeCharacter{00E5}{\aa} \DeclareUnicodeCharacter{00E6}{\ae} \DeclareUnicodeCharacter{00E7}{\cedilla{c}} \DeclareUnicodeCharacter{00E8}{\`e} \DeclareUnicodeCharacter{00E9}{\'e} \DeclareUnicodeCharacter{00EA}{\^e} \DeclareUnicodeCharacter{00EB}{\"e} \DeclareUnicodeCharacter{00EC}{\`{\dotless{i}}} \DeclareUnicodeCharacter{00ED}{\'{\dotless{i}}} \DeclareUnicodeCharacter{00EE}{\^{\dotless{i}}} \DeclareUnicodeCharacter{00EF}{\"{\dotless{i}}} \DeclareUnicodeCharacter{00F0}{\dh} \DeclareUnicodeCharacter{00F1}{\~n} \DeclareUnicodeCharacter{00F2}{\`o} \DeclareUnicodeCharacter{00F3}{\'o} \DeclareUnicodeCharacter{00F4}{\^o} \DeclareUnicodeCharacter{00F5}{\~o} \DeclareUnicodeCharacter{00F6}{\"o} \DeclareUnicodeCharacter{00F8}{\o} \DeclareUnicodeCharacter{00F9}{\`u} \DeclareUnicodeCharacter{00FA}{\'u} \DeclareUnicodeCharacter{00FB}{\^u} \DeclareUnicodeCharacter{00FC}{\"u} \DeclareUnicodeCharacter{00FD}{\'y} \DeclareUnicodeCharacter{00FE}{\th} \DeclareUnicodeCharacter{00FF}{\"y} \DeclareUnicodeCharacter{0100}{\=A} \DeclareUnicodeCharacter{0101}{\=a} \DeclareUnicodeCharacter{0102}{\u{A}} \DeclareUnicodeCharacter{0103}{\u{a}} \DeclareUnicodeCharacter{0104}{\ogonek{A}} \DeclareUnicodeCharacter{0105}{\ogonek{a}} \DeclareUnicodeCharacter{0106}{\'C} \DeclareUnicodeCharacter{0107}{\'c} \DeclareUnicodeCharacter{0108}{\^C} \DeclareUnicodeCharacter{0109}{\^c} \DeclareUnicodeCharacter{0118}{\ogonek{E}} \DeclareUnicodeCharacter{0119}{\ogonek{e}} \DeclareUnicodeCharacter{010A}{\dotaccent{C}} \DeclareUnicodeCharacter{010B}{\dotaccent{c}} \DeclareUnicodeCharacter{010C}{\v{C}} \DeclareUnicodeCharacter{010D}{\v{c}} \DeclareUnicodeCharacter{010E}{\v{D}} \DeclareUnicodeCharacter{0112}{\=E} \DeclareUnicodeCharacter{0113}{\=e} \DeclareUnicodeCharacter{0114}{\u{E}} \DeclareUnicodeCharacter{0115}{\u{e}} \DeclareUnicodeCharacter{0116}{\dotaccent{E}} \DeclareUnicodeCharacter{0117}{\dotaccent{e}} \DeclareUnicodeCharacter{011A}{\v{E}} \DeclareUnicodeCharacter{011B}{\v{e}} \DeclareUnicodeCharacter{011C}{\^G} \DeclareUnicodeCharacter{011D}{\^g} \DeclareUnicodeCharacter{011E}{\u{G}} \DeclareUnicodeCharacter{011F}{\u{g}} \DeclareUnicodeCharacter{0120}{\dotaccent{G}} \DeclareUnicodeCharacter{0121}{\dotaccent{g}} \DeclareUnicodeCharacter{0124}{\^H} \DeclareUnicodeCharacter{0125}{\^h} \DeclareUnicodeCharacter{0128}{\~I} \DeclareUnicodeCharacter{0129}{\~{\dotless{i}}} \DeclareUnicodeCharacter{012A}{\=I} \DeclareUnicodeCharacter{012B}{\={\dotless{i}}} \DeclareUnicodeCharacter{012C}{\u{I}} \DeclareUnicodeCharacter{012D}{\u{\dotless{i}}} \DeclareUnicodeCharacter{0130}{\dotaccent{I}} \DeclareUnicodeCharacter{0131}{\dotless{i}} \DeclareUnicodeCharacter{0132}{IJ} \DeclareUnicodeCharacter{0133}{ij} \DeclareUnicodeCharacter{0134}{\^J} \DeclareUnicodeCharacter{0135}{\^{\dotless{j}}} \DeclareUnicodeCharacter{0139}{\'L} \DeclareUnicodeCharacter{013A}{\'l} \DeclareUnicodeCharacter{0141}{\L} \DeclareUnicodeCharacter{0142}{\l} \DeclareUnicodeCharacter{0143}{\'N} \DeclareUnicodeCharacter{0144}{\'n} \DeclareUnicodeCharacter{0147}{\v{N}} \DeclareUnicodeCharacter{0148}{\v{n}} \DeclareUnicodeCharacter{014C}{\=O} \DeclareUnicodeCharacter{014D}{\=o} \DeclareUnicodeCharacter{014E}{\u{O}} \DeclareUnicodeCharacter{014F}{\u{o}} \DeclareUnicodeCharacter{0150}{\H{O}} \DeclareUnicodeCharacter{0151}{\H{o}} \DeclareUnicodeCharacter{0152}{\OE} \DeclareUnicodeCharacter{0153}{\oe} \DeclareUnicodeCharacter{0154}{\'R} \DeclareUnicodeCharacter{0155}{\'r} \DeclareUnicodeCharacter{0158}{\v{R}} \DeclareUnicodeCharacter{0159}{\v{r}} \DeclareUnicodeCharacter{015A}{\'S} \DeclareUnicodeCharacter{015B}{\'s} \DeclareUnicodeCharacter{015C}{\^S} \DeclareUnicodeCharacter{015D}{\^s} \DeclareUnicodeCharacter{015E}{\cedilla{S}} \DeclareUnicodeCharacter{015F}{\cedilla{s}} \DeclareUnicodeCharacter{0160}{\v{S}} \DeclareUnicodeCharacter{0161}{\v{s}} \DeclareUnicodeCharacter{0162}{\cedilla{t}} \DeclareUnicodeCharacter{0163}{\cedilla{T}} \DeclareUnicodeCharacter{0164}{\v{T}} \DeclareUnicodeCharacter{0168}{\~U} \DeclareUnicodeCharacter{0169}{\~u} \DeclareUnicodeCharacter{016A}{\=U} \DeclareUnicodeCharacter{016B}{\=u} \DeclareUnicodeCharacter{016C}{\u{U}} \DeclareUnicodeCharacter{016D}{\u{u}} \DeclareUnicodeCharacter{016E}{\ringaccent{U}} \DeclareUnicodeCharacter{016F}{\ringaccent{u}} \DeclareUnicodeCharacter{0170}{\H{U}} \DeclareUnicodeCharacter{0171}{\H{u}} \DeclareUnicodeCharacter{0174}{\^W} \DeclareUnicodeCharacter{0175}{\^w} \DeclareUnicodeCharacter{0176}{\^Y} \DeclareUnicodeCharacter{0177}{\^y} \DeclareUnicodeCharacter{0178}{\"Y} \DeclareUnicodeCharacter{0179}{\'Z} \DeclareUnicodeCharacter{017A}{\'z} \DeclareUnicodeCharacter{017B}{\dotaccent{Z}} \DeclareUnicodeCharacter{017C}{\dotaccent{z}} \DeclareUnicodeCharacter{017D}{\v{Z}} \DeclareUnicodeCharacter{017E}{\v{z}} \DeclareUnicodeCharacter{01C4}{D\v{Z}} \DeclareUnicodeCharacter{01C5}{D\v{z}} \DeclareUnicodeCharacter{01C6}{d\v{z}} \DeclareUnicodeCharacter{01C7}{LJ} \DeclareUnicodeCharacter{01C8}{Lj} \DeclareUnicodeCharacter{01C9}{lj} \DeclareUnicodeCharacter{01CA}{NJ} \DeclareUnicodeCharacter{01CB}{Nj} \DeclareUnicodeCharacter{01CC}{nj} \DeclareUnicodeCharacter{01CD}{\v{A}} \DeclareUnicodeCharacter{01CE}{\v{a}} \DeclareUnicodeCharacter{01CF}{\v{I}} \DeclareUnicodeCharacter{01D0}{\v{\dotless{i}}} \DeclareUnicodeCharacter{01D1}{\v{O}} \DeclareUnicodeCharacter{01D2}{\v{o}} \DeclareUnicodeCharacter{01D3}{\v{U}} \DeclareUnicodeCharacter{01D4}{\v{u}} \DeclareUnicodeCharacter{01E2}{\={\AE}} \DeclareUnicodeCharacter{01E3}{\={\ae}} \DeclareUnicodeCharacter{01E6}{\v{G}} \DeclareUnicodeCharacter{01E7}{\v{g}} \DeclareUnicodeCharacter{01E8}{\v{K}} \DeclareUnicodeCharacter{01E9}{\v{k}} \DeclareUnicodeCharacter{01F0}{\v{\dotless{j}}} \DeclareUnicodeCharacter{01F1}{DZ} \DeclareUnicodeCharacter{01F2}{Dz} \DeclareUnicodeCharacter{01F3}{dz} \DeclareUnicodeCharacter{01F4}{\'G} \DeclareUnicodeCharacter{01F5}{\'g} \DeclareUnicodeCharacter{01F8}{\`N} \DeclareUnicodeCharacter{01F9}{\`n} \DeclareUnicodeCharacter{01FC}{\'{\AE}} \DeclareUnicodeCharacter{01FD}{\'{\ae}} \DeclareUnicodeCharacter{01FE}{\'{\O}} \DeclareUnicodeCharacter{01FF}{\'{\o}} \DeclareUnicodeCharacter{021E}{\v{H}} \DeclareUnicodeCharacter{021F}{\v{h}} \DeclareUnicodeCharacter{0226}{\dotaccent{A}} \DeclareUnicodeCharacter{0227}{\dotaccent{a}} \DeclareUnicodeCharacter{0228}{\cedilla{E}} \DeclareUnicodeCharacter{0229}{\cedilla{e}} \DeclareUnicodeCharacter{022E}{\dotaccent{O}} \DeclareUnicodeCharacter{022F}{\dotaccent{o}} \DeclareUnicodeCharacter{0232}{\=Y} \DeclareUnicodeCharacter{0233}{\=y} \DeclareUnicodeCharacter{0237}{\dotless{j}} \DeclareUnicodeCharacter{02DB}{\ogonek{ }} \DeclareUnicodeCharacter{1E02}{\dotaccent{B}} \DeclareUnicodeCharacter{1E03}{\dotaccent{b}} \DeclareUnicodeCharacter{1E04}{\udotaccent{B}} \DeclareUnicodeCharacter{1E05}{\udotaccent{b}} \DeclareUnicodeCharacter{1E06}{\ubaraccent{B}} \DeclareUnicodeCharacter{1E07}{\ubaraccent{b}} \DeclareUnicodeCharacter{1E0A}{\dotaccent{D}} \DeclareUnicodeCharacter{1E0B}{\dotaccent{d}} \DeclareUnicodeCharacter{1E0C}{\udotaccent{D}} \DeclareUnicodeCharacter{1E0D}{\udotaccent{d}} \DeclareUnicodeCharacter{1E0E}{\ubaraccent{D}} \DeclareUnicodeCharacter{1E0F}{\ubaraccent{d}} \DeclareUnicodeCharacter{1E1E}{\dotaccent{F}} \DeclareUnicodeCharacter{1E1F}{\dotaccent{f}} \DeclareUnicodeCharacter{1E20}{\=G} \DeclareUnicodeCharacter{1E21}{\=g} \DeclareUnicodeCharacter{1E22}{\dotaccent{H}} \DeclareUnicodeCharacter{1E23}{\dotaccent{h}} \DeclareUnicodeCharacter{1E24}{\udotaccent{H}} \DeclareUnicodeCharacter{1E25}{\udotaccent{h}} \DeclareUnicodeCharacter{1E26}{\"H} \DeclareUnicodeCharacter{1E27}{\"h} \DeclareUnicodeCharacter{1E30}{\'K} \DeclareUnicodeCharacter{1E31}{\'k} \DeclareUnicodeCharacter{1E32}{\udotaccent{K}} \DeclareUnicodeCharacter{1E33}{\udotaccent{k}} \DeclareUnicodeCharacter{1E34}{\ubaraccent{K}} \DeclareUnicodeCharacter{1E35}{\ubaraccent{k}} \DeclareUnicodeCharacter{1E36}{\udotaccent{L}} \DeclareUnicodeCharacter{1E37}{\udotaccent{l}} \DeclareUnicodeCharacter{1E3A}{\ubaraccent{L}} \DeclareUnicodeCharacter{1E3B}{\ubaraccent{l}} \DeclareUnicodeCharacter{1E3E}{\'M} \DeclareUnicodeCharacter{1E3F}{\'m} \DeclareUnicodeCharacter{1E40}{\dotaccent{M}} \DeclareUnicodeCharacter{1E41}{\dotaccent{m}} \DeclareUnicodeCharacter{1E42}{\udotaccent{M}} \DeclareUnicodeCharacter{1E43}{\udotaccent{m}} \DeclareUnicodeCharacter{1E44}{\dotaccent{N}} \DeclareUnicodeCharacter{1E45}{\dotaccent{n}} \DeclareUnicodeCharacter{1E46}{\udotaccent{N}} \DeclareUnicodeCharacter{1E47}{\udotaccent{n}} \DeclareUnicodeCharacter{1E48}{\ubaraccent{N}} \DeclareUnicodeCharacter{1E49}{\ubaraccent{n}} \DeclareUnicodeCharacter{1E54}{\'P} \DeclareUnicodeCharacter{1E55}{\'p} \DeclareUnicodeCharacter{1E56}{\dotaccent{P}} \DeclareUnicodeCharacter{1E57}{\dotaccent{p}} \DeclareUnicodeCharacter{1E58}{\dotaccent{R}} \DeclareUnicodeCharacter{1E59}{\dotaccent{r}} \DeclareUnicodeCharacter{1E5A}{\udotaccent{R}} \DeclareUnicodeCharacter{1E5B}{\udotaccent{r}} \DeclareUnicodeCharacter{1E5E}{\ubaraccent{R}} \DeclareUnicodeCharacter{1E5F}{\ubaraccent{r}} \DeclareUnicodeCharacter{1E60}{\dotaccent{S}} \DeclareUnicodeCharacter{1E61}{\dotaccent{s}} \DeclareUnicodeCharacter{1E62}{\udotaccent{S}} \DeclareUnicodeCharacter{1E63}{\udotaccent{s}} \DeclareUnicodeCharacter{1E6A}{\dotaccent{T}} \DeclareUnicodeCharacter{1E6B}{\dotaccent{t}} \DeclareUnicodeCharacter{1E6C}{\udotaccent{T}} \DeclareUnicodeCharacter{1E6D}{\udotaccent{t}} \DeclareUnicodeCharacter{1E6E}{\ubaraccent{T}} \DeclareUnicodeCharacter{1E6F}{\ubaraccent{t}} \DeclareUnicodeCharacter{1E7C}{\~V} \DeclareUnicodeCharacter{1E7D}{\~v} \DeclareUnicodeCharacter{1E7E}{\udotaccent{V}} \DeclareUnicodeCharacter{1E7F}{\udotaccent{v}} \DeclareUnicodeCharacter{1E80}{\`W} \DeclareUnicodeCharacter{1E81}{\`w} \DeclareUnicodeCharacter{1E82}{\'W} \DeclareUnicodeCharacter{1E83}{\'w} \DeclareUnicodeCharacter{1E84}{\"W} \DeclareUnicodeCharacter{1E85}{\"w} \DeclareUnicodeCharacter{1E86}{\dotaccent{W}} \DeclareUnicodeCharacter{1E87}{\dotaccent{w}} \DeclareUnicodeCharacter{1E88}{\udotaccent{W}} \DeclareUnicodeCharacter{1E89}{\udotaccent{w}} \DeclareUnicodeCharacter{1E8A}{\dotaccent{X}} \DeclareUnicodeCharacter{1E8B}{\dotaccent{x}} \DeclareUnicodeCharacter{1E8C}{\"X} \DeclareUnicodeCharacter{1E8D}{\"x} \DeclareUnicodeCharacter{1E8E}{\dotaccent{Y}} \DeclareUnicodeCharacter{1E8F}{\dotaccent{y}} \DeclareUnicodeCharacter{1E90}{\^Z} \DeclareUnicodeCharacter{1E91}{\^z} \DeclareUnicodeCharacter{1E92}{\udotaccent{Z}} \DeclareUnicodeCharacter{1E93}{\udotaccent{z}} \DeclareUnicodeCharacter{1E94}{\ubaraccent{Z}} \DeclareUnicodeCharacter{1E95}{\ubaraccent{z}} \DeclareUnicodeCharacter{1E96}{\ubaraccent{h}} \DeclareUnicodeCharacter{1E97}{\"t} \DeclareUnicodeCharacter{1E98}{\ringaccent{w}} \DeclareUnicodeCharacter{1E99}{\ringaccent{y}} \DeclareUnicodeCharacter{1EA0}{\udotaccent{A}} \DeclareUnicodeCharacter{1EA1}{\udotaccent{a}} \DeclareUnicodeCharacter{1EB8}{\udotaccent{E}} \DeclareUnicodeCharacter{1EB9}{\udotaccent{e}} \DeclareUnicodeCharacter{1EBC}{\~E} \DeclareUnicodeCharacter{1EBD}{\~e} \DeclareUnicodeCharacter{1ECA}{\udotaccent{I}} \DeclareUnicodeCharacter{1ECB}{\udotaccent{i}} \DeclareUnicodeCharacter{1ECC}{\udotaccent{O}} \DeclareUnicodeCharacter{1ECD}{\udotaccent{o}} \DeclareUnicodeCharacter{1EE4}{\udotaccent{U}} \DeclareUnicodeCharacter{1EE5}{\udotaccent{u}} \DeclareUnicodeCharacter{1EF2}{\`Y} \DeclareUnicodeCharacter{1EF3}{\`y} \DeclareUnicodeCharacter{1EF4}{\udotaccent{Y}} \DeclareUnicodeCharacter{1EF8}{\~Y} \DeclareUnicodeCharacter{1EF9}{\~y} \DeclareUnicodeCharacter{2013}{--} \DeclareUnicodeCharacter{2014}{---} \DeclareUnicodeCharacter{2018}{\quoteleft} \DeclareUnicodeCharacter{2019}{\quoteright} \DeclareUnicodeCharacter{201A}{\quotesinglbase} \DeclareUnicodeCharacter{201C}{\quotedblleft} \DeclareUnicodeCharacter{201D}{\quotedblright} \DeclareUnicodeCharacter{201E}{\quotedblbase} \DeclareUnicodeCharacter{2022}{\bullet} \DeclareUnicodeCharacter{2026}{\dots} \DeclareUnicodeCharacter{2039}{\guilsinglleft} \DeclareUnicodeCharacter{203A}{\guilsinglright} \DeclareUnicodeCharacter{20AC}{\euro} \DeclareUnicodeCharacter{2192}{\expansion} \DeclareUnicodeCharacter{21D2}{\result} \DeclareUnicodeCharacter{2212}{\minus} \DeclareUnicodeCharacter{2217}{\point} \DeclareUnicodeCharacter{2261}{\equiv} }% end of \utfeightchardefs % US-ASCII character definitions. \def\asciichardefs{% nothing need be done \relax } % Make non-ASCII characters printable again for compatibility with % existing Texinfo documents that may use them, even without declaring a % document encoding. % \setnonasciicharscatcode \other \message{formatting,} \newdimen\defaultparindent \defaultparindent = 15pt \chapheadingskip = 15pt plus 4pt minus 2pt \secheadingskip = 12pt plus 3pt minus 2pt \subsecheadingskip = 9pt plus 2pt minus 2pt % Prevent underfull vbox error messages. \vbadness = 10000 % Don't be very finicky about underfull hboxes, either. \hbadness = 6666 % Following George Bush, get rid of widows and orphans. \widowpenalty=10000 \clubpenalty=10000 % Use TeX 3.0's \emergencystretch to help line breaking, but if we're % using an old version of TeX, don't do anything. We want the amount of % stretch added to depend on the line length, hence the dependence on % \hsize. We call this whenever the paper size is set. % \def\setemergencystretch{% \ifx\emergencystretch\thisisundefined % Allow us to assign to \emergencystretch anyway. \def\emergencystretch{\dimen0}% \else \emergencystretch = .15\hsize \fi } % Parameters in order: 1) textheight; 2) textwidth; % 3) voffset; 4) hoffset; 5) binding offset; 6) topskip; % 7) physical page height; 8) physical page width. % % We also call \setleading{\textleading}, so the caller should define % \textleading. The caller should also set \parskip. % \def\internalpagesizes#1#2#3#4#5#6#7#8{% \voffset = #3\relax \topskip = #6\relax \splittopskip = \topskip % \vsize = #1\relax \advance\vsize by \topskip \outervsize = \vsize \advance\outervsize by 2\topandbottommargin \pageheight = \vsize % \hsize = #2\relax \outerhsize = \hsize \advance\outerhsize by 0.5in \pagewidth = \hsize % \normaloffset = #4\relax \bindingoffset = #5\relax % \ifpdf \pdfpageheight #7\relax \pdfpagewidth #8\relax % if we don't reset these, they will remain at "1 true in" of % whatever layout pdftex was dumped with. \pdfhorigin = 1 true in \pdfvorigin = 1 true in \fi % \setleading{\textleading} % \parindent = \defaultparindent \setemergencystretch } % @letterpaper (the default). \def\letterpaper{{\globaldefs = 1 \parskip = 3pt plus 2pt minus 1pt \textleading = 13.2pt % % If page is nothing but text, make it come out even. \internalpagesizes{607.2pt}{6in}% that's 46 lines {\voffset}{.25in}% {\bindingoffset}{36pt}% {11in}{8.5in}% }} % Use @smallbook to reset parameters for 7x9.25 trim size. \def\smallbook{{\globaldefs = 1 \parskip = 2pt plus 1pt \textleading = 12pt % \internalpagesizes{7.5in}{5in}% {-.2in}{0in}% {\bindingoffset}{16pt}% {9.25in}{7in}% % \lispnarrowing = 0.3in \tolerance = 700 \hfuzz = 1pt \contentsrightmargin = 0pt \defbodyindent = .5cm }} % Use @smallerbook to reset parameters for 6x9 trim size. % (Just testing, parameters still in flux.) \def\smallerbook{{\globaldefs = 1 \parskip = 1.5pt plus 1pt \textleading = 12pt % \internalpagesizes{7.4in}{4.8in}% {-.2in}{-.4in}% {0pt}{14pt}% {9in}{6in}% % \lispnarrowing = 0.25in \tolerance = 700 \hfuzz = 1pt \contentsrightmargin = 0pt \defbodyindent = .4cm }} % Use @afourpaper to print on European A4 paper. \def\afourpaper{{\globaldefs = 1 \parskip = 3pt plus 2pt minus 1pt \textleading = 13.2pt % % Double-side printing via postscript on Laserjet 4050 % prints double-sided nicely when \bindingoffset=10mm and \hoffset=-6mm. % To change the settings for a different printer or situation, adjust % \normaloffset until the front-side and back-side texts align. Then % do the same for \bindingoffset. You can set these for testing in % your texinfo source file like this: % @tex % \global\normaloffset = -6mm % \global\bindingoffset = 10mm % @end tex \internalpagesizes{673.2pt}{160mm}% that's 51 lines {\voffset}{\hoffset}% {\bindingoffset}{44pt}% {297mm}{210mm}% % \tolerance = 700 \hfuzz = 1pt \contentsrightmargin = 0pt \defbodyindent = 5mm }} % Use @afivepaper to print on European A5 paper. % From romildo@urano.iceb.ufop.br, 2 July 2000. % He also recommends making @example and @lisp be small. \def\afivepaper{{\globaldefs = 1 \parskip = 2pt plus 1pt minus 0.1pt \textleading = 12.5pt % \internalpagesizes{160mm}{120mm}% {\voffset}{\hoffset}% {\bindingoffset}{8pt}% {210mm}{148mm}% % \lispnarrowing = 0.2in \tolerance = 800 \hfuzz = 1.2pt \contentsrightmargin = 0pt \defbodyindent = 2mm \tableindent = 12mm }} % A specific text layout, 24x15cm overall, intended for A4 paper. \def\afourlatex{{\globaldefs = 1 \afourpaper \internalpagesizes{237mm}{150mm}% {\voffset}{4.6mm}% {\bindingoffset}{7mm}% {297mm}{210mm}% % % Must explicitly reset to 0 because we call \afourpaper. \globaldefs = 0 }} % Use @afourwide to print on A4 paper in landscape format. \def\afourwide{{\globaldefs = 1 \afourpaper \internalpagesizes{241mm}{165mm}% {\voffset}{-2.95mm}% {\bindingoffset}{7mm}% {297mm}{210mm}% \globaldefs = 0 }} % @pagesizes TEXTHEIGHT[,TEXTWIDTH] % Perhaps we should allow setting the margins, \topskip, \parskip, % and/or leading, also. Or perhaps we should compute them somehow. % \parseargdef\pagesizes{\pagesizesyyy #1,,\finish} \def\pagesizesyyy#1,#2,#3\finish{{% \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi \globaldefs = 1 % \parskip = 3pt plus 2pt minus 1pt \setleading{\textleading}% % \dimen0 = #1\relax \advance\dimen0 by \voffset % \dimen2 = \hsize \advance\dimen2 by \normaloffset % \internalpagesizes{#1}{\hsize}% {\voffset}{\normaloffset}% {\bindingoffset}{44pt}% {\dimen0}{\dimen2}% }} % Set default to letter. % \letterpaper \message{and turning on texinfo input format.} \def^^L{\par} % remove \outer, so ^L can appear in an @comment % DEL is a comment character, in case @c does not suffice. \catcode`\^^? = 14 % Define macros to output various characters with catcode for normal text. \catcode`\"=\other \def\normaldoublequote{"} \catcode`\$=\other \def\normaldollar{$}%$ font-lock fix \catcode`\+=\other \def\normalplus{+} \catcode`\<=\other \def\normalless{<} \catcode`\>=\other \def\normalgreater{>} \catcode`\^=\other \def\normalcaret{^} \catcode`\_=\other \def\normalunderscore{_} \catcode`\|=\other \def\normalverticalbar{|} \catcode`\~=\other \def\normaltilde{~} % This macro is used to make a character print one way in \tt % (where it can probably be output as-is), and another way in other fonts, % where something hairier probably needs to be done. % % #1 is what to print if we are indeed using \tt; #2 is what to print % otherwise. Since all the Computer Modern typewriter fonts have zero % interword stretch (and shrink), and it is reasonable to expect all % typewriter fonts to have this, we can check that font parameter. % \def\ifusingtt#1#2{\ifdim \fontdimen3\font=0pt #1\else #2\fi} % Same as above, but check for italic font. Actually this also catches % non-italic slanted fonts since it is impossible to distinguish them from % italic fonts. But since this is only used by $ and it uses \sl anyway % this is not a problem. \def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi} % Turn off all special characters except @ % (and those which the user can use as if they were ordinary). % Most of these we simply print from the \tt font, but for some, we can % use math or other variants that look better in normal text. \catcode`\"=\active \def\activedoublequote{{\tt\char34}} \let"=\activedoublequote \catcode`\~=\active \def~{{\tt\char126}} \chardef\hat=`\^ \catcode`\^=\active \def^{{\tt \hat}} \catcode`\_=\active \def_{\ifusingtt\normalunderscore\_} \let\realunder=_ % Subroutine for the previous macro. \def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em } \catcode`\|=\active \def|{{\tt\char124}} \chardef \less=`\< \catcode`\<=\active \def<{{\tt \less}} \chardef \gtr=`\> \catcode`\>=\active \def>{{\tt \gtr}} \catcode`\+=\active \def+{{\tt \char 43}} \catcode`\$=\active \def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix % If a .fmt file is being used, characters that might appear in a file % name cannot be active until we have parsed the command line. % So turn them off again, and have \everyjob (or @setfilename) turn them on. % \otherifyactive is called near the end of this file. \def\otherifyactive{\catcode`+=\other \catcode`\_=\other} % Used sometimes to turn off (effectively) the active characters even after % parsing them. \def\turnoffactive{% \normalturnoffactive \otherbackslash } \catcode`\@=0 % \backslashcurfont outputs one backslash character in current font, % as in \char`\\. \global\chardef\backslashcurfont=`\\ \global\let\rawbackslashxx=\backslashcurfont % let existing .??s files work % \realbackslash is an actual character `\' with catcode other, and % \doublebackslash is two of them (for the pdf outlines). {\catcode`\\=\other @gdef@realbackslash{\} @gdef@doublebackslash{\\}} % In texinfo, backslash is an active character; it prints the backslash % in fixed width font. \catcode`\\=\active % @ for escape char from now on. % The story here is that in math mode, the \char of \backslashcurfont % ends up printing the roman \ from the math symbol font (because \char % in math mode uses the \mathcode, and plain.tex sets % \mathcode`\\="026E). It seems better for @backslashchar{} to always % print a typewriter backslash, hence we use an explicit \mathchar, % which is the decimal equivalent of "715c (class 7, e.g., use \fam; % ignored family value; char position "5C). We can't use " for the % usual hex value because it has already been made active. @def@normalbackslash{{@tt @ifmmode @mathchar29020 @else @backslashcurfont @fi}} @let@backslashchar = @normalbackslash % @backslashchar{} is for user documents. % On startup, @fixbackslash assigns: % @let \ = @normalbackslash % \rawbackslash defines an active \ to do \backslashcurfont. % \otherbackslash defines an active \ to be a literal `\' character with % catcode other. We switch back and forth between these. @gdef@rawbackslash{@let\=@backslashcurfont} @gdef@otherbackslash{@let\=@realbackslash} % Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of % the literal character `\'. Also revert - to its normal character, in % case the active - from code has slipped in. % {@catcode`- = @active @gdef@normalturnoffactive{% @let-=@normaldash @let"=@normaldoublequote @let$=@normaldollar %$ font-lock fix @let+=@normalplus @let<=@normalless @let>=@normalgreater @let\=@normalbackslash @let^=@normalcaret @let_=@normalunderscore @let|=@normalverticalbar @let~=@normaltilde @markupsetuplqdefault @markupsetuprqdefault @unsepspaces } } % Make _ and + \other characters, temporarily. % This is canceled by @fixbackslash. @otherifyactive % If a .fmt file is being used, we don't want the `\input texinfo' to show up. % That is what \eatinput is for; after that, the `\' should revert to printing % a backslash. % @gdef@eatinput input texinfo{@fixbackslash} @global@let\ = @eatinput % On the other hand, perhaps the file did not have a `\input texinfo'. Then % the first `\' in the file would cause an error. This macro tries to fix % that, assuming it is called before the first `\' could plausibly occur. % Also turn back on active characters that might appear in the input % file name, in case not using a pre-dumped format. % @gdef@fixbackslash{% @ifx\@eatinput @let\ = @normalbackslash @fi @catcode`+=@active @catcode`@_=@active } % Say @foo, not \foo, in error messages. @escapechar = `@@ % These (along with & and #) are made active for url-breaking, so need % active definitions as the normal characters. @def@normaldot{.} @def@normalquest{?} @def@normalslash{/} % These look ok in all fonts, so just make them not special. % @hashchar{} gets its own user-level command, because of #line. @catcode`@& = @other @def@normalamp{&} @catcode`@# = @other @def@normalhash{#} @catcode`@% = @other @def@normalpercent{%} @let @hashchar = @normalhash @c Finally, make ` and ' active, so that txicodequoteundirected and @c txicodequotebacktick work right in, e.g., @w{@code{`foo'}}. If we @c don't make ` and ' active, @code will not get them as active chars. @c Do this last of all since we use ` in the previous @catcode assignments. @catcode`@'=@active @catcode`@`=@active @markupsetuplqdefault @markupsetuprqdefault @c Local variables: @c eval: (add-hook 'write-file-hooks 'time-stamp) @c page-delimiter: "^\\\\message" @c time-stamp-start: "def\\\\texinfoversion{" @c time-stamp-format: "%:y-%02m-%02d.%02H" @c time-stamp-end: "}" @c End: @c vim:sw=2: @ignore arch-tag: e1b36e32-c96e-4135-a41a-0b2efa2ea115 @end ignore ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/���������������������������������������������������������������������������������0000755�0001750�0001750�00000000000�13512403133�014264� 5����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/wordsplit/�����������������������������������������������������������������������0000755�0001750�0001750�00000000000�13512403133�016313� 5����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/wordsplit/wordsplit.at�����������������������������������������������������������0000644�0001750�0001750�00000035503�13511404003�020672� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Test suite for wordsplit -*- Autotest -*- # Copyright (C) 2014-2019 Sergey Poznyakoff # # Wordsplit 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. # # Wordsplit 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 wordsplit. If not, see <http://www.gnu.org/licenses/>. AT_INIT AT_TESTED(wsp) m4_pushdef([wspnum],[0]) m4_pushdef([wspid]) m4_pushdef([wspgroupnum]) m4_pushdef([wspgroupname]) m4_pushdef([genkw],[dnl m4_define([wspid],m4_format([wordsplit%03d wsp%03d],wspnum))dnl m4_if(wspgroupname,,,[m4_define([wspid],wspid[ ]dnl m4_format(wspgroupname[ ]wspgroupname[%03d],wspgroupnum))dnl m4_define([wspgroupnum],m4_incr(wspgroupnum))])dnl m4_define([wspnum],m4_incr(wspnum))dnl wspid]) m4_pushdef([WSPGROUP],[ m4_define([wspgroupname],$1) m4_define([wspgroupnum],0)]) dnl ------------------------------------------------------------ dnl TESTWSP([NAME], [KW = `'], [OPTS], [INPUT], [STDOUT = `'], dnl [STDERR = `'], [ENV], [PROLOGUE]) dnl m4_pushdef([TESTWSP],[ AT_SETUP([$1]) AT_KEYWORDS([wordsplit wsp ]genkw[ $2]) AT_CHECK([$8 $7 wsp $3 <<'EOT' [$4] EOT ], [0], [$5], [$6]) AT_CLEANUP ]) dnl ------------------------------------------------------------ dnl The first part reproduces legacy argcv tests dnl ------------------------------------------------------------ TESTWSP([simple input],[wsp-simple],[], [1 2 3], [NF: 3 0: 1 1: 2 2: 3 TOTAL: 3 ]) TESTWSP([quoted space],[wsp-quoted],[], [quoted\ space], [NF: 1 0: "quoted space" TOTAL: 1 ]) TESTWSP([tab character],[wsp-tab],[], [a "tab character"], [NF: 2 0: a 1: tab\tcharacter TOTAL: 2 ]) WSPGROUP(wsp-escape) TESTWSP([octal and hex escapes],[],[], [\157\143\164\141\154\40and\x20\x68\x65\x78], [NF: 1 0: "octal and hex" TOTAL: 1 ]) TESTWSP([octal and hex escapes 2],[],[], [\157\143\164\141\154\40 and \x20\x68\x65\x78], [NF: 3 0: "octal " 1: and 2: " hex" TOTAL: 3 ]) TESTWSP([escape representation],[],[], [A\x3-\48\39], [NF: 1 0: A\003-\0048\0039 TOTAL: 1 ]) WSPGROUP() dnl ------------------------------------------------------------ dnl Test worsplit-specific behavior dnl ------------------------------------------------------------ TESTWSP([append],[wsp-append],[-append], [jeden dwa trzy cztery piec szesc], [NF: 3 0: jeden 1: dwa 2: trzy TOTAL: 3 NF: 4 0: jeden 1: dwa 2: trzy 3: cztery TOTAL: 1 NF: 6 0: jeden 1: dwa 2: trzy 3: cztery 4: piec 5: szesc TOTAL: 2 ]) TESTWSP([dooffs],[wsp-doofs ],[-dooffs jeden dwa trzy], [cztery piec], [NF: 2 (3) (0): jeden (1): dwa (2): trzy 3: cztery 4: piec TOTAL: 2 ]) WSPGROUP(wsp-var) TESTWSP([variable substitutions: single var],[],[], [a $FOO test], [NF: 3 0: a 1: bar 2: test TOTAL: 3 ], [], [FOO=bar]) TESTWSP([variable substitutions: concatenated vars],[], [], [a $FOO${BAR}ent test], [NF: 3 0: a 1: stringent 2: test TOTAL: 3 ], [], [FOO=str BAR=ing]) TESTWSP([variable substitutions: field splitting],[],[], [a $FOO test], [NF: 4 0: a 1: variable 2: substitution 3: test TOTAL: 4 ], [], [FOO="variable substitution"]) TESTWSP([variable substitutions: double-quoted variable],[],[], [a "$FOO" test], [NF: 3 0: a 1: "variable substitution" 2: test TOTAL: 3 ], [], [FOO="variable substitution"]) TESTWSP([variable substitutions: single-quoted variable],[],[], [a '$FOO' test], [NF: 3 0: a 1: $FOO 2: test TOTAL: 3 ], [], [FOO="variable substitution"]) TESTWSP([undefined variables 1],[],[], [a $FOO test a${FOO}b], [NF: 3 0: a 1: test 2: ab TOTAL: 3 ], [], [unset FOO;]) TESTWSP([undefined variables 2],[],[-keepundef], [a $FOO test a${FOO}b], [NF: 4 0: a 1: $FOO 2: test 3: a${FOO}b TOTAL: 4 ], [], [unset FOO;]) TESTWSP([warn about undefined variables],[],[-warnundef], [$FOO], [NF: 0 TOTAL: 0 ], [warning: undefined variable `FOO' ], [unset FOO;]) TESTWSP([bail out on undefined variables],[],[-undef], [$FOO], [], [undefined variable: FOO ], [unset FOO;]) TESTWSP([disable variable expansion],[],[-novar], [$FOO], [NF: 1 0: $FOO TOTAL: 1 ], [], [FOO=bar]) TESTWSP([K/V environment],[wsp-env-kv wsp-env_kv], [-env_kv], [$FOO a$BAZ], [NF: 2 0: bar 1: aqux TOTAL: 2 ], [], [FOO=bar BAZ=qux]) TESTWSP([nosplit with variable expansion],[wsp-var-nosplit],[-nosplit], [a $FOO test], [NF: 1 0: "a variable expansion test\n" TOTAL: 1 ], [], [FOO="variable expansion"]) TESTWSP([nosplit without variable expansion],[],[-nosplit -novar], [a $FOO test], [NF: 1 0: "a $FOO test\n" TOTAL: 1 ], [], [FOO="variable expansion"]) TESTWSP([nosplit: empty expansion],[],[-nosplit -trimnl], [$FOO], [NF: 1 0: "" TOTAL: 1 ], [], [FOO=""]) TESTWSP([default value],[],[], [${FOO:-bar}], [NF: 1 0: bar TOTAL: 1 ]) TESTWSP([default value (defined)],[],[], [${FOO:-bar}], [NF: 1 0: qux TOTAL: 1 ], [], [FOO=qux]) TESTWSP([default value (:- null)],[],[], [${FOO:-bar}], [NF: 1 0: bar TOTAL: 1 ], [], [FOO=]) TESTWSP([default value (- null)],[],[], [${FOO-bar}], [NF: 0 TOTAL: 0 ], [], [FOO=]) TESTWSP([default value (- null, unset)],[],[], [${FOO-bar}], [NF: 1 0: bar TOTAL: 1 ]) TESTWSP([assign default values],[],[], [${FOO=bar} $FOO], [NF: 1 0: bar TOTAL: 1 NF: 1 0: bar TOTAL: 1 ]) TESTWSP([default error message (var defined)],[],[], [a ${FOO:?} test], [NF: 3 0: a 1: bar 2: test TOTAL: 3 ], [], [FOO=bar]) TESTWSP([default error message],[],[], [${FOO:?}], [NF: 0 TOTAL: 0 ], [FOO: variable null or not set ]) TESTWSP([custom error message (defined)],[wsp-custom-err wsp-custom-err00],[], [a ${FOO:?please define it} test], [NF: 3 0: a 1: bar 2: test TOTAL: 3 ], [], [FOO=bar]) TESTWSP([custom error message],[wsp-custom-err wsp-custom-err01],[], [a ${FOO:?please define it} test], [NF: 2 0: a 1: test TOTAL: 2 ], [FOO: please define it ]) TESTWSP([alternate value (defined)],[wsp-alt wsp-alt00],[], [a ${FOO:+isset} test], [NF: 3 0: a 1: isset 2: test TOTAL: 3 ], [], [FOO=bar]) TESTWSP([alternate value],[wsp-alt wsp-alt01],[], [a ${FOO:+isset} test], [NF: 2 0: a 1: test TOTAL: 2 ], [], [unset FOO;]) TESTWSP([getvar],[wsp-getvar], [foo=bar x=quux], [begin $foo $x end], [NF: 4 0: begin 1: bar 2: quux 3: end TOTAL: 4 ], [], [], [unset foo; unset x]) TESTWSP([getvar and env],[wsp-getvar], [foo=bar x=quux y=xur], [begin $foo $TVAR $x $y end], [NF: 6 0: begin 1: bar 2: 12 3: quux 4: zwar 5: end TOTAL: 6 ], [], [TVAR=12 y=zwar], [unset foo; unset x]) TESTWSP([getvar, alternate value],[wsp-getvar], [foo=bar], [a ${foo:+isset}], [NF: 2 0: a 1: isset TOTAL: 2 ]) WSPGROUP() TESTWSP([ignore quotes],[wsp-ignore-quotes ],[-noquote], ["a text"], [NF: 2 0: "\"a" 1: "text\"" TOTAL: 2 ]) WSPGROUP(wsp-delim) TESTWSP([custom delimiters (squeeze)],[], [-delim : -nows -trimnl], [semicolon: separated::list: of :words], [NF: 5 0: semicolon 1: " separated" 2: list 3: " of " 4: words TOTAL: 5 ]) TESTWSP([custom delimiters (no squeeze)],[], [-delim : -nows -nosqueeze_delims -trimnl], [semicolon: separated::list: of :words], [NF: 6 0: semicolon 1: " separated" 2: "" 3: list 4: " of " 5: words TOTAL: 6 ]) TESTWSP([custom, with returned delimiters],[], [-delim : -nows -trimnl -return_delims], [semicolon: separated::list: of :words], [NF: 9 0: semicolon 1: : 2: " separated" 3: : 4: list 5: : 6: " of " 7: : 8: words TOTAL: 9 ]) TESTWSP([custom, with returned & squeezed delimiters],[], [-delim : -nows -trimnl -return_delims -nosqueeze_delims], [semicolon: separated::list: of :words], [NF: 10 0: semicolon 1: : 2: " separated" 3: : 4: : 5: list 6: : 7: " of " 8: : 9: words TOTAL: 10 ]) WSPGROUP(wsp-sed) TESTWSP([sed expressions],[],[-sed], [arg1 s/foo/bar/g;s/bar baz/quz quux/ arg2], [NF: 3 0: arg1 1: "s/foo/bar/g;s/bar baz/quz quux/" 2: arg2 TOTAL: 3 ]) WSPGROUP() TESTWSP([C escapes on],[wcp-c-escape],[-cescapes], [a\ttab form\ffeed and new\nline], [NF: 4 0: a\ttab 1: form\ffeed 2: and 3: new\nline TOTAL: 4 ]) TESTWSP([C escapes off],[wcp-c-escape-off],[-nocescapes], [a\ttab form\ffeed and new\nline], [NF: 4 0: attab 1: formffeed 2: and 3: newnline TOTAL: 4 ]) TESTWSP([ws elimination],[wsp-ws-elim],[-delim ' ()' -ws -return_delims], [( list items )], [NF: 4 0: ( 1: list 2: items 3: ) TOTAL: 4 ]) TESTWSP([ws elimination + return delim],[wsp-ws-elim-ret], [-nodefault -novar -nocmd -delim ":," -return_delims -ws -dquote], ["foo" : "bar", "quux" : "baaz" ], [NF: 7 0: foo 1: : 2: bar 3: , 4: quux 5: : 6: baaz TOTAL: 7 ]) TESTWSP([empty quotes],[wsp-empty-quotes],[-delim : -ws -return_delims], [t=""], [NF: 1 0: t= TOTAL: 1 ]) TESTWSP([delimiter following empty quotes], [],[-delim : -ws -return_delims], [t="":r], [NF: 3 0: t= 1: : 2: r TOTAL: 3 ]) TESTWSP([suppress ws trimming within quotes], [], [-default -delim , -ws -return_delims], [nocomponent,nonewline, formatfield="In message %{text}, "], [NF: 5 0: nocomponent 1: , 2: nonewline 3: , 4: "formatfield=In message %{text}, " TOTAL: 5 ]) TESTWSP([unescape], [wsp-unescape wsp-unescape-simple], [-nodefault -novar -nocmd -quote -escape ':+:\\""'], [\Seen "quote \"" "bs \\"], [NF: 3 0: \\Seen 1: "quote \"" 2: "bs \\" TOTAL: 3 ]) TESTWSP([unescape: word/quote], [wsp-unescape wsp-unescape-word], [-nodefault -novar -nocmd -quote -escape-word '\\""' -escape-quote ':+0x:\\""'], [\Seen "quote \"" "bs \\" "3\x31 \101" 3\x31 \101], [NF: 6 0: Seen 1: "quote \"" 2: "bs \\" 3: "31 A" 4: 3x31 5: 101 TOTAL: 6 ]) TESTWSP([dquote],[],[-nodefault -novar -nocmd -dquote], [a "quoted example" isn't it], [NF: 4 0: a 1: "quoted example" 2: isn't 3: it TOTAL: 4 ]) TESTWSP([squote],[],[-nodefault -novar -nocmd -squote], [a 'quoted example' isn"t it], [NF: 4 0: a 1: "quoted example" 2: "isn\"t" 3: it TOTAL: 4 ]) WSPGROUP(wsp-incr) TESTWSP([incremental],[],[-incremental], [incremental "input test" line ], [NF: 1 0: incremental TOTAL: 1 NF: 1 0: "input test" TOTAL: 2 NF: 1 0: line TOTAL: 3 ], [input exhausted ]) TESTWSP([incremental append],[],[-incremental -append], [incremental "input test" line ], [NF: 1 0: incremental TOTAL: 1 NF: 2 0: incremental 1: "input test" TOTAL: 2 NF: 3 0: incremental 1: "input test" 2: line TOTAL: 3 ], [input exhausted ]) TESTWSP([incremental ws], [],[-return_delims -nosqueeze_delims -incremental -ws], [a list test ], [NF: 1 0: a TOTAL: 1 NF: 1 0: list TOTAL: 2 NF: 1 0: test TOTAL: 3 ], [input exhausted ]) TESTWSP([incremental nosplit],[],[-incremental -nosplit], [incremental "input test" line ], [NF: 1 0: "incremental input test line" TOTAL: 1 ], [input exhausted ]) TESTWSP([simple command substitution],[],[-cmd], [begin $(words a b) end], [NF: 4 0: begin 1: a 2: b 3: end TOTAL: 4 ]) TESTWSP([quoted command substitution],[],[-cmd], [begin "$(words a b)" end], [NF: 3 0: begin 1: "a b" 2: end TOTAL: 3 ]) TESTWSP([coalesced command substitution],[],[-cmd], [begin($(words a b))end], [NF: 2 0: begin(a 1: b)end TOTAL: 2 ]) TESTWSP([quoted coalesced command substitution],[],[-cmd], ["begin($(words a b))end"], [NF: 1 0: "begin(a b)end" TOTAL: 1 ]) TESTWSP([variable and command substitution],[],[-cmd -var], [begin $X $(words $X $Y) end], [NF: 5 0: begin 1: a 2: a 3: b 4: end TOTAL: 5 ],[],[X=a Y=b]) TESTWSP([variable expansion and command substitution in quotes],[],[-cmd -var], ["${BEGIN}($(words $X $Y))end"], [NF: 1 0: "begin(a b)end" TOTAL: 1 ],[],[X=a Y=b BEGIN=begin]) TESTWSP([nested commands],[],[-cmd -var], [$(words output $(words in$SUFFIX text) end)], [NF: 4 0: output 1: input 2: text 3: end TOTAL: 4 ],[],[SUFFIX=put]) dnl Something that doesn't fit into TESTWSP AT_SETUP([pathname expansion]) AT_KEYWORDS([wordsplit wsp wsp-path wsp-path-1]) AT_CHECK([ mkdir dir > dir/1.c > dir/2.c > dir/3.b wsp -pathexpand<<'EOT' begin dir/*.c end EOT ], [0], [NF: 4 0: begin 1: dir/1.c 2: dir/2.c 3: end TOTAL: 4 ]) AT_CLEANUP AT_SETUP([pathname expansion: no match]) AT_KEYWORDS([wordsplit wsp wsp-path wsp-path-2]) AT_CHECK([ mkdir dir > dir/1.c > dir/2.b wsp -pathexpand<<'EOT' begin dir/*.d end EOT ], [0], [NF: 3 0: begin 1: dir/*.d 2: end TOTAL: 3 ]) AT_CLEANUP AT_SETUP([pathname expansion: nullglob]) AT_KEYWORDS([wordsplit wsp wsp-path wsp-path-3]) AT_CHECK([ mkdir dir > dir/1.c > dir/2.b wsp -pathexpand -nullglob<<'EOT' begin dir/*.d end EOT ], [0], [NF: 2 0: begin 1: end TOTAL: 2 ]) AT_CLEANUP AT_SETUP([pathname expansion: failglob]) AT_KEYWORDS([wordsplit wsp wsp-path wsp-path-4]) AT_CHECK([ mkdir dir > dir/1.c > dir/2.b wsp -pathexpand -failglob<<'EOT' begin dir/*.d end EOT ], [0], [], [no files match pattern dir/*.d ]) AT_CLEANUP TESTWSP([append],[],[-append-args extra arguments follow], [some words and], [NF: 6 0: some 1: words 2: and 3: extra 4: arguments 5: follow TOTAL: 3 ]) TESTWSP([append + dooffs + env],[], [-env none -dooffs preface words -- V=2 -append-args extra arguments follow], [some words and var=$V], [NF: 7 (2) (0): preface (1): words 2: some 3: words 4: and 5: var=2 6: extra 7: arguments 8: follow TOTAL: 4 ]) # Maxwords TESTWSP([maxwords],[], [-trimnl -maxwords 3], [ws_maxwords limits the number of returned words], [NF: 3 0: ws_maxwords 1: limits 2: "the number of returned words" TOTAL: 3 ]) TESTWSP([maxwords return_delims],[], [-trimnl -maxwords 8 -return_delims -delim :-], [foo:::bar-:baz-quux:ux:zu], [NF: 8 0: foo 1: : 2: bar 3: - 4: : 5: baz 6: - 7: quux:ux:zu TOTAL: 8 ]) TESTWSP([maxwords return_delims -squeeze_delims],[], [-trimnl -maxwords 8 -return_delims -nosqueeze_delims -delim :-], [foo:::bar-:baz:qux-], [NF: 8 0: foo 1: : 2: : 3: : 4: bar 5: - 6: : 7: baz:qux- TOTAL: 8 ]) TESTWSP([maxwords incremental],[], [-trimnl -maxwords 3 -incremental], [foo bar baz qux uz ], [NF: 1 0: foo TOTAL: 1 NF: 1 0: bar TOTAL: 2 NF: 1 0: "baz qux uz" TOTAL: 3 ], [input exhausted ])) TESTWSP([variable nosplit],[],[-novar -novarsplit], [begin ${VAR:- a b} end], [NF: 3 0: begin 1: "${VAR:- a b}" 2: end TOTAL: 3 ]) TESTWSP([command nosplit],[],[-nocmd -nocmdsplit], [begin $(words a b) end], [NF: 3 0: begin 1: "$(words a b)" 2: end TOTAL: 3 ]) TESTWSP([positional parameters],[],[one two three four five six seven eight nine ten eleven twelve], [$0 $5 ${10} $#], [NF: 3 0: one 1: six 2: eleven TOTAL: 3 NF: 1 0: 12 TOTAL: 1 ]) TESTWSP([$* and $@],[],['one two' three 'four five'], [$* $@ "$*" "$@"], [NF: 5 0: one 1: two 2: three 3: four 4: five TOTAL: 5 NF: 3 0: "one two" 1: three 2: "four five" TOTAL: 3 NF: 1 0: "one two three four five" TOTAL: 1 NF: 1 0: "one two three four five" TOTAL: 1 ]) TESTWSP([$* and $@ in nosplit mode],[], [-trimnl -nosplit 'one two' three 'four five'], [$* $@], [NF: 1 0: "one two three four five" TOTAL: 1 NF: 1 0: "one two three four five" TOTAL: 1 ]) TESTWSP([$* and $@ in nosplit mode with delimiter],[], [-trimnl -nosplit -delim : 'one two' three 'four five'], [$* $@], [NF: 1 0: "one two:three:four five" TOTAL: 1 NF: 1 0: "one two:three:four five" TOTAL: 1 ]) m4_popdef([TESTWSP]) m4_popdef([wspnum]) m4_popdef([wspid]) m4_popdef([genkw]) m4_popdef([wspgroupnum]) m4_popdef([wspgroupname]) m4_popdef([WSPGROUP]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/wordsplit/wordsplit.h������������������������������������������������������������0000644�0001750�0001750�00000030535�13511404003�020515� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* wordsplit - a word splitter Copyright (C) 2009-2019 Sergey Poznyakoff This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #ifndef __WORDSPLIT_H #define __WORDSPLIT_H #include <stddef.h> typedef struct wordsplit wordsplit_t; /* Structure used to direct the splitting. Members marked with [Input] can be defined before calling wordsplit(), those marked with [Output] provide return values when the function returns. If neither mark is used, the member is internal and must not be used by the caller. In the comments below, the identifiers in parentheses indicate bits that must be set (or unset, if starting with !) in ws_flags (if starting with WRDSF_) or ws_options (if starting with WRDSO_) to initialize or use the given member. If not redefined explicitly, most of them are set to some reasonable default value upon entry to wordsplit(). */ struct wordsplit { size_t ws_wordc; /* [Output] Number of words in ws_wordv. */ char **ws_wordv; /* [Output] Array of parsed out words. */ size_t ws_offs; /* [Input] (WRDSF_DOOFFS) Number of initial elements in ws_wordv to fill with NULLs. */ size_t ws_wordn; /* Number of elements ws_wordv can accomodate. */ int ws_flags; /* [Input] Flags passed to wordsplit. */ int ws_options; /* [Input] (WRDSF_OPTIONS) Additional options. */ size_t ws_maxwords; /* [Input] (WRDSO_MAXWORDS) Return at most that many words */ size_t ws_wordi; /* [Output] (WRDSF_INCREMENTAL) Total number of words returned so far */ const char *ws_delim; /* [Input] (WRDSF_DELIM) Word delimiters. */ const char *ws_comment; /* [Input] (WRDSF_COMMENT) Comment characters. */ const char *ws_escape[2]; /* [Input] (WRDSF_ESCAPE) Characters to be escaped with backslash. */ void (*ws_alloc_die) (wordsplit_t *wsp); /* [Input] (WRDSF_ALLOC_DIE) Function called when out of memory. Must not return. */ void (*ws_error) (const char *, ...) __attribute__ ((__format__ (__printf__, 1, 2))); /* [Input] (WRDSF_ERROR) Function used for error reporting */ void (*ws_debug) (const char *, ...) __attribute__ ((__format__ (__printf__, 1, 2))); /* [Input] (WRDSF_DEBUG) Function used for debug output. */ const char **ws_env; /* [Input] (WRDSF_ENV, !WRDSF_NOVAR) Array of environment variables. */ /* Temporary storage for environment variables. It is initialized upon first assignment which occurs during the parsing process (e.g. ${x:=2}). When this happens, all variables from ws_env are moved to ws_envbuf first, and the ws_envbuf address is assigned to ws_env. From this moment on, all variable expansions are served from ws_envbuf. */ char **ws_envbuf; /* Storage for variables */ size_t ws_envidx; /* Index of first free slot */ size_t ws_envsiz; /* Size of the ws_envbuf array */ char const **ws_paramv; /* [WRDSO_PARAMV] User-supplied positional parameters */ size_t ws_paramc; /* Number of positional parameters */ /* Temporary storage for parameters. Works similarly to ws_enbuf. */ char **ws_parambuf; size_t ws_paramidx; size_t ws_paramsiz; int (*ws_getvar) (char **ret, const char *var, size_t len, void *clos); /* [Input] (WRDSF_GETVAR, !WRDSF_NOVAR) Looks up the name VAR (LEN bytes long) in the table of variables and if found returns in memory location pointed to by RET the value of that variable. Returns WRDSE_OK (0) on success, and an error code (see WRDSE_* defines below) on error. User-specific errors can be returned by storing the error diagnostic string in RET and returning WRDSE_USERERR. Whatever is stored in RET, it must be allocated using malloc(3). */ void *ws_closure; /* [Input] (WRDSF_CLOSURE) Passed as the CLOS argument to ws_getvar and ws_command. */ int (*ws_command) (char **ret, const char *cmd, size_t len, char **argv, void *clos); /* [Input] (!WRDSF_NOCMD) Returns in the memory location pointed to by RET the expansion of the command CMD (LEN bytes long). On input, ARGV contains CMD split out to words. See ws_getvar for a discussion of possible return values. */ const char *ws_input; /* Input string (the S argument to wordsplit). */ size_t ws_len; /* Length of ws_input. */ size_t ws_endp; /* Points past the last processed byte in ws_input. */ int ws_errno; /* [Output] Error code, if an error occurred. */ char *ws_usererr; /* Points to textual description of the error, if ws_errno is WRDSE_USERERR. Must be allocated with malloc(3). */ char *ws_errctx; /* Context in which the error occurred: For WRDSE_UNDEF - name of the undefined variable, For WRDSE_GLOBERR - pattern that caused error. */ struct wordsplit_node *ws_head, *ws_tail; /* Doubly-linked list of parsed out nodes. */ char ws_sep[2]; /* Temporary storage used during splitting */ int ws_lvl; /* Invocation nesting level. */ }; /* Initial size for ws_env, if allocated automatically */ #define WORDSPLIT_ENV_INIT 16 /* Wordsplit flags. */ /* Append the words found to the array resulting from a previous call. */ #define WRDSF_APPEND 0x00000001 /* Insert ws_offs initial NULLs in the array ws_wordv. (These are not counted in the returned ws_wordc.) */ #define WRDSF_DOOFFS 0x00000002 /* Don't do command substitution. */ #define WRDSF_NOCMD 0x00000004 /* The parameter p resulted from a previous call to wordsplit(), and wordsplit_free() was not called. Reuse the allocated storage. */ #define WRDSF_REUSE 0x00000008 /* Print errors */ #define WRDSF_SHOWERR 0x00000010 /* Consider it an error if an undefined variable is expanded. */ #define WRDSF_UNDEF 0x00000020 /* Don't do variable expansion. */ #define WRDSF_NOVAR 0x00000040 /* Abort on ENOMEM error */ #define WRDSF_ENOMEMABRT 0x00000080 /* Trim off any leading and trailind whitespace */ #define WRDSF_WS 0x00000100 /* Handle single quotes */ #define WRDSF_SQUOTE 0x00000200 /* Handle double quotes */ #define WRDSF_DQUOTE 0x00000400 /* Handle single and double quotes */ #define WRDSF_QUOTE (WRDSF_SQUOTE|WRDSF_DQUOTE) /* Replace each input sequence of repeated delimiters with a single delimiter */ #define WRDSF_SQUEEZE_DELIMS 0x00000800 /* Return delimiters */ #define WRDSF_RETURN_DELIMS 0x00001000 /* Treat sed expressions as words */ #define WRDSF_SED_EXPR 0x00002000 /* ws_delim field is initialized */ #define WRDSF_DELIM 0x00004000 /* ws_comment field is initialized */ #define WRDSF_COMMENT 0x00008000 /* ws_alloc_die field is initialized */ #define WRDSF_ALLOC_DIE 0x00010000 /* ws_error field is initialized */ #define WRDSF_ERROR 0x00020000 /* ws_debug field is initialized */ #define WRDSF_DEBUG 0x00040000 /* ws_env field is initialized */ #define WRDSF_ENV 0x00080000 /* ws_getvar field is initialized */ #define WRDSF_GETVAR 0x00100000 /* enable debugging */ #define WRDSF_SHOWDBG 0x00200000 /* Don't split input into words. Useful for side effects. */ #define WRDSF_NOSPLIT 0x00400000 /* Keep undefined variables in place, instead of expanding them to empty strings. */ #define WRDSF_KEEPUNDEF 0x00800000 /* Warn about undefined variables */ #define WRDSF_WARNUNDEF 0x01000000 /* Handle C escapes */ #define WRDSF_CESCAPES 0x02000000 /* ws_closure is set */ #define WRDSF_CLOSURE 0x04000000 /* ws_env is a Key/Value environment, i.e. the value of a variable is stored in the element that follows its name. */ #define WRDSF_ENV_KV 0x08000000 /* ws_escape is set */ #define WRDSF_ESCAPE 0x10000000 /* Incremental mode */ #define WRDSF_INCREMENTAL 0x20000000 /* Perform pathname and tilde expansion */ #define WRDSF_PATHEXPAND 0x40000000 /* ws_options is initialized */ #define WRDSF_OPTIONS 0x80000000 #define WRDSF_DEFFLAGS \ (WRDSF_NOVAR | WRDSF_NOCMD | \ WRDSF_QUOTE | WRDSF_SQUEEZE_DELIMS | WRDSF_CESCAPES) /* Remove the word that produces empty string after path expansion */ #define WRDSO_NULLGLOB 0x00000001 /* Print error message if path expansion produces empty string */ #define WRDSO_FAILGLOB 0x00000002 /* Allow a leading period to be matched by metacharacters. */ #define WRDSO_DOTGLOB 0x00000004 /* Prefer ws_getvar over lookup in ws_env, if both are supplied */ #define WRDSO_GETVARPREF 0x00000008 /* Keep backslash in unrecognized escape sequences in words */ #define WRDSO_BSKEEP_WORD 0x00000010 /* Handle octal escapes in words */ #define WRDSO_OESC_WORD 0x00000020 /* Handle hex escapes in words */ #define WRDSO_XESC_WORD 0x00000040 /* ws_maxwords field is initialized */ #define WRDSO_MAXWORDS 0x00000080 /* Keep backslash in unrecognized escape sequences in quoted strings */ #define WRDSO_BSKEEP_QUOTE 0x00000100 /* Handle octal escapes in quoted strings */ #define WRDSO_OESC_QUOTE 0x00000200 /* Handle hex escapes in quoted strings */ #define WRDSO_XESC_QUOTE 0x00000400 /* Unused: 0x00000800 */ /* Don't split variable references, even if they contain whitespace (e.g. ${VAR:-foo bar}) */ #define WRDSO_NOVARSPLIT 0x00001000 /* Don't split commands, even containing whitespace, e.g. $(echo foo bar) */ #define WRDSO_NOCMDSPLIT 0x00002000 /* Enable positional parameters */ #define WRDSO_PARAMV 0x00004000 /* Enable negative positional indices (${-1} is the last positional parameter) */ #define WRDSO_PARAM_NEGIDX 0x00008000 #define WRDSO_BSKEEP WRDSO_BSKEEP_WORD #define WRDSO_OESC WRDSO_OESC_WORD #define WRDSO_XESC WRDSO_XESC_WORD /* Indices into ws_escape */ #define WRDSX_WORD 0 #define WRDSX_QUOTE 1 /* Set escape option F in WS for words (Q==0) or quoted strings (Q==1) */ #define WRDSO_ESC_SET(ws,q,f) ((ws)->ws_options |= ((f) << 4*(q))) /* Test WS for escape option F for words (Q==0) or quoted strings (Q==1) */ #define WRDSO_ESC_TEST(ws,q,f) ((ws)->ws_options & ((f) << 4*(q))) #define WRDSE_OK 0 #define WRDSE_EOF WRDSE_OK #define WRDSE_QUOTE 1 #define WRDSE_NOSPACE 2 #define WRDSE_USAGE 3 #define WRDSE_CBRACE 4 #define WRDSE_UNDEF 5 #define WRDSE_NOINPUT 6 #define WRDSE_PAREN 7 #define WRDSE_GLOBERR 8 #define WRDSE_USERERR 9 #define WRDSE_BADPARAM 10 int wordsplit (const char *s, wordsplit_t *ws, int flags); int wordsplit_len (const char *s, size_t len, wordsplit_t *ws, int flags); void wordsplit_free (wordsplit_t *ws); void wordsplit_free_words (wordsplit_t *ws); void wordsplit_free_envbuf (wordsplit_t *ws); void wordsplit_free_parambuf (struct wordsplit *ws); int wordsplit_get_words (wordsplit_t *ws, size_t *wordc, char ***wordv); static inline void wordsplit_getwords (wordsplit_t *ws, size_t *wordc, char ***wordv) __attribute__ ((deprecated)); static inline void wordsplit_getwords (wordsplit_t *ws, size_t *wordc, char ***wordv) { wordsplit_get_words (ws, wordc, wordv); } int wordsplit_append (wordsplit_t *wsp, int argc, char **argv); int wordsplit_c_unquote_char (int c); int wordsplit_c_quote_char (int c); size_t wordsplit_c_quoted_length (const char *str, int quote_hex, int *quote); void wordsplit_c_quote_copy (char *dst, const char *src, int quote_hex); void wordsplit_perror (wordsplit_t *ws); const char *wordsplit_strerror (wordsplit_t *ws); void wordsplit_clearerr (wordsplit_t *ws); #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/wordsplit/wordsplit.c������������������������������������������������������������0000644�0001750�0001750�00000172421�13511404003�020511� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* wordsplit - a word splitter Copyright (C) 2009-2019 Sergey Poznyakoff This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include <errno.h> #include <ctype.h> #include <unistd.h> #include <stdlib.h> #include <string.h> #include <stdio.h> #include <stdarg.h> #include <pwd.h> #include <glob.h> #include <limits.h> #if ENABLE_NLS # include <gettext.h> #else # define gettext(msgid) msgid #endif #define _(msgid) gettext (msgid) #define N_(msgid) msgid #include <wordsplit.h> #define ISWS(c) ((c)==' '||(c)=='\t'||(c)=='\n') #define ISDELIM(ws,c) \ (strchr ((ws)->ws_delim, (c)) != NULL) #define ISPUNCT(c) (strchr("!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~",(c))!=NULL) #define ISUPPER(c) ('A' <= ((unsigned) (c)) && ((unsigned) (c)) <= 'Z') #define ISLOWER(c) ('a' <= ((unsigned) (c)) && ((unsigned) (c)) <= 'z') #define ISALPHA(c) (ISUPPER(c) || ISLOWER(c)) #define ISDIGIT(c) ('0' <= ((unsigned) (c)) && ((unsigned) (c)) <= '9') #define ISXDIGIT(c) (strchr("abcdefABCDEF", c)!=NULL) #define ISALNUM(c) (ISALPHA(c) || ISDIGIT(c)) #define ISPRINT(c) (' ' <= ((unsigned) (c)) && ((unsigned) (c)) <= 127) #define ISVARBEG(c) (ISALPHA(c) || c == '_') #define ISVARCHR(c) (ISALNUM(c) || c == '_') #define WSP_RETURN_DELIMS(wsp) \ ((wsp)->ws_flags & WRDSF_RETURN_DELIMS || ((wsp)->ws_options & WRDSO_MAXWORDS)) #define to_num(c) \ (ISDIGIT(c) ? c - '0' : (ISXDIGIT(c) ? toupper(c) - 'A' + 10 : 255 )) #define ALLOC_INIT 128 #define ALLOC_INCR 128 static void _wsplt_alloc_die (struct wordsplit *wsp) { wsp->ws_error ("%s", _("memory exhausted")); abort (); } static void _wsplt_error (const char *fmt, ...) __attribute__ ((format (printf, 1, 2))); static void _wsplt_error (const char *fmt, ...) { va_list ap; va_start (ap, fmt); vfprintf (stderr, fmt, ap); va_end (ap); fputc ('\n', stderr); } static void wordsplit_free_nodes (struct wordsplit *); static int _wsplt_seterr (struct wordsplit *wsp, int ec) { wsp->ws_errno = ec; if (wsp->ws_flags & WRDSF_SHOWERR) wordsplit_perror (wsp); return ec; } static int _wsplt_nomem (struct wordsplit *wsp) { errno = ENOMEM; wsp->ws_errno = WRDSE_NOSPACE; if (wsp->ws_flags & WRDSF_ENOMEMABRT) wsp->ws_alloc_die (wsp); if (wsp->ws_flags & WRDSF_SHOWERR) wordsplit_perror (wsp); if (!(wsp->ws_flags & WRDSF_REUSE)) wordsplit_free (wsp); wordsplit_free_nodes (wsp); return wsp->ws_errno; } static void _wsplt_store_errctx (struct wordsplit *wsp, char const *str, size_t len) { free (wsp->ws_errctx); wsp->ws_errctx = malloc (len + 1); if (!wsp->ws_errctx) { wsp->ws_error ("%s", _("memory exhausted while trying to store error context")); } else { memcpy (wsp->ws_errctx, str, len); wsp->ws_errctx[len] = 0; } } static inline int _wsplt_setctxerr (struct wordsplit *wsp, int ec, char const *str, size_t len) { _wsplt_store_errctx (wsp, str, len); return _wsplt_seterr (wsp, ec); } static int wordsplit_run (const char *command, size_t length, struct wordsplit *wsp, int flags, int lvl); static int wordsplit_init (struct wordsplit *wsp, const char *input, size_t len, int flags); static int wordsplit_process_list (struct wordsplit *wsp, size_t start); static int wordsplit_finish (struct wordsplit *wsp); static int _wsplt_subsplit (struct wordsplit *wsp, struct wordsplit *wss, char const *str, int len, int flags, int finalize) { int rc; wss->ws_delim = wsp->ws_delim; wss->ws_debug = wsp->ws_debug; wss->ws_error = wsp->ws_error; wss->ws_alloc_die = wsp->ws_alloc_die; if (!(flags & WRDSF_NOVAR)) { wss->ws_env = wsp->ws_env; wss->ws_getvar = wsp->ws_getvar; flags |= wsp->ws_flags & (WRDSF_ENV | WRDSF_ENV_KV | WRDSF_GETVAR); } if (!(flags & WRDSF_NOCMD)) { wss->ws_command = wsp->ws_command; } if ((flags & (WRDSF_NOVAR|WRDSF_NOCMD)) != (WRDSF_NOVAR|WRDSF_NOCMD)) { wss->ws_closure = wsp->ws_closure; flags |= wsp->ws_flags & WRDSF_CLOSURE; } wss->ws_options = wsp->ws_options; flags |= WRDSF_DELIM | WRDSF_ALLOC_DIE | WRDSF_ERROR | WRDSF_DEBUG | (wsp->ws_flags & (WRDSF_SHOWDBG | WRDSF_SHOWERR | WRDSF_OPTIONS)); rc = wordsplit_init (wss, str, len, flags); if (rc) return rc; wss->ws_lvl = wsp->ws_lvl + 1; rc = wordsplit_process_list (wss, 0); if (rc) { wordsplit_free_nodes (wss); return rc; } if (finalize) { rc = wordsplit_finish (wss); wordsplit_free_nodes (wss); } return rc; } static void _wsplt_seterr_sub (struct wordsplit *wsp, struct wordsplit *wss) { /* Clear user-defined error */ if (wsp->ws_errno == WRDSE_USERERR) free (wsp->ws_usererr); /* Copy error state */ wsp->ws_errno = wss->ws_errno; if (wss->ws_errno == WRDSE_USERERR) { wsp->ws_usererr = wss->ws_usererr; wss->ws_errno = WRDSE_EOF; wss->ws_usererr = NULL; } /* Copy error context */ free (wsp->ws_errctx); wsp->ws_errctx = wss->ws_errctx; wss->ws_errctx = NULL; } static void wordsplit_init0 (struct wordsplit *wsp) { if (wsp->ws_flags & WRDSF_REUSE) { if (!(wsp->ws_flags & WRDSF_APPEND)) wordsplit_free_words (wsp); wordsplit_clearerr (wsp); } else { wsp->ws_wordv = NULL; wsp->ws_wordc = 0; wsp->ws_wordn = 0; } wsp->ws_errno = 0; } char wordsplit_c_escape_tab[] = "\\\\\"\"a\ab\bf\fn\nr\rt\tv\v"; static int wordsplit_init (struct wordsplit *wsp, const char *input, size_t len, int flags) { wsp->ws_flags = flags; if (!(wsp->ws_flags & WRDSF_ALLOC_DIE)) wsp->ws_alloc_die = _wsplt_alloc_die; if (!(wsp->ws_flags & WRDSF_ERROR)) wsp->ws_error = _wsplt_error; if (!(wsp->ws_flags & WRDSF_NOVAR)) { /* These will be initialized on first variable assignment */ wsp->ws_envidx = wsp->ws_envsiz = 0; wsp->ws_envbuf = NULL; } if (!(wsp->ws_flags & WRDSF_NOCMD)) { if (!wsp->ws_command) { _wsplt_seterr (wsp, WRDSE_USAGE); errno = EINVAL; return wsp->ws_errno; } } if (wsp->ws_flags & WRDSF_SHOWDBG) { if (!(wsp->ws_flags & WRDSF_DEBUG)) { if (wsp->ws_flags & WRDSF_ERROR) wsp->ws_debug = wsp->ws_error; else if (wsp->ws_flags & WRDSF_SHOWERR) wsp->ws_debug = _wsplt_error; else wsp->ws_flags &= ~WRDSF_SHOWDBG; } } wsp->ws_input = input; wsp->ws_len = len; if (!(wsp->ws_flags & WRDSF_DOOFFS)) wsp->ws_offs = 0; if (!(wsp->ws_flags & WRDSF_DELIM)) wsp->ws_delim = " \t\n"; wsp->ws_sep[0] = wsp->ws_delim[0]; wsp->ws_sep[1] = 0; if (!(wsp->ws_flags & WRDSF_COMMENT)) wsp->ws_comment = NULL; if (!(wsp->ws_flags & WRDSF_CLOSURE)) wsp->ws_closure = NULL; if (!(wsp->ws_flags & WRDSF_OPTIONS)) wsp->ws_options = 0; if (wsp->ws_flags & WRDSF_ESCAPE) { if (!wsp->ws_escape[WRDSX_WORD]) wsp->ws_escape[WRDSX_WORD] = ""; if (!wsp->ws_escape[WRDSX_QUOTE]) wsp->ws_escape[WRDSX_QUOTE] = ""; } else { if (wsp->ws_flags & WRDSF_CESCAPES) { wsp->ws_escape[WRDSX_WORD] = wordsplit_c_escape_tab; wsp->ws_escape[WRDSX_QUOTE] = wordsplit_c_escape_tab; wsp->ws_options |= WRDSO_OESC_QUOTE | WRDSO_OESC_WORD | WRDSO_XESC_QUOTE | WRDSO_XESC_WORD; } else { wsp->ws_escape[WRDSX_WORD] = ""; wsp->ws_escape[WRDSX_QUOTE] = "\\\\\"\""; wsp->ws_options |= WRDSO_BSKEEP_QUOTE; } } if (!(wsp->ws_options & WRDSO_PARAMV)) { wsp->ws_paramv = NULL; wsp->ws_paramc = 0; } wsp->ws_paramidx = wsp->ws_paramsiz = 0; wsp->ws_parambuf = NULL; wsp->ws_endp = 0; wsp->ws_wordi = 0; if (wsp->ws_flags & WRDSF_REUSE) wordsplit_free_nodes (wsp); wsp->ws_head = wsp->ws_tail = NULL; wsp->ws_errctx = NULL; wordsplit_init0 (wsp); return 0; } static int alloc_space (struct wordsplit *wsp, size_t count) { size_t offs = (wsp->ws_flags & WRDSF_DOOFFS) ? wsp->ws_offs : 0; char **ptr; size_t newalloc; if (wsp->ws_wordv == NULL) { newalloc = offs + count > ALLOC_INIT ? count : ALLOC_INIT; ptr = calloc (newalloc, sizeof (ptr[0])); } else if (wsp->ws_wordn < offs + wsp->ws_wordc + count) { newalloc = offs + wsp->ws_wordc + (count > ALLOC_INCR ? count : ALLOC_INCR); ptr = realloc (wsp->ws_wordv, newalloc * sizeof (ptr[0])); } else return 0; if (ptr) { wsp->ws_wordn = newalloc; wsp->ws_wordv = ptr; } else return _wsplt_nomem (wsp); return 0; } /* Node state flags */ #define _WSNF_NULL 0x01 /* null node (a noop) */ #define _WSNF_WORD 0x02 /* node contains word in v.word */ #define _WSNF_QUOTE 0x04 /* text is quoted */ #define _WSNF_NOEXPAND 0x08 /* text is not subject to expansion */ #define _WSNF_JOIN 0x10 /* node must be joined with the next node */ #define _WSNF_SEXP 0x20 /* is a sed expression */ #define _WSNF_DELIM 0x40 /* node is a delimiter */ #define _WSNF_CONST 0x80 /* with _WSNF_WORD: v.word is constant */ #define _WSNF_EMPTYOK 0x0100 /* special flag indicating that wordsplit_add_segm must add the segment even if it is empty */ struct wordsplit_node { struct wordsplit_node *prev; /* Previous element */ struct wordsplit_node *next; /* Next element */ int flags; /* Node flags */ union { struct { size_t beg; /* Start of word in ws_input */ size_t end; /* End of word in ws_input */ } segm; char *word; } v; }; static const char * wsnode_flagstr (int flags) { static char retbuf[7]; char *p = retbuf; if (flags & _WSNF_WORD) *p++ = 'w'; else if (flags & _WSNF_NULL) *p++ = 'n'; else *p++ = '-'; if (flags & _WSNF_QUOTE) *p++ = 'q'; else *p++ = '-'; if (flags & _WSNF_NOEXPAND) *p++ = 'E'; else *p++ = '-'; if (flags & _WSNF_JOIN) *p++ = 'j'; else *p++ = '-'; if (flags & _WSNF_SEXP) *p++ = 's'; else *p++ = '-'; if (flags & _WSNF_DELIM) *p++ = 'd'; else *p++ = '-'; *p = 0; return retbuf; } static const char * wsnode_ptr (struct wordsplit *wsp, struct wordsplit_node *p) { if (p->flags & _WSNF_NULL) return ""; else if (p->flags & _WSNF_WORD) return p->v.word; else return wsp->ws_input + p->v.segm.beg; } static size_t wsnode_len (struct wordsplit_node *p) { if (p->flags & _WSNF_NULL) return 0; else if (p->flags & _WSNF_WORD) return strlen (p->v.word); else return p->v.segm.end - p->v.segm.beg; } static int wsnode_new (struct wordsplit *wsp, struct wordsplit_node **pnode) { struct wordsplit_node *node = calloc (1, sizeof (*node)); if (!node) return _wsplt_nomem (wsp); *pnode = node; return 0; } static void wsnode_free (struct wordsplit_node *p) { if ((p->flags & (_WSNF_WORD|_WSNF_CONST)) == _WSNF_WORD) free (p->v.word); free (p); } static void wsnode_append (struct wordsplit *wsp, struct wordsplit_node *node) { node->next = NULL; node->prev = wsp->ws_tail; if (wsp->ws_tail) wsp->ws_tail->next = node; else wsp->ws_head = node; wsp->ws_tail = node; } static void wsnode_remove (struct wordsplit *wsp, struct wordsplit_node *node) { struct wordsplit_node *p; p = node->prev; if (p) { p->next = node->next; if (!node->next) p->flags &= ~_WSNF_JOIN; } else wsp->ws_head = node->next; p = node->next; if (p) p->prev = node->prev; else wsp->ws_tail = node->prev; node->next = node->prev = NULL; } static struct wordsplit_node * wsnode_tail (struct wordsplit_node *p) { while (p && p->next) p = p->next; return p; } static void wsnode_insert (struct wordsplit *wsp, struct wordsplit_node *node, struct wordsplit_node *anchor, int before) { if (!wsp->ws_head) { node->next = node->prev = NULL; wsp->ws_head = wsp->ws_tail = node; } else if (before) { if (anchor->prev) wsnode_insert (wsp, node, anchor->prev, 0); else { struct wordsplit_node *tail = wsnode_tail (node); node->prev = NULL; tail->next = anchor; anchor->prev = tail; wsp->ws_head = node; } } else { struct wordsplit_node *p; struct wordsplit_node *tail = wsnode_tail (node); p = anchor->next; if (p) p->prev = tail; else wsp->ws_tail = tail; tail->next = p; node->prev = anchor; anchor->next = node; } } static int wordsplit_add_segm (struct wordsplit *wsp, size_t beg, size_t end, int flg) { struct wordsplit_node *node; int rc; if (end == beg && !(flg & _WSNF_EMPTYOK)) return 0; rc = wsnode_new (wsp, &node); if (rc) return rc; node->flags = flg & ~(_WSNF_WORD | _WSNF_EMPTYOK); node->v.segm.beg = beg; node->v.segm.end = end; wsnode_append (wsp, node); return 0; } static void wordsplit_free_nodes (struct wordsplit *wsp) { struct wordsplit_node *p; for (p = wsp->ws_head; p;) { struct wordsplit_node *next = p->next; wsnode_free (p); p = next; } wsp->ws_head = wsp->ws_tail = NULL; } static void wordsplit_dump_nodes (struct wordsplit *wsp) { struct wordsplit_node *p; int n = 0; for (p = wsp->ws_head, n = 0; p; p = p->next, n++) { if (p->flags & _WSNF_WORD) wsp->ws_debug ("(%02d) %4d: %p: %#04x (%s):%s;", wsp->ws_lvl, n, p, p->flags, wsnode_flagstr (p->flags), p->v.word); else wsp->ws_debug ("(%02d) %4d: %p: %#04x (%s):%.*s;", wsp->ws_lvl, n, p, p->flags, wsnode_flagstr (p->flags), (int) (p->v.segm.end - p->v.segm.beg), wsp->ws_input + p->v.segm.beg); } } static int coalesce_segment (struct wordsplit *wsp, struct wordsplit_node *node) { struct wordsplit_node *p, *end; size_t len = 0; char *buf, *cur; int stop; if (!(node->flags & _WSNF_JOIN)) return 0; for (p = node; p && (p->flags & _WSNF_JOIN); p = p->next) { len += wsnode_len (p); } if (p) len += wsnode_len (p); end = p; buf = malloc (len + 1); if (!buf) return _wsplt_nomem (wsp); cur = buf; p = node; for (stop = 0; !stop;) { struct wordsplit_node *next = p->next; const char *str = wsnode_ptr (wsp, p); size_t slen = wsnode_len (p); memcpy (cur, str, slen); cur += slen; if (p != node) { node->flags |= p->flags & _WSNF_QUOTE; wsnode_remove (wsp, p); stop = p == end; wsnode_free (p); } p = next; } *cur = 0; node->flags &= ~_WSNF_JOIN; if (node->flags & _WSNF_WORD) free (node->v.word); else node->flags |= _WSNF_WORD; node->v.word = buf; return 0; } static void wordsplit_string_unquote_copy (struct wordsplit *ws, int inquote, char *dst, const char *src, size_t n); static int wsnode_quoteremoval (struct wordsplit *wsp) { struct wordsplit_node *p; for (p = wsp->ws_head; p; p = p->next) { const char *str = wsnode_ptr (wsp, p); size_t slen = wsnode_len (p); int unquote; if (wsp->ws_flags & WRDSF_QUOTE) unquote = !(p->flags & _WSNF_NOEXPAND); else unquote = 0; if (unquote) { if (!(p->flags & _WSNF_WORD)) { char *newstr = malloc (slen + 1); if (!newstr) return _wsplt_nomem (wsp); memcpy (newstr, str, slen); newstr[slen] = 0; p->v.word = newstr; p->flags |= _WSNF_WORD; } wordsplit_string_unquote_copy (wsp, p->flags & _WSNF_QUOTE, p->v.word, str, slen); } } return 0; } static int wsnode_coalesce (struct wordsplit *wsp) { struct wordsplit_node *p; for (p = wsp->ws_head; p; p = p->next) { if (p->flags & _WSNF_JOIN) if (coalesce_segment (wsp, p)) return 1; } return 0; } static int wsnode_tail_coalesce (struct wordsplit *wsp, struct wordsplit_node *p) { if (p->next) { struct wordsplit_node *np = p; while (np && np->next) { np->flags |= _WSNF_JOIN; np = np->next; } if (coalesce_segment (wsp, p)) return 1; } return 0; } static size_t skip_delim (struct wordsplit *wsp); static int wordsplit_finish (struct wordsplit *wsp) { struct wordsplit_node *p; size_t n; int delim; /* Postprocess delimiters. It would be rather simple, if it weren't for the incremental operation. Nodes of type _WSNF_DELIM get inserted to the node list if either WRDSF_RETURN_DELIMS flag or WRDSO_MAXWORDS option is set. The following cases should be distinguished: 1. If both WRDSF_SQUEEZE_DELIMS and WRDSF_RETURN_DELIMS are set, compress any runs of similar delimiter nodes to a single node. The nodes are 'similar' if they point to the same delimiter character. If WRDSO_MAXWORDS option is set, stop compressing when ws_wordi + 1 == ws_maxwords, and coalesce the rest of nodes into a single last node. 2. If WRDSO_MAXWORDS option is set, but WRDSF_RETURN_DELIMS is not, remove any delimiter nodes. Stop operation when ws_wordi + 1 == ws_maxwords, and coalesce the rest of nodes into a single last node. 3. If incremental operation is in progress, restart the loop any time a delimiter node is about to be returned, unless WRDSF_RETURN_DELIMS is set. */ again: delim = 0; /* Delimiter being processed (if any) */ n = 0; /* Number of words processed so far */ p = wsp->ws_head; /* Current node */ while (p) { struct wordsplit_node *next = p->next; if (p->flags & _WSNF_DELIM) { if (wsp->ws_flags & WRDSF_RETURN_DELIMS) { if (wsp->ws_flags & WRDSF_SQUEEZE_DELIMS) { char const *s = wsnode_ptr (wsp, p); if (delim) { if (delim == *s) { wsnode_remove (wsp, p); p = next; continue; } else { delim = 0; n++; /* Count this node; it will be returned */ } } else { delim = *s; p = next; continue; } } } else if (wsp->ws_options & WRDSO_MAXWORDS) { wsnode_remove (wsp, p); p = next; continue; } } else { if (delim) { /* Last node was a delimiter or a compressed run of delimiters; Count it, and clear the delimiter marker */ n++; delim = 0; } if (wsp->ws_options & WRDSO_MAXWORDS) { if (wsp->ws_wordi + n + 1 == wsp->ws_maxwords) break; } } n++; if (wsp->ws_flags & WRDSF_INCREMENTAL) p = NULL; /* Break the loop */ else p = next; } if (p) { /* We're here if WRDSO_MAXWORDS is in effect and wsp->ws_maxwords words have already been collected. Reconstruct a single final node from the remaining nodes. */ if (wsnode_tail_coalesce (wsp, p)) return wsp->ws_errno; n++; } if (n == 0) { /* The loop above have eliminated all nodes. */ if (wsp->ws_flags & WRDSF_INCREMENTAL) { /* Restart the processing, if there's any input left. */ if (wsp->ws_endp < wsp->ws_len) { int rc; if (wsp->ws_flags & WRDSF_SHOWDBG) wsp->ws_debug (_("Restarting")); rc = wordsplit_process_list (wsp, skip_delim (wsp)); if (rc) return rc; } else { wsp->ws_errno = WRDSE_EOF; return WRDSE_EOF; } goto again; } if (wsp->ws_flags & WRDSF_NOSPLIT) { if (wordsplit_add_segm (wsp, 0, 0, _WSNF_EMPTYOK)) return wsp->ws_errno; n = 1; } } if (alloc_space (wsp, n + 1)) return wsp->ws_errno; while (wsp->ws_head) { const char *str = wsnode_ptr (wsp, wsp->ws_head); size_t slen = wsnode_len (wsp->ws_head); char *newstr = malloc (slen + 1); /* Assign newstr first, even if it is NULL. This way wordsplit_free will work even if we return nomem later. */ wsp->ws_wordv[wsp->ws_offs + wsp->ws_wordc] = newstr; if (!newstr) return _wsplt_nomem (wsp); memcpy (newstr, str, slen); newstr[slen] = 0; wsnode_remove (wsp, wsp->ws_head); wsp->ws_wordc++; wsp->ws_wordi++; if (wsp->ws_flags & WRDSF_INCREMENTAL) break; } wsp->ws_wordv[wsp->ws_offs + wsp->ws_wordc] = NULL; return 0; } int wordsplit_append (wordsplit_t *wsp, int argc, char **argv) { int rc; size_t i; rc = alloc_space (wsp, wsp->ws_wordc + argc + 1); if (rc) return rc; for (i = 0; i < argc; i++) { char *newstr = strdup (argv[i]); if (!newstr) { while (i > 0) { free (wsp->ws_wordv[wsp->ws_offs + wsp->ws_wordc + i - 1]); wsp->ws_wordv[wsp->ws_offs + wsp->ws_wordc + i - 1] = NULL; i--; } return _wsplt_nomem (wsp); } wsp->ws_wordv[wsp->ws_offs + wsp->ws_wordc + i] = newstr; } wsp->ws_wordc += i; wsp->ws_wordv[wsp->ws_offs + wsp->ws_wordc] = NULL; return 0; } /* Variable expansion */ static int node_split_prefix (struct wordsplit *wsp, struct wordsplit_node **ptail, struct wordsplit_node *node, size_t beg, size_t len, int flg) { struct wordsplit_node *newnode; if (len == 0) return 0; if (wsnode_new (wsp, &newnode)) return 1; wsnode_insert (wsp, newnode, *ptail, 0); if (node->flags & _WSNF_WORD) { const char *str = wsnode_ptr (wsp, node); char *newstr = malloc (len + 1); if (!newstr) return _wsplt_nomem (wsp); memcpy (newstr, str + beg, len); newstr[len] = 0; newnode->flags = _WSNF_WORD; newnode->v.word = newstr; } else { newnode->v.segm.beg = node->v.segm.beg + beg; newnode->v.segm.end = newnode->v.segm.beg + len; } newnode->flags |= flg; *ptail = newnode; return 0; } static int find_closing_paren (const char *str, size_t i, size_t len, size_t *poff, char const *paren) { enum { st_init, st_squote, st_dquote } state = st_init; size_t level = 1; for (; i < len; i++) { switch (state) { case st_init: switch (str[i]) { default: if (str[i] == paren[0]) { level++; break; } else if (str[i] == paren[1]) { if (--level == 0) { *poff = i; return 0; } break; } break; case '"': state = st_dquote; break; case '\'': state = st_squote; break; } break; case st_squote: if (str[i] == '\'') state = st_init; break; case st_dquote: if (str[i] == '\\') i++; else if (str[i] == '"') state = st_init; break; } } return 1; } static char const * wsplt_env_find (struct wordsplit *wsp, const char *name, size_t len) { size_t i; if (!wsp->ws_env) return NULL; if (wsp->ws_flags & WRDSF_ENV_KV) { /* A key-value pair environment */ for (i = 0; wsp->ws_env[i]; i++) { size_t elen = strlen (wsp->ws_env[i]); if (elen == len && memcmp (wsp->ws_env[i], name, elen) == 0) return wsp->ws_env[i + 1]; /* Skip the value. Break the loop if it is NULL. */ i++; if (wsp->ws_env[i] == NULL) break; } } else { /* Usual (A=B) environment. */ for (i = 0; wsp->ws_env[i]; i++) { size_t j; const char *var = wsp->ws_env[i]; for (j = 0; j < len; j++) if (name[j] != var[j]) break; if (j == len && var[j] == '=') return var + j + 1; } } return NULL; } static int wsplt_env_lookup (struct wordsplit *wsp, const char *name, size_t len, char **ret) { if (wsp->ws_flags & WRDSF_ENV) { char const *val = wsplt_env_find (wsp, name, len); if (val) { char *retval = strdup (val); if (!retval) return WRDSE_NOSPACE; *ret = retval; return WRDSE_OK; } } return WRDSE_UNDEF; } static int wsplt_env_getvar (struct wordsplit *wsp, const char *name, size_t len, char **ret) { return wsp->ws_getvar (ret, name, len, wsp->ws_closure); } static int wsplt_assign_var (struct wordsplit *wsp, const char *name, size_t namelen, char const *value) { int n = (wsp->ws_flags & WRDSF_ENV_KV) ? 2 : 1; char *v; if (wsp->ws_envidx + n >= wsp->ws_envsiz) { size_t sz; char **newenv; if (!wsp->ws_envbuf) { if (wsp->ws_flags & WRDSF_ENV) { size_t i = 0, j; if (wsp->ws_env) { for (; wsp->ws_env[i]; i++) ; } sz = i + n + 1; newenv = calloc (sz, sizeof(newenv[0])); if (!newenv) return _wsplt_nomem (wsp); for (j = 0; j < i; j++) { newenv[j] = strdup (wsp->ws_env[j]); if (!newenv[j]) { for (; j > 1; j--) free (newenv[j-1]); free (newenv); return _wsplt_nomem (wsp); } } newenv[j] = NULL; wsp->ws_envbuf = newenv; wsp->ws_envidx = i; wsp->ws_envsiz = sz; wsp->ws_env = (const char**) wsp->ws_envbuf; } else { newenv = calloc (WORDSPLIT_ENV_INIT, sizeof(newenv[0])); if (!newenv) return _wsplt_nomem (wsp); wsp->ws_envbuf = newenv; wsp->ws_envidx = 0; wsp->ws_envsiz = WORDSPLIT_ENV_INIT; wsp->ws_env = (const char**) wsp->ws_envbuf; wsp->ws_flags |= WRDSF_ENV; } } else { size_t n = wsp->ws_envsiz; if ((size_t) -1 / 3 * 2 / sizeof (wsp->ws_envbuf[0]) <= n) return _wsplt_nomem (wsp); n += (n + 1) / 2; newenv = realloc (wsp->ws_envbuf, n * sizeof (wsp->ws_envbuf[0])); if (!newenv) return _wsplt_nomem (wsp); wsp->ws_envbuf = newenv; wsp->ws_envsiz = n; wsp->ws_env = (const char**) wsp->ws_envbuf; } } if (wsp->ws_flags & WRDSF_ENV_KV) { /* A key-value pair environment */ char *p = malloc (namelen + 1); if (!p) return _wsplt_nomem (wsp); memcpy (p, name, namelen); p[namelen] = 0; v = strdup (value); if (!v) { free (p); return _wsplt_nomem (wsp); } wsp->ws_env[wsp->ws_envidx++] = p; wsp->ws_env[wsp->ws_envidx++] = v; } else { v = malloc (namelen + strlen(value) + 2); if (!v) return _wsplt_nomem (wsp); memcpy (v, name, namelen); v[namelen++] = '='; strcpy(v + namelen, value); wsp->ws_env[wsp->ws_envidx++] = v; } wsp->ws_env[wsp->ws_envidx] = NULL; return WRDSE_OK; } static int wsplt_assign_param (struct wordsplit *wsp, int param_idx, char *value) { char *v; if (param_idx < 0) return _wsplt_seterr (wsp, WRDSE_BADPARAM); if (param_idx == wsp->ws_paramc) { char **parambuf; if (!wsp->ws_parambuf) { size_t i; parambuf = calloc ((size_t)param_idx + 1, sizeof (parambuf[0])); if (!parambuf) return _wsplt_nomem (wsp); for (i = 0; i < wsp->ws_paramc; i++) { parambuf[i] = strdup (wsp->ws_paramv[i]); if (!parambuf[i]) { for (; i > 1; i--) free (parambuf[i-1]); free (parambuf); return _wsplt_nomem (wsp); } } wsp->ws_parambuf = parambuf; wsp->ws_paramidx = param_idx; wsp->ws_paramsiz = param_idx + 1; } else { size_t n = wsp->ws_paramsiz; if ((size_t) -1 / 3 * 2 / sizeof (wsp->ws_parambuf[0]) <= n) return _wsplt_nomem (wsp); n += (n + 1) / 2; parambuf = realloc (wsp->ws_parambuf, n * sizeof (wsp->ws_parambuf[0])); if (!parambuf) return _wsplt_nomem (wsp); wsp->ws_parambuf = parambuf; wsp->ws_paramsiz = n; wsp->ws_parambuf[param_idx] = NULL; } wsp->ws_paramv = (const char**) wsp->ws_parambuf; wsp->ws_paramc = param_idx + 1; } else if (param_idx > wsp->ws_paramc) return _wsplt_seterr (wsp, WRDSE_BADPARAM); v = strdup (value); if (!v) return _wsplt_nomem (wsp); free (wsp->ws_parambuf[param_idx]); wsp->ws_parambuf[param_idx] = v; return WRDSE_OK; } /* Recover from what looked like a variable reference, but turned out not to be one. STR points to first character after '$'. */ static int expvar_recover (struct wordsplit *wsp, const char *str, struct wordsplit_node **ptail, const char **pend, int flg) { struct wordsplit_node *newnode; if (wsnode_new (wsp, &newnode)) return 1; wsnode_insert (wsp, newnode, *ptail, 0); *ptail = newnode; newnode->flags = _WSNF_WORD | flg; newnode->v.word = malloc (3); if (!newnode->v.word) return _wsplt_nomem (wsp); newnode->v.word[0] = '$'; newnode->v.word[1] = str[0]; newnode->v.word[2] = 0; *pend = str; return 0; } static int expand_paramv (struct wordsplit *wsp, struct wordsplit_node **ptail, int flg, int q) { struct wordsplit ws; int wsflags = WRDSF_NOVAR | WRDSF_NOCMD | WRDSF_QUOTE | (WSP_RETURN_DELIMS (wsp) ? WRDSF_RETURN_DELIMS : 0) | (q ? WRDSF_NOSPLIT : 0); size_t i; struct wordsplit_node *tail = *ptail; for (i = 0; i < wsp->ws_paramc; i++) { struct wordsplit_node *np; int rc = _wsplt_subsplit (wsp, &ws, wsp->ws_paramv[i], strlen (wsp->ws_paramv[i]), wsflags, q); if (rc) { _wsplt_seterr_sub (wsp, &ws); wordsplit_free (&ws); return 1; } if (q) { if (wsnode_new (wsp, &np)) return 1; wsnode_insert (wsp, np, *ptail, 0); *ptail = np; np->flags = _WSNF_WORD | _WSNF_NOEXPAND | flg; np->v.word = ws.ws_wordv[0]; ws.ws_wordv[0] = NULL; } else { for (np = ws.ws_head; np; np = np->next) np->flags = _WSNF_WORD | _WSNF_NOEXPAND | flg; wsnode_insert (wsp, ws.ws_head, *ptail, 0); *ptail = ws.ws_tail; ws.ws_head = ws.ws_tail = NULL; } wsflags |= WRDSF_REUSE; } if (wsflags & WRDSF_REUSE) wordsplit_free (&ws); if (flg & _WSNF_QUOTE) { tail = tail->next; /* Insert delimiters, mark nodes as joinable */ while (tail != *ptail) { struct wordsplit_node *next = tail->next; struct wordsplit_node *newnode; tail->flags |= _WSNF_JOIN; if (wsnode_new (wsp, &newnode)) return 1; newnode->flags = _WSNF_WORD | _WSNF_CONST | _WSNF_NOEXPAND | _WSNF_JOIN; newnode->v.word = wsp->ws_sep; wsnode_insert (wsp, newnode, tail, 0); tail = next; } } return 0; } static int expvar (struct wordsplit *wsp, const char *str, size_t len, struct wordsplit_node **ptail, const char **pend, int flg) { size_t i = 0; const char *defstr = NULL; char *value; struct wordsplit_node *newnode; const char *start = str - 1; int rc; struct wordsplit ws; int is_param = 0; long param_idx = 0; if (ISVARBEG (str[0])) { for (i = 1; i < len; i++) if (!ISVARCHR (str[i])) break; *pend = str + i - 1; } else if ((wsp->ws_options & WRDSO_PARAMV) && ISDIGIT (str[0])) { i = 1; *pend = str; is_param = 1; param_idx = to_num (str[0]); } else if ((wsp->ws_options & WRDSO_PARAMV) && str[0] == '#') { char b[16]; snprintf (b, sizeof(b), "%d", (int) wsp->ws_paramc); value = strdup (b); if (!value) return _wsplt_nomem (wsp); if (wsnode_new (wsp, &newnode)) return 1; wsnode_insert (wsp, newnode, *ptail, 0); *ptail = newnode; newnode->flags = _WSNF_WORD | _WSNF_NOEXPAND | flg; newnode->v.word = value; return 0; } else if ((wsp->ws_options & WRDSO_PARAMV) && str[0] == '*') { return expand_paramv (wsp, ptail, flg, 0); } else if ((wsp->ws_options & WRDSO_PARAMV) && str[0] == '@') { return expand_paramv (wsp, ptail, flg, 1); } else if (str[0] == '{' && (ISVARBEG (str[1]) || (is_param = (((wsp->ws_options & WRDSO_PARAMV) && ISDIGIT (str[1])) || ((wsp->ws_options & WRDSO_PARAM_NEGIDX) && (str[1] == '-' && ISDIGIT (str[2]))))) != 0)) { str++; len--; for (i = str[0] == '-' ? 1 : 0; i < len; i++) { if (str[i] == ':') { size_t j; defstr = str + i + 1; if (find_closing_paren (str, i + 1, len, &j, "{}")) return _wsplt_seterr (wsp, WRDSE_CBRACE); *pend = str + j; break; } else if (str[i] == '}') { defstr = NULL; *pend = str + i; break; } else if (strchr ("-+?=", str[i])) { size_t j; defstr = str + i; if (find_closing_paren (str, i, len, &j, "{}")) return _wsplt_seterr (wsp, WRDSE_CBRACE); *pend = str + j; break; } else if (is_param) { if (ISDIGIT (str[i])) { param_idx = param_idx * 10 + to_num (str[i]); if ((str[0] == '-' && -param_idx < INT_MIN) || param_idx > INT_MAX) return expvar_recover (wsp, str - 1, ptail, pend, flg); } else { return expvar_recover (wsp, str - 1, ptail, pend, flg); } } else if (!ISVARCHR (str[i])) { return expvar_recover (wsp, str - 1, ptail, pend, flg); } } if (is_param && str[0] == '-') param_idx = wsp->ws_paramc - param_idx; if (i == len) return _wsplt_seterr (wsp, WRDSE_CBRACE); } else { return expvar_recover (wsp, str, ptail, pend, flg); } /* Actually expand the variable */ /* str - start of the variable name i - its length defstr - default replacement str */ if (defstr && strchr("-+?=", defstr[0]) == 0) { rc = WRDSE_UNDEF; defstr = NULL; } else { if (is_param) { if (param_idx >= 0 && param_idx < wsp->ws_paramc) { value = strdup (wsp->ws_paramv[param_idx]); if (!value) rc = WRDSE_NOSPACE; else rc = WRDSE_OK; } else rc = WRDSE_UNDEF; } else { if (wsp->ws_flags & WRDSF_GETVAR) { if (wsp->ws_options & WRDSO_GETVARPREF) { rc = wsplt_env_getvar (wsp, str, i, &value); if (rc == WRDSE_UNDEF) rc = wsplt_env_lookup (wsp, str, i, &value); } else { rc = wsplt_env_lookup (wsp, str, i, &value); if (rc == WRDSE_UNDEF) rc = wsplt_env_getvar (wsp, str, i, &value); } } else rc = wsplt_env_lookup (wsp, str, i, &value); } if (rc == WRDSE_OK && (!value || value[0] == 0) && defstr && defstr[-1] == ':') { free (value); rc = WRDSE_UNDEF; } } switch (rc) { case WRDSE_OK: if (defstr && *defstr == '+') { size_t size = *pend - ++defstr; rc = _wsplt_subsplit (wsp, &ws, defstr, size, WRDSF_NOSPLIT | WRDSF_WS | WRDSF_QUOTE | (wsp->ws_flags & (WRDSF_NOVAR | WRDSF_NOCMD)), 1); if (rc) return rc; free (value); value = ws.ws_wordv[0]; ws.ws_wordv[0] = NULL; wordsplit_free (&ws); } break; case WRDSE_UNDEF: if (defstr) { size_t size; if (*defstr == '-' || *defstr == '=') { size = *pend - ++defstr; rc = _wsplt_subsplit (wsp, &ws, defstr, size, WRDSF_NOSPLIT | WRDSF_WS | WRDSF_QUOTE | (wsp->ws_flags & (WRDSF_NOVAR | WRDSF_NOCMD)), 1); if (rc) return rc; value = ws.ws_wordv[0]; ws.ws_wordv[0] = NULL; wordsplit_free (&ws); if (defstr[-1] == '=') { if (is_param) rc = wsplt_assign_param (wsp, param_idx, value); else rc = wsplt_assign_var (wsp, str, i, value); } if (rc) { free (value); return rc; } } else { if (*defstr == '?') { size = *pend - ++defstr; if (size == 0) wsp->ws_error (_("%.*s: variable null or not set"), (int) i, str); else { rc = _wsplt_subsplit (wsp, &ws, defstr, size, WRDSF_NOSPLIT | WRDSF_WS | WRDSF_QUOTE | (wsp->ws_flags & (WRDSF_NOVAR | WRDSF_NOCMD)), 1); if (rc == 0) wsp->ws_error ("%.*s: %s", (int) i, str, ws.ws_wordv[0]); else wsp->ws_error ("%.*s: %.*s", (int) i, str, (int) size, defstr); wordsplit_free (&ws); } } value = NULL; } } else if (wsp->ws_flags & WRDSF_UNDEF) { _wsplt_setctxerr (wsp, WRDSE_UNDEF, str, *pend - str + 1); return 1; } else { if (wsp->ws_flags & WRDSF_WARNUNDEF) wsp->ws_error (_("warning: undefined variable `%.*s'"), (int) i, str); if (wsp->ws_flags & WRDSF_KEEPUNDEF) value = NULL; else { value = strdup (""); if (!value) return _wsplt_nomem (wsp); } } break; case WRDSE_NOSPACE: return _wsplt_nomem (wsp); case WRDSE_USERERR: if (wsp->ws_errno == WRDSE_USERERR) free (wsp->ws_usererr); wsp->ws_usererr = value; /* fall through */ default: _wsplt_seterr (wsp, rc); return 1; } if (value) { if (flg & _WSNF_QUOTE) { if (wsnode_new (wsp, &newnode)) return 1; wsnode_insert (wsp, newnode, *ptail, 0); *ptail = newnode; newnode->flags = _WSNF_WORD | _WSNF_NOEXPAND | flg; newnode->v.word = value; } else if (*value == 0) { free (value); /* Empty string is a special case */ if (wsnode_new (wsp, &newnode)) return 1; wsnode_insert (wsp, newnode, *ptail, 0); *ptail = newnode; newnode->flags = _WSNF_NULL; } else { struct wordsplit ws; int rc; rc = _wsplt_subsplit (wsp, &ws, value, strlen (value), WRDSF_NOVAR | WRDSF_NOCMD | WRDSF_QUOTE | (WSP_RETURN_DELIMS (wsp) ? WRDSF_RETURN_DELIMS : 0) , 0); free (value); if (rc) { _wsplt_seterr_sub (wsp, &ws); wordsplit_free (&ws); return 1; } wsnode_insert (wsp, ws.ws_head, *ptail, 0); *ptail = ws.ws_tail; ws.ws_head = ws.ws_tail = NULL; wordsplit_free (&ws); } } else if (wsp->ws_flags & WRDSF_KEEPUNDEF) { size_t size = *pend - start + 1; if (wsnode_new (wsp, &newnode)) return 1; wsnode_insert (wsp, newnode, *ptail, 0); *ptail = newnode; newnode->flags = _WSNF_WORD | _WSNF_NOEXPAND | flg; newnode->v.word = malloc (size + 1); if (!newnode->v.word) return _wsplt_nomem (wsp); memcpy (newnode->v.word, start, size); newnode->v.word[size] = 0; } else { if (wsnode_new (wsp, &newnode)) return 1; wsnode_insert (wsp, newnode, *ptail, 0); *ptail = newnode; newnode->flags = _WSNF_NULL; } return 0; } static int begin_var_p (int c) { return memchr ("{#@*", c, 4) != NULL || ISVARBEG (c) || ISDIGIT (c); } static int node_expand (struct wordsplit *wsp, struct wordsplit_node *node, int (*beg_p) (int), int (*ws_exp_fn) (struct wordsplit *wsp, const char *str, size_t len, struct wordsplit_node **ptail, const char **pend, int flg)) { const char *str = wsnode_ptr (wsp, node); size_t slen = wsnode_len (node); const char *end = str + slen; const char *p; size_t off = 0; struct wordsplit_node *tail = node; for (p = str; p < end; p++) { if (*p == '\\') { p++; continue; } if (*p == '$' && beg_p (p[1])) { size_t n = p - str; if (tail != node) tail->flags |= _WSNF_JOIN; if (node_split_prefix (wsp, &tail, node, off, n, _WSNF_JOIN)) return 1; p++; if (ws_exp_fn (wsp, p, slen - n, &tail, &p, node->flags & (_WSNF_JOIN | _WSNF_QUOTE))) return 1; off += p - str + 1; str = p + 1; } } if (p > str) { if (tail != node) tail->flags |= _WSNF_JOIN; if (node_split_prefix (wsp, &tail, node, off, p - str, node->flags & (_WSNF_JOIN|_WSNF_QUOTE))) return 1; } if (tail != node) { wsnode_remove (wsp, node); wsnode_free (node); } return 0; } /* Remove NULL nodes from the list */ static void wsnode_nullelim (struct wordsplit *wsp) { struct wordsplit_node *p; for (p = wsp->ws_head; p;) { struct wordsplit_node *next = p->next; if (p->flags & _WSNF_DELIM && p->prev) p->prev->flags &= ~_WSNF_JOIN; if (p->flags & _WSNF_NULL) { wsnode_remove (wsp, p); wsnode_free (p); } p = next; } } static int wordsplit_varexp (struct wordsplit *wsp) { struct wordsplit_node *p; for (p = wsp->ws_head; p;) { struct wordsplit_node *next = p->next; if (!(p->flags & (_WSNF_NOEXPAND|_WSNF_DELIM))) if (node_expand (wsp, p, begin_var_p, expvar)) return 1; p = next; } wsnode_nullelim (wsp); return 0; } static int begin_cmd_p (int c) { return c == '('; } static int expcmd (struct wordsplit *wsp, const char *str, size_t len, struct wordsplit_node **ptail, const char **pend, int flg) { int rc; size_t j; char *value; struct wordsplit_node *newnode; struct wordsplit ws; str++; len--; if (find_closing_paren (str, 0, len, &j, "()")) { _wsplt_seterr (wsp, WRDSE_PAREN); return 1; } *pend = str + j; rc = _wsplt_subsplit (wsp, &ws, str, j, WRDSF_WS | WRDSF_QUOTE, 1); if (rc) { _wsplt_seterr_sub (wsp, &ws); wordsplit_free (&ws); return 1; } rc = wsp->ws_command (&value, str, j, ws.ws_wordv, wsp->ws_closure); wordsplit_free (&ws); if (rc == WRDSE_NOSPACE) return _wsplt_nomem (wsp); else if (rc) { if (rc == WRDSE_USERERR) { if (wsp->ws_errno == WRDSE_USERERR) free (wsp->ws_usererr); wsp->ws_usererr = value; } _wsplt_seterr (wsp, rc); return 1; } if (value) { if (flg & _WSNF_QUOTE) { if (wsnode_new (wsp, &newnode)) return 1; wsnode_insert (wsp, newnode, *ptail, 0); *ptail = newnode; newnode->flags = _WSNF_WORD | _WSNF_NOEXPAND | flg; newnode->v.word = value; } else if (*value == 0) { free (value); /* Empty string is a special case */ if (wsnode_new (wsp, &newnode)) return 1; wsnode_insert (wsp, newnode, *ptail, 0); *ptail = newnode; newnode->flags = _WSNF_NULL; } else { struct wordsplit ws; int rc; rc = _wsplt_subsplit (wsp, &ws, value, strlen (value), WRDSF_NOVAR | WRDSF_NOCMD | WRDSF_WS | WRDSF_QUOTE | (WSP_RETURN_DELIMS (wsp) ? WRDSF_RETURN_DELIMS : 0), 0); free (value); if (rc) { _wsplt_seterr_sub (wsp, &ws); wordsplit_free (&ws); return 1; } wsnode_insert (wsp, ws.ws_head, *ptail, 0); *ptail = ws.ws_tail; ws.ws_head = ws.ws_tail = NULL; wordsplit_free (&ws); } } else { if (wsnode_new (wsp, &newnode)) return 1; wsnode_insert (wsp, newnode, *ptail, 0); *ptail = newnode; newnode->flags = _WSNF_NULL; } return 0; } static int wordsplit_cmdexp (struct wordsplit *wsp) { struct wordsplit_node *p; for (p = wsp->ws_head; p;) { struct wordsplit_node *next = p->next; if (!(p->flags & _WSNF_NOEXPAND)) if (node_expand (wsp, p, begin_cmd_p, expcmd)) return 1; p = next; } wsnode_nullelim (wsp); return 0; } /* Strip off any leading and trailing whitespace. This function is called right after the initial scanning, therefore it assumes that every node in the list is a text reference node. */ static int wordsplit_trimws (struct wordsplit *wsp) { struct wordsplit_node *p; for (p = wsp->ws_head; p; p = p->next) { size_t n; if (!(p->flags & _WSNF_QUOTE)) { /* Skip leading whitespace: */ for (n = p->v.segm.beg; n < p->v.segm.end && ISWS (wsp->ws_input[n]); n++) ; p->v.segm.beg = n; } while (p->next && (p->flags & _WSNF_JOIN)) p = p->next; if (p->flags & _WSNF_QUOTE) continue; /* Trim trailing whitespace */ for (n = p->v.segm.end; n > p->v.segm.beg && ISWS (wsp->ws_input[n - 1]); n--); p->v.segm.end = n; if (p->v.segm.beg == p->v.segm.end) p->flags |= _WSNF_NULL; } wsnode_nullelim (wsp); return 0; } static int wordsplit_tildexpand (struct wordsplit *wsp) { struct wordsplit_node *p; char *uname = NULL; size_t usize = 0; for (p = wsp->ws_head; p; p = p->next) { const char *str; if (p->flags & _WSNF_QUOTE) continue; str = wsnode_ptr (wsp, p); if (str[0] == '~') { size_t i, size, dlen; size_t slen = wsnode_len (p); struct passwd *pw; char *newstr; for (i = 1; i < slen && str[i] != '/'; i++) ; if (i == slen) continue; if (i > 1) { if (i > usize) { char *p = realloc (uname, i); if (!p) { free (uname); return _wsplt_nomem (wsp); } uname = p; usize = i; } --i; memcpy (uname, str + 1, i); uname[i] = 0; pw = getpwnam (uname); } else pw = getpwuid (getuid ()); if (!pw) continue; dlen = strlen (pw->pw_dir); size = slen - i + dlen; newstr = malloc (size); if (!newstr) { free (uname); return _wsplt_nomem (wsp); } --size; memcpy (newstr, pw->pw_dir, dlen); memcpy (newstr + dlen, str + i + 1, slen - i - 1); newstr[size] = 0; if (p->flags & _WSNF_WORD) free (p->v.word); p->v.word = newstr; p->flags |= _WSNF_WORD; } } free (uname); return 0; } static int isglob (const char *s, int l) { while (l--) { if (strchr ("*?[", *s++)) return 1; } return 0; } static int wordsplit_pathexpand (struct wordsplit *wsp) { struct wordsplit_node *p, *next; char *pattern = NULL; size_t patsize = 0; size_t slen; int flags = 0; #ifdef GLOB_PERIOD if (wsp->ws_options & WRDSO_DOTGLOB) flags = GLOB_PERIOD; #endif for (p = wsp->ws_head; p; p = next) { const char *str; next = p->next; if (p->flags & _WSNF_QUOTE) continue; str = wsnode_ptr (wsp, p); slen = wsnode_len (p); if (isglob (str, slen)) { int i; glob_t g; struct wordsplit_node *prev; if (slen + 1 > patsize) { char *p = realloc (pattern, slen + 1); if (!p) return _wsplt_nomem (wsp); pattern = p; patsize = slen + 1; } memcpy (pattern, str, slen); pattern[slen] = 0; switch (glob (pattern, flags, NULL, &g)) { case 0: break; case GLOB_NOSPACE: free (pattern); return _wsplt_nomem (wsp); case GLOB_NOMATCH: if (wsp->ws_options & WRDSO_NULLGLOB) { wsnode_remove (wsp, p); wsnode_free (p); } else if (wsp->ws_options & WRDSO_FAILGLOB) { char buf[128]; if (wsp->ws_errno == WRDSE_USERERR) free (wsp->ws_usererr); snprintf (buf, sizeof (buf), _("no files match pattern %s"), pattern); free (pattern); wsp->ws_usererr = strdup (buf); if (!wsp->ws_usererr) return _wsplt_nomem (wsp); else return _wsplt_seterr (wsp, WRDSE_USERERR); } continue; default: free (pattern); return _wsplt_setctxerr (wsp, WRDSE_GLOBERR, pattern, slen); } prev = p; for (i = 0; i < g.gl_pathc; i++) { struct wordsplit_node *newnode; char *newstr; if (wsnode_new (wsp, &newnode)) return 1; newstr = strdup (g.gl_pathv[i]); if (!newstr) return _wsplt_nomem (wsp); newnode->v.word = newstr; newnode->flags |= _WSNF_WORD|_WSNF_QUOTE; wsnode_insert (wsp, newnode, prev, 0); prev = newnode; } globfree (&g); wsnode_remove (wsp, p); wsnode_free (p); } } free (pattern); return 0; } static int skip_sed_expr (const char *command, size_t i, size_t len) { int state; do { int delim; if (command[i] == ';') i++; if (!(command[i] == 's' && i + 3 < len && ISPUNCT (command[i + 1]))) break; delim = command[++i]; state = 1; for (i++; i < len; i++) { if (state == 3) { if (command[i] == delim || !ISALNUM (command[i])) break; } else if (command[i] == '\\') i++; else if (command[i] == delim) state++; } } while (state == 3 && i < len && command[i] == ';'); return i; } /* wsp->ws_endp points to a delimiter character. If RETURN_DELIMS is true, return its value, otherwise return the index past it. */ static inline size_t skip_delim_internal (struct wordsplit *wsp, int return_delims) { return return_delims ? wsp->ws_endp : wsp->ws_endp + 1; } static inline size_t skip_delim (struct wordsplit *wsp) { return skip_delim_internal (wsp, WSP_RETURN_DELIMS (wsp)); } static inline size_t skip_delim_real (struct wordsplit *wsp) { return skip_delim_internal (wsp, wsp->ws_flags & WRDSF_RETURN_DELIMS); } #define _WRDS_EOF 0 #define _WRDS_OK 1 #define _WRDS_ERR 2 static int scan_qstring (struct wordsplit *wsp, size_t start, size_t *end) { size_t j; const char *command = wsp->ws_input; size_t len = wsp->ws_len; char q = command[start]; for (j = start + 1; j < len && command[j] != q; j++) if (q == '"' && command[j] == '\\') j++; if (j < len && command[j] == q) { int flags = _WSNF_QUOTE | _WSNF_EMPTYOK; if (q == '\'') flags |= _WSNF_NOEXPAND; if (wordsplit_add_segm (wsp, start + 1, j, flags)) return _WRDS_ERR; *end = j; } else { wsp->ws_endp = start; _wsplt_seterr (wsp, WRDSE_QUOTE); return _WRDS_ERR; } return 0; } static int scan_word (struct wordsplit *wsp, size_t start, int consume_all) { size_t len = wsp->ws_len; const char *command = wsp->ws_input; const char *comment = wsp->ws_comment; int join = 0; int flags = 0; struct wordsplit_node *np = wsp->ws_tail; size_t i = start; if (i >= len) { wsp->ws_errno = WRDSE_EOF; return _WRDS_EOF; } start = i; if (wsp->ws_flags & WRDSF_SED_EXPR && command[i] == 's' && i + 3 < len && ISPUNCT (command[i + 1])) { flags = _WSNF_SEXP; i = skip_sed_expr (command, i, len); } else if (consume_all || !ISDELIM (wsp, command[i])) { while (i < len) { if (comment && strchr (comment, command[i]) != NULL) { size_t j; for (j = i + 1; j < len && command[j] != '\n'; j++) ; if (wordsplit_add_segm (wsp, start, i, 0)) return _WRDS_ERR; wsp->ws_endp = j; return _WRDS_OK; } if (wsp->ws_flags & WRDSF_QUOTE) { if (command[i] == '\\') { if (++i == len) break; i++; continue; } if (((wsp->ws_flags & WRDSF_SQUOTE) && command[i] == '\'') || ((wsp->ws_flags & WRDSF_DQUOTE) && command[i] == '"')) { if (join && wsp->ws_tail) wsp->ws_tail->flags |= _WSNF_JOIN; if (wordsplit_add_segm (wsp, start, i, _WSNF_JOIN)) return _WRDS_ERR; if (scan_qstring (wsp, i, &i)) return _WRDS_ERR; start = i + 1; join = 1; } } if (command[i] == '$') { if ((!(wsp->ws_flags & WRDSF_NOVAR) || (wsp->ws_options & WRDSO_NOVARSPLIT)) && command[i+1] == '{' && find_closing_paren (command, i + 2, len, &i, "{}") == 0) continue; if ((!(wsp->ws_flags & WRDSF_NOCMD) || (wsp->ws_options & WRDSO_NOCMDSPLIT)) && command[i+1] == '(' && find_closing_paren (command, i + 2, len, &i, "()") == 0) continue; } if (!consume_all && ISDELIM (wsp, command[i])) break; else i++; } } else if (WSP_RETURN_DELIMS (wsp)) { i++; flags |= _WSNF_DELIM; } else if (!(wsp->ws_flags & WRDSF_SQUEEZE_DELIMS)) flags |= _WSNF_EMPTYOK; if (join && i > start && wsp->ws_tail) wsp->ws_tail->flags |= _WSNF_JOIN; if (wordsplit_add_segm (wsp, start, i, flags)) return _WRDS_ERR; wsp->ws_endp = i; if (wsp->ws_flags & WRDSF_INCREMENTAL) return _WRDS_EOF; if (consume_all) { if (!np) np = wsp->ws_head; while (np) { np->flags |= _WSNF_QUOTE; np = np->next; } } return _WRDS_OK; } static int xtonum (int *pval, const char *src, int base, int cnt) { int i, val; for (i = 0, val = 0; i < cnt; i++, src++) { int n = *(unsigned char *) src; if (n > 127 || (n = to_num (n)) >= base) break; val = val * base + n; } *pval = val; return i; } size_t wordsplit_c_quoted_length (const char *str, int quote_hex, int *quote) { size_t len = 0; *quote = 0; for (; *str; str++) { if (strchr (" \"", *str)) *quote = 1; if (*str == ' ') len++; else if (*str == '"') len += 2; else if (*str != '\t' && *str != '\\' && ISPRINT (*str)) len++; else if (quote_hex) len += 3; else { if (wordsplit_c_quote_char (*str)) len += 2; else len += 4; } } return len; } static int wsplt_unquote_char (const char *transtab, int c) { while (*transtab && transtab[1]) { if (*transtab++ == c) return *transtab; ++transtab; } return 0; } static int wsplt_quote_char (const char *transtab, int c) { for (; *transtab && transtab[1]; transtab += 2) { if (transtab[1] == c) return *transtab; } return 0; } int wordsplit_c_unquote_char (int c) { return wsplt_unquote_char (wordsplit_c_escape_tab, c); } int wordsplit_c_quote_char (int c) { return wsplt_quote_char (wordsplit_c_escape_tab, c); } void wordsplit_string_unquote_copy (struct wordsplit *ws, int inquote, char *dst, const char *src, size_t n) { int i = 0; int c; inquote = !!inquote; while (i < n) { if (src[i] == '\\') { ++i; if (WRDSO_ESC_TEST (ws, inquote, WRDSO_XESC) && (src[i] == 'x' || src[i] == 'X')) { if (n - i < 2) { *dst++ = '\\'; *dst++ = src[i++]; } else { int off = xtonum (&c, src + i + 1, 16, 2); if (off == 0) { *dst++ = '\\'; *dst++ = src[i++]; } else { *dst++ = c; i += off + 1; } } } else if (WRDSO_ESC_TEST (ws, inquote, WRDSO_OESC) && (unsigned char) src[i] < 128 && ISDIGIT (src[i])) { if (n - i < 1) { *dst++ = '\\'; *dst++ = src[i++]; } else { int off = xtonum (&c, src + i, 8, 3); if (off == 0) { *dst++ = '\\'; *dst++ = src[i++]; } else { *dst++ = c; i += off; } } } else if ((c = wsplt_unquote_char (ws->ws_escape[inquote], src[i]))) { *dst++ = c; ++i; } else { if (WRDSO_ESC_TEST (ws, inquote, WRDSO_BSKEEP)) *dst++ = '\\'; *dst++ = src[i++]; } } else *dst++ = src[i++]; } *dst = 0; } void wordsplit_c_quote_copy (char *dst, const char *src, int quote_hex) { for (; *src; src++) { if (*src == '"') { *dst++ = '\\'; *dst++ = *src; } else if (*src != '\t' && *src != '\\' && ISPRINT (*src)) *dst++ = *src; else { char tmp[4]; if (quote_hex) { snprintf (tmp, sizeof tmp, "%%%02X", *(unsigned char *) src); memcpy (dst, tmp, 3); dst += 3; } else { int c = wordsplit_c_quote_char (*src); *dst++ = '\\'; if (c) *dst++ = c; else { snprintf (tmp, sizeof tmp, "%03o", *(unsigned char *) src); memcpy (dst, tmp, 3); dst += 3; } } } } } /* This structure describes a single expansion phase */ struct exptab { char const *descr; /* Textual description (for debugging) */ int flag; /* WRDSF_ bit that controls this phase */ int opt; /* Entry-specific options (see EXPOPT_ flags below */ int (*expansion) (struct wordsplit *wsp); /* expansion function */ }; /* The following options control expansions: */ /* Normally the exptab entry is run if its flag bit is set in struct wordsplit. The EXPOPT_NEG option negates this test so that expansion is performed if its associated flag bit is not set in struct wordsplit. */ #define EXPOPT_NEG 0x01 /* All bits in flag must be set in order for entry to match */ #define EXPORT_ALLOF 0x02 /* Coalesce the input list before running the expansion. */ #define EXPOPT_COALESCE 0x04 static struct exptab exptab[] = { { N_("WS trimming"), WRDSF_WS, 0, wordsplit_trimws }, { N_("command substitution"), WRDSF_NOCMD, EXPOPT_NEG|EXPOPT_COALESCE, wordsplit_cmdexp }, { N_("coalesce list"), 0, EXPOPT_NEG|EXPOPT_COALESCE, NULL }, { N_("tilde expansion"), WRDSF_PATHEXPAND, 0, wordsplit_tildexpand }, { N_("variable expansion"), WRDSF_NOVAR, EXPOPT_NEG, wordsplit_varexp }, { N_("quote removal"), 0, EXPOPT_NEG, wsnode_quoteremoval }, { N_("coalesce list"), 0, EXPOPT_NEG|EXPOPT_COALESCE, NULL }, { N_("path expansion"), WRDSF_PATHEXPAND, 0, wordsplit_pathexpand }, { NULL } }; static inline int exptab_matches(struct exptab *p, struct wordsplit *wsp) { int result; result = (wsp->ws_flags & p->flag); if (p->opt & EXPORT_ALLOF) result = result == p->flag; if (p->opt & EXPOPT_NEG) result = !result; return result; } static int wordsplit_process_list (struct wordsplit *wsp, size_t start) { struct exptab *p; if (wsp->ws_flags & WRDSF_SHOWDBG) wsp->ws_debug (_("(%02d) Input:%.*s;"), wsp->ws_lvl, (int) wsp->ws_len, wsp->ws_input); if ((wsp->ws_flags & WRDSF_NOSPLIT) || ((wsp->ws_options & WRDSO_MAXWORDS) && wsp->ws_wordi + 1 == wsp->ws_maxwords)) { /* Treat entire input as a single word */ if (scan_word (wsp, start, 1) == _WRDS_ERR) return wsp->ws_errno; } else { int rc; while ((rc = scan_word (wsp, start, 0)) == _WRDS_OK) start = skip_delim (wsp); /* Make sure tail element is not joinable */ if (wsp->ws_tail) wsp->ws_tail->flags &= ~_WSNF_JOIN; if (rc == _WRDS_ERR) return wsp->ws_errno; } if (wsp->ws_flags & WRDSF_SHOWDBG) { wsp->ws_debug ("(%02d) %s", wsp->ws_lvl, _("Initial list:")); wordsplit_dump_nodes (wsp); } for (p = exptab; p->descr; p++) { if (exptab_matches(p, wsp)) { if (p->opt & EXPOPT_COALESCE) { if (wsnode_coalesce (wsp)) break; if (wsp->ws_flags & WRDSF_SHOWDBG) { wsp->ws_debug ("(%02d) %s", wsp->ws_lvl, _("Coalesced list:")); wordsplit_dump_nodes (wsp); } } if (p->expansion) { if (p->expansion (wsp)) break; if (wsp->ws_flags & WRDSF_SHOWDBG) { wsp->ws_debug ("(%02d) %s", wsp->ws_lvl, _(p->descr)); wordsplit_dump_nodes (wsp); } } } } return wsp->ws_errno; } static int wordsplit_run (const char *command, size_t length, struct wordsplit *wsp, int flags, int lvl) { int rc; size_t start; /* Initialize error context early */ wsp->ws_errctx = NULL; if (!command) { if (!(flags & WRDSF_INCREMENTAL)) return _wsplt_seterr (wsp, WRDSE_USAGE); if (wsp->ws_head) return wordsplit_finish (wsp); start = skip_delim_real (wsp); if (wsp->ws_endp == wsp->ws_len) return _wsplt_seterr (wsp, WRDSE_NOINPUT); wsp->ws_flags |= WRDSF_REUSE; wordsplit_init0 (wsp); } else { start = 0; rc = wordsplit_init (wsp, command, length, flags); if (rc) return rc; wsp->ws_lvl = lvl; } rc = wordsplit_process_list (wsp, start); if (rc) return rc; return wordsplit_finish (wsp); } int wordsplit_len (const char *command, size_t length, struct wordsplit *wsp, int flags) { return wordsplit_run (command, length, wsp, flags, 0); } int wordsplit (const char *command, struct wordsplit *ws, int flags) { return wordsplit_len (command, command ? strlen (command) : 0, ws, flags); } void wordsplit_free_words (struct wordsplit *ws) { size_t i; for (i = 0; i < ws->ws_wordc; i++) { char *p = ws->ws_wordv[ws->ws_offs + i]; if (p) { free (p); ws->ws_wordv[ws->ws_offs + i] = NULL; } } ws->ws_wordc = 0; } void wordsplit_free_envbuf (struct wordsplit *ws) { if (!(ws->ws_flags & WRDSF_ENV)) return; if (ws->ws_envbuf) { size_t i; for (i = 0; ws->ws_envbuf[i]; i++) free (ws->ws_envbuf[i]); free (ws->ws_envbuf); ws->ws_envidx = ws->ws_envsiz = 0; ws->ws_envbuf = NULL; } } void wordsplit_free_parambuf (struct wordsplit *ws) { if (!(ws->ws_options & WRDSO_PARAMV)) return; if (ws->ws_parambuf) { size_t i; for (i = 0; ws->ws_parambuf[i]; i++) free (ws->ws_parambuf[i]); free (ws->ws_parambuf); ws->ws_paramidx = ws->ws_paramsiz = 0; ws->ws_parambuf = NULL; } } void wordsplit_clearerr (struct wordsplit *ws) { if (ws->ws_errno == WRDSE_USERERR) free (ws->ws_usererr); ws->ws_usererr = NULL; free (ws->ws_errctx); ws->ws_errctx = NULL; ws->ws_errno = WRDSE_OK; } void wordsplit_free (struct wordsplit *ws) { if (ws->ws_errno == WRDSE_USAGE) /* Usage error: the structure is not properly initialized and there's nothing to free. */ return; wordsplit_clearerr (ws); wordsplit_free_nodes (ws); wordsplit_free_words (ws); free (ws->ws_wordv); ws->ws_wordv = NULL; wordsplit_free_envbuf (ws); wordsplit_free_parambuf (ws); } int wordsplit_get_words (struct wordsplit *ws, size_t *wordc, char ***wordv) { char **p = realloc (ws->ws_wordv, (ws->ws_wordc + 1) * sizeof (ws->ws_wordv[0])); if (!p) return -1; *wordv = p; *wordc = ws->ws_wordc; ws->ws_wordv = NULL; ws->ws_wordc = 0; ws->ws_wordn = 0; return 0; } const char *_wordsplit_errstr[] = { N_("no error"), N_("missing closing quote"), N_("memory exhausted"), N_("invalid wordsplit usage"), N_("unbalanced curly brace"), N_("undefined variable"), N_("input exhausted"), N_("unbalanced parenthesis"), N_("globbing error"), N_("user-defined error"), N_("invalid parameter number in assignment") }; int _wordsplit_nerrs = sizeof (_wordsplit_errstr) / sizeof (_wordsplit_errstr[0]); const char * wordsplit_strerror (struct wordsplit *ws) { if (ws->ws_errno == WRDSE_USERERR) return ws->ws_usererr; if (ws->ws_errno < _wordsplit_nerrs) return _wordsplit_errstr[ws->ws_errno]; return N_("unknown error"); } void wordsplit_perror (struct wordsplit *wsp) { switch (wsp->ws_errno) { case WRDSE_QUOTE: wsp->ws_error (_("missing closing %c (start near #%lu)"), wsp->ws_input[wsp->ws_endp], (unsigned long) wsp->ws_endp); break; default: if (wsp->ws_errctx) wsp->ws_error ("%s: %s", wordsplit_strerror (wsp), wsp->ws_errctx); else wsp->ws_error ("%s", wordsplit_strerror (wsp)); } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/wordsplit/wsp.c������������������������������������������������������������������0000644�0001750�0001750�00000044541�13511404003�017274� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* wsp - test program for wordsplit Copyright (C) 2014-2019 Sergey Poznyakoff Wordsplit 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. Wordsplit 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 wordsplit. If not, see <http://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include <stdlib.h> #include <stdio.h> #include <string.h> #include <assert.h> #include <errno.h> #include "wordsplit.h" #include "wordsplit-version.h" extern char **environ; char *progname; /* Global options */ enum { TRIMNL_OPTION = 0x01, /* Remove trailing newline */ PLAINTEXT_OPTION = 0x02 /* Print intput verbatim (no escapes) */ }; /* Environment types */ enum env_type { env_none, /* No environment */ env_null, /* Null environment */ env_sys /* Use system environment */ }; struct wsclosure { int options; /* Global options */ struct wordsplit ws; /* The wordsplit structure */ int wsflags; /* Wordsplit flags */ enum env_type env_type; /* Environment type */ int offarg; /* Index of the first of the initial words in the argv array. The ws.ws_dooffs field gives the number of such variables. Forces the WRDSF_DOOFFS flag. */ char **fenvbase; /* Environment for testing the ws_getenv function */ int fenvidx; /* Number of variables in fenvbase */ int fenvmax; /* Size of fenbase (entries) */ int append_start; /* First argument to append (index in argv) */ int append_count; /* Number of arguments to append */ }; /* Command line option types */ enum { ws_no_argument, /* Option requires no arguments */ ws_boolean, /* Option is boolean (can be prefixed with -no) */ ws_required_argument, /* Option requires one argument */ ws_multiple_arguments /* Option takes multiple arguments, terminated with "--" or end of argument list */ }; /* Structure describing a single command-line option */ struct wsopt { const char *name; /* Option name */ int tok; /* Corresponding flag */ int arg; /* Option type (see the enum above) */ void (*setfn) (int tok, int neg, char *arg, struct wsclosure *wsc); /* Setter function */ }; /* Index of the next argument in the argv */ static int wsoptind = -1; void print_version (void) { printf ("wsp (wordsplit %s)\n", WORDSPLIT_VERSION); } /* Parse next argument from the command line. Return EOF on end of arguments or when the "--" argument is seen. */ static int getwsopt (int argc, char **argv, struct wsopt *wso, struct wsclosure *wsc) { int negate = 0; char *opt; if (wsoptind == -1) wsoptind = 1; if (wsoptind == argc) return EOF; opt = argv[wsoptind++]; if (strcmp (opt, "--") == 0) return EOF; if (*opt != '-') { if (strchr (opt, '=')) { assert (wsc->fenvidx < wsc->fenvmax - 1); wsc->fenvbase[wsc->fenvidx++] = opt; return 0; } wsoptind--; return EOF; } if (strcmp (opt, "--version") == 0) { print_version (); exit (0); } opt++; /* skip past initial dash */ if (strncmp (opt, "no-", 3) == 0) { negate = 1; opt += 3; } else if (strncmp (opt, "no", 2) == 0) { negate = 1; opt += 2; } for (; wso->name; wso++) { if (wso->arg == ws_boolean && wso->name[0] == 'n' && wso->name[1] == 'o' && strcmp (wso->name + 2, opt) == 0) { negate ^= 1; break; } if (strcmp (wso->name, opt) == 0) break; } if (wso->name) { char *arg; if (wso->arg == ws_multiple_arguments) { while (1) { if (wsoptind == argc) break; arg = argv[wsoptind++]; if (strcmp (arg, "--") == 0) break; wso->setfn (wso->tok, negate, arg, wsc); } } else { if (wso->arg == ws_required_argument) { if (wsoptind == argc) { fprintf (stderr, "%s: missing arguments for -%s\n", progname, opt); exit (1); } arg = argv[wsoptind++]; } wso->setfn (wso->tok, negate, arg, wsc); } return 0; } fprintf (stderr, "%s: unrecognized option: -%s\n", progname, opt); fprintf (stderr, "%s: try %s -help for more detail\n", progname, progname); exit (1); } /* Setter functions for various options */ static void setfn_flag (int flag, int neg, char *arg, struct wsclosure *wsc) { if (neg) wsc->wsflags &= ~flag; else wsc->wsflags |= flag; } static void setfn_option (int flag, int neg, char *arg, struct wsclosure *wsc) { wsc->wsflags |= WRDSF_OPTIONS; if (neg) wsc->ws.ws_options &= ~flag; else wsc->ws.ws_options |= flag; } static void setfn_delim (int flag, int neg, char *arg, struct wsclosure *wsc) { wsc->wsflags |= flag; wsc->ws.ws_delim = arg; } static void setfn_comment (int flag, int neg, char *arg, struct wsclosure *wsc) { wsc->wsflags |= flag; wsc->ws.ws_comment = arg; } static void set_escape_string (wordsplit_t *ws, int *wsflags, int q, const char *str) { if (*str == ':') { while (*++str != ':') { int f; switch (*str) { case '+': f = WRDSO_BSKEEP; break; case '0': f = WRDSO_OESC; break; case 'x': f = WRDSO_XESC; break; default: fprintf (stderr, "%s: invalid escape flag near %s\n", progname, str); abort (); } WRDSO_ESC_SET (ws, q, f); } *wsflags |= WRDSF_OPTIONS; ++str; } ws->ws_escape[q] = str; } static void setfn_escape (int flag, int neg, char *arg, struct wsclosure *wsc) { wsc->wsflags |= flag; set_escape_string (&wsc->ws, &wsc->wsflags, 0, arg); set_escape_string (&wsc->ws, &wsc->wsflags, 1, arg); } static void setfn_escape_qw (char *arg, int quote, struct wsclosure *wsc) { if (!(wsc->wsflags & WRDSF_ESCAPE)) { wsc->wsflags |= WRDSF_ESCAPE; wsc->ws.ws_escape[!quote] = NULL; } set_escape_string (&wsc->ws, &wsc->wsflags, quote, arg); } static void setfn_escape_word (int flag, int neg, char *arg, struct wsclosure *wsc) { setfn_escape_qw (arg, 0, wsc); } static void setfn_escape_quote (int flag, int neg, char *arg, struct wsclosure *wsc) { setfn_escape_qw (arg, 1, wsc); } static void setfn_maxwords (int flag, int neg, char *arg, struct wsclosure *wsc) { char *p; wsc->wsflags |= WRDSF_OPTIONS; wsc->ws.ws_options |= WRDSO_MAXWORDS; wsc->ws.ws_maxwords = strtoul (arg, &p, 10); if (*p) { fprintf (stderr, "%s: invalid number: %s\n", progname, arg); exit (1); } } static void setfn_global (int flag, int neg, char *arg, struct wsclosure *wsc) { if (neg) wsc->options &= ~flag; else wsc->options |= flag; } static void setfn_env (int flag, int neg, char *arg, struct wsclosure *wsc) { if (strcmp (arg, "none") == 0) wsc->env_type = env_none; else if (strcmp (arg, "null") == 0) wsc->env_type = env_null; else if (strcmp (arg, "sys") == 0) wsc->env_type = env_sys; else { fprintf (stderr, "%s: environment flag: %s\n", progname, arg); exit (1); } } static void setfn_dooffs (int flag, int neg, char *arg, struct wsclosure *wsc) { if (!(wsc->wsflags & flag)) { wsc->wsflags |= flag; wsc->offarg = wsoptind - 1; wsc->ws.ws_offs = 0; } wsc->ws.ws_offs++; } static void setfn_append (int flag, int neg, char *arg, struct wsclosure *wsc) { if (wsc->append_count == 0) wsc->append_start = wsoptind - 1; wsc->append_count++; } static void help (void); static void setfn_help (int flag, int neg, char *arg, struct wsclosure *wsc) { help (); exit (0); } /* Available options: */ struct wsopt opttab[] = { /* Global options */ { "trimnl", TRIMNL_OPTION, ws_boolean, setfn_global }, { "plaintext", PLAINTEXT_OPTION, ws_boolean, setfn_global }, { "env", 0, ws_required_argument, setfn_env }, /* Wordsplit flags */ { "append", WRDSF_APPEND, ws_boolean, setfn_flag }, /*{ "reuse", WRDSF_REUSE, ws_boolean, setfn_flag },*/ { "undef", WRDSF_UNDEF, ws_boolean, setfn_flag }, { "novar", WRDSF_NOVAR, ws_boolean, setfn_flag }, { "nocmd", WRDSF_NOCMD, ws_boolean, setfn_flag }, { "ws", WRDSF_WS, ws_boolean, setfn_flag }, { "quote", WRDSF_QUOTE, ws_boolean, setfn_flag }, { "squote", WRDSF_SQUOTE, ws_boolean, setfn_flag }, { "dquote", WRDSF_DQUOTE, ws_boolean, setfn_flag }, { "squeeze_delims", WRDSF_SQUEEZE_DELIMS, ws_boolean, setfn_flag }, { "return_delims", WRDSF_RETURN_DELIMS, ws_boolean, setfn_flag }, { "sed", WRDSF_SED_EXPR, ws_boolean, setfn_flag }, { "debug", WRDSF_SHOWDBG, ws_boolean, setfn_flag }, { "nosplit", WRDSF_NOSPLIT, ws_boolean, setfn_flag }, { "keepundef", WRDSF_KEEPUNDEF, ws_boolean, setfn_flag }, { "warnundef", WRDSF_WARNUNDEF, ws_boolean, setfn_flag }, { "cescapes", WRDSF_CESCAPES, ws_boolean, setfn_flag }, { "default", WRDSF_DEFFLAGS, ws_boolean, setfn_flag }, { "env_kv", WRDSF_ENV_KV, ws_boolean, setfn_flag }, { "incremental", WRDSF_INCREMENTAL, ws_boolean, setfn_flag }, { "pathexpand", WRDSF_PATHEXPAND, ws_boolean, setfn_flag }, { "default", WRDSF_DEFFLAGS, ws_boolean, setfn_flag }, /* Wordsplit options */ { "nullglob", WRDSO_NULLGLOB, ws_boolean, setfn_option }, { "failglob", WRDSO_FAILGLOB, ws_boolean, setfn_option }, { "dotglob", WRDSO_DOTGLOB, ws_boolean, setfn_option }, { "bskeep_words", WRDSO_BSKEEP_WORD, ws_boolean, setfn_option }, { "bskeep_quote", WRDSO_BSKEEP_QUOTE, ws_boolean, setfn_option }, { "bskeep", WRDSO_BSKEEP_WORD|WRDSO_BSKEEP_QUOTE, ws_boolean, setfn_option }, { "novarsplit", WRDSO_NOVARSPLIT, ws_boolean, setfn_option }, { "nocmdsplit", WRDSO_NOCMDSPLIT, ws_boolean, setfn_option }, { "maxwords", WRDSO_MAXWORDS, ws_required_argument, setfn_maxwords }, /* String options */ { "delim", WRDSF_DELIM, ws_required_argument, setfn_delim }, { "comment", WRDSF_COMMENT,ws_required_argument, setfn_comment }, { "escape", WRDSF_ESCAPE, ws_required_argument, setfn_escape }, { "escape-word", WRDSF_ESCAPE, ws_required_argument, setfn_escape_word }, { "escape-quote", WRDSF_ESCAPE, ws_required_argument, setfn_escape_quote }, { "dooffs", WRDSF_DOOFFS, ws_multiple_arguments, setfn_dooffs }, { "append-args", 0, ws_multiple_arguments, setfn_append }, { "help", 0, ws_no_argument, setfn_help }, { NULL, 0 } }; static void help (void) { size_t i; printf ("usage: %s [options] [VAR=VALUE...] [-- EXTRA...]\n", progname); printf ("options are:\n"); for (i = 0; opttab[i].name; i++) { printf (" -"); if (opttab[i].arg == ws_boolean) printf ("[no]"); if (strncmp (opttab[i].name, "no", 2) == 0) printf ("%s", opttab[i].name + 2); else printf ("%s", opttab[i].name); switch (opttab[i].arg) { case ws_no_argument: case ws_boolean: break; case ws_required_argument: printf(" ARG"); break; case ws_multiple_arguments: printf(" ARGS... --"); } putchar ('\n'); } putchar ('\n'); } void print_qword (const char *word, int plaintext) { static char *qbuf = NULL; static size_t qlen = 0; int quote; size_t size = wordsplit_c_quoted_length (word, 0, "e); if (plaintext) { printf ("%s", word); return; } if (*word == 0) quote = 1; if (size >= qlen) { qlen = size + 1; qbuf = realloc (qbuf, qlen); assert (qbuf != NULL); } wordsplit_c_quote_copy (qbuf, word, 0); qbuf[size] = 0; if (quote) printf ("\"%s\"", qbuf); else printf ("%s", qbuf); } /* Convert environment to K/V form */ static char ** make_env_kv () { size_t i, j, size; char **newenv; /* Count the number of entries */ for (i = 0; environ[i]; i++) ; size = i * 2 + 1; newenv = calloc (size, sizeof (newenv[0])); assert (newenv != NULL); for (i = j = 0; environ[i]; i++) { size_t len = strcspn (environ[i], "="); char *p = malloc (len+1); assert (p != NULL); memcpy (p, environ[i], len); p[len] = 0; newenv[j++] = p; p = strdup (environ[i] + len + 1); assert (p != NULL); newenv[j++] = p; } newenv[j] = NULL; return newenv; } static int wsp_getvar (char **ret, const char *vptr, size_t vlen, void *data) { char **base = data; int i; for (i = 0; base[i]; i++) { size_t l = strcspn (base[i], "="); if (l == vlen && memcmp (base[i], vptr, vlen) == 0) { char *p = strdup (base[i] + vlen + 1); if (p == NULL) return WRDSE_NOSPACE; *ret = p; return WRDSE_OK; } } return WRDSE_UNDEF; } static int cmd_quote (char **ret, const char *str, size_t len, char **argv) { int alen; for (alen = 0; alen < len && !(str[alen] == ' ' || str[alen] == '\t'); alen++) ; for (; alen < len && (str[alen] == ' ' || str[alen] == '\t'); alen++) ; len -= alen; *ret = malloc (len + 1); if (!*ret) return WRDSE_NOSPACE; memcpy (*ret, str + alen, len); (*ret)[len] = 0; return WRDSE_OK; } static int cmd_words (char **ret, const char *str, size_t len, char **argv) { char *p; int i; p = malloc (len + 1); if (!p) return WRDSE_NOSPACE; *ret = p; for (i = 1; argv[i]; i++) { size_t s = strlen (argv[i]); if (i > 1) *p++ = ' '; memcpy (p, argv[i], s); p += s; } *p = 0; return WRDSE_OK; } static int cmd_lines (char **ret, const char *str, size_t len, char **argv) { char *p; int i; p = malloc (len + 1); if (!p) return WRDSE_NOSPACE; *ret = p; for (i = 1; argv[i]; i++) { size_t s = strlen (argv[i]); if (i > 1) *p++ = '\n'; memcpy (p, argv[i], s); p += s; } *p = 0; return WRDSE_OK; } static struct command { char const *name; int (*cmd)(char **ret, const char *str, size_t len, char **argv); } comtab[] = { { "quote", cmd_quote }, { "words", cmd_words }, { "lines", cmd_lines } }; static int wsp_runcmd (char **ret, const char *str, size_t len, char **argv, void *closure) { int i; size_t s = 0; char const msg[] = "unknown command: "; for (i = 0; ; i++) { if (i == sizeof (comtab) / sizeof (comtab[0])) break; if (strcmp (comtab[i].name, argv[0]) == 0) return comtab[i].cmd (ret, str, len, argv); } *ret = malloc (sizeof (msg) + strlen (argv[0])); if (!*ret) return WRDSE_NOSPACE; strcat (strcpy (*ret, msg), argv[0]); return WRDSE_USERERR; } int main (int argc, char **argv) { struct wsclosure wsc; char *fenvbase[128]; char buf[1024], *ptr, *saved_ptr; int next_call = 0; wsc.options = 0; wsc.wsflags = 0; wsc.env_type = env_sys; wsc.offarg = 0; wsc.fenvbase = fenvbase; wsc.fenvmax = sizeof (fenvbase) / sizeof (fenvbase[0]); wsc.fenvidx = 0; wsc.ws.ws_options = 0; wsc.wsflags = (WRDSF_DEFFLAGS & ~WRDSF_NOVAR) | WRDSF_ENOMEMABRT | WRDSF_SHOWERR; wsc.append_count = 0; progname = argv[0]; while (getwsopt (argc, argv, opttab, &wsc) != EOF) ; if (wsc.fenvidx > 0) { wsc.fenvbase[wsc.fenvidx] = NULL; wsc.wsflags |= WRDSF_GETVAR | WRDSF_CLOSURE; wsc.ws.ws_getvar = wsp_getvar; wsc.ws.ws_closure = fenvbase; } if (wsoptind < argc) { wsc.ws.ws_paramc = argc - wsoptind; wsc.ws.ws_paramv = (char const **) (argv + wsoptind); wsc.ws.ws_options |= WRDSO_PARAMV|WRDSO_PARAM_NEGIDX; wsc.wsflags |= WRDSF_OPTIONS; } switch (wsc.env_type) { case env_null: wsc.wsflags |= WRDSF_ENV; wsc.ws.ws_env = NULL; break; case env_none: break; case env_sys: wsc.wsflags |= WRDSF_ENV; if (wsc.wsflags & WRDSF_ENV_KV) wsc.ws.ws_env = (const char **) make_env_kv (); else wsc.ws.ws_env = (const char **) environ; break; } if (!(wsc.wsflags & WRDSF_NOCMD)) wsc.ws.ws_command = wsp_runcmd; if (wsc.wsflags & WRDSF_INCREMENTAL) wsc.options |= TRIMNL_OPTION; next_call = 0; while ((ptr = fgets (buf, sizeof (buf), stdin))) { int rc; size_t i; if (wsc.options & TRIMNL_OPTION) { size_t len = strlen (ptr); if (len && ptr[len-1] == '\n') ptr[len-1] = 0; } if (wsc.wsflags & WRDSF_INCREMENTAL) { if (next_call) { if (*ptr == 0) ptr = NULL; else free (saved_ptr); } else next_call = 1; if (ptr) { ptr = saved_ptr = strdup (ptr); assert (ptr != NULL); } } rc = wordsplit (ptr, &wsc.ws, wsc.wsflags); if (rc) { if (!(wsc.wsflags & WRDSF_SHOWERR)) wordsplit_perror (&wsc.ws); continue; } if (wsc.offarg) { size_t i; for (i = 0; i < wsc.ws.ws_offs; i++) wsc.ws.ws_wordv[i] = argv[wsc.offarg + i]; wsc.offarg = 0; } if (wsc.append_count) { rc = wordsplit_append (&wsc.ws, wsc.append_count, argv + wsc.append_start); if (rc) { if (!(wsc.wsflags & WRDSF_SHOWERR)) wordsplit_perror (&wsc.ws); continue; } } wsc.wsflags |= WRDSF_REUSE; printf ("NF: %lu", (unsigned long) wsc.ws.ws_wordc); if (wsc.wsflags & WRDSF_DOOFFS) printf (" (%lu)", (unsigned long) wsc.ws.ws_offs); putchar ('\n'); for (i = 0; i < wsc.ws.ws_offs; i++) { printf ("(%lu): ", (unsigned long) i); print_qword (wsc.ws.ws_wordv[i], wsc.options & PLAINTEXT_OPTION); putchar ('\n'); } for (; i < wsc.ws.ws_offs + wsc.ws.ws_wordc; i++) { printf ("%lu: ", (unsigned long) i); print_qword (wsc.ws.ws_wordv[i], wsc.options & PLAINTEXT_OPTION); putchar ('\n'); } printf ("TOTAL: %lu\n", (unsigned long) wsc.ws.ws_wordi); } return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/Makefile.am����������������������������������������������������������������������0000644�0001750�0001750�00000004207�13511403723�016327� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of Grecs # Copyright (C) 2007-2019 Sergey Poznyakoff # # Grecs 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. # # Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. ACLOCAL_AMFLAGS = -I am SUBDIRS=. include src @GRECS_TESTDIR@ @GRECS_DOCDIR@ # Wordsplit components. WORDSPLIT_SRC = wordsplit/wordsplit.c wordsplit/wordsplit.h WORDSPLIT_TEST = wordsplit/wordsplit.at wordsplit/wsp.c WORDSPLIT_DOC = wordsplit/wordsplit.3 EXTRA_DIST=build-aux/yyrename @GRECS_BUILD_AUX@ @GRECS_DISTDOC@ gitid.h\ $(WORDSPLIT_SRC) @GRECS_EXTRA_DIST@ noinst_HEADERS = gitid.h BUILT_SOURCES = gitid.h README .PHONY: gitid.h gitid.h: @if test -e .git; then \ url=`git config --get remote.origin.url | sed 's|.*://||;s|/gitroot/|/|'`; \ case $$url in \ git.gnu.org.ua/grecs.git|*@git.gnu.org.ua/grecs.git) \ dirty=`git diff-index --name-only HEAD 2>/dev/null` || dirty=;\ test -n "$$dirty" && dirty="-dirty"; \ ID=`git log -1 --pretty='format:%H-%ct-%ae'`$$dirty;\ echo "#define GRECS_GIT_ID \"$$ID\"";; \ *) echo "#define GRECS_GIT_ID \"unknown\"";; \ esac > gitid.tmp; \ cmp gitid.tmp gitid.h >/dev/null 2>&1 || mv gitid.tmp gitid.h; \ rm -f gitid.tmp; \ fi; README: test -f @GRECS_README@ && cp @GRECS_README@ README @GRECS_CHANGELOG@.PHONY: ChangeLog @GRECS_CHANGELOG@ChangeLog: @GRECS_CHANGELOG@ $(AM_V_GEN)if test -d .git; then \ @GRECS_CHANGELOG@ git log --pretty='format:%ct %an <%ae>%n%n%s%n%n%b%n' | \ @GRECS_CHANGELOG@ awk -f $(top_srcdir)/build-aux/git2chg.awk > ChangeLog; \ @GRECS_CHANGELOG@ fi �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/README���������������������������������������������������������������������������0000644�0001750�0001750�00000004751�13244106144�015157� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Grecs README Copyright (C) 2011-2016 Sergey Poznyakoff See the end of file for copying conditions. * Introduction This file contains brief information about using Grecs as a submodule. You will find a complete documentation for Grecs, in form of man pages, in the doc/ subdirectory. An online copy of the documentation in various formats is available at http://grecs.man.gnu.org.ua. If you are interested in libgrecs, a standalone library implementation of Grecs, see the file README.standalone in this directory, or visit http://grecs.man.gnu.org.ua. * Overview Grecs is a library for parsing structured configuration files from C programs. A structured configuration file has hierarchical structure, with block statements enclosing lower-level statements. Such configurations files are used by many programs, such as, e.g. Bind or Dico. Grecs provides primitives for parsing such files into an internal tree-like structure and for basic operations on such structures. These operations include value lookups by keyword paths, traversing trees recursively, joining several trees together, reductions, etc. * Usage 1. Install grecs as a submodule: git submodule add git://git.gnu.org.ua/grecs.git grecs 2. Add a call to GRECS_SETUP to your configure.ac. It can be as simple as: GRECS_SETUP If the subproject directory is not 'grecs', supply the actual directory name as the first argument to this macro, e.g.: GRECS_SETUP(lib/grecs) For a detailed description of the GRECS_SETUP macro, run `man doc/GRECS_SETUP.3'. 3. In your Makefile.am, add @GRECS_INCLUDES@ to the INCLUDES value, and @GRECS_LDADD@ to LDADD, e.g.: INCLUDES = @GRECS_INCLUDES@ LDADD = @GRECS_LDADD@ 4. Include "grecs.h" 5. Use the library to handle your configuration files. See the documentation for a detailed discussion. * Bug reporting. Send bug reports to <gray+grecs@gnu.org.ua>. * Copyright information: Copyright (C) 2011 Sergey Poznyakoff Permission is granted to anyone to make or distribute verbatim copies of this document as received, in any medium, provided that the copyright notice and this permission notice are preserved, thus giving the recipient permission to redistribute in turn. Permission is granted to distribute modified versions of this document, or of portions of it, under the above conditions, provided also that they carry prominent notices stating who last changed them. Local Variables: mode: outline paragraph-separate: "[ ]*$" version-control: never End: �����������������������direvent-5.2/grecs/AUTHORS��������������������������������������������������������������������������0000644�0001750�0001750�00000000045�13244106110�015330� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Sergey Poznyakoff <gray@gnu.org.ua> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/Makefile.in����������������������������������������������������������������������0000644�0001750�0001750�00000052333�13512402622�016341� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 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 Grecs # Copyright (C) 2007-2019 Sergey Poznyakoff # # Grecs 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. # # Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. 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 = grecs 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)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(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 = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in AUTHORS COPYING NEWS README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" 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@ 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@ 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@ 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@ 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@ ACLOCAL_AMFLAGS = -I am SUBDIRS = . include src @GRECS_TESTDIR@ @GRECS_DOCDIR@ # Wordsplit components. WORDSPLIT_SRC = wordsplit/wordsplit.c wordsplit/wordsplit.h WORDSPLIT_TEST = wordsplit/wordsplit.at wordsplit/wsp.c WORDSPLIT_DOC = wordsplit/wordsplit.3 EXTRA_DIST = build-aux/yyrename @GRECS_BUILD_AUX@ @GRECS_DISTDOC@ gitid.h\ $(WORDSPLIT_SRC) @GRECS_EXTRA_DIST@ noinst_HEADERS = gitid.h BUILT_SOURCES = gitid.h README all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: $(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 grecs/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnits grecs/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__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ 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): # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(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 @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-recursive all-am: Makefile $(HEADERS) installdirs: installdirs-recursive installdirs-am: install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: 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." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) all check install install-am \ install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic cscopelist-am ctags ctags-am \ distclean distclean-generic distclean-tags 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-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags tags-am uninstall uninstall-am .PRECIOUS: Makefile .PHONY: gitid.h gitid.h: @if test -e .git; then \ url=`git config --get remote.origin.url | sed 's|.*://||;s|/gitroot/|/|'`; \ case $$url in \ git.gnu.org.ua/grecs.git|*@git.gnu.org.ua/grecs.git) \ dirty=`git diff-index --name-only HEAD 2>/dev/null` || dirty=;\ test -n "$$dirty" && dirty="-dirty"; \ ID=`git log -1 --pretty='format:%H-%ct-%ae'`$$dirty;\ echo "#define GRECS_GIT_ID \"$$ID\"";; \ *) echo "#define GRECS_GIT_ID \"unknown\"";; \ esac > gitid.tmp; \ cmp gitid.tmp gitid.h >/dev/null 2>&1 || mv gitid.tmp gitid.h; \ rm -f gitid.tmp; \ fi; README: test -f @GRECS_README@ && cp @GRECS_README@ README @GRECS_CHANGELOG@.PHONY: ChangeLog @GRECS_CHANGELOG@ChangeLog: @GRECS_CHANGELOG@ $(AM_V_GEN)if test -d .git; then \ @GRECS_CHANGELOG@ git log --pretty='format:%ct %an <%ae>%n%n%s%n%n%b%n' | \ @GRECS_CHANGELOG@ awk -f $(top_srcdir)/build-aux/git2chg.awk > ChangeLog; \ @GRECS_CHANGELOG@ fi # 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.2/grecs/tests/���������������������������������������������������������������������������0000755�0001750�0001750�00000000000�13512403134�015427� 5����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/tests/locus-bind.at��������������������������������������������������������������0000644�0001750�0001750�00000002050�13244106110�020005� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of grecs -*- Autotest -*- # Copyright (C) 2007-2016 Sergey Poznyakoff # # Grecs 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. # # Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. AT_SETUP(Locations: bind) AT_KEYWORDS([locus bind bind-locus00]) AT_DATA([test.cf],[ string val; ]) AT_CHECK([gcffmt -type=bind -locus test.cf], [0], [test.cf:2.1-10: .string: "val" ]) AT_CHECK([gcffmt -type=bind -novalue -locus test.cf], [0], [test.cf:2.1-6: .string ]) AT_CHECK([gcffmt -type=bind -nopath -locus test.cf], [0], [test.cf:2.8-10: "val" ]) AT_CLEANUP ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/tests/format00.at����������������������������������������������������������������0000644�0001750�0001750�00000002414�13244106110�017402� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of grecs -*- Autotest -*- # Copyright (C) 2007-2016 Sergey Poznyakoff # # Grecs 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. # # Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. AT_SETUP(Default format) AT_KEYWORDS([format format00]) AT_CHECK([gcffmt $abs_srcdir/gcf1.conf], [0], [.scalar: "yes" .listvar: ("a", "2", "b", "c") .compound: "stmt" "2" "foo" .mailbox.mailbox-pattern: "maildir:/var/mail;type=index;param=2;user=${user}" .mailbox.mailbox-type: "maildir" .logging.syslog: "yes" .logging.facility: "mail" .program="foo".logging.syslog: "yes" .program="foo".logging.facility: "local1" .program="foo".scalar: "no" .program="bar".logging.syslog: "no" .program="bar".logging.facility: "local2" .program="bar".logging.tag: "baz" .program="bar".scalar: "25" ]) AT_CLEANUP ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/tests/glob04.at������������������������������������������������������������������0000644�0001750�0001750�00000002002�13244106110�017032� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of grecs -*- Autotest -*- # Copyright (C) 2012-2016 Sergey Poznyakoff # # Grecs 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. # # Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. AT_SETUP(Subtree - asterisk) AT_KEYWORDS([peek peek07 glob glob04]) AT_DATA([test.cf],[text "string"; block { foo { quux 1; }; bar 123; baz { quux 2; } crex { quux 3; } } ]) AT_CHECK([gcfpeek -match -root=block test.cf '.*.quux'], [0], [.block.foo.quux: "1" .block.baz.quux: "2" .block.crex.quux: "3" ]) AT_CLEANUP ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/tests/parser-bind.at�������������������������������������������������������������0000644�0001750�0001750�00000013640�13244106110�020163� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of grecs -*- Autotest -*- # Copyright (C) 2011-2016 Sergey Poznyakoff # # Grecs 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. # # Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([BIND-style parser]) AT_KEYWORDS([parser bind]) AT_CHECK([gcffmt -type=bind -I$abs_srcdir $abs_srcdir/bind.conf|sed 's/ *$//'], [0], [.acl="upd-dyn-vpn".key: "vpn." .acl="upd-dyn-vpn".10.11.0.1: .acl="upd-dyn-vpn".10.10.0.1: .acl="foo-acl".key: "foo." .options.version: "Grecs testsuite" .options.coresize: "0" .options.directory: "/etc/namedb" .options.pid-file: "/var/log/bind/named.pid" .options.allow-transfer.foo-acl: .options.allow-query.any: .options.serial-query-rate: "5" .options.max-journal-size: "5m" .options.check-names: "master" "warn" .options.check-names: "slave" "warn" .options.check-names: "response" "ignore" .logging.channel="default_channel".file: "/var/log/bind/named.log" "versions" "9" "size" "524288" .logging.channel="default_channel".print-time: "yes" .logging.channel="default_channel".print-severity: "yes" .logging.channel="debug_channel".file: "/var/log/bind/named.run" "versions" "9" "size" "524288" .logging.channel="debug_channel".print-time: "yes" .logging.channel="debug_channel".print-severity: "yes" .logging.channel="debug_channel".severity: "dynamic" .logging.channel="security_channel".file: "/var/log/bind/security" "versions" "9" "size" "524288" .logging.channel="security_channel".print-time: "yes" .logging.channel="security_channel".print-severity: "yes" .logging.channel="xfer_in_channel".file: "/var/log/bind/named-xfer.in" "versions" "9" "size" "524288" .logging.channel="xfer_in_channel".print-time: "yes" .logging.channel="xfer_out_channel".file: "/var/log/bind/named-xfer.out" "versions" "9" "size" "524288" .logging.channel="xfer_out_channel".print-time: "yes" .logging.channel="lamers_channel".file: "/var/log/bind/lamers.log" "versions" "5" "size" "524288" .logging.channel="lamers_channel".print-time: "yes" .logging.channel="lamers_channel".print-category: "yes" .logging.channel="update_channel".file: "/var/log/bind/update.log" "versions" "9" "size" "524288" .logging.channel="update_channel".print-time: "yes" .logging.channel="update_channel".print-category: "yes" .logging.channel="update_channel".severity: "debug" "5" .logging.channel="notify_channel".file: "/var/log/bind/notify.log" "versions" "9" "size" "524288" .logging.channel="notify_channel".print-time: "yes" .logging.channel="notify_channel".print-category: "yes" .logging.channel="query_channel".file: "/var/log/bind/query.log" "versions" "9" "size" "524288" .logging.channel="query_channel".print-time: "yes" .logging.category="security".security_channel: .logging.category="queries".null: .logging.category="default".default_channel: .logging.category="default".debug_channel: .logging.category="xfer-in".xfer_in_channel: .logging.category="xfer-out".xfer_out_channel: .logging.category="delegation-only".lamers_channel: .logging.category="lame-servers".lamers_channel: .logging.category="update".update_channel: .logging.category="notify".notify_channel: .key="rndc-key".algorithm: "hmac-md5" .key="rndc-key".secret: "1111111111111111111111==" .controls: ("inet", "127.0.0.1", "port", "953", "allow", ("127.0.0.1"), "keys", ("rndc-key")) .view="internal".match-clients.10.0.0.0/8: .view="internal".zone="int".type: "master" .view="internal".zone="int".file: "int.p" .view="internal".zone="int".allow-update.upd-dyn-vpn: .view="internal".zone="int".allow-query.internal-hosts: .view="internal".zone="int".allow-transfer.10.11.0.1: .view="internal".zone="int".allow-transfer.10.10.0.4: .view="internal".zone="int".allow-transfer.127.0.0.1: .view="external".zone=".".type: "hint" .view="external".zone=".".file: "named.root" .view="external".zone="com".type: "delegation-only" .view="external".zone="net".type: "delegation-only" .view="external".zone="0.0.127.IN-ADDR.ARPA".type: "master" .view="external".zone="0.0.127.IN-ADDR.ARPA".file: "local.p" .view="external".zone="foo.example.net".type: "master" .view="external".zone="foo.example.net".file: "foo.p" .view="external".dlz="DLZ".database: "mysql\n {host=localhost socket=/var/run/mysql/mysql.sock dbname=Foo user=bind ssl=false}\n {select r.zone from dns_soa r, dns_acl a where r.zone = '%zone%'\n and a.network <= inet_aton('%client%') and inet_aton('%client%') <=\n a.bcast\n and a.view = r.view }\n {select r.ttl, r.type, r.mx_priority,\n case when r.type='TXT' then concat('\"', r.data, '\"') else r.data end\n from dns_records r, dns_acl a,\n where r.zone = '%zone%' and r.host = '%record%'\n and not (r.type = 'SOA' or r.type = 'NS')\n and a.network <= inet_aton('%client%') and inet_aton('%client%') <=\n a.bcast\n and a.view = r.view }\n {select r.ttl, r.type, r.data, r.resp_person, r.serial,\n r.refresh, r.retry, r.expire, r.minimum\n from dns_soa r, dns_acl a where r.zone = '%zone%'\n and (r.type = 'SOA' or r.type='NS')\n and a.network <= inet_aton('%client%') and\n inet_aton('%client%') <= a.bcast\n and a.view = r.view }\n {select r.ttl, r.type, r.host, r.mx_priority, case when r.type='TXT' then\n concat('\"', r.data, '\"') else r.data end\n from dns_records r, dns_acl a where r.zone = '%zone%' \n and a.network <= inet_aton('%client%') and\n inet_aton('%client%') <= a.bcast\n and a.view = r.view }\n {select zone from dns_xfr where zone = '%zone%' and client = '%client%'}" ]) AT_CLEANUP ������������������������������������������������������������������������������������������������direvent-5.2/grecs/tests/gcfpeek.c������������������������������������������������������������������0000644�0001750�0001750�00000006457�13244106110�017207� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* grecs - Gray's Extensible Configuration System Copyright (C) 2007-2016 Sergey Poznyakoff Grecs 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. Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include <string.h> #include <errno.h> #include <stdlib.h> #include "grecs.h" static void usage(const char *arg, FILE *fp, int code) { fprintf(fp, "usage: %s [-h] [-locus] [-delim=char] [-nodesc] [-nopath] [-reduce] [-match] [-root=path] file path\n", arg); exit(code); } int set_parser(const char *arg) { grecs_parser_t p = grecs_get_parser_by_type(arg); if (p) { grecs_parser_fun = p; return 0; } return 1; } int main(int argc, char **argv) { char *progname = argv[0]; char *path = NULL; char *file = NULL; struct grecs_node *tree, *root, *node; int flags = GRECS_NODE_FLAG_DEFAULT; int rc = 2; int reduce = 0; int match = 0; char *root_path = NULL; while (--argc) { char *arg = *++argv; if (strcmp(arg, "-locus") == 0) flags |= GRECS_NODE_FLAG_LOCUS; else if (strncmp(arg, "-delim=", 7) == 0) flags |= arg[7]; else if (strcmp(arg, "-reduce") == 0) reduce = 1; else if (strcmp(arg, "-match") == 0) match = 1; else if (strcmp(arg, "-nodesc") == 0) flags &= ~GRECS_NODE_FLAG_DESCEND; else if (strcmp(arg, "-nopath") == 0) flags &= ~GRECS_NODE_FLAG_PATH; else if (strncmp(arg, "-type=", 6) == 0) { if (set_parser(arg + 6)) usage(progname, stderr, 1); } else if (strncmp(arg, "-root=", 6) == 0) root_path = arg + 6; else if (strcmp(arg, "-strcat") == 0) grecs_parser_options |= GRECS_OPTION_QUOTED_STRING_CONCAT; else if (strcmp(arg, "-stradj") == 0) grecs_parser_options |= GRECS_OPTION_ADJUST_STRING_LOCATIONS; else if (strcmp(arg, "-h") == 0) usage(progname, stdout, 0); else if (arg[0] == '-') usage(progname, stderr, 1); else if (file) { if (path) usage(progname, stderr, 1); else path = arg; } else file = arg; } if (!file || !path || argc) usage(progname, stderr, 1); tree = grecs_parse(file); if (!tree) exit(1); if (reduce) grecs_tree_reduce(tree, NULL, 0); if (root_path) { root = grecs_find_node(tree, root_path); if (!root) { fprintf(stderr, "%s: node %s not found\n", progname, root_path); exit(1); } } else root = tree; if (match) { grecs_match_buf_t match_buf; for (node = grecs_match_first(root, path, &match_buf); node; node = grecs_match_next(match_buf)) { rc = 0; grecs_print_node(node, flags, stdout); fputc('\n', stdout); } grecs_match_buf_free(match_buf); } else { for (node = root; node; node = node->next) { node = grecs_find_node(node, path); if (!node) break; rc = 0; grecs_print_node(node, flags, stdout); fputc('\n', stdout); } } grecs_tree_free(tree); exit(rc); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/tests/bind00.at������������������������������������������������������������������0000644�0001750�0001750�00000002114�13244106110�017023� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of grecs -*- Autotest -*- # Copyright (C) 2011-2016 Sergey Poznyakoff # # Grecs 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. # # Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([C comments in BIND-style parser]) AT_KEYWORDS([parser bind bind00]) GRECS_TEST([ zone "foo" { type delegation-only; }; /*zone "net" { type delegation-only; };*/ /**/ zone "bar" { type hint; }; /* comment line */ zone "baz" { type delegation-only; }; ], [gcffmt -type=bind], [0], [.zone="foo".type: "delegation-only" .zone="bar".type: "hint" .zone="baz".type: "delegation-only" ]) AT_CLEANUP ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/tests/bind.int.conf��������������������������������������������������������������0000644�0001750�0001750�00000000452�13244106110�020000� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Sample Bind configuration include file (2) for Grecs testsuite. zone "int" { type master; file "int.p"; allow-update { upd-dyn-vpn; }; allow-query { internal-hosts; }; allow-transfer { 10.11.0.1; 10.10.0.4; 127.0.0.1; }; };����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/tests/cfhelp.at������������������������������������������������������������������0000644�0001750�0001750�00000003313�13244106110�017212� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of grecs -*- Autotest -*- # Copyright (C) 2007-2016 Sergey Poznyakoff # # Grecs 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. # # Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. AT_SETUP(Help) AT_KEYWORDS([help]) AT_CHECK([gcfset -cfhelp], [0], [# Sample configuration file structure. # Scalar string scalar <label: string>; # Configure logging logging logging { # Send to syslog syslog <arg: boolean>; # Set logging facility facility <name: string>; # Tag logging messages with this string tag <label: string>; # Prefix each message with its priority print-priority <arg: boolean>; } # Mailbox configuration mailbox { # Default mailbox pattern mailbox-pattern <arg: string>; # Default mailbox type mailbox-type <arg: string>; } # Subprogram configuration program <name: string> { # Scalar string scalar <label: string>; # Configure logging logging logging { # Send to syslog syslog <arg: boolean>; # Set logging facility facility <name: string>; # Tag logging messages with this string tag <label: string>; # Prefix each message with its priority print-priority <arg: boolean>; } } # list variable listvar <arg: list of string>; ]) AT_CLEANUP ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/tests/join.at��������������������������������������������������������������������0000644�0001750�0001750�00000002031�13244106110�016704� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of grecs -*- Autotest -*- # Copyright (C) 2007-2016 Sergey Poznyakoff # # Grecs 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. # # Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. AT_SETUP(Join) AT_KEYWORDS([join]) AT_DATA([1.cf],[a 1; b 2; c { a x; b y; } ]) AT_DATA([2.cf],[x 1; y 2; z { x 3; y 4; } ]) AT_CHECK([gcffmt -locus 1.cf 2.cf], [0], [1.cf:1.1-3: .a: "1" 1.cf:2.1-3: .b: "2" 1.cf:4.2-4: .c.a: "x" 1.cf:5.2-4: .c.b: "y" 2.cf:1.1-3: .x: "1" 2.cf:2.1-3: .y: "2" 2.cf:4.2-4: .z.x: "3" 2.cf:5.2-4: .z.y: "4" ]) AT_CLEANUP �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/tests/strcat.at������������������������������������������������������������������0000644�0001750�0001750�00000001662�13244106110�017256� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of grecs -*- Autotest -*- # Copyright (C) 2016 Sergey Poznyakoff # # Grecs 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. # # Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([String concatenation]) AT_KEYWORDS([format option strcat concat]) AT_DATA([input.conf], [option id "a" " string"; ]) AT_CHECK([gcffmt input.conf gcffmt -strcat input.conf], [0], [.option: "id" "a" " string" .option: "id" "a string" ]) AT_CLEANUP ������������������������������������������������������������������������������direvent-5.2/grecs/tests/bind.keys������������������������������������������������������������������0000644�0001750�0001750�00000000235�13244106110�017234� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Sample Bind configuration include file (1) for Grecs testsuite. key "rndc-key" { algorithm hmac-md5; secret "1111111111111111111111=="; }; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/tests/distck.c�������������������������������������������������������������������0000644�0001750�0001750�00000000602�13244106110�017046� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#include <config.h> #include "grecs.h" int main(int argc, char **argv) { int res; struct grecs_version_info *packver, *libver; packver = grecs_version_split(PACKAGE_STRING); libver = grecs_version(); if (!(grecs_version_info_cmp(packver, libver, &res) == 0 && res == 0)) { fprintf(stderr, "grecs.h does not match package number\n"); return 1; } return 0; } ������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/tests/glob03.at������������������������������������������������������������������0000644�0001750�0001750�00000002070�13244106110�017036� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of grecs -*- Autotest -*- # Copyright (C) 2007-2016 Sergey Poznyakoff # # Grecs 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. # # Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. AT_SETUP(Multiple wildcards) AT_KEYWORDS([peek peek06 glob glob03]) AT_DATA([test.cf],[ foo { bar { baz { quz { quux 10; } } } } foo { bar { quz { quux 9; } } } foo { bar { baz { quz { mux 8; } } } } ]) AT_CHECK([gcfpeek -match test.cf .*.baz.*.quux], [0], [.foo.bar.baz.quz.quux: "10" ]) AT_CLEANUP ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/tests/parser-git.at��������������������������������������������������������������0000644�0001750�0001750�00000002143�13244106110�020026� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of grecs -*- Autotest -*- # Copyright (C) 2011-2016 Sergey Poznyakoff # # Grecs 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. # # Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([Git-style parser]) AT_KEYWORDS([parser git]) AT_CHECK([gcffmt -type=git $abs_srcdir/git.conf], [0], [.core.repositoryformatversion: "0" .core.filemode: "true" .core.bare: "false" .core.logallrefupdates: "true" .remote.origin.fetch: "+refs/heads/*:refs/remotes/origin/*" .remote.origin.url: "ssh://git.gnu.org.ua/gitroot/grecs.git" .branch.master.remote: "origin" .branch.master.merge: "refs/heads/master" ]) AT_CLEANUP �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/tests/dhcpd.conf�����������������������������������������������������������������0000644�0001750�0001750�00000003335�13244106110�017360� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Sample DHCPD configuration file for Grecs testsuite. authoritative; pid-file-name "/var/run/dhcpd.pid"; log-facility daemon; default-lease-time 28800; max-lease-time 86400; ddns-update-style none; get-lease-hostnames yes; ddns-update-style interim; ignore client-updates; # Overwrite client configured FQHNs ddns-rev-domainname "in-addr.arpa."; use-host-decl-names on; include "bind.keys"; zone lan.example.com. { primary 127.0.0.1; key "foo"; } option domain-search "example.com", "example.org", "example.net"; if option dhcp-user-class = "accounting" { max-lease-time 17600; option domain-name "accounting.example.org"; option domain-name-servers ns1.accounting.example.org, ns2.accounting.example.org; } elsif option dhcp-user-class = "sales" { max-lease-time 17600; option domain-name "sales.example.org"; option domain-name-servers ns1.sales.example.org, ns2.sales.example.org; } elsif option dhcp-user-class = "engineering" { max-lease-time 17600; option domain-name "engineering.example.org"; option domain-name-servers ns1.engineering.example.org, ns2.engineering.example.org; } else { max-lease-time 600; option domain-name "misc.example.org"; option domain-name-servers ns1.misc.example.org, ns2.misc.example.org; } shared-network "LAN" { subnet 192.168.0.0 netmask 255.255.255.0 { option routers 192.168.0.1; option domain-name-servers 192.168.0.1; update-static-leases on; pool { range 192.168.0.1 192.168.0.254; deny known-clients; ddns-hostname = binary-to-ascii(10, 8, "-", leased-address); } } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/tests/reduce00.at����������������������������������������������������������������0000644�0001750�0001750�00000001510�13244106110�017355� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of grecs -*- Autotest -*- # Copyright (C) 2007-2016 Sergey Poznyakoff # # Grecs 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. # # Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([Simple statement]) AT_KEYWORDS([reduce reduce00]) GRECS_TEST([scalar a; scalar b; ], [gcffmt -reduce], [0], [.scalar: "b" ]) AT_CLEANUP ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/tests/incl01.at������������������������������������������������������������������0000644�0001750�0001750�00000002011�13244106110�017031� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of grecs -*- Autotest -*- # Copyright (C) 2014-2016 Sergey Poznyakoff # # Grecs 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. # # Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([Recursive inclusion]) AT_KEYWORDS([include incl01]) AT_CHECK([ AT_DATA([a.inc],[this true; #include "b.inc" ]) AT_DATA([b.inc],[#include "a.inc" ]) AT_DATA([test.cf],[before 1; #include "a.inc" after 1; ]) gcffmt ./test.cf ], [1], [], [./b.inc:1: Recursive inclusion ./test.cf:2: `./a.inc' already included here ]) AT_CLEANUP �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/tests/glob00.at������������������������������������������������������������������0000644�0001750�0001750�00000001667�13244106110�017046� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of grecs -*- Autotest -*- # Copyright (C) 2007-2016 Sergey Poznyakoff # # Grecs 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. # # Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. AT_SETUP(Leading wildcard) AT_KEYWORDS([peek peek04 glob glob00]) AT_CHECK([gcfpeek -match $abs_srcdir/gcf1.conf .*.facility], [0], [.logging.facility: "mail" .program="foo".logging.facility: "local1" .program="bar".logging.facility: "local2" ]) AT_CLEANUP �������������������������������������������������������������������������direvent-5.2/grecs/tests/Makefile.am����������������������������������������������������������������0000644�0001750�0001750�00000012471�13511403723�017473� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of grecs - Gray's Extensible Configuration System # Copyright (C) 2007-2019 Sergey Poznyakoff # # Grecs 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. # # Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. EXTRA_DIST = \ $(TESTSUITE_AT)\ testsuite\ package.m4\ gcf1.conf\ bind.conf\ bind.keys\ bind.int.conf\ bind.ext.conf\ bind.dlz\ dhcpd.conf\ meta1.conf\ git.conf DISTCLEANFILES = atconfig $(check_SCRIPTS) MAINTAINERCLEANFILES = Makefile.in $(TESTSUITE) PARSER_DEFS = if GRECS_COND_META1_PARSER PARSER_DEFS += ENABLE_META1_PARSER endif if GRECS_COND_BIND_PARSER PARSER_DEFS += ENABLE_BIND_PARSER endif if GRECS_COND_DHCPD_PARSER PARSER_DEFS += ENABLE_DHCPD_PARSER endif if GRECS_COND_GIT_PARSER PARSER_DEFS += ENABLE_GIT_PARSER endif if GRECS_COND_JSON PARSER_DEFS += ENABLE_JSON endif ## ------------ ## ## package.m4. ## ## ------------ ## $(srcdir)/package.m4: $(top_srcdir)/configure.ac $(top_srcdir)/@GRECS_SUBDIR@/am/grecs.m4 $(AM_V_GEN){ \ echo '# Signature of the current package.'; \ echo 'm4_define([AT_PACKAGE_NAME], [@PACKAGE_NAME@])'; \ echo 'm4_define([AT_PACKAGE_TARNAME], [@PACKAGE_TARNAME@])'; \ echo 'm4_define([AT_PACKAGE_VERSION], [@PACKAGE_VERSION@])'; \ echo 'm4_define([AT_PACKAGE_STRING], [@PACKAGE_STRING@])'; \ echo 'm4_define([AT_PACKAGE_BUGREPORT], [@PACKAGE_BUGREPORT@])'; \ echo 'm4_define([GRECS_DISTCK_AT], [@GRECS_DISTCK_AT@])'; \ for var in $(PARSER_DEFS); do \ echo "m4_define([$$var],1)"; \ done; \ } >$(srcdir)/package.m4 # ## ------------ ## ## Test suite. ## ## ------------ ## TESTSUITE_AT = \ bind00.at\ cfhelp.at\ empty.at\ format00.at\ format01.at\ format02.at\ glob00.at\ glob01.at\ glob02.at\ glob03.at\ glob04.at\ glob05.at\ grecs00.at\ enum.at\ incl00.at\ incl01.at\ incl02.at\ incl03.at\ join.at\ json00.at\ json01.at\ locus00.at\ locus01.at\ locus02.at\ locus-bind.at\ locus-git.at\ locus-meta1.at\ parser-dhcpd.at\ parser-bind.at\ parser-git.at\ parser-meta1.at\ path-locus.at\ peek00.at\ peek01.at\ peek02.at\ peek03.at\ reduce00.at\ reduce01.at\ reduce02.at\ reduce03.at\ set.at\ sort00.at\ sort01.at\ stradj.at\ strcat.at\ testsuite.at\ vercmp.at\ @GRECS_DISTCK_AT@ TESTSUITE = $(srcdir)/testsuite M4=m4 AUTOTEST = $(AUTOM4TE) --language=autotest $(TESTSUITE): package.m4 $(TESTSUITE_AT) $(AUTOTEST) -I $(srcdir) testsuite.at -o $@.tmp mv $@.tmp $@ atconfig: $(top_builddir)/config.status cd $(top_builddir) && ./config.status tests/$@ clean-local: clean-wordsplit test ! -f $(TESTSUITE) || $(SHELL) $(TESTSUITE) --clean check-local: check-wordsplit atconfig atlocal $(TESTSUITE) $(noinst_PROGRAMS) $(SHELL) $(TESTSUITE) # Run the test suite on the *installed* tree. #installcheck-local: # $(SHELL) $(TESTSUITE) AUTOTEST_PATH=$(exec_prefix)/bin noinst_PROGRAMS = \ distck\ gcffmt\ gcfenum\ gcfpeek\ gcfset\ gcfver if GRECS_COND_JSON noinst_PROGRAMS += json endif LDADD = @GRECS_LDADD@ $(LIBINTL) @GRECS_HOST_PROJECT_LDADD@ AM_CPPFLAGS = @GRECS_INCLUDES@ @GRECS_HOST_PROJECT_INCLUDES@ # Wordsplit testsuite WSTEST = $(srcdir)/wstest EXTRA_DIST += wstest wspackage.m4 wordsplit-version.h $(WSTEST): $(top_srcdir)/@GRECS_SUBDIR@/wordsplit/wordsplit.at $(srcdir)/wspackage.m4 $(AM_V_GEN)$(AUTOTEST) -I $(srcdir) \ wspackage.m4 \ $(top_srcdir)/@GRECS_SUBDIR@/wordsplit/wordsplit.at \ -o $(WSTEST).tmp $(AM_V_at)mv $(WSTEST).tmp $(WSTEST) $(srcdir)/wspackage.m4: $(top_srcdir)/configure.ac $(top_srcdir)/@GRECS_SUBDIR@/am/grecs.m4 $(AM_V_GEN){\ if test -e $(top_srcdir)/@GRECS_SUBDIR@/wordsplit/.git; then \ wsversion=$$(cd $(top_srcdir)/@GRECS_SUBDIR@/wordsplit; git describe); \ else \ wsversion="unknown"; \ fi;\ echo 'm4_define([AT_PACKAGE_NAME], [wordsplit])'; \ echo 'm4_define([AT_PACKAGE_TARNAME], [wordsplit])'; \ echo "m4_define([AT_PACKAGE_VERSION], [$$wsversion])"; \ echo 'm4_define([AT_PACKAGE_STRING], [AT_PACKAGE_TARNAME AT_PACKAGE_VERSION])'; \ echo 'm4_define([AT_PACKAGE_BUGREPORT], [@PACKAGE_BUGREPORT@])'; \ } > $(srcdir)/wspackage.m4 $(srcdir)/wordsplit-version.h: $(srcdir)/wspackage.m4 $(AM_V_GEN){ echo "m4_divert(-1)";\ echo "m4_changequote([,])";\ echo "m4_changecom([//])";\ echo "m4_include($(srcdir)/wspackage.m4)";\ echo 'm4_divert(0)#define WORDSPLIT_VERSION "AT_PACKAGE_VERSION"'; } | \ $(M4) -P - > $(srcdir)/wordsplit-version.h noinst_PROGRAMS += wsp wsp_SOURCES = nodist_wsp_SOURCES = wsp.c wsp.o: $(srcdir)/wordsplit-version.h VPATH += $(top_srcdir)/@GRECS_SUBDIR@/wordsplit clean-wordsplit: test ! -f $(WSTEST) || $(SHELL) $(WSTEST) --clean check-wordsplit: atconfig atlocal $(WSTEST) $(noinst_PROGRAMS) $(SHELL) $(WSTEST) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/tests/testsuite.at���������������������������������������������������������������0000644�0001750�0001750�00000007474�13511403723�020025� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of grecs - Gray's Extensible Configuration System -*- Autotest -*- # Copyright (C) 2007-2016 Sergey Poznyakoff # # Grecs 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. # # Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. m4_version_prereq([2.52g]) dnl # Standard exit codes (from sysexits.h) m4_define([EX_OK], 0) dnl successful termination m4_define([EX__BASE], 64) dnl base value for error messages m4_define([EX_USAGE], 64) dnl command line usage error m4_define([EX_DATAERR], 65) dnl data format error m4_define([EX_NOINPUT], 66) dnl cannot open input m4_define([EX_NOUSER], 67) dnl addressee unknown m4_define([EX_NOHOST], 68) dnl host name unknown m4_define([EX_UNAVAILABLE], 69) dnl service unavailable m4_define([EX_SOFTWARE], 70) dnl internal software error m4_define([EX_OSERR], 71) dnl system error (e.g., can't fork) m4_define([EX_OSFILE], 72) dnl critical OS file missing m4_define([EX_CANTCREAT], 73) dnl can't create (user) output file m4_define([EX_IOERR], 74) dnl input/output error m4_define([EX_TEMPFAIL], 75) dnl temp failure; user is invited to retry m4_define([EX_PROTOCOL], 76) dnl remote error in protocol m4_define([EX_NOPERM], 77) dnl permission denied m4_define([EX_CONFIG], 78) dnl configuration error m4_define([AT_SKIP_TEST],[exit 77]) dnl GRECS_TEST([config],[cmd],[status],[stdout],[stderr]) m4_define([GRECS_TEST],[ AT_DATA([test.cf],[$1]) AT_CHECK([$2 ./test.cf],m4_shift(m4_shift($@)))]) dnl # Begin tests AT_INIT m4_if(GRECS_DISTCK_AT,,,[m4_include(GRECS_DISTCK_AT)]) AT_BANNER([Formats]) m4_include([format00.at]) m4_include([format01.at]) m4_include([format02.at]) AT_BANNER([Options]) m4_include([stradj.at]) m4_include([strcat.at]) AT_BANNER([Enumeration]) m4_include([enum.at]) AT_BANNER([Peek a node]) m4_include([peek00.at]) m4_include([peek01.at]) m4_include([peek02.at]) m4_include([peek03.at]) AT_BANNER([Globbing]) m4_include([glob00.at]) m4_include([glob01.at]) m4_include([glob02.at]) m4_include([glob03.at]) m4_include([glob04.at]) m4_include([glob05.at]) AT_BANNER([Reduce]) m4_include([reduce00.at]) m4_include([reduce01.at]) m4_include([reduce02.at]) m4_include([reduce03.at]) AT_BANNER([Sort]) m4_include([sort00.at]) m4_include([sort01.at]) AT_BANNER([Include]) m4_include([incl00.at]) m4_include([incl01.at]) m4_include([incl02.at]) m4_include([incl03.at]) m4_ifdef([ENABLE_BIND_PARSER],[ AT_BANNER([BIND Parser]) m4_include([parser-bind.at]) m4_include([bind00.at]) m4_include([locus-bind.at]) ]) m4_ifdef([ENABLE_DHCPD_PARSER],[ AT_BANNER([DHCPD Parser]) m4_include([parser-dhcpd.at]) ]) m4_ifdef([ENABLE_META1_PARSER],[ AT_BANNER([MeTA1 Parser]) m4_include([parser-meta1.at]) m4_include([locus-meta1.at]) ]) m4_ifdef([ENABLE_GIT_PARSER],[ AT_BANNER([Git Parser]) m4_include([parser-git.at]) m4_include([locus-git.at]) ]) AT_BANNER([Other operatios]) m4_include([join.at]) m4_include([cfhelp.at]) m4_include([set.at]) m4_include([vercmp.at]) m4_include([grecs00.at]) m4_include([empty.at]) AT_BANNER([Locations]) m4_include([locus00.at]) m4_include([locus01.at]) m4_include([locus02.at]) m4_include([path-locus.at]) m4_ifdef([ENABLE_JSON],[ AT_BANNER(JSON) m4_include([json00.at]) m4_include([json01.at]) ]) # End of testsuite.at ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/tests/locus-git.at���������������������������������������������������������������0000644�0001750�0001750�00000003647�13244106110�017671� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of grecs -*- Autotest -*- # Copyright (C) 2011-2016 Sergey Poznyakoff # # Grecs 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. # # Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. AT_SETUP(Locations: git) AT_KEYWORDS([locus git locus-git]) AT_DATA([test.cf],[[[core]] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true [[remote "origin"]] url = ssh://git.gnu.org.ua/gitroot/grecs.git fetch = +refs/heads/*:refs/remotes/origin/* ]) AT_CHECK([gcffmt -type=GIT -locus test.cf], [0], [test.cf:2.9-35: .core.repositoryformatversion: "0" test.cf:3.9-23: .core.filemode: "true" test.cf:4.9-20: .core.bare: "false" test.cf:5.9-31: .core.logallrefupdates: "true" test.cf:7.9-52: .remote.origin.url: "ssh://git.gnu.org.ua/gitroot/grecs.git" test.cf:8.9-51: .remote.origin.fetch: "+refs/heads/*:refs/remotes/origin/*" ]) AT_CHECK([gcffmt -type=GIT -novalue -locus test.cf], [0], [test.cf:2.9-31: .core.repositoryformatversion test.cf:3.9-16: .core.filemode test.cf:4.9-12: .core.bare test.cf:5.9-24: .core.logallrefupdates test.cf:7.9-11: .remote.origin.url test.cf:8.9-13: .remote.origin.fetch ]) AT_CHECK([gcffmt -type=GIT -nopath -locus test.cf], [0], [test.cf:2.35: "0" test.cf:3.20-23: "true" test.cf:4.16-20: "false" test.cf:5.28-31: "true" test.cf:7.15-52: "ssh://git.gnu.org.ua/gitroot/grecs.git" test.cf:8.17-51: "+refs/heads/*:refs/remotes/origin/*" ]) AT_CLEANUP �����������������������������������������������������������������������������������������direvent-5.2/grecs/tests/enum.at��������������������������������������������������������������������0000644�0001750�0001750�00000002261�13244106110�016716� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of grecs -*- Autotest -*- # Copyright (C) 2007-2016 Sergey Poznyakoff # # Grecs 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. # # Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([Enumerate nodes]) AT_KEYWORDS([enum]) AT_CHECK([gcfenum $abs_srcdir/gcf1.conf], [0], [.scalar .listvar .compound .mailbox .mailbox.mailbox-pattern .mailbox.mailbox-type .logging .logging.syslog .logging.facility .program="foo" .program="foo".logging .program="foo".logging.syslog .program="foo".logging.facility .program="foo".scalar .program="bar" .program="bar".logging .program="bar".logging.syslog .program="bar".logging.facility .program="bar".logging.tag .program="bar".scalar ]) AT_CLEANUP �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/tests/json01.at������������������������������������������������������������������0000644�0001750�0001750�00000003354�13244106110�017070� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of Grecs -*- Autotest -*- # Copyright (C) 2015-2016 Sergey Poznyakoff # # Grecs 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. # # Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([Lookup]) AT_KEYWORDS([json json01 lookup]) AT_DATA([input.json],[[ { "firstName": "John", "lastName": "Smith", "isAlive": true, "age": 25, "address": { "streetAddress": "21 2nd Street", "city": "New York", "state": "NY", "postalCode": "10021-3100" }, "phoneNumbers": [ { "type": "home", "number": "212 555-1234" }, { "type": "office", "number": "646 555-4567" } ], "children": [], "spouse": null } ]]) m4_define([json_query],[ echo $1 json -indent=2 -precision=0 -file=input.json -search=$1 echo =$? ]) AT_CHECK([json_query(age) json_query(address) json_query(address.postalCode) json_query(phoneNumbers.1.number) json_query(x) json_query(x.y.z) json_query(phoneNumbers.2.number) json_query(phoneNumbers.x) ], [0], [age 25 =0 address { "city": "New York", "postalCode": "10021-3100", "state": "NY", "streetAddress": "21 2nd Street" } =0 address.postalCode "10021-3100" =0 phoneNumbers.1.number "646 555-4567" =0 x =4 x.y.z =4 phoneNumbers.2.number =4 phoneNumbers.x =4 ]) AT_CLEANUP ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/tests/glob05.at������������������������������������������������������������������0000644�0001750�0001750�00000002001�13244106110�017032� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of grecs -*- Autotest -*- # Copyright (C) 2012-2016 Sergey Poznyakoff # # Grecs 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. # # Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. AT_SETUP(Subtree - percent) AT_KEYWORDS([peek peek08 glob glob05]) AT_DATA([test.cf],[text "string"; block { foo { quux 1; }; bar 123; baz { quux 2; } crex { quux 3; } } ]) AT_CHECK([gcfpeek -match -root=block test.cf '.%.quux'], [0], [.block.foo.quux: "1" .block.baz.quux: "2" .block.crex.quux: "3" ]) AT_CLEANUP �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/tests/sort01.at������������������������������������������������������������������0000644�0001750�0001750�00000001543�13244106110�017104� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of grecs -*- Autotest -*- # Copyright (C) 2007-2016 Sergey Poznyakoff # # Grecs 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. # # Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([Stable sort]) AT_KEYWORDS([sort sort01]) GRECS_TEST([a 10; a 2; a 31; a 4; a 13; ], [gcffmt -sort], [0], [.a: "10" .a: "2" .a: "31" .a: "4" .a: "13" ]) AT_CLEANUP �������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/tests/locus01.at�����������������������������������������������������������������0000644�0001750�0001750�00000001654�13244106110�017245� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of grecs -*- Autotest -*- # Copyright (C) 2007-2016 Sergey Poznyakoff # # Grecs 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. # # Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. AT_SETUP(Multiline strings) AT_KEYWORDS([locus multiline locus01]) AT_DATA([test.cf],[ string <<EOT a multiline string EOT; ]) AT_CHECK([gcfpeek -nopath -locus test.cf .string], [0], [test.cf:3.1-5.8: "a\nmultiline\n string\n" ]) AT_CLEANUP ������������������������������������������������������������������������������������direvent-5.2/grecs/tests/peek01.at������������������������������������������������������������������0000644�0001750�0001750�00000001676�13244106110�017050� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of grecs -*- Autotest -*- # Copyright (C) 2007-2016 Sergey Poznyakoff # # Grecs 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. # # Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. AT_SETUP(Nested nodes) AT_KEYWORDS([peek peek01]) AT_CHECK([gcfpeek $abs_srcdir/gcf1.conf .program="foo".scalar], [0], [.program="foo".scalar: "no" ]) AT_CHECK([gcfpeek $abs_srcdir/gcf1.conf .program="bar".scalar], [0], [.program="bar".scalar: "25" ]) AT_CLEANUP ������������������������������������������������������������������direvent-5.2/grecs/tests/glob02.at������������������������������������������������������������������0000644�0001750�0001750�00000001606�13244106110�017041� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of grecs -*- Autotest -*- # Copyright (C) 2007-2016 Sergey Poznyakoff # # Grecs 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. # # Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. AT_SETUP(Intermediate wildcard) AT_KEYWORDS([peek peek05 glob glob02]) AT_CHECK([gcfpeek -match $abs_srcdir/gcf1.conf .program="foo".*.facility], [0], [.program="foo".logging.facility: "local1" ]) AT_CLEANUP ��������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/tests/json.c���������������������������������������������������������������������0000644�0001750�0001750�00000005527�13244106110�016551� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* grecs - Gray's Extensible Configuration System Copyright (C) 2007-2016 Sergey Poznyakoff Grecs 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. Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include <unistd.h> #include <sys/stat.h> #include <fcntl.h> #include <string.h> #include <errno.h> #include <stdlib.h> #include "grecs.h" #include "grecs/json.h" static void printer(void *d, char const *buf, size_t size) { FILE *fp = d; fwrite(buf, size, 1, fp); } struct json_format fmt = { 0, -1, printer, NULL }; static void usage(const char *arg, FILE *fp, int code) { fprintf(fp, "usage: %s [-file=FILE][-indent=N][-precision=N] [expr]\n", arg); exit(code); } int main(int argc, char **argv) { char *progname = argv[0]; char *file = NULL; char *input; size_t size; struct json_value *obj; char *key = NULL; while (--argc) { char *arg = *++argv; if (strncmp(arg, "-file=", 6) == 0) file = arg + 6; else if (strncmp(arg, "-indent=", 8) == 0) fmt.indent = atoi(arg + 8); else if (strncmp(arg, "-search=", 8) == 0) key = arg + 8; else if (strncmp(arg, "-precision=", 11) == 0) fmt.precision = atoi(arg + 11); else if (arg[0] == '-') usage(progname, stderr, 1); else break; } if (file) { struct stat st; int fd; ssize_t n; if (argc != 0) usage(progname, stderr, 1); fd = open(file, O_RDONLY); if (fd == -1) { perror(file); return 2; } if (fstat(fd, &st)) { perror("fstat"); return 2; } size = (size_t) st.st_size; if (size != st.st_size) abort(); input = grecs_malloc(size + 1); n = read(fd, input, size); if (n == -1) { perror("read"); return 2; } if (n != size) { fprintf(stderr, "%s: short read from %s\n", progname, file); return 2; } input[n] = 0; close(fd); } else if (argc == 1) { if (file) usage(progname, stderr, 1); input = *argv; size = strlen(input); } else usage(progname, stderr, 1); obj = json_parse_string(input, size); if (!obj) { json_err_locus.beg.file = json_err_locus.end.file = file ? file : "input"; grecs_error(&json_err_locus, 0, "%s", json_err_diag); return 3; } if (key) { struct json_value *p = json_value_lookup(obj, key); if (!p) return 4; obj = p; } fmt.data = stdout; json_format_value(obj, &fmt); putchar('\n'); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/tests/path-locus.at��������������������������������������������������������������0000644�0001750�0001750�00000006016�13244106110�020033� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of grecs -*- Autotest -*- # Copyright (C) 2011-2016 Sergey Poznyakoff # # Grecs 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. # # Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. AT_SETUP(Path) AT_KEYWORDS([locus path]) AT_DATA([test.cf],[.scalar: "yes" .listvar: ("a", "2", "b", "c") .compound: "stmt" "2" "foo" .mailbox.mailbox-pattern: \ "maildir:/var/mail;type=index;param=2;user=${user}" .mailbox.mailbox-type: "maildir" .logging.syslog: "yes" .logging.facility: "mail" .program="foo".logging.syslog: "yes" .program="foo".logging.facility: "local1" .program="foo".scalar: "no" .program="bar".logging.syslog: "no" .program="bar".logging.facility: "local2" .program="bar".logging.tag: "baz" .program="bar".scalar: "25" ]) AT_CHECK([gcffmt -type=path -locus test.cf], [0], [test.cf:1.1-14: .scalar: "yes" test.cf:2.1-30: .listvar: ("a", "2", "b", "c") test.cf:3.1-27: .compound: "stmt" "2" "foo" test.cf:4.1-5.53: .mailbox.mailbox-pattern: "maildir:/var/mail;type=index;param=2;user=${user}" test.cf:6.1-32: .mailbox.mailbox-type: "maildir" test.cf:7.1-22: .logging.syslog: "yes" test.cf:8.1-25: .logging.facility: "mail" test.cf:9.1-36: .program="foo".logging.syslog: "yes" test.cf:10.1-41: .program="foo".logging.facility: "local1" test.cf:11.1-27: .program="foo".scalar: "no" test.cf:12.1-35: .program="bar".logging.syslog: "no" test.cf:13.1-41: .program="bar".logging.facility: "local2" test.cf:14.1-33: .program="bar".logging.tag: "baz" test.cf:15.1-27: .program="bar".scalar: "25" ]) AT_CHECK([gcffmt -type=path -locus -novalue test.cf], [0], [test.cf:1.1-7: .scalar test.cf:2.1-8: .listvar test.cf:3.1-9: .compound test.cf:4.1-24: .mailbox.mailbox-pattern test.cf:6.1-21: .mailbox.mailbox-type test.cf:7.1-15: .logging.syslog test.cf:8.1-17: .logging.facility test.cf:9.1-29: .program="foo".logging.syslog test.cf:10.1-31: .program="foo".logging.facility test.cf:11.1-21: .program="foo".scalar test.cf:12.1-29: .program="bar".logging.syslog test.cf:13.1-31: .program="bar".logging.facility test.cf:14.1-26: .program="bar".logging.tag test.cf:15.1-21: .program="bar".scalar ]) AT_CHECK([gcffmt -type=path -locus -nopath test.cf], [0], [test.cf:1.10-14: "yes" test.cf:2.11-30: ("a", "2", "b", "c") test.cf:3.12-27: "stmt" "2" "foo" test.cf:5.3-53: "maildir:/var/mail;type=index;param=2;user=${user}" test.cf:6.24-32: "maildir" test.cf:7.18-22: "yes" test.cf:8.20-25: "mail" test.cf:9.32-36: "yes" test.cf:10.34-41: "local1" test.cf:11.24-27: "no" test.cf:12.32-35: "no" test.cf:13.34-41: "local2" test.cf:14.29-33: "baz" test.cf:15.24-27: "25" ]) AT_CLEANUP ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/tests/testsuite������������������������������������������������������������������0000755�0001750�0001750�00000326427�13512402633�017427� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Generated from testsuite.at by GNU Autoconf 2.69. # # Copyright (C) 2009-2012 Free Software Foundation, Inc. # # This test suite is free software; the Free Software Foundation gives # unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" SHELL=${CONFIG_SHELL-/bin/sh} # How were we run? at_cli_args="$@" # Not all shells have the 'times' builtin; the subshell is needed to make # sure we discard the 'times: not found' message from the shell. at_times_p=false (times) >/dev/null 2>&1 && at_times_p=: # CLI Arguments to pass to the debugging scripts. at_debug_args= # -e sets to true at_errexit_p=false # Shall we be verbose? ':' means no, empty means yes. at_verbose=: at_quiet= # Running several jobs in parallel, 0 means as many as test groups. at_jobs=1 at_traceon=: at_trace_echo=: at_check_filter_trace=: # Shall we keep the debug scripts? Must be `:' when the suite is # run by a debug script, so that the script doesn't remove itself. at_debug_p=false # Display help message? at_help_p=false # Display the version message? at_version_p=false # List test groups? at_list_p=false # --clean at_clean=false # Test groups to run at_groups= # Whether to rerun failed tests. at_recheck= # Whether a write failure occurred at_write_fail=0 # The directory we run the suite in. Default to . if no -C option. at_dir=`pwd` # An absolute reference to this testsuite script. case $as_myself in [\\/]* | ?:[\\/]* ) at_myself=$as_myself ;; * ) at_myself=$at_dir/$as_myself ;; esac # Whether -C is in effect. at_change_dir=false # Whether to enable colored test results. at_color=no # List of the tested programs. at_tested='' # As many question marks as there are digits in the last test group number. # Used to normalize the test group numbers so that `ls' lists them in # numerical order. at_format='??' # Description of all the test groups. at_help_all="1;format00.at:17;Default format;format format00; 2;format01.at:17;Locus;format format01; 3;format02.at:17;Custom delimiter;format format02; 4;stradj.at:17;String location adjustment;format option stradj; 5;strcat.at:17;String concatenation;format option strcat concat; 6;enum.at:17;Enumerate nodes;enum; 7;peek00.at:17;Peek;peek peek00; 8;peek01.at:17;Nested nodes;peek peek01; 9;peek02.at:17;Block nodes;peek peek02; 10;peek03.at:17;Nested blocks;peek peek03; 11;glob00.at:17;Leading wildcard;peek peek04 glob glob00; 12;glob01.at:17;Trailing wildcard;peek peek05 glob glob01; 13;glob02.at:17;Intermediate wildcard;peek peek05 glob glob02; 14;glob03.at:17;Multiple wildcards;peek peek06 glob glob03; 15;glob04.at:17;Subtree - asterisk;peek peek07 glob glob04; 16;glob05.at:17;Subtree - percent;peek peek08 glob glob05; 17;reduce00.at:17;Simple statement;reduce reduce00; 18;reduce01.at:17;Block statement;reduce reduce01; 19;reduce02.at:17;Nested block statement;reduce reduce02; 20;reduce03.at:17;Table driven reduction;reduce reduce03; 21;sort00.at:17;Sort;sort sort00; 22;sort01.at:17;Stable sort;sort sort01; 23;incl00.at:17;Include path;include incl00; 24;incl01.at:17;Recursive inclusion;include incl01; 25;incl02.at:17;Include once;include incl02; 26;incl03.at:17;Wildcard inclusion;include incl03; 27;join.at:17;Join;join; 28;cfhelp.at:17;Help;help; 29;set.at:17;Set values;set; 30;vercmp.at:17;Version comparator;vercmp; 31;grecs00.at:17;C comments in GRECS-style parser;parser grecs grecs00; 32;empty.at:17;Empty input file;parser empty; 33;locus00.at:17;Scalar value;locus scalar locus00; 34;locus01.at:17;Multiline strings;locus multiline locus01; 35;locus02.at:17;Adjacent quoted strings;locus adjacent locus02; 36;path-locus.at:17;Path;locus path; " # List of the all the test groups. at_groups_all=`$as_echo "$at_help_all" | sed 's/;.*//'` # at_fn_validate_ranges NAME... # ----------------------------- # Validate and normalize the test group number contained in each variable # NAME. Leading zeroes are treated as decimal. at_fn_validate_ranges () { for at_grp do eval at_value=\$$at_grp if test $at_value -lt 1 || test $at_value -gt 36; then $as_echo "invalid test group: $at_value" >&2 exit 1 fi case $at_value in 0*) # We want to treat leading 0 as decimal, like expr and test, but # AS_VAR_ARITH treats it as octal if it uses $(( )). # With XSI shells, ${at_value#${at_value%%[1-9]*}} avoids the # expr fork, but it is not worth the effort to determine if the # shell supports XSI when the user can just avoid leading 0. eval $at_grp='`expr $at_value + 0`' ;; esac done } at_prev= for at_option do # If the previous option needs an argument, assign it. if test -n "$at_prev"; then at_option=$at_prev=$at_option at_prev= fi case $at_option in *=?*) at_optarg=`expr "X$at_option" : '[^=]*=\(.*\)'` ;; *) at_optarg= ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $at_option in --help | -h ) at_help_p=: ;; --list | -l ) at_list_p=: ;; --version | -V ) at_version_p=: ;; --clean | -c ) at_clean=: ;; --color ) at_color=always ;; --color=* ) case $at_optarg in no | never | none) at_color=never ;; auto | tty | if-tty) at_color=auto ;; always | yes | force) at_color=always ;; *) at_optname=`echo " $at_option" | sed 's/^ //; s/=.*//'` as_fn_error $? "unrecognized argument to $at_optname: $at_optarg" ;; esac ;; --debug | -d ) at_debug_p=: ;; --errexit | -e ) at_debug_p=: at_errexit_p=: ;; --verbose | -v ) at_verbose=; at_quiet=: ;; --trace | -x ) at_traceon='set -x' at_trace_echo=echo at_check_filter_trace=at_fn_filter_trace ;; [0-9] | [0-9][0-9] | [0-9][0-9][0-9] | [0-9][0-9][0-9][0-9]) at_fn_validate_ranges at_option as_fn_append at_groups "$at_option$as_nl" ;; # Ranges [0-9]- | [0-9][0-9]- | [0-9][0-9][0-9]- | [0-9][0-9][0-9][0-9]-) at_range_start=`echo $at_option |tr -d X-` at_fn_validate_ranges at_range_start at_range=`$as_echo "$at_groups_all" | \ sed -ne '/^'$at_range_start'$/,$p'` as_fn_append at_groups "$at_range$as_nl" ;; -[0-9] | -[0-9][0-9] | -[0-9][0-9][0-9] | -[0-9][0-9][0-9][0-9]) at_range_end=`echo $at_option |tr -d X-` at_fn_validate_ranges at_range_end at_range=`$as_echo "$at_groups_all" | \ sed -ne '1,/^'$at_range_end'$/p'` as_fn_append at_groups "$at_range$as_nl" ;; [0-9]-[0-9] | [0-9]-[0-9][0-9] | [0-9]-[0-9][0-9][0-9] | \ [0-9]-[0-9][0-9][0-9][0-9] | [0-9][0-9]-[0-9][0-9] | \ [0-9][0-9]-[0-9][0-9][0-9] | [0-9][0-9]-[0-9][0-9][0-9][0-9] | \ [0-9][0-9][0-9]-[0-9][0-9][0-9] | \ [0-9][0-9][0-9]-[0-9][0-9][0-9][0-9] | \ [0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9] ) at_range_start=`expr $at_option : '\(.*\)-'` at_range_end=`expr $at_option : '.*-\(.*\)'` if test $at_range_start -gt $at_range_end; then at_tmp=$at_range_end at_range_end=$at_range_start at_range_start=$at_tmp fi at_fn_validate_ranges at_range_start at_range_end at_range=`$as_echo "$at_groups_all" | \ sed -ne '/^'$at_range_start'$/,/^'$at_range_end'$/p'` as_fn_append at_groups "$at_range$as_nl" ;; # Directory selection. --directory | -C ) at_prev=--directory ;; --directory=* ) at_change_dir=: at_dir=$at_optarg if test x- = "x$at_dir" ; then at_dir=./- fi ;; # Parallel execution. --jobs | -j ) at_jobs=0 ;; --jobs=* | -j[0-9]* ) if test -n "$at_optarg"; then at_jobs=$at_optarg else at_jobs=`expr X$at_option : 'X-j\(.*\)'` fi case $at_jobs in *[!0-9]*) at_optname=`echo " $at_option" | sed 's/^ //; s/[0-9=].*//'` as_fn_error $? "non-numeric argument to $at_optname: $at_jobs" ;; esac ;; # Keywords. --keywords | -k ) at_prev=--keywords ;; --keywords=* ) at_groups_selected=$at_help_all at_save_IFS=$IFS IFS=, set X $at_optarg shift IFS=$at_save_IFS for at_keyword do at_invert= case $at_keyword in '!'*) at_invert="-v" at_keyword=`expr "X$at_keyword" : 'X!\(.*\)'` ;; esac # It is on purpose that we match the test group titles too. at_groups_selected=`$as_echo "$at_groups_selected" | grep -i $at_invert "^[1-9][^;]*;.*[; ]$at_keyword[ ;]"` done # Smash the keywords. at_groups_selected=`$as_echo "$at_groups_selected" | sed 's/;.*//'` as_fn_append at_groups "$at_groups_selected$as_nl" ;; --recheck) at_recheck=: ;; *=*) at_envvar=`expr "x$at_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $at_envvar in '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$at_envvar'" ;; esac at_value=`$as_echo "$at_optarg" | sed "s/'/'\\\\\\\\''/g"` # Export now, but save eval for later and for debug scripts. export $at_envvar as_fn_append at_debug_args " $at_envvar='$at_value'" ;; *) $as_echo "$as_me: invalid option: $at_option" >&2 $as_echo "Try \`$0 --help' for more information." >&2 exit 1 ;; esac done # Verify our last option didn't require an argument if test -n "$at_prev"; then : as_fn_error $? "\`$at_prev' requires an argument" fi # The file containing the suite. at_suite_log=$at_dir/$as_me.log # Selected test groups. if test -z "$at_groups$at_recheck"; then at_groups=$at_groups_all else if test -n "$at_recheck" && test -r "$at_suite_log"; then at_oldfails=`sed -n ' /^Failed tests:$/,/^Skipped tests:$/{ s/^[ ]*\([1-9][0-9]*\):.*/\1/p } /^Unexpected passes:$/,/^## Detailed failed tests/{ s/^[ ]*\([1-9][0-9]*\):.*/\1/p } /^## Detailed failed tests/q ' "$at_suite_log"` as_fn_append at_groups "$at_oldfails$as_nl" fi # Sort the tests, removing duplicates. at_groups=`$as_echo "$at_groups" | sort -nu | sed '/^$/d'` fi if test x"$at_color" = xalways \ || { test x"$at_color" = xauto && test -t 1; }; then at_red=`printf '\033[0;31m'` at_grn=`printf '\033[0;32m'` at_lgn=`printf '\033[1;32m'` at_blu=`printf '\033[1;34m'` at_std=`printf '\033[m'` else at_red= at_grn= at_lgn= at_blu= at_std= fi # Help message. if $at_help_p; then cat <<_ATEOF || at_write_fail=1 Usage: $0 [OPTION]... [VARIABLE=VALUE]... [TESTS] Run all the tests, or the selected TESTS, given by numeric ranges, and save a detailed log file. Upon failure, create debugging scripts. Do not change environment variables directly. Instead, set them via command line arguments. Set \`AUTOTEST_PATH' to select the executables to exercise. Each relative directory is expanded as build and source directories relative to the top level of this distribution. E.g., from within the build directory /tmp/foo-1.0, invoking this: $ $0 AUTOTEST_PATH=bin is equivalent to the following, assuming the source directory is /src/foo-1.0: PATH=/tmp/foo-1.0/bin:/src/foo-1.0/bin:\$PATH $0 _ATEOF cat <<_ATEOF || at_write_fail=1 Operation modes: -h, --help print the help message, then exit -V, --version print version number, then exit -c, --clean remove all the files this test suite might create and exit -l, --list describes all the tests, or the selected TESTS _ATEOF cat <<_ATEOF || at_write_fail=1 Execution tuning: -C, --directory=DIR change to directory DIR before starting --color[=never|auto|always] enable colored test results on terminal, or always -j, --jobs[=N] Allow N jobs at once; infinite jobs with no arg (default 1) -k, --keywords=KEYWORDS select the tests matching all the comma-separated KEYWORDS multiple \`-k' accumulate; prefixed \`!' negates a KEYWORD --recheck select all tests that failed or passed unexpectedly last time -e, --errexit abort as soon as a test fails; implies --debug -v, --verbose force more detailed output default for debugging scripts -d, --debug inhibit clean up and top-level logging default for debugging scripts -x, --trace enable tests shell tracing _ATEOF cat <<_ATEOF || at_write_fail=1 Report bugs to <bug-direvent@gnu.org.ua>. General help using GNU software: <http://www.gnu.org/gethelp/>. _ATEOF exit $at_write_fail fi # List of tests. if $at_list_p; then cat <<_ATEOF || at_write_fail=1 GNU Direvent 5.2 test suite test groups: NUM: FILE-NAME:LINE TEST-GROUP-NAME KEYWORDS _ATEOF # Pass an empty line as separator between selected groups and help. $as_echo "$at_groups$as_nl$as_nl$at_help_all" | awk 'NF == 1 && FS != ";" { selected[$ 1] = 1 next } /^$/ { FS = ";" } NF > 0 { if (selected[$ 1]) { printf " %3d: %-18s %s\n", $ 1, $ 2, $ 3 if ($ 4) { lmax = 79 indent = " " line = indent len = length (line) n = split ($ 4, a, " ") for (i = 1; i <= n; i++) { l = length (a[i]) + 1 if (i > 1 && len + l > lmax) { print line line = indent " " a[i] len = length (line) } else { line = line " " a[i] len += l } } if (n) print line } } }' || at_write_fail=1 exit $at_write_fail fi if $at_version_p; then $as_echo "$as_me (GNU Direvent 5.2)" && cat <<\_ATEOF || at_write_fail=1 Copyright (C) 2012 Free Software Foundation, Inc. This test suite is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ATEOF exit $at_write_fail fi # Should we print banners? Yes if more than one test is run. case $at_groups in #( *$as_nl* ) at_print_banners=: ;; #( * ) at_print_banners=false ;; esac # Text for banner N, set to a single space once printed. # Banner 1. testsuite.at:50 # Category starts at test group 1. at_banner_text_1="Formats" # Banner 2. testsuite.at:55 # Category starts at test group 4. at_banner_text_2="Options" # Banner 3. testsuite.at:59 # Category starts at test group 6. at_banner_text_3="Enumeration" # Banner 4. testsuite.at:62 # Category starts at test group 7. at_banner_text_4="Peek a node" # Banner 5. testsuite.at:68 # Category starts at test group 11. at_banner_text_5="Globbing" # Banner 6. testsuite.at:76 # Category starts at test group 17. at_banner_text_6="Reduce" # Banner 7. testsuite.at:82 # Category starts at test group 21. at_banner_text_7="Sort" # Banner 8. testsuite.at:86 # Category starts at test group 23. at_banner_text_8="Include" # Banner 9. testsuite.at:116 # Category starts at test group 27. at_banner_text_9="Other operatios" # Banner 10. testsuite.at:124 # Category starts at test group 33. at_banner_text_10="Locations" # Take any -C into account. if $at_change_dir ; then test x != "x$at_dir" && cd "$at_dir" \ || as_fn_error $? "unable to change directory" at_dir=`pwd` fi # Load the config files for any default variable assignments. for at_file in atconfig atlocal do test -r $at_file || continue . ./$at_file || as_fn_error $? "invalid content: $at_file" done # Autoconf <=2.59b set at_top_builddir instead of at_top_build_prefix: : "${at_top_build_prefix=$at_top_builddir}" # Perform any assignments requested during argument parsing. eval "$at_debug_args" # atconfig delivers names relative to the directory the test suite is # in, but the groups themselves are run in testsuite-dir/group-dir. if test -n "$at_top_srcdir"; then builddir=../.. for at_dir_var in srcdir top_srcdir top_build_prefix do eval at_val=\$at_$at_dir_var case $at_val in [\\/$]* | ?:[\\/]* ) at_prefix= ;; *) at_prefix=../../ ;; esac eval "$at_dir_var=\$at_prefix\$at_val" done fi ## -------------------- ## ## Directory structure. ## ## -------------------- ## # This is the set of directories and files used by this script # (non-literals are capitalized): # # TESTSUITE - the testsuite # TESTSUITE.log - summarizes the complete testsuite run # TESTSUITE.dir/ - created during a run, remains after -d or failed test # + at-groups/ - during a run: status of all groups in run # | + NNN/ - during a run: meta-data about test group NNN # | | + check-line - location (source file and line) of current AT_CHECK # | | + status - exit status of current AT_CHECK # | | + stdout - stdout of current AT_CHECK # | | + stder1 - stderr, including trace # | | + stderr - stderr, with trace filtered out # | | + test-source - portion of testsuite that defines group # | | + times - timestamps for computing duration # | | + pass - created if group passed # | | + xpass - created if group xpassed # | | + fail - created if group failed # | | + xfail - created if group xfailed # | | + skip - created if group skipped # + at-stop - during a run: end the run if this file exists # + at-source-lines - during a run: cache of TESTSUITE line numbers for extraction # + 0..NNN/ - created for each group NNN, remains after -d or failed test # | + TESTSUITE.log - summarizes the group results # | + ... - files created during the group # The directory the whole suite works in. # Should be absolute to let the user `cd' at will. at_suite_dir=$at_dir/$as_me.dir # The file containing the suite ($at_dir might have changed since earlier). at_suite_log=$at_dir/$as_me.log # The directory containing helper files per test group. at_helper_dir=$at_suite_dir/at-groups # Stop file: if it exists, do not start new jobs. at_stop_file=$at_suite_dir/at-stop # The fifo used for the job dispatcher. at_job_fifo=$at_suite_dir/at-job-fifo if $at_clean; then test -d "$at_suite_dir" && find "$at_suite_dir" -type d ! -perm -700 -exec chmod u+rwx \{\} \; rm -f -r "$at_suite_dir" "$at_suite_log" exit $? fi # Don't take risks: use only absolute directories in PATH. # # For stand-alone test suites (ie. atconfig was not found), # AUTOTEST_PATH is relative to `.'. # # For embedded test suites, AUTOTEST_PATH is relative to the top level # of the package. Then expand it into build/src parts, since users # may create executables in both places. AUTOTEST_PATH=`$as_echo "$AUTOTEST_PATH" | sed "s|:|$PATH_SEPARATOR|g"` at_path= as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $AUTOTEST_PATH $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -n "$at_path" && as_fn_append at_path $PATH_SEPARATOR case $as_dir in [\\/]* | ?:[\\/]* ) as_fn_append at_path "$as_dir" ;; * ) if test -z "$at_top_build_prefix"; then # Stand-alone test suite. as_fn_append at_path "$as_dir" else # Embedded test suite. as_fn_append at_path "$at_top_build_prefix$as_dir$PATH_SEPARATOR" as_fn_append at_path "$at_top_srcdir/$as_dir" fi ;; esac done IFS=$as_save_IFS # Now build and simplify PATH. # # There might be directories that don't exist, but don't redirect # builtins' (eg., cd) stderr directly: Ultrix's sh hates that. at_new_path= as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $at_path do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -d "$as_dir" || continue case $as_dir in [\\/]* | ?:[\\/]* ) ;; * ) as_dir=`(cd "$as_dir" && pwd) 2>/dev/null` ;; esac case $PATH_SEPARATOR$at_new_path$PATH_SEPARATOR in *$PATH_SEPARATOR$as_dir$PATH_SEPARATOR*) ;; $PATH_SEPARATOR$PATH_SEPARATOR) at_new_path=$as_dir ;; *) as_fn_append at_new_path "$PATH_SEPARATOR$as_dir" ;; esac done IFS=$as_save_IFS PATH=$at_new_path export PATH # Setting up the FDs. # 5 is the log file. Not to be overwritten if `-d'. if $at_debug_p; then at_suite_log=/dev/null else : >"$at_suite_log" fi exec 5>>"$at_suite_log" # Banners and logs. $as_echo "## ---------------------------- ## ## GNU Direvent 5.2 test suite. ## ## ---------------------------- ##" { $as_echo "## ---------------------------- ## ## GNU Direvent 5.2 test suite. ## ## ---------------------------- ##" echo $as_echo "$as_me: command line was:" $as_echo " \$ $0 $at_cli_args" echo # If ChangeLog exists, list a few lines in case it might help determining # the exact version. if test -n "$at_top_srcdir" && test -f "$at_top_srcdir/ChangeLog"; then $as_echo "## ---------- ## ## ChangeLog. ## ## ---------- ##" echo sed 's/^/| /;10q' "$at_top_srcdir/ChangeLog" echo fi { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } echo # Contents of the config files. for at_file in atconfig atlocal do test -r $at_file || continue $as_echo "$as_me: $at_file:" sed 's/^/| /' $at_file echo done } >&5 ## ------------------------- ## ## Autotest shell functions. ## ## ------------------------- ## # at_fn_banner NUMBER # ------------------- # Output banner NUMBER, provided the testsuite is running multiple groups and # this particular banner has not yet been printed. at_fn_banner () { $at_print_banners || return 0 eval at_banner_text=\$at_banner_text_$1 test "x$at_banner_text" = "x " && return 0 eval "at_banner_text_$1=\" \"" if test -z "$at_banner_text"; then $at_first || echo else $as_echo "$as_nl$at_banner_text$as_nl" fi } # at_fn_banner # at_fn_check_prepare_notrace REASON LINE # --------------------------------------- # Perform AT_CHECK preparations for the command at LINE for an untraceable # command; REASON is the reason for disabling tracing. at_fn_check_prepare_notrace () { $at_trace_echo "Not enabling shell tracing (command contains $1)" $as_echo "$2" >"$at_check_line_file" at_check_trace=: at_check_filter=: : >"$at_stdout"; : >"$at_stderr" } # at_fn_check_prepare_trace LINE # ------------------------------ # Perform AT_CHECK preparations for the command at LINE for a traceable # command. at_fn_check_prepare_trace () { $as_echo "$1" >"$at_check_line_file" at_check_trace=$at_traceon at_check_filter=$at_check_filter_trace : >"$at_stdout"; : >"$at_stderr" } # at_fn_check_prepare_dynamic COMMAND LINE # ---------------------------------------- # Decide if COMMAND at LINE is traceable at runtime, and call the appropriate # preparation function. at_fn_check_prepare_dynamic () { case $1 in *$as_nl*) at_fn_check_prepare_notrace 'an embedded newline' "$2" ;; *) at_fn_check_prepare_trace "$2" ;; esac } # at_fn_filter_trace # ------------------ # Remove the lines in the file "$at_stderr" generated by "set -x" and print # them to stderr. at_fn_filter_trace () { mv "$at_stderr" "$at_stder1" grep '^ *+' "$at_stder1" >&2 grep -v '^ *+' "$at_stder1" >"$at_stderr" } # at_fn_log_failure FILE-LIST # --------------------------- # Copy the files in the list on stdout with a "> " prefix, and exit the shell # with a failure exit code. at_fn_log_failure () { for file do $as_echo "$file:"; sed 's/^/> /' "$file"; done echo 1 > "$at_status_file" exit 1 } # at_fn_check_skip EXIT-CODE LINE # ------------------------------- # Check whether EXIT-CODE is a special exit code (77 or 99), and if so exit # the test group subshell with that same exit code. Use LINE in any report # about test failure. at_fn_check_skip () { case $1 in 99) echo 99 > "$at_status_file"; at_failed=: $as_echo "$2: hard failure"; exit 99;; 77) echo 77 > "$at_status_file"; exit 77;; esac } # at_fn_check_status EXPECTED EXIT-CODE LINE # ------------------------------------------ # Check whether EXIT-CODE is the EXPECTED exit code, and if so do nothing. # Otherwise, if it is 77 or 99, exit the test group subshell with that same # exit code; if it is anything else print an error message referring to LINE, # and fail the test. at_fn_check_status () { case $2 in $1 ) ;; 77) echo 77 > "$at_status_file"; exit 77;; 99) echo 99 > "$at_status_file"; at_failed=: $as_echo "$3: hard failure"; exit 99;; *) $as_echo "$3: exit code was $2, expected $1" at_failed=:;; esac } # at_fn_diff_devnull FILE # ----------------------- # Emit a diff between /dev/null and FILE. Uses "test -s" to avoid useless diff # invocations. at_fn_diff_devnull () { test -s "$1" || return 0 $at_diff "$at_devnull" "$1" } # at_fn_test NUMBER # ----------------- # Parse out test NUMBER from the tail of this file. at_fn_test () { eval at_sed=\$at_sed$1 sed "$at_sed" "$at_myself" > "$at_test_source" } # at_fn_create_debugging_script # ----------------------------- # Create the debugging script $at_group_dir/run which will reproduce the # current test group. at_fn_create_debugging_script () { { echo "#! /bin/sh" && echo 'test "${ZSH_VERSION+set}" = set && alias -g '\''${1+"$@"}'\''='\''"$@"'\''' && $as_echo "cd '$at_dir'" && $as_echo "exec \${CONFIG_SHELL-$SHELL} \"$at_myself\" -v -d $at_debug_args $at_group \${1+\"\$@\"}" && echo 'exit 1' } >"$at_group_dir/run" && chmod +x "$at_group_dir/run" } ## -------------------------------- ## ## End of autotest shell functions. ## ## -------------------------------- ## { $as_echo "## ---------------- ## ## Tested programs. ## ## ---------------- ##" echo } >&5 # Report what programs are being tested. for at_program in : $at_tested do test "$at_program" = : && continue case $at_program in [\\/]* | ?:[\\/]* ) $at_program_=$at_program ;; * ) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -f "$as_dir/$at_program" && break done IFS=$as_save_IFS at_program_=$as_dir/$at_program ;; esac if test -f "$at_program_"; then { $as_echo "$at_srcdir/testsuite.at:47: $at_program_ --version" "$at_program_" --version </dev/null echo } >&5 2>&1 else as_fn_error $? "cannot find $at_program" "$LINENO" 5 fi done { $as_echo "## ------------------ ## ## Running the tests. ## ## ------------------ ##" } >&5 at_start_date=`date` at_start_time=`date +%s 2>/dev/null` $as_echo "$as_me: starting at: $at_start_date" >&5 # Create the master directory if it doesn't already exist. as_dir="$at_suite_dir"; as_fn_mkdir_p || as_fn_error $? "cannot create \`$at_suite_dir'" "$LINENO" 5 # Can we diff with `/dev/null'? DU 5.0 refuses. if diff /dev/null /dev/null >/dev/null 2>&1; then at_devnull=/dev/null else at_devnull=$at_suite_dir/devnull >"$at_devnull" fi # Use `diff -u' when possible. if at_diff=`diff -u "$at_devnull" "$at_devnull" 2>&1` && test -z "$at_diff" then at_diff='diff -u' else at_diff=diff fi # Get the last needed group. for at_group in : $at_groups; do :; done # Extract the start and end lines of each test group at the tail # of this file awk ' BEGIN { FS="" } /^#AT_START_/ { start = NR } /^#AT_STOP_/ { test = substr ($ 0, 10) print "at_sed" test "=\"1," start "d;" (NR-1) "q\"" if (test == "'"$at_group"'") exit }' "$at_myself" > "$at_suite_dir/at-source-lines" && . "$at_suite_dir/at-source-lines" || as_fn_error $? "cannot create test line number cache" "$LINENO" 5 rm -f "$at_suite_dir/at-source-lines" # Set number of jobs for `-j'; avoid more jobs than test groups. set X $at_groups; shift; at_max_jobs=$# if test $at_max_jobs -eq 0; then at_jobs=1 fi if test $at_jobs -ne 1 && { test $at_jobs -eq 0 || test $at_jobs -gt $at_max_jobs; }; then at_jobs=$at_max_jobs fi # If parallel mode, don't output banners, don't split summary lines. if test $at_jobs -ne 1; then at_print_banners=false at_quiet=: fi # Set up helper dirs. rm -rf "$at_helper_dir" && mkdir "$at_helper_dir" && cd "$at_helper_dir" && { test -z "$at_groups" || mkdir $at_groups; } || as_fn_error $? "testsuite directory setup failed" "$LINENO" 5 # Functions for running a test group. We leave the actual # test group execution outside of a shell function in order # to avoid hitting zsh 4.x exit status bugs. # at_fn_group_prepare # ------------------- # Prepare for running a test group. at_fn_group_prepare () { # The directory for additional per-group helper files. at_job_dir=$at_helper_dir/$at_group # The file containing the location of the last AT_CHECK. at_check_line_file=$at_job_dir/check-line # The file containing the exit status of the last command. at_status_file=$at_job_dir/status # The files containing the output of the tested commands. at_stdout=$at_job_dir/stdout at_stder1=$at_job_dir/stder1 at_stderr=$at_job_dir/stderr # The file containing the code for a test group. at_test_source=$at_job_dir/test-source # The file containing dates. at_times_file=$at_job_dir/times # Be sure to come back to the top test directory. cd "$at_suite_dir" # Clearly separate the test groups when verbose. $at_first || $at_verbose echo at_group_normalized=$at_group eval 'while :; do case $at_group_normalized in #( '"$at_format"'*) break;; esac at_group_normalized=0$at_group_normalized done' # Create a fresh directory for the next test group, and enter. # If one already exists, the user may have invoked ./run from # within that directory; we remove the contents, but not the # directory itself, so that we aren't pulling the rug out from # under the shell's notion of the current directory. at_group_dir=$at_suite_dir/$at_group_normalized at_group_log=$at_group_dir/$as_me.log if test -d "$at_group_dir"; then find "$at_group_dir" -type d ! -perm -700 -exec chmod u+rwx {} \; rm -fr "$at_group_dir"/* "$at_group_dir"/.[!.] "$at_group_dir"/.??* fi || { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: test directory for $at_group_normalized could not be cleaned" >&5 $as_echo "$as_me: WARNING: test directory for $at_group_normalized could not be cleaned" >&2;} # Be tolerant if the above `rm' was not able to remove the directory. as_dir="$at_group_dir"; as_fn_mkdir_p echo 0 > "$at_status_file" # In verbose mode, append to the log file *and* show on # the standard output; in quiet mode only write to the log. if test -z "$at_verbose"; then at_tee_pipe='tee -a "$at_group_log"' else at_tee_pipe='cat >> "$at_group_log"' fi } # at_fn_group_banner ORDINAL LINE DESC PAD [BANNER] # ------------------------------------------------- # Declare the test group ORDINAL, located at LINE with group description DESC, # and residing under BANNER. Use PAD to align the status column. at_fn_group_banner () { at_setup_line="$2" test -n "$5" && at_fn_banner $5 at_desc="$3" case $1 in [0-9]) at_desc_line=" $1: ";; [0-9][0-9]) at_desc_line=" $1: " ;; *) at_desc_line="$1: " ;; esac as_fn_append at_desc_line "$3$4" $at_quiet $as_echo_n "$at_desc_line" echo "# -*- compilation -*-" >> "$at_group_log" } # at_fn_group_postprocess # ----------------------- # Perform cleanup after running a test group. at_fn_group_postprocess () { # Be sure to come back to the suite directory, in particular # since below we might `rm' the group directory we are in currently. cd "$at_suite_dir" if test ! -f "$at_check_line_file"; then sed "s/^ */$as_me: WARNING: /" <<_ATEOF A failure happened in a test group before any test could be run. This means that test suite is improperly designed. Please report this failure to <bug-direvent@gnu.org.ua>. _ATEOF $as_echo "$at_setup_line" >"$at_check_line_file" at_status=99 fi $at_verbose $as_echo_n "$at_group. $at_setup_line: " $as_echo_n "$at_group. $at_setup_line: " >> "$at_group_log" case $at_xfail:$at_status in yes:0) at_msg="UNEXPECTED PASS" at_res=xpass at_errexit=$at_errexit_p at_color=$at_red ;; no:0) at_msg="ok" at_res=pass at_errexit=false at_color=$at_grn ;; *:77) at_msg='skipped ('`cat "$at_check_line_file"`')' at_res=skip at_errexit=false at_color=$at_blu ;; no:* | *:99) at_msg='FAILED ('`cat "$at_check_line_file"`')' at_res=fail at_errexit=$at_errexit_p at_color=$at_red ;; yes:*) at_msg='expected failure ('`cat "$at_check_line_file"`')' at_res=xfail at_errexit=false at_color=$at_lgn ;; esac echo "$at_res" > "$at_job_dir/$at_res" # In parallel mode, output the summary line only afterwards. if test $at_jobs -ne 1 && test -n "$at_verbose"; then $as_echo "$at_desc_line $at_color$at_msg$at_std" else # Make sure there is a separator even with long titles. $as_echo " $at_color$at_msg$at_std" fi at_log_msg="$at_group. $at_desc ($at_setup_line): $at_msg" case $at_status in 0|77) # $at_times_file is only available if the group succeeded. # We're not including the group log, so the success message # is written in the global log separately. But we also # write to the group log in case they're using -d. if test -f "$at_times_file"; then at_log_msg="$at_log_msg ("`sed 1d "$at_times_file"`')' rm -f "$at_times_file" fi $as_echo "$at_log_msg" >> "$at_group_log" $as_echo "$at_log_msg" >&5 # Cleanup the group directory, unless the user wants the files # or the success was unexpected. if $at_debug_p || test $at_res = xpass; then at_fn_create_debugging_script if test $at_res = xpass && $at_errexit; then echo stop > "$at_stop_file" fi else if test -d "$at_group_dir"; then find "$at_group_dir" -type d ! -perm -700 -exec chmod u+rwx \{\} \; rm -fr "$at_group_dir" fi rm -f "$at_test_source" fi ;; *) # Upon failure, include the log into the testsuite's global # log. The failure message is written in the group log. It # is later included in the global log. $as_echo "$at_log_msg" >> "$at_group_log" # Upon failure, keep the group directory for autopsy, and create # the debugging script. With -e, do not start any further tests. at_fn_create_debugging_script if $at_errexit; then echo stop > "$at_stop_file" fi ;; esac } ## ------------ ## ## Driver loop. ## ## ------------ ## if (set -m && set +m && set +b) >/dev/null 2>&1; then set +b at_job_control_on='set -m' at_job_control_off='set +m' at_job_group=- else at_job_control_on=: at_job_control_off=: at_job_group= fi for at_signal in 1 2 15; do trap 'set +x; set +e $at_job_control_off at_signal='"$at_signal"' echo stop > "$at_stop_file" trap "" $at_signal at_pgids= for at_pgid in `jobs -p 2>/dev/null`; do at_pgids="$at_pgids $at_job_group$at_pgid" done test -z "$at_pgids" || kill -$at_signal $at_pgids 2>/dev/null wait if test "$at_jobs" -eq 1 || test -z "$at_verbose"; then echo >&2 fi at_signame=`kill -l $at_signal 2>&1 || echo $at_signal` set x $at_signame test 0 -gt 2 && at_signame=$at_signal { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: caught signal $at_signame, bailing out" >&5 $as_echo "$as_me: WARNING: caught signal $at_signame, bailing out" >&2;} as_fn_arith 128 + $at_signal && exit_status=$as_val as_fn_exit $exit_status' $at_signal done rm -f "$at_stop_file" at_first=: if test $at_jobs -ne 1 && rm -f "$at_job_fifo" && test -n "$at_job_group" && ( mkfifo "$at_job_fifo" && trap 'exit 1' PIPE STOP TSTP ) 2>/dev/null then # FIFO job dispatcher. trap 'at_pids= for at_pid in `jobs -p`; do at_pids="$at_pids $at_job_group$at_pid" done if test -n "$at_pids"; then at_sig=TSTP test "${TMOUT+set}" = set && at_sig=STOP kill -$at_sig $at_pids 2>/dev/null fi kill -STOP $$ test -z "$at_pids" || kill -CONT $at_pids 2>/dev/null' TSTP echo # Turn jobs into a list of numbers, starting from 1. at_joblist=`$as_echo "$at_groups" | sed -n 1,${at_jobs}p` set X $at_joblist shift for at_group in $at_groups; do $at_job_control_on 2>/dev/null ( # Start one test group. $at_job_control_off if $at_first; then exec 7>"$at_job_fifo" else exec 6<&- fi trap 'set +x; set +e trap "" PIPE echo stop > "$at_stop_file" echo >&7 as_fn_exit 141' PIPE at_fn_group_prepare if cd "$at_group_dir" && at_fn_test $at_group && . "$at_test_source" then :; else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unable to parse test group: $at_group" >&5 $as_echo "$as_me: WARNING: unable to parse test group: $at_group" >&2;} at_failed=: fi at_fn_group_postprocess echo >&7 ) & $at_job_control_off if $at_first; then at_first=false exec 6<"$at_job_fifo" 7>"$at_job_fifo" fi shift # Consume one token. if test $# -gt 0; then :; else read at_token <&6 || break set x $* fi test -f "$at_stop_file" && break done exec 7>&- # Read back the remaining ($at_jobs - 1) tokens. set X $at_joblist shift if test $# -gt 0; then shift for at_job do read at_token done <&6 fi exec 6<&- wait else # Run serially, avoid forks and other potential surprises. for at_group in $at_groups; do at_fn_group_prepare if cd "$at_group_dir" && at_fn_test $at_group && . "$at_test_source"; then :; else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unable to parse test group: $at_group" >&5 $as_echo "$as_me: WARNING: unable to parse test group: $at_group" >&2;} at_failed=: fi at_fn_group_postprocess test -f "$at_stop_file" && break at_first=false done fi # Wrap up the test suite with summary statistics. cd "$at_helper_dir" # Use ?..???? when the list must remain sorted, the faster * otherwise. at_pass_list=`for f in */pass; do echo $f; done | sed '/\*/d; s,/pass,,'` at_skip_list=`for f in */skip; do echo $f; done | sed '/\*/d; s,/skip,,'` at_xfail_list=`for f in */xfail; do echo $f; done | sed '/\*/d; s,/xfail,,'` at_xpass_list=`for f in ?/xpass ??/xpass ???/xpass ????/xpass; do echo $f; done | sed '/?/d; s,/xpass,,'` at_fail_list=`for f in ?/fail ??/fail ???/fail ????/fail; do echo $f; done | sed '/?/d; s,/fail,,'` set X $at_pass_list $at_xpass_list $at_xfail_list $at_fail_list $at_skip_list shift; at_group_count=$# set X $at_xpass_list; shift; at_xpass_count=$#; at_xpass_list=$* set X $at_xfail_list; shift; at_xfail_count=$# set X $at_fail_list; shift; at_fail_count=$#; at_fail_list=$* set X $at_skip_list; shift; at_skip_count=$# as_fn_arith $at_group_count - $at_skip_count && at_run_count=$as_val as_fn_arith $at_xpass_count + $at_fail_count && at_unexpected_count=$as_val as_fn_arith $at_xfail_count + $at_fail_count && at_total_fail_count=$as_val # Back to the top directory. cd "$at_dir" rm -rf "$at_helper_dir" # Compute the duration of the suite. at_stop_date=`date` at_stop_time=`date +%s 2>/dev/null` $as_echo "$as_me: ending at: $at_stop_date" >&5 case $at_start_time,$at_stop_time in [0-9]*,[0-9]*) as_fn_arith $at_stop_time - $at_start_time && at_duration_s=$as_val as_fn_arith $at_duration_s / 60 && at_duration_m=$as_val as_fn_arith $at_duration_m / 60 && at_duration_h=$as_val as_fn_arith $at_duration_s % 60 && at_duration_s=$as_val as_fn_arith $at_duration_m % 60 && at_duration_m=$as_val at_duration="${at_duration_h}h ${at_duration_m}m ${at_duration_s}s" $as_echo "$as_me: test suite duration: $at_duration" >&5 ;; esac echo $as_echo "## ------------- ## ## Test results. ## ## ------------- ##" echo { echo $as_echo "## ------------- ## ## Test results. ## ## ------------- ##" echo } >&5 if test $at_run_count = 1; then at_result="1 test" at_were=was else at_result="$at_run_count tests" at_were=were fi if $at_errexit_p && test $at_unexpected_count != 0; then if test $at_xpass_count = 1; then at_result="$at_result $at_were run, one passed" else at_result="$at_result $at_were run, one failed" fi at_result="$at_result unexpectedly and inhibited subsequent tests." at_color=$at_red else # Don't you just love exponential explosion of the number of cases? at_color=$at_red case $at_xpass_count:$at_fail_count:$at_xfail_count in # So far, so good. 0:0:0) at_result="$at_result $at_were successful." at_color=$at_grn ;; 0:0:*) at_result="$at_result behaved as expected." at_color=$at_lgn ;; # Some unexpected failures 0:*:0) at_result="$at_result $at_were run, $at_fail_count failed unexpectedly." ;; # Some failures, both expected and unexpected 0:*:1) at_result="$at_result $at_were run, $at_total_fail_count failed ($at_xfail_count expected failure)." ;; 0:*:*) at_result="$at_result $at_were run, $at_total_fail_count failed ($at_xfail_count expected failures)." ;; # No unexpected failures, but some xpasses *:0:*) at_result="$at_result $at_were run, $at_xpass_count passed unexpectedly." ;; # No expected failures, but failures and xpasses *:1:0) at_result="$at_result $at_were run, $at_unexpected_count did not behave as expected ($at_fail_count unexpected failure)." ;; *:*:0) at_result="$at_result $at_were run, $at_unexpected_count did not behave as expected ($at_fail_count unexpected failures)." ;; # All of them. *:*:1) at_result="$at_result $at_were run, $at_xpass_count passed unexpectedly, $at_total_fail_count failed ($at_xfail_count expected failure)." ;; *:*:*) at_result="$at_result $at_were run, $at_xpass_count passed unexpectedly, $at_total_fail_count failed ($at_xfail_count expected failures)." ;; esac if test $at_skip_count = 0 && test $at_run_count -gt 1; then at_result="All $at_result" fi fi # Now put skips in the mix. case $at_skip_count in 0) ;; 1) at_result="$at_result 1 test was skipped." ;; *) at_result="$at_result $at_skip_count tests were skipped." ;; esac if test $at_unexpected_count = 0; then echo "$at_color$at_result$at_std" echo "$at_result" >&5 else echo "${at_color}ERROR: $at_result$at_std" >&2 echo "ERROR: $at_result" >&5 { echo $as_echo "## ------------------------ ## ## Summary of the failures. ## ## ------------------------ ##" # Summary of failed and skipped tests. if test $at_fail_count != 0; then echo "Failed tests:" $SHELL "$at_myself" $at_fail_list --list echo fi if test $at_skip_count != 0; then echo "Skipped tests:" $SHELL "$at_myself" $at_skip_list --list echo fi if test $at_xpass_count != 0; then echo "Unexpected passes:" $SHELL "$at_myself" $at_xpass_list --list echo fi if test $at_fail_count != 0; then $as_echo "## ---------------------- ## ## Detailed failed tests. ## ## ---------------------- ##" echo for at_group in $at_fail_list do at_group_normalized=$at_group eval 'while :; do case $at_group_normalized in #( '"$at_format"'*) break;; esac at_group_normalized=0$at_group_normalized done' cat "$at_suite_dir/$at_group_normalized/$as_me.log" echo done echo fi if test -n "$at_top_srcdir"; then sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## ${at_top_build_prefix}config.log ## _ASBOX sed 's/^/| /' ${at_top_build_prefix}config.log echo fi } >&5 sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## $as_me.log was created. ## _ASBOX echo if $at_debug_p; then at_msg='per-test log files' else at_msg="\`${at_testdir+${at_testdir}/}$as_me.log'" fi $as_echo "Please send $at_msg and all information you think might help: To: <bug-direvent@gnu.org.ua> Subject: [GNU Direvent 5.2] $as_me: $at_fail_list${at_fail_list:+ failed${at_xpass_list:+, }}$at_xpass_list${at_xpass_list:+ passed unexpectedly} You may investigate any problem if you feel able to do so, in which case the test suite provides a good starting point. Its output may be found below \`${at_testdir+${at_testdir}/}$as_me.dir'. " exit 1 fi exit 0 ## ------------- ## ## Actual tests. ## ## ------------- ## #AT_START_1 at_fn_group_banner 1 'format00.at:17' \ "Default format" " " 1 at_xfail=no ( $as_echo "1. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/format00.at:20: gcffmt \$abs_srcdir/gcf1.conf" at_fn_check_prepare_dynamic "gcffmt $abs_srcdir/gcf1.conf" "format00.at:20" ( $at_check_trace; gcffmt $abs_srcdir/gcf1.conf ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo ".scalar: \"yes\" .listvar: (\"a\", \"2\", \"b\", \"c\") .compound: \"stmt\" \"2\" \"foo\" .mailbox.mailbox-pattern: \"maildir:/var/mail;type=index;param=2;user=\${user}\" .mailbox.mailbox-type: \"maildir\" .logging.syslog: \"yes\" .logging.facility: \"mail\" .program=\"foo\".logging.syslog: \"yes\" .program=\"foo\".logging.facility: \"local1\" .program=\"foo\".scalar: \"no\" .program=\"bar\".logging.syslog: \"no\" .program=\"bar\".logging.facility: \"local2\" .program=\"bar\".logging.tag: \"baz\" .program=\"bar\".scalar: \"25\" " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/format00.at:20" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_1 #AT_START_2 at_fn_group_banner 2 'format01.at:17' \ "Locus" " " 1 at_xfail=no ( $as_echo "2. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/format01.at:20: gcffmt -locus \$abs_srcdir/gcf1.conf|sed 's|^.*/gcf1.conf||'" at_fn_check_prepare_notrace 'a shell pipeline' "format01.at:20" ( $at_check_trace; gcffmt -locus $abs_srcdir/gcf1.conf|sed 's|^.*/gcf1.conf||' ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo ":19.1-10: .scalar: \"yes\" :22.1-26: .listvar: (\"a\", \"2\", \"b\", \"c\") :25.1-19: .compound: \"stmt\" \"2\" \"foo\" :28.3-69: .mailbox.mailbox-pattern: \"maildir:/var/mail;type=index;param=2;user=\${user}\" :29.3-24: .mailbox.mailbox-type: \"maildir\" :33.4-13: .logging.syslog: \"yes\" :34.4-16: .logging.facility: \"mail\" :39.9-18: .program=\"foo\".logging.syslog: \"yes\" :40.9-23: .program=\"foo\".logging.facility: \"local1\" :42.4-12: .program=\"foo\".scalar: \"no\" :47.9-17: .program=\"bar\".logging.syslog: \"no\" :48.9-23: .program=\"bar\".logging.facility: \"local2\" :49.9-17: .program=\"bar\".logging.tag: \"baz\" :51.4-12: .program=\"bar\".scalar: \"25\" " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/format01.at:20" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_2 #AT_START_3 at_fn_group_banner 3 'format02.at:17' \ "Custom delimiter" " " 1 at_xfail=no ( $as_echo "3. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/format02.at:20: gcffmt -delim=/ \$abs_srcdir/gcf1.conf" at_fn_check_prepare_dynamic "gcffmt -delim=/ $abs_srcdir/gcf1.conf" "format02.at:20" ( $at_check_trace; gcffmt -delim=/ $abs_srcdir/gcf1.conf ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "/scalar: \"yes\" /listvar: (\"a\", \"2\", \"b\", \"c\") /compound: \"stmt\" \"2\" \"foo\" /mailbox/mailbox-pattern: \"maildir:/var/mail;type=index;param=2;user=\${user}\" /mailbox/mailbox-type: \"maildir\" /logging/syslog: \"yes\" /logging/facility: \"mail\" /program=\"foo\"/logging/syslog: \"yes\" /program=\"foo\"/logging/facility: \"local1\" /program=\"foo\"/scalar: \"no\" /program=\"bar\"/logging/syslog: \"no\" /program=\"bar\"/logging/facility: \"local2\" /program=\"bar\"/logging/tag: \"baz\" /program=\"bar\"/scalar: \"25\" " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/format02.at:20" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_3 #AT_START_4 at_fn_group_banner 4 'stradj.at:17' \ "String location adjustment" " " 2 at_xfail=no ( $as_echo "4. $at_setup_line: testing $at_desc ..." $at_traceon cat >input.conf <<'_ATEOF' ident name; option "string"; _ATEOF { set +x $as_echo "$at_srcdir/stradj.at:25: echo \"Default\" gcffmt -nopath -locus input.conf echo \"Adjustment\" gcffmt -nopath -locus -stradj input.conf " at_fn_check_prepare_notrace 'an embedded newline' "stradj.at:25" ( $at_check_trace; echo "Default" gcffmt -nopath -locus input.conf echo "Adjustment" gcffmt -nopath -locus -stradj input.conf ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "Default input.conf:1.7-10: \"name\" input.conf:2.8-15: \"string\" Adjustment input.conf:1.7-10: \"name\" input.conf:2.9-14: \"string\" " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/stradj.at:25" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_4 #AT_START_5 at_fn_group_banner 5 'strcat.at:17' \ "String concatenation" " " 2 at_xfail=no ( $as_echo "5. $at_setup_line: testing $at_desc ..." $at_traceon cat >input.conf <<'_ATEOF' option id "a" " string"; _ATEOF { set +x $as_echo "$at_srcdir/strcat.at:24: gcffmt input.conf gcffmt -strcat input.conf" at_fn_check_prepare_notrace 'an embedded newline' "strcat.at:24" ( $at_check_trace; gcffmt input.conf gcffmt -strcat input.conf ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo ".option: \"id\" \"a\" \" string\" .option: \"id\" \"a string\" " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/strcat.at:24" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_5 #AT_START_6 at_fn_group_banner 6 'enum.at:17' \ "Enumerate nodes" " " 3 at_xfail=no ( $as_echo "6. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/enum.at:20: gcfenum \$abs_srcdir/gcf1.conf" at_fn_check_prepare_dynamic "gcfenum $abs_srcdir/gcf1.conf" "enum.at:20" ( $at_check_trace; gcfenum $abs_srcdir/gcf1.conf ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo ".scalar .listvar .compound .mailbox .mailbox.mailbox-pattern .mailbox.mailbox-type .logging .logging.syslog .logging.facility .program=\"foo\" .program=\"foo\".logging .program=\"foo\".logging.syslog .program=\"foo\".logging.facility .program=\"foo\".scalar .program=\"bar\" .program=\"bar\".logging .program=\"bar\".logging.syslog .program=\"bar\".logging.facility .program=\"bar\".logging.tag .program=\"bar\".scalar " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/enum.at:20" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_6 #AT_START_7 at_fn_group_banner 7 'peek00.at:17' \ "Peek" " " 4 at_xfail=no ( $as_echo "7. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/peek00.at:20: gcfpeek \$abs_srcdir/gcf1.conf .scalar" at_fn_check_prepare_dynamic "gcfpeek $abs_srcdir/gcf1.conf .scalar" "peek00.at:20" ( $at_check_trace; gcfpeek $abs_srcdir/gcf1.conf .scalar ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo ".scalar: \"yes\" " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/peek00.at:20" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_7 #AT_START_8 at_fn_group_banner 8 'peek01.at:17' \ "Nested nodes" " " 4 at_xfail=no ( $as_echo "8. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/peek01.at:20: gcfpeek \$abs_srcdir/gcf1.conf .program=\"foo\".scalar" at_fn_check_prepare_dynamic "gcfpeek $abs_srcdir/gcf1.conf .program=\"foo\".scalar" "peek01.at:20" ( $at_check_trace; gcfpeek $abs_srcdir/gcf1.conf .program="foo".scalar ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo ".program=\"foo\".scalar: \"no\" " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/peek01.at:20" $at_failed && at_fn_log_failure $at_traceon; } { set +x $as_echo "$at_srcdir/peek01.at:25: gcfpeek \$abs_srcdir/gcf1.conf .program=\"bar\".scalar" at_fn_check_prepare_dynamic "gcfpeek $abs_srcdir/gcf1.conf .program=\"bar\".scalar" "peek01.at:25" ( $at_check_trace; gcfpeek $abs_srcdir/gcf1.conf .program="bar".scalar ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo ".program=\"bar\".scalar: \"25\" " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/peek01.at:25" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_8 #AT_START_9 at_fn_group_banner 9 'peek02.at:17' \ "Block nodes" " " 4 at_xfail=no ( $as_echo "9. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/peek02.at:20: gcfpeek \$abs_srcdir/gcf1.conf .logging" at_fn_check_prepare_dynamic "gcfpeek $abs_srcdir/gcf1.conf .logging" "peek02.at:20" ( $at_check_trace; gcfpeek $abs_srcdir/gcf1.conf .logging ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo ".logging.syslog: \"yes\" .logging.facility: \"mail\" " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/peek02.at:20" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_9 #AT_START_10 at_fn_group_banner 10 'peek03.at:17' \ "Nested blocks" " " 4 at_xfail=no ( $as_echo "10. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/peek03.at:20: gcfpeek \$abs_srcdir/gcf1.conf .program=foo.logging" at_fn_check_prepare_dynamic "gcfpeek $abs_srcdir/gcf1.conf .program=foo.logging" "peek03.at:20" ( $at_check_trace; gcfpeek $abs_srcdir/gcf1.conf .program=foo.logging ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo ".program=\"foo\".logging.syslog: \"yes\" .program=\"foo\".logging.facility: \"local1\" " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/peek03.at:20" $at_failed && at_fn_log_failure $at_traceon; } { set +x $as_echo "$at_srcdir/peek03.at:26: gcfpeek \$abs_srcdir/gcf1.conf .program=bar.logging" at_fn_check_prepare_dynamic "gcfpeek $abs_srcdir/gcf1.conf .program=bar.logging" "peek03.at:26" ( $at_check_trace; gcfpeek $abs_srcdir/gcf1.conf .program=bar.logging ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo ".program=\"bar\".logging.syslog: \"no\" .program=\"bar\".logging.facility: \"local2\" .program=\"bar\".logging.tag: \"baz\" " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/peek03.at:26" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_10 #AT_START_11 at_fn_group_banner 11 'glob00.at:17' \ "Leading wildcard" " " 5 at_xfail=no ( $as_echo "11. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/glob00.at:20: gcfpeek -match \$abs_srcdir/gcf1.conf .*.facility" at_fn_check_prepare_dynamic "gcfpeek -match $abs_srcdir/gcf1.conf .*.facility" "glob00.at:20" ( $at_check_trace; gcfpeek -match $abs_srcdir/gcf1.conf .*.facility ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo ".logging.facility: \"mail\" .program=\"foo\".logging.facility: \"local1\" .program=\"bar\".logging.facility: \"local2\" " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/glob00.at:20" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_11 #AT_START_12 at_fn_group_banner 12 'glob01.at:17' \ "Trailing wildcard" " " 5 at_xfail=no ( $as_echo "12. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/glob01.at:20: gcfpeek -nodesc -match \$abs_srcdir/gcf1.conf .logging.*|sed 's/ *\$//'" at_fn_check_prepare_notrace 'a shell pipeline' "glob01.at:20" ( $at_check_trace; gcfpeek -nodesc -match $abs_srcdir/gcf1.conf .logging.*|sed 's/ *$//' ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo ".logging: .logging.syslog: \"yes\" .logging.facility: \"mail\" " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/glob01.at:20" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_12 #AT_START_13 at_fn_group_banner 13 'glob02.at:17' \ "Intermediate wildcard" " " 5 at_xfail=no ( $as_echo "13. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/glob02.at:20: gcfpeek -match \$abs_srcdir/gcf1.conf .program=\"foo\".*.facility" at_fn_check_prepare_dynamic "gcfpeek -match $abs_srcdir/gcf1.conf .program=\"foo\".*.facility" "glob02.at:20" ( $at_check_trace; gcfpeek -match $abs_srcdir/gcf1.conf .program="foo".*.facility ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo ".program=\"foo\".logging.facility: \"local1\" " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/glob02.at:20" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_13 #AT_START_14 at_fn_group_banner 14 'glob03.at:17' \ "Multiple wildcards" " " 5 at_xfail=no ( $as_echo "14. $at_setup_line: testing $at_desc ..." $at_traceon cat >test.cf <<'_ATEOF' foo { bar { baz { quz { quux 10; } } } } foo { bar { quz { quux 9; } } } foo { bar { baz { quz { mux 8; } } } } _ATEOF { set +x $as_echo "$at_srcdir/glob03.at:48: gcfpeek -match test.cf .*.baz.*.quux" at_fn_check_prepare_trace "glob03.at:48" ( $at_check_trace; gcfpeek -match test.cf .*.baz.*.quux ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo ".foo.bar.baz.quz.quux: \"10\" " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/glob03.at:48" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_14 #AT_START_15 at_fn_group_banner 15 'glob04.at:17' \ "Subtree - asterisk" " " 5 at_xfail=no ( $as_echo "15. $at_setup_line: testing $at_desc ..." $at_traceon cat >test.cf <<'_ATEOF' text "string"; block { foo { quux 1; }; bar 123; baz { quux 2; } crex { quux 3; } } _ATEOF { set +x $as_echo "$at_srcdir/glob04.at:35: gcfpeek -match -root=block test.cf '.*.quux'" at_fn_check_prepare_trace "glob04.at:35" ( $at_check_trace; gcfpeek -match -root=block test.cf '.*.quux' ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo ".block.foo.quux: \"1\" .block.baz.quux: \"2\" .block.crex.quux: \"3\" " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/glob04.at:35" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_15 #AT_START_16 at_fn_group_banner 16 'glob05.at:17' \ "Subtree - percent" " " 5 at_xfail=no ( $as_echo "16. $at_setup_line: testing $at_desc ..." $at_traceon cat >test.cf <<'_ATEOF' text "string"; block { foo { quux 1; }; bar 123; baz { quux 2; } crex { quux 3; } } _ATEOF { set +x $as_echo "$at_srcdir/glob05.at:35: gcfpeek -match -root=block test.cf '.%.quux'" at_fn_check_prepare_trace "glob05.at:35" ( $at_check_trace; gcfpeek -match -root=block test.cf '.%.quux' ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo ".block.foo.quux: \"1\" .block.baz.quux: \"2\" .block.crex.quux: \"3\" " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/glob05.at:35" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_16 #AT_START_17 at_fn_group_banner 17 'reduce00.at:17' \ "Simple statement" " " 6 at_xfail=no ( $as_echo "17. $at_setup_line: testing $at_desc ..." $at_traceon cat >test.cf <<'_ATEOF' scalar a; scalar b; _ATEOF { set +x $as_echo "$at_srcdir/reduce00.at:20: gcffmt -reduce ./test.cf" at_fn_check_prepare_trace "reduce00.at:20" ( $at_check_trace; gcffmt -reduce ./test.cf ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo ".scalar: \"b\" " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/reduce00.at:20" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_17 #AT_START_18 at_fn_group_banner 18 'reduce01.at:17' \ "Block statement" " " 6 at_xfail=no ( $as_echo "18. $at_setup_line: testing $at_desc ..." $at_traceon cat >test.cf <<'_ATEOF' block "a" { scalar a; foo 1; } block "b" { foo 3; scalar b; } block "a" { scalar b; } _ATEOF { set +x $as_echo "$at_srcdir/reduce01.at:20: gcffmt -reduce ./test.cf" at_fn_check_prepare_trace "reduce01.at:20" ( $at_check_trace; gcffmt -reduce ./test.cf ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo ".block=\"b\".foo: \"3\" .block=\"b\".scalar: \"b\" .block=\"a\".foo: \"1\" .block=\"a\".scalar: \"b\" " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/reduce01.at:20" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_18 #AT_START_19 at_fn_group_banner 19 'reduce02.at:17' \ "Nested block statement" " " 6 at_xfail=no ( $as_echo "19. $at_setup_line: testing $at_desc ..." $at_traceon cat >test.cf <<'_ATEOF' block "a" { scalar a; foo 1; subblock { foo x; bar y; } } block "b" { foo 3; scalar b; } block "a" { scalar b; subblock { baz z; foo k; } } _ATEOF { set +x $as_echo "$at_srcdir/reduce02.at:20: gcffmt -reduce ./test.cf" at_fn_check_prepare_trace "reduce02.at:20" ( $at_check_trace; gcffmt -reduce ./test.cf ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo ".block=\"b\".foo: \"3\" .block=\"b\".scalar: \"b\" .block=\"a\".foo: \"1\" .block=\"a\".scalar: \"b\" .block=\"a\".subblock.bar: \"y\" .block=\"a\".subblock.baz: \"z\" .block=\"a\".subblock.foo: \"k\" " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/reduce02.at:20" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_19 #AT_START_20 at_fn_group_banner 20 'reduce03.at:17' \ "Table driven reduction" " " 6 at_xfail=no ( $as_echo "20. $at_setup_line: testing $at_desc ..." $at_traceon cat >test.cf <<'_ATEOF' scalar bar; listvar (1, 2); listvar foo; logging { facility local1; tag prog; } listvar (3, 4); scalar baz; logging { facility mail; } _ATEOF { set +x $as_echo "$at_srcdir/reduce03.at:20: gcfset -reduce ./test.cf" at_fn_check_prepare_trace "reduce03.at:20" ( $at_check_trace; gcfset -reduce ./test.cf ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "Global settings: scalar = baz listvar = \"1\" \"2\" \"foo\" \"3\" \"4\" logging: 0/mail/prog/0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/reduce03.at:20" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_20 #AT_START_21 at_fn_group_banner 21 'sort00.at:17' \ "Sort" " " 7 at_xfail=no ( $as_echo "21. $at_setup_line: testing $at_desc ..." $at_traceon cat >test.cf <<'_ATEOF' b 1; a { x 5; b 4; z 1; } z 10; k { i 10; a 1; y 4; o 3; } f { a 1; b 2; } g 1; _ATEOF { set +x $as_echo "$at_srcdir/sort00.at:20: gcffmt -sort ./test.cf" at_fn_check_prepare_trace "sort00.at:20" ( $at_check_trace; gcffmt -sort ./test.cf ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo ".a.b: \"4\" .a.x: \"5\" .a.z: \"1\" .b: \"1\" .f.a: \"1\" .f.b: \"2\" .g: \"1\" .k.a: \"1\" .k.i: \"10\" .k.o: \"3\" .k.y: \"4\" .z: \"10\" " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/sort00.at:20" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_21 #AT_START_22 at_fn_group_banner 22 'sort01.at:17' \ "Stable sort" " " 7 at_xfail=no ( $as_echo "22. $at_setup_line: testing $at_desc ..." $at_traceon cat >test.cf <<'_ATEOF' a 10; a 2; a 31; a 4; a 13; _ATEOF { set +x $as_echo "$at_srcdir/sort01.at:20: gcffmt -sort ./test.cf" at_fn_check_prepare_trace "sort01.at:20" ( $at_check_trace; gcffmt -sort ./test.cf ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo ".a: \"10\" .a: \"2\" .a: \"31\" .a: \"4\" .a: \"13\" " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/sort01.at:20" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_22 #AT_START_23 at_fn_group_banner 23 'incl00.at:17' \ "Include path" " " 8 at_xfail=no ( $as_echo "23. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/incl00.at:20: mkdir include cat >include/1.inc <<'_ATEOF' this true; _ATEOF cat >test.cf <<'_ATEOF' before 1; #include <1.inc> after 1; _ATEOF gcffmt -I\`pwd\`/include ./test.cf " at_fn_check_prepare_notrace 'a `...` command substitution' "incl00.at:20" ( $at_check_trace; mkdir include cat >include/1.inc <<'_ATEOF' this true; _ATEOF cat >test.cf <<'_ATEOF' before 1; #include <1.inc> after 1; _ATEOF gcffmt -I`pwd`/include ./test.cf ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo ".before: \"1\" .this: \"true\" .after: \"1\" " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/incl00.at:20" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_23 #AT_START_24 at_fn_group_banner 24 'incl01.at:17' \ "Recursive inclusion" " " 8 at_xfail=no ( $as_echo "24. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/incl01.at:20: cat >a.inc <<'_ATEOF' this true; #include \"b.inc\" _ATEOF cat >b.inc <<'_ATEOF' #include \"a.inc\" _ATEOF cat >test.cf <<'_ATEOF' before 1; #include \"a.inc\" after 1; _ATEOF gcffmt ./test.cf " at_fn_check_prepare_notrace 'an embedded newline' "incl01.at:20" ( $at_check_trace; cat >a.inc <<'_ATEOF' this true; #include "b.inc" _ATEOF cat >b.inc <<'_ATEOF' #include "a.inc" _ATEOF cat >test.cf <<'_ATEOF' before 1; #include "a.inc" after 1; _ATEOF gcffmt ./test.cf ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; $as_echo "./b.inc:1: Recursive inclusion ./test.cf:2: \`./a.inc' already included here " | \ $at_diff - "$at_stderr" || at_failed=: at_fn_diff_devnull "$at_stdout" || at_failed=: at_fn_check_status 1 $at_status "$at_srcdir/incl01.at:20" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_24 #AT_START_25 at_fn_group_banner 25 'incl02.at:17' \ "Include once" " " 8 at_xfail=no ( $as_echo "25. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/incl02.at:20: cat >a.inc <<'_ATEOF' a true; _ATEOF cat >test1.cf <<'_ATEOF' before 1; #include \"a.inc\" #include \"a.inc\" after 1; _ATEOF cat >test2.cf <<'_ATEOF' before 1; #include_once \"a.inc\" #include_once \"a.inc\" after 1; _ATEOF gcffmt ./test1.cf echo == gcffmt ./test2.cf " at_fn_check_prepare_notrace 'an embedded newline' "incl02.at:20" ( $at_check_trace; cat >a.inc <<'_ATEOF' a true; _ATEOF cat >test1.cf <<'_ATEOF' before 1; #include "a.inc" #include "a.inc" after 1; _ATEOF cat >test2.cf <<'_ATEOF' before 1; #include_once "a.inc" #include_once "a.inc" after 1; _ATEOF gcffmt ./test1.cf echo == gcffmt ./test2.cf ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo ".before: \"1\" .a: \"true\" .a: \"true\" .after: \"1\" == .before: \"1\" .a: \"true\" .after: \"1\" " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/incl02.at:20" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_25 #AT_START_26 at_fn_group_banner 26 'incl03.at:17' \ "Wildcard inclusion" " " 8 at_xfail=no ( $as_echo "26. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/incl03.at:20: cat >i1.inc <<'_ATEOF' i1 included; _ATEOF cat >i2.inc <<'_ATEOF' i2 included; _ATEOF cat >i3.inc <<'_ATEOF' i3 included; _ATEOF cat >test.cf <<'_ATEOF' before 1; #include \"i*.inc\" after 1; _ATEOF gcffmt ./test.cf " at_fn_check_prepare_notrace 'an embedded newline' "incl03.at:20" ( $at_check_trace; cat >i1.inc <<'_ATEOF' i1 included; _ATEOF cat >i2.inc <<'_ATEOF' i2 included; _ATEOF cat >i3.inc <<'_ATEOF' i3 included; _ATEOF cat >test.cf <<'_ATEOF' before 1; #include "i*.inc" after 1; _ATEOF gcffmt ./test.cf ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo ".before: \"1\" .i1: \"included\" .i2: \"included\" .i3: \"included\" .after: \"1\" " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/incl03.at:20" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_26 #AT_START_27 at_fn_group_banner 27 'join.at:17' \ "Join" " " 9 at_xfail=no ( $as_echo "27. $at_setup_line: testing $at_desc ..." $at_traceon cat >1.cf <<'_ATEOF' a 1; b 2; c { a x; b y; } _ATEOF cat >2.cf <<'_ATEOF' x 1; y 2; z { x 3; y 4; } _ATEOF { set +x $as_echo "$at_srcdir/join.at:36: gcffmt -locus 1.cf 2.cf" at_fn_check_prepare_trace "join.at:36" ( $at_check_trace; gcffmt -locus 1.cf 2.cf ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "1.cf:1.1-3: .a: \"1\" 1.cf:2.1-3: .b: \"2\" 1.cf:4.2-4: .c.a: \"x\" 1.cf:5.2-4: .c.b: \"y\" 2.cf:1.1-3: .x: \"1\" 2.cf:2.1-3: .y: \"2\" 2.cf:4.2-4: .z.x: \"3\" 2.cf:5.2-4: .z.y: \"4\" " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/join.at:36" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_27 #AT_START_28 at_fn_group_banner 28 'cfhelp.at:17' \ "Help" " " 9 at_xfail=no ( $as_echo "28. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/cfhelp.at:20: gcfset -cfhelp" at_fn_check_prepare_trace "cfhelp.at:20" ( $at_check_trace; gcfset -cfhelp ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "# Sample configuration file structure. # Scalar string scalar <label: string>; # Configure logging logging logging { # Send to syslog syslog <arg: boolean>; # Set logging facility facility <name: string>; # Tag logging messages with this string tag <label: string>; # Prefix each message with its priority print-priority <arg: boolean>; } # Mailbox configuration mailbox { # Default mailbox pattern mailbox-pattern <arg: string>; # Default mailbox type mailbox-type <arg: string>; } # Subprogram configuration program <name: string> { # Scalar string scalar <label: string>; # Configure logging logging logging { # Send to syslog syslog <arg: boolean>; # Set logging facility facility <name: string>; # Tag logging messages with this string tag <label: string>; # Prefix each message with its priority print-priority <arg: boolean>; } } # list variable listvar <arg: list of string>; " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/cfhelp.at:20" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_28 #AT_START_29 at_fn_group_banner 29 'set.at:17' \ "Set values" " " 9 at_xfail=no ( $as_echo "29. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/set.at:20: gcfset \$abs_srcdir/gcf1.conf 2>err||exit \$? sed 's|^.*/gcf1.conf||' err >&2" at_fn_check_prepare_notrace 'an embedded newline' "set.at:20" ( $at_check_trace; gcfset $abs_srcdir/gcf1.conf 2>err||exit $? sed 's|^.*/gcf1.conf||' err >&2 ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; $as_echo ":25.1-8: unknown keyword " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "Global settings: scalar = yes listvar = \"a\" \"2\" \"b\" \"c\" logging: 1/mail/(null)/0 Programs configured: 2 Program foo: scalar = no logging: 1/local1/(null)/0 Program bar: scalar = 25 logging: 0/local2/baz/0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/set.at:20" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_29 #AT_START_30 at_fn_group_banner 30 'vercmp.at:17' \ "Version comparator" " " 9 at_xfail=no ( $as_echo "30. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/vercmp.at:20: gcfver 1.0 1.0" at_fn_check_prepare_trace "vercmp.at:20" ( $at_check_trace; gcfver 1.0 1.0 ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: at_fn_diff_devnull "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/vercmp.at:20" $at_failed && at_fn_log_failure $at_traceon; } { set +x $as_echo "$at_srcdir/vercmp.at:21: gcfver 1.1 1.0" at_fn_check_prepare_trace "vercmp.at:21" ( $at_check_trace; gcfver 1.1 1.0 ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: at_fn_diff_devnull "$at_stdout" || at_failed=: at_fn_check_status 3 $at_status "$at_srcdir/vercmp.at:21" $at_failed && at_fn_log_failure $at_traceon; } { set +x $as_echo "$at_srcdir/vercmp.at:22: gcfver 2.0 1.0" at_fn_check_prepare_trace "vercmp.at:22" ( $at_check_trace; gcfver 2.0 1.0 ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: at_fn_diff_devnull "$at_stdout" || at_failed=: at_fn_check_status 3 $at_status "$at_srcdir/vercmp.at:22" $at_failed && at_fn_log_failure $at_traceon; } { set +x $as_echo "$at_srcdir/vercmp.at:23: gcfver 1.0 1.1" at_fn_check_prepare_trace "vercmp.at:23" ( $at_check_trace; gcfver 1.0 1.1 ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: at_fn_diff_devnull "$at_stdout" || at_failed=: at_fn_check_status 2 $at_status "$at_srcdir/vercmp.at:23" $at_failed && at_fn_log_failure $at_traceon; } { set +x $as_echo "$at_srcdir/vercmp.at:24: gcfver 1.0 2.0" at_fn_check_prepare_trace "vercmp.at:24" ( $at_check_trace; gcfver 1.0 2.0 ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: at_fn_diff_devnull "$at_stdout" || at_failed=: at_fn_check_status 2 $at_status "$at_srcdir/vercmp.at:24" $at_failed && at_fn_log_failure $at_traceon; } { set +x $as_echo "$at_srcdir/vercmp.at:25: gcfver 1.0a 1.0a" at_fn_check_prepare_trace "vercmp.at:25" ( $at_check_trace; gcfver 1.0a 1.0a ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: at_fn_diff_devnull "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/vercmp.at:25" $at_failed && at_fn_log_failure $at_traceon; } { set +x $as_echo "$at_srcdir/vercmp.at:26: gcfver 1.0b 1.0a" at_fn_check_prepare_trace "vercmp.at:26" ( $at_check_trace; gcfver 1.0b 1.0a ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: at_fn_diff_devnull "$at_stdout" || at_failed=: at_fn_check_status 3 $at_status "$at_srcdir/vercmp.at:26" $at_failed && at_fn_log_failure $at_traceon; } { set +x $as_echo "$at_srcdir/vercmp.at:27: gcfver 1.0a 1.0b" at_fn_check_prepare_trace "vercmp.at:27" ( $at_check_trace; gcfver 1.0a 1.0b ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: at_fn_diff_devnull "$at_stdout" || at_failed=: at_fn_check_status 2 $at_status "$at_srcdir/vercmp.at:27" $at_failed && at_fn_log_failure $at_traceon; } { set +x $as_echo "$at_srcdir/vercmp.at:28: gcfver 1.0.1 1.0" at_fn_check_prepare_trace "vercmp.at:28" ( $at_check_trace; gcfver 1.0.1 1.0 ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: at_fn_diff_devnull "$at_stdout" || at_failed=: at_fn_check_status 3 $at_status "$at_srcdir/vercmp.at:28" $at_failed && at_fn_log_failure $at_traceon; } { set +x $as_echo "$at_srcdir/vercmp.at:29: gcfver 1.0.1 1.0.0" at_fn_check_prepare_trace "vercmp.at:29" ( $at_check_trace; gcfver 1.0.1 1.0.0 ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: at_fn_diff_devnull "$at_stdout" || at_failed=: at_fn_check_status 3 $at_status "$at_srcdir/vercmp.at:29" $at_failed && at_fn_log_failure $at_traceon; } { set +x $as_echo "$at_srcdir/vercmp.at:30: gcfver 1.0.0 1.0.1" at_fn_check_prepare_trace "vercmp.at:30" ( $at_check_trace; gcfver 1.0.0 1.0.1 ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: at_fn_diff_devnull "$at_stdout" || at_failed=: at_fn_check_status 2 $at_status "$at_srcdir/vercmp.at:30" $at_failed && at_fn_log_failure $at_traceon; } { set +x $as_echo "$at_srcdir/vercmp.at:31: gcfver 1.0.1a 1.0.0" at_fn_check_prepare_trace "vercmp.at:31" ( $at_check_trace; gcfver 1.0.1a 1.0.0 ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: at_fn_diff_devnull "$at_stdout" || at_failed=: at_fn_check_status 3 $at_status "$at_srcdir/vercmp.at:31" $at_failed && at_fn_log_failure $at_traceon; } { set +x $as_echo "$at_srcdir/vercmp.at:32: gcfver 1.0.1a 1.0.0a" at_fn_check_prepare_trace "vercmp.at:32" ( $at_check_trace; gcfver 1.0.1a 1.0.0a ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: at_fn_diff_devnull "$at_stdout" || at_failed=: at_fn_check_status 3 $at_status "$at_srcdir/vercmp.at:32" $at_failed && at_fn_log_failure $at_traceon; } { set +x $as_echo "$at_srcdir/vercmp.at:33: gcfver 1.0.1a 1.0.0b" at_fn_check_prepare_trace "vercmp.at:33" ( $at_check_trace; gcfver 1.0.1a 1.0.0b ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: at_fn_diff_devnull "$at_stdout" || at_failed=: at_fn_check_status 3 $at_status "$at_srcdir/vercmp.at:33" $at_failed && at_fn_log_failure $at_traceon; } { set +x $as_echo "$at_srcdir/vercmp.at:34: gcfver 1.0.1a 1.0.1b" at_fn_check_prepare_trace "vercmp.at:34" ( $at_check_trace; gcfver 1.0.1a 1.0.1b ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: at_fn_diff_devnull "$at_stdout" || at_failed=: at_fn_check_status 2 $at_status "$at_srcdir/vercmp.at:34" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_30 #AT_START_31 at_fn_group_banner 31 'grecs00.at:17' \ "C comments in GRECS-style parser" " " 9 at_xfail=no ( $as_echo "31. $at_setup_line: testing $at_desc ..." $at_traceon cat >test.cf <<'_ATEOF' zone "foo" { type delegation-only; }; /*zone "net" { type delegation-only; };*/ /**/ zone "bar" { type hint; }; /* comment line */ zone "baz" { type delegation-only; }; _ATEOF { set +x $as_echo "$at_srcdir/grecs00.at:20: gcffmt ./test.cf" at_fn_check_prepare_trace "grecs00.at:20" ( $at_check_trace; gcffmt ./test.cf ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo ".zone=\"foo\".type: \"delegation-only\" .zone=\"bar\".type: \"hint\" .zone=\"baz\".type: \"delegation-only\" " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/grecs00.at:20" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_31 #AT_START_32 at_fn_group_banner 32 'empty.at:17' \ "Empty input file" " " 9 at_xfail=no ( $as_echo "32. $at_setup_line: testing $at_desc ..." $at_traceon : >test.cf { set +x $as_echo "$at_srcdir/empty.at:20: gcffmt ./test.cf" at_fn_check_prepare_trace "empty.at:20" ( $at_check_trace; gcffmt ./test.cf ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo " " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/empty.at:20" $at_failed && at_fn_log_failure $at_traceon; } : >test.cf { set +x $as_echo "$at_srcdir/empty.at:40: gcffmt -type=path ./test.cf" at_fn_check_prepare_trace "empty.at:40" ( $at_check_trace; gcffmt -type=path ./test.cf ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo " " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/empty.at:40" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_32 #AT_START_33 at_fn_group_banner 33 'locus00.at:17' \ "Scalar value" " " 10 at_xfail=no ( $as_echo "33. $at_setup_line: testing $at_desc ..." $at_traceon cat >test.cf <<'_ATEOF' string val; _ATEOF { set +x $as_echo "$at_srcdir/locus00.at:24: gcfpeek -nopath -locus test.cf .string" at_fn_check_prepare_trace "locus00.at:24" ( $at_check_trace; gcfpeek -nopath -locus test.cf .string ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "test.cf:2.8-10: \"val\" " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/locus00.at:24" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_33 #AT_START_34 at_fn_group_banner 34 'locus01.at:17' \ "Multiline strings" " " 10 at_xfail=no ( $as_echo "34. $at_setup_line: testing $at_desc ..." $at_traceon cat >test.cf <<'_ATEOF' string <<EOT a multiline string EOT; _ATEOF { set +x $as_echo "$at_srcdir/locus01.at:28: gcfpeek -nopath -locus test.cf .string" at_fn_check_prepare_trace "locus01.at:28" ( $at_check_trace; gcfpeek -nopath -locus test.cf .string ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "test.cf:3.1-5.8: \"a\\nmultiline\\n string\\n\" " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/locus01.at:28" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_34 #AT_START_35 at_fn_group_banner 35 'locus02.at:17' \ "Adjacent quoted strings" " " 10 at_xfail=no ( $as_echo "35. $at_setup_line: testing $at_desc ..." $at_traceon cat >test.cf <<'_ATEOF' string "concatenated" " quoted" " strings"; _ATEOF { set +x $as_echo "$at_srcdir/locus02.at:26: gcfpeek -nopath -locus -strcat test.cf .string gcfpeek -nopath -locus -strcat -stradj test.cf .string" at_fn_check_prepare_notrace 'an embedded newline' "locus02.at:26" ( $at_check_trace; gcfpeek -nopath -locus -strcat test.cf .string gcfpeek -nopath -locus -strcat -stradj test.cf .string ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "test.cf:2.8-4.17: \"concatenated quoted strings\" test.cf:2.9-4.16: \"concatenated quoted strings\" " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/locus02.at:26" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_35 #AT_START_36 at_fn_group_banner 36 'path-locus.at:17' \ "Path" " " 10 at_xfail=no ( $as_echo "36. $at_setup_line: testing $at_desc ..." $at_traceon cat >test.cf <<'_ATEOF' .scalar: "yes" .listvar: ("a", "2", "b", "c") .compound: "stmt" "2" "foo" .mailbox.mailbox-pattern: \ "maildir:/var/mail;type=index;param=2;user=${user}" .mailbox.mailbox-type: "maildir" .logging.syslog: "yes" .logging.facility: "mail" .program="foo".logging.syslog: "yes" .program="foo".logging.facility: "local1" .program="foo".scalar: "no" .program="bar".logging.syslog: "no" .program="bar".logging.facility: "local2" .program="bar".logging.tag: "baz" .program="bar".scalar: "25" _ATEOF { set +x $as_echo "$at_srcdir/path-locus.at:37: gcffmt -type=path -locus test.cf" at_fn_check_prepare_trace "path-locus.at:37" ( $at_check_trace; gcffmt -type=path -locus test.cf ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "test.cf:1.1-14: .scalar: \"yes\" test.cf:2.1-30: .listvar: (\"a\", \"2\", \"b\", \"c\") test.cf:3.1-27: .compound: \"stmt\" \"2\" \"foo\" test.cf:4.1-5.53: .mailbox.mailbox-pattern: \"maildir:/var/mail;type=index;param=2;user=\${user}\" test.cf:6.1-32: .mailbox.mailbox-type: \"maildir\" test.cf:7.1-22: .logging.syslog: \"yes\" test.cf:8.1-25: .logging.facility: \"mail\" test.cf:9.1-36: .program=\"foo\".logging.syslog: \"yes\" test.cf:10.1-41: .program=\"foo\".logging.facility: \"local1\" test.cf:11.1-27: .program=\"foo\".scalar: \"no\" test.cf:12.1-35: .program=\"bar\".logging.syslog: \"no\" test.cf:13.1-41: .program=\"bar\".logging.facility: \"local2\" test.cf:14.1-33: .program=\"bar\".logging.tag: \"baz\" test.cf:15.1-27: .program=\"bar\".scalar: \"25\" " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/path-locus.at:37" $at_failed && at_fn_log_failure $at_traceon; } { set +x $as_echo "$at_srcdir/path-locus.at:55: gcffmt -type=path -locus -novalue test.cf" at_fn_check_prepare_trace "path-locus.at:55" ( $at_check_trace; gcffmt -type=path -locus -novalue test.cf ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "test.cf:1.1-7: .scalar test.cf:2.1-8: .listvar test.cf:3.1-9: .compound test.cf:4.1-24: .mailbox.mailbox-pattern test.cf:6.1-21: .mailbox.mailbox-type test.cf:7.1-15: .logging.syslog test.cf:8.1-17: .logging.facility test.cf:9.1-29: .program=\"foo\".logging.syslog test.cf:10.1-31: .program=\"foo\".logging.facility test.cf:11.1-21: .program=\"foo\".scalar test.cf:12.1-29: .program=\"bar\".logging.syslog test.cf:13.1-31: .program=\"bar\".logging.facility test.cf:14.1-26: .program=\"bar\".logging.tag test.cf:15.1-21: .program=\"bar\".scalar " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/path-locus.at:55" $at_failed && at_fn_log_failure $at_traceon; } { set +x $as_echo "$at_srcdir/path-locus.at:73: gcffmt -type=path -locus -nopath test.cf" at_fn_check_prepare_trace "path-locus.at:73" ( $at_check_trace; gcffmt -type=path -locus -nopath test.cf ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "test.cf:1.10-14: \"yes\" test.cf:2.11-30: (\"a\", \"2\", \"b\", \"c\") test.cf:3.12-27: \"stmt\" \"2\" \"foo\" test.cf:5.3-53: \"maildir:/var/mail;type=index;param=2;user=\${user}\" test.cf:6.24-32: \"maildir\" test.cf:7.18-22: \"yes\" test.cf:8.20-25: \"mail\" test.cf:9.32-36: \"yes\" test.cf:10.34-41: \"local1\" test.cf:11.24-27: \"no\" test.cf:12.32-35: \"no\" test.cf:13.34-41: \"local2\" test.cf:14.29-33: \"baz\" test.cf:15.24-27: \"25\" " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/path-locus.at:73" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_36 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/tests/peek02.at������������������������������������������������������������������0000644�0001750�0001750�00000001537�13244106110�017045� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of grecs -*- Autotest -*- # Copyright (C) 2007-2016 Sergey Poznyakoff # # Grecs 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. # # Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. AT_SETUP(Block nodes) AT_KEYWORDS([peek peek02]) AT_CHECK([gcfpeek $abs_srcdir/gcf1.conf .logging], [0], [.logging.syslog: "yes" .logging.facility: "mail" ]) AT_CLEANUP �����������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/tests/reduce02.at����������������������������������������������������������������0000644�0001750�0001750�00000002213�13244106110�017360� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of grecs -*- Autotest -*- # Copyright (C) 2007-2016 Sergey Poznyakoff # # Grecs 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. # # Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([Nested block statement]) AT_KEYWORDS([reduce reduce02]) GRECS_TEST([ block "a" { scalar a; foo 1; subblock { foo x; bar y; } } block "b" { foo 3; scalar b; } block "a" { scalar b; subblock { baz z; foo k; } } ], [gcffmt -reduce], [0], [.block="b".foo: "3" .block="b".scalar: "b" .block="a".foo: "1" .block="a".scalar: "b" .block="a".subblock.bar: "y" .block="a".subblock.baz: "z" .block="a".subblock.foo: "k" ]) AT_CLEANUP �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/tests/json00.at������������������������������������������������������������������0000644�0001750�0001750�00000003205�13244106110�017062� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of Grecs -*- Autotest -*- # Copyright (C) 2015-2016 Sergey Poznyakoff # # Grecs 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. # # Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([Parser]) AT_KEYWORDS([json json00 parser]) AT_DATA([input.json],[[ { "firstName": "John", "lastName": "Smith", "isAlive": true, "age": 25, "address": { "streetAddress": "21 2nd Street", "city": "New York", "state": "NY", "postalCode": "10021-3100" }, "phoneNumbers": [ { "type": "home", "number": "212 555-1234" }, { "type": "office", "number": "646 555-4567" } ], "children": [], "spouse": null } ]]) AT_CHECK([json -indent=2 -precision=0 -file=input.json], [0], [[{ "address": { "city": "New York", "postalCode": "10021-3100", "state": "NY", "streetAddress": "21 2nd Street" }, "age": 25, "children": [], "firstName": "John", "isAlive": true, "lastName": "Smith", "phoneNumbers": [ { "number": "212 555-1234", "type": "home" }, { "number": "646 555-4567", "type": "office" } ], "spouse": null } ]]) AT_CLEANUP �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/tests/parser-dhcpd.at������������������������������������������������������������0000644�0001750�0001750�00000006060�13244106110�020327� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of grecs -*- Autotest -*- # Copyright (C) 2011-2012, 2016 Sergey Poznyakoff # # Grecs 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. # # Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([DHCPD-style parser]) AT_KEYWORDS([parser dhcpd]) AT_CHECK([gcffmt -type=dhcpd -I$abs_srcdir $abs_srcdir/dhcpd.conf|sed 's/ *$//'], [0], [.authoritative: .pid-file-name: "/var/run/dhcpd.pid" .log-facility: "daemon" .default-lease-time: "28800" .max-lease-time: "86400" .ddns-update-style: "none" .get-lease-hostnames: "yes" .ddns-update-style: "interim" .ignore: "client-updates" .ddns-rev-domainname: "in-addr.arpa." .use-host-decl-names: "on" .key="rndc-key".algorithm: "hmac-md5" .key="rndc-key".secret: "1111111111111111111111==" .zone="lan.example.com.".primary: "127.0.0.1" .zone="lan.example.com.".key: "foo" .option: "domain-search" ("example.com", "example.org", "example.net") .if="option dhcp-user-class = \"accounting\"".max-lease-time: "17600" .if="option dhcp-user-class = \"accounting\"".option: "domain-name" "accounting.example.org" .if="option dhcp-user-class = \"accounting\"".option: "domain-name-servers" ("ns1.accounting.example.org", "ns2.accounting.example.org") .elsif="option dhcp-user-class = \"sales\"".max-lease-time: "17600" .elsif="option dhcp-user-class = \"sales\"".option: "domain-name" "sales.example.org" .elsif="option dhcp-user-class = \"sales\"".option: "domain-name-servers" ("ns1.sales.example.org", "ns2.sales.example.org") .elsif="option dhcp-user-class = \"engineering\"".max-lease-time: "17600" .elsif="option dhcp-user-class = \"engineering\"".option: "domain-name" "engineering.example.org" .elsif="option dhcp-user-class = \"engineering\"".option: "domain-name-servers" ("ns1.engineering.example.org", "ns2.engineering.example.org") .else.max-lease-time: "600" .else.option: "domain-name" "misc.example.org" .else.option: "domain-name-servers" ("ns1.misc.example.org", "ns2.misc.example.org") .shared-network="LAN".subnet="192.168.0.0" "netmask" "255.255.255.0".option: "routers" "192.168.0.1" .shared-network="LAN".subnet="192.168.0.0" "netmask" "255.255.255.0".option: "domain-name-servers" "192.168.0.1" .shared-network="LAN".subnet="192.168.0.0" "netmask" "255.255.255.0".update-static-leases: "on" .shared-network="LAN".subnet="192.168.0.0" "netmask" "255.255.255.0".pool.range: "192.168.0.1" "192.168.0.254" .shared-network="LAN".subnet="192.168.0.0" "netmask" "255.255.255.0".pool.deny: "known-clients" .shared-network="LAN".subnet="192.168.0.0" "netmask" "255.255.255.0".pool.ddns-hostname: "binary-to-ascii(10, 8, \"-\", leased-address)" ]) AT_CLEANUP ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/tests/wspackage.m4���������������������������������������������������������������0000644�0001750�0001750�00000000433�13512402633�017641� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������m4_define([AT_PACKAGE_NAME], [wordsplit]) m4_define([AT_PACKAGE_TARNAME], [wordsplit]) m4_define([AT_PACKAGE_VERSION], [v1.0-6-gd36275f]) m4_define([AT_PACKAGE_STRING], [AT_PACKAGE_TARNAME AT_PACKAGE_VERSION]) m4_define([AT_PACKAGE_BUGREPORT], [bug-direvent@gnu.org.ua]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/tests/sort00.at������������������������������������������������������������������0000644�0001750�0001750�00000001742�13244106110�017104� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of grecs -*- Autotest -*- # Copyright (C) 2007-2016 Sergey Poznyakoff # # Grecs 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. # # Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([Sort]) AT_KEYWORDS([sort sort00]) GRECS_TEST([b 1; a { x 5; b 4; z 1; } z 10; k { i 10; a 1; y 4; o 3; } f { a 1; b 2; } g 1; ], [gcffmt -sort], [0], [.a.b: "4" .a.x: "5" .a.z: "1" .b: "1" .f.a: "1" .f.b: "2" .g: "1" .k.a: "1" .k.i: "10" .k.o: "3" .k.y: "4" .z: "10" ]) AT_CLEANUP ������������������������������direvent-5.2/grecs/tests/gcfver.c�������������������������������������������������������������������0000644�0001750�0001750�00000003017�13244106110�017044� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* grecs - Gray's Extensible Configuration System Copyright (C) 2007-2016 Sergey Poznyakoff Grecs 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. Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include <stdlib.h> #include "grecs.h" int main(int argc, char **argv) { struct grecs_version_info *vinfo; int res; if (argc > 3) { fprintf(stderr, "usage: %s [version [version]]\n", argv[0]); exit(1); } if (argc == 2) exit(!grecs_version_ok(argv[1])); if (argc == 3) exit(grecs_version_cmp(argv[1], argv[2], &res) ? 1 : res == 0 ? 0 : res < 0 ? 2 : 3); /* Default action: */ vinfo = grecs_version(); printf("package: %s\n", vinfo->package); printf("version: %s\n", vinfo->version); printf("major: %d\n", vinfo->major); printf("minor: %d\n", vinfo->minor); printf("patch: %d\n", vinfo->patch); printf("suffix:"); if (vinfo->suffix && vinfo->suffix[0]) printf(" %s", vinfo->suffix); putchar('\n'); grecs_version_info_free(vinfo); exit(0); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/tests/set.at���������������������������������������������������������������������0000644�0001750�0001750�00000002066�13511403723�016557� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of grecs -*- Autotest -*- # Copyright (C) 2007-2016 Sergey Poznyakoff # # Grecs 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. # # Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([Set values]) AT_KEYWORDS([set]) AT_CHECK([gcfset $abs_srcdir/gcf1.conf 2>err||exit $? sed 's|^.*/gcf1.conf||' err >&2], [0], [Global settings: scalar = yes listvar = "a" "2" "b" "c" logging: 1/mail/(null)/0 Programs configured: 2 Program foo: scalar = no logging: 1/local1/(null)/0 Program bar: scalar = 25 logging: 0/local2/baz/0 ], [:25.1-8: unknown keyword ]) AT_CLEANUP ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/tests/locus02.at�����������������������������������������������������������������0000644�0001750�0001750�00000002067�13244106110�017245� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of grecs -*- Autotest -*- # Copyright (C) 2007-2016 Sergey Poznyakoff # # Grecs 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. # # Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. AT_SETUP(Adjacent quoted strings) AT_KEYWORDS([locus adjacent locus02]) AT_DATA([test.cf],[ string "concatenated" " quoted" " strings"; ]) AT_CHECK([gcfpeek -nopath -locus -strcat test.cf .string gcfpeek -nopath -locus -strcat -stradj test.cf .string], [0], [test.cf:2.8-4.17: "concatenated quoted strings" test.cf:2.9-4.16: "concatenated quoted strings" ]) AT_CLEANUP �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/tests/empty.at�������������������������������������������������������������������0000644�0001750�0001750�00000002100�13244106110�017100� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of grecs -*- Autotest -*- # Copyright (C) 2011-2016 Sergey Poznyakoff # # Grecs 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. # # Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([Empty input file]) AT_KEYWORDS([parser empty]) GRECS_TEST([], [gcffmt], [0], [ ]) m4_ifdef([ENABLE_BIND_PARSER],[ GRECS_TEST([], [gcffmt -type=bind], [0], [ ])]) m4_ifdef([ENABLE_META1_PARSER],[ GRECS_TEST([], [gcffmt -type=meta1], [0], [ ])]) GRECS_TEST([], [gcffmt -type=path], [0], [ ]) m4_ifdef([ENABLE_GIT_PARSER],[ GRECS_TEST([], [gcffmt -type=git], [0], [ ])]) AT_CLEANUP ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/tests/incl02.at������������������������������������������������������������������0000644�0001750�0001750�00000002122�13244106110�017035� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of grecs -*- Autotest -*- # Copyright (C) 2014-2016 Sergey Poznyakoff # # Grecs 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. # # Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([Include once]) AT_KEYWORDS([include incl02]) AT_CHECK([ AT_DATA([a.inc],[a true; ]) AT_DATA([test1.cf],[before 1; #include "a.inc" #include "a.inc" after 1; ]) AT_DATA([test2.cf],[before 1; #include_once "a.inc" #include_once "a.inc" after 1; ]) gcffmt ./test1.cf echo == gcffmt ./test2.cf ], [0], [.before: "1" .a: "true" .a: "true" .after: "1" == .before: "1" .a: "true" .after: "1" ]) AT_CLEANUP ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/tests/Makefile.in����������������������������������������������������������������0000644�0001750�0001750�00000062134�13512402623�017504� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 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 grecs - Gray's Extensible Configuration System # Copyright (C) 2007-2019 Sergey Poznyakoff # # Grecs 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. # # Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. 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@ @GRECS_COND_META1_PARSER_TRUE@am__append_1 = ENABLE_META1_PARSER @GRECS_COND_BIND_PARSER_TRUE@am__append_2 = ENABLE_BIND_PARSER @GRECS_COND_DHCPD_PARSER_TRUE@am__append_3 = ENABLE_DHCPD_PARSER @GRECS_COND_GIT_PARSER_TRUE@am__append_4 = ENABLE_GIT_PARSER @GRECS_COND_JSON_TRUE@am__append_5 = ENABLE_JSON noinst_PROGRAMS = distck$(EXEEXT) gcffmt$(EXEEXT) gcfenum$(EXEEXT) \ gcfpeek$(EXEEXT) gcfset$(EXEEXT) gcfver$(EXEEXT) \ $(am__EXEEXT_1) wsp$(EXEEXT) @GRECS_COND_JSON_TRUE@am__append_6 = json subdir = grecs/tests 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)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = atlocal CONFIG_CLEAN_VPATH_FILES = @GRECS_COND_JSON_TRUE@am__EXEEXT_1 = json$(EXEEXT) PROGRAMS = $(noinst_PROGRAMS) distck_SOURCES = distck.c distck_OBJECTS = distck.$(OBJEXT) distck_LDADD = $(LDADD) am__DEPENDENCIES_1 = distck_DEPENDENCIES = $(am__DEPENDENCIES_1) gcfenum_SOURCES = gcfenum.c gcfenum_OBJECTS = gcfenum.$(OBJEXT) gcfenum_LDADD = $(LDADD) gcfenum_DEPENDENCIES = $(am__DEPENDENCIES_1) gcffmt_SOURCES = gcffmt.c gcffmt_OBJECTS = gcffmt.$(OBJEXT) gcffmt_LDADD = $(LDADD) gcffmt_DEPENDENCIES = $(am__DEPENDENCIES_1) gcfpeek_SOURCES = gcfpeek.c gcfpeek_OBJECTS = gcfpeek.$(OBJEXT) gcfpeek_LDADD = $(LDADD) gcfpeek_DEPENDENCIES = $(am__DEPENDENCIES_1) gcfset_SOURCES = gcfset.c gcfset_OBJECTS = gcfset.$(OBJEXT) gcfset_LDADD = $(LDADD) gcfset_DEPENDENCIES = $(am__DEPENDENCIES_1) gcfver_SOURCES = gcfver.c gcfver_OBJECTS = gcfver.$(OBJEXT) gcfver_LDADD = $(LDADD) gcfver_DEPENDENCIES = $(am__DEPENDENCIES_1) json_SOURCES = json.c json_OBJECTS = json.$(OBJEXT) json_LDADD = $(LDADD) json_DEPENDENCIES = $(am__DEPENDENCIES_1) am_wsp_OBJECTS = nodist_wsp_OBJECTS = wsp.$(OBJEXT) wsp_OBJECTS = $(am_wsp_OBJECTS) $(nodist_wsp_OBJECTS) wsp_LDADD = $(LDADD) wsp_DEPENDENCIES = $(am__DEPENDENCIES_1) 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 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = distck.c gcfenum.c gcffmt.c gcfpeek.c gcfset.c gcfver.c \ json.c $(wsp_SOURCES) $(nodist_wsp_SOURCES) DIST_SOURCES = distck.c gcfenum.c gcffmt.c gcfpeek.c gcfset.c gcfver.c \ json.c $(wsp_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/atlocal.in \ $(top_srcdir)/build-aux/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) VPATH = @srcdir@ $(top_srcdir)/@GRECS_SUBDIR@/wordsplit 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@ 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@ 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@ 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@ 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@ EXTRA_DIST = $(TESTSUITE_AT) testsuite package.m4 gcf1.conf bind.conf \ bind.keys bind.int.conf bind.ext.conf bind.dlz dhcpd.conf \ meta1.conf git.conf wstest wspackage.m4 wordsplit-version.h DISTCLEANFILES = atconfig $(check_SCRIPTS) MAINTAINERCLEANFILES = Makefile.in $(TESTSUITE) PARSER_DEFS = $(am__append_1) $(am__append_2) $(am__append_3) \ $(am__append_4) $(am__append_5) # TESTSUITE_AT = \ bind00.at\ cfhelp.at\ empty.at\ format00.at\ format01.at\ format02.at\ glob00.at\ glob01.at\ glob02.at\ glob03.at\ glob04.at\ glob05.at\ grecs00.at\ enum.at\ incl00.at\ incl01.at\ incl02.at\ incl03.at\ join.at\ json00.at\ json01.at\ locus00.at\ locus01.at\ locus02.at\ locus-bind.at\ locus-git.at\ locus-meta1.at\ parser-dhcpd.at\ parser-bind.at\ parser-git.at\ parser-meta1.at\ path-locus.at\ peek00.at\ peek01.at\ peek02.at\ peek03.at\ reduce00.at\ reduce01.at\ reduce02.at\ reduce03.at\ set.at\ sort00.at\ sort01.at\ stradj.at\ strcat.at\ testsuite.at\ vercmp.at\ @GRECS_DISTCK_AT@ TESTSUITE = $(srcdir)/testsuite M4 = m4 AUTOTEST = $(AUTOM4TE) --language=autotest LDADD = @GRECS_LDADD@ $(LIBINTL) @GRECS_HOST_PROJECT_LDADD@ AM_CPPFLAGS = @GRECS_INCLUDES@ @GRECS_HOST_PROJECT_INCLUDES@ # Wordsplit testsuite WSTEST = $(srcdir)/wstest wsp_SOURCES = nodist_wsp_SOURCES = wsp.c all: all-am .SUFFIXES: .SUFFIXES: .c .o .obj $(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 grecs/tests/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnits grecs/tests/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__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ 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): atlocal: $(top_builddir)/config.status $(srcdir)/atlocal.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ clean-noinstPROGRAMS: -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS) distck$(EXEEXT): $(distck_OBJECTS) $(distck_DEPENDENCIES) $(EXTRA_distck_DEPENDENCIES) @rm -f distck$(EXEEXT) $(AM_V_CCLD)$(LINK) $(distck_OBJECTS) $(distck_LDADD) $(LIBS) gcfenum$(EXEEXT): $(gcfenum_OBJECTS) $(gcfenum_DEPENDENCIES) $(EXTRA_gcfenum_DEPENDENCIES) @rm -f gcfenum$(EXEEXT) $(AM_V_CCLD)$(LINK) $(gcfenum_OBJECTS) $(gcfenum_LDADD) $(LIBS) gcffmt$(EXEEXT): $(gcffmt_OBJECTS) $(gcffmt_DEPENDENCIES) $(EXTRA_gcffmt_DEPENDENCIES) @rm -f gcffmt$(EXEEXT) $(AM_V_CCLD)$(LINK) $(gcffmt_OBJECTS) $(gcffmt_LDADD) $(LIBS) gcfpeek$(EXEEXT): $(gcfpeek_OBJECTS) $(gcfpeek_DEPENDENCIES) $(EXTRA_gcfpeek_DEPENDENCIES) @rm -f gcfpeek$(EXEEXT) $(AM_V_CCLD)$(LINK) $(gcfpeek_OBJECTS) $(gcfpeek_LDADD) $(LIBS) gcfset$(EXEEXT): $(gcfset_OBJECTS) $(gcfset_DEPENDENCIES) $(EXTRA_gcfset_DEPENDENCIES) @rm -f gcfset$(EXEEXT) $(AM_V_CCLD)$(LINK) $(gcfset_OBJECTS) $(gcfset_LDADD) $(LIBS) gcfver$(EXEEXT): $(gcfver_OBJECTS) $(gcfver_DEPENDENCIES) $(EXTRA_gcfver_DEPENDENCIES) @rm -f gcfver$(EXEEXT) $(AM_V_CCLD)$(LINK) $(gcfver_OBJECTS) $(gcfver_LDADD) $(LIBS) json$(EXEEXT): $(json_OBJECTS) $(json_DEPENDENCIES) $(EXTRA_json_DEPENDENCIES) @rm -f json$(EXEEXT) $(AM_V_CCLD)$(LINK) $(json_OBJECTS) $(json_LDADD) $(LIBS) wsp$(EXEEXT): $(wsp_OBJECTS) $(wsp_DEPENDENCIES) $(EXTRA_wsp_DEPENDENCIES) @rm -f wsp$(EXEEXT) $(AM_V_CCLD)$(LINK) $(wsp_OBJECTS) $(wsp_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/distck.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gcfenum.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gcffmt.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gcfpeek.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gcfset.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gcfver.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/json.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wsp.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(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 check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-local check: check-am all-am: Makefile $(PROGRAMS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: 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) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-local clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am check-local clean \ clean-generic clean-local clean-noinstPROGRAMS cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-tags 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-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am .PRECIOUS: Makefile $(srcdir)/package.m4: $(top_srcdir)/configure.ac $(top_srcdir)/@GRECS_SUBDIR@/am/grecs.m4 $(AM_V_GEN){ \ echo '# Signature of the current package.'; \ echo 'm4_define([AT_PACKAGE_NAME], [@PACKAGE_NAME@])'; \ echo 'm4_define([AT_PACKAGE_TARNAME], [@PACKAGE_TARNAME@])'; \ echo 'm4_define([AT_PACKAGE_VERSION], [@PACKAGE_VERSION@])'; \ echo 'm4_define([AT_PACKAGE_STRING], [@PACKAGE_STRING@])'; \ echo 'm4_define([AT_PACKAGE_BUGREPORT], [@PACKAGE_BUGREPORT@])'; \ echo 'm4_define([GRECS_DISTCK_AT], [@GRECS_DISTCK_AT@])'; \ for var in $(PARSER_DEFS); do \ echo "m4_define([$$var],1)"; \ done; \ } >$(srcdir)/package.m4 $(TESTSUITE): package.m4 $(TESTSUITE_AT) $(AUTOTEST) -I $(srcdir) testsuite.at -o $@.tmp mv $@.tmp $@ atconfig: $(top_builddir)/config.status cd $(top_builddir) && ./config.status tests/$@ clean-local: clean-wordsplit test ! -f $(TESTSUITE) || $(SHELL) $(TESTSUITE) --clean check-local: check-wordsplit atconfig atlocal $(TESTSUITE) $(noinst_PROGRAMS) $(SHELL) $(TESTSUITE) $(WSTEST): $(top_srcdir)/@GRECS_SUBDIR@/wordsplit/wordsplit.at $(srcdir)/wspackage.m4 $(AM_V_GEN)$(AUTOTEST) -I $(srcdir) \ wspackage.m4 \ $(top_srcdir)/@GRECS_SUBDIR@/wordsplit/wordsplit.at \ -o $(WSTEST).tmp $(AM_V_at)mv $(WSTEST).tmp $(WSTEST) $(srcdir)/wspackage.m4: $(top_srcdir)/configure.ac $(top_srcdir)/@GRECS_SUBDIR@/am/grecs.m4 $(AM_V_GEN){\ if test -e $(top_srcdir)/@GRECS_SUBDIR@/wordsplit/.git; then \ wsversion=$$(cd $(top_srcdir)/@GRECS_SUBDIR@/wordsplit; git describe); \ else \ wsversion="unknown"; \ fi;\ echo 'm4_define([AT_PACKAGE_NAME], [wordsplit])'; \ echo 'm4_define([AT_PACKAGE_TARNAME], [wordsplit])'; \ echo "m4_define([AT_PACKAGE_VERSION], [$$wsversion])"; \ echo 'm4_define([AT_PACKAGE_STRING], [AT_PACKAGE_TARNAME AT_PACKAGE_VERSION])'; \ echo 'm4_define([AT_PACKAGE_BUGREPORT], [@PACKAGE_BUGREPORT@])'; \ } > $(srcdir)/wspackage.m4 $(srcdir)/wordsplit-version.h: $(srcdir)/wspackage.m4 $(AM_V_GEN){ echo "m4_divert(-1)";\ echo "m4_changequote([,])";\ echo "m4_changecom([//])";\ echo "m4_include($(srcdir)/wspackage.m4)";\ echo 'm4_divert(0)#define WORDSPLIT_VERSION "AT_PACKAGE_VERSION"'; } | \ $(M4) -P - > $(srcdir)/wordsplit-version.h wsp.o: $(srcdir)/wordsplit-version.h clean-wordsplit: test ! -f $(WSTEST) || $(SHELL) $(WSTEST) --clean check-wordsplit: atconfig atlocal $(WSTEST) $(noinst_PROGRAMS) $(SHELL) $(WSTEST) # 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.2/grecs/tests/wstest���������������������������������������������������������������������0000755�0001750�0001750�00000430470�13512402634�016722� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Generated from ../../grecs/wordsplit/wordsplit.at by GNU Autoconf 2.69. # # Copyright (C) 2009-2012 Free Software Foundation, Inc. # # This test suite is free software; the Free Software Foundation gives # unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" SHELL=${CONFIG_SHELL-/bin/sh} # How were we run? at_cli_args="$@" # Not all shells have the 'times' builtin; the subshell is needed to make # sure we discard the 'times: not found' message from the shell. at_times_p=false (times) >/dev/null 2>&1 && at_times_p=: # CLI Arguments to pass to the debugging scripts. at_debug_args= # -e sets to true at_errexit_p=false # Shall we be verbose? ':' means no, empty means yes. at_verbose=: at_quiet= # Running several jobs in parallel, 0 means as many as test groups. at_jobs=1 at_traceon=: at_trace_echo=: at_check_filter_trace=: # Shall we keep the debug scripts? Must be `:' when the suite is # run by a debug script, so that the script doesn't remove itself. at_debug_p=false # Display help message? at_help_p=false # Display the version message? at_version_p=false # List test groups? at_list_p=false # --clean at_clean=false # Test groups to run at_groups= # Whether to rerun failed tests. at_recheck= # Whether a write failure occurred at_write_fail=0 # The directory we run the suite in. Default to . if no -C option. at_dir=`pwd` # An absolute reference to this testsuite script. case $as_myself in [\\/]* | ?:[\\/]* ) at_myself=$as_myself ;; * ) at_myself=$at_dir/$as_myself ;; esac # Whether -C is in effect. at_change_dir=false # Whether to enable colored test results. at_color=no # List of the tested programs. at_tested='wsp' # As many question marks as there are digits in the last test group number. # Used to normalize the test group numbers so that `ls' lists them in # numerical order. at_format='??' # Description of all the test groups. at_help_all="1;wordsplit.at:59;simple input;wordsplit wsp wordsplit000 wsp000 wsp-simple; 2;wordsplit.at:68;quoted space;wordsplit wsp wordsplit001 wsp000 wsp-quoted; 3;wordsplit.at:75;tab character;wordsplit wsp wordsplit002 wsp000 wsp-tab; 4;wordsplit.at:84;octal and hex escapes;wordsplit wsp wordsplit003 wsp000 wsp-escape wsp-escape000; 5;wordsplit.at:91;octal and hex escapes 2;wordsplit wsp wordsplit004 wsp000 wsp-escape wsp-escape001; 6;wordsplit.at:100;escape representation;wordsplit wsp wordsplit005 wsp000 wsp-escape wsp-escape002; 7;wordsplit.at:112;append;wordsplit wsp wordsplit006 wsp000 wsp-append; 8;wordsplit.at:137;dooffs;wordsplit wsp wordsplit007 wsp000 wsp-doofs; 9;wordsplit.at:150;variable substitutions: single var;wordsplit wsp wordsplit008 wsp000 wsp-var wsp-var000; 10;wordsplit.at:161;variable substitutions: concatenated vars;wordsplit wsp wordsplit009 wsp000 wsp-var wsp-var001; 11;wordsplit.at:173;variable substitutions: field splitting;wordsplit wsp wordsplit010 wsp000 wsp-var wsp-var002; 12;wordsplit.at:185;variable substitutions: double-quoted variable;wordsplit wsp wordsplit011 wsp000 wsp-var wsp-var003; 13;wordsplit.at:196;variable substitutions: single-quoted variable;wordsplit wsp wordsplit012 wsp000 wsp-var wsp-var004; 14;wordsplit.at:207;undefined variables 1;wordsplit wsp wordsplit013 wsp000 wsp-var wsp-var005; 15;wordsplit.at:218;undefined variables 2;wordsplit wsp wordsplit014 wsp000 wsp-var wsp-var006; 16;wordsplit.at:230;warn about undefined variables;wordsplit wsp wordsplit015 wsp000 wsp-var wsp-var007; 17;wordsplit.at:239;bail out on undefined variables;wordsplit wsp wordsplit016 wsp000 wsp-var wsp-var008; 18;wordsplit.at:246;disable variable expansion;wordsplit wsp wordsplit017 wsp000 wsp-var wsp-var009; 19;wordsplit.at:255;K/V environment;wordsplit wsp wordsplit018 wsp000 wsp-var wsp-var010 wsp-env-kv wsp-env_kv; 20;wordsplit.at:266;nosplit with variable expansion;wordsplit wsp wordsplit019 wsp000 wsp-var wsp-var011 wsp-var-nosplit; 21;wordsplit.at:275;nosplit without variable expansion;wordsplit wsp wordsplit020 wsp000 wsp-var wsp-var012; 22;wordsplit.at:284;nosplit: empty expansion;wordsplit wsp wordsplit021 wsp000 wsp-var wsp-var013; 23;wordsplit.at:293;default value;wordsplit wsp wordsplit022 wsp000 wsp-var wsp-var014; 24;wordsplit.at:300;default value (defined);wordsplit wsp wordsplit023 wsp000 wsp-var wsp-var015; 25;wordsplit.at:309;default value (:- null);wordsplit wsp wordsplit024 wsp000 wsp-var wsp-var016; 26;wordsplit.at:318;default value (- null);wordsplit wsp wordsplit025 wsp000 wsp-var wsp-var017; 27;wordsplit.at:326;default value (- null, unset);wordsplit wsp wordsplit026 wsp000 wsp-var wsp-var018; 28;wordsplit.at:333;assign default values;wordsplit wsp wordsplit027 wsp000 wsp-var wsp-var019; 29;wordsplit.at:344;default error message (var defined);wordsplit wsp wordsplit028 wsp000 wsp-var wsp-var020; 30;wordsplit.at:355;default error message;wordsplit wsp wordsplit029 wsp000 wsp-var wsp-var021; 31;wordsplit.at:363;custom error message (defined);wordsplit wsp wordsplit030 wsp000 wsp-var wsp-var022 wsp-custom-err wsp-custom-err00; 32;wordsplit.at:374;custom error message;wordsplit wsp wordsplit031 wsp000 wsp-var wsp-var023 wsp-custom-err wsp-custom-err01; 33;wordsplit.at:384;alternate value (defined);wordsplit wsp wordsplit032 wsp000 wsp-var wsp-var024 wsp-alt wsp-alt00; 34;wordsplit.at:395;alternate value;wordsplit wsp wordsplit033 wsp000 wsp-var wsp-var025 wsp-alt wsp-alt01; 35;wordsplit.at:405;getvar;wordsplit wsp wordsplit034 wsp000 wsp-var wsp-var026 wsp-getvar; 36;wordsplit.at:419;getvar and env;wordsplit wsp wordsplit035 wsp000 wsp-var wsp-var027 wsp-getvar; 37;wordsplit.at:435;getvar, alternate value;wordsplit wsp wordsplit036 wsp000 wsp-var wsp-var028 wsp-getvar; 38;wordsplit.at:446;ignore quotes;wordsplit wsp wordsplit037 wsp000 wsp-ignore-quotes; 39;wordsplit.at:456;custom delimiters (squeeze);wordsplit wsp wordsplit038 wsp000 wsp-delim wsp-delim000; 40;wordsplit.at:468;custom delimiters (no squeeze);wordsplit wsp wordsplit039 wsp000 wsp-delim wsp-delim001; 41;wordsplit.at:481;custom, with returned delimiters;wordsplit wsp wordsplit040 wsp000 wsp-delim wsp-delim002; 42;wordsplit.at:497;custom, with returned & squeezed delimiters;wordsplit wsp wordsplit041 wsp000 wsp-delim wsp-delim003; 43;wordsplit.at:516;sed expressions;wordsplit wsp wordsplit042 wsp000 wsp-sed wsp-sed000; 44;wordsplit.at:527;C escapes on;wordsplit wsp wordsplit043 wsp000 wcp-c-escape; 45;wordsplit.at:537;C escapes off;wordsplit wsp wordsplit044 wsp000 wcp-c-escape-off; 46;wordsplit.at:547;ws elimination;wordsplit wsp wordsplit045 wsp000 wsp-ws-elim; 47;wordsplit.at:557;ws elimination + return delim;wordsplit wsp wordsplit046 wsp000 wsp-ws-elim-ret; 48;wordsplit.at:571;empty quotes;wordsplit wsp wordsplit047 wsp000 wsp-empty-quotes; 49;wordsplit.at:578;delimiter following empty quotes;wordsplit wsp wordsplit048 wsp000; 50;wordsplit.at:588;suppress ws trimming within quotes;wordsplit wsp wordsplit049 wsp000; 51;wordsplit.at:601;unescape;wordsplit wsp wordsplit050 wsp000 wsp-unescape wsp-unescape-simple; 52;wordsplit.at:612;unescape: word/quote;wordsplit wsp wordsplit051 wsp000 wsp-unescape wsp-unescape-word; 53;wordsplit.at:626;dquote;wordsplit wsp wordsplit052 wsp000; 54;wordsplit.at:636;squote;wordsplit wsp wordsplit053 wsp000; 55;wordsplit.at:648;incremental;wordsplit wsp wordsplit054 wsp000 wsp-incr wsp-incr000; 56;wordsplit.at:666;incremental append;wordsplit wsp wordsplit055 wsp000 wsp-incr wsp-incr001; 57;wordsplit.at:687;incremental ws;wordsplit wsp wordsplit056 wsp000 wsp-incr wsp-incr002; 58;wordsplit.at:706;incremental nosplit;wordsplit wsp wordsplit057 wsp000 wsp-incr wsp-incr003; 59;wordsplit.at:716;simple command substitution;wordsplit wsp wordsplit058 wsp000 wsp-incr wsp-incr004; 60;wordsplit.at:726;quoted command substitution;wordsplit wsp wordsplit059 wsp000 wsp-incr wsp-incr005; 61;wordsplit.at:735;coalesced command substitution;wordsplit wsp wordsplit060 wsp000 wsp-incr wsp-incr006; 62;wordsplit.at:743;quoted coalesced command substitution;wordsplit wsp wordsplit061 wsp000 wsp-incr wsp-incr007; 63;wordsplit.at:750;variable and command substitution;wordsplit wsp wordsplit062 wsp000 wsp-incr wsp-incr008; 64;wordsplit.at:761;variable expansion and command substitution in quotes;wordsplit wsp wordsplit063 wsp000 wsp-incr wsp-incr009; 65;wordsplit.at:768;nested commands;wordsplit wsp wordsplit064 wsp000 wsp-incr wsp-incr010; 66;wordsplit.at:779;pathname expansion;wordsplit wsp wsp-path wsp-path-1; 67;wordsplit.at:801;pathname expansion: no match;wordsplit wsp wsp-path wsp-path-2; 68;wordsplit.at:821;pathname expansion: nullglob;wordsplit wsp wsp-path wsp-path-3; 69;wordsplit.at:840;pathname expansion: failglob;wordsplit wsp wsp-path wsp-path-4; 70;wordsplit.at:857;append;wordsplit wsp wordsplit065 wsp000 wsp-incr wsp-incr011; 71;wordsplit.at:869;append + dooffs + env;wordsplit wsp wordsplit066 wsp000 wsp-incr wsp-incr012; 72;wordsplit.at:886;maxwords;wordsplit wsp wordsplit067 wsp000 wsp-incr wsp-incr013; 73;wordsplit.at:896;maxwords return_delims;wordsplit wsp wordsplit068 wsp000 wsp-incr wsp-incr014; 74;wordsplit.at:911;maxwords return_delims -squeeze_delims;wordsplit wsp wordsplit069 wsp000 wsp-incr wsp-incr015; 75;wordsplit.at:926;maxwords incremental;wordsplit wsp wordsplit070 wsp000 wsp-incr wsp-incr016; 76;wordsplit.at:945;variable nosplit;wordsplit wsp wordsplit071 wsp000 wsp-incr wsp-incr017; 77;wordsplit.at:954;command nosplit;wordsplit wsp wordsplit072 wsp000 wsp-incr wsp-incr018; 78;wordsplit.at:963;positional parameters;wordsplit wsp wordsplit073 wsp000 wsp-incr wsp-incr019; 79;wordsplit.at:976;\$* and \$@;wordsplit wsp wordsplit074 wsp000 wsp-incr wsp-incr020; 80;wordsplit.at:1001;\$* and \$@ in nosplit mode;wordsplit wsp wordsplit075 wsp000 wsp-incr wsp-incr021; 81;wordsplit.at:1013;\$* and \$@ in nosplit mode with delimiter;wordsplit wsp wordsplit076 wsp000 wsp-incr wsp-incr022; " # List of the all the test groups. at_groups_all=`$as_echo "$at_help_all" | sed 's/;.*//'` # at_fn_validate_ranges NAME... # ----------------------------- # Validate and normalize the test group number contained in each variable # NAME. Leading zeroes are treated as decimal. at_fn_validate_ranges () { for at_grp do eval at_value=\$$at_grp if test $at_value -lt 1 || test $at_value -gt 81; then $as_echo "invalid test group: $at_value" >&2 exit 1 fi case $at_value in 0*) # We want to treat leading 0 as decimal, like expr and test, but # AS_VAR_ARITH treats it as octal if it uses $(( )). # With XSI shells, ${at_value#${at_value%%[1-9]*}} avoids the # expr fork, but it is not worth the effort to determine if the # shell supports XSI when the user can just avoid leading 0. eval $at_grp='`expr $at_value + 0`' ;; esac done } at_prev= for at_option do # If the previous option needs an argument, assign it. if test -n "$at_prev"; then at_option=$at_prev=$at_option at_prev= fi case $at_option in *=?*) at_optarg=`expr "X$at_option" : '[^=]*=\(.*\)'` ;; *) at_optarg= ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $at_option in --help | -h ) at_help_p=: ;; --list | -l ) at_list_p=: ;; --version | -V ) at_version_p=: ;; --clean | -c ) at_clean=: ;; --color ) at_color=always ;; --color=* ) case $at_optarg in no | never | none) at_color=never ;; auto | tty | if-tty) at_color=auto ;; always | yes | force) at_color=always ;; *) at_optname=`echo " $at_option" | sed 's/^ //; s/=.*//'` as_fn_error $? "unrecognized argument to $at_optname: $at_optarg" ;; esac ;; --debug | -d ) at_debug_p=: ;; --errexit | -e ) at_debug_p=: at_errexit_p=: ;; --verbose | -v ) at_verbose=; at_quiet=: ;; --trace | -x ) at_traceon='set -x' at_trace_echo=echo at_check_filter_trace=at_fn_filter_trace ;; [0-9] | [0-9][0-9] | [0-9][0-9][0-9] | [0-9][0-9][0-9][0-9]) at_fn_validate_ranges at_option as_fn_append at_groups "$at_option$as_nl" ;; # Ranges [0-9]- | [0-9][0-9]- | [0-9][0-9][0-9]- | [0-9][0-9][0-9][0-9]-) at_range_start=`echo $at_option |tr -d X-` at_fn_validate_ranges at_range_start at_range=`$as_echo "$at_groups_all" | \ sed -ne '/^'$at_range_start'$/,$p'` as_fn_append at_groups "$at_range$as_nl" ;; -[0-9] | -[0-9][0-9] | -[0-9][0-9][0-9] | -[0-9][0-9][0-9][0-9]) at_range_end=`echo $at_option |tr -d X-` at_fn_validate_ranges at_range_end at_range=`$as_echo "$at_groups_all" | \ sed -ne '1,/^'$at_range_end'$/p'` as_fn_append at_groups "$at_range$as_nl" ;; [0-9]-[0-9] | [0-9]-[0-9][0-9] | [0-9]-[0-9][0-9][0-9] | \ [0-9]-[0-9][0-9][0-9][0-9] | [0-9][0-9]-[0-9][0-9] | \ [0-9][0-9]-[0-9][0-9][0-9] | [0-9][0-9]-[0-9][0-9][0-9][0-9] | \ [0-9][0-9][0-9]-[0-9][0-9][0-9] | \ [0-9][0-9][0-9]-[0-9][0-9][0-9][0-9] | \ [0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9] ) at_range_start=`expr $at_option : '\(.*\)-'` at_range_end=`expr $at_option : '.*-\(.*\)'` if test $at_range_start -gt $at_range_end; then at_tmp=$at_range_end at_range_end=$at_range_start at_range_start=$at_tmp fi at_fn_validate_ranges at_range_start at_range_end at_range=`$as_echo "$at_groups_all" | \ sed -ne '/^'$at_range_start'$/,/^'$at_range_end'$/p'` as_fn_append at_groups "$at_range$as_nl" ;; # Directory selection. --directory | -C ) at_prev=--directory ;; --directory=* ) at_change_dir=: at_dir=$at_optarg if test x- = "x$at_dir" ; then at_dir=./- fi ;; # Parallel execution. --jobs | -j ) at_jobs=0 ;; --jobs=* | -j[0-9]* ) if test -n "$at_optarg"; then at_jobs=$at_optarg else at_jobs=`expr X$at_option : 'X-j\(.*\)'` fi case $at_jobs in *[!0-9]*) at_optname=`echo " $at_option" | sed 's/^ //; s/[0-9=].*//'` as_fn_error $? "non-numeric argument to $at_optname: $at_jobs" ;; esac ;; # Keywords. --keywords | -k ) at_prev=--keywords ;; --keywords=* ) at_groups_selected=$at_help_all at_save_IFS=$IFS IFS=, set X $at_optarg shift IFS=$at_save_IFS for at_keyword do at_invert= case $at_keyword in '!'*) at_invert="-v" at_keyword=`expr "X$at_keyword" : 'X!\(.*\)'` ;; esac # It is on purpose that we match the test group titles too. at_groups_selected=`$as_echo "$at_groups_selected" | grep -i $at_invert "^[1-9][^;]*;.*[; ]$at_keyword[ ;]"` done # Smash the keywords. at_groups_selected=`$as_echo "$at_groups_selected" | sed 's/;.*//'` as_fn_append at_groups "$at_groups_selected$as_nl" ;; --recheck) at_recheck=: ;; *=*) at_envvar=`expr "x$at_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $at_envvar in '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$at_envvar'" ;; esac at_value=`$as_echo "$at_optarg" | sed "s/'/'\\\\\\\\''/g"` # Export now, but save eval for later and for debug scripts. export $at_envvar as_fn_append at_debug_args " $at_envvar='$at_value'" ;; *) $as_echo "$as_me: invalid option: $at_option" >&2 $as_echo "Try \`$0 --help' for more information." >&2 exit 1 ;; esac done # Verify our last option didn't require an argument if test -n "$at_prev"; then : as_fn_error $? "\`$at_prev' requires an argument" fi # The file containing the suite. at_suite_log=$at_dir/$as_me.log # Selected test groups. if test -z "$at_groups$at_recheck"; then at_groups=$at_groups_all else if test -n "$at_recheck" && test -r "$at_suite_log"; then at_oldfails=`sed -n ' /^Failed tests:$/,/^Skipped tests:$/{ s/^[ ]*\([1-9][0-9]*\):.*/\1/p } /^Unexpected passes:$/,/^## Detailed failed tests/{ s/^[ ]*\([1-9][0-9]*\):.*/\1/p } /^## Detailed failed tests/q ' "$at_suite_log"` as_fn_append at_groups "$at_oldfails$as_nl" fi # Sort the tests, removing duplicates. at_groups=`$as_echo "$at_groups" | sort -nu | sed '/^$/d'` fi if test x"$at_color" = xalways \ || { test x"$at_color" = xauto && test -t 1; }; then at_red=`printf '\033[0;31m'` at_grn=`printf '\033[0;32m'` at_lgn=`printf '\033[1;32m'` at_blu=`printf '\033[1;34m'` at_std=`printf '\033[m'` else at_red= at_grn= at_lgn= at_blu= at_std= fi # Help message. if $at_help_p; then cat <<_ATEOF || at_write_fail=1 Usage: $0 [OPTION]... [VARIABLE=VALUE]... [TESTS] Run all the tests, or the selected TESTS, given by numeric ranges, and save a detailed log file. Upon failure, create debugging scripts. Do not change environment variables directly. Instead, set them via command line arguments. Set \`AUTOTEST_PATH' to select the executables to exercise. Each relative directory is expanded as build and source directories relative to the top level of this distribution. E.g., from within the build directory /tmp/foo-1.0, invoking this: $ $0 AUTOTEST_PATH=bin is equivalent to the following, assuming the source directory is /src/foo-1.0: PATH=/tmp/foo-1.0/bin:/src/foo-1.0/bin:\$PATH $0 _ATEOF cat <<_ATEOF || at_write_fail=1 Operation modes: -h, --help print the help message, then exit -V, --version print version number, then exit -c, --clean remove all the files this test suite might create and exit -l, --list describes all the tests, or the selected TESTS _ATEOF cat <<_ATEOF || at_write_fail=1 Execution tuning: -C, --directory=DIR change to directory DIR before starting --color[=never|auto|always] enable colored test results on terminal, or always -j, --jobs[=N] Allow N jobs at once; infinite jobs with no arg (default 1) -k, --keywords=KEYWORDS select the tests matching all the comma-separated KEYWORDS multiple \`-k' accumulate; prefixed \`!' negates a KEYWORD --recheck select all tests that failed or passed unexpectedly last time -e, --errexit abort as soon as a test fails; implies --debug -v, --verbose force more detailed output default for debugging scripts -d, --debug inhibit clean up and top-level logging default for debugging scripts -x, --trace enable tests shell tracing _ATEOF cat <<_ATEOF || at_write_fail=1 Report bugs to <bug-direvent@gnu.org.ua>. _ATEOF exit $at_write_fail fi # List of tests. if $at_list_p; then cat <<_ATEOF || at_write_fail=1 wordsplit v1.0-6-gd36275f test suite test groups: NUM: FILE-NAME:LINE TEST-GROUP-NAME KEYWORDS _ATEOF # Pass an empty line as separator between selected groups and help. $as_echo "$at_groups$as_nl$as_nl$at_help_all" | awk 'NF == 1 && FS != ";" { selected[$ 1] = 1 next } /^$/ { FS = ";" } NF > 0 { if (selected[$ 1]) { printf " %3d: %-18s %s\n", $ 1, $ 2, $ 3 if ($ 4) { lmax = 79 indent = " " line = indent len = length (line) n = split ($ 4, a, " ") for (i = 1; i <= n; i++) { l = length (a[i]) + 1 if (i > 1 && len + l > lmax) { print line line = indent " " a[i] len = length (line) } else { line = line " " a[i] len += l } } if (n) print line } } }' || at_write_fail=1 exit $at_write_fail fi if $at_version_p; then $as_echo "$as_me (wordsplit v1.0-6-gd36275f)" && cat <<\_ATEOF || at_write_fail=1 Copyright (C) 2012 Free Software Foundation, Inc. This test suite is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ATEOF exit $at_write_fail fi # Should we print banners? Yes if more than one test is run. case $at_groups in #( *$as_nl* ) at_print_banners=: ;; #( * ) at_print_banners=false ;; esac # Text for banner N, set to a single space once printed. # Take any -C into account. if $at_change_dir ; then test x != "x$at_dir" && cd "$at_dir" \ || as_fn_error $? "unable to change directory" at_dir=`pwd` fi # Load the config files for any default variable assignments. for at_file in atconfig atlocal do test -r $at_file || continue . ./$at_file || as_fn_error $? "invalid content: $at_file" done # Autoconf <=2.59b set at_top_builddir instead of at_top_build_prefix: : "${at_top_build_prefix=$at_top_builddir}" # Perform any assignments requested during argument parsing. eval "$at_debug_args" # atconfig delivers names relative to the directory the test suite is # in, but the groups themselves are run in testsuite-dir/group-dir. if test -n "$at_top_srcdir"; then builddir=../.. for at_dir_var in srcdir top_srcdir top_build_prefix do eval at_val=\$at_$at_dir_var case $at_val in [\\/$]* | ?:[\\/]* ) at_prefix= ;; *) at_prefix=../../ ;; esac eval "$at_dir_var=\$at_prefix\$at_val" done fi ## -------------------- ## ## Directory structure. ## ## -------------------- ## # This is the set of directories and files used by this script # (non-literals are capitalized): # # TESTSUITE - the testsuite # TESTSUITE.log - summarizes the complete testsuite run # TESTSUITE.dir/ - created during a run, remains after -d or failed test # + at-groups/ - during a run: status of all groups in run # | + NNN/ - during a run: meta-data about test group NNN # | | + check-line - location (source file and line) of current AT_CHECK # | | + status - exit status of current AT_CHECK # | | + stdout - stdout of current AT_CHECK # | | + stder1 - stderr, including trace # | | + stderr - stderr, with trace filtered out # | | + test-source - portion of testsuite that defines group # | | + times - timestamps for computing duration # | | + pass - created if group passed # | | + xpass - created if group xpassed # | | + fail - created if group failed # | | + xfail - created if group xfailed # | | + skip - created if group skipped # + at-stop - during a run: end the run if this file exists # + at-source-lines - during a run: cache of TESTSUITE line numbers for extraction # + 0..NNN/ - created for each group NNN, remains after -d or failed test # | + TESTSUITE.log - summarizes the group results # | + ... - files created during the group # The directory the whole suite works in. # Should be absolute to let the user `cd' at will. at_suite_dir=$at_dir/$as_me.dir # The file containing the suite ($at_dir might have changed since earlier). at_suite_log=$at_dir/$as_me.log # The directory containing helper files per test group. at_helper_dir=$at_suite_dir/at-groups # Stop file: if it exists, do not start new jobs. at_stop_file=$at_suite_dir/at-stop # The fifo used for the job dispatcher. at_job_fifo=$at_suite_dir/at-job-fifo if $at_clean; then test -d "$at_suite_dir" && find "$at_suite_dir" -type d ! -perm -700 -exec chmod u+rwx \{\} \; rm -f -r "$at_suite_dir" "$at_suite_log" exit $? fi # Don't take risks: use only absolute directories in PATH. # # For stand-alone test suites (ie. atconfig was not found), # AUTOTEST_PATH is relative to `.'. # # For embedded test suites, AUTOTEST_PATH is relative to the top level # of the package. Then expand it into build/src parts, since users # may create executables in both places. AUTOTEST_PATH=`$as_echo "$AUTOTEST_PATH" | sed "s|:|$PATH_SEPARATOR|g"` at_path= as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $AUTOTEST_PATH $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -n "$at_path" && as_fn_append at_path $PATH_SEPARATOR case $as_dir in [\\/]* | ?:[\\/]* ) as_fn_append at_path "$as_dir" ;; * ) if test -z "$at_top_build_prefix"; then # Stand-alone test suite. as_fn_append at_path "$as_dir" else # Embedded test suite. as_fn_append at_path "$at_top_build_prefix$as_dir$PATH_SEPARATOR" as_fn_append at_path "$at_top_srcdir/$as_dir" fi ;; esac done IFS=$as_save_IFS # Now build and simplify PATH. # # There might be directories that don't exist, but don't redirect # builtins' (eg., cd) stderr directly: Ultrix's sh hates that. at_new_path= as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $at_path do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -d "$as_dir" || continue case $as_dir in [\\/]* | ?:[\\/]* ) ;; * ) as_dir=`(cd "$as_dir" && pwd) 2>/dev/null` ;; esac case $PATH_SEPARATOR$at_new_path$PATH_SEPARATOR in *$PATH_SEPARATOR$as_dir$PATH_SEPARATOR*) ;; $PATH_SEPARATOR$PATH_SEPARATOR) at_new_path=$as_dir ;; *) as_fn_append at_new_path "$PATH_SEPARATOR$as_dir" ;; esac done IFS=$as_save_IFS PATH=$at_new_path export PATH # Setting up the FDs. # 5 is the log file. Not to be overwritten if `-d'. if $at_debug_p; then at_suite_log=/dev/null else : >"$at_suite_log" fi exec 5>>"$at_suite_log" # Banners and logs. $as_echo "## ------------------------------------- ## ## wordsplit v1.0-6-gd36275f test suite. ## ## ------------------------------------- ##" { $as_echo "## ------------------------------------- ## ## wordsplit v1.0-6-gd36275f test suite. ## ## ------------------------------------- ##" echo $as_echo "$as_me: command line was:" $as_echo " \$ $0 $at_cli_args" echo # If ChangeLog exists, list a few lines in case it might help determining # the exact version. if test -n "$at_top_srcdir" && test -f "$at_top_srcdir/ChangeLog"; then $as_echo "## ---------- ## ## ChangeLog. ## ## ---------- ##" echo sed 's/^/| /;10q' "$at_top_srcdir/ChangeLog" echo fi { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } echo # Contents of the config files. for at_file in atconfig atlocal do test -r $at_file || continue $as_echo "$as_me: $at_file:" sed 's/^/| /' $at_file echo done } >&5 ## ------------------------- ## ## Autotest shell functions. ## ## ------------------------- ## # at_fn_banner NUMBER # ------------------- # Output banner NUMBER, provided the testsuite is running multiple groups and # this particular banner has not yet been printed. at_fn_banner () { $at_print_banners || return 0 eval at_banner_text=\$at_banner_text_$1 test "x$at_banner_text" = "x " && return 0 eval "at_banner_text_$1=\" \"" if test -z "$at_banner_text"; then $at_first || echo else $as_echo "$as_nl$at_banner_text$as_nl" fi } # at_fn_banner # at_fn_check_prepare_notrace REASON LINE # --------------------------------------- # Perform AT_CHECK preparations for the command at LINE for an untraceable # command; REASON is the reason for disabling tracing. at_fn_check_prepare_notrace () { $at_trace_echo "Not enabling shell tracing (command contains $1)" $as_echo "$2" >"$at_check_line_file" at_check_trace=: at_check_filter=: : >"$at_stdout"; : >"$at_stderr" } # at_fn_check_prepare_trace LINE # ------------------------------ # Perform AT_CHECK preparations for the command at LINE for a traceable # command. at_fn_check_prepare_trace () { $as_echo "$1" >"$at_check_line_file" at_check_trace=$at_traceon at_check_filter=$at_check_filter_trace : >"$at_stdout"; : >"$at_stderr" } # at_fn_check_prepare_dynamic COMMAND LINE # ---------------------------------------- # Decide if COMMAND at LINE is traceable at runtime, and call the appropriate # preparation function. at_fn_check_prepare_dynamic () { case $1 in *$as_nl*) at_fn_check_prepare_notrace 'an embedded newline' "$2" ;; *) at_fn_check_prepare_trace "$2" ;; esac } # at_fn_filter_trace # ------------------ # Remove the lines in the file "$at_stderr" generated by "set -x" and print # them to stderr. at_fn_filter_trace () { mv "$at_stderr" "$at_stder1" grep '^ *+' "$at_stder1" >&2 grep -v '^ *+' "$at_stder1" >"$at_stderr" } # at_fn_log_failure FILE-LIST # --------------------------- # Copy the files in the list on stdout with a "> " prefix, and exit the shell # with a failure exit code. at_fn_log_failure () { for file do $as_echo "$file:"; sed 's/^/> /' "$file"; done echo 1 > "$at_status_file" exit 1 } # at_fn_check_skip EXIT-CODE LINE # ------------------------------- # Check whether EXIT-CODE is a special exit code (77 or 99), and if so exit # the test group subshell with that same exit code. Use LINE in any report # about test failure. at_fn_check_skip () { case $1 in 99) echo 99 > "$at_status_file"; at_failed=: $as_echo "$2: hard failure"; exit 99;; 77) echo 77 > "$at_status_file"; exit 77;; esac } # at_fn_check_status EXPECTED EXIT-CODE LINE # ------------------------------------------ # Check whether EXIT-CODE is the EXPECTED exit code, and if so do nothing. # Otherwise, if it is 77 or 99, exit the test group subshell with that same # exit code; if it is anything else print an error message referring to LINE, # and fail the test. at_fn_check_status () { case $2 in $1 ) ;; 77) echo 77 > "$at_status_file"; exit 77;; 99) echo 99 > "$at_status_file"; at_failed=: $as_echo "$3: hard failure"; exit 99;; *) $as_echo "$3: exit code was $2, expected $1" at_failed=:;; esac } # at_fn_diff_devnull FILE # ----------------------- # Emit a diff between /dev/null and FILE. Uses "test -s" to avoid useless diff # invocations. at_fn_diff_devnull () { test -s "$1" || return 0 $at_diff "$at_devnull" "$1" } # at_fn_test NUMBER # ----------------- # Parse out test NUMBER from the tail of this file. at_fn_test () { eval at_sed=\$at_sed$1 sed "$at_sed" "$at_myself" > "$at_test_source" } # at_fn_create_debugging_script # ----------------------------- # Create the debugging script $at_group_dir/run which will reproduce the # current test group. at_fn_create_debugging_script () { { echo "#! /bin/sh" && echo 'test "${ZSH_VERSION+set}" = set && alias -g '\''${1+"$@"}'\''='\''"$@"'\''' && $as_echo "cd '$at_dir'" && $as_echo "exec \${CONFIG_SHELL-$SHELL} \"$at_myself\" -v -d $at_debug_args $at_group \${1+\"\$@\"}" && echo 'exit 1' } >"$at_group_dir/run" && chmod +x "$at_group_dir/run" } ## -------------------------------- ## ## End of autotest shell functions. ## ## -------------------------------- ## { $as_echo "## ---------------- ## ## Tested programs. ## ## ---------------- ##" echo } >&5 # Report what programs are being tested. for at_program in : $at_tested do test "$at_program" = : && continue case $at_program in [\\/]* | ?:[\\/]* ) $at_program_=$at_program ;; * ) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -f "$as_dir/$at_program" && break done IFS=$as_save_IFS at_program_=$as_dir/$at_program ;; esac if test -f "$at_program_"; then { $as_echo "$at_srcdir/wordsplit.at:17: $at_program_ --version" "$at_program_" --version </dev/null echo } >&5 2>&1 else as_fn_error $? "cannot find $at_program" "$LINENO" 5 fi done { $as_echo "## ------------------ ## ## Running the tests. ## ## ------------------ ##" } >&5 at_start_date=`date` at_start_time=`date +%s 2>/dev/null` $as_echo "$as_me: starting at: $at_start_date" >&5 # Create the master directory if it doesn't already exist. as_dir="$at_suite_dir"; as_fn_mkdir_p || as_fn_error $? "cannot create \`$at_suite_dir'" "$LINENO" 5 # Can we diff with `/dev/null'? DU 5.0 refuses. if diff /dev/null /dev/null >/dev/null 2>&1; then at_devnull=/dev/null else at_devnull=$at_suite_dir/devnull >"$at_devnull" fi # Use `diff -u' when possible. if at_diff=`diff -u "$at_devnull" "$at_devnull" 2>&1` && test -z "$at_diff" then at_diff='diff -u' else at_diff=diff fi # Get the last needed group. for at_group in : $at_groups; do :; done # Extract the start and end lines of each test group at the tail # of this file awk ' BEGIN { FS="" } /^#AT_START_/ { start = NR } /^#AT_STOP_/ { test = substr ($ 0, 10) print "at_sed" test "=\"1," start "d;" (NR-1) "q\"" if (test == "'"$at_group"'") exit }' "$at_myself" > "$at_suite_dir/at-source-lines" && . "$at_suite_dir/at-source-lines" || as_fn_error $? "cannot create test line number cache" "$LINENO" 5 rm -f "$at_suite_dir/at-source-lines" # Set number of jobs for `-j'; avoid more jobs than test groups. set X $at_groups; shift; at_max_jobs=$# if test $at_max_jobs -eq 0; then at_jobs=1 fi if test $at_jobs -ne 1 && { test $at_jobs -eq 0 || test $at_jobs -gt $at_max_jobs; }; then at_jobs=$at_max_jobs fi # If parallel mode, don't output banners, don't split summary lines. if test $at_jobs -ne 1; then at_print_banners=false at_quiet=: fi # Set up helper dirs. rm -rf "$at_helper_dir" && mkdir "$at_helper_dir" && cd "$at_helper_dir" && { test -z "$at_groups" || mkdir $at_groups; } || as_fn_error $? "testsuite directory setup failed" "$LINENO" 5 # Functions for running a test group. We leave the actual # test group execution outside of a shell function in order # to avoid hitting zsh 4.x exit status bugs. # at_fn_group_prepare # ------------------- # Prepare for running a test group. at_fn_group_prepare () { # The directory for additional per-group helper files. at_job_dir=$at_helper_dir/$at_group # The file containing the location of the last AT_CHECK. at_check_line_file=$at_job_dir/check-line # The file containing the exit status of the last command. at_status_file=$at_job_dir/status # The files containing the output of the tested commands. at_stdout=$at_job_dir/stdout at_stder1=$at_job_dir/stder1 at_stderr=$at_job_dir/stderr # The file containing the code for a test group. at_test_source=$at_job_dir/test-source # The file containing dates. at_times_file=$at_job_dir/times # Be sure to come back to the top test directory. cd "$at_suite_dir" # Clearly separate the test groups when verbose. $at_first || $at_verbose echo at_group_normalized=$at_group eval 'while :; do case $at_group_normalized in #( '"$at_format"'*) break;; esac at_group_normalized=0$at_group_normalized done' # Create a fresh directory for the next test group, and enter. # If one already exists, the user may have invoked ./run from # within that directory; we remove the contents, but not the # directory itself, so that we aren't pulling the rug out from # under the shell's notion of the current directory. at_group_dir=$at_suite_dir/$at_group_normalized at_group_log=$at_group_dir/$as_me.log if test -d "$at_group_dir"; then find "$at_group_dir" -type d ! -perm -700 -exec chmod u+rwx {} \; rm -fr "$at_group_dir"/* "$at_group_dir"/.[!.] "$at_group_dir"/.??* fi || { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: test directory for $at_group_normalized could not be cleaned" >&5 $as_echo "$as_me: WARNING: test directory for $at_group_normalized could not be cleaned" >&2;} # Be tolerant if the above `rm' was not able to remove the directory. as_dir="$at_group_dir"; as_fn_mkdir_p echo 0 > "$at_status_file" # In verbose mode, append to the log file *and* show on # the standard output; in quiet mode only write to the log. if test -z "$at_verbose"; then at_tee_pipe='tee -a "$at_group_log"' else at_tee_pipe='cat >> "$at_group_log"' fi } # at_fn_group_banner ORDINAL LINE DESC PAD [BANNER] # ------------------------------------------------- # Declare the test group ORDINAL, located at LINE with group description DESC, # and residing under BANNER. Use PAD to align the status column. at_fn_group_banner () { at_setup_line="$2" test -n "$5" && at_fn_banner $5 at_desc="$3" case $1 in [0-9]) at_desc_line=" $1: ";; [0-9][0-9]) at_desc_line=" $1: " ;; *) at_desc_line="$1: " ;; esac as_fn_append at_desc_line "$3$4" $at_quiet $as_echo_n "$at_desc_line" echo "# -*- compilation -*-" >> "$at_group_log" } # at_fn_group_postprocess # ----------------------- # Perform cleanup after running a test group. at_fn_group_postprocess () { # Be sure to come back to the suite directory, in particular # since below we might `rm' the group directory we are in currently. cd "$at_suite_dir" if test ! -f "$at_check_line_file"; then sed "s/^ */$as_me: WARNING: /" <<_ATEOF A failure happened in a test group before any test could be run. This means that test suite is improperly designed. Please report this failure to <bug-direvent@gnu.org.ua>. _ATEOF $as_echo "$at_setup_line" >"$at_check_line_file" at_status=99 fi $at_verbose $as_echo_n "$at_group. $at_setup_line: " $as_echo_n "$at_group. $at_setup_line: " >> "$at_group_log" case $at_xfail:$at_status in yes:0) at_msg="UNEXPECTED PASS" at_res=xpass at_errexit=$at_errexit_p at_color=$at_red ;; no:0) at_msg="ok" at_res=pass at_errexit=false at_color=$at_grn ;; *:77) at_msg='skipped ('`cat "$at_check_line_file"`')' at_res=skip at_errexit=false at_color=$at_blu ;; no:* | *:99) at_msg='FAILED ('`cat "$at_check_line_file"`')' at_res=fail at_errexit=$at_errexit_p at_color=$at_red ;; yes:*) at_msg='expected failure ('`cat "$at_check_line_file"`')' at_res=xfail at_errexit=false at_color=$at_lgn ;; esac echo "$at_res" > "$at_job_dir/$at_res" # In parallel mode, output the summary line only afterwards. if test $at_jobs -ne 1 && test -n "$at_verbose"; then $as_echo "$at_desc_line $at_color$at_msg$at_std" else # Make sure there is a separator even with long titles. $as_echo " $at_color$at_msg$at_std" fi at_log_msg="$at_group. $at_desc ($at_setup_line): $at_msg" case $at_status in 0|77) # $at_times_file is only available if the group succeeded. # We're not including the group log, so the success message # is written in the global log separately. But we also # write to the group log in case they're using -d. if test -f "$at_times_file"; then at_log_msg="$at_log_msg ("`sed 1d "$at_times_file"`')' rm -f "$at_times_file" fi $as_echo "$at_log_msg" >> "$at_group_log" $as_echo "$at_log_msg" >&5 # Cleanup the group directory, unless the user wants the files # or the success was unexpected. if $at_debug_p || test $at_res = xpass; then at_fn_create_debugging_script if test $at_res = xpass && $at_errexit; then echo stop > "$at_stop_file" fi else if test -d "$at_group_dir"; then find "$at_group_dir" -type d ! -perm -700 -exec chmod u+rwx \{\} \; rm -fr "$at_group_dir" fi rm -f "$at_test_source" fi ;; *) # Upon failure, include the log into the testsuite's global # log. The failure message is written in the group log. It # is later included in the global log. $as_echo "$at_log_msg" >> "$at_group_log" # Upon failure, keep the group directory for autopsy, and create # the debugging script. With -e, do not start any further tests. at_fn_create_debugging_script if $at_errexit; then echo stop > "$at_stop_file" fi ;; esac } ## ------------ ## ## Driver loop. ## ## ------------ ## if (set -m && set +m && set +b) >/dev/null 2>&1; then set +b at_job_control_on='set -m' at_job_control_off='set +m' at_job_group=- else at_job_control_on=: at_job_control_off=: at_job_group= fi for at_signal in 1 2 15; do trap 'set +x; set +e $at_job_control_off at_signal='"$at_signal"' echo stop > "$at_stop_file" trap "" $at_signal at_pgids= for at_pgid in `jobs -p 2>/dev/null`; do at_pgids="$at_pgids $at_job_group$at_pgid" done test -z "$at_pgids" || kill -$at_signal $at_pgids 2>/dev/null wait if test "$at_jobs" -eq 1 || test -z "$at_verbose"; then echo >&2 fi at_signame=`kill -l $at_signal 2>&1 || echo $at_signal` set x $at_signame test 0 -gt 2 && at_signame=$at_signal { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: caught signal $at_signame, bailing out" >&5 $as_echo "$as_me: WARNING: caught signal $at_signame, bailing out" >&2;} as_fn_arith 128 + $at_signal && exit_status=$as_val as_fn_exit $exit_status' $at_signal done rm -f "$at_stop_file" at_first=: if test $at_jobs -ne 1 && rm -f "$at_job_fifo" && test -n "$at_job_group" && ( mkfifo "$at_job_fifo" && trap 'exit 1' PIPE STOP TSTP ) 2>/dev/null then # FIFO job dispatcher. trap 'at_pids= for at_pid in `jobs -p`; do at_pids="$at_pids $at_job_group$at_pid" done if test -n "$at_pids"; then at_sig=TSTP test "${TMOUT+set}" = set && at_sig=STOP kill -$at_sig $at_pids 2>/dev/null fi kill -STOP $$ test -z "$at_pids" || kill -CONT $at_pids 2>/dev/null' TSTP echo # Turn jobs into a list of numbers, starting from 1. at_joblist=`$as_echo "$at_groups" | sed -n 1,${at_jobs}p` set X $at_joblist shift for at_group in $at_groups; do $at_job_control_on 2>/dev/null ( # Start one test group. $at_job_control_off if $at_first; then exec 7>"$at_job_fifo" else exec 6<&- fi trap 'set +x; set +e trap "" PIPE echo stop > "$at_stop_file" echo >&7 as_fn_exit 141' PIPE at_fn_group_prepare if cd "$at_group_dir" && at_fn_test $at_group && . "$at_test_source" then :; else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unable to parse test group: $at_group" >&5 $as_echo "$as_me: WARNING: unable to parse test group: $at_group" >&2;} at_failed=: fi at_fn_group_postprocess echo >&7 ) & $at_job_control_off if $at_first; then at_first=false exec 6<"$at_job_fifo" 7>"$at_job_fifo" fi shift # Consume one token. if test $# -gt 0; then :; else read at_token <&6 || break set x $* fi test -f "$at_stop_file" && break done exec 7>&- # Read back the remaining ($at_jobs - 1) tokens. set X $at_joblist shift if test $# -gt 0; then shift for at_job do read at_token done <&6 fi exec 6<&- wait else # Run serially, avoid forks and other potential surprises. for at_group in $at_groups; do at_fn_group_prepare if cd "$at_group_dir" && at_fn_test $at_group && . "$at_test_source"; then :; else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unable to parse test group: $at_group" >&5 $as_echo "$as_me: WARNING: unable to parse test group: $at_group" >&2;} at_failed=: fi at_fn_group_postprocess test -f "$at_stop_file" && break at_first=false done fi # Wrap up the test suite with summary statistics. cd "$at_helper_dir" # Use ?..???? when the list must remain sorted, the faster * otherwise. at_pass_list=`for f in */pass; do echo $f; done | sed '/\*/d; s,/pass,,'` at_skip_list=`for f in */skip; do echo $f; done | sed '/\*/d; s,/skip,,'` at_xfail_list=`for f in */xfail; do echo $f; done | sed '/\*/d; s,/xfail,,'` at_xpass_list=`for f in ?/xpass ??/xpass ???/xpass ????/xpass; do echo $f; done | sed '/?/d; s,/xpass,,'` at_fail_list=`for f in ?/fail ??/fail ???/fail ????/fail; do echo $f; done | sed '/?/d; s,/fail,,'` set X $at_pass_list $at_xpass_list $at_xfail_list $at_fail_list $at_skip_list shift; at_group_count=$# set X $at_xpass_list; shift; at_xpass_count=$#; at_xpass_list=$* set X $at_xfail_list; shift; at_xfail_count=$# set X $at_fail_list; shift; at_fail_count=$#; at_fail_list=$* set X $at_skip_list; shift; at_skip_count=$# as_fn_arith $at_group_count - $at_skip_count && at_run_count=$as_val as_fn_arith $at_xpass_count + $at_fail_count && at_unexpected_count=$as_val as_fn_arith $at_xfail_count + $at_fail_count && at_total_fail_count=$as_val # Back to the top directory. cd "$at_dir" rm -rf "$at_helper_dir" # Compute the duration of the suite. at_stop_date=`date` at_stop_time=`date +%s 2>/dev/null` $as_echo "$as_me: ending at: $at_stop_date" >&5 case $at_start_time,$at_stop_time in [0-9]*,[0-9]*) as_fn_arith $at_stop_time - $at_start_time && at_duration_s=$as_val as_fn_arith $at_duration_s / 60 && at_duration_m=$as_val as_fn_arith $at_duration_m / 60 && at_duration_h=$as_val as_fn_arith $at_duration_s % 60 && at_duration_s=$as_val as_fn_arith $at_duration_m % 60 && at_duration_m=$as_val at_duration="${at_duration_h}h ${at_duration_m}m ${at_duration_s}s" $as_echo "$as_me: test suite duration: $at_duration" >&5 ;; esac echo $as_echo "## ------------- ## ## Test results. ## ## ------------- ##" echo { echo $as_echo "## ------------- ## ## Test results. ## ## ------------- ##" echo } >&5 if test $at_run_count = 1; then at_result="1 test" at_were=was else at_result="$at_run_count tests" at_were=were fi if $at_errexit_p && test $at_unexpected_count != 0; then if test $at_xpass_count = 1; then at_result="$at_result $at_were run, one passed" else at_result="$at_result $at_were run, one failed" fi at_result="$at_result unexpectedly and inhibited subsequent tests." at_color=$at_red else # Don't you just love exponential explosion of the number of cases? at_color=$at_red case $at_xpass_count:$at_fail_count:$at_xfail_count in # So far, so good. 0:0:0) at_result="$at_result $at_were successful." at_color=$at_grn ;; 0:0:*) at_result="$at_result behaved as expected." at_color=$at_lgn ;; # Some unexpected failures 0:*:0) at_result="$at_result $at_were run, $at_fail_count failed unexpectedly." ;; # Some failures, both expected and unexpected 0:*:1) at_result="$at_result $at_were run, $at_total_fail_count failed ($at_xfail_count expected failure)." ;; 0:*:*) at_result="$at_result $at_were run, $at_total_fail_count failed ($at_xfail_count expected failures)." ;; # No unexpected failures, but some xpasses *:0:*) at_result="$at_result $at_were run, $at_xpass_count passed unexpectedly." ;; # No expected failures, but failures and xpasses *:1:0) at_result="$at_result $at_were run, $at_unexpected_count did not behave as expected ($at_fail_count unexpected failure)." ;; *:*:0) at_result="$at_result $at_were run, $at_unexpected_count did not behave as expected ($at_fail_count unexpected failures)." ;; # All of them. *:*:1) at_result="$at_result $at_were run, $at_xpass_count passed unexpectedly, $at_total_fail_count failed ($at_xfail_count expected failure)." ;; *:*:*) at_result="$at_result $at_were run, $at_xpass_count passed unexpectedly, $at_total_fail_count failed ($at_xfail_count expected failures)." ;; esac if test $at_skip_count = 0 && test $at_run_count -gt 1; then at_result="All $at_result" fi fi # Now put skips in the mix. case $at_skip_count in 0) ;; 1) at_result="$at_result 1 test was skipped." ;; *) at_result="$at_result $at_skip_count tests were skipped." ;; esac if test $at_unexpected_count = 0; then echo "$at_color$at_result$at_std" echo "$at_result" >&5 else echo "${at_color}ERROR: $at_result$at_std" >&2 echo "ERROR: $at_result" >&5 { echo $as_echo "## ------------------------ ## ## Summary of the failures. ## ## ------------------------ ##" # Summary of failed and skipped tests. if test $at_fail_count != 0; then echo "Failed tests:" $SHELL "$at_myself" $at_fail_list --list echo fi if test $at_skip_count != 0; then echo "Skipped tests:" $SHELL "$at_myself" $at_skip_list --list echo fi if test $at_xpass_count != 0; then echo "Unexpected passes:" $SHELL "$at_myself" $at_xpass_list --list echo fi if test $at_fail_count != 0; then $as_echo "## ---------------------- ## ## Detailed failed tests. ## ## ---------------------- ##" echo for at_group in $at_fail_list do at_group_normalized=$at_group eval 'while :; do case $at_group_normalized in #( '"$at_format"'*) break;; esac at_group_normalized=0$at_group_normalized done' cat "$at_suite_dir/$at_group_normalized/$as_me.log" echo done echo fi if test -n "$at_top_srcdir"; then sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## ${at_top_build_prefix}config.log ## _ASBOX sed 's/^/| /' ${at_top_build_prefix}config.log echo fi } >&5 sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## $as_me.log was created. ## _ASBOX echo if $at_debug_p; then at_msg='per-test log files' else at_msg="\`${at_testdir+${at_testdir}/}$as_me.log'" fi $as_echo "Please send $at_msg and all information you think might help: To: <bug-direvent@gnu.org.ua> Subject: [wordsplit v1.0-6-gd36275f] $as_me: $at_fail_list${at_fail_list:+ failed${at_xpass_list:+, }}$at_xpass_list${at_xpass_list:+ passed unexpectedly} You may investigate any problem if you feel able to do so, in which case the test suite provides a good starting point. Its output may be found below \`${at_testdir+${at_testdir}/}$as_me.dir'. " exit 1 fi exit 0 ## ------------- ## ## Actual tests. ## ## ------------- ## #AT_START_1 at_fn_group_banner 1 'wordsplit.at:59' \ "simple input" " " at_xfail=no ( $as_echo "1. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:59: wsp <<'EOT' 1 2 3 EOT " at_fn_check_prepare_notrace 'an embedded newline' "wordsplit.at:59" ( $at_check_trace; wsp <<'EOT' 1 2 3 EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 3 0: 1 1: 2 2: 3 TOTAL: 3 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:59" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_1 #AT_START_2 at_fn_group_banner 2 'wordsplit.at:68' \ "quoted space" " " at_xfail=no ( $as_echo "2. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:68: wsp <<'EOT' quoted\\ space EOT " at_fn_check_prepare_notrace 'an embedded newline' "wordsplit.at:68" ( $at_check_trace; wsp <<'EOT' quoted\ space EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 1 0: \"quoted space\" TOTAL: 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:68" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_2 #AT_START_3 at_fn_group_banner 3 'wordsplit.at:75' \ "tab character" " " at_xfail=no ( $as_echo "3. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:75: wsp <<'EOT' a \"tab character\" EOT " at_fn_check_prepare_notrace 'an embedded newline' "wordsplit.at:75" ( $at_check_trace; wsp <<'EOT' a "tab character" EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 2 0: a 1: tab\\tcharacter TOTAL: 2 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:75" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_3 #AT_START_4 at_fn_group_banner 4 'wordsplit.at:84' \ "octal and hex escapes" " " at_xfail=no ( $as_echo "4. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:84: wsp <<'EOT' \\157\\143\\164\\141\\154\\40and\\x20\\x68\\x65\\x78 EOT " at_fn_check_prepare_notrace 'an embedded newline' "wordsplit.at:84" ( $at_check_trace; wsp <<'EOT' \157\143\164\141\154\40and\x20\x68\x65\x78 EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 1 0: \"octal and hex\" TOTAL: 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:84" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_4 #AT_START_5 at_fn_group_banner 5 'wordsplit.at:91' \ "octal and hex escapes 2" " " at_xfail=no ( $as_echo "5. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:91: wsp <<'EOT' \\157\\143\\164\\141\\154\\40 and \\x20\\x68\\x65\\x78 EOT " at_fn_check_prepare_notrace 'an embedded newline' "wordsplit.at:91" ( $at_check_trace; wsp <<'EOT' \157\143\164\141\154\40 and \x20\x68\x65\x78 EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 3 0: \"octal \" 1: and 2: \" hex\" TOTAL: 3 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:91" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_5 #AT_START_6 at_fn_group_banner 6 'wordsplit.at:100' \ "escape representation" " " at_xfail=no ( $as_echo "6. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:100: wsp <<'EOT' A\\x3-\\48\\39 EOT " at_fn_check_prepare_notrace 'an embedded newline' "wordsplit.at:100" ( $at_check_trace; wsp <<'EOT' A\x3-\48\39 EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 1 0: A\\003-\\0048\\0039 TOTAL: 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:100" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_6 #AT_START_7 at_fn_group_banner 7 'wordsplit.at:112' \ "append" " " at_xfail=no ( $as_echo "7. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:112: wsp -append <<'EOT' jeden dwa trzy cztery piec szesc EOT " at_fn_check_prepare_notrace 'an embedded newline' "wordsplit.at:112" ( $at_check_trace; wsp -append <<'EOT' jeden dwa trzy cztery piec szesc EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 3 0: jeden 1: dwa 2: trzy TOTAL: 3 NF: 4 0: jeden 1: dwa 2: trzy 3: cztery TOTAL: 1 NF: 6 0: jeden 1: dwa 2: trzy 3: cztery 4: piec 5: szesc TOTAL: 2 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:112" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_7 #AT_START_8 at_fn_group_banner 8 'wordsplit.at:137' \ "dooffs" " " at_xfail=no ( $as_echo "8. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:137: wsp -dooffs jeden dwa trzy <<'EOT' cztery piec EOT " at_fn_check_prepare_notrace 'an embedded newline' "wordsplit.at:137" ( $at_check_trace; wsp -dooffs jeden dwa trzy <<'EOT' cztery piec EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 2 (3) (0): jeden (1): dwa (2): trzy 3: cztery 4: piec TOTAL: 2 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:137" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_8 #AT_START_9 at_fn_group_banner 9 'wordsplit.at:150' \ "variable substitutions: single var" " " at_xfail=no ( $as_echo "9. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:150: FOO=bar wsp <<'EOT' a \$FOO test EOT " at_fn_check_prepare_notrace 'an embedded newline' "wordsplit.at:150" ( $at_check_trace; FOO=bar wsp <<'EOT' a $FOO test EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 3 0: a 1: bar 2: test TOTAL: 3 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:150" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_9 #AT_START_10 at_fn_group_banner 10 'wordsplit.at:161' \ "variable substitutions: concatenated vars" " " at_xfail=no ( $as_echo "10. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:161: FOO=str BAR=ing wsp <<'EOT' a \$FOO\${BAR}ent test EOT " at_fn_check_prepare_notrace 'a ${...} parameter expansion' "wordsplit.at:161" ( $at_check_trace; FOO=str BAR=ing wsp <<'EOT' a $FOO${BAR}ent test EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 3 0: a 1: stringent 2: test TOTAL: 3 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:161" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_10 #AT_START_11 at_fn_group_banner 11 'wordsplit.at:173' \ "variable substitutions: field splitting" " " at_xfail=no ( $as_echo "11. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:173: FOO=\"variable substitution\" wsp <<'EOT' a \$FOO test EOT " at_fn_check_prepare_notrace 'an embedded newline' "wordsplit.at:173" ( $at_check_trace; FOO="variable substitution" wsp <<'EOT' a $FOO test EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 4 0: a 1: variable 2: substitution 3: test TOTAL: 4 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:173" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_11 #AT_START_12 at_fn_group_banner 12 'wordsplit.at:185' \ "variable substitutions: double-quoted variable" " " at_xfail=no ( $as_echo "12. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:185: FOO=\"variable substitution\" wsp <<'EOT' a \"\$FOO\" test EOT " at_fn_check_prepare_notrace 'an embedded newline' "wordsplit.at:185" ( $at_check_trace; FOO="variable substitution" wsp <<'EOT' a "$FOO" test EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 3 0: a 1: \"variable substitution\" 2: test TOTAL: 3 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:185" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_12 #AT_START_13 at_fn_group_banner 13 'wordsplit.at:196' \ "variable substitutions: single-quoted variable" " " at_xfail=no ( $as_echo "13. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:196: FOO=\"variable substitution\" wsp <<'EOT' a '\$FOO' test EOT " at_fn_check_prepare_notrace 'an embedded newline' "wordsplit.at:196" ( $at_check_trace; FOO="variable substitution" wsp <<'EOT' a '$FOO' test EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 3 0: a 1: \$FOO 2: test TOTAL: 3 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:196" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_13 #AT_START_14 at_fn_group_banner 14 'wordsplit.at:207' \ "undefined variables 1" " " at_xfail=no ( $as_echo "14. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:207: unset FOO; wsp <<'EOT' a \$FOO test a\${FOO}b EOT " at_fn_check_prepare_notrace 'a ${...} parameter expansion' "wordsplit.at:207" ( $at_check_trace; unset FOO; wsp <<'EOT' a $FOO test a${FOO}b EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 3 0: a 1: test 2: ab TOTAL: 3 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:207" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_14 #AT_START_15 at_fn_group_banner 15 'wordsplit.at:218' \ "undefined variables 2" " " at_xfail=no ( $as_echo "15. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:218: unset FOO; wsp -keepundef <<'EOT' a \$FOO test a\${FOO}b EOT " at_fn_check_prepare_notrace 'a ${...} parameter expansion' "wordsplit.at:218" ( $at_check_trace; unset FOO; wsp -keepundef <<'EOT' a $FOO test a${FOO}b EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 4 0: a 1: \$FOO 2: test 3: a\${FOO}b TOTAL: 4 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:218" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_15 #AT_START_16 at_fn_group_banner 16 'wordsplit.at:230' \ "warn about undefined variables" " " at_xfail=no ( $as_echo "16. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:230: unset FOO; wsp -warnundef <<'EOT' \$FOO EOT " at_fn_check_prepare_notrace 'an embedded newline' "wordsplit.at:230" ( $at_check_trace; unset FOO; wsp -warnundef <<'EOT' $FOO EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; $as_echo "warning: undefined variable \`FOO' " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 0 TOTAL: 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:230" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_16 #AT_START_17 at_fn_group_banner 17 'wordsplit.at:239' \ "bail out on undefined variables" " " at_xfail=no ( $as_echo "17. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:239: unset FOO; wsp -undef <<'EOT' \$FOO EOT " at_fn_check_prepare_notrace 'an embedded newline' "wordsplit.at:239" ( $at_check_trace; unset FOO; wsp -undef <<'EOT' $FOO EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; $as_echo "undefined variable: FOO " | \ $at_diff - "$at_stderr" || at_failed=: at_fn_diff_devnull "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:239" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_17 #AT_START_18 at_fn_group_banner 18 'wordsplit.at:246' \ "disable variable expansion" " " at_xfail=no ( $as_echo "18. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:246: FOO=bar wsp -novar <<'EOT' \$FOO EOT " at_fn_check_prepare_notrace 'an embedded newline' "wordsplit.at:246" ( $at_check_trace; FOO=bar wsp -novar <<'EOT' $FOO EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 1 0: \$FOO TOTAL: 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:246" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_18 #AT_START_19 at_fn_group_banner 19 'wordsplit.at:255' \ "K/V environment" " " at_xfail=no ( $as_echo "19. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:255: FOO=bar BAZ=qux wsp -env_kv <<'EOT' \$FOO a\$BAZ EOT " at_fn_check_prepare_notrace 'an embedded newline' "wordsplit.at:255" ( $at_check_trace; FOO=bar BAZ=qux wsp -env_kv <<'EOT' $FOO a$BAZ EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 2 0: bar 1: aqux TOTAL: 2 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:255" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_19 #AT_START_20 at_fn_group_banner 20 'wordsplit.at:266' \ "nosplit with variable expansion" " " at_xfail=no ( $as_echo "20. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:266: FOO=\"variable expansion\" wsp -nosplit <<'EOT' a \$FOO test EOT " at_fn_check_prepare_notrace 'an embedded newline' "wordsplit.at:266" ( $at_check_trace; FOO="variable expansion" wsp -nosplit <<'EOT' a $FOO test EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 1 0: \"a variable expansion test\\n\" TOTAL: 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:266" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_20 #AT_START_21 at_fn_group_banner 21 'wordsplit.at:275' \ "nosplit without variable expansion" " " at_xfail=no ( $as_echo "21. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:275: FOO=\"variable expansion\" wsp -nosplit -novar <<'EOT' a \$FOO test EOT " at_fn_check_prepare_notrace 'an embedded newline' "wordsplit.at:275" ( $at_check_trace; FOO="variable expansion" wsp -nosplit -novar <<'EOT' a $FOO test EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 1 0: \"a \$FOO test\\n\" TOTAL: 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:275" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_21 #AT_START_22 at_fn_group_banner 22 'wordsplit.at:284' \ "nosplit: empty expansion" " " at_xfail=no ( $as_echo "22. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:284: FOO=\"\" wsp -nosplit -trimnl <<'EOT' \$FOO EOT " at_fn_check_prepare_notrace 'an embedded newline' "wordsplit.at:284" ( $at_check_trace; FOO="" wsp -nosplit -trimnl <<'EOT' $FOO EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 1 0: \"\" TOTAL: 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:284" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_22 #AT_START_23 at_fn_group_banner 23 'wordsplit.at:293' \ "default value" " " at_xfail=no ( $as_echo "23. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:293: wsp <<'EOT' \${FOO:-bar} EOT " at_fn_check_prepare_notrace 'a ${...} parameter expansion' "wordsplit.at:293" ( $at_check_trace; wsp <<'EOT' ${FOO:-bar} EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 1 0: bar TOTAL: 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:293" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_23 #AT_START_24 at_fn_group_banner 24 'wordsplit.at:300' \ "default value (defined)" " " at_xfail=no ( $as_echo "24. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:300: FOO=qux wsp <<'EOT' \${FOO:-bar} EOT " at_fn_check_prepare_notrace 'a ${...} parameter expansion' "wordsplit.at:300" ( $at_check_trace; FOO=qux wsp <<'EOT' ${FOO:-bar} EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 1 0: qux TOTAL: 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:300" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_24 #AT_START_25 at_fn_group_banner 25 'wordsplit.at:309' \ "default value (:- null)" " " at_xfail=no ( $as_echo "25. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:309: FOO= wsp <<'EOT' \${FOO:-bar} EOT " at_fn_check_prepare_notrace 'a ${...} parameter expansion' "wordsplit.at:309" ( $at_check_trace; FOO= wsp <<'EOT' ${FOO:-bar} EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 1 0: bar TOTAL: 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:309" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_25 #AT_START_26 at_fn_group_banner 26 'wordsplit.at:318' \ "default value (- null)" " " at_xfail=no ( $as_echo "26. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:318: FOO= wsp <<'EOT' \${FOO-bar} EOT " at_fn_check_prepare_notrace 'a ${...} parameter expansion' "wordsplit.at:318" ( $at_check_trace; FOO= wsp <<'EOT' ${FOO-bar} EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 0 TOTAL: 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:318" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_26 #AT_START_27 at_fn_group_banner 27 'wordsplit.at:326' \ "default value (- null, unset)" " " at_xfail=no ( $as_echo "27. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:326: wsp <<'EOT' \${FOO-bar} EOT " at_fn_check_prepare_notrace 'a ${...} parameter expansion' "wordsplit.at:326" ( $at_check_trace; wsp <<'EOT' ${FOO-bar} EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 1 0: bar TOTAL: 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:326" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_27 #AT_START_28 at_fn_group_banner 28 'wordsplit.at:333' \ "assign default values" " " at_xfail=no ( $as_echo "28. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:333: wsp <<'EOT' \${FOO=bar} \$FOO EOT " at_fn_check_prepare_notrace 'a ${...} parameter expansion' "wordsplit.at:333" ( $at_check_trace; wsp <<'EOT' ${FOO=bar} $FOO EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 1 0: bar TOTAL: 1 NF: 1 0: bar TOTAL: 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:333" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_28 #AT_START_29 at_fn_group_banner 29 'wordsplit.at:344' \ "default error message (var defined)" " " at_xfail=no ( $as_echo "29. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:344: FOO=bar wsp <<'EOT' a \${FOO:?} test EOT " at_fn_check_prepare_notrace 'a ${...} parameter expansion' "wordsplit.at:344" ( $at_check_trace; FOO=bar wsp <<'EOT' a ${FOO:?} test EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 3 0: a 1: bar 2: test TOTAL: 3 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:344" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_29 #AT_START_30 at_fn_group_banner 30 'wordsplit.at:355' \ "default error message" " " at_xfail=no ( $as_echo "30. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:355: wsp <<'EOT' \${FOO:?} EOT " at_fn_check_prepare_notrace 'a ${...} parameter expansion' "wordsplit.at:355" ( $at_check_trace; wsp <<'EOT' ${FOO:?} EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; $as_echo "FOO: variable null or not set " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 0 TOTAL: 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:355" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_30 #AT_START_31 at_fn_group_banner 31 'wordsplit.at:363' \ "custom error message (defined)" " " at_xfail=no ( $as_echo "31. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:363: FOO=bar wsp <<'EOT' a \${FOO:?please define it} test EOT " at_fn_check_prepare_notrace 'a ${...} parameter expansion' "wordsplit.at:363" ( $at_check_trace; FOO=bar wsp <<'EOT' a ${FOO:?please define it} test EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 3 0: a 1: bar 2: test TOTAL: 3 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:363" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_31 #AT_START_32 at_fn_group_banner 32 'wordsplit.at:374' \ "custom error message" " " at_xfail=no ( $as_echo "32. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:374: wsp <<'EOT' a \${FOO:?please define it} test EOT " at_fn_check_prepare_notrace 'a ${...} parameter expansion' "wordsplit.at:374" ( $at_check_trace; wsp <<'EOT' a ${FOO:?please define it} test EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; $as_echo "FOO: please define it " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 2 0: a 1: test TOTAL: 2 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:374" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_32 #AT_START_33 at_fn_group_banner 33 'wordsplit.at:384' \ "alternate value (defined)" " " at_xfail=no ( $as_echo "33. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:384: FOO=bar wsp <<'EOT' a \${FOO:+isset} test EOT " at_fn_check_prepare_notrace 'a ${...} parameter expansion' "wordsplit.at:384" ( $at_check_trace; FOO=bar wsp <<'EOT' a ${FOO:+isset} test EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 3 0: a 1: isset 2: test TOTAL: 3 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:384" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_33 #AT_START_34 at_fn_group_banner 34 'wordsplit.at:395' \ "alternate value" " " at_xfail=no ( $as_echo "34. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:395: unset FOO; wsp <<'EOT' a \${FOO:+isset} test EOT " at_fn_check_prepare_notrace 'a ${...} parameter expansion' "wordsplit.at:395" ( $at_check_trace; unset FOO; wsp <<'EOT' a ${FOO:+isset} test EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 2 0: a 1: test TOTAL: 2 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:395" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_34 #AT_START_35 at_fn_group_banner 35 'wordsplit.at:405' \ "getvar" " " at_xfail=no ( $as_echo "35. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:405: unset foo; unset x wsp foo=bar x=quux <<'EOT' begin \$foo \$x end EOT " at_fn_check_prepare_notrace 'an embedded newline' "wordsplit.at:405" ( $at_check_trace; unset foo; unset x wsp foo=bar x=quux <<'EOT' begin $foo $x end EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 4 0: begin 1: bar 2: quux 3: end TOTAL: 4 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:405" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_35 #AT_START_36 at_fn_group_banner 36 'wordsplit.at:419' \ "getvar and env" " " at_xfail=no ( $as_echo "36. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:419: unset foo; unset x TVAR=12 y=zwar wsp foo=bar x=quux y=xur <<'EOT' begin \$foo \$TVAR \$x \$y end EOT " at_fn_check_prepare_notrace 'an embedded newline' "wordsplit.at:419" ( $at_check_trace; unset foo; unset x TVAR=12 y=zwar wsp foo=bar x=quux y=xur <<'EOT' begin $foo $TVAR $x $y end EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 6 0: begin 1: bar 2: 12 3: quux 4: zwar 5: end TOTAL: 6 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:419" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_36 #AT_START_37 at_fn_group_banner 37 'wordsplit.at:435' \ "getvar, alternate value" " " at_xfail=no ( $as_echo "37. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:435: wsp foo=bar <<'EOT' a \${foo:+isset} EOT " at_fn_check_prepare_notrace 'a ${...} parameter expansion' "wordsplit.at:435" ( $at_check_trace; wsp foo=bar <<'EOT' a ${foo:+isset} EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 2 0: a 1: isset TOTAL: 2 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:435" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_37 #AT_START_38 at_fn_group_banner 38 'wordsplit.at:446' \ "ignore quotes" " " at_xfail=no ( $as_echo "38. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:446: wsp -noquote <<'EOT' \"a text\" EOT " at_fn_check_prepare_notrace 'an embedded newline' "wordsplit.at:446" ( $at_check_trace; wsp -noquote <<'EOT' "a text" EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 2 0: \"\\\"a\" 1: \"text\\\"\" TOTAL: 2 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:446" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_38 #AT_START_39 at_fn_group_banner 39 'wordsplit.at:456' \ "custom delimiters (squeeze)" " " at_xfail=no ( $as_echo "39. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:456: wsp -delim : -nows -trimnl <<'EOT' semicolon: separated::list: of :words EOT " at_fn_check_prepare_notrace 'an embedded newline' "wordsplit.at:456" ( $at_check_trace; wsp -delim : -nows -trimnl <<'EOT' semicolon: separated::list: of :words EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 5 0: semicolon 1: \" separated\" 2: list 3: \" of \" 4: words TOTAL: 5 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:456" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_39 #AT_START_40 at_fn_group_banner 40 'wordsplit.at:468' \ "custom delimiters (no squeeze)" " " at_xfail=no ( $as_echo "40. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:468: wsp -delim : -nows -nosqueeze_delims -trimnl <<'EOT' semicolon: separated::list: of :words EOT " at_fn_check_prepare_notrace 'an embedded newline' "wordsplit.at:468" ( $at_check_trace; wsp -delim : -nows -nosqueeze_delims -trimnl <<'EOT' semicolon: separated::list: of :words EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 6 0: semicolon 1: \" separated\" 2: \"\" 3: list 4: \" of \" 5: words TOTAL: 6 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:468" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_40 #AT_START_41 at_fn_group_banner 41 'wordsplit.at:481' \ "custom, with returned delimiters" " " at_xfail=no ( $as_echo "41. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:481: wsp -delim : -nows -trimnl -return_delims <<'EOT' semicolon: separated::list: of :words EOT " at_fn_check_prepare_notrace 'an embedded newline' "wordsplit.at:481" ( $at_check_trace; wsp -delim : -nows -trimnl -return_delims <<'EOT' semicolon: separated::list: of :words EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 9 0: semicolon 1: : 2: \" separated\" 3: : 4: list 5: : 6: \" of \" 7: : 8: words TOTAL: 9 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:481" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_41 #AT_START_42 at_fn_group_banner 42 'wordsplit.at:497' \ "custom, with returned & squeezed delimiters" " " at_xfail=no ( $as_echo "42. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:497: wsp -delim : -nows -trimnl -return_delims -nosqueeze_delims <<'EOT' semicolon: separated::list: of :words EOT " at_fn_check_prepare_notrace 'an embedded newline' "wordsplit.at:497" ( $at_check_trace; wsp -delim : -nows -trimnl -return_delims -nosqueeze_delims <<'EOT' semicolon: separated::list: of :words EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 10 0: semicolon 1: : 2: \" separated\" 3: : 4: : 5: list 6: : 7: \" of \" 8: : 9: words TOTAL: 10 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:497" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_42 #AT_START_43 at_fn_group_banner 43 'wordsplit.at:516' \ "sed expressions" " " at_xfail=no ( $as_echo "43. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:516: wsp -sed <<'EOT' arg1 s/foo/bar/g;s/bar baz/quz quux/ arg2 EOT " at_fn_check_prepare_notrace 'an embedded newline' "wordsplit.at:516" ( $at_check_trace; wsp -sed <<'EOT' arg1 s/foo/bar/g;s/bar baz/quz quux/ arg2 EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 3 0: arg1 1: \"s/foo/bar/g;s/bar baz/quz quux/\" 2: arg2 TOTAL: 3 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:516" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_43 #AT_START_44 at_fn_group_banner 44 'wordsplit.at:527' \ "C escapes on" " " at_xfail=no ( $as_echo "44. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:527: wsp -cescapes <<'EOT' a\\ttab form\\ffeed and new\\nline EOT " at_fn_check_prepare_notrace 'an embedded newline' "wordsplit.at:527" ( $at_check_trace; wsp -cescapes <<'EOT' a\ttab form\ffeed and new\nline EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 4 0: a\\ttab 1: form\\ffeed 2: and 3: new\\nline TOTAL: 4 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:527" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_44 #AT_START_45 at_fn_group_banner 45 'wordsplit.at:537' \ "C escapes off" " " at_xfail=no ( $as_echo "45. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:537: wsp -nocescapes <<'EOT' a\\ttab form\\ffeed and new\\nline EOT " at_fn_check_prepare_notrace 'an embedded newline' "wordsplit.at:537" ( $at_check_trace; wsp -nocescapes <<'EOT' a\ttab form\ffeed and new\nline EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 4 0: attab 1: formffeed 2: and 3: newnline TOTAL: 4 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:537" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_45 #AT_START_46 at_fn_group_banner 46 'wordsplit.at:547' \ "ws elimination" " " at_xfail=no ( $as_echo "46. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:547: wsp -delim ' ()' -ws -return_delims <<'EOT' ( list items ) EOT " at_fn_check_prepare_notrace 'an embedded newline' "wordsplit.at:547" ( $at_check_trace; wsp -delim ' ()' -ws -return_delims <<'EOT' ( list items ) EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 4 0: ( 1: list 2: items 3: ) TOTAL: 4 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:547" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_46 #AT_START_47 at_fn_group_banner 47 'wordsplit.at:557' \ "ws elimination + return delim" " " at_xfail=no ( $as_echo "47. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:557: wsp -nodefault -novar -nocmd -delim \":,\" -return_delims -ws -dquote <<'EOT' \"foo\" : \"bar\", \"quux\" : \"baaz\" EOT " at_fn_check_prepare_notrace 'an embedded newline' "wordsplit.at:557" ( $at_check_trace; wsp -nodefault -novar -nocmd -delim ":," -return_delims -ws -dquote <<'EOT' "foo" : "bar", "quux" : "baaz" EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 7 0: foo 1: : 2: bar 3: , 4: quux 5: : 6: baaz TOTAL: 7 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:557" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_47 #AT_START_48 at_fn_group_banner 48 'wordsplit.at:571' \ "empty quotes" " " at_xfail=no ( $as_echo "48. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:571: wsp -delim : -ws -return_delims <<'EOT' t=\"\" EOT " at_fn_check_prepare_notrace 'an embedded newline' "wordsplit.at:571" ( $at_check_trace; wsp -delim : -ws -return_delims <<'EOT' t="" EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 1 0: t= TOTAL: 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:571" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_48 #AT_START_49 at_fn_group_banner 49 'wordsplit.at:578' \ "delimiter following empty quotes" " " at_xfail=no ( $as_echo "49. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:578: wsp -delim : -ws -return_delims <<'EOT' t=\"\":r EOT " at_fn_check_prepare_notrace 'an embedded newline' "wordsplit.at:578" ( $at_check_trace; wsp -delim : -ws -return_delims <<'EOT' t="":r EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 3 0: t= 1: : 2: r TOTAL: 3 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:578" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_49 #AT_START_50 at_fn_group_banner 50 'wordsplit.at:588' \ "suppress ws trimming within quotes" " " at_xfail=no ( $as_echo "50. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:588: wsp -default -delim , -ws -return_delims <<'EOT' nocomponent,nonewline, formatfield=\"In message %{text}, \" EOT " at_fn_check_prepare_notrace 'an embedded newline' "wordsplit.at:588" ( $at_check_trace; wsp -default -delim , -ws -return_delims <<'EOT' nocomponent,nonewline, formatfield="In message %{text}, " EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 5 0: nocomponent 1: , 2: nonewline 3: , 4: \"formatfield=In message %{text}, \" TOTAL: 5 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:588" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_50 #AT_START_51 at_fn_group_banner 51 'wordsplit.at:601' \ "unescape" " " at_xfail=no ( $as_echo "51. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:601: wsp -nodefault -novar -nocmd -quote -escape ':+:\\\\\"\"' <<'EOT' \\Seen \"quote \\\"\" \"bs \\\\\" EOT " at_fn_check_prepare_notrace 'an embedded newline' "wordsplit.at:601" ( $at_check_trace; wsp -nodefault -novar -nocmd -quote -escape ':+:\\""' <<'EOT' \Seen "quote \"" "bs \\" EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 3 0: \\\\Seen 1: \"quote \\\"\" 2: \"bs \\\\\" TOTAL: 3 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:601" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_51 #AT_START_52 at_fn_group_banner 52 'wordsplit.at:612' \ "unescape: word/quote" " " at_xfail=no ( $as_echo "52. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:612: wsp -nodefault -novar -nocmd -quote -escape-word '\\\\\"\"' -escape-quote ':+0x:\\\\\"\"' <<'EOT' \\Seen \"quote \\\"\" \"bs \\\\\" \"3\\x31 \\101\" 3\\x31 \\101 EOT " at_fn_check_prepare_notrace 'an embedded newline' "wordsplit.at:612" ( $at_check_trace; wsp -nodefault -novar -nocmd -quote -escape-word '\\""' -escape-quote ':+0x:\\""' <<'EOT' \Seen "quote \"" "bs \\" "3\x31 \101" 3\x31 \101 EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 6 0: Seen 1: \"quote \\\"\" 2: \"bs \\\\\" 3: \"31 A\" 4: 3x31 5: 101 TOTAL: 6 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:612" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_52 #AT_START_53 at_fn_group_banner 53 'wordsplit.at:626' \ "dquote" " " at_xfail=no ( $as_echo "53. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:626: wsp -nodefault -novar -nocmd -dquote <<'EOT' a \"quoted example\" isn't it EOT " at_fn_check_prepare_notrace 'an embedded newline' "wordsplit.at:626" ( $at_check_trace; wsp -nodefault -novar -nocmd -dquote <<'EOT' a "quoted example" isn't it EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 4 0: a 1: \"quoted example\" 2: isn't 3: it TOTAL: 4 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:626" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_53 #AT_START_54 at_fn_group_banner 54 'wordsplit.at:636' \ "squote" " " at_xfail=no ( $as_echo "54. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:636: wsp -nodefault -novar -nocmd -squote <<'EOT' a 'quoted example' isn\"t it EOT " at_fn_check_prepare_notrace 'an embedded newline' "wordsplit.at:636" ( $at_check_trace; wsp -nodefault -novar -nocmd -squote <<'EOT' a 'quoted example' isn"t it EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 4 0: a 1: \"quoted example\" 2: \"isn\\\"t\" 3: it TOTAL: 4 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:636" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_54 #AT_START_55 at_fn_group_banner 55 'wordsplit.at:648' \ "incremental" " " at_xfail=no ( $as_echo "55. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:648: wsp -incremental <<'EOT' incremental \"input test\" line EOT " at_fn_check_prepare_notrace 'an embedded newline' "wordsplit.at:648" ( $at_check_trace; wsp -incremental <<'EOT' incremental "input test" line EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; $as_echo "input exhausted " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 1 0: incremental TOTAL: 1 NF: 1 0: \"input test\" TOTAL: 2 NF: 1 0: line TOTAL: 3 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:648" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_55 #AT_START_56 at_fn_group_banner 56 'wordsplit.at:666' \ "incremental append" " " at_xfail=no ( $as_echo "56. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:666: wsp -incremental -append <<'EOT' incremental \"input test\" line EOT " at_fn_check_prepare_notrace 'an embedded newline' "wordsplit.at:666" ( $at_check_trace; wsp -incremental -append <<'EOT' incremental "input test" line EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; $as_echo "input exhausted " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 1 0: incremental TOTAL: 1 NF: 2 0: incremental 1: \"input test\" TOTAL: 2 NF: 3 0: incremental 1: \"input test\" 2: line TOTAL: 3 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:666" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_56 #AT_START_57 at_fn_group_banner 57 'wordsplit.at:687' \ "incremental ws" " " at_xfail=no ( $as_echo "57. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:687: wsp -return_delims -nosqueeze_delims -incremental -ws <<'EOT' a list test EOT " at_fn_check_prepare_notrace 'an embedded newline' "wordsplit.at:687" ( $at_check_trace; wsp -return_delims -nosqueeze_delims -incremental -ws <<'EOT' a list test EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; $as_echo "input exhausted " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 1 0: a TOTAL: 1 NF: 1 0: list TOTAL: 2 NF: 1 0: test TOTAL: 3 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:687" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_57 #AT_START_58 at_fn_group_banner 58 'wordsplit.at:706' \ "incremental nosplit" " " at_xfail=no ( $as_echo "58. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:706: wsp -incremental -nosplit <<'EOT' incremental \"input test\" line EOT " at_fn_check_prepare_notrace 'an embedded newline' "wordsplit.at:706" ( $at_check_trace; wsp -incremental -nosplit <<'EOT' incremental "input test" line EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; $as_echo "input exhausted " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 1 0: \"incremental input test line\" TOTAL: 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:706" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_58 #AT_START_59 at_fn_group_banner 59 'wordsplit.at:716' \ "simple command substitution" " " at_xfail=no ( $as_echo "59. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:716: wsp -cmd <<'EOT' begin \$(words a b) end EOT " at_fn_check_prepare_notrace 'a $(...) command substitution' "wordsplit.at:716" ( $at_check_trace; wsp -cmd <<'EOT' begin $(words a b) end EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 4 0: begin 1: a 2: b 3: end TOTAL: 4 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:716" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_59 #AT_START_60 at_fn_group_banner 60 'wordsplit.at:726' \ "quoted command substitution" " " at_xfail=no ( $as_echo "60. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:726: wsp -cmd <<'EOT' begin \"\$(words a b)\" end EOT " at_fn_check_prepare_notrace 'a $(...) command substitution' "wordsplit.at:726" ( $at_check_trace; wsp -cmd <<'EOT' begin "$(words a b)" end EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 3 0: begin 1: \"a b\" 2: end TOTAL: 3 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:726" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_60 #AT_START_61 at_fn_group_banner 61 'wordsplit.at:735' \ "coalesced command substitution" " " at_xfail=no ( $as_echo "61. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:735: wsp -cmd <<'EOT' begin(\$(words a b))end EOT " at_fn_check_prepare_notrace 'a $(...) command substitution' "wordsplit.at:735" ( $at_check_trace; wsp -cmd <<'EOT' begin($(words a b))end EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 2 0: begin(a 1: b)end TOTAL: 2 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:735" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_61 #AT_START_62 at_fn_group_banner 62 'wordsplit.at:743' \ "quoted coalesced command substitution" " " at_xfail=no ( $as_echo "62. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:743: wsp -cmd <<'EOT' \"begin(\$(words a b))end\" EOT " at_fn_check_prepare_notrace 'a $(...) command substitution' "wordsplit.at:743" ( $at_check_trace; wsp -cmd <<'EOT' "begin($(words a b))end" EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 1 0: \"begin(a b)end\" TOTAL: 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:743" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_62 #AT_START_63 at_fn_group_banner 63 'wordsplit.at:750' \ "variable and command substitution" " " at_xfail=no ( $as_echo "63. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:750: X=a Y=b wsp -cmd -var <<'EOT' begin \$X \$(words \$X \$Y) end EOT " at_fn_check_prepare_notrace 'a $(...) command substitution' "wordsplit.at:750" ( $at_check_trace; X=a Y=b wsp -cmd -var <<'EOT' begin $X $(words $X $Y) end EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 5 0: begin 1: a 2: a 3: b 4: end TOTAL: 5 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:750" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_63 #AT_START_64 at_fn_group_banner 64 'wordsplit.at:761' \ "variable expansion and command substitution in quotes" "" at_xfail=no ( $as_echo "64. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:761: X=a Y=b BEGIN=begin wsp -cmd -var <<'EOT' \"\${BEGIN}(\$(words \$X \$Y))end\" EOT " at_fn_check_prepare_notrace 'a $(...) command substitution' "wordsplit.at:761" ( $at_check_trace; X=a Y=b BEGIN=begin wsp -cmd -var <<'EOT' "${BEGIN}($(words $X $Y))end" EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 1 0: \"begin(a b)end\" TOTAL: 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:761" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_64 #AT_START_65 at_fn_group_banner 65 'wordsplit.at:768' \ "nested commands" " " at_xfail=no ( $as_echo "65. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:768: SUFFIX=put wsp -cmd -var <<'EOT' \$(words output \$(words in\$SUFFIX text) end) EOT " at_fn_check_prepare_notrace 'a $(...) command substitution' "wordsplit.at:768" ( $at_check_trace; SUFFIX=put wsp -cmd -var <<'EOT' $(words output $(words in$SUFFIX text) end) EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 4 0: output 1: input 2: text 3: end TOTAL: 4 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:768" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_65 #AT_START_66 at_fn_group_banner 66 'wordsplit.at:779' \ "pathname expansion" " " at_xfail=no ( $as_echo "66. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:781: mkdir dir > dir/1.c > dir/2.c > dir/3.b wsp -pathexpand<<'EOT' begin dir/*.c end EOT " at_fn_check_prepare_notrace 'an embedded newline' "wordsplit.at:781" ( $at_check_trace; mkdir dir > dir/1.c > dir/2.c > dir/3.b wsp -pathexpand<<'EOT' begin dir/*.c end EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 4 0: begin 1: dir/1.c 2: dir/2.c 3: end TOTAL: 4 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:781" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_66 #AT_START_67 at_fn_group_banner 67 'wordsplit.at:801' \ "pathname expansion: no match" " " at_xfail=no ( $as_echo "67. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:803: mkdir dir > dir/1.c > dir/2.b wsp -pathexpand<<'EOT' begin dir/*.d end EOT " at_fn_check_prepare_notrace 'an embedded newline' "wordsplit.at:803" ( $at_check_trace; mkdir dir > dir/1.c > dir/2.b wsp -pathexpand<<'EOT' begin dir/*.d end EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 3 0: begin 1: dir/*.d 2: end TOTAL: 3 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:803" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_67 #AT_START_68 at_fn_group_banner 68 'wordsplit.at:821' \ "pathname expansion: nullglob" " " at_xfail=no ( $as_echo "68. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:823: mkdir dir > dir/1.c > dir/2.b wsp -pathexpand -nullglob<<'EOT' begin dir/*.d end EOT " at_fn_check_prepare_notrace 'an embedded newline' "wordsplit.at:823" ( $at_check_trace; mkdir dir > dir/1.c > dir/2.b wsp -pathexpand -nullglob<<'EOT' begin dir/*.d end EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 2 0: begin 1: end TOTAL: 2 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:823" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_68 #AT_START_69 at_fn_group_banner 69 'wordsplit.at:840' \ "pathname expansion: failglob" " " at_xfail=no ( $as_echo "69. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:842: mkdir dir > dir/1.c > dir/2.b wsp -pathexpand -failglob<<'EOT' begin dir/*.d end EOT " at_fn_check_prepare_notrace 'an embedded newline' "wordsplit.at:842" ( $at_check_trace; mkdir dir > dir/1.c > dir/2.b wsp -pathexpand -failglob<<'EOT' begin dir/*.d end EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; $as_echo "no files match pattern dir/*.d " | \ $at_diff - "$at_stderr" || at_failed=: at_fn_diff_devnull "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:842" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_69 #AT_START_70 at_fn_group_banner 70 'wordsplit.at:857' \ "append" " " at_xfail=no ( $as_echo "70. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:857: wsp -append-args extra arguments follow <<'EOT' some words and EOT " at_fn_check_prepare_notrace 'an embedded newline' "wordsplit.at:857" ( $at_check_trace; wsp -append-args extra arguments follow <<'EOT' some words and EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 6 0: some 1: words 2: and 3: extra 4: arguments 5: follow TOTAL: 3 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:857" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_70 #AT_START_71 at_fn_group_banner 71 'wordsplit.at:869' \ "append + dooffs + env" " " at_xfail=no ( $as_echo "71. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:869: wsp -env none -dooffs preface words -- V=2 -append-args extra arguments follow <<'EOT' some words and var=\$V EOT " at_fn_check_prepare_notrace 'an embedded newline' "wordsplit.at:869" ( $at_check_trace; wsp -env none -dooffs preface words -- V=2 -append-args extra arguments follow <<'EOT' some words and var=$V EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 7 (2) (0): preface (1): words 2: some 3: words 4: and 5: var=2 6: extra 7: arguments 8: follow TOTAL: 4 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:869" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_71 #AT_START_72 at_fn_group_banner 72 'wordsplit.at:886' \ "maxwords" " " at_xfail=no ( $as_echo "72. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:886: wsp -trimnl -maxwords 3 <<'EOT' ws_maxwords limits the number of returned words EOT " at_fn_check_prepare_notrace 'an embedded newline' "wordsplit.at:886" ( $at_check_trace; wsp -trimnl -maxwords 3 <<'EOT' ws_maxwords limits the number of returned words EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 3 0: ws_maxwords 1: limits 2: \"the number of returned words\" TOTAL: 3 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:886" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_72 #AT_START_73 at_fn_group_banner 73 'wordsplit.at:896' \ "maxwords return_delims" " " at_xfail=no ( $as_echo "73. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:896: wsp -trimnl -maxwords 8 -return_delims -delim :- <<'EOT' foo:::bar-:baz-quux:ux:zu EOT " at_fn_check_prepare_notrace 'an embedded newline' "wordsplit.at:896" ( $at_check_trace; wsp -trimnl -maxwords 8 -return_delims -delim :- <<'EOT' foo:::bar-:baz-quux:ux:zu EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 8 0: foo 1: : 2: bar 3: - 4: : 5: baz 6: - 7: quux:ux:zu TOTAL: 8 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:896" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_73 #AT_START_74 at_fn_group_banner 74 'wordsplit.at:911' \ "maxwords return_delims -squeeze_delims" " " at_xfail=no ( $as_echo "74. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:911: wsp -trimnl -maxwords 8 -return_delims -nosqueeze_delims -delim :- <<'EOT' foo:::bar-:baz:qux- EOT " at_fn_check_prepare_notrace 'an embedded newline' "wordsplit.at:911" ( $at_check_trace; wsp -trimnl -maxwords 8 -return_delims -nosqueeze_delims -delim :- <<'EOT' foo:::bar-:baz:qux- EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 8 0: foo 1: : 2: : 3: : 4: bar 5: - 6: : 7: baz:qux- TOTAL: 8 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:911" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_74 #AT_START_75 at_fn_group_banner 75 'wordsplit.at:926' \ "maxwords incremental" " " at_xfail=no ( $as_echo "75. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:926: wsp -trimnl -maxwords 3 -incremental <<'EOT' foo bar baz qux uz EOT " at_fn_check_prepare_notrace 'an embedded newline' "wordsplit.at:926" ( $at_check_trace; wsp -trimnl -maxwords 3 -incremental <<'EOT' foo bar baz qux uz EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; $as_echo "input exhausted " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 1 0: foo TOTAL: 1 NF: 1 0: bar TOTAL: 2 NF: 1 0: \"baz qux uz\" TOTAL: 3 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:926" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_75 #AT_START_76 at_fn_group_banner 76 'wordsplit.at:945' \ "variable nosplit" " " at_xfail=no ( $as_echo "76. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:945: wsp -novar -novarsplit <<'EOT' begin \${VAR:- a b} end EOT " at_fn_check_prepare_notrace 'a ${...} parameter expansion' "wordsplit.at:945" ( $at_check_trace; wsp -novar -novarsplit <<'EOT' begin ${VAR:- a b} end EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 3 0: begin 1: \"\${VAR:- a b}\" 2: end TOTAL: 3 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:945" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_76 #AT_START_77 at_fn_group_banner 77 'wordsplit.at:954' \ "command nosplit" " " at_xfail=no ( $as_echo "77. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:954: wsp -nocmd -nocmdsplit <<'EOT' begin \$(words a b) end EOT " at_fn_check_prepare_notrace 'a $(...) command substitution' "wordsplit.at:954" ( $at_check_trace; wsp -nocmd -nocmdsplit <<'EOT' begin $(words a b) end EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 3 0: begin 1: \"\$(words a b)\" 2: end TOTAL: 3 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:954" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_77 #AT_START_78 at_fn_group_banner 78 'wordsplit.at:963' \ "positional parameters" " " at_xfail=no ( $as_echo "78. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:963: wsp one two three four five six seven eight nine ten eleven twelve <<'EOT' \$0 \$5 \${10} \$# EOT " at_fn_check_prepare_notrace 'a ${...} parameter expansion' "wordsplit.at:963" ( $at_check_trace; wsp one two three four five six seven eight nine ten eleven twelve <<'EOT' $0 $5 ${10} $# EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 3 0: one 1: six 2: eleven TOTAL: 3 NF: 1 0: 12 TOTAL: 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:963" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_78 #AT_START_79 at_fn_group_banner 79 'wordsplit.at:976' \ "\$* and \$@" " " at_xfail=no ( $as_echo "79. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:976: wsp 'one two' three 'four five' <<'EOT' \$* \$@ \"\$*\" \"\$@\" EOT " at_fn_check_prepare_notrace 'an embedded newline' "wordsplit.at:976" ( $at_check_trace; wsp 'one two' three 'four five' <<'EOT' $* $@ "$*" "$@" EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 5 0: one 1: two 2: three 3: four 4: five TOTAL: 5 NF: 3 0: \"one two\" 1: three 2: \"four five\" TOTAL: 3 NF: 1 0: \"one two three four five\" TOTAL: 1 NF: 1 0: \"one two three four five\" TOTAL: 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:976" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_79 #AT_START_80 at_fn_group_banner 80 'wordsplit.at:1001' \ "\$* and \$@ in nosplit mode" " " at_xfail=no ( $as_echo "80. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:1001: wsp -trimnl -nosplit 'one two' three 'four five' <<'EOT' \$* \$@ EOT " at_fn_check_prepare_notrace 'an embedded newline' "wordsplit.at:1001" ( $at_check_trace; wsp -trimnl -nosplit 'one two' three 'four five' <<'EOT' $* $@ EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 1 0: \"one two three four five\" TOTAL: 1 NF: 1 0: \"one two three four five\" TOTAL: 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:1001" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_80 #AT_START_81 at_fn_group_banner 81 'wordsplit.at:1013' \ "\$* and \$@ in nosplit mode with delimiter" " " at_xfail=no ( $as_echo "81. $at_setup_line: testing $at_desc ..." $at_traceon { set +x $as_echo "$at_srcdir/wordsplit.at:1013: wsp -trimnl -nosplit -delim : 'one two' three 'four five' <<'EOT' \$* \$@ EOT " at_fn_check_prepare_notrace 'an embedded newline' "wordsplit.at:1013" ( $at_check_trace; wsp -trimnl -nosplit -delim : 'one two' three 'four five' <<'EOT' $* $@ EOT ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter at_fn_diff_devnull "$at_stderr" || at_failed=: echo >>"$at_stdout"; $as_echo "NF: 1 0: \"one two:three:four five\" TOTAL: 1 NF: 1 0: \"one two:three:four five\" TOTAL: 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/wordsplit.at:1013" $at_failed && at_fn_log_failure $at_traceon; } set +x $at_times_p && times >"$at_times_file" ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_81 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/tests/parser-meta1.at������������������������������������������������������������0000644�0001750�0001750�00000010401�13244106110�020246� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of grecs -*- Autotest -*- # Copyright (C) 2011-2016 Sergey Poznyakoff # # Grecs 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. # # Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([MeTA1-style parser]) AT_KEYWORDS([parser meta1]) AT_CHECK([gcffmt -type=meta1 $abs_srcdir/meta1.conf], [0], [.hostname: "host.example.org" .smtps.greeting: "220 example.org ESMTP Tossudament alcats\r\n" .smtps.log_level: "12" .smtps.log.facility: "mail" .smtps.log.ident: "smtps" .smtps.flags: ("8bitmime", "access") .smtps.CDB_gid: "2262" .smtps.wait_for_server: "4" .smtps.listen_socket.type: "inet" .smtps.listen_socket.port: "25" .smtps.start_action: "pass" .smtps.pass_fd_socket: "smtps/smtpsfd" .smtps.user: "meta1s" .smtps.path: "/usr/local/libexec/smtps" .smtps.arguments: "smtps -f /etc/meta1/meta1.conf" .smtps.policy_milter.socket.type: "inet" .smtps.policy_milter.socket.address: "127.0.0.1" .smtps.policy_milter.socket.port: "3333" .smtps.policy_milter.timeout: "1800s" .smtps.policy_milter.flags: ("accept_but_reconnect") .smtps.io_timeout: "300s" .smtps.module_timeout: "1000s" .smtps.auth.flags: ("noanonymous") .smtps="MSA".log_level: "11" .smtps="MSA".log.facility: "mail" .smtps="MSA".log.ident: "MSA" .smtps="MSA".CDB_gid: "2262" .smtps="MSA".listen_socket.type: "inet" .smtps="MSA".listen_socket.port: "587" .smtps="MSA".start_action: "pass" .smtps="MSA".pass_fd_socket: "smtps/msafd" .smtps="MSA".user: "meta1s" .smtps="MSA".path: "/usr/local/libexec/smtps" .smtps="MSA".arguments: "smtps -I 1 -N MSA -f /etc/meta1/meta1.conf" .smtpc.log_level: "12" .smtpc.log.facility: "mail" .smtpc.log.ident: "smtpc" .smtpc.flags: ("read_QUIT_reply", "separate_final_dot_and_QUIT", "talk_to_myself") .smtpc.LMTP_socket: "lmtpsock" .smtpc.wait_for_server: "4" .smtpc.start_action: "wait" .smtpc.user: "meta1c" .smtpc.path: "/usr/local/libexec/smtpc" .smtpc.arguments: "smtpc -f /etc/meta1/meta1.conf" .qmgr.log_level: "12" .qmgr.log.facility: "mail" .qmgr.log.ident: "qmgr" .qmgr.wait_for_server: "4" .qmgr.wait_for_client: "3" .qmgr.start_action: "wait" .qmgr.user: "meta1q" .qmgr.restart_dependencies: ("smtps", "MSA", "smtpc") .qmgr.path: "/usr/local/libexec/qmgr" .qmgr.arguments: "qmgr -f /etc/meta1/meta1.conf" .qmgr.control_socket: "qmgr/sock" .smar.DNS.nameservers: ("10.11.0.1", "10.12.0.1") .smar.DNS.flags: "use_connect" .smar.log_level: "12" .smar.log.facility: "mail" .smar.log.ident: "smar" .smar.nameserver: "10.11.0.1" .smar.start_action: "wait" .smar.user: "meta1m" .smar.restart_dependencies: ("smtps", "MSA", "qmgr") .smar.path: "/usr/local/libexec/smar" .smar.arguments: "smar -f /etc/meta1/meta1.conf" .smar.map="mtdb".type: "hash" .smar.map="mtdb".file: "mt.db" .smar.mailertable.name: "mtdb" .smar.mailertable.flags: ("full_address", "domain") .smar.map="password".type: "passwd" .smar.map="userdb".type: "socket" .smar.map="userdb".path: "/var/spool/meta1/smap/userdb" .smar.map="userdb".mapname: "userdb" .smar.map="userdb".min_connections: "10" .smar.map="userdb".max_connections: "1024" .smar.map="userdb".timeout: "5" .smar.map="locusr".type: "sequence" .smar.map="locusr".maps: ("password", "userdb") .smar.local_user_map.name: "locusr" .smar.local_user_map.flags: ("localpart", "local_domains") .smar.map="lum".type: "socket" .smar.map="lum".path: "/var/spool/meta1/smap/userdb" .smar.map="lum".mapname: "alias" .smar.map="lum".min_connections: "10" .smar.map="lum".max_connections: "1024" .smar.map="lum".timeout: "6" .smar.map="stdal".file: "aliases.db" .smar.map="stdal".type: "hash" .smar.map="ali".type: "sequence" .smar.map="ali".maps: ("lum", "stdal") .smar.aliases.name: "ali" .smar.aliases.flags: ("localpart", "local_domains") .smar.map="acc".type: "socket" .smar.map="acc".address: "127.0.0.1" .smar.map="acc".port: "1025" .smar.map="acc".mapname: "access" .smar.access_map.name: "acc" ]) AT_CLEANUP ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/tests/gcf1.conf������������������������������������������������������������������0000644�0001750�0001750�00000002350�13244106110�017112� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of grecs - Gray's Extensible Configuration System # Copyright (C) 2007-2016 Sergey Poznyakoff # # Grecs 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. # # Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. /* Scalar variable. */ scalar yes; // List variable. listvar ("a", 2, "b", "c"); # Compound value. compound stmt 2 foo; mailbox { mailbox-pattern "maildir:/var/mail;type=index;param=2;user=${user}"; mailbox-type "maildir"; }; logging { syslog yes; facility mail; } program "foo" { logging { syslog yes; facility local1; } scalar no; } program "bar" { logging { syslog no; facility local2; tag "baz"; }; # Note: semicolon after closing brace is optional. scalar 25; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/tests/stradj.at������������������������������������������������������������������0000644�0001750�0001750�00000002077�13244106110�017246� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of grecs -*- Autotest -*- # Copyright (C) 2016 Sergey Poznyakoff # # Grecs 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. # # Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([String location adjustment]) AT_KEYWORDS([format option stradj]) AT_DATA([input.conf], [ident name; option "string"; ]) AT_CHECK([echo "Default" gcffmt -nopath -locus input.conf echo "Adjustment" gcffmt -nopath -locus -stradj input.conf ], [0], [Default input.conf:1.7-10: "name" input.conf:2.8-15: "string" Adjustment input.conf:1.7-10: "name" input.conf:2.9-14: "string" ]) AT_CLEANUP �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/tests/reduce03.at����������������������������������������������������������������0000644�0001750�0001750�00000002020�13244106110�017355� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of grecs -*- Autotest -*- # Copyright (C) 2007-2016 Sergey Poznyakoff # # Grecs 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. # # Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([Table driven reduction]) AT_KEYWORDS([reduce reduce03]) GRECS_TEST([ scalar bar; listvar (1, 2); listvar foo; logging { facility local1; tag prog; } listvar (3, 4); scalar baz; logging { facility mail; } ], [gcfset -reduce], [0], [Global settings: scalar = baz listvar = "1" "2" "foo" "3" "4" logging: 0/mail/prog/0 ]) AT_CLEANUP ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/tests/locus00.at�����������������������������������������������������������������0000644�0001750�0001750�00000001563�13244106110�017243� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of grecs -*- Autotest -*- # Copyright (C) 2007-2016 Sergey Poznyakoff # # Grecs 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. # # Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. AT_SETUP(Scalar value) AT_KEYWORDS([locus scalar locus00]) AT_DATA([test.cf],[ string val; ]) AT_CHECK([gcfpeek -nopath -locus test.cf .string], [0], [test.cf:2.8-10: "val" ]) AT_CLEANUP ���������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/tests/incl00.at������������������������������������������������������������������0000644�0001750�0001750�00000001711�13244106110�017036� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of grecs -*- Autotest -*- # Copyright (C) 2014-2016 Sergey Poznyakoff # # Grecs 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. # # Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([Include path]) AT_KEYWORDS([include incl00]) AT_CHECK([ mkdir include AT_DATA([include/1.inc],[this true; ]) AT_DATA([test.cf],[ before 1; #include <1.inc> after 1; ]) gcffmt -I`pwd`/include ./test.cf ], [0], [.before: "1" .this: "true" .after: "1" ]) AT_CLEANUP �������������������������������������������������������direvent-5.2/grecs/tests/atlocal.in�����������������������������������������������������������������0000644�0001750�0001750�00000000470�13244106110�017373� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# @configure_input@ -*- shell-script -*- # Configurable variable values for Grecs test suite. # Copyright (C) 2011-2016 Sergey Poznyakoff PATH=@abs_builddir@:$PATH XFAILFILE=$abs_builddir/.badversion trap "cleanup; test -r $XFAILFILE && cat $XFAILFILE; exit $?" 1 2 13 15 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/tests/gcffmt.c�������������������������������������������������������������������0000644�0001750�0001750�00000010234�13244106110�017035� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* grecs - Gray's Extensible Configuration System Copyright (C) 2007-2016 Sergey Poznyakoff Grecs 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. Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include <string.h> #include <errno.h> #include <stdlib.h> #include "grecs.h" struct list_helper { FILE *file; int delim; }; static int list_parser_types(const char *name, grecs_parser_t parser, void *data) { struct list_helper *p = data; fprintf(p->file, "%c%s", p->delim, name); p->delim = '|'; return 0; } static void usage(const char *arg, FILE *fp, int code) { struct list_helper lh; fprintf(fp, "usage: %s [-h] [-list[=type]] [-locus] [-delim=char] [-reduce] [-sort]\n", arg); fprintf(fp, " [-nopath] [-novalue] [-type"); lh.file = fp; lh.delim = '='; grecs_enumerate_parsers(list_parser_types, &lh); fprintf(fp, "] [-Idir] [-include=dir] file [file...]\n"); exit(code); } static int node_ident_cmp(struct grecs_node const *a, struct grecs_node const *b) { return strcmp(a->ident, b->ident); } int list_parser(const char *name, grecs_parser_t parser, void *data) { printf("%s\n", name); return 0; } int find_parser(const char *name, grecs_parser_t parser, void *data) { if (strcasecmp(name, (char*)data) == 0) exit(0); return 0; } int set_parser(const char *arg) { grecs_parser_t p = grecs_get_parser_by_type(arg); if (p) { grecs_parser_fun = p; return 0; } return 1; } int main(int argc, char **argv) { char *progname = argv[0]; char *file = NULL; struct grecs_node *tree; int flags = GRECS_NODE_FLAG_DEFAULT; int reduce = 0; int sort = 0; grecs_parser_options = 0; while (--argc) { char *arg = *++argv; if (strcmp(arg, "-locus") == 0) flags |= GRECS_NODE_FLAG_LOCUS; else if (strcmp(arg, "-nopath") == 0) flags &= ~GRECS_NODE_FLAG_PATH; else if (strcmp(arg, "-novalue") == 0) flags &= ~GRECS_NODE_FLAG_VALUE; else if (strncmp(arg, "-delim=", 7) == 0) flags |= arg[7]; else if (strcmp(arg, "-reduce") == 0) reduce = 1; else if (strcmp(arg, "-sort") == 0) sort = 1; else if (strcmp(arg, "-h") == 0) usage(progname, stdout, 0); else if (strcmp(arg, "-list") == 0) { grecs_enumerate_parsers(list_parser, NULL); exit(0); } else if (strncmp(arg, "-list=", 6) == 0) { grecs_enumerate_parsers(find_parser, arg + 6); exit(2); } else if (strncmp(arg, "-type=", 6) == 0) { if (set_parser(arg + 6)) usage(progname, stderr, 1); } else if (strncmp(arg, "-I", 2) == 0) grecs_preproc_add_include_dir(arg+2); else if (strncmp(arg, "-include=", 9) == 0) grecs_preproc_add_include_dir(arg+9); else if (strcmp(arg, "-x") == 0) grecs_gram_trace(1); else if (strcmp(arg, "-X") == 0) grecs_lex_trace(1); else if (strcmp(arg, "-strcat") == 0) grecs_parser_options |= GRECS_OPTION_QUOTED_STRING_CONCAT; else if (strcmp(arg, "-stradj") == 0) grecs_parser_options |= GRECS_OPTION_ADJUST_STRING_LOCATIONS; else if (arg[0] == '-') usage(progname, stderr, 1); else { file = arg; --argc; break; } } if (!grecs_parser_fun) { fprintf(stderr, "%s: requested type not supported", progname); exit(2); } if (!file) usage(progname, stderr, 1); tree = grecs_parse(file); if (!tree) exit(1); for (; argc; argc--) { char *arg = *++argv; struct grecs_node *node = grecs_parse(arg); if (!node) exit(1); if (grecs_tree_join(tree, node)) { fprintf(stderr, "join failed\n"); exit(1); } grecs_tree_free(node); } if (reduce) grecs_tree_reduce(tree, NULL, 0); if (sort) grecs_tree_sort(tree, node_ident_cmp); grecs_print_node(tree, flags, stdout); fputc('\n', stdout); grecs_tree_free(tree); exit(0); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/tests/wordsplit-version.h��������������������������������������������������������0000644�0001750�0001750�00000000054�13512402634�021315� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#define WORDSPLIT_VERSION "v1.0-6-gd36275f" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/tests/bind.ext.conf��������������������������������������������������������������0000644�0001750�0001750�00000000532�13244106110�020005� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Sample Bind configuration include file (2) for Grecs testsuite. zone "." { type hint; file "named.root"; }; zone "com" { type delegation-only; }; zone "net" { type delegation-only; }; zone "0.0.127.IN-ADDR.ARPA" { type master; file "local.p"; }; zone "foo.example.net" { type master; file "foo.p"; }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/tests/format01.at����������������������������������������������������������������0000644�0001750�0001750�00000002660�13244106110�017406� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of grecs -*- Autotest -*- # Copyright (C) 2007-2016 Sergey Poznyakoff # # Grecs 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. # # Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([Locus]) AT_KEYWORDS([format format01]) AT_CHECK([gcffmt -locus $abs_srcdir/gcf1.conf|sed 's|^.*/gcf1.conf||'], [0], [:19.1-10: .scalar: "yes" :22.1-26: .listvar: ("a", "2", "b", "c") :25.1-19: .compound: "stmt" "2" "foo" :28.3-69: .mailbox.mailbox-pattern: "maildir:/var/mail;type=index;param=2;user=${user}" :29.3-24: .mailbox.mailbox-type: "maildir" :33.4-13: .logging.syslog: "yes" :34.4-16: .logging.facility: "mail" :39.9-18: .program="foo".logging.syslog: "yes" :40.9-23: .program="foo".logging.facility: "local1" :42.4-12: .program="foo".scalar: "no" :47.9-17: .program="bar".logging.syslog: "no" :48.9-23: .program="bar".logging.facility: "local2" :49.9-17: .program="bar".logging.tag: "baz" :51.4-12: .program="bar".scalar: "25" ]) AT_CLEANUP ��������������������������������������������������������������������������������direvent-5.2/grecs/tests/gcfset.c�������������������������������������������������������������������0000644�0001750�0001750�00000016221�13244106110�017044� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* grecs - Gray's Extensible Configuration System Copyright (C) 2007-2016 Sergey Poznyakoff Grecs 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. Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include <stddef.h> #include <string.h> #include <errno.h> #include <stdlib.h> #include "grecs.h" struct logging_setup { int use_syslog; int print_priority; char *tag; char *facility; }; struct logging_setup logging_setup; char *scalar_string; char *mailbox_pattern; char *mailbox_type; struct grecs_list *listvar; struct program { char *name; struct logging_setup logging_setup; char *scalar_string; grecs_locus_t locus; struct program *next; }; struct grecs_list *proglist; #if GRECS_TREE_API # define GRECS_CB_ARGS \ enum grecs_callback_command cmd,\ grecs_node_t *node,\ void *varptr,\ void *cb_data # define GRECS_CB_AUTO \ grecs_locus_t *locus = &node->locus;\ grecs_value_t *value = node->v.value; #else # define GRECS_CB_ARGS \ enum grecs_callback_command cmd,\ grecs_locus_t *locus,\ void *varptr,\ grecs_value_t *value,\ void *cb_data # define GRECS_CB_AUTO #endif static int cb_logging_facility(GRECS_CB_ARGS) { GRECS_CB_AUTO if (cmd != grecs_callback_set_value) { grecs_error(locus, 0, "Unexpected block statement"); return 1; } if (!value || value->type != GRECS_TYPE_STRING) { grecs_error(locus, 0, "expected string argument"); return 1; } *(char**)varptr = grecs_strdup(value->v.string); return 0; } static struct grecs_keyword logging_kwtab[] = { { "syslog", NULL, "Send to syslog", grecs_type_bool, GRECS_DFLT, NULL, offsetof(struct logging_setup, use_syslog) }, { "facility", "name", "Set logging facility", grecs_type_string, GRECS_AGGR, NULL, offsetof(struct logging_setup, facility), cb_logging_facility }, { "tag", "label", "Tag logging messages with this string", grecs_type_string, GRECS_DFLT, NULL, offsetof(struct logging_setup, tag) }, { "print-priority", NULL, "Prefix each message with its priority", grecs_type_bool, GRECS_DFLT, NULL, offsetof(struct logging_setup, print_priority) }, { NULL }, }; static struct grecs_keyword mailbox_kwtab[] = { { "mailbox-pattern", NULL, "Default mailbox pattern", grecs_type_string, GRECS_DFLT, &mailbox_pattern }, { "mailbox-type", NULL, "Default mailbox type", grecs_type_string, GRECS_DFLT, &mailbox_type }, { NULL }, }; static struct grecs_keyword program_kwtab[] = { { "scalar", "label", "Scalar string", grecs_type_string, GRECS_DFLT, NULL, offsetof(struct program,scalar_string) }, { "logging", NULL, "Configure logging logging", grecs_type_section, GRECS_DFLT, NULL, offsetof(struct program,logging_setup), NULL, NULL, logging_kwtab }, { NULL } }; static int cb_program(GRECS_CB_ARGS) { struct program *prog; void **pdata = cb_data; GRECS_CB_AUTO switch (cmd) { case grecs_callback_section_begin: if (!value || value->type != GRECS_TYPE_STRING) { grecs_error(locus, 0, "tag must be a string"); return 0; } prog = grecs_zalloc(sizeof(*prog)); prog->name = grecs_strdup(value->v.string); prog->locus = *locus; *pdata = prog; break; case grecs_callback_section_end: prog = *pdata; if (!proglist) proglist = grecs_list_create(); grecs_list_append(proglist, prog); break; case grecs_callback_set_value: grecs_error(locus, 0, "invalid use of block statement"); } return 0; } static struct grecs_keyword main_kwtab[] = { { "scalar", "label", "Scalar string", grecs_type_string, GRECS_DFLT, &scalar_string }, { "logging", NULL, "Configure logging logging", grecs_type_section, GRECS_DFLT, &logging_setup, 0, NULL, NULL, logging_kwtab }, { "mailbox", NULL, "Mailbox configuration", grecs_type_section, GRECS_DFLT, NULL, 0, NULL, NULL, mailbox_kwtab }, { "program", "name: string", "Subprogram configuration", grecs_type_section, GRECS_DFLT, NULL, 0, cb_program, NULL, program_kwtab }, { "listvar", NULL, "list variable", grecs_type_string, GRECS_LIST, &listvar }, { NULL } }; #define S(s) ((s) ? (s) : "(null)") static void print_logging_setup(struct logging_setup *p) { printf("logging: %d/%s/%s/%d\n", p->use_syslog, S(p->facility), S(p->tag), p->print_priority); } static void print_program(struct program *prog) { printf("Program %s:\n", prog->name); printf("scalar = %s\n", S(prog->scalar_string)); print_logging_setup(&prog->logging_setup); } static int node_ident_cmp(struct grecs_node const *a, struct grecs_node const *b) { return strcmp(a->ident, b->ident); } static void usage(const char *arg, FILE *fp, int code) { fprintf(fp, "usage: %s [-h] [-cfhelp] [-reduce] [-sort] [-print] [-locus] [-noset] file\n", arg); exit(code); } int main(int argc, char **argv) { char *progname = argv[0]; const char *file = NULL; struct grecs_node *tree; int cfhelp = 0; int reduce = 0; int print = 0; int sort = 0; int flags = GRECS_NODE_FLAG_DEFAULT; int dontset = 0; while (--argc) { char *arg = *++argv; if (strcmp(arg, "-cfhelp") == 0) cfhelp = 1; else if (strcmp(arg, "-h") == 0) usage(progname, stdout, 0); else if (strcmp(arg, "-reduce") == 0) reduce = 1; else if (strcmp(arg, "-print") == 0) print = 1; else if (strcmp(arg, "-locus") == 0) flags |= GRECS_NODE_FLAG_LOCUS; else if (strncmp(arg, "-delim=", 7) == 0) flags |= arg[7]; else if (strcmp(arg, "-sort") == 0) sort = 1; else if (strcmp(arg, "-noset") == 0) dontset = 1; else if (arg[0] == '-') usage(progname, stderr, 1); else if (file) usage(progname, stderr, 1); else file = arg; } if ((!file && !cfhelp) || argc) usage(progname, stderr, 1); if (cfhelp) { static char docstring[] = "Sample configuration file structure.\n"; grecs_print_docstring(docstring, 0, stdout); grecs_print_statement_array(main_kwtab, 1, 0, stdout); exit(0); } tree = grecs_parse(file); if (!tree) exit(2); if (reduce) grecs_tree_reduce(tree, main_kwtab, GRECS_AGGR); if (sort) grecs_tree_sort(tree, node_ident_cmp); if (print) { grecs_print_node(tree, flags, stdout); fputc('\n', stdout); } if (dontset) exit(0); if (grecs_tree_process(tree, main_kwtab)) exit(2); grecs_tree_free(tree); printf("Global settings:\n"); printf("scalar = %s\n", S(scalar_string)); if (listvar) { struct grecs_list_entry *ep; printf("listvar ="); for (ep = listvar->head; ep; ep = ep->next) printf(" \"%s\"", (char*)ep->data); putchar('\n'); } print_logging_setup(&logging_setup); if (proglist) { struct grecs_list_entry *ep; printf("Programs configured: %lu\n", (unsigned long) grecs_list_size(proglist)); for (ep = proglist->head; ep; ep = ep->next) print_program(ep->data); } exit(0); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/tests/peek03.at������������������������������������������������������������������0000644�0001750�0001750�00000002104�13244106110�017035� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of grecs -*- Autotest -*- # Copyright (C) 2007-2016 Sergey Poznyakoff # # Grecs 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. # # Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. AT_SETUP(Nested blocks) AT_KEYWORDS([peek peek03]) AT_CHECK([gcfpeek $abs_srcdir/gcf1.conf .program=foo.logging], [0], [.program="foo".logging.syslog: "yes" .program="foo".logging.facility: "local1" ]) AT_CHECK([gcfpeek $abs_srcdir/gcf1.conf .program=bar.logging], [0], [.program="bar".logging.syslog: "no" .program="bar".logging.facility: "local2" .program="bar".logging.tag: "baz" ]) AT_CLEANUP ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/tests/incl03.at������������������������������������������������������������������0000644�0001750�0001750�00000002024�13244106110�017037� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of grecs -*- Autotest -*- # Copyright (C) 2014-2016 Sergey Poznyakoff # # Grecs 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. # # Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([Wildcard inclusion]) AT_KEYWORDS([include incl03]) AT_CHECK([ AT_DATA([i1.inc],[i1 included; ]) AT_DATA([i2.inc],[i2 included; ]) AT_DATA([i3.inc],[i3 included; ]) AT_DATA([test.cf],[before 1; #include "i*.inc" after 1; ]) gcffmt ./test.cf ], [0], [.before: "1" .i1: "included" .i2: "included" .i3: "included" .after: "1" ]) AT_CLEANUP ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/tests/package.m4�����������������������������������������������������������������0000644�0001750�0001750�00000000506�13512402633�017270� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Signature of the current package. m4_define([AT_PACKAGE_NAME], [GNU Direvent]) m4_define([AT_PACKAGE_TARNAME], [direvent]) m4_define([AT_PACKAGE_VERSION], [5.2]) m4_define([AT_PACKAGE_STRING], [GNU Direvent 5.2]) m4_define([AT_PACKAGE_BUGREPORT], [bug-direvent@gnu.org.ua]) m4_define([GRECS_DISTCK_AT], []) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/tests/reduce01.at����������������������������������������������������������������0000644�0001750�0001750�00000001737�13244106110�017371� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of grecs -*- Autotest -*- # Copyright (C) 2007-2016 Sergey Poznyakoff # # Grecs 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. # # Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([Block statement]) AT_KEYWORDS([reduce reduce01]) GRECS_TEST([ block "a" { scalar a; foo 1; } block "b" { foo 3; scalar b; } block "a" { scalar b; } ], [gcffmt -reduce], [0], [.block="b".foo: "3" .block="b".scalar: "b" .block="a".foo: "1" .block="a".scalar: "b" ]) AT_CLEANUP ���������������������������������direvent-5.2/grecs/tests/git.conf�������������������������������������������������������������������0000644�0001750�0001750�00000000505�13244106110�017055� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Sample Git configuration file for Grecs # [core] # Comment repositoryformatversion = 0 filemode = true bare = false # Comment logallrefupdates = true [remote.origin] fetch = +refs/heads/*:refs/remotes/origin/* url = ssh://git.gnu.org.ua/gitroot/grecs.git [branch "master"] remote = origin merge = refs/heads/master �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/tests/format02.at����������������������������������������������������������������0000644�0001750�0001750�00000002431�13244106110�017403� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of grecs -*- Autotest -*- # Copyright (C) 2007-2016 Sergey Poznyakoff # # Grecs 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. # # Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([Custom delimiter]) AT_KEYWORDS([format format02]) AT_CHECK([gcffmt -delim=/ $abs_srcdir/gcf1.conf], [0], [/scalar: "yes" /listvar: ("a", "2", "b", "c") /compound: "stmt" "2" "foo" /mailbox/mailbox-pattern: "maildir:/var/mail;type=index;param=2;user=${user}" /mailbox/mailbox-type: "maildir" /logging/syslog: "yes" /logging/facility: "mail" /program="foo"/logging/syslog: "yes" /program="foo"/logging/facility: "local1" /program="foo"/scalar: "no" /program="bar"/logging/syslog: "no" /program="bar"/logging/facility: "local2" /program="bar"/logging/tag: "baz" /program="bar"/scalar: "25" ]) AT_CLEANUP ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/tests/meta1.conf�����������������������������������������������������������������0000644�0001750�0001750�00000006131�13244106110�017302� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Sample MeTA1 configuration file for Grecs testsuite. hostname = "host.example.org"; smtps { greeting = "220 example.org ESMTP Tossudament alcats\r\n"; log_level = 12; log { facility=mail; ident="smtps"; } flags = { 8bitmime, access }; CDB_gid = 2262; wait_for_server = 4; listen_socket { type=inet; port = 25; } start_action = pass; pass_fd_socket = smtps/smtpsfd; user = meta1s; path = "/usr/local/libexec/smtps"; arguments = "smtps -f /etc/meta1/meta1.conf"; policy_milter { socket { type = inet; address = 127.0.0.1; port = 3333; }; timeout = 1800s; flags = { accept_but_reconnect }; }; io_timeout = 300s; module_timeout = 1000s; auth { flags = { noanonymous }; } } smtps MSA { log_level = 11; log { facility=mail; ident="MSA"; } CDB_gid = 2262; listen_socket { type=inet; port = 587; } start_action = pass; pass_fd_socket = smtps/msafd; user = meta1s; path = "/usr/local/libexec/smtps"; arguments = "smtps -I 1 -N MSA -f /etc/meta1/meta1.conf"; } smtpc { log_level = 12; log { facility=mail; ident="smtpc"; } flags = { read_QUIT_reply, separate_final_dot_and_QUIT, talk_to_myself }; LMTP_socket="lmtpsock"; wait_for_server = 4; start_action = wait; user = meta1c; path = "/usr/local/libexec/smtpc"; arguments = "smtpc -f /etc/meta1/meta1.conf"; } # must be previous to last in the list: started after smar qmgr { log_level = 12; log { facility=mail; ident="qmgr"; } wait_for_server = 4; wait_for_client = 3; start_action = wait; user = meta1q; restart_dependencies = { smtps, MSA, smtpc }; path = "/usr/local/libexec/qmgr"; arguments = "qmgr -f /etc/meta1/meta1.conf"; control_socket = "qmgr/sock"; } # must be last in the list: started first smar { DNS { nameservers={ 10.11.0.1, 10.12.0.1 }; flags = use_connect; } log_level = 12; log { facility=mail; ident="smar"; } nameserver = 10.11.0.1; start_action = wait; user = meta1m; restart_dependencies = { smtps, MSA, qmgr }; path = "/usr/local/libexec/smar"; arguments = "smar -f /etc/meta1/meta1.conf"; map mtdb { type = hash; file = "mt.db"; } mailertable { name = mtdb; flags = { full_address, domain }; } map password { type = passwd; } map userdb { type = socket; path = "/var/spool/meta1/smap/userdb"; mapname = userdb; min_connections = 10; max_connections = 1024; timeout = 5; } map locusr { type = sequence; maps = { password, userdb }; } local_user_map { name = "locusr"; flags = { localpart, local_domains }; } map lum { type = socket; path = "/var/spool/meta1/smap/userdb"; mapname = alias; min_connections = 10; max_connections = 1024; timeout = 6; } map stdal { file = "aliases.db"; type = hash; } map ali { type = sequence; maps = { lum,stdal }; } aliases { name = ali; flags = { localpart, local_domains }; } map acc { type = socket; address = 127.0.0.1; port = 1025; mapname = access; } access_map { name = acc; } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/tests/grecs00.at�����������������������������������������������������������������0000644�0001750�0001750�00000002104�13244106110�017211� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of grecs -*- Autotest -*- # Copyright (C) 2011-2016 Sergey Poznyakoff # # Grecs 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. # # Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([C comments in GRECS-style parser]) AT_KEYWORDS([parser grecs grecs00]) GRECS_TEST([ zone "foo" { type delegation-only; }; /*zone "net" { type delegation-only; };*/ /**/ zone "bar" { type hint; }; /* comment line */ zone "baz" { type delegation-only; }; ], [gcffmt], [0], [.zone="foo".type: "delegation-only" .zone="bar".type: "hint" .zone="baz".type: "delegation-only" ]) AT_CLEANUP ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/tests/bind.conf������������������������������������������������������������������0000644�0001750�0001750�00000004545�13244106110�017216� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Sample Bind configuration file for Grecs testsuite. # Nothing to copyright, really:) acl upd-dyn-vpn { key vpn.; 10.11.0.1; 10.10.0.1; }; acl foo-acl { key foo.; }; options { version "Grecs testsuite"; coresize 0; directory "/etc/namedb"; pid-file "/var/log/bind/named.pid"; allow-transfer { foo-acl; }; allow-query { any; }; serial-query-rate 5; max-journal-size 5m; check-names master warn; check-names slave warn; check-names response ignore; }; logging { channel default_channel { file "/var/log/bind/named.log" versions 9 size 524288; print-time yes; print-severity yes; }; channel debug_channel { file "/var/log/bind/named.run" versions 9 size 524288; print-time yes; print-severity yes; severity dynamic; }; channel security_channel { file "/var/log/bind/security" versions 9 size 524288; print-time yes; print-severity yes; }; channel xfer_in_channel { file "/var/log/bind/named-xfer.in" versions 9 size 524288; print-time yes; }; channel xfer_out_channel { file "/var/log/bind/named-xfer.out" versions 9 size 524288; print-time yes; }; channel lamers_channel { file "/var/log/bind/lamers.log" versions 5 size 524288; print-time yes; print-category yes; }; channel update_channel { file "/var/log/bind/update.log" versions 9 size 524288; print-time yes; print-category yes; severity debug 5; }; channel notify_channel { file "/var/log/bind/notify.log" versions 9 size 524288; print-time yes; print-category yes; }; channel query_channel { file "/var/log/bind/query.log" versions 9 size 524288; print-time yes; }; category security { security_channel; }; category queries { # query_channel; null; }; category default { default_channel; debug_channel; }; category xfer-in { xfer_in_channel; }; category xfer-out { xfer_out_channel; }; category delegation-only { lamers_channel; }; category lame-servers { lamers_channel; }; category update { update_channel; }; category notify { notify_channel; }; }; include "bind.keys"; controls { inet 127.0.0.1 port 953 allow { 127.0.0.1; } keys { "rndc-key"; }; }; view "internal" { match-clients { 10.0.0.0/8; }; include "bind.int.conf"; }; view "external" { include "bind.ext.conf"; include "bind.dlz"; }; # Finis coronat opus �����������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/tests/gcfenum.c������������������������������������������������������������������0000644�0001750�0001750�00000003603�13244106110�017215� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* grecs - Gray's Extensible Configuration System Copyright (C) 2007-2016 Sergey Poznyakoff Grecs 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. Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include <string.h> #include <errno.h> #include <stdlib.h> #include "grecs.h" static void usage(const char *arg, FILE *fp, int code) { fprintf(fp, "usage: %s [-h] [-locus] [-delim=char] [-reduce] file\n", arg); exit(code); } int main(int argc, char **argv) { char *progname = argv[0]; char *file = NULL; struct grecs_node *tree, *node; int flags = GRECS_NODE_FLAG_QUOTE| GRECS_NODE_FLAG_PATH; int reduce = 0; while (--argc) { char *arg = *++argv; if (strcmp(arg, "-locus") == 0) flags |= GRECS_NODE_FLAG_LOCUS; else if (strncmp(arg, "-delim=", 7) == 0) flags |= arg[7]; else if (strcmp(arg, "-reduce") == 0) reduce = 1; else if (strcmp(arg, "-h") == 0) usage(progname, stdout, 0); else if (arg[0] == '-') usage(progname, stderr, 1); else file = arg; } if (!file || argc) usage(progname, stderr, 1); tree = grecs_parse(file); if (!tree) exit(1); if (reduce) grecs_tree_reduce(tree, NULL, 0); for (node = grecs_tree_first_node(tree); node; node = grecs_next_node(node)) { grecs_print_node(node, flags, stdout); fputc('\n', stdout); } grecs_tree_free(tree); exit(0); } �����������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/tests/glob01.at������������������������������������������������������������������0000644�0001750�0001750�00000001632�13244106110�017037� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of grecs -*- Autotest -*- # Copyright (C) 2007-2016 Sergey Poznyakoff # # Grecs 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. # # Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. AT_SETUP(Trailing wildcard) AT_KEYWORDS([peek peek05 glob glob01]) AT_CHECK([gcfpeek -nodesc -match $abs_srcdir/gcf1.conf .logging.*|sed 's/ *$//'], [0], [.logging: .logging.syslog: "yes" .logging.facility: "mail" ]) AT_CLEANUP ������������������������������������������������������������������������������������������������������direvent-5.2/grecs/tests/vercmp.at������������������������������������������������������������������0000644�0001750�0001750�00000002371�13244106110�017250� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of grecs -*- Autotest -*- # Copyright (C) 2007-2016 Sergey Poznyakoff # # Grecs 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. # # Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. AT_SETUP(Version comparator) AT_KEYWORDS(vercmp) AT_CHECK([gcfver 1.0 1.0], [0]) AT_CHECK([gcfver 1.1 1.0], [3]) AT_CHECK([gcfver 2.0 1.0], [3]) AT_CHECK([gcfver 1.0 1.1], [2]) AT_CHECK([gcfver 1.0 2.0], [2]) AT_CHECK([gcfver 1.0a 1.0a], [0]) AT_CHECK([gcfver 1.0b 1.0a], [3]) AT_CHECK([gcfver 1.0a 1.0b], [2]) AT_CHECK([gcfver 1.0.1 1.0], [3]) AT_CHECK([gcfver 1.0.1 1.0.0], [3]) AT_CHECK([gcfver 1.0.0 1.0.1], [2]) AT_CHECK([gcfver 1.0.1a 1.0.0], [3]) AT_CHECK([gcfver 1.0.1a 1.0.0a], [3]) AT_CHECK([gcfver 1.0.1a 1.0.0b], [3]) AT_CHECK([gcfver 1.0.1a 1.0.1b], [2]) AT_CLEANUP �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/tests/locus-meta1.at�������������������������������������������������������������0000644�0001750�0001750�00000002057�13244106110�020107� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of grecs -*- Autotest -*- # Copyright (C) 2007-2016 Sergey Poznyakoff # # Grecs 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. # # Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. AT_SETUP(Locations: meta1) AT_KEYWORDS([locus meta1 meta1-locus00]) AT_DATA([test.cf],[ string = val; mstr = "multi" "line" " string"; list = { foo, bar, baz }; ]) AT_CHECK([gcffmt -type=meta1 -locus test.cf], [0], [test.cf:2.1-12: .string: "val" test.cf:3.1-5.16: .mstr: "multiline string" test.cf:6.1-7.14: .list: ("foo", "bar", "baz") ]) AT_CLEANUP ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/tests/bind.dlz�������������������������������������������������������������������0000644�0001750�0001750�00000002745�13244106110�017062� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Sample Bind configuration include file (3) for Grecs testsuite. # This is a typical (?) DLZ configuraton for BIND. # dlz "DLZ" { database "mysql {host=localhost socket=/var/run/mysql/mysql.sock dbname=Foo user=bind ssl=false} {select r.zone from dns_soa r, dns_acl a where r.zone = '%zone%' and a.network <= inet_aton('%client%') and inet_aton('%client%') <= a.bcast and a.view = r.view } {select r.ttl, r.type, r.mx_priority, case when r.type='TXT' then concat('\"', r.data, '\"') else r.data end from dns_records r, dns_acl a, where r.zone = '%zone%' and r.host = '%record%' and not (r.type = 'SOA' or r.type = 'NS') and a.network <= inet_aton('%client%') and inet_aton('%client%') <= a.bcast and a.view = r.view } {select r.ttl, r.type, r.data, r.resp_person, r.serial, r.refresh, r.retry, r.expire, r.minimum from dns_soa r, dns_acl a where r.zone = '%zone%' and (r.type = 'SOA' or r.type='NS') and a.network <= inet_aton('%client%') and inet_aton('%client%') <= a.bcast and a.view = r.view } {select r.ttl, r.type, r.host, r.mx_priority, case when r.type='TXT' then concat('\"', r.data, '\"') else r.data end from dns_records r, dns_acl a where r.zone = '%zone%' and a.network <= inet_aton('%client%') and inet_aton('%client%') <= a.bcast and a.view = r.view } {select zone from dns_xfr where zone = '%zone%' and client = '%client%'}"; }; ���������������������������direvent-5.2/grecs/tests/peek00.at������������������������������������������������������������������0000644�0001750�0001750�00000001465�13244106110�017043� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of grecs -*- Autotest -*- # Copyright (C) 2007-2016 Sergey Poznyakoff # # Grecs 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. # # Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. AT_SETUP(Peek) AT_KEYWORDS([peek peek00]) AT_CHECK([gcfpeek $abs_srcdir/gcf1.conf .scalar], [0], [.scalar: "yes" ]) AT_CLEANUP �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/COPYING��������������������������������������������������������������������������0000644�0001750�0001750�00000104513�13244106110�015320� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. <one line to give the program's name and a brief idea of what it does.> Copyright (C) <year> <name of author> This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: <program> Copyright (C) <year> <name of author> This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see <http://www.gnu.org/licenses/>. The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read <http://www.gnu.org/philosophy/why-not-lgpl.html>. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/gitid.h��������������������������������������������������������������������������0000644�0001750�0001750�00000000130�13511404021�015523� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#define GRECS_GIT_ID "b06fb7d30415eec1d2efb39286ab96070c724fd4-1562766431-gray@gnu.org" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/am/������������������������������������������������������������������������������0000755�0001750�0001750�00000000000�13512403133�014661� 5����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/am/grecs.m4����������������������������������������������������������������������0000644�0001750�0001750�00000023372�13511403723�016241� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of grecs - Gray's Extensible Configuration System -*- autoconf -*- # Copyright (C) 2007-2019 Sergey Poznyakoff # # Grex 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. # # Grex 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 Grex. If not, see <http://www.gnu.org/licenses/>. # _GRECS_MANGLE_OPTION(NAME) # ------------------------- # Convert NAME to a valid m4 identifier, by replacing invalid characters # with underscores, and prepend the _GRECS_OPTION_ suffix to it. AC_DEFUN([_GRECS_MANGLE_OPTION], [[_GRECS_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _GRECS_SET_OPTION(NAME) # ---------------------- # Set option NAME. AC_DEFUN([_GRECS_SET_OPTION], [m4_define(_GRECS_MANGLE_OPTION([$1]), 1)]) # _GRECS_IF_OPTION_SET(NAME,IF-SET,IF-NOT-SET) # ------------------------------------------- # Check if option NAME is set. AC_DEFUN([_GRECS_IF_OPTION_SET], [m4_ifset(_GRECS_MANGLE_OPTION([$1]),[$2],[$3])]) # _GRECS_OPTION_SWITCH(NAME1,IF-SET1,[NAME2,IF-SET2,[...]],[IF-NOT-SET]) # ------------------------------------------------------------------------ # If NAME1 is set, run IF-SET1. Otherwise, if NAME2 is set, run IF-SET2. # Continue the process for all name-if-set pairs within [...]. If none # of the options is set, run IF-NOT-SET. AC_DEFUN([_GRECS_OPTION_SWITCH], [m4_if([$4],,[_GRECS_IF_OPTION_SET($@)],dnl [$3],,[_GRECS_IF_OPTION_SET($@)],dnl [_GRECS_IF_OPTION_SET([$1],[$2],[_GRECS_OPTION_SWITCH(m4_shift(m4_shift($@)))])])]) # _GRECS_SET_OPTIONS(OPTIONS) # ---------------------------------- # OPTIONS is a space-separated list of Grecs options. AC_DEFUN([_GRECS_SET_OPTIONS], [m4_foreach_w([_GRECS_Option], [$1], [_GRECS_SET_OPTION(_GRECS_Option)])]) # GRECS_SETUP([dir],[OPTIONS],[pp-setup-file]) # dir - Directory in the source tree where grecs has been cloned. # OPTIONS are: # no-preproc Disable the use of preprocessor. # std-pp-setup Install standard pp-setup file. # pp-setup-option Add the --with-pp-setup-file option to the # configuration file. The option allows user to # control whether the pp-setup file is installed. # tests Build tests. # getopt Add getopt.m4 to the distribution. # git2chg Add git2chg.awk to the distribution. # syntax-doc Add doc/grecs-syntax.texi to the distribution. # install Build installable library. # shared Build shared (convenience) library. # install-headers [with "shared"] Install Grecs headers to # GRECS_INCLUDE_DIR. # tree-api Use alternative signature of callback functions, # passing a pointer to grecs_node_t as an argument, # instead of pointers to the value and locus. # sockaddr-list Sockaddr type keeps a singly-linked list of addresses # returned by getaddrinfo. # json Compile JSON support # # The pp-setup-file argument supplies the pathname of the preprocessor # setup file in the source tree. It is ignored if std-pp-setup option is # given. # # If neither std-pp-setup option, nor pp-setup-file argument are supplied, # no preprocessor setup file is installed. AC_DEFUN([GRECS_SETUP],[ m4_pushdef([grecsdir],m4_if($1,[.],,$1,,[grecs/],$1/)) AC_PROG_YACC AM_PROG_LEX AC_HEADER_SYS_WAIT AC_SUBST([GRECS_SUBDIR],m4_if($1,,grecs,$1)) _GRECS_SET_OPTIONS([$2]) # ********************** # Preprocessor # ********************** _GRECS_IF_OPTION_SET([no-preproc], [use_ext_pp=no], [AC_ARG_WITH([preprocessor], AC_HELP_STRING([--without-preprocessor], [do not use external preprocessor]), [case "${withval}" in yes) use_ext_pp=yes ;; no) use_ext_pp=no ;; *) AC_MSG_ERROR(bad value ${withval} for --with-preprocessor) ;; esac],[use_ext_pp=yes])]) if test $use_ext_pp != no; then # Check for default preprocessor AC_ARG_VAR([DEFAULT_PREPROCESSOR], [Set default preprocessor name]) if test -z "$DEFAULT_PREPROCESSOR" ; then DEFAULT_PREPROCESSOR="m4 -s" fi save_PATH=$PATH PREPROC_OPTIONS=`echo $DEFAULT_PREPROCESSOR | sed -n 's/[[^ ]][[^ ]]* //p'` case "$DEFAULT_PREPROCESSOR" in /*) PATH=`expr $DEFAULT_PREPROCESSOR : '\(.*\)/.*'`:$PATH DEFAULT_PREPROCESSOR=`expr $DEFAULT_PREPROCESSOR : '.*/\(.*\)'`;; esac AC_PATH_PROG(PPBIN, $DEFAULT_PREPROCESSOR) if test -n "$PPBIN"; then DEFAULT_PREPROCESSOR="$PPBIN $PREPROC_OPTIONS" _GRECS_IF_OPTION_SET([std-pp-setup], [PP_SETUP_FILE='pp-setup'], [m4_if([$3],,[PP_SETUP_FILE=],[PP_SETUP_FILE='$3'])]) AC_SUBST(PP_SETUP_FILE) if test -n "$PP_SETUP_FILE"; then _GRECS_IF_OPTION_SET([pp-setup-option], [AC_ARG_WITH([pp-setup-file], AC_HELP_STRING([--with-pp-setup-file], [install the default pp-setup file]), [case "${withval}" in yes) ;; no) PP_SETUP_FILE=;; *) AC_MSG_ERROR([bad value ${withval} for --with-pp-setup-file]) ;; esac])], [case $PPBIN in *m4) ;; # Install default pp-setup *) PP_SETUP_FILE=;; # Skip it esac]) fi DEFAULT_PREPROCESSOR="\\\"$DEFAULT_PREPROCESSOR\\\"" else AC_MSG_WARN([requested preprocessor command "$DEFAULT_PREPROCESSOR" not found]) AC_MSG_WARN([preprocessing disabled]) DEFAULT_PREPROCESSOR=NULL fi PATH=$save_PATH else DEFAULT_PREPROCESSOR=NULL fi _GRECS_IF_OPTION_SET([tests], [m4_pushdef([TESTDIR],grecsdir[tests]) AC_CONFIG_TESTDIR(TESTDIR) AC_CONFIG_FILES(TESTDIR/Makefile TESTDIR/atlocal) m4_popdef([TESTDIR]) AM_MISSING_PROG([AUTOM4TE], [autom4te]) GRECS_TESTDIR=tests GRECS_EXTRA_DIST='$(WORDSPLIT_TEST)' ]) _GRECS_IF_OPTION_SET([getopt],[ AC_CHECK_HEADERS([getopt.h]) AC_CHECK_FUNCS([sysconf getdtablesize getopt_long]) GRECS_BUILD_AUX="build-aux/getopt.m4" ]) _GRECS_IF_OPTION_SET([git2chg],[GRECS_BUILD_AUX="$GRECS_BUILD_AUX build-aux/git2chg.awk"]) AM_CONDITIONAL([GRECS_COND_META1_PARSER], _GRECS_OPTION_SWITCH([parser-meta1],[true], [all-parsers],[true], [false])) AM_CONDITIONAL([GRECS_COND_BIND_PARSER], _GRECS_OPTION_SWITCH([parser-bind],[true], [all-parsers],[true], [false])) AM_CONDITIONAL([GRECS_COND_DHCPD_PARSER], _GRECS_OPTION_SWITCH([parser-dhcpd],[true], [all-parsers],[true], [false])) AM_CONDITIONAL([GRECS_COND_GIT_PARSER], _GRECS_OPTION_SWITCH([parser-git],[true], [all-parsers],[true], [false])) AM_CONDITIONAL([GRECS_COND_INSTALLHEADERS], _GRECS_IF_OPTION_SET([install-headers],[true],[false])) AM_CONDITIONAL([GRECS_COND_SOCKADDR_LIST], _GRECS_IF_OPTION_SET([sockaddr-list],[true],[false])) AM_CONDITIONAL([GRECS_COND_JSON], _GRECS_IF_OPTION_SET([json],[true],[false])) AC_SUBST([GRECS_SOCKADDR_LIST]) _GRECS_IF_OPTION_SET([sockaddr-list],[GRECS_SOCKADDR_LIST=1], [GRECS_SOCKADDR_LIST=0]) AC_SUBST([GRECS_TREE_API]) _GRECS_IF_OPTION_SET([tree-api],[GRECS_TREE_API=1],[GRECS_TREE_API=0]) AC_SUBST([GRECS_SRCDIR],$1) AC_SUBST([GRECS_BUILD_AUX]) AC_SUBST([GRECS_INCLUDES]) AC_SUBST([GRECS_TESTDIR]) AC_SUBST([GRECS_EXTRA_DIST]) AC_SUBST([GRECS_LDADD]) AC_SUBST([GRECS_DOCDIR]) AC_SUBST([GRECS_CHANGELOG]) AC_SUBST([GRECS_DISTCK_AT]) AC_SUBST([GRECS_README]) AC_SUBST([GRECS_INCLUDES],['-I$(top_srcdir)/]grecsdir[include] [-I$(top_srcdir)/]grecsdir[wordsplit] [-I$(top_builddir)/]grecsdir[include]') AC_SUBST([GRECS_HOST_PROJECT_INCLUDES]) AC_SUBST([GRECS_HOST_PROJECT_LDADD]) AC_SUBST([GRECS_DISTDOC]) AC_SUBST([GRECS_INCLUDE_DIR],['$(pkgincludedir)']) _GRECS_OPTION_SWITCH([install],[ LT_INIT GRECS_BUILD_TYPE=install GRECS_LDADD=['$(top_builddir)/]grecsdir[src/libgrecs.la'] GRECS_DOCDIR='doc' GRECS_EXTRA_DIST="${GRECS_EXTRA_DIST}${GRECS_EXTRA_DIST:+ }\$(WORDSPLIT_DOC)" GRECS_CHANGELOG= GRECS_DISTCK_AT=distck.at GRECS_README=README.standalone AC_CONFIG_FILES(grecsdir[src/Makefile]:grecsdir[src/Make-inst.in] grecsdir[doc/Makefile]) ],[shared],[ LT_INIT GRECS_BUILD_TYPE=shared GRECS_LDADD=['$(top_builddir)/]grecsdir[src/libgrecs.la'] GRECS_CHANGELOG='#' GRECS_README=README.submodule _GRECS_IF_OPTION_SET([syntax-doc],[GRECS_DISTDOC=doc/grecs-syntax.texi]) AC_CONFIG_FILES(grecsdir[src/Makefile]:grecsdir[src/Make-shared.in]) ],[ GRECS_BUILD_TYPE=static GRECS_LDADD=['$(top_builddir)/]grecsdir[src/libgrecs.a'] GRECS_CHANGELOG='#' GRECS_README=README.submodule _GRECS_IF_OPTION_SET([syntax-doc],[GRECS_DISTDOC=doc/grecs-syntax.texi]) AC_CONFIG_FILES(grecsdir[src/Makefile]:grecsdir[src/Make-static.in]) ]) AM_CONDITIONAL([GRECS_COND_BUILD_INSTALL],[test $GRECS_BUILD_TYPE = install]) AM_CONDITIONAL([GRECS_COND_BUILD_SHARED],[test $GRECS_BUILD_TYPE = shared]) AM_CONDITIONAL([GRECS_COND_BUILD_STATIC],[test $GRECS_BUILD_TYPE = static]) AC_CONFIG_FILES(grecsdir[Makefile] grecsdir[include/Makefile] grecsdir[include/grecs/Makefile] grecsdir[include/grecs/types.h]:grecsdir[include/grecs/types.h.in]) m4_popdef([grecsdir]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/NEWS�����������������������������������������������������������������������������0000644�0001750�0001750�00000002032�13244106110�014755� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Grecs NEWS -- history of user-visible changes. 2016-07-04 Copyright (C) 2011-2016 Sergey Poznyakoff See the end of file for copying conditions. Please send libgrecs bug reports to <gray+grecs@gnu.org.ua> Version 1.0 (Git) ========================================================================= Copyright information: Copyright (C) 2011-2016 Sergey Poznyakoff Permission is granted to anyone to make or distribute verbatim copies of this document as received, in any medium, provided that the copyright notice and this permission notice are preserved, thus giving the recipient permission to redistribute in turn. Permission is granted to distribute modified versions of this document, or of portions of it, under the above conditions, provided also that they carry prominent notices stating who last changed them. Local variables: mode: outline paragraph-separate: "[ ]*$" eval: (add-hook 'write-file-hooks 'time-stamp) time-stamp-start: "changes. " time-stamp-format: "%:y-%02m-%02d" time-stamp-end: "\n" end: ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/build-aux/�����������������������������������������������������������������������0000755�0001750�0001750�00000000000�13512403133�016156� 5����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/build-aux/git2chg.awk������������������������������������������������������������0000644�0001750�0001750�00000003206�13244106110�020207� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of grecs # Copyright (C) 2007-2016 Sergey Poznyakoff # # Grecs 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. # # Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. BEGIN { if (since) split(since,since_a,"-") } function timeok(t, a) { if (!since) return 1 split(t,a,"-") if (a[1] < since_a[1]) return 0 if (a[1] > since_a[1]) return 1 if (a[2] < since_a[2]) return 0 if (a[2] > since_a[2]) return 1 return a[3] > since_a[3] } /^[0-9]+ .* +<[^>]+>/ { s = strftime("%F", $1) if (!timeok(s)) exit sub(/^[0-9]+ +/,"") if (s == datestr && author == $0) next datestr = s author = $0 if (runlen) { runlen = 0; print "" } printf("%s %s\n", datestr, author) next } /^Signed-off-by:/ { next } /^<unknown>$/ { next } NF==0 { runlen++ next } { if (runlen) { runlen = 0; print "" } print "\t" $0 } END { if (append) { print "" while ((getline < append) > 0) { if (match($0, /^Local *Variables:/)) break print } } print "\f" # Make sure Emacs won't recognize this line: print "Local", "Variables:" print "mode: change-log" print "version-control: never" print "buffer-read-only: t" print "End:" } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/build-aux/yyrename���������������������������������������������������������������0000755�0001750�0001750�00000006512�13244106110�017736� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Rename yy.* identifiers to avoid name clashes. This file is part of Grecs. # Copyright (C) 2011-2016 Sergey Poznyakoff # # Grecs 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. # # Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. # Usage: yyrename [-f "OUTFILE [OUTFILE...]"] COMMAND INFILE # Makefile.am: # LEXCOMPILE = yyrename -f $(LEX_OUTPUT_ROOT).c \ # '$(LEX) $(LFLAGS) $(AM_LFLAGS)' # YACCCOMPILE = yyrename '$(YACC) $(YFLAGS) $(AM_YFLAGS)' # # This script runs COMMAND with INFILE as its argument and scans # OUTFILEs for identifiers starting with 'yy'. It then renames these # identifiers by replacing 'yy' with the selected prefix. # # The prefix is looked up in the file yytrans, located in the INFILE's # directory. If this file does not exist, the prefix is constructed # by concatenating the string 'grecs_' and the ``root name''. The root # name is built by removing '-lex.l' or '-gram.y' from the base name. # If the latter does not end in any of these, the root name # is constructed by removing the suffix from the base name. # # The yytrans file is a line-oriented lookup table. Empty lines are # ignored, usual UNIX comment lines are honored. The remaining lines # shall consist of two words separated by any amount of whitespace. # The first word is a look-up key, the second one provides a translation # (yy replacement) for that key. # # Two look-ups are tried: first the base name and then the root name. # If both result in a non-empty replacement, the former is preferred # over the latter. # # The -f option supplies a list of output file names generated by COMMAND. # If not supplied, the following defaults are used: y.tab.c and y.tab.h, if # INFILE ends in '.y', and yy.lex.c, if it ends in '.l'. If INFILE does not # end in any of these suffixes, error is reported. # # BUGS: Any occurrence of 'yy' is replaced, not only 'yy' prefixes. # case $1 in -f) files=$2 shift shift esac if test $# -ne 2; then echo >&2 "usage: yyrename [-f "OUTFILE [OUTFILE...]"] COMMAND INFILE" exit 1 fi base=`expr "$2" : '.*/\(.*\)\.[ly]'` dir=`dirname "$2"` case $2 in *.y) test -z "$files" && files="y.tab.c y.tab.h" root=`expr "$2" : '.*/\(.*\)-gram\.y'`;; *.l) test -z "$files" && files=lex.yy.c root=`expr "$2" : '.*/\(.*\)-lex\.l'`;; *) if test -z "$files"; then echo >&2 "$0: suffix unknown, files must be given (use -f)" exit 1 fi root=$base esac if test -f $dir/yytrans; then pfx=`awk ' { sub(/#.*$/,"") } NF == 2 && $1=="'$base'" { exact=$2 } NF == 2 && $1=="'$root'" { root=$2 } { next } END { print exact ? exact : root ? root : "" }' $dir/yytrans` else pfx= fi if test -z "$pfx"; then pfx=grecs_`echo $root | tr .- __` fi eval $* || exit $? for file in $files do mv $file ${file}.tmp sed -e '/^#line/b' -e '/^# *[0-9]/b' -e "s/yy/$pfx/g" ${file}.tmp > $file rm ${file}.tmp done ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/build-aux/getopt.m4��������������������������������������������������������������0000644�0001750�0001750�00000043422�13511403723�017733� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������dnl This file is part of grecs dnl Copyright (C) 2007-2018 Sergey Poznyakoff dnl dnl Grecs is free software; you can redistribute it and/or modify dnl it under the terms of the GNU General Public License as published by dnl the Free Software Foundation; either version 3, or (at your option) dnl any later version. dnl dnl Grecs is distributed in the hope that it will be useful, dnl but WITHOUT ANY WARRANTY; without even the implied warranty of dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the dnl GNU General Public License for more details. dnl dnl You should have received a copy of the GNU General Public License dnl along with Grecs. If not, see <http://www.gnu.org/licenses/>. divert(-1) changequote([<,>]) changecom(/*,*/) dnl Diversion channels define([<__DIV_OPTKEYS__>],1)dnl option keys define([<__DIV_OPTDECL__>],2)dnl struct option declarations define([<__DIV_HELPDECL__>],3)dnl grecs_opthelp declarations define([<__DIV_SWITCH__>],4)dnl switch statement body define([<__DIV_STATIC__>],5)dnl module static data dnl Special macros that can be set during expansion pushdef([<__GETOPT_DEFINED__>]) pushdef([<__OPTIONS_END_DEFINED__>]) pushdef([<__GETOPT_LASTOPT_LABEL__>]) define([<__GETOPT_LONG_TAG>]) define([<__GETOPT_SHORT_TAG>]) define([<WITH_DIVERSION>],[<ifelse([<$#>],0,[<[<$0>]>],[<dnl pushdef([<__GETOPT_DIVERSION__>],divnum)dnl divert([<$1>])$2dnl divert(__GETOPT_DIVERSION__)dnl popdef([<__GETOPT_DIVERSION__>])>])>]) dnl _getopt_mangle_option(NAME) dnl --------------------------- dnl Convert NAME to a valid m4 identifier, by replacing invalid characters dnl with underscores, and prepend the _GETOPT_OPTION_ suffix to it. define([<_getopt_mangle_option>], [<[<_GETOPT_OPTION_>]patsubst($1, [<[^a-zA-Z0-9_]>], [<_>])>]) dnl _getopt_set_option(NAME[=VAL]) dnl ------------------------------ dnl Set option NAME. define([<_getopt_set_option>], [<ifelse(index([<$1>],=),-1,[<define(_getopt_mangle_option($1))>], [<define(regexp([<$1>],\([^=]+\)=\(.*\), [<_getopt_mangle_option(\1),[<\2>]>]))>])>]) dnl _getopt_get_option(NAME[,DEFAULT]) dnl ---------------------------------- define([<_getopt_get_option>], [<_getopt_if_option_set($1,[<indir(_getopt_mangle_option($1))>],[<$2>])>]) dnl _getopt_if_option_set(NAME,IF-SET,IF-NOT-SET) dnl --------------------------------------------- dnl Check if option NAME is set. define([<_getopt_if_option_set>], [<ifdef(_getopt_mangle_option([<$1>]),[<$2>],[<$3>])>]) dnl _getopt_if_option_null(NAME,IF-NULL,IF-NOT-NULL) dnl ------------------------------------------------ dnl Check if option NAME is set. define([<_getopt_if_option_null>], [<ifelse(indir(_getopt_mangle_option([<$1>])),,[<$2>],[<$3>])>]) dnl _getopt_option_switch(NAME1,IF-SET1,[NAME2,IF-SET2,[...]],[IF-NOT-SET]) dnl ------------------------------------------------------------------------ dnl If NAME1 is set, run IF-SET1. Otherwise, if NAME2 is set, run IF-SET2. dnl Continue the process for all name-if-set pairs within [...]. If none dnl of the options is set, run IF-NOT-SET. define([<_getopt_option_switch>], [<ifelse([<$4>],,[<_getopt_if_option_set($@)>], [<$3>],,[<_getopt_if_option_set($@)>], [<_getopt_if_option_set([<$1>],[<$2>], [<_getopt_option_switch(shift(shift($@)))>])>])>]) dnl _getopt_if_option_val(NAME,val,IF-TRUE,IF-FALSE) dnl ------------------------------------------------ dnl Check if option NAME is set. define([<_getopt_if_option_val>], [<ifelse(_getopt_get_option([<$1>]),[<$2>],[<$3>],[<$4>])>]) define([<__getopt_switch_option_val>], [<ifelse([<$#>],2,[<$2>],dnl [<$#>],3,[<ifelse([<$1>],[<$2>],[<$3>])>],dnl [<ifelse([<$1>],[<$2>],[<$3>],dnl [<__getopt_switch_option_val([<$1>],shift(shift(shift($@))))>])>])>]) dnl _getopt_switch_option_val(NAME,val1,IF-VAL1,val2,IF-VAL2...,ELSE) dnl ----------------------------------------------------------------- dnl Check if option NAME is set. define([<_getopt_switch_option_val>], [<pushdef([<val>],[<_getopt_get_option($1)>])dnl __getopt_switch_option_val(val, shift($@))[<>]dnl popdef([<val>])>]) dnl _getopt_set_options(OPTION[,OPTION...]) dnl --------------------------------------- dnl Set options given as arguments. define([<_getopt_set_options>], [<ifelse([<$1>],,, [<_getopt_set_option([<$1>]) _getopt_set_options(shift($@))>])>]) dnl __getopt_format_authors(name[,name...]) dnl --------------------------------------- define([<__getopt_format_authors>],dnl [<ifelse([<$1>],,NULL,[<"$1", __getopt_format_authors(shift($@))>])>]) dnl __getopt_upcase(ARGS...) dnl ------------------------ dnl Concatenate and convert ARGS to upper case. dnl define([<__getopt_upcase>], [<translit([<$*>], [<a-z>], [<A-Z>])>]) dnl __getopt_concat(ARGS...) dnl ------------------------ dnl Concatenate arguments, inserting ", " between each pair of them. dnl define([<__getopt_concat>],[<ifelse([<$#>],1,[<$1>],[<$1, __getopt_concat(shift($@))>])>]) dnl __getopt_flushleft(ARGS...) dnl --------------------------- dnl Concatenate ARGS and remove any leading whitespace dnl define([<__getopt_flushleft>], [<patsubst([<__getopt_concat($*)>], [<^[ ]+>])>]) dnl __getopt_chop(ARGS...) dnl ---------------------- dnl Concatenate ARGS and remove any trailing whitespace dnl define([<__getopt_chop>], [<patsubst([<$*>], [<[ ]+$>])>]) dnl __getopt_escape(ARGS...) dnl ------------------------ dnl Concatenate ARGS and escape any occurrences of double-quotes with dnl backslashes. dnl define([<__getopt_escape>], [<patsubst([<__getopt_concat($*)>],[<[\"]>],[<\\\&>])>]) dnl __getopt_prep(ARG) dnl ------------------ dnl Prepare ARG for including in C strings: replace newlines and any dnl preceding and following whitespace by a single space character, remove dnl leading whitespace, and escape double-quotes. dnl define([<__getopt_prep>], [<__getopt_escape(__getopt_flushleft(patsubst([<$1>],[<[ ]* +[ ]*>],[< >])))>]) dnl __GETOPT_SHORT_OPTS dnl ------------------- dnl Accumulator for the 3rd argument of getopt_long dnl define([<__GETOPT_SHORT_OPTS>],[<_getopt_if_option_set([<nopermute>],+)>]) dnl GROUP(STRING) dnl ------------- dnl Begin a named group of options dnl define([<GROUP>],[<ifelse([<$#>],0,[<[<$0>]>],[<dnl WITH_DIVERSION(__DIV_HELPDECL__,[<dnl { NULL, NULL, 0, N_("__getopt_prep([<$1>])") }, >])>])>]) # __getopt_quote(args) - convert args to single-quoted string define([<__getopt_quote>], [<ifelse([<$*>], [<>], [<>], [<[<$*>]>])>]) define([<__getopt_dquote>], [<ifelse([<$*>], [<>], [<>], [<[<$@>]>])>]) # __getopt_ifempty(LIST, IF-TRUE [, IF-FALSE]) # -------------------------------------------- # Expands to IF-TRUE if LIST is not empty, otherwise to IF-FALSE. # define([<__getopt_ifempty>], [<ifelse([<$1>],[<>],[<$2>],[<$3>])>]) define([<__GATHER_OPTIONS>],[< pushdef([<__GETOPT_KEY>],ifelse([<$2>],,[<OPTION_>]__getopt_upcase(patsubst($1,-,_)),'$2')) ifelse([<$2>],,[< WITH_DIVERSION(__DIV_OPTKEYS__,[<dnl __GETOPT_KEY, >])>]) define([<__GETOPT_SELECTOR>],ifdef([<__GETOPT_SELECTOR>],__GETOPT_SELECTOR) case __GETOPT_KEY:) ifelse([<$1>],,,[< WITH_DIVERSION(__DIV_OPTDECL__,[<dnl { "$1", __GETOPT_ARGTYPE, 0, __GETOPT_KEY }, >])>]) dnl define([<__GETOPT_SHORT_OPTS>],__getopt_dquote(__GETOPT_SHORT_OPTS[<>]dnl ifelse([<$2>],,,[<$2>]ifelse(__GETOPT_ARGTYPE,[<no_argument>],,__GETOPT_ARGTYPE,[<required_argument>],:,__GETOPT_ARGTYPE,[<optional_argument>],::)))) dnl ifelse([<$1>],,,dnl [<define([<__GETOPT_LONG_TAG>], __getopt_ifempty(__getopt_quote(__GETOPT_LONG_TAG),__getopt_dquote(__getopt_dquote(--$1)),[<__getopt_quote(__getopt_dquote(__GETOPT_LONG_TAG), __getopt_dquote([< --$1>]))>]))>]) ifelse([<$2>],,,dnl [<define([<__GETOPT_SHORT_TAG>], __getopt_ifempty(__getopt_quote(__GETOPT_SHORT_TAG),__getopt_dquote(__getopt_dquote(-$2)),[<__getopt_quote(__getopt_dquote(__GETOPT_SHORT_TAG), __getopt_dquote([< -$2>]))>]))>]) popdef([<__GETOPT_KEY>]) >]) dnl CPP(statement) dnl -------------- dnl Inserts a CPP statement to all diversions dnl define([<CPP>],[<WITH_DIVERSION(__DIV_OPTKEYS__,[<dnl $1 >]) WITH_DIVERSION(__DIV_OPTDECL__,[<dnl $1 >]) WITH_DIVERSION(__DIV_HELPDECL__,[<dnl $1 >]) WITH_DIVERSION(__DIV_SWITCH__,[<dnl $1 >]) WITH_DIVERSION(__DIV_STATIC__,[<dnl $1 >])>]) dnl OPTION(long-opt, short-opt, [arg], [descr]) dnl ------------------------------------------- dnl Introduce a command line option. Arguments: dnl long-opt Long option. dnl short-opt Short option (a single char) dnl (At least one of long-opt or short-opt must be present) dnl dnl Optional arguments: dnl arg Option argument. dnl descr Option description dnl dnl If arg is absent, the option does not take any arguments. If arg is dnl enclosed in square brackets, the option takes an optional argument. dnl Otherwise, the argument is required. dnl dnl If descr is not given the option will not appear in the --help and dnl --usage outputs. dnl define([<OPTION>],[<ifelse([<$#>],0,[<[<$0>]>],[< pushdef([<__GETOPT_LONG_TAG>]) pushdef([<__GETOPT_SHORT_TAG>]) pushdef([<__GETOPT_SELECTOR>]) pushdef([<__GETOPT_ARGNAME>],[<$3>]) pushdef([<__GETOPT_HIDDEN>],ifelse([<$4>],,1,0)) pushdef([<__GETOPT_DOCSTRING>],[<__getopt_prep([<$4>])>]) pushdef([<__GETOPT_ARGTYPE>],[<ifelse([<$3>],,[<no_argument>],dnl patsubst([<$3>],[<\[.*\]>]),,[<optional_argument>],dnl [<required_argument>])>]) __GATHER_OPTIONS($@) define([<BEGIN>],[<__GETOPT_API_BEGIN>]) >])>]) dnl ALIAS(long-opt, short-opt) dnl -------------------------- dnl Declare aliases for the previous OPTION statement. dnl long-opt Long option. dnl short-opt Short option (a single char) dnl (At least one of long-opt or short-opt must be present) dnl An OPTION statement may be followed by any number of ALIAS statements. dnl define([<ALIAS>],[<ifelse([<$#>],0,[<[<$0>]>],[< __GATHER_OPTIONS($1,$2) >])>]) dnl BEGIN dnl ----- dnl Start an action associated with the declared option. Must follow OPTION dnl statement, with optional ALIAS statements in between. dnl define([<__GETOPT_API_BEGIN>],[< undefine([<BEGIN>]) define([<END>],[<__GETOPT_API_END>]) define([<LASTOPT>],[<__GETOPT_API_LASTOPT>]) ifelse(__GETOPT_HIDDEN,1,,[< WITH_DIVERSION(__DIV_HELPDECL__,[<dnl { #ifdef HAVE_GETOPT_LONG "__getopt_ifempty(__getopt_quote(__GETOPT_SHORT_TAG),__getopt_quote(__GETOPT_LONG_TAG),[<__getopt_quote(__GETOPT_SHORT_TAG)__getopt_ifempty(__getopt_quote(__GETOPT_LONG_TAG),,[<, __getopt_quote(__GETOPT_LONG_TAG)>])>])", #else "__GETOPT_SHORT_TAG", #endif ifelse(__GETOPT_ARGNAME,,[<NULL, 0>], [<ifelse(__GETOPT_ARGTYPE,[<optional_argument>], [<N_(>]"[<patsubst(__GETOPT_ARGNAME,[<\[\(.*\)\]>],[<\1>])>][<"), 1>],[<N_("__GETOPT_ARGNAME"), 0>])>]), N_("__GETOPT_DOCSTRING") }, >])>]) popdef([<__GETOPT_ARGTYPE>]) popdef([<__GETOPT_ARGNAME>]) popdef([<__GETOPT_DOCSTRING>]) popdef([<__GETOPT_HIDDEN>]) divert(__DIV_SWITCH__)dnl popdef([<__GETOPT_LONG_TAG>])dnl popdef([<__GETOPT_SHORT_TAG>])dnl __GETOPT_SELECTOR { >]) dnl END dnl --- dnl Finish the associated action dnl define([<__GETOPT_API_END>],[< break; } divert(-1) undefine([<END>]) undefine([<ALIAS>]) undefine([<LASTOPT>]) popdef([<__GETOPT_SELECTOR>])>]) dnl OPTNODE(name, value) dnl -------------------- define([<OPTNODE>],[<ifelse([<$#>],0,[<[<$0>]>],[<dnl WITH_DIVERSION(__DIV_STATIC__,[< static struct grecs_node *cmdline_tree; >]); do { struct grecs_node *node = grecs_node_from_path($1, $2); if (!cmdline_tree) cmdline_tree = node; else grecs_node_bind(cmdline_tree, node, 0); } while(0) >])>]) dnl LASTOPT() dnl --------- dnl Stop option processing (as if "--" has been encountered) define([<__GETOPT_API_LASTOPT>],[<dnl pushdef([<__GETOPT_LASTOPT_LABEL__>],[<lastoptlab: popdef([<__GETOPT_LASTOPT_LABEL__>])>])dnl goto lastoptlab>]) dnl GETOPT(argc, argv, [long_index], [onerr]) dnl ----------------------------------------- dnl Emit option parsing code. Arguments: dnl dnl argc Name of the 1st argument to getopt_long. dnl argv Name of the 2nd argument to getopt_long. dnl long_index 5th argument to getopt_long. If not given, dnl NULL will be passed. dnl onerr Action to take if parsing fails. dnl define([<GETOPT>],[<ifelse([<$#>],0,[<[<$0>]>],[<dnl pushdef([<__GETOPT_DEFINED__>],1) { int c; optind = 0; #ifdef HAVE_GETOPT_LONG while ((c = getopt_long($1, $2, "__GETOPT_SHORT_OPTS", long_options, NULL)) != EOF) #else while ((c = getopt($1, $2, "__GETOPT_SHORT_OPTS")) != EOF) #endif { switch (c) { default: ifelse([<$4>],,,[<$4;>])dnl exit(EX_USAGE); undivert(__DIV_SWITCH__) } } __GETOPT_LASTOPT_LABEL__()dnl ifelse([<$3>],,[< if (optind < argc) { fprintf(stderr, "%s: unexpected arguments\n", $2[0]); exit(EX_USAGE); } >],[<$3 = optind;>]) ifelse(__GETOPT_CMDLINE_TREE_NEEDED__,1,[< if (cmdline_tree) { struct grecs_node *rn = grecs_node_create(grecs_node_root, NULL); rn->down = cmdline_tree; cmdline_tree = rn; } >])dnl } >])>]) define([<_getopt_sc_array>], [<ifelse([<$1>],,,[<[<"$1", >]_getopt_sc_array(shift($@))>])>]) define([<STDFUNC>],[<ifelse([<$#>],0,[<[<$0>]>],[< WITH_DIVERSION(__DIV_STATIC__,[< ifelse([<$3>],,,[< static char *subcommands[] = { _getopt_sc_array($3) NULL };>]) #ifndef PACKAGE_URL # define PACKAGE_URL NULL #endif static struct grecs_proginfo proginfo = { $2, /* progname */ ifelse([<$3>],,NULL,subcommands), /* subcommands */ ifelse([<$4>],,"",N_("$4")), /* docstring */ ifelse([<$5>],,"",N_("$5")), /* args_doc */ opthelp, /* opthelp */ sizeof(opthelp)/sizeof(opthelp[0]), /* optcount */ NULL, /* print_help_hook */ NULL, /* print_version_hook */ PACKAGE_NAME, /* package */ PACKAGE_VERSION, /* version */ NULL, /* license */ _getopt_if_option_set([<copyright_year>],dnl "[<_getopt_get_option(copyright_year)>]",NULL),/* copyright_year */ _getopt_if_option_set([<copyright_holder>],dnl "[<_getopt_get_option(copyright_holder)>]",NULL), /* copyright_holder */ NULL, /* *authors */ "<" PACKAGE_BUGREPORT ">", /* bug_address */ PACKAGE_URL, /* url */ NULL /* epilogue */ }; _getopt_if_option_set([<program_version>],dnl [<const char *_getopt_if_option_null(program_version,program_version,[<_getopt_get_option(program_version)>]) = $2 " (" PACKAGE_NAME ") " PACKAGE_VERSION; >])>])>])>]) dnl OPTIONS_BEGIN(PROGNAME, DOCSTR, [ARGDOC], [OPTS...]) dnl ---------------------------------------------------- dnl Begins option definition section. Arguments: dnl PROGNAME - canonical program name, dnl DOCSTR - usage string to be displayed in --help output. dnl ARGDOC - docstring for arguments dnl dnl Optional arguments (OPTS): dnl nostdincl - don't emit C include statements for standard include files dnl nopermute - don't permute arguments, i.e. don't accept intermixed dnl optional and positional arguments dnl dnl gnu - emit code for --help (-h), --version (-V) and --usage dnl options. dnl Options bellow modify the effect of the 'gnu' option: dnl dnl nousage - disable support for the --usage option dnl noversion - disable support for the --version option dnl dnl copyright_year=Y dnl Year, or range, or list of years to display in dnl the copyright statement. Default is 2012 (why?) dnl copyright_holder=NAME dnl Copyright holder name. Default is 'Free Software Foundation, dnl inc.' dnl program_version=V dnl Version string. Defaults to PACKAGE_VERSION autoconf define. dnl define([<OPTIONS_BEGIN>],[<ifelse([<$#>],0,[<[<$0>]>], [<divert(-1) _getopt_set_options(shift(shift(shift($@)))) pushdef([<__GETOPT_EXPECT_ARGS__>],ifelse(__getopt_quote($3),,0,1)) _getopt_if_option_set([<gnu>], [<STDFUNC([<$1 " (" PACKAGE_NAME ") " PACKAGE_VERSION>], [<$1>], [<>], [<$2>], [<$3>])>])>])>]) define([<OPTIONS_COMMAND_BEGIN>],[<ifelse([<$#>],0,[<[<$0>]>], [<divert(-1) _getopt_set_options(shift(shift(shift(shift($@))))) pushdef([<__GETOPT_EXPECT_ARGS__>],ifelse(__getopt_quote($3),,0,1)) _getopt_if_option_set([<gnu>], [<STDFUNC([<$1 " (" PACKAGE_NAME ") " PACKAGE_VERSION>], [<$1>], [<$2>], [<$3>], [<$4>])>]) >])>]) define([<OPTIONS_END>],[< pushdef([<__OPTIONS_END_DEFINED__>],1) _getopt_if_option_set([<gnu>],[< GROUP([<Other options>]) OPTION([<help>],h,,[<Give this help list>]) BEGIN grecs_print_help(&proginfo); exit(0); END _getopt_if_option_set([<nousage>],,[< OPTION([<usage>],,,[<Give a short usage message>]) BEGIN grecs_print_usage(&proginfo); exit(0); END>]) _getopt_if_option_set([<noversion>],,[< OPTION([<version>],V,,[<Print program version>]) BEGIN /* Give version */ grecs_print_version(&proginfo, stdout); exit(0); END>])>]) divert(0)dnl _getopt_if_option_set([<nostdincl>],, [<#ifdef HAVE_CONFIG_H # include <config.h> #endif #ifdef HAVE_GETOPT_H # include <getopt.h> #endif #include <unistd.h> #include <stdlib.h> >])dnl #include <grecs.h> #include <grecs/opt.h> #ifndef [<EX_USAGE>] # define [<EX_USAGE>] 64 #endif /* Option codes */ enum { _OPTION_INIT=255, undivert(__DIV_OPTKEYS__)dnl MAX_OPTION }; #ifdef HAVE_GETOPT_LONG static struct option long_options[] = { undivert(__DIV_OPTDECL__)dnl {0, 0, 0, 0} }; #endif _getopt_if_option_set([<gnu>],[< static struct grecs_opthelp opthelp[] = { undivert(__DIV_HELPDECL__)dnl }; >],[<WITH_DIVERSION(-1,[<undivert(__DIV_HELPDECL__)>])>])dnl undivert(__DIV_STATIC__) >]) m4wrap([<ifelse(__OPTIONS_END_DEFINED__,1,,[<OPTIONS_END()>])dnl ifelse(__GETOPT_DEFINED__,1,,[<divert(0)dnl ifelse(__GETOPT_EXPECT_ARGS__,1,[< int parse_options(int argc, char **argv, int *idx) { GETOPT(argc, argv, *idx) return 0; } >],[< int parse_options(int argc, char **argv) { GETOPT(argc, argv) return 0; } >]) divert(-1) popdef([<__GETOPT_DEFINED__>]) popdef([<__GETOPT_EXPECT_ARGS__>]) popdef([<__OPTIONS_END_DEFINED__>]) popdef([<__GETOPT_LASTOPT_LABEL__>])>])>]) divert(0)dnl /* -*- buffer-read-only: t -*- vi: set ro: THIS FILE IS GENERATED AUTOMATICALLY. PLEASE DO NOT EDIT. */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/src/�����������������������������������������������������������������������������0000755�0001750�0001750�00000000000�13512403133�015053� 5����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/src/json-gram.c������������������������������������������������������������������0000644�0001750�0001750�00000206674�13511404035�017134� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A Bison parser, made by GNU Bison 2.7. */ /* Bison implementation for Yacc-like parsers in C Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* C LALR(1) parser skeleton written by Richard Stallman, by simplifying the original so-called "semantic" parser. */ /* All symbols defined below should begin with grecs_json_ or YY, to avoid infringing on user name space. This should be done even for local variables, as they might otherwise be expanded by user macros. There are some unavoidable exceptions within include files to define necessary library symbols; they are noted "INFRINGES ON USER NAME SPACE" below. */ /* Identify Bison output. */ #define YYBISON 1 /* Bison version. */ #define YYBISON_VERSION "2.7" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" /* Pure parsers. */ #define YYPURE 0 /* Push parsers. */ #define YYPUSH 0 /* Pull parsers. */ #define YYPULL 1 /* Copy the first part of user declarations. */ /* Line 371 of yacc.c */ #line 1 "json-gram.y" /* This file is part of Grecs. Copyright (C) 2012-2016 Sergey Poznyakoff. Grecs 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. Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include "grecs.h" #include <string.h> #include <errno.h> #include <stdlib.h> #include "json-gram.h" #include "grecs/json.h" struct json_value *json_return_obj; extern int grecs_json_lex(void); static int grecs_json_error(char const *s); static void pairfree(void *ptr) { struct json_pair *p = ptr; grecs_free(p->k); json_value_free(p->v); free(p); } static void objfree(void *ptr) { struct json_value *o = ptr; json_value_free(o); } /* Line 371 of yacc.c */ #line 118 "json-gram.c" # ifndef YY_NULL # if defined __cplusplus && 201103L <= __cplusplus # define YY_NULL nullptr # else # define YY_NULL 0 # endif # endif /* Enabling verbose error messages. */ #ifdef YYERROR_VERBOSE # undef YYERROR_VERBOSE # define YYERROR_VERBOSE 1 #else # define YYERROR_VERBOSE 1 #endif /* In a future release of Bison, this section will be replaced by #include "y.tab.h". */ #ifndef YY_YY_JSON_GRAM_H_INCLUDED # define YY_YY_JSON_GRAM_H_INCLUDED /* Enabling traces. */ #ifndef YYDEBUG # define YYDEBUG 1 #endif #if YYDEBUG extern int grecs_json_debug; #endif /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE /* Put the tokens into the symbol table, so that GDB and other debuggers know about them. */ enum grecs_json_tokentype { T_NUMBER = 258, T_STRING = 259, T_BOOL = 260, T_NULL = 261, T_ERR = 262 }; #endif /* Tokens. */ #define T_NUMBER 258 #define T_STRING 259 #define T_BOOL 260 #define T_NULL 261 #define T_ERR 262 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE { /* Line 387 of yacc.c */ #line 64 "json-gram.y" int b; double n; char *s; struct grecs_symtab *o; struct json_value *obj; struct grecs_list *list; struct json_pair *p; /* Line 387 of yacc.c */ #line 186 "json-gram.c" } YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define grecs_json_stype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 #endif #if ! defined YYLTYPE && ! defined YYLTYPE_IS_DECLARED typedef struct YYLTYPE { int first_line; int first_column; int last_line; int last_column; } YYLTYPE; # define grecs_json_ltype YYLTYPE /* obsolescent; will be withdrawn */ # define YYLTYPE_IS_DECLARED 1 # define YYLTYPE_IS_TRIVIAL 1 #endif extern YYSTYPE grecs_json_lval; extern YYLTYPE grecs_json_lloc; #ifdef YYPARSE_PARAM #if defined __STDC__ || defined __cplusplus int grecs_json_parse (void *YYPARSE_PARAM); #else int grecs_json_parse (); #endif #else /* ! YYPARSE_PARAM */ #if defined __STDC__ || defined __cplusplus int grecs_json_parse (void); #else int grecs_json_parse (); #endif #endif /* ! YYPARSE_PARAM */ #endif /* !YY_YY_JSON_GRAM_H_INCLUDED */ /* Copy the second part of user declarations. */ /* Line 390 of yacc.c */ #line 227 "json-gram.c" #ifdef short # undef short #endif #ifdef YYTYPE_UINT8 typedef YYTYPE_UINT8 grecs_json_type_uint8; #else typedef unsigned char grecs_json_type_uint8; #endif #ifdef YYTYPE_INT8 typedef YYTYPE_INT8 grecs_json_type_int8; #elif (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) typedef signed char grecs_json_type_int8; #else typedef short int grecs_json_type_int8; #endif #ifdef YYTYPE_UINT16 typedef YYTYPE_UINT16 grecs_json_type_uint16; #else typedef unsigned short int grecs_json_type_uint16; #endif #ifdef YYTYPE_INT16 typedef YYTYPE_INT16 grecs_json_type_int16; #else typedef short int grecs_json_type_int16; #endif #ifndef YYSIZE_T # ifdef __SIZE_TYPE__ # define YYSIZE_T __SIZE_TYPE__ # elif defined size_t # define YYSIZE_T size_t # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include <stddef.h> /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # else # define YYSIZE_T unsigned int # endif #endif #define YYSIZE_MAXIMUM ((YYSIZE_T) -1) #ifndef YY_ # if defined YYENABLE_NLS && YYENABLE_NLS # if ENABLE_NLS # include <libintl.h> /* INFRINGES ON USER NAME SPACE */ # define YY_(Msgid) dgettext ("bison-runtime", Msgid) # endif # endif # ifndef YY_ # define YY_(Msgid) Msgid # endif #endif /* Suppress unused-variable warnings by "using" E. */ #if ! defined lint || defined __GNUC__ # define YYUSE(E) ((void) (E)) #else # define YYUSE(E) /* empty */ #endif /* Identity function, used to suppress warnings about constant conditions. */ #ifndef lint # define YYID(N) (N) #else #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static int YYID (int grecs_json_i) #else static int YYID (grecs_json_i) int grecs_json_i; #endif { return grecs_json_i; } #endif #if ! defined grecs_json_overflow || YYERROR_VERBOSE /* The parser invokes alloca or malloc; define the necessary symbols. */ # ifdef YYSTACK_USE_ALLOCA # if YYSTACK_USE_ALLOCA # ifdef __GNUC__ # define YYSTACK_ALLOC __builtin_alloca # elif defined __BUILTIN_VA_ARG_INCR # include <alloca.h> /* INFRINGES ON USER NAME SPACE */ # elif defined _AIX # define YYSTACK_ALLOC __alloca # elif defined _MSC_VER # include <malloc.h> /* INFRINGES ON USER NAME SPACE */ # define alloca _alloca # else # define YYSTACK_ALLOC alloca # if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ /* Use EXIT_SUCCESS as a witness for stdlib.h. */ # ifndef EXIT_SUCCESS # define EXIT_SUCCESS 0 # endif # endif # endif # endif # endif # ifdef YYSTACK_ALLOC /* Pacify GCC's `empty if-body' warning. */ # define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) # ifndef YYSTACK_ALLOC_MAXIMUM /* The OS might guarantee only one guard page at the bottom of the stack, and a page size can be as small as 4096 bytes. So we cannot safely invoke alloca (N) if N exceeds 4096. Use a slightly smaller number to allow for a few compiler-allocated temporary stack slots. */ # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ # endif # else # define YYSTACK_ALLOC YYMALLOC # define YYSTACK_FREE YYFREE # ifndef YYSTACK_ALLOC_MAXIMUM # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM # endif # if (defined __cplusplus && ! defined EXIT_SUCCESS \ && ! ((defined YYMALLOC || defined malloc) \ && (defined YYFREE || defined free))) # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ # ifndef EXIT_SUCCESS # define EXIT_SUCCESS 0 # endif # endif # ifndef YYMALLOC # define YYMALLOC malloc # if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ # endif # endif # ifndef YYFREE # define YYFREE free # if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) void free (void *); /* INFRINGES ON USER NAME SPACE */ # endif # endif # endif #endif /* ! defined grecs_json_overflow || YYERROR_VERBOSE */ #if (! defined grecs_json_overflow \ && (! defined __cplusplus \ || (defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL \ && defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) /* A type that is properly aligned for any stack member. */ union grecs_json_alloc { grecs_json_type_int16 grecs_json_ss_alloc; YYSTYPE grecs_json_vs_alloc; YYLTYPE grecs_json_ls_alloc; }; /* The size of the maximum gap between one aligned stack and the next. */ # define YYSTACK_GAP_MAXIMUM (sizeof (union grecs_json_alloc) - 1) /* The size of an array large to enough to hold all stacks, each with N elements. */ # define YYSTACK_BYTES(N) \ ((N) * (sizeof (grecs_json_type_int16) + sizeof (YYSTYPE) + sizeof (YYLTYPE)) \ + 2 * YYSTACK_GAP_MAXIMUM) # define YYCOPY_NEEDED 1 /* Relocate STACK from its old location to the new one. The local variables YYSIZE and YYSTACKSIZE give the old and new number of elements in the stack, and YYPTR gives the new location of the stack. Advance YYPTR to a properly aligned location for the next stack. */ # define YYSTACK_RELOCATE(Stack_alloc, Stack) \ do \ { \ YYSIZE_T grecs_json_newbytes; \ YYCOPY (&grecs_json_ptr->Stack_alloc, Stack, grecs_json_size); \ Stack = &grecs_json_ptr->Stack_alloc; \ grecs_json_newbytes = grecs_json_stacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ grecs_json_ptr += grecs_json_newbytes / sizeof (*grecs_json_ptr); \ } \ while (YYID (0)) #endif #if defined YYCOPY_NEEDED && YYCOPY_NEEDED /* Copy COUNT objects from SRC to DST. The source and destination do not overlap. */ # ifndef YYCOPY # if defined __GNUC__ && 1 < __GNUC__ # define YYCOPY(Dst, Src, Count) \ __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src))) # else # define YYCOPY(Dst, Src, Count) \ do \ { \ YYSIZE_T grecs_json_i; \ for (grecs_json_i = 0; grecs_json_i < (Count); grecs_json_i++) \ (Dst)[grecs_json_i] = (Src)[grecs_json_i]; \ } \ while (YYID (0)) # endif # endif #endif /* !YYCOPY_NEEDED */ /* YYFINAL -- State number of the termination state. */ #define YYFINAL 18 /* YYLAST -- Last index in YYTABLE. */ #define YYLAST 17 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 14 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 10 /* YYNRULES -- Number of rules. */ #define YYNRULES 19 /* YYNRULES -- Number of states. */ #define YYNSTATES 27 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 #define YYMAXUTOK 262 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? grecs_json_translate[YYX] : YYUNDEFTOK) /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ static const grecs_json_type_uint8 grecs_json_translate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 10, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 13, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 8, 2, 9, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 11, 2, 12, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, 5, 6, 7 }; #if YYDEBUG /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in YYRHS. */ static const grecs_json_type_uint8 grecs_json_prhs[] = { 0, 0, 3, 5, 7, 9, 11, 13, 15, 17, 21, 22, 24, 26, 30, 34, 35, 37, 39, 43 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ static const grecs_json_type_int8 grecs_json_rhs[] = { 15, 0, -1, 16, -1, 3, -1, 4, -1, 5, -1, 6, -1, 17, -1, 20, -1, 8, 18, 9, -1, -1, 19, -1, 16, -1, 19, 10, 16, -1, 11, 21, 12, -1, -1, 22, -1, 23, -1, 22, 10, 23, -1, 4, 13, 16, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const grecs_json_type_uint8 grecs_json_rline[] = { 0, 75, 75, 81, 86, 91, 96, 100, 101, 108, 116, 119, 122, 127, 133, 156, 159, 162, 168, 174 }; #endif #if YYDEBUG || YYERROR_VERBOSE || 1 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char *const grecs_json_tname[] = { "$end", "error", "$undefined", "T_NUMBER", "T_STRING", "T_BOOL", "T_NULL", "T_ERR", "'['", "']'", "','", "'{'", "'}'", "':'", "$accept", "input", "object", "array", "objects", "objlist", "assoc", "pairs", "pairlist", "pair", YY_NULL }; #endif # ifdef YYPRINT /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to token YYLEX-NUM. */ static const grecs_json_type_uint16 grecs_json_toknum[] = { 0, 256, 257, 258, 259, 260, 261, 262, 91, 93, 44, 123, 125, 58 }; # endif /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const grecs_json_type_uint8 grecs_json_r1[] = { 0, 14, 15, 16, 16, 16, 16, 16, 16, 17, 18, 18, 19, 19, 20, 21, 21, 22, 22, 23 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ static const grecs_json_type_uint8 grecs_json_r2[] = { 0, 2, 1, 1, 1, 1, 1, 1, 1, 3, 0, 1, 1, 3, 3, 0, 1, 1, 3, 3 }; /* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM. Performed when YYTABLE doesn't specify something else to do. Zero means the default is an error. */ static const grecs_json_type_uint8 grecs_json_defact[] = { 0, 3, 4, 5, 6, 10, 15, 0, 2, 7, 8, 12, 0, 11, 0, 0, 16, 17, 1, 9, 0, 0, 14, 0, 13, 19, 18 }; /* YYDEFGOTO[NTERM-NUM]. */ static const grecs_json_type_int8 grecs_json_defgoto[] = { -1, 7, 8, 9, 12, 13, 10, 15, 16, 17 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ #define YYPACT_NINF -13 static const grecs_json_type_int8 grecs_json_pact[] = { -2, -13, -13, -13, -13, -2, 1, 7, -13, -13, -13, -13, -1, 0, 4, 2, 3, -13, -13, -13, -2, -2, -13, 1, -13, -13, -13 }; /* YYPGOTO[NTERM-NUM]. */ static const grecs_json_type_int8 grecs_json_pgoto[] = { -13, -13, -5, -13, -13, -13, -13, -13, -13, -12 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule which number is the opposite. If YYTABLE_NINF, syntax error. */ #define YYTABLE_NINF -1 static const grecs_json_type_uint8 grecs_json_table[] = { 11, 1, 2, 3, 4, 14, 5, 18, 19, 6, 20, 26, 0, 23, 22, 24, 25, 21 }; #define grecs_json_pact_value_is_default(Yystate) \ (!!((Yystate) == (-13))) #define grecs_json_table_value_is_error(Yytable_value) \ YYID (0) static const grecs_json_type_int8 grecs_json_check[] = { 5, 3, 4, 5, 6, 4, 8, 0, 9, 11, 10, 23, -1, 10, 12, 20, 21, 13 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const grecs_json_type_uint8 grecs_json_stos[] = { 0, 3, 4, 5, 6, 8, 11, 15, 16, 17, 20, 16, 18, 19, 4, 21, 22, 23, 0, 9, 10, 13, 12, 10, 16, 16, 23 }; #define grecs_json_errok (grecs_json_errstatus = 0) #define grecs_json_clearin (grecs_json_char = YYEMPTY) #define YYEMPTY (-2) #define YYEOF 0 #define YYACCEPT goto grecs_json_acceptlab #define YYABORT goto grecs_json_abortlab #define YYERROR goto grecs_json_errorlab /* Like YYERROR except do call grecs_json_error. This remains here temporarily to ease the transition to the new meaning of YYERROR, for GCC. Once GCC version 2 has supplanted version 1, this can go. However, YYFAIL appears to be in use. Nevertheless, it is formally deprecated in Bison 2.4.2's NEWS entry, where a plan to phase it out is discussed. */ #define YYFAIL goto grecs_json_errlab #if defined YYFAIL /* This is here to suppress warnings from the GCC cpp's -Wunused-macros. Normally we don't worry about that warning, but some users do, and we want to make it easy for users to remove YYFAIL uses, which will produce warnings from Bison 2.5. */ #endif #define YYRECOVERING() (!!grecs_json_errstatus) #define YYBACKUP(Token, Value) \ do \ if (grecs_json_char == YYEMPTY) \ { \ grecs_json_char = (Token); \ grecs_json_lval = (Value); \ YYPOPSTACK (grecs_json_len); \ grecs_json_state = *grecs_json_ssp; \ goto grecs_json_backup; \ } \ else \ { \ grecs_json_error (YY_("syntax error: cannot back up")); \ YYERROR; \ } \ while (YYID (0)) /* Error token number */ #define YYTERROR 1 #define YYERRCODE 256 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. If N is 0, then set CURRENT to the empty location which ends the previous symbol: RHS[0] (always defined). */ #ifndef YYLLOC_DEFAULT # define YYLLOC_DEFAULT(Current, Rhs, N) \ do \ if (YYID (N)) \ { \ (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ } \ else \ { \ (Current).first_line = (Current).last_line = \ YYRHSLOC (Rhs, 0).last_line; \ (Current).first_column = (Current).last_column = \ YYRHSLOC (Rhs, 0).last_column; \ } \ while (YYID (0)) #endif #define YYRHSLOC(Rhs, K) ((Rhs)[K]) /* YY_LOCATION_PRINT -- Print the location on the stream. This macro was not mandated originally: define only if we know we won't break user code: when these are the locations we know. */ #ifndef YY_LOCATION_PRINT # if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL /* Print *YYLOCP on YYO. Private, do not rely on its existence. */ __attribute__((__unused__)) #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static unsigned grecs_json__location_print_ (FILE *grecs_json_o, YYLTYPE const * const grecs_json_locp) #else static unsigned grecs_json__location_print_ (grecs_json_o, grecs_json_locp) FILE *grecs_json_o; YYLTYPE const * const grecs_json_locp; #endif { unsigned res = 0; int end_col = 0 != grecs_json_locp->last_column ? grecs_json_locp->last_column - 1 : 0; if (0 <= grecs_json_locp->first_line) { res += fprintf (grecs_json_o, "%d", grecs_json_locp->first_line); if (0 <= grecs_json_locp->first_column) res += fprintf (grecs_json_o, ".%d", grecs_json_locp->first_column); } if (0 <= grecs_json_locp->last_line) { if (grecs_json_locp->first_line < grecs_json_locp->last_line) { res += fprintf (grecs_json_o, "-%d", grecs_json_locp->last_line); if (0 <= end_col) res += fprintf (grecs_json_o, ".%d", end_col); } else if (0 <= end_col && grecs_json_locp->first_column < end_col) res += fprintf (grecs_json_o, "-%d", end_col); } return res; } # define YY_LOCATION_PRINT(File, Loc) \ grecs_json__location_print_ (File, &(Loc)) # else # define YY_LOCATION_PRINT(File, Loc) ((void) 0) # endif #endif /* YYLEX -- calling `grecs_json_lex' with the right arguments. */ #ifdef YYLEX_PARAM # define YYLEX grecs_json_lex (YYLEX_PARAM) #else # define YYLEX grecs_json_lex () #endif /* Enable debugging if requested. */ #if YYDEBUG # ifndef YYFPRINTF # include <stdio.h> /* INFRINGES ON USER NAME SPACE */ # define YYFPRINTF fprintf # endif # define YYDPRINTF(Args) \ do { \ if (grecs_json_debug) \ YYFPRINTF Args; \ } while (YYID (0)) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ do { \ if (grecs_json_debug) \ { \ YYFPRINTF (stderr, "%s ", Title); \ grecs_json__symbol_print (stderr, \ Type, Value, Location); \ YYFPRINTF (stderr, "\n"); \ } \ } while (YYID (0)) /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ /*ARGSUSED*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void grecs_json__symbol_value_print (FILE *grecs_json_output, int grecs_json_type, YYSTYPE const * const grecs_json_valuep, YYLTYPE const * const grecs_json_locationp) #else static void grecs_json__symbol_value_print (grecs_json_output, grecs_json_type, grecs_json_valuep, grecs_json_locationp) FILE *grecs_json_output; int grecs_json_type; YYSTYPE const * const grecs_json_valuep; YYLTYPE const * const grecs_json_locationp; #endif { FILE *grecs_json_o = grecs_json_output; YYUSE (grecs_json_o); if (!grecs_json_valuep) return; YYUSE (grecs_json_locationp); # ifdef YYPRINT if (grecs_json_type < YYNTOKENS) YYPRINT (grecs_json_output, grecs_json_toknum[grecs_json_type], *grecs_json_valuep); # else YYUSE (grecs_json_output); # endif switch (grecs_json_type) { default: break; } } /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void grecs_json__symbol_print (FILE *grecs_json_output, int grecs_json_type, YYSTYPE const * const grecs_json_valuep, YYLTYPE const * const grecs_json_locationp) #else static void grecs_json__symbol_print (grecs_json_output, grecs_json_type, grecs_json_valuep, grecs_json_locationp) FILE *grecs_json_output; int grecs_json_type; YYSTYPE const * const grecs_json_valuep; YYLTYPE const * const grecs_json_locationp; #endif { if (grecs_json_type < YYNTOKENS) YYFPRINTF (grecs_json_output, "token %s (", grecs_json_tname[grecs_json_type]); else YYFPRINTF (grecs_json_output, "nterm %s (", grecs_json_tname[grecs_json_type]); YY_LOCATION_PRINT (grecs_json_output, *grecs_json_locationp); YYFPRINTF (grecs_json_output, ": "); grecs_json__symbol_value_print (grecs_json_output, grecs_json_type, grecs_json_valuep, grecs_json_locationp); YYFPRINTF (grecs_json_output, ")"); } /*------------------------------------------------------------------. | grecs_json__stack_print -- Print the state stack from its BOTTOM up to its | | TOP (included). | `------------------------------------------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void grecs_json__stack_print (grecs_json_type_int16 *grecs_json_bottom, grecs_json_type_int16 *grecs_json_top) #else static void grecs_json__stack_print (grecs_json_bottom, grecs_json_top) grecs_json_type_int16 *grecs_json_bottom; grecs_json_type_int16 *grecs_json_top; #endif { YYFPRINTF (stderr, "Stack now"); for (; grecs_json_bottom <= grecs_json_top; grecs_json_bottom++) { int grecs_json_bot = *grecs_json_bottom; YYFPRINTF (stderr, " %d", grecs_json_bot); } YYFPRINTF (stderr, "\n"); } # define YY_STACK_PRINT(Bottom, Top) \ do { \ if (grecs_json_debug) \ grecs_json__stack_print ((Bottom), (Top)); \ } while (YYID (0)) /*------------------------------------------------. | Report that the YYRULE is going to be reduced. | `------------------------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void grecs_json__reduce_print (YYSTYPE *grecs_json_vsp, YYLTYPE *grecs_json_lsp, int grecs_json_rule) #else static void grecs_json__reduce_print (grecs_json_vsp, grecs_json_lsp, grecs_json_rule) YYSTYPE *grecs_json_vsp; YYLTYPE *grecs_json_lsp; int grecs_json_rule; #endif { int grecs_json_nrhs = grecs_json_r2[grecs_json_rule]; int grecs_json_i; unsigned long int grecs_json_lno = grecs_json_rline[grecs_json_rule]; YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", grecs_json_rule - 1, grecs_json_lno); /* The symbols being reduced. */ for (grecs_json_i = 0; grecs_json_i < grecs_json_nrhs; grecs_json_i++) { YYFPRINTF (stderr, " $%d = ", grecs_json_i + 1); grecs_json__symbol_print (stderr, grecs_json_rhs[grecs_json_prhs[grecs_json_rule] + grecs_json_i], &(grecs_json_vsp[(grecs_json_i + 1) - (grecs_json_nrhs)]) , &(grecs_json_lsp[(grecs_json_i + 1) - (grecs_json_nrhs)]) ); YYFPRINTF (stderr, "\n"); } } # define YY_REDUCE_PRINT(Rule) \ do { \ if (grecs_json_debug) \ grecs_json__reduce_print (grecs_json_vsp, grecs_json_lsp, Rule); \ } while (YYID (0)) /* Nonzero means print parse trace. It is left uninitialized so that multiple parsers can coexist. */ int grecs_json_debug; #else /* !YYDEBUG */ # define YYDPRINTF(Args) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) # define YY_STACK_PRINT(Bottom, Top) # define YY_REDUCE_PRINT(Rule) #endif /* !YYDEBUG */ /* YYINITDEPTH -- initial size of the parser's stacks. */ #ifndef YYINITDEPTH # define YYINITDEPTH 200 #endif /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only if the built-in stack extension method is used). Do not make this value too large; the results are undefined if YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) evaluated with infinite-precision integer arithmetic. */ #ifndef YYMAXDEPTH # define YYMAXDEPTH 10000 #endif #if YYERROR_VERBOSE # ifndef grecs_json_strlen # if defined __GLIBC__ && defined _STRING_H # define grecs_json_strlen strlen # else /* Return the length of YYSTR. */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static YYSIZE_T grecs_json_strlen (const char *grecs_json_str) #else static YYSIZE_T grecs_json_strlen (grecs_json_str) const char *grecs_json_str; #endif { YYSIZE_T grecs_json_len; for (grecs_json_len = 0; grecs_json_str[grecs_json_len]; grecs_json_len++) continue; return grecs_json_len; } # endif # endif # ifndef grecs_json_stpcpy # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE # define grecs_json_stpcpy stpcpy # else /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in YYDEST. */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static char * grecs_json_stpcpy (char *grecs_json_dest, const char *grecs_json_src) #else static char * grecs_json_stpcpy (grecs_json_dest, grecs_json_src) char *grecs_json_dest; const char *grecs_json_src; #endif { char *grecs_json_d = grecs_json_dest; const char *grecs_json_s = grecs_json_src; while ((*grecs_json_d++ = *grecs_json_s++) != '\0') continue; return grecs_json_d - 1; } # endif # endif # ifndef grecs_json_tnamerr /* Copy to YYRES the contents of YYSTR after stripping away unnecessary quotes and backslashes, so that it's suitable for grecs_json_error. The heuristic is that double-quoting is unnecessary unless the string contains an apostrophe, a comma, or backslash (other than backslash-backslash). YYSTR is taken from grecs_json_tname. If YYRES is null, do not copy; instead, return the length of what the result would have been. */ static YYSIZE_T grecs_json_tnamerr (char *grecs_json_res, const char *grecs_json_str) { if (*grecs_json_str == '"') { YYSIZE_T grecs_json_n = 0; char const *grecs_json_p = grecs_json_str; for (;;) switch (*++grecs_json_p) { case '\'': case ',': goto do_not_strip_quotes; case '\\': if (*++grecs_json_p != '\\') goto do_not_strip_quotes; /* Fall through. */ default: if (grecs_json_res) grecs_json_res[grecs_json_n] = *grecs_json_p; grecs_json_n++; break; case '"': if (grecs_json_res) grecs_json_res[grecs_json_n] = '\0'; return grecs_json_n; } do_not_strip_quotes: ; } if (! grecs_json_res) return grecs_json_strlen (grecs_json_str); return grecs_json_stpcpy (grecs_json_res, grecs_json_str) - grecs_json_res; } # endif /* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message about the unexpected token YYTOKEN for the state stack whose top is YYSSP. Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is not large enough to hold the message. In that case, also set *YYMSG_ALLOC to the required number of bytes. Return 2 if the required number of bytes is too large to store. */ static int grecs_json_syntax_error (YYSIZE_T *grecs_json_msg_alloc, char **grecs_json_msg, grecs_json_type_int16 *grecs_json_ssp, int grecs_json_token) { YYSIZE_T grecs_json_size0 = grecs_json_tnamerr (YY_NULL, grecs_json_tname[grecs_json_token]); YYSIZE_T grecs_json_size = grecs_json_size0; enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; /* Internationalized format string. */ const char *grecs_json_format = YY_NULL; /* Arguments of grecs_json_format. */ char const *grecs_json_arg[YYERROR_VERBOSE_ARGS_MAXIMUM]; /* Number of reported tokens (one for the "unexpected", one per "expected"). */ int grecs_json_count = 0; /* There are many possibilities here to consider: - Assume YYFAIL is not used. It's too flawed to consider. See <http://lists.gnu.org/archive/html/bison-patches/2009-12/msg00024.html> for details. YYERROR is fine as it does not invoke this function. - If this state is a consistent state with a default action, then the only way this function was invoked is if the default action is an error action. In that case, don't check for expected tokens because there are none. - The only way there can be no lookahead present (in grecs_json_char) is if this state is a consistent state with a default action. Thus, detecting the absence of a lookahead is sufficient to determine that there is no unexpected or expected token to report. In that case, just report a simple "syntax error". - Don't assume there isn't a lookahead just because this state is a consistent state with a default action. There might have been a previous inconsistent state, consistent state with a non-default action, or user semantic action that manipulated grecs_json_char. - Of course, the expected token list depends on states to have correct lookahead information, and it depends on the parser not to perform extra reductions after fetching a lookahead from the scanner and before detecting a syntax error. Thus, state merging (from LALR or IELR) and default reductions corrupt the expected token list. However, the list is correct for canonical LR with one exception: it will still contain any token that will not be accepted due to an error action in a later state. */ if (grecs_json_token != YYEMPTY) { int grecs_json_n = grecs_json_pact[*grecs_json_ssp]; grecs_json_arg[grecs_json_count++] = grecs_json_tname[grecs_json_token]; if (!grecs_json_pact_value_is_default (grecs_json_n)) { /* Start YYX at -YYN if negative to avoid negative indexes in YYCHECK. In other words, skip the first -YYN actions for this state because they are default actions. */ int grecs_json_xbegin = grecs_json_n < 0 ? -grecs_json_n : 0; /* Stay within bounds of both grecs_json_check and grecs_json_tname. */ int grecs_json_checklim = YYLAST - grecs_json_n + 1; int grecs_json_xend = grecs_json_checklim < YYNTOKENS ? grecs_json_checklim : YYNTOKENS; int grecs_json_x; for (grecs_json_x = grecs_json_xbegin; grecs_json_x < grecs_json_xend; ++grecs_json_x) if (grecs_json_check[grecs_json_x + grecs_json_n] == grecs_json_x && grecs_json_x != YYTERROR && !grecs_json_table_value_is_error (grecs_json_table[grecs_json_x + grecs_json_n])) { if (grecs_json_count == YYERROR_VERBOSE_ARGS_MAXIMUM) { grecs_json_count = 1; grecs_json_size = grecs_json_size0; break; } grecs_json_arg[grecs_json_count++] = grecs_json_tname[grecs_json_x]; { YYSIZE_T grecs_json_size1 = grecs_json_size + grecs_json_tnamerr (YY_NULL, grecs_json_tname[grecs_json_x]); if (! (grecs_json_size <= grecs_json_size1 && grecs_json_size1 <= YYSTACK_ALLOC_MAXIMUM)) return 2; grecs_json_size = grecs_json_size1; } } } } switch (grecs_json_count) { # define YYCASE_(N, S) \ case N: \ grecs_json_format = S; \ break YYCASE_(0, YY_("syntax error")); YYCASE_(1, YY_("syntax error, unexpected %s")); YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s")); YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s")); YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s")); # undef YYCASE_ } { YYSIZE_T grecs_json_size1 = grecs_json_size + grecs_json_strlen (grecs_json_format); if (! (grecs_json_size <= grecs_json_size1 && grecs_json_size1 <= YYSTACK_ALLOC_MAXIMUM)) return 2; grecs_json_size = grecs_json_size1; } if (*grecs_json_msg_alloc < grecs_json_size) { *grecs_json_msg_alloc = 2 * grecs_json_size; if (! (grecs_json_size <= *grecs_json_msg_alloc && *grecs_json_msg_alloc <= YYSTACK_ALLOC_MAXIMUM)) *grecs_json_msg_alloc = YYSTACK_ALLOC_MAXIMUM; return 1; } /* Avoid sprintf, as that infringes on the user's name space. Don't have undefined behavior even if the translation produced a string with the wrong number of "%s"s. */ { char *grecs_json_p = *grecs_json_msg; int grecs_json_i = 0; while ((*grecs_json_p = *grecs_json_format) != '\0') if (*grecs_json_p == '%' && grecs_json_format[1] == 's' && grecs_json_i < grecs_json_count) { grecs_json_p += grecs_json_tnamerr (grecs_json_p, grecs_json_arg[grecs_json_i++]); grecs_json_format += 2; } else { grecs_json_p++; grecs_json_format++; } } return 0; } #endif /* YYERROR_VERBOSE */ /*-----------------------------------------------. | Release the memory associated to this symbol. | `-----------------------------------------------*/ /*ARGSUSED*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void grecs_json_destruct (const char *grecs_json_msg, int grecs_json_type, YYSTYPE *grecs_json_valuep, YYLTYPE *grecs_json_locationp) #else static void grecs_json_destruct (grecs_json_msg, grecs_json_type, grecs_json_valuep, grecs_json_locationp) const char *grecs_json_msg; int grecs_json_type; YYSTYPE *grecs_json_valuep; YYLTYPE *grecs_json_locationp; #endif { YYUSE (grecs_json_valuep); YYUSE (grecs_json_locationp); if (!grecs_json_msg) grecs_json_msg = "Deleting"; YY_SYMBOL_PRINT (grecs_json_msg, grecs_json_type, grecs_json_valuep, grecs_json_locationp); switch (grecs_json_type) { default: break; } } /* The lookahead symbol. */ int grecs_json_char; #ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN # define YY_IGNORE_MAYBE_UNINITIALIZED_END #endif #ifndef YY_INITIAL_VALUE # define YY_INITIAL_VALUE(Value) /* Nothing. */ #endif /* The semantic value of the lookahead symbol. */ YYSTYPE grecs_json_lval YY_INITIAL_VALUE(grecs_json_val_default); /* Location data for the lookahead symbol. */ YYLTYPE grecs_json_lloc # if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL = { 1, 1, 1, 1 } # endif ; /* Number of syntax errors so far. */ int grecs_json_nerrs; /*----------. | grecs_json_parse. | `----------*/ #ifdef YYPARSE_PARAM #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) int grecs_json_parse (void *YYPARSE_PARAM) #else int grecs_json_parse (YYPARSE_PARAM) void *YYPARSE_PARAM; #endif #else /* ! YYPARSE_PARAM */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) int grecs_json_parse (void) #else int grecs_json_parse () #endif #endif { int grecs_json_state; /* Number of tokens to shift before error messages enabled. */ int grecs_json_errstatus; /* The stacks and their tools: `grecs_json_ss': related to states. `grecs_json_vs': related to semantic values. `grecs_json_ls': related to locations. Refer to the stacks through separate pointers, to allow grecs_json_overflow to reallocate them elsewhere. */ /* The state stack. */ grecs_json_type_int16 grecs_json_ssa[YYINITDEPTH]; grecs_json_type_int16 *grecs_json_ss; grecs_json_type_int16 *grecs_json_ssp; /* The semantic value stack. */ YYSTYPE grecs_json_vsa[YYINITDEPTH]; YYSTYPE *grecs_json_vs; YYSTYPE *grecs_json_vsp; /* The location stack. */ YYLTYPE grecs_json_lsa[YYINITDEPTH]; YYLTYPE *grecs_json_ls; YYLTYPE *grecs_json_lsp; /* The locations where the error started and ended. */ YYLTYPE grecs_json_error_range[3]; YYSIZE_T grecs_json_stacksize; int grecs_json_n; int grecs_json_result; /* Lookahead token as an internal (translated) token number. */ int grecs_json_token = 0; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE grecs_json_val; YYLTYPE grecs_json_loc; #if YYERROR_VERBOSE /* Buffer for error messages, and its allocated size. */ char grecs_json_msgbuf[128]; char *grecs_json_msg = grecs_json_msgbuf; YYSIZE_T grecs_json_msg_alloc = sizeof grecs_json_msgbuf; #endif #define YYPOPSTACK(N) (grecs_json_vsp -= (N), grecs_json_ssp -= (N), grecs_json_lsp -= (N)) /* The number of symbols on the RHS of the reduced rule. Keep to zero when no symbol should be popped. */ int grecs_json_len = 0; grecs_json_ssp = grecs_json_ss = grecs_json_ssa; grecs_json_vsp = grecs_json_vs = grecs_json_vsa; grecs_json_lsp = grecs_json_ls = grecs_json_lsa; grecs_json_stacksize = YYINITDEPTH; YYDPRINTF ((stderr, "Starting parse\n")); grecs_json_state = 0; grecs_json_errstatus = 0; grecs_json_nerrs = 0; grecs_json_char = YYEMPTY; /* Cause a token to be read. */ grecs_json_lsp[0] = grecs_json_lloc; goto grecs_json_setstate; /*------------------------------------------------------------. | grecs_json_newstate -- Push a new state, which is found in grecs_json_state. | `------------------------------------------------------------*/ grecs_json_newstate: /* In all cases, when you get here, the value and location stacks have just been pushed. So pushing a state here evens the stacks. */ grecs_json_ssp++; grecs_json_setstate: *grecs_json_ssp = grecs_json_state; if (grecs_json_ss + grecs_json_stacksize - 1 <= grecs_json_ssp) { /* Get the current used size of the three stacks, in elements. */ YYSIZE_T grecs_json_size = grecs_json_ssp - grecs_json_ss + 1; #ifdef grecs_json_overflow { /* Give user a chance to reallocate the stack. Use copies of these so that the &'s don't force the real ones into memory. */ YYSTYPE *grecs_json_vs1 = grecs_json_vs; grecs_json_type_int16 *grecs_json_ss1 = grecs_json_ss; YYLTYPE *grecs_json_ls1 = grecs_json_ls; /* Each stack pointer address is followed by the size of the data in use in that stack, in bytes. This used to be a conditional around just the two extra args, but that might be undefined if grecs_json_overflow is a macro. */ grecs_json_overflow (YY_("memory exhausted"), &grecs_json_ss1, grecs_json_size * sizeof (*grecs_json_ssp), &grecs_json_vs1, grecs_json_size * sizeof (*grecs_json_vsp), &grecs_json_ls1, grecs_json_size * sizeof (*grecs_json_lsp), &grecs_json_stacksize); grecs_json_ls = grecs_json_ls1; grecs_json_ss = grecs_json_ss1; grecs_json_vs = grecs_json_vs1; } #else /* no grecs_json_overflow */ # ifndef YYSTACK_RELOCATE goto grecs_json_exhaustedlab; # else /* Extend the stack our own way. */ if (YYMAXDEPTH <= grecs_json_stacksize) goto grecs_json_exhaustedlab; grecs_json_stacksize *= 2; if (YYMAXDEPTH < grecs_json_stacksize) grecs_json_stacksize = YYMAXDEPTH; { grecs_json_type_int16 *grecs_json_ss1 = grecs_json_ss; union grecs_json_alloc *grecs_json_ptr = (union grecs_json_alloc *) YYSTACK_ALLOC (YYSTACK_BYTES (grecs_json_stacksize)); if (! grecs_json_ptr) goto grecs_json_exhaustedlab; YYSTACK_RELOCATE (grecs_json_ss_alloc, grecs_json_ss); YYSTACK_RELOCATE (grecs_json_vs_alloc, grecs_json_vs); YYSTACK_RELOCATE (grecs_json_ls_alloc, grecs_json_ls); # undef YYSTACK_RELOCATE if (grecs_json_ss1 != grecs_json_ssa) YYSTACK_FREE (grecs_json_ss1); } # endif #endif /* no grecs_json_overflow */ grecs_json_ssp = grecs_json_ss + grecs_json_size - 1; grecs_json_vsp = grecs_json_vs + grecs_json_size - 1; grecs_json_lsp = grecs_json_ls + grecs_json_size - 1; YYDPRINTF ((stderr, "Stack size increased to %lu\n", (unsigned long int) grecs_json_stacksize)); if (grecs_json_ss + grecs_json_stacksize - 1 <= grecs_json_ssp) YYABORT; } YYDPRINTF ((stderr, "Entering state %d\n", grecs_json_state)); if (grecs_json_state == YYFINAL) YYACCEPT; goto grecs_json_backup; /*-----------. | grecs_json_backup. | `-----------*/ grecs_json_backup: /* Do appropriate processing given the current state. Read a lookahead token if we need one and don't already have one. */ /* First try to decide what to do without reference to lookahead token. */ grecs_json_n = grecs_json_pact[grecs_json_state]; if (grecs_json_pact_value_is_default (grecs_json_n)) goto grecs_json_default; /* Not known => get a lookahead token if don't already have one. */ /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ if (grecs_json_char == YYEMPTY) { YYDPRINTF ((stderr, "Reading a token: ")); grecs_json_char = YYLEX; } if (grecs_json_char <= YYEOF) { grecs_json_char = grecs_json_token = YYEOF; YYDPRINTF ((stderr, "Now at end of input.\n")); } else { grecs_json_token = YYTRANSLATE (grecs_json_char); YY_SYMBOL_PRINT ("Next token is", grecs_json_token, &grecs_json_lval, &grecs_json_lloc); } /* If the proper action on seeing token YYTOKEN is to reduce or to detect an error, take that action. */ grecs_json_n += grecs_json_token; if (grecs_json_n < 0 || YYLAST < grecs_json_n || grecs_json_check[grecs_json_n] != grecs_json_token) goto grecs_json_default; grecs_json_n = grecs_json_table[grecs_json_n]; if (grecs_json_n <= 0) { if (grecs_json_table_value_is_error (grecs_json_n)) goto grecs_json_errlab; grecs_json_n = -grecs_json_n; goto grecs_json_reduce; } /* Count tokens shifted since error; after three, turn off error status. */ if (grecs_json_errstatus) grecs_json_errstatus--; /* Shift the lookahead token. */ YY_SYMBOL_PRINT ("Shifting", grecs_json_token, &grecs_json_lval, &grecs_json_lloc); /* Discard the shifted token. */ grecs_json_char = YYEMPTY; grecs_json_state = grecs_json_n; YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++grecs_json_vsp = grecs_json_lval; YY_IGNORE_MAYBE_UNINITIALIZED_END *++grecs_json_lsp = grecs_json_lloc; goto grecs_json_newstate; /*-----------------------------------------------------------. | grecs_json_default -- do the default action for the current state. | `-----------------------------------------------------------*/ grecs_json_default: grecs_json_n = grecs_json_defact[grecs_json_state]; if (grecs_json_n == 0) goto grecs_json_errlab; goto grecs_json_reduce; /*-----------------------------. | grecs_json_reduce -- Do a reduction. | `-----------------------------*/ grecs_json_reduce: /* grecs_json_n is the number of a rule to reduce with. */ grecs_json_len = grecs_json_r2[grecs_json_n]; /* If YYLEN is nonzero, implement the default value of the action: `$$ = $1'. Otherwise, the following line sets YYVAL to garbage. This behavior is undocumented and Bison users should not rely upon it. Assigning to YYVAL unconditionally makes the parser a bit smaller, and it avoids a GCC warning that YYVAL may be used uninitialized. */ grecs_json_val = grecs_json_vsp[1-grecs_json_len]; /* Default location. */ YYLLOC_DEFAULT (grecs_json_loc, (grecs_json_lsp - grecs_json_len), grecs_json_len); YY_REDUCE_PRINT (grecs_json_n); switch (grecs_json_n) { case 2: /* Line 1792 of yacc.c */ #line 76 "json-gram.y" { json_return_obj = (grecs_json_vsp[(1) - (1)].obj); } break; case 3: /* Line 1792 of yacc.c */ #line 82 "json-gram.y" { (grecs_json_val.obj) = json_value_create(json_number); (grecs_json_val.obj)->v.n = (grecs_json_vsp[(1) - (1)].n); } break; case 4: /* Line 1792 of yacc.c */ #line 87 "json-gram.y" { (grecs_json_val.obj) = json_value_create(json_string); (grecs_json_val.obj)->v.s = (grecs_json_vsp[(1) - (1)].s); } break; case 5: /* Line 1792 of yacc.c */ #line 92 "json-gram.y" { (grecs_json_val.obj) = json_value_create(json_bool); (grecs_json_val.obj)->v.b = (grecs_json_vsp[(1) - (1)].b); } break; case 6: /* Line 1792 of yacc.c */ #line 97 "json-gram.y" { (grecs_json_val.obj) = json_value_create(json_null); } break; case 8: /* Line 1792 of yacc.c */ #line 102 "json-gram.y" { (grecs_json_val.obj) = json_value_create(json_object); (grecs_json_val.obj)->v.o = (grecs_json_vsp[(1) - (1)].o); } break; case 9: /* Line 1792 of yacc.c */ #line 109 "json-gram.y" { (grecs_json_val.obj) = json_new_array(); (grecs_json_val.obj)->v.a->ol = (grecs_json_vsp[(2) - (3)].list); } break; case 10: /* Line 1792 of yacc.c */ #line 116 "json-gram.y" { (grecs_json_val.list) = NULL; } break; case 12: /* Line 1792 of yacc.c */ #line 123 "json-gram.y" { (grecs_json_val.list) = grecs_list_create(); grecs_list_append((grecs_json_val.list), (grecs_json_vsp[(1) - (1)].obj)); } break; case 13: /* Line 1792 of yacc.c */ #line 128 "json-gram.y" { grecs_list_append((grecs_json_vsp[(1) - (3)].list), (grecs_json_vsp[(3) - (3)].obj)); } break; case 14: /* Line 1792 of yacc.c */ #line 134 "json-gram.y" { struct grecs_symtab *s; s = json_assoc_create(); if ((grecs_json_vsp[(2) - (3)].list)) { struct grecs_list_entry *ep; for (ep = (grecs_json_vsp[(2) - (3)].list)->head; ep; ep = ep->next) { struct json_pair *p = ep->data; int install = 1; grecs_symtab_lookup_or_install(s, p, &install); if (install) { p->k = NULL; p->v = NULL; } } grecs_list_free((grecs_json_vsp[(2) - (3)].list)); } (grecs_json_val.o) = s; } break; case 15: /* Line 1792 of yacc.c */ #line 156 "json-gram.y" { (grecs_json_val.list) = NULL; } break; case 17: /* Line 1792 of yacc.c */ #line 163 "json-gram.y" { (grecs_json_val.list) = grecs_list_create(); (grecs_json_val.list)->free_entry = pairfree; grecs_list_append((grecs_json_val.list), (grecs_json_vsp[(1) - (1)].p)); } break; case 18: /* Line 1792 of yacc.c */ #line 169 "json-gram.y" { grecs_list_append((grecs_json_vsp[(1) - (3)].list), (grecs_json_vsp[(3) - (3)].p)); } break; case 19: /* Line 1792 of yacc.c */ #line 175 "json-gram.y" { struct json_pair *p = grecs_malloc(sizeof(*p)); p->k = (grecs_json_vsp[(1) - (3)].s); p->v = (grecs_json_vsp[(3) - (3)].obj); (grecs_json_val.p) = p; } break; /* Line 1792 of yacc.c */ #line 1678 "json-gram.c" default: break; } /* User semantic actions sometimes alter grecs_json_char, and that requires that grecs_json_token be updated with the new translation. We take the approach of translating immediately before every use of grecs_json_token. One alternative is translating here after every semantic action, but that translation would be missed if the semantic action invokes YYABORT, YYACCEPT, or YYERROR immediately after altering grecs_json_char or if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an incorrect destructor might then be invoked immediately. In the case of YYERROR or YYBACKUP, subsequent parser actions might lead to an incorrect destructor call or verbose syntax error message before the lookahead is translated. */ YY_SYMBOL_PRINT ("-> $$ =", grecs_json_r1[grecs_json_n], &grecs_json_val, &grecs_json_loc); YYPOPSTACK (grecs_json_len); grecs_json_len = 0; YY_STACK_PRINT (grecs_json_ss, grecs_json_ssp); *++grecs_json_vsp = grecs_json_val; *++grecs_json_lsp = grecs_json_loc; /* Now `shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ grecs_json_n = grecs_json_r1[grecs_json_n]; grecs_json_state = grecs_json_pgoto[grecs_json_n - YYNTOKENS] + *grecs_json_ssp; if (0 <= grecs_json_state && grecs_json_state <= YYLAST && grecs_json_check[grecs_json_state] == *grecs_json_ssp) grecs_json_state = grecs_json_table[grecs_json_state]; else grecs_json_state = grecs_json_defgoto[grecs_json_n - YYNTOKENS]; goto grecs_json_newstate; /*------------------------------------. | grecs_json_errlab -- here on detecting error | `------------------------------------*/ grecs_json_errlab: /* Make sure we have latest lookahead translation. See comments at user semantic actions for why this is necessary. */ grecs_json_token = grecs_json_char == YYEMPTY ? YYEMPTY : YYTRANSLATE (grecs_json_char); /* If not already recovering from an error, report this error. */ if (!grecs_json_errstatus) { ++grecs_json_nerrs; #if ! YYERROR_VERBOSE grecs_json_error (YY_("syntax error")); #else # define YYSYNTAX_ERROR grecs_json_syntax_error (&grecs_json_msg_alloc, &grecs_json_msg, \ grecs_json_ssp, grecs_json_token) { char const *grecs_json_msgp = YY_("syntax error"); int grecs_json_syntax_error_status; grecs_json_syntax_error_status = YYSYNTAX_ERROR; if (grecs_json_syntax_error_status == 0) grecs_json_msgp = grecs_json_msg; else if (grecs_json_syntax_error_status == 1) { if (grecs_json_msg != grecs_json_msgbuf) YYSTACK_FREE (grecs_json_msg); grecs_json_msg = (char *) YYSTACK_ALLOC (grecs_json_msg_alloc); if (!grecs_json_msg) { grecs_json_msg = grecs_json_msgbuf; grecs_json_msg_alloc = sizeof grecs_json_msgbuf; grecs_json_syntax_error_status = 2; } else { grecs_json_syntax_error_status = YYSYNTAX_ERROR; grecs_json_msgp = grecs_json_msg; } } grecs_json_error (grecs_json_msgp); if (grecs_json_syntax_error_status == 2) goto grecs_json_exhaustedlab; } # undef YYSYNTAX_ERROR #endif } grecs_json_error_range[1] = grecs_json_lloc; if (grecs_json_errstatus == 3) { /* If just tried and failed to reuse lookahead token after an error, discard it. */ if (grecs_json_char <= YYEOF) { /* Return failure if at end of input. */ if (grecs_json_char == YYEOF) YYABORT; } else { grecs_json_destruct ("Error: discarding", grecs_json_token, &grecs_json_lval, &grecs_json_lloc); grecs_json_char = YYEMPTY; } } /* Else will try to reuse lookahead token after shifting the error token. */ goto grecs_json_errlab1; /*---------------------------------------------------. | grecs_json_errorlab -- error raised explicitly by YYERROR. | `---------------------------------------------------*/ grecs_json_errorlab: /* Pacify compilers like GCC when the user code never invokes YYERROR and the label grecs_json_errorlab therefore never appears in user code. */ if (/*CONSTCOND*/ 0) goto grecs_json_errorlab; grecs_json_error_range[1] = grecs_json_lsp[1-grecs_json_len]; /* Do not reclaim the symbols of the rule which action triggered this YYERROR. */ YYPOPSTACK (grecs_json_len); grecs_json_len = 0; YY_STACK_PRINT (grecs_json_ss, grecs_json_ssp); grecs_json_state = *grecs_json_ssp; goto grecs_json_errlab1; /*-------------------------------------------------------------. | grecs_json_errlab1 -- common code for both syntax error and YYERROR. | `-------------------------------------------------------------*/ grecs_json_errlab1: grecs_json_errstatus = 3; /* Each real token shifted decrements this. */ for (;;) { grecs_json_n = grecs_json_pact[grecs_json_state]; if (!grecs_json_pact_value_is_default (grecs_json_n)) { grecs_json_n += YYTERROR; if (0 <= grecs_json_n && grecs_json_n <= YYLAST && grecs_json_check[grecs_json_n] == YYTERROR) { grecs_json_n = grecs_json_table[grecs_json_n]; if (0 < grecs_json_n) break; } } /* Pop the current state because it cannot handle the error token. */ if (grecs_json_ssp == grecs_json_ss) YYABORT; grecs_json_error_range[1] = *grecs_json_lsp; grecs_json_destruct ("Error: popping", grecs_json_stos[grecs_json_state], grecs_json_vsp, grecs_json_lsp); YYPOPSTACK (1); grecs_json_state = *grecs_json_ssp; YY_STACK_PRINT (grecs_json_ss, grecs_json_ssp); } YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++grecs_json_vsp = grecs_json_lval; YY_IGNORE_MAYBE_UNINITIALIZED_END grecs_json_error_range[2] = grecs_json_lloc; /* Using YYLLOC is tempting, but would change the location of the lookahead. YYLOC is available though. */ YYLLOC_DEFAULT (grecs_json_loc, grecs_json_error_range, 2); *++grecs_json_lsp = grecs_json_loc; /* Shift the error token. */ YY_SYMBOL_PRINT ("Shifting", grecs_json_stos[grecs_json_n], grecs_json_vsp, grecs_json_lsp); grecs_json_state = grecs_json_n; goto grecs_json_newstate; /*-------------------------------------. | grecs_json_acceptlab -- YYACCEPT comes here. | `-------------------------------------*/ grecs_json_acceptlab: grecs_json_result = 0; goto grecs_json_return; /*-----------------------------------. | grecs_json_abortlab -- YYABORT comes here. | `-----------------------------------*/ grecs_json_abortlab: grecs_json_result = 1; goto grecs_json_return; #if !defined grecs_json_overflow || YYERROR_VERBOSE /*-------------------------------------------------. | grecs_json_exhaustedlab -- memory exhaustion comes here. | `-------------------------------------------------*/ grecs_json_exhaustedlab: grecs_json_error (YY_("memory exhausted")); grecs_json_result = 2; /* Fall through. */ #endif grecs_json_return: if (grecs_json_char != YYEMPTY) { /* Make sure we have latest lookahead translation. See comments at user semantic actions for why this is necessary. */ grecs_json_token = YYTRANSLATE (grecs_json_char); grecs_json_destruct ("Cleanup: discarding lookahead", grecs_json_token, &grecs_json_lval, &grecs_json_lloc); } /* Do not reclaim the symbols of the rule which action triggered this YYABORT or YYACCEPT. */ YYPOPSTACK (grecs_json_len); YY_STACK_PRINT (grecs_json_ss, grecs_json_ssp); while (grecs_json_ssp != grecs_json_ss) { grecs_json_destruct ("Cleanup: popping", grecs_json_stos[*grecs_json_ssp], grecs_json_vsp, grecs_json_lsp); YYPOPSTACK (1); } #ifndef grecs_json_overflow if (grecs_json_ss != grecs_json_ssa) YYSTACK_FREE (grecs_json_ss); #endif #if YYERROR_VERBOSE if (grecs_json_msg != grecs_json_msgbuf) YYSTACK_FREE (grecs_json_msg); #endif /* Make sure YYID is used. */ return YYID (grecs_json_result); } /* Line 2055 of yacc.c */ #line 182 "json-gram.y" static int grecs_json_error(char const *s) { jsonlex_diag(s); return 0; } struct json_value * json_value_create(int type) { struct json_value *obj = grecs_zalloc(sizeof(*obj)); obj->type = type; return obj; } void json_value_free(struct json_value *obj) { size_t i; if (!obj) return; switch (obj->type) { case json_null: case json_bool: case json_number: break; case json_string: grecs_free(obj->v.s); break; case json_arr: for (i = 0; i < obj->v.a->oc; i++) json_value_free(obj->v.a->ov[i]); grecs_free (obj->v.a->ov); if (obj->v.a->ol) { obj->v.a->ol->free_entry = objfree; grecs_list_free(obj->v.a->ol); } grecs_free(obj->v.a); break; case json_object: grecs_symtab_free(obj->v.o); } free(obj); } static unsigned json_st_hash(void *data, unsigned long n_buckets) { struct json_pair *p = data; return grecs_hash_string(p->k, n_buckets); } static int json_st_cmp(const void *a, const void *b) { struct json_pair const *pa = a; struct json_pair const *pb = b; return strcmp(pa->k, pb->k); } static int json_st_copy(void *a, void *b) { struct json_pair *pa = a; struct json_pair *pb = b; memcpy(pa, pb, sizeof(*pa)); return 0; } static void json_st_free(void *ptr) { struct json_pair *p = ptr; free(p->k); json_value_free(p->v); free(p); } struct grecs_symtab * json_assoc_create() { return grecs_symtab_create(sizeof(struct json_pair), json_st_hash, json_st_cmp, json_st_copy, NULL, json_st_free); } struct json_value * json_parse_string(char const *input, size_t len) { jsonlex_setup(input, len); if (grecs_json_parse()) { /* FIXME: error recovery */ return NULL; } jsonlex_cleanup(); return json_return_obj; } struct json_value * json_value_lookup(struct json_value *obj, const char *ident) { char *qbuf = NULL; size_t qlen = 0; while (obj && *ident) { char const *p; char *q; size_t l; for (p = ident; *p; p++) { if (*p == '\\') ++p; else if (*p == '.') break; } l = p - ident + 1; if (l > qlen) { qlen = l; qbuf = grecs_realloc(qbuf, qlen); } q = qbuf; while (*ident) { if (*ident == '\\') { char c; ++ident; if (json_unescape(*ident, &c)) *q++ = *ident++; else *q++ = c; } else if (*ident == '.') { ++ident; break; } else *q++ = *ident++; } *q = 0; switch (obj->type) { case json_null: case json_bool: case json_number: case json_string: obj = NULL; break; case json_arr: l = strtoul(qbuf, &q, 10); if (*q != 0 || json_array_get(obj, l, &obj)) obj = NULL; break; case json_object: if (json_object_get(obj, qbuf, &obj)) obj = NULL; } } if (*ident) obj = NULL; free(qbuf); return obj; } struct json_value * json_new_string(char const *str) { struct json_value *j = json_value_create(json_string); j->v.s = grecs_strdup(str); return j; } struct json_value * json_new_number(double n) { struct json_value *j = json_value_create(json_number); j->v.n = n; return j; } struct json_value * json_new_bool(int b) { struct json_value *j = json_value_create(json_bool); j->v.b = b; return j; } struct json_value * json_new_null(void) { return json_value_create(json_null); } struct json_value * json_new_object(void) { struct json_value *j = json_value_create(json_object); j->v.o = json_assoc_create(); return j; } int json_object_set(struct json_value *obj, char const *name, struct json_value *val) { struct json_pair pair, *ret; int install; if (obj->type != json_object) { errno = EINVAL; return -1; } pair.k = (char*) name; pair.v = NULL; ret = grecs_symtab_lookup_or_install(obj->v.o, &pair, &install); if (install) ret->k = grecs_strdup(ret->k); ret->v = val; return 0; } int json_object_get(struct json_value *obj, char const *name, struct json_value **retval) { struct json_pair pair, *ret; if (obj->type != json_object) { errno = EINVAL; return -1; } pair.k = (char*) name; pair.v = NULL; ret = grecs_symtab_lookup_or_install(obj->v.o, &pair, NULL); if (ret) { *retval = ret->v; return 0; } return 1; } struct json_value * json_new_array(void) { struct json_value *j = json_value_create(json_arr); j->v.a = grecs_malloc(sizeof(*j->v.a)); j->v.a->oc = 0; j->v.a->ov = NULL; j->v.a->ol = NULL; return j; } size_t json_array_size(struct json_value *j) { if (j->type != json_arr) { errno = EINVAL; return 0; } return j->v.a->oc + grecs_list_size(j->v.a->ol); } void json_array_flatten(struct json_value *j) { size_t size, i; struct grecs_list_entry *ep; size = grecs_list_size(j->v.a->ol); if (size == 0) return; j->v.a->ov = grecs_realloc(j->v.a->ov, (j->v.a->oc + size) * sizeof(j->v.a->ov[0])); for (ep = j->v.a->ol->head, i = j->v.a->oc; ep; ep = ep->next, i++) j->v.a->ov[i] = ep->data; j->v.a->oc = i; grecs_list_clear(j->v.a->ol); } int json_array_insert(struct json_value *j, size_t idx, struct json_value *v) { size_t size; if (j->type != json_arr) { errno = EINVAL; return -1; } size = json_array_size(j); if (idx < size) { json_array_flatten(j); j->v.a->ov[idx] = v; } else { size_t i; for (i = size; i < idx; i++) json_array_append(j, NULL); json_array_append(j, v); } return 0; } int json_array_append(struct json_value *j, struct json_value *v) { if (j->type != json_arr) { errno = EINVAL; return -1; } if (!j->v.a->ol) j->v.a->ol = grecs_list_create(); grecs_list_append(j->v.a->ol, v); return 0; } int json_array_set(struct json_value *j, size_t idx, struct json_value *v) { if (j->type != json_arr) { errno = EINVAL; return -1; } if (idx >= json_array_size(j)) { errno = ENOENT; return -1; } json_array_flatten(j); j->v.a->ov[idx] = v; return 0; } int json_array_get(struct json_value *j, size_t idx, struct json_value **retval) { if (j->type != json_arr) { errno = EINVAL; return -1; } if (idx >= json_array_size(j)) { errno = ENOENT; return -1; } json_array_flatten(j); *retval = j->v.a->ov[idx]; return 0; } ��������������������������������������������������������������������direvent-5.2/grecs/src/list.c�����������������������������������������������������������������������0000644�0001750�0001750�00000011403�13244106110�016166� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* grecs - Gray's Extensible Configuration System Copyright (C) 2007-2016 Sergey Poznyakoff Grecs 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. Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include <grecs.h> #include <grecs-gram.h> #include <stdlib.h> #include <string.h> struct grecs_list * grecs_list_create() { struct grecs_list *lp = grecs_malloc(sizeof(*lp)); memset(lp, 0, sizeof(*lp)); return lp; } size_t grecs_list_size(struct grecs_list *lp) { return lp ? lp->count : 0; } void grecs_list_insert_entry(struct grecs_list *lp, struct grecs_list_entry *anchor, struct grecs_list_entry *ent, int before) { struct grecs_list_entry *p; if (!anchor) { ent->prev = NULL; ent->next = lp->head; if (lp->head) lp->head->prev = ent; else lp->tail = ent; lp->head = ent; lp->count++; return; } if (before) { grecs_list_insert_entry(lp, anchor->prev, ent, 0); return; } ent->prev = anchor; if ((p = anchor->next)) p->prev = ent; else lp->tail = ent; ent->next = p; anchor->next = ent; lp->count++; } void grecs_list_remove_entry(struct grecs_list *lp, struct grecs_list_entry *ent) { struct grecs_list_entry *p; if ((p = ent->prev)) p->next = ent->next; else lp->head = ent->next; if ((p = ent->next)) p->prev = ent->prev; else lp->tail = ent->prev; grecs_free(ent); lp->count--; } void * grecs_list_remove_tail(struct grecs_list *lp) { void *data; struct grecs_list_entry *ep; if (!lp || !lp->tail) return NULL; ep = lp->tail; data = lp->tail->data; grecs_list_remove_entry(lp, ep); return data; } static int _ptrcmp(const void *a, const void *b) { return a != b; } int grecs_list_remove(struct grecs_list *lp, void *data) { struct grecs_list_entry *ep; int (*cmp)(const void *, const void *); if (!lp) return 1; cmp = lp->cmp ? lp->cmp : _ptrcmp; for (ep = lp->head; ep; ep = ep->next) { if (cmp(ep->data, data) == 0) { grecs_list_remove_entry(lp, ep); return 0; } } return 1; } void grecs_list_append(struct grecs_list *lp, void *val) { struct grecs_list_entry *ep = grecs_malloc(sizeof(*ep)); ep->data = val; grecs_list_insert_entry(lp, lp->tail, ep, 0); } void grecs_list_add(struct grecs_list *dst, struct grecs_list *src) { if (!src->head) return; src->head->prev = dst->tail; if (dst->tail) dst->tail->next = src->head; else dst->head = src->head; dst->tail = src->tail; dst->count += src->count; src->head = src->tail = NULL; src->count = 0; } void grecs_list_push(struct grecs_list *lp, void *val) { struct grecs_list_entry *ep = grecs_malloc(sizeof(*ep)); ep->data = val; grecs_list_insert_entry(lp, NULL, ep, 0); } void * grecs_list_pop(struct grecs_list *lp) { void *data; struct grecs_list_entry *ep; if (!lp) return NULL; ep = lp->head; if (ep) { data = ep->data; grecs_list_remove_entry(lp, ep); } else data = NULL; return data; } void grecs_list_clear(struct grecs_list *lp) { struct grecs_list_entry *ep; if (!lp) return; ep = lp->head; while (ep) { struct grecs_list_entry *next = ep->next; if (lp->free_entry) lp->free_entry(ep->data); grecs_free(ep); ep = next; } lp->head = lp->tail = NULL; lp->count = 0; } void grecs_list_free(struct grecs_list *lp) { if (lp) { grecs_list_clear(lp); grecs_free(lp); } } void * grecs_list_locate(struct grecs_list *lp, void *data) { struct grecs_list_entry *ep; int (*cmp)(const void *, const void *); if (!lp) return NULL; cmp = lp->cmp ? lp->cmp : _ptrcmp; for (ep = lp->head; ep; ep = ep->next) { if (cmp(ep->data, data) == 0) return ep->data; } return NULL; } void * grecs_list_index(struct grecs_list *lp, size_t idx) { struct grecs_list_entry *ep; if (!lp) return NULL; for (ep = lp->head; ep && idx; ep = ep->next, idx--) ; return ep ? ep->data : NULL; } int grecs_list_compare(struct grecs_list *a, struct grecs_list *b) { struct grecs_list_entry *ap, *bp; int (*cmp)(const void *, const void *); if (!a) return !!b; else if (!b) return 1; if (grecs_list_size(a) != grecs_list_size(b)) return 1; if (a->cmp != b->cmp) return 1; cmp = a->cmp ? a->cmp : _ptrcmp; for (ap = a->head, bp = b->head; ap; ap = ap->next, bp = bp->next) if (cmp(ap->data, bp->data)) return 1; return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/src/parser.c���������������������������������������������������������������������0000644�0001750�0001750�00000003651�13244106110�016515� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* grecs - Gray's Extensible Configuration System Copyright (C) 2007-2016 Sergey Poznyakoff Grecs 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. Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include <stdlib.h> #include <string.h> #include <errno.h> #include "grecs.h" int grecs_error_count = 0; int grecs_default_port = 0; int grecs_trace_flags = 0; int grecs_parser_options = 0; #ifndef GRECS_DEFAULT_PARSER # define GRECS_DEFAULT_PARSER grecs_grecs_parser #endif struct grecs_node *(*grecs_parser_fun)(const char *name, int trace) = GRECS_DEFAULT_PARSER; void grecs_gram_trace(int n) { if (n) grecs_trace_flags |= GRECS_TRACE_GRAM; else grecs_trace_flags &= ~GRECS_TRACE_GRAM; } void grecs_lex_trace(int n) { if (n) grecs_trace_flags |= GRECS_TRACE_LEX; else grecs_trace_flags &= ~GRECS_TRACE_LEX; } struct grecs_node * grecs_parse(const char *name) { if (!grecs_trace_flags) { char *p = getenv("GRECS_DEBUG"); if (p) { while (*p) { switch (*p++) { case 'g': case 'G': grecs_trace_flags |= GRECS_TRACE_GRAM; break; case 'l': case 'L': grecs_trace_flags |= GRECS_TRACE_LEX; break; } } } } grecs_error_count = 0; grecs_current_locus_point.file = grecs_install_text(name); grecs_current_locus_point.line = 1; grecs_current_locus_point.col = 0; return grecs_parser_fun(name, grecs_trace_flags); } ���������������������������������������������������������������������������������������direvent-5.2/grecs/src/asprintf.c�������������������������������������������������������������������0000644�0001750�0001750�00000003614�13244106110�017046� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* grecs - Gray's Extensible Configuration System Copyright (C) 2007-2016 Sergey Poznyakoff Grecs 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. Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include <stdlib.h> #include <string.h> #include <errno.h> #include "grecs.h" int grecs_vasprintf(char **pbuf, size_t *psize, const char *fmt, va_list ap) { char *buf = *pbuf; size_t buflen = *psize; int rc = 0; if (!buf) { if (buflen == 0) buflen = 512; /* Initial allocation */ buf = calloc(1, buflen); if (buf == NULL) return ENOMEM; } for (;;) { va_list aq; ssize_t n; va_copy(aq, ap); n = vsnprintf(buf, buflen, fmt, aq); va_end(aq); if (n < 0 || n >= buflen || !memchr(buf, '\0', n + 1)) { char *newbuf; size_t newlen = buflen * 2; if (newlen < buflen) { rc = ENOMEM; break; } newbuf = realloc(buf, newlen); if (newbuf == NULL) { rc = ENOMEM; break; } buflen = newlen; buf = newbuf; } else break; } if (rc) { if (!*pbuf) { /* We made first allocation, now free it */ free(buf); buf = NULL; buflen = 0; } } *pbuf = buf; *psize = buflen; return rc; } int grecs_asprintf(char **pbuf, size_t *psize, const char *fmt, ...) { int rc; va_list ap; va_start(ap, fmt); rc = grecs_vasprintf(pbuf, psize, fmt, ap); va_end(ap); return rc; } ��������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/src/preproc.c��������������������������������������������������������������������0000644�0001750�0001750�00000041047�13244106110�016674� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* grecs - Gray's Extensible Configuration System Copyright (C) 2007-2016 Sergey Poznyakoff Grecs 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. Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include <grecs.h> #include <wordsplit.h> #include <sys/types.h> #include <sys/stat.h> #include <sys/wait.h> #include <ctype.h> #include <stdio.h> #include <stdlib.h> #include <stdarg.h> #include <string.h> #include <errno.h> #include <signal.h> #include <glob.h> #include <unistd.h> int grecs_log_to_stderr = 1; void (*grecs_log_setup_hook) () = NULL; struct input_file_ident { ino_t i_node; dev_t device; }; struct buffer_ctx { struct buffer_ctx *prev; /* Pointer to previous context */ grecs_locus_t locus; /* Current input location */ size_t namelen; /* Length of the file name */ size_t xlines; /* Number of #line directives output so far */ struct input_file_ident id; FILE *infile; }; extern int grecs_grecs__flex_debug; static struct buffer_ctx *context_stack; static char *linebufbase = NULL; static size_t linebufsize = 0; #define INFILE context_stack->infile #define LOCUS context_stack->locus #define POINT context_stack->locus.beg static char *linebuf; static size_t bufsize; static char *putback_buffer; static size_t putback_size; static size_t putback_max; static glob_t include_glob; static size_t include_pos; static int include_once; static int push_source (const char *name, int once); static int pop_source (void); static int parse_include (const char *text, int once); ssize_t grecs_getline(char **pbuf, size_t *psize, FILE *fp) { char *buf = *pbuf; size_t size = *psize; ssize_t off = 0; if (!buf) { size = 1; buf = grecs_malloc(size); } do { if (off == size - 1) { size_t nsize = 2 * size; if (nsize < size) grecs_alloc_die(); buf = grecs_realloc(buf, nsize); size = nsize; } if (!fgets(buf + off, size - off, fp)) { if (off == 0) off = -1; break; } off += strlen(buf + off); } while (buf[off - 1] != '\n'); *pbuf = buf; *psize = size; return off; } static void putback(const char *str) { size_t len; if (!*str) return; len = strlen(str) + 1; if (len > putback_max) { putback_max = len; putback_buffer = grecs_realloc(putback_buffer, putback_max); } strcpy(putback_buffer, str); putback_size = len - 1; } static void pp_line_stmt() { size_t ls_size; size_t pb_size; if (grecs_asprintf(&linebufbase, &linebufsize, "#line %lu \"%s\" %lu\n", (unsigned long) POINT.line, POINT.file, (unsigned long) context_stack->xlines)) grecs_alloc_die(); ls_size = strlen(linebufbase); pb_size = putback_size + ls_size + 1; if (pb_size > putback_max) { putback_max = pb_size; putback_buffer = grecs_realloc(putback_buffer, putback_max); } context_stack->xlines++; strcpy(putback_buffer + putback_size, linebufbase); putback_size += ls_size; } #define STRMATCH(p, len, s) (len >= sizeof(s) \ && memcmp(p, s, sizeof(s) - 1) == 0 \ && isspace(p[sizeof(s) - 1])) static int next_line() { ssize_t rc; do { if (putback_size) { if (putback_size + 1 > bufsize) { bufsize = putback_size + 1; linebuf = grecs_realloc(linebuf, bufsize); } strcpy(linebuf, putback_buffer); rc = putback_size; putback_size = 0; } else if (!context_stack) return 0; else rc = grecs_getline(&linebuf, &bufsize, INFILE); } while (rc == -1 && pop_source() == 0); return rc; } size_t grecs_preproc_fill_buffer(char *buf, size_t size) { size_t bufsize = size; while (next_line() > 0) { char *p; size_t len; int is_line = 0; for (p = linebuf; *p && isspace(*p); p++) ; if (*p == '#') { size_t l; for (p++; *p && isspace(*p); p++) ; l = strlen(p); if (STRMATCH(p, l, "include_once")) { if (parse_include(linebuf, 1)) putback("/*include_once*/\n"); continue; } else if (STRMATCH(p, l, "include")) { if (parse_include(linebuf, 0)) putback("/*include*/\n"); continue; } else if (STRMATCH(p, l, "line")) is_line = 1; } len = strlen(linebuf); if (len > size) len = size; memcpy(buf, linebuf, len); buf += len; size -= len; if (size == 0) { putback(linebuf + len); break; } if (!is_line && len > 0 && linebuf[len - 1] == '\n') POINT.line++; } return bufsize - size; } #define STAT_ID_EQ(st,id) ((id).i_node == (st).st_ino \ && (id).device == (st).st_dev) static struct buffer_ctx * ctx_lookup(struct stat *st) { struct buffer_ctx *ctx; if (!context_stack) return NULL; for (ctx = context_stack->prev; ctx; ctx = ctx->prev) if (STAT_ID_EQ(*st, ctx->id)) break; return ctx; } const char *grecs_preprocessor = NULL; static struct grecs_list *grecs_usr_include_path; static struct grecs_list *grecs_std_include_path; size_t grecs_include_path_count(int flag) { size_t count = 0; if (flag & GRECS_STD_INCLUDE) count += grecs_list_size(grecs_std_include_path); if (flag & GRECS_USR_INCLUDE) count += grecs_list_size(grecs_usr_include_path); return count; } static int foreach_dir(struct grecs_list *list, int flag, int (*fun)(int, const char *, void *), void *data) { int rc = 0; struct grecs_list_entry *ep; for (ep = list->head; rc == 0 && ep; ep = ep->next) rc = fun(flag, ep->data, data); return rc; } int grecs_foreach_include_dir(int flag, int (*fun)(int, const char *, void *), void *data) { int rc = 0; if (flag & GRECS_STD_INCLUDE) rc = foreach_dir(grecs_std_include_path, GRECS_STD_INCLUDE, fun, data); if (rc == 0 && (flag & GRECS_USR_INCLUDE)) rc = foreach_dir(grecs_usr_include_path, GRECS_USR_INCLUDE, fun, data); return rc; } struct file_data { const char *name; size_t namelen; char *buf; size_t buflen; int found; }; static int pp_list_find(struct grecs_list *list, struct file_data *dptr) { struct grecs_list_entry *ep; if (!list) return 0; for (ep = list->head; !dptr->found && ep; ep = ep->next) { const char *dir = ep->data; size_t size = strlen (dir) + 1 + dptr->namelen + 1; if (size > dptr->buflen) { dptr->buflen = size; dptr->buf = grecs_realloc(dptr->buf, dptr->buflen); } strcpy(dptr->buf, dir); strcat(dptr->buf, "/"); strcat(dptr->buf, dptr->name); dptr->found = access(dptr->buf, F_OK) == 0; } return dptr->found; } static void incl_free(void *data) { grecs_free(data); } void grecs_include_path_clear() { if (grecs_usr_include_path) grecs_list_clear(grecs_usr_include_path); if (grecs_std_include_path) grecs_list_clear(grecs_std_include_path); } void grecs_include_path_setup_v(char **dirs) { if (!grecs_usr_include_path) { grecs_usr_include_path = grecs_list_create(); grecs_usr_include_path->free_entry = incl_free; } grecs_std_include_path = grecs_list_create(); grecs_std_include_path->free_entry = incl_free; if (dirs) { int i; for (i = 0; dirs[i]; i++) /* FIXME: Element never freed */ grecs_list_append(grecs_std_include_path, grecs_strdup(dirs[i])); } } void grecs_include_path_setup(const char *dir, ...) { const char *p; char **argv = NULL; size_t argc = 0; size_t argi = 0; va_list ap; va_start(ap, dir); p = dir; while (1) { if (argi == argc) { if (argc == 0) argc = 16; else argc += 16; argv = grecs_realloc(argv, argc * sizeof(argv[0])); } argv[argi++] = (char*) p; if (!p) break; p = va_arg(ap, const char*); } grecs_include_path_setup_v(argv); grecs_free(argv); va_end(ap); } void grecs_preproc_add_include_dir(char *dir) { if (!grecs_usr_include_path) { grecs_usr_include_path = grecs_list_create(); grecs_usr_include_path->free_entry = incl_free; } grecs_list_append(grecs_usr_include_path, grecs_strdup(dir)); } static struct grecs_symtab *incl_sources; /* Calculate the hash of a struct input_file_ident. */ static unsigned incl_hasher(void *data, unsigned long n_buckets) { const struct input_file_ident *id = data; return (id->i_node + id->device) % n_buckets; } /* Compare two input_file_idents for equality. */ static int incl_compare(void const *data1, void const *data2) { const struct input_file_ident *id1 = data1; const struct input_file_ident *id2 = data2; return !(id1->device == id2->device && id1->i_node == id2->i_node); } static int incl_copy(void *dst, void *src) { memcpy(dst, src, sizeof(struct input_file_ident)); return 0; } static int source_lookup(struct stat *st) { struct input_file_ident key; int install = 1; if (!incl_sources) { incl_sources = grecs_symtab_create( sizeof(struct input_file_ident), incl_hasher, incl_compare, incl_copy, NULL,/*FIXME: alloc*/ NULL); if (!incl_sources) grecs_alloc_die(); } key.i_node = st->st_ino; key.device = st->st_dev; if (!grecs_symtab_lookup_or_install(incl_sources, &key, &install)) grecs_alloc_die(); return !install; } static int push_source(const char *name, int once) { FILE *fp; struct buffer_ctx *ctx; struct stat st; int rc = stat(name, &st); if (context_stack) { if (rc) { grecs_error(&LOCUS, errno, _("Cannot stat `%s'"), name); return 1; } if (POINT.file && STAT_ID_EQ(st, context_stack->id)) { grecs_error(&LOCUS, 0, _("Recursive inclusion")); return 1; } if ((ctx = ctx_lookup(&st))) { grecs_error(&LOCUS, 0, _("Recursive inclusion")); if (ctx->prev) grecs_error(&ctx->prev->locus, 0, _("`%s' already included here"), name); else grecs_error(&LOCUS, 0, _("`%s' already included at top level"), name); return 1; } } else if (rc) { grecs_error(NULL, errno, _("Cannot stat `%s'"), name); return 1; } if (once && source_lookup(&st)) return -1; fp = fopen(name, "r"); if (!fp) { grecs_error(context_stack ? &LOCUS : NULL, errno, _("Cannot open `%s'"), name); return 1; } /* Push current context */ ctx = grecs_malloc(sizeof(*ctx)); ctx->locus.beg.file = grecs_install_text(name); ctx->locus.beg.line = 1; ctx->locus.beg.col = 0; ctx->locus.end.file = NULL; ctx->locus.end.line = ctx->locus.end.col = 0; ctx->xlines = 0; ctx->namelen = strlen(ctx->locus.beg.file); ctx->id.i_node = st.st_ino; ctx->id.device = st.st_dev; ctx->infile = fp; ctx->prev = context_stack; context_stack = ctx; if (grecs_grecs__flex_debug) fprintf (stderr, "Processing file `%s'\n", name); pp_line_stmt(); return 0; } static int pop_source() { struct buffer_ctx *ctx; if (!context_stack) return 1; fclose(INFILE); /* Restore previous context */ ctx = context_stack->prev; grecs_free(context_stack); context_stack = ctx; if (include_pos < include_glob.gl_pathc) { push_source(include_glob.gl_pathv[include_pos++], include_once); return 0; } else if (include_glob.gl_pathc) { globfree(&include_glob); include_pos = include_glob.gl_pathc = 0; } if (!context_stack) { if (grecs_grecs__flex_debug) fprintf(stderr, "End of input\n"); return 1; } POINT.line++; if (grecs_grecs__flex_debug) fprintf(stderr, "Resuming file `%s' at line %lu\n", POINT.file, (unsigned long) POINT.line); pp_line_stmt(); return 0; } char * grecs_find_include_file(const char *name, int allow_cwd) { static char *cwd = "."; struct file_data fd; fd.name = name; fd.namelen = strlen(name); fd.buf = NULL; fd.buflen = 0; fd.found = 0; if (!grecs_usr_include_path) grecs_include_path_setup(NULL); if (allow_cwd) { grecs_list_append(grecs_usr_include_path, cwd); pp_list_find(grecs_usr_include_path, &fd); grecs_list_remove_tail(grecs_usr_include_path); } else pp_list_find(grecs_usr_include_path, &fd); if (!fd.found) { pp_list_find(grecs_std_include_path, &fd); if (!fd.found) return NULL; } return fd.buf; } static int isglob(const char *s) { for (; *s; s++) { if (strchr("*?[", *s)) return 1; } return 0; } static int parse_include(const char *text, int once) { struct wordsplit ws; char *tmp = NULL; char *p = NULL; int rc = 1; if (wordsplit(text, &ws, WRDSF_DEFFLAGS)) grecs_error(&LOCUS, 0, _("Cannot parse include line")); else if (ws.ws_wordc != 2) { wordsplit_free(&ws); grecs_error(&LOCUS, 0, _("invalid include statement")); } else { size_t len; int allow_cwd; p = ws.ws_wordv[1]; len = strlen (p); if (p[0] == '<' && p[len - 1] == '>') { allow_cwd = 0; p[len - 1] = 0; p++; } else allow_cwd = 1; if (isglob(p)) { switch (glob(p, 0, NULL, &include_glob)) { case 0: include_pos = 0; include_once = once; break; case GLOB_NOSPACE: grecs_alloc_die(); case GLOB_NOMATCH: break; default: grecs_error(&LOCUS, 0, _("read error")); } p = NULL; } else if (p[0] != '/') { char *q = p; p = grecs_find_include_file(q, allow_cwd); if (!p) grecs_error(&LOCUS, 0, _("%s: No such file or directory"), q); } } if (p) rc = push_source(p, once); else if (include_pos < include_glob.gl_pathc) rc = push_source(include_glob.gl_pathv[include_pos++], once); grecs_free(tmp); wordsplit_free(&ws); return rc; } int grecs_preproc_init(const char *name) { return push_source(name, 0); } void grecs_preproc_done() { grecs_symtab_free(incl_sources); incl_sources = NULL; grecs_free(linebuf); linebuf = NULL; bufsize = 0; grecs_free(putback_buffer); putback_buffer = NULL; putback_size = putback_max = 0; free(linebufbase); /* Allocated via standard malloc/realloc */ linebufbase = NULL; linebufsize = 0; } int grecs_preproc_run(const char *config_file, const char *extpp) { size_t i; char buffer[512]; if (grecs_preproc_init(config_file)) return 1; if (extpp) { FILE *outfile; char *setup_file; char *cmd = NULL; setup_file = grecs_find_include_file("pp-setup", 1); if (setup_file) { size_t size = 0; if (grecs_asprintf(&cmd, &size, "%s %s -", extpp, setup_file)) grecs_alloc_die(); grecs_free(setup_file); } else cmd = grecs_strdup(extpp); /*FIXME_DEBUG_F1 (2, "Running preprocessor: `%s'", cmd);*/ outfile = popen(cmd, "w"); if (!outfile) { grecs_error(NULL, errno, _("Unable to start external preprocessor `%s'"), cmd); grecs_free(cmd); return 1; } while ((i = grecs_preproc_fill_buffer(buffer, sizeof buffer))) fwrite(buffer, 1, i, outfile); pclose(outfile); grecs_free(cmd); } else { while ((i = grecs_preproc_fill_buffer(buffer, sizeof buffer))) fwrite(buffer, 1, i, stdout); } grecs_preproc_done(); return 0; } FILE * grecs_preproc_extrn_start(const char *file_name, pid_t *ppid) { int pout[2]; pid_t pid; int i; FILE *fp = NULL; /*FIXME_DEBUG_F1 (2, "Running preprocessor: `%s'", ppcmd);*/ if (pipe(pout)) { grecs_error(NULL, errno, "pipe"); return NULL; } switch (pid = fork()) { /* The child branch. */ case 0: if (pout[1] != 1) { if (dup2(pout[1], 1) == -1) { grecs_error(NULL, errno, "dup2"); exit(127); } } /* Close unneeded descripitors */ for (i = getdtablesize(); i > 2; i--) close(i); if (!grecs_log_to_stderr) { int p[2]; char *buf = NULL; size_t size = 0; FILE *fp; signal(SIGCHLD, SIG_DFL); if (pipe(p)) { grecs_error(NULL, errno, "pipe"); exit(127); } switch (pid = fork()) { /* Grandchild */ case 0: if (p[1] != 2 && dup2(p[1], 2) == -1) { grecs_error(NULL, errno, "dup2"); exit(127); } close(p[0]); if (grecs_preproc_run(file_name, grecs_preprocessor)) exit(127); exit(0); case -1: /* Fork failed */ if (grecs_log_setup_hook) grecs_log_setup_hook(); grecs_error(NULL, errno, _("Cannot run `%s'"), grecs_preprocessor); exit(127); default: /* Sub-master */ close (p[1]); fp = fdopen(p[0], "r"); if (grecs_log_setup_hook) grecs_log_setup_hook(); while (grecs_getline(&buf, &size, fp) > 0) grecs_error(NULL, 0, "%s", buf); } } else { grecs_preproc_run(file_name, grecs_preprocessor); } exit (0); case -1: /* Fork failed */ grecs_error(NULL, errno, _("Cannot run `%s'"), grecs_preprocessor); break; default: close(pout[1]); fp = fdopen(pout[0], "r"); break; } *ppid = pid; return fp; } void grecs_preproc_extrn_shutdown(pid_t pid) { int status; waitpid(pid, &status, 0); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/src/bind-gram.c������������������������������������������������������������������0000644�0001750�0001750�00000207023�13244106172�017070� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A Bison parser, made by GNU Bison 2.7. */ /* Bison implementation for Yacc-like parsers in C Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* C LALR(1) parser skeleton written by Richard Stallman, by simplifying the original so-called "semantic" parser. */ /* All symbols defined below should begin with grecs_bind_ or YY, to avoid infringing on user name space. This should be done even for local variables, as they might otherwise be expanded by user macros. There are some unavoidable exceptions within include files to define necessary library symbols; they are noted "INFRINGES ON USER NAME SPACE" below. */ /* Identify Bison output. */ #define YYBISON 1 /* Bison version. */ #define YYBISON_VERSION "2.7" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" /* Pure parsers. */ #define YYPURE 0 /* Push parsers. */ #define YYPUSH 0 /* Pull parsers. */ #define YYPULL 1 /* Copy the first part of user declarations. */ /* Line 371 of yacc.c */ #line 1 "bind-gram.y" /* grecs - Gray's Extensible Configuration System Copyright (C) 2007-2016 Sergey Poznyakoff Grecs 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. Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include <grecs.h> #include <bind-gram.h> #include <stdlib.h> #include <stdarg.h> #include <string.h> #include <errno.h> int grecs_bind_lex(void); int grecs_bind_error(char const *s); static struct grecs_node *parse_tree; extern int grecs_bind__flex_debug; extern int grecs_bind_new_source(const char *name, grecs_locus_t *loc); extern void grecs_bind_close_sources(void); static struct grecs_value *stmtlist_to_value(struct grecs_node *node); /* Line 371 of yacc.c */ #line 106 "bind-gram.c" # ifndef YY_NULL # if defined __cplusplus && 201103L <= __cplusplus # define YY_NULL nullptr # else # define YY_NULL 0 # endif # endif /* Enabling verbose error messages. */ #ifdef YYERROR_VERBOSE # undef YYERROR_VERBOSE # define YYERROR_VERBOSE 1 #else # define YYERROR_VERBOSE 1 #endif /* In a future release of Bison, this section will be replaced by #include "y.tab.h". */ #ifndef YY_YY_Y_TAB_H_INCLUDED # define YY_YY_Y_TAB_H_INCLUDED /* Enabling traces. */ #ifndef YYDEBUG # define YYDEBUG 1 #endif #if YYDEBUG extern int grecs_bind_debug; #endif /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE /* Put the tokens into the symbol table, so that GDB and other debuggers know about them. */ enum grecs_bind_tokentype { BIND_STRING = 258, BIND_IDENT = 259, BIND_CONTROLS = 260 }; #endif /* Tokens. */ #define BIND_STRING 258 #define BIND_IDENT 259 #define BIND_CONTROLS 260 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE { /* Line 387 of yacc.c */ #line 42 "bind-gram.y" char *string; grecs_value_t svalue, *pvalue; struct grecs_list *list; struct grecs_node *node; grecs_locus_t locus; struct { struct grecs_node *head, *tail; } node_list; /* Line 387 of yacc.c */ #line 169 "bind-gram.c" } YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define grecs_bind_stype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 #endif #if ! defined YYLTYPE && ! defined YYLTYPE_IS_DECLARED typedef struct YYLTYPE { int first_line; int first_column; int last_line; int last_column; } YYLTYPE; # define grecs_bind_ltype YYLTYPE /* obsolescent; will be withdrawn */ # define YYLTYPE_IS_DECLARED 1 # define YYLTYPE_IS_TRIVIAL 1 #endif extern YYSTYPE grecs_bind_lval; extern YYLTYPE grecs_bind_lloc; #ifdef YYPARSE_PARAM #if defined __STDC__ || defined __cplusplus int grecs_bind_parse (void *YYPARSE_PARAM); #else int grecs_bind_parse (); #endif #else /* ! YYPARSE_PARAM */ #if defined __STDC__ || defined __cplusplus int grecs_bind_parse (void); #else int grecs_bind_parse (); #endif #endif /* ! YYPARSE_PARAM */ #endif /* !YY_YY_Y_TAB_H_INCLUDED */ /* Copy the second part of user declarations. */ /* Line 390 of yacc.c */ #line 210 "bind-gram.c" #ifdef short # undef short #endif #ifdef YYTYPE_UINT8 typedef YYTYPE_UINT8 grecs_bind_type_uint8; #else typedef unsigned char grecs_bind_type_uint8; #endif #ifdef YYTYPE_INT8 typedef YYTYPE_INT8 grecs_bind_type_int8; #elif (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) typedef signed char grecs_bind_type_int8; #else typedef short int grecs_bind_type_int8; #endif #ifdef YYTYPE_UINT16 typedef YYTYPE_UINT16 grecs_bind_type_uint16; #else typedef unsigned short int grecs_bind_type_uint16; #endif #ifdef YYTYPE_INT16 typedef YYTYPE_INT16 grecs_bind_type_int16; #else typedef short int grecs_bind_type_int16; #endif #ifndef YYSIZE_T # ifdef __SIZE_TYPE__ # define YYSIZE_T __SIZE_TYPE__ # elif defined size_t # define YYSIZE_T size_t # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include <stddef.h> /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # else # define YYSIZE_T unsigned int # endif #endif #define YYSIZE_MAXIMUM ((YYSIZE_T) -1) #ifndef YY_ # if defined YYENABLE_NLS && YYENABLE_NLS # if ENABLE_NLS # include <libintl.h> /* INFRINGES ON USER NAME SPACE */ # define YY_(Msgid) dgettext ("bison-runtime", Msgid) # endif # endif # ifndef YY_ # define YY_(Msgid) Msgid # endif #endif /* Suppress unused-variable warnings by "using" E. */ #if ! defined lint || defined __GNUC__ # define YYUSE(E) ((void) (E)) #else # define YYUSE(E) /* empty */ #endif /* Identity function, used to suppress warnings about constant conditions. */ #ifndef lint # define YYID(N) (N) #else #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static int YYID (int grecs_bind_i) #else static int YYID (grecs_bind_i) int grecs_bind_i; #endif { return grecs_bind_i; } #endif #if ! defined grecs_bind_overflow || YYERROR_VERBOSE /* The parser invokes alloca or malloc; define the necessary symbols. */ # ifdef YYSTACK_USE_ALLOCA # if YYSTACK_USE_ALLOCA # ifdef __GNUC__ # define YYSTACK_ALLOC __builtin_alloca # elif defined __BUILTIN_VA_ARG_INCR # include <alloca.h> /* INFRINGES ON USER NAME SPACE */ # elif defined _AIX # define YYSTACK_ALLOC __alloca # elif defined _MSC_VER # include <malloc.h> /* INFRINGES ON USER NAME SPACE */ # define alloca _alloca # else # define YYSTACK_ALLOC alloca # if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ /* Use EXIT_SUCCESS as a witness for stdlib.h. */ # ifndef EXIT_SUCCESS # define EXIT_SUCCESS 0 # endif # endif # endif # endif # endif # ifdef YYSTACK_ALLOC /* Pacify GCC's `empty if-body' warning. */ # define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) # ifndef YYSTACK_ALLOC_MAXIMUM /* The OS might guarantee only one guard page at the bottom of the stack, and a page size can be as small as 4096 bytes. So we cannot safely invoke alloca (N) if N exceeds 4096. Use a slightly smaller number to allow for a few compiler-allocated temporary stack slots. */ # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ # endif # else # define YYSTACK_ALLOC YYMALLOC # define YYSTACK_FREE YYFREE # ifndef YYSTACK_ALLOC_MAXIMUM # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM # endif # if (defined __cplusplus && ! defined EXIT_SUCCESS \ && ! ((defined YYMALLOC || defined malloc) \ && (defined YYFREE || defined free))) # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ # ifndef EXIT_SUCCESS # define EXIT_SUCCESS 0 # endif # endif # ifndef YYMALLOC # define YYMALLOC malloc # if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ # endif # endif # ifndef YYFREE # define YYFREE free # if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) void free (void *); /* INFRINGES ON USER NAME SPACE */ # endif # endif # endif #endif /* ! defined grecs_bind_overflow || YYERROR_VERBOSE */ #if (! defined grecs_bind_overflow \ && (! defined __cplusplus \ || (defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL \ && defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) /* A type that is properly aligned for any stack member. */ union grecs_bind_alloc { grecs_bind_type_int16 grecs_bind_ss_alloc; YYSTYPE grecs_bind_vs_alloc; YYLTYPE grecs_bind_ls_alloc; }; /* The size of the maximum gap between one aligned stack and the next. */ # define YYSTACK_GAP_MAXIMUM (sizeof (union grecs_bind_alloc) - 1) /* The size of an array large to enough to hold all stacks, each with N elements. */ # define YYSTACK_BYTES(N) \ ((N) * (sizeof (grecs_bind_type_int16) + sizeof (YYSTYPE) + sizeof (YYLTYPE)) \ + 2 * YYSTACK_GAP_MAXIMUM) # define YYCOPY_NEEDED 1 /* Relocate STACK from its old location to the new one. The local variables YYSIZE and YYSTACKSIZE give the old and new number of elements in the stack, and YYPTR gives the new location of the stack. Advance YYPTR to a properly aligned location for the next stack. */ # define YYSTACK_RELOCATE(Stack_alloc, Stack) \ do \ { \ YYSIZE_T grecs_bind_newbytes; \ YYCOPY (&grecs_bind_ptr->Stack_alloc, Stack, grecs_bind_size); \ Stack = &grecs_bind_ptr->Stack_alloc; \ grecs_bind_newbytes = grecs_bind_stacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ grecs_bind_ptr += grecs_bind_newbytes / sizeof (*grecs_bind_ptr); \ } \ while (YYID (0)) #endif #if defined YYCOPY_NEEDED && YYCOPY_NEEDED /* Copy COUNT objects from SRC to DST. The source and destination do not overlap. */ # ifndef YYCOPY # if defined __GNUC__ && 1 < __GNUC__ # define YYCOPY(Dst, Src, Count) \ __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src))) # else # define YYCOPY(Dst, Src, Count) \ do \ { \ YYSIZE_T grecs_bind_i; \ for (grecs_bind_i = 0; grecs_bind_i < (Count); grecs_bind_i++) \ (Dst)[grecs_bind_i] = (Src)[grecs_bind_i]; \ } \ while (YYID (0)) # endif # endif #endif /* !YYCOPY_NEEDED */ /* YYFINAL -- State number of the termination state. */ #define YYFINAL 20 /* YYLAST -- Last index in YYTABLE. */ #define YYLAST 43 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 10 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 14 /* YYNRULES -- Number of rules. */ #define YYNRULES 25 /* YYNRULES -- Number of states. */ #define YYNSTATES 40 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 #define YYMAXUTOK 260 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? grecs_bind_translate[YYX] : YYUNDEFTOK) /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ static const grecs_bind_type_uint8 grecs_bind_translate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 7, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 8, 2, 9, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, 5 }; #if YYDEBUG /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in YYRHS. */ static const grecs_bind_type_uint8 grecs_bind_prhs[] = { 0, 0, 3, 5, 6, 8, 10, 13, 15, 17, 21, 24, 28, 35, 41, 42, 44, 46, 48, 51, 53, 55, 57, 60, 62, 65 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ static const grecs_bind_type_int8 grecs_bind_rhs[] = { 11, 0, -1, 12, -1, -1, 13, -1, 14, -1, 13, 14, -1, 15, -1, 16, -1, 4, 18, 6, -1, 21, 6, -1, 7, 21, 6, -1, 4, 17, 8, 12, 9, 6, -1, 5, 8, 22, 9, 6, -1, -1, 18, -1, 19, -1, 20, -1, 19, 20, -1, 21, -1, 3, -1, 4, -1, 23, 6, -1, 20, -1, 23, 20, -1, 23, 8, 13, 9, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const grecs_bind_type_uint8 grecs_bind_rline[] = { 0, 61, 61, 71, 74, 80, 84, 96, 97, 100, 114, 121, 134, 143, 166, 169, 172, 196, 201, 207, 215, 216, 219, 227, 232, 236 }; #endif #if YYDEBUG || YYERROR_VERBOSE || 1 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char *const grecs_bind_tname[] = { "$end", "error", "$undefined", "BIND_STRING", "BIND_IDENT", "BIND_CONTROLS", "';'", "'!'", "'{'", "'}'", "$accept", "input", "maybe_stmtlist", "stmtlist", "stmt", "simple", "block", "tag", "vallist", "vlist", "value", "string", "ctlsub", "ctllist", YY_NULL }; #endif # ifdef YYPRINT /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to token YYLEX-NUM. */ static const grecs_bind_type_uint16 grecs_bind_toknum[] = { 0, 256, 257, 258, 259, 260, 59, 33, 123, 125 }; # endif /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const grecs_bind_type_uint8 grecs_bind_r1[] = { 0, 10, 11, 12, 12, 13, 13, 14, 14, 15, 15, 15, 16, 16, 17, 17, 18, 19, 19, 20, 21, 21, 22, 23, 23, 23 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ static const grecs_bind_type_uint8 grecs_bind_r2[] = { 0, 2, 1, 0, 1, 1, 2, 1, 1, 3, 2, 3, 6, 5, 0, 1, 1, 1, 2, 1, 1, 1, 2, 1, 2, 4 }; /* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM. Performed when YYTABLE doesn't specify something else to do. Zero means the default is an error. */ static const grecs_bind_type_uint8 grecs_bind_defact[] = { 3, 20, 14, 0, 0, 0, 2, 4, 5, 7, 8, 0, 21, 0, 15, 16, 17, 19, 0, 0, 1, 6, 10, 3, 9, 18, 23, 0, 0, 11, 0, 0, 22, 0, 24, 0, 13, 0, 12, 25 }; /* YYDEFGOTO[NTERM-NUM]. */ static const grecs_bind_type_int8 grecs_bind_defgoto[] = { -1, 5, 6, 7, 8, 9, 10, 13, 14, 15, 16, 11, 27, 28 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ #define YYPACT_NINF -14 static const grecs_bind_type_int8 grecs_bind_pact[] = { 21, -14, 28, -4, 32, 9, -14, 21, -14, -14, -14, 5, -14, 8, 7, 32, -14, -14, 32, 14, -14, -14, -14, 21, -14, -14, -14, 13, 15, -14, 20, 27, -14, 21, -14, 31, -14, 3, -14, -14 }; /* YYPGOTO[NTERM-NUM]. */ static const grecs_bind_type_int8 grecs_bind_pgoto[] = { -14, -14, 16, 10, -7, -14, -14, -14, -14, -14, -13, -1, -14, -14 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule which number is the opposite. If YYTABLE_NINF, syntax error. */ #define YYTABLE_NINF -22 static const grecs_bind_type_int8 grecs_bind_table[] = { 21, 17, 25, 19, 18, 26, 1, 2, 3, 20, 4, 22, 39, 24, 17, 34, 23, 17, 1, 12, 29, 32, 31, 33, 1, 2, 3, 17, 4, 35, 21, 1, 12, 36, -21, 1, 12, 38, 0, 30, 0, 0, 0, 37 }; #define grecs_bind_pact_value_is_default(Yystate) \ (!!((Yystate) == (-14))) #define grecs_bind_table_value_is_error(Yytable_value) \ YYID (0) static const grecs_bind_type_int8 grecs_bind_check[] = { 7, 2, 15, 4, 8, 18, 3, 4, 5, 0, 7, 6, 9, 6, 15, 28, 8, 18, 3, 4, 6, 6, 9, 8, 3, 4, 5, 28, 7, 9, 37, 3, 4, 6, 6, 3, 4, 6, -1, 23, -1, -1, -1, 33 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const grecs_bind_type_uint8 grecs_bind_stos[] = { 0, 3, 4, 5, 7, 11, 12, 13, 14, 15, 16, 21, 4, 17, 18, 19, 20, 21, 8, 21, 0, 14, 6, 8, 6, 20, 20, 22, 23, 6, 12, 9, 6, 8, 20, 9, 6, 13, 6, 9 }; #define grecs_bind_errok (grecs_bind_errstatus = 0) #define grecs_bind_clearin (grecs_bind_char = YYEMPTY) #define YYEMPTY (-2) #define YYEOF 0 #define YYACCEPT goto grecs_bind_acceptlab #define YYABORT goto grecs_bind_abortlab #define YYERROR goto grecs_bind_errorlab /* Like YYERROR except do call grecs_bind_error. This remains here temporarily to ease the transition to the new meaning of YYERROR, for GCC. Once GCC version 2 has supplanted version 1, this can go. However, YYFAIL appears to be in use. Nevertheless, it is formally deprecated in Bison 2.4.2's NEWS entry, where a plan to phase it out is discussed. */ #define YYFAIL goto grecs_bind_errlab #if defined YYFAIL /* This is here to suppress warnings from the GCC cpp's -Wunused-macros. Normally we don't worry about that warning, but some users do, and we want to make it easy for users to remove YYFAIL uses, which will produce warnings from Bison 2.5. */ #endif #define YYRECOVERING() (!!grecs_bind_errstatus) #define YYBACKUP(Token, Value) \ do \ if (grecs_bind_char == YYEMPTY) \ { \ grecs_bind_char = (Token); \ grecs_bind_lval = (Value); \ YYPOPSTACK (grecs_bind_len); \ grecs_bind_state = *grecs_bind_ssp; \ goto grecs_bind_backup; \ } \ else \ { \ grecs_bind_error (YY_("syntax error: cannot back up")); \ YYERROR; \ } \ while (YYID (0)) /* Error token number */ #define YYTERROR 1 #define YYERRCODE 256 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. If N is 0, then set CURRENT to the empty location which ends the previous symbol: RHS[0] (always defined). */ #ifndef YYLLOC_DEFAULT # define YYLLOC_DEFAULT(Current, Rhs, N) \ do \ if (YYID (N)) \ { \ (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ } \ else \ { \ (Current).first_line = (Current).last_line = \ YYRHSLOC (Rhs, 0).last_line; \ (Current).first_column = (Current).last_column = \ YYRHSLOC (Rhs, 0).last_column; \ } \ while (YYID (0)) #endif #define YYRHSLOC(Rhs, K) ((Rhs)[K]) /* YY_LOCATION_PRINT -- Print the location on the stream. This macro was not mandated originally: define only if we know we won't break user code: when these are the locations we know. */ #ifndef YY_LOCATION_PRINT # if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL /* Print *YYLOCP on YYO. Private, do not rely on its existence. */ __attribute__((__unused__)) #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static unsigned grecs_bind__location_print_ (FILE *grecs_bind_o, YYLTYPE const * const grecs_bind_locp) #else static unsigned grecs_bind__location_print_ (grecs_bind_o, grecs_bind_locp) FILE *grecs_bind_o; YYLTYPE const * const grecs_bind_locp; #endif { unsigned res = 0; int end_col = 0 != grecs_bind_locp->last_column ? grecs_bind_locp->last_column - 1 : 0; if (0 <= grecs_bind_locp->first_line) { res += fprintf (grecs_bind_o, "%d", grecs_bind_locp->first_line); if (0 <= grecs_bind_locp->first_column) res += fprintf (grecs_bind_o, ".%d", grecs_bind_locp->first_column); } if (0 <= grecs_bind_locp->last_line) { if (grecs_bind_locp->first_line < grecs_bind_locp->last_line) { res += fprintf (grecs_bind_o, "-%d", grecs_bind_locp->last_line); if (0 <= end_col) res += fprintf (grecs_bind_o, ".%d", end_col); } else if (0 <= end_col && grecs_bind_locp->first_column < end_col) res += fprintf (grecs_bind_o, "-%d", end_col); } return res; } # define YY_LOCATION_PRINT(File, Loc) \ grecs_bind__location_print_ (File, &(Loc)) # else # define YY_LOCATION_PRINT(File, Loc) ((void) 0) # endif #endif /* YYLEX -- calling `grecs_bind_lex' with the right arguments. */ #ifdef YYLEX_PARAM # define YYLEX grecs_bind_lex (YYLEX_PARAM) #else # define YYLEX grecs_bind_lex () #endif /* Enable debugging if requested. */ #if YYDEBUG # ifndef YYFPRINTF # include <stdio.h> /* INFRINGES ON USER NAME SPACE */ # define YYFPRINTF fprintf # endif # define YYDPRINTF(Args) \ do { \ if (grecs_bind_debug) \ YYFPRINTF Args; \ } while (YYID (0)) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ do { \ if (grecs_bind_debug) \ { \ YYFPRINTF (stderr, "%s ", Title); \ grecs_bind__symbol_print (stderr, \ Type, Value, Location); \ YYFPRINTF (stderr, "\n"); \ } \ } while (YYID (0)) /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ /*ARGSUSED*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void grecs_bind__symbol_value_print (FILE *grecs_bind_output, int grecs_bind_type, YYSTYPE const * const grecs_bind_valuep, YYLTYPE const * const grecs_bind_locationp) #else static void grecs_bind__symbol_value_print (grecs_bind_output, grecs_bind_type, grecs_bind_valuep, grecs_bind_locationp) FILE *grecs_bind_output; int grecs_bind_type; YYSTYPE const * const grecs_bind_valuep; YYLTYPE const * const grecs_bind_locationp; #endif { FILE *grecs_bind_o = grecs_bind_output; YYUSE (grecs_bind_o); if (!grecs_bind_valuep) return; YYUSE (grecs_bind_locationp); # ifdef YYPRINT if (grecs_bind_type < YYNTOKENS) YYPRINT (grecs_bind_output, grecs_bind_toknum[grecs_bind_type], *grecs_bind_valuep); # else YYUSE (grecs_bind_output); # endif switch (grecs_bind_type) { default: break; } } /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void grecs_bind__symbol_print (FILE *grecs_bind_output, int grecs_bind_type, YYSTYPE const * const grecs_bind_valuep, YYLTYPE const * const grecs_bind_locationp) #else static void grecs_bind__symbol_print (grecs_bind_output, grecs_bind_type, grecs_bind_valuep, grecs_bind_locationp) FILE *grecs_bind_output; int grecs_bind_type; YYSTYPE const * const grecs_bind_valuep; YYLTYPE const * const grecs_bind_locationp; #endif { if (grecs_bind_type < YYNTOKENS) YYFPRINTF (grecs_bind_output, "token %s (", grecs_bind_tname[grecs_bind_type]); else YYFPRINTF (grecs_bind_output, "nterm %s (", grecs_bind_tname[grecs_bind_type]); YY_LOCATION_PRINT (grecs_bind_output, *grecs_bind_locationp); YYFPRINTF (grecs_bind_output, ": "); grecs_bind__symbol_value_print (grecs_bind_output, grecs_bind_type, grecs_bind_valuep, grecs_bind_locationp); YYFPRINTF (grecs_bind_output, ")"); } /*------------------------------------------------------------------. | grecs_bind__stack_print -- Print the state stack from its BOTTOM up to its | | TOP (included). | `------------------------------------------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void grecs_bind__stack_print (grecs_bind_type_int16 *grecs_bind_bottom, grecs_bind_type_int16 *grecs_bind_top) #else static void grecs_bind__stack_print (grecs_bind_bottom, grecs_bind_top) grecs_bind_type_int16 *grecs_bind_bottom; grecs_bind_type_int16 *grecs_bind_top; #endif { YYFPRINTF (stderr, "Stack now"); for (; grecs_bind_bottom <= grecs_bind_top; grecs_bind_bottom++) { int grecs_bind_bot = *grecs_bind_bottom; YYFPRINTF (stderr, " %d", grecs_bind_bot); } YYFPRINTF (stderr, "\n"); } # define YY_STACK_PRINT(Bottom, Top) \ do { \ if (grecs_bind_debug) \ grecs_bind__stack_print ((Bottom), (Top)); \ } while (YYID (0)) /*------------------------------------------------. | Report that the YYRULE is going to be reduced. | `------------------------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void grecs_bind__reduce_print (YYSTYPE *grecs_bind_vsp, YYLTYPE *grecs_bind_lsp, int grecs_bind_rule) #else static void grecs_bind__reduce_print (grecs_bind_vsp, grecs_bind_lsp, grecs_bind_rule) YYSTYPE *grecs_bind_vsp; YYLTYPE *grecs_bind_lsp; int grecs_bind_rule; #endif { int grecs_bind_nrhs = grecs_bind_r2[grecs_bind_rule]; int grecs_bind_i; unsigned long int grecs_bind_lno = grecs_bind_rline[grecs_bind_rule]; YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", grecs_bind_rule - 1, grecs_bind_lno); /* The symbols being reduced. */ for (grecs_bind_i = 0; grecs_bind_i < grecs_bind_nrhs; grecs_bind_i++) { YYFPRINTF (stderr, " $%d = ", grecs_bind_i + 1); grecs_bind__symbol_print (stderr, grecs_bind_rhs[grecs_bind_prhs[grecs_bind_rule] + grecs_bind_i], &(grecs_bind_vsp[(grecs_bind_i + 1) - (grecs_bind_nrhs)]) , &(grecs_bind_lsp[(grecs_bind_i + 1) - (grecs_bind_nrhs)]) ); YYFPRINTF (stderr, "\n"); } } # define YY_REDUCE_PRINT(Rule) \ do { \ if (grecs_bind_debug) \ grecs_bind__reduce_print (grecs_bind_vsp, grecs_bind_lsp, Rule); \ } while (YYID (0)) /* Nonzero means print parse trace. It is left uninitialized so that multiple parsers can coexist. */ int grecs_bind_debug; #else /* !YYDEBUG */ # define YYDPRINTF(Args) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) # define YY_STACK_PRINT(Bottom, Top) # define YY_REDUCE_PRINT(Rule) #endif /* !YYDEBUG */ /* YYINITDEPTH -- initial size of the parser's stacks. */ #ifndef YYINITDEPTH # define YYINITDEPTH 200 #endif /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only if the built-in stack extension method is used). Do not make this value too large; the results are undefined if YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) evaluated with infinite-precision integer arithmetic. */ #ifndef YYMAXDEPTH # define YYMAXDEPTH 10000 #endif #if YYERROR_VERBOSE # ifndef grecs_bind_strlen # if defined __GLIBC__ && defined _STRING_H # define grecs_bind_strlen strlen # else /* Return the length of YYSTR. */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static YYSIZE_T grecs_bind_strlen (const char *grecs_bind_str) #else static YYSIZE_T grecs_bind_strlen (grecs_bind_str) const char *grecs_bind_str; #endif { YYSIZE_T grecs_bind_len; for (grecs_bind_len = 0; grecs_bind_str[grecs_bind_len]; grecs_bind_len++) continue; return grecs_bind_len; } # endif # endif # ifndef grecs_bind_stpcpy # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE # define grecs_bind_stpcpy stpcpy # else /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in YYDEST. */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static char * grecs_bind_stpcpy (char *grecs_bind_dest, const char *grecs_bind_src) #else static char * grecs_bind_stpcpy (grecs_bind_dest, grecs_bind_src) char *grecs_bind_dest; const char *grecs_bind_src; #endif { char *grecs_bind_d = grecs_bind_dest; const char *grecs_bind_s = grecs_bind_src; while ((*grecs_bind_d++ = *grecs_bind_s++) != '\0') continue; return grecs_bind_d - 1; } # endif # endif # ifndef grecs_bind_tnamerr /* Copy to YYRES the contents of YYSTR after stripping away unnecessary quotes and backslashes, so that it's suitable for grecs_bind_error. The heuristic is that double-quoting is unnecessary unless the string contains an apostrophe, a comma, or backslash (other than backslash-backslash). YYSTR is taken from grecs_bind_tname. If YYRES is null, do not copy; instead, return the length of what the result would have been. */ static YYSIZE_T grecs_bind_tnamerr (char *grecs_bind_res, const char *grecs_bind_str) { if (*grecs_bind_str == '"') { YYSIZE_T grecs_bind_n = 0; char const *grecs_bind_p = grecs_bind_str; for (;;) switch (*++grecs_bind_p) { case '\'': case ',': goto do_not_strip_quotes; case '\\': if (*++grecs_bind_p != '\\') goto do_not_strip_quotes; /* Fall through. */ default: if (grecs_bind_res) grecs_bind_res[grecs_bind_n] = *grecs_bind_p; grecs_bind_n++; break; case '"': if (grecs_bind_res) grecs_bind_res[grecs_bind_n] = '\0'; return grecs_bind_n; } do_not_strip_quotes: ; } if (! grecs_bind_res) return grecs_bind_strlen (grecs_bind_str); return grecs_bind_stpcpy (grecs_bind_res, grecs_bind_str) - grecs_bind_res; } # endif /* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message about the unexpected token YYTOKEN for the state stack whose top is YYSSP. Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is not large enough to hold the message. In that case, also set *YYMSG_ALLOC to the required number of bytes. Return 2 if the required number of bytes is too large to store. */ static int grecs_bind_syntax_error (YYSIZE_T *grecs_bind_msg_alloc, char **grecs_bind_msg, grecs_bind_type_int16 *grecs_bind_ssp, int grecs_bind_token) { YYSIZE_T grecs_bind_size0 = grecs_bind_tnamerr (YY_NULL, grecs_bind_tname[grecs_bind_token]); YYSIZE_T grecs_bind_size = grecs_bind_size0; enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; /* Internationalized format string. */ const char *grecs_bind_format = YY_NULL; /* Arguments of grecs_bind_format. */ char const *grecs_bind_arg[YYERROR_VERBOSE_ARGS_MAXIMUM]; /* Number of reported tokens (one for the "unexpected", one per "expected"). */ int grecs_bind_count = 0; /* There are many possibilities here to consider: - Assume YYFAIL is not used. It's too flawed to consider. See <http://lists.gnu.org/archive/html/bison-patches/2009-12/msg00024.html> for details. YYERROR is fine as it does not invoke this function. - If this state is a consistent state with a default action, then the only way this function was invoked is if the default action is an error action. In that case, don't check for expected tokens because there are none. - The only way there can be no lookahead present (in grecs_bind_char) is if this state is a consistent state with a default action. Thus, detecting the absence of a lookahead is sufficient to determine that there is no unexpected or expected token to report. In that case, just report a simple "syntax error". - Don't assume there isn't a lookahead just because this state is a consistent state with a default action. There might have been a previous inconsistent state, consistent state with a non-default action, or user semantic action that manipulated grecs_bind_char. - Of course, the expected token list depends on states to have correct lookahead information, and it depends on the parser not to perform extra reductions after fetching a lookahead from the scanner and before detecting a syntax error. Thus, state merging (from LALR or IELR) and default reductions corrupt the expected token list. However, the list is correct for canonical LR with one exception: it will still contain any token that will not be accepted due to an error action in a later state. */ if (grecs_bind_token != YYEMPTY) { int grecs_bind_n = grecs_bind_pact[*grecs_bind_ssp]; grecs_bind_arg[grecs_bind_count++] = grecs_bind_tname[grecs_bind_token]; if (!grecs_bind_pact_value_is_default (grecs_bind_n)) { /* Start YYX at -YYN if negative to avoid negative indexes in YYCHECK. In other words, skip the first -YYN actions for this state because they are default actions. */ int grecs_bind_xbegin = grecs_bind_n < 0 ? -grecs_bind_n : 0; /* Stay within bounds of both grecs_bind_check and grecs_bind_tname. */ int grecs_bind_checklim = YYLAST - grecs_bind_n + 1; int grecs_bind_xend = grecs_bind_checklim < YYNTOKENS ? grecs_bind_checklim : YYNTOKENS; int grecs_bind_x; for (grecs_bind_x = grecs_bind_xbegin; grecs_bind_x < grecs_bind_xend; ++grecs_bind_x) if (grecs_bind_check[grecs_bind_x + grecs_bind_n] == grecs_bind_x && grecs_bind_x != YYTERROR && !grecs_bind_table_value_is_error (grecs_bind_table[grecs_bind_x + grecs_bind_n])) { if (grecs_bind_count == YYERROR_VERBOSE_ARGS_MAXIMUM) { grecs_bind_count = 1; grecs_bind_size = grecs_bind_size0; break; } grecs_bind_arg[grecs_bind_count++] = grecs_bind_tname[grecs_bind_x]; { YYSIZE_T grecs_bind_size1 = grecs_bind_size + grecs_bind_tnamerr (YY_NULL, grecs_bind_tname[grecs_bind_x]); if (! (grecs_bind_size <= grecs_bind_size1 && grecs_bind_size1 <= YYSTACK_ALLOC_MAXIMUM)) return 2; grecs_bind_size = grecs_bind_size1; } } } } switch (grecs_bind_count) { # define YYCASE_(N, S) \ case N: \ grecs_bind_format = S; \ break YYCASE_(0, YY_("syntax error")); YYCASE_(1, YY_("syntax error, unexpected %s")); YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s")); YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s")); YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s")); # undef YYCASE_ } { YYSIZE_T grecs_bind_size1 = grecs_bind_size + grecs_bind_strlen (grecs_bind_format); if (! (grecs_bind_size <= grecs_bind_size1 && grecs_bind_size1 <= YYSTACK_ALLOC_MAXIMUM)) return 2; grecs_bind_size = grecs_bind_size1; } if (*grecs_bind_msg_alloc < grecs_bind_size) { *grecs_bind_msg_alloc = 2 * grecs_bind_size; if (! (grecs_bind_size <= *grecs_bind_msg_alloc && *grecs_bind_msg_alloc <= YYSTACK_ALLOC_MAXIMUM)) *grecs_bind_msg_alloc = YYSTACK_ALLOC_MAXIMUM; return 1; } /* Avoid sprintf, as that infringes on the user's name space. Don't have undefined behavior even if the translation produced a string with the wrong number of "%s"s. */ { char *grecs_bind_p = *grecs_bind_msg; int grecs_bind_i = 0; while ((*grecs_bind_p = *grecs_bind_format) != '\0') if (*grecs_bind_p == '%' && grecs_bind_format[1] == 's' && grecs_bind_i < grecs_bind_count) { grecs_bind_p += grecs_bind_tnamerr (grecs_bind_p, grecs_bind_arg[grecs_bind_i++]); grecs_bind_format += 2; } else { grecs_bind_p++; grecs_bind_format++; } } return 0; } #endif /* YYERROR_VERBOSE */ /*-----------------------------------------------. | Release the memory associated to this symbol. | `-----------------------------------------------*/ /*ARGSUSED*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void grecs_bind_destruct (const char *grecs_bind_msg, int grecs_bind_type, YYSTYPE *grecs_bind_valuep, YYLTYPE *grecs_bind_locationp) #else static void grecs_bind_destruct (grecs_bind_msg, grecs_bind_type, grecs_bind_valuep, grecs_bind_locationp) const char *grecs_bind_msg; int grecs_bind_type; YYSTYPE *grecs_bind_valuep; YYLTYPE *grecs_bind_locationp; #endif { YYUSE (grecs_bind_valuep); YYUSE (grecs_bind_locationp); if (!grecs_bind_msg) grecs_bind_msg = "Deleting"; YY_SYMBOL_PRINT (grecs_bind_msg, grecs_bind_type, grecs_bind_valuep, grecs_bind_locationp); switch (grecs_bind_type) { default: break; } } /* The lookahead symbol. */ int grecs_bind_char; #ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN # define YY_IGNORE_MAYBE_UNINITIALIZED_END #endif #ifndef YY_INITIAL_VALUE # define YY_INITIAL_VALUE(Value) /* Nothing. */ #endif /* The semantic value of the lookahead symbol. */ YYSTYPE grecs_bind_lval YY_INITIAL_VALUE(grecs_bind_val_default); /* Location data for the lookahead symbol. */ YYLTYPE grecs_bind_lloc # if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL = { 1, 1, 1, 1 } # endif ; /* Number of syntax errors so far. */ int grecs_bind_nerrs; /*----------. | grecs_bind_parse. | `----------*/ #ifdef YYPARSE_PARAM #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) int grecs_bind_parse (void *YYPARSE_PARAM) #else int grecs_bind_parse (YYPARSE_PARAM) void *YYPARSE_PARAM; #endif #else /* ! YYPARSE_PARAM */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) int grecs_bind_parse (void) #else int grecs_bind_parse () #endif #endif { int grecs_bind_state; /* Number of tokens to shift before error messages enabled. */ int grecs_bind_errstatus; /* The stacks and their tools: `grecs_bind_ss': related to states. `grecs_bind_vs': related to semantic values. `grecs_bind_ls': related to locations. Refer to the stacks through separate pointers, to allow grecs_bind_overflow to reallocate them elsewhere. */ /* The state stack. */ grecs_bind_type_int16 grecs_bind_ssa[YYINITDEPTH]; grecs_bind_type_int16 *grecs_bind_ss; grecs_bind_type_int16 *grecs_bind_ssp; /* The semantic value stack. */ YYSTYPE grecs_bind_vsa[YYINITDEPTH]; YYSTYPE *grecs_bind_vs; YYSTYPE *grecs_bind_vsp; /* The location stack. */ YYLTYPE grecs_bind_lsa[YYINITDEPTH]; YYLTYPE *grecs_bind_ls; YYLTYPE *grecs_bind_lsp; /* The locations where the error started and ended. */ YYLTYPE grecs_bind_error_range[3]; YYSIZE_T grecs_bind_stacksize; int grecs_bind_n; int grecs_bind_result; /* Lookahead token as an internal (translated) token number. */ int grecs_bind_token = 0; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE grecs_bind_val; YYLTYPE grecs_bind_loc; #if YYERROR_VERBOSE /* Buffer for error messages, and its allocated size. */ char grecs_bind_msgbuf[128]; char *grecs_bind_msg = grecs_bind_msgbuf; YYSIZE_T grecs_bind_msg_alloc = sizeof grecs_bind_msgbuf; #endif #define YYPOPSTACK(N) (grecs_bind_vsp -= (N), grecs_bind_ssp -= (N), grecs_bind_lsp -= (N)) /* The number of symbols on the RHS of the reduced rule. Keep to zero when no symbol should be popped. */ int grecs_bind_len = 0; grecs_bind_ssp = grecs_bind_ss = grecs_bind_ssa; grecs_bind_vsp = grecs_bind_vs = grecs_bind_vsa; grecs_bind_lsp = grecs_bind_ls = grecs_bind_lsa; grecs_bind_stacksize = YYINITDEPTH; YYDPRINTF ((stderr, "Starting parse\n")); grecs_bind_state = 0; grecs_bind_errstatus = 0; grecs_bind_nerrs = 0; grecs_bind_char = YYEMPTY; /* Cause a token to be read. */ grecs_bind_lsp[0] = grecs_bind_lloc; goto grecs_bind_setstate; /*------------------------------------------------------------. | grecs_bind_newstate -- Push a new state, which is found in grecs_bind_state. | `------------------------------------------------------------*/ grecs_bind_newstate: /* In all cases, when you get here, the value and location stacks have just been pushed. So pushing a state here evens the stacks. */ grecs_bind_ssp++; grecs_bind_setstate: *grecs_bind_ssp = grecs_bind_state; if (grecs_bind_ss + grecs_bind_stacksize - 1 <= grecs_bind_ssp) { /* Get the current used size of the three stacks, in elements. */ YYSIZE_T grecs_bind_size = grecs_bind_ssp - grecs_bind_ss + 1; #ifdef grecs_bind_overflow { /* Give user a chance to reallocate the stack. Use copies of these so that the &'s don't force the real ones into memory. */ YYSTYPE *grecs_bind_vs1 = grecs_bind_vs; grecs_bind_type_int16 *grecs_bind_ss1 = grecs_bind_ss; YYLTYPE *grecs_bind_ls1 = grecs_bind_ls; /* Each stack pointer address is followed by the size of the data in use in that stack, in bytes. This used to be a conditional around just the two extra args, but that might be undefined if grecs_bind_overflow is a macro. */ grecs_bind_overflow (YY_("memory exhausted"), &grecs_bind_ss1, grecs_bind_size * sizeof (*grecs_bind_ssp), &grecs_bind_vs1, grecs_bind_size * sizeof (*grecs_bind_vsp), &grecs_bind_ls1, grecs_bind_size * sizeof (*grecs_bind_lsp), &grecs_bind_stacksize); grecs_bind_ls = grecs_bind_ls1; grecs_bind_ss = grecs_bind_ss1; grecs_bind_vs = grecs_bind_vs1; } #else /* no grecs_bind_overflow */ # ifndef YYSTACK_RELOCATE goto grecs_bind_exhaustedlab; # else /* Extend the stack our own way. */ if (YYMAXDEPTH <= grecs_bind_stacksize) goto grecs_bind_exhaustedlab; grecs_bind_stacksize *= 2; if (YYMAXDEPTH < grecs_bind_stacksize) grecs_bind_stacksize = YYMAXDEPTH; { grecs_bind_type_int16 *grecs_bind_ss1 = grecs_bind_ss; union grecs_bind_alloc *grecs_bind_ptr = (union grecs_bind_alloc *) YYSTACK_ALLOC (YYSTACK_BYTES (grecs_bind_stacksize)); if (! grecs_bind_ptr) goto grecs_bind_exhaustedlab; YYSTACK_RELOCATE (grecs_bind_ss_alloc, grecs_bind_ss); YYSTACK_RELOCATE (grecs_bind_vs_alloc, grecs_bind_vs); YYSTACK_RELOCATE (grecs_bind_ls_alloc, grecs_bind_ls); # undef YYSTACK_RELOCATE if (grecs_bind_ss1 != grecs_bind_ssa) YYSTACK_FREE (grecs_bind_ss1); } # endif #endif /* no grecs_bind_overflow */ grecs_bind_ssp = grecs_bind_ss + grecs_bind_size - 1; grecs_bind_vsp = grecs_bind_vs + grecs_bind_size - 1; grecs_bind_lsp = grecs_bind_ls + grecs_bind_size - 1; YYDPRINTF ((stderr, "Stack size increased to %lu\n", (unsigned long int) grecs_bind_stacksize)); if (grecs_bind_ss + grecs_bind_stacksize - 1 <= grecs_bind_ssp) YYABORT; } YYDPRINTF ((stderr, "Entering state %d\n", grecs_bind_state)); if (grecs_bind_state == YYFINAL) YYACCEPT; goto grecs_bind_backup; /*-----------. | grecs_bind_backup. | `-----------*/ grecs_bind_backup: /* Do appropriate processing given the current state. Read a lookahead token if we need one and don't already have one. */ /* First try to decide what to do without reference to lookahead token. */ grecs_bind_n = grecs_bind_pact[grecs_bind_state]; if (grecs_bind_pact_value_is_default (grecs_bind_n)) goto grecs_bind_default; /* Not known => get a lookahead token if don't already have one. */ /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ if (grecs_bind_char == YYEMPTY) { YYDPRINTF ((stderr, "Reading a token: ")); grecs_bind_char = YYLEX; } if (grecs_bind_char <= YYEOF) { grecs_bind_char = grecs_bind_token = YYEOF; YYDPRINTF ((stderr, "Now at end of input.\n")); } else { grecs_bind_token = YYTRANSLATE (grecs_bind_char); YY_SYMBOL_PRINT ("Next token is", grecs_bind_token, &grecs_bind_lval, &grecs_bind_lloc); } /* If the proper action on seeing token YYTOKEN is to reduce or to detect an error, take that action. */ grecs_bind_n += grecs_bind_token; if (grecs_bind_n < 0 || YYLAST < grecs_bind_n || grecs_bind_check[grecs_bind_n] != grecs_bind_token) goto grecs_bind_default; grecs_bind_n = grecs_bind_table[grecs_bind_n]; if (grecs_bind_n <= 0) { if (grecs_bind_table_value_is_error (grecs_bind_n)) goto grecs_bind_errlab; grecs_bind_n = -grecs_bind_n; goto grecs_bind_reduce; } /* Count tokens shifted since error; after three, turn off error status. */ if (grecs_bind_errstatus) grecs_bind_errstatus--; /* Shift the lookahead token. */ YY_SYMBOL_PRINT ("Shifting", grecs_bind_token, &grecs_bind_lval, &grecs_bind_lloc); /* Discard the shifted token. */ grecs_bind_char = YYEMPTY; grecs_bind_state = grecs_bind_n; YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++grecs_bind_vsp = grecs_bind_lval; YY_IGNORE_MAYBE_UNINITIALIZED_END *++grecs_bind_lsp = grecs_bind_lloc; goto grecs_bind_newstate; /*-----------------------------------------------------------. | grecs_bind_default -- do the default action for the current state. | `-----------------------------------------------------------*/ grecs_bind_default: grecs_bind_n = grecs_bind_defact[grecs_bind_state]; if (grecs_bind_n == 0) goto grecs_bind_errlab; goto grecs_bind_reduce; /*-----------------------------. | grecs_bind_reduce -- Do a reduction. | `-----------------------------*/ grecs_bind_reduce: /* grecs_bind_n is the number of a rule to reduce with. */ grecs_bind_len = grecs_bind_r2[grecs_bind_n]; /* If YYLEN is nonzero, implement the default value of the action: `$$ = $1'. Otherwise, the following line sets YYVAL to garbage. This behavior is undocumented and Bison users should not rely upon it. Assigning to YYVAL unconditionally makes the parser a bit smaller, and it avoids a GCC warning that YYVAL may be used uninitialized. */ grecs_bind_val = grecs_bind_vsp[1-grecs_bind_len]; /* Default location. */ YYLLOC_DEFAULT (grecs_bind_loc, (grecs_bind_lsp - grecs_bind_len), grecs_bind_len); YY_REDUCE_PRINT (grecs_bind_n); switch (grecs_bind_n) { case 2: /* Line 1792 of yacc.c */ #line 62 "bind-gram.y" { parse_tree = grecs_node_create(grecs_node_root, &(grecs_bind_lsp[(1) - (1)])); parse_tree->v.texttab = grecs_text_table(); grecs_node_bind(parse_tree, (grecs_bind_vsp[(1) - (1)].node), 1); } break; case 3: /* Line 1792 of yacc.c */ #line 71 "bind-gram.y" { (grecs_bind_val.node) = NULL; } break; case 4: /* Line 1792 of yacc.c */ #line 75 "bind-gram.y" { (grecs_bind_val.node) = (grecs_bind_vsp[(1) - (1)].node_list).head; } break; case 5: /* Line 1792 of yacc.c */ #line 81 "bind-gram.y" { (grecs_bind_val.node_list).head = (grecs_bind_val.node_list).tail = (grecs_bind_vsp[(1) - (1)].node); } break; case 6: /* Line 1792 of yacc.c */ #line 85 "bind-gram.y" { if ((grecs_bind_vsp[(2) - (2)].node)) { if (!(grecs_bind_vsp[(1) - (2)].node_list).head) (grecs_bind_vsp[(1) - (2)].node_list).head = (grecs_bind_vsp[(1) - (2)].node_list).tail = (grecs_bind_vsp[(2) - (2)].node); else grecs_node_bind((grecs_bind_vsp[(1) - (2)].node_list).tail, (grecs_bind_vsp[(2) - (2)].node), 0); } (grecs_bind_val.node_list) = (grecs_bind_vsp[(1) - (2)].node_list); } break; case 9: /* Line 1792 of yacc.c */ #line 101 "bind-gram.y" { if (strcmp((grecs_bind_vsp[(1) - (3)].string), "include") == 0 && (grecs_bind_vsp[(2) - (3)].pvalue)->type == GRECS_TYPE_STRING) { grecs_bind_new_source((grecs_bind_vsp[(2) - (3)].pvalue)->v.string, &(grecs_bind_lsp[(1) - (3)])); (grecs_bind_val.node) = NULL; } else { (grecs_bind_val.node) = grecs_node_create_points(grecs_node_stmt, (grecs_bind_lsp[(1) - (3)]).beg, (grecs_bind_lsp[(2) - (3)]).end); (grecs_bind_val.node)->ident = (grecs_bind_vsp[(1) - (3)].string); (grecs_bind_val.node)->idloc = (grecs_bind_lsp[(1) - (3)]); (grecs_bind_val.node)->v.value = (grecs_bind_vsp[(2) - (3)].pvalue); } } break; case 10: /* Line 1792 of yacc.c */ #line 115 "bind-gram.y" { (grecs_bind_val.node) = grecs_node_create(grecs_node_stmt, &(grecs_bind_lsp[(1) - (2)])); (grecs_bind_val.node)->ident = (grecs_bind_vsp[(1) - (2)].string); (grecs_bind_val.node)->idloc = (grecs_bind_lsp[(1) - (2)]); (grecs_bind_val.node)->v.value = NULL; } break; case 11: /* Line 1792 of yacc.c */ #line 122 "bind-gram.y" { (grecs_bind_val.node) = grecs_node_create_points(grecs_node_stmt, (grecs_bind_lsp[(1) - (3)]).beg, (grecs_bind_lsp[(2) - (3)]).end); (grecs_bind_val.node)->ident = grecs_strdup("!"); (grecs_bind_val.node)->idloc = (grecs_bind_lsp[(1) - (3)]); (grecs_bind_val.node)->v.value = grecs_malloc(sizeof((grecs_bind_val.node)->v.value[0])); (grecs_bind_val.node)->v.value->type = GRECS_TYPE_STRING; (grecs_bind_val.node)->v.value->locus = (grecs_bind_lsp[(2) - (3)]); (grecs_bind_val.node)->v.value->v.string = (grecs_bind_vsp[(2) - (3)].string); } break; case 12: /* Line 1792 of yacc.c */ #line 135 "bind-gram.y" { (grecs_bind_val.node) = grecs_node_create_points(grecs_node_block, (grecs_bind_lsp[(1) - (6)]).beg, (grecs_bind_lsp[(5) - (6)]).end); (grecs_bind_val.node)->ident = (grecs_bind_vsp[(1) - (6)].string); (grecs_bind_val.node)->idloc = (grecs_bind_lsp[(1) - (6)]); (grecs_bind_val.node)->v.value = (grecs_bind_vsp[(2) - (6)].pvalue); grecs_node_bind((grecs_bind_val.node), (grecs_bind_vsp[(4) - (6)].node), 1); } break; case 13: /* Line 1792 of yacc.c */ #line 156 "bind-gram.y" { (grecs_bind_val.node) = grecs_node_create_points(grecs_node_stmt, (grecs_bind_lsp[(1) - (5)]).beg, (grecs_bind_lsp[(4) - (5)]).end); (grecs_bind_val.node)->ident = (grecs_bind_vsp[(1) - (5)].string); (grecs_bind_val.node)->idloc = (grecs_bind_lsp[(1) - (5)]); (grecs_bind_val.node)->v.value = grecs_value_ptr_from_static(&(grecs_bind_vsp[(3) - (5)].svalue)); } break; case 14: /* Line 1792 of yacc.c */ #line 166 "bind-gram.y" { (grecs_bind_val.pvalue) = NULL; } break; case 16: /* Line 1792 of yacc.c */ #line 173 "bind-gram.y" { size_t n; if ((n = grecs_list_size((grecs_bind_vsp[(1) - (1)].list))) == 1) { (grecs_bind_val.pvalue) = grecs_list_index((grecs_bind_vsp[(1) - (1)].list), 0); } else { size_t i; struct grecs_list_entry *ep; (grecs_bind_val.pvalue) = grecs_malloc(sizeof((grecs_bind_val.pvalue)[0])); (grecs_bind_val.pvalue)->type = GRECS_TYPE_ARRAY; (grecs_bind_val.pvalue)->locus = (grecs_bind_lsp[(1) - (1)]); (grecs_bind_val.pvalue)->v.arg.c = n; (grecs_bind_val.pvalue)->v.arg.v = grecs_calloc(n, sizeof((grecs_bind_val.pvalue)->v.arg.v[0])); for (i = 0, ep = (grecs_bind_vsp[(1) - (1)].list)->head; ep; i++, ep = ep->next) (grecs_bind_val.pvalue)->v.arg.v[i] = ep->data; } (grecs_bind_vsp[(1) - (1)].list)->free_entry = NULL; grecs_list_free((grecs_bind_vsp[(1) - (1)].list)); } break; case 17: /* Line 1792 of yacc.c */ #line 197 "bind-gram.y" { (grecs_bind_val.list) = grecs_value_list_create(); grecs_list_append((grecs_bind_val.list), grecs_value_ptr_from_static(&(grecs_bind_vsp[(1) - (1)].svalue))); } break; case 18: /* Line 1792 of yacc.c */ #line 202 "bind-gram.y" { grecs_list_append((grecs_bind_vsp[(1) - (2)].list), grecs_value_ptr_from_static(&(grecs_bind_vsp[(2) - (2)].svalue))); } break; case 19: /* Line 1792 of yacc.c */ #line 208 "bind-gram.y" { (grecs_bind_val.svalue).type = GRECS_TYPE_STRING; (grecs_bind_val.svalue).locus = (grecs_bind_lsp[(1) - (1)]); (grecs_bind_val.svalue).v.string = (grecs_bind_vsp[(1) - (1)].string); } break; case 22: /* Line 1792 of yacc.c */ #line 220 "bind-gram.y" { (grecs_bind_val.svalue).type = GRECS_TYPE_LIST; (grecs_bind_val.svalue).locus = (grecs_bind_lsp[(1) - (2)]); (grecs_bind_val.svalue).v.list = (grecs_bind_vsp[(1) - (2)].list); } break; case 23: /* Line 1792 of yacc.c */ #line 228 "bind-gram.y" { (grecs_bind_val.list) = grecs_value_list_create(); grecs_list_append((grecs_bind_val.list), grecs_value_ptr_from_static(&(grecs_bind_vsp[(1) - (1)].svalue))); } break; case 24: /* Line 1792 of yacc.c */ #line 233 "bind-gram.y" { grecs_list_append((grecs_bind_vsp[(1) - (2)].list), grecs_value_ptr_from_static(&(grecs_bind_vsp[(2) - (2)].svalue))); } break; case 25: /* Line 1792 of yacc.c */ #line 237 "bind-gram.y" { grecs_list_append((grecs_bind_vsp[(1) - (4)].list), stmtlist_to_value((grecs_bind_vsp[(3) - (4)].node_list).head)); /* FIXME: Free $3 */ } break; /* Line 1792 of yacc.c */ #line 1744 "bind-gram.c" default: break; } /* User semantic actions sometimes alter grecs_bind_char, and that requires that grecs_bind_token be updated with the new translation. We take the approach of translating immediately before every use of grecs_bind_token. One alternative is translating here after every semantic action, but that translation would be missed if the semantic action invokes YYABORT, YYACCEPT, or YYERROR immediately after altering grecs_bind_char or if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an incorrect destructor might then be invoked immediately. In the case of YYERROR or YYBACKUP, subsequent parser actions might lead to an incorrect destructor call or verbose syntax error message before the lookahead is translated. */ YY_SYMBOL_PRINT ("-> $$ =", grecs_bind_r1[grecs_bind_n], &grecs_bind_val, &grecs_bind_loc); YYPOPSTACK (grecs_bind_len); grecs_bind_len = 0; YY_STACK_PRINT (grecs_bind_ss, grecs_bind_ssp); *++grecs_bind_vsp = grecs_bind_val; *++grecs_bind_lsp = grecs_bind_loc; /* Now `shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ grecs_bind_n = grecs_bind_r1[grecs_bind_n]; grecs_bind_state = grecs_bind_pgoto[grecs_bind_n - YYNTOKENS] + *grecs_bind_ssp; if (0 <= grecs_bind_state && grecs_bind_state <= YYLAST && grecs_bind_check[grecs_bind_state] == *grecs_bind_ssp) grecs_bind_state = grecs_bind_table[grecs_bind_state]; else grecs_bind_state = grecs_bind_defgoto[grecs_bind_n - YYNTOKENS]; goto grecs_bind_newstate; /*------------------------------------. | grecs_bind_errlab -- here on detecting error | `------------------------------------*/ grecs_bind_errlab: /* Make sure we have latest lookahead translation. See comments at user semantic actions for why this is necessary. */ grecs_bind_token = grecs_bind_char == YYEMPTY ? YYEMPTY : YYTRANSLATE (grecs_bind_char); /* If not already recovering from an error, report this error. */ if (!grecs_bind_errstatus) { ++grecs_bind_nerrs; #if ! YYERROR_VERBOSE grecs_bind_error (YY_("syntax error")); #else # define YYSYNTAX_ERROR grecs_bind_syntax_error (&grecs_bind_msg_alloc, &grecs_bind_msg, \ grecs_bind_ssp, grecs_bind_token) { char const *grecs_bind_msgp = YY_("syntax error"); int grecs_bind_syntax_error_status; grecs_bind_syntax_error_status = YYSYNTAX_ERROR; if (grecs_bind_syntax_error_status == 0) grecs_bind_msgp = grecs_bind_msg; else if (grecs_bind_syntax_error_status == 1) { if (grecs_bind_msg != grecs_bind_msgbuf) YYSTACK_FREE (grecs_bind_msg); grecs_bind_msg = (char *) YYSTACK_ALLOC (grecs_bind_msg_alloc); if (!grecs_bind_msg) { grecs_bind_msg = grecs_bind_msgbuf; grecs_bind_msg_alloc = sizeof grecs_bind_msgbuf; grecs_bind_syntax_error_status = 2; } else { grecs_bind_syntax_error_status = YYSYNTAX_ERROR; grecs_bind_msgp = grecs_bind_msg; } } grecs_bind_error (grecs_bind_msgp); if (grecs_bind_syntax_error_status == 2) goto grecs_bind_exhaustedlab; } # undef YYSYNTAX_ERROR #endif } grecs_bind_error_range[1] = grecs_bind_lloc; if (grecs_bind_errstatus == 3) { /* If just tried and failed to reuse lookahead token after an error, discard it. */ if (grecs_bind_char <= YYEOF) { /* Return failure if at end of input. */ if (grecs_bind_char == YYEOF) YYABORT; } else { grecs_bind_destruct ("Error: discarding", grecs_bind_token, &grecs_bind_lval, &grecs_bind_lloc); grecs_bind_char = YYEMPTY; } } /* Else will try to reuse lookahead token after shifting the error token. */ goto grecs_bind_errlab1; /*---------------------------------------------------. | grecs_bind_errorlab -- error raised explicitly by YYERROR. | `---------------------------------------------------*/ grecs_bind_errorlab: /* Pacify compilers like GCC when the user code never invokes YYERROR and the label grecs_bind_errorlab therefore never appears in user code. */ if (/*CONSTCOND*/ 0) goto grecs_bind_errorlab; grecs_bind_error_range[1] = grecs_bind_lsp[1-grecs_bind_len]; /* Do not reclaim the symbols of the rule which action triggered this YYERROR. */ YYPOPSTACK (grecs_bind_len); grecs_bind_len = 0; YY_STACK_PRINT (grecs_bind_ss, grecs_bind_ssp); grecs_bind_state = *grecs_bind_ssp; goto grecs_bind_errlab1; /*-------------------------------------------------------------. | grecs_bind_errlab1 -- common code for both syntax error and YYERROR. | `-------------------------------------------------------------*/ grecs_bind_errlab1: grecs_bind_errstatus = 3; /* Each real token shifted decrements this. */ for (;;) { grecs_bind_n = grecs_bind_pact[grecs_bind_state]; if (!grecs_bind_pact_value_is_default (grecs_bind_n)) { grecs_bind_n += YYTERROR; if (0 <= grecs_bind_n && grecs_bind_n <= YYLAST && grecs_bind_check[grecs_bind_n] == YYTERROR) { grecs_bind_n = grecs_bind_table[grecs_bind_n]; if (0 < grecs_bind_n) break; } } /* Pop the current state because it cannot handle the error token. */ if (grecs_bind_ssp == grecs_bind_ss) YYABORT; grecs_bind_error_range[1] = *grecs_bind_lsp; grecs_bind_destruct ("Error: popping", grecs_bind_stos[grecs_bind_state], grecs_bind_vsp, grecs_bind_lsp); YYPOPSTACK (1); grecs_bind_state = *grecs_bind_ssp; YY_STACK_PRINT (grecs_bind_ss, grecs_bind_ssp); } YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++grecs_bind_vsp = grecs_bind_lval; YY_IGNORE_MAYBE_UNINITIALIZED_END grecs_bind_error_range[2] = grecs_bind_lloc; /* Using YYLLOC is tempting, but would change the location of the lookahead. YYLOC is available though. */ YYLLOC_DEFAULT (grecs_bind_loc, grecs_bind_error_range, 2); *++grecs_bind_lsp = grecs_bind_loc; /* Shift the error token. */ YY_SYMBOL_PRINT ("Shifting", grecs_bind_stos[grecs_bind_n], grecs_bind_vsp, grecs_bind_lsp); grecs_bind_state = grecs_bind_n; goto grecs_bind_newstate; /*-------------------------------------. | grecs_bind_acceptlab -- YYACCEPT comes here. | `-------------------------------------*/ grecs_bind_acceptlab: grecs_bind_result = 0; goto grecs_bind_return; /*-----------------------------------. | grecs_bind_abortlab -- YYABORT comes here. | `-----------------------------------*/ grecs_bind_abortlab: grecs_bind_result = 1; goto grecs_bind_return; #if !defined grecs_bind_overflow || YYERROR_VERBOSE /*-------------------------------------------------. | grecs_bind_exhaustedlab -- memory exhaustion comes here. | `-------------------------------------------------*/ grecs_bind_exhaustedlab: grecs_bind_error (YY_("memory exhausted")); grecs_bind_result = 2; /* Fall through. */ #endif grecs_bind_return: if (grecs_bind_char != YYEMPTY) { /* Make sure we have latest lookahead translation. See comments at user semantic actions for why this is necessary. */ grecs_bind_token = YYTRANSLATE (grecs_bind_char); grecs_bind_destruct ("Cleanup: discarding lookahead", grecs_bind_token, &grecs_bind_lval, &grecs_bind_lloc); } /* Do not reclaim the symbols of the rule which action triggered this YYABORT or YYACCEPT. */ YYPOPSTACK (grecs_bind_len); YY_STACK_PRINT (grecs_bind_ss, grecs_bind_ssp); while (grecs_bind_ssp != grecs_bind_ss) { grecs_bind_destruct ("Cleanup: popping", grecs_bind_stos[*grecs_bind_ssp], grecs_bind_vsp, grecs_bind_lsp); YYPOPSTACK (1); } #ifndef grecs_bind_overflow if (grecs_bind_ss != grecs_bind_ssa) YYSTACK_FREE (grecs_bind_ss); #endif #if YYERROR_VERBOSE if (grecs_bind_msg != grecs_bind_msgbuf) YYSTACK_FREE (grecs_bind_msg); #endif /* Make sure YYID is used. */ return YYID (grecs_bind_result); } /* Line 2055 of yacc.c */ #line 243 "bind-gram.y" int grecs_bind_error(char const *s) { grecs_error(&grecs_bind_lloc, 0, "%s", s); return 0; } struct grecs_node * grecs_bind_parser(const char *name, int traceflags) { int rc; if (grecs_bind_new_source(name, NULL)) return NULL; grecs_bind__flex_debug = traceflags & GRECS_TRACE_LEX; grecs_bind_debug = traceflags & GRECS_TRACE_GRAM; parse_tree = NULL; grecs_line_acc_create(); rc = grecs_bind_parse(); grecs_bind_close_sources(); if (grecs_error_count) rc = 1; grecs_line_acc_free(); if (rc) { grecs_tree_free(parse_tree); parse_tree = NULL; } return parse_tree; } static struct grecs_value * node_to_value(struct grecs_node *node, struct grecs_txtacc *acc) { struct grecs_value *val = grecs_malloc(sizeof(*val)); int delim = 0; if (node->ident) { grecs_txtacc_grow(acc, node->ident, strlen(node->ident)); delim = 1; } if (node->v.value) { if (delim) grecs_txtacc_grow_char(acc, ' '); grecs_txtacc_format_value(node->v.value, 0, acc); delim = 1; } if (node->type == grecs_node_stmt) { val->type = GRECS_TYPE_STRING; grecs_txtacc_grow_char(acc, 0); val->v.string = grecs_txtacc_finish(acc, 1); } else if (node->down) { struct grecs_list *list = grecs_value_list_create(); struct grecs_node *np; if (delim) grecs_txtacc_grow_char(acc, ' '); for (np = node->down; np; np = np->next) grecs_list_append(list, node_to_value(np, acc)); val->type = GRECS_TYPE_LIST; val->v.list = list; } return val; } static struct grecs_value * stmtlist_to_value(struct grecs_node *node) { struct grecs_txtacc *acc = grecs_txtacc_create(); struct grecs_value *val; struct grecs_node parent; memset(&parent, 0, sizeof(parent)); parent.type = grecs_node_block; parent.down = node; val = node_to_value(&parent, acc); grecs_txtacc_free(acc); return val; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/src/sockaddr.c�������������������������������������������������������������������0000644�0001750�0001750�00000017665�13244106325�017035� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* grecs - Gray's Extensible Configuration System Copyright (C) 2007-2017 Sergey Poznyakoff Grecs 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. Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. */ /* Network-specific functions */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include <stddef.h> #include <string.h> #include <ctype.h> #include <sys/types.h> #include <sys/socket.h> #include <sys/un.h> #include <netinet/in.h> #include <arpa/inet.h> #include <netdb.h> #include <errno.h> #include <stdlib.h> #include "grecs.h" struct grecs_sockaddr * grecs_sockaddr_new(size_t s) { struct grecs_sockaddr *sp = grecs_malloc(sizeof(*sp)); sp->next = NULL; sp->str = NULL; sp->sa = grecs_zalloc(s); sp->len = s; return sp; } void grecs_sockaddr_free(struct grecs_sockaddr *p) { while (p) { struct grecs_sockaddr *next = p->next; free(p->sa); free(p->str); free(p); p = next; } } static int parse_unix(struct grecs_sockaddr **ret, const char *arg, const char *addrstr, struct grecs_sockaddr_hints *gh, grecs_locus_t const *locus) { struct sockaddr_un *s_un; size_t slen = strlen(addrstr); struct grecs_sockaddr *sp; if (slen >= sizeof s_un->sun_path) { grecs_error(locus, 0, _("socket path name too long: %s"), arg); return -1; } sp = grecs_sockaddr_new(sizeof(s_un[0])); s_un = (struct sockaddr_un *) sp->sa; s_un->sun_family = AF_UNIX; strcpy(s_un->sun_path, addrstr); *ret = sp; return 0; } static int parse_inet(struct grecs_sockaddr **ret, int family, const char *arg, const char *addrstr, struct grecs_sockaddr_hints *gh, grecs_locus_t const *locus) { int rc; struct addrinfo hints; struct addrinfo *res, *ap; const char *node = NULL; char *nodebuf = NULL; const char *service = NULL; struct grecs_sockaddr *head = NULL, *tail = NULL; char portbuf[64]; memset(&hints, 0, sizeof(hints)); hints.ai_family = family; hints.ai_socktype = SOCK_STREAM; if ((family == AF_INET6 || family == AF_UNSPEC) && addrstr[0] == '[') { char *p = strchr(addrstr + 1, ']'); if (p && p > addrstr + 1) { size_t len; addrstr++; len = p - addrstr; nodebuf = grecs_malloc(len + 1); memcpy(nodebuf, addrstr, len); nodebuf[len] = 0; node = nodebuf; service = p + 1; family = AF_INET6; } else service = strchr(addrstr, ':'); } else service = strrchr(addrstr, ':'); if (service && *service) { if (*service != ':') { grecs_error(locus, 0, _("%s: garbage near %s"), arg, service); return -1; } service++; } if (!node) { if (service) { size_t len = service - addrstr - 1; if (len == 0) node = NULL; else { nodebuf = grecs_malloc(len + 1); memcpy(nodebuf, addrstr, len); nodebuf[len] = 0; node = nodebuf; } } else { if (grecs_str_is_ipaddr(addrstr)) node = addrstr; else if (grecs_str_is_num(addrstr)) { service = addrstr; hints.ai_flags |= AI_NUMERICSERV; } } } if (!service || !*service) { if (!node && addrstr[0]) node = addrstr; if (gh->flags & GRECS_HINT_SERVICE) { service = gh->service; } else if (gh->flags & GRECS_HINT_PORT) { snprintf(portbuf, sizeof portbuf, "%hu", gh->port); service = portbuf; hints.ai_flags |= AI_NUMERICSERV; } else if (!(gh->flags & GRECS_AH_PASSIVE)) { grecs_error(locus, 0, _("service not specified: %s"), arg); return -1; } } if (!node) { if (gh->flags & GRECS_AH_PASSIVE) hints.ai_flags |= AI_PASSIVE; } rc = getaddrinfo(node, service, &hints, &res); free(nodebuf); switch (rc) { case 0: break; case EAI_SYSTEM: grecs_error(locus, 0, _("%s: cannot parse address: %s"), arg, strerror(errno)); break; case EAI_BADFLAGS: case EAI_SOCKTYPE: grecs_error(locus, 0, "%s:%d: internal error converting %s", __FILE__,__LINE__,arg); break; case EAI_MEMORY: grecs_alloc_die(); default: grecs_error(locus, 0, "%s: %s", arg, gai_strerror(rc)); return -1; } for (ap = res; ap; ap = ap->ai_next) { if (family == AF_UNSPEC || ap->ai_addr->sa_family == family) { struct grecs_sockaddr *sp = grecs_sockaddr_new(ap->ai_addrlen); memcpy(sp->sa, ap->ai_addr, ap->ai_addrlen); sp->len = ap->ai_addrlen; if (!head) head = sp; else tail->next = sp; tail = sp; } } freeaddrinfo(res); *ret = head; return 0; } static int parse_inet4(struct grecs_sockaddr **ret, const char *arg, const char *addrstr, struct grecs_sockaddr_hints *gh, grecs_locus_t const *locus) { return parse_inet(ret, AF_INET, arg, addrstr, gh, locus); } static int parse_inet6(struct grecs_sockaddr **ret, const char *arg, const char *addrstr, struct grecs_sockaddr_hints *gh, grecs_locus_t const *locus) { return parse_inet(ret, AF_INET6, arg, addrstr, gh, locus); } struct schemetab { const char *scheme; size_t len; int (*parser)(struct grecs_sockaddr **ret, const char *arg, const char *addr, struct grecs_sockaddr_hints *gh, grecs_locus_t const *locus); }; struct schemetab schemetab[] = { { "inet", 4, parse_inet4 }, { "inet4", 5, parse_inet4 }, { "inet6", 5, parse_inet6 }, { "unix", 4, parse_unix }, { NULL } }; int grecs_str_to_sockaddr(struct grecs_sockaddr **sap, const char *arg, struct grecs_sockaddr_hints *gh, grecs_locus_t const *locus) { char *p; struct grecs_sockaddr_hints ghints; if (!gh) { memset(&ghints, 0, sizeof(ghints)); if (grecs_default_port) { ghints.flags = GRECS_HINT_PORT; ghints.port = ntohs(grecs_default_port); } gh = &ghints; } p = strchr(arg, ':'); if (p && p > arg && p[1] == '/' && p[2] == '/') { size_t len = p - arg; struct schemetab *sp; for (sp = schemetab; sp->scheme; sp++) if (len == sp->len && memcmp(arg, sp->scheme, len) == 0) return sp->parser(sap, arg, p + 3, gh, locus); grecs_error(locus, 0, _("unknown or unsupported scheme: %s"), arg); return -1; } if (arg[0] == '/') return parse_unix(sap, arg, arg, gh, locus); else if (strlen(arg) > 5 && memcmp(arg, "unix:", 5) == 0) { if (arg[5] != '/') grecs_error(locus, 0, _("%s: UNIX socket must be an absolute file name"), arg); return parse_unix(sap, arg, arg + 5, gh, locus); } return parse_inet(sap, AF_UNSPEC, arg, arg, gh, locus); } #define S_UN_NAME(sa, salen) \ ((salen < offsetof(struct sockaddr_un,sun_path)) ? \ "" : (sa)->sun_path) static int sockaddr_str(struct sockaddr *sa, socklen_t salen, char **pbuf, size_t *psz) { int rc; switch (sa->sa_family) { case AF_INET: case AF_INET6: { char host[NI_MAXHOST]; char srv[NI_MAXSERV]; if (getnameinfo(sa, salen, host, sizeof(host), srv, sizeof(srv), NI_NUMERICHOST|NI_NUMERICSERV) == 0) rc = grecs_asprintf(pbuf, psz, "%s://%s:%s", sa->sa_family == AF_INET ? "inet" : "inet6", host, srv); else rc = grecs_asprintf(pbuf, psz, "%s://[getnameinfo failed]", sa->sa_family == AF_INET ? "inet" : "inet6"); break; } case AF_UNIX: { struct sockaddr_un *s_un = (struct sockaddr_un *)sa; if (S_UN_NAME(s_un, salen)[0] == 0) rc = grecs_asprintf(pbuf, psz, "unix://[anonymous socket]"); else rc = grecs_asprintf(pbuf, psz, "unix://%s", s_un->sun_path); break; } default: rc = grecs_asprintf(pbuf, psz, "family:%d", sa->sa_family); } return rc; } char const * grecs_sockaddr_str(struct grecs_sockaddr *sa) { if (!sa->str) { size_t sz = 0; if (sockaddr_str(sa->sa, sa->len, &sa->str, &sz)) { //FIXME abort(); } } return sa->str; } ���������������������������������������������������������������������������direvent-5.2/grecs/src/meta1-gram.y�����������������������������������������������������������������0000644�0001750�0001750�00000010442�13244106110�017176� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������%{ /* MeTA1 configuration parser for Grecs. Copyright (C) 2007-2016 Sergey Poznyakoff Grecs 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. Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include <errno.h> #include <string.h> #include "grecs.h" int yylex(void); int yyerror(char const *s); static struct grecs_node *parse_tree; extern int yy_flex_debug; extern void yyset_in(FILE *); %} %error-verbose %locations %union { char *string; grecs_value_t svalue, *pvalue; struct grecs_list *list; struct { struct grecs_node *head, *tail; } node_list; struct grecs_node *node; } %token <string> META1_STRING META1_IDENT %type <node> stmt simple block maybe_stmtlist %type <node_list> stmtlist %type <pvalue> tag value %type <string> string slist %type <list> slist0 %type <list> values list %% input : maybe_stmtlist { parse_tree = grecs_node_create(grecs_node_root, &@1); parse_tree->v.texttab = grecs_text_table(); grecs_node_bind(parse_tree, $1, 1); } ; maybe_stmtlist: /* empty */ { $$ = NULL; } | stmtlist { $$ = $1.head; } ; stmtlist: stmt { $$.head = $$.tail = $1; } | stmtlist stmt { grecs_node_bind($1.tail, $2, 0); } ; stmt : simple | block ; simple : META1_IDENT '=' value opt_sc { $$ = grecs_node_create_points(grecs_node_stmt, @1.beg, @3.end); $$->ident = $1; $$->idloc = @1; $$->v.value = $3; } ; block : META1_IDENT tag '{' stmtlist '}' opt_sc { $$ = grecs_node_create_points(grecs_node_block, @1.beg, @5.end); $$->ident = $1; $$->idloc = @1; $$->v.value = $2; grecs_node_bind($$, $4.head, 1); } ; tag : /* empty */ { $$ = NULL; } | META1_IDENT { $$ = grecs_malloc(sizeof($$[0])); $$->type = GRECS_TYPE_STRING; $$->v.string = $1; } ; value : string { $$ = grecs_malloc(sizeof($$[0])); $$->type = GRECS_TYPE_STRING; $$->locus = @1; $$->v.string = $1; } | list { $$ = grecs_malloc(sizeof($$[0])); $$->type = GRECS_TYPE_LIST; $$->locus = @1; $$->v.list = $1; } ; string : META1_IDENT | slist ; slist : slist0 { struct grecs_list_entry *ep; grecs_line_begin(); for (ep = $1->head; ep; ep = ep->next) { grecs_line_add(ep->data, strlen(ep->data)); free(ep->data); ep->data = NULL; } $$ = grecs_line_finish(); grecs_list_free($1); } slist0 : META1_STRING { $$ = grecs_list_create(); grecs_list_append($$, $1); } | slist0 META1_STRING { grecs_list_append($1, $2); $$ = $1; } ; list : '{' values '}' { $$ = $2; } | '{' values ',' '}' { $$ = $2; } ; values : value { $$ = grecs_value_list_create(); grecs_list_append($$, $1); } | values ',' value { grecs_list_append($1, $3); $$ = $1; } ; opt_sc : /* empty */ | ';' ; %% int yyerror(char const *s) { grecs_error(&yylloc, 0, "%s", s); return 0; } struct grecs_node * grecs_meta1_parser(const char *name, int traceflags) { int rc; FILE *fp; fp = fopen(name, "r"); if (!fp) { grecs_error(NULL, errno, _("Cannot open `%s'"), name); return NULL; } yyset_in(fp); yy_flex_debug = traceflags & GRECS_TRACE_LEX; yydebug = traceflags & GRECS_TRACE_GRAM; parse_tree = NULL; grecs_line_acc_create(); rc = yyparse(); fclose(fp); if (grecs_error_count) rc = 1; grecs_line_acc_free(); if (rc) { grecs_tree_free(parse_tree); parse_tree = NULL; } return parse_tree; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/src/meta1-lex.l������������������������������������������������������������������0000644�0001750�0001750�00000010667�13244106110�017034� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* MeTA1 configuration lexer for Grecs. -*- c -*- */ %option noinput %option nounput %top { /* MeTA1 configuration lexer for Grecs. Copyright (C) 2007-2016 Sergey Poznyakoff Grecs 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. Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. */ /* This file implements a lexical analyzer for MeTA1 main configuration file. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include "grecs.h" #include "meta1-gram.h" #include <ctype.h> } %{ static int yywrap(void); static void meta1_line_add_unescape_hex(const char *text, size_t len); #define YY_USER_ACTION do { \ if (YYSTATE == 0) { \ yylloc.beg = grecs_current_locus_point; \ yylloc.beg.col++; \ } \ grecs_current_locus_point.col += yyleng; \ yylloc.end = grecs_current_locus_point; \ } while (0); %} %x COMMENT STR X [0-9a-fA-F] %% /* C-style comments */ "/*" BEGIN (COMMENT); <COMMENT>[^*\n]* /* eat anything that's not a '*' */ <COMMENT>"*"+[^*/\n]* /* eat up '*'s not followed by '/'s */ <COMMENT>\n grecs_locus_point_advance_line(grecs_current_locus_point); <COMMENT>"*"+"/" BEGIN (INITIAL); /* End-of-line comments */ #.*\n { grecs_locus_point_advance_line(grecs_current_locus_point); } #.* /* end-of-file comment */; /* Number */ 0[xX]{X}+ | 0[0-7]+ | [1-9][0-9]+ { grecs_line_begin(); grecs_line_add(yytext, yyleng); yylval.string = grecs_line_finish(); return META1_STRING; } /* Identifiers (unquoted strings) */ [a-zA-Z0-9_\./:\*-]+ { grecs_line_begin(); grecs_line_add(yytext, yyleng); yylval.string = grecs_line_finish(); return META1_IDENT; } /* Quoted strings */ \"[^\\"\n]*\" { grecs_line_begin(); grecs_line_add(yytext + 1, yyleng - 2); yylval.string = grecs_line_finish(); return META1_STRING; } \"[^\\"\n]*\\x{X}{1,2} { BEGIN(STR); grecs_line_begin(); meta1_line_add_unescape_hex(yytext + 1, yyleng - 1); } \"[^\\"\n]*\\. { BEGIN(STR); grecs_line_begin(); grecs_line_acc_grow_unescape_last(yytext + 1, yyleng - 1, &yylloc); } <STR>[^\\"\n]*\\x{X}{1,2} { meta1_line_add_unescape_hex(yytext, yyleng); } <STR>[^\\"\n]*\\. { grecs_line_acc_grow_unescape_last(yytext, yyleng, &yylloc); } <STR>[^\\"\n]*\" { BEGIN(INITIAL); if (yyleng > 1) grecs_line_add(yytext, yyleng - 1); yylval.string = grecs_line_finish(); return META1_STRING; } <STR>[^\\"\n]*\n { BEGIN(INITIAL); grecs_error(&yylloc, 0, _("newline in a string")); grecs_line_add(yytext, yyleng - 1); yylval.string = grecs_line_finish(); return META1_STRING; } /* Other tokens */ [ \t\f][ \t\f]* ; \n { grecs_locus_point_advance_line(grecs_current_locus_point); } [,;{}=] return yytext[0]; . { grecs_error(&yylloc, 0, (isascii(yytext[0]) && isprint(yytext[0])) ? _("stray character %c") : _("stray character \\%03o"), (unsigned char) yytext[0]); } %% int yywrap() { return 1; } static void meta1_line_add_unescape_hex(const char *text, size_t len) { for (; text[len-1] != 'x' && len > 0; len--) ; grecs_line_acc_grow(text, len - 2); grecs_line_acc_grow_char((char) strtoul (text + len, NULL, 16)); } �������������������������������������������������������������������������direvent-5.2/grecs/src/git-parser.c�����������������������������������������������������������������0000644�0001750�0001750�00000021707�13244106110�017300� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Git-style configuration file parser for Grecs. Copyright (C) 2011-2016 Sergey Poznyakoff Grecs 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. Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include <stdlib.h> #include <string.h> #include <ctype.h> #include <errno.h> #include <grecs.h> static FILE *infile; static int input_char; static struct grecs_txtacc *acc; #define TOK_EOF 0 #define TOK_EQ '=' #define TOK_SECTION 256 #define TOK_KEYWORD 257 #define TOK_VALUE 258 #define TOK_ERR -1 struct token { int type; char *buf; char chbuf[2]; int putback; struct grecs_list *path; grecs_locus_t loc; unsigned prev_col; } tok; #define ISSPACE(c) (strchr(" \t\r\f\n", c) != NULL) #define ISIDENT(c) ((isascii(c) && isalnum(c)) || (c) == '_') #define ISINITIAL(c) ((isascii(c) && isalpha(c)) || (c) == '_') static int rawinput() { if (!infile || feof(infile)) return input_char = 0; input_char = fgetc(infile); if (input_char == '\n') { tok.prev_col = grecs_current_locus_point.col; grecs_locus_point_advance_line(grecs_current_locus_point); } else if (input_char < 0) input_char = 0; else grecs_current_locus_point.col++; return input_char; } static int input() { rawinput(); if (input_char == '#' || input_char == ';') { while (rawinput() && input_char != '\n') ; } return input_char; } static void unput() { if (!input_char) return; if (input_char == '\n') { grecs_current_locus_point.line--; grecs_current_locus_point.col = tok.prev_col; } else grecs_current_locus_point.col--; ungetc(input_char, infile); } static void error_recovery() { while (input() && input_char != '\n') ; } static void collect_unquoted() { do grecs_txtacc_grow_char(acc, input_char); while (input() && !(ISSPACE(input_char) || input_char == ']')); } static void collect_subsection_name() { do grecs_txtacc_grow_char(acc, input_char); while (input() && (isalnum(input_char) || input_char == '_' || input_char == '-')); } static void collect_substring() { while (rawinput()) { if (input_char == '\\') { if (!input()) { grecs_error(&tok.loc, 0, "unexpected EOF in string"); break; } switch (input_char) { case 'n': input_char = '\n'; break; case 't': input_char = '\t'; break; case 'b': input_char = '\b'; } } else if (input_char == '"') break; grecs_txtacc_grow_char(acc, input_char); } } #define endpoint(t,adj) do { \ (t).loc.end = grecs_current_locus_point; \ if (adj) { \ if (input_char == '\n') \ (t).loc.end.col = (t).prev_col; \ else \ (t).loc.end.col -= (adj); \ } \ } while (0) static void gettoken(void) { int putback = tok.putback; tok.putback = 0; if (putback) { if (putback == '\n') grecs_locus_point_advance_line(grecs_current_locus_point); else grecs_current_locus_point.col++; return; } tok.buf = NULL; /* Skip whitespace */ while (input() && ISSPACE(input_char)) ; tok.loc.beg = grecs_current_locus_point; if (input_char <= 0) { tok.type = TOK_EOF; endpoint(tok, 0); return; } if (input_char == '[') { int dot_delimited = -1; tok.type = TOK_SECTION; grecs_list_clear(tok.path); input(); for (;;) { char *p; if (!dot_delimited) while (ISSPACE(input_char)) input(); else { if (input_char == ']') break; if (dot_delimited == 1) input(); } if (input_char == TOK_EOF) { endpoint(tok, 0); grecs_error(&tok.loc, 0, "unexpected EOF in section header"); tok.type = TOK_ERR; return; } if (input_char == ']') break; if (input_char == '\n') { endpoint(tok, 1); grecs_error(&tok.loc, 0, "unexpect newline in in section header"); tok.type = TOK_ERR; return; } if (dot_delimited != 1 && input_char == '"') { collect_substring(); input(); dot_delimited = 0; } else if (dot_delimited == 1) collect_subsection_name(); else collect_unquoted(); if (dot_delimited == -1) dot_delimited = input_char == '.'; else if (dot_delimited == 1) { if (input_char != '.' && input_char != ']') { endpoint(tok, 1); grecs_error(&tok.loc, 0, "unexpected character in section header"); tok.type = TOK_ERR; return; } } grecs_txtacc_grow_char(acc, 0); p = grecs_txtacc_finish(acc, 0); grecs_list_append(tok.path, p); } endpoint(tok, 1); if (grecs_list_size(tok.path) == 0) { grecs_error(&tok.loc, 0, "empty section header"); tok.type = TOK_ERR; return; } tok.type = TOK_SECTION; return; } if (ISINITIAL(input_char)) { tok.type = TOK_KEYWORD; do grecs_txtacc_grow_char(acc, input_char); while (input() && ISIDENT(input_char)); unput(); grecs_txtacc_grow_char(acc, 0); tok.buf = grecs_txtacc_finish(acc, 0); endpoint(tok, 0); return; } tok.chbuf[0] = input_char; tok.chbuf[1] = 0; tok.buf = tok.chbuf; tok.type = input_char; endpoint(tok, 0); } static void collect_value() { do { if (input_char == '"') { collect_substring(); if (input_char == '"') continue; else break; } if (input_char == '\\') { if (!rawinput()) break; switch (input_char) { case 'n': input_char = '\n'; break; case 't': input_char = '\t'; break; case 'b': input_char = '\b'; } } grecs_txtacc_grow_char(acc, input_char); } while (input() && input_char != '\n'); } static struct grecs_value * getvalue() { int len; struct grecs_value *val = grecs_malloc(sizeof(*val)); while (input() && ISSPACE(input_char) && input_char != '\n') ; val->locus.beg = grecs_current_locus_point; if (input_char != '\n') collect_value(); val->locus.end = grecs_current_locus_point; val->locus.end.line--; val->locus.end.col = tok.prev_col; grecs_txtacc_grow_char(acc, 0); tok.type = TOK_VALUE; tok.buf = grecs_txtacc_finish(acc, 1); len = strlen(tok.buf); while (len > 0 && ISSPACE(tok.buf[len-1])) tok.buf[--len] = 0; val->type = GRECS_TYPE_STRING; val->v.string = tok.buf; return val; } static int read_statement(struct grecs_node *parent) { struct grecs_node *node; gettoken(); if (tok.type == TOK_EOF || tok.type == TOK_SECTION) { tok.putback = 1; return 0; } if (tok.type != TOK_KEYWORD) { grecs_error(&tok.loc, 0, "syntax error"); error_recovery(); return 1; } node = grecs_node_create(grecs_node_stmt, &tok.loc); node->ident = grecs_strdup(tok.buf); node->idloc = tok.loc; gettoken(); if (tok.type == TOK_EOF) { grecs_error(&tok.loc, 0, "unexpected EOF"); grecs_node_free(node); return 0; } if (tok.type != TOK_EQ) { grecs_error(&tok.loc, 0, "expected `=', but found `%s'", tok.buf); error_recovery(); grecs_node_free(node); return 1; } node->v.value = getvalue(); node->locus.end = node->v.value->locus.end; grecs_node_bind(parent, node, 1); return 1; } static void read_statement_list(struct grecs_node *parent) { while (read_statement(parent)) ; } struct grecs_node * create_subsection_node(struct grecs_node *root) { struct grecs_list_entry *ep; struct grecs_node *p; for (ep = tok.path->head; ep; ep = ep->next) { char *ident = ep->data; p = grecs_find_node(root, ident); if (!p) { p = grecs_node_create(grecs_node_block, &tok.loc); p->ident = grecs_strdup(ident); grecs_node_bind(root, p, 1); } root = p; } return root; } static int read_section(struct grecs_node *parent) { gettoken(); if (tok.type == TOK_EOF) return 0; else if (tok.type == TOK_SECTION) { struct grecs_node *node = create_subsection_node(parent); read_statement_list(node); } else if (tok.type == TOK_KEYWORD) { read_statement(parent); } else { grecs_error(&tok.loc, 0, "syntax error"); error_recovery(); } return 1; } /* FIXME: traceflags not used */ struct grecs_node * grecs_git_parser(const char *name, int traceflags) { struct grecs_node *root; infile = fopen(name, "r"); if (!infile) { grecs_error(NULL, errno, _("cannot open `%s'"), name); return NULL; } grecs_current_locus_point.file = grecs_install_text(name); grecs_current_locus_point.line = 1; grecs_current_locus_point.col = 0; acc = grecs_txtacc_create(); tok.path = grecs_list_create(); root = grecs_node_create(grecs_node_root, &tok.loc); while (read_section(root)) ; root->locus.end = grecs_current_locus_point; fclose(infile); grecs_txtacc_free(acc); grecs_list_free(tok.path); if (grecs_error_count) { grecs_tree_free(root); root = NULL; } return root; } ���������������������������������������������������������direvent-5.2/grecs/src/txtacc.c���������������������������������������������������������������������0000644�0001750�0001750�00000011236�13244106110�016505� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* wydawca - automatic release submission daemon Copyright (C) 2007-2016 Sergey Poznyakoff Wydawca 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. Wydawca 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 wydawca. If not, see <http://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include <string.h> #include <stdlib.h> #include "grecs.h" struct grecs_txtacc_entry { char *buf; /* Text buffer */ size_t size; /* Buffer size */ size_t len; /* Actual number of bytes in buffer */ }; #define TXTACC_BUFSIZE 1024 #define grecs_txtacc_entry_freesize(e) ((e)->size - (e)->len) struct grecs_txtacc { struct grecs_list *cur; /* Current build list */ struct grecs_list *mem; /* List of already allocated elements */ }; static struct grecs_txtacc_entry * grecs_txtacc_alloc_entry(struct grecs_list *list, size_t size) { struct grecs_txtacc_entry *p = grecs_malloc(sizeof (*p)); p->buf = grecs_malloc(size); p->size = size; p->len = 0; grecs_list_append(list, p); return p; } static struct grecs_txtacc_entry * grecs_txtacc_cur_entry(struct grecs_txtacc *acc) { struct grecs_txtacc_entry *ent; if (grecs_list_size(acc->cur) == 0) return grecs_txtacc_alloc_entry(acc->cur, GRECS_TXTACC_BUFSIZE); ent = acc->cur->tail->data; if (grecs_txtacc_entry_freesize(ent) == 0) ent = grecs_txtacc_alloc_entry(acc->cur, GRECS_TXTACC_BUFSIZE); return ent; } static void grecs_txtacc_entry_append(struct grecs_txtacc_entry *ent, const char *p, size_t size) { memcpy(ent->buf + ent->len, p, size); ent->len += size; } static void grecs_txtacc_entry_tailor(struct grecs_txtacc_entry *ent) { if (ent->size > ent->len) { char *p = grecs_realloc(ent->buf, ent->len); if (!p) return; ent->buf = p; ent->size = ent->len; } } static void grecs_txtacc_entry_free(void *p) { if (p) { struct grecs_txtacc_entry *ent = p; free(ent->buf); free(ent); } } struct grecs_txtacc * grecs_txtacc_create() { struct grecs_txtacc *acc = grecs_malloc(sizeof (*acc)); acc->cur = grecs_list_create(); acc->cur->free_entry = grecs_txtacc_entry_free; acc->mem = grecs_list_create(); acc->mem->free_entry = grecs_txtacc_entry_free; return acc; } void grecs_txtacc_free(struct grecs_txtacc *acc) { if (acc) { grecs_list_free(acc->cur); grecs_list_free(acc->mem); free(acc); } } void grecs_txtacc_grow(struct grecs_txtacc *acc, const char *buf, size_t size) { while (size) { struct grecs_txtacc_entry *ent = grecs_txtacc_cur_entry(acc); size_t rest = grecs_txtacc_entry_freesize(ent); if (rest > size) rest = size; grecs_txtacc_entry_append(ent, buf, rest); buf += rest; size -= rest; } } void grecs_txtacc_grow_string(struct grecs_txtacc *acc, const char *buf) { grecs_txtacc_grow(acc, buf, strlen(buf)); } void grecs_txtacc_grow_string_escape(struct grecs_txtacc *acc, const char *buf) { for (; *buf; buf++) { if (strchr(" \t\n\"\'\\", *buf)) grecs_txtacc_grow_char(acc, '\\'); grecs_txtacc_grow_char(acc, *buf); } } char * grecs_txtacc_finish(struct grecs_txtacc *acc, int steal) { struct grecs_list_entry *ep; struct grecs_txtacc_entry *txtent; size_t size; char *p; switch (grecs_list_size(acc->cur)) { case 0: return NULL; case 1: txtent = acc->cur->head->data; acc->cur->head->data = NULL; grecs_txtacc_entry_tailor(txtent); grecs_list_append(acc->mem, txtent); break; default: size = 0; for (ep = acc->cur->head; ep; ep = ep->next) { txtent = ep->data; size += txtent->len; } txtent = grecs_txtacc_alloc_entry(acc->mem, size); for (ep = acc->cur->head; ep; ep = ep->next) { struct grecs_txtacc_entry *tp = ep->data; grecs_txtacc_entry_append(txtent, tp->buf, tp->len); } } grecs_list_clear(acc->cur); p = txtent->buf; if (steal) { grecs_list_remove_tail(acc->mem); free(txtent); } return p; } void grecs_txtacc_free_string(struct grecs_txtacc *acc, char *str) { struct grecs_list_entry *ep; for (ep = acc->mem->head; ep; ep = ep->next) { struct grecs_txtacc_entry *tp = ep->data; if (tp->buf == str) { grecs_list_remove_entry(acc->mem, ep); grecs_txtacc_entry_free(tp); return; } } } void grecs_txtacc_clear(struct grecs_txtacc *acc) { grecs_list_clear(acc->cur); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/src/Make-inst.am�����������������������������������������������������������������0000644�0001750�0001750�00000001612�13511403723�017226� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of grecs - Gray's Extensible Configuration System # Copyright (C) 2007-2019 Sergey Poznyakoff # # Grecs 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. # # Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. include Make.am lib_LTLIBRARIES=libgrecs.la libgrecs_la_SOURCES = $(GRECS_SRC) m4datadir = $(datadir)/aclocal dist_m4data_DATA = libgrecs.m4 nodist_libgrecs_la_SOURCES = $(NODIST_GRECS_SRC) ����������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/src/grecs-gram.h�����������������������������������������������������������������0000644�0001750�0001750�00000006415�13244106145�017266� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A Bison parser, made by GNU Bison 2.7. */ /* Bison interface for Yacc-like parsers in C Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ #ifndef YY_YY_GRECS_GRAM_H_INCLUDED # define YY_YY_GRECS_GRAM_H_INCLUDED /* Enabling traces. */ #ifndef YYDEBUG # define YYDEBUG 1 #endif #if YYDEBUG extern int grecs_grecs_debug; #endif /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE /* Put the tokens into the symbol table, so that GDB and other debuggers know about them. */ enum grecs_grecs_tokentype { STRING = 258, QSTRING = 259, MSTRING = 260, IDENT = 261 }; #endif /* Tokens. */ #define STRING 258 #define QSTRING 259 #define MSTRING 260 #define IDENT 261 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE { /* Line 2058 of yacc.c */ #line 37 "grecs-gram.y" char *string; grecs_value_t svalue, *pvalue; struct grecs_list *list; struct grecs_node *node; grecs_locus_t locus; struct { struct grecs_node *head, *tail; } node_list; /* Line 2058 of yacc.c */ #line 79 "grecs-gram.h" } YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define grecs_grecs_stype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 #endif #if ! defined YYLTYPE && ! defined YYLTYPE_IS_DECLARED typedef struct YYLTYPE { int first_line; int first_column; int last_line; int last_column; } YYLTYPE; # define grecs_grecs_ltype YYLTYPE /* obsolescent; will be withdrawn */ # define YYLTYPE_IS_DECLARED 1 # define YYLTYPE_IS_TRIVIAL 1 #endif extern YYSTYPE grecs_grecs_lval; extern YYLTYPE grecs_grecs_lloc; #ifdef YYPARSE_PARAM #if defined __STDC__ || defined __cplusplus int grecs_grecs_parse (void *YYPARSE_PARAM); #else int grecs_grecs_parse (); #endif #else /* ! YYPARSE_PARAM */ #if defined __STDC__ || defined __cplusplus int grecs_grecs_parse (void); #else int grecs_grecs_parse (); #endif #endif /* ! YYPARSE_PARAM */ #endif /* !YY_YY_GRECS_GRAM_H_INCLUDED */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/src/bind-gram.y������������������������������������������������������������������0000644�0001750�0001750�00000016001�13244106110�017100� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������%{ /* grecs - Gray's Extensible Configuration System Copyright (C) 2007-2016 Sergey Poznyakoff Grecs 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. Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include <grecs.h> #include <bind-gram.h> #include <stdlib.h> #include <stdarg.h> #include <string.h> #include <errno.h> int yylex(void); int yyerror(char const *s); static struct grecs_node *parse_tree; extern int yy_flex_debug; extern int grecs_bind_new_source(const char *name, grecs_locus_t *loc); extern void grecs_bind_close_sources(void); static struct grecs_value *stmtlist_to_value(struct grecs_node *node); %} %error-verbose %locations %union { char *string; grecs_value_t svalue, *pvalue; struct grecs_list *list; struct grecs_node *node; grecs_locus_t locus; struct { struct grecs_node *head, *tail; } node_list; } %token <string> BIND_STRING BIND_IDENT BIND_CONTROLS %type <string> string %type <svalue> value ctlsub %type <pvalue> vallist tag %type <list> vlist ctllist %type <node> stmt simple block maybe_stmtlist %type <node_list> stmtlist %% input : maybe_stmtlist { parse_tree = grecs_node_create(grecs_node_root, &@1); parse_tree->v.texttab = grecs_text_table(); grecs_node_bind(parse_tree, $1, 1); } ; maybe_stmtlist: /* empty */ { $$ = NULL; } | stmtlist { $$ = $1.head; } ; stmtlist: stmt { $$.head = $$.tail = $1; } | stmtlist stmt { if ($2) { if (!$1.head) $1.head = $1.tail = $2; else grecs_node_bind($1.tail, $2, 0); } $$ = $1; } ; stmt : simple | block ; simple : BIND_IDENT vallist ';' { if (strcmp($1, "include") == 0 && $2->type == GRECS_TYPE_STRING) { grecs_bind_new_source($2->v.string, &@1); $$ = NULL; } else { $$ = grecs_node_create_points(grecs_node_stmt, @1.beg, @2.end); $$->ident = $1; $$->idloc = @1; $$->v.value = $2; } } | string ';' { $$ = grecs_node_create(grecs_node_stmt, &@1); $$->ident = $1; $$->idloc = @1; $$->v.value = NULL; } | '!' string ';' { $$ = grecs_node_create_points(grecs_node_stmt, @1.beg, @2.end); $$->ident = grecs_strdup("!"); $$->idloc = @1; $$->v.value = grecs_malloc(sizeof($$->v.value[0])); $$->v.value->type = GRECS_TYPE_STRING; $$->v.value->locus = @2; $$->v.value->v.string = $2; } ; block : BIND_IDENT tag '{' maybe_stmtlist '}' ';' { $$ = grecs_node_create_points(grecs_node_block, @1.beg, @5.end); $$->ident = $1; $$->idloc = @1; $$->v.value = $2; grecs_node_bind($$, $4, 1); } | BIND_CONTROLS '{' ctlsub '}' ';' /* Special case: controls { inet 127.0.0.1 port 953 allow { 127.0.0.1; 127.0.0.2; } keys { "rndc-key"; }; }; This produces: .controls: (inet, 127.0.0.1, port, 953, allow, \ (127.0.0.1, 127.0.0.2), keys, (rndc-key)) */ { $$ = grecs_node_create_points(grecs_node_stmt, @1.beg, @4.end); $$->ident = $1; $$->idloc = @1; $$->v.value = grecs_value_ptr_from_static(&$3); } ; tag : /* empty */ { $$ = NULL; } | vallist ; vallist : vlist { size_t n; if ((n = grecs_list_size($1)) == 1) { $$ = grecs_list_index($1, 0); } else { size_t i; struct grecs_list_entry *ep; $$ = grecs_malloc(sizeof($$[0])); $$->type = GRECS_TYPE_ARRAY; $$->locus = @1; $$->v.arg.c = n; $$->v.arg.v = grecs_calloc(n, sizeof($$->v.arg.v[0])); for (i = 0, ep = $1->head; ep; i++, ep = ep->next) $$->v.arg.v[i] = ep->data; } $1->free_entry = NULL; grecs_list_free($1); } ; vlist : value { $$ = grecs_value_list_create(); grecs_list_append($$, grecs_value_ptr_from_static(&$1)); } | vlist value { grecs_list_append($1, grecs_value_ptr_from_static(&$2)); } ; value : string { $$.type = GRECS_TYPE_STRING; $$.locus = @1; $$.v.string = $1; } ; string : BIND_STRING | BIND_IDENT ; ctlsub : ctllist ';' { $$.type = GRECS_TYPE_LIST; $$.locus = @1; $$.v.list = $1; } ; ctllist : value { $$ = grecs_value_list_create(); grecs_list_append($$, grecs_value_ptr_from_static(&$1)); } | ctllist value { grecs_list_append($1, grecs_value_ptr_from_static(&$2)); } | ctllist '{' stmtlist '}' { grecs_list_append($1, stmtlist_to_value($3.head)); /* FIXME: Free $3 */ } ; %% int yyerror(char const *s) { grecs_error(&yylloc, 0, "%s", s); return 0; } struct grecs_node * grecs_bind_parser(const char *name, int traceflags) { int rc; if (grecs_bind_new_source(name, NULL)) return NULL; yy_flex_debug = traceflags & GRECS_TRACE_LEX; yydebug = traceflags & GRECS_TRACE_GRAM; parse_tree = NULL; grecs_line_acc_create(); rc = yyparse(); grecs_bind_close_sources(); if (grecs_error_count) rc = 1; grecs_line_acc_free(); if (rc) { grecs_tree_free(parse_tree); parse_tree = NULL; } return parse_tree; } static struct grecs_value * node_to_value(struct grecs_node *node, struct grecs_txtacc *acc) { struct grecs_value *val = grecs_malloc(sizeof(*val)); int delim = 0; if (node->ident) { grecs_txtacc_grow(acc, node->ident, strlen(node->ident)); delim = 1; } if (node->v.value) { if (delim) grecs_txtacc_grow_char(acc, ' '); grecs_txtacc_format_value(node->v.value, 0, acc); delim = 1; } if (node->type == grecs_node_stmt) { val->type = GRECS_TYPE_STRING; grecs_txtacc_grow_char(acc, 0); val->v.string = grecs_txtacc_finish(acc, 1); } else if (node->down) { struct grecs_list *list = grecs_value_list_create(); struct grecs_node *np; if (delim) grecs_txtacc_grow_char(acc, ' '); for (np = node->down; np; np = np->next) grecs_list_append(list, node_to_value(np, acc)); val->type = GRECS_TYPE_LIST; val->v.list = list; } return val; } static struct grecs_value * stmtlist_to_value(struct grecs_node *node) { struct grecs_txtacc *acc = grecs_txtacc_create(); struct grecs_value *val; struct grecs_node parent; memset(&parent, 0, sizeof(parent)); parent.type = grecs_node_block; parent.down = node; val = node_to_value(&parent, acc); grecs_txtacc_free(acc); return val; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/src/opthelp.c��������������������������������������������������������������������0000644�0001750�0001750�00000030677�13244106110�016704� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* grecs - Gray's Extensible Configuration System Copyright (C) 2007-2016 Sergey Poznyakoff Grecs 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. Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include <stdio.h> #include <stdlib.h> #include <string.h> #include "grecs.h" #include "grecs/opt.h" #include "wordsplit.h" static void indent(size_t start, size_t col) { for (; start < col; start++) putchar(' '); } static void print_option_descr(const char *descr, size_t lmargin, size_t rmargin) { while (*descr) { int i, s = 0; size_t width = rmargin - lmargin; for (i = 0; ; i++) { if (descr[i] == 0 || descr[i] == ' ' || descr[i] == '\t') { if (i > width) break; s = i; if (descr[i] == 0) break; } } printf("%*.*s\n", s, s, descr); descr += s; if (*descr) { indent(0, lmargin); descr++; } } } static int optcmp(const void *a, const void *b) { struct grecs_opthelp const *ap = (struct grecs_opthelp const *)a; struct grecs_opthelp const *bp = (struct grecs_opthelp const *)b; const char *opta, *optb; size_t alen, blen; for (opta = ap->opt; *opta == '-'; opta++) ; alen = strcspn (opta, ","); for (optb = bp->opt; *optb == '-'; optb++) ; blen = strcspn (optb, ","); if (alen > blen) blen = alen; return strncmp (opta, optb, blen); } static void sort_options(struct grecs_opthelp *opthelp, int start, int count) { qsort(opthelp + start, count, sizeof(opthelp[0]), optcmp); } static int sort_group(struct grecs_opthelp *opthelp, size_t optcount, int start) { int i; for (i = start; i < optcount && opthelp[i].opt; i++) ; sort_options(opthelp, start, i - start); return i + 1; } static void sort_opthelp(struct grecs_opthelp *opthelp, size_t optcount) { int start; for (start = 0; start < optcount; ) { if (!opthelp[start].opt) start = sort_group(opthelp, optcount, start + 1); else start = sort_group(opthelp, optcount, start); } } #define ISEMPTY(s) ((s) == NULL || *(s) == 0) void grecs_print_help(struct grecs_proginfo *pinfo) { unsigned i; int argsused = 0; struct grecs_opthelp *opthelp; size_t optcount; printf("%s %s ", _("Usage:"), pinfo->progname); if (pinfo->subcmd) printf("%s ", pinfo->subcmd[0]); printf("[%s]... %s\n", _("OPTION"), !ISEMPTY(pinfo->args_doc) ? gettext(pinfo->args_doc) : ""); if (pinfo->subcmd && pinfo->subcmd[1]) { char **p; printf("%s: ", pinfo->subcmd[2] ? _("Aliases") : _("Alias")); for (p = pinfo->subcmd + 1; *p; p++) printf("%s%c", *p, p[1] ? ' ' : '\n'); } if (!ISEMPTY(pinfo->docstring)) print_option_descr(gettext(pinfo->docstring), 0, RMARGIN); putchar('\n'); opthelp = pinfo->opthelp; optcount = pinfo->optcount; sort_opthelp(opthelp, optcount); for (i = 0; i < optcount; i++) { unsigned n; if (opthelp[i].opt) { n = printf(" %s", opthelp[i].opt); if (opthelp[i].arg) { char *cb, *ce; argsused = 1; if (strlen(opthelp[i].opt) == 2) { if (!opthelp[i].is_optional) { putchar(' '); n++; } } else { putchar ('='); n++; } if (opthelp[i].is_optional) { cb = "["; ce = "]"; } else cb = ce = ""; n += printf("%s%s%s", cb, gettext(opthelp[i].arg), ce); } if (n >= DESCRCOLUMN) { putchar('\n'); n = 0; } indent(n, DESCRCOLUMN); print_option_descr(gettext(opthelp[i].descr), DESCRCOLUMN, RMARGIN); } else { if (i) putchar('\n'); indent(0, GROUPCOLUMN); print_option_descr(gettext(opthelp[i].descr), GROUPCOLUMN, RMARGIN); putchar('\n'); } } putchar('\n'); if (argsused) { print_option_descr(_("Mandatory or optional arguments to " "long options are also mandatory or " "optional for any corresponding short " "options."), 0, RMARGIN); putchar('\n'); } if (pinfo->print_help_hook) pinfo->print_help_hook(stdout); if (!ISEMPTY(pinfo->bug_address)) /* TRANSLATORS: The placeholder indicates the bug-reporting address for this package. Please add _another line_ saying "Report translation bugs to <...>\n" with the address for translation bugs (typically your translation team's web or email address). */ printf(_("Report bugs to %s.\n"), pinfo->bug_address); if (!ISEMPTY(pinfo->url)) printf(_("%s home page: <%s>\n"), pinfo->package, pinfo->url); if (!ISEMPTY(pinfo->epilogue)) printf("%s", gettext(pinfo->epilogue)); } static int cmpidx_short(const void *a, const void *b) { struct grecs_opthelp const **opta = (struct grecs_opthelp const **)a; struct grecs_opthelp const **optb = (struct grecs_opthelp const **)b; return (*opta)->opt[1] - (*optb)->opt[1]; } #ifdef HAVE_GETOPT_LONG static int cmpidx_long(const void *a, const void *b) { struct grecs_opthelp const **ap = (struct grecs_opthelp const **)a; struct grecs_opthelp const **bp = (struct grecs_opthelp const **)b; char const *opta, *optb; size_t lena, lenb; if ((*ap)->opt[1] == '-') opta = (*ap)->opt; else opta = (*ap)->opt + 4; lena = strcspn(opta, ","); if ((*bp)->opt[1] == '-') optb = (*bp)->opt; else optb = (*bp)->opt + 4; lenb = strcspn(optb, ","); return strncmp(opta, optb, lena > lenb ? lenb : lena); } #endif void grecs_print_usage(struct grecs_proginfo *pinfo) { unsigned i; unsigned n; char *buf; size_t bufsize; unsigned nidx; struct grecs_opthelp **optidx; struct grecs_opthelp *opthelp = pinfo->opthelp; size_t optcount = pinfo->optcount; #define FLUSH do { \ buf[n] = 0; \ printf("%s\n", buf); \ n = USAGECOLUMN; \ memset(buf, ' ', n); \ } while (0) #define ADDC(c) \ do { if (n == RMARGIN) FLUSH; buf[n++] = c; } while (0) optidx = grecs_calloc(optcount, sizeof(optidx[0])); bufsize = RMARGIN + 1; buf = grecs_malloc(bufsize); n = snprintf(buf, bufsize, "%s %s ", _("Usage:"), pinfo->progname); if (pinfo->subcmd) n += snprintf(buf + n, bufsize - n, "%s ", pinfo->subcmd[0]); /* Print a list of short options without arguments. */ for (i = nidx = 0; i < optcount; i++) if (opthelp[i].opt && opthelp[i].descr && opthelp[i].opt[1] != '-' && opthelp[i].arg == NULL) optidx[nidx++] = opthelp + i; if (nidx) { qsort(optidx, nidx, sizeof(optidx[0]), cmpidx_short); ADDC('['); ADDC('-'); for (i = 0; i < nidx; i++) { ADDC(optidx[i]->opt[1]); } ADDC(']'); } /* Print a list of short options with arguments. */ for (i = nidx = 0; i < optcount; i++) { if (opthelp[i].opt && opthelp[i].descr && opthelp[i].opt[1] != '-' && opthelp[i].arg) optidx[nidx++] = opthelp + i; } if (nidx) { qsort(optidx, nidx, sizeof(optidx[0]), cmpidx_short); for (i = 0; i < nidx; i++) { struct grecs_opthelp *opt = optidx[i]; size_t len = 5 + strlen(opt->arg) + (opt->is_optional ? 2 : 1); if (n + len > RMARGIN) FLUSH; buf[n++] = ' '; buf[n++] = '['; buf[n++] = '-'; buf[n++] = opt->opt[1]; if (opt->is_optional) { buf[n++] = '['; strcpy(&buf[n], opt->arg); n += strlen(opt->arg); buf[n++] = ']'; } else { buf[n++] = ' '; strcpy(&buf[n], opt->arg); n += strlen(opt->arg); } buf[n++] = ']'; } } #ifdef HAVE_GETOPT_LONG /* Print a list of long options */ for (i = nidx = 0; i < optcount; i++) { if (opthelp[i].opt && opthelp[i].descr && (opthelp[i].opt[1] == '-' || opthelp[i].opt[2] == ',')) optidx[nidx++] = opthelp + i; } if (nidx) { qsort (optidx, nidx, sizeof(optidx[0]), cmpidx_long); for (i = 0; i < nidx; i++) { struct grecs_opthelp *opt = optidx[i]; size_t len; const char *longopt; if (opt->opt[1] == '-') longopt = opt->opt; else if (opt->opt[2] == ',') longopt = opt->opt + 4; else continue; len = 3 + strlen(longopt) + (opt->arg ? 1 + strlen(opt->arg) + (opt->is_optional ? 2 : 0) : 0); if (n + len > RMARGIN) { FLUSH; /* Make sure we have enough buffer space if the string cannot be split */ if (n + len > bufsize) { bufsize = n + len; buf = grecs_realloc(buf, bufsize); } } buf[n++] = ' '; buf[n++] = '['; strcpy(&buf[n], longopt); n += strlen(longopt); if (opt->arg) { buf[n++] = '='; if (opt->is_optional) { buf[n++] = '['; strcpy(&buf[n], opt->arg); n += strlen(opt->arg); buf[n++] = ']'; } else { strcpy(&buf[n], opt->arg); n += strlen(opt->arg); } } buf[n++] = ']'; } } #endif /* Print argument list */ if (pinfo->args_doc) { size_t len = strlen(pinfo->args_doc) + 1; if (n + len <= RMARGIN) { buf[n++] = ' '; strcpy(buf + n, pinfo->args_doc); n += len; } else { struct wordsplit ws; if (wordsplit(pinfo->args_doc, &ws, WRDSF_SHOWERR | WRDSF_NOVAR | WRDSF_NOCMD | WRDSF_QUOTE | WRDSF_SQUEEZE_DELIMS)) abort(); for (i = 0; i < ws.ws_wordc; i++) { len = strlen(ws.ws_wordv[i]) + 1; if (n + len > RMARGIN) { FLUSH; /* Make sure we have enough buffer space if the string cannot be split */ if (n + len > bufsize) { bufsize = n + len; buf = grecs_realloc(buf, bufsize); } } buf[n++] = ' '; strcpy(buf + n, ws.ws_wordv[i]); n += len; } } } FLUSH; if (pinfo->subcmd && pinfo->subcmd[1]) { char **p; printf("%s: %s", pinfo->subcmd[2] ? _("Aliases") : _("Alias"), pinfo->progname); for (p = pinfo->subcmd + 1; *p; p++) printf(" %s", *p); putchar('\n'); } free(optidx); free(buf); } const char version_etc_copyright[] = /* Do *not* mark this string for translation. First %s is a copyright symbol suitable for this locale, and second %s are the copyright years. */ "Copyright %s %s %s"; void grecs_print_version_only(struct grecs_proginfo *pinfo, FILE *stream) { fprintf(stream, "%s", pinfo->progname); if (!ISEMPTY(pinfo->package)) fprintf(stream, " (%s)", pinfo->package); if (!ISEMPTY(pinfo->version)) fprintf(stream, " %s", pinfo->version); fputc('\n', stream); /* TRANSLATORS: Translate "(C)" to the copyright symbol (C-in-a-circle), if this symbol is available in the user's locale. Otherwise, do not translate "(C)"; leave it as-is. */ fprintf(stream, version_etc_copyright, _("(C)"), ISEMPTY(pinfo->copyright_year) ? "2012" : pinfo->copyright_year, ISEMPTY(pinfo->copyright_holder) ? "Free Software Foundation, inc." : pinfo->copyright_holder); fputc('\n', stream); } static const char gplv3[] = N_("License GPLv3+: GNU GPL version 3 or later " "<http://gnu.org/licenses/gpl.html>\n" "This is free software: you are free to change and redistribute it.\n" "There is NO WARRANTY, to the extent permitted by law.\n\n"); void grecs_print_version(struct grecs_proginfo *pinfo, FILE *stream) { grecs_print_version_only(pinfo, stream); fputs(gettext(ISEMPTY(pinfo->license) ? gplv3 : pinfo->license), stream); if (pinfo->print_version_hook) pinfo->print_version_hook(stream); if (pinfo->authors) { int i; unsigned width; const char *written_by = _("Written by "); /* TRANSLATORS: This string is used as a delimiter between authors' names as in: Written by Winnie the Pooh, Piglet ... */ const char *middle_delim = _(", "); /* TRANSLATORS: This string acts as a delimiter before the last author's names, e.g.: Written by Winnie the Pooh, Piglet and Christopher Robin. */ const char *final_delim = _(" and "); width = strlen(written_by); fputs(written_by, stream); for (i = 0; ; ) { const char *author = pinfo->authors[i++]; size_t len = strlen(author); const char *delim = NULL; if (pinfo->authors[i]) { delim = pinfo->authors[i+1] ? middle_delim : final_delim; len += strlen (delim); } else len++; if (width + len > RMARGIN) { fputc('\n', stream); width = 0; } fputs(author, stream); width += len; if (delim) fputs(delim, stream); else break; } fputc('.', stream); fputc('\n', stream); } } �����������������������������������������������������������������direvent-5.2/grecs/src/bind-lex.l�������������������������������������������������������������������0000644�0001750�0001750�00000017443�13244106110�016740� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* grecs - Gray's Extensible Configuration System -*- c -*- */ %option noinput %option nounput %top { #ifdef HAVE_CONFIG_H # include <config.h> #endif } %{ /* grecs - Gray's Extensible Configuration System Copyright (C) 2007-2016 Sergey Poznyakoff Grecs 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. Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. */ #include <grecs.h> #include <bind-gram.h> #include <unistd.h> #include <fcntl.h> #include <ctype.h> #include <stdlib.h> #include <errno.h> #include <sys/stat.h> #include <wordsplit.h> #define YY_USER_ACTION do { \ if (YYSTATE == 0) { \ yylloc.beg = grecs_current_locus_point; \ yylloc.beg.col++; \ } \ grecs_current_locus_point.col += yyleng; \ yylloc.end = grecs_current_locus_point; \ } while (0); %} %x COMMENT STR WS [ \t\f][ \t\f]* ID [a-zA-Z_][a-zA-Z_0-9-]* P [1-9][0-9]* %% /* C-style comments */ "/*" BEGIN(COMMENT); <COMMENT>[^*\n]* /* eat anything that's not a '*' */ <COMMENT>"*"+[^*/\n]* /* eat up '*'s not followed by '/'s */ <COMMENT>\n grecs_locus_point_advance_line(grecs_current_locus_point); <COMMENT>"*"+"/" BEGIN(INITIAL); /* Line directive */ ^[ \t]*#[ \t]*{P}[ \t]+\".*\".*\n { grecs_parse_line_directive_cpp(yytext, &yylloc, &grecs_current_locus_point, NULL); } ^[ \t]*#[ \t]*line[ \t].*\n { grecs_parse_line_directive(yytext, &yylloc, &grecs_current_locus_point, NULL); } /* End-of-line comments */ #.*\n { grecs_locus_point_advance_line(grecs_current_locus_point); } #.* /* end-of-file comment */; "//".*\n { grecs_locus_point_advance_line(grecs_current_locus_point); } "//".* /* end-of-file comment */; /* Identifiers */ {ID} { grecs_line_begin(); grecs_line_add(yytext, yyleng); yylval.string = grecs_line_finish(); return strcmp(yylval.string, "controls") == 0 ? BIND_CONTROLS : BIND_IDENT; } /* Strings */ [a-zA-Z0-9_\.\*/:@-]([a-zA-Z0-9_\./:@-][a-zA-Z0-9_\.\*/:@-]*)? { grecs_line_begin(); grecs_line_add(yytext, yyleng); yylval.string = grecs_line_finish(); return BIND_STRING; } /* Quoted strings */ \"[^\\"\n]*\" { grecs_line_begin(); grecs_line_add(yytext + 1, yyleng - 2); yylval.string = grecs_line_finish(); return BIND_STRING; } \"[^\\"\n]*\\. | \"[^\\"\n]*\\\n { BEGIN(STR); grecs_line_begin(); grecs_line_acc_grow_unescape_last(yytext + 1, yyleng - 1, &yylloc); } \"[^\\"\n]*\n { BEGIN(STR); grecs_line_begin(); grecs_line_acc_grow(yytext + 1, yyleng - 1); } <STR>[^\\"\n]*\\. | <STR>\"[^\\"\n]*\\\n { grecs_line_acc_grow_unescape_last(yytext, yyleng, &yylloc); } <STR>[^\\"\n]*\n | <STR>\"[^\\"\n]*\n { grecs_line_acc_grow(yytext, yyleng); } <STR>[^\\"\n]*\" { BEGIN(INITIAL); if (yyleng > 1) grecs_line_add(yytext, yyleng - 1); yylval.string = grecs_line_finish(); return BIND_STRING; } {WS} ; /* Other tokens */ \n { grecs_locus_point_advance_line(grecs_current_locus_point); } [,;{}()!] return yytext[0]; . { if (isascii(yytext[0]) && isprint(yytext[0])) grecs_error(&yylloc, 0, _("stray character %c"), yytext[0]); else grecs_error(&yylloc, 0, _("stray character \\%03o"), (unsigned char) yytext[0]); } %% struct bind_input_context { ino_t i_node; dev_t i_dev; struct grecs_locus_point point; grecs_locus_t locus; /* Current input location */ YY_BUFFER_STATE state; FILE *input; }; static struct grecs_list *input_stack; static ino_t i_node; static dev_t i_dev; static void free_context(void *ptr) { free(ptr); } static int cmp_context(const void *a, const void *b) { struct bind_input_context const *ac = a; struct bind_input_context const *bc = b; return !(ac->i_node == bc->i_node && ac->i_dev == bc->i_dev); } static int _push_context(const char *name, ino_t i_node, dev_t i_dev, grecs_locus_t *loc) { struct bind_input_context ctx, *pctx; if (!input_stack) { input_stack = grecs_list_create(); input_stack->free_entry = free_context; input_stack->cmp = cmp_context; } else { ctx.i_dev = i_dev; ctx.i_node = i_node; pctx = grecs_list_locate(input_stack, &ctx); if (pctx) { grecs_error(&yylloc, 0, _("%s has already been included"), name); grecs_error(&pctx->locus, 0, _("this is where the previous inclusion occurred")); return 1; } pctx = grecs_malloc(sizeof(*pctx)); pctx->i_node = i_node; pctx->i_dev = i_dev; if (loc) pctx->locus = *loc; else memset(&pctx->locus, 0, sizeof(pctx->locus)); /* FIXME */ pctx->point = grecs_current_locus_point; pctx->state = YY_CURRENT_BUFFER; pctx->input = yyin; grecs_list_push(input_stack, pctx); } return 0; } static int _pop_context() { struct bind_input_context *pctx; if (!yyin) return 1; if (grecs_preprocessor) pclose(yyin); else fclose(yyin); pctx = grecs_list_pop(input_stack); if (!pctx) { yyin = NULL; return 1; } i_node = pctx->i_node; i_dev = pctx->i_dev; grecs_current_locus_point = pctx->point; yyin = pctx->input; yy_delete_buffer(YY_CURRENT_BUFFER); yy_switch_to_buffer(pctx->state); grecs_free(pctx); return 0; } int yywrap() { return _pop_context(); } int grecs_bind_new_source(const char *name, grecs_locus_t *loc) { struct stat st; FILE *fp; if (access(name, F_OK)) { int ec = errno; char *tmp = grecs_find_include_file(name, 0); if (!tmp) { grecs_error(loc, ec, _("cannot open `%s'"), name); return 1; } name = grecs_install_text(tmp); free(tmp); } fp = fopen(name, "r"); if (!fp) { grecs_error(loc, errno, _("cannot open `%s'"), name); return 1; } if (fstat(fileno(fp), &st)) { grecs_error(loc, errno, _("can't state %s"), name); fclose(fp); return 1; } if (grecs_preprocessor) { char *cmd = NULL; size_t size = 0; fclose(fp); if (grecs_asprintf(&cmd, &size, "%s \"%s\"", grecs_preprocessor, name)) grecs_alloc_die(); fp = popen(cmd, "r"); if (!fp) { grecs_error(loc, errno, _("cannot open `%s'"), cmd); grecs_free(cmd); return 1; } grecs_free(cmd); } if (_push_context(name, st.st_ino, st.st_dev, loc)) { return 1; } i_node = st.st_ino; i_dev = st.st_dev; yyin = fp; yy_switch_to_buffer(yy_create_buffer(yyin, YY_BUF_SIZE)); grecs_current_locus_point.file = grecs_install_text(name); grecs_current_locus_point.line = 1; grecs_current_locus_point.col = 0; return 0; } void grecs_bind_close_sources() { while (!_pop_context()) ; grecs_list_free(input_stack); input_stack = NULL; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/src/Make-static.am���������������������������������������������������������������0000644�0001750�0001750�00000001512�13511403723�017537� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of grecs - Gray's Extensible Configuration System # Copyright (C) 2007-2019 Sergey Poznyakoff # # Grecs 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. # # Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. include Make.am noinst_LIBRARIES=libgrecs.a libgrecs_a_SOURCES = $(GRECS_SRC) nodist_libgrecs_a_SOURCES = $(NODIST_GRECS_SRC) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/src/jsonfmt.c��������������������������������������������������������������������0000644�0001750�0001750�00000011030�13244106325�016677� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* grecs - Gray's Extensible Configuration System Copyright (C) 2007-2016 Sergey Poznyakoff Grecs 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. Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include <string.h> #include <stdlib.h> #include "grecs.h" #include "grecs/json.h" static void json_writez(struct json_format *fmt, char const *str) { size_t len = strlen(str); fmt->write(fmt->data, str, len); } static void json_writec(struct json_format *fmt, char c) { fmt->write(fmt->data, &c, 1); } static void json_indent(struct json_format *fmt, size_t level) { level *= fmt->indent; while (level--) json_writec(fmt, ' '); } static void json_format_delim(struct json_format *fmt, size_t level) { json_writec(fmt, ','); if (fmt->indent) { json_writec(fmt, '\n'); json_indent(fmt, level); } else json_writec(fmt, ' '); } static int escape(char c, char *o) { static char transtab[] = "\\\\\"\"b\bf\fn\nr\rt\t"; char *p; for (p = transtab; *p; p += 2) { if (p[1] == c) { *o = p[0]; return 0; } } return -1; } static void json_format_string(struct json_format *fmt, const char *s) { json_writec(fmt, '"'); for (; *s; s++) { char c; if (!escape(*s, &c)) { json_writec(fmt, '\\'); json_writec(fmt, c); } else json_writec(fmt, *s); } json_writec(fmt, '"'); } static void json_format_number(struct json_format *fmt, double n) { char *buffer = NULL; size_t size = 0; if (fmt->precision == -1) grecs_asprintf(&buffer, &size, "%e", n); else grecs_asprintf(&buffer, &size, "%.*f", fmt->precision, n); json_writez(fmt, buffer); free(buffer); } static int collect_keypairs(void *sym, void *data) { struct json_pair *p = sym; struct json_pair ***kp = data; **kp = p; ++*kp; return 0; } static void json_formatter(struct json_format *fmt, struct json_value *obj, size_t level); static int keypair_cmp_name(const void *a, const void *b) { struct json_pair const * const *kpa = a; struct json_pair const * const *kpb = b; return strcmp((*kpa)->k, (*kpb)->k); } static void json_format_obj(struct json_format *fmt, struct json_value *obj, size_t level) { size_t count, i; struct json_pair **keypairs, **kp; count = grecs_symtab_count(obj->v.o); keypairs = grecs_calloc(count, sizeof(*keypairs)); kp = keypairs; grecs_symtab_foreach(obj->v.o, collect_keypairs, &kp); qsort(keypairs, count, sizeof(*keypairs), keypair_cmp_name); json_writec(fmt, '{'); if (count) { if (fmt->indent) json_writec(fmt, '\n'); for (i = 0; i < count; i++) { (i ? json_format_delim : json_indent)(fmt, level); json_format_string(fmt, keypairs[i]->k); json_writec(fmt, ':'); if (fmt->indent) json_writec(fmt, ' '); json_formatter(fmt, keypairs[i]->v, level); } if (fmt->indent) { json_writec(fmt, '\n'); json_indent(fmt, level-1); } } json_writec(fmt, '}'); grecs_free(keypairs); } static void json_format_array(struct json_format *fmt, struct json_value *obj, size_t level) { size_t i; json_array_flatten(obj); json_writec(fmt, '['); if (obj->v.a->oc) { if (fmt->indent) json_writec(fmt, '\n'); for (i = 0; i < obj->v.a->oc; i++) { (i ? json_format_delim : json_indent)(fmt, level); json_formatter(fmt, obj->v.a->ov[i], level); } if (fmt->indent) { json_writec(fmt, '\n'); json_indent(fmt, level-1); } } json_writec(fmt, ']'); } static void json_formatter(struct json_format *fmt, struct json_value *obj, size_t level) { if (!obj) { json_writez(fmt, "null"); return; } ++level; switch (obj->type) { case json_null: json_writez(fmt, "null"); break; case json_bool: json_writez(fmt, obj->v.b ? "true" : "false"); break; case json_number: json_format_number(fmt, obj->v.n); break; case json_string: json_format_string(fmt, obj->v.s); break; case json_arr: json_format_array(fmt, obj, level); break; case json_object: json_format_obj(fmt, obj, level); break; } } void json_format_value(struct json_value *obj, struct json_format *fmt) { json_formatter(fmt, obj, 0); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/src/path-parser.c����������������������������������������������������������������0000644�0001750�0001750�00000010242�13244106110�017441� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Path-style configuration file parser for Grecs. Copyright (C) 2011-2016 Sergey Poznyakoff Grecs 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. Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include <stdlib.h> #include <string.h> #include <ctype.h> #include <errno.h> #include <grecs.h> static int next_char(FILE *infile) { int c = fgetc(infile); if (c == '\n') grecs_locus_point_advance_line(grecs_current_locus_point); else { grecs_current_locus_point.col++; if (c == '\\') { int nc = fgetc(infile); if (nc == '\n') { grecs_locus_point_advance_line(grecs_current_locus_point); c = fgetc(infile); grecs_current_locus_point.col++; } else ungetc(nc, infile); } } return c; } struct grecs_node * grecs_path_parser(const char *name, int traceflags) { struct grecs_node *root, *subtree = NULL, *node; FILE *infile; struct grecs_txtacc *acc = NULL; char *kw, *val; grecs_locus_t kwloc, valloc, rootloc; int inquote; int lookahead; int err = 0; unsigned prev_col; infile = fopen(name, "r"); if (!infile) { grecs_error(NULL, errno, _("cannot open `%s'"), name); return NULL; } grecs_current_locus_point.file = grecs_install_text(name); grecs_current_locus_point.line = 1; grecs_current_locus_point.col = 0; rootloc.beg = grecs_current_locus_point; rootloc.beg.col++; acc = grecs_txtacc_create(); while ((lookahead = next_char(infile)) > 0) { while (1) { while (lookahead == ' ' || lookahead == '\t') lookahead = next_char(infile); if (lookahead == '#') { while ((lookahead = next_char(infile)) && lookahead != '\n') ; continue; } break; } if (lookahead <= 0) break; kwloc.beg = grecs_current_locus_point; inquote = 0; for (; lookahead > 0 && lookahead != ':'; lookahead = next_char(infile)) { if (inquote) { if (inquote == '"' && lookahead == '\\') { lookahead = next_char(infile); if (lookahead <= 0) break; } else if (lookahead == inquote) inquote = 0; } else if (lookahead == '\'' || lookahead == '"') inquote = lookahead; grecs_txtacc_grow_char(acc, lookahead); } if (lookahead <= 0) { grecs_error(&kwloc, 0, _("unexpected end of file")); err = 1; break; } grecs_txtacc_grow_char(acc, 0); kw = grecs_txtacc_finish(acc, 0); kwloc.end = grecs_current_locus_point; kwloc.end.col--; while ((lookahead = next_char(infile)) > 0 && (lookahead == ' ' || lookahead == '\t')); if (lookahead <= 0) { grecs_error(&kwloc, 0, _("unexpected end of file")); err = 1; break; } valloc.beg = grecs_current_locus_point; do { grecs_txtacc_grow_char(acc, lookahead); prev_col = grecs_current_locus_point.col; } while ((lookahead = next_char(infile)) > 0 && lookahead != '\n'); valloc.end = grecs_current_locus_point; valloc.end.line--; valloc.end.col = prev_col; grecs_txtacc_grow_char(acc, 0); val = grecs_txtacc_finish(acc, 0); node = grecs_node_from_path_locus(kw, val, &kwloc, &valloc); if (!node) { grecs_error(&kwloc, 0, _("parse error")); err = 1; break; } node->locus.end = valloc.end; node->idloc = kwloc; if (!subtree) subtree = node; else grecs_node_bind(subtree, node, 0); grecs_txtacc_free_string(acc, kw); grecs_txtacc_free_string(acc, val); } fclose(infile); grecs_txtacc_free(acc); if (err) { grecs_tree_free(subtree); root = NULL; } else { rootloc.end = grecs_current_locus_point; root = grecs_node_create(grecs_node_root, &rootloc); root->v.texttab = grecs_text_table(); grecs_node_bind(root, subtree, 1); grecs_tree_reduce(root, NULL, 0); } return root; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/src/json-gram.y������������������������������������������������������������������0000644�0001750�0001750�00000022546�13511403723�017157� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������%{ /* This file is part of Grecs. Copyright (C) 2012-2016 Sergey Poznyakoff. Grecs 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. Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include "grecs.h" #include <string.h> #include <errno.h> #include <stdlib.h> #include "json-gram.h" #include "grecs/json.h" struct json_value *json_return_obj; extern int yylex(void); static int yyerror(char const *s); static void pairfree(void *ptr) { struct json_pair *p = ptr; grecs_free(p->k); json_value_free(p->v); free(p); } static void objfree(void *ptr) { struct json_value *o = ptr; json_value_free(o); } %} %error-verbose %locations %token <n> T_NUMBER %token <s> T_STRING %token <b> T_BOOL %token T_NULL T_ERR %type <list> objects objlist pairs pairlist %type <p> pair %type <obj> object array %type <o> assoc %union { int b; double n; char *s; struct grecs_symtab *o; struct json_value *obj; struct grecs_list *list; struct json_pair *p; } %% input : object { json_return_obj = $1; } ; object : T_NUMBER { $$ = json_value_create(json_number); $$->v.n = $1; } | T_STRING { $$ = json_value_create(json_string); $$->v.s = $1; } | T_BOOL { $$ = json_value_create(json_bool); $$->v.b = $1; } | T_NULL { $$ = json_value_create(json_null); } | array | assoc { $$ = json_value_create(json_object); $$->v.o = $1; } ; array : '[' objects ']' { $$ = json_new_array(); $$->v.a->ol = $2; } ; objects : /* empty */ { $$ = NULL; } | objlist ; objlist : object { $$ = grecs_list_create(); grecs_list_append($$, $1); } | objlist ',' object { grecs_list_append($1, $3); } ; assoc : '{' pairs '}' { struct grecs_symtab *s; s = json_assoc_create(); if ($2) { struct grecs_list_entry *ep; for (ep = $2->head; ep; ep = ep->next) { struct json_pair *p = ep->data; int install = 1; grecs_symtab_lookup_or_install(s, p, &install); if (install) { p->k = NULL; p->v = NULL; } } grecs_list_free($2); } $$ = s; } ; pairs : /* empty */ { $$ = NULL; } | pairlist ; pairlist: pair { $$ = grecs_list_create(); $$->free_entry = pairfree; grecs_list_append($$, $1); } | pairlist ',' pair { grecs_list_append($1, $3); } ; pair : T_STRING ':' object { struct json_pair *p = grecs_malloc(sizeof(*p)); p->k = $1; p->v = $3; $$ = p; } ; %% static int yyerror(char const *s) { jsonlex_diag(s); return 0; } struct json_value * json_value_create(int type) { struct json_value *obj = grecs_zalloc(sizeof(*obj)); obj->type = type; return obj; } void json_value_free(struct json_value *obj) { size_t i; if (!obj) return; switch (obj->type) { case json_null: case json_bool: case json_number: break; case json_string: grecs_free(obj->v.s); break; case json_arr: for (i = 0; i < obj->v.a->oc; i++) json_value_free(obj->v.a->ov[i]); grecs_free (obj->v.a->ov); if (obj->v.a->ol) { obj->v.a->ol->free_entry = objfree; grecs_list_free(obj->v.a->ol); } grecs_free(obj->v.a); break; case json_object: grecs_symtab_free(obj->v.o); } free(obj); } static unsigned json_st_hash(void *data, unsigned long n_buckets) { struct json_pair *p = data; return grecs_hash_string(p->k, n_buckets); } static int json_st_cmp(const void *a, const void *b) { struct json_pair const *pa = a; struct json_pair const *pb = b; return strcmp(pa->k, pb->k); } static int json_st_copy(void *a, void *b) { struct json_pair *pa = a; struct json_pair *pb = b; memcpy(pa, pb, sizeof(*pa)); return 0; } static void json_st_free(void *ptr) { struct json_pair *p = ptr; free(p->k); json_value_free(p->v); free(p); } struct grecs_symtab * json_assoc_create() { return grecs_symtab_create(sizeof(struct json_pair), json_st_hash, json_st_cmp, json_st_copy, NULL, json_st_free); } struct json_value * json_parse_string(char const *input, size_t len) { jsonlex_setup(input, len); if (yyparse()) { /* FIXME: error recovery */ return NULL; } jsonlex_cleanup(); return json_return_obj; } struct json_value * json_value_lookup(struct json_value *obj, const char *ident) { char *qbuf = NULL; size_t qlen = 0; while (obj && *ident) { char const *p; char *q; size_t l; for (p = ident; *p; p++) { if (*p == '\\') ++p; else if (*p == '.') break; } l = p - ident + 1; if (l > qlen) { qlen = l; qbuf = grecs_realloc(qbuf, qlen); } q = qbuf; while (*ident) { if (*ident == '\\') { char c; ++ident; if (json_unescape(*ident, &c)) *q++ = *ident++; else *q++ = c; } else if (*ident == '.') { ++ident; break; } else *q++ = *ident++; } *q = 0; switch (obj->type) { case json_null: case json_bool: case json_number: case json_string: obj = NULL; break; case json_arr: l = strtoul(qbuf, &q, 10); if (*q != 0 || json_array_get(obj, l, &obj)) obj = NULL; break; case json_object: if (json_object_get(obj, qbuf, &obj)) obj = NULL; } } if (*ident) obj = NULL; free(qbuf); return obj; } struct json_value * json_new_string(char const *str) { struct json_value *j = json_value_create(json_string); j->v.s = grecs_strdup(str); return j; } struct json_value * json_new_number(double n) { struct json_value *j = json_value_create(json_number); j->v.n = n; return j; } struct json_value * json_new_bool(int b) { struct json_value *j = json_value_create(json_bool); j->v.b = b; return j; } struct json_value * json_new_null(void) { return json_value_create(json_null); } struct json_value * json_new_object(void) { struct json_value *j = json_value_create(json_object); j->v.o = json_assoc_create(); return j; } int json_object_set(struct json_value *obj, char const *name, struct json_value *val) { struct json_pair pair, *ret; int install; if (obj->type != json_object) { errno = EINVAL; return -1; } pair.k = (char*) name; pair.v = NULL; ret = grecs_symtab_lookup_or_install(obj->v.o, &pair, &install); if (install) ret->k = grecs_strdup(ret->k); ret->v = val; return 0; } int json_object_get(struct json_value *obj, char const *name, struct json_value **retval) { struct json_pair pair, *ret; if (obj->type != json_object) { errno = EINVAL; return -1; } pair.k = (char*) name; pair.v = NULL; ret = grecs_symtab_lookup_or_install(obj->v.o, &pair, NULL); if (ret) { *retval = ret->v; return 0; } return 1; } struct json_value * json_new_array(void) { struct json_value *j = json_value_create(json_arr); j->v.a = grecs_malloc(sizeof(*j->v.a)); j->v.a->oc = 0; j->v.a->ov = NULL; j->v.a->ol = NULL; return j; } size_t json_array_size(struct json_value *j) { if (j->type != json_arr) { errno = EINVAL; return 0; } return j->v.a->oc + grecs_list_size(j->v.a->ol); } void json_array_flatten(struct json_value *j) { size_t size, i; struct grecs_list_entry *ep; size = grecs_list_size(j->v.a->ol); if (size == 0) return; j->v.a->ov = grecs_realloc(j->v.a->ov, (j->v.a->oc + size) * sizeof(j->v.a->ov[0])); for (ep = j->v.a->ol->head, i = j->v.a->oc; ep; ep = ep->next, i++) j->v.a->ov[i] = ep->data; j->v.a->oc = i; grecs_list_clear(j->v.a->ol); } int json_array_insert(struct json_value *j, size_t idx, struct json_value *v) { size_t size; if (j->type != json_arr) { errno = EINVAL; return -1; } size = json_array_size(j); if (idx < size) { json_array_flatten(j); j->v.a->ov[idx] = v; } else { size_t i; for (i = size; i < idx; i++) json_array_append(j, NULL); json_array_append(j, v); } return 0; } int json_array_append(struct json_value *j, struct json_value *v) { if (j->type != json_arr) { errno = EINVAL; return -1; } if (!j->v.a->ol) j->v.a->ol = grecs_list_create(); grecs_list_append(j->v.a->ol, v); return 0; } int json_array_set(struct json_value *j, size_t idx, struct json_value *v) { if (j->type != json_arr) { errno = EINVAL; return -1; } if (idx >= json_array_size(j)) { errno = ENOENT; return -1; } json_array_flatten(j); j->v.a->ov[idx] = v; return 0; } int json_array_get(struct json_value *j, size_t idx, struct json_value **retval) { if (j->type != json_arr) { errno = EINVAL; return -1; } if (idx >= json_array_size(j)) { errno = ENOENT; return -1; } json_array_flatten(j); *retval = j->v.a->ov[idx]; return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/src/dhcpd-lex.c������������������������������������������������������������������0000644�0001750�0001750�00000221711�13244106172�017100� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#line 4 "dhcpd-lex.l" #ifdef HAVE_CONFIG_H # include <config.h> #endif #line 9 "dhcpd-lex.c" #define YY_INT_ALIGNED short int /* A lexical scanner generated by flex */ /* %not-for-header */ /* %if-c-only */ /* %if-not-reentrant */ /* %endif */ /* %endif */ /* %ok-for-header */ #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 5 #define YY_FLEX_SUBMINOR_VERSION 37 #if YY_FLEX_SUBMINOR_VERSION > 0 #define FLEX_BETA #endif /* %if-c++-only */ /* %endif */ /* %if-c-only */ /* %endif */ /* %if-c-only */ /* %endif */ /* First, we deal with platform-specific or compiler-specific issues. */ /* begin standard C headers. */ /* %if-c-only */ #include <stdio.h> #include <string.h> #include <errno.h> #include <stdlib.h> /* %endif */ /* %if-tables-serialization */ /* %endif */ /* end standard C headers. */ /* %if-c-or-c++ */ /* flex integer type definitions */ #ifndef FLEXINT_H #define FLEXINT_H /* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */ #if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, * if you want the limit (max/min) macros for int types. */ #ifndef __STDC_LIMIT_MACROS #define __STDC_LIMIT_MACROS 1 #endif #include <inttypes.h> typedef int8_t flex_int8_t; typedef uint8_t flex_uint8_t; typedef int16_t flex_int16_t; typedef uint16_t flex_uint16_t; typedef int32_t flex_int32_t; typedef uint32_t flex_uint32_t; #else typedef signed char flex_int8_t; typedef short int flex_int16_t; typedef int flex_int32_t; typedef unsigned char flex_uint8_t; typedef unsigned short int flex_uint16_t; typedef unsigned int flex_uint32_t; /* Limits of integral types. */ #ifndef INT8_MIN #define INT8_MIN (-128) #endif #ifndef INT16_MIN #define INT16_MIN (-32767-1) #endif #ifndef INT32_MIN #define INT32_MIN (-2147483647-1) #endif #ifndef INT8_MAX #define INT8_MAX (127) #endif #ifndef INT16_MAX #define INT16_MAX (32767) #endif #ifndef INT32_MAX #define INT32_MAX (2147483647) #endif #ifndef UINT8_MAX #define UINT8_MAX (255U) #endif #ifndef UINT16_MAX #define UINT16_MAX (65535U) #endif #ifndef UINT32_MAX #define UINT32_MAX (4294967295U) #endif #endif /* ! C99 */ #endif /* ! FLEXINT_H */ /* %endif */ /* %if-c++-only */ /* %endif */ #ifdef __cplusplus /* The "const" storage-class-modifier is valid. */ #define YY_USE_CONST #else /* ! __cplusplus */ /* C99 requires __STDC__ to be defined as 1. */ #if defined (__STDC__) #define YY_USE_CONST #endif /* defined (__STDC__) */ #endif /* ! __cplusplus */ #ifdef YY_USE_CONST #define grecs_dhcpdconst const #else #define grecs_dhcpdconst #endif /* %not-for-header */ /* Returned upon end-of-file. */ #define YY_NULL 0 /* %ok-for-header */ /* %not-for-header */ /* Promotes a possibly negative, possibly signed char to an unsigned * integer for use as an array index. If the signed char is negative, * we want to instead treat it as an 8-bit unsigned char, hence the * double cast. */ #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) /* %ok-for-header */ /* %if-reentrant */ /* %endif */ /* %if-not-reentrant */ /* %endif */ /* Enter a start condition. This macro really ought to take a parameter, * but we do it the disgusting crufty way forced on us by the ()-less * definition of BEGIN. */ #define BEGIN (grecs_dhcpd_start) = 1 + 2 * /* Translate the current start state into a value that can be later handed * to BEGIN to return to the state. The YYSTATE alias is for lex * compatibility. */ #define YY_START (((grecs_dhcpd_start) - 1) / 2) #define YYSTATE YY_START /* Action number for EOF rule of a given start state. */ #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) /* Special action meaning "start processing a new file". */ #define YY_NEW_FILE grecs_dhcpdrestart(grecs_dhcpdin ) #define YY_END_OF_BUFFER_CHAR 0 /* Size of default input buffer. */ #ifndef YY_BUF_SIZE #define YY_BUF_SIZE 16384 #endif /* The state buf must be large enough to hold one state per character in the main buffer. */ #define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(grecs_dhcpd_state_type)) #ifndef YY_TYPEDEF_YY_BUFFER_STATE #define YY_TYPEDEF_YY_BUFFER_STATE typedef struct grecs_dhcpd_buffer_state *YY_BUFFER_STATE; #endif #ifndef YY_TYPEDEF_YY_SIZE_T #define YY_TYPEDEF_YY_SIZE_T typedef size_t grecs_dhcpd_size_t; #endif /* %if-not-reentrant */ extern grecs_dhcpd_size_t grecs_dhcpdleng; /* %endif */ /* %if-c-only */ /* %if-not-reentrant */ extern FILE *grecs_dhcpdin, *grecs_dhcpdout; /* %endif */ /* %endif */ #define EOB_ACT_CONTINUE_SCAN 0 #define EOB_ACT_END_OF_FILE 1 #define EOB_ACT_LAST_MATCH 2 #define YY_LESS_LINENO(n) /* Return all but the first "n" matched characters back to the input stream. */ #define grecs_dhcpdless(n) \ do \ { \ /* Undo effects of setting up grecs_dhcpdtext. */ \ int grecs_dhcpdless_macro_arg = (n); \ YY_LESS_LINENO(grecs_dhcpdless_macro_arg);\ *grecs_dhcpd_cp = (grecs_dhcpd_hold_char); \ YY_RESTORE_YY_MORE_OFFSET \ (grecs_dhcpd_c_buf_p) = grecs_dhcpd_cp = grecs_dhcpd_bp + grecs_dhcpdless_macro_arg - YY_MORE_ADJ; \ YY_DO_BEFORE_ACTION; /* set up grecs_dhcpdtext again */ \ } \ while ( 0 ) #define unput(c) grecs_dhcpdunput( c, (grecs_dhcpdtext_ptr) ) #ifndef YY_STRUCT_YY_BUFFER_STATE #define YY_STRUCT_YY_BUFFER_STATE struct grecs_dhcpd_buffer_state { /* %if-c-only */ FILE *grecs_dhcpd_input_file; /* %endif */ /* %if-c++-only */ /* %endif */ char *grecs_dhcpd_ch_buf; /* input buffer */ char *grecs_dhcpd_buf_pos; /* current position in input buffer */ /* Size of input buffer in bytes, not including room for EOB * characters. */ grecs_dhcpd_size_t grecs_dhcpd_buf_size; /* Number of characters read into grecs_dhcpd_ch_buf, not including EOB * characters. */ grecs_dhcpd_size_t grecs_dhcpd_n_chars; /* Whether we "own" the buffer - i.e., we know we created it, * and can realloc() it to grow it, and should free() it to * delete it. */ int grecs_dhcpd_is_our_buffer; /* Whether this is an "interactive" input source; if so, and * if we're using stdio for input, then we want to use getc() * instead of fread(), to make sure we stop fetching input after * each newline. */ int grecs_dhcpd_is_interactive; /* Whether we're considered to be at the beginning of a line. * If so, '^' rules will be active on the next match, otherwise * not. */ int grecs_dhcpd_at_bol; int grecs_dhcpd_bs_lineno; /**< The line count. */ int grecs_dhcpd_bs_column; /**< The column count. */ /* Whether to try to fill the input buffer when we reach the * end of it. */ int grecs_dhcpd_fill_buffer; int grecs_dhcpd_buffer_status; #define YY_BUFFER_NEW 0 #define YY_BUFFER_NORMAL 1 /* When an EOF's been seen but there's still some text to process * then we mark the buffer as YY_EOF_PENDING, to indicate that we * shouldn't try reading from the input source any more. We might * still have a bunch of tokens to match, though, because of * possible backing-up. * * When we actually see the EOF, we change the status to "new" * (via grecs_dhcpdrestart()), so that the user can continue scanning by * just pointing grecs_dhcpdin at a new input file. */ #define YY_BUFFER_EOF_PENDING 2 }; #endif /* !YY_STRUCT_YY_BUFFER_STATE */ /* %if-c-only Standard (non-C++) definition */ /* %not-for-header */ /* %if-not-reentrant */ /* Stack of input buffers. */ static size_t grecs_dhcpd_buffer_stack_top = 0; /**< index of top of stack. */ static size_t grecs_dhcpd_buffer_stack_max = 0; /**< capacity of stack. */ static YY_BUFFER_STATE * grecs_dhcpd_buffer_stack = 0; /**< Stack as an array. */ /* %endif */ /* %ok-for-header */ /* %endif */ /* We provide macros for accessing buffer states in case in the * future we want to put the buffer states in a more general * "scanner state". * * Returns the top of the stack, or NULL. */ #define YY_CURRENT_BUFFER ( (grecs_dhcpd_buffer_stack) \ ? (grecs_dhcpd_buffer_stack)[(grecs_dhcpd_buffer_stack_top)] \ : NULL) /* Same as previous macro, but useful when we know that the buffer stack is not * NULL or when we need an lvalue. For internal use only. */ #define YY_CURRENT_BUFFER_LVALUE (grecs_dhcpd_buffer_stack)[(grecs_dhcpd_buffer_stack_top)] /* %if-c-only Standard (non-C++) definition */ /* %if-not-reentrant */ /* %not-for-header */ /* grecs_dhcpd_hold_char holds the character lost when grecs_dhcpdtext is formed. */ static char grecs_dhcpd_hold_char; static grecs_dhcpd_size_t grecs_dhcpd_n_chars; /* number of characters read into grecs_dhcpd_ch_buf */ grecs_dhcpd_size_t grecs_dhcpdleng; /* Points to current character in buffer. */ static char *grecs_dhcpd_c_buf_p = (char *) 0; static int grecs_dhcpd_init = 0; /* whether we need to initialize */ static int grecs_dhcpd_start = 0; /* start state number */ /* Flag which is used to allow grecs_dhcpdwrap()'s to do buffer switches * instead of setting up a fresh grecs_dhcpdin. A bit of a hack ... */ static int grecs_dhcpd_did_buffer_switch_on_eof; /* %ok-for-header */ /* %endif */ void grecs_dhcpdrestart (FILE *input_file ); void grecs_dhcpd_switch_to_buffer (YY_BUFFER_STATE new_buffer ); YY_BUFFER_STATE grecs_dhcpd_create_buffer (FILE *file,int size ); void grecs_dhcpd_delete_buffer (YY_BUFFER_STATE b ); void grecs_dhcpd_flush_buffer (YY_BUFFER_STATE b ); void grecs_dhcpdpush_buffer_state (YY_BUFFER_STATE new_buffer ); void grecs_dhcpdpop_buffer_state (void ); static void grecs_dhcpdensure_buffer_stack (void ); static void grecs_dhcpd_load_buffer_state (void ); static void grecs_dhcpd_init_buffer (YY_BUFFER_STATE b,FILE *file ); #define YY_FLUSH_BUFFER grecs_dhcpd_flush_buffer(YY_CURRENT_BUFFER ) YY_BUFFER_STATE grecs_dhcpd_scan_buffer (char *base,grecs_dhcpd_size_t size ); YY_BUFFER_STATE grecs_dhcpd_scan_string (grecs_dhcpdconst char *grecs_dhcpd_str ); YY_BUFFER_STATE grecs_dhcpd_scan_bytes (grecs_dhcpdconst char *bytes,grecs_dhcpd_size_t len ); /* %endif */ void *grecs_dhcpdalloc (grecs_dhcpd_size_t ); void *grecs_dhcpdrealloc (void *,grecs_dhcpd_size_t ); void grecs_dhcpdfree (void * ); #define grecs_dhcpd_new_buffer grecs_dhcpd_create_buffer #define grecs_dhcpd_set_interactive(is_interactive) \ { \ if ( ! YY_CURRENT_BUFFER ){ \ grecs_dhcpdensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ grecs_dhcpd_create_buffer(grecs_dhcpdin,YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->grecs_dhcpd_is_interactive = is_interactive; \ } #define grecs_dhcpd_set_bol(at_bol) \ { \ if ( ! YY_CURRENT_BUFFER ){\ grecs_dhcpdensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ grecs_dhcpd_create_buffer(grecs_dhcpdin,YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->grecs_dhcpd_at_bol = at_bol; \ } #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->grecs_dhcpd_at_bol) /* %% [1.0] grecs_dhcpdtext/grecs_dhcpdin/grecs_dhcpdout/grecs_dhcpd_state_type/grecs_dhcpdlineno etc. def's & init go here */ /* Begin user sect3 */ #define FLEX_DEBUG typedef unsigned char YY_CHAR; FILE *grecs_dhcpdin = (FILE *) 0, *grecs_dhcpdout = (FILE *) 0; typedef int grecs_dhcpd_state_type; extern int grecs_dhcpdlineno; int grecs_dhcpdlineno = 1; extern char *grecs_dhcpdtext; #define grecs_dhcpdtext_ptr grecs_dhcpdtext /* %if-c-only Standard (non-C++) definition */ static grecs_dhcpd_state_type grecs_dhcpd_get_previous_state (void ); static grecs_dhcpd_state_type grecs_dhcpd_try_NUL_trans (grecs_dhcpd_state_type current_state ); static int grecs_dhcpd_get_next_buffer (void ); static void grecs_dhcpd_fatal_error (grecs_dhcpdconst char msg[] ); /* %endif */ /* Done after the current pattern has been matched and before the * corresponding action - sets up grecs_dhcpdtext. */ #define YY_DO_BEFORE_ACTION \ (grecs_dhcpdtext_ptr) = grecs_dhcpd_bp; \ /* %% [2.0] code to fiddle grecs_dhcpdtext and grecs_dhcpdleng for grecs_dhcpdmore() goes here \ */\ grecs_dhcpdleng = (size_t) (grecs_dhcpd_cp - grecs_dhcpd_bp); \ (grecs_dhcpd_hold_char) = *grecs_dhcpd_cp; \ *grecs_dhcpd_cp = '\0'; \ /* %% [3.0] code to copy grecs_dhcpdtext_ptr to grecs_dhcpdtext[] goes here, if %array \ */\ (grecs_dhcpd_c_buf_p) = grecs_dhcpd_cp; /* %% [4.0] data tables for the DFA and the user's section 1 definitions go here */ #define YY_NUM_RULES 29 #define YY_END_OF_BUFFER 30 /* This struct is not used in this scanner, but its presence is necessary. */ struct grecs_dhcpd_trans_info { flex_int32_t grecs_dhcpd_verify; flex_int32_t grecs_dhcpd_nxt; }; static grecs_dhcpdconst flex_int16_t grecs_dhcpd_accept[111] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 28, 25, 26, 27, 28, 4, 15, 15, 14, 14, 14, 25, 4, 29, 29, 22, 24, 29, 29, 10, 11, 29, 12, 13, 25, 0, 19, 16, 0, 4, 3, 15, 6, 14, 14, 7, 25, 0, 4, 4, 4, 0, 22, 24, 0, 0, 23, 0, 20, 0, 10, 11, 0, 12, 13, 17, 18, 15, 6, 5, 6, 14, 14, 0, 0, 0, 4, 4, 4, 21, 9, 14, 0, 0, 0, 4, 4, 8, 0, 0, 4, 4, 4, 0, 0, 0, 4, 1, 4, 4, 0, 1, 0, 0, 4, 2, 0, 2, 0 } ; static grecs_dhcpdconst flex_int32_t grecs_dhcpd_ec[256] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 5, 6, 7, 1, 1, 1, 1, 5, 5, 8, 1, 5, 9, 10, 11, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 10, 14, 1, 5, 1, 1, 10, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 1, 16, 1, 1, 15, 1, 15, 15, 15, 15, 17, 18, 15, 15, 19, 15, 15, 20, 15, 21, 15, 15, 15, 15, 22, 15, 15, 15, 15, 15, 15, 15, 23, 1, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; static grecs_dhcpdconst flex_int32_t grecs_dhcpd_meta[24] = { 0, 1, 1, 2, 1, 1, 3, 1, 4, 5, 5, 5, 5, 5, 1, 5, 1, 5, 5, 5, 5, 5, 5, 1 } ; static grecs_dhcpdconst flex_int16_t grecs_dhcpd_base[134] = { 0, 0, 22, 0, 0, 22, 24, 23, 28, 29, 30, 291, 292, 32, 292, 292, 36, 287, 0, 278, 37, 39, 17, 51, 58, 292, 51, 292, 53, 0, 42, 292, 292, 59, 292, 292, 62, 69, 292, 292, 285, 284, 292, 0, 85, 66, 101, 264, 77, 108, 127, 146, 112, 110, 292, 292, 0, 67, 292, 282, 292, 111, 292, 292, 119, 292, 292, 292, 292, 0, 281, 292, 0, 238, 119, 122, 141, 207, 149, 158, 116, 292, 200, 128, 160, 155, 144, 114, 65, 142, 157, 139, 166, 170, 142, 133, 171, 130, 172, 292, 176, 124, 177, 292, 178, 122, 115, 292, 77, 292, 292, 184, 189, 194, 199, 204, 209, 58, 36, 214, 219, 224, 229, 234, 239, 241, 243, 248, 253, 258, 263, 268, 273, 278 } ; static grecs_dhcpdconst flex_int16_t grecs_dhcpd_def[134] = { 0, 110, 1, 111, 111, 112, 112, 113, 113, 114, 114, 110, 110, 110, 110, 110, 115, 116, 117, 117, 118, 118, 21, 110, 116, 110, 119, 110, 120, 121, 122, 110, 110, 123, 110, 110, 110, 115, 110, 110, 124, 116, 110, 125, 110, 126, 126, 46, 110, 110, 116, 116, 116, 119, 110, 110, 121, 120, 110, 110, 110, 122, 110, 110, 123, 110, 110, 110, 110, 125, 127, 110, 44, 46, 46, 110, 110, 110, 116, 116, 116, 110, 46, 46, 110, 110, 110, 128, 116, 46, 129, 110, 128, 130, 116, 129, 131, 110, 130, 110, 130, 132, 131, 110, 131, 133, 132, 110, 133, 110, 0, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110 } ; static grecs_dhcpdconst flex_int16_t grecs_dhcpd_nxt[316] = { 0, 12, 13, 14, 13, 15, 16, 17, 18, 18, 18, 19, 18, 18, 15, 20, 12, 21, 20, 22, 20, 20, 20, 15, 23, 27, 31, 27, 28, 24, 28, 31, 34, 34, 36, 47, 36, 45, 29, 38, 29, 45, 39, 35, 35, 62, 32, 43, 43, 43, 43, 32, 40, 48, 54, 36, 58, 55, 49, 46, 50, 42, 65, 43, 36, 63, 36, 56, 42, 59, 58, 51, 38, 66, 69, 39, 69, 69, 52, 48, 109, 36, 94, 59, 49, 40, 70, 70, 71, 70, 70, 70, 70, 72, 72, 72, 72, 72, 72, 70, 72, 70, 72, 72, 72, 72, 72, 72, 70, 69, 75, 69, 69, 54, 62, 42, 55, 42, 107, 42, 93, 76, 65, 74, 75, 109, 56, 107, 77, 50, 42, 80, 105, 66, 63, 76, 82, 88, 83, 96, 51, 73, 77, 84, 101, 42, 89, 52, 78, 42, 73, 78, 42, 85, 85, 87, 97, 84, 79, 79, 78, 42, 84, 96, 73, 91, 90, 85, 85, 42, 79, 79, 93, 99, 103, 99, 100, 104, 100, 99, 103, 103, 100, 104, 104, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 30, 30, 30, 30, 30, 33, 33, 33, 33, 33, 37, 37, 37, 37, 37, 41, 41, 41, 41, 41, 53, 53, 53, 53, 53, 57, 57, 73, 57, 57, 60, 86, 60, 60, 60, 61, 61, 61, 61, 61, 64, 64, 64, 64, 64, 67, 67, 67, 67, 67, 69, 69, 73, 73, 70, 70, 70, 70, 70, 92, 92, 92, 92, 92, 95, 73, 95, 95, 95, 98, 98, 98, 98, 98, 102, 102, 102, 102, 102, 106, 106, 106, 106, 106, 108, 108, 108, 108, 108, 71, 81, 73, 42, 68, 44, 42, 110, 11, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110 } ; static grecs_dhcpdconst flex_int16_t grecs_dhcpd_chk[316] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 5, 7, 6, 5, 2, 6, 8, 9, 10, 13, 22, 13, 22, 5, 16, 6, 118, 16, 9, 10, 30, 7, 20, 20, 21, 21, 8, 16, 23, 26, 23, 28, 26, 23, 21, 24, 24, 33, 117, 36, 30, 36, 26, 88, 28, 57, 24, 37, 33, 45, 37, 45, 45, 24, 48, 108, 48, 88, 57, 48, 37, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 46, 49, 46, 46, 53, 61, 52, 53, 87, 106, 80, 87, 49, 64, 46, 75, 105, 53, 101, 49, 50, 50, 52, 97, 64, 61, 75, 74, 80, 74, 95, 50, 74, 75, 76, 94, 94, 83, 50, 51, 51, 83, 78, 78, 76, 76, 78, 91, 85, 51, 51, 79, 79, 84, 90, 89, 86, 84, 85, 85, 92, 79, 79, 92, 93, 96, 98, 93, 96, 98, 100, 102, 104, 100, 102, 104, 111, 111, 111, 111, 111, 112, 112, 112, 112, 112, 113, 113, 113, 113, 113, 114, 114, 114, 114, 114, 115, 115, 115, 115, 115, 116, 116, 116, 116, 116, 119, 119, 119, 119, 119, 120, 120, 82, 120, 120, 121, 77, 121, 121, 121, 122, 122, 122, 122, 122, 123, 123, 123, 123, 123, 124, 124, 124, 124, 124, 125, 125, 126, 126, 127, 127, 127, 127, 127, 128, 128, 128, 128, 128, 129, 73, 129, 129, 129, 130, 130, 130, 130, 130, 131, 131, 131, 131, 131, 132, 132, 132, 132, 132, 133, 133, 133, 133, 133, 70, 59, 47, 41, 40, 19, 17, 11, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110 } ; static grecs_dhcpd_state_type grecs_dhcpd_last_accepting_state; static char *grecs_dhcpd_last_accepting_cpos; extern int grecs_dhcpd_flex_debug; int grecs_dhcpd_flex_debug = 1; static grecs_dhcpdconst flex_int16_t grecs_dhcpd_rule_linenum[29] = { 0, 57, 61, 66, 67, 68, 69, 70, 71, 72, 74, 85, 100, 111, 126, 132, 138, 142, 143, 148, 151, 152, 154, 155, 156, 161, 163, 164, 165 } ; /* The intent behind this definition is that it'll catch * any uses of REJECT which flex missed. */ #define REJECT reject_used_but_not_detected #define grecs_dhcpdmore() grecs_dhcpdmore_used_but_not_detected #define YY_MORE_ADJ 0 #define YY_RESTORE_YY_MORE_OFFSET char *grecs_dhcpdtext; #line 1 "dhcpd-lex.l" /* grecs - Gray's Extensible Configuration System -*- c -*- */ #define YY_NO_INPUT 1 #line 9 "dhcpd-lex.l" /* grecs - Gray's Extensible Configuration System Copyright (C) 2007-2016 Sergey Poznyakoff Grecs 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. Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. */ #include <grecs.h> #include <dhcpd-gram.h> #include <unistd.h> #include <fcntl.h> #include <ctype.h> #include <stdlib.h> #include <errno.h> #include <sys/stat.h> #include <wordsplit.h> #define YY_USER_ACTION do { \ if (YYSTATE == 0) { \ grecs_dhcpdlloc.beg = grecs_current_locus_point; \ grecs_dhcpdlloc.beg.col++; \ } \ grecs_current_locus_point.col += grecs_dhcpdleng; \ grecs_dhcpdlloc.end = grecs_current_locus_point; \ } while (0); #define ISWS(c) ((c)==' '||(c)=='\t') #line 697 "dhcpd-lex.c" #define INITIAL 0 #define COMMENT 1 #define STR 2 #define BOOL 3 #define EXPR 4 #ifndef YY_NO_UNISTD_H /* Special case for "unistd.h", since it is non-ANSI. We include it way * down here because we want the user's section 1 to have been scanned first. * The user has a chance to override it with an option. */ /* %if-c-only */ #include <unistd.h> /* %endif */ /* %if-c++-only */ /* %endif */ #endif #ifndef YY_EXTRA_TYPE #define YY_EXTRA_TYPE void * #endif /* %if-c-only Reentrant structure and macros (non-C++). */ /* %if-reentrant */ /* %if-c-only */ static int grecs_dhcpd_init_globals (void ); /* %endif */ /* %if-reentrant */ /* %endif */ /* %endif End reentrant structures and macros. */ /* Accessor methods to globals. These are made visible to non-reentrant scanners for convenience. */ int grecs_dhcpdlex_destroy (void ); int grecs_dhcpdget_debug (void ); void grecs_dhcpdset_debug (int debug_flag ); YY_EXTRA_TYPE grecs_dhcpdget_extra (void ); void grecs_dhcpdset_extra (YY_EXTRA_TYPE user_defined ); FILE *grecs_dhcpdget_in (void ); void grecs_dhcpdset_in (FILE * in_str ); FILE *grecs_dhcpdget_out (void ); void grecs_dhcpdset_out (FILE * out_str ); grecs_dhcpd_size_t grecs_dhcpdget_leng (void ); char *grecs_dhcpdget_text (void ); int grecs_dhcpdget_lineno (void ); void grecs_dhcpdset_lineno (int line_number ); /* %if-bison-bridge */ /* %endif */ /* Macros after this point can all be overridden by user definitions in * section 1. */ #ifndef YY_SKIP_YYWRAP #ifdef __cplusplus extern "C" int grecs_dhcpdwrap (void ); #else extern int grecs_dhcpdwrap (void ); #endif #endif /* %not-for-header */ static void grecs_dhcpdunput (int c,char *buf_ptr ); /* %ok-for-header */ /* %endif */ #ifndef grecs_dhcpdtext_ptr static void grecs_dhcpd_flex_strncpy (char *,grecs_dhcpdconst char *,int ); #endif #ifdef YY_NEED_STRLEN static int grecs_dhcpd_flex_strlen (grecs_dhcpdconst char * ); #endif #ifndef YY_NO_INPUT /* %if-c-only Standard (non-C++) definition */ /* %not-for-header */ #ifdef __cplusplus static int grecs_dhcpdinput (void ); #else static int input (void ); #endif /* %ok-for-header */ /* %endif */ #endif /* %if-c-only */ /* %endif */ /* Amount of stuff to slurp up with each read. */ #ifndef YY_READ_BUF_SIZE #define YY_READ_BUF_SIZE 8192 #endif /* Copy whatever the last rule matched to the standard output. */ #ifndef ECHO /* %if-c-only Standard (non-C++) definition */ /* This used to be an fputs(), but since the string might contain NUL's, * we now use fwrite(). */ #define ECHO do { if (fwrite( grecs_dhcpdtext, grecs_dhcpdleng, 1, grecs_dhcpdout )) {} } while (0) /* %endif */ /* %if-c++-only C++ definition */ /* %endif */ #endif /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, * is returned in "result". */ #ifndef YY_INPUT #define YY_INPUT(buf,result,max_size) \ /* %% [5.0] fread()/read() definition of YY_INPUT goes here unless we're doing C++ \ */\ if ( YY_CURRENT_BUFFER_LVALUE->grecs_dhcpd_is_interactive ) \ { \ int c = '*'; \ size_t n; \ for ( n = 0; n < max_size && \ (c = getc( grecs_dhcpdin )) != EOF && c != '\n'; ++n ) \ buf[n] = (char) c; \ if ( c == '\n' ) \ buf[n++] = (char) c; \ if ( c == EOF && ferror( grecs_dhcpdin ) ) \ YY_FATAL_ERROR( "input in flex scanner failed" ); \ result = n; \ } \ else \ { \ errno=0; \ while ( (result = fread(buf, 1, max_size, grecs_dhcpdin))==0 && ferror(grecs_dhcpdin)) \ { \ if( errno != EINTR) \ { \ YY_FATAL_ERROR( "input in flex scanner failed" ); \ break; \ } \ errno=0; \ clearerr(grecs_dhcpdin); \ } \ }\ \ /* %if-c++-only C++ definition \ */\ /* %endif */ #endif /* No semi-colon after return; correct usage is to write "grecs_dhcpdterminate();" - * we don't want an extra ';' after the "return" because that will cause * some compilers to complain about unreachable statements. */ #ifndef grecs_dhcpdterminate #define grecs_dhcpdterminate() return YY_NULL #endif /* Number of entries by which start-condition stack grows. */ #ifndef YY_START_STACK_INCR #define YY_START_STACK_INCR 25 #endif /* Report a fatal error. */ #ifndef YY_FATAL_ERROR /* %if-c-only */ #define YY_FATAL_ERROR(msg) grecs_dhcpd_fatal_error( msg ) /* %endif */ /* %if-c++-only */ /* %endif */ #endif /* %if-tables-serialization structures and prototypes */ /* %not-for-header */ /* %ok-for-header */ /* %not-for-header */ /* %tables-grecs_dhcpddmap generated elements */ /* %endif */ /* end tables serialization structures and prototypes */ /* %ok-for-header */ /* Default declaration of generated scanner - a define so the user can * easily add parameters. */ #ifndef YY_DECL #define YY_DECL_IS_OURS 1 /* %if-c-only Standard (non-C++) definition */ extern int grecs_dhcpdlex (void); #define YY_DECL int grecs_dhcpdlex (void) /* %endif */ /* %if-c++-only C++ definition */ /* %endif */ #endif /* !YY_DECL */ /* Code executed at the beginning of each rule, after grecs_dhcpdtext and grecs_dhcpdleng * have been set up. */ #ifndef YY_USER_ACTION #define YY_USER_ACTION #endif /* Code executed at the end of each rule. */ #ifndef YY_BREAK #define YY_BREAK break; #endif /* %% [6.0] YY_RULE_SETUP definition goes here */ #define YY_RULE_SETUP \ if ( grecs_dhcpdleng > 0 ) \ YY_CURRENT_BUFFER_LVALUE->grecs_dhcpd_at_bol = \ (grecs_dhcpdtext[grecs_dhcpdleng - 1] == '\n'); \ YY_USER_ACTION /* %not-for-header */ /** The main scanner function which does all the work. */ YY_DECL { register grecs_dhcpd_state_type grecs_dhcpd_current_state; register char *grecs_dhcpd_cp, *grecs_dhcpd_bp; register int grecs_dhcpd_act; /* %% [7.0] user's declarations go here */ #line 55 "dhcpd-lex.l" /* Line directive */ #line 949 "dhcpd-lex.c" if ( !(grecs_dhcpd_init) ) { (grecs_dhcpd_init) = 1; #ifdef YY_USER_INIT YY_USER_INIT; #endif if ( ! (grecs_dhcpd_start) ) (grecs_dhcpd_start) = 1; /* first start state */ if ( ! grecs_dhcpdin ) /* %if-c-only */ grecs_dhcpdin = stdin; /* %endif */ /* %if-c++-only */ /* %endif */ if ( ! grecs_dhcpdout ) /* %if-c-only */ grecs_dhcpdout = stdout; /* %endif */ /* %if-c++-only */ /* %endif */ if ( ! YY_CURRENT_BUFFER ) { grecs_dhcpdensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = grecs_dhcpd_create_buffer(grecs_dhcpdin,YY_BUF_SIZE ); } grecs_dhcpd_load_buffer_state( ); } while ( 1 ) /* loops until end-of-file is reached */ { /* %% [8.0] grecs_dhcpdmore()-related code goes here */ grecs_dhcpd_cp = (grecs_dhcpd_c_buf_p); /* Support of grecs_dhcpdtext. */ *grecs_dhcpd_cp = (grecs_dhcpd_hold_char); /* grecs_dhcpd_bp points to the position in grecs_dhcpd_ch_buf of the start of * the current run. */ grecs_dhcpd_bp = grecs_dhcpd_cp; /* %% [9.0] code to set up and find next match goes here */ grecs_dhcpd_current_state = (grecs_dhcpd_start); grecs_dhcpd_current_state += YY_AT_BOL(); grecs_dhcpd_match: do { register YY_CHAR grecs_dhcpd_c = grecs_dhcpd_ec[YY_SC_TO_UI(*grecs_dhcpd_cp)]; if ( grecs_dhcpd_accept[grecs_dhcpd_current_state] ) { (grecs_dhcpd_last_accepting_state) = grecs_dhcpd_current_state; (grecs_dhcpd_last_accepting_cpos) = grecs_dhcpd_cp; } while ( grecs_dhcpd_chk[grecs_dhcpd_base[grecs_dhcpd_current_state] + grecs_dhcpd_c] != grecs_dhcpd_current_state ) { grecs_dhcpd_current_state = (int) grecs_dhcpd_def[grecs_dhcpd_current_state]; if ( grecs_dhcpd_current_state >= 111 ) grecs_dhcpd_c = grecs_dhcpd_meta[(unsigned int) grecs_dhcpd_c]; } grecs_dhcpd_current_state = grecs_dhcpd_nxt[grecs_dhcpd_base[grecs_dhcpd_current_state] + (unsigned int) grecs_dhcpd_c]; ++grecs_dhcpd_cp; } while ( grecs_dhcpd_base[grecs_dhcpd_current_state] != 292 ); grecs_dhcpd_find_action: /* %% [10.0] code to find the action number goes here */ grecs_dhcpd_act = grecs_dhcpd_accept[grecs_dhcpd_current_state]; if ( grecs_dhcpd_act == 0 ) { /* have to back up */ grecs_dhcpd_cp = (grecs_dhcpd_last_accepting_cpos); grecs_dhcpd_current_state = (grecs_dhcpd_last_accepting_state); grecs_dhcpd_act = grecs_dhcpd_accept[grecs_dhcpd_current_state]; } YY_DO_BEFORE_ACTION; /* %% [11.0] code for grecs_dhcpdlineno update goes here */ do_action: /* This label is used only to access EOF actions. */ /* %% [12.0] debug code goes here */ if ( grecs_dhcpd_flex_debug ) { if ( grecs_dhcpd_act == 0 ) fprintf( stderr, "--scanner backing up\n" ); else if ( grecs_dhcpd_act < 29 ) fprintf( stderr, "--accepting rule at line %ld (\"%s\")\n", (long)grecs_dhcpd_rule_linenum[grecs_dhcpd_act], grecs_dhcpdtext ); else if ( grecs_dhcpd_act == 29 ) fprintf( stderr, "--accepting default rule (\"%s\")\n", grecs_dhcpdtext ); else if ( grecs_dhcpd_act == 30 ) fprintf( stderr, "--(end of buffer or a NUL)\n" ); else fprintf( stderr, "--EOF (start condition %d)\n", YY_START ); } switch ( grecs_dhcpd_act ) { /* beginning of action switch */ /* %% [13.0] actions go here */ case 0: /* must back up */ /* undo the effects of YY_DO_BEFORE_ACTION */ *grecs_dhcpd_cp = (grecs_dhcpd_hold_char); grecs_dhcpd_cp = (grecs_dhcpd_last_accepting_cpos); grecs_dhcpd_current_state = (grecs_dhcpd_last_accepting_state); goto grecs_dhcpd_find_action; case 1: /* rule 1 can match eol */ YY_RULE_SETUP #line 57 "dhcpd-lex.l" { grecs_parse_line_directive_cpp(grecs_dhcpdtext, &grecs_dhcpdlloc, &grecs_current_locus_point, NULL); } YY_BREAK case 2: /* rule 2 can match eol */ YY_RULE_SETUP #line 61 "dhcpd-lex.l" { grecs_parse_line_directive(grecs_dhcpdtext, &grecs_dhcpdlloc, &grecs_current_locus_point, NULL); } YY_BREAK /* End-of-line comments */ case 3: /* rule 3 can match eol */ YY_RULE_SETUP #line 66 "dhcpd-lex.l" { grecs_locus_point_advance_line(grecs_current_locus_point); } YY_BREAK case 4: YY_RULE_SETUP #line 67 "dhcpd-lex.l" /* end-of-file comment */; YY_BREAK case 5: /* rule 5 can match eol */ YY_RULE_SETUP #line 68 "dhcpd-lex.l" { grecs_locus_point_advance_line(grecs_current_locus_point); } YY_BREAK case 6: YY_RULE_SETUP #line 69 "dhcpd-lex.l" /* end-of-file comment */; YY_BREAK case 7: YY_RULE_SETUP #line 70 "dhcpd-lex.l" return DHCPD_IF; YY_BREAK case 8: YY_RULE_SETUP #line 71 "dhcpd-lex.l" return DHCPD_ELSIF; YY_BREAK case 9: YY_RULE_SETUP #line 72 "dhcpd-lex.l" return DHCPD_ELSE; YY_BREAK case 10: /* rule 10 can match eol */ YY_RULE_SETUP #line 74 "dhcpd-lex.l" { char *p; size_t len; for (p = grecs_dhcpdtext, len = grecs_dhcpdleng - 1; ISWS(*p) && len > 0; p++, len--) ; if (len) { grecs_line_add(p, len); grecs_line_add(" ", 1); } grecs_locus_point_advance_line(grecs_current_locus_point); } YY_BREAK case 11: YY_RULE_SETUP #line 85 "dhcpd-lex.l" { char *p; size_t len; unput('{'); for (p = grecs_dhcpdtext, len = grecs_dhcpdleng - 1; ISWS(*p) && len > 0; p++, len--) ; for (; len > 0 && ISWS(p[len-1]); len--) ; grecs_line_add(p, len); BEGIN(INITIAL); grecs_dhcpdlval.string = grecs_line_finish(); return DHCPD_EXPR; } YY_BREAK case 12: /* rule 12 can match eol */ YY_RULE_SETUP #line 100 "dhcpd-lex.l" { char *p; size_t len; for (p = grecs_dhcpdtext, len = grecs_dhcpdleng - 1; ISWS(*p) && len > 0; p++, len--) ; if (len) { grecs_line_add(p, len); grecs_line_add(" ", 1); } grecs_locus_point_advance_line(grecs_current_locus_point); } YY_BREAK case 13: YY_RULE_SETUP #line 111 "dhcpd-lex.l" { char *p; size_t len; unput(';'); for (p = grecs_dhcpdtext, len = grecs_dhcpdleng - 1; ISWS(*p) && len > 0; p++, len--) ; for (; len > 0 && ISWS(p[len-1]); len--) ; grecs_line_add(p, len); BEGIN(INITIAL); grecs_dhcpdlval.string = grecs_line_finish(); return DHCPD_EXPR; } YY_BREAK /* Identifiers */ case 14: YY_RULE_SETUP #line 126 "dhcpd-lex.l" { grecs_line_begin(); grecs_line_add(grecs_dhcpdtext, grecs_dhcpdleng); grecs_dhcpdlval.string = grecs_line_finish(); return DHCPD_IDENT; } YY_BREAK /* Strings */ case 15: YY_RULE_SETUP #line 132 "dhcpd-lex.l" { grecs_line_begin(); grecs_line_add(grecs_dhcpdtext, grecs_dhcpdleng); grecs_dhcpdlval.string = grecs_line_finish(); return DHCPD_STRING; } YY_BREAK /* Quoted strings */ case 16: YY_RULE_SETUP #line 138 "dhcpd-lex.l" { grecs_line_begin(); grecs_line_add(grecs_dhcpdtext + 1, grecs_dhcpdleng - 2); grecs_dhcpdlval.string = grecs_line_finish(); return DHCPD_STRING; } YY_BREAK case 17: #line 143 "dhcpd-lex.l" case 18: /* rule 18 can match eol */ YY_RULE_SETUP #line 143 "dhcpd-lex.l" { BEGIN(STR); grecs_line_begin(); grecs_line_acc_grow_unescape_last(grecs_dhcpdtext + 1, grecs_dhcpdleng - 1, &grecs_dhcpdlloc); } YY_BREAK case 19: /* rule 19 can match eol */ YY_RULE_SETUP #line 148 "dhcpd-lex.l" { BEGIN(STR); grecs_line_begin(); grecs_line_acc_grow(grecs_dhcpdtext + 1, grecs_dhcpdleng - 1); } YY_BREAK case 20: #line 152 "dhcpd-lex.l" case 21: /* rule 21 can match eol */ YY_RULE_SETUP #line 152 "dhcpd-lex.l" { grecs_line_acc_grow_unescape_last(grecs_dhcpdtext, grecs_dhcpdleng, &grecs_dhcpdlloc); } YY_BREAK case 22: /* rule 22 can match eol */ #line 155 "dhcpd-lex.l" case 23: /* rule 23 can match eol */ YY_RULE_SETUP #line 155 "dhcpd-lex.l" { grecs_line_acc_grow(grecs_dhcpdtext, grecs_dhcpdleng); } YY_BREAK case 24: YY_RULE_SETUP #line 156 "dhcpd-lex.l" { BEGIN(INITIAL); if (grecs_dhcpdleng > 1) grecs_line_add(grecs_dhcpdtext, grecs_dhcpdleng - 1); grecs_dhcpdlval.string = grecs_line_finish(); return DHCPD_STRING; } YY_BREAK case 25: YY_RULE_SETUP #line 161 "dhcpd-lex.l" ; YY_BREAK /* Other tokens */ case 26: /* rule 26 can match eol */ YY_RULE_SETUP #line 163 "dhcpd-lex.l" { grecs_locus_point_advance_line(grecs_current_locus_point); } YY_BREAK case 27: YY_RULE_SETUP #line 164 "dhcpd-lex.l" return grecs_dhcpdtext[0]; YY_BREAK case 28: YY_RULE_SETUP #line 165 "dhcpd-lex.l" { if (isascii(grecs_dhcpdtext[0]) && isprint(grecs_dhcpdtext[0])) grecs_error(&grecs_dhcpdlloc, 0, _("stray character %c"), grecs_dhcpdtext[0]); else grecs_error(&grecs_dhcpdlloc, 0, _("stray character \\%03o"), (unsigned char) grecs_dhcpdtext[0]); } YY_BREAK case 29: YY_RULE_SETUP #line 171 "dhcpd-lex.l" ECHO; YY_BREAK #line 1296 "dhcpd-lex.c" case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(COMMENT): case YY_STATE_EOF(STR): case YY_STATE_EOF(BOOL): case YY_STATE_EOF(EXPR): grecs_dhcpdterminate(); case YY_END_OF_BUFFER: { /* Amount of text matched not including the EOB char. */ int grecs_dhcpd_amount_of_matched_text = (int) (grecs_dhcpd_cp - (grecs_dhcpdtext_ptr)) - 1; /* Undo the effects of YY_DO_BEFORE_ACTION. */ *grecs_dhcpd_cp = (grecs_dhcpd_hold_char); YY_RESTORE_YY_MORE_OFFSET if ( YY_CURRENT_BUFFER_LVALUE->grecs_dhcpd_buffer_status == YY_BUFFER_NEW ) { /* We're scanning a new file or input source. It's * possible that this happened because the user * just pointed grecs_dhcpdin at a new source and called * grecs_dhcpdlex(). If so, then we have to assure * consistency between YY_CURRENT_BUFFER and our * globals. Here is the right place to do so, because * this is the first action (other than possibly a * back-up) that will match for the new input source. */ (grecs_dhcpd_n_chars) = YY_CURRENT_BUFFER_LVALUE->grecs_dhcpd_n_chars; YY_CURRENT_BUFFER_LVALUE->grecs_dhcpd_input_file = grecs_dhcpdin; YY_CURRENT_BUFFER_LVALUE->grecs_dhcpd_buffer_status = YY_BUFFER_NORMAL; } /* Note that here we test for grecs_dhcpd_c_buf_p "<=" to the position * of the first EOB in the buffer, since grecs_dhcpd_c_buf_p will * already have been incremented past the NUL character * (since all states make transitions on EOB to the * end-of-buffer state). Contrast this with the test * in input(). */ if ( (grecs_dhcpd_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->grecs_dhcpd_ch_buf[(grecs_dhcpd_n_chars)] ) { /* This was really a NUL. */ grecs_dhcpd_state_type grecs_dhcpd_next_state; (grecs_dhcpd_c_buf_p) = (grecs_dhcpdtext_ptr) + grecs_dhcpd_amount_of_matched_text; grecs_dhcpd_current_state = grecs_dhcpd_get_previous_state( ); /* Okay, we're now positioned to make the NUL * transition. We couldn't have * grecs_dhcpd_get_previous_state() go ahead and do it * for us because it doesn't know how to deal * with the possibility of jamming (and we don't * want to build jamming into it because then it * will run more slowly). */ grecs_dhcpd_next_state = grecs_dhcpd_try_NUL_trans( grecs_dhcpd_current_state ); grecs_dhcpd_bp = (grecs_dhcpdtext_ptr) + YY_MORE_ADJ; if ( grecs_dhcpd_next_state ) { /* Consume the NUL. */ grecs_dhcpd_cp = ++(grecs_dhcpd_c_buf_p); grecs_dhcpd_current_state = grecs_dhcpd_next_state; goto grecs_dhcpd_match; } else { /* %% [14.0] code to do back-up for compressed tables and set up grecs_dhcpd_cp goes here */ grecs_dhcpd_cp = (grecs_dhcpd_c_buf_p); goto grecs_dhcpd_find_action; } } else switch ( grecs_dhcpd_get_next_buffer( ) ) { case EOB_ACT_END_OF_FILE: { (grecs_dhcpd_did_buffer_switch_on_eof) = 0; if ( grecs_dhcpdwrap( ) ) { /* Note: because we've taken care in * grecs_dhcpd_get_next_buffer() to have set up * grecs_dhcpdtext, we can now set up * grecs_dhcpd_c_buf_p so that if some total * hoser (like flex itself) wants to * call the scanner after we return the * YY_NULL, it'll still work - another * YY_NULL will get returned. */ (grecs_dhcpd_c_buf_p) = (grecs_dhcpdtext_ptr) + YY_MORE_ADJ; grecs_dhcpd_act = YY_STATE_EOF(YY_START); goto do_action; } else { if ( ! (grecs_dhcpd_did_buffer_switch_on_eof) ) YY_NEW_FILE; } break; } case EOB_ACT_CONTINUE_SCAN: (grecs_dhcpd_c_buf_p) = (grecs_dhcpdtext_ptr) + grecs_dhcpd_amount_of_matched_text; grecs_dhcpd_current_state = grecs_dhcpd_get_previous_state( ); grecs_dhcpd_cp = (grecs_dhcpd_c_buf_p); grecs_dhcpd_bp = (grecs_dhcpdtext_ptr) + YY_MORE_ADJ; goto grecs_dhcpd_match; case EOB_ACT_LAST_MATCH: (grecs_dhcpd_c_buf_p) = &YY_CURRENT_BUFFER_LVALUE->grecs_dhcpd_ch_buf[(grecs_dhcpd_n_chars)]; grecs_dhcpd_current_state = grecs_dhcpd_get_previous_state( ); grecs_dhcpd_cp = (grecs_dhcpd_c_buf_p); grecs_dhcpd_bp = (grecs_dhcpdtext_ptr) + YY_MORE_ADJ; goto grecs_dhcpd_find_action; } break; } default: YY_FATAL_ERROR( "fatal flex scanner internal error--no action found" ); } /* end of action switch */ } /* end of scanning one token */ } /* end of grecs_dhcpdlex */ /* %ok-for-header */ /* %if-c++-only */ /* %not-for-header */ /* %ok-for-header */ /* %endif */ /* grecs_dhcpd_get_next_buffer - try to read in a new buffer * * Returns a code representing an action: * EOB_ACT_LAST_MATCH - * EOB_ACT_CONTINUE_SCAN - continue scanning from current position * EOB_ACT_END_OF_FILE - end of file */ /* %if-c-only */ static int grecs_dhcpd_get_next_buffer (void) /* %endif */ /* %if-c++-only */ /* %endif */ { register char *dest = YY_CURRENT_BUFFER_LVALUE->grecs_dhcpd_ch_buf; register char *source = (grecs_dhcpdtext_ptr); register int number_to_move, i; int ret_val; if ( (grecs_dhcpd_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->grecs_dhcpd_ch_buf[(grecs_dhcpd_n_chars) + 1] ) YY_FATAL_ERROR( "fatal flex scanner internal error--end of buffer missed" ); if ( YY_CURRENT_BUFFER_LVALUE->grecs_dhcpd_fill_buffer == 0 ) { /* Don't try to fill the buffer, so this is an EOF. */ if ( (grecs_dhcpd_c_buf_p) - (grecs_dhcpdtext_ptr) - YY_MORE_ADJ == 1 ) { /* We matched a single character, the EOB, so * treat this as a final EOF. */ return EOB_ACT_END_OF_FILE; } else { /* We matched some text prior to the EOB, first * process it. */ return EOB_ACT_LAST_MATCH; } } /* Try to read more data. */ /* First move last chars to start of buffer. */ number_to_move = (int) ((grecs_dhcpd_c_buf_p) - (grecs_dhcpdtext_ptr)) - 1; for ( i = 0; i < number_to_move; ++i ) *(dest++) = *(source++); if ( YY_CURRENT_BUFFER_LVALUE->grecs_dhcpd_buffer_status == YY_BUFFER_EOF_PENDING ) /* don't do the read, it's not guaranteed to return an EOF, * just force an EOF */ YY_CURRENT_BUFFER_LVALUE->grecs_dhcpd_n_chars = (grecs_dhcpd_n_chars) = 0; else { grecs_dhcpd_size_t num_to_read = YY_CURRENT_BUFFER_LVALUE->grecs_dhcpd_buf_size - number_to_move - 1; while ( num_to_read <= 0 ) { /* Not enough room in the buffer - grow it. */ /* just a shorter name for the current buffer */ YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE; int grecs_dhcpd_c_buf_p_offset = (int) ((grecs_dhcpd_c_buf_p) - b->grecs_dhcpd_ch_buf); if ( b->grecs_dhcpd_is_our_buffer ) { grecs_dhcpd_size_t new_size = b->grecs_dhcpd_buf_size * 2; if ( new_size <= 0 ) b->grecs_dhcpd_buf_size += b->grecs_dhcpd_buf_size / 8; else b->grecs_dhcpd_buf_size *= 2; b->grecs_dhcpd_ch_buf = (char *) /* Include room in for 2 EOB chars. */ grecs_dhcpdrealloc((void *) b->grecs_dhcpd_ch_buf,b->grecs_dhcpd_buf_size + 2 ); } else /* Can't grow it, we don't own it. */ b->grecs_dhcpd_ch_buf = 0; if ( ! b->grecs_dhcpd_ch_buf ) YY_FATAL_ERROR( "fatal error - scanner input buffer overflow" ); (grecs_dhcpd_c_buf_p) = &b->grecs_dhcpd_ch_buf[grecs_dhcpd_c_buf_p_offset]; num_to_read = YY_CURRENT_BUFFER_LVALUE->grecs_dhcpd_buf_size - number_to_move - 1; } if ( num_to_read > YY_READ_BUF_SIZE ) num_to_read = YY_READ_BUF_SIZE; /* Read in more data. */ YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->grecs_dhcpd_ch_buf[number_to_move]), (grecs_dhcpd_n_chars), num_to_read ); YY_CURRENT_BUFFER_LVALUE->grecs_dhcpd_n_chars = (grecs_dhcpd_n_chars); } if ( (grecs_dhcpd_n_chars) == 0 ) { if ( number_to_move == YY_MORE_ADJ ) { ret_val = EOB_ACT_END_OF_FILE; grecs_dhcpdrestart(grecs_dhcpdin ); } else { ret_val = EOB_ACT_LAST_MATCH; YY_CURRENT_BUFFER_LVALUE->grecs_dhcpd_buffer_status = YY_BUFFER_EOF_PENDING; } } else ret_val = EOB_ACT_CONTINUE_SCAN; if ((grecs_dhcpd_size_t) ((grecs_dhcpd_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->grecs_dhcpd_buf_size) { /* Extend the array by 50%, plus the number we really need. */ grecs_dhcpd_size_t new_size = (grecs_dhcpd_n_chars) + number_to_move + ((grecs_dhcpd_n_chars) >> 1); YY_CURRENT_BUFFER_LVALUE->grecs_dhcpd_ch_buf = (char *) grecs_dhcpdrealloc((void *) YY_CURRENT_BUFFER_LVALUE->grecs_dhcpd_ch_buf,new_size ); if ( ! YY_CURRENT_BUFFER_LVALUE->grecs_dhcpd_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in grecs_dhcpd_get_next_buffer()" ); } (grecs_dhcpd_n_chars) += number_to_move; YY_CURRENT_BUFFER_LVALUE->grecs_dhcpd_ch_buf[(grecs_dhcpd_n_chars)] = YY_END_OF_BUFFER_CHAR; YY_CURRENT_BUFFER_LVALUE->grecs_dhcpd_ch_buf[(grecs_dhcpd_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; (grecs_dhcpdtext_ptr) = &YY_CURRENT_BUFFER_LVALUE->grecs_dhcpd_ch_buf[0]; return ret_val; } /* grecs_dhcpd_get_previous_state - get the state just before the EOB char was reached */ /* %if-c-only */ /* %not-for-header */ static grecs_dhcpd_state_type grecs_dhcpd_get_previous_state (void) /* %endif */ /* %if-c++-only */ /* %endif */ { register grecs_dhcpd_state_type grecs_dhcpd_current_state; register char *grecs_dhcpd_cp; /* %% [15.0] code to get the start state into grecs_dhcpd_current_state goes here */ grecs_dhcpd_current_state = (grecs_dhcpd_start); grecs_dhcpd_current_state += YY_AT_BOL(); for ( grecs_dhcpd_cp = (grecs_dhcpdtext_ptr) + YY_MORE_ADJ; grecs_dhcpd_cp < (grecs_dhcpd_c_buf_p); ++grecs_dhcpd_cp ) { /* %% [16.0] code to find the next state goes here */ register YY_CHAR grecs_dhcpd_c = (*grecs_dhcpd_cp ? grecs_dhcpd_ec[YY_SC_TO_UI(*grecs_dhcpd_cp)] : 1); if ( grecs_dhcpd_accept[grecs_dhcpd_current_state] ) { (grecs_dhcpd_last_accepting_state) = grecs_dhcpd_current_state; (grecs_dhcpd_last_accepting_cpos) = grecs_dhcpd_cp; } while ( grecs_dhcpd_chk[grecs_dhcpd_base[grecs_dhcpd_current_state] + grecs_dhcpd_c] != grecs_dhcpd_current_state ) { grecs_dhcpd_current_state = (int) grecs_dhcpd_def[grecs_dhcpd_current_state]; if ( grecs_dhcpd_current_state >= 111 ) grecs_dhcpd_c = grecs_dhcpd_meta[(unsigned int) grecs_dhcpd_c]; } grecs_dhcpd_current_state = grecs_dhcpd_nxt[grecs_dhcpd_base[grecs_dhcpd_current_state] + (unsigned int) grecs_dhcpd_c]; } return grecs_dhcpd_current_state; } /* grecs_dhcpd_try_NUL_trans - try to make a transition on the NUL character * * synopsis * next_state = grecs_dhcpd_try_NUL_trans( current_state ); */ /* %if-c-only */ static grecs_dhcpd_state_type grecs_dhcpd_try_NUL_trans (grecs_dhcpd_state_type grecs_dhcpd_current_state ) /* %endif */ /* %if-c++-only */ /* %endif */ { register int grecs_dhcpd_is_jam; /* %% [17.0] code to find the next state, and perhaps do backing up, goes here */ register char *grecs_dhcpd_cp = (grecs_dhcpd_c_buf_p); register YY_CHAR grecs_dhcpd_c = 1; if ( grecs_dhcpd_accept[grecs_dhcpd_current_state] ) { (grecs_dhcpd_last_accepting_state) = grecs_dhcpd_current_state; (grecs_dhcpd_last_accepting_cpos) = grecs_dhcpd_cp; } while ( grecs_dhcpd_chk[grecs_dhcpd_base[grecs_dhcpd_current_state] + grecs_dhcpd_c] != grecs_dhcpd_current_state ) { grecs_dhcpd_current_state = (int) grecs_dhcpd_def[grecs_dhcpd_current_state]; if ( grecs_dhcpd_current_state >= 111 ) grecs_dhcpd_c = grecs_dhcpd_meta[(unsigned int) grecs_dhcpd_c]; } grecs_dhcpd_current_state = grecs_dhcpd_nxt[grecs_dhcpd_base[grecs_dhcpd_current_state] + (unsigned int) grecs_dhcpd_c]; grecs_dhcpd_is_jam = (grecs_dhcpd_current_state == 110); return grecs_dhcpd_is_jam ? 0 : grecs_dhcpd_current_state; } /* %if-c-only */ static void grecs_dhcpdunput (int c, register char * grecs_dhcpd_bp ) /* %endif */ /* %if-c++-only */ /* %endif */ { register char *grecs_dhcpd_cp; grecs_dhcpd_cp = (grecs_dhcpd_c_buf_p); /* undo effects of setting up grecs_dhcpdtext */ *grecs_dhcpd_cp = (grecs_dhcpd_hold_char); if ( grecs_dhcpd_cp < YY_CURRENT_BUFFER_LVALUE->grecs_dhcpd_ch_buf + 2 ) { /* need to shift things up to make room */ /* +2 for EOB chars. */ register grecs_dhcpd_size_t number_to_move = (grecs_dhcpd_n_chars) + 2; register char *dest = &YY_CURRENT_BUFFER_LVALUE->grecs_dhcpd_ch_buf[ YY_CURRENT_BUFFER_LVALUE->grecs_dhcpd_buf_size + 2]; register char *source = &YY_CURRENT_BUFFER_LVALUE->grecs_dhcpd_ch_buf[number_to_move]; while ( source > YY_CURRENT_BUFFER_LVALUE->grecs_dhcpd_ch_buf ) *--dest = *--source; grecs_dhcpd_cp += (int) (dest - source); grecs_dhcpd_bp += (int) (dest - source); YY_CURRENT_BUFFER_LVALUE->grecs_dhcpd_n_chars = (grecs_dhcpd_n_chars) = YY_CURRENT_BUFFER_LVALUE->grecs_dhcpd_buf_size; if ( grecs_dhcpd_cp < YY_CURRENT_BUFFER_LVALUE->grecs_dhcpd_ch_buf + 2 ) YY_FATAL_ERROR( "flex scanner push-back overflow" ); } *--grecs_dhcpd_cp = (char) c; /* %% [18.0] update grecs_dhcpdlineno here */ (grecs_dhcpdtext_ptr) = grecs_dhcpd_bp; (grecs_dhcpd_hold_char) = *grecs_dhcpd_cp; (grecs_dhcpd_c_buf_p) = grecs_dhcpd_cp; } /* %if-c-only */ /* %endif */ /* %if-c-only */ #ifndef YY_NO_INPUT #ifdef __cplusplus static int grecs_dhcpdinput (void) #else static int input (void) #endif /* %endif */ /* %if-c++-only */ /* %endif */ { int c; *(grecs_dhcpd_c_buf_p) = (grecs_dhcpd_hold_char); if ( *(grecs_dhcpd_c_buf_p) == YY_END_OF_BUFFER_CHAR ) { /* grecs_dhcpd_c_buf_p now points to the character we want to return. * If this occurs *before* the EOB characters, then it's a * valid NUL; if not, then we've hit the end of the buffer. */ if ( (grecs_dhcpd_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->grecs_dhcpd_ch_buf[(grecs_dhcpd_n_chars)] ) /* This was really a NUL. */ *(grecs_dhcpd_c_buf_p) = '\0'; else { /* need more input */ grecs_dhcpd_size_t offset = (grecs_dhcpd_c_buf_p) - (grecs_dhcpdtext_ptr); ++(grecs_dhcpd_c_buf_p); switch ( grecs_dhcpd_get_next_buffer( ) ) { case EOB_ACT_LAST_MATCH: /* This happens because grecs_dhcpd_g_n_b() * sees that we've accumulated a * token and flags that we need to * try matching the token before * proceeding. But for input(), * there's no matching to consider. * So convert the EOB_ACT_LAST_MATCH * to EOB_ACT_END_OF_FILE. */ /* Reset buffer status. */ grecs_dhcpdrestart(grecs_dhcpdin ); /*FALLTHROUGH*/ case EOB_ACT_END_OF_FILE: { if ( grecs_dhcpdwrap( ) ) return EOF; if ( ! (grecs_dhcpd_did_buffer_switch_on_eof) ) YY_NEW_FILE; #ifdef __cplusplus return grecs_dhcpdinput(); #else return input(); #endif } case EOB_ACT_CONTINUE_SCAN: (grecs_dhcpd_c_buf_p) = (grecs_dhcpdtext_ptr) + offset; break; } } } c = *(unsigned char *) (grecs_dhcpd_c_buf_p); /* cast for 8-bit char's */ *(grecs_dhcpd_c_buf_p) = '\0'; /* preserve grecs_dhcpdtext */ (grecs_dhcpd_hold_char) = *++(grecs_dhcpd_c_buf_p); /* %% [19.0] update BOL and grecs_dhcpdlineno */ YY_CURRENT_BUFFER_LVALUE->grecs_dhcpd_at_bol = (c == '\n'); return c; } /* %if-c-only */ #endif /* ifndef YY_NO_INPUT */ /* %endif */ /** Immediately switch to a different input stream. * @param input_file A readable stream. * * @note This function does not reset the start condition to @c INITIAL . */ /* %if-c-only */ void grecs_dhcpdrestart (FILE * input_file ) /* %endif */ /* %if-c++-only */ /* %endif */ { if ( ! YY_CURRENT_BUFFER ){ grecs_dhcpdensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = grecs_dhcpd_create_buffer(grecs_dhcpdin,YY_BUF_SIZE ); } grecs_dhcpd_init_buffer(YY_CURRENT_BUFFER,input_file ); grecs_dhcpd_load_buffer_state( ); } /** Switch to a different input buffer. * @param new_buffer The new input buffer. * */ /* %if-c-only */ void grecs_dhcpd_switch_to_buffer (YY_BUFFER_STATE new_buffer ) /* %endif */ /* %if-c++-only */ /* %endif */ { /* TODO. We should be able to replace this entire function body * with * grecs_dhcpdpop_buffer_state(); * grecs_dhcpdpush_buffer_state(new_buffer); */ grecs_dhcpdensure_buffer_stack (); if ( YY_CURRENT_BUFFER == new_buffer ) return; if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(grecs_dhcpd_c_buf_p) = (grecs_dhcpd_hold_char); YY_CURRENT_BUFFER_LVALUE->grecs_dhcpd_buf_pos = (grecs_dhcpd_c_buf_p); YY_CURRENT_BUFFER_LVALUE->grecs_dhcpd_n_chars = (grecs_dhcpd_n_chars); } YY_CURRENT_BUFFER_LVALUE = new_buffer; grecs_dhcpd_load_buffer_state( ); /* We don't actually know whether we did this switch during * EOF (grecs_dhcpdwrap()) processing, but the only time this flag * is looked at is after grecs_dhcpdwrap() is called, so it's safe * to go ahead and always set it. */ (grecs_dhcpd_did_buffer_switch_on_eof) = 1; } /* %if-c-only */ static void grecs_dhcpd_load_buffer_state (void) /* %endif */ /* %if-c++-only */ /* %endif */ { (grecs_dhcpd_n_chars) = YY_CURRENT_BUFFER_LVALUE->grecs_dhcpd_n_chars; (grecs_dhcpdtext_ptr) = (grecs_dhcpd_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->grecs_dhcpd_buf_pos; grecs_dhcpdin = YY_CURRENT_BUFFER_LVALUE->grecs_dhcpd_input_file; (grecs_dhcpd_hold_char) = *(grecs_dhcpd_c_buf_p); } /** Allocate and initialize an input buffer state. * @param file A readable stream. * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. * * @return the allocated buffer state. */ /* %if-c-only */ YY_BUFFER_STATE grecs_dhcpd_create_buffer (FILE * file, int size ) /* %endif */ /* %if-c++-only */ /* %endif */ { YY_BUFFER_STATE b; b = (YY_BUFFER_STATE) grecs_dhcpdalloc(sizeof( struct grecs_dhcpd_buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in grecs_dhcpd_create_buffer()" ); b->grecs_dhcpd_buf_size = size; /* grecs_dhcpd_ch_buf has to be 2 characters longer than the size given because * we need to put in 2 end-of-buffer characters. */ b->grecs_dhcpd_ch_buf = (char *) grecs_dhcpdalloc(b->grecs_dhcpd_buf_size + 2 ); if ( ! b->grecs_dhcpd_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in grecs_dhcpd_create_buffer()" ); b->grecs_dhcpd_is_our_buffer = 1; grecs_dhcpd_init_buffer(b,file ); return b; } /** Destroy the buffer. * @param b a buffer created with grecs_dhcpd_create_buffer() * */ /* %if-c-only */ void grecs_dhcpd_delete_buffer (YY_BUFFER_STATE b ) /* %endif */ /* %if-c++-only */ /* %endif */ { if ( ! b ) return; if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; if ( b->grecs_dhcpd_is_our_buffer ) grecs_dhcpdfree((void *) b->grecs_dhcpd_ch_buf ); grecs_dhcpdfree((void *) b ); } /* Initializes or reinitializes a buffer. * This function is sometimes called more than once on the same buffer, * such as during a grecs_dhcpdrestart() or at EOF. */ /* %if-c-only */ static void grecs_dhcpd_init_buffer (YY_BUFFER_STATE b, FILE * file ) /* %endif */ /* %if-c++-only */ /* %endif */ { int oerrno = errno; grecs_dhcpd_flush_buffer(b ); b->grecs_dhcpd_input_file = file; b->grecs_dhcpd_fill_buffer = 1; /* If b is the current buffer, then grecs_dhcpd_init_buffer was _probably_ * called from grecs_dhcpdrestart() or through grecs_dhcpd_get_next_buffer. * In that case, we don't want to reset the lineno or column. */ if (b != YY_CURRENT_BUFFER){ b->grecs_dhcpd_bs_lineno = 1; b->grecs_dhcpd_bs_column = 0; } /* %if-c-only */ b->grecs_dhcpd_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; /* %endif */ /* %if-c++-only */ /* %endif */ errno = oerrno; } /** Discard all buffered characters. On the next scan, YY_INPUT will be called. * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. * */ /* %if-c-only */ void grecs_dhcpd_flush_buffer (YY_BUFFER_STATE b ) /* %endif */ /* %if-c++-only */ /* %endif */ { if ( ! b ) return; b->grecs_dhcpd_n_chars = 0; /* We always need two end-of-buffer characters. The first causes * a transition to the end-of-buffer state. The second causes * a jam in that state. */ b->grecs_dhcpd_ch_buf[0] = YY_END_OF_BUFFER_CHAR; b->grecs_dhcpd_ch_buf[1] = YY_END_OF_BUFFER_CHAR; b->grecs_dhcpd_buf_pos = &b->grecs_dhcpd_ch_buf[0]; b->grecs_dhcpd_at_bol = 1; b->grecs_dhcpd_buffer_status = YY_BUFFER_NEW; if ( b == YY_CURRENT_BUFFER ) grecs_dhcpd_load_buffer_state( ); } /* %if-c-or-c++ */ /** Pushes the new state onto the stack. The new state becomes * the current state. This function will allocate the stack * if necessary. * @param new_buffer The new state. * */ /* %if-c-only */ void grecs_dhcpdpush_buffer_state (YY_BUFFER_STATE new_buffer ) /* %endif */ /* %if-c++-only */ /* %endif */ { if (new_buffer == NULL) return; grecs_dhcpdensure_buffer_stack(); /* This block is copied from grecs_dhcpd_switch_to_buffer. */ if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(grecs_dhcpd_c_buf_p) = (grecs_dhcpd_hold_char); YY_CURRENT_BUFFER_LVALUE->grecs_dhcpd_buf_pos = (grecs_dhcpd_c_buf_p); YY_CURRENT_BUFFER_LVALUE->grecs_dhcpd_n_chars = (grecs_dhcpd_n_chars); } /* Only push if top exists. Otherwise, replace top. */ if (YY_CURRENT_BUFFER) (grecs_dhcpd_buffer_stack_top)++; YY_CURRENT_BUFFER_LVALUE = new_buffer; /* copied from grecs_dhcpd_switch_to_buffer. */ grecs_dhcpd_load_buffer_state( ); (grecs_dhcpd_did_buffer_switch_on_eof) = 1; } /* %endif */ /* %if-c-or-c++ */ /** Removes and deletes the top of the stack, if present. * The next element becomes the new top. * */ /* %if-c-only */ void grecs_dhcpdpop_buffer_state (void) /* %endif */ /* %if-c++-only */ /* %endif */ { if (!YY_CURRENT_BUFFER) return; grecs_dhcpd_delete_buffer(YY_CURRENT_BUFFER ); YY_CURRENT_BUFFER_LVALUE = NULL; if ((grecs_dhcpd_buffer_stack_top) > 0) --(grecs_dhcpd_buffer_stack_top); if (YY_CURRENT_BUFFER) { grecs_dhcpd_load_buffer_state( ); (grecs_dhcpd_did_buffer_switch_on_eof) = 1; } } /* %endif */ /* %if-c-or-c++ */ /* Allocates the stack if it does not exist. * Guarantees space for at least one push. */ /* %if-c-only */ static void grecs_dhcpdensure_buffer_stack (void) /* %endif */ /* %if-c++-only */ /* %endif */ { grecs_dhcpd_size_t num_to_alloc; if (!(grecs_dhcpd_buffer_stack)) { /* First allocation is just for 2 elements, since we don't know if this * scanner will even need a stack. We use 2 instead of 1 to avoid an * immediate realloc on the next call. */ num_to_alloc = 1; (grecs_dhcpd_buffer_stack) = (struct grecs_dhcpd_buffer_state**)grecs_dhcpdalloc (num_to_alloc * sizeof(struct grecs_dhcpd_buffer_state*) ); if ( ! (grecs_dhcpd_buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in grecs_dhcpdensure_buffer_stack()" ); memset((grecs_dhcpd_buffer_stack), 0, num_to_alloc * sizeof(struct grecs_dhcpd_buffer_state*)); (grecs_dhcpd_buffer_stack_max) = num_to_alloc; (grecs_dhcpd_buffer_stack_top) = 0; return; } if ((grecs_dhcpd_buffer_stack_top) >= ((grecs_dhcpd_buffer_stack_max)) - 1){ /* Increase the buffer to prepare for a possible push. */ int grow_size = 8 /* arbitrary grow size */; num_to_alloc = (grecs_dhcpd_buffer_stack_max) + grow_size; (grecs_dhcpd_buffer_stack) = (struct grecs_dhcpd_buffer_state**)grecs_dhcpdrealloc ((grecs_dhcpd_buffer_stack), num_to_alloc * sizeof(struct grecs_dhcpd_buffer_state*) ); if ( ! (grecs_dhcpd_buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in grecs_dhcpdensure_buffer_stack()" ); /* zero only the new slots.*/ memset((grecs_dhcpd_buffer_stack) + (grecs_dhcpd_buffer_stack_max), 0, grow_size * sizeof(struct grecs_dhcpd_buffer_state*)); (grecs_dhcpd_buffer_stack_max) = num_to_alloc; } } /* %endif */ /* %if-c-only */ /** Setup the input buffer state to scan directly from a user-specified character buffer. * @param base the character buffer * @param size the size in bytes of the character buffer * * @return the newly allocated buffer state object. */ YY_BUFFER_STATE grecs_dhcpd_scan_buffer (char * base, grecs_dhcpd_size_t size ) { YY_BUFFER_STATE b; if ( size < 2 || base[size-2] != YY_END_OF_BUFFER_CHAR || base[size-1] != YY_END_OF_BUFFER_CHAR ) /* They forgot to leave room for the EOB's. */ return 0; b = (YY_BUFFER_STATE) grecs_dhcpdalloc(sizeof( struct grecs_dhcpd_buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in grecs_dhcpd_scan_buffer()" ); b->grecs_dhcpd_buf_size = size - 2; /* "- 2" to take care of EOB's */ b->grecs_dhcpd_buf_pos = b->grecs_dhcpd_ch_buf = base; b->grecs_dhcpd_is_our_buffer = 0; b->grecs_dhcpd_input_file = 0; b->grecs_dhcpd_n_chars = b->grecs_dhcpd_buf_size; b->grecs_dhcpd_is_interactive = 0; b->grecs_dhcpd_at_bol = 1; b->grecs_dhcpd_fill_buffer = 0; b->grecs_dhcpd_buffer_status = YY_BUFFER_NEW; grecs_dhcpd_switch_to_buffer(b ); return b; } /* %endif */ /* %if-c-only */ /** Setup the input buffer state to scan a string. The next call to grecs_dhcpdlex() will * scan from a @e copy of @a str. * @param grecs_dhcpdstr a NUL-terminated string to scan * * @return the newly allocated buffer state object. * @note If you want to scan bytes that may contain NUL values, then use * grecs_dhcpd_scan_bytes() instead. */ YY_BUFFER_STATE grecs_dhcpd_scan_string (grecs_dhcpdconst char * grecs_dhcpdstr ) { return grecs_dhcpd_scan_bytes(grecs_dhcpdstr,strlen(grecs_dhcpdstr) ); } /* %endif */ /* %if-c-only */ /** Setup the input buffer state to scan the given bytes. The next call to grecs_dhcpdlex() will * scan from a @e copy of @a bytes. * @param grecs_dhcpdbytes the byte buffer to scan * @param _grecs_dhcpdbytes_len the number of bytes in the buffer pointed to by @a bytes. * * @return the newly allocated buffer state object. */ YY_BUFFER_STATE grecs_dhcpd_scan_bytes (grecs_dhcpdconst char * grecs_dhcpdbytes, grecs_dhcpd_size_t _grecs_dhcpdbytes_len ) { YY_BUFFER_STATE b; char *buf; grecs_dhcpd_size_t n; int i; /* Get memory for full buffer, including space for trailing EOB's. */ n = _grecs_dhcpdbytes_len + 2; buf = (char *) grecs_dhcpdalloc(n ); if ( ! buf ) YY_FATAL_ERROR( "out of dynamic memory in grecs_dhcpd_scan_bytes()" ); for ( i = 0; i < _grecs_dhcpdbytes_len; ++i ) buf[i] = grecs_dhcpdbytes[i]; buf[_grecs_dhcpdbytes_len] = buf[_grecs_dhcpdbytes_len+1] = YY_END_OF_BUFFER_CHAR; b = grecs_dhcpd_scan_buffer(buf,n ); if ( ! b ) YY_FATAL_ERROR( "bad buffer in grecs_dhcpd_scan_bytes()" ); /* It's okay to grow etc. this buffer, and we should throw it * away when we're done. */ b->grecs_dhcpd_is_our_buffer = 1; return b; } /* %endif */ #ifndef YY_EXIT_FAILURE #define YY_EXIT_FAILURE 2 #endif /* %if-c-only */ static void grecs_dhcpd_fatal_error (grecs_dhcpdconst char* msg ) { (void) fprintf( stderr, "%s\n", msg ); exit( YY_EXIT_FAILURE ); } /* %endif */ /* %if-c++-only */ /* %endif */ /* Redefine grecs_dhcpdless() so it works in section 3 code. */ #undef grecs_dhcpdless #define grecs_dhcpdless(n) \ do \ { \ /* Undo effects of setting up grecs_dhcpdtext. */ \ int grecs_dhcpdless_macro_arg = (n); \ YY_LESS_LINENO(grecs_dhcpdless_macro_arg);\ grecs_dhcpdtext[grecs_dhcpdleng] = (grecs_dhcpd_hold_char); \ (grecs_dhcpd_c_buf_p) = grecs_dhcpdtext + grecs_dhcpdless_macro_arg; \ (grecs_dhcpd_hold_char) = *(grecs_dhcpd_c_buf_p); \ *(grecs_dhcpd_c_buf_p) = '\0'; \ grecs_dhcpdleng = grecs_dhcpdless_macro_arg; \ } \ while ( 0 ) /* Accessor methods (get/set functions) to struct members. */ /* %if-c-only */ /* %if-reentrant */ /* %endif */ /** Get the current line number. * */ int grecs_dhcpdget_lineno (void) { return grecs_dhcpdlineno; } /** Get the input stream. * */ FILE *grecs_dhcpdget_in (void) { return grecs_dhcpdin; } /** Get the output stream. * */ FILE *grecs_dhcpdget_out (void) { return grecs_dhcpdout; } /** Get the length of the current token. * */ grecs_dhcpd_size_t grecs_dhcpdget_leng (void) { return grecs_dhcpdleng; } /** Get the current token. * */ char *grecs_dhcpdget_text (void) { return grecs_dhcpdtext; } /* %if-reentrant */ /* %endif */ /** Set the current line number. * @param line_number * */ void grecs_dhcpdset_lineno (int line_number ) { grecs_dhcpdlineno = line_number; } /** Set the input stream. This does not discard the current * input buffer. * @param in_str A readable stream. * * @see grecs_dhcpd_switch_to_buffer */ void grecs_dhcpdset_in (FILE * in_str ) { grecs_dhcpdin = in_str ; } void grecs_dhcpdset_out (FILE * out_str ) { grecs_dhcpdout = out_str ; } int grecs_dhcpdget_debug (void) { return grecs_dhcpd_flex_debug; } void grecs_dhcpdset_debug (int bdebug ) { grecs_dhcpd_flex_debug = bdebug ; } /* %endif */ /* %if-reentrant */ /* %if-bison-bridge */ /* %endif */ /* %endif if-c-only */ /* %if-c-only */ static int grecs_dhcpd_init_globals (void) { /* Initialization is the same as for the non-reentrant scanner. * This function is called from grecs_dhcpdlex_destroy(), so don't allocate here. */ (grecs_dhcpd_buffer_stack) = 0; (grecs_dhcpd_buffer_stack_top) = 0; (grecs_dhcpd_buffer_stack_max) = 0; (grecs_dhcpd_c_buf_p) = (char *) 0; (grecs_dhcpd_init) = 0; (grecs_dhcpd_start) = 0; /* Defined in main.c */ #ifdef YY_STDINIT grecs_dhcpdin = stdin; grecs_dhcpdout = stdout; #else grecs_dhcpdin = (FILE *) 0; grecs_dhcpdout = (FILE *) 0; #endif /* For future reference: Set errno on error, since we are called by * grecs_dhcpdlex_init() */ return 0; } /* %endif */ /* %if-c-only SNIP! this currently causes conflicts with the c++ scanner */ /* grecs_dhcpdlex_destroy is for both reentrant and non-reentrant scanners. */ int grecs_dhcpdlex_destroy (void) { /* Pop the buffer stack, destroying each element. */ while(YY_CURRENT_BUFFER){ grecs_dhcpd_delete_buffer(YY_CURRENT_BUFFER ); YY_CURRENT_BUFFER_LVALUE = NULL; grecs_dhcpdpop_buffer_state(); } /* Destroy the stack itself. */ grecs_dhcpdfree((grecs_dhcpd_buffer_stack) ); (grecs_dhcpd_buffer_stack) = NULL; /* Reset the globals. This is important in a non-reentrant scanner so the next time * grecs_dhcpdlex() is called, initialization will occur. */ grecs_dhcpd_init_globals( ); /* %if-reentrant */ /* %endif */ return 0; } /* %endif */ /* * Internal utility routines. */ #ifndef grecs_dhcpdtext_ptr static void grecs_dhcpd_flex_strncpy (char* s1, grecs_dhcpdconst char * s2, int n ) { register int i; for ( i = 0; i < n; ++i ) s1[i] = s2[i]; } #endif #ifdef YY_NEED_STRLEN static int grecs_dhcpd_flex_strlen (grecs_dhcpdconst char * s ) { register int n; for ( n = 0; s[n]; ++n ) ; return n; } #endif void *grecs_dhcpdalloc (grecs_dhcpd_size_t size ) { return (void *) malloc( size ); } void *grecs_dhcpdrealloc (void * ptr, grecs_dhcpd_size_t size ) { /* The cast to (char *) in the following accommodates both * implementations that use char* generic pointers, and those * that use void* generic pointers. It works with the latter * because both ANSI C and C++ allow castless assignment from * any pointer type to void*, and deal with argument conversions * as though doing an assignment. */ return (void *) realloc( (char *) ptr, size ); } void grecs_dhcpdfree (void * ptr ) { free( (char *) ptr ); /* see grecs_dhcpdrealloc() for (char *) cast */ } /* %if-tables-serialization definitions */ /* %define-grecs_dhcpdtables The name for this specific scanner's tables. */ #define YYTABLES_NAME "grecs_dhcpdtables" /* %endif */ /* %ok-for-header */ #line 171 "dhcpd-lex.l" void grecs_dhcpd_begin_bool(void) { BEGIN(BOOL); } void grecs_dhcpd_begin_expr(void) { BEGIN(EXPR); } struct dhcpd_input_context { ino_t i_node; dev_t i_dev; struct grecs_locus_point point; grecs_locus_t locus; /* Current input location */ YY_BUFFER_STATE state; FILE *input; }; static struct grecs_list *input_stack; static ino_t i_node; static dev_t i_dev; static void free_context(void *ptr) { free(ptr); } static int cmp_context(const void *a, const void *b) { struct dhcpd_input_context const *ac = a; struct dhcpd_input_context const *bc = b; return !(ac->i_node == bc->i_node && ac->i_dev == bc->i_dev); } static int _push_context(const char *name, ino_t i_node, dev_t i_dev, grecs_locus_t *loc) { struct dhcpd_input_context ctx, *pctx; if (!input_stack) { input_stack = grecs_list_create(); input_stack->free_entry = free_context; input_stack->cmp = cmp_context; } else { ctx.i_dev = i_dev; ctx.i_node = i_node; pctx = grecs_list_locate(input_stack, &ctx); if (pctx) { grecs_error(&grecs_dhcpdlloc, 0, _("%s has already been included"), name); grecs_error(&pctx->locus, 0, _("this is where the previous inclusion occurred")); return 1; } pctx = grecs_malloc(sizeof(*pctx)); pctx->i_node = i_node; pctx->i_dev = i_dev; if (loc) pctx->locus = *loc; else memset(&pctx->locus, 0, sizeof(pctx->locus)); /* FIXME */ pctx->point = grecs_current_locus_point; pctx->state = YY_CURRENT_BUFFER; pctx->input = grecs_dhcpdin; grecs_list_push(input_stack, pctx); } return 0; } static int _pop_context() { struct dhcpd_input_context *pctx; if (!grecs_dhcpdin) return 1; if (grecs_preprocessor) pclose(grecs_dhcpdin); else fclose(grecs_dhcpdin); pctx = grecs_list_pop(input_stack); if (!pctx) { grecs_dhcpdin = NULL; return 1; } i_node = pctx->i_node; i_dev = pctx->i_dev; grecs_current_locus_point = pctx->point; grecs_dhcpdin = pctx->input; grecs_dhcpd_delete_buffer(YY_CURRENT_BUFFER); grecs_dhcpd_switch_to_buffer(pctx->state); grecs_free(pctx); return 0; } int grecs_dhcpdwrap() { return _pop_context(); } int grecs_dhcpd_new_source(const char *name, grecs_locus_t *loc) { struct stat st; FILE *fp; if (access(name, F_OK)) { int ec = errno; char *tmp = grecs_find_include_file(name, 0); if (!tmp) { grecs_error(loc, ec, _("cannot open `%s'"), name); return 1; } name = grecs_install_text(tmp); free(tmp); } fp = fopen(name, "r"); if (!fp) { grecs_error(loc, errno, _("cannot open `%s'"), name); return 1; } if (fstat(fileno(fp), &st)) { grecs_error(loc, errno, _("can't state %s"), name); fclose(fp); return 1; } if (grecs_preprocessor) { char *cmd = NULL; size_t size = 0; fclose(fp); if (grecs_asprintf(&cmd, &size, "%s \"%s\"", grecs_preprocessor, name)) grecs_alloc_die(); fp = popen(cmd, "r"); if (!fp) { grecs_error(loc, errno, _("cannot open `%s'"), cmd); grecs_free(cmd); return 1; } grecs_free(cmd); } if (_push_context(name, st.st_ino, st.st_dev, loc)) { return 1; } i_node = st.st_ino; i_dev = st.st_dev; grecs_dhcpdin = fp; grecs_dhcpd_switch_to_buffer(grecs_dhcpd_create_buffer(grecs_dhcpdin,YY_BUF_SIZE)); grecs_current_locus_point.file = grecs_install_text(name); grecs_current_locus_point.line = 1; grecs_current_locus_point.col = 0; return 0; } void grecs_dhcpd_close_sources() { while (!_pop_context()) ; grecs_list_free(input_stack); input_stack = NULL; } �������������������������������������������������������direvent-5.2/grecs/src/json-lex.c�������������������������������������������������������������������0000644�0001750�0001750�00000201343�13511404036�016763� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#line 4 "json-lex.l" #ifdef HAVE_CONFIG_H # include <config.h> #endif #line 9 "json-lex.c" #define YY_INT_ALIGNED short int /* A lexical scanner generated by flex */ /* %not-for-header */ /* %if-c-only */ /* %if-not-reentrant */ /* %endif */ /* %endif */ /* %ok-for-header */ #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 6 #define YY_FLEX_SUBMINOR_VERSION 0 #if YY_FLEX_SUBMINOR_VERSION > 0 #define FLEX_BETA #endif /* %if-c++-only */ /* %endif */ /* %if-c-only */ /* %endif */ /* %if-c-only */ /* %endif */ /* First, we deal with platform-specific or compiler-specific issues. */ /* begin standard C headers. */ /* %if-c-only */ #include <stdio.h> #include <string.h> #include <errno.h> #include <stdlib.h> /* %endif */ /* %if-tables-serialization */ /* %endif */ /* end standard C headers. */ /* %if-c-or-c++ */ /* flex integer type definitions */ #ifndef FLEXINT_H #define FLEXINT_H /* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */ #if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, * if you want the limit (max/min) macros for int types. */ #ifndef __STDC_LIMIT_MACROS #define __STDC_LIMIT_MACROS 1 #endif #include <inttypes.h> typedef int8_t flex_int8_t; typedef uint8_t flex_uint8_t; typedef int16_t flex_int16_t; typedef uint16_t flex_uint16_t; typedef int32_t flex_int32_t; typedef uint32_t flex_uint32_t; #else typedef signed char flex_int8_t; typedef short int flex_int16_t; typedef int flex_int32_t; typedef unsigned char flex_uint8_t; typedef unsigned short int flex_uint16_t; typedef unsigned int flex_uint32_t; /* Limits of integral types. */ #ifndef INT8_MIN #define INT8_MIN (-128) #endif #ifndef INT16_MIN #define INT16_MIN (-32767-1) #endif #ifndef INT32_MIN #define INT32_MIN (-2147483647-1) #endif #ifndef INT8_MAX #define INT8_MAX (127) #endif #ifndef INT16_MAX #define INT16_MAX (32767) #endif #ifndef INT32_MAX #define INT32_MAX (2147483647) #endif #ifndef UINT8_MAX #define UINT8_MAX (255U) #endif #ifndef UINT16_MAX #define UINT16_MAX (65535U) #endif #ifndef UINT32_MAX #define UINT32_MAX (4294967295U) #endif #endif /* ! C99 */ #endif /* ! FLEXINT_H */ /* %endif */ /* %if-c++-only */ /* %endif */ #ifdef __cplusplus /* The "const" storage-class-modifier is valid. */ #define YY_USE_CONST #else /* ! __cplusplus */ /* C99 requires __STDC__ to be defined as 1. */ #if defined (__STDC__) #define YY_USE_CONST #endif /* defined (__STDC__) */ #endif /* ! __cplusplus */ #ifdef YY_USE_CONST #define grecs_json_const const #else #define grecs_json_const #endif /* %not-for-header */ /* Returned upon end-of-file. */ #define YY_NULL 0 /* %ok-for-header */ /* %not-for-header */ /* Promotes a possibly negative, possibly signed char to an unsigned * integer for use as an array index. If the signed char is negative, * we want to instead treat it as an 8-bit unsigned char, hence the * double cast. */ #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) /* %ok-for-header */ /* %if-reentrant */ /* %endif */ /* %if-not-reentrant */ /* %endif */ /* Enter a start condition. This macro really ought to take a parameter, * but we do it the disgusting crufty way forced on us by the ()-less * definition of BEGIN. */ #define BEGIN (grecs_json__start) = 1 + 2 * /* Translate the current start state into a value that can be later handed * to BEGIN to return to the state. The YYSTATE alias is for lex * compatibility. */ #define YY_START (((grecs_json__start) - 1) / 2) #define YYSTATE YY_START /* Action number for EOF rule of a given start state. */ #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) /* Special action meaning "start processing a new file". */ #define YY_NEW_FILE grecs_json_restart(grecs_json_in ) #define YY_END_OF_BUFFER_CHAR 0 /* Size of default input buffer. */ #ifndef YY_BUF_SIZE #ifdef __ia64__ /* On IA-64, the buffer size is 16k, not 8k. * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case. * Ditto for the __ia64__ case accordingly. */ #define YY_BUF_SIZE 32768 #else #define YY_BUF_SIZE 16384 #endif /* __ia64__ */ #endif /* The state buf must be large enough to hold one state per character in the main buffer. */ #define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(grecs_json__state_type)) #ifndef YY_TYPEDEF_YY_BUFFER_STATE #define YY_TYPEDEF_YY_BUFFER_STATE typedef struct grecs_json__buffer_state *YY_BUFFER_STATE; #endif #ifndef YY_TYPEDEF_YY_SIZE_T #define YY_TYPEDEF_YY_SIZE_T typedef size_t grecs_json__size_t; #endif /* %if-not-reentrant */ extern grecs_json__size_t grecs_json_leng; /* %endif */ /* %if-c-only */ /* %if-not-reentrant */ extern FILE *grecs_json_in, *grecs_json_out; /* %endif */ /* %endif */ #define EOB_ACT_CONTINUE_SCAN 0 #define EOB_ACT_END_OF_FILE 1 #define EOB_ACT_LAST_MATCH 2 #define YY_LESS_LINENO(n) #define YY_LINENO_REWIND_TO(ptr) /* Return all but the first "n" matched characters back to the input stream. */ #define grecs_json_less(n) \ do \ { \ /* Undo effects of setting up grecs_json_text. */ \ int grecs_json_less_macro_arg = (n); \ YY_LESS_LINENO(grecs_json_less_macro_arg);\ *grecs_json__cp = (grecs_json__hold_char); \ YY_RESTORE_YY_MORE_OFFSET \ (grecs_json__c_buf_p) = grecs_json__cp = grecs_json__bp + grecs_json_less_macro_arg - YY_MORE_ADJ; \ YY_DO_BEFORE_ACTION; /* set up grecs_json_text again */ \ } \ while ( 0 ) #define unput(c) grecs_json_unput( c, (grecs_json_text_ptr) ) #ifndef YY_STRUCT_YY_BUFFER_STATE #define YY_STRUCT_YY_BUFFER_STATE struct grecs_json__buffer_state { /* %if-c-only */ FILE *grecs_json__input_file; /* %endif */ /* %if-c++-only */ /* %endif */ char *grecs_json__ch_buf; /* input buffer */ char *grecs_json__buf_pos; /* current position in input buffer */ /* Size of input buffer in bytes, not including room for EOB * characters. */ grecs_json__size_t grecs_json__buf_size; /* Number of characters read into grecs_json__ch_buf, not including EOB * characters. */ grecs_json__size_t grecs_json__n_chars; /* Whether we "own" the buffer - i.e., we know we created it, * and can realloc() it to grow it, and should free() it to * delete it. */ int grecs_json__is_our_buffer; /* Whether this is an "interactive" input source; if so, and * if we're using stdio for input, then we want to use getc() * instead of fread(), to make sure we stop fetching input after * each newline. */ int grecs_json__is_interactive; /* Whether we're considered to be at the beginning of a line. * If so, '^' rules will be active on the next match, otherwise * not. */ int grecs_json__at_bol; int grecs_json__bs_lineno; /**< The line count. */ int grecs_json__bs_column; /**< The column count. */ /* Whether to try to fill the input buffer when we reach the * end of it. */ int grecs_json__fill_buffer; int grecs_json__buffer_status; #define YY_BUFFER_NEW 0 #define YY_BUFFER_NORMAL 1 /* When an EOF's been seen but there's still some text to process * then we mark the buffer as YY_EOF_PENDING, to indicate that we * shouldn't try reading from the input source any more. We might * still have a bunch of tokens to match, though, because of * possible backing-up. * * When we actually see the EOF, we change the status to "new" * (via grecs_json_restart()), so that the user can continue scanning by * just pointing grecs_json_in at a new input file. */ #define YY_BUFFER_EOF_PENDING 2 }; #endif /* !YY_STRUCT_YY_BUFFER_STATE */ /* %if-c-only Standard (non-C++) definition */ /* %not-for-header */ /* %if-not-reentrant */ /* Stack of input buffers. */ static size_t grecs_json__buffer_stack_top = 0; /**< index of top of stack. */ static size_t grecs_json__buffer_stack_max = 0; /**< capacity of stack. */ static YY_BUFFER_STATE * grecs_json__buffer_stack = 0; /**< Stack as an array. */ /* %endif */ /* %ok-for-header */ /* %endif */ /* We provide macros for accessing buffer states in case in the * future we want to put the buffer states in a more general * "scanner state". * * Returns the top of the stack, or NULL. */ #define YY_CURRENT_BUFFER ( (grecs_json__buffer_stack) \ ? (grecs_json__buffer_stack)[(grecs_json__buffer_stack_top)] \ : NULL) /* Same as previous macro, but useful when we know that the buffer stack is not * NULL or when we need an lvalue. For internal use only. */ #define YY_CURRENT_BUFFER_LVALUE (grecs_json__buffer_stack)[(grecs_json__buffer_stack_top)] /* %if-c-only Standard (non-C++) definition */ /* %if-not-reentrant */ /* %not-for-header */ /* grecs_json__hold_char holds the character lost when grecs_json_text is formed. */ static char grecs_json__hold_char; static grecs_json__size_t grecs_json__n_chars; /* number of characters read into grecs_json__ch_buf */ grecs_json__size_t grecs_json_leng; /* Points to current character in buffer. */ static char *grecs_json__c_buf_p = (char *) 0; static int grecs_json__init = 0; /* whether we need to initialize */ static int grecs_json__start = 0; /* start state number */ /* Flag which is used to allow grecs_json_wrap()'s to do buffer switches * instead of setting up a fresh grecs_json_in. A bit of a hack ... */ static int grecs_json__did_buffer_switch_on_eof; /* %ok-for-header */ /* %endif */ void grecs_json_restart (FILE *input_file ); void grecs_json__switch_to_buffer (YY_BUFFER_STATE new_buffer ); YY_BUFFER_STATE grecs_json__create_buffer (FILE *file,int size ); void grecs_json__delete_buffer (YY_BUFFER_STATE b ); void grecs_json__flush_buffer (YY_BUFFER_STATE b ); void grecs_json_push_buffer_state (YY_BUFFER_STATE new_buffer ); void grecs_json_pop_buffer_state (void ); static void grecs_json_ensure_buffer_stack (void ); static void grecs_json__load_buffer_state (void ); static void grecs_json__init_buffer (YY_BUFFER_STATE b,FILE *file ); #define YY_FLUSH_BUFFER grecs_json__flush_buffer(YY_CURRENT_BUFFER ) YY_BUFFER_STATE grecs_json__scan_buffer (char *base,grecs_json__size_t size ); YY_BUFFER_STATE grecs_json__scan_string (grecs_json_const char *grecs_json__str ); YY_BUFFER_STATE grecs_json__scan_bytes (grecs_json_const char *bytes,grecs_json__size_t len ); /* %endif */ void *grecs_json_alloc (grecs_json__size_t ); void *grecs_json_realloc (void *,grecs_json__size_t ); void grecs_json_free (void * ); #define grecs_json__new_buffer grecs_json__create_buffer #define grecs_json__set_interactive(is_interactive) \ { \ if ( ! YY_CURRENT_BUFFER ){ \ grecs_json_ensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ grecs_json__create_buffer(grecs_json_in,YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->grecs_json__is_interactive = is_interactive; \ } #define grecs_json__set_bol(at_bol) \ { \ if ( ! YY_CURRENT_BUFFER ){\ grecs_json_ensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ grecs_json__create_buffer(grecs_json_in,YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->grecs_json__at_bol = at_bol; \ } #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->grecs_json__at_bol) /* %% [1.0] grecs_json_text/grecs_json_in/grecs_json_out/grecs_json__state_type/grecs_json_lineno etc. def's & init go here */ /* Begin user sect3 */ #define FLEX_DEBUG typedef unsigned char YY_CHAR; FILE *grecs_json_in = (FILE *) 0, *grecs_json_out = (FILE *) 0; typedef int grecs_json__state_type; extern int grecs_json_lineno; int grecs_json_lineno = 1; extern char *grecs_json_text; #ifdef grecs_json_text_ptr #undef grecs_json_text_ptr #endif #define grecs_json_text_ptr grecs_json_text /* %% [1.5] DFA */ /* %if-c-only Standard (non-C++) definition */ static grecs_json__state_type grecs_json__get_previous_state (void ); static grecs_json__state_type grecs_json__try_NUL_trans (grecs_json__state_type current_state ); static int grecs_json__get_next_buffer (void ); #if defined(__GNUC__) && __GNUC__ >= 3 __attribute__((__noreturn__)) #endif static void grecs_json__fatal_error (grecs_json_const char msg[] ); /* %endif */ /* Done after the current pattern has been matched and before the * corresponding action - sets up grecs_json_text. */ #define YY_DO_BEFORE_ACTION \ (grecs_json_text_ptr) = grecs_json__bp; \ /* %% [2.0] code to fiddle grecs_json_text and grecs_json_leng for grecs_json_more() goes here \ */\ grecs_json_leng = (size_t) (grecs_json__cp - grecs_json__bp); \ (grecs_json__hold_char) = *grecs_json__cp; \ *grecs_json__cp = '\0'; \ /* %% [3.0] code to copy grecs_json_text_ptr to grecs_json_text[] goes here, if %array \ */\ (grecs_json__c_buf_p) = grecs_json__cp; /* %% [4.0] data tables for the DFA and the user's section 1 definitions go here */ #define YY_NUM_RULES 15 #define YY_END_OF_BUFFER 16 /* This struct is not used in this scanner, but its presence is necessary. */ struct grecs_json__trans_info { flex_int32_t grecs_json__verify; flex_int32_t grecs_json__nxt; }; static grecs_json_const flex_int16_t grecs_json__accept[61] = { 0, 12, 12, 0, 0, 16, 14, 12, 13, 14, 11, 14, 1, 14, 14, 14, 15, 5, 15, 12, 0, 2, 0, 1, 0, 1, 0, 0, 0, 0, 0, 5, 0, 7, 7, 4, 4, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 8, 9, 0, 0, 1, 10, 6, 3, 0 } ; static grecs_json_const YY_CHAR grecs_json__ec[256] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 5, 6, 7, 1, 1, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 1, 1, 1, 1, 1, 1, 10, 10, 10, 10, 11, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 13, 14, 1, 1, 1, 15, 10, 10, 10, 16, 17, 1, 1, 1, 1, 1, 18, 1, 19, 1, 1, 1, 20, 21, 22, 23, 1, 1, 1, 1, 1, 24, 1, 25, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; static grecs_json_const YY_CHAR grecs_json__meta[26] = { 0, 1, 1, 2, 1, 1, 1, 1, 3, 1, 3, 3, 1, 1, 1, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1 } ; static grecs_json_const flex_uint16_t grecs_json__base[73] = { 0, 0, 0, 22, 23, 110, 131, 107, 131, 24, 131, 100, 22, 83, 70, 72, 27, 131, 33, 80, 38, 131, 44, 54, 73, 55, 67, 62, 59, 50, 43, 131, 68, 131, 0, 131, 0, 78, 79, 61, 80, 47, 49, 48, 0, 0, 89, 94, 95, 50, 96, 41, 131, 131, 0, 0, 45, 131, 131, 131, 131, 112, 115, 118, 121, 124, 127, 43, 42, 36, 31, 29, 26 } ; static grecs_json_const flex_int16_t grecs_json__def[73] = { 0, 60, 1, 61, 61, 60, 60, 60, 60, 62, 60, 60, 63, 60, 60, 60, 64, 60, 65, 60, 62, 60, 66, 63, 60, 63, 60, 60, 60, 60, 64, 60, 65, 60, 67, 60, 68, 60, 63, 60, 60, 60, 60, 60, 69, 70, 60, 60, 63, 60, 60, 60, 60, 60, 71, 72, 60, 60, 60, 60, 0, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60 } ; static grecs_json_const flex_uint16_t grecs_json__nxt[157] = { 0, 6, 7, 8, 9, 6, 10, 11, 12, 10, 6, 6, 10, 6, 10, 6, 6, 13, 6, 14, 6, 6, 15, 6, 10, 10, 17, 17, 21, 59, 25, 31, 58, 26, 55, 18, 18, 22, 26, 54, 32, 34, 21, 34, 34, 45, 44, 31, 34, 34, 34, 22, 36, 56, 36, 36, 32, 57, 56, 36, 36, 36, 25, 38, 53, 26, 26, 52, 51, 49, 26, 26, 39, 43, 39, 40, 34, 42, 34, 34, 41, 37, 19, 34, 34, 34, 46, 48, 50, 47, 26, 47, 29, 28, 47, 26, 47, 46, 27, 39, 47, 39, 49, 48, 50, 47, 26, 47, 23, 19, 60, 26, 47, 16, 16, 16, 20, 20, 20, 24, 60, 24, 30, 30, 30, 33, 60, 33, 35, 60, 35, 5, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60 } ; static grecs_json_const flex_int16_t grecs_json__chk[157] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 4, 9, 72, 12, 16, 71, 12, 70, 3, 4, 9, 12, 69, 16, 18, 20, 18, 18, 68, 67, 30, 18, 18, 18, 20, 22, 56, 22, 22, 30, 51, 49, 22, 22, 22, 23, 25, 43, 23, 25, 42, 41, 39, 23, 25, 26, 29, 26, 26, 32, 28, 32, 32, 27, 24, 19, 32, 32, 32, 37, 38, 40, 37, 38, 40, 15, 14, 37, 38, 40, 46, 13, 47, 46, 47, 47, 48, 50, 46, 48, 50, 11, 7, 5, 48, 50, 61, 61, 61, 62, 62, 62, 63, 0, 63, 64, 64, 64, 65, 0, 65, 66, 0, 66, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60 } ; static grecs_json__state_type grecs_json__last_accepting_state; static char *grecs_json__last_accepting_cpos; extern int grecs_json__flex_debug; int grecs_json__flex_debug = 1; static grecs_json_const flex_int16_t grecs_json__rule_linenum[15] = { 0, 169, 173, 177, 182, 192, 197, 201, 210, 211, 212, 213, 214, 215, 216 } ; /* The intent behind this definition is that it'll catch * any uses of REJECT which flex missed. */ #define REJECT reject_used_but_not_detected #define grecs_json_more() grecs_json_more_used_but_not_detected #define YY_MORE_ADJ 0 #define YY_RESTORE_YY_MORE_OFFSET char *grecs_json_text; #line 1 "json-lex.l" #define YY_NO_INPUT 1 #line 9 "json-lex.l" /* This file is part of Grecs. Copyright (C) 2012-2016 Sergey Poznyakoff. Grecs 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. Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. */ #include "grecs.h" #include "json-gram.h" #include "grecs/json.h" static char const *input_ptr; static size_t input_size; struct grecs_locus_point json_current_locus_point; /* Input location */ char const *json_err_diag; struct grecs_locus json_err_locus; #undef YY_INPUT #define YY_INPUT(buf,result,max_size) \ do { \ size_t n = (max_size > input_size) ? input_size : max_size; \ if (n) { \ memcpy(buf, input_ptr, n); \ input_ptr += n; \ input_size -= n; \ } \ result = n; \ } while(0) #define YY_USER_ACTION do { \ if (YYSTATE == 0) { \ grecs_json_lloc.beg = json_current_locus_point; \ grecs_json_lloc.beg.col++; \ } \ json_current_locus_point.col += grecs_json_leng; \ grecs_json_lloc.end = json_current_locus_point; \ } while (0); void jsonlex_diag(const char *s) { if (!json_err_diag) { json_err_diag = s; json_err_locus = grecs_json_lloc; } } static int utf8_wctomb(char *u) { unsigned int wc = strtoul(u, NULL, 16); int count; char r[6]; if (wc < 0x80) count = 1; else if (wc < 0x800) count = 2; else if (wc < 0x10000) count = 3; else if (wc < 0x200000) count = 4; else if (wc < 0x4000000) count = 5; else if (wc <= 0x7fffffff) count = 6; else return -1; switch (count) { /* Note: code falls through cases! */ case 6: r[5] = 0x80 | (wc & 0x3f); wc = wc >> 6; wc |= 0x4000000; case 5: r[4] = 0x80 | (wc & 0x3f); wc = wc >> 6; wc |= 0x200000; case 4: r[3] = 0x80 | (wc & 0x3f); wc = wc >> 6; wc |= 0x10000; case 3: r[2] = 0x80 | (wc & 0x3f); wc = wc >> 6; wc |= 0x800; case 2: r[1] = 0x80 | (wc & 0x3f); wc = wc >> 6; wc |= 0xc0; case 1: r[0] = wc; } grecs_line_acc_grow(r, count); return count; } int json_unescape(char c, char *o) { static char transtab[] = "\\\\\"\"b\bf\fn\nr\rt\t"; char *p; for (p = transtab; *p; p += 2) { if (p[0] == c) { *o = p[1]; return 0; } } return -1; } #define YY_SKIP_YYWRAP 1 static int grecs_json_wrap() { return 1; } static struct grecs_txtacc *json_line_acc; static void json_line_begin() { if (!json_line_acc) json_line_acc = grecs_txtacc_create(); } static char * json_line_finish() { if (json_line_acc) { char nil = 0; grecs_txtacc_grow(json_line_acc, &nil, 1); return grecs_txtacc_finish(json_line_acc, 1); } return NULL; } static void json_line_grow(char const *text, size_t len) { grecs_txtacc_grow(json_line_acc, text, len); } #line 774 "json-lex.c" #define INITIAL 0 #define STR 1 #ifndef YY_NO_UNISTD_H /* Special case for "unistd.h", since it is non-ANSI. We include it way * down here because we want the user's section 1 to have been scanned first. * The user has a chance to override it with an option. */ /* %if-c-only */ #include <unistd.h> /* %endif */ /* %if-c++-only */ /* %endif */ #endif #ifndef YY_EXTRA_TYPE #define YY_EXTRA_TYPE void * #endif /* %if-c-only Reentrant structure and macros (non-C++). */ /* %if-reentrant */ /* %if-c-only */ static int grecs_json__init_globals (void ); /* %endif */ /* %if-reentrant */ /* %endif */ /* %endif End reentrant structures and macros. */ /* Accessor methods to globals. These are made visible to non-reentrant scanners for convenience. */ int grecs_json_lex_destroy (void ); int grecs_json_get_debug (void ); void grecs_json_set_debug (int debug_flag ); YY_EXTRA_TYPE grecs_json_get_extra (void ); void grecs_json_set_extra (YY_EXTRA_TYPE user_defined ); FILE *grecs_json_get_in (void ); void grecs_json_set_in (FILE * _in_str ); FILE *grecs_json_get_out (void ); void grecs_json_set_out (FILE * _out_str ); grecs_json__size_t grecs_json_get_leng (void ); char *grecs_json_get_text (void ); int grecs_json_get_lineno (void ); void grecs_json_set_lineno (int _line_number ); /* %if-bison-bridge */ /* %endif */ /* Macros after this point can all be overridden by user definitions in * section 1. */ #ifndef YY_SKIP_YYWRAP #ifdef __cplusplus extern "C" int grecs_json_wrap (void ); #else extern int grecs_json_wrap (void ); #endif #endif /* %not-for-header */ #ifndef YY_NO_UNPUT #endif /* %ok-for-header */ /* %endif */ #ifndef grecs_json_text_ptr static void grecs_json__flex_strncpy (char *,grecs_json_const char *,int ); #endif #ifdef YY_NEED_STRLEN static int grecs_json__flex_strlen (grecs_json_const char * ); #endif #ifndef YY_NO_INPUT /* %if-c-only Standard (non-C++) definition */ /* %not-for-header */ #ifdef __cplusplus static int grecs_json_input (void ); #else static int input (void ); #endif /* %ok-for-header */ /* %endif */ #endif /* %if-c-only */ /* %endif */ /* Amount of stuff to slurp up with each read. */ #ifndef YY_READ_BUF_SIZE #ifdef __ia64__ /* On IA-64, the buffer size is 16k, not 8k */ #define YY_READ_BUF_SIZE 16384 #else #define YY_READ_BUF_SIZE 8192 #endif /* __ia64__ */ #endif /* Copy whatever the last rule matched to the standard output. */ #ifndef ECHO /* %if-c-only Standard (non-C++) definition */ /* This used to be an fputs(), but since the string might contain NUL's, * we now use fwrite(). */ #define ECHO do { if (fwrite( grecs_json_text, grecs_json_leng, 1, grecs_json_out )) {} } while (0) /* %endif */ /* %if-c++-only C++ definition */ /* %endif */ #endif /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, * is returned in "result". */ #ifndef YY_INPUT #define YY_INPUT(buf,result,max_size) \ /* %% [5.0] fread()/read() definition of YY_INPUT goes here unless we're doing C++ \ */\ if ( YY_CURRENT_BUFFER_LVALUE->grecs_json__is_interactive ) \ { \ int c = '*'; \ size_t n; \ for ( n = 0; n < max_size && \ (c = getc( grecs_json_in )) != EOF && c != '\n'; ++n ) \ buf[n] = (char) c; \ if ( c == '\n' ) \ buf[n++] = (char) c; \ if ( c == EOF && ferror( grecs_json_in ) ) \ YY_FATAL_ERROR( "input in flex scanner failed" ); \ result = n; \ } \ else \ { \ errno=0; \ while ( (result = fread(buf, 1, max_size, grecs_json_in))==0 && ferror(grecs_json_in)) \ { \ if( errno != EINTR) \ { \ YY_FATAL_ERROR( "input in flex scanner failed" ); \ break; \ } \ errno=0; \ clearerr(grecs_json_in); \ } \ }\ \ /* %if-c++-only C++ definition \ */\ /* %endif */ #endif /* No semi-colon after return; correct usage is to write "grecs_json_terminate();" - * we don't want an extra ';' after the "return" because that will cause * some compilers to complain about unreachable statements. */ #ifndef grecs_json_terminate #define grecs_json_terminate() return YY_NULL #endif /* Number of entries by which start-condition stack grows. */ #ifndef YY_START_STACK_INCR #define YY_START_STACK_INCR 25 #endif /* Report a fatal error. */ #ifndef YY_FATAL_ERROR /* %if-c-only */ #define YY_FATAL_ERROR(msg) grecs_json__fatal_error( msg ) /* %endif */ /* %if-c++-only */ /* %endif */ #endif /* %if-tables-serialization structures and prototypes */ /* %not-for-header */ /* %ok-for-header */ /* %not-for-header */ /* %tables-grecs_json_dmap generated elements */ /* %endif */ /* end tables serialization structures and prototypes */ /* %ok-for-header */ /* Default declaration of generated scanner - a define so the user can * easily add parameters. */ #ifndef YY_DECL #define YY_DECL_IS_OURS 1 /* %if-c-only Standard (non-C++) definition */ extern int grecs_json_lex (void); #define YY_DECL int grecs_json_lex (void) /* %endif */ /* %if-c++-only C++ definition */ /* %endif */ #endif /* !YY_DECL */ /* Code executed at the beginning of each rule, after grecs_json_text and grecs_json_leng * have been set up. */ #ifndef YY_USER_ACTION #define YY_USER_ACTION #endif /* Code executed at the end of each rule. */ #ifndef YY_BREAK #define YY_BREAK /*LINTED*/break; #endif /* %% [6.0] YY_RULE_SETUP definition goes here */ #define YY_RULE_SETUP \ YY_USER_ACTION /* %not-for-header */ /** The main scanner function which does all the work. */ YY_DECL { grecs_json__state_type grecs_json__current_state; char *grecs_json__cp, *grecs_json__bp; int grecs_json__act; if ( !(grecs_json__init) ) { (grecs_json__init) = 1; #ifdef YY_USER_INIT YY_USER_INIT; #endif if ( ! (grecs_json__start) ) (grecs_json__start) = 1; /* first start state */ if ( ! grecs_json_in ) /* %if-c-only */ grecs_json_in = stdin; /* %endif */ /* %if-c++-only */ /* %endif */ if ( ! grecs_json_out ) /* %if-c-only */ grecs_json_out = stdout; /* %endif */ /* %if-c++-only */ /* %endif */ if ( ! YY_CURRENT_BUFFER ) { grecs_json_ensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = grecs_json__create_buffer(grecs_json_in,YY_BUF_SIZE ); } grecs_json__load_buffer_state( ); } { /* %% [7.0] user's declarations go here */ #line 168 "json-lex.l" #line 1060 "json-lex.c" while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { /* %% [8.0] grecs_json_more()-related code goes here */ grecs_json__cp = (grecs_json__c_buf_p); /* Support of grecs_json_text. */ *grecs_json__cp = (grecs_json__hold_char); /* grecs_json__bp points to the position in grecs_json__ch_buf of the start of * the current run. */ grecs_json__bp = grecs_json__cp; /* %% [9.0] code to set up and find next match goes here */ grecs_json__current_state = (grecs_json__start); grecs_json__match: do { YY_CHAR grecs_json__c = grecs_json__ec[YY_SC_TO_UI(*grecs_json__cp)] ; if ( grecs_json__accept[grecs_json__current_state] ) { (grecs_json__last_accepting_state) = grecs_json__current_state; (grecs_json__last_accepting_cpos) = grecs_json__cp; } while ( grecs_json__chk[grecs_json__base[grecs_json__current_state] + grecs_json__c] != grecs_json__current_state ) { grecs_json__current_state = (int) grecs_json__def[grecs_json__current_state]; if ( grecs_json__current_state >= 61 ) grecs_json__c = grecs_json__meta[(unsigned int) grecs_json__c]; } grecs_json__current_state = grecs_json__nxt[grecs_json__base[grecs_json__current_state] + (unsigned int) grecs_json__c]; ++grecs_json__cp; } while ( grecs_json__base[grecs_json__current_state] != 131 ); grecs_json__find_action: /* %% [10.0] code to find the action number goes here */ grecs_json__act = grecs_json__accept[grecs_json__current_state]; if ( grecs_json__act == 0 ) { /* have to back up */ grecs_json__cp = (grecs_json__last_accepting_cpos); grecs_json__current_state = (grecs_json__last_accepting_state); grecs_json__act = grecs_json__accept[grecs_json__current_state]; } YY_DO_BEFORE_ACTION; /* %% [11.0] code for grecs_json_lineno update goes here */ do_action: /* This label is used only to access EOF actions. */ /* %% [12.0] debug code goes here */ if ( grecs_json__flex_debug ) { if ( grecs_json__act == 0 ) fprintf( stderr, "--scanner backing up\n" ); else if ( grecs_json__act < 15 ) fprintf( stderr, "--accepting rule at line %ld (\"%s\")\n", (long)grecs_json__rule_linenum[grecs_json__act], grecs_json_text ); else if ( grecs_json__act == 15 ) fprintf( stderr, "--accepting default rule (\"%s\")\n", grecs_json_text ); else if ( grecs_json__act == 16 ) fprintf( stderr, "--(end of buffer or a NUL)\n" ); else fprintf( stderr, "--EOF (start condition %d)\n", YY_START ); } switch ( grecs_json__act ) { /* beginning of action switch */ /* %% [13.0] actions go here */ case 0: /* must back up */ /* undo the effects of YY_DO_BEFORE_ACTION */ *grecs_json__cp = (grecs_json__hold_char); grecs_json__cp = (grecs_json__last_accepting_cpos); grecs_json__current_state = (grecs_json__last_accepting_state); goto grecs_json__find_action; case 1: YY_RULE_SETUP #line 169 "json-lex.l" { grecs_json_lval.n = strtod(grecs_json_text, NULL); return T_NUMBER; } YY_BREAK case 2: /* rule 2 can match eol */ YY_RULE_SETUP #line 173 "json-lex.l" { json_line_begin(); json_line_grow(grecs_json_text + 1, grecs_json_leng - 2); grecs_json_lval.s = json_line_finish(); return T_STRING; } YY_BREAK case 3: /* rule 3 can match eol */ YY_RULE_SETUP #line 177 "json-lex.l" { BEGIN(STR); json_line_begin(); json_line_grow(grecs_json_text + 1, grecs_json_leng - 5); utf8_wctomb(grecs_json_text + grecs_json_leng - 4); } YY_BREAK case 4: /* rule 4 can match eol */ YY_RULE_SETUP #line 182 "json-lex.l" { char c; BEGIN(STR); json_line_begin(); json_line_grow(grecs_json_text + 1, grecs_json_leng - 3); if (json_unescape(grecs_json_text[grecs_json_leng - 1], &c)) { jsonlex_diag("invalid UTF-8 codepoint"); return T_ERR; } json_line_grow(&c, 1); } YY_BREAK case 5: /* rule 5 can match eol */ YY_RULE_SETUP #line 192 "json-lex.l" { BEGIN(INITIAL); if (grecs_json_leng > 1) json_line_grow(grecs_json_text, grecs_json_leng - 1); grecs_json_lval.s = json_line_finish(); return T_STRING; } YY_BREAK case 6: /* rule 6 can match eol */ YY_RULE_SETUP #line 197 "json-lex.l" { json_line_grow(grecs_json_text, grecs_json_leng - 5); utf8_wctomb(grecs_json_text + grecs_json_leng - 4); } YY_BREAK case 7: /* rule 7 can match eol */ YY_RULE_SETUP #line 201 "json-lex.l" { char c; json_line_grow(grecs_json_text, grecs_json_leng - 2); if (json_unescape(grecs_json_text[grecs_json_leng - 1], &c)) { jsonlex_diag("invalid UTF-8 codepoint"); return T_ERR; } json_line_grow(&c, 1); } YY_BREAK case 8: YY_RULE_SETUP #line 210 "json-lex.l" { return T_NULL; } YY_BREAK case 9: YY_RULE_SETUP #line 211 "json-lex.l" { grecs_json_lval.b = 1; return T_BOOL; } YY_BREAK case 10: YY_RULE_SETUP #line 212 "json-lex.l" { grecs_json_lval.b = 0; return T_BOOL; } YY_BREAK case 11: YY_RULE_SETUP #line 213 "json-lex.l" return grecs_json_text[0]; YY_BREAK case 12: YY_RULE_SETUP #line 214 "json-lex.l" ; YY_BREAK case 13: /* rule 13 can match eol */ YY_RULE_SETUP #line 215 "json-lex.l" grecs_locus_point_advance_line(json_current_locus_point); YY_BREAK case 14: YY_RULE_SETUP #line 216 "json-lex.l" { jsonlex_diag("bogus character"); return T_ERR; } YY_BREAK case 15: YY_RULE_SETUP #line 218 "json-lex.l" ECHO; YY_BREAK #line 1256 "json-lex.c" case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(STR): grecs_json_terminate(); case YY_END_OF_BUFFER: { /* Amount of text matched not including the EOB char. */ int grecs_json__amount_of_matched_text = (int) (grecs_json__cp - (grecs_json_text_ptr)) - 1; /* Undo the effects of YY_DO_BEFORE_ACTION. */ *grecs_json__cp = (grecs_json__hold_char); YY_RESTORE_YY_MORE_OFFSET if ( YY_CURRENT_BUFFER_LVALUE->grecs_json__buffer_status == YY_BUFFER_NEW ) { /* We're scanning a new file or input source. It's * possible that this happened because the user * just pointed grecs_json_in at a new source and called * grecs_json_lex(). If so, then we have to assure * consistency between YY_CURRENT_BUFFER and our * globals. Here is the right place to do so, because * this is the first action (other than possibly a * back-up) that will match for the new input source. */ (grecs_json__n_chars) = YY_CURRENT_BUFFER_LVALUE->grecs_json__n_chars; /* %if-c-only */ YY_CURRENT_BUFFER_LVALUE->grecs_json__input_file = grecs_json_in; /* %endif */ /* %if-c++-only */ /* %endif */ YY_CURRENT_BUFFER_LVALUE->grecs_json__buffer_status = YY_BUFFER_NORMAL; } /* Note that here we test for grecs_json__c_buf_p "<=" to the position * of the first EOB in the buffer, since grecs_json__c_buf_p will * already have been incremented past the NUL character * (since all states make transitions on EOB to the * end-of-buffer state). Contrast this with the test * in input(). */ if ( (grecs_json__c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->grecs_json__ch_buf[(grecs_json__n_chars)] ) { /* This was really a NUL. */ grecs_json__state_type grecs_json__next_state; (grecs_json__c_buf_p) = (grecs_json_text_ptr) + grecs_json__amount_of_matched_text; grecs_json__current_state = grecs_json__get_previous_state( ); /* Okay, we're now positioned to make the NUL * transition. We couldn't have * grecs_json__get_previous_state() go ahead and do it * for us because it doesn't know how to deal * with the possibility of jamming (and we don't * want to build jamming into it because then it * will run more slowly). */ grecs_json__next_state = grecs_json__try_NUL_trans( grecs_json__current_state ); grecs_json__bp = (grecs_json_text_ptr) + YY_MORE_ADJ; if ( grecs_json__next_state ) { /* Consume the NUL. */ grecs_json__cp = ++(grecs_json__c_buf_p); grecs_json__current_state = grecs_json__next_state; goto grecs_json__match; } else { /* %% [14.0] code to do back-up for compressed tables and set up grecs_json__cp goes here */ grecs_json__cp = (grecs_json__c_buf_p); goto grecs_json__find_action; } } else switch ( grecs_json__get_next_buffer( ) ) { case EOB_ACT_END_OF_FILE: { (grecs_json__did_buffer_switch_on_eof) = 0; if ( grecs_json_wrap( ) ) { /* Note: because we've taken care in * grecs_json__get_next_buffer() to have set up * grecs_json_text, we can now set up * grecs_json__c_buf_p so that if some total * hoser (like flex itself) wants to * call the scanner after we return the * YY_NULL, it'll still work - another * YY_NULL will get returned. */ (grecs_json__c_buf_p) = (grecs_json_text_ptr) + YY_MORE_ADJ; grecs_json__act = YY_STATE_EOF(YY_START); goto do_action; } else { if ( ! (grecs_json__did_buffer_switch_on_eof) ) YY_NEW_FILE; } break; } case EOB_ACT_CONTINUE_SCAN: (grecs_json__c_buf_p) = (grecs_json_text_ptr) + grecs_json__amount_of_matched_text; grecs_json__current_state = grecs_json__get_previous_state( ); grecs_json__cp = (grecs_json__c_buf_p); grecs_json__bp = (grecs_json_text_ptr) + YY_MORE_ADJ; goto grecs_json__match; case EOB_ACT_LAST_MATCH: (grecs_json__c_buf_p) = &YY_CURRENT_BUFFER_LVALUE->grecs_json__ch_buf[(grecs_json__n_chars)]; grecs_json__current_state = grecs_json__get_previous_state( ); grecs_json__cp = (grecs_json__c_buf_p); grecs_json__bp = (grecs_json_text_ptr) + YY_MORE_ADJ; goto grecs_json__find_action; } break; } default: YY_FATAL_ERROR( "fatal flex scanner internal error--no action found" ); } /* end of action switch */ } /* end of scanning one token */ } /* end of user's declarations */ } /* end of grecs_json_lex */ /* %ok-for-header */ /* %if-c++-only */ /* %not-for-header */ /* %ok-for-header */ /* %endif */ /* grecs_json__get_next_buffer - try to read in a new buffer * * Returns a code representing an action: * EOB_ACT_LAST_MATCH - * EOB_ACT_CONTINUE_SCAN - continue scanning from current position * EOB_ACT_END_OF_FILE - end of file */ /* %if-c-only */ static int grecs_json__get_next_buffer (void) /* %endif */ /* %if-c++-only */ /* %endif */ { char *dest = YY_CURRENT_BUFFER_LVALUE->grecs_json__ch_buf; char *source = (grecs_json_text_ptr); grecs_json__size_t number_to_move, i; int ret_val; if ( (grecs_json__c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->grecs_json__ch_buf[(grecs_json__n_chars) + 1] ) YY_FATAL_ERROR( "fatal flex scanner internal error--end of buffer missed" ); if ( YY_CURRENT_BUFFER_LVALUE->grecs_json__fill_buffer == 0 ) { /* Don't try to fill the buffer, so this is an EOF. */ if ( (grecs_json__c_buf_p) - (grecs_json_text_ptr) - YY_MORE_ADJ == 1 ) { /* We matched a single character, the EOB, so * treat this as a final EOF. */ return EOB_ACT_END_OF_FILE; } else { /* We matched some text prior to the EOB, first * process it. */ return EOB_ACT_LAST_MATCH; } } /* Try to read more data. */ /* First move last chars to start of buffer. */ number_to_move = (grecs_json__size_t) ((grecs_json__c_buf_p) - (grecs_json_text_ptr)) - 1; for ( i = 0; i < number_to_move; ++i ) *(dest++) = *(source++); if ( YY_CURRENT_BUFFER_LVALUE->grecs_json__buffer_status == YY_BUFFER_EOF_PENDING ) /* don't do the read, it's not guaranteed to return an EOF, * just force an EOF */ YY_CURRENT_BUFFER_LVALUE->grecs_json__n_chars = (grecs_json__n_chars) = 0; else { grecs_json__size_t num_to_read = YY_CURRENT_BUFFER_LVALUE->grecs_json__buf_size - number_to_move - 1; while ( num_to_read <= 0 ) { /* Not enough room in the buffer - grow it. */ /* just a shorter name for the current buffer */ YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE; int grecs_json__c_buf_p_offset = (int) ((grecs_json__c_buf_p) - b->grecs_json__ch_buf); if ( b->grecs_json__is_our_buffer ) { grecs_json__size_t new_size = b->grecs_json__buf_size * 2; if ( new_size <= 0 ) b->grecs_json__buf_size += b->grecs_json__buf_size / 8; else b->grecs_json__buf_size *= 2; b->grecs_json__ch_buf = (char *) /* Include room in for 2 EOB chars. */ grecs_json_realloc((void *) b->grecs_json__ch_buf,b->grecs_json__buf_size + 2 ); } else /* Can't grow it, we don't own it. */ b->grecs_json__ch_buf = 0; if ( ! b->grecs_json__ch_buf ) YY_FATAL_ERROR( "fatal error - scanner input buffer overflow" ); (grecs_json__c_buf_p) = &b->grecs_json__ch_buf[grecs_json__c_buf_p_offset]; num_to_read = YY_CURRENT_BUFFER_LVALUE->grecs_json__buf_size - number_to_move - 1; } if ( num_to_read > YY_READ_BUF_SIZE ) num_to_read = YY_READ_BUF_SIZE; /* Read in more data. */ YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->grecs_json__ch_buf[number_to_move]), (grecs_json__n_chars), num_to_read ); YY_CURRENT_BUFFER_LVALUE->grecs_json__n_chars = (grecs_json__n_chars); } if ( (grecs_json__n_chars) == 0 ) { if ( number_to_move == YY_MORE_ADJ ) { ret_val = EOB_ACT_END_OF_FILE; grecs_json_restart(grecs_json_in ); } else { ret_val = EOB_ACT_LAST_MATCH; YY_CURRENT_BUFFER_LVALUE->grecs_json__buffer_status = YY_BUFFER_EOF_PENDING; } } else ret_val = EOB_ACT_CONTINUE_SCAN; if ((grecs_json__size_t) ((grecs_json__n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->grecs_json__buf_size) { /* Extend the array by 50%, plus the number we really need. */ grecs_json__size_t new_size = (grecs_json__n_chars) + number_to_move + ((grecs_json__n_chars) >> 1); YY_CURRENT_BUFFER_LVALUE->grecs_json__ch_buf = (char *) grecs_json_realloc((void *) YY_CURRENT_BUFFER_LVALUE->grecs_json__ch_buf,new_size ); if ( ! YY_CURRENT_BUFFER_LVALUE->grecs_json__ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in grecs_json__get_next_buffer()" ); } (grecs_json__n_chars) += number_to_move; YY_CURRENT_BUFFER_LVALUE->grecs_json__ch_buf[(grecs_json__n_chars)] = YY_END_OF_BUFFER_CHAR; YY_CURRENT_BUFFER_LVALUE->grecs_json__ch_buf[(grecs_json__n_chars) + 1] = YY_END_OF_BUFFER_CHAR; (grecs_json_text_ptr) = &YY_CURRENT_BUFFER_LVALUE->grecs_json__ch_buf[0]; return ret_val; } /* grecs_json__get_previous_state - get the state just before the EOB char was reached */ /* %if-c-only */ /* %not-for-header */ static grecs_json__state_type grecs_json__get_previous_state (void) /* %endif */ /* %if-c++-only */ /* %endif */ { grecs_json__state_type grecs_json__current_state; char *grecs_json__cp; /* %% [15.0] code to get the start state into grecs_json__current_state goes here */ grecs_json__current_state = (grecs_json__start); for ( grecs_json__cp = (grecs_json_text_ptr) + YY_MORE_ADJ; grecs_json__cp < (grecs_json__c_buf_p); ++grecs_json__cp ) { /* %% [16.0] code to find the next state goes here */ YY_CHAR grecs_json__c = (*grecs_json__cp ? grecs_json__ec[YY_SC_TO_UI(*grecs_json__cp)] : 1); if ( grecs_json__accept[grecs_json__current_state] ) { (grecs_json__last_accepting_state) = grecs_json__current_state; (grecs_json__last_accepting_cpos) = grecs_json__cp; } while ( grecs_json__chk[grecs_json__base[grecs_json__current_state] + grecs_json__c] != grecs_json__current_state ) { grecs_json__current_state = (int) grecs_json__def[grecs_json__current_state]; if ( grecs_json__current_state >= 61 ) grecs_json__c = grecs_json__meta[(unsigned int) grecs_json__c]; } grecs_json__current_state = grecs_json__nxt[grecs_json__base[grecs_json__current_state] + (unsigned int) grecs_json__c]; } return grecs_json__current_state; } /* grecs_json__try_NUL_trans - try to make a transition on the NUL character * * synopsis * next_state = grecs_json__try_NUL_trans( current_state ); */ /* %if-c-only */ static grecs_json__state_type grecs_json__try_NUL_trans (grecs_json__state_type grecs_json__current_state ) /* %endif */ /* %if-c++-only */ /* %endif */ { int grecs_json__is_jam; /* %% [17.0] code to find the next state, and perhaps do backing up, goes here */ char *grecs_json__cp = (grecs_json__c_buf_p); YY_CHAR grecs_json__c = 1; if ( grecs_json__accept[grecs_json__current_state] ) { (grecs_json__last_accepting_state) = grecs_json__current_state; (grecs_json__last_accepting_cpos) = grecs_json__cp; } while ( grecs_json__chk[grecs_json__base[grecs_json__current_state] + grecs_json__c] != grecs_json__current_state ) { grecs_json__current_state = (int) grecs_json__def[grecs_json__current_state]; if ( grecs_json__current_state >= 61 ) grecs_json__c = grecs_json__meta[(unsigned int) grecs_json__c]; } grecs_json__current_state = grecs_json__nxt[grecs_json__base[grecs_json__current_state] + (unsigned int) grecs_json__c]; grecs_json__is_jam = (grecs_json__current_state == 60); return grecs_json__is_jam ? 0 : grecs_json__current_state; } #ifndef YY_NO_UNPUT /* %if-c-only */ /* %endif */ #endif /* %if-c-only */ #ifndef YY_NO_INPUT #ifdef __cplusplus static int grecs_json_input (void) #else static int input (void) #endif /* %endif */ /* %if-c++-only */ /* %endif */ { int c; *(grecs_json__c_buf_p) = (grecs_json__hold_char); if ( *(grecs_json__c_buf_p) == YY_END_OF_BUFFER_CHAR ) { /* grecs_json__c_buf_p now points to the character we want to return. * If this occurs *before* the EOB characters, then it's a * valid NUL; if not, then we've hit the end of the buffer. */ if ( (grecs_json__c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->grecs_json__ch_buf[(grecs_json__n_chars)] ) /* This was really a NUL. */ *(grecs_json__c_buf_p) = '\0'; else { /* need more input */ grecs_json__size_t offset = (grecs_json__c_buf_p) - (grecs_json_text_ptr); ++(grecs_json__c_buf_p); switch ( grecs_json__get_next_buffer( ) ) { case EOB_ACT_LAST_MATCH: /* This happens because grecs_json__g_n_b() * sees that we've accumulated a * token and flags that we need to * try matching the token before * proceeding. But for input(), * there's no matching to consider. * So convert the EOB_ACT_LAST_MATCH * to EOB_ACT_END_OF_FILE. */ /* Reset buffer status. */ grecs_json_restart(grecs_json_in ); /*FALLTHROUGH*/ case EOB_ACT_END_OF_FILE: { if ( grecs_json_wrap( ) ) return EOF; if ( ! (grecs_json__did_buffer_switch_on_eof) ) YY_NEW_FILE; #ifdef __cplusplus return grecs_json_input(); #else return input(); #endif } case EOB_ACT_CONTINUE_SCAN: (grecs_json__c_buf_p) = (grecs_json_text_ptr) + offset; break; } } } c = *(unsigned char *) (grecs_json__c_buf_p); /* cast for 8-bit char's */ *(grecs_json__c_buf_p) = '\0'; /* preserve grecs_json_text */ (grecs_json__hold_char) = *++(grecs_json__c_buf_p); /* %% [19.0] update BOL and grecs_json_lineno */ return c; } /* %if-c-only */ #endif /* ifndef YY_NO_INPUT */ /* %endif */ /** Immediately switch to a different input stream. * @param input_file A readable stream. * * @note This function does not reset the start condition to @c INITIAL . */ /* %if-c-only */ void grecs_json_restart (FILE * input_file ) /* %endif */ /* %if-c++-only */ /* %endif */ { if ( ! YY_CURRENT_BUFFER ){ grecs_json_ensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = grecs_json__create_buffer(grecs_json_in,YY_BUF_SIZE ); } grecs_json__init_buffer(YY_CURRENT_BUFFER,input_file ); grecs_json__load_buffer_state( ); } /* %if-c++-only */ /* %endif */ /** Switch to a different input buffer. * @param new_buffer The new input buffer. * */ /* %if-c-only */ void grecs_json__switch_to_buffer (YY_BUFFER_STATE new_buffer ) /* %endif */ /* %if-c++-only */ /* %endif */ { /* TODO. We should be able to replace this entire function body * with * grecs_json_pop_buffer_state(); * grecs_json_push_buffer_state(new_buffer); */ grecs_json_ensure_buffer_stack (); if ( YY_CURRENT_BUFFER == new_buffer ) return; if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(grecs_json__c_buf_p) = (grecs_json__hold_char); YY_CURRENT_BUFFER_LVALUE->grecs_json__buf_pos = (grecs_json__c_buf_p); YY_CURRENT_BUFFER_LVALUE->grecs_json__n_chars = (grecs_json__n_chars); } YY_CURRENT_BUFFER_LVALUE = new_buffer; grecs_json__load_buffer_state( ); /* We don't actually know whether we did this switch during * EOF (grecs_json_wrap()) processing, but the only time this flag * is looked at is after grecs_json_wrap() is called, so it's safe * to go ahead and always set it. */ (grecs_json__did_buffer_switch_on_eof) = 1; } /* %if-c-only */ static void grecs_json__load_buffer_state (void) /* %endif */ /* %if-c++-only */ /* %endif */ { (grecs_json__n_chars) = YY_CURRENT_BUFFER_LVALUE->grecs_json__n_chars; (grecs_json_text_ptr) = (grecs_json__c_buf_p) = YY_CURRENT_BUFFER_LVALUE->grecs_json__buf_pos; /* %if-c-only */ grecs_json_in = YY_CURRENT_BUFFER_LVALUE->grecs_json__input_file; /* %endif */ /* %if-c++-only */ /* %endif */ (grecs_json__hold_char) = *(grecs_json__c_buf_p); } /** Allocate and initialize an input buffer state. * @param file A readable stream. * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. * * @return the allocated buffer state. */ /* %if-c-only */ YY_BUFFER_STATE grecs_json__create_buffer (FILE * file, int size ) /* %endif */ /* %if-c++-only */ /* %endif */ { YY_BUFFER_STATE b; b = (YY_BUFFER_STATE) grecs_json_alloc(sizeof( struct grecs_json__buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in grecs_json__create_buffer()" ); b->grecs_json__buf_size = (grecs_json__size_t)size; /* grecs_json__ch_buf has to be 2 characters longer than the size given because * we need to put in 2 end-of-buffer characters. */ b->grecs_json__ch_buf = (char *) grecs_json_alloc(b->grecs_json__buf_size + 2 ); if ( ! b->grecs_json__ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in grecs_json__create_buffer()" ); b->grecs_json__is_our_buffer = 1; grecs_json__init_buffer(b,file ); return b; } /* %if-c++-only */ /* %endif */ /** Destroy the buffer. * @param b a buffer created with grecs_json__create_buffer() * */ /* %if-c-only */ void grecs_json__delete_buffer (YY_BUFFER_STATE b ) /* %endif */ /* %if-c++-only */ /* %endif */ { if ( ! b ) return; if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; if ( b->grecs_json__is_our_buffer ) grecs_json_free((void *) b->grecs_json__ch_buf ); grecs_json_free((void *) b ); } /* Initializes or reinitializes a buffer. * This function is sometimes called more than once on the same buffer, * such as during a grecs_json_restart() or at EOF. */ /* %if-c-only */ static void grecs_json__init_buffer (YY_BUFFER_STATE b, FILE * file ) /* %endif */ /* %if-c++-only */ /* %endif */ { int oerrno = errno; grecs_json__flush_buffer(b ); /* %if-c-only */ b->grecs_json__input_file = file; /* %endif */ /* %if-c++-only */ /* %endif */ b->grecs_json__fill_buffer = 1; /* If b is the current buffer, then grecs_json__init_buffer was _probably_ * called from grecs_json_restart() or through grecs_json__get_next_buffer. * In that case, we don't want to reset the lineno or column. */ if (b != YY_CURRENT_BUFFER){ b->grecs_json__bs_lineno = 1; b->grecs_json__bs_column = 0; } /* %if-c-only */ b->grecs_json__is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; /* %endif */ /* %if-c++-only */ /* %endif */ errno = oerrno; } /** Discard all buffered characters. On the next scan, YY_INPUT will be called. * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. * */ /* %if-c-only */ void grecs_json__flush_buffer (YY_BUFFER_STATE b ) /* %endif */ /* %if-c++-only */ /* %endif */ { if ( ! b ) return; b->grecs_json__n_chars = 0; /* We always need two end-of-buffer characters. The first causes * a transition to the end-of-buffer state. The second causes * a jam in that state. */ b->grecs_json__ch_buf[0] = YY_END_OF_BUFFER_CHAR; b->grecs_json__ch_buf[1] = YY_END_OF_BUFFER_CHAR; b->grecs_json__buf_pos = &b->grecs_json__ch_buf[0]; b->grecs_json__at_bol = 1; b->grecs_json__buffer_status = YY_BUFFER_NEW; if ( b == YY_CURRENT_BUFFER ) grecs_json__load_buffer_state( ); } /* %if-c-or-c++ */ /** Pushes the new state onto the stack. The new state becomes * the current state. This function will allocate the stack * if necessary. * @param new_buffer The new state. * */ /* %if-c-only */ void grecs_json_push_buffer_state (YY_BUFFER_STATE new_buffer ) /* %endif */ /* %if-c++-only */ /* %endif */ { if (new_buffer == NULL) return; grecs_json_ensure_buffer_stack(); /* This block is copied from grecs_json__switch_to_buffer. */ if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(grecs_json__c_buf_p) = (grecs_json__hold_char); YY_CURRENT_BUFFER_LVALUE->grecs_json__buf_pos = (grecs_json__c_buf_p); YY_CURRENT_BUFFER_LVALUE->grecs_json__n_chars = (grecs_json__n_chars); } /* Only push if top exists. Otherwise, replace top. */ if (YY_CURRENT_BUFFER) (grecs_json__buffer_stack_top)++; YY_CURRENT_BUFFER_LVALUE = new_buffer; /* copied from grecs_json__switch_to_buffer. */ grecs_json__load_buffer_state( ); (grecs_json__did_buffer_switch_on_eof) = 1; } /* %endif */ /* %if-c-or-c++ */ /** Removes and deletes the top of the stack, if present. * The next element becomes the new top. * */ /* %if-c-only */ void grecs_json_pop_buffer_state (void) /* %endif */ /* %if-c++-only */ /* %endif */ { if (!YY_CURRENT_BUFFER) return; grecs_json__delete_buffer(YY_CURRENT_BUFFER ); YY_CURRENT_BUFFER_LVALUE = NULL; if ((grecs_json__buffer_stack_top) > 0) --(grecs_json__buffer_stack_top); if (YY_CURRENT_BUFFER) { grecs_json__load_buffer_state( ); (grecs_json__did_buffer_switch_on_eof) = 1; } } /* %endif */ /* %if-c-or-c++ */ /* Allocates the stack if it does not exist. * Guarantees space for at least one push. */ /* %if-c-only */ static void grecs_json_ensure_buffer_stack (void) /* %endif */ /* %if-c++-only */ /* %endif */ { grecs_json__size_t num_to_alloc; if (!(grecs_json__buffer_stack)) { /* First allocation is just for 2 elements, since we don't know if this * scanner will even need a stack. We use 2 instead of 1 to avoid an * immediate realloc on the next call. */ num_to_alloc = 1; // After all that talk, this was set to 1 anyways... (grecs_json__buffer_stack) = (struct grecs_json__buffer_state**)grecs_json_alloc (num_to_alloc * sizeof(struct grecs_json__buffer_state*) ); if ( ! (grecs_json__buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in grecs_json_ensure_buffer_stack()" ); memset((grecs_json__buffer_stack), 0, num_to_alloc * sizeof(struct grecs_json__buffer_state*)); (grecs_json__buffer_stack_max) = num_to_alloc; (grecs_json__buffer_stack_top) = 0; return; } if ((grecs_json__buffer_stack_top) >= ((grecs_json__buffer_stack_max)) - 1){ /* Increase the buffer to prepare for a possible push. */ grecs_json__size_t grow_size = 8 /* arbitrary grow size */; num_to_alloc = (grecs_json__buffer_stack_max) + grow_size; (grecs_json__buffer_stack) = (struct grecs_json__buffer_state**)grecs_json_realloc ((grecs_json__buffer_stack), num_to_alloc * sizeof(struct grecs_json__buffer_state*) ); if ( ! (grecs_json__buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in grecs_json_ensure_buffer_stack()" ); /* zero only the new slots.*/ memset((grecs_json__buffer_stack) + (grecs_json__buffer_stack_max), 0, grow_size * sizeof(struct grecs_json__buffer_state*)); (grecs_json__buffer_stack_max) = num_to_alloc; } } /* %endif */ /* %if-c-only */ /** Setup the input buffer state to scan directly from a user-specified character buffer. * @param base the character buffer * @param size the size in bytes of the character buffer * * @return the newly allocated buffer state object. */ YY_BUFFER_STATE grecs_json__scan_buffer (char * base, grecs_json__size_t size ) { YY_BUFFER_STATE b; if ( size < 2 || base[size-2] != YY_END_OF_BUFFER_CHAR || base[size-1] != YY_END_OF_BUFFER_CHAR ) /* They forgot to leave room for the EOB's. */ return 0; b = (YY_BUFFER_STATE) grecs_json_alloc(sizeof( struct grecs_json__buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in grecs_json__scan_buffer()" ); b->grecs_json__buf_size = size - 2; /* "- 2" to take care of EOB's */ b->grecs_json__buf_pos = b->grecs_json__ch_buf = base; b->grecs_json__is_our_buffer = 0; b->grecs_json__input_file = 0; b->grecs_json__n_chars = b->grecs_json__buf_size; b->grecs_json__is_interactive = 0; b->grecs_json__at_bol = 1; b->grecs_json__fill_buffer = 0; b->grecs_json__buffer_status = YY_BUFFER_NEW; grecs_json__switch_to_buffer(b ); return b; } /* %endif */ /* %if-c-only */ /** Setup the input buffer state to scan a string. The next call to grecs_json_lex() will * scan from a @e copy of @a str. * @param grecs_json_str a NUL-terminated string to scan * * @return the newly allocated buffer state object. * @note If you want to scan bytes that may contain NUL values, then use * grecs_json__scan_bytes() instead. */ YY_BUFFER_STATE grecs_json__scan_string (grecs_json_const char * grecs_json_str ) { return grecs_json__scan_bytes(grecs_json_str,strlen(grecs_json_str) ); } /* %endif */ /* %if-c-only */ /** Setup the input buffer state to scan the given bytes. The next call to grecs_json_lex() will * scan from a @e copy of @a bytes. * @param grecs_json_bytes the byte buffer to scan * @param _grecs_json_bytes_len the number of bytes in the buffer pointed to by @a bytes. * * @return the newly allocated buffer state object. */ YY_BUFFER_STATE grecs_json__scan_bytes (grecs_json_const char * grecs_json_bytes, grecs_json__size_t _grecs_json_bytes_len ) { YY_BUFFER_STATE b; char *buf; grecs_json__size_t n; grecs_json__size_t i; /* Get memory for full buffer, including space for trailing EOB's. */ n = _grecs_json_bytes_len + 2; buf = (char *) grecs_json_alloc(n ); if ( ! buf ) YY_FATAL_ERROR( "out of dynamic memory in grecs_json__scan_bytes()" ); for ( i = 0; i < _grecs_json_bytes_len; ++i ) buf[i] = grecs_json_bytes[i]; buf[_grecs_json_bytes_len] = buf[_grecs_json_bytes_len+1] = YY_END_OF_BUFFER_CHAR; b = grecs_json__scan_buffer(buf,n ); if ( ! b ) YY_FATAL_ERROR( "bad buffer in grecs_json__scan_bytes()" ); /* It's okay to grow etc. this buffer, and we should throw it * away when we're done. */ b->grecs_json__is_our_buffer = 1; return b; } /* %endif */ #ifndef YY_EXIT_FAILURE #define YY_EXIT_FAILURE 2 #endif /* %if-c-only */ static void grecs_json__fatal_error (grecs_json_const char* msg ) { (void) fprintf( stderr, "%s\n", msg ); exit( YY_EXIT_FAILURE ); } /* %endif */ /* %if-c++-only */ /* %endif */ /* Redefine grecs_json_less() so it works in section 3 code. */ #undef grecs_json_less #define grecs_json_less(n) \ do \ { \ /* Undo effects of setting up grecs_json_text. */ \ int grecs_json_less_macro_arg = (n); \ YY_LESS_LINENO(grecs_json_less_macro_arg);\ grecs_json_text[grecs_json_leng] = (grecs_json__hold_char); \ (grecs_json__c_buf_p) = grecs_json_text + grecs_json_less_macro_arg; \ (grecs_json__hold_char) = *(grecs_json__c_buf_p); \ *(grecs_json__c_buf_p) = '\0'; \ grecs_json_leng = grecs_json_less_macro_arg; \ } \ while ( 0 ) /* Accessor methods (get/set functions) to struct members. */ /* %if-c-only */ /* %if-reentrant */ /* %endif */ /** Get the current line number. * */ int grecs_json_get_lineno (void) { return grecs_json_lineno; } /** Get the input stream. * */ FILE *grecs_json_get_in (void) { return grecs_json_in; } /** Get the output stream. * */ FILE *grecs_json_get_out (void) { return grecs_json_out; } /** Get the length of the current token. * */ grecs_json__size_t grecs_json_get_leng (void) { return grecs_json_leng; } /** Get the current token. * */ char *grecs_json_get_text (void) { return grecs_json_text; } /* %if-reentrant */ /* %endif */ /** Set the current line number. * @param _line_number line number * */ void grecs_json_set_lineno (int _line_number ) { grecs_json_lineno = _line_number; } /** Set the input stream. This does not discard the current * input buffer. * @param _in_str A readable stream. * * @see grecs_json__switch_to_buffer */ void grecs_json_set_in (FILE * _in_str ) { grecs_json_in = _in_str ; } void grecs_json_set_out (FILE * _out_str ) { grecs_json_out = _out_str ; } int grecs_json_get_debug (void) { return grecs_json__flex_debug; } void grecs_json_set_debug (int _bdebug ) { grecs_json__flex_debug = _bdebug ; } /* %endif */ /* %if-reentrant */ /* %if-bison-bridge */ /* %endif */ /* %endif if-c-only */ /* %if-c-only */ static int grecs_json__init_globals (void) { /* Initialization is the same as for the non-reentrant scanner. * This function is called from grecs_json_lex_destroy(), so don't allocate here. */ (grecs_json__buffer_stack) = 0; (grecs_json__buffer_stack_top) = 0; (grecs_json__buffer_stack_max) = 0; (grecs_json__c_buf_p) = (char *) 0; (grecs_json__init) = 0; (grecs_json__start) = 0; /* Defined in main.c */ #ifdef YY_STDINIT grecs_json_in = stdin; grecs_json_out = stdout; #else grecs_json_in = (FILE *) 0; grecs_json_out = (FILE *) 0; #endif /* For future reference: Set errno on error, since we are called by * grecs_json_lex_init() */ return 0; } /* %endif */ /* %if-c-only SNIP! this currently causes conflicts with the c++ scanner */ /* grecs_json_lex_destroy is for both reentrant and non-reentrant scanners. */ int grecs_json_lex_destroy (void) { /* Pop the buffer stack, destroying each element. */ while(YY_CURRENT_BUFFER){ grecs_json__delete_buffer(YY_CURRENT_BUFFER ); YY_CURRENT_BUFFER_LVALUE = NULL; grecs_json_pop_buffer_state(); } /* Destroy the stack itself. */ grecs_json_free((grecs_json__buffer_stack) ); (grecs_json__buffer_stack) = NULL; /* Reset the globals. This is important in a non-reentrant scanner so the next time * grecs_json_lex() is called, initialization will occur. */ grecs_json__init_globals( ); /* %if-reentrant */ /* %endif */ return 0; } /* %endif */ /* * Internal utility routines. */ #ifndef grecs_json_text_ptr static void grecs_json__flex_strncpy (char* s1, grecs_json_const char * s2, int n ) { int i; for ( i = 0; i < n; ++i ) s1[i] = s2[i]; } #endif #ifdef YY_NEED_STRLEN static int grecs_json__flex_strlen (grecs_json_const char * s ) { int n; for ( n = 0; s[n]; ++n ) ; return n; } #endif void *grecs_json_alloc (grecs_json__size_t size ) { return (void *) malloc( size ); } void *grecs_json_realloc (void * ptr, grecs_json__size_t size ) { /* The cast to (char *) in the following accommodates both * implementations that use char* generic pointers, and those * that use void* generic pointers. It works with the latter * because both ANSI C and C++ allow castless assignment from * any pointer type to void*, and deal with argument conversions * as though doing an assignment. */ return (void *) realloc( (char *) ptr, size ); } void grecs_json_free (void * ptr ) { free( (char *) ptr ); /* see grecs_json_realloc() for (char *) cast */ } /* %if-tables-serialization definitions */ /* %define-grecs_json_tables The name for this specific scanner's tables. */ #define YYTABLES_NAME "grecs_json_tables" /* %endif */ /* %ok-for-header */ #line 218 "json-lex.l" void jsonlex_setup(char const *s, size_t l) { input_ptr = s; input_size = l; json_current_locus_point.file = "input"; json_current_locus_point.line = 1; json_current_locus_point.col = 0; json_err_diag = NULL; grecs_json__flex_debug = 0; BEGIN(INITIAL); grecs_json_restart(NULL); } void jsonlex_cleanup(void) { if (json_line_acc) { grecs_txtacc_free(json_line_acc); json_line_acc = NULL; } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/src/format.c���������������������������������������������������������������������0000644�0001750�0001750�00000023373�13511403723�016523� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* grecs - Gray's Extensible Configuration System Copyright (C) 2007-2016 Sergey Poznyakoff Grecs 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. Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include <grecs.h> #include <wordsplit.h> #include <stdio.h> #include <stdlib.h> #include <ctype.h> #include <string.h> #include <errno.h> const char * grecs_data_type_string(enum grecs_data_type type) { switch (type) { case grecs_type_void: return N_("void"); case grecs_type_string: return N_("string"); case grecs_type_short: case grecs_type_ushort: case grecs_type_int: case grecs_type_uint: case grecs_type_long: case grecs_type_ulong: case grecs_type_size: /*FIXME case grecs_type_off:*/ return N_("number"); case grecs_type_time: return N_("time"); case grecs_type_bool: return N_("boolean"); case grecs_type_ipv4: return N_("IPv4"); case grecs_type_cidr: return N_("CIDR"); case grecs_type_host: return N_("hostname"); case grecs_type_sockaddr: return N_("sockaddr"); case grecs_type_section: return N_("section"); case grecs_type_null: return N_("null"); } return "UNKNOWN?"; } static void format_level(unsigned level, FILE *stream) { while (level--) fprintf(stream, " "); } void grecs_print_docstring(const char *docstring, unsigned level, FILE *stream) { size_t len = strlen(docstring); int width = 78 - level * 2; if (width < 0) { width = 78; level = 0; } while (len) { size_t seglen; const char *p; for (seglen = 0, p = docstring; p < docstring + width && *p; p++) { if (*p == '\n') { seglen = p - docstring; break; } if (isspace(*p)) seglen = p - docstring; } if (seglen == 0 || *p == 0) seglen = p - docstring; format_level(level, stream); fprintf(stream, "# "); fwrite(docstring, seglen, 1, stream); fputc('\n', stream); len -= seglen; docstring += seglen; if (*docstring == '\n') { docstring++; len--; } else while (*docstring && isspace(*docstring)) { docstring++; len--; } } } void grecs_print_simple_statement(struct grecs_keyword *kwp, unsigned level, FILE *stream) { const char *argstr; if (kwp->flags & GRECS_INAC) grecs_print_docstring(N_("Disabled;"), level, stream); if (kwp->docstring) grecs_print_docstring(kwp->docstring, level, stream); format_level(level, stream); if (kwp->argname) argstr = kwp->argname; else argstr = N_("arg"); if (strchr("<[", argstr[0])) fprintf(stream, "%s %s;\n", kwp->ident, gettext(argstr)); else if (argstr[0] == '\'') fprintf(stream, "%s %s;\n", kwp->ident, argstr + 1); else if (strchr (argstr, ':')) fprintf(stream, "%s <%s>;\n", kwp->ident, gettext(argstr)); else { fprintf(stream, "%s <%s: ", kwp->ident, gettext(argstr)); if (kwp->flags & GRECS_LIST) fprintf(stream, "list of %s", gettext(grecs_data_type_string(kwp->type))); else fprintf(stream, "%s", gettext(grecs_data_type_string(kwp->type))); fprintf(stream, ">;\n"); } } void grecs_print_block_statement(struct grecs_keyword *kwp, unsigned level, FILE *stream) { if (kwp->docstring) grecs_print_docstring(kwp->docstring, level, stream); format_level(level, stream); fprintf(stream, "%s", kwp->ident); if (kwp->argname) { if (kwp->argname[0] == '\'') fprintf(stream, " %s", kwp->argname + 1); else fprintf(stream, " <%s>", gettext(kwp->argname)); } fprintf(stream, " {\n"); grecs_print_statement_array(kwp->kwd, 0, level + 1, stream); format_level(level, stream); fprintf(stream, "}\n"); } void grecs_print_statement_array(struct grecs_keyword *kwp, unsigned n, unsigned level, FILE *stream) { if (!kwp) { return; } for (; kwp->ident; kwp++, n++) { if (kwp->flags & GRECS_HIDDEN) continue; if (n) fputc('\n', stream); if (kwp->type == grecs_type_section) grecs_print_block_statement(kwp, level, stream); else grecs_print_simple_statement(kwp, level, stream); } } void grecs_format_locus(grecs_locus_t *locus, struct grecs_format_closure *clos) { if (locus) { char *str = NULL; size_t size = 0; if (locus->beg.col == 0) grecs_asprintf(&str, &size, "%s:%u", locus->beg.file, locus->beg.line); else if (strcmp(locus->beg.file, locus->end.file)) grecs_asprintf(&str, &size, "%s:%u.%u-%s:%u.%u", locus->beg.file, locus->beg.line, locus->beg.col, locus->end.file, locus->end.line, locus->end.col); else if (locus->beg.line != locus->end.line) grecs_asprintf(&str, &size, "%s:%u.%u-%u.%u", locus->beg.file, locus->beg.line, locus->beg.col, locus->end.line, locus->end.col); else if (locus->beg.col != locus->end.col) grecs_asprintf(&str, &size, "%s:%u.%u-%u", locus->beg.file, locus->beg.line, locus->beg.col, locus->end.col); else grecs_asprintf(&str, &size, "%s:%u.%u", locus->beg.file, locus->beg.line, locus->beg.col); clos->fmtfun(str, clos->data); free(str); } } void grecs_format_node_path(struct grecs_node *node, int flags, struct grecs_format_closure *clos) { char delim[2] = "."; if (!node) { clos->fmtfun("NULL", clos->data); return; } if (node->up) grecs_format_node_path(node->up, flags, clos); if (node->type == grecs_node_root) return; if (flags & _GRECS_NODE_MASK_DELIM) delim[0] = flags & _GRECS_NODE_MASK_DELIM; clos->fmtfun(delim, clos->data); clos->fmtfun(node->ident, clos->data); if (node->type == grecs_node_block && !GRECS_VALUE_EMPTY_P(node->v.value)) { clos->fmtfun("=", clos->data); grecs_format_value(node->v.value, flags|GRECS_NODE_FLAG_QUOTE, clos); } } void grecs_format_value(struct grecs_value *val, int flags, struct grecs_format_closure *clos) { int i; struct grecs_list_entry *ep; size_t clen; int need_quote; if (!val) return; switch (val->type) { case GRECS_TYPE_STRING: clen = wordsplit_c_quoted_length(val->v.string, flags & GRECS_NODE_FLAG_QUOTE_HEX, &need_quote); if (flags & GRECS_NODE_FLAG_QUOTE) need_quote = 1; else if (flags & GRECS_NODE_FLAG_NOQUOTE) need_quote = 0; if (need_quote) { char *cbuf = grecs_malloc(clen + 1); wordsplit_c_quote_copy(cbuf, val->v.string, flags & GRECS_NODE_FLAG_QUOTE_HEX); cbuf[clen] = 0; clos->fmtfun("\"", clos->data); clos->fmtfun(cbuf, clos->data); clos->fmtfun("\"", clos->data); grecs_free(cbuf); } else clos->fmtfun(val->v.string, clos->data); break; case GRECS_TYPE_LIST: clos->fmtfun("(", clos->data); for (ep = val->v.list->head; ep; ep = ep->next) { grecs_format_value(ep->data, flags, clos); if (ep->next) clos->fmtfun(", ", clos->data); } clos->fmtfun(")", clos->data); break; case GRECS_TYPE_ARRAY: for (i = 0; i < val->v.arg.c; i++) { if (i) clos->fmtfun(" ", clos->data); grecs_format_value(val->v.arg.v[i], flags, clos); } } } int grecs_format_node(struct grecs_node *node, int flags, struct grecs_format_closure *clos) { const char *delim_str = NULL; if (!(flags & _GRECS_NODE_MASK_OUTPUT)) { errno = EINVAL; return 1; } if (!node) { clos->fmtfun("NULL", clos->data); return 0; } switch (node->type) { case grecs_node_root: case grecs_node_block: if (flags & GRECS_NODE_FLAG_DESCEND) { for (node = node->down; node; node = node->next) { grecs_format_node(node, flags, clos); if (node->next) clos->fmtfun("\n", clos->data); } break; } case grecs_node_stmt: if (flags & GRECS_NODE_FLAG_LOCUS) { grecs_locus_t *locus; if (flags & GRECS_NODE_FLAG_PATH) { if (flags & GRECS_NODE_FLAG_VALUE) locus = &node->locus; else locus = &node->idloc; } else if (flags & GRECS_NODE_FLAG_VALUE) locus = &node->v.value->locus; else locus = &node->locus; grecs_format_locus(locus, clos); delim_str = ": "; } if (flags & GRECS_NODE_FLAG_PATH) { if (delim_str) clos->fmtfun(delim_str, clos->data); grecs_format_node_path(node, flags, clos); delim_str = ": "; } if (flags & GRECS_NODE_FLAG_VALUE) { if (delim_str) clos->fmtfun(delim_str, clos->data); grecs_format_value(node->v.value, flags, clos); } } return 0; } static int txtacc_fmt(const char *str, void *data) { struct grecs_txtacc *acc = data; grecs_txtacc_grow(acc, str, strlen(str)); return 0; } void grecs_txtacc_format_value(struct grecs_value *val, int flags, struct grecs_txtacc *acc) { struct grecs_format_closure clos = { txtacc_fmt, acc }; grecs_format_value(val, flags, &clos); } static int file_fmt(const char *str, void *data) { fputs(str, (FILE*)data); return 0; } void grecs_print_locus(grecs_locus_t *locus, FILE *fp) { struct grecs_format_closure clos = { file_fmt, fp }; grecs_format_locus(locus, &clos); } void grecs_print_node_path(struct grecs_node *node, int flag, FILE *fp) { struct grecs_format_closure clos = { file_fmt, fp }; grecs_format_node_path(node, flag, &clos); } void grecs_print_value(struct grecs_value *val, int flags, FILE *fp) { struct grecs_format_closure clos = { file_fmt, fp }; grecs_format_value(val, flags, &clos); } int grecs_print_node(struct grecs_node *node, int flags, FILE *fp) { struct grecs_format_closure clos = { file_fmt, fp }; return grecs_format_node(node, flags, &clos); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/src/diag.c�����������������������������������������������������������������������0000644�0001750�0001750�00000005631�13511403723�016134� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* grecs - Gray's Extensible Configuration System Copyright (C) 2007-2016 Sergey Poznyakoff Grecs 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. Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include <grecs.h> #include <stdlib.h> #include <stdio.h> #include <string.h> #include <errno.h> static void default_print_diag(grecs_locus_t const *locus, int err, int errcode, const char *msg) { fflush(stdout); if (locus) { YY_LOCATION_PRINT(stderr, *locus); fputc(':', stderr); fputc(' ', stderr); } if (!err) fprintf(stderr, "warning: "); fprintf(stderr, "%s", msg); if (errcode) fprintf(stderr, ": %s", strerror(errcode)); fputc('\n', stderr); } void (*grecs_print_diag_fun)(grecs_locus_t const *, int, int, const char *msg) = default_print_diag; void grecs_warning(grecs_locus_t const *locus, int errcode, const char *fmt, ...) { va_list ap; char *buf = NULL; size_t size = 0; va_start(ap, fmt); if (grecs_vasprintf(&buf, &size, fmt, ap)) grecs_alloc_die(); va_end(ap); grecs_print_diag_fun(locus, 0, errcode, buf); free(buf); } void grecs_error(grecs_locus_t const *locus, int errcode, const char *fmt, ...) { va_list ap; char *buf = NULL; size_t size = 0; va_start(ap, fmt); if (grecs_vasprintf(&buf, &size, fmt, ap)) grecs_alloc_die(); va_end(ap); grecs_print_diag_fun(locus, 1, errcode, buf); free(buf); grecs_error_count++; } int grecs_asprint_locus(char **locstr, size_t *size, grecs_locus_t const *locus) { int rc; if (locus->beg.col == 0) rc = grecs_asprintf(locstr, size, "%s:%u", locus->beg.file, locus->beg.line); else if (strcmp(locus->beg.file, locus->end.file)) rc = grecs_asprintf(locstr, size, "%s:%u.%u-%s:%u.%u", locus->beg.file, locus->beg.line, locus->beg.col, locus->end.file, locus->end.line, locus->end.col); else if (locus->beg.line != locus->end.line) rc = grecs_asprintf(locstr, size, "%s:%u.%u-%u.%u", locus->beg.file, locus->beg.line, locus->beg.col, locus->end.line, locus->end.col); else if (locus->beg.col != locus->end.col) rc = grecs_asprintf(locstr, size, "%s:%u.%u-%u", locus->beg.file, locus->beg.line, locus->beg.col, locus->end.col); else rc = grecs_asprintf(locstr, size, "%s:%u.%u", locus->beg.file, locus->beg.line, locus->beg.col); return rc; } �������������������������������������������������������������������������������������������������������direvent-5.2/grecs/src/meta1-lex.c������������������������������������������������������������������0000644�0001750�0001750�00000176756�13244106173�017050� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#line 5 "meta1-lex.l" /* MeTA1 configuration lexer for Grecs. Copyright (C) 2007-2016 Sergey Poznyakoff Grecs 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. Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. */ /* This file implements a lexical analyzer for MeTA1 main configuration file. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include "grecs.h" #include "meta1-gram.h" #include <ctype.h> #line 31 "meta1-lex.c" #define YY_INT_ALIGNED short int /* A lexical scanner generated by flex */ /* %not-for-header */ /* %if-c-only */ /* %if-not-reentrant */ /* %endif */ /* %endif */ /* %ok-for-header */ #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 5 #define YY_FLEX_SUBMINOR_VERSION 37 #if YY_FLEX_SUBMINOR_VERSION > 0 #define FLEX_BETA #endif /* %if-c++-only */ /* %endif */ /* %if-c-only */ /* %endif */ /* %if-c-only */ /* %endif */ /* First, we deal with platform-specific or compiler-specific issues. */ /* begin standard C headers. */ /* %if-c-only */ #include <stdio.h> #include <string.h> #include <errno.h> #include <stdlib.h> /* %endif */ /* %if-tables-serialization */ /* %endif */ /* end standard C headers. */ /* %if-c-or-c++ */ /* flex integer type definitions */ #ifndef FLEXINT_H #define FLEXINT_H /* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */ #if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, * if you want the limit (max/min) macros for int types. */ #ifndef __STDC_LIMIT_MACROS #define __STDC_LIMIT_MACROS 1 #endif #include <inttypes.h> typedef int8_t flex_int8_t; typedef uint8_t flex_uint8_t; typedef int16_t flex_int16_t; typedef uint16_t flex_uint16_t; typedef int32_t flex_int32_t; typedef uint32_t flex_uint32_t; #else typedef signed char flex_int8_t; typedef short int flex_int16_t; typedef int flex_int32_t; typedef unsigned char flex_uint8_t; typedef unsigned short int flex_uint16_t; typedef unsigned int flex_uint32_t; /* Limits of integral types. */ #ifndef INT8_MIN #define INT8_MIN (-128) #endif #ifndef INT16_MIN #define INT16_MIN (-32767-1) #endif #ifndef INT32_MIN #define INT32_MIN (-2147483647-1) #endif #ifndef INT8_MAX #define INT8_MAX (127) #endif #ifndef INT16_MAX #define INT16_MAX (32767) #endif #ifndef INT32_MAX #define INT32_MAX (2147483647) #endif #ifndef UINT8_MAX #define UINT8_MAX (255U) #endif #ifndef UINT16_MAX #define UINT16_MAX (65535U) #endif #ifndef UINT32_MAX #define UINT32_MAX (4294967295U) #endif #endif /* ! C99 */ #endif /* ! FLEXINT_H */ /* %endif */ /* %if-c++-only */ /* %endif */ #ifdef __cplusplus /* The "const" storage-class-modifier is valid. */ #define YY_USE_CONST #else /* ! __cplusplus */ /* C99 requires __STDC__ to be defined as 1. */ #if defined (__STDC__) #define YY_USE_CONST #endif /* defined (__STDC__) */ #endif /* ! __cplusplus */ #ifdef YY_USE_CONST #define grecs_meta1_const const #else #define grecs_meta1_const #endif /* %not-for-header */ /* Returned upon end-of-file. */ #define YY_NULL 0 /* %ok-for-header */ /* %not-for-header */ /* Promotes a possibly negative, possibly signed char to an unsigned * integer for use as an array index. If the signed char is negative, * we want to instead treat it as an 8-bit unsigned char, hence the * double cast. */ #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) /* %ok-for-header */ /* %if-reentrant */ /* %endif */ /* %if-not-reentrant */ /* %endif */ /* Enter a start condition. This macro really ought to take a parameter, * but we do it the disgusting crufty way forced on us by the ()-less * definition of BEGIN. */ #define BEGIN (grecs_meta1__start) = 1 + 2 * /* Translate the current start state into a value that can be later handed * to BEGIN to return to the state. The YYSTATE alias is for lex * compatibility. */ #define YY_START (((grecs_meta1__start) - 1) / 2) #define YYSTATE YY_START /* Action number for EOF rule of a given start state. */ #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) /* Special action meaning "start processing a new file". */ #define YY_NEW_FILE grecs_meta1_restart(grecs_meta1_in ) #define YY_END_OF_BUFFER_CHAR 0 /* Size of default input buffer. */ #ifndef YY_BUF_SIZE #define YY_BUF_SIZE 16384 #endif /* The state buf must be large enough to hold one state per character in the main buffer. */ #define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(grecs_meta1__state_type)) #ifndef YY_TYPEDEF_YY_BUFFER_STATE #define YY_TYPEDEF_YY_BUFFER_STATE typedef struct grecs_meta1__buffer_state *YY_BUFFER_STATE; #endif #ifndef YY_TYPEDEF_YY_SIZE_T #define YY_TYPEDEF_YY_SIZE_T typedef size_t grecs_meta1__size_t; #endif /* %if-not-reentrant */ extern grecs_meta1__size_t grecs_meta1_leng; /* %endif */ /* %if-c-only */ /* %if-not-reentrant */ extern FILE *grecs_meta1_in, *grecs_meta1_out; /* %endif */ /* %endif */ #define EOB_ACT_CONTINUE_SCAN 0 #define EOB_ACT_END_OF_FILE 1 #define EOB_ACT_LAST_MATCH 2 #define YY_LESS_LINENO(n) /* Return all but the first "n" matched characters back to the input stream. */ #define grecs_meta1_less(n) \ do \ { \ /* Undo effects of setting up grecs_meta1_text. */ \ int grecs_meta1_less_macro_arg = (n); \ YY_LESS_LINENO(grecs_meta1_less_macro_arg);\ *grecs_meta1__cp = (grecs_meta1__hold_char); \ YY_RESTORE_YY_MORE_OFFSET \ (grecs_meta1__c_buf_p) = grecs_meta1__cp = grecs_meta1__bp + grecs_meta1_less_macro_arg - YY_MORE_ADJ; \ YY_DO_BEFORE_ACTION; /* set up grecs_meta1_text again */ \ } \ while ( 0 ) #define unput(c) grecs_meta1_unput( c, (grecs_meta1_text_ptr) ) #ifndef YY_STRUCT_YY_BUFFER_STATE #define YY_STRUCT_YY_BUFFER_STATE struct grecs_meta1__buffer_state { /* %if-c-only */ FILE *grecs_meta1__input_file; /* %endif */ /* %if-c++-only */ /* %endif */ char *grecs_meta1__ch_buf; /* input buffer */ char *grecs_meta1__buf_pos; /* current position in input buffer */ /* Size of input buffer in bytes, not including room for EOB * characters. */ grecs_meta1__size_t grecs_meta1__buf_size; /* Number of characters read into grecs_meta1__ch_buf, not including EOB * characters. */ grecs_meta1__size_t grecs_meta1__n_chars; /* Whether we "own" the buffer - i.e., we know we created it, * and can realloc() it to grow it, and should free() it to * delete it. */ int grecs_meta1__is_our_buffer; /* Whether this is an "interactive" input source; if so, and * if we're using stdio for input, then we want to use getc() * instead of fread(), to make sure we stop fetching input after * each newline. */ int grecs_meta1__is_interactive; /* Whether we're considered to be at the beginning of a line. * If so, '^' rules will be active on the next match, otherwise * not. */ int grecs_meta1__at_bol; int grecs_meta1__bs_lineno; /**< The line count. */ int grecs_meta1__bs_column; /**< The column count. */ /* Whether to try to fill the input buffer when we reach the * end of it. */ int grecs_meta1__fill_buffer; int grecs_meta1__buffer_status; #define YY_BUFFER_NEW 0 #define YY_BUFFER_NORMAL 1 /* When an EOF's been seen but there's still some text to process * then we mark the buffer as YY_EOF_PENDING, to indicate that we * shouldn't try reading from the input source any more. We might * still have a bunch of tokens to match, though, because of * possible backing-up. * * When we actually see the EOF, we change the status to "new" * (via grecs_meta1_restart()), so that the user can continue scanning by * just pointing grecs_meta1_in at a new input file. */ #define YY_BUFFER_EOF_PENDING 2 }; #endif /* !YY_STRUCT_YY_BUFFER_STATE */ /* %if-c-only Standard (non-C++) definition */ /* %not-for-header */ /* %if-not-reentrant */ /* Stack of input buffers. */ static size_t grecs_meta1__buffer_stack_top = 0; /**< index of top of stack. */ static size_t grecs_meta1__buffer_stack_max = 0; /**< capacity of stack. */ static YY_BUFFER_STATE * grecs_meta1__buffer_stack = 0; /**< Stack as an array. */ /* %endif */ /* %ok-for-header */ /* %endif */ /* We provide macros for accessing buffer states in case in the * future we want to put the buffer states in a more general * "scanner state". * * Returns the top of the stack, or NULL. */ #define YY_CURRENT_BUFFER ( (grecs_meta1__buffer_stack) \ ? (grecs_meta1__buffer_stack)[(grecs_meta1__buffer_stack_top)] \ : NULL) /* Same as previous macro, but useful when we know that the buffer stack is not * NULL or when we need an lvalue. For internal use only. */ #define YY_CURRENT_BUFFER_LVALUE (grecs_meta1__buffer_stack)[(grecs_meta1__buffer_stack_top)] /* %if-c-only Standard (non-C++) definition */ /* %if-not-reentrant */ /* %not-for-header */ /* grecs_meta1__hold_char holds the character lost when grecs_meta1_text is formed. */ static char grecs_meta1__hold_char; static grecs_meta1__size_t grecs_meta1__n_chars; /* number of characters read into grecs_meta1__ch_buf */ grecs_meta1__size_t grecs_meta1_leng; /* Points to current character in buffer. */ static char *grecs_meta1__c_buf_p = (char *) 0; static int grecs_meta1__init = 0; /* whether we need to initialize */ static int grecs_meta1__start = 0; /* start state number */ /* Flag which is used to allow grecs_meta1_wrap()'s to do buffer switches * instead of setting up a fresh grecs_meta1_in. A bit of a hack ... */ static int grecs_meta1__did_buffer_switch_on_eof; /* %ok-for-header */ /* %endif */ void grecs_meta1_restart (FILE *input_file ); void grecs_meta1__switch_to_buffer (YY_BUFFER_STATE new_buffer ); YY_BUFFER_STATE grecs_meta1__create_buffer (FILE *file,int size ); void grecs_meta1__delete_buffer (YY_BUFFER_STATE b ); void grecs_meta1__flush_buffer (YY_BUFFER_STATE b ); void grecs_meta1_push_buffer_state (YY_BUFFER_STATE new_buffer ); void grecs_meta1_pop_buffer_state (void ); static void grecs_meta1_ensure_buffer_stack (void ); static void grecs_meta1__load_buffer_state (void ); static void grecs_meta1__init_buffer (YY_BUFFER_STATE b,FILE *file ); #define YY_FLUSH_BUFFER grecs_meta1__flush_buffer(YY_CURRENT_BUFFER ) YY_BUFFER_STATE grecs_meta1__scan_buffer (char *base,grecs_meta1__size_t size ); YY_BUFFER_STATE grecs_meta1__scan_string (grecs_meta1_const char *grecs_meta1__str ); YY_BUFFER_STATE grecs_meta1__scan_bytes (grecs_meta1_const char *bytes,grecs_meta1__size_t len ); /* %endif */ void *grecs_meta1_alloc (grecs_meta1__size_t ); void *grecs_meta1_realloc (void *,grecs_meta1__size_t ); void grecs_meta1_free (void * ); #define grecs_meta1__new_buffer grecs_meta1__create_buffer #define grecs_meta1__set_interactive(is_interactive) \ { \ if ( ! YY_CURRENT_BUFFER ){ \ grecs_meta1_ensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ grecs_meta1__create_buffer(grecs_meta1_in,YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->grecs_meta1__is_interactive = is_interactive; \ } #define grecs_meta1__set_bol(at_bol) \ { \ if ( ! YY_CURRENT_BUFFER ){\ grecs_meta1_ensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ grecs_meta1__create_buffer(grecs_meta1_in,YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->grecs_meta1__at_bol = at_bol; \ } #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->grecs_meta1__at_bol) /* %% [1.0] grecs_meta1_text/grecs_meta1_in/grecs_meta1_out/grecs_meta1__state_type/grecs_meta1_lineno etc. def's & init go here */ /* Begin user sect3 */ #define FLEX_DEBUG typedef unsigned char YY_CHAR; FILE *grecs_meta1_in = (FILE *) 0, *grecs_meta1_out = (FILE *) 0; typedef int grecs_meta1__state_type; extern int grecs_meta1_lineno; int grecs_meta1_lineno = 1; extern char *grecs_meta1_text; #define grecs_meta1_text_ptr grecs_meta1_text /* %if-c-only Standard (non-C++) definition */ static grecs_meta1__state_type grecs_meta1__get_previous_state (void ); static grecs_meta1__state_type grecs_meta1__try_NUL_trans (grecs_meta1__state_type current_state ); static int grecs_meta1__get_next_buffer (void ); static void grecs_meta1__fatal_error (grecs_meta1_const char msg[] ); /* %endif */ /* Done after the current pattern has been matched and before the * corresponding action - sets up grecs_meta1_text. */ #define YY_DO_BEFORE_ACTION \ (grecs_meta1_text_ptr) = grecs_meta1__bp; \ /* %% [2.0] code to fiddle grecs_meta1_text and grecs_meta1_leng for grecs_meta1_more() goes here \ */\ grecs_meta1_leng = (size_t) (grecs_meta1__cp - grecs_meta1__bp); \ (grecs_meta1__hold_char) = *grecs_meta1__cp; \ *grecs_meta1__cp = '\0'; \ /* %% [3.0] code to copy grecs_meta1_text_ptr to grecs_meta1_text[] goes here, if %array \ */\ (grecs_meta1__c_buf_p) = grecs_meta1__cp; /* %% [4.0] data tables for the DFA and the user's section 1 definitions go here */ #define YY_NUM_RULES 23 #define YY_END_OF_BUFFER 24 /* This struct is not used in this scanner, but its presence is necessary. */ struct grecs_meta1__trans_info { flex_int32_t grecs_meta1__verify; flex_int32_t grecs_meta1__nxt; }; static grecs_meta1_const flex_int16_t grecs_meta1__accept[54] = { 0, 0, 0, 2, 2, 0, 0, 24, 22, 19, 20, 22, 7, 11, 21, 11, 11, 11, 2, 4, 3, 23, 18, 17, 23, 19, 0, 12, 0, 7, 6, 11, 1, 9, 11, 10, 2, 3, 3, 5, 0, 18, 17, 0, 16, 16, 14, 14, 8, 15, 13, 15, 13, 0 } ; static grecs_meta1_const flex_int32_t grecs_meta1__ec[256] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 4, 5, 1, 1, 1, 1, 1, 1, 6, 1, 7, 8, 8, 9, 10, 11, 11, 11, 11, 11, 11, 11, 12, 12, 8, 7, 1, 7, 1, 1, 1, 13, 13, 13, 13, 13, 13, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 14, 8, 8, 1, 15, 1, 1, 8, 1, 13, 13, 13, 13, 13, 13, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 16, 8, 8, 7, 1, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; static grecs_meta1_const flex_int32_t grecs_meta1__meta[17] = { 0, 1, 1, 2, 1, 1, 3, 1, 4, 4, 5, 5, 5, 5, 4, 1, 4 } ; static grecs_meta1_const flex_int16_t grecs_meta1__base[68] = { 0, 0, 0, 14, 15, 19, 32, 60, 136, 51, 136, 15, 48, 0, 136, 44, 38, 45, 0, 136, 18, 55, 136, 136, 30, 43, 22, 136, 28, 40, 136, 0, 0, 18, 61, 0, 0, 32, 33, 136, 72, 136, 136, 24, 136, 0, 136, 0, 0, 0, 0, 136, 136, 136, 87, 92, 97, 102, 105, 110, 115, 120, 125, 130, 28, 27, 26, 20 } ; static grecs_meta1_const flex_int16_t grecs_meta1__def[68] = { 0, 53, 1, 54, 54, 55, 55, 53, 53, 53, 53, 56, 57, 58, 53, 58, 58, 58, 59, 53, 60, 61, 53, 53, 62, 53, 56, 53, 63, 57, 53, 58, 58, 58, 58, 17, 59, 60, 60, 53, 61, 53, 53, 62, 53, 64, 53, 65, 34, 66, 67, 53, 53, 0, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53 } ; static grecs_meta1_const flex_int16_t grecs_meta1__nxt[153] = { 0, 8, 9, 10, 11, 12, 13, 14, 13, 15, 16, 17, 17, 13, 13, 8, 13, 19, 19, 27, 20, 20, 22, 23, 38, 52, 27, 39, 33, 33, 28, 51, 50, 49, 24, 22, 23, 28, 53, 38, 45, 53, 39, 30, 47, 25, 45, 24, 33, 33, 32, 30, 34, 25, 34, 35, 35, 35, 41, 42, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 43, 48, 48, 48, 48, 41, 42, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 43, 18, 18, 18, 18, 18, 21, 21, 21, 21, 21, 26, 53, 26, 26, 26, 29, 29, 29, 29, 29, 31, 31, 31, 36, 53, 53, 36, 36, 37, 53, 37, 37, 37, 40, 40, 40, 40, 40, 44, 53, 44, 44, 44, 46, 53, 46, 46, 46, 7, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53 } ; static grecs_meta1_const flex_int16_t grecs_meta1__chk[153] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 4, 11, 3, 4, 5, 5, 20, 67, 26, 20, 33, 33, 11, 66, 65, 64, 5, 6, 6, 26, 37, 38, 43, 37, 38, 29, 28, 25, 24, 6, 16, 16, 15, 12, 16, 9, 16, 17, 17, 17, 21, 21, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 34, 34, 34, 34, 40, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 54, 54, 54, 54, 54, 55, 55, 55, 55, 55, 56, 0, 56, 56, 56, 57, 57, 57, 57, 57, 58, 58, 58, 59, 0, 0, 59, 59, 60, 0, 60, 60, 60, 61, 61, 61, 61, 61, 62, 0, 62, 62, 62, 63, 0, 63, 63, 63, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53 } ; static grecs_meta1__state_type grecs_meta1__last_accepting_state; static char *grecs_meta1__last_accepting_cpos; extern int grecs_meta1__flex_debug; int grecs_meta1__flex_debug = 1; static grecs_meta1_const flex_int16_t grecs_meta1__rule_linenum[23] = { 0, 50, 51, 52, 53, 54, 56, 57, 59, 60, 61, 66, 71, 75, 79, 84, 85, 87, 92, 99, 100, 101, 102 } ; /* The intent behind this definition is that it'll catch * any uses of REJECT which flex missed. */ #define REJECT reject_used_but_not_detected #define grecs_meta1_more() grecs_meta1_more_used_but_not_detected #define YY_MORE_ADJ 0 #define YY_RESTORE_YY_MORE_OFFSET char *grecs_meta1_text; #line 1 "meta1-lex.l" /* MeTA1 configuration lexer for Grecs. -*- c -*- */ #define YY_NO_INPUT 1 #line 33 "meta1-lex.l" static int grecs_meta1_wrap(void); static void meta1_line_add_unescape_hex(const char *text, size_t len); #define YY_USER_ACTION do { \ if (YYSTATE == 0) { \ grecs_meta1_lloc.beg = grecs_current_locus_point; \ grecs_meta1_lloc.beg.col++; \ } \ grecs_current_locus_point.col += grecs_meta1_leng; \ grecs_meta1_lloc.end = grecs_current_locus_point; \ } while (0); #line 634 "meta1-lex.c" #define INITIAL 0 #define COMMENT 1 #define STR 2 #ifndef YY_NO_UNISTD_H /* Special case for "unistd.h", since it is non-ANSI. We include it way * down here because we want the user's section 1 to have been scanned first. * The user has a chance to override it with an option. */ /* %if-c-only */ #include <unistd.h> /* %endif */ /* %if-c++-only */ /* %endif */ #endif #ifndef YY_EXTRA_TYPE #define YY_EXTRA_TYPE void * #endif /* %if-c-only Reentrant structure and macros (non-C++). */ /* %if-reentrant */ /* %if-c-only */ static int grecs_meta1__init_globals (void ); /* %endif */ /* %if-reentrant */ /* %endif */ /* %endif End reentrant structures and macros. */ /* Accessor methods to globals. These are made visible to non-reentrant scanners for convenience. */ int grecs_meta1_lex_destroy (void ); int grecs_meta1_get_debug (void ); void grecs_meta1_set_debug (int debug_flag ); YY_EXTRA_TYPE grecs_meta1_get_extra (void ); void grecs_meta1_set_extra (YY_EXTRA_TYPE user_defined ); FILE *grecs_meta1_get_in (void ); void grecs_meta1_set_in (FILE * in_str ); FILE *grecs_meta1_get_out (void ); void grecs_meta1_set_out (FILE * out_str ); grecs_meta1__size_t grecs_meta1_get_leng (void ); char *grecs_meta1_get_text (void ); int grecs_meta1_get_lineno (void ); void grecs_meta1_set_lineno (int line_number ); /* %if-bison-bridge */ /* %endif */ /* Macros after this point can all be overridden by user definitions in * section 1. */ #ifndef YY_SKIP_YYWRAP #ifdef __cplusplus extern "C" int grecs_meta1_wrap (void ); #else extern int grecs_meta1_wrap (void ); #endif #endif /* %not-for-header */ /* %ok-for-header */ /* %endif */ #ifndef grecs_meta1_text_ptr static void grecs_meta1__flex_strncpy (char *,grecs_meta1_const char *,int ); #endif #ifdef YY_NEED_STRLEN static int grecs_meta1__flex_strlen (grecs_meta1_const char * ); #endif #ifndef YY_NO_INPUT /* %if-c-only Standard (non-C++) definition */ /* %not-for-header */ #ifdef __cplusplus static int grecs_meta1_input (void ); #else static int input (void ); #endif /* %ok-for-header */ /* %endif */ #endif /* %if-c-only */ /* %endif */ /* Amount of stuff to slurp up with each read. */ #ifndef YY_READ_BUF_SIZE #define YY_READ_BUF_SIZE 8192 #endif /* Copy whatever the last rule matched to the standard output. */ #ifndef ECHO /* %if-c-only Standard (non-C++) definition */ /* This used to be an fputs(), but since the string might contain NUL's, * we now use fwrite(). */ #define ECHO do { if (fwrite( grecs_meta1_text, grecs_meta1_leng, 1, grecs_meta1_out )) {} } while (0) /* %endif */ /* %if-c++-only C++ definition */ /* %endif */ #endif /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, * is returned in "result". */ #ifndef YY_INPUT #define YY_INPUT(buf,result,max_size) \ /* %% [5.0] fread()/read() definition of YY_INPUT goes here unless we're doing C++ \ */\ if ( YY_CURRENT_BUFFER_LVALUE->grecs_meta1__is_interactive ) \ { \ int c = '*'; \ size_t n; \ for ( n = 0; n < max_size && \ (c = getc( grecs_meta1_in )) != EOF && c != '\n'; ++n ) \ buf[n] = (char) c; \ if ( c == '\n' ) \ buf[n++] = (char) c; \ if ( c == EOF && ferror( grecs_meta1_in ) ) \ YY_FATAL_ERROR( "input in flex scanner failed" ); \ result = n; \ } \ else \ { \ errno=0; \ while ( (result = fread(buf, 1, max_size, grecs_meta1_in))==0 && ferror(grecs_meta1_in)) \ { \ if( errno != EINTR) \ { \ YY_FATAL_ERROR( "input in flex scanner failed" ); \ break; \ } \ errno=0; \ clearerr(grecs_meta1_in); \ } \ }\ \ /* %if-c++-only C++ definition \ */\ /* %endif */ #endif /* No semi-colon after return; correct usage is to write "grecs_meta1_terminate();" - * we don't want an extra ';' after the "return" because that will cause * some compilers to complain about unreachable statements. */ #ifndef grecs_meta1_terminate #define grecs_meta1_terminate() return YY_NULL #endif /* Number of entries by which start-condition stack grows. */ #ifndef YY_START_STACK_INCR #define YY_START_STACK_INCR 25 #endif /* Report a fatal error. */ #ifndef YY_FATAL_ERROR /* %if-c-only */ #define YY_FATAL_ERROR(msg) grecs_meta1__fatal_error( msg ) /* %endif */ /* %if-c++-only */ /* %endif */ #endif /* %if-tables-serialization structures and prototypes */ /* %not-for-header */ /* %ok-for-header */ /* %not-for-header */ /* %tables-grecs_meta1_dmap generated elements */ /* %endif */ /* end tables serialization structures and prototypes */ /* %ok-for-header */ /* Default declaration of generated scanner - a define so the user can * easily add parameters. */ #ifndef YY_DECL #define YY_DECL_IS_OURS 1 /* %if-c-only Standard (non-C++) definition */ extern int grecs_meta1_lex (void); #define YY_DECL int grecs_meta1_lex (void) /* %endif */ /* %if-c++-only C++ definition */ /* %endif */ #endif /* !YY_DECL */ /* Code executed at the beginning of each rule, after grecs_meta1_text and grecs_meta1_leng * have been set up. */ #ifndef YY_USER_ACTION #define YY_USER_ACTION #endif /* Code executed at the end of each rule. */ #ifndef YY_BREAK #define YY_BREAK break; #endif /* %% [6.0] YY_RULE_SETUP definition goes here */ #define YY_RULE_SETUP \ YY_USER_ACTION /* %not-for-header */ /** The main scanner function which does all the work. */ YY_DECL { register grecs_meta1__state_type grecs_meta1__current_state; register char *grecs_meta1__cp, *grecs_meta1__bp; register int grecs_meta1__act; /* %% [7.0] user's declarations go here */ #line 48 "meta1-lex.l" /* C-style comments */ #line 879 "meta1-lex.c" if ( !(grecs_meta1__init) ) { (grecs_meta1__init) = 1; #ifdef YY_USER_INIT YY_USER_INIT; #endif if ( ! (grecs_meta1__start) ) (grecs_meta1__start) = 1; /* first start state */ if ( ! grecs_meta1_in ) /* %if-c-only */ grecs_meta1_in = stdin; /* %endif */ /* %if-c++-only */ /* %endif */ if ( ! grecs_meta1_out ) /* %if-c-only */ grecs_meta1_out = stdout; /* %endif */ /* %if-c++-only */ /* %endif */ if ( ! YY_CURRENT_BUFFER ) { grecs_meta1_ensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = grecs_meta1__create_buffer(grecs_meta1_in,YY_BUF_SIZE ); } grecs_meta1__load_buffer_state( ); } while ( 1 ) /* loops until end-of-file is reached */ { /* %% [8.0] grecs_meta1_more()-related code goes here */ grecs_meta1__cp = (grecs_meta1__c_buf_p); /* Support of grecs_meta1_text. */ *grecs_meta1__cp = (grecs_meta1__hold_char); /* grecs_meta1__bp points to the position in grecs_meta1__ch_buf of the start of * the current run. */ grecs_meta1__bp = grecs_meta1__cp; /* %% [9.0] code to set up and find next match goes here */ grecs_meta1__current_state = (grecs_meta1__start); grecs_meta1__match: do { register YY_CHAR grecs_meta1__c = grecs_meta1__ec[YY_SC_TO_UI(*grecs_meta1__cp)]; if ( grecs_meta1__accept[grecs_meta1__current_state] ) { (grecs_meta1__last_accepting_state) = grecs_meta1__current_state; (grecs_meta1__last_accepting_cpos) = grecs_meta1__cp; } while ( grecs_meta1__chk[grecs_meta1__base[grecs_meta1__current_state] + grecs_meta1__c] != grecs_meta1__current_state ) { grecs_meta1__current_state = (int) grecs_meta1__def[grecs_meta1__current_state]; if ( grecs_meta1__current_state >= 54 ) grecs_meta1__c = grecs_meta1__meta[(unsigned int) grecs_meta1__c]; } grecs_meta1__current_state = grecs_meta1__nxt[grecs_meta1__base[grecs_meta1__current_state] + (unsigned int) grecs_meta1__c]; ++grecs_meta1__cp; } while ( grecs_meta1__base[grecs_meta1__current_state] != 136 ); grecs_meta1__find_action: /* %% [10.0] code to find the action number goes here */ grecs_meta1__act = grecs_meta1__accept[grecs_meta1__current_state]; if ( grecs_meta1__act == 0 ) { /* have to back up */ grecs_meta1__cp = (grecs_meta1__last_accepting_cpos); grecs_meta1__current_state = (grecs_meta1__last_accepting_state); grecs_meta1__act = grecs_meta1__accept[grecs_meta1__current_state]; } YY_DO_BEFORE_ACTION; /* %% [11.0] code for grecs_meta1_lineno update goes here */ do_action: /* This label is used only to access EOF actions. */ /* %% [12.0] debug code goes here */ if ( grecs_meta1__flex_debug ) { if ( grecs_meta1__act == 0 ) fprintf( stderr, "--scanner backing up\n" ); else if ( grecs_meta1__act < 23 ) fprintf( stderr, "--accepting rule at line %ld (\"%s\")\n", (long)grecs_meta1__rule_linenum[grecs_meta1__act], grecs_meta1_text ); else if ( grecs_meta1__act == 23 ) fprintf( stderr, "--accepting default rule (\"%s\")\n", grecs_meta1_text ); else if ( grecs_meta1__act == 24 ) fprintf( stderr, "--(end of buffer or a NUL)\n" ); else fprintf( stderr, "--EOF (start condition %d)\n", YY_START ); } switch ( grecs_meta1__act ) { /* beginning of action switch */ /* %% [13.0] actions go here */ case 0: /* must back up */ /* undo the effects of YY_DO_BEFORE_ACTION */ *grecs_meta1__cp = (grecs_meta1__hold_char); grecs_meta1__cp = (grecs_meta1__last_accepting_cpos); grecs_meta1__current_state = (grecs_meta1__last_accepting_state); goto grecs_meta1__find_action; case 1: YY_RULE_SETUP #line 50 "meta1-lex.l" BEGIN (COMMENT); YY_BREAK case 2: YY_RULE_SETUP #line 51 "meta1-lex.l" /* eat anything that's not a '*' */ YY_BREAK case 3: YY_RULE_SETUP #line 52 "meta1-lex.l" /* eat up '*'s not followed by '/'s */ YY_BREAK case 4: /* rule 4 can match eol */ YY_RULE_SETUP #line 53 "meta1-lex.l" grecs_locus_point_advance_line(grecs_current_locus_point); YY_BREAK case 5: YY_RULE_SETUP #line 54 "meta1-lex.l" BEGIN (INITIAL); YY_BREAK /* End-of-line comments */ case 6: /* rule 6 can match eol */ YY_RULE_SETUP #line 56 "meta1-lex.l" { grecs_locus_point_advance_line(grecs_current_locus_point); } YY_BREAK case 7: YY_RULE_SETUP #line 57 "meta1-lex.l" /* end-of-file comment */; YY_BREAK /* Number */ case 8: #line 60 "meta1-lex.l" case 9: #line 61 "meta1-lex.l" case 10: YY_RULE_SETUP #line 61 "meta1-lex.l" { grecs_line_begin(); grecs_line_add(grecs_meta1_text, grecs_meta1_leng); grecs_meta1_lval.string = grecs_line_finish(); return META1_STRING; } YY_BREAK /* Identifiers (unquoted strings) */ case 11: YY_RULE_SETUP #line 66 "meta1-lex.l" { grecs_line_begin(); grecs_line_add(grecs_meta1_text, grecs_meta1_leng); grecs_meta1_lval.string = grecs_line_finish(); return META1_IDENT; } YY_BREAK /* Quoted strings */ case 12: YY_RULE_SETUP #line 71 "meta1-lex.l" { grecs_line_begin(); grecs_line_add(grecs_meta1_text + 1, grecs_meta1_leng - 2); grecs_meta1_lval.string = grecs_line_finish(); return META1_STRING; } YY_BREAK case 13: YY_RULE_SETUP #line 75 "meta1-lex.l" { BEGIN(STR); grecs_line_begin(); meta1_line_add_unescape_hex(grecs_meta1_text + 1, grecs_meta1_leng - 1); } YY_BREAK case 14: YY_RULE_SETUP #line 79 "meta1-lex.l" { BEGIN(STR); grecs_line_begin(); grecs_line_acc_grow_unescape_last(grecs_meta1_text + 1, grecs_meta1_leng - 1, &grecs_meta1_lloc); } YY_BREAK case 15: YY_RULE_SETUP #line 84 "meta1-lex.l" { meta1_line_add_unescape_hex(grecs_meta1_text, grecs_meta1_leng); } YY_BREAK case 16: YY_RULE_SETUP #line 85 "meta1-lex.l" { grecs_line_acc_grow_unescape_last(grecs_meta1_text, grecs_meta1_leng, &grecs_meta1_lloc); } YY_BREAK case 17: YY_RULE_SETUP #line 87 "meta1-lex.l" { BEGIN(INITIAL); if (grecs_meta1_leng > 1) grecs_line_add(grecs_meta1_text, grecs_meta1_leng - 1); grecs_meta1_lval.string = grecs_line_finish(); return META1_STRING; } YY_BREAK case 18: /* rule 18 can match eol */ YY_RULE_SETUP #line 92 "meta1-lex.l" { BEGIN(INITIAL); grecs_error(&grecs_meta1_lloc, 0, _("newline in a string")); grecs_line_add(grecs_meta1_text, grecs_meta1_leng - 1); grecs_meta1_lval.string = grecs_line_finish(); return META1_STRING; } YY_BREAK /* Other tokens */ case 19: YY_RULE_SETUP #line 99 "meta1-lex.l" ; YY_BREAK case 20: /* rule 20 can match eol */ YY_RULE_SETUP #line 100 "meta1-lex.l" { grecs_locus_point_advance_line(grecs_current_locus_point); } YY_BREAK case 21: YY_RULE_SETUP #line 101 "meta1-lex.l" return grecs_meta1_text[0]; YY_BREAK case 22: YY_RULE_SETUP #line 102 "meta1-lex.l" { grecs_error(&grecs_meta1_lloc, 0, (isascii(grecs_meta1_text[0]) && isprint(grecs_meta1_text[0])) ? _("stray character %c") : _("stray character \\%03o"), (unsigned char) grecs_meta1_text[0]); } YY_BREAK case 23: YY_RULE_SETUP #line 107 "meta1-lex.l" ECHO; YY_BREAK #line 1141 "meta1-lex.c" case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(COMMENT): case YY_STATE_EOF(STR): grecs_meta1_terminate(); case YY_END_OF_BUFFER: { /* Amount of text matched not including the EOB char. */ int grecs_meta1__amount_of_matched_text = (int) (grecs_meta1__cp - (grecs_meta1_text_ptr)) - 1; /* Undo the effects of YY_DO_BEFORE_ACTION. */ *grecs_meta1__cp = (grecs_meta1__hold_char); YY_RESTORE_YY_MORE_OFFSET if ( YY_CURRENT_BUFFER_LVALUE->grecs_meta1__buffer_status == YY_BUFFER_NEW ) { /* We're scanning a new file or input source. It's * possible that this happened because the user * just pointed grecs_meta1_in at a new source and called * grecs_meta1_lex(). If so, then we have to assure * consistency between YY_CURRENT_BUFFER and our * globals. Here is the right place to do so, because * this is the first action (other than possibly a * back-up) that will match for the new input source. */ (grecs_meta1__n_chars) = YY_CURRENT_BUFFER_LVALUE->grecs_meta1__n_chars; YY_CURRENT_BUFFER_LVALUE->grecs_meta1__input_file = grecs_meta1_in; YY_CURRENT_BUFFER_LVALUE->grecs_meta1__buffer_status = YY_BUFFER_NORMAL; } /* Note that here we test for grecs_meta1__c_buf_p "<=" to the position * of the first EOB in the buffer, since grecs_meta1__c_buf_p will * already have been incremented past the NUL character * (since all states make transitions on EOB to the * end-of-buffer state). Contrast this with the test * in input(). */ if ( (grecs_meta1__c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->grecs_meta1__ch_buf[(grecs_meta1__n_chars)] ) { /* This was really a NUL. */ grecs_meta1__state_type grecs_meta1__next_state; (grecs_meta1__c_buf_p) = (grecs_meta1_text_ptr) + grecs_meta1__amount_of_matched_text; grecs_meta1__current_state = grecs_meta1__get_previous_state( ); /* Okay, we're now positioned to make the NUL * transition. We couldn't have * grecs_meta1__get_previous_state() go ahead and do it * for us because it doesn't know how to deal * with the possibility of jamming (and we don't * want to build jamming into it because then it * will run more slowly). */ grecs_meta1__next_state = grecs_meta1__try_NUL_trans( grecs_meta1__current_state ); grecs_meta1__bp = (grecs_meta1_text_ptr) + YY_MORE_ADJ; if ( grecs_meta1__next_state ) { /* Consume the NUL. */ grecs_meta1__cp = ++(grecs_meta1__c_buf_p); grecs_meta1__current_state = grecs_meta1__next_state; goto grecs_meta1__match; } else { /* %% [14.0] code to do back-up for compressed tables and set up grecs_meta1__cp goes here */ grecs_meta1__cp = (grecs_meta1__c_buf_p); goto grecs_meta1__find_action; } } else switch ( grecs_meta1__get_next_buffer( ) ) { case EOB_ACT_END_OF_FILE: { (grecs_meta1__did_buffer_switch_on_eof) = 0; if ( grecs_meta1_wrap( ) ) { /* Note: because we've taken care in * grecs_meta1__get_next_buffer() to have set up * grecs_meta1_text, we can now set up * grecs_meta1__c_buf_p so that if some total * hoser (like flex itself) wants to * call the scanner after we return the * YY_NULL, it'll still work - another * YY_NULL will get returned. */ (grecs_meta1__c_buf_p) = (grecs_meta1_text_ptr) + YY_MORE_ADJ; grecs_meta1__act = YY_STATE_EOF(YY_START); goto do_action; } else { if ( ! (grecs_meta1__did_buffer_switch_on_eof) ) YY_NEW_FILE; } break; } case EOB_ACT_CONTINUE_SCAN: (grecs_meta1__c_buf_p) = (grecs_meta1_text_ptr) + grecs_meta1__amount_of_matched_text; grecs_meta1__current_state = grecs_meta1__get_previous_state( ); grecs_meta1__cp = (grecs_meta1__c_buf_p); grecs_meta1__bp = (grecs_meta1_text_ptr) + YY_MORE_ADJ; goto grecs_meta1__match; case EOB_ACT_LAST_MATCH: (grecs_meta1__c_buf_p) = &YY_CURRENT_BUFFER_LVALUE->grecs_meta1__ch_buf[(grecs_meta1__n_chars)]; grecs_meta1__current_state = grecs_meta1__get_previous_state( ); grecs_meta1__cp = (grecs_meta1__c_buf_p); grecs_meta1__bp = (grecs_meta1_text_ptr) + YY_MORE_ADJ; goto grecs_meta1__find_action; } break; } default: YY_FATAL_ERROR( "fatal flex scanner internal error--no action found" ); } /* end of action switch */ } /* end of scanning one token */ } /* end of grecs_meta1_lex */ /* %ok-for-header */ /* %if-c++-only */ /* %not-for-header */ /* %ok-for-header */ /* %endif */ /* grecs_meta1__get_next_buffer - try to read in a new buffer * * Returns a code representing an action: * EOB_ACT_LAST_MATCH - * EOB_ACT_CONTINUE_SCAN - continue scanning from current position * EOB_ACT_END_OF_FILE - end of file */ /* %if-c-only */ static int grecs_meta1__get_next_buffer (void) /* %endif */ /* %if-c++-only */ /* %endif */ { register char *dest = YY_CURRENT_BUFFER_LVALUE->grecs_meta1__ch_buf; register char *source = (grecs_meta1_text_ptr); register int number_to_move, i; int ret_val; if ( (grecs_meta1__c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->grecs_meta1__ch_buf[(grecs_meta1__n_chars) + 1] ) YY_FATAL_ERROR( "fatal flex scanner internal error--end of buffer missed" ); if ( YY_CURRENT_BUFFER_LVALUE->grecs_meta1__fill_buffer == 0 ) { /* Don't try to fill the buffer, so this is an EOF. */ if ( (grecs_meta1__c_buf_p) - (grecs_meta1_text_ptr) - YY_MORE_ADJ == 1 ) { /* We matched a single character, the EOB, so * treat this as a final EOF. */ return EOB_ACT_END_OF_FILE; } else { /* We matched some text prior to the EOB, first * process it. */ return EOB_ACT_LAST_MATCH; } } /* Try to read more data. */ /* First move last chars to start of buffer. */ number_to_move = (int) ((grecs_meta1__c_buf_p) - (grecs_meta1_text_ptr)) - 1; for ( i = 0; i < number_to_move; ++i ) *(dest++) = *(source++); if ( YY_CURRENT_BUFFER_LVALUE->grecs_meta1__buffer_status == YY_BUFFER_EOF_PENDING ) /* don't do the read, it's not guaranteed to return an EOF, * just force an EOF */ YY_CURRENT_BUFFER_LVALUE->grecs_meta1__n_chars = (grecs_meta1__n_chars) = 0; else { grecs_meta1__size_t num_to_read = YY_CURRENT_BUFFER_LVALUE->grecs_meta1__buf_size - number_to_move - 1; while ( num_to_read <= 0 ) { /* Not enough room in the buffer - grow it. */ /* just a shorter name for the current buffer */ YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE; int grecs_meta1__c_buf_p_offset = (int) ((grecs_meta1__c_buf_p) - b->grecs_meta1__ch_buf); if ( b->grecs_meta1__is_our_buffer ) { grecs_meta1__size_t new_size = b->grecs_meta1__buf_size * 2; if ( new_size <= 0 ) b->grecs_meta1__buf_size += b->grecs_meta1__buf_size / 8; else b->grecs_meta1__buf_size *= 2; b->grecs_meta1__ch_buf = (char *) /* Include room in for 2 EOB chars. */ grecs_meta1_realloc((void *) b->grecs_meta1__ch_buf,b->grecs_meta1__buf_size + 2 ); } else /* Can't grow it, we don't own it. */ b->grecs_meta1__ch_buf = 0; if ( ! b->grecs_meta1__ch_buf ) YY_FATAL_ERROR( "fatal error - scanner input buffer overflow" ); (grecs_meta1__c_buf_p) = &b->grecs_meta1__ch_buf[grecs_meta1__c_buf_p_offset]; num_to_read = YY_CURRENT_BUFFER_LVALUE->grecs_meta1__buf_size - number_to_move - 1; } if ( num_to_read > YY_READ_BUF_SIZE ) num_to_read = YY_READ_BUF_SIZE; /* Read in more data. */ YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->grecs_meta1__ch_buf[number_to_move]), (grecs_meta1__n_chars), num_to_read ); YY_CURRENT_BUFFER_LVALUE->grecs_meta1__n_chars = (grecs_meta1__n_chars); } if ( (grecs_meta1__n_chars) == 0 ) { if ( number_to_move == YY_MORE_ADJ ) { ret_val = EOB_ACT_END_OF_FILE; grecs_meta1_restart(grecs_meta1_in ); } else { ret_val = EOB_ACT_LAST_MATCH; YY_CURRENT_BUFFER_LVALUE->grecs_meta1__buffer_status = YY_BUFFER_EOF_PENDING; } } else ret_val = EOB_ACT_CONTINUE_SCAN; if ((grecs_meta1__size_t) ((grecs_meta1__n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->grecs_meta1__buf_size) { /* Extend the array by 50%, plus the number we really need. */ grecs_meta1__size_t new_size = (grecs_meta1__n_chars) + number_to_move + ((grecs_meta1__n_chars) >> 1); YY_CURRENT_BUFFER_LVALUE->grecs_meta1__ch_buf = (char *) grecs_meta1_realloc((void *) YY_CURRENT_BUFFER_LVALUE->grecs_meta1__ch_buf,new_size ); if ( ! YY_CURRENT_BUFFER_LVALUE->grecs_meta1__ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in grecs_meta1__get_next_buffer()" ); } (grecs_meta1__n_chars) += number_to_move; YY_CURRENT_BUFFER_LVALUE->grecs_meta1__ch_buf[(grecs_meta1__n_chars)] = YY_END_OF_BUFFER_CHAR; YY_CURRENT_BUFFER_LVALUE->grecs_meta1__ch_buf[(grecs_meta1__n_chars) + 1] = YY_END_OF_BUFFER_CHAR; (grecs_meta1_text_ptr) = &YY_CURRENT_BUFFER_LVALUE->grecs_meta1__ch_buf[0]; return ret_val; } /* grecs_meta1__get_previous_state - get the state just before the EOB char was reached */ /* %if-c-only */ /* %not-for-header */ static grecs_meta1__state_type grecs_meta1__get_previous_state (void) /* %endif */ /* %if-c++-only */ /* %endif */ { register grecs_meta1__state_type grecs_meta1__current_state; register char *grecs_meta1__cp; /* %% [15.0] code to get the start state into grecs_meta1__current_state goes here */ grecs_meta1__current_state = (grecs_meta1__start); for ( grecs_meta1__cp = (grecs_meta1_text_ptr) + YY_MORE_ADJ; grecs_meta1__cp < (grecs_meta1__c_buf_p); ++grecs_meta1__cp ) { /* %% [16.0] code to find the next state goes here */ register YY_CHAR grecs_meta1__c = (*grecs_meta1__cp ? grecs_meta1__ec[YY_SC_TO_UI(*grecs_meta1__cp)] : 1); if ( grecs_meta1__accept[grecs_meta1__current_state] ) { (grecs_meta1__last_accepting_state) = grecs_meta1__current_state; (grecs_meta1__last_accepting_cpos) = grecs_meta1__cp; } while ( grecs_meta1__chk[grecs_meta1__base[grecs_meta1__current_state] + grecs_meta1__c] != grecs_meta1__current_state ) { grecs_meta1__current_state = (int) grecs_meta1__def[grecs_meta1__current_state]; if ( grecs_meta1__current_state >= 54 ) grecs_meta1__c = grecs_meta1__meta[(unsigned int) grecs_meta1__c]; } grecs_meta1__current_state = grecs_meta1__nxt[grecs_meta1__base[grecs_meta1__current_state] + (unsigned int) grecs_meta1__c]; } return grecs_meta1__current_state; } /* grecs_meta1__try_NUL_trans - try to make a transition on the NUL character * * synopsis * next_state = grecs_meta1__try_NUL_trans( current_state ); */ /* %if-c-only */ static grecs_meta1__state_type grecs_meta1__try_NUL_trans (grecs_meta1__state_type grecs_meta1__current_state ) /* %endif */ /* %if-c++-only */ /* %endif */ { register int grecs_meta1__is_jam; /* %% [17.0] code to find the next state, and perhaps do backing up, goes here */ register char *grecs_meta1__cp = (grecs_meta1__c_buf_p); register YY_CHAR grecs_meta1__c = 1; if ( grecs_meta1__accept[grecs_meta1__current_state] ) { (grecs_meta1__last_accepting_state) = grecs_meta1__current_state; (grecs_meta1__last_accepting_cpos) = grecs_meta1__cp; } while ( grecs_meta1__chk[grecs_meta1__base[grecs_meta1__current_state] + grecs_meta1__c] != grecs_meta1__current_state ) { grecs_meta1__current_state = (int) grecs_meta1__def[grecs_meta1__current_state]; if ( grecs_meta1__current_state >= 54 ) grecs_meta1__c = grecs_meta1__meta[(unsigned int) grecs_meta1__c]; } grecs_meta1__current_state = grecs_meta1__nxt[grecs_meta1__base[grecs_meta1__current_state] + (unsigned int) grecs_meta1__c]; grecs_meta1__is_jam = (grecs_meta1__current_state == 53); return grecs_meta1__is_jam ? 0 : grecs_meta1__current_state; } /* %if-c-only */ /* %endif */ /* %if-c-only */ #ifndef YY_NO_INPUT #ifdef __cplusplus static int grecs_meta1_input (void) #else static int input (void) #endif /* %endif */ /* %if-c++-only */ /* %endif */ { int c; *(grecs_meta1__c_buf_p) = (grecs_meta1__hold_char); if ( *(grecs_meta1__c_buf_p) == YY_END_OF_BUFFER_CHAR ) { /* grecs_meta1__c_buf_p now points to the character we want to return. * If this occurs *before* the EOB characters, then it's a * valid NUL; if not, then we've hit the end of the buffer. */ if ( (grecs_meta1__c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->grecs_meta1__ch_buf[(grecs_meta1__n_chars)] ) /* This was really a NUL. */ *(grecs_meta1__c_buf_p) = '\0'; else { /* need more input */ grecs_meta1__size_t offset = (grecs_meta1__c_buf_p) - (grecs_meta1_text_ptr); ++(grecs_meta1__c_buf_p); switch ( grecs_meta1__get_next_buffer( ) ) { case EOB_ACT_LAST_MATCH: /* This happens because grecs_meta1__g_n_b() * sees that we've accumulated a * token and flags that we need to * try matching the token before * proceeding. But for input(), * there's no matching to consider. * So convert the EOB_ACT_LAST_MATCH * to EOB_ACT_END_OF_FILE. */ /* Reset buffer status. */ grecs_meta1_restart(grecs_meta1_in ); /*FALLTHROUGH*/ case EOB_ACT_END_OF_FILE: { if ( grecs_meta1_wrap( ) ) return EOF; if ( ! (grecs_meta1__did_buffer_switch_on_eof) ) YY_NEW_FILE; #ifdef __cplusplus return grecs_meta1_input(); #else return input(); #endif } case EOB_ACT_CONTINUE_SCAN: (grecs_meta1__c_buf_p) = (grecs_meta1_text_ptr) + offset; break; } } } c = *(unsigned char *) (grecs_meta1__c_buf_p); /* cast for 8-bit char's */ *(grecs_meta1__c_buf_p) = '\0'; /* preserve grecs_meta1_text */ (grecs_meta1__hold_char) = *++(grecs_meta1__c_buf_p); /* %% [19.0] update BOL and grecs_meta1_lineno */ return c; } /* %if-c-only */ #endif /* ifndef YY_NO_INPUT */ /* %endif */ /** Immediately switch to a different input stream. * @param input_file A readable stream. * * @note This function does not reset the start condition to @c INITIAL . */ /* %if-c-only */ void grecs_meta1_restart (FILE * input_file ) /* %endif */ /* %if-c++-only */ /* %endif */ { if ( ! YY_CURRENT_BUFFER ){ grecs_meta1_ensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = grecs_meta1__create_buffer(grecs_meta1_in,YY_BUF_SIZE ); } grecs_meta1__init_buffer(YY_CURRENT_BUFFER,input_file ); grecs_meta1__load_buffer_state( ); } /** Switch to a different input buffer. * @param new_buffer The new input buffer. * */ /* %if-c-only */ void grecs_meta1__switch_to_buffer (YY_BUFFER_STATE new_buffer ) /* %endif */ /* %if-c++-only */ /* %endif */ { /* TODO. We should be able to replace this entire function body * with * grecs_meta1_pop_buffer_state(); * grecs_meta1_push_buffer_state(new_buffer); */ grecs_meta1_ensure_buffer_stack (); if ( YY_CURRENT_BUFFER == new_buffer ) return; if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(grecs_meta1__c_buf_p) = (grecs_meta1__hold_char); YY_CURRENT_BUFFER_LVALUE->grecs_meta1__buf_pos = (grecs_meta1__c_buf_p); YY_CURRENT_BUFFER_LVALUE->grecs_meta1__n_chars = (grecs_meta1__n_chars); } YY_CURRENT_BUFFER_LVALUE = new_buffer; grecs_meta1__load_buffer_state( ); /* We don't actually know whether we did this switch during * EOF (grecs_meta1_wrap()) processing, but the only time this flag * is looked at is after grecs_meta1_wrap() is called, so it's safe * to go ahead and always set it. */ (grecs_meta1__did_buffer_switch_on_eof) = 1; } /* %if-c-only */ static void grecs_meta1__load_buffer_state (void) /* %endif */ /* %if-c++-only */ /* %endif */ { (grecs_meta1__n_chars) = YY_CURRENT_BUFFER_LVALUE->grecs_meta1__n_chars; (grecs_meta1_text_ptr) = (grecs_meta1__c_buf_p) = YY_CURRENT_BUFFER_LVALUE->grecs_meta1__buf_pos; grecs_meta1_in = YY_CURRENT_BUFFER_LVALUE->grecs_meta1__input_file; (grecs_meta1__hold_char) = *(grecs_meta1__c_buf_p); } /** Allocate and initialize an input buffer state. * @param file A readable stream. * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. * * @return the allocated buffer state. */ /* %if-c-only */ YY_BUFFER_STATE grecs_meta1__create_buffer (FILE * file, int size ) /* %endif */ /* %if-c++-only */ /* %endif */ { YY_BUFFER_STATE b; b = (YY_BUFFER_STATE) grecs_meta1_alloc(sizeof( struct grecs_meta1__buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in grecs_meta1__create_buffer()" ); b->grecs_meta1__buf_size = size; /* grecs_meta1__ch_buf has to be 2 characters longer than the size given because * we need to put in 2 end-of-buffer characters. */ b->grecs_meta1__ch_buf = (char *) grecs_meta1_alloc(b->grecs_meta1__buf_size + 2 ); if ( ! b->grecs_meta1__ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in grecs_meta1__create_buffer()" ); b->grecs_meta1__is_our_buffer = 1; grecs_meta1__init_buffer(b,file ); return b; } /** Destroy the buffer. * @param b a buffer created with grecs_meta1__create_buffer() * */ /* %if-c-only */ void grecs_meta1__delete_buffer (YY_BUFFER_STATE b ) /* %endif */ /* %if-c++-only */ /* %endif */ { if ( ! b ) return; if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; if ( b->grecs_meta1__is_our_buffer ) grecs_meta1_free((void *) b->grecs_meta1__ch_buf ); grecs_meta1_free((void *) b ); } /* Initializes or reinitializes a buffer. * This function is sometimes called more than once on the same buffer, * such as during a grecs_meta1_restart() or at EOF. */ /* %if-c-only */ static void grecs_meta1__init_buffer (YY_BUFFER_STATE b, FILE * file ) /* %endif */ /* %if-c++-only */ /* %endif */ { int oerrno = errno; grecs_meta1__flush_buffer(b ); b->grecs_meta1__input_file = file; b->grecs_meta1__fill_buffer = 1; /* If b is the current buffer, then grecs_meta1__init_buffer was _probably_ * called from grecs_meta1_restart() or through grecs_meta1__get_next_buffer. * In that case, we don't want to reset the lineno or column. */ if (b != YY_CURRENT_BUFFER){ b->grecs_meta1__bs_lineno = 1; b->grecs_meta1__bs_column = 0; } /* %if-c-only */ b->grecs_meta1__is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; /* %endif */ /* %if-c++-only */ /* %endif */ errno = oerrno; } /** Discard all buffered characters. On the next scan, YY_INPUT will be called. * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. * */ /* %if-c-only */ void grecs_meta1__flush_buffer (YY_BUFFER_STATE b ) /* %endif */ /* %if-c++-only */ /* %endif */ { if ( ! b ) return; b->grecs_meta1__n_chars = 0; /* We always need two end-of-buffer characters. The first causes * a transition to the end-of-buffer state. The second causes * a jam in that state. */ b->grecs_meta1__ch_buf[0] = YY_END_OF_BUFFER_CHAR; b->grecs_meta1__ch_buf[1] = YY_END_OF_BUFFER_CHAR; b->grecs_meta1__buf_pos = &b->grecs_meta1__ch_buf[0]; b->grecs_meta1__at_bol = 1; b->grecs_meta1__buffer_status = YY_BUFFER_NEW; if ( b == YY_CURRENT_BUFFER ) grecs_meta1__load_buffer_state( ); } /* %if-c-or-c++ */ /** Pushes the new state onto the stack. The new state becomes * the current state. This function will allocate the stack * if necessary. * @param new_buffer The new state. * */ /* %if-c-only */ void grecs_meta1_push_buffer_state (YY_BUFFER_STATE new_buffer ) /* %endif */ /* %if-c++-only */ /* %endif */ { if (new_buffer == NULL) return; grecs_meta1_ensure_buffer_stack(); /* This block is copied from grecs_meta1__switch_to_buffer. */ if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(grecs_meta1__c_buf_p) = (grecs_meta1__hold_char); YY_CURRENT_BUFFER_LVALUE->grecs_meta1__buf_pos = (grecs_meta1__c_buf_p); YY_CURRENT_BUFFER_LVALUE->grecs_meta1__n_chars = (grecs_meta1__n_chars); } /* Only push if top exists. Otherwise, replace top. */ if (YY_CURRENT_BUFFER) (grecs_meta1__buffer_stack_top)++; YY_CURRENT_BUFFER_LVALUE = new_buffer; /* copied from grecs_meta1__switch_to_buffer. */ grecs_meta1__load_buffer_state( ); (grecs_meta1__did_buffer_switch_on_eof) = 1; } /* %endif */ /* %if-c-or-c++ */ /** Removes and deletes the top of the stack, if present. * The next element becomes the new top. * */ /* %if-c-only */ void grecs_meta1_pop_buffer_state (void) /* %endif */ /* %if-c++-only */ /* %endif */ { if (!YY_CURRENT_BUFFER) return; grecs_meta1__delete_buffer(YY_CURRENT_BUFFER ); YY_CURRENT_BUFFER_LVALUE = NULL; if ((grecs_meta1__buffer_stack_top) > 0) --(grecs_meta1__buffer_stack_top); if (YY_CURRENT_BUFFER) { grecs_meta1__load_buffer_state( ); (grecs_meta1__did_buffer_switch_on_eof) = 1; } } /* %endif */ /* %if-c-or-c++ */ /* Allocates the stack if it does not exist. * Guarantees space for at least one push. */ /* %if-c-only */ static void grecs_meta1_ensure_buffer_stack (void) /* %endif */ /* %if-c++-only */ /* %endif */ { grecs_meta1__size_t num_to_alloc; if (!(grecs_meta1__buffer_stack)) { /* First allocation is just for 2 elements, since we don't know if this * scanner will even need a stack. We use 2 instead of 1 to avoid an * immediate realloc on the next call. */ num_to_alloc = 1; (grecs_meta1__buffer_stack) = (struct grecs_meta1__buffer_state**)grecs_meta1_alloc (num_to_alloc * sizeof(struct grecs_meta1__buffer_state*) ); if ( ! (grecs_meta1__buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in grecs_meta1_ensure_buffer_stack()" ); memset((grecs_meta1__buffer_stack), 0, num_to_alloc * sizeof(struct grecs_meta1__buffer_state*)); (grecs_meta1__buffer_stack_max) = num_to_alloc; (grecs_meta1__buffer_stack_top) = 0; return; } if ((grecs_meta1__buffer_stack_top) >= ((grecs_meta1__buffer_stack_max)) - 1){ /* Increase the buffer to prepare for a possible push. */ int grow_size = 8 /* arbitrary grow size */; num_to_alloc = (grecs_meta1__buffer_stack_max) + grow_size; (grecs_meta1__buffer_stack) = (struct grecs_meta1__buffer_state**)grecs_meta1_realloc ((grecs_meta1__buffer_stack), num_to_alloc * sizeof(struct grecs_meta1__buffer_state*) ); if ( ! (grecs_meta1__buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in grecs_meta1_ensure_buffer_stack()" ); /* zero only the new slots.*/ memset((grecs_meta1__buffer_stack) + (grecs_meta1__buffer_stack_max), 0, grow_size * sizeof(struct grecs_meta1__buffer_state*)); (grecs_meta1__buffer_stack_max) = num_to_alloc; } } /* %endif */ /* %if-c-only */ /** Setup the input buffer state to scan directly from a user-specified character buffer. * @param base the character buffer * @param size the size in bytes of the character buffer * * @return the newly allocated buffer state object. */ YY_BUFFER_STATE grecs_meta1__scan_buffer (char * base, grecs_meta1__size_t size ) { YY_BUFFER_STATE b; if ( size < 2 || base[size-2] != YY_END_OF_BUFFER_CHAR || base[size-1] != YY_END_OF_BUFFER_CHAR ) /* They forgot to leave room for the EOB's. */ return 0; b = (YY_BUFFER_STATE) grecs_meta1_alloc(sizeof( struct grecs_meta1__buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in grecs_meta1__scan_buffer()" ); b->grecs_meta1__buf_size = size - 2; /* "- 2" to take care of EOB's */ b->grecs_meta1__buf_pos = b->grecs_meta1__ch_buf = base; b->grecs_meta1__is_our_buffer = 0; b->grecs_meta1__input_file = 0; b->grecs_meta1__n_chars = b->grecs_meta1__buf_size; b->grecs_meta1__is_interactive = 0; b->grecs_meta1__at_bol = 1; b->grecs_meta1__fill_buffer = 0; b->grecs_meta1__buffer_status = YY_BUFFER_NEW; grecs_meta1__switch_to_buffer(b ); return b; } /* %endif */ /* %if-c-only */ /** Setup the input buffer state to scan a string. The next call to grecs_meta1_lex() will * scan from a @e copy of @a str. * @param grecs_meta1_str a NUL-terminated string to scan * * @return the newly allocated buffer state object. * @note If you want to scan bytes that may contain NUL values, then use * grecs_meta1__scan_bytes() instead. */ YY_BUFFER_STATE grecs_meta1__scan_string (grecs_meta1_const char * grecs_meta1_str ) { return grecs_meta1__scan_bytes(grecs_meta1_str,strlen(grecs_meta1_str) ); } /* %endif */ /* %if-c-only */ /** Setup the input buffer state to scan the given bytes. The next call to grecs_meta1_lex() will * scan from a @e copy of @a bytes. * @param grecs_meta1_bytes the byte buffer to scan * @param _grecs_meta1_bytes_len the number of bytes in the buffer pointed to by @a bytes. * * @return the newly allocated buffer state object. */ YY_BUFFER_STATE grecs_meta1__scan_bytes (grecs_meta1_const char * grecs_meta1_bytes, grecs_meta1__size_t _grecs_meta1_bytes_len ) { YY_BUFFER_STATE b; char *buf; grecs_meta1__size_t n; int i; /* Get memory for full buffer, including space for trailing EOB's. */ n = _grecs_meta1_bytes_len + 2; buf = (char *) grecs_meta1_alloc(n ); if ( ! buf ) YY_FATAL_ERROR( "out of dynamic memory in grecs_meta1__scan_bytes()" ); for ( i = 0; i < _grecs_meta1_bytes_len; ++i ) buf[i] = grecs_meta1_bytes[i]; buf[_grecs_meta1_bytes_len] = buf[_grecs_meta1_bytes_len+1] = YY_END_OF_BUFFER_CHAR; b = grecs_meta1__scan_buffer(buf,n ); if ( ! b ) YY_FATAL_ERROR( "bad buffer in grecs_meta1__scan_bytes()" ); /* It's okay to grow etc. this buffer, and we should throw it * away when we're done. */ b->grecs_meta1__is_our_buffer = 1; return b; } /* %endif */ #ifndef YY_EXIT_FAILURE #define YY_EXIT_FAILURE 2 #endif /* %if-c-only */ static void grecs_meta1__fatal_error (grecs_meta1_const char* msg ) { (void) fprintf( stderr, "%s\n", msg ); exit( YY_EXIT_FAILURE ); } /* %endif */ /* %if-c++-only */ /* %endif */ /* Redefine grecs_meta1_less() so it works in section 3 code. */ #undef grecs_meta1_less #define grecs_meta1_less(n) \ do \ { \ /* Undo effects of setting up grecs_meta1_text. */ \ int grecs_meta1_less_macro_arg = (n); \ YY_LESS_LINENO(grecs_meta1_less_macro_arg);\ grecs_meta1_text[grecs_meta1_leng] = (grecs_meta1__hold_char); \ (grecs_meta1__c_buf_p) = grecs_meta1_text + grecs_meta1_less_macro_arg; \ (grecs_meta1__hold_char) = *(grecs_meta1__c_buf_p); \ *(grecs_meta1__c_buf_p) = '\0'; \ grecs_meta1_leng = grecs_meta1_less_macro_arg; \ } \ while ( 0 ) /* Accessor methods (get/set functions) to struct members. */ /* %if-c-only */ /* %if-reentrant */ /* %endif */ /** Get the current line number. * */ int grecs_meta1_get_lineno (void) { return grecs_meta1_lineno; } /** Get the input stream. * */ FILE *grecs_meta1_get_in (void) { return grecs_meta1_in; } /** Get the output stream. * */ FILE *grecs_meta1_get_out (void) { return grecs_meta1_out; } /** Get the length of the current token. * */ grecs_meta1__size_t grecs_meta1_get_leng (void) { return grecs_meta1_leng; } /** Get the current token. * */ char *grecs_meta1_get_text (void) { return grecs_meta1_text; } /* %if-reentrant */ /* %endif */ /** Set the current line number. * @param line_number * */ void grecs_meta1_set_lineno (int line_number ) { grecs_meta1_lineno = line_number; } /** Set the input stream. This does not discard the current * input buffer. * @param in_str A readable stream. * * @see grecs_meta1__switch_to_buffer */ void grecs_meta1_set_in (FILE * in_str ) { grecs_meta1_in = in_str ; } void grecs_meta1_set_out (FILE * out_str ) { grecs_meta1_out = out_str ; } int grecs_meta1_get_debug (void) { return grecs_meta1__flex_debug; } void grecs_meta1_set_debug (int bdebug ) { grecs_meta1__flex_debug = bdebug ; } /* %endif */ /* %if-reentrant */ /* %if-bison-bridge */ /* %endif */ /* %endif if-c-only */ /* %if-c-only */ static int grecs_meta1__init_globals (void) { /* Initialization is the same as for the non-reentrant scanner. * This function is called from grecs_meta1_lex_destroy(), so don't allocate here. */ (grecs_meta1__buffer_stack) = 0; (grecs_meta1__buffer_stack_top) = 0; (grecs_meta1__buffer_stack_max) = 0; (grecs_meta1__c_buf_p) = (char *) 0; (grecs_meta1__init) = 0; (grecs_meta1__start) = 0; /* Defined in main.c */ #ifdef YY_STDINIT grecs_meta1_in = stdin; grecs_meta1_out = stdout; #else grecs_meta1_in = (FILE *) 0; grecs_meta1_out = (FILE *) 0; #endif /* For future reference: Set errno on error, since we are called by * grecs_meta1_lex_init() */ return 0; } /* %endif */ /* %if-c-only SNIP! this currently causes conflicts with the c++ scanner */ /* grecs_meta1_lex_destroy is for both reentrant and non-reentrant scanners. */ int grecs_meta1_lex_destroy (void) { /* Pop the buffer stack, destroying each element. */ while(YY_CURRENT_BUFFER){ grecs_meta1__delete_buffer(YY_CURRENT_BUFFER ); YY_CURRENT_BUFFER_LVALUE = NULL; grecs_meta1_pop_buffer_state(); } /* Destroy the stack itself. */ grecs_meta1_free((grecs_meta1__buffer_stack) ); (grecs_meta1__buffer_stack) = NULL; /* Reset the globals. This is important in a non-reentrant scanner so the next time * grecs_meta1_lex() is called, initialization will occur. */ grecs_meta1__init_globals( ); /* %if-reentrant */ /* %endif */ return 0; } /* %endif */ /* * Internal utility routines. */ #ifndef grecs_meta1_text_ptr static void grecs_meta1__flex_strncpy (char* s1, grecs_meta1_const char * s2, int n ) { register int i; for ( i = 0; i < n; ++i ) s1[i] = s2[i]; } #endif #ifdef YY_NEED_STRLEN static int grecs_meta1__flex_strlen (grecs_meta1_const char * s ) { register int n; for ( n = 0; s[n]; ++n ) ; return n; } #endif void *grecs_meta1_alloc (grecs_meta1__size_t size ) { return (void *) malloc( size ); } void *grecs_meta1_realloc (void * ptr, grecs_meta1__size_t size ) { /* The cast to (char *) in the following accommodates both * implementations that use char* generic pointers, and those * that use void* generic pointers. It works with the latter * because both ANSI C and C++ allow castless assignment from * any pointer type to void*, and deal with argument conversions * as though doing an assignment. */ return (void *) realloc( (char *) ptr, size ); } void grecs_meta1_free (void * ptr ) { free( (char *) ptr ); /* see grecs_meta1_realloc() for (char *) cast */ } /* %if-tables-serialization definitions */ /* %define-grecs_meta1_tables The name for this specific scanner's tables. */ #define YYTABLES_NAME "grecs_meta1_tables" /* %endif */ /* %ok-for-header */ #line 107 "meta1-lex.l" int grecs_meta1_wrap() { return 1; } static void meta1_line_add_unescape_hex(const char *text, size_t len) { for (; text[len-1] != 'x' && len > 0; len--) ; grecs_line_acc_grow(text, len - 2); grecs_line_acc_grow_char((char) strtoul (text + len, NULL, 16)); } ������������������direvent-5.2/grecs/src/grecs-lex.l������������������������������������������������������������������0000644�0001750�0001750�00000027051�13244106110�017123� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* grecs - Gray's Extensible Configuration System -*- c -*- */ %option nounput %option noinput %top { #ifdef HAVE_CONFIG_H # include <config.h> #endif } %{ /* grecs - Gray's Extensible Configuration System Copyright (C) 2007-2016 Sergey Poznyakoff Grecs 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. Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. */ #include <grecs.h> #include <grecs-gram.h> #include <unistd.h> #include <fcntl.h> #include <ctype.h> #include <stdlib.h> #include <errno.h> #include <wordsplit.h> static char *multiline_delimiter; static size_t multiline_delimiter_len; static int multiline_unescape; /* Unescape here-document contents */ static int (*char_to_strip)(char); /* Strip matching characters of each here-document line */ struct grecs_locus_point grecs_current_locus_point; /* Input file location */ /* Line correction. Equals to the number of #line directives inserted into the input by the preprocessor instance. The external preprocessor, if any, counts these as input lines and therefore the line numbers in *its* #line directives are offset by the value of XLINES. Uff, running two preprocessors is confusing... */ static size_t xlines; static void multiline_begin(char *); static void multiline_add(char *); static char *multiline_strip_tabs(char *text); static int ident(void); static int isemptystr(int off); static void qstring_locus_fixup(void); #define qstring() \ ((grecs_parser_options & GRECS_OPTION_QUOTED_STRING_CONCAT) \ ? QSTRING : STRING) #undef YY_INPUT #define YY_INPUT(buf,result,max_size) \ do { \ if (grecs_preprocessor) \ result = fread(buf, 1, max_size, yyin); \ else \ result = grecs_preproc_fill_buffer(buf, max_size); \ } while(0) #define YY_USER_ACTION do { \ if (YYSTATE == 0) { \ yylloc.beg = grecs_current_locus_point; \ yylloc.beg.col++; \ } \ grecs_current_locus_point.col += yyleng; \ yylloc.end = grecs_current_locus_point; \ } while (0); %} %x COMMENT ML STR WS [ \t\f][ \t\f]* ID [a-zA-Z_][a-zA-Z_0-9-]* P [1-9][0-9]* %% /* C-style comments */ "/*" BEGIN(COMMENT); <COMMENT>[^*\n]* /* eat anything that's not a '*' */ <COMMENT>"*"+[^*/\n]* /* eat up '*'s not followed by '/'s */ <COMMENT>\n grecs_locus_point_advance_line(grecs_current_locus_point); <COMMENT>"*"+"/" BEGIN(INITIAL); /* Line directive */ ^[ \t]*#[ \t]*{P}[ \t]+\".*\".*\n { grecs_parse_line_directive_cpp(yytext, &yylloc, &grecs_current_locus_point, &xlines); } ^[ \t]*#[ \t]*line[ \t].*\n { grecs_parse_line_directive(yytext, &yylloc, &grecs_current_locus_point, &xlines); } /* End-of-line comments */ #.*\n { grecs_locus_point_advance_line(grecs_current_locus_point); } #.* /* end-of-file comment */; "//".*\n { grecs_locus_point_advance_line(grecs_current_locus_point); } "//".* /* end-of-file comment */; /* Identifiers */ <INITIAL>{ID} return ident(); /* Strings */ [a-zA-Z0-9_\.\*/:@\[\]-]([a-zA-Z0-9_\./:@\[\]-][a-zA-Z0-9_\.\*/:@\[\]-]*)? { grecs_line_begin(); grecs_line_add(yytext, yyleng); yylval.string = grecs_line_finish(); return STRING; } /* Quoted strings */ \"[^\\"\n]*\" { grecs_line_begin(); grecs_line_add(yytext + 1, yyleng - 2); yylval.string = grecs_line_finish(); qstring_locus_fixup(); return qstring(); } \"[^\\"\n]*\\\n { BEGIN(STR); grecs_line_begin(); grecs_line_acc_grow_unescape_last(yytext + 1, yyleng - 1, &yylloc); grecs_locus_point_advance_line(grecs_current_locus_point); } \"[^\\"\n]*\\. { BEGIN(STR); grecs_line_begin(); grecs_line_acc_grow_unescape_last(yytext + 1, yyleng - 1, &yylloc); } <STR>\"[^\\"\n]*\\\n { grecs_line_acc_grow_unescape_last(yytext, yyleng, &yylloc); grecs_locus_point_advance_line(grecs_current_locus_point); } <STR>[^\\"\n]*\\. { grecs_line_acc_grow_unescape_last(yytext, yyleng, &yylloc); } <STR>[^\\"\n]*\" { BEGIN(INITIAL); if (yyleng > 1) grecs_line_add(yytext, yyleng - 1); yylval.string = grecs_line_finish(); qstring_locus_fixup(); return qstring(); } /* Multiline strings */ "<<"(-" "?)?\\?{ID}[ \t]*#.*\n | "<<"(-" "?)?\\?{ID}[ \t]*"//".*\n | "<<"(-" "?)?\\?{ID}[ \t]*\n | "<<"(-" "?)?\"{ID}\"[ \t]*#.*\n | "<<"(-" "?)?\"{ID}\"[ \t]*"//".*\n | "<<"(-" "?)?\"{ID}\"[ \t]*\n { BEGIN(ML); multiline_begin(yytext+2); } /* Ignore m4 line statements */ <ML>^"#line ".*\n { grecs_locus_point_advance_line(grecs_current_locus_point); } <ML>.*\n { char *p = multiline_strip_tabs(yytext); if (!strncmp(p, multiline_delimiter, multiline_delimiter_len) && isemptystr(p + multiline_delimiter_len - yytext)) { grecs_free(multiline_delimiter); multiline_delimiter = NULL; BEGIN(INITIAL); yylval.string = grecs_line_finish(); /* Update end pos */ yylloc.end.line--; for (yylloc.end.col = 0, p = yylval.string + strlen(yylval.string) - 1; p > yylval.string && p[-1] != '\n'; yylloc.end.col++, p--); if (yylloc.end.col == 0) yylloc.end.col = 1; return MSTRING; } grecs_locus_point_advance_line(grecs_current_locus_point); multiline_add(p); } {WS} ; /* Other tokens */ \n { grecs_locus_point_advance_line(grecs_current_locus_point); } [,;{}()] return yytext[0]; . { if (isascii(yytext[0]) && isprint(yytext[0])) grecs_error(&yylloc, 0, _("stray character %c"), yytext[0]); else grecs_error(&yylloc, 0, _("stray character \\%03o"), (unsigned char) yytext[0]); } %% pid_t grecs_preproc_pid; int yywrap() { if (grecs_preprocessor) { grecs_preproc_extrn_shutdown(grecs_preproc_pid); fclose(yyin); } else grecs_preproc_done(); grecs_current_locus_point.file = NULL; return 1; } int grecs_lex_begin(const char *name, int trace) { yy_flex_debug = trace; grecs_line_acc_create(); if (grecs_preprocessor) { int fd; fd = open(name, O_RDONLY); if (fd == -1) { grecs_error(NULL, errno, _("Cannot open `%s'"), name); return 1; } close(fd); yyin = grecs_preproc_extrn_start(name, &grecs_preproc_pid); if (!yyin) { grecs_error(NULL, errno, _("Unable to start external preprocessor `%s'"), grecs_preprocessor); return 1; } } else return grecs_preproc_init(name); return 0; } void grecs_lex_end(int err) { grecs_line_acc_free(); } static int isemptystr(int off) { for (; yytext[off] && isspace(yytext[off]); off++) ; if (yytext[off] == ';') { int i; for (i = off + 1; yytext[i]; i++) if (!isspace(yytext[i])) return 0; yyless(off); return 1; } return yytext[off] == 0; } char * multiline_strip_tabs(char *text) { if (char_to_strip) for (; *text && char_to_strip(*text); text++) ; return text; } static void multiline_add(char *s) { if (multiline_unescape) { for (; *s; s++) { if (*s == '\\') { grecs_line_acc_grow_char_unescape(s[1]); ++s; } else grecs_line_acc_grow_char(*s); } } else grecs_line_add(s, strlen(s)); } static int is_tab(char c) { return c == '\t'; } static int is_ws(char c) { return c == '\t' || c == ' '; } void multiline_begin(char *p) { if (*p == '-') { if (*++p == ' ') { char_to_strip = is_ws; p++; } else char_to_strip = is_tab; } else char_to_strip = NULL; if (*p == '\\') { p++; multiline_unescape = 0; multiline_delimiter_len = strcspn(p, " \t"); } else if (*p == '"') { char *q; p++; multiline_unescape = 0; q = strchr(p, '"'); multiline_delimiter_len = q - p; } else { multiline_delimiter_len = strcspn(p, " \t"); multiline_unescape = 1; } /* Remove trailing newline */ multiline_delimiter_len--; multiline_delimiter = grecs_malloc(multiline_delimiter_len + 1); memcpy(multiline_delimiter, p, multiline_delimiter_len); multiline_delimiter[multiline_delimiter_len] = 0; grecs_line_begin(); /* Update locus */ grecs_locus_point_advance_line(grecs_current_locus_point); yylloc.beg = grecs_current_locus_point; yylloc.beg.col++; } static int ident() { char *p; char *str; size_t len; for (p = yytext; *p && isspace(*p); p++) ; len = strlen(p); str = grecs_malloc(len + 1); strcpy(str, p); yylval.string = str; return IDENT; } static void qstring_locus_fixup() { if (grecs_parser_options & GRECS_OPTION_ADJUST_STRING_LOCATIONS) { yylloc.beg.col++; yylloc.end.col--; } } grecs_value_t * grecs_value_ptr_from_static(grecs_value_t *input) { grecs_value_t *ptr = grecs_malloc(sizeof(*ptr)); *ptr = *input; return ptr; } static int assign_locus(struct grecs_locus_point *ploc, char *name, char *line, size_t *pxlines) { char *p; if (name) { if (pxlines && (!ploc->file || strcmp(name, ploc->file))) *pxlines = 0; ploc->file = grecs_install_text(name); } ploc->line = strtoul(line, &p, 10) - (pxlines ? *pxlines : 0); ploc->col = 0; return *p != 0; } void grecs_parse_line_directive(char *text, grecs_locus_t *ploc, struct grecs_locus_point *ppoint, size_t *pxlines) { int rc = 1; struct wordsplit ws; if (wordsplit(text, &ws, WRDSF_DEFFLAGS)) grecs_error(ploc, 0, _("cannot parse #line line: %s"), wordsplit_strerror(&ws)); else { if (ws.ws_wordc == 2) rc = assign_locus(ppoint, NULL, ws.ws_wordv[1], pxlines); else if (ws.ws_wordc == 3) rc = assign_locus(ppoint, ws.ws_wordv[2], ws.ws_wordv[1], pxlines); else if (ws.ws_wordc == 4) { rc = assign_locus(ppoint, ws.ws_wordv[2], ws.ws_wordv[1], 0); if (pxlines && rc == 0) { char *p; unsigned long x = strtoul(ws.ws_wordv[3], &p, 10); rc = *p != 0; if (rc == 0) *pxlines = x; } } else grecs_error(ploc, 0, _("invalid #line statement")); if (rc) grecs_error(ploc, 0, _("malformed #line statement")); wordsplit_free(&ws); } } void grecs_parse_line_directive_cpp(char *text, grecs_locus_t *ploc, struct grecs_locus_point *ppoint, size_t *pxlines) { struct wordsplit ws; if (wordsplit(text, &ws, WRDSF_DEFFLAGS)) { grecs_error(ploc, 0, _("cannot parse #line line: %s"), wordsplit_strerror(&ws)); return; } else if (ws.ws_wordc < 3) grecs_error(ploc, 0, _("invalid #line statement")); else { if (assign_locus(ppoint, ws.ws_wordv[2], ws.ws_wordv[1], pxlines)) grecs_error(ploc, 0, _("malformed #line statement")); } wordsplit_free(&ws); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/src/grecs-lex.c������������������������������������������������������������������0000644�0001750�0001750�00000235065�13244106146�017131� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#line 5 "grecs-lex.l" #ifdef HAVE_CONFIG_H # include <config.h> #endif #line 9 "grecs-lex.c" #define YY_INT_ALIGNED short int /* A lexical scanner generated by flex */ /* %not-for-header */ /* %if-c-only */ /* %if-not-reentrant */ /* %endif */ /* %endif */ /* %ok-for-header */ #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 5 #define YY_FLEX_SUBMINOR_VERSION 37 #if YY_FLEX_SUBMINOR_VERSION > 0 #define FLEX_BETA #endif /* %if-c++-only */ /* %endif */ /* %if-c-only */ /* %endif */ /* %if-c-only */ /* %endif */ /* First, we deal with platform-specific or compiler-specific issues. */ /* begin standard C headers. */ /* %if-c-only */ #include <stdio.h> #include <string.h> #include <errno.h> #include <stdlib.h> /* %endif */ /* %if-tables-serialization */ /* %endif */ /* end standard C headers. */ /* %if-c-or-c++ */ /* flex integer type definitions */ #ifndef FLEXINT_H #define FLEXINT_H /* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */ #if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, * if you want the limit (max/min) macros for int types. */ #ifndef __STDC_LIMIT_MACROS #define __STDC_LIMIT_MACROS 1 #endif #include <inttypes.h> typedef int8_t flex_int8_t; typedef uint8_t flex_uint8_t; typedef int16_t flex_int16_t; typedef uint16_t flex_uint16_t; typedef int32_t flex_int32_t; typedef uint32_t flex_uint32_t; #else typedef signed char flex_int8_t; typedef short int flex_int16_t; typedef int flex_int32_t; typedef unsigned char flex_uint8_t; typedef unsigned short int flex_uint16_t; typedef unsigned int flex_uint32_t; /* Limits of integral types. */ #ifndef INT8_MIN #define INT8_MIN (-128) #endif #ifndef INT16_MIN #define INT16_MIN (-32767-1) #endif #ifndef INT32_MIN #define INT32_MIN (-2147483647-1) #endif #ifndef INT8_MAX #define INT8_MAX (127) #endif #ifndef INT16_MAX #define INT16_MAX (32767) #endif #ifndef INT32_MAX #define INT32_MAX (2147483647) #endif #ifndef UINT8_MAX #define UINT8_MAX (255U) #endif #ifndef UINT16_MAX #define UINT16_MAX (65535U) #endif #ifndef UINT32_MAX #define UINT32_MAX (4294967295U) #endif #endif /* ! C99 */ #endif /* ! FLEXINT_H */ /* %endif */ /* %if-c++-only */ /* %endif */ #ifdef __cplusplus /* The "const" storage-class-modifier is valid. */ #define YY_USE_CONST #else /* ! __cplusplus */ /* C99 requires __STDC__ to be defined as 1. */ #if defined (__STDC__) #define YY_USE_CONST #endif /* defined (__STDC__) */ #endif /* ! __cplusplus */ #ifdef YY_USE_CONST #define grecs_grecs_const const #else #define grecs_grecs_const #endif /* %not-for-header */ /* Returned upon end-of-file. */ #define YY_NULL 0 /* %ok-for-header */ /* %not-for-header */ /* Promotes a possibly negative, possibly signed char to an unsigned * integer for use as an array index. If the signed char is negative, * we want to instead treat it as an 8-bit unsigned char, hence the * double cast. */ #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) /* %ok-for-header */ /* %if-reentrant */ /* %endif */ /* %if-not-reentrant */ /* %endif */ /* Enter a start condition. This macro really ought to take a parameter, * but we do it the disgusting crufty way forced on us by the ()-less * definition of BEGIN. */ #define BEGIN (grecs_grecs__start) = 1 + 2 * /* Translate the current start state into a value that can be later handed * to BEGIN to return to the state. The YYSTATE alias is for lex * compatibility. */ #define YY_START (((grecs_grecs__start) - 1) / 2) #define YYSTATE YY_START /* Action number for EOF rule of a given start state. */ #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) /* Special action meaning "start processing a new file". */ #define YY_NEW_FILE grecs_grecs_restart(grecs_grecs_in ) #define YY_END_OF_BUFFER_CHAR 0 /* Size of default input buffer. */ #ifndef YY_BUF_SIZE #define YY_BUF_SIZE 16384 #endif /* The state buf must be large enough to hold one state per character in the main buffer. */ #define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(grecs_grecs__state_type)) #ifndef YY_TYPEDEF_YY_BUFFER_STATE #define YY_TYPEDEF_YY_BUFFER_STATE typedef struct grecs_grecs__buffer_state *YY_BUFFER_STATE; #endif #ifndef YY_TYPEDEF_YY_SIZE_T #define YY_TYPEDEF_YY_SIZE_T typedef size_t grecs_grecs__size_t; #endif /* %if-not-reentrant */ extern grecs_grecs__size_t grecs_grecs_leng; /* %endif */ /* %if-c-only */ /* %if-not-reentrant */ extern FILE *grecs_grecs_in, *grecs_grecs_out; /* %endif */ /* %endif */ #define EOB_ACT_CONTINUE_SCAN 0 #define EOB_ACT_END_OF_FILE 1 #define EOB_ACT_LAST_MATCH 2 #define YY_LESS_LINENO(n) /* Return all but the first "n" matched characters back to the input stream. */ #define grecs_grecs_less(n) \ do \ { \ /* Undo effects of setting up grecs_grecs_text. */ \ int grecs_grecs_less_macro_arg = (n); \ YY_LESS_LINENO(grecs_grecs_less_macro_arg);\ *grecs_grecs__cp = (grecs_grecs__hold_char); \ YY_RESTORE_YY_MORE_OFFSET \ (grecs_grecs__c_buf_p) = grecs_grecs__cp = grecs_grecs__bp + grecs_grecs_less_macro_arg - YY_MORE_ADJ; \ YY_DO_BEFORE_ACTION; /* set up grecs_grecs_text again */ \ } \ while ( 0 ) #define unput(c) grecs_grecs_unput( c, (grecs_grecs_text_ptr) ) #ifndef YY_STRUCT_YY_BUFFER_STATE #define YY_STRUCT_YY_BUFFER_STATE struct grecs_grecs__buffer_state { /* %if-c-only */ FILE *grecs_grecs__input_file; /* %endif */ /* %if-c++-only */ /* %endif */ char *grecs_grecs__ch_buf; /* input buffer */ char *grecs_grecs__buf_pos; /* current position in input buffer */ /* Size of input buffer in bytes, not including room for EOB * characters. */ grecs_grecs__size_t grecs_grecs__buf_size; /* Number of characters read into grecs_grecs__ch_buf, not including EOB * characters. */ grecs_grecs__size_t grecs_grecs__n_chars; /* Whether we "own" the buffer - i.e., we know we created it, * and can realloc() it to grow it, and should free() it to * delete it. */ int grecs_grecs__is_our_buffer; /* Whether this is an "interactive" input source; if so, and * if we're using stdio for input, then we want to use getc() * instead of fread(), to make sure we stop fetching input after * each newline. */ int grecs_grecs__is_interactive; /* Whether we're considered to be at the beginning of a line. * If so, '^' rules will be active on the next match, otherwise * not. */ int grecs_grecs__at_bol; int grecs_grecs__bs_lineno; /**< The line count. */ int grecs_grecs__bs_column; /**< The column count. */ /* Whether to try to fill the input buffer when we reach the * end of it. */ int grecs_grecs__fill_buffer; int grecs_grecs__buffer_status; #define YY_BUFFER_NEW 0 #define YY_BUFFER_NORMAL 1 /* When an EOF's been seen but there's still some text to process * then we mark the buffer as YY_EOF_PENDING, to indicate that we * shouldn't try reading from the input source any more. We might * still have a bunch of tokens to match, though, because of * possible backing-up. * * When we actually see the EOF, we change the status to "new" * (via grecs_grecs_restart()), so that the user can continue scanning by * just pointing grecs_grecs_in at a new input file. */ #define YY_BUFFER_EOF_PENDING 2 }; #endif /* !YY_STRUCT_YY_BUFFER_STATE */ /* %if-c-only Standard (non-C++) definition */ /* %not-for-header */ /* %if-not-reentrant */ /* Stack of input buffers. */ static size_t grecs_grecs__buffer_stack_top = 0; /**< index of top of stack. */ static size_t grecs_grecs__buffer_stack_max = 0; /**< capacity of stack. */ static YY_BUFFER_STATE * grecs_grecs__buffer_stack = 0; /**< Stack as an array. */ /* %endif */ /* %ok-for-header */ /* %endif */ /* We provide macros for accessing buffer states in case in the * future we want to put the buffer states in a more general * "scanner state". * * Returns the top of the stack, or NULL. */ #define YY_CURRENT_BUFFER ( (grecs_grecs__buffer_stack) \ ? (grecs_grecs__buffer_stack)[(grecs_grecs__buffer_stack_top)] \ : NULL) /* Same as previous macro, but useful when we know that the buffer stack is not * NULL or when we need an lvalue. For internal use only. */ #define YY_CURRENT_BUFFER_LVALUE (grecs_grecs__buffer_stack)[(grecs_grecs__buffer_stack_top)] /* %if-c-only Standard (non-C++) definition */ /* %if-not-reentrant */ /* %not-for-header */ /* grecs_grecs__hold_char holds the character lost when grecs_grecs_text is formed. */ static char grecs_grecs__hold_char; static grecs_grecs__size_t grecs_grecs__n_chars; /* number of characters read into grecs_grecs__ch_buf */ grecs_grecs__size_t grecs_grecs_leng; /* Points to current character in buffer. */ static char *grecs_grecs__c_buf_p = (char *) 0; static int grecs_grecs__init = 0; /* whether we need to initialize */ static int grecs_grecs__start = 0; /* start state number */ /* Flag which is used to allow grecs_grecs_wrap()'s to do buffer switches * instead of setting up a fresh grecs_grecs_in. A bit of a hack ... */ static int grecs_grecs__did_buffer_switch_on_eof; /* %ok-for-header */ /* %endif */ void grecs_grecs_restart (FILE *input_file ); void grecs_grecs__switch_to_buffer (YY_BUFFER_STATE new_buffer ); YY_BUFFER_STATE grecs_grecs__create_buffer (FILE *file,int size ); void grecs_grecs__delete_buffer (YY_BUFFER_STATE b ); void grecs_grecs__flush_buffer (YY_BUFFER_STATE b ); void grecs_grecs_push_buffer_state (YY_BUFFER_STATE new_buffer ); void grecs_grecs_pop_buffer_state (void ); static void grecs_grecs_ensure_buffer_stack (void ); static void grecs_grecs__load_buffer_state (void ); static void grecs_grecs__init_buffer (YY_BUFFER_STATE b,FILE *file ); #define YY_FLUSH_BUFFER grecs_grecs__flush_buffer(YY_CURRENT_BUFFER ) YY_BUFFER_STATE grecs_grecs__scan_buffer (char *base,grecs_grecs__size_t size ); YY_BUFFER_STATE grecs_grecs__scan_string (grecs_grecs_const char *grecs_grecs__str ); YY_BUFFER_STATE grecs_grecs__scan_bytes (grecs_grecs_const char *bytes,grecs_grecs__size_t len ); /* %endif */ void *grecs_grecs_alloc (grecs_grecs__size_t ); void *grecs_grecs_realloc (void *,grecs_grecs__size_t ); void grecs_grecs_free (void * ); #define grecs_grecs__new_buffer grecs_grecs__create_buffer #define grecs_grecs__set_interactive(is_interactive) \ { \ if ( ! YY_CURRENT_BUFFER ){ \ grecs_grecs_ensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ grecs_grecs__create_buffer(grecs_grecs_in,YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->grecs_grecs__is_interactive = is_interactive; \ } #define grecs_grecs__set_bol(at_bol) \ { \ if ( ! YY_CURRENT_BUFFER ){\ grecs_grecs_ensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ grecs_grecs__create_buffer(grecs_grecs_in,YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->grecs_grecs__at_bol = at_bol; \ } #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->grecs_grecs__at_bol) /* %% [1.0] grecs_grecs_text/grecs_grecs_in/grecs_grecs_out/grecs_grecs__state_type/grecs_grecs_lineno etc. def's & init go here */ /* Begin user sect3 */ #define FLEX_DEBUG typedef unsigned char YY_CHAR; FILE *grecs_grecs_in = (FILE *) 0, *grecs_grecs_out = (FILE *) 0; typedef int grecs_grecs__state_type; extern int grecs_grecs_lineno; int grecs_grecs_lineno = 1; extern char *grecs_grecs_text; #define grecs_grecs_text_ptr grecs_grecs_text /* %if-c-only Standard (non-C++) definition */ static grecs_grecs__state_type grecs_grecs__get_previous_state (void ); static grecs_grecs__state_type grecs_grecs__try_NUL_trans (grecs_grecs__state_type current_state ); static int grecs_grecs__get_next_buffer (void ); static void grecs_grecs__fatal_error (grecs_grecs_const char msg[] ); /* %endif */ /* Done after the current pattern has been matched and before the * corresponding action - sets up grecs_grecs_text. */ #define YY_DO_BEFORE_ACTION \ (grecs_grecs_text_ptr) = grecs_grecs__bp; \ /* %% [2.0] code to fiddle grecs_grecs_text and grecs_grecs_leng for grecs_grecs_more() goes here \ */\ grecs_grecs_leng = (size_t) (grecs_grecs__cp - grecs_grecs__bp); \ (grecs_grecs__hold_char) = *grecs_grecs__cp; \ *grecs_grecs__cp = '\0'; \ /* %% [3.0] code to copy grecs_grecs_text_ptr to grecs_grecs_text[] goes here, if %array \ */\ (grecs_grecs__c_buf_p) = grecs_grecs__cp; /* %% [4.0] data tables for the DFA and the user's section 1 definitions go here */ #define YY_NUM_RULES 32 #define YY_END_OF_BUFFER 33 /* This struct is not used in this scanner, but its presence is necessary. */ struct grecs_grecs__trans_info { flex_int32_t grecs_grecs__verify; flex_int32_t grecs_grecs__nxt; }; static grecs_grecs_const flex_int16_t grecs_grecs__accept[134] = { 0, 0, 0, 2, 2, 0, 0, 0, 0, 33, 31, 28, 29, 31, 9, 30, 13, 13, 31, 12, 28, 9, 2, 4, 3, 32, 27, 32, 32, 32, 19, 32, 28, 0, 14, 0, 9, 8, 13, 1, 11, 0, 12, 28, 0, 9, 9, 9, 2, 3, 3, 5, 0, 27, 0, 0, 19, 0, 0, 0, 18, 16, 15, 13, 11, 10, 11, 0, 0, 0, 0, 12, 0, 0, 0, 9, 9, 9, 0, 17, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 20, 0, 0, 0, 9, 9, 9, 0, 0, 25, 0, 0, 0, 21, 0, 0, 0, 9, 6, 9, 9, 0, 0, 23, 0, 0, 6, 0, 0, 9, 7, 0, 26, 0, 24, 0, 7, 0 } ; static grecs_grecs_const flex_int32_t grecs_grecs__ec[256] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 1, 6, 7, 1, 1, 1, 1, 8, 8, 9, 1, 8, 10, 11, 12, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 11, 8, 15, 1, 1, 1, 11, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 11, 17, 11, 1, 16, 1, 16, 16, 16, 16, 18, 16, 16, 16, 19, 16, 16, 20, 16, 21, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 8, 1, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; static grecs_grecs_const flex_int32_t grecs_grecs__meta[22] = { 0, 1, 2, 3, 1, 2, 4, 2, 1, 5, 6, 7, 8, 9, 9, 1, 10, 11, 10, 10, 10, 10 } ; static grecs_grecs_const flex_int16_t grecs_grecs__base[167] = { 0, 0, 20, 20, 21, 249, 25, 28, 30, 215, 527, 33, 527, 33, 211, 527, 0, 31, 198, 30, 49, 55, 0, 527, 37, 209, 527, 41, 42, 527, 193, 0, 60, 46, 527, 205, 201, 527, 0, 527, 75, 91, 59, 0, 107, 0, 126, 95, 0, 90, 91, 527, 200, 527, 101, 49, 527, 0, 185, 198, 527, 527, 527, 0, 196, 527, 0, 0, 142, 158, 0, 104, 0, 169, 178, 104, 0, 102, 103, 527, 187, 187, 182, 527, 188, 193, 178, 120, 0, 167, 126, 116, 127, 204, 180, 178, 527, 177, 173, 160, 130, 132, 139, 69, 0, 527, 174, 164, 170, 527, 162, 147, 149, 152, 527, 161, 159, 154, 153, 527, 146, 163, 527, 169, 140, 134, 527, 108, 527, 104, 527, 70, 527, 527, 216, 227, 238, 249, 260, 266, 271, 281, 292, 303, 314, 325, 336, 347, 354, 361, 368, 378, 57, 388, 16, 395, 405, 416, 427, 438, 449, 460, 471, 482, 493, 504, 515 } ; static grecs_grecs_const flex_int16_t grecs_grecs__def[167] = { 0, 133, 1, 134, 134, 135, 135, 136, 136, 133, 133, 133, 133, 137, 138, 133, 139, 139, 133, 140, 133, 138, 141, 133, 142, 143, 133, 143, 144, 133, 145, 146, 133, 137, 133, 147, 138, 133, 148, 133, 133, 149, 150, 20, 133, 21, 21, 138, 141, 142, 142, 133, 143, 133, 143, 144, 133, 146, 145, 133, 133, 133, 133, 148, 151, 133, 40, 152, 149, 153, 154, 150, 44, 133, 133, 46, 46, 138, 143, 133, 155, 68, 133, 133, 156, 153, 133, 133, 73, 133, 157, 138, 143, 133, 155, 156, 133, 158, 159, 133, 157, 160, 138, 143, 93, 133, 161, 133, 158, 133, 159, 162, 133, 160, 133, 160, 163, 164, 161, 133, 165, 162, 133, 162, 166, 163, 133, 164, 133, 165, 133, 166, 133, 0, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133 } ; static grecs_grecs_const flex_int16_t grecs_grecs__nxt[549] = { 0, 10, 11, 12, 11, 11, 13, 14, 15, 16, 16, 16, 17, 16, 16, 18, 19, 10, 19, 19, 19, 19, 20, 23, 23, 20, 69, 21, 26, 24, 24, 29, 27, 29, 30, 32, 30, 32, 32, 34, 39, 38, 38, 40, 53, 31, 50, 31, 56, 51, 35, 43, 34, 32, 43, 56, 44, 45, 37, 57, 45, 54, 32, 35, 32, 32, 57, 80, 63, 46, 63, 63, 53, 132, 117, 47, 64, 64, 65, 64, 64, 64, 64, 64, 66, 66, 66, 66, 66, 66, 64, 66, 64, 66, 66, 66, 66, 67, 37, 133, 50, 68, 133, 51, 53, 37, 53, 130, 70, 72, 90, 128, 72, 63, 77, 63, 63, 36, 36, 37, 78, 73, 87, 91, 92, 87, 98, 74, 75, 37, 53, 75, 101, 37, 102, 114, 101, 126, 115, 76, 76, 116, 37, 132, 116, 103, 36, 81, 67, 130, 122, 124, 133, 123, 124, 114, 119, 128, 115, 70, 82, 83, 126, 82, 114, 84, 122, 115, 111, 123, 86, 87, 122, 109, 87, 123, 120, 119, 112, 111, 109, 96, 88, 88, 82, 83, 93, 82, 99, 84, 97, 96, 133, 93, 86, 82, 83, 89, 82, 65, 84, 79, 59, 53, 37, 86, 104, 105, 62, 104, 59, 106, 53, 41, 37, 133, 107, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 33, 33, 26, 33, 33, 33, 33, 33, 33, 33, 33, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 38, 38, 38, 38, 38, 42, 42, 42, 42, 42, 48, 48, 133, 48, 133, 48, 48, 48, 48, 48, 48, 49, 49, 133, 49, 49, 49, 49, 49, 49, 49, 49, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 55, 55, 133, 55, 55, 55, 55, 55, 55, 55, 55, 58, 58, 133, 133, 58, 58, 58, 58, 58, 58, 58, 60, 60, 133, 60, 60, 60, 60, 60, 60, 60, 60, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 63, 63, 63, 63, 63, 63, 69, 133, 69, 133, 133, 133, 69, 69, 71, 71, 71, 71, 71, 71, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 85, 85, 133, 133, 85, 133, 85, 85, 85, 94, 133, 94, 133, 133, 94, 94, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 110, 110, 133, 110, 110, 110, 110, 110, 110, 110, 110, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 9, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133 } ; static grecs_grecs_const flex_int16_t grecs_grecs__chk[549] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 4, 2, 154, 2, 6, 3, 4, 7, 6, 8, 7, 11, 8, 11, 11, 13, 17, 19, 19, 17, 27, 7, 24, 8, 28, 24, 13, 20, 33, 20, 20, 55, 20, 21, 21, 28, 21, 27, 32, 33, 32, 32, 55, 152, 42, 21, 42, 42, 103, 131, 103, 21, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 41, 47, 49, 50, 41, 49, 50, 54, 77, 78, 129, 41, 44, 75, 127, 44, 71, 47, 71, 71, 75, 75, 91, 54, 44, 87, 77, 78, 87, 87, 44, 46, 90, 92, 46, 90, 100, 91, 101, 100, 125, 101, 46, 46, 102, 102, 124, 102, 92, 46, 68, 68, 120, 111, 112, 68, 111, 112, 113, 118, 117, 113, 68, 69, 69, 116, 69, 115, 69, 121, 115, 110, 121, 69, 73, 123, 108, 73, 123, 107, 106, 99, 98, 97, 95, 73, 73, 82, 82, 94, 82, 89, 82, 86, 84, 81, 80, 82, 85, 85, 74, 85, 64, 85, 59, 58, 52, 36, 85, 93, 93, 35, 93, 30, 93, 25, 18, 14, 9, 93, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 137, 137, 5, 137, 137, 137, 137, 137, 137, 137, 137, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 139, 139, 139, 139, 139, 140, 140, 140, 140, 140, 141, 141, 0, 141, 0, 141, 141, 141, 141, 141, 141, 142, 142, 0, 142, 142, 142, 142, 142, 142, 142, 142, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 144, 144, 0, 144, 144, 144, 144, 144, 144, 144, 144, 145, 145, 0, 0, 145, 145, 145, 145, 145, 145, 145, 146, 146, 0, 146, 146, 146, 146, 146, 146, 146, 146, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 148, 148, 148, 148, 148, 148, 149, 0, 149, 0, 0, 0, 149, 149, 150, 150, 150, 150, 150, 150, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 153, 153, 0, 0, 153, 0, 153, 153, 153, 155, 0, 155, 0, 0, 155, 155, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 159, 159, 0, 159, 159, 159, 159, 159, 159, 159, 159, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133 } ; static grecs_grecs__state_type grecs_grecs__last_accepting_state; static char *grecs_grecs__last_accepting_cpos; extern int grecs_grecs__flex_debug; int grecs_grecs__flex_debug = 1; static grecs_grecs_const flex_int16_t grecs_grecs__rule_linenum[32] = { 0, 91, 92, 93, 94, 95, 97, 101, 106, 107, 108, 109, 111, 113, 119, 124, 130, 135, 138, 140, 147, 148, 149, 150, 151, 152, 156, 159, 180, 182, 183, 184 } ; /* The intent behind this definition is that it'll catch * any uses of REJECT which flex missed. */ #define REJECT reject_used_but_not_detected #define grecs_grecs_more() grecs_grecs_more_used_but_not_detected #define YY_MORE_ADJ 0 #define YY_RESTORE_YY_MORE_OFFSET char *grecs_grecs_text; #line 1 "grecs-lex.l" /* grecs - Gray's Extensible Configuration System -*- c -*- */ #define YY_NO_INPUT 1 #line 10 "grecs-lex.l" /* grecs - Gray's Extensible Configuration System Copyright (C) 2007-2016 Sergey Poznyakoff Grecs 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. Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. */ #include <grecs.h> #include <grecs-gram.h> #include <unistd.h> #include <fcntl.h> #include <ctype.h> #include <stdlib.h> #include <errno.h> #include <wordsplit.h> static char *multiline_delimiter; static size_t multiline_delimiter_len; static int multiline_unescape; /* Unescape here-document contents */ static int (*char_to_strip)(char); /* Strip matching characters of each here-document line */ struct grecs_locus_point grecs_current_locus_point; /* Input file location */ /* Line correction. Equals to the number of #line directives inserted into the input by the preprocessor instance. The external preprocessor, if any, counts these as input lines and therefore the line numbers in *its* #line directives are offset by the value of XLINES. Uff, running two preprocessors is confusing... */ static size_t xlines; static void multiline_begin(char *); static void multiline_add(char *); static char *multiline_strip_tabs(char *text); static int ident(void); static int isemptystr(int off); static void qstring_locus_fixup(void); #define qstring() \ ((grecs_parser_options & GRECS_OPTION_QUOTED_STRING_CONCAT) \ ? QSTRING : STRING) #undef YY_INPUT #define YY_INPUT(buf,result,max_size) \ do { \ if (grecs_preprocessor) \ result = fread(buf, 1, max_size, grecs_grecs_in); \ else \ result = grecs_preproc_fill_buffer(buf, max_size); \ } while(0) #define YY_USER_ACTION do { \ if (YYSTATE == 0) { \ grecs_grecs_lloc.beg = grecs_current_locus_point; \ grecs_grecs_lloc.beg.col++; \ } \ grecs_current_locus_point.col += grecs_grecs_leng; \ grecs_grecs_lloc.end = grecs_current_locus_point; \ } while (0); #line 791 "grecs-lex.c" #define INITIAL 0 #define COMMENT 1 #define ML 2 #define STR 3 #ifndef YY_NO_UNISTD_H /* Special case for "unistd.h", since it is non-ANSI. We include it way * down here because we want the user's section 1 to have been scanned first. * The user has a chance to override it with an option. */ /* %if-c-only */ #include <unistd.h> /* %endif */ /* %if-c++-only */ /* %endif */ #endif #ifndef YY_EXTRA_TYPE #define YY_EXTRA_TYPE void * #endif /* %if-c-only Reentrant structure and macros (non-C++). */ /* %if-reentrant */ /* %if-c-only */ static int grecs_grecs__init_globals (void ); /* %endif */ /* %if-reentrant */ /* %endif */ /* %endif End reentrant structures and macros. */ /* Accessor methods to globals. These are made visible to non-reentrant scanners for convenience. */ int grecs_grecs_lex_destroy (void ); int grecs_grecs_get_debug (void ); void grecs_grecs_set_debug (int debug_flag ); YY_EXTRA_TYPE grecs_grecs_get_extra (void ); void grecs_grecs_set_extra (YY_EXTRA_TYPE user_defined ); FILE *grecs_grecs_get_in (void ); void grecs_grecs_set_in (FILE * in_str ); FILE *grecs_grecs_get_out (void ); void grecs_grecs_set_out (FILE * out_str ); grecs_grecs__size_t grecs_grecs_get_leng (void ); char *grecs_grecs_get_text (void ); int grecs_grecs_get_lineno (void ); void grecs_grecs_set_lineno (int line_number ); /* %if-bison-bridge */ /* %endif */ /* Macros after this point can all be overridden by user definitions in * section 1. */ #ifndef YY_SKIP_YYWRAP #ifdef __cplusplus extern "C" int grecs_grecs_wrap (void ); #else extern int grecs_grecs_wrap (void ); #endif #endif /* %not-for-header */ /* %ok-for-header */ /* %endif */ #ifndef grecs_grecs_text_ptr static void grecs_grecs__flex_strncpy (char *,grecs_grecs_const char *,int ); #endif #ifdef YY_NEED_STRLEN static int grecs_grecs__flex_strlen (grecs_grecs_const char * ); #endif #ifndef YY_NO_INPUT /* %if-c-only Standard (non-C++) definition */ /* %not-for-header */ #ifdef __cplusplus static int grecs_grecs_input (void ); #else static int input (void ); #endif /* %ok-for-header */ /* %endif */ #endif /* %if-c-only */ /* %endif */ /* Amount of stuff to slurp up with each read. */ #ifndef YY_READ_BUF_SIZE #define YY_READ_BUF_SIZE 8192 #endif /* Copy whatever the last rule matched to the standard output. */ #ifndef ECHO /* %if-c-only Standard (non-C++) definition */ /* This used to be an fputs(), but since the string might contain NUL's, * we now use fwrite(). */ #define ECHO do { if (fwrite( grecs_grecs_text, grecs_grecs_leng, 1, grecs_grecs_out )) {} } while (0) /* %endif */ /* %if-c++-only C++ definition */ /* %endif */ #endif /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, * is returned in "result". */ #ifndef YY_INPUT #define YY_INPUT(buf,result,max_size) \ /* %% [5.0] fread()/read() definition of YY_INPUT goes here unless we're doing C++ \ */\ if ( YY_CURRENT_BUFFER_LVALUE->grecs_grecs__is_interactive ) \ { \ int c = '*'; \ size_t n; \ for ( n = 0; n < max_size && \ (c = getc( grecs_grecs_in )) != EOF && c != '\n'; ++n ) \ buf[n] = (char) c; \ if ( c == '\n' ) \ buf[n++] = (char) c; \ if ( c == EOF && ferror( grecs_grecs_in ) ) \ YY_FATAL_ERROR( "input in flex scanner failed" ); \ result = n; \ } \ else \ { \ errno=0; \ while ( (result = fread(buf, 1, max_size, grecs_grecs_in))==0 && ferror(grecs_grecs_in)) \ { \ if( errno != EINTR) \ { \ YY_FATAL_ERROR( "input in flex scanner failed" ); \ break; \ } \ errno=0; \ clearerr(grecs_grecs_in); \ } \ }\ \ /* %if-c++-only C++ definition \ */\ /* %endif */ #endif /* No semi-colon after return; correct usage is to write "grecs_grecs_terminate();" - * we don't want an extra ';' after the "return" because that will cause * some compilers to complain about unreachable statements. */ #ifndef grecs_grecs_terminate #define grecs_grecs_terminate() return YY_NULL #endif /* Number of entries by which start-condition stack grows. */ #ifndef YY_START_STACK_INCR #define YY_START_STACK_INCR 25 #endif /* Report a fatal error. */ #ifndef YY_FATAL_ERROR /* %if-c-only */ #define YY_FATAL_ERROR(msg) grecs_grecs__fatal_error( msg ) /* %endif */ /* %if-c++-only */ /* %endif */ #endif /* %if-tables-serialization structures and prototypes */ /* %not-for-header */ /* %ok-for-header */ /* %not-for-header */ /* %tables-grecs_grecs_dmap generated elements */ /* %endif */ /* end tables serialization structures and prototypes */ /* %ok-for-header */ /* Default declaration of generated scanner - a define so the user can * easily add parameters. */ #ifndef YY_DECL #define YY_DECL_IS_OURS 1 /* %if-c-only Standard (non-C++) definition */ extern int grecs_grecs_lex (void); #define YY_DECL int grecs_grecs_lex (void) /* %endif */ /* %if-c++-only C++ definition */ /* %endif */ #endif /* !YY_DECL */ /* Code executed at the beginning of each rule, after grecs_grecs_text and grecs_grecs_leng * have been set up. */ #ifndef YY_USER_ACTION #define YY_USER_ACTION #endif /* Code executed at the end of each rule. */ #ifndef YY_BREAK #define YY_BREAK break; #endif /* %% [6.0] YY_RULE_SETUP definition goes here */ #define YY_RULE_SETUP \ if ( grecs_grecs_leng > 0 ) \ YY_CURRENT_BUFFER_LVALUE->grecs_grecs__at_bol = \ (grecs_grecs_text[grecs_grecs_leng - 1] == '\n'); \ YY_USER_ACTION /* %not-for-header */ /** The main scanner function which does all the work. */ YY_DECL { register grecs_grecs__state_type grecs_grecs__current_state; register char *grecs_grecs__cp, *grecs_grecs__bp; register int grecs_grecs__act; /* %% [7.0] user's declarations go here */ #line 89 "grecs-lex.l" /* C-style comments */ #line 1040 "grecs-lex.c" if ( !(grecs_grecs__init) ) { (grecs_grecs__init) = 1; #ifdef YY_USER_INIT YY_USER_INIT; #endif if ( ! (grecs_grecs__start) ) (grecs_grecs__start) = 1; /* first start state */ if ( ! grecs_grecs_in ) /* %if-c-only */ grecs_grecs_in = stdin; /* %endif */ /* %if-c++-only */ /* %endif */ if ( ! grecs_grecs_out ) /* %if-c-only */ grecs_grecs_out = stdout; /* %endif */ /* %if-c++-only */ /* %endif */ if ( ! YY_CURRENT_BUFFER ) { grecs_grecs_ensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = grecs_grecs__create_buffer(grecs_grecs_in,YY_BUF_SIZE ); } grecs_grecs__load_buffer_state( ); } while ( 1 ) /* loops until end-of-file is reached */ { /* %% [8.0] grecs_grecs_more()-related code goes here */ grecs_grecs__cp = (grecs_grecs__c_buf_p); /* Support of grecs_grecs_text. */ *grecs_grecs__cp = (grecs_grecs__hold_char); /* grecs_grecs__bp points to the position in grecs_grecs__ch_buf of the start of * the current run. */ grecs_grecs__bp = grecs_grecs__cp; /* %% [9.0] code to set up and find next match goes here */ grecs_grecs__current_state = (grecs_grecs__start); grecs_grecs__current_state += YY_AT_BOL(); grecs_grecs__match: do { register YY_CHAR grecs_grecs__c = grecs_grecs__ec[YY_SC_TO_UI(*grecs_grecs__cp)]; if ( grecs_grecs__accept[grecs_grecs__current_state] ) { (grecs_grecs__last_accepting_state) = grecs_grecs__current_state; (grecs_grecs__last_accepting_cpos) = grecs_grecs__cp; } while ( grecs_grecs__chk[grecs_grecs__base[grecs_grecs__current_state] + grecs_grecs__c] != grecs_grecs__current_state ) { grecs_grecs__current_state = (int) grecs_grecs__def[grecs_grecs__current_state]; if ( grecs_grecs__current_state >= 134 ) grecs_grecs__c = grecs_grecs__meta[(unsigned int) grecs_grecs__c]; } grecs_grecs__current_state = grecs_grecs__nxt[grecs_grecs__base[grecs_grecs__current_state] + (unsigned int) grecs_grecs__c]; ++grecs_grecs__cp; } while ( grecs_grecs__base[grecs_grecs__current_state] != 527 ); grecs_grecs__find_action: /* %% [10.0] code to find the action number goes here */ grecs_grecs__act = grecs_grecs__accept[grecs_grecs__current_state]; if ( grecs_grecs__act == 0 ) { /* have to back up */ grecs_grecs__cp = (grecs_grecs__last_accepting_cpos); grecs_grecs__current_state = (grecs_grecs__last_accepting_state); grecs_grecs__act = grecs_grecs__accept[grecs_grecs__current_state]; } YY_DO_BEFORE_ACTION; /* %% [11.0] code for grecs_grecs_lineno update goes here */ do_action: /* This label is used only to access EOF actions. */ /* %% [12.0] debug code goes here */ if ( grecs_grecs__flex_debug ) { if ( grecs_grecs__act == 0 ) fprintf( stderr, "--scanner backing up\n" ); else if ( grecs_grecs__act < 32 ) fprintf( stderr, "--accepting rule at line %ld (\"%s\")\n", (long)grecs_grecs__rule_linenum[grecs_grecs__act], grecs_grecs_text ); else if ( grecs_grecs__act == 32 ) fprintf( stderr, "--accepting default rule (\"%s\")\n", grecs_grecs_text ); else if ( grecs_grecs__act == 33 ) fprintf( stderr, "--(end of buffer or a NUL)\n" ); else fprintf( stderr, "--EOF (start condition %d)\n", YY_START ); } switch ( grecs_grecs__act ) { /* beginning of action switch */ /* %% [13.0] actions go here */ case 0: /* must back up */ /* undo the effects of YY_DO_BEFORE_ACTION */ *grecs_grecs__cp = (grecs_grecs__hold_char); grecs_grecs__cp = (grecs_grecs__last_accepting_cpos); grecs_grecs__current_state = (grecs_grecs__last_accepting_state); goto grecs_grecs__find_action; case 1: YY_RULE_SETUP #line 91 "grecs-lex.l" BEGIN(COMMENT); YY_BREAK case 2: YY_RULE_SETUP #line 92 "grecs-lex.l" /* eat anything that's not a '*' */ YY_BREAK case 3: YY_RULE_SETUP #line 93 "grecs-lex.l" /* eat up '*'s not followed by '/'s */ YY_BREAK case 4: /* rule 4 can match eol */ YY_RULE_SETUP #line 94 "grecs-lex.l" grecs_locus_point_advance_line(grecs_current_locus_point); YY_BREAK case 5: YY_RULE_SETUP #line 95 "grecs-lex.l" BEGIN(INITIAL); YY_BREAK /* Line directive */ case 6: /* rule 6 can match eol */ YY_RULE_SETUP #line 97 "grecs-lex.l" { grecs_parse_line_directive_cpp(grecs_grecs_text, &grecs_grecs_lloc, &grecs_current_locus_point, &xlines); } YY_BREAK case 7: /* rule 7 can match eol */ YY_RULE_SETUP #line 101 "grecs-lex.l" { grecs_parse_line_directive(grecs_grecs_text, &grecs_grecs_lloc, &grecs_current_locus_point, &xlines); } YY_BREAK /* End-of-line comments */ case 8: /* rule 8 can match eol */ YY_RULE_SETUP #line 106 "grecs-lex.l" { grecs_locus_point_advance_line(grecs_current_locus_point); } YY_BREAK case 9: YY_RULE_SETUP #line 107 "grecs-lex.l" /* end-of-file comment */; YY_BREAK case 10: /* rule 10 can match eol */ YY_RULE_SETUP #line 108 "grecs-lex.l" { grecs_locus_point_advance_line(grecs_current_locus_point); } YY_BREAK case 11: YY_RULE_SETUP #line 109 "grecs-lex.l" /* end-of-file comment */; YY_BREAK /* Identifiers */ case 12: YY_RULE_SETUP #line 111 "grecs-lex.l" return ident(); YY_BREAK /* Strings */ case 13: YY_RULE_SETUP #line 113 "grecs-lex.l" { grecs_line_begin(); grecs_line_add(grecs_grecs_text, grecs_grecs_leng); grecs_grecs_lval.string = grecs_line_finish(); return STRING; } YY_BREAK /* Quoted strings */ case 14: YY_RULE_SETUP #line 119 "grecs-lex.l" { grecs_line_begin(); grecs_line_add(grecs_grecs_text + 1, grecs_grecs_leng - 2); grecs_grecs_lval.string = grecs_line_finish(); qstring_locus_fixup(); return qstring(); } YY_BREAK case 15: /* rule 15 can match eol */ YY_RULE_SETUP #line 124 "grecs-lex.l" { BEGIN(STR); grecs_line_begin(); grecs_line_acc_grow_unescape_last(grecs_grecs_text + 1, grecs_grecs_leng - 1, &grecs_grecs_lloc); grecs_locus_point_advance_line(grecs_current_locus_point); } YY_BREAK case 16: YY_RULE_SETUP #line 130 "grecs-lex.l" { BEGIN(STR); grecs_line_begin(); grecs_line_acc_grow_unescape_last(grecs_grecs_text + 1, grecs_grecs_leng - 1, &grecs_grecs_lloc); } YY_BREAK case 17: /* rule 17 can match eol */ YY_RULE_SETUP #line 135 "grecs-lex.l" { grecs_line_acc_grow_unescape_last(grecs_grecs_text, grecs_grecs_leng, &grecs_grecs_lloc); grecs_locus_point_advance_line(grecs_current_locus_point); } YY_BREAK case 18: YY_RULE_SETUP #line 138 "grecs-lex.l" { grecs_line_acc_grow_unescape_last(grecs_grecs_text, grecs_grecs_leng, &grecs_grecs_lloc); } YY_BREAK case 19: YY_RULE_SETUP #line 140 "grecs-lex.l" { BEGIN(INITIAL); if (grecs_grecs_leng > 1) grecs_line_add(grecs_grecs_text, grecs_grecs_leng - 1); grecs_grecs_lval.string = grecs_line_finish(); qstring_locus_fixup(); return qstring(); } YY_BREAK /* Multiline strings */ case 20: /* rule 20 can match eol */ #line 148 "grecs-lex.l" case 21: /* rule 21 can match eol */ #line 149 "grecs-lex.l" case 22: /* rule 22 can match eol */ #line 150 "grecs-lex.l" case 23: /* rule 23 can match eol */ #line 151 "grecs-lex.l" case 24: /* rule 24 can match eol */ #line 152 "grecs-lex.l" case 25: /* rule 25 can match eol */ YY_RULE_SETUP #line 152 "grecs-lex.l" { BEGIN(ML); multiline_begin(grecs_grecs_text+2); } YY_BREAK /* Ignore m4 line statements */ case 26: /* rule 26 can match eol */ YY_RULE_SETUP #line 156 "grecs-lex.l" { grecs_locus_point_advance_line(grecs_current_locus_point); } YY_BREAK case 27: /* rule 27 can match eol */ YY_RULE_SETUP #line 159 "grecs-lex.l" { char *p = multiline_strip_tabs(grecs_grecs_text); if (!strncmp(p, multiline_delimiter, multiline_delimiter_len) && isemptystr(p + multiline_delimiter_len - grecs_grecs_text)) { grecs_free(multiline_delimiter); multiline_delimiter = NULL; BEGIN(INITIAL); grecs_grecs_lval.string = grecs_line_finish(); /* Update end pos */ grecs_grecs_lloc.end.line--; for (grecs_grecs_lloc.end.col = 0, p = grecs_grecs_lval.string + strlen(grecs_grecs_lval.string) - 1; p > grecs_grecs_lval.string && p[-1] != '\n'; grecs_grecs_lloc.end.col++, p--); if (grecs_grecs_lloc.end.col == 0) grecs_grecs_lloc.end.col = 1; return MSTRING; } grecs_locus_point_advance_line(grecs_current_locus_point); multiline_add(p); } YY_BREAK case 28: YY_RULE_SETUP #line 180 "grecs-lex.l" ; YY_BREAK /* Other tokens */ case 29: /* rule 29 can match eol */ YY_RULE_SETUP #line 182 "grecs-lex.l" { grecs_locus_point_advance_line(grecs_current_locus_point); } YY_BREAK case 30: YY_RULE_SETUP #line 183 "grecs-lex.l" return grecs_grecs_text[0]; YY_BREAK case 31: YY_RULE_SETUP #line 184 "grecs-lex.l" { if (isascii(grecs_grecs_text[0]) && isprint(grecs_grecs_text[0])) grecs_error(&grecs_grecs_lloc, 0, _("stray character %c"), grecs_grecs_text[0]); else grecs_error(&grecs_grecs_lloc, 0, _("stray character \\%03o"), (unsigned char) grecs_grecs_text[0]); } YY_BREAK case 32: YY_RULE_SETUP #line 191 "grecs-lex.l" ECHO; YY_BREAK #line 1385 "grecs-lex.c" case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(COMMENT): case YY_STATE_EOF(ML): case YY_STATE_EOF(STR): grecs_grecs_terminate(); case YY_END_OF_BUFFER: { /* Amount of text matched not including the EOB char. */ int grecs_grecs__amount_of_matched_text = (int) (grecs_grecs__cp - (grecs_grecs_text_ptr)) - 1; /* Undo the effects of YY_DO_BEFORE_ACTION. */ *grecs_grecs__cp = (grecs_grecs__hold_char); YY_RESTORE_YY_MORE_OFFSET if ( YY_CURRENT_BUFFER_LVALUE->grecs_grecs__buffer_status == YY_BUFFER_NEW ) { /* We're scanning a new file or input source. It's * possible that this happened because the user * just pointed grecs_grecs_in at a new source and called * grecs_grecs_lex(). If so, then we have to assure * consistency between YY_CURRENT_BUFFER and our * globals. Here is the right place to do so, because * this is the first action (other than possibly a * back-up) that will match for the new input source. */ (grecs_grecs__n_chars) = YY_CURRENT_BUFFER_LVALUE->grecs_grecs__n_chars; YY_CURRENT_BUFFER_LVALUE->grecs_grecs__input_file = grecs_grecs_in; YY_CURRENT_BUFFER_LVALUE->grecs_grecs__buffer_status = YY_BUFFER_NORMAL; } /* Note that here we test for grecs_grecs__c_buf_p "<=" to the position * of the first EOB in the buffer, since grecs_grecs__c_buf_p will * already have been incremented past the NUL character * (since all states make transitions on EOB to the * end-of-buffer state). Contrast this with the test * in input(). */ if ( (grecs_grecs__c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->grecs_grecs__ch_buf[(grecs_grecs__n_chars)] ) { /* This was really a NUL. */ grecs_grecs__state_type grecs_grecs__next_state; (grecs_grecs__c_buf_p) = (grecs_grecs_text_ptr) + grecs_grecs__amount_of_matched_text; grecs_grecs__current_state = grecs_grecs__get_previous_state( ); /* Okay, we're now positioned to make the NUL * transition. We couldn't have * grecs_grecs__get_previous_state() go ahead and do it * for us because it doesn't know how to deal * with the possibility of jamming (and we don't * want to build jamming into it because then it * will run more slowly). */ grecs_grecs__next_state = grecs_grecs__try_NUL_trans( grecs_grecs__current_state ); grecs_grecs__bp = (grecs_grecs_text_ptr) + YY_MORE_ADJ; if ( grecs_grecs__next_state ) { /* Consume the NUL. */ grecs_grecs__cp = ++(grecs_grecs__c_buf_p); grecs_grecs__current_state = grecs_grecs__next_state; goto grecs_grecs__match; } else { /* %% [14.0] code to do back-up for compressed tables and set up grecs_grecs__cp goes here */ grecs_grecs__cp = (grecs_grecs__c_buf_p); goto grecs_grecs__find_action; } } else switch ( grecs_grecs__get_next_buffer( ) ) { case EOB_ACT_END_OF_FILE: { (grecs_grecs__did_buffer_switch_on_eof) = 0; if ( grecs_grecs_wrap( ) ) { /* Note: because we've taken care in * grecs_grecs__get_next_buffer() to have set up * grecs_grecs_text, we can now set up * grecs_grecs__c_buf_p so that if some total * hoser (like flex itself) wants to * call the scanner after we return the * YY_NULL, it'll still work - another * YY_NULL will get returned. */ (grecs_grecs__c_buf_p) = (grecs_grecs_text_ptr) + YY_MORE_ADJ; grecs_grecs__act = YY_STATE_EOF(YY_START); goto do_action; } else { if ( ! (grecs_grecs__did_buffer_switch_on_eof) ) YY_NEW_FILE; } break; } case EOB_ACT_CONTINUE_SCAN: (grecs_grecs__c_buf_p) = (grecs_grecs_text_ptr) + grecs_grecs__amount_of_matched_text; grecs_grecs__current_state = grecs_grecs__get_previous_state( ); grecs_grecs__cp = (grecs_grecs__c_buf_p); grecs_grecs__bp = (grecs_grecs_text_ptr) + YY_MORE_ADJ; goto grecs_grecs__match; case EOB_ACT_LAST_MATCH: (grecs_grecs__c_buf_p) = &YY_CURRENT_BUFFER_LVALUE->grecs_grecs__ch_buf[(grecs_grecs__n_chars)]; grecs_grecs__current_state = grecs_grecs__get_previous_state( ); grecs_grecs__cp = (grecs_grecs__c_buf_p); grecs_grecs__bp = (grecs_grecs_text_ptr) + YY_MORE_ADJ; goto grecs_grecs__find_action; } break; } default: YY_FATAL_ERROR( "fatal flex scanner internal error--no action found" ); } /* end of action switch */ } /* end of scanning one token */ } /* end of grecs_grecs_lex */ /* %ok-for-header */ /* %if-c++-only */ /* %not-for-header */ /* %ok-for-header */ /* %endif */ /* grecs_grecs__get_next_buffer - try to read in a new buffer * * Returns a code representing an action: * EOB_ACT_LAST_MATCH - * EOB_ACT_CONTINUE_SCAN - continue scanning from current position * EOB_ACT_END_OF_FILE - end of file */ /* %if-c-only */ static int grecs_grecs__get_next_buffer (void) /* %endif */ /* %if-c++-only */ /* %endif */ { register char *dest = YY_CURRENT_BUFFER_LVALUE->grecs_grecs__ch_buf; register char *source = (grecs_grecs_text_ptr); register int number_to_move, i; int ret_val; if ( (grecs_grecs__c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->grecs_grecs__ch_buf[(grecs_grecs__n_chars) + 1] ) YY_FATAL_ERROR( "fatal flex scanner internal error--end of buffer missed" ); if ( YY_CURRENT_BUFFER_LVALUE->grecs_grecs__fill_buffer == 0 ) { /* Don't try to fill the buffer, so this is an EOF. */ if ( (grecs_grecs__c_buf_p) - (grecs_grecs_text_ptr) - YY_MORE_ADJ == 1 ) { /* We matched a single character, the EOB, so * treat this as a final EOF. */ return EOB_ACT_END_OF_FILE; } else { /* We matched some text prior to the EOB, first * process it. */ return EOB_ACT_LAST_MATCH; } } /* Try to read more data. */ /* First move last chars to start of buffer. */ number_to_move = (int) ((grecs_grecs__c_buf_p) - (grecs_grecs_text_ptr)) - 1; for ( i = 0; i < number_to_move; ++i ) *(dest++) = *(source++); if ( YY_CURRENT_BUFFER_LVALUE->grecs_grecs__buffer_status == YY_BUFFER_EOF_PENDING ) /* don't do the read, it's not guaranteed to return an EOF, * just force an EOF */ YY_CURRENT_BUFFER_LVALUE->grecs_grecs__n_chars = (grecs_grecs__n_chars) = 0; else { grecs_grecs__size_t num_to_read = YY_CURRENT_BUFFER_LVALUE->grecs_grecs__buf_size - number_to_move - 1; while ( num_to_read <= 0 ) { /* Not enough room in the buffer - grow it. */ /* just a shorter name for the current buffer */ YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE; int grecs_grecs__c_buf_p_offset = (int) ((grecs_grecs__c_buf_p) - b->grecs_grecs__ch_buf); if ( b->grecs_grecs__is_our_buffer ) { grecs_grecs__size_t new_size = b->grecs_grecs__buf_size * 2; if ( new_size <= 0 ) b->grecs_grecs__buf_size += b->grecs_grecs__buf_size / 8; else b->grecs_grecs__buf_size *= 2; b->grecs_grecs__ch_buf = (char *) /* Include room in for 2 EOB chars. */ grecs_grecs_realloc((void *) b->grecs_grecs__ch_buf,b->grecs_grecs__buf_size + 2 ); } else /* Can't grow it, we don't own it. */ b->grecs_grecs__ch_buf = 0; if ( ! b->grecs_grecs__ch_buf ) YY_FATAL_ERROR( "fatal error - scanner input buffer overflow" ); (grecs_grecs__c_buf_p) = &b->grecs_grecs__ch_buf[grecs_grecs__c_buf_p_offset]; num_to_read = YY_CURRENT_BUFFER_LVALUE->grecs_grecs__buf_size - number_to_move - 1; } if ( num_to_read > YY_READ_BUF_SIZE ) num_to_read = YY_READ_BUF_SIZE; /* Read in more data. */ YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->grecs_grecs__ch_buf[number_to_move]), (grecs_grecs__n_chars), num_to_read ); YY_CURRENT_BUFFER_LVALUE->grecs_grecs__n_chars = (grecs_grecs__n_chars); } if ( (grecs_grecs__n_chars) == 0 ) { if ( number_to_move == YY_MORE_ADJ ) { ret_val = EOB_ACT_END_OF_FILE; grecs_grecs_restart(grecs_grecs_in ); } else { ret_val = EOB_ACT_LAST_MATCH; YY_CURRENT_BUFFER_LVALUE->grecs_grecs__buffer_status = YY_BUFFER_EOF_PENDING; } } else ret_val = EOB_ACT_CONTINUE_SCAN; if ((grecs_grecs__size_t) ((grecs_grecs__n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->grecs_grecs__buf_size) { /* Extend the array by 50%, plus the number we really need. */ grecs_grecs__size_t new_size = (grecs_grecs__n_chars) + number_to_move + ((grecs_grecs__n_chars) >> 1); YY_CURRENT_BUFFER_LVALUE->grecs_grecs__ch_buf = (char *) grecs_grecs_realloc((void *) YY_CURRENT_BUFFER_LVALUE->grecs_grecs__ch_buf,new_size ); if ( ! YY_CURRENT_BUFFER_LVALUE->grecs_grecs__ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in grecs_grecs__get_next_buffer()" ); } (grecs_grecs__n_chars) += number_to_move; YY_CURRENT_BUFFER_LVALUE->grecs_grecs__ch_buf[(grecs_grecs__n_chars)] = YY_END_OF_BUFFER_CHAR; YY_CURRENT_BUFFER_LVALUE->grecs_grecs__ch_buf[(grecs_grecs__n_chars) + 1] = YY_END_OF_BUFFER_CHAR; (grecs_grecs_text_ptr) = &YY_CURRENT_BUFFER_LVALUE->grecs_grecs__ch_buf[0]; return ret_val; } /* grecs_grecs__get_previous_state - get the state just before the EOB char was reached */ /* %if-c-only */ /* %not-for-header */ static grecs_grecs__state_type grecs_grecs__get_previous_state (void) /* %endif */ /* %if-c++-only */ /* %endif */ { register grecs_grecs__state_type grecs_grecs__current_state; register char *grecs_grecs__cp; /* %% [15.0] code to get the start state into grecs_grecs__current_state goes here */ grecs_grecs__current_state = (grecs_grecs__start); grecs_grecs__current_state += YY_AT_BOL(); for ( grecs_grecs__cp = (grecs_grecs_text_ptr) + YY_MORE_ADJ; grecs_grecs__cp < (grecs_grecs__c_buf_p); ++grecs_grecs__cp ) { /* %% [16.0] code to find the next state goes here */ register YY_CHAR grecs_grecs__c = (*grecs_grecs__cp ? grecs_grecs__ec[YY_SC_TO_UI(*grecs_grecs__cp)] : 1); if ( grecs_grecs__accept[grecs_grecs__current_state] ) { (grecs_grecs__last_accepting_state) = grecs_grecs__current_state; (grecs_grecs__last_accepting_cpos) = grecs_grecs__cp; } while ( grecs_grecs__chk[grecs_grecs__base[grecs_grecs__current_state] + grecs_grecs__c] != grecs_grecs__current_state ) { grecs_grecs__current_state = (int) grecs_grecs__def[grecs_grecs__current_state]; if ( grecs_grecs__current_state >= 134 ) grecs_grecs__c = grecs_grecs__meta[(unsigned int) grecs_grecs__c]; } grecs_grecs__current_state = grecs_grecs__nxt[grecs_grecs__base[grecs_grecs__current_state] + (unsigned int) grecs_grecs__c]; } return grecs_grecs__current_state; } /* grecs_grecs__try_NUL_trans - try to make a transition on the NUL character * * synopsis * next_state = grecs_grecs__try_NUL_trans( current_state ); */ /* %if-c-only */ static grecs_grecs__state_type grecs_grecs__try_NUL_trans (grecs_grecs__state_type grecs_grecs__current_state ) /* %endif */ /* %if-c++-only */ /* %endif */ { register int grecs_grecs__is_jam; /* %% [17.0] code to find the next state, and perhaps do backing up, goes here */ register char *grecs_grecs__cp = (grecs_grecs__c_buf_p); register YY_CHAR grecs_grecs__c = 1; if ( grecs_grecs__accept[grecs_grecs__current_state] ) { (grecs_grecs__last_accepting_state) = grecs_grecs__current_state; (grecs_grecs__last_accepting_cpos) = grecs_grecs__cp; } while ( grecs_grecs__chk[grecs_grecs__base[grecs_grecs__current_state] + grecs_grecs__c] != grecs_grecs__current_state ) { grecs_grecs__current_state = (int) grecs_grecs__def[grecs_grecs__current_state]; if ( grecs_grecs__current_state >= 134 ) grecs_grecs__c = grecs_grecs__meta[(unsigned int) grecs_grecs__c]; } grecs_grecs__current_state = grecs_grecs__nxt[grecs_grecs__base[grecs_grecs__current_state] + (unsigned int) grecs_grecs__c]; grecs_grecs__is_jam = (grecs_grecs__current_state == 133); return grecs_grecs__is_jam ? 0 : grecs_grecs__current_state; } /* %if-c-only */ /* %endif */ /* %if-c-only */ #ifndef YY_NO_INPUT #ifdef __cplusplus static int grecs_grecs_input (void) #else static int input (void) #endif /* %endif */ /* %if-c++-only */ /* %endif */ { int c; *(grecs_grecs__c_buf_p) = (grecs_grecs__hold_char); if ( *(grecs_grecs__c_buf_p) == YY_END_OF_BUFFER_CHAR ) { /* grecs_grecs__c_buf_p now points to the character we want to return. * If this occurs *before* the EOB characters, then it's a * valid NUL; if not, then we've hit the end of the buffer. */ if ( (grecs_grecs__c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->grecs_grecs__ch_buf[(grecs_grecs__n_chars)] ) /* This was really a NUL. */ *(grecs_grecs__c_buf_p) = '\0'; else { /* need more input */ grecs_grecs__size_t offset = (grecs_grecs__c_buf_p) - (grecs_grecs_text_ptr); ++(grecs_grecs__c_buf_p); switch ( grecs_grecs__get_next_buffer( ) ) { case EOB_ACT_LAST_MATCH: /* This happens because grecs_grecs__g_n_b() * sees that we've accumulated a * token and flags that we need to * try matching the token before * proceeding. But for input(), * there's no matching to consider. * So convert the EOB_ACT_LAST_MATCH * to EOB_ACT_END_OF_FILE. */ /* Reset buffer status. */ grecs_grecs_restart(grecs_grecs_in ); /*FALLTHROUGH*/ case EOB_ACT_END_OF_FILE: { if ( grecs_grecs_wrap( ) ) return EOF; if ( ! (grecs_grecs__did_buffer_switch_on_eof) ) YY_NEW_FILE; #ifdef __cplusplus return grecs_grecs_input(); #else return input(); #endif } case EOB_ACT_CONTINUE_SCAN: (grecs_grecs__c_buf_p) = (grecs_grecs_text_ptr) + offset; break; } } } c = *(unsigned char *) (grecs_grecs__c_buf_p); /* cast for 8-bit char's */ *(grecs_grecs__c_buf_p) = '\0'; /* preserve grecs_grecs_text */ (grecs_grecs__hold_char) = *++(grecs_grecs__c_buf_p); /* %% [19.0] update BOL and grecs_grecs_lineno */ YY_CURRENT_BUFFER_LVALUE->grecs_grecs__at_bol = (c == '\n'); return c; } /* %if-c-only */ #endif /* ifndef YY_NO_INPUT */ /* %endif */ /** Immediately switch to a different input stream. * @param input_file A readable stream. * * @note This function does not reset the start condition to @c INITIAL . */ /* %if-c-only */ void grecs_grecs_restart (FILE * input_file ) /* %endif */ /* %if-c++-only */ /* %endif */ { if ( ! YY_CURRENT_BUFFER ){ grecs_grecs_ensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = grecs_grecs__create_buffer(grecs_grecs_in,YY_BUF_SIZE ); } grecs_grecs__init_buffer(YY_CURRENT_BUFFER,input_file ); grecs_grecs__load_buffer_state( ); } /** Switch to a different input buffer. * @param new_buffer The new input buffer. * */ /* %if-c-only */ void grecs_grecs__switch_to_buffer (YY_BUFFER_STATE new_buffer ) /* %endif */ /* %if-c++-only */ /* %endif */ { /* TODO. We should be able to replace this entire function body * with * grecs_grecs_pop_buffer_state(); * grecs_grecs_push_buffer_state(new_buffer); */ grecs_grecs_ensure_buffer_stack (); if ( YY_CURRENT_BUFFER == new_buffer ) return; if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(grecs_grecs__c_buf_p) = (grecs_grecs__hold_char); YY_CURRENT_BUFFER_LVALUE->grecs_grecs__buf_pos = (grecs_grecs__c_buf_p); YY_CURRENT_BUFFER_LVALUE->grecs_grecs__n_chars = (grecs_grecs__n_chars); } YY_CURRENT_BUFFER_LVALUE = new_buffer; grecs_grecs__load_buffer_state( ); /* We don't actually know whether we did this switch during * EOF (grecs_grecs_wrap()) processing, but the only time this flag * is looked at is after grecs_grecs_wrap() is called, so it's safe * to go ahead and always set it. */ (grecs_grecs__did_buffer_switch_on_eof) = 1; } /* %if-c-only */ static void grecs_grecs__load_buffer_state (void) /* %endif */ /* %if-c++-only */ /* %endif */ { (grecs_grecs__n_chars) = YY_CURRENT_BUFFER_LVALUE->grecs_grecs__n_chars; (grecs_grecs_text_ptr) = (grecs_grecs__c_buf_p) = YY_CURRENT_BUFFER_LVALUE->grecs_grecs__buf_pos; grecs_grecs_in = YY_CURRENT_BUFFER_LVALUE->grecs_grecs__input_file; (grecs_grecs__hold_char) = *(grecs_grecs__c_buf_p); } /** Allocate and initialize an input buffer state. * @param file A readable stream. * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. * * @return the allocated buffer state. */ /* %if-c-only */ YY_BUFFER_STATE grecs_grecs__create_buffer (FILE * file, int size ) /* %endif */ /* %if-c++-only */ /* %endif */ { YY_BUFFER_STATE b; b = (YY_BUFFER_STATE) grecs_grecs_alloc(sizeof( struct grecs_grecs__buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in grecs_grecs__create_buffer()" ); b->grecs_grecs__buf_size = size; /* grecs_grecs__ch_buf has to be 2 characters longer than the size given because * we need to put in 2 end-of-buffer characters. */ b->grecs_grecs__ch_buf = (char *) grecs_grecs_alloc(b->grecs_grecs__buf_size + 2 ); if ( ! b->grecs_grecs__ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in grecs_grecs__create_buffer()" ); b->grecs_grecs__is_our_buffer = 1; grecs_grecs__init_buffer(b,file ); return b; } /** Destroy the buffer. * @param b a buffer created with grecs_grecs__create_buffer() * */ /* %if-c-only */ void grecs_grecs__delete_buffer (YY_BUFFER_STATE b ) /* %endif */ /* %if-c++-only */ /* %endif */ { if ( ! b ) return; if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; if ( b->grecs_grecs__is_our_buffer ) grecs_grecs_free((void *) b->grecs_grecs__ch_buf ); grecs_grecs_free((void *) b ); } /* Initializes or reinitializes a buffer. * This function is sometimes called more than once on the same buffer, * such as during a grecs_grecs_restart() or at EOF. */ /* %if-c-only */ static void grecs_grecs__init_buffer (YY_BUFFER_STATE b, FILE * file ) /* %endif */ /* %if-c++-only */ /* %endif */ { int oerrno = errno; grecs_grecs__flush_buffer(b ); b->grecs_grecs__input_file = file; b->grecs_grecs__fill_buffer = 1; /* If b is the current buffer, then grecs_grecs__init_buffer was _probably_ * called from grecs_grecs_restart() or through grecs_grecs__get_next_buffer. * In that case, we don't want to reset the lineno or column. */ if (b != YY_CURRENT_BUFFER){ b->grecs_grecs__bs_lineno = 1; b->grecs_grecs__bs_column = 0; } /* %if-c-only */ b->grecs_grecs__is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; /* %endif */ /* %if-c++-only */ /* %endif */ errno = oerrno; } /** Discard all buffered characters. On the next scan, YY_INPUT will be called. * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. * */ /* %if-c-only */ void grecs_grecs__flush_buffer (YY_BUFFER_STATE b ) /* %endif */ /* %if-c++-only */ /* %endif */ { if ( ! b ) return; b->grecs_grecs__n_chars = 0; /* We always need two end-of-buffer characters. The first causes * a transition to the end-of-buffer state. The second causes * a jam in that state. */ b->grecs_grecs__ch_buf[0] = YY_END_OF_BUFFER_CHAR; b->grecs_grecs__ch_buf[1] = YY_END_OF_BUFFER_CHAR; b->grecs_grecs__buf_pos = &b->grecs_grecs__ch_buf[0]; b->grecs_grecs__at_bol = 1; b->grecs_grecs__buffer_status = YY_BUFFER_NEW; if ( b == YY_CURRENT_BUFFER ) grecs_grecs__load_buffer_state( ); } /* %if-c-or-c++ */ /** Pushes the new state onto the stack. The new state becomes * the current state. This function will allocate the stack * if necessary. * @param new_buffer The new state. * */ /* %if-c-only */ void grecs_grecs_push_buffer_state (YY_BUFFER_STATE new_buffer ) /* %endif */ /* %if-c++-only */ /* %endif */ { if (new_buffer == NULL) return; grecs_grecs_ensure_buffer_stack(); /* This block is copied from grecs_grecs__switch_to_buffer. */ if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(grecs_grecs__c_buf_p) = (grecs_grecs__hold_char); YY_CURRENT_BUFFER_LVALUE->grecs_grecs__buf_pos = (grecs_grecs__c_buf_p); YY_CURRENT_BUFFER_LVALUE->grecs_grecs__n_chars = (grecs_grecs__n_chars); } /* Only push if top exists. Otherwise, replace top. */ if (YY_CURRENT_BUFFER) (grecs_grecs__buffer_stack_top)++; YY_CURRENT_BUFFER_LVALUE = new_buffer; /* copied from grecs_grecs__switch_to_buffer. */ grecs_grecs__load_buffer_state( ); (grecs_grecs__did_buffer_switch_on_eof) = 1; } /* %endif */ /* %if-c-or-c++ */ /** Removes and deletes the top of the stack, if present. * The next element becomes the new top. * */ /* %if-c-only */ void grecs_grecs_pop_buffer_state (void) /* %endif */ /* %if-c++-only */ /* %endif */ { if (!YY_CURRENT_BUFFER) return; grecs_grecs__delete_buffer(YY_CURRENT_BUFFER ); YY_CURRENT_BUFFER_LVALUE = NULL; if ((grecs_grecs__buffer_stack_top) > 0) --(grecs_grecs__buffer_stack_top); if (YY_CURRENT_BUFFER) { grecs_grecs__load_buffer_state( ); (grecs_grecs__did_buffer_switch_on_eof) = 1; } } /* %endif */ /* %if-c-or-c++ */ /* Allocates the stack if it does not exist. * Guarantees space for at least one push. */ /* %if-c-only */ static void grecs_grecs_ensure_buffer_stack (void) /* %endif */ /* %if-c++-only */ /* %endif */ { grecs_grecs__size_t num_to_alloc; if (!(grecs_grecs__buffer_stack)) { /* First allocation is just for 2 elements, since we don't know if this * scanner will even need a stack. We use 2 instead of 1 to avoid an * immediate realloc on the next call. */ num_to_alloc = 1; (grecs_grecs__buffer_stack) = (struct grecs_grecs__buffer_state**)grecs_grecs_alloc (num_to_alloc * sizeof(struct grecs_grecs__buffer_state*) ); if ( ! (grecs_grecs__buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in grecs_grecs_ensure_buffer_stack()" ); memset((grecs_grecs__buffer_stack), 0, num_to_alloc * sizeof(struct grecs_grecs__buffer_state*)); (grecs_grecs__buffer_stack_max) = num_to_alloc; (grecs_grecs__buffer_stack_top) = 0; return; } if ((grecs_grecs__buffer_stack_top) >= ((grecs_grecs__buffer_stack_max)) - 1){ /* Increase the buffer to prepare for a possible push. */ int grow_size = 8 /* arbitrary grow size */; num_to_alloc = (grecs_grecs__buffer_stack_max) + grow_size; (grecs_grecs__buffer_stack) = (struct grecs_grecs__buffer_state**)grecs_grecs_realloc ((grecs_grecs__buffer_stack), num_to_alloc * sizeof(struct grecs_grecs__buffer_state*) ); if ( ! (grecs_grecs__buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in grecs_grecs_ensure_buffer_stack()" ); /* zero only the new slots.*/ memset((grecs_grecs__buffer_stack) + (grecs_grecs__buffer_stack_max), 0, grow_size * sizeof(struct grecs_grecs__buffer_state*)); (grecs_grecs__buffer_stack_max) = num_to_alloc; } } /* %endif */ /* %if-c-only */ /** Setup the input buffer state to scan directly from a user-specified character buffer. * @param base the character buffer * @param size the size in bytes of the character buffer * * @return the newly allocated buffer state object. */ YY_BUFFER_STATE grecs_grecs__scan_buffer (char * base, grecs_grecs__size_t size ) { YY_BUFFER_STATE b; if ( size < 2 || base[size-2] != YY_END_OF_BUFFER_CHAR || base[size-1] != YY_END_OF_BUFFER_CHAR ) /* They forgot to leave room for the EOB's. */ return 0; b = (YY_BUFFER_STATE) grecs_grecs_alloc(sizeof( struct grecs_grecs__buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in grecs_grecs__scan_buffer()" ); b->grecs_grecs__buf_size = size - 2; /* "- 2" to take care of EOB's */ b->grecs_grecs__buf_pos = b->grecs_grecs__ch_buf = base; b->grecs_grecs__is_our_buffer = 0; b->grecs_grecs__input_file = 0; b->grecs_grecs__n_chars = b->grecs_grecs__buf_size; b->grecs_grecs__is_interactive = 0; b->grecs_grecs__at_bol = 1; b->grecs_grecs__fill_buffer = 0; b->grecs_grecs__buffer_status = YY_BUFFER_NEW; grecs_grecs__switch_to_buffer(b ); return b; } /* %endif */ /* %if-c-only */ /** Setup the input buffer state to scan a string. The next call to grecs_grecs_lex() will * scan from a @e copy of @a str. * @param grecs_grecs_str a NUL-terminated string to scan * * @return the newly allocated buffer state object. * @note If you want to scan bytes that may contain NUL values, then use * grecs_grecs__scan_bytes() instead. */ YY_BUFFER_STATE grecs_grecs__scan_string (grecs_grecs_const char * grecs_grecs_str ) { return grecs_grecs__scan_bytes(grecs_grecs_str,strlen(grecs_grecs_str) ); } /* %endif */ /* %if-c-only */ /** Setup the input buffer state to scan the given bytes. The next call to grecs_grecs_lex() will * scan from a @e copy of @a bytes. * @param grecs_grecs_bytes the byte buffer to scan * @param _grecs_grecs_bytes_len the number of bytes in the buffer pointed to by @a bytes. * * @return the newly allocated buffer state object. */ YY_BUFFER_STATE grecs_grecs__scan_bytes (grecs_grecs_const char * grecs_grecs_bytes, grecs_grecs__size_t _grecs_grecs_bytes_len ) { YY_BUFFER_STATE b; char *buf; grecs_grecs__size_t n; int i; /* Get memory for full buffer, including space for trailing EOB's. */ n = _grecs_grecs_bytes_len + 2; buf = (char *) grecs_grecs_alloc(n ); if ( ! buf ) YY_FATAL_ERROR( "out of dynamic memory in grecs_grecs__scan_bytes()" ); for ( i = 0; i < _grecs_grecs_bytes_len; ++i ) buf[i] = grecs_grecs_bytes[i]; buf[_grecs_grecs_bytes_len] = buf[_grecs_grecs_bytes_len+1] = YY_END_OF_BUFFER_CHAR; b = grecs_grecs__scan_buffer(buf,n ); if ( ! b ) YY_FATAL_ERROR( "bad buffer in grecs_grecs__scan_bytes()" ); /* It's okay to grow etc. this buffer, and we should throw it * away when we're done. */ b->grecs_grecs__is_our_buffer = 1; return b; } /* %endif */ #ifndef YY_EXIT_FAILURE #define YY_EXIT_FAILURE 2 #endif /* %if-c-only */ static void grecs_grecs__fatal_error (grecs_grecs_const char* msg ) { (void) fprintf( stderr, "%s\n", msg ); exit( YY_EXIT_FAILURE ); } /* %endif */ /* %if-c++-only */ /* %endif */ /* Redefine grecs_grecs_less() so it works in section 3 code. */ #undef grecs_grecs_less #define grecs_grecs_less(n) \ do \ { \ /* Undo effects of setting up grecs_grecs_text. */ \ int grecs_grecs_less_macro_arg = (n); \ YY_LESS_LINENO(grecs_grecs_less_macro_arg);\ grecs_grecs_text[grecs_grecs_leng] = (grecs_grecs__hold_char); \ (grecs_grecs__c_buf_p) = grecs_grecs_text + grecs_grecs_less_macro_arg; \ (grecs_grecs__hold_char) = *(grecs_grecs__c_buf_p); \ *(grecs_grecs__c_buf_p) = '\0'; \ grecs_grecs_leng = grecs_grecs_less_macro_arg; \ } \ while ( 0 ) /* Accessor methods (get/set functions) to struct members. */ /* %if-c-only */ /* %if-reentrant */ /* %endif */ /** Get the current line number. * */ int grecs_grecs_get_lineno (void) { return grecs_grecs_lineno; } /** Get the input stream. * */ FILE *grecs_grecs_get_in (void) { return grecs_grecs_in; } /** Get the output stream. * */ FILE *grecs_grecs_get_out (void) { return grecs_grecs_out; } /** Get the length of the current token. * */ grecs_grecs__size_t grecs_grecs_get_leng (void) { return grecs_grecs_leng; } /** Get the current token. * */ char *grecs_grecs_get_text (void) { return grecs_grecs_text; } /* %if-reentrant */ /* %endif */ /** Set the current line number. * @param line_number * */ void grecs_grecs_set_lineno (int line_number ) { grecs_grecs_lineno = line_number; } /** Set the input stream. This does not discard the current * input buffer. * @param in_str A readable stream. * * @see grecs_grecs__switch_to_buffer */ void grecs_grecs_set_in (FILE * in_str ) { grecs_grecs_in = in_str ; } void grecs_grecs_set_out (FILE * out_str ) { grecs_grecs_out = out_str ; } int grecs_grecs_get_debug (void) { return grecs_grecs__flex_debug; } void grecs_grecs_set_debug (int bdebug ) { grecs_grecs__flex_debug = bdebug ; } /* %endif */ /* %if-reentrant */ /* %if-bison-bridge */ /* %endif */ /* %endif if-c-only */ /* %if-c-only */ static int grecs_grecs__init_globals (void) { /* Initialization is the same as for the non-reentrant scanner. * This function is called from grecs_grecs_lex_destroy(), so don't allocate here. */ (grecs_grecs__buffer_stack) = 0; (grecs_grecs__buffer_stack_top) = 0; (grecs_grecs__buffer_stack_max) = 0; (grecs_grecs__c_buf_p) = (char *) 0; (grecs_grecs__init) = 0; (grecs_grecs__start) = 0; /* Defined in main.c */ #ifdef YY_STDINIT grecs_grecs_in = stdin; grecs_grecs_out = stdout; #else grecs_grecs_in = (FILE *) 0; grecs_grecs_out = (FILE *) 0; #endif /* For future reference: Set errno on error, since we are called by * grecs_grecs_lex_init() */ return 0; } /* %endif */ /* %if-c-only SNIP! this currently causes conflicts with the c++ scanner */ /* grecs_grecs_lex_destroy is for both reentrant and non-reentrant scanners. */ int grecs_grecs_lex_destroy (void) { /* Pop the buffer stack, destroying each element. */ while(YY_CURRENT_BUFFER){ grecs_grecs__delete_buffer(YY_CURRENT_BUFFER ); YY_CURRENT_BUFFER_LVALUE = NULL; grecs_grecs_pop_buffer_state(); } /* Destroy the stack itself. */ grecs_grecs_free((grecs_grecs__buffer_stack) ); (grecs_grecs__buffer_stack) = NULL; /* Reset the globals. This is important in a non-reentrant scanner so the next time * grecs_grecs_lex() is called, initialization will occur. */ grecs_grecs__init_globals( ); /* %if-reentrant */ /* %endif */ return 0; } /* %endif */ /* * Internal utility routines. */ #ifndef grecs_grecs_text_ptr static void grecs_grecs__flex_strncpy (char* s1, grecs_grecs_const char * s2, int n ) { register int i; for ( i = 0; i < n; ++i ) s1[i] = s2[i]; } #endif #ifdef YY_NEED_STRLEN static int grecs_grecs__flex_strlen (grecs_grecs_const char * s ) { register int n; for ( n = 0; s[n]; ++n ) ; return n; } #endif void *grecs_grecs_alloc (grecs_grecs__size_t size ) { return (void *) malloc( size ); } void *grecs_grecs_realloc (void * ptr, grecs_grecs__size_t size ) { /* The cast to (char *) in the following accommodates both * implementations that use char* generic pointers, and those * that use void* generic pointers. It works with the latter * because both ANSI C and C++ allow castless assignment from * any pointer type to void*, and deal with argument conversions * as though doing an assignment. */ return (void *) realloc( (char *) ptr, size ); } void grecs_grecs_free (void * ptr ) { free( (char *) ptr ); /* see grecs_grecs_realloc() for (char *) cast */ } /* %if-tables-serialization definitions */ /* %define-grecs_grecs_tables The name for this specific scanner's tables. */ #define YYTABLES_NAME "grecs_grecs_tables" /* %endif */ /* %ok-for-header */ #line 191 "grecs-lex.l" pid_t grecs_preproc_pid; int grecs_grecs_wrap() { if (grecs_preprocessor) { grecs_preproc_extrn_shutdown(grecs_preproc_pid); fclose(grecs_grecs_in); } else grecs_preproc_done(); grecs_current_locus_point.file = NULL; return 1; } int grecs_lex_begin(const char *name, int trace) { grecs_grecs__flex_debug = trace; grecs_line_acc_create(); if (grecs_preprocessor) { int fd; fd = open(name, O_RDONLY); if (fd == -1) { grecs_error(NULL, errno, _("Cannot open `%s'"), name); return 1; } close(fd); grecs_grecs_in = grecs_preproc_extrn_start(name, &grecs_preproc_pid); if (!grecs_grecs_in) { grecs_error(NULL, errno, _("Unable to start external preprocessor `%s'"), grecs_preprocessor); return 1; } } else return grecs_preproc_init(name); return 0; } void grecs_lex_end(int err) { grecs_line_acc_free(); } static int isemptystr(int off) { for (; grecs_grecs_text[off] && isspace(grecs_grecs_text[off]); off++) ; if (grecs_grecs_text[off] == ';') { int i; for (i = off + 1; grecs_grecs_text[i]; i++) if (!isspace(grecs_grecs_text[i])) return 0; grecs_grecs_less(off); return 1; } return grecs_grecs_text[off] == 0; } char * multiline_strip_tabs(char *text) { if (char_to_strip) for (; *text && char_to_strip(*text); text++) ; return text; } static void multiline_add(char *s) { if (multiline_unescape) { for (; *s; s++) { if (*s == '\\') { grecs_line_acc_grow_char_unescape(s[1]); ++s; } else grecs_line_acc_grow_char(*s); } } else grecs_line_add(s, strlen(s)); } static int is_tab(char c) { return c == '\t'; } static int is_ws(char c) { return c == '\t' || c == ' '; } void multiline_begin(char *p) { if (*p == '-') { if (*++p == ' ') { char_to_strip = is_ws; p++; } else char_to_strip = is_tab; } else char_to_strip = NULL; if (*p == '\\') { p++; multiline_unescape = 0; multiline_delimiter_len = strcspn(p, " \t"); } else if (*p == '"') { char *q; p++; multiline_unescape = 0; q = strchr(p, '"'); multiline_delimiter_len = q - p; } else { multiline_delimiter_len = strcspn(p, " \t"); multiline_unescape = 1; } /* Remove trailing newline */ multiline_delimiter_len--; multiline_delimiter = grecs_malloc(multiline_delimiter_len + 1); memcpy(multiline_delimiter, p, multiline_delimiter_len); multiline_delimiter[multiline_delimiter_len] = 0; grecs_line_begin(); /* Update locus */ grecs_locus_point_advance_line(grecs_current_locus_point); grecs_grecs_lloc.beg = grecs_current_locus_point; grecs_grecs_lloc.beg.col++; } static int ident() { char *p; char *str; size_t len; for (p = grecs_grecs_text; *p && isspace(*p); p++) ; len = strlen(p); str = grecs_malloc(len + 1); strcpy(str, p); grecs_grecs_lval.string = str; return IDENT; } static void qstring_locus_fixup() { if (grecs_parser_options & GRECS_OPTION_ADJUST_STRING_LOCATIONS) { grecs_grecs_lloc.beg.col++; grecs_grecs_lloc.end.col--; } } grecs_value_t * grecs_value_ptr_from_static(grecs_value_t *input) { grecs_value_t *ptr = grecs_malloc(sizeof(*ptr)); *ptr = *input; return ptr; } static int assign_locus(struct grecs_locus_point *ploc, char *name, char *line, size_t *pxlines) { char *p; if (name) { if (pxlines && (!ploc->file || strcmp(name, ploc->file))) *pxlines = 0; ploc->file = grecs_install_text(name); } ploc->line = strtoul(line, &p, 10) - (pxlines ? *pxlines : 0); ploc->col = 0; return *p != 0; } void grecs_parse_line_directive(char *text, grecs_locus_t *ploc, struct grecs_locus_point *ppoint, size_t *pxlines) { int rc = 1; struct wordsplit ws; if (wordsplit(text, &ws, WRDSF_DEFFLAGS)) grecs_error(ploc, 0, _("cannot parse #line line: %s"), wordsplit_strerror(&ws)); else { if (ws.ws_wordc == 2) rc = assign_locus(ppoint, NULL, ws.ws_wordv[1], pxlines); else if (ws.ws_wordc == 3) rc = assign_locus(ppoint, ws.ws_wordv[2], ws.ws_wordv[1], pxlines); else if (ws.ws_wordc == 4) { rc = assign_locus(ppoint, ws.ws_wordv[2], ws.ws_wordv[1], 0); if (pxlines && rc == 0) { char *p; unsigned long x = strtoul(ws.ws_wordv[3], &p, 10); rc = *p != 0; if (rc == 0) *pxlines = x; } } else grecs_error(ploc, 0, _("invalid #line statement")); if (rc) grecs_error(ploc, 0, _("malformed #line statement")); wordsplit_free(&ws); } } void grecs_parse_line_directive_cpp(char *text, grecs_locus_t *ploc, struct grecs_locus_point *ppoint, size_t *pxlines) { struct wordsplit ws; if (wordsplit(text, &ws, WRDSF_DEFFLAGS)) { grecs_error(ploc, 0, _("cannot parse #line line: %s"), wordsplit_strerror(&ws)); return; } else if (ws.ws_wordc < 3) grecs_error(ploc, 0, _("invalid #line statement")); else { if (assign_locus(ppoint, ws.ws_wordv[2], ws.ws_wordv[1], pxlines)) grecs_error(ploc, 0, _("malformed #line statement")); } wordsplit_free(&ws); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/src/version.c��������������������������������������������������������������������0000644�0001750�0001750�00000010472�13244106110�016705� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* grecs - Gray's Extensible Configuration System Copyright (C) 2007-2016 Sergey Poznyakoff Grecs 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. Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include <grecs.h> #include <string.h> #include <ctype.h> #include <stdlib.h> #include "gitid.h" const char *grecs_vcs_id = "$Id: " GRECS_GIT_ID " $"; struct grecs_version_info * grecs_version_split(const char *vstr) { char *p; size_t len; struct grecs_version_info *pv = grecs_zalloc(sizeof(*pv)); pv->buffer = grecs_strdup(vstr); len = strcspn(pv->buffer, " \t"); if (pv->buffer[len]) { pv->package = pv->buffer; pv->buffer[len++] = 0; for (; pv->buffer[len] && isspace(pv->buffer[len]); len++) ; } else { pv->package = NULL; len = 0; } if (!pv->buffer[len]) { free(pv->buffer); free(pv); return NULL; } pv->version = pv->buffer + len; pv->major = strtoul(pv->version, &p, 10); if (*p && *p == '.') { pv->minor = strtoul(p + 1, &p, 10); if (*p && *p == '.') { char *q; pv->patch = strtoul(p + 1, &q, 10); if (q == p + 1) pv->patch = 0; else p = q; } } pv->suffix = p; return pv; } void grecs_version_info_free(struct grecs_version_info *pv) { if (pv) { if (pv->buffer) grecs_free(pv->buffer); free(pv); } } struct grecs_version_info * grecs_version(void) { struct grecs_version_info *pv = grecs_zalloc(sizeof(*pv)); size_t size = 0; pv->package = PACKAGE_NAME; #ifdef GRECS_VERSION_PATCHLEVEL # ifdef GRECS_VERSION_SUFFIX grecs_asprintf(&pv->buffer, &size, "%d.%d.%d%s", GRECS_VERSION_MAJOR, GRECS_VERSION_MINOR, GRECS_VERSION_PATCHLEVEL, GRECS_VERSION_SUFFIX); # else grecs_asprintf(&pv->buffer, &size, "%d.%d.%d", GRECS_VERSION_MAJOR, GRECS_VERSION_MINOR, GRECS_VERSION_PATCHLEVEL); # endif #else # ifdef GRECS_VERSION_SUFFIX grecs_asprintf(&pv->buffer, &size, "%d.%d%s", GRECS_VERSION_MAJOR, GRECS_VERSION_MINOR, GRECS_VERSION_SUFFIX); # else grecs_asprintf(&pv->buffer, &size, "%d.%d", GRECS_VERSION_MAJOR, GRECS_VERSION_MINOR); # endif #endif pv->version = pv->buffer; pv->major = GRECS_VERSION_MAJOR; pv->minor = GRECS_VERSION_MINOR; #ifdef GRECS_VERSION_PATCHLEVEL pv->patch = GRECS_VERSION_PATCHLEVEL; #endif #ifdef GRECS_VERSION_SUFFIX pv->suffix = GRECS_VERSION_SUFFIX; #endif pv->id = GRECS_GIT_ID; return pv; } int grecs_version_info_cmp(struct grecs_version_info *vx, struct grecs_version_info *vy, int *pres) { if (vx->package && vy->package && strcmp(vx->package, vy->package)) return 1; else if (vx->major > vy->major) *pres = 1; else if (vx->major < vy->major) *pres = -1; else if (vx->minor > vy->minor) *pres = 1; else if (vx->minor < vy->minor) *pres = -1; else if (vx->patch > vy->patch) *pres = 1; else if (vx->patch < vy->patch) *pres = -1; else if (vx->suffix && vy->suffix) *pres = strcmp(vx->suffix, vy->suffix); else *pres = 0; return 0; } int grecs_version_cmp(const char *vstr1, const char *vstr2, int *pres) { struct grecs_version_info *v1, *v2; int rc; if (!vstr1 || !vstr2) return -1; v1 = grecs_version_split(vstr1); if (!v1) return -1; v2 = grecs_version_split(vstr2); if (!v2) { grecs_version_info_free(v1); return -1; } rc = grecs_version_info_cmp(v1, v2, pres); grecs_version_info_free(v1); grecs_version_info_free(v2); return rc; } int grecs_version_ok(const char *vstr) { struct grecs_version_info *vmy, *vreq; int rc, res; if (!vstr) return -1; vreq = grecs_version_split(vstr); if (!vreq) return -1; vmy = grecs_version(); if (vreq->suffix && !vmy->suffix) vmy->suffix = ""; rc = grecs_version_info_cmp(vmy, vreq, &res); grecs_version_info_free(vmy); grecs_version_info_free(vreq); return rc == 0 && res >= 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/src/Make-shared.am���������������������������������������������������������������0000644�0001750�0001750�00000001516�13511403723�017522� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of grecs - Gray's Extensible Configuration System # Copyright (C) 2007-2019 Sergey Poznyakoff # # Grecs 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. # # Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. include Make.am noinst_LTLIBRARIES=libgrecs.la libgrecs_la_SOURCES = $(GRECS_SRC) nodist_libgrecs_la_SOURCES = $(NODIST_GRECS_SRC) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/src/Make-static.in���������������������������������������������������������������0000644�0001750�0001750�00000067601�13512402622�017561� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Make-static.in generated by automake 1.15 from Make-static.am. # @configure_input@ # Copyright (C) 1994-2014 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 grecs - Gray's Extensible Configuration System # Copyright (C) 2007-2019 Sergey Poznyakoff # # Grecs 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. # # Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. 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@ @GRECS_COND_META1_PARSER_TRUE@am__append_1 = -DENABLE_META1_PARSER @GRECS_COND_BIND_PARSER_TRUE@am__append_2 = -DENABLE_BIND_PARSER @GRECS_COND_DHCPD_PARSER_TRUE@am__append_3 = -DENABLE_DHCPD_PARSER @GRECS_COND_GIT_PARSER_TRUE@am__append_4 = -DENABLE_GIT_PARSER @GRECS_COND_SOCKADDR_LIST_TRUE@am__append_5 = sockaddr.c subdir = grecs/src 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)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Make-static.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) AR = ar ARFLAGS = cru AM_V_AR = $(am__v_AR_@AM_V@) am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) am__v_AR_0 = @echo " AR " $@; am__v_AR_1 = libgrecs_a_AR = $(AR) $(ARFLAGS) libgrecs_a_LIBADD = am__libgrecs_a_SOURCES_DIST = asprintf.c assert.c cidr.c diag.c \ format.c grecs-gram.y grecs-lex.l ipstr.c join.c lineacc.c \ list.c lookup.c mem.c opthelp.c parser.c parsertab.c \ path-parser.c preproc.c sort.c symtab.c text.c tree.c txtacc.c \ version.c json-gram.y json-lex.l jsonfmt.c bind-gram.y \ bind-lex.l dhcpd-gram.y dhcpd-lex.l git-parser.c meta1-gram.y \ meta1-lex.l sockaddr.c @GRECS_COND_JSON_TRUE@am__objects_1 = json-gram.$(OBJEXT) \ @GRECS_COND_JSON_TRUE@ json-lex.$(OBJEXT) jsonfmt.$(OBJEXT) @GRECS_COND_BIND_PARSER_TRUE@am__objects_2 = bind-gram.$(OBJEXT) \ @GRECS_COND_BIND_PARSER_TRUE@ bind-lex.$(OBJEXT) @GRECS_COND_DHCPD_PARSER_TRUE@am__objects_3 = dhcpd-gram.$(OBJEXT) \ @GRECS_COND_DHCPD_PARSER_TRUE@ dhcpd-lex.$(OBJEXT) @GRECS_COND_GIT_PARSER_TRUE@am__objects_4 = git-parser.$(OBJEXT) @GRECS_COND_META1_PARSER_TRUE@am__objects_5 = meta1-gram.$(OBJEXT) \ @GRECS_COND_META1_PARSER_TRUE@ meta1-lex.$(OBJEXT) @GRECS_COND_SOCKADDR_LIST_TRUE@am__objects_6 = sockaddr.$(OBJEXT) am__objects_7 = asprintf.$(OBJEXT) assert.$(OBJEXT) cidr.$(OBJEXT) \ diag.$(OBJEXT) format.$(OBJEXT) grecs-gram.$(OBJEXT) \ grecs-lex.$(OBJEXT) ipstr.$(OBJEXT) join.$(OBJEXT) \ lineacc.$(OBJEXT) list.$(OBJEXT) lookup.$(OBJEXT) \ mem.$(OBJEXT) opthelp.$(OBJEXT) parser.$(OBJEXT) \ parsertab.$(OBJEXT) path-parser.$(OBJEXT) preproc.$(OBJEXT) \ sort.$(OBJEXT) symtab.$(OBJEXT) text.$(OBJEXT) tree.$(OBJEXT) \ txtacc.$(OBJEXT) version.$(OBJEXT) $(am__objects_1) \ $(am__objects_2) $(am__objects_3) $(am__objects_4) \ $(am__objects_5) $(am__objects_6) am_libgrecs_a_OBJECTS = $(am__objects_7) am__objects_8 = wordsplit.$(OBJEXT) nodist_libgrecs_a_OBJECTS = $(am__objects_8) libgrecs_a_OBJECTS = $(am_libgrecs_a_OBJECTS) \ $(nodist_libgrecs_a_OBJECTS) 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 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = AM_V_LEX = $(am__v_LEX_@AM_V@) am__v_LEX_ = $(am__v_LEX_@AM_DEFAULT_V@) am__v_LEX_0 = @echo " LEX " $@; am__v_LEX_1 = YLWRAP = $(top_srcdir)/build-aux/ylwrap am__yacc_c2h = sed -e s/cc$$/hh/ -e s/cpp$$/hpp/ -e s/cxx$$/hxx/ \ -e s/c++$$/h++/ -e s/c$$/h/ AM_V_YACC = $(am__v_YACC_@AM_V@) am__v_YACC_ = $(am__v_YACC_@AM_DEFAULT_V@) am__v_YACC_0 = @echo " YACC " $@; am__v_YACC_1 = SOURCES = $(libgrecs_a_SOURCES) $(nodist_libgrecs_a_SOURCES) DIST_SOURCES = $(am__libgrecs_a_SOURCES_DIST) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac 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; }; \ } am__installdirs = "$(DESTDIR)$(incdir)" DATA = $(inc_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Make-static.in $(srcdir)/Make.am \ $(top_srcdir)/build-aux/depcomp $(top_srcdir)/build-aux/ylwrap \ bind-gram.c bind-lex.c dhcpd-gram.c dhcpd-lex.c grecs-gram.c \ grecs-lex.c json-gram.c json-lex.c meta1-gram.c meta1-lex.c DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) VPATH = @srcdir@ $(top_srcdir)/@GRECS_SUBDIR@/wordsplit 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@ 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@ 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@ 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@ 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@ PARSER_DEFS = $(am__append_1) $(am__append_2) $(am__append_3) \ $(am__append_4) @GRECS_COND_META1_PARSER_TRUE@GRECS_PARSER_META1 = meta1-gram.y meta1-lex.l @GRECS_COND_META1_PARSER_TRUE@GRECS_EXTRA_META1 = meta1-gram.h @GRECS_COND_BIND_PARSER_TRUE@GRECS_PARSER_BIND = bind-gram.y bind-lex.l @GRECS_COND_BIND_PARSER_TRUE@GRECS_EXTRA_BIND = bind-gram.h @GRECS_COND_DHCPD_PARSER_TRUE@GRECS_PARSER_DHCPD = dhcpd-gram.y dhcpd-lex.l @GRECS_COND_DHCPD_PARSER_TRUE@GRECS_EXTRA_DHCPD = dhcpd-gram.h @GRECS_COND_GIT_PARSER_TRUE@GRECS_PARSER_GIT = git-parser.c @GRECS_COND_JSON_TRUE@GRECS_JSON = json-gram.y json-lex.l jsonfmt.c @GRECS_COND_JSON_TRUE@GRECS_EXTRA_JSON = json-gram.h GRECS_SRC = asprintf.c assert.c cidr.c diag.c format.c grecs-gram.y \ grecs-lex.l ipstr.c join.c lineacc.c list.c lookup.c mem.c \ opthelp.c parser.c parsertab.c path-parser.c preproc.c sort.c \ symtab.c text.c tree.c txtacc.c version.c $(GRECS_JSON) \ $(GRECS_PARSER_BIND) $(GRECS_PARSER_DHCPD) $(GRECS_PARSER_GIT) \ $(GRECS_PARSER_META1) $(am__append_5) NODIST_GRECS_SRC = wordsplit.c EXTRA_DIST = \ grecs-gram.h\ $(GRECS_EXTRA_BIND)\ $(GRECS_EXTRA_DHCPD)\ $(GRECS_EXTRA_JSON)\ $(GRECS_EXTRA_META1)\ $(PP_SETUP_FILE)\ Make.am Make-inst.am Make-shared.am Make-static.am AM_CPPFLAGS = \ -I$(srcdir)\ -I$(top_srcdir)/@GRECS_SUBDIR@\ @GRECS_INCLUDES@\ @GRECS_HOST_PROJECT_INCLUDES@\ $(PARSER_DEFS) AM_YFLAGS = -dtv AM_LFLAGS = -d incdir = $(pkgdatadir)/$(VERSION)/include inc_DATA = $(PP_SETUP_FILE) LEXCOMPILE = $(top_srcdir)/@GRECS_SUBDIR@/build-aux/yyrename '$(LEX) $(LFLAGS) $(AM_LFLAGS)' YACCCOMPILE = $(top_srcdir)/@GRECS_SUBDIR@/build-aux/yyrename '$(YACC) $(YFLAGS) $(AM_YFLAGS)' # This file is part of grecs - Gray's Extensible Configuration System # Copyright (C) 2007-2019 Sergey Poznyakoff # # Grecs 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. # # Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. noinst_LIBRARIES = libgrecs.a libgrecs_a_SOURCES = $(GRECS_SRC) nodist_libgrecs_a_SOURCES = $(NODIST_GRECS_SRC) all: all-am .SUFFIXES: .SUFFIXES: .c .l .o .obj .y $(srcdir)/Make-static.in: $(srcdir)/Make-static.am $(srcdir)/Make.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 grecs/src/Makefile:grecs/src/Make-static.in'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnits grecs/src/Makefile:grecs/src/Make-static.in Makefile: $(srcdir)/Make-static.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__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(srcdir)/Make.am $(am__empty): $(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): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) libgrecs.a: $(libgrecs_a_OBJECTS) $(libgrecs_a_DEPENDENCIES) $(EXTRA_libgrecs_a_DEPENDENCIES) $(AM_V_at)-rm -f libgrecs.a $(AM_V_AR)$(libgrecs_a_AR) libgrecs.a $(libgrecs_a_OBJECTS) $(libgrecs_a_LIBADD) $(AM_V_at)$(RANLIB) libgrecs.a mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asprintf.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/assert.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bind-gram.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bind-lex.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cidr.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dhcpd-gram.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dhcpd-lex.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diag.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/format.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/git-parser.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/grecs-gram.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/grecs-lex.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ipstr.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/join.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/json-gram.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/json-lex.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jsonfmt.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lineacc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/list.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lookup.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mem.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/meta1-gram.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/meta1-lex.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/opthelp.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parser.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parsertab.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/path-parser.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/preproc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sockaddr.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sort.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/symtab.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/text.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tree.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/txtacc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/version.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wordsplit.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .l.c: $(AM_V_LEX)$(am__skiplex) $(SHELL) $(YLWRAP) $< $(LEX_OUTPUT_ROOT).c $@ -- $(LEXCOMPILE) .y.c: $(AM_V_YACC)$(am__skipyacc) $(SHELL) $(YLWRAP) $< y.tab.c $@ y.tab.h `echo $@ | $(am__yacc_c2h)` y.output $*.output -- $(YACCCOMPILE) install-incDATA: $(inc_DATA) @$(NORMAL_INSTALL) @list='$(inc_DATA)'; test -n "$(incdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(incdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(incdir)" || 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)$(incdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(incdir)" || exit $$?; \ done uninstall-incDATA: @$(NORMAL_UNINSTALL) @list='$(inc_DATA)'; test -n "$(incdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(incdir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(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 check-am: all-am check: check-am all-am: Makefile $(LIBRARIES) $(DATA) installdirs: for dir in "$(DESTDIR)$(incdir)"; 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." -rm -f bind-gram.c -rm -f bind-lex.c -rm -f dhcpd-gram.c -rm -f dhcpd-lex.c -rm -f grecs-gram.c -rm -f grecs-lex.c -rm -f json-gram.c -rm -f json-lex.c -rm -f meta1-gram.c -rm -f meta1-lex.c clean: clean-am clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-incDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-incDATA .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-noinstLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-tags 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-incDATA install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-incDATA .PRECIOUS: Makefile # 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.2/grecs/src/tree.c�����������������������������������������������������������������������0000644�0001750�0001750�00000067645�13511403723�016204� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* grecs - Gray's Extensible Configuration System Copyright (C) 2007-2016 Sergey Poznyakoff Grecs 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. Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include <sys/types.h> #include <sys/socket.h> #include <sys/time.h> #include <sys/un.h> #include <netinet/in.h> #include <arpa/inet.h> #include <netdb.h> #include <stdlib.h> #include <errno.h> #include <limits.h> #include <string.h> #include "grecs.h" struct grecs_sockaddr_hints *grecs_sockaddr_hints; void grecs_value_free_content(struct grecs_value *val) { int i; if (!val) return; switch (val->type) { case GRECS_TYPE_STRING: grecs_free(val->v.string); break; case GRECS_TYPE_LIST: grecs_list_free(val->v.list); break; case GRECS_TYPE_ARRAY: for (i = 0; i < val->v.arg.c; i++) grecs_value_free(val->v.arg.v[i]); free(val->v.arg.v); } } void grecs_value_free(struct grecs_value *val) { grecs_value_free_content(val); grecs_free(val); } const char * grecs_value_type_string(int t) { static const char *types[] = { [GRECS_TYPE_STRING] = N_("string"), [GRECS_TYPE_LIST] = N_("list"), [GRECS_TYPE_ARRAY] = N_("one or more arguments") }; if (t >= 0 && t < sizeof(types) / sizeof(types[0])) return types[t]; return N_("unrecognized type; please report"); } struct grecs_node * grecs_node_create(enum grecs_node_type type, grecs_locus_t *loc) { struct grecs_node *np = grecs_zalloc(sizeof(*np)); np->type = type; if (loc) np->locus = *loc; return np; } struct grecs_node * grecs_node_create_points(enum grecs_node_type type, struct grecs_locus_point beg, struct grecs_locus_point end) { grecs_locus_t loc; loc.beg = beg; loc.end = end; return grecs_node_create(type, &loc); } void grecs_node_bind(struct grecs_node *master, struct grecs_node *node, int dn) { struct grecs_node *np; if (!node) return; if (dn) { if (!master->down) { master->down = node; node->prev = NULL; } else { for (np = master->down; np->next; np = np->next) ; np->next = node; node->prev = np; } for (; node; node = node->next) node->up = master; } else { if (!master->next) { master->next = node; node->prev = master; } else { for (np = master->next; np->next; np = np->next) ; np->next = node; node->prev = np; } node->up = master->up; } } int grecs_node_unlink(struct grecs_node *node) { if (node->prev) node->prev->next = node->next; else if (node->up) node->up->down = node->next; else return 1; if (node->next) node->next->prev = node->prev; node->up = node->prev = node->next = NULL; return 0; } static void listel_dispose(void *el) { grecs_free(el); } struct grecs_list * _grecs_simple_list_create(int dispose) { struct grecs_list *lp = grecs_list_create(); if (dispose) lp->free_entry = listel_dispose; return lp; } static enum grecs_tree_recurse_res _tree_recurse(struct grecs_node *node, grecs_tree_recursor_t recfun, void *data) { enum grecs_tree_recurse_res res; #define CKRES() \ switch (res) { \ case grecs_tree_recurse_fail: \ case grecs_tree_recurse_stop: \ return res; \ default: \ break; \ } while (node) { struct grecs_node *next = node->next; if (node->type == grecs_node_stmt) { res = recfun(grecs_tree_recurse_set, node, data); CKRES(); } else { switch (recfun(grecs_tree_recurse_pre, node, data)) { case grecs_tree_recurse_ok: res = _tree_recurse(node->down, recfun, data); CKRES(); res = recfun(grecs_tree_recurse_post, node, data); CKRES(); break; case grecs_tree_recurse_fail: return grecs_tree_recurse_fail; case grecs_tree_recurse_stop: return grecs_tree_recurse_stop; case grecs_tree_recurse_skip: break; } } node = next; } return grecs_tree_recurse_ok; #undef CKRES } int grecs_tree_recurse(struct grecs_node *node, grecs_tree_recursor_t recfun, void *data) { switch (_tree_recurse(node, recfun, data)) { case grecs_tree_recurse_ok: case grecs_tree_recurse_stop: return 0; default: break; } return 1; } void grecs_node_free(struct grecs_node *node) { if (!node) return; switch (node->type) { case grecs_node_root: grecs_symtab_free(node->v.texttab); break; default: grecs_value_free(node->v.value); } grecs_free(node->ident); grecs_free(node); } static enum grecs_tree_recurse_res freeproc(enum grecs_tree_recurse_op op, struct grecs_node *node, void *data) { switch (op) { case grecs_tree_recurse_set: case grecs_tree_recurse_post: grecs_node_unlink(node); grecs_node_free(node); break; case grecs_tree_recurse_pre: /* descend into the subtree */ break; } return grecs_tree_recurse_ok; } int grecs_tree_free(struct grecs_node *node) { if (!node) return 0; if (node->type != grecs_node_root) { errno = EINVAL; return 1; } grecs_tree_recurse(node, freeproc, NULL); return 0; } static int fake_callback( #if GRECS_TREE_API enum grecs_callback_command cmd, grecs_node_t *node, void *varptr, void *cb_data #else enum grecs_callback_command cmd, grecs_locus_t *locus, void *varptr, grecs_value_t *value, void *cb_data #endif ) { return 0; } static struct grecs_keyword fake = { "*", NULL, NULL, grecs_type_void, GRECS_DFLT, NULL, 0, fake_callback, NULL, &fake }; static struct grecs_keyword * find_keyword(struct grecs_keyword *cursect, grecs_node_t *node) { if (cursect && cursect->kwd && cursect != &fake) { struct grecs_keyword *found = NULL, *kwp; char const *msg; for (kwp = cursect->kwd; kwp->ident; kwp++) { if (strcmp(kwp->ident, node->ident) == 0) { found = kwp; if (kwp->callback || (node->down ? kwp->type == grecs_type_section : kwp->type != grecs_type_section)) return kwp; } } if (found) { if (found->type == grecs_type_section) { msg = N_("section keyword used as a scalar"); } else { msg = N_("scalar keyword used as a section"); } } else { msg = N_("unknown keyword"); } grecs_error(&node->idloc, 0, "%s", gettext(msg)); } else { return &fake; } return NULL; } static void * target_ptr(struct grecs_keyword *kwp, char *base) { if (kwp->varptr) base = (char*) kwp->varptr + kwp->offset; else if (base) base += kwp->offset; return base; } static int string_to_bool(const char *string, int *pval, grecs_locus_t const *locus) { if (strcmp(string, "yes") == 0 || strcmp(string, "true") == 0 || strcmp(string, "t") == 0 || strcmp(string, "1") == 0) *pval = 1; else if (strcmp(string, "no") == 0 || strcmp(string, "false") == 0 || strcmp(string, "nil") == 0 || strcmp(string, "0") == 0) *pval = 0; else { grecs_error(locus, 0, _("%s: not a valid boolean value"), string); return 1; } return 0; } static int string_to_host(struct in_addr *in, const char *string, grecs_locus_t const *locus) { if (inet_aton(string, in) == 0) { struct hostent *hp; hp = gethostbyname(string); if (hp == NULL) return 1; memcpy(in, hp->h_addr, sizeof(struct in_addr)); } return 0; } #if !GRECS_SOCKADDR_LIST static int string_to_sockaddr(struct grecs_sockaddr *sp, const char *string, grecs_locus_t const *locus) { if (string[0] == '/') { struct sockaddr_un s_un; if (strlen(string) >= sizeof(s_un.sun_path)) { grecs_error(locus, 0, _("%s: UNIX socket name too long"), string); return 1; } s_un.sun_family = AF_UNIX; strcpy(s_un.sun_path, string); sp->len = sizeof(s_un); sp->sa = grecs_malloc(sp->len); memcpy(sp->sa, &s_un, sp->len); } else { char *p = strchr(string, ':'); size_t len; struct sockaddr_in sa; sa.sin_family = AF_INET; if (p) len = p - string; else len = strlen(string); if (len == 0) sa.sin_addr.s_addr = INADDR_ANY; else { char *host = grecs_malloc(len + 1); memcpy(host, string, len); host[len] = 0; if (string_to_host(&sa.sin_addr, host, locus)) { grecs_error(locus, 0, _("%s: not a valid IP address or hostname"), host); grecs_free(host); return 1; } grecs_free(host); } if (p) { struct servent *serv; p++; serv = getservbyname(p, "tcp"); if (serv != NULL) sa.sin_port = serv->s_port; else { unsigned long l; char *q; /* Not in services, maybe a number? */ l = strtoul(p, &q, 0); if (*q || l > USHRT_MAX) { grecs_error(locus, 0, _("%s: not a valid port number"), p); return 1; } sa.sin_port = htons(l); } } else if (grecs_default_port) sa.sin_port = grecs_default_port; else { grecs_error(locus, 0, _("missing port number")); return 1; } sp->len = sizeof(sa); sp->sa = grecs_malloc(sp->len); memcpy(sp->sa, &sa, sp->len); } return 0; } #endif /* The TYPE_* defines come from gnulib's intprops.h */ /* True if the arithmetic type T is signed. */ # define TYPE_SIGNED(t) (! ((t) 0 < (t) -1)) /* The maximum and minimum values for the integer type T. These macros have undefined behavior if T is signed and has padding bits. */ # define TYPE_MINIMUM(t) \ ((t) (! TYPE_SIGNED(t) \ ? (t) 0 \ : TYPE_SIGNED_MAGNITUDE(t) \ ? ~ (t) 0 \ : ~ TYPE_MAXIMUM(t))) # define TYPE_MAXIMUM(t) \ ((t) (! TYPE_SIGNED(t) \ ? (t) -1 \ : ((((t) 1 << (sizeof(t) * CHAR_BIT - 2)) - 1) * 2 + 1))) # define TYPE_SIGNED_MAGNITUDE(t) ((t) ~ (t) 0 < (t) -1) #define STRTONUM(s, type, base, res, limit, loc) \ { \ type sum = 0; \ \ for (; *s; s++) \ { \ type x; \ \ if ('0' <= *s && *s <= '9') \ x = sum * base + *s - '0'; \ else if (base == 16 && 'a' <= *s && *s <= 'f') \ x = sum * base + *s - 'a'; \ else if (base == 16 && 'A' <= *s && *s <= 'F') \ x = sum * base + *s - 'A'; \ else \ break; \ if (x <= sum) \ { \ grecs_error(loc, 0, _("numeric overflow")); \ return 1; \ } \ else if (limit && x > limit) \ { \ grecs_error(loc, 0, _("value out of allowed range")); \ return 1; \ } \ sum = x; \ } \ res = sum; \ } #define STRxTONUM(s, type, res, limit, loc) \ { \ int base; \ if (*s == '0') \ { \ s++; \ if (*s == 0) \ base = 10; \ else if (*s == 'x' || *s == 'X') \ { \ s++; \ base = 16; \ } \ else \ base = 8; \ } else \ base = 10; \ STRTONUM(s, type, base, res, limit, loc); \ } #define GETUNUM(str, type, res, loc) \ { \ type tmpres; \ const char *s = str; \ STRxTONUM(s, type, tmpres, 0, loc); \ if (*s) \ { \ grecs_error(loc, 0, _("not a number (stopped near `%s')"), \ s); \ return 1; \ } \ res = tmpres; \ } #define GETSNUM(str, type, res, loc) \ { \ unsigned type tmpres; \ const char *s = str; \ int sign; \ unsigned type limit; \ \ if (*s == '-') \ { \ sign = 1; \ s++; \ limit = TYPE_MINIMUM(type); \ limit = - limit; \ } \ else \ { \ sign = 0; \ limit = TYPE_MAXIMUM(type); \ } \ \ STRxTONUM(s, unsigned type, tmpres, limit, loc); \ if (*s) \ { \ grecs_error(loc, 0, _("not a number (stopped near `%s')"), s); \ return 1; \ } \ res = sign ? - tmpres : tmpres; \ } int grecs_string_convert(void *target, enum grecs_data_type type, const char *string, grecs_locus_t const *locus) { switch (type) { case grecs_type_void: abort(); case grecs_type_null: break; case grecs_type_string: *(char**)target = grecs_strdup(string); break; case grecs_type_short: GETUNUM(string, short, *(short*)target, locus); break; case grecs_type_ushort: GETUNUM(string, unsigned short, *(unsigned short*)target, locus); break; case grecs_type_bool: return string_to_bool(string, (int*)target, locus); case grecs_type_int: GETSNUM(string, int, *(int*)target, locus); break; case grecs_type_uint: GETUNUM(string, unsigned int, *(unsigned int*)target, locus); break; case grecs_type_long: GETSNUM(string, long, *(long*)target, locus); break; case grecs_type_ulong: GETUNUM(string, unsigned long, *(unsigned long*)target, locus); break; case grecs_type_size: GETUNUM(string, size_t, *(size_t*)target, locus); break; /*FIXME case grecs_type_off: GETSNUM(string, off_t, *(off_t*)target, locus); break; */ case grecs_type_time: /*FIXME: Use getdate */ GETUNUM(string, time_t, *(time_t*)target, locus); break; case grecs_type_ipv4: if (inet_aton(string, (struct in_addr *)target)) { grecs_error(locus, 0, _("%s: not a valid IP address"), string); return 1; } break; case grecs_type_host: if (string_to_host((struct in_addr *)target, string, locus)) { grecs_error(locus, 0, _("%s: not a valid IP address or hostname"), string); return 1; } break; case grecs_type_sockaddr: #if GRECS_SOCKADDR_LIST return grecs_str_to_sockaddr((struct grecs_sockaddr **)target, string, grecs_sockaddr_hints, locus); #else return string_to_sockaddr((struct grecs_sockaddr *)target, string, locus); #endif case grecs_type_cidr: return grecs_str_to_cidr((struct grecs_cidr *)target, string, locus); case grecs_type_section: grecs_error(locus, 0, _("invalid use of block statement")); return 1; } return 0; } struct grecs_prop { size_t size; int (*cmp)(const void *, const void *); }; static int string_cmp(const void *elt1, const void *elt2) { return strcmp((const char *)elt1,(const char *)elt2); } #define __grecs_name_cat__(a,b) a ## b #define NUMCMP(type) __grecs_name_cat__(type,_cmp) #define __DECL_NUMCMP(type,ctype) \ static int \ NUMCMP(type)(const void *elt1, const void *elt2) \ { \ return memcmp(elt1, elt2, sizeof(ctype)); \ } #define DECL_NUMCMP(type) __DECL_NUMCMP(type,type) DECL_NUMCMP(short) DECL_NUMCMP(int) DECL_NUMCMP(long) DECL_NUMCMP(size_t) /*FIXME DECL_NUMCMP(off_t)*/ DECL_NUMCMP(time_t) __DECL_NUMCMP(in_addr, struct in_addr) __DECL_NUMCMP(grecs_sockaddr, struct grecs_sockaddr) static int cidr_cmp(const void *elt1, const void *elt2) { struct grecs_cidr const *cp1 = elt1, *cp2 = elt2; return !(cp1->family == cp2->family && cp1->len == cp2->len && memcmp(cp1->address, cp2->address, cp1->len) == 0 && memcmp(cp1->netmask, cp2->netmask, cp1->len) == 0); } struct grecs_prop grecs_prop_tab[] = { { 0, NULL }, /* grecs_type_void */ { sizeof(char*), string_cmp }, /* grecs_type_string */ { sizeof(short), NUMCMP(short) }, /* grecs_type_short */ { sizeof(unsigned short), NUMCMP(short) }, /* grecs_type_ushort */ { sizeof(int), NUMCMP(int) }, /* grecs_type_int */ { sizeof(unsigned int), NUMCMP(int) }, /* grecs_type_uint */ { sizeof(long), NUMCMP(long) }, /* grecs_type_long */ { sizeof(unsigned long), NUMCMP(long) }, /* grecs_type_ulong */ { sizeof(size_t), NUMCMP(size_t) }, /* grecs_type_size */ #if 0 FIXME { sizeof(off_t), NUMCMP(off_t) }, /* grecs_type_off */ #endif { sizeof(time_t), NUMCMP(time_t) }, /* grecs_type_time */ { sizeof(int), NUMCMP(int) }, /* grecs_type_bool */ { sizeof(struct in_addr), NUMCMP(in_addr) }, /* grecs_type_ipv4 */ { sizeof(struct grecs_cidr), cidr_cmp }, /* grecs_type_cidr */ { sizeof(struct in_addr), NUMCMP(in_addr) }, /* grecs_type_host */ { sizeof(struct grecs_sockaddr), NUMCMP(grecs_sockaddr) }, /* grecs_type_sockaddr */ { 0, NULL }, /* grecs_type_section */ { 0, NULL } /* grecs_type_null */ }; #define grecs_prop_count \ (sizeof(grecs_prop_tab) / sizeof(grecs_prop_tab[0])) void grecs_process_ident(struct grecs_keyword *kwp, grecs_value_t *value, void *base, grecs_locus_t *locus) { void *target; if (!kwp) return; target = target_ptr(kwp, (char *) base); if (kwp->callback) { #if GRECS_TREE_API struct grecs_node node = { 0 }; node.locus = *locus; node.v.value = value; node.ident = (char*) kwp->ident; kwp->callback(grecs_callback_set_value, &node, target, &kwp->callback_data); #else kwp->callback(grecs_callback_set_value, locus, target, value, &kwp->callback_data); #endif } else if (kwp->type == grecs_type_void || target == NULL) return; else if (!value) { grecs_error(locus, 0, "%s has no value", kwp->ident); return; } else if (value->type == GRECS_TYPE_ARRAY) { grecs_error(locus, 0, _("too many arguments to `%s'; missing semicolon?"), kwp->ident); return; } else if (value->type == GRECS_TYPE_LIST) { if (kwp->flags & GRECS_LIST) { struct grecs_list_entry *ep; enum grecs_data_type type = kwp->type; int num = 1; struct grecs_list *list; size_t size; if (type >= grecs_prop_count || (size = grecs_prop_tab[type].size) == 0) { grecs_error(locus, 0, _("INTERNAL ERROR at %s:%d: " "unhandled data type %d"), __FILE__, __LINE__, type); abort(); } list = _grecs_simple_list_create( type == grecs_type_string); list->cmp = grecs_prop_tab[type].cmp; for (ep = value->v.list->head; ep; ep = ep->next) { const grecs_value_t *vp = ep->data; if (vp->type != GRECS_TYPE_STRING) grecs_error(&vp->locus, 0, _("%s: incompatible data type in list item #%d"), kwp->ident, num); else if (type == grecs_type_string) grecs_list_append(list, grecs_strdup(vp->v.string)); else { void *ptr = grecs_malloc(size); if (grecs_string_convert(ptr, type, vp->v.string, &vp->locus) == 0) grecs_list_append(list, ptr); else grecs_free(ptr); } } *(struct grecs_list**)target = list; } else { grecs_error(locus, 0, _("incompatible data type for `%s'"), kwp->ident); return; } } else if (kwp->flags & GRECS_LIST) { struct grecs_list *list; enum grecs_data_type type = kwp->type; size_t size; void *ptr; if (type >= grecs_prop_count || (size = grecs_prop_tab[type].size) == 0) { grecs_error(locus, 0, _("INTERNAL ERROR at %s:%d: unhandled data type %d"), __FILE__, __LINE__, type); abort(); } list = _grecs_simple_list_create(1); list->cmp = grecs_prop_tab[type].cmp; if (type == grecs_type_string) grecs_list_append(list, grecs_strdup(value->v.string)); else { ptr = grecs_malloc(size); if (grecs_string_convert(ptr, type, value->v.string, &value->locus)) { grecs_free(ptr); grecs_list_free(list); return; } grecs_list_append(list, ptr); } *(struct grecs_list**)target = list; } else { if (kwp->type == grecs_type_string && !(kwp->flags & GRECS_CONST)) free(*(char**)target); grecs_string_convert(target, kwp->type, value->v.string, &value->locus); } kwp->flags &= ~GRECS_CONST; } struct nodeproc_closure { struct grecs_keyword *cursect; struct grecs_list *sections; int flags; }; #define CURRENT_BASE(clos) \ ((char*)((clos)->cursect ? (clos)->cursect->callback_data : NULL)) static void stmt_begin(struct nodeproc_closure *clos, struct grecs_keyword *kwp, struct grecs_node *node) { void *target; grecs_list_push(clos->sections, clos->cursect); if (kwp) { target = target_ptr(kwp, CURRENT_BASE(clos)); clos->cursect = kwp; if (kwp->callback) { #if GRECS_TREE_API if (kwp->callback(grecs_callback_section_begin, node, target, &kwp->callback_data)) #else if (kwp->callback(grecs_callback_section_begin, &node->locus, target, node->v.value, &kwp->callback_data)) #endif clos->cursect = &fake; } else kwp->callback_data = target; } else /* install an "ignore-all" section */ clos->cursect = kwp; } static void stmt_end(struct nodeproc_closure *clos, struct grecs_node *node) { grecs_callback_fn callback = NULL; void *dataptr = NULL; struct grecs_keyword *kwp = clos->cursect; if (clos->cursect && clos->cursect->callback) { callback = clos->cursect->callback; dataptr = &clos->cursect->callback_data; } clos->cursect = (struct grecs_keyword *)grecs_list_pop(clos->sections); if (!clos->cursect) abort(); if (callback) #if GRECS_TREE_API callback(grecs_callback_section_end, node, kwp ? target_ptr(kwp, CURRENT_BASE(clos)) : NULL, dataptr); #else callback(grecs_callback_section_end, &node->locus, kwp ? target_ptr(kwp, CURRENT_BASE(clos)) : NULL, NULL, dataptr); #endif if (kwp) kwp->callback_data = NULL; } static enum grecs_tree_recurse_res nodeproc(enum grecs_tree_recurse_op op, struct grecs_node *node, void *data) { struct nodeproc_closure *clos = data; struct grecs_keyword *kwp; switch (op) { case grecs_tree_recurse_set: kwp = find_keyword(clos->cursect, node); if (!kwp) return grecs_tree_recurse_skip; grecs_process_ident(kwp, node->v.value, CURRENT_BASE(clos), &node->idloc); break; case grecs_tree_recurse_pre: kwp = find_keyword(clos->cursect, node); if (!kwp) return grecs_tree_recurse_skip; stmt_begin(clos, kwp, node); break; case grecs_tree_recurse_post: stmt_end(clos, node); break; } return grecs_tree_recurse_ok; } int grecs_tree_process(struct grecs_node *node, struct grecs_keyword *kwd) { int rc; struct nodeproc_closure clos; struct grecs_keyword config_keywords; memset(&config_keywords, 0, sizeof(config_keywords)); config_keywords.kwd = kwd; clos.cursect = &config_keywords; clos.sections = grecs_list_create(); if (node->type == grecs_node_root) node = node->down; rc = grecs_tree_recurse(node, nodeproc, &clos); grecs_list_free(clos.sections); return rc; } int grecs_node_eq(struct grecs_node *a, struct grecs_node *b) { if (a->type != b->type) return 1; if (a->type == grecs_node_root) return 0; if (strcmp(a->ident, b->ident)) return 1; if (a->type == grecs_node_block && !grecs_value_eq(a->v.value, b->v.value)) return 1; return 0; } static void free_value_entry(void *ptr) { struct grecs_value *v = ptr; grecs_value_free(v); } struct grecs_list * grecs_value_list_create() { struct grecs_list *list = grecs_list_create(); list->free_entry = free_value_entry; return list; } static void value_to_list(struct grecs_value *val) { struct grecs_list *list; int i; if (val->type == GRECS_TYPE_LIST) return; list = grecs_value_list_create(); switch (val->type) { case GRECS_TYPE_STRING: grecs_list_append(list, grecs_value_ptr_from_static(val)); break; case GRECS_TYPE_ARRAY: for (i = 0; i < val->v.arg.c; i++) grecs_list_append(list, val->v.arg.v[i]); } val->type = GRECS_TYPE_LIST; val->v.list = list; } static void value_to_array(struct grecs_value *val) { if (val->type == GRECS_TYPE_ARRAY) return; else { struct grecs_value **vp; vp = grecs_calloc(1, sizeof(*vp)); vp[0] = grecs_value_ptr_from_static(val); val->type = GRECS_TYPE_ARRAY; val->v.arg.c = 1; val->v.arg.v = vp; } } static void array_add(struct grecs_value *vx, struct grecs_value *vy) { size_t i; vx->v.arg.v = grecs_realloc(vx->v.arg.v, (vx->v.arg.c + vy->v.arg.c) * sizeof(vx->v.arg.v[0])); for (i = 0; i < vy->v.arg.c; i++) vx->v.arg.v[i + vy->v.arg.c] = vy->v.arg.v[i]; grecs_free(vy->v.arg.v); vy->v.arg.v = NULL; vy->v.arg.c = 0; } static void node_aggregate_stmt(struct grecs_node *dst, struct grecs_node *src, int islist) { if (islist) { struct grecs_list *t; /* Coerce both arguments to lists */ value_to_list(dst->v.value); value_to_list(src->v.value); /* Aggregate two lists in order */ grecs_list_add(src->v.value->v.list, dst->v.value->v.list); /* Swap them */ t = dst->v.value->v.list; dst->v.value->v.list = src->v.value->v.list; src->v.value->v.list = t; } else { value_to_array(dst->v.value); value_to_array(src->v.value); array_add(dst->v.value, src->v.value); } } static void node_merge_stmt(struct grecs_node *to_node, struct grecs_node *from_node, struct grecs_keyword *kwp, int flags) { if (kwp && (flags & GRECS_AGGR) ^ (kwp->flags & GRECS_AGGR) && ((kwp->flags & GRECS_LIST) || kwp->callback)) node_aggregate_stmt(to_node, from_node, kwp->flags & GRECS_LIST); else { grecs_value_free(from_node->v.value); from_node->v.value = NULL; } } static void node_merge_block(struct grecs_node *to_node, struct grecs_node *from_node, struct grecs_keyword *kwp) { struct grecs_node *sp; if (!from_node->down) return; for (sp = from_node->down; ; sp = sp->next) { sp->up = to_node; if (!sp->next) break; } sp->next = to_node->down; to_node->down->prev = sp; to_node->down = from_node->down; from_node->down = NULL; } static int node_reduce(struct grecs_node *node, struct grecs_keyword *kwp, int flags) { struct grecs_node *p; for (p = node->next; p; p = p->next) if (grecs_node_eq(p, node) == 0) break; if (p) { switch (node->type) { case grecs_node_root: return 0; case grecs_node_stmt: node_merge_stmt(p, node, kwp, flags); break; case grecs_node_block: node_merge_block(p, node, kwp); break; } grecs_node_unlink(node); grecs_node_free(node); return 1; } return 0; } static enum grecs_tree_recurse_res reduceproc(enum grecs_tree_recurse_op op, struct grecs_node *node, void *data) { struct nodeproc_closure *clos = data; if (op == grecs_tree_recurse_post) { if (clos->sections) clos->cursect = (struct grecs_keyword *) grecs_list_pop(clos->sections); } else { struct grecs_keyword *kwp = NULL; if (clos->cursect) { kwp = find_keyword(clos->cursect, node); if (!kwp) return grecs_tree_recurse_skip; if (kwp->flags & GRECS_INAC) return grecs_tree_recurse_skip; if (!(kwp->flags & GRECS_MULT) && node_reduce(node, kwp, clos->flags)) return grecs_tree_recurse_skip; if (op == grecs_tree_recurse_pre) { grecs_list_push(clos->sections, clos->cursect); clos->cursect = kwp; } } else if (node_reduce(node, kwp, clos->flags)) return grecs_tree_recurse_skip; } return grecs_tree_recurse_ok; } int grecs_tree_reduce(struct grecs_node *node, struct grecs_keyword *kwd, int flags) { int rc; struct nodeproc_closure clos; struct grecs_keyword config_keywords; memset(&config_keywords, 0, sizeof(config_keywords)); config_keywords.kwd = kwd; if (kwd) { clos.cursect = &config_keywords; clos.sections = grecs_list_create(); } else { clos.cursect = NULL; clos.sections = NULL; } clos.flags = flags; rc = grecs_tree_recurse(node->down, reduceproc, &clos); grecs_list_free(clos.sections); return rc; } struct grecs_node * grecs_tree_first_node(struct grecs_node *tree) { if (tree->type == grecs_node_root) return tree->down; return tree; } struct grecs_node * grecs_next_node(struct grecs_node *node) { if (!node) return NULL; if (node->down) return node->down; while (!node->next) { node = node->up; if (!node || node->type == grecs_node_root) return NULL; } return node->next; } �������������������������������������������������������������������������������������������direvent-5.2/grecs/src/meta1-gram.c�����������������������������������������������������������������0000644�0001750�0001750�00000201050�13244106172�017155� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A Bison parser, made by GNU Bison 2.7. */ /* Bison implementation for Yacc-like parsers in C Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* C LALR(1) parser skeleton written by Richard Stallman, by simplifying the original so-called "semantic" parser. */ /* All symbols defined below should begin with grecs_meta1_ or YY, to avoid infringing on user name space. This should be done even for local variables, as they might otherwise be expanded by user macros. There are some unavoidable exceptions within include files to define necessary library symbols; they are noted "INFRINGES ON USER NAME SPACE" below. */ /* Identify Bison output. */ #define YYBISON 1 /* Bison version. */ #define YYBISON_VERSION "2.7" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" /* Pure parsers. */ #define YYPURE 0 /* Push parsers. */ #define YYPUSH 0 /* Pull parsers. */ #define YYPULL 1 /* Copy the first part of user declarations. */ /* Line 371 of yacc.c */ #line 1 "meta1-gram.y" /* MeTA1 configuration parser for Grecs. Copyright (C) 2007-2016 Sergey Poznyakoff Grecs 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. Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include <errno.h> #include <string.h> #include "grecs.h" int grecs_meta1_lex(void); int grecs_meta1_error(char const *s); static struct grecs_node *parse_tree; extern int grecs_meta1__flex_debug; extern void grecs_meta1_set_in(FILE *); /* Line 371 of yacc.c */ #line 100 "meta1-gram.c" # ifndef YY_NULL # if defined __cplusplus && 201103L <= __cplusplus # define YY_NULL nullptr # else # define YY_NULL 0 # endif # endif /* Enabling verbose error messages. */ #ifdef YYERROR_VERBOSE # undef YYERROR_VERBOSE # define YYERROR_VERBOSE 1 #else # define YYERROR_VERBOSE 1 #endif /* In a future release of Bison, this section will be replaced by #include "y.tab.h". */ #ifndef YY_YY_Y_TAB_H_INCLUDED # define YY_YY_Y_TAB_H_INCLUDED /* Enabling traces. */ #ifndef YYDEBUG # define YYDEBUG 1 #endif #if YYDEBUG extern int grecs_meta1_debug; #endif /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE /* Put the tokens into the symbol table, so that GDB and other debuggers know about them. */ enum grecs_meta1_tokentype { META1_STRING = 258, META1_IDENT = 259 }; #endif /* Tokens. */ #define META1_STRING 258 #define META1_IDENT 259 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE { /* Line 387 of yacc.c */ #line 36 "meta1-gram.y" char *string; grecs_value_t svalue, *pvalue; struct grecs_list *list; struct { struct grecs_node *head, *tail; } node_list; struct grecs_node *node; /* Line 387 of yacc.c */ #line 160 "meta1-gram.c" } YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define grecs_meta1_stype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 #endif #if ! defined YYLTYPE && ! defined YYLTYPE_IS_DECLARED typedef struct YYLTYPE { int first_line; int first_column; int last_line; int last_column; } YYLTYPE; # define grecs_meta1_ltype YYLTYPE /* obsolescent; will be withdrawn */ # define YYLTYPE_IS_DECLARED 1 # define YYLTYPE_IS_TRIVIAL 1 #endif extern YYSTYPE grecs_meta1_lval; extern YYLTYPE grecs_meta1_lloc; #ifdef YYPARSE_PARAM #if defined __STDC__ || defined __cplusplus int grecs_meta1_parse (void *YYPARSE_PARAM); #else int grecs_meta1_parse (); #endif #else /* ! YYPARSE_PARAM */ #if defined __STDC__ || defined __cplusplus int grecs_meta1_parse (void); #else int grecs_meta1_parse (); #endif #endif /* ! YYPARSE_PARAM */ #endif /* !YY_YY_Y_TAB_H_INCLUDED */ /* Copy the second part of user declarations. */ /* Line 390 of yacc.c */ #line 201 "meta1-gram.c" #ifdef short # undef short #endif #ifdef YYTYPE_UINT8 typedef YYTYPE_UINT8 grecs_meta1_type_uint8; #else typedef unsigned char grecs_meta1_type_uint8; #endif #ifdef YYTYPE_INT8 typedef YYTYPE_INT8 grecs_meta1_type_int8; #elif (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) typedef signed char grecs_meta1_type_int8; #else typedef short int grecs_meta1_type_int8; #endif #ifdef YYTYPE_UINT16 typedef YYTYPE_UINT16 grecs_meta1_type_uint16; #else typedef unsigned short int grecs_meta1_type_uint16; #endif #ifdef YYTYPE_INT16 typedef YYTYPE_INT16 grecs_meta1_type_int16; #else typedef short int grecs_meta1_type_int16; #endif #ifndef YYSIZE_T # ifdef __SIZE_TYPE__ # define YYSIZE_T __SIZE_TYPE__ # elif defined size_t # define YYSIZE_T size_t # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include <stddef.h> /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # else # define YYSIZE_T unsigned int # endif #endif #define YYSIZE_MAXIMUM ((YYSIZE_T) -1) #ifndef YY_ # if defined YYENABLE_NLS && YYENABLE_NLS # if ENABLE_NLS # include <libintl.h> /* INFRINGES ON USER NAME SPACE */ # define YY_(Msgid) dgettext ("bison-runtime", Msgid) # endif # endif # ifndef YY_ # define YY_(Msgid) Msgid # endif #endif /* Suppress unused-variable warnings by "using" E. */ #if ! defined lint || defined __GNUC__ # define YYUSE(E) ((void) (E)) #else # define YYUSE(E) /* empty */ #endif /* Identity function, used to suppress warnings about constant conditions. */ #ifndef lint # define YYID(N) (N) #else #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static int YYID (int grecs_meta1_i) #else static int YYID (grecs_meta1_i) int grecs_meta1_i; #endif { return grecs_meta1_i; } #endif #if ! defined grecs_meta1_overflow || YYERROR_VERBOSE /* The parser invokes alloca or malloc; define the necessary symbols. */ # ifdef YYSTACK_USE_ALLOCA # if YYSTACK_USE_ALLOCA # ifdef __GNUC__ # define YYSTACK_ALLOC __builtin_alloca # elif defined __BUILTIN_VA_ARG_INCR # include <alloca.h> /* INFRINGES ON USER NAME SPACE */ # elif defined _AIX # define YYSTACK_ALLOC __alloca # elif defined _MSC_VER # include <malloc.h> /* INFRINGES ON USER NAME SPACE */ # define alloca _alloca # else # define YYSTACK_ALLOC alloca # if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ /* Use EXIT_SUCCESS as a witness for stdlib.h. */ # ifndef EXIT_SUCCESS # define EXIT_SUCCESS 0 # endif # endif # endif # endif # endif # ifdef YYSTACK_ALLOC /* Pacify GCC's `empty if-body' warning. */ # define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) # ifndef YYSTACK_ALLOC_MAXIMUM /* The OS might guarantee only one guard page at the bottom of the stack, and a page size can be as small as 4096 bytes. So we cannot safely invoke alloca (N) if N exceeds 4096. Use a slightly smaller number to allow for a few compiler-allocated temporary stack slots. */ # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ # endif # else # define YYSTACK_ALLOC YYMALLOC # define YYSTACK_FREE YYFREE # ifndef YYSTACK_ALLOC_MAXIMUM # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM # endif # if (defined __cplusplus && ! defined EXIT_SUCCESS \ && ! ((defined YYMALLOC || defined malloc) \ && (defined YYFREE || defined free))) # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ # ifndef EXIT_SUCCESS # define EXIT_SUCCESS 0 # endif # endif # ifndef YYMALLOC # define YYMALLOC malloc # if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ # endif # endif # ifndef YYFREE # define YYFREE free # if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) void free (void *); /* INFRINGES ON USER NAME SPACE */ # endif # endif # endif #endif /* ! defined grecs_meta1_overflow || YYERROR_VERBOSE */ #if (! defined grecs_meta1_overflow \ && (! defined __cplusplus \ || (defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL \ && defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) /* A type that is properly aligned for any stack member. */ union grecs_meta1_alloc { grecs_meta1_type_int16 grecs_meta1_ss_alloc; YYSTYPE grecs_meta1_vs_alloc; YYLTYPE grecs_meta1_ls_alloc; }; /* The size of the maximum gap between one aligned stack and the next. */ # define YYSTACK_GAP_MAXIMUM (sizeof (union grecs_meta1_alloc) - 1) /* The size of an array large to enough to hold all stacks, each with N elements. */ # define YYSTACK_BYTES(N) \ ((N) * (sizeof (grecs_meta1_type_int16) + sizeof (YYSTYPE) + sizeof (YYLTYPE)) \ + 2 * YYSTACK_GAP_MAXIMUM) # define YYCOPY_NEEDED 1 /* Relocate STACK from its old location to the new one. The local variables YYSIZE and YYSTACKSIZE give the old and new number of elements in the stack, and YYPTR gives the new location of the stack. Advance YYPTR to a properly aligned location for the next stack. */ # define YYSTACK_RELOCATE(Stack_alloc, Stack) \ do \ { \ YYSIZE_T grecs_meta1_newbytes; \ YYCOPY (&grecs_meta1_ptr->Stack_alloc, Stack, grecs_meta1_size); \ Stack = &grecs_meta1_ptr->Stack_alloc; \ grecs_meta1_newbytes = grecs_meta1_stacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ grecs_meta1_ptr += grecs_meta1_newbytes / sizeof (*grecs_meta1_ptr); \ } \ while (YYID (0)) #endif #if defined YYCOPY_NEEDED && YYCOPY_NEEDED /* Copy COUNT objects from SRC to DST. The source and destination do not overlap. */ # ifndef YYCOPY # if defined __GNUC__ && 1 < __GNUC__ # define YYCOPY(Dst, Src, Count) \ __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src))) # else # define YYCOPY(Dst, Src, Count) \ do \ { \ YYSIZE_T grecs_meta1_i; \ for (grecs_meta1_i = 0; grecs_meta1_i < (Count); grecs_meta1_i++) \ (Dst)[grecs_meta1_i] = (Src)[grecs_meta1_i]; \ } \ while (YYID (0)) # endif # endif #endif /* !YYCOPY_NEEDED */ /* YYFINAL -- State number of the termination state. */ #define YYFINAL 11 /* YYLAST -- Last index in YYTABLE. */ #define YYLAST 23 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 10 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 15 /* YYNRULES -- Number of rules. */ #define YYNRULES 25 /* YYNRULES -- Number of states. */ #define YYNSTATES 34 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 #define YYMAXUTOK 259 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? grecs_meta1_translate[YYX] : YYUNDEFTOK) /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ static const grecs_meta1_type_uint8 grecs_meta1_translate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 8, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 9, 2, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 2, 7, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 3, 4 }; #if YYDEBUG /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in YYRHS. */ static const grecs_meta1_type_uint8 grecs_meta1_prhs[] = { 0, 0, 3, 5, 6, 8, 10, 13, 15, 17, 22, 29, 30, 32, 34, 36, 38, 40, 42, 44, 47, 51, 56, 58, 62, 63 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ static const grecs_meta1_type_int8 grecs_meta1_rhs[] = { 11, 0, -1, 12, -1, -1, 13, -1, 14, -1, 13, 14, -1, 15, -1, 16, -1, 4, 5, 18, 24, -1, 4, 17, 6, 13, 7, 24, -1, -1, 4, -1, 19, -1, 22, -1, 4, -1, 20, -1, 21, -1, 3, -1, 21, 3, -1, 6, 23, 7, -1, 6, 23, 8, 7, -1, 18, -1, 23, 8, 18, -1, -1, 9, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const grecs_meta1_type_uint8 grecs_meta1_rline[] = { 0, 53, 53, 63, 66, 72, 76, 82, 83, 86, 96, 108, 111, 119, 126, 135, 136, 139, 153, 158, 165, 169, 175, 180, 187, 188 }; #endif #if YYDEBUG || YYERROR_VERBOSE || 1 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char *const grecs_meta1_tname[] = { "$end", "error", "$undefined", "META1_STRING", "META1_IDENT", "'='", "'{'", "'}'", "','", "';'", "$accept", "input", "maybe_stmtlist", "stmtlist", "stmt", "simple", "block", "tag", "value", "string", "slist", "slist0", "list", "values", "opt_sc", YY_NULL }; #endif # ifdef YYPRINT /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to token YYLEX-NUM. */ static const grecs_meta1_type_uint16 grecs_meta1_toknum[] = { 0, 256, 257, 258, 259, 61, 123, 125, 44, 59 }; # endif /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const grecs_meta1_type_uint8 grecs_meta1_r1[] = { 0, 10, 11, 12, 12, 13, 13, 14, 14, 15, 16, 17, 17, 18, 18, 19, 19, 20, 21, 21, 22, 22, 23, 23, 24, 24 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ static const grecs_meta1_type_uint8 grecs_meta1_r2[] = { 0, 2, 1, 0, 1, 1, 2, 1, 1, 4, 6, 0, 1, 1, 1, 1, 1, 1, 1, 2, 3, 4, 1, 3, 0, 1 }; /* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM. Performed when YYTABLE doesn't specify something else to do. Zero means the default is an error. */ static const grecs_meta1_type_uint8 grecs_meta1_defact[] = { 3, 11, 0, 2, 4, 5, 7, 8, 12, 0, 0, 1, 6, 18, 15, 0, 24, 13, 16, 17, 14, 0, 22, 0, 25, 9, 19, 0, 20, 0, 24, 21, 23, 10 }; /* YYDEFGOTO[NTERM-NUM]. */ static const grecs_meta1_type_int8 grecs_meta1_defgoto[] = { -1, 2, 3, 4, 5, 6, 7, 10, 16, 17, 18, 19, 20, 23, 25 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ #define YYPACT_NINF -15 static const grecs_meta1_type_int8 grecs_meta1_pact[] = { 0, 9, 11, -15, 0, -15, -15, -15, -15, 4, 13, -15, -15, -15, -15, 4, 7, -15, -15, 17, -15, 0, -15, 10, -15, -15, -15, 5, -15, -1, 7, -15, -15, -15 }; /* YYPGOTO[NTERM-NUM]. */ static const grecs_meta1_type_int8 grecs_meta1_pgoto[] = { -15, -15, -15, 1, -4, -15, -15, -15, -14, -15, -15, -15, -15, -15, -9 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule which number is the opposite. If YYTABLE_NINF, syntax error. */ #define YYTABLE_NINF -1 static const grecs_meta1_type_uint8 grecs_meta1_table[] = { 12, 22, 13, 14, 1, 15, 31, 13, 14, 1, 15, 11, 30, 8, 9, 32, 24, 28, 29, 21, 26, 33, 27, 12 }; #define grecs_meta1_pact_value_is_default(Yystate) \ (!!((Yystate) == (-15))) #define grecs_meta1_table_value_is_error(Yytable_value) \ YYID (0) static const grecs_meta1_type_uint8 grecs_meta1_check[] = { 4, 15, 3, 4, 4, 6, 7, 3, 4, 4, 6, 0, 7, 4, 5, 29, 9, 7, 8, 6, 3, 30, 21, 27 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const grecs_meta1_type_uint8 grecs_meta1_stos[] = { 0, 4, 11, 12, 13, 14, 15, 16, 4, 5, 17, 0, 14, 3, 4, 6, 18, 19, 20, 21, 22, 6, 18, 23, 9, 24, 3, 13, 7, 8, 7, 7, 18, 24 }; #define grecs_meta1_errok (grecs_meta1_errstatus = 0) #define grecs_meta1_clearin (grecs_meta1_char = YYEMPTY) #define YYEMPTY (-2) #define YYEOF 0 #define YYACCEPT goto grecs_meta1_acceptlab #define YYABORT goto grecs_meta1_abortlab #define YYERROR goto grecs_meta1_errorlab /* Like YYERROR except do call grecs_meta1_error. This remains here temporarily to ease the transition to the new meaning of YYERROR, for GCC. Once GCC version 2 has supplanted version 1, this can go. However, YYFAIL appears to be in use. Nevertheless, it is formally deprecated in Bison 2.4.2's NEWS entry, where a plan to phase it out is discussed. */ #define YYFAIL goto grecs_meta1_errlab #if defined YYFAIL /* This is here to suppress warnings from the GCC cpp's -Wunused-macros. Normally we don't worry about that warning, but some users do, and we want to make it easy for users to remove YYFAIL uses, which will produce warnings from Bison 2.5. */ #endif #define YYRECOVERING() (!!grecs_meta1_errstatus) #define YYBACKUP(Token, Value) \ do \ if (grecs_meta1_char == YYEMPTY) \ { \ grecs_meta1_char = (Token); \ grecs_meta1_lval = (Value); \ YYPOPSTACK (grecs_meta1_len); \ grecs_meta1_state = *grecs_meta1_ssp; \ goto grecs_meta1_backup; \ } \ else \ { \ grecs_meta1_error (YY_("syntax error: cannot back up")); \ YYERROR; \ } \ while (YYID (0)) /* Error token number */ #define YYTERROR 1 #define YYERRCODE 256 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. If N is 0, then set CURRENT to the empty location which ends the previous symbol: RHS[0] (always defined). */ #ifndef YYLLOC_DEFAULT # define YYLLOC_DEFAULT(Current, Rhs, N) \ do \ if (YYID (N)) \ { \ (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ } \ else \ { \ (Current).first_line = (Current).last_line = \ YYRHSLOC (Rhs, 0).last_line; \ (Current).first_column = (Current).last_column = \ YYRHSLOC (Rhs, 0).last_column; \ } \ while (YYID (0)) #endif #define YYRHSLOC(Rhs, K) ((Rhs)[K]) /* YY_LOCATION_PRINT -- Print the location on the stream. This macro was not mandated originally: define only if we know we won't break user code: when these are the locations we know. */ #ifndef YY_LOCATION_PRINT # if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL /* Print *YYLOCP on YYO. Private, do not rely on its existence. */ __attribute__((__unused__)) #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static unsigned grecs_meta1__location_print_ (FILE *grecs_meta1_o, YYLTYPE const * const grecs_meta1_locp) #else static unsigned grecs_meta1__location_print_ (grecs_meta1_o, grecs_meta1_locp) FILE *grecs_meta1_o; YYLTYPE const * const grecs_meta1_locp; #endif { unsigned res = 0; int end_col = 0 != grecs_meta1_locp->last_column ? grecs_meta1_locp->last_column - 1 : 0; if (0 <= grecs_meta1_locp->first_line) { res += fprintf (grecs_meta1_o, "%d", grecs_meta1_locp->first_line); if (0 <= grecs_meta1_locp->first_column) res += fprintf (grecs_meta1_o, ".%d", grecs_meta1_locp->first_column); } if (0 <= grecs_meta1_locp->last_line) { if (grecs_meta1_locp->first_line < grecs_meta1_locp->last_line) { res += fprintf (grecs_meta1_o, "-%d", grecs_meta1_locp->last_line); if (0 <= end_col) res += fprintf (grecs_meta1_o, ".%d", end_col); } else if (0 <= end_col && grecs_meta1_locp->first_column < end_col) res += fprintf (grecs_meta1_o, "-%d", end_col); } return res; } # define YY_LOCATION_PRINT(File, Loc) \ grecs_meta1__location_print_ (File, &(Loc)) # else # define YY_LOCATION_PRINT(File, Loc) ((void) 0) # endif #endif /* YYLEX -- calling `grecs_meta1_lex' with the right arguments. */ #ifdef YYLEX_PARAM # define YYLEX grecs_meta1_lex (YYLEX_PARAM) #else # define YYLEX grecs_meta1_lex () #endif /* Enable debugging if requested. */ #if YYDEBUG # ifndef YYFPRINTF # include <stdio.h> /* INFRINGES ON USER NAME SPACE */ # define YYFPRINTF fprintf # endif # define YYDPRINTF(Args) \ do { \ if (grecs_meta1_debug) \ YYFPRINTF Args; \ } while (YYID (0)) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ do { \ if (grecs_meta1_debug) \ { \ YYFPRINTF (stderr, "%s ", Title); \ grecs_meta1__symbol_print (stderr, \ Type, Value, Location); \ YYFPRINTF (stderr, "\n"); \ } \ } while (YYID (0)) /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ /*ARGSUSED*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void grecs_meta1__symbol_value_print (FILE *grecs_meta1_output, int grecs_meta1_type, YYSTYPE const * const grecs_meta1_valuep, YYLTYPE const * const grecs_meta1_locationp) #else static void grecs_meta1__symbol_value_print (grecs_meta1_output, grecs_meta1_type, grecs_meta1_valuep, grecs_meta1_locationp) FILE *grecs_meta1_output; int grecs_meta1_type; YYSTYPE const * const grecs_meta1_valuep; YYLTYPE const * const grecs_meta1_locationp; #endif { FILE *grecs_meta1_o = grecs_meta1_output; YYUSE (grecs_meta1_o); if (!grecs_meta1_valuep) return; YYUSE (grecs_meta1_locationp); # ifdef YYPRINT if (grecs_meta1_type < YYNTOKENS) YYPRINT (grecs_meta1_output, grecs_meta1_toknum[grecs_meta1_type], *grecs_meta1_valuep); # else YYUSE (grecs_meta1_output); # endif switch (grecs_meta1_type) { default: break; } } /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void grecs_meta1__symbol_print (FILE *grecs_meta1_output, int grecs_meta1_type, YYSTYPE const * const grecs_meta1_valuep, YYLTYPE const * const grecs_meta1_locationp) #else static void grecs_meta1__symbol_print (grecs_meta1_output, grecs_meta1_type, grecs_meta1_valuep, grecs_meta1_locationp) FILE *grecs_meta1_output; int grecs_meta1_type; YYSTYPE const * const grecs_meta1_valuep; YYLTYPE const * const grecs_meta1_locationp; #endif { if (grecs_meta1_type < YYNTOKENS) YYFPRINTF (grecs_meta1_output, "token %s (", grecs_meta1_tname[grecs_meta1_type]); else YYFPRINTF (grecs_meta1_output, "nterm %s (", grecs_meta1_tname[grecs_meta1_type]); YY_LOCATION_PRINT (grecs_meta1_output, *grecs_meta1_locationp); YYFPRINTF (grecs_meta1_output, ": "); grecs_meta1__symbol_value_print (grecs_meta1_output, grecs_meta1_type, grecs_meta1_valuep, grecs_meta1_locationp); YYFPRINTF (grecs_meta1_output, ")"); } /*------------------------------------------------------------------. | grecs_meta1__stack_print -- Print the state stack from its BOTTOM up to its | | TOP (included). | `------------------------------------------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void grecs_meta1__stack_print (grecs_meta1_type_int16 *grecs_meta1_bottom, grecs_meta1_type_int16 *grecs_meta1_top) #else static void grecs_meta1__stack_print (grecs_meta1_bottom, grecs_meta1_top) grecs_meta1_type_int16 *grecs_meta1_bottom; grecs_meta1_type_int16 *grecs_meta1_top; #endif { YYFPRINTF (stderr, "Stack now"); for (; grecs_meta1_bottom <= grecs_meta1_top; grecs_meta1_bottom++) { int grecs_meta1_bot = *grecs_meta1_bottom; YYFPRINTF (stderr, " %d", grecs_meta1_bot); } YYFPRINTF (stderr, "\n"); } # define YY_STACK_PRINT(Bottom, Top) \ do { \ if (grecs_meta1_debug) \ grecs_meta1__stack_print ((Bottom), (Top)); \ } while (YYID (0)) /*------------------------------------------------. | Report that the YYRULE is going to be reduced. | `------------------------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void grecs_meta1__reduce_print (YYSTYPE *grecs_meta1_vsp, YYLTYPE *grecs_meta1_lsp, int grecs_meta1_rule) #else static void grecs_meta1__reduce_print (grecs_meta1_vsp, grecs_meta1_lsp, grecs_meta1_rule) YYSTYPE *grecs_meta1_vsp; YYLTYPE *grecs_meta1_lsp; int grecs_meta1_rule; #endif { int grecs_meta1_nrhs = grecs_meta1_r2[grecs_meta1_rule]; int grecs_meta1_i; unsigned long int grecs_meta1_lno = grecs_meta1_rline[grecs_meta1_rule]; YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", grecs_meta1_rule - 1, grecs_meta1_lno); /* The symbols being reduced. */ for (grecs_meta1_i = 0; grecs_meta1_i < grecs_meta1_nrhs; grecs_meta1_i++) { YYFPRINTF (stderr, " $%d = ", grecs_meta1_i + 1); grecs_meta1__symbol_print (stderr, grecs_meta1_rhs[grecs_meta1_prhs[grecs_meta1_rule] + grecs_meta1_i], &(grecs_meta1_vsp[(grecs_meta1_i + 1) - (grecs_meta1_nrhs)]) , &(grecs_meta1_lsp[(grecs_meta1_i + 1) - (grecs_meta1_nrhs)]) ); YYFPRINTF (stderr, "\n"); } } # define YY_REDUCE_PRINT(Rule) \ do { \ if (grecs_meta1_debug) \ grecs_meta1__reduce_print (grecs_meta1_vsp, grecs_meta1_lsp, Rule); \ } while (YYID (0)) /* Nonzero means print parse trace. It is left uninitialized so that multiple parsers can coexist. */ int grecs_meta1_debug; #else /* !YYDEBUG */ # define YYDPRINTF(Args) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) # define YY_STACK_PRINT(Bottom, Top) # define YY_REDUCE_PRINT(Rule) #endif /* !YYDEBUG */ /* YYINITDEPTH -- initial size of the parser's stacks. */ #ifndef YYINITDEPTH # define YYINITDEPTH 200 #endif /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only if the built-in stack extension method is used). Do not make this value too large; the results are undefined if YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) evaluated with infinite-precision integer arithmetic. */ #ifndef YYMAXDEPTH # define YYMAXDEPTH 10000 #endif #if YYERROR_VERBOSE # ifndef grecs_meta1_strlen # if defined __GLIBC__ && defined _STRING_H # define grecs_meta1_strlen strlen # else /* Return the length of YYSTR. */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static YYSIZE_T grecs_meta1_strlen (const char *grecs_meta1_str) #else static YYSIZE_T grecs_meta1_strlen (grecs_meta1_str) const char *grecs_meta1_str; #endif { YYSIZE_T grecs_meta1_len; for (grecs_meta1_len = 0; grecs_meta1_str[grecs_meta1_len]; grecs_meta1_len++) continue; return grecs_meta1_len; } # endif # endif # ifndef grecs_meta1_stpcpy # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE # define grecs_meta1_stpcpy stpcpy # else /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in YYDEST. */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static char * grecs_meta1_stpcpy (char *grecs_meta1_dest, const char *grecs_meta1_src) #else static char * grecs_meta1_stpcpy (grecs_meta1_dest, grecs_meta1_src) char *grecs_meta1_dest; const char *grecs_meta1_src; #endif { char *grecs_meta1_d = grecs_meta1_dest; const char *grecs_meta1_s = grecs_meta1_src; while ((*grecs_meta1_d++ = *grecs_meta1_s++) != '\0') continue; return grecs_meta1_d - 1; } # endif # endif # ifndef grecs_meta1_tnamerr /* Copy to YYRES the contents of YYSTR after stripping away unnecessary quotes and backslashes, so that it's suitable for grecs_meta1_error. The heuristic is that double-quoting is unnecessary unless the string contains an apostrophe, a comma, or backslash (other than backslash-backslash). YYSTR is taken from grecs_meta1_tname. If YYRES is null, do not copy; instead, return the length of what the result would have been. */ static YYSIZE_T grecs_meta1_tnamerr (char *grecs_meta1_res, const char *grecs_meta1_str) { if (*grecs_meta1_str == '"') { YYSIZE_T grecs_meta1_n = 0; char const *grecs_meta1_p = grecs_meta1_str; for (;;) switch (*++grecs_meta1_p) { case '\'': case ',': goto do_not_strip_quotes; case '\\': if (*++grecs_meta1_p != '\\') goto do_not_strip_quotes; /* Fall through. */ default: if (grecs_meta1_res) grecs_meta1_res[grecs_meta1_n] = *grecs_meta1_p; grecs_meta1_n++; break; case '"': if (grecs_meta1_res) grecs_meta1_res[grecs_meta1_n] = '\0'; return grecs_meta1_n; } do_not_strip_quotes: ; } if (! grecs_meta1_res) return grecs_meta1_strlen (grecs_meta1_str); return grecs_meta1_stpcpy (grecs_meta1_res, grecs_meta1_str) - grecs_meta1_res; } # endif /* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message about the unexpected token YYTOKEN for the state stack whose top is YYSSP. Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is not large enough to hold the message. In that case, also set *YYMSG_ALLOC to the required number of bytes. Return 2 if the required number of bytes is too large to store. */ static int grecs_meta1_syntax_error (YYSIZE_T *grecs_meta1_msg_alloc, char **grecs_meta1_msg, grecs_meta1_type_int16 *grecs_meta1_ssp, int grecs_meta1_token) { YYSIZE_T grecs_meta1_size0 = grecs_meta1_tnamerr (YY_NULL, grecs_meta1_tname[grecs_meta1_token]); YYSIZE_T grecs_meta1_size = grecs_meta1_size0; enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; /* Internationalized format string. */ const char *grecs_meta1_format = YY_NULL; /* Arguments of grecs_meta1_format. */ char const *grecs_meta1_arg[YYERROR_VERBOSE_ARGS_MAXIMUM]; /* Number of reported tokens (one for the "unexpected", one per "expected"). */ int grecs_meta1_count = 0; /* There are many possibilities here to consider: - Assume YYFAIL is not used. It's too flawed to consider. See <http://lists.gnu.org/archive/html/bison-patches/2009-12/msg00024.html> for details. YYERROR is fine as it does not invoke this function. - If this state is a consistent state with a default action, then the only way this function was invoked is if the default action is an error action. In that case, don't check for expected tokens because there are none. - The only way there can be no lookahead present (in grecs_meta1_char) is if this state is a consistent state with a default action. Thus, detecting the absence of a lookahead is sufficient to determine that there is no unexpected or expected token to report. In that case, just report a simple "syntax error". - Don't assume there isn't a lookahead just because this state is a consistent state with a default action. There might have been a previous inconsistent state, consistent state with a non-default action, or user semantic action that manipulated grecs_meta1_char. - Of course, the expected token list depends on states to have correct lookahead information, and it depends on the parser not to perform extra reductions after fetching a lookahead from the scanner and before detecting a syntax error. Thus, state merging (from LALR or IELR) and default reductions corrupt the expected token list. However, the list is correct for canonical LR with one exception: it will still contain any token that will not be accepted due to an error action in a later state. */ if (grecs_meta1_token != YYEMPTY) { int grecs_meta1_n = grecs_meta1_pact[*grecs_meta1_ssp]; grecs_meta1_arg[grecs_meta1_count++] = grecs_meta1_tname[grecs_meta1_token]; if (!grecs_meta1_pact_value_is_default (grecs_meta1_n)) { /* Start YYX at -YYN if negative to avoid negative indexes in YYCHECK. In other words, skip the first -YYN actions for this state because they are default actions. */ int grecs_meta1_xbegin = grecs_meta1_n < 0 ? -grecs_meta1_n : 0; /* Stay within bounds of both grecs_meta1_check and grecs_meta1_tname. */ int grecs_meta1_checklim = YYLAST - grecs_meta1_n + 1; int grecs_meta1_xend = grecs_meta1_checklim < YYNTOKENS ? grecs_meta1_checklim : YYNTOKENS; int grecs_meta1_x; for (grecs_meta1_x = grecs_meta1_xbegin; grecs_meta1_x < grecs_meta1_xend; ++grecs_meta1_x) if (grecs_meta1_check[grecs_meta1_x + grecs_meta1_n] == grecs_meta1_x && grecs_meta1_x != YYTERROR && !grecs_meta1_table_value_is_error (grecs_meta1_table[grecs_meta1_x + grecs_meta1_n])) { if (grecs_meta1_count == YYERROR_VERBOSE_ARGS_MAXIMUM) { grecs_meta1_count = 1; grecs_meta1_size = grecs_meta1_size0; break; } grecs_meta1_arg[grecs_meta1_count++] = grecs_meta1_tname[grecs_meta1_x]; { YYSIZE_T grecs_meta1_size1 = grecs_meta1_size + grecs_meta1_tnamerr (YY_NULL, grecs_meta1_tname[grecs_meta1_x]); if (! (grecs_meta1_size <= grecs_meta1_size1 && grecs_meta1_size1 <= YYSTACK_ALLOC_MAXIMUM)) return 2; grecs_meta1_size = grecs_meta1_size1; } } } } switch (grecs_meta1_count) { # define YYCASE_(N, S) \ case N: \ grecs_meta1_format = S; \ break YYCASE_(0, YY_("syntax error")); YYCASE_(1, YY_("syntax error, unexpected %s")); YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s")); YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s")); YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s")); # undef YYCASE_ } { YYSIZE_T grecs_meta1_size1 = grecs_meta1_size + grecs_meta1_strlen (grecs_meta1_format); if (! (grecs_meta1_size <= grecs_meta1_size1 && grecs_meta1_size1 <= YYSTACK_ALLOC_MAXIMUM)) return 2; grecs_meta1_size = grecs_meta1_size1; } if (*grecs_meta1_msg_alloc < grecs_meta1_size) { *grecs_meta1_msg_alloc = 2 * grecs_meta1_size; if (! (grecs_meta1_size <= *grecs_meta1_msg_alloc && *grecs_meta1_msg_alloc <= YYSTACK_ALLOC_MAXIMUM)) *grecs_meta1_msg_alloc = YYSTACK_ALLOC_MAXIMUM; return 1; } /* Avoid sprintf, as that infringes on the user's name space. Don't have undefined behavior even if the translation produced a string with the wrong number of "%s"s. */ { char *grecs_meta1_p = *grecs_meta1_msg; int grecs_meta1_i = 0; while ((*grecs_meta1_p = *grecs_meta1_format) != '\0') if (*grecs_meta1_p == '%' && grecs_meta1_format[1] == 's' && grecs_meta1_i < grecs_meta1_count) { grecs_meta1_p += grecs_meta1_tnamerr (grecs_meta1_p, grecs_meta1_arg[grecs_meta1_i++]); grecs_meta1_format += 2; } else { grecs_meta1_p++; grecs_meta1_format++; } } return 0; } #endif /* YYERROR_VERBOSE */ /*-----------------------------------------------. | Release the memory associated to this symbol. | `-----------------------------------------------*/ /*ARGSUSED*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void grecs_meta1_destruct (const char *grecs_meta1_msg, int grecs_meta1_type, YYSTYPE *grecs_meta1_valuep, YYLTYPE *grecs_meta1_locationp) #else static void grecs_meta1_destruct (grecs_meta1_msg, grecs_meta1_type, grecs_meta1_valuep, grecs_meta1_locationp) const char *grecs_meta1_msg; int grecs_meta1_type; YYSTYPE *grecs_meta1_valuep; YYLTYPE *grecs_meta1_locationp; #endif { YYUSE (grecs_meta1_valuep); YYUSE (grecs_meta1_locationp); if (!grecs_meta1_msg) grecs_meta1_msg = "Deleting"; YY_SYMBOL_PRINT (grecs_meta1_msg, grecs_meta1_type, grecs_meta1_valuep, grecs_meta1_locationp); switch (grecs_meta1_type) { default: break; } } /* The lookahead symbol. */ int grecs_meta1_char; #ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN # define YY_IGNORE_MAYBE_UNINITIALIZED_END #endif #ifndef YY_INITIAL_VALUE # define YY_INITIAL_VALUE(Value) /* Nothing. */ #endif /* The semantic value of the lookahead symbol. */ YYSTYPE grecs_meta1_lval YY_INITIAL_VALUE(grecs_meta1_val_default); /* Location data for the lookahead symbol. */ YYLTYPE grecs_meta1_lloc # if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL = { 1, 1, 1, 1 } # endif ; /* Number of syntax errors so far. */ int grecs_meta1_nerrs; /*----------. | grecs_meta1_parse. | `----------*/ #ifdef YYPARSE_PARAM #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) int grecs_meta1_parse (void *YYPARSE_PARAM) #else int grecs_meta1_parse (YYPARSE_PARAM) void *YYPARSE_PARAM; #endif #else /* ! YYPARSE_PARAM */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) int grecs_meta1_parse (void) #else int grecs_meta1_parse () #endif #endif { int grecs_meta1_state; /* Number of tokens to shift before error messages enabled. */ int grecs_meta1_errstatus; /* The stacks and their tools: `grecs_meta1_ss': related to states. `grecs_meta1_vs': related to semantic values. `grecs_meta1_ls': related to locations. Refer to the stacks through separate pointers, to allow grecs_meta1_overflow to reallocate them elsewhere. */ /* The state stack. */ grecs_meta1_type_int16 grecs_meta1_ssa[YYINITDEPTH]; grecs_meta1_type_int16 *grecs_meta1_ss; grecs_meta1_type_int16 *grecs_meta1_ssp; /* The semantic value stack. */ YYSTYPE grecs_meta1_vsa[YYINITDEPTH]; YYSTYPE *grecs_meta1_vs; YYSTYPE *grecs_meta1_vsp; /* The location stack. */ YYLTYPE grecs_meta1_lsa[YYINITDEPTH]; YYLTYPE *grecs_meta1_ls; YYLTYPE *grecs_meta1_lsp; /* The locations where the error started and ended. */ YYLTYPE grecs_meta1_error_range[3]; YYSIZE_T grecs_meta1_stacksize; int grecs_meta1_n; int grecs_meta1_result; /* Lookahead token as an internal (translated) token number. */ int grecs_meta1_token = 0; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE grecs_meta1_val; YYLTYPE grecs_meta1_loc; #if YYERROR_VERBOSE /* Buffer for error messages, and its allocated size. */ char grecs_meta1_msgbuf[128]; char *grecs_meta1_msg = grecs_meta1_msgbuf; YYSIZE_T grecs_meta1_msg_alloc = sizeof grecs_meta1_msgbuf; #endif #define YYPOPSTACK(N) (grecs_meta1_vsp -= (N), grecs_meta1_ssp -= (N), grecs_meta1_lsp -= (N)) /* The number of symbols on the RHS of the reduced rule. Keep to zero when no symbol should be popped. */ int grecs_meta1_len = 0; grecs_meta1_ssp = grecs_meta1_ss = grecs_meta1_ssa; grecs_meta1_vsp = grecs_meta1_vs = grecs_meta1_vsa; grecs_meta1_lsp = grecs_meta1_ls = grecs_meta1_lsa; grecs_meta1_stacksize = YYINITDEPTH; YYDPRINTF ((stderr, "Starting parse\n")); grecs_meta1_state = 0; grecs_meta1_errstatus = 0; grecs_meta1_nerrs = 0; grecs_meta1_char = YYEMPTY; /* Cause a token to be read. */ grecs_meta1_lsp[0] = grecs_meta1_lloc; goto grecs_meta1_setstate; /*------------------------------------------------------------. | grecs_meta1_newstate -- Push a new state, which is found in grecs_meta1_state. | `------------------------------------------------------------*/ grecs_meta1_newstate: /* In all cases, when you get here, the value and location stacks have just been pushed. So pushing a state here evens the stacks. */ grecs_meta1_ssp++; grecs_meta1_setstate: *grecs_meta1_ssp = grecs_meta1_state; if (grecs_meta1_ss + grecs_meta1_stacksize - 1 <= grecs_meta1_ssp) { /* Get the current used size of the three stacks, in elements. */ YYSIZE_T grecs_meta1_size = grecs_meta1_ssp - grecs_meta1_ss + 1; #ifdef grecs_meta1_overflow { /* Give user a chance to reallocate the stack. Use copies of these so that the &'s don't force the real ones into memory. */ YYSTYPE *grecs_meta1_vs1 = grecs_meta1_vs; grecs_meta1_type_int16 *grecs_meta1_ss1 = grecs_meta1_ss; YYLTYPE *grecs_meta1_ls1 = grecs_meta1_ls; /* Each stack pointer address is followed by the size of the data in use in that stack, in bytes. This used to be a conditional around just the two extra args, but that might be undefined if grecs_meta1_overflow is a macro. */ grecs_meta1_overflow (YY_("memory exhausted"), &grecs_meta1_ss1, grecs_meta1_size * sizeof (*grecs_meta1_ssp), &grecs_meta1_vs1, grecs_meta1_size * sizeof (*grecs_meta1_vsp), &grecs_meta1_ls1, grecs_meta1_size * sizeof (*grecs_meta1_lsp), &grecs_meta1_stacksize); grecs_meta1_ls = grecs_meta1_ls1; grecs_meta1_ss = grecs_meta1_ss1; grecs_meta1_vs = grecs_meta1_vs1; } #else /* no grecs_meta1_overflow */ # ifndef YYSTACK_RELOCATE goto grecs_meta1_exhaustedlab; # else /* Extend the stack our own way. */ if (YYMAXDEPTH <= grecs_meta1_stacksize) goto grecs_meta1_exhaustedlab; grecs_meta1_stacksize *= 2; if (YYMAXDEPTH < grecs_meta1_stacksize) grecs_meta1_stacksize = YYMAXDEPTH; { grecs_meta1_type_int16 *grecs_meta1_ss1 = grecs_meta1_ss; union grecs_meta1_alloc *grecs_meta1_ptr = (union grecs_meta1_alloc *) YYSTACK_ALLOC (YYSTACK_BYTES (grecs_meta1_stacksize)); if (! grecs_meta1_ptr) goto grecs_meta1_exhaustedlab; YYSTACK_RELOCATE (grecs_meta1_ss_alloc, grecs_meta1_ss); YYSTACK_RELOCATE (grecs_meta1_vs_alloc, grecs_meta1_vs); YYSTACK_RELOCATE (grecs_meta1_ls_alloc, grecs_meta1_ls); # undef YYSTACK_RELOCATE if (grecs_meta1_ss1 != grecs_meta1_ssa) YYSTACK_FREE (grecs_meta1_ss1); } # endif #endif /* no grecs_meta1_overflow */ grecs_meta1_ssp = grecs_meta1_ss + grecs_meta1_size - 1; grecs_meta1_vsp = grecs_meta1_vs + grecs_meta1_size - 1; grecs_meta1_lsp = grecs_meta1_ls + grecs_meta1_size - 1; YYDPRINTF ((stderr, "Stack size increased to %lu\n", (unsigned long int) grecs_meta1_stacksize)); if (grecs_meta1_ss + grecs_meta1_stacksize - 1 <= grecs_meta1_ssp) YYABORT; } YYDPRINTF ((stderr, "Entering state %d\n", grecs_meta1_state)); if (grecs_meta1_state == YYFINAL) YYACCEPT; goto grecs_meta1_backup; /*-----------. | grecs_meta1_backup. | `-----------*/ grecs_meta1_backup: /* Do appropriate processing given the current state. Read a lookahead token if we need one and don't already have one. */ /* First try to decide what to do without reference to lookahead token. */ grecs_meta1_n = grecs_meta1_pact[grecs_meta1_state]; if (grecs_meta1_pact_value_is_default (grecs_meta1_n)) goto grecs_meta1_default; /* Not known => get a lookahead token if don't already have one. */ /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ if (grecs_meta1_char == YYEMPTY) { YYDPRINTF ((stderr, "Reading a token: ")); grecs_meta1_char = YYLEX; } if (grecs_meta1_char <= YYEOF) { grecs_meta1_char = grecs_meta1_token = YYEOF; YYDPRINTF ((stderr, "Now at end of input.\n")); } else { grecs_meta1_token = YYTRANSLATE (grecs_meta1_char); YY_SYMBOL_PRINT ("Next token is", grecs_meta1_token, &grecs_meta1_lval, &grecs_meta1_lloc); } /* If the proper action on seeing token YYTOKEN is to reduce or to detect an error, take that action. */ grecs_meta1_n += grecs_meta1_token; if (grecs_meta1_n < 0 || YYLAST < grecs_meta1_n || grecs_meta1_check[grecs_meta1_n] != grecs_meta1_token) goto grecs_meta1_default; grecs_meta1_n = grecs_meta1_table[grecs_meta1_n]; if (grecs_meta1_n <= 0) { if (grecs_meta1_table_value_is_error (grecs_meta1_n)) goto grecs_meta1_errlab; grecs_meta1_n = -grecs_meta1_n; goto grecs_meta1_reduce; } /* Count tokens shifted since error; after three, turn off error status. */ if (grecs_meta1_errstatus) grecs_meta1_errstatus--; /* Shift the lookahead token. */ YY_SYMBOL_PRINT ("Shifting", grecs_meta1_token, &grecs_meta1_lval, &grecs_meta1_lloc); /* Discard the shifted token. */ grecs_meta1_char = YYEMPTY; grecs_meta1_state = grecs_meta1_n; YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++grecs_meta1_vsp = grecs_meta1_lval; YY_IGNORE_MAYBE_UNINITIALIZED_END *++grecs_meta1_lsp = grecs_meta1_lloc; goto grecs_meta1_newstate; /*-----------------------------------------------------------. | grecs_meta1_default -- do the default action for the current state. | `-----------------------------------------------------------*/ grecs_meta1_default: grecs_meta1_n = grecs_meta1_defact[grecs_meta1_state]; if (grecs_meta1_n == 0) goto grecs_meta1_errlab; goto grecs_meta1_reduce; /*-----------------------------. | grecs_meta1_reduce -- Do a reduction. | `-----------------------------*/ grecs_meta1_reduce: /* grecs_meta1_n is the number of a rule to reduce with. */ grecs_meta1_len = grecs_meta1_r2[grecs_meta1_n]; /* If YYLEN is nonzero, implement the default value of the action: `$$ = $1'. Otherwise, the following line sets YYVAL to garbage. This behavior is undocumented and Bison users should not rely upon it. Assigning to YYVAL unconditionally makes the parser a bit smaller, and it avoids a GCC warning that YYVAL may be used uninitialized. */ grecs_meta1_val = grecs_meta1_vsp[1-grecs_meta1_len]; /* Default location. */ YYLLOC_DEFAULT (grecs_meta1_loc, (grecs_meta1_lsp - grecs_meta1_len), grecs_meta1_len); YY_REDUCE_PRINT (grecs_meta1_n); switch (grecs_meta1_n) { case 2: /* Line 1792 of yacc.c */ #line 54 "meta1-gram.y" { parse_tree = grecs_node_create(grecs_node_root, &(grecs_meta1_lsp[(1) - (1)])); parse_tree->v.texttab = grecs_text_table(); grecs_node_bind(parse_tree, (grecs_meta1_vsp[(1) - (1)].node), 1); } break; case 3: /* Line 1792 of yacc.c */ #line 63 "meta1-gram.y" { (grecs_meta1_val.node) = NULL; } break; case 4: /* Line 1792 of yacc.c */ #line 67 "meta1-gram.y" { (grecs_meta1_val.node) = (grecs_meta1_vsp[(1) - (1)].node_list).head; } break; case 5: /* Line 1792 of yacc.c */ #line 73 "meta1-gram.y" { (grecs_meta1_val.node_list).head = (grecs_meta1_val.node_list).tail = (grecs_meta1_vsp[(1) - (1)].node); } break; case 6: /* Line 1792 of yacc.c */ #line 77 "meta1-gram.y" { grecs_node_bind((grecs_meta1_vsp[(1) - (2)].node_list).tail, (grecs_meta1_vsp[(2) - (2)].node), 0); } break; case 9: /* Line 1792 of yacc.c */ #line 87 "meta1-gram.y" { (grecs_meta1_val.node) = grecs_node_create_points(grecs_node_stmt, (grecs_meta1_lsp[(1) - (4)]).beg, (grecs_meta1_lsp[(3) - (4)]).end); (grecs_meta1_val.node)->ident = (grecs_meta1_vsp[(1) - (4)].string); (grecs_meta1_val.node)->idloc = (grecs_meta1_lsp[(1) - (4)]); (grecs_meta1_val.node)->v.value = (grecs_meta1_vsp[(3) - (4)].pvalue); } break; case 10: /* Line 1792 of yacc.c */ #line 97 "meta1-gram.y" { (grecs_meta1_val.node) = grecs_node_create_points(grecs_node_block, (grecs_meta1_lsp[(1) - (6)]).beg, (grecs_meta1_lsp[(5) - (6)]).end); (grecs_meta1_val.node)->ident = (grecs_meta1_vsp[(1) - (6)].string); (grecs_meta1_val.node)->idloc = (grecs_meta1_lsp[(1) - (6)]); (grecs_meta1_val.node)->v.value = (grecs_meta1_vsp[(2) - (6)].pvalue); grecs_node_bind((grecs_meta1_val.node), (grecs_meta1_vsp[(4) - (6)].node_list).head, 1); } break; case 11: /* Line 1792 of yacc.c */ #line 108 "meta1-gram.y" { (grecs_meta1_val.pvalue) = NULL; } break; case 12: /* Line 1792 of yacc.c */ #line 112 "meta1-gram.y" { (grecs_meta1_val.pvalue) = grecs_malloc(sizeof((grecs_meta1_val.pvalue)[0])); (grecs_meta1_val.pvalue)->type = GRECS_TYPE_STRING; (grecs_meta1_val.pvalue)->v.string = (grecs_meta1_vsp[(1) - (1)].string); } break; case 13: /* Line 1792 of yacc.c */ #line 120 "meta1-gram.y" { (grecs_meta1_val.pvalue) = grecs_malloc(sizeof((grecs_meta1_val.pvalue)[0])); (grecs_meta1_val.pvalue)->type = GRECS_TYPE_STRING; (grecs_meta1_val.pvalue)->locus = (grecs_meta1_lsp[(1) - (1)]); (grecs_meta1_val.pvalue)->v.string = (grecs_meta1_vsp[(1) - (1)].string); } break; case 14: /* Line 1792 of yacc.c */ #line 127 "meta1-gram.y" { (grecs_meta1_val.pvalue) = grecs_malloc(sizeof((grecs_meta1_val.pvalue)[0])); (grecs_meta1_val.pvalue)->type = GRECS_TYPE_LIST; (grecs_meta1_val.pvalue)->locus = (grecs_meta1_lsp[(1) - (1)]); (grecs_meta1_val.pvalue)->v.list = (grecs_meta1_vsp[(1) - (1)].list); } break; case 17: /* Line 1792 of yacc.c */ #line 140 "meta1-gram.y" { struct grecs_list_entry *ep; grecs_line_begin(); for (ep = (grecs_meta1_vsp[(1) - (1)].list)->head; ep; ep = ep->next) { grecs_line_add(ep->data, strlen(ep->data)); free(ep->data); ep->data = NULL; } (grecs_meta1_val.string) = grecs_line_finish(); grecs_list_free((grecs_meta1_vsp[(1) - (1)].list)); } break; case 18: /* Line 1792 of yacc.c */ #line 154 "meta1-gram.y" { (grecs_meta1_val.list) = grecs_list_create(); grecs_list_append((grecs_meta1_val.list), (grecs_meta1_vsp[(1) - (1)].string)); } break; case 19: /* Line 1792 of yacc.c */ #line 159 "meta1-gram.y" { grecs_list_append((grecs_meta1_vsp[(1) - (2)].list), (grecs_meta1_vsp[(2) - (2)].string)); (grecs_meta1_val.list) = (grecs_meta1_vsp[(1) - (2)].list); } break; case 20: /* Line 1792 of yacc.c */ #line 166 "meta1-gram.y" { (grecs_meta1_val.list) = (grecs_meta1_vsp[(2) - (3)].list); } break; case 21: /* Line 1792 of yacc.c */ #line 170 "meta1-gram.y" { (grecs_meta1_val.list) = (grecs_meta1_vsp[(2) - (4)].list); } break; case 22: /* Line 1792 of yacc.c */ #line 176 "meta1-gram.y" { (grecs_meta1_val.list) = grecs_value_list_create(); grecs_list_append((grecs_meta1_val.list), (grecs_meta1_vsp[(1) - (1)].pvalue)); } break; case 23: /* Line 1792 of yacc.c */ #line 181 "meta1-gram.y" { grecs_list_append((grecs_meta1_vsp[(1) - (3)].list), (grecs_meta1_vsp[(3) - (3)].pvalue)); (grecs_meta1_val.list) = (grecs_meta1_vsp[(1) - (3)].list); } break; /* Line 1792 of yacc.c */ #line 1692 "meta1-gram.c" default: break; } /* User semantic actions sometimes alter grecs_meta1_char, and that requires that grecs_meta1_token be updated with the new translation. We take the approach of translating immediately before every use of grecs_meta1_token. One alternative is translating here after every semantic action, but that translation would be missed if the semantic action invokes YYABORT, YYACCEPT, or YYERROR immediately after altering grecs_meta1_char or if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an incorrect destructor might then be invoked immediately. In the case of YYERROR or YYBACKUP, subsequent parser actions might lead to an incorrect destructor call or verbose syntax error message before the lookahead is translated. */ YY_SYMBOL_PRINT ("-> $$ =", grecs_meta1_r1[grecs_meta1_n], &grecs_meta1_val, &grecs_meta1_loc); YYPOPSTACK (grecs_meta1_len); grecs_meta1_len = 0; YY_STACK_PRINT (grecs_meta1_ss, grecs_meta1_ssp); *++grecs_meta1_vsp = grecs_meta1_val; *++grecs_meta1_lsp = grecs_meta1_loc; /* Now `shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ grecs_meta1_n = grecs_meta1_r1[grecs_meta1_n]; grecs_meta1_state = grecs_meta1_pgoto[grecs_meta1_n - YYNTOKENS] + *grecs_meta1_ssp; if (0 <= grecs_meta1_state && grecs_meta1_state <= YYLAST && grecs_meta1_check[grecs_meta1_state] == *grecs_meta1_ssp) grecs_meta1_state = grecs_meta1_table[grecs_meta1_state]; else grecs_meta1_state = grecs_meta1_defgoto[grecs_meta1_n - YYNTOKENS]; goto grecs_meta1_newstate; /*------------------------------------. | grecs_meta1_errlab -- here on detecting error | `------------------------------------*/ grecs_meta1_errlab: /* Make sure we have latest lookahead translation. See comments at user semantic actions for why this is necessary. */ grecs_meta1_token = grecs_meta1_char == YYEMPTY ? YYEMPTY : YYTRANSLATE (grecs_meta1_char); /* If not already recovering from an error, report this error. */ if (!grecs_meta1_errstatus) { ++grecs_meta1_nerrs; #if ! YYERROR_VERBOSE grecs_meta1_error (YY_("syntax error")); #else # define YYSYNTAX_ERROR grecs_meta1_syntax_error (&grecs_meta1_msg_alloc, &grecs_meta1_msg, \ grecs_meta1_ssp, grecs_meta1_token) { char const *grecs_meta1_msgp = YY_("syntax error"); int grecs_meta1_syntax_error_status; grecs_meta1_syntax_error_status = YYSYNTAX_ERROR; if (grecs_meta1_syntax_error_status == 0) grecs_meta1_msgp = grecs_meta1_msg; else if (grecs_meta1_syntax_error_status == 1) { if (grecs_meta1_msg != grecs_meta1_msgbuf) YYSTACK_FREE (grecs_meta1_msg); grecs_meta1_msg = (char *) YYSTACK_ALLOC (grecs_meta1_msg_alloc); if (!grecs_meta1_msg) { grecs_meta1_msg = grecs_meta1_msgbuf; grecs_meta1_msg_alloc = sizeof grecs_meta1_msgbuf; grecs_meta1_syntax_error_status = 2; } else { grecs_meta1_syntax_error_status = YYSYNTAX_ERROR; grecs_meta1_msgp = grecs_meta1_msg; } } grecs_meta1_error (grecs_meta1_msgp); if (grecs_meta1_syntax_error_status == 2) goto grecs_meta1_exhaustedlab; } # undef YYSYNTAX_ERROR #endif } grecs_meta1_error_range[1] = grecs_meta1_lloc; if (grecs_meta1_errstatus == 3) { /* If just tried and failed to reuse lookahead token after an error, discard it. */ if (grecs_meta1_char <= YYEOF) { /* Return failure if at end of input. */ if (grecs_meta1_char == YYEOF) YYABORT; } else { grecs_meta1_destruct ("Error: discarding", grecs_meta1_token, &grecs_meta1_lval, &grecs_meta1_lloc); grecs_meta1_char = YYEMPTY; } } /* Else will try to reuse lookahead token after shifting the error token. */ goto grecs_meta1_errlab1; /*---------------------------------------------------. | grecs_meta1_errorlab -- error raised explicitly by YYERROR. | `---------------------------------------------------*/ grecs_meta1_errorlab: /* Pacify compilers like GCC when the user code never invokes YYERROR and the label grecs_meta1_errorlab therefore never appears in user code. */ if (/*CONSTCOND*/ 0) goto grecs_meta1_errorlab; grecs_meta1_error_range[1] = grecs_meta1_lsp[1-grecs_meta1_len]; /* Do not reclaim the symbols of the rule which action triggered this YYERROR. */ YYPOPSTACK (grecs_meta1_len); grecs_meta1_len = 0; YY_STACK_PRINT (grecs_meta1_ss, grecs_meta1_ssp); grecs_meta1_state = *grecs_meta1_ssp; goto grecs_meta1_errlab1; /*-------------------------------------------------------------. | grecs_meta1_errlab1 -- common code for both syntax error and YYERROR. | `-------------------------------------------------------------*/ grecs_meta1_errlab1: grecs_meta1_errstatus = 3; /* Each real token shifted decrements this. */ for (;;) { grecs_meta1_n = grecs_meta1_pact[grecs_meta1_state]; if (!grecs_meta1_pact_value_is_default (grecs_meta1_n)) { grecs_meta1_n += YYTERROR; if (0 <= grecs_meta1_n && grecs_meta1_n <= YYLAST && grecs_meta1_check[grecs_meta1_n] == YYTERROR) { grecs_meta1_n = grecs_meta1_table[grecs_meta1_n]; if (0 < grecs_meta1_n) break; } } /* Pop the current state because it cannot handle the error token. */ if (grecs_meta1_ssp == grecs_meta1_ss) YYABORT; grecs_meta1_error_range[1] = *grecs_meta1_lsp; grecs_meta1_destruct ("Error: popping", grecs_meta1_stos[grecs_meta1_state], grecs_meta1_vsp, grecs_meta1_lsp); YYPOPSTACK (1); grecs_meta1_state = *grecs_meta1_ssp; YY_STACK_PRINT (grecs_meta1_ss, grecs_meta1_ssp); } YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++grecs_meta1_vsp = grecs_meta1_lval; YY_IGNORE_MAYBE_UNINITIALIZED_END grecs_meta1_error_range[2] = grecs_meta1_lloc; /* Using YYLLOC is tempting, but would change the location of the lookahead. YYLOC is available though. */ YYLLOC_DEFAULT (grecs_meta1_loc, grecs_meta1_error_range, 2); *++grecs_meta1_lsp = grecs_meta1_loc; /* Shift the error token. */ YY_SYMBOL_PRINT ("Shifting", grecs_meta1_stos[grecs_meta1_n], grecs_meta1_vsp, grecs_meta1_lsp); grecs_meta1_state = grecs_meta1_n; goto grecs_meta1_newstate; /*-------------------------------------. | grecs_meta1_acceptlab -- YYACCEPT comes here. | `-------------------------------------*/ grecs_meta1_acceptlab: grecs_meta1_result = 0; goto grecs_meta1_return; /*-----------------------------------. | grecs_meta1_abortlab -- YYABORT comes here. | `-----------------------------------*/ grecs_meta1_abortlab: grecs_meta1_result = 1; goto grecs_meta1_return; #if !defined grecs_meta1_overflow || YYERROR_VERBOSE /*-------------------------------------------------. | grecs_meta1_exhaustedlab -- memory exhaustion comes here. | `-------------------------------------------------*/ grecs_meta1_exhaustedlab: grecs_meta1_error (YY_("memory exhausted")); grecs_meta1_result = 2; /* Fall through. */ #endif grecs_meta1_return: if (grecs_meta1_char != YYEMPTY) { /* Make sure we have latest lookahead translation. See comments at user semantic actions for why this is necessary. */ grecs_meta1_token = YYTRANSLATE (grecs_meta1_char); grecs_meta1_destruct ("Cleanup: discarding lookahead", grecs_meta1_token, &grecs_meta1_lval, &grecs_meta1_lloc); } /* Do not reclaim the symbols of the rule which action triggered this YYABORT or YYACCEPT. */ YYPOPSTACK (grecs_meta1_len); YY_STACK_PRINT (grecs_meta1_ss, grecs_meta1_ssp); while (grecs_meta1_ssp != grecs_meta1_ss) { grecs_meta1_destruct ("Cleanup: popping", grecs_meta1_stos[*grecs_meta1_ssp], grecs_meta1_vsp, grecs_meta1_lsp); YYPOPSTACK (1); } #ifndef grecs_meta1_overflow if (grecs_meta1_ss != grecs_meta1_ssa) YYSTACK_FREE (grecs_meta1_ss); #endif #if YYERROR_VERBOSE if (grecs_meta1_msg != grecs_meta1_msgbuf) YYSTACK_FREE (grecs_meta1_msg); #endif /* Make sure YYID is used. */ return YYID (grecs_meta1_result); } /* Line 2055 of yacc.c */ #line 191 "meta1-gram.y" int grecs_meta1_error(char const *s) { grecs_error(&grecs_meta1_lloc, 0, "%s", s); return 0; } struct grecs_node * grecs_meta1_parser(const char *name, int traceflags) { int rc; FILE *fp; fp = fopen(name, "r"); if (!fp) { grecs_error(NULL, errno, _("Cannot open `%s'"), name); return NULL; } grecs_meta1_set_in(fp); grecs_meta1__flex_debug = traceflags & GRECS_TRACE_LEX; grecs_meta1_debug = traceflags & GRECS_TRACE_GRAM; parse_tree = NULL; grecs_line_acc_create(); rc = grecs_meta1_parse(); fclose(fp); if (grecs_error_count) rc = 1; grecs_line_acc_free(); if (rc) { grecs_tree_free(parse_tree); parse_tree = NULL; } return parse_tree; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/src/lookup.c���������������������������������������������������������������������0000644�0001750�0001750�00000031111�13244106110�016522� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* grecs - Gray's Extensible Configuration System Copyright (C) 2007-2016 Sergey Poznyakoff Grecs 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. Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include <string.h> #include <errno.h> #include <ctype.h> #include "grecs.h" #include "wordsplit.h" #include <fnmatch.h> #include <stdlib.h> static int _grecs_list_eq(struct grecs_value *a, struct grecs_value *b) { struct grecs_list_entry *aent, *bent; if (grecs_list_size(a->v.list) != grecs_list_size(b->v.list)) return 0; for (aent = a->v.list->head, bent = b->v.list->head;; aent = aent->next, bent = bent->next) { if (!aent) return bent == NULL; if (!bent) return 0; if (!grecs_value_eq(aent->data, bent->data)) return 0; } /*notreached*/ return 1; } static int _grecs_array_eq(struct grecs_value *a, struct grecs_value *b) { size_t i; if (a->v.arg.c != b->v.arg.c) return 0; for (i = 0; i < a->v.arg.c; i++) if (!grecs_value_eq(a->v.arg.v[i], b->v.arg.v[i])) return 0; return 1; } /* Return 1 if configuration value A equals B */ int grecs_value_eq(struct grecs_value *a, struct grecs_value *b) { if (a == 0 || b == 0) return a == b; if (a->type != b->type) return 0; switch (a->type) { case GRECS_TYPE_STRING: if (a->v.string == NULL) return b->v.string == NULL; return strcmp(a->v.string, b->v.string) == 0; case GRECS_TYPE_LIST: return _grecs_list_eq(a, b); case GRECS_TYPE_ARRAY: return _grecs_array_eq(a, b); } return 0; } static int _grecs_list_match(struct grecs_value *pat, struct grecs_value *b, int flags) { struct grecs_list_entry *aent, *bent; if (grecs_list_size(pat->v.list) != grecs_list_size(b->v.list)) return 0; for (aent = pat->v.list->head, bent = b->v.list->head;; aent = aent->next, bent = bent->next) { if (!aent) return bent == NULL; if (!bent) return 0; if (!grecs_value_match(aent->data, bent->data, flags)) return 0; } /*notreached*/ return 1; } static int _grecs_array_match(struct grecs_value *pat, struct grecs_value *b, int flags) { size_t i; if (pat->v.arg.c > b->v.arg.c) return 0; for (i = 0; i < pat->v.arg.c; i++) if (!grecs_value_match(pat->v.arg.v[i], b->v.arg.v[i], flags)) return 0; return 1; } int grecs_value_match(struct grecs_value *pat, struct grecs_value *b, int flags) { if (pat == 0 || b == 0) return pat == b; if (pat->type != b->type) { if (pat->type != GRECS_TYPE_STRING) return 0; switch (b->type) { case GRECS_TYPE_LIST: b = grecs_list_index(b->v.list, 0); break; case GRECS_TYPE_ARRAY: b = b->v.arg.v[0]; } } switch (pat->type) { case GRECS_TYPE_STRING: if (pat->v.string == NULL) return b->v.string == NULL; return fnmatch(pat->v.string, b->v.string, flags) == 0; case GRECS_TYPE_LIST: return _grecs_list_match(pat, b, flags); case GRECS_TYPE_ARRAY: return _grecs_array_match(pat, b, flags); } return 0; } struct grecs_match_buf { int argc; /* number of path components */ char **argv; /* array of path components */ int argi; /* Index of the current component */ struct grecs_value **labelv; /* Component labels */ struct grecs_node *root; /* Root node */ struct grecs_node *node; /* Last found node */ }; #define ISWC(c,w) ((c)[0] == (w) && (c)[1] == 0) grecs_match_buf_t grecs_match_buf_create(int argc, char **argv, struct grecs_value **labelv) { int i; struct grecs_match_buf *buf = grecs_zalloc(sizeof(*buf)); buf->argc = argc; buf->argv = argv; buf->labelv = labelv; /* Compress argv/argc by replacing contiguous sequences of *'s with a single *. */ for (i = 0; i < buf->argc; i++) { if (ISWC(buf->argv[i], '*')) { int j; for (j = i + 1; j < buf->argc && ISWC(buf->argv[j], '*'); j++) { free(buf->argv[j]); grecs_value_free_content(buf->labelv[i]); } j -= i; if (j > 1) { memmove(&buf->argv[i+1], &buf->argv[i+j], (buf->argc - (i + j)) * sizeof(buf->argv[0])); memmove(&buf->labelv[i+1], &buf->labelv[i+j], (buf->argc - (i + j)) * sizeof(buf->labelv[0])); buf->argc -= j - 1; } } } return buf; } size_t grecs_match_buf_get_args(grecs_match_buf_t buf, char ***argv) { if (argv) *argv = buf->argv; return buf->argc; } struct grecs_node * grecs_match_buf_get_node(grecs_match_buf_t buf) { return buf->node; } struct grecs_node * grecs_match_buf_get_root(grecs_match_buf_t buf) { return buf->root; } void grecs_match_buf_set_root(grecs_match_buf_t buf, struct grecs_node *root) { buf->root = root; } static void grecs_match_buf_free_contents(struct grecs_match_buf *buf) { size_t i; for (i = 0; i < buf->argc; i++) { free(buf->argv[i]); grecs_value_free(buf->labelv[i]); } free(buf->argv); free(buf->labelv); } void grecs_match_buf_free(struct grecs_match_buf *buf) { if (buf) { grecs_match_buf_free_contents(buf); free(buf); } } static struct grecs_value * parse_label(const char *str) { struct grecs_value *val = NULL; size_t i; struct wordsplit ws; size_t len = strlen (str); if (len > 1 && str[0] == '(' && str[len-1] == ')') { struct grecs_list *lst; ws.ws_delim = ","; if (wordsplit_len (str + 1, len - 2, &ws, WRDSF_DEFFLAGS|WRDSF_DELIM| WRDSF_WS)) { return NULL; } lst = grecs_value_list_create(); for (i = 0; i < ws.ws_wordc; i++) { struct grecs_value *p = grecs_zalloc(sizeof(*p)); p->type = GRECS_TYPE_STRING; p->v.string = ws.ws_wordv[i]; grecs_list_append(lst, p); } val = grecs_malloc(sizeof(*val)); val->type = GRECS_TYPE_LIST; val->v.list = lst; } else { if (wordsplit(str, &ws, WRDSF_DEFFLAGS)) return NULL; val = grecs_zalloc(sizeof(*val)); if (ws.ws_wordc == 1) { val->type = GRECS_TYPE_STRING; val->v.string = ws.ws_wordv[0]; } else { val->type = GRECS_TYPE_ARRAY; val->v.arg.c = ws.ws_wordc; val->v.arg.v = grecs_calloc(ws.ws_wordc, sizeof(val->v.arg.v[0])); for (i = 0; i < ws.ws_wordc; i++) { val->v.arg.v[i] = grecs_zalloc(sizeof(*val->v.arg.v[0])); val->v.arg.v[i]->type = GRECS_TYPE_STRING; val->v.arg.v[i]->v.string = ws.ws_wordv[i]; } } } ws.ws_wordc = 0; wordsplit_free(&ws); return val; } static int split_cfg_path(const char *path, int *pargc, char ***pargv, grecs_value_t ***pvalv) { int argc; char **argv; char *delim = "."; char static_delim[2] = { 0, 0 }; if (path[0] == '\\') { argv = calloc(2, sizeof (*argv)); if (!argv) return WRDSE_NOSPACE; argv[0] = strdup(path + 1); if (!argv[0]) { free(argv); return WRDSE_NOSPACE; } argv[1] = NULL; argc = 1; } else { int rc; struct wordsplit ws; if (strchr("./:;,^~", path[0])) { delim = static_delim; delim[0] = path[0]; path++; } ws.ws_delim = delim; rc = wordsplit(path, &ws, WRDSF_DELIM | WRDSF_DEFFLAGS); if (rc) return rc; argc = ws.ws_wordc; argv = ws.ws_wordv; ws.ws_wordc = 0; ws.ws_wordv = NULL; wordsplit_free(&ws); } *pargv = argv; *pargc = argc; if (pvalv) { int i; grecs_value_t **valv; valv = grecs_calloc(argc, sizeof(valv[0])); for (i = 0; i < argc; i++) { char *p = strchr(argv[i], '='); if (p) { *p++ = 0; valv[i] = parse_label(p); } } *pvalv = valv; } return 0; } enum grecs_tree_recurse_res grecs_node_exact_match(enum grecs_tree_recurse_op op, struct grecs_node *node, void *data) { int match = 0; struct grecs_match_buf *buf = data; if (node->type == grecs_node_root) return grecs_tree_recurse_ok; if (op == grecs_tree_recurse_post) { if (buf->argi == 0) return grecs_tree_recurse_stop; --buf->argi; return grecs_tree_recurse_ok; } if (strcmp(buf->argv[buf->argi], node->ident) == 0 && (!buf->labelv[buf->argi] || grecs_value_eq(buf->labelv[buf->argi], node->v.value))) { if (buf->argi + 1 == buf->argc) { buf->node = node; return grecs_tree_recurse_stop; } match = 1; } if (match) { if (op == grecs_tree_recurse_pre) { if (buf->argi + 1 == buf->argc) return grecs_tree_recurse_skip; buf->argi++; } return grecs_tree_recurse_ok; } return node->type == grecs_node_block ? grecs_tree_recurse_skip : grecs_tree_recurse_ok; } struct grecs_node * grecs_find_node(struct grecs_node *node, const char *path) { int rc; struct grecs_match_buf buf; if (strcmp(path, ".") == 0) return node; rc = split_cfg_path(path, &buf.argc, &buf.argv, &buf.labelv); if (rc || !buf.argc) return NULL; buf.argi = 0; buf.node = NULL; grecs_tree_recurse(node, grecs_node_exact_match, &buf); grecs_match_buf_free_contents(&buf); return buf.node; } static void fixup_loci(struct grecs_node *node, grecs_locus_t const *plocus, struct grecs_locus_point const *endp) { grecs_locus_t loc = *plocus; for (; node; node = node->down) { node->idloc = loc; node->locus = loc; if (endp) node->locus.end = *endp; } } struct grecs_node * grecs_node_from_path_locus(const char *path, const char *value, grecs_locus_t *plocus, grecs_locus_t *vallocus) { int rc; int i; int argc; char **argv; struct grecs_node *dn = NULL; rc = split_cfg_path(path, &argc, &argv, NULL); if (rc) return NULL; dn = grecs_node_create(grecs_node_stmt, NULL); dn->ident = argv[argc - 1]; if (value) { struct grecs_value *gval = parse_label(value); if (vallocus) gval->locus = *vallocus; dn->v.value = gval; } else dn->v.value = NULL; for (i = argc - 2; i >= 0; i--) { struct grecs_value *label = NULL; struct grecs_node *node; char *p, *q = argv[i]; do { p = strchr(q, '='); if (p && p > argv[i] && p[-1] != '\\') { *p++ = 0; label = parse_label(p); break; } else if (p) q = p + 1; else break; } while (*q); node = grecs_node_create(grecs_node_block, plocus); node->ident = argv[i]; if (label) node->v.value = label; node->down = dn; if (dn) dn->up = node; dn = node; } if (plocus) fixup_loci(dn, plocus, vallocus ? &vallocus->end : NULL); free(argv); return dn; } struct grecs_node * grecs_node_from_path(const char *path, const char *value) { return grecs_node_from_path_locus(path, value, NULL, NULL); } static int is_root(struct grecs_match_buf *buf, struct grecs_node *node) { return (buf->root == node || node->type == grecs_node_root); } static int grecs_match(struct grecs_match_buf *buf) { struct grecs_node *node; int wcard = 0; buf->argi = buf->argc - 1; node = buf->node; while (buf->argi >= 0) { if (ISWC(buf->argv[buf->argi], '*')) { wcard = 1; if (buf->argi-- == 0) return 1; continue; } if ((ISWC(buf->argv[buf->argi], '%') || strcmp(buf->argv[buf->argi], node->ident) == 0) /* FIXME: */ && (!buf->labelv[buf->argi] || grecs_value_match(buf->labelv[buf->argi], node->v.value, 0))) { wcard = 0; node = node->up; if (buf->argi-- == 0) return is_root(buf, node); } else if (!wcard) return 0; else node = node->up; if (is_root(buf, node)) return ISWC(buf->argv[buf->argi], '*'); } return 0; } struct grecs_node * grecs_match_next(struct grecs_match_buf *buf) { if (!buf) return NULL; while ((buf->node = grecs_next_node(buf->node))) if (grecs_match(buf)) break; return buf->node; } struct grecs_node * grecs_match_buf_first(struct grecs_match_buf *buf, struct grecs_node *tree) { struct grecs_node *node; buf->argi = 0; buf->root = tree; buf->node = grecs_tree_first_node(tree); if (!buf->node) return NULL; if (grecs_match(buf)) node = buf->node; else node = grecs_match_next(buf); return node; } struct grecs_node * grecs_match_first(struct grecs_node *tree, const char *pattern, struct grecs_match_buf **pbuf) { struct grecs_node *node; struct grecs_match_buf *buf; if (strcmp(pattern, ".") == 0) { *pbuf = NULL; return tree; } buf = grecs_zalloc(sizeof(*buf)); if (split_cfg_path(pattern, &buf->argc, &buf->argv, &buf->labelv)) { free(buf); return NULL; } node = grecs_match_buf_first(buf, tree); if (node) *pbuf = buf; else { grecs_match_buf_free(buf); *pbuf = NULL; } return node; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/src/lineacc.c��������������������������������������������������������������������0000644�0001750�0001750�00000003567�13244106110�016625� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* grecs - Gray's Extensible Configuration System Copyright (C) 2007-2016 Sergey Poznyakoff Grecs 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. Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include <grecs.h> #include <wordsplit.h> static struct grecs_txtacc *line_acc; void grecs_line_acc_create() { line_acc = grecs_txtacc_create(); } void grecs_line_acc_free() { grecs_txtacc_free(line_acc); line_acc = NULL; } void grecs_line_acc_grow_char(int c) { char t = c; grecs_txtacc_grow(line_acc, &t, 1); } int grecs_line_acc_grow_char_unescape(int c) { if (c != '\n') { int uc = wordsplit_c_unquote_char(c); grecs_line_acc_grow_char(uc ? uc : c); return !uc; } return 0; } void grecs_line_acc_grow(const char *text, size_t len) { grecs_txtacc_grow(line_acc, text, len); } /* Same, but unescapes the last character from text */ void grecs_line_acc_grow_unescape_last(char *text, size_t len, grecs_locus_t const *loc) { grecs_txtacc_grow(line_acc, text, len - 2); if (grecs_line_acc_grow_char_unescape(text[len - 1]) && loc) grecs_warning(loc, 0, _("unknown escape sequence: '\\%c'"), text[len - 1]); } void grecs_line_begin() { if (!line_acc) grecs_line_acc_create(); } char * grecs_line_finish() { grecs_line_acc_grow_char(0); return grecs_txtacc_finish(line_acc, 1); } �����������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/src/cidr.c�����������������������������������������������������������������������0000644�0001750�0001750�00000011112�13511403723�016140� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* grecs - Gray's Extensible Configuration System Copyright (C) 2007-2016 Sergey Poznyakoff Grecs 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. Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include <sys/types.h> #include <sys/socket.h> #include <sys/un.h> #include <netinet/in.h> #include <arpa/inet.h> #include <stdlib.h> #include <string.h> #include "grecs.h" static void uint32_to_bytes (unsigned char *bytes, uint32_t u) { int i; for (i = 0; i < 4; i++) { bytes[i] = u & 0xff; u >>= 8; } } int grecs_inaddr_to_bytes(int af, void *buf, unsigned char *bytes) { uint32_t u; switch (af) { case AF_INET: memcpy(&u, buf, sizeof u); uint32_to_bytes(bytes, u); return 4; case AF_INET6: memcpy(bytes, buf, 16); return 16; } return 0; } int grecs_sockaddr_to_bytes(unsigned char *bytes, struct sockaddr const *sa) { switch (sa->sa_family) { case AF_INET: uint32_to_bytes(bytes, ((struct sockaddr_in*)sa)->sin_addr.s_addr); return 4; case AF_INET6: memcpy(bytes, &((struct sockaddr_in6*)sa)->sin6_addr, 16); return 16; } return 0; } int grecs_sockaddr_to_cidr(struct grecs_cidr *cidr, const struct sockaddr *sa) { unsigned char address[GRECS_INADDR_BYTES]; int len; int i; len = grecs_sockaddr_to_bytes(address, sa); if (len == 0) return -1; cidr->family = sa->sa_family; cidr->len = len; memcpy(cidr->address, address, sizeof(cidr->address)); for (i = 0; i < GRECS_INADDR_BYTES; i++) cidr->netmask[i] = 0xff; return 0; } static void masklen_to_netmask(unsigned char *buf, size_t len, size_t masklen) { int i, cnt; cnt = masklen / 8; for (i = 0; i < cnt; i++) buf[i] = 0xff; if (i == GRECS_INADDR_BYTES) return; cnt = 8 - masklen % 8; buf[i++] = (0xff >> cnt) << cnt; for (; i < GRECS_INADDR_BYTES; i++) buf[i] = 0; } int grecs_str_to_cidr(struct grecs_cidr *pcidr, const char *str, grecs_locus_t const *locus) { int rc; char ipbuf[41]; struct grecs_cidr cidr; char *p; size_t len; union { struct in_addr in; struct in6_addr in6; } inaddr; p = strchr(str, '/'); if (p) len = p - str; else len = strlen(str); if (len > sizeof(ipbuf)) { grecs_error(locus, 0, _("invalid network mask: %s"), str); return -1; } memcpy(ipbuf, str, len); ipbuf[len] = 0; if (grecs_str_is_ipv4(ipbuf)) cidr.family = AF_INET; else if (grecs_str_is_ipv6(ipbuf)) cidr.family = AF_INET6; else { grecs_error(locus, 0, _("unrecognized address family: %s"), str); return -1; } rc = inet_pton(cidr.family, ipbuf, &inaddr); if (rc == -1) { grecs_error(locus, 0, _("unrecognized address family: %s"), str); return -1; } else if (rc != 1) { grecs_error(locus, 0, _("invalid network address: %s"), str); return -1; } cidr.len = grecs_inaddr_to_bytes(cidr.family, &inaddr, cidr.address); if (cidr.len == 0) { grecs_error(locus, 0, _("unrecognized address family: %s"), str); return -1; } if (p) { char *end; unsigned long masklen; p++; masklen = strtoul(p, &end, 10); if (*end == 0) masklen_to_netmask(cidr.netmask, cidr.len, masklen); else if ((cidr.family == AF_INET && grecs_str_is_ipv4(p)) || (cidr.family == AF_INET6 && grecs_str_is_ipv6(ipbuf))) { rc = inet_pton(cidr.family, p, &inaddr); if (rc != 1) { grecs_error(locus, 0, _("invalid network mask: %s"), str); return -1; } grecs_inaddr_to_bytes(cidr.family, &inaddr, cidr.netmask); } else { grecs_error(locus, 0, _("invalid network mask: %s"), str); return -1; } } else masklen_to_netmask(cidr.netmask, cidr.len, cidr.len * 8); memcpy(pcidr, &cidr, sizeof(*pcidr)); return 0; } int grecs_cidr_match(struct grecs_cidr *a, struct grecs_cidr *b) { int i; if (a->family != b->family) return 1; for (i = 0; i < a->len; i++) { if (a->address[i] != (b->address[i] & a->netmask[i])) return 1; } return 0; } int grecs_sockadd_cidr_match(struct sockaddr *sa, struct grecs_cidr *cidr) { struct grecs_cidr t; if (grecs_sockaddr_to_cidr(&t, sa)) return 1; return grecs_cidr_match(cidr, &t); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/src/grecs-gram.c�����������������������������������������������������������������0000644�0001750�0001750�00000205717�13244106145�017267� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A Bison parser, made by GNU Bison 2.7. */ /* Bison implementation for Yacc-like parsers in C Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* C LALR(1) parser skeleton written by Richard Stallman, by simplifying the original so-called "semantic" parser. */ /* All symbols defined below should begin with grecs_grecs_ or YY, to avoid infringing on user name space. This should be done even for local variables, as they might otherwise be expanded by user macros. There are some unavoidable exceptions within include files to define necessary library symbols; they are noted "INFRINGES ON USER NAME SPACE" below. */ /* Identify Bison output. */ #define YYBISON 1 /* Bison version. */ #define YYBISON_VERSION "2.7" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" /* Pure parsers. */ #define YYPURE 0 /* Push parsers. */ #define YYPUSH 0 /* Pull parsers. */ #define YYPULL 1 /* Copy the first part of user declarations. */ /* Line 371 of yacc.c */ #line 1 "grecs-gram.y" /* grecs - Gray's Extensible Configuration System Copyright (C) 2007-2016 Sergey Poznyakoff Grecs 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. Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include <grecs.h> #include <grecs-gram.h> #include <stdlib.h> #include <stdarg.h> #include <string.h> #include <errno.h> int grecs_grecs_lex(void); int grecs_grecs_error(char const *s); static struct grecs_node *parse_tree; /* Line 371 of yacc.c */ #line 101 "grecs-gram.c" # ifndef YY_NULL # if defined __cplusplus && 201103L <= __cplusplus # define YY_NULL nullptr # else # define YY_NULL 0 # endif # endif /* Enabling verbose error messages. */ #ifdef YYERROR_VERBOSE # undef YYERROR_VERBOSE # define YYERROR_VERBOSE 1 #else # define YYERROR_VERBOSE 1 #endif /* In a future release of Bison, this section will be replaced by #include "y.tab.h". */ #ifndef YY_YY_Y_TAB_H_INCLUDED # define YY_YY_Y_TAB_H_INCLUDED /* Enabling traces. */ #ifndef YYDEBUG # define YYDEBUG 1 #endif #if YYDEBUG extern int grecs_grecs_debug; #endif /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE /* Put the tokens into the symbol table, so that GDB and other debuggers know about them. */ enum grecs_grecs_tokentype { STRING = 258, QSTRING = 259, MSTRING = 260, IDENT = 261 }; #endif /* Tokens. */ #define STRING 258 #define QSTRING 259 #define MSTRING 260 #define IDENT 261 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE { /* Line 387 of yacc.c */ #line 37 "grecs-gram.y" char *string; grecs_value_t svalue, *pvalue; struct grecs_list *list; struct grecs_node *node; grecs_locus_t locus; struct { struct grecs_node *head, *tail; } node_list; /* Line 387 of yacc.c */ #line 166 "grecs-gram.c" } YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define grecs_grecs_stype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 #endif #if ! defined YYLTYPE && ! defined YYLTYPE_IS_DECLARED typedef struct YYLTYPE { int first_line; int first_column; int last_line; int last_column; } YYLTYPE; # define grecs_grecs_ltype YYLTYPE /* obsolescent; will be withdrawn */ # define YYLTYPE_IS_DECLARED 1 # define YYLTYPE_IS_TRIVIAL 1 #endif extern YYSTYPE grecs_grecs_lval; extern YYLTYPE grecs_grecs_lloc; #ifdef YYPARSE_PARAM #if defined __STDC__ || defined __cplusplus int grecs_grecs_parse (void *YYPARSE_PARAM); #else int grecs_grecs_parse (); #endif #else /* ! YYPARSE_PARAM */ #if defined __STDC__ || defined __cplusplus int grecs_grecs_parse (void); #else int grecs_grecs_parse (); #endif #endif /* ! YYPARSE_PARAM */ #endif /* !YY_YY_Y_TAB_H_INCLUDED */ /* Copy the second part of user declarations. */ /* Line 390 of yacc.c */ #line 207 "grecs-gram.c" #ifdef short # undef short #endif #ifdef YYTYPE_UINT8 typedef YYTYPE_UINT8 grecs_grecs_type_uint8; #else typedef unsigned char grecs_grecs_type_uint8; #endif #ifdef YYTYPE_INT8 typedef YYTYPE_INT8 grecs_grecs_type_int8; #elif (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) typedef signed char grecs_grecs_type_int8; #else typedef short int grecs_grecs_type_int8; #endif #ifdef YYTYPE_UINT16 typedef YYTYPE_UINT16 grecs_grecs_type_uint16; #else typedef unsigned short int grecs_grecs_type_uint16; #endif #ifdef YYTYPE_INT16 typedef YYTYPE_INT16 grecs_grecs_type_int16; #else typedef short int grecs_grecs_type_int16; #endif #ifndef YYSIZE_T # ifdef __SIZE_TYPE__ # define YYSIZE_T __SIZE_TYPE__ # elif defined size_t # define YYSIZE_T size_t # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include <stddef.h> /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # else # define YYSIZE_T unsigned int # endif #endif #define YYSIZE_MAXIMUM ((YYSIZE_T) -1) #ifndef YY_ # if defined YYENABLE_NLS && YYENABLE_NLS # if ENABLE_NLS # include <libintl.h> /* INFRINGES ON USER NAME SPACE */ # define YY_(Msgid) dgettext ("bison-runtime", Msgid) # endif # endif # ifndef YY_ # define YY_(Msgid) Msgid # endif #endif /* Suppress unused-variable warnings by "using" E. */ #if ! defined lint || defined __GNUC__ # define YYUSE(E) ((void) (E)) #else # define YYUSE(E) /* empty */ #endif /* Identity function, used to suppress warnings about constant conditions. */ #ifndef lint # define YYID(N) (N) #else #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static int YYID (int grecs_grecs_i) #else static int YYID (grecs_grecs_i) int grecs_grecs_i; #endif { return grecs_grecs_i; } #endif #if ! defined grecs_grecs_overflow || YYERROR_VERBOSE /* The parser invokes alloca or malloc; define the necessary symbols. */ # ifdef YYSTACK_USE_ALLOCA # if YYSTACK_USE_ALLOCA # ifdef __GNUC__ # define YYSTACK_ALLOC __builtin_alloca # elif defined __BUILTIN_VA_ARG_INCR # include <alloca.h> /* INFRINGES ON USER NAME SPACE */ # elif defined _AIX # define YYSTACK_ALLOC __alloca # elif defined _MSC_VER # include <malloc.h> /* INFRINGES ON USER NAME SPACE */ # define alloca _alloca # else # define YYSTACK_ALLOC alloca # if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ /* Use EXIT_SUCCESS as a witness for stdlib.h. */ # ifndef EXIT_SUCCESS # define EXIT_SUCCESS 0 # endif # endif # endif # endif # endif # ifdef YYSTACK_ALLOC /* Pacify GCC's `empty if-body' warning. */ # define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) # ifndef YYSTACK_ALLOC_MAXIMUM /* The OS might guarantee only one guard page at the bottom of the stack, and a page size can be as small as 4096 bytes. So we cannot safely invoke alloca (N) if N exceeds 4096. Use a slightly smaller number to allow for a few compiler-allocated temporary stack slots. */ # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ # endif # else # define YYSTACK_ALLOC YYMALLOC # define YYSTACK_FREE YYFREE # ifndef YYSTACK_ALLOC_MAXIMUM # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM # endif # if (defined __cplusplus && ! defined EXIT_SUCCESS \ && ! ((defined YYMALLOC || defined malloc) \ && (defined YYFREE || defined free))) # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ # ifndef EXIT_SUCCESS # define EXIT_SUCCESS 0 # endif # endif # ifndef YYMALLOC # define YYMALLOC malloc # if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ # endif # endif # ifndef YYFREE # define YYFREE free # if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) void free (void *); /* INFRINGES ON USER NAME SPACE */ # endif # endif # endif #endif /* ! defined grecs_grecs_overflow || YYERROR_VERBOSE */ #if (! defined grecs_grecs_overflow \ && (! defined __cplusplus \ || (defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL \ && defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) /* A type that is properly aligned for any stack member. */ union grecs_grecs_alloc { grecs_grecs_type_int16 grecs_grecs_ss_alloc; YYSTYPE grecs_grecs_vs_alloc; YYLTYPE grecs_grecs_ls_alloc; }; /* The size of the maximum gap between one aligned stack and the next. */ # define YYSTACK_GAP_MAXIMUM (sizeof (union grecs_grecs_alloc) - 1) /* The size of an array large to enough to hold all stacks, each with N elements. */ # define YYSTACK_BYTES(N) \ ((N) * (sizeof (grecs_grecs_type_int16) + sizeof (YYSTYPE) + sizeof (YYLTYPE)) \ + 2 * YYSTACK_GAP_MAXIMUM) # define YYCOPY_NEEDED 1 /* Relocate STACK from its old location to the new one. The local variables YYSIZE and YYSTACKSIZE give the old and new number of elements in the stack, and YYPTR gives the new location of the stack. Advance YYPTR to a properly aligned location for the next stack. */ # define YYSTACK_RELOCATE(Stack_alloc, Stack) \ do \ { \ YYSIZE_T grecs_grecs_newbytes; \ YYCOPY (&grecs_grecs_ptr->Stack_alloc, Stack, grecs_grecs_size); \ Stack = &grecs_grecs_ptr->Stack_alloc; \ grecs_grecs_newbytes = grecs_grecs_stacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ grecs_grecs_ptr += grecs_grecs_newbytes / sizeof (*grecs_grecs_ptr); \ } \ while (YYID (0)) #endif #if defined YYCOPY_NEEDED && YYCOPY_NEEDED /* Copy COUNT objects from SRC to DST. The source and destination do not overlap. */ # ifndef YYCOPY # if defined __GNUC__ && 1 < __GNUC__ # define YYCOPY(Dst, Src, Count) \ __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src))) # else # define YYCOPY(Dst, Src, Count) \ do \ { \ YYSIZE_T grecs_grecs_i; \ for (grecs_grecs_i = 0; grecs_grecs_i < (Count); grecs_grecs_i++) \ (Dst)[grecs_grecs_i] = (Src)[grecs_grecs_i]; \ } \ while (YYID (0)) # endif # endif #endif /* !YYCOPY_NEEDED */ /* YYFINAL -- State number of the termination state. */ #define YYFINAL 22 /* YYLAST -- Last index in YYTABLE. */ #define YYLAST 39 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 13 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 17 /* YYNRULES -- Number of rules. */ #define YYNRULES 32 /* YYNRULES -- Number of states. */ #define YYNSTATES 39 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 #define YYMAXUTOK 261 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? grecs_grecs_translate[YYX] : YYUNDEFTOK) /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ static const grecs_grecs_type_uint8 grecs_grecs_translate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 10, 11, 2, 2, 12, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 7, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 8, 2, 9, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, 5, 6 }; #if YYDEBUG /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in YYRHS. */ static const grecs_grecs_type_uint8 grecs_grecs_prhs[] = { 0, 0, 3, 5, 6, 8, 10, 13, 15, 17, 21, 24, 31, 32, 34, 36, 38, 41, 43, 45, 47, 49, 51, 53, 55, 57, 60, 63, 67, 72, 74, 78, 79 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ static const grecs_grecs_type_int8 grecs_grecs_rhs[] = { 14, 0, -1, 15, -1, -1, 16, -1, 17, -1, 16, 17, -1, 18, -1, 19, -1, 6, 21, 7, -1, 6, 7, -1, 6, 20, 8, 16, 9, 29, -1, -1, 21, -1, 22, -1, 23, -1, 22, 23, -1, 24, -1, 27, -1, 5, -1, 3, -1, 6, -1, 25, -1, 26, -1, 4, -1, 26, 4, -1, 10, 11, -1, 10, 28, 11, -1, 10, 28, 12, 11, -1, 23, -1, 28, 12, 23, -1, -1, 7, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const grecs_grecs_type_uint8 grecs_grecs_rline[] = { 0, 57, 57, 67, 70, 76, 80, 86, 87, 90, 98, 107, 119, 122, 125, 149, 154, 160, 166, 172, 180, 181, 182, 185, 200, 205, 212, 216, 220, 226, 231, 238, 239 }; #endif #if YYDEBUG || YYERROR_VERBOSE || 1 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char *const grecs_grecs_tname[] = { "$end", "error", "$undefined", "STRING", "QSTRING", "MSTRING", "IDENT", "';'", "'{'", "'}'", "'('", "')'", "','", "$accept", "input", "maybe_stmtlist", "stmtlist", "stmt", "simple", "block", "tag", "vallist", "vlist", "value", "string", "slist", "slist0", "list", "values", "opt_sc", YY_NULL }; #endif # ifdef YYPRINT /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to token YYLEX-NUM. */ static const grecs_grecs_type_uint16 grecs_grecs_toknum[] = { 0, 256, 257, 258, 259, 260, 261, 59, 123, 125, 40, 41, 44 }; # endif /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const grecs_grecs_type_uint8 grecs_grecs_r1[] = { 0, 13, 14, 15, 15, 16, 16, 17, 17, 18, 18, 19, 20, 20, 21, 22, 22, 23, 23, 23, 24, 24, 24, 25, 26, 26, 27, 27, 27, 28, 28, 29, 29 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ static const grecs_grecs_type_uint8 grecs_grecs_r2[] = { 0, 2, 1, 0, 1, 1, 2, 1, 1, 3, 2, 6, 0, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 4, 1, 3, 0, 1 }; /* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM. Performed when YYTABLE doesn't specify something else to do. Zero means the default is an error. */ static const grecs_grecs_type_uint8 grecs_grecs_defact[] = { 3, 12, 0, 2, 4, 5, 7, 8, 20, 24, 19, 21, 10, 0, 0, 13, 14, 15, 17, 22, 23, 18, 1, 6, 26, 29, 0, 0, 9, 16, 25, 27, 0, 0, 28, 30, 31, 32, 11 }; /* YYDEFGOTO[NTERM-NUM]. */ static const grecs_grecs_type_int8 grecs_grecs_defgoto[] = { -1, 2, 3, 4, 5, 6, 7, 14, 15, 16, 17, 18, 19, 20, 21, 26, 38 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ #define YYPACT_NINF -13 static const grecs_grecs_type_int8 grecs_grecs_pact[] = { 3, 20, 10, -13, 3, -13, -13, -13, -13, -13, -13, -13, -13, 2, 27, 4, 28, -13, -13, -13, 14, -13, -13, -13, -13, -13, -9, 3, -13, -13, -13, -13, 11, 30, -13, -13, 12, -13, -13 }; /* YYPGOTO[NTERM-NUM]. */ static const grecs_grecs_type_int8 grecs_grecs_pgoto[] = { -13, -13, -13, 1, -4, -13, -13, -13, -13, -13, -12, -13, -13, -13, -13, -13, -13 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule which number is the opposite. If YYTABLE_NINF, syntax error. */ #define YYTABLE_NINF -1 static const grecs_grecs_type_uint8 grecs_grecs_table[] = { 23, 25, 31, 32, 29, 8, 9, 10, 11, 1, 22, 28, 13, 24, 8, 9, 10, 11, 30, 37, 35, 13, 34, 8, 9, 10, 11, 12, 33, 23, 13, 8, 9, 10, 11, 27, 1, 0, 13, 36 }; #define grecs_grecs_pact_value_is_default(Yystate) \ (!!((Yystate) == (-13))) #define grecs_grecs_table_value_is_error(Yytable_value) \ YYID (0) static const grecs_grecs_type_int8 grecs_grecs_check[] = { 4, 13, 11, 12, 16, 3, 4, 5, 6, 6, 0, 7, 10, 11, 3, 4, 5, 6, 4, 7, 32, 10, 11, 3, 4, 5, 6, 7, 27, 33, 10, 3, 4, 5, 6, 8, 6, -1, 10, 9 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const grecs_grecs_type_uint8 grecs_grecs_stos[] = { 0, 6, 14, 15, 16, 17, 18, 19, 3, 4, 5, 6, 7, 10, 20, 21, 22, 23, 24, 25, 26, 27, 0, 17, 11, 23, 28, 8, 7, 23, 4, 11, 12, 16, 11, 23, 9, 7, 29 }; #define grecs_grecs_errok (grecs_grecs_errstatus = 0) #define grecs_grecs_clearin (grecs_grecs_char = YYEMPTY) #define YYEMPTY (-2) #define YYEOF 0 #define YYACCEPT goto grecs_grecs_acceptlab #define YYABORT goto grecs_grecs_abortlab #define YYERROR goto grecs_grecs_errorlab /* Like YYERROR except do call grecs_grecs_error. This remains here temporarily to ease the transition to the new meaning of YYERROR, for GCC. Once GCC version 2 has supplanted version 1, this can go. However, YYFAIL appears to be in use. Nevertheless, it is formally deprecated in Bison 2.4.2's NEWS entry, where a plan to phase it out is discussed. */ #define YYFAIL goto grecs_grecs_errlab #if defined YYFAIL /* This is here to suppress warnings from the GCC cpp's -Wunused-macros. Normally we don't worry about that warning, but some users do, and we want to make it easy for users to remove YYFAIL uses, which will produce warnings from Bison 2.5. */ #endif #define YYRECOVERING() (!!grecs_grecs_errstatus) #define YYBACKUP(Token, Value) \ do \ if (grecs_grecs_char == YYEMPTY) \ { \ grecs_grecs_char = (Token); \ grecs_grecs_lval = (Value); \ YYPOPSTACK (grecs_grecs_len); \ grecs_grecs_state = *grecs_grecs_ssp; \ goto grecs_grecs_backup; \ } \ else \ { \ grecs_grecs_error (YY_("syntax error: cannot back up")); \ YYERROR; \ } \ while (YYID (0)) /* Error token number */ #define YYTERROR 1 #define YYERRCODE 256 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. If N is 0, then set CURRENT to the empty location which ends the previous symbol: RHS[0] (always defined). */ #ifndef YYLLOC_DEFAULT # define YYLLOC_DEFAULT(Current, Rhs, N) \ do \ if (YYID (N)) \ { \ (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ } \ else \ { \ (Current).first_line = (Current).last_line = \ YYRHSLOC (Rhs, 0).last_line; \ (Current).first_column = (Current).last_column = \ YYRHSLOC (Rhs, 0).last_column; \ } \ while (YYID (0)) #endif #define YYRHSLOC(Rhs, K) ((Rhs)[K]) /* YY_LOCATION_PRINT -- Print the location on the stream. This macro was not mandated originally: define only if we know we won't break user code: when these are the locations we know. */ #ifndef YY_LOCATION_PRINT # if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL /* Print *YYLOCP on YYO. Private, do not rely on its existence. */ __attribute__((__unused__)) #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static unsigned grecs_grecs__location_print_ (FILE *grecs_grecs_o, YYLTYPE const * const grecs_grecs_locp) #else static unsigned grecs_grecs__location_print_ (grecs_grecs_o, grecs_grecs_locp) FILE *grecs_grecs_o; YYLTYPE const * const grecs_grecs_locp; #endif { unsigned res = 0; int end_col = 0 != grecs_grecs_locp->last_column ? grecs_grecs_locp->last_column - 1 : 0; if (0 <= grecs_grecs_locp->first_line) { res += fprintf (grecs_grecs_o, "%d", grecs_grecs_locp->first_line); if (0 <= grecs_grecs_locp->first_column) res += fprintf (grecs_grecs_o, ".%d", grecs_grecs_locp->first_column); } if (0 <= grecs_grecs_locp->last_line) { if (grecs_grecs_locp->first_line < grecs_grecs_locp->last_line) { res += fprintf (grecs_grecs_o, "-%d", grecs_grecs_locp->last_line); if (0 <= end_col) res += fprintf (grecs_grecs_o, ".%d", end_col); } else if (0 <= end_col && grecs_grecs_locp->first_column < end_col) res += fprintf (grecs_grecs_o, "-%d", end_col); } return res; } # define YY_LOCATION_PRINT(File, Loc) \ grecs_grecs__location_print_ (File, &(Loc)) # else # define YY_LOCATION_PRINT(File, Loc) ((void) 0) # endif #endif /* YYLEX -- calling `grecs_grecs_lex' with the right arguments. */ #ifdef YYLEX_PARAM # define YYLEX grecs_grecs_lex (YYLEX_PARAM) #else # define YYLEX grecs_grecs_lex () #endif /* Enable debugging if requested. */ #if YYDEBUG # ifndef YYFPRINTF # include <stdio.h> /* INFRINGES ON USER NAME SPACE */ # define YYFPRINTF fprintf # endif # define YYDPRINTF(Args) \ do { \ if (grecs_grecs_debug) \ YYFPRINTF Args; \ } while (YYID (0)) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ do { \ if (grecs_grecs_debug) \ { \ YYFPRINTF (stderr, "%s ", Title); \ grecs_grecs__symbol_print (stderr, \ Type, Value, Location); \ YYFPRINTF (stderr, "\n"); \ } \ } while (YYID (0)) /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ /*ARGSUSED*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void grecs_grecs__symbol_value_print (FILE *grecs_grecs_output, int grecs_grecs_type, YYSTYPE const * const grecs_grecs_valuep, YYLTYPE const * const grecs_grecs_locationp) #else static void grecs_grecs__symbol_value_print (grecs_grecs_output, grecs_grecs_type, grecs_grecs_valuep, grecs_grecs_locationp) FILE *grecs_grecs_output; int grecs_grecs_type; YYSTYPE const * const grecs_grecs_valuep; YYLTYPE const * const grecs_grecs_locationp; #endif { FILE *grecs_grecs_o = grecs_grecs_output; YYUSE (grecs_grecs_o); if (!grecs_grecs_valuep) return; YYUSE (grecs_grecs_locationp); # ifdef YYPRINT if (grecs_grecs_type < YYNTOKENS) YYPRINT (grecs_grecs_output, grecs_grecs_toknum[grecs_grecs_type], *grecs_grecs_valuep); # else YYUSE (grecs_grecs_output); # endif switch (grecs_grecs_type) { default: break; } } /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void grecs_grecs__symbol_print (FILE *grecs_grecs_output, int grecs_grecs_type, YYSTYPE const * const grecs_grecs_valuep, YYLTYPE const * const grecs_grecs_locationp) #else static void grecs_grecs__symbol_print (grecs_grecs_output, grecs_grecs_type, grecs_grecs_valuep, grecs_grecs_locationp) FILE *grecs_grecs_output; int grecs_grecs_type; YYSTYPE const * const grecs_grecs_valuep; YYLTYPE const * const grecs_grecs_locationp; #endif { if (grecs_grecs_type < YYNTOKENS) YYFPRINTF (grecs_grecs_output, "token %s (", grecs_grecs_tname[grecs_grecs_type]); else YYFPRINTF (grecs_grecs_output, "nterm %s (", grecs_grecs_tname[grecs_grecs_type]); YY_LOCATION_PRINT (grecs_grecs_output, *grecs_grecs_locationp); YYFPRINTF (grecs_grecs_output, ": "); grecs_grecs__symbol_value_print (grecs_grecs_output, grecs_grecs_type, grecs_grecs_valuep, grecs_grecs_locationp); YYFPRINTF (grecs_grecs_output, ")"); } /*------------------------------------------------------------------. | grecs_grecs__stack_print -- Print the state stack from its BOTTOM up to its | | TOP (included). | `------------------------------------------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void grecs_grecs__stack_print (grecs_grecs_type_int16 *grecs_grecs_bottom, grecs_grecs_type_int16 *grecs_grecs_top) #else static void grecs_grecs__stack_print (grecs_grecs_bottom, grecs_grecs_top) grecs_grecs_type_int16 *grecs_grecs_bottom; grecs_grecs_type_int16 *grecs_grecs_top; #endif { YYFPRINTF (stderr, "Stack now"); for (; grecs_grecs_bottom <= grecs_grecs_top; grecs_grecs_bottom++) { int grecs_grecs_bot = *grecs_grecs_bottom; YYFPRINTF (stderr, " %d", grecs_grecs_bot); } YYFPRINTF (stderr, "\n"); } # define YY_STACK_PRINT(Bottom, Top) \ do { \ if (grecs_grecs_debug) \ grecs_grecs__stack_print ((Bottom), (Top)); \ } while (YYID (0)) /*------------------------------------------------. | Report that the YYRULE is going to be reduced. | `------------------------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void grecs_grecs__reduce_print (YYSTYPE *grecs_grecs_vsp, YYLTYPE *grecs_grecs_lsp, int grecs_grecs_rule) #else static void grecs_grecs__reduce_print (grecs_grecs_vsp, grecs_grecs_lsp, grecs_grecs_rule) YYSTYPE *grecs_grecs_vsp; YYLTYPE *grecs_grecs_lsp; int grecs_grecs_rule; #endif { int grecs_grecs_nrhs = grecs_grecs_r2[grecs_grecs_rule]; int grecs_grecs_i; unsigned long int grecs_grecs_lno = grecs_grecs_rline[grecs_grecs_rule]; YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", grecs_grecs_rule - 1, grecs_grecs_lno); /* The symbols being reduced. */ for (grecs_grecs_i = 0; grecs_grecs_i < grecs_grecs_nrhs; grecs_grecs_i++) { YYFPRINTF (stderr, " $%d = ", grecs_grecs_i + 1); grecs_grecs__symbol_print (stderr, grecs_grecs_rhs[grecs_grecs_prhs[grecs_grecs_rule] + grecs_grecs_i], &(grecs_grecs_vsp[(grecs_grecs_i + 1) - (grecs_grecs_nrhs)]) , &(grecs_grecs_lsp[(grecs_grecs_i + 1) - (grecs_grecs_nrhs)]) ); YYFPRINTF (stderr, "\n"); } } # define YY_REDUCE_PRINT(Rule) \ do { \ if (grecs_grecs_debug) \ grecs_grecs__reduce_print (grecs_grecs_vsp, grecs_grecs_lsp, Rule); \ } while (YYID (0)) /* Nonzero means print parse trace. It is left uninitialized so that multiple parsers can coexist. */ int grecs_grecs_debug; #else /* !YYDEBUG */ # define YYDPRINTF(Args) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) # define YY_STACK_PRINT(Bottom, Top) # define YY_REDUCE_PRINT(Rule) #endif /* !YYDEBUG */ /* YYINITDEPTH -- initial size of the parser's stacks. */ #ifndef YYINITDEPTH # define YYINITDEPTH 200 #endif /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only if the built-in stack extension method is used). Do not make this value too large; the results are undefined if YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) evaluated with infinite-precision integer arithmetic. */ #ifndef YYMAXDEPTH # define YYMAXDEPTH 10000 #endif #if YYERROR_VERBOSE # ifndef grecs_grecs_strlen # if defined __GLIBC__ && defined _STRING_H # define grecs_grecs_strlen strlen # else /* Return the length of YYSTR. */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static YYSIZE_T grecs_grecs_strlen (const char *grecs_grecs_str) #else static YYSIZE_T grecs_grecs_strlen (grecs_grecs_str) const char *grecs_grecs_str; #endif { YYSIZE_T grecs_grecs_len; for (grecs_grecs_len = 0; grecs_grecs_str[grecs_grecs_len]; grecs_grecs_len++) continue; return grecs_grecs_len; } # endif # endif # ifndef grecs_grecs_stpcpy # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE # define grecs_grecs_stpcpy stpcpy # else /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in YYDEST. */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static char * grecs_grecs_stpcpy (char *grecs_grecs_dest, const char *grecs_grecs_src) #else static char * grecs_grecs_stpcpy (grecs_grecs_dest, grecs_grecs_src) char *grecs_grecs_dest; const char *grecs_grecs_src; #endif { char *grecs_grecs_d = grecs_grecs_dest; const char *grecs_grecs_s = grecs_grecs_src; while ((*grecs_grecs_d++ = *grecs_grecs_s++) != '\0') continue; return grecs_grecs_d - 1; } # endif # endif # ifndef grecs_grecs_tnamerr /* Copy to YYRES the contents of YYSTR after stripping away unnecessary quotes and backslashes, so that it's suitable for grecs_grecs_error. The heuristic is that double-quoting is unnecessary unless the string contains an apostrophe, a comma, or backslash (other than backslash-backslash). YYSTR is taken from grecs_grecs_tname. If YYRES is null, do not copy; instead, return the length of what the result would have been. */ static YYSIZE_T grecs_grecs_tnamerr (char *grecs_grecs_res, const char *grecs_grecs_str) { if (*grecs_grecs_str == '"') { YYSIZE_T grecs_grecs_n = 0; char const *grecs_grecs_p = grecs_grecs_str; for (;;) switch (*++grecs_grecs_p) { case '\'': case ',': goto do_not_strip_quotes; case '\\': if (*++grecs_grecs_p != '\\') goto do_not_strip_quotes; /* Fall through. */ default: if (grecs_grecs_res) grecs_grecs_res[grecs_grecs_n] = *grecs_grecs_p; grecs_grecs_n++; break; case '"': if (grecs_grecs_res) grecs_grecs_res[grecs_grecs_n] = '\0'; return grecs_grecs_n; } do_not_strip_quotes: ; } if (! grecs_grecs_res) return grecs_grecs_strlen (grecs_grecs_str); return grecs_grecs_stpcpy (grecs_grecs_res, grecs_grecs_str) - grecs_grecs_res; } # endif /* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message about the unexpected token YYTOKEN for the state stack whose top is YYSSP. Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is not large enough to hold the message. In that case, also set *YYMSG_ALLOC to the required number of bytes. Return 2 if the required number of bytes is too large to store. */ static int grecs_grecs_syntax_error (YYSIZE_T *grecs_grecs_msg_alloc, char **grecs_grecs_msg, grecs_grecs_type_int16 *grecs_grecs_ssp, int grecs_grecs_token) { YYSIZE_T grecs_grecs_size0 = grecs_grecs_tnamerr (YY_NULL, grecs_grecs_tname[grecs_grecs_token]); YYSIZE_T grecs_grecs_size = grecs_grecs_size0; enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; /* Internationalized format string. */ const char *grecs_grecs_format = YY_NULL; /* Arguments of grecs_grecs_format. */ char const *grecs_grecs_arg[YYERROR_VERBOSE_ARGS_MAXIMUM]; /* Number of reported tokens (one for the "unexpected", one per "expected"). */ int grecs_grecs_count = 0; /* There are many possibilities here to consider: - Assume YYFAIL is not used. It's too flawed to consider. See <http://lists.gnu.org/archive/html/bison-patches/2009-12/msg00024.html> for details. YYERROR is fine as it does not invoke this function. - If this state is a consistent state with a default action, then the only way this function was invoked is if the default action is an error action. In that case, don't check for expected tokens because there are none. - The only way there can be no lookahead present (in grecs_grecs_char) is if this state is a consistent state with a default action. Thus, detecting the absence of a lookahead is sufficient to determine that there is no unexpected or expected token to report. In that case, just report a simple "syntax error". - Don't assume there isn't a lookahead just because this state is a consistent state with a default action. There might have been a previous inconsistent state, consistent state with a non-default action, or user semantic action that manipulated grecs_grecs_char. - Of course, the expected token list depends on states to have correct lookahead information, and it depends on the parser not to perform extra reductions after fetching a lookahead from the scanner and before detecting a syntax error. Thus, state merging (from LALR or IELR) and default reductions corrupt the expected token list. However, the list is correct for canonical LR with one exception: it will still contain any token that will not be accepted due to an error action in a later state. */ if (grecs_grecs_token != YYEMPTY) { int grecs_grecs_n = grecs_grecs_pact[*grecs_grecs_ssp]; grecs_grecs_arg[grecs_grecs_count++] = grecs_grecs_tname[grecs_grecs_token]; if (!grecs_grecs_pact_value_is_default (grecs_grecs_n)) { /* Start YYX at -YYN if negative to avoid negative indexes in YYCHECK. In other words, skip the first -YYN actions for this state because they are default actions. */ int grecs_grecs_xbegin = grecs_grecs_n < 0 ? -grecs_grecs_n : 0; /* Stay within bounds of both grecs_grecs_check and grecs_grecs_tname. */ int grecs_grecs_checklim = YYLAST - grecs_grecs_n + 1; int grecs_grecs_xend = grecs_grecs_checklim < YYNTOKENS ? grecs_grecs_checklim : YYNTOKENS; int grecs_grecs_x; for (grecs_grecs_x = grecs_grecs_xbegin; grecs_grecs_x < grecs_grecs_xend; ++grecs_grecs_x) if (grecs_grecs_check[grecs_grecs_x + grecs_grecs_n] == grecs_grecs_x && grecs_grecs_x != YYTERROR && !grecs_grecs_table_value_is_error (grecs_grecs_table[grecs_grecs_x + grecs_grecs_n])) { if (grecs_grecs_count == YYERROR_VERBOSE_ARGS_MAXIMUM) { grecs_grecs_count = 1; grecs_grecs_size = grecs_grecs_size0; break; } grecs_grecs_arg[grecs_grecs_count++] = grecs_grecs_tname[grecs_grecs_x]; { YYSIZE_T grecs_grecs_size1 = grecs_grecs_size + grecs_grecs_tnamerr (YY_NULL, grecs_grecs_tname[grecs_grecs_x]); if (! (grecs_grecs_size <= grecs_grecs_size1 && grecs_grecs_size1 <= YYSTACK_ALLOC_MAXIMUM)) return 2; grecs_grecs_size = grecs_grecs_size1; } } } } switch (grecs_grecs_count) { # define YYCASE_(N, S) \ case N: \ grecs_grecs_format = S; \ break YYCASE_(0, YY_("syntax error")); YYCASE_(1, YY_("syntax error, unexpected %s")); YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s")); YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s")); YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s")); # undef YYCASE_ } { YYSIZE_T grecs_grecs_size1 = grecs_grecs_size + grecs_grecs_strlen (grecs_grecs_format); if (! (grecs_grecs_size <= grecs_grecs_size1 && grecs_grecs_size1 <= YYSTACK_ALLOC_MAXIMUM)) return 2; grecs_grecs_size = grecs_grecs_size1; } if (*grecs_grecs_msg_alloc < grecs_grecs_size) { *grecs_grecs_msg_alloc = 2 * grecs_grecs_size; if (! (grecs_grecs_size <= *grecs_grecs_msg_alloc && *grecs_grecs_msg_alloc <= YYSTACK_ALLOC_MAXIMUM)) *grecs_grecs_msg_alloc = YYSTACK_ALLOC_MAXIMUM; return 1; } /* Avoid sprintf, as that infringes on the user's name space. Don't have undefined behavior even if the translation produced a string with the wrong number of "%s"s. */ { char *grecs_grecs_p = *grecs_grecs_msg; int grecs_grecs_i = 0; while ((*grecs_grecs_p = *grecs_grecs_format) != '\0') if (*grecs_grecs_p == '%' && grecs_grecs_format[1] == 's' && grecs_grecs_i < grecs_grecs_count) { grecs_grecs_p += grecs_grecs_tnamerr (grecs_grecs_p, grecs_grecs_arg[grecs_grecs_i++]); grecs_grecs_format += 2; } else { grecs_grecs_p++; grecs_grecs_format++; } } return 0; } #endif /* YYERROR_VERBOSE */ /*-----------------------------------------------. | Release the memory associated to this symbol. | `-----------------------------------------------*/ /*ARGSUSED*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void grecs_grecs_destruct (const char *grecs_grecs_msg, int grecs_grecs_type, YYSTYPE *grecs_grecs_valuep, YYLTYPE *grecs_grecs_locationp) #else static void grecs_grecs_destruct (grecs_grecs_msg, grecs_grecs_type, grecs_grecs_valuep, grecs_grecs_locationp) const char *grecs_grecs_msg; int grecs_grecs_type; YYSTYPE *grecs_grecs_valuep; YYLTYPE *grecs_grecs_locationp; #endif { YYUSE (grecs_grecs_valuep); YYUSE (grecs_grecs_locationp); if (!grecs_grecs_msg) grecs_grecs_msg = "Deleting"; YY_SYMBOL_PRINT (grecs_grecs_msg, grecs_grecs_type, grecs_grecs_valuep, grecs_grecs_locationp); switch (grecs_grecs_type) { default: break; } } /* The lookahead symbol. */ int grecs_grecs_char; #ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN # define YY_IGNORE_MAYBE_UNINITIALIZED_END #endif #ifndef YY_INITIAL_VALUE # define YY_INITIAL_VALUE(Value) /* Nothing. */ #endif /* The semantic value of the lookahead symbol. */ YYSTYPE grecs_grecs_lval YY_INITIAL_VALUE(grecs_grecs_val_default); /* Location data for the lookahead symbol. */ YYLTYPE grecs_grecs_lloc # if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL = { 1, 1, 1, 1 } # endif ; /* Number of syntax errors so far. */ int grecs_grecs_nerrs; /*----------. | grecs_grecs_parse. | `----------*/ #ifdef YYPARSE_PARAM #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) int grecs_grecs_parse (void *YYPARSE_PARAM) #else int grecs_grecs_parse (YYPARSE_PARAM) void *YYPARSE_PARAM; #endif #else /* ! YYPARSE_PARAM */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) int grecs_grecs_parse (void) #else int grecs_grecs_parse () #endif #endif { int grecs_grecs_state; /* Number of tokens to shift before error messages enabled. */ int grecs_grecs_errstatus; /* The stacks and their tools: `grecs_grecs_ss': related to states. `grecs_grecs_vs': related to semantic values. `grecs_grecs_ls': related to locations. Refer to the stacks through separate pointers, to allow grecs_grecs_overflow to reallocate them elsewhere. */ /* The state stack. */ grecs_grecs_type_int16 grecs_grecs_ssa[YYINITDEPTH]; grecs_grecs_type_int16 *grecs_grecs_ss; grecs_grecs_type_int16 *grecs_grecs_ssp; /* The semantic value stack. */ YYSTYPE grecs_grecs_vsa[YYINITDEPTH]; YYSTYPE *grecs_grecs_vs; YYSTYPE *grecs_grecs_vsp; /* The location stack. */ YYLTYPE grecs_grecs_lsa[YYINITDEPTH]; YYLTYPE *grecs_grecs_ls; YYLTYPE *grecs_grecs_lsp; /* The locations where the error started and ended. */ YYLTYPE grecs_grecs_error_range[3]; YYSIZE_T grecs_grecs_stacksize; int grecs_grecs_n; int grecs_grecs_result; /* Lookahead token as an internal (translated) token number. */ int grecs_grecs_token = 0; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE grecs_grecs_val; YYLTYPE grecs_grecs_loc; #if YYERROR_VERBOSE /* Buffer for error messages, and its allocated size. */ char grecs_grecs_msgbuf[128]; char *grecs_grecs_msg = grecs_grecs_msgbuf; YYSIZE_T grecs_grecs_msg_alloc = sizeof grecs_grecs_msgbuf; #endif #define YYPOPSTACK(N) (grecs_grecs_vsp -= (N), grecs_grecs_ssp -= (N), grecs_grecs_lsp -= (N)) /* The number of symbols on the RHS of the reduced rule. Keep to zero when no symbol should be popped. */ int grecs_grecs_len = 0; grecs_grecs_ssp = grecs_grecs_ss = grecs_grecs_ssa; grecs_grecs_vsp = grecs_grecs_vs = grecs_grecs_vsa; grecs_grecs_lsp = grecs_grecs_ls = grecs_grecs_lsa; grecs_grecs_stacksize = YYINITDEPTH; YYDPRINTF ((stderr, "Starting parse\n")); grecs_grecs_state = 0; grecs_grecs_errstatus = 0; grecs_grecs_nerrs = 0; grecs_grecs_char = YYEMPTY; /* Cause a token to be read. */ grecs_grecs_lsp[0] = grecs_grecs_lloc; goto grecs_grecs_setstate; /*------------------------------------------------------------. | grecs_grecs_newstate -- Push a new state, which is found in grecs_grecs_state. | `------------------------------------------------------------*/ grecs_grecs_newstate: /* In all cases, when you get here, the value and location stacks have just been pushed. So pushing a state here evens the stacks. */ grecs_grecs_ssp++; grecs_grecs_setstate: *grecs_grecs_ssp = grecs_grecs_state; if (grecs_grecs_ss + grecs_grecs_stacksize - 1 <= grecs_grecs_ssp) { /* Get the current used size of the three stacks, in elements. */ YYSIZE_T grecs_grecs_size = grecs_grecs_ssp - grecs_grecs_ss + 1; #ifdef grecs_grecs_overflow { /* Give user a chance to reallocate the stack. Use copies of these so that the &'s don't force the real ones into memory. */ YYSTYPE *grecs_grecs_vs1 = grecs_grecs_vs; grecs_grecs_type_int16 *grecs_grecs_ss1 = grecs_grecs_ss; YYLTYPE *grecs_grecs_ls1 = grecs_grecs_ls; /* Each stack pointer address is followed by the size of the data in use in that stack, in bytes. This used to be a conditional around just the two extra args, but that might be undefined if grecs_grecs_overflow is a macro. */ grecs_grecs_overflow (YY_("memory exhausted"), &grecs_grecs_ss1, grecs_grecs_size * sizeof (*grecs_grecs_ssp), &grecs_grecs_vs1, grecs_grecs_size * sizeof (*grecs_grecs_vsp), &grecs_grecs_ls1, grecs_grecs_size * sizeof (*grecs_grecs_lsp), &grecs_grecs_stacksize); grecs_grecs_ls = grecs_grecs_ls1; grecs_grecs_ss = grecs_grecs_ss1; grecs_grecs_vs = grecs_grecs_vs1; } #else /* no grecs_grecs_overflow */ # ifndef YYSTACK_RELOCATE goto grecs_grecs_exhaustedlab; # else /* Extend the stack our own way. */ if (YYMAXDEPTH <= grecs_grecs_stacksize) goto grecs_grecs_exhaustedlab; grecs_grecs_stacksize *= 2; if (YYMAXDEPTH < grecs_grecs_stacksize) grecs_grecs_stacksize = YYMAXDEPTH; { grecs_grecs_type_int16 *grecs_grecs_ss1 = grecs_grecs_ss; union grecs_grecs_alloc *grecs_grecs_ptr = (union grecs_grecs_alloc *) YYSTACK_ALLOC (YYSTACK_BYTES (grecs_grecs_stacksize)); if (! grecs_grecs_ptr) goto grecs_grecs_exhaustedlab; YYSTACK_RELOCATE (grecs_grecs_ss_alloc, grecs_grecs_ss); YYSTACK_RELOCATE (grecs_grecs_vs_alloc, grecs_grecs_vs); YYSTACK_RELOCATE (grecs_grecs_ls_alloc, grecs_grecs_ls); # undef YYSTACK_RELOCATE if (grecs_grecs_ss1 != grecs_grecs_ssa) YYSTACK_FREE (grecs_grecs_ss1); } # endif #endif /* no grecs_grecs_overflow */ grecs_grecs_ssp = grecs_grecs_ss + grecs_grecs_size - 1; grecs_grecs_vsp = grecs_grecs_vs + grecs_grecs_size - 1; grecs_grecs_lsp = grecs_grecs_ls + grecs_grecs_size - 1; YYDPRINTF ((stderr, "Stack size increased to %lu\n", (unsigned long int) grecs_grecs_stacksize)); if (grecs_grecs_ss + grecs_grecs_stacksize - 1 <= grecs_grecs_ssp) YYABORT; } YYDPRINTF ((stderr, "Entering state %d\n", grecs_grecs_state)); if (grecs_grecs_state == YYFINAL) YYACCEPT; goto grecs_grecs_backup; /*-----------. | grecs_grecs_backup. | `-----------*/ grecs_grecs_backup: /* Do appropriate processing given the current state. Read a lookahead token if we need one and don't already have one. */ /* First try to decide what to do without reference to lookahead token. */ grecs_grecs_n = grecs_grecs_pact[grecs_grecs_state]; if (grecs_grecs_pact_value_is_default (grecs_grecs_n)) goto grecs_grecs_default; /* Not known => get a lookahead token if don't already have one. */ /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ if (grecs_grecs_char == YYEMPTY) { YYDPRINTF ((stderr, "Reading a token: ")); grecs_grecs_char = YYLEX; } if (grecs_grecs_char <= YYEOF) { grecs_grecs_char = grecs_grecs_token = YYEOF; YYDPRINTF ((stderr, "Now at end of input.\n")); } else { grecs_grecs_token = YYTRANSLATE (grecs_grecs_char); YY_SYMBOL_PRINT ("Next token is", grecs_grecs_token, &grecs_grecs_lval, &grecs_grecs_lloc); } /* If the proper action on seeing token YYTOKEN is to reduce or to detect an error, take that action. */ grecs_grecs_n += grecs_grecs_token; if (grecs_grecs_n < 0 || YYLAST < grecs_grecs_n || grecs_grecs_check[grecs_grecs_n] != grecs_grecs_token) goto grecs_grecs_default; grecs_grecs_n = grecs_grecs_table[grecs_grecs_n]; if (grecs_grecs_n <= 0) { if (grecs_grecs_table_value_is_error (grecs_grecs_n)) goto grecs_grecs_errlab; grecs_grecs_n = -grecs_grecs_n; goto grecs_grecs_reduce; } /* Count tokens shifted since error; after three, turn off error status. */ if (grecs_grecs_errstatus) grecs_grecs_errstatus--; /* Shift the lookahead token. */ YY_SYMBOL_PRINT ("Shifting", grecs_grecs_token, &grecs_grecs_lval, &grecs_grecs_lloc); /* Discard the shifted token. */ grecs_grecs_char = YYEMPTY; grecs_grecs_state = grecs_grecs_n; YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++grecs_grecs_vsp = grecs_grecs_lval; YY_IGNORE_MAYBE_UNINITIALIZED_END *++grecs_grecs_lsp = grecs_grecs_lloc; goto grecs_grecs_newstate; /*-----------------------------------------------------------. | grecs_grecs_default -- do the default action for the current state. | `-----------------------------------------------------------*/ grecs_grecs_default: grecs_grecs_n = grecs_grecs_defact[grecs_grecs_state]; if (grecs_grecs_n == 0) goto grecs_grecs_errlab; goto grecs_grecs_reduce; /*-----------------------------. | grecs_grecs_reduce -- Do a reduction. | `-----------------------------*/ grecs_grecs_reduce: /* grecs_grecs_n is the number of a rule to reduce with. */ grecs_grecs_len = grecs_grecs_r2[grecs_grecs_n]; /* If YYLEN is nonzero, implement the default value of the action: `$$ = $1'. Otherwise, the following line sets YYVAL to garbage. This behavior is undocumented and Bison users should not rely upon it. Assigning to YYVAL unconditionally makes the parser a bit smaller, and it avoids a GCC warning that YYVAL may be used uninitialized. */ grecs_grecs_val = grecs_grecs_vsp[1-grecs_grecs_len]; /* Default location. */ YYLLOC_DEFAULT (grecs_grecs_loc, (grecs_grecs_lsp - grecs_grecs_len), grecs_grecs_len); YY_REDUCE_PRINT (grecs_grecs_n); switch (grecs_grecs_n) { case 2: /* Line 1792 of yacc.c */ #line 58 "grecs-gram.y" { parse_tree = grecs_node_create(grecs_node_root, &(grecs_grecs_lsp[(1) - (1)])); parse_tree->v.texttab = grecs_text_table(); grecs_node_bind(parse_tree, (grecs_grecs_vsp[(1) - (1)].node), 1); } break; case 3: /* Line 1792 of yacc.c */ #line 67 "grecs-gram.y" { (grecs_grecs_val.node) = NULL; } break; case 4: /* Line 1792 of yacc.c */ #line 71 "grecs-gram.y" { (grecs_grecs_val.node) = (grecs_grecs_vsp[(1) - (1)].node_list).head; } break; case 5: /* Line 1792 of yacc.c */ #line 77 "grecs-gram.y" { (grecs_grecs_val.node_list).head = (grecs_grecs_val.node_list).tail = (grecs_grecs_vsp[(1) - (1)].node); } break; case 6: /* Line 1792 of yacc.c */ #line 81 "grecs-gram.y" { grecs_node_bind((grecs_grecs_vsp[(1) - (2)].node_list).tail, (grecs_grecs_vsp[(2) - (2)].node), 0); } break; case 9: /* Line 1792 of yacc.c */ #line 91 "grecs-gram.y" { (grecs_grecs_val.node) = grecs_node_create_points(grecs_node_stmt, (grecs_grecs_lsp[(1) - (3)]).beg, (grecs_grecs_lsp[(2) - (3)]).end); (grecs_grecs_val.node)->ident = (grecs_grecs_vsp[(1) - (3)].string); (grecs_grecs_val.node)->idloc = (grecs_grecs_lsp[(1) - (3)]); (grecs_grecs_val.node)->v.value = (grecs_grecs_vsp[(2) - (3)].pvalue); } break; case 10: /* Line 1792 of yacc.c */ #line 99 "grecs-gram.y" { (grecs_grecs_val.node) = grecs_node_create(grecs_node_stmt, &(grecs_grecs_lsp[(1) - (2)])); (grecs_grecs_val.node)->ident = (grecs_grecs_vsp[(1) - (2)].string); (grecs_grecs_val.node)->idloc = (grecs_grecs_lsp[(1) - (2)]); (grecs_grecs_val.node)->v.value = NULL; } break; case 11: /* Line 1792 of yacc.c */ #line 108 "grecs-gram.y" { (grecs_grecs_val.node) = grecs_node_create_points(grecs_node_block, (grecs_grecs_lsp[(1) - (6)]).beg, (grecs_grecs_lsp[(5) - (6)]).end); (grecs_grecs_val.node)->ident = (grecs_grecs_vsp[(1) - (6)].string); (grecs_grecs_val.node)->idloc = (grecs_grecs_lsp[(1) - (6)]); (grecs_grecs_val.node)->v.value = (grecs_grecs_vsp[(2) - (6)].pvalue); grecs_node_bind((grecs_grecs_val.node), (grecs_grecs_vsp[(4) - (6)].node_list).head, 1); } break; case 12: /* Line 1792 of yacc.c */ #line 119 "grecs-gram.y" { (grecs_grecs_val.pvalue) = NULL; } break; case 14: /* Line 1792 of yacc.c */ #line 126 "grecs-gram.y" { size_t n; if ((n = grecs_list_size((grecs_grecs_vsp[(1) - (1)].list))) == 1) { (grecs_grecs_val.pvalue) = grecs_list_index((grecs_grecs_vsp[(1) - (1)].list), 0); } else { size_t i; struct grecs_list_entry *ep; (grecs_grecs_val.pvalue) = grecs_malloc(sizeof((grecs_grecs_val.pvalue)[0])); (grecs_grecs_val.pvalue)->type = GRECS_TYPE_ARRAY; (grecs_grecs_val.pvalue)->locus = (grecs_grecs_lsp[(1) - (1)]); (grecs_grecs_val.pvalue)->v.arg.c = n; (grecs_grecs_val.pvalue)->v.arg.v = grecs_calloc(n, sizeof((grecs_grecs_val.pvalue)->v.arg.v[0])); for (i = 0, ep = (grecs_grecs_vsp[(1) - (1)].list)->head; ep; i++, ep = ep->next) (grecs_grecs_val.pvalue)->v.arg.v[i] = ep->data; } (grecs_grecs_vsp[(1) - (1)].list)->free_entry = NULL; grecs_list_free((grecs_grecs_vsp[(1) - (1)].list)); } break; case 15: /* Line 1792 of yacc.c */ #line 150 "grecs-gram.y" { (grecs_grecs_val.list) = grecs_value_list_create(); grecs_list_append((grecs_grecs_val.list), grecs_value_ptr_from_static(&(grecs_grecs_vsp[(1) - (1)].svalue))); } break; case 16: /* Line 1792 of yacc.c */ #line 155 "grecs-gram.y" { grecs_list_append((grecs_grecs_vsp[(1) - (2)].list), grecs_value_ptr_from_static(&(grecs_grecs_vsp[(2) - (2)].svalue))); } break; case 17: /* Line 1792 of yacc.c */ #line 161 "grecs-gram.y" { (grecs_grecs_val.svalue).type = GRECS_TYPE_STRING; (grecs_grecs_val.svalue).locus = (grecs_grecs_lsp[(1) - (1)]); (grecs_grecs_val.svalue).v.string = (grecs_grecs_vsp[(1) - (1)].string); } break; case 18: /* Line 1792 of yacc.c */ #line 167 "grecs-gram.y" { (grecs_grecs_val.svalue).type = GRECS_TYPE_LIST; (grecs_grecs_val.svalue).locus = (grecs_grecs_lsp[(1) - (1)]); (grecs_grecs_val.svalue).v.list = (grecs_grecs_vsp[(1) - (1)].list); } break; case 19: /* Line 1792 of yacc.c */ #line 173 "grecs-gram.y" { (grecs_grecs_val.svalue).type = GRECS_TYPE_STRING; (grecs_grecs_val.svalue).locus = (grecs_grecs_lsp[(1) - (1)]); (grecs_grecs_val.svalue).v.string = (grecs_grecs_vsp[(1) - (1)].string); } break; case 23: /* Line 1792 of yacc.c */ #line 186 "grecs-gram.y" { struct grecs_list_entry *ep; grecs_line_begin(); for (ep = (grecs_grecs_vsp[(1) - (1)].list)->head; ep; ep = ep->next) { grecs_line_add(ep->data, strlen(ep->data)); free(ep->data); ep->data = NULL; } (grecs_grecs_val.string) = grecs_line_finish(); grecs_list_free((grecs_grecs_vsp[(1) - (1)].list)); } break; case 24: /* Line 1792 of yacc.c */ #line 201 "grecs-gram.y" { (grecs_grecs_val.list) = grecs_list_create(); grecs_list_append((grecs_grecs_val.list), (grecs_grecs_vsp[(1) - (1)].string)); } break; case 25: /* Line 1792 of yacc.c */ #line 206 "grecs-gram.y" { grecs_list_append((grecs_grecs_vsp[(1) - (2)].list), (grecs_grecs_vsp[(2) - (2)].string)); (grecs_grecs_val.list) = (grecs_grecs_vsp[(1) - (2)].list); } break; case 26: /* Line 1792 of yacc.c */ #line 213 "grecs-gram.y" { (grecs_grecs_val.list) = NULL; } break; case 27: /* Line 1792 of yacc.c */ #line 217 "grecs-gram.y" { (grecs_grecs_val.list) = (grecs_grecs_vsp[(2) - (3)].list); } break; case 28: /* Line 1792 of yacc.c */ #line 221 "grecs-gram.y" { (grecs_grecs_val.list) = (grecs_grecs_vsp[(2) - (4)].list); } break; case 29: /* Line 1792 of yacc.c */ #line 227 "grecs-gram.y" { (grecs_grecs_val.list) = grecs_value_list_create(); grecs_list_append((grecs_grecs_val.list), grecs_value_ptr_from_static(&(grecs_grecs_vsp[(1) - (1)].svalue))); } break; case 30: /* Line 1792 of yacc.c */ #line 232 "grecs-gram.y" { grecs_list_append((grecs_grecs_vsp[(1) - (3)].list), grecs_value_ptr_from_static(&(grecs_grecs_vsp[(3) - (3)].svalue))); (grecs_grecs_val.list) = (grecs_grecs_vsp[(1) - (3)].list); } break; /* Line 1792 of yacc.c */ #line 1769 "grecs-gram.c" default: break; } /* User semantic actions sometimes alter grecs_grecs_char, and that requires that grecs_grecs_token be updated with the new translation. We take the approach of translating immediately before every use of grecs_grecs_token. One alternative is translating here after every semantic action, but that translation would be missed if the semantic action invokes YYABORT, YYACCEPT, or YYERROR immediately after altering grecs_grecs_char or if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an incorrect destructor might then be invoked immediately. In the case of YYERROR or YYBACKUP, subsequent parser actions might lead to an incorrect destructor call or verbose syntax error message before the lookahead is translated. */ YY_SYMBOL_PRINT ("-> $$ =", grecs_grecs_r1[grecs_grecs_n], &grecs_grecs_val, &grecs_grecs_loc); YYPOPSTACK (grecs_grecs_len); grecs_grecs_len = 0; YY_STACK_PRINT (grecs_grecs_ss, grecs_grecs_ssp); *++grecs_grecs_vsp = grecs_grecs_val; *++grecs_grecs_lsp = grecs_grecs_loc; /* Now `shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ grecs_grecs_n = grecs_grecs_r1[grecs_grecs_n]; grecs_grecs_state = grecs_grecs_pgoto[grecs_grecs_n - YYNTOKENS] + *grecs_grecs_ssp; if (0 <= grecs_grecs_state && grecs_grecs_state <= YYLAST && grecs_grecs_check[grecs_grecs_state] == *grecs_grecs_ssp) grecs_grecs_state = grecs_grecs_table[grecs_grecs_state]; else grecs_grecs_state = grecs_grecs_defgoto[grecs_grecs_n - YYNTOKENS]; goto grecs_grecs_newstate; /*------------------------------------. | grecs_grecs_errlab -- here on detecting error | `------------------------------------*/ grecs_grecs_errlab: /* Make sure we have latest lookahead translation. See comments at user semantic actions for why this is necessary. */ grecs_grecs_token = grecs_grecs_char == YYEMPTY ? YYEMPTY : YYTRANSLATE (grecs_grecs_char); /* If not already recovering from an error, report this error. */ if (!grecs_grecs_errstatus) { ++grecs_grecs_nerrs; #if ! YYERROR_VERBOSE grecs_grecs_error (YY_("syntax error")); #else # define YYSYNTAX_ERROR grecs_grecs_syntax_error (&grecs_grecs_msg_alloc, &grecs_grecs_msg, \ grecs_grecs_ssp, grecs_grecs_token) { char const *grecs_grecs_msgp = YY_("syntax error"); int grecs_grecs_syntax_error_status; grecs_grecs_syntax_error_status = YYSYNTAX_ERROR; if (grecs_grecs_syntax_error_status == 0) grecs_grecs_msgp = grecs_grecs_msg; else if (grecs_grecs_syntax_error_status == 1) { if (grecs_grecs_msg != grecs_grecs_msgbuf) YYSTACK_FREE (grecs_grecs_msg); grecs_grecs_msg = (char *) YYSTACK_ALLOC (grecs_grecs_msg_alloc); if (!grecs_grecs_msg) { grecs_grecs_msg = grecs_grecs_msgbuf; grecs_grecs_msg_alloc = sizeof grecs_grecs_msgbuf; grecs_grecs_syntax_error_status = 2; } else { grecs_grecs_syntax_error_status = YYSYNTAX_ERROR; grecs_grecs_msgp = grecs_grecs_msg; } } grecs_grecs_error (grecs_grecs_msgp); if (grecs_grecs_syntax_error_status == 2) goto grecs_grecs_exhaustedlab; } # undef YYSYNTAX_ERROR #endif } grecs_grecs_error_range[1] = grecs_grecs_lloc; if (grecs_grecs_errstatus == 3) { /* If just tried and failed to reuse lookahead token after an error, discard it. */ if (grecs_grecs_char <= YYEOF) { /* Return failure if at end of input. */ if (grecs_grecs_char == YYEOF) YYABORT; } else { grecs_grecs_destruct ("Error: discarding", grecs_grecs_token, &grecs_grecs_lval, &grecs_grecs_lloc); grecs_grecs_char = YYEMPTY; } } /* Else will try to reuse lookahead token after shifting the error token. */ goto grecs_grecs_errlab1; /*---------------------------------------------------. | grecs_grecs_errorlab -- error raised explicitly by YYERROR. | `---------------------------------------------------*/ grecs_grecs_errorlab: /* Pacify compilers like GCC when the user code never invokes YYERROR and the label grecs_grecs_errorlab therefore never appears in user code. */ if (/*CONSTCOND*/ 0) goto grecs_grecs_errorlab; grecs_grecs_error_range[1] = grecs_grecs_lsp[1-grecs_grecs_len]; /* Do not reclaim the symbols of the rule which action triggered this YYERROR. */ YYPOPSTACK (grecs_grecs_len); grecs_grecs_len = 0; YY_STACK_PRINT (grecs_grecs_ss, grecs_grecs_ssp); grecs_grecs_state = *grecs_grecs_ssp; goto grecs_grecs_errlab1; /*-------------------------------------------------------------. | grecs_grecs_errlab1 -- common code for both syntax error and YYERROR. | `-------------------------------------------------------------*/ grecs_grecs_errlab1: grecs_grecs_errstatus = 3; /* Each real token shifted decrements this. */ for (;;) { grecs_grecs_n = grecs_grecs_pact[grecs_grecs_state]; if (!grecs_grecs_pact_value_is_default (grecs_grecs_n)) { grecs_grecs_n += YYTERROR; if (0 <= grecs_grecs_n && grecs_grecs_n <= YYLAST && grecs_grecs_check[grecs_grecs_n] == YYTERROR) { grecs_grecs_n = grecs_grecs_table[grecs_grecs_n]; if (0 < grecs_grecs_n) break; } } /* Pop the current state because it cannot handle the error token. */ if (grecs_grecs_ssp == grecs_grecs_ss) YYABORT; grecs_grecs_error_range[1] = *grecs_grecs_lsp; grecs_grecs_destruct ("Error: popping", grecs_grecs_stos[grecs_grecs_state], grecs_grecs_vsp, grecs_grecs_lsp); YYPOPSTACK (1); grecs_grecs_state = *grecs_grecs_ssp; YY_STACK_PRINT (grecs_grecs_ss, grecs_grecs_ssp); } YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++grecs_grecs_vsp = grecs_grecs_lval; YY_IGNORE_MAYBE_UNINITIALIZED_END grecs_grecs_error_range[2] = grecs_grecs_lloc; /* Using YYLLOC is tempting, but would change the location of the lookahead. YYLOC is available though. */ YYLLOC_DEFAULT (grecs_grecs_loc, grecs_grecs_error_range, 2); *++grecs_grecs_lsp = grecs_grecs_loc; /* Shift the error token. */ YY_SYMBOL_PRINT ("Shifting", grecs_grecs_stos[grecs_grecs_n], grecs_grecs_vsp, grecs_grecs_lsp); grecs_grecs_state = grecs_grecs_n; goto grecs_grecs_newstate; /*-------------------------------------. | grecs_grecs_acceptlab -- YYACCEPT comes here. | `-------------------------------------*/ grecs_grecs_acceptlab: grecs_grecs_result = 0; goto grecs_grecs_return; /*-----------------------------------. | grecs_grecs_abortlab -- YYABORT comes here. | `-----------------------------------*/ grecs_grecs_abortlab: grecs_grecs_result = 1; goto grecs_grecs_return; #if !defined grecs_grecs_overflow || YYERROR_VERBOSE /*-------------------------------------------------. | grecs_grecs_exhaustedlab -- memory exhaustion comes here. | `-------------------------------------------------*/ grecs_grecs_exhaustedlab: grecs_grecs_error (YY_("memory exhausted")); grecs_grecs_result = 2; /* Fall through. */ #endif grecs_grecs_return: if (grecs_grecs_char != YYEMPTY) { /* Make sure we have latest lookahead translation. See comments at user semantic actions for why this is necessary. */ grecs_grecs_token = YYTRANSLATE (grecs_grecs_char); grecs_grecs_destruct ("Cleanup: discarding lookahead", grecs_grecs_token, &grecs_grecs_lval, &grecs_grecs_lloc); } /* Do not reclaim the symbols of the rule which action triggered this YYABORT or YYACCEPT. */ YYPOPSTACK (grecs_grecs_len); YY_STACK_PRINT (grecs_grecs_ss, grecs_grecs_ssp); while (grecs_grecs_ssp != grecs_grecs_ss) { grecs_grecs_destruct ("Cleanup: popping", grecs_grecs_stos[*grecs_grecs_ssp], grecs_grecs_vsp, grecs_grecs_lsp); YYPOPSTACK (1); } #ifndef grecs_grecs_overflow if (grecs_grecs_ss != grecs_grecs_ssa) YYSTACK_FREE (grecs_grecs_ss); #endif #if YYERROR_VERBOSE if (grecs_grecs_msg != grecs_grecs_msgbuf) YYSTACK_FREE (grecs_grecs_msg); #endif /* Make sure YYID is used. */ return YYID (grecs_grecs_result); } /* Line 2055 of yacc.c */ #line 242 "grecs-gram.y" int grecs_grecs_error(char const *s) { grecs_error(&grecs_grecs_lloc, 0, "%s", s); return 0; } struct grecs_node * grecs_grecs_parser(const char *name, int traceflags) { int rc; if (grecs_lex_begin(name, traceflags & GRECS_TRACE_LEX)) return NULL; grecs_grecs_debug = traceflags & GRECS_TRACE_GRAM; parse_tree = NULL; rc = grecs_grecs_parse(); if (grecs_error_count) rc = 1; grecs_lex_end(rc); if (rc) { grecs_tree_free(parse_tree); parse_tree = NULL; } return parse_tree; } �������������������������������������������������direvent-5.2/grecs/src/dhcpd-lex.l������������������������������������������������������������������0000644�0001750�0001750�00000021615�13244106110�017102� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* grecs - Gray's Extensible Configuration System -*- c -*- */ %option noinput %top { #ifdef HAVE_CONFIG_H # include <config.h> #endif } %{ /* grecs - Gray's Extensible Configuration System Copyright (C) 2007-2016 Sergey Poznyakoff Grecs 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. Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. */ #include <grecs.h> #include <dhcpd-gram.h> #include <unistd.h> #include <fcntl.h> #include <ctype.h> #include <stdlib.h> #include <errno.h> #include <sys/stat.h> #include <wordsplit.h> #define YY_USER_ACTION do { \ if (YYSTATE == 0) { \ yylloc.beg = grecs_current_locus_point; \ yylloc.beg.col++; \ } \ grecs_current_locus_point.col += yyleng; \ yylloc.end = grecs_current_locus_point; \ } while (0); #define ISWS(c) ((c)==' '||(c)=='\t') %} %x COMMENT STR BOOL EXPR OWS [ \t\f]* WS [ \t\f][ \t\f]* ID [a-zA-Z_][a-zA-Z_0-9-]* P [1-9][0-9]* %% /* Line directive */ ^[ \t]*#[ \t]*{P}[ \t]+\".*\".*\n { grecs_parse_line_directive_cpp(yytext, &yylloc, &grecs_current_locus_point, NULL); } ^[ \t]*#[ \t]*line[ \t].*\n { grecs_parse_line_directive(yytext, &yylloc, &grecs_current_locus_point, NULL); } /* End-of-line comments */ #.*\n { grecs_locus_point_advance_line(grecs_current_locus_point); } #.* /* end-of-file comment */; "//".*\n { grecs_locus_point_advance_line(grecs_current_locus_point); } "//".* /* end-of-file comment */; "if" return DHCPD_IF; "elsif" return DHCPD_ELSIF; "else" return DHCPD_ELSE; <BOOL>[^\{\n]*\n { char *p; size_t len; for (p = yytext, len = yyleng - 1; ISWS(*p) && len > 0; p++, len--) ; if (len) { grecs_line_add(p, len); grecs_line_add(" ", 1); } grecs_locus_point_advance_line(grecs_current_locus_point); } <BOOL>[^\{\n]*\{ { char *p; size_t len; unput('{'); for (p = yytext, len = yyleng - 1; ISWS(*p) && len > 0; p++, len--) ; for (; len > 0 && ISWS(p[len-1]); len--) ; grecs_line_add(p, len); BEGIN(INITIAL); yylval.string = grecs_line_finish(); return DHCPD_EXPR; } <EXPR>[^;\n]*\n { char *p; size_t len; for (p = yytext, len = yyleng - 1; ISWS(*p) && len > 0; p++, len--) ; if (len) { grecs_line_add(p, len); grecs_line_add(" ", 1); } grecs_locus_point_advance_line(grecs_current_locus_point); } <EXPR>[^;\n]*; { char *p; size_t len; unput(';'); for (p = yytext, len = yyleng - 1; ISWS(*p) && len > 0; p++, len--) ; for (; len > 0 && ISWS(p[len-1]); len--) ; grecs_line_add(p, len); BEGIN(INITIAL); yylval.string = grecs_line_finish(); return DHCPD_EXPR; } /* Identifiers */ {ID} { grecs_line_begin(); grecs_line_add(yytext, yyleng); yylval.string = grecs_line_finish(); return DHCPD_IDENT; } /* Strings */ [a-zA-Z0-9_\.\*/:@-]([a-zA-Z0-9_\./:@-][a-zA-Z0-9_\.\*/:@-]*)? { grecs_line_begin(); grecs_line_add(yytext, yyleng); yylval.string = grecs_line_finish(); return DHCPD_STRING; } /* Quoted strings */ \"[^\\"\n]*\" { grecs_line_begin(); grecs_line_add(yytext + 1, yyleng - 2); yylval.string = grecs_line_finish(); return DHCPD_STRING; } \"[^\\"\n]*\\. | \"[^\\"\n]*\\\n { BEGIN(STR); grecs_line_begin(); grecs_line_acc_grow_unescape_last(yytext + 1, yyleng - 1, &yylloc); } \"[^\\"\n]*\n { BEGIN(STR); grecs_line_begin(); grecs_line_acc_grow(yytext + 1, yyleng - 1); } <STR>[^\\"\n]*\\. | <STR>\"[^\\"\n]*\\\n { grecs_line_acc_grow_unescape_last(yytext, yyleng, &yylloc); } <STR>[^\\"\n]*\n | <STR>\"[^\\"\n]*\n { grecs_line_acc_grow(yytext, yyleng); } <STR>[^\\"\n]*\" { BEGIN(INITIAL); if (yyleng > 1) grecs_line_add(yytext, yyleng - 1); yylval.string = grecs_line_finish(); return DHCPD_STRING; } {WS} ; /* Other tokens */ \n { grecs_locus_point_advance_line(grecs_current_locus_point); } [,;{}()!=] return yytext[0]; . { if (isascii(yytext[0]) && isprint(yytext[0])) grecs_error(&yylloc, 0, _("stray character %c"), yytext[0]); else grecs_error(&yylloc, 0, _("stray character \\%03o"), (unsigned char) yytext[0]); } %% void grecs_dhcpd_begin_bool(void) { BEGIN(BOOL); } void grecs_dhcpd_begin_expr(void) { BEGIN(EXPR); } struct dhcpd_input_context { ino_t i_node; dev_t i_dev; struct grecs_locus_point point; grecs_locus_t locus; /* Current input location */ YY_BUFFER_STATE state; FILE *input; }; static struct grecs_list *input_stack; static ino_t i_node; static dev_t i_dev; static void free_context(void *ptr) { free(ptr); } static int cmp_context(const void *a, const void *b) { struct dhcpd_input_context const *ac = a; struct dhcpd_input_context const *bc = b; return !(ac->i_node == bc->i_node && ac->i_dev == bc->i_dev); } static int _push_context(const char *name, ino_t i_node, dev_t i_dev, grecs_locus_t *loc) { struct dhcpd_input_context ctx, *pctx; if (!input_stack) { input_stack = grecs_list_create(); input_stack->free_entry = free_context; input_stack->cmp = cmp_context; } else { ctx.i_dev = i_dev; ctx.i_node = i_node; pctx = grecs_list_locate(input_stack, &ctx); if (pctx) { grecs_error(&yylloc, 0, _("%s has already been included"), name); grecs_error(&pctx->locus, 0, _("this is where the previous inclusion occurred")); return 1; } pctx = grecs_malloc(sizeof(*pctx)); pctx->i_node = i_node; pctx->i_dev = i_dev; if (loc) pctx->locus = *loc; else memset(&pctx->locus, 0, sizeof(pctx->locus)); /* FIXME */ pctx->point = grecs_current_locus_point; pctx->state = YY_CURRENT_BUFFER; pctx->input = yyin; grecs_list_push(input_stack, pctx); } return 0; } static int _pop_context() { struct dhcpd_input_context *pctx; if (!yyin) return 1; if (grecs_preprocessor) pclose(yyin); else fclose(yyin); pctx = grecs_list_pop(input_stack); if (!pctx) { yyin = NULL; return 1; } i_node = pctx->i_node; i_dev = pctx->i_dev; grecs_current_locus_point = pctx->point; yyin = pctx->input; yy_delete_buffer(YY_CURRENT_BUFFER); yy_switch_to_buffer(pctx->state); grecs_free(pctx); return 0; } int yywrap() { return _pop_context(); } int grecs_dhcpd_new_source(const char *name, grecs_locus_t *loc) { struct stat st; FILE *fp; if (access(name, F_OK)) { int ec = errno; char *tmp = grecs_find_include_file(name, 0); if (!tmp) { grecs_error(loc, ec, _("cannot open `%s'"), name); return 1; } name = grecs_install_text(tmp); free(tmp); } fp = fopen(name, "r"); if (!fp) { grecs_error(loc, errno, _("cannot open `%s'"), name); return 1; } if (fstat(fileno(fp), &st)) { grecs_error(loc, errno, _("can't state %s"), name); fclose(fp); return 1; } if (grecs_preprocessor) { char *cmd = NULL; size_t size = 0; fclose(fp); if (grecs_asprintf(&cmd, &size, "%s \"%s\"", grecs_preprocessor, name)) grecs_alloc_die(); fp = popen(cmd, "r"); if (!fp) { grecs_error(loc, errno, _("cannot open `%s'"), cmd); grecs_free(cmd); return 1; } grecs_free(cmd); } if (_push_context(name, st.st_ino, st.st_dev, loc)) { return 1; } i_node = st.st_ino; i_dev = st.st_dev; yyin = fp; yy_switch_to_buffer(yy_create_buffer(yyin, YY_BUF_SIZE)); grecs_current_locus_point.file = grecs_install_text(name); grecs_current_locus_point.line = 1; grecs_current_locus_point.col = 0; return 0; } void grecs_dhcpd_close_sources() { while (!_pop_context()) ; grecs_list_free(input_stack); input_stack = NULL; } �������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/src/dhcpd-gram.c�����������������������������������������������������������������0000644�0001750�0001750�00000215462�13244106172�017244� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A Bison parser, made by GNU Bison 2.7. */ /* Bison implementation for Yacc-like parsers in C Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* C LALR(1) parser skeleton written by Richard Stallman, by simplifying the original so-called "semantic" parser. */ /* All symbols defined below should begin with grecs_dhcpd or YY, to avoid infringing on user name space. This should be done even for local variables, as they might otherwise be expanded by user macros. There are some unavoidable exceptions within include files to define necessary library symbols; they are noted "INFRINGES ON USER NAME SPACE" below. */ /* Identify Bison output. */ #define YYBISON 1 /* Bison version. */ #define YYBISON_VERSION "2.7" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" /* Pure parsers. */ #define YYPURE 0 /* Push parsers. */ #define YYPUSH 0 /* Pull parsers. */ #define YYPULL 1 /* Copy the first part of user declarations. */ /* Line 371 of yacc.c */ #line 1 "dhcpd-gram.y" /* grecs - Gray's Extensible Configuration System Copyright (C) 2007-2016 Sergey Poznyakoff Grecs 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. Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include <grecs.h> #include <dhcpd-gram.h> #include <stdlib.h> #include <stdarg.h> #include <string.h> #include <errno.h> int grecs_dhcpdlex(void); int grecs_dhcpderror(char const *s); static struct grecs_node *parse_tree; extern int grecs_dhcpd_flex_debug; extern int grecs_dhcpd_new_source(const char *name, grecs_locus_t *loc); extern void grecs_dhcpd_close_sources(void); extern void grecs_dhcpd_begin_bool(void); extern void grecs_dhcpd_begin_expr(void); /* NOTE: STRING must be allocated */ static grecs_value_t * make_string_value(char *string) { grecs_value_t *val; val = grecs_malloc(sizeof(val[0])); val->type = GRECS_TYPE_STRING; val->v.string = string; return val; } /* Line 371 of yacc.c */ #line 119 "dhcpd-gram.c" # ifndef YY_NULL # if defined __cplusplus && 201103L <= __cplusplus # define YY_NULL nullptr # else # define YY_NULL 0 # endif # endif /* Enabling verbose error messages. */ #ifdef YYERROR_VERBOSE # undef YYERROR_VERBOSE # define YYERROR_VERBOSE 1 #else # define YYERROR_VERBOSE 1 #endif /* In a future release of Bison, this section will be replaced by #include "y.tab.h". */ #ifndef YY_YY_Y_TAB_H_INCLUDED # define YY_YY_Y_TAB_H_INCLUDED /* Enabling traces. */ #ifndef YYDEBUG # define YYDEBUG 1 #endif #if YYDEBUG extern int grecs_dhcpddebug; #endif /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE /* Put the tokens into the symbol table, so that GDB and other debuggers know about them. */ enum grecs_dhcpdtokentype { DHCPD_IF = 258, DHCPD_ELSIF = 259, DHCPD_EXPR = 260, DHCPD_ELSE = 261, DHCPD_STRING = 262, DHCPD_IDENT = 263 }; #endif /* Tokens. */ #define DHCPD_IF 258 #define DHCPD_ELSIF 259 #define DHCPD_EXPR 260 #define DHCPD_ELSE 261 #define DHCPD_STRING 262 #define DHCPD_IDENT 263 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE { /* Line 387 of yacc.c */ #line 55 "dhcpd-gram.y" char *string; grecs_value_t svalue, *pvalue; struct grecs_list *list; struct grecs_node *node; grecs_locus_t locus; struct { struct grecs_node *head, *tail; } node_list; /* Line 387 of yacc.c */ #line 188 "dhcpd-gram.c" } YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define grecs_dhcpdstype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 #endif #if ! defined YYLTYPE && ! defined YYLTYPE_IS_DECLARED typedef struct YYLTYPE { int first_line; int first_column; int last_line; int last_column; } YYLTYPE; # define grecs_dhcpdltype YYLTYPE /* obsolescent; will be withdrawn */ # define YYLTYPE_IS_DECLARED 1 # define YYLTYPE_IS_TRIVIAL 1 #endif extern YYSTYPE grecs_dhcpdlval; extern YYLTYPE grecs_dhcpdlloc; #ifdef YYPARSE_PARAM #if defined __STDC__ || defined __cplusplus int grecs_dhcpdparse (void *YYPARSE_PARAM); #else int grecs_dhcpdparse (); #endif #else /* ! YYPARSE_PARAM */ #if defined __STDC__ || defined __cplusplus int grecs_dhcpdparse (void); #else int grecs_dhcpdparse (); #endif #endif /* ! YYPARSE_PARAM */ #endif /* !YY_YY_Y_TAB_H_INCLUDED */ /* Copy the second part of user declarations. */ /* Line 390 of yacc.c */ #line 229 "dhcpd-gram.c" #ifdef short # undef short #endif #ifdef YYTYPE_UINT8 typedef YYTYPE_UINT8 grecs_dhcpdtype_uint8; #else typedef unsigned char grecs_dhcpdtype_uint8; #endif #ifdef YYTYPE_INT8 typedef YYTYPE_INT8 grecs_dhcpdtype_int8; #elif (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) typedef signed char grecs_dhcpdtype_int8; #else typedef short int grecs_dhcpdtype_int8; #endif #ifdef YYTYPE_UINT16 typedef YYTYPE_UINT16 grecs_dhcpdtype_uint16; #else typedef unsigned short int grecs_dhcpdtype_uint16; #endif #ifdef YYTYPE_INT16 typedef YYTYPE_INT16 grecs_dhcpdtype_int16; #else typedef short int grecs_dhcpdtype_int16; #endif #ifndef YYSIZE_T # ifdef __SIZE_TYPE__ # define YYSIZE_T __SIZE_TYPE__ # elif defined size_t # define YYSIZE_T size_t # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include <stddef.h> /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # else # define YYSIZE_T unsigned int # endif #endif #define YYSIZE_MAXIMUM ((YYSIZE_T) -1) #ifndef YY_ # if defined YYENABLE_NLS && YYENABLE_NLS # if ENABLE_NLS # include <libintl.h> /* INFRINGES ON USER NAME SPACE */ # define YY_(Msgid) dgettext ("bison-runtime", Msgid) # endif # endif # ifndef YY_ # define YY_(Msgid) Msgid # endif #endif /* Suppress unused-variable warnings by "using" E. */ #if ! defined lint || defined __GNUC__ # define YYUSE(E) ((void) (E)) #else # define YYUSE(E) /* empty */ #endif /* Identity function, used to suppress warnings about constant conditions. */ #ifndef lint # define YYID(N) (N) #else #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static int YYID (int grecs_dhcpdi) #else static int YYID (grecs_dhcpdi) int grecs_dhcpdi; #endif { return grecs_dhcpdi; } #endif #if ! defined grecs_dhcpdoverflow || YYERROR_VERBOSE /* The parser invokes alloca or malloc; define the necessary symbols. */ # ifdef YYSTACK_USE_ALLOCA # if YYSTACK_USE_ALLOCA # ifdef __GNUC__ # define YYSTACK_ALLOC __builtin_alloca # elif defined __BUILTIN_VA_ARG_INCR # include <alloca.h> /* INFRINGES ON USER NAME SPACE */ # elif defined _AIX # define YYSTACK_ALLOC __alloca # elif defined _MSC_VER # include <malloc.h> /* INFRINGES ON USER NAME SPACE */ # define alloca _alloca # else # define YYSTACK_ALLOC alloca # if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ /* Use EXIT_SUCCESS as a witness for stdlib.h. */ # ifndef EXIT_SUCCESS # define EXIT_SUCCESS 0 # endif # endif # endif # endif # endif # ifdef YYSTACK_ALLOC /* Pacify GCC's `empty if-body' warning. */ # define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) # ifndef YYSTACK_ALLOC_MAXIMUM /* The OS might guarantee only one guard page at the bottom of the stack, and a page size can be as small as 4096 bytes. So we cannot safely invoke alloca (N) if N exceeds 4096. Use a slightly smaller number to allow for a few compiler-allocated temporary stack slots. */ # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ # endif # else # define YYSTACK_ALLOC YYMALLOC # define YYSTACK_FREE YYFREE # ifndef YYSTACK_ALLOC_MAXIMUM # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM # endif # if (defined __cplusplus && ! defined EXIT_SUCCESS \ && ! ((defined YYMALLOC || defined malloc) \ && (defined YYFREE || defined free))) # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ # ifndef EXIT_SUCCESS # define EXIT_SUCCESS 0 # endif # endif # ifndef YYMALLOC # define YYMALLOC malloc # if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ # endif # endif # ifndef YYFREE # define YYFREE free # if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) void free (void *); /* INFRINGES ON USER NAME SPACE */ # endif # endif # endif #endif /* ! defined grecs_dhcpdoverflow || YYERROR_VERBOSE */ #if (! defined grecs_dhcpdoverflow \ && (! defined __cplusplus \ || (defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL \ && defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) /* A type that is properly aligned for any stack member. */ union grecs_dhcpdalloc { grecs_dhcpdtype_int16 grecs_dhcpdss_alloc; YYSTYPE grecs_dhcpdvs_alloc; YYLTYPE grecs_dhcpdls_alloc; }; /* The size of the maximum gap between one aligned stack and the next. */ # define YYSTACK_GAP_MAXIMUM (sizeof (union grecs_dhcpdalloc) - 1) /* The size of an array large to enough to hold all stacks, each with N elements. */ # define YYSTACK_BYTES(N) \ ((N) * (sizeof (grecs_dhcpdtype_int16) + sizeof (YYSTYPE) + sizeof (YYLTYPE)) \ + 2 * YYSTACK_GAP_MAXIMUM) # define YYCOPY_NEEDED 1 /* Relocate STACK from its old location to the new one. The local variables YYSIZE and YYSTACKSIZE give the old and new number of elements in the stack, and YYPTR gives the new location of the stack. Advance YYPTR to a properly aligned location for the next stack. */ # define YYSTACK_RELOCATE(Stack_alloc, Stack) \ do \ { \ YYSIZE_T grecs_dhcpdnewbytes; \ YYCOPY (&grecs_dhcpdptr->Stack_alloc, Stack, grecs_dhcpdsize); \ Stack = &grecs_dhcpdptr->Stack_alloc; \ grecs_dhcpdnewbytes = grecs_dhcpdstacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ grecs_dhcpdptr += grecs_dhcpdnewbytes / sizeof (*grecs_dhcpdptr); \ } \ while (YYID (0)) #endif #if defined YYCOPY_NEEDED && YYCOPY_NEEDED /* Copy COUNT objects from SRC to DST. The source and destination do not overlap. */ # ifndef YYCOPY # if defined __GNUC__ && 1 < __GNUC__ # define YYCOPY(Dst, Src, Count) \ __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src))) # else # define YYCOPY(Dst, Src, Count) \ do \ { \ YYSIZE_T grecs_dhcpdi; \ for (grecs_dhcpdi = 0; grecs_dhcpdi < (Count); grecs_dhcpdi++) \ (Dst)[grecs_dhcpdi] = (Src)[grecs_dhcpdi]; \ } \ while (YYID (0)) # endif # endif #endif /* !YYCOPY_NEEDED */ /* YYFINAL -- State number of the termination state. */ #define YYFINAL 22 /* YYLAST -- Last index in YYTABLE. */ #define YYLAST 39 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 14 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 23 /* YYNRULES -- Number of rules. */ #define YYNRULES 38 /* YYNRULES -- Number of states. */ #define YYNSTATES 59 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 #define YYMAXUTOK 263 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? grecs_dhcpdtranslate[YYX] : YYUNDEFTOK) /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ static const grecs_dhcpdtype_uint8 grecs_dhcpdtranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 13, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 9, 2, 10, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 11, 2, 12, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, 5, 6, 7, 8 }; #if YYDEBUG /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in YYRHS. */ static const grecs_dhcpdtype_uint8 grecs_dhcpdprhs[] = { 0, 0, 3, 5, 6, 8, 10, 13, 15, 17, 19, 23, 24, 30, 33, 40, 41, 43, 44, 46, 48, 50, 53, 55, 57, 59, 61, 65, 69, 77, 79, 81, 82, 84, 86, 89, 95, 96, 98 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ static const grecs_dhcpdtype_int8 grecs_dhcpdrhs[] = { 15, 0, -1, 16, -1, -1, 17, -1, 18, -1, 17, 18, -1, 19, -1, 21, -1, 29, -1, 8, 24, 9, -1, -1, 8, 10, 20, 5, 9, -1, 27, 9, -1, 8, 23, 11, 16, 12, 22, -1, -1, 9, -1, -1, 24, -1, 25, -1, 26, -1, 25, 26, -1, 27, -1, 28, -1, 7, -1, 8, -1, 7, 13, 7, -1, 28, 13, 7, -1, 30, 5, 11, 16, 12, 32, 35, -1, 3, -1, 4, -1, -1, 33, -1, 34, -1, 33, 34, -1, 31, 5, 11, 16, 12, -1, -1, 36, -1, 6, 11, 16, 12, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const grecs_dhcpdtype_uint16 grecs_dhcpdrline[] = { 0, 77, 77, 87, 90, 96, 100, 112, 113, 114, 117, 131, 131, 139, 148, 159, 160, 164, 167, 170, 194, 199, 205, 211, 219, 220, 223, 239, 250, 271, 277, 284, 287, 290, 294, 306, 322, 325, 328 }; #endif #if YYDEBUG || YYERROR_VERBOSE || 1 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char *const grecs_dhcpdtname[] = { "$end", "error", "$undefined", "DHCPD_IF", "DHCPD_ELSIF", "DHCPD_EXPR", "DHCPD_ELSE", "DHCPD_STRING", "DHCPD_IDENT", "';'", "'='", "'{'", "'}'", "','", "$accept", "input", "maybe_stmtlist", "stmtlist", "stmt", "simple", "$@1", "block", "opt_semi", "tag", "vallist", "vlist", "value", "string", "strlist", "cond", "if", "elsif", "opt_elsifchain", "elsifchain", "elsifcond", "opt_elsecond", "elsecond", YY_NULL }; #endif # ifdef YYPRINT /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to token YYLEX-NUM. */ static const grecs_dhcpdtype_uint16 grecs_dhcpdtoknum[] = { 0, 256, 257, 258, 259, 260, 261, 262, 263, 59, 61, 123, 125, 44 }; # endif /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const grecs_dhcpdtype_uint8 grecs_dhcpdr1[] = { 0, 14, 15, 16, 16, 17, 17, 18, 18, 18, 19, 20, 19, 19, 21, 22, 22, 23, 23, 24, 25, 25, 26, 26, 27, 27, 28, 28, 29, 30, 31, 32, 32, 33, 33, 34, 35, 35, 36 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ static const grecs_dhcpdtype_uint8 grecs_dhcpdr2[] = { 0, 2, 1, 0, 1, 1, 2, 1, 1, 1, 3, 0, 5, 2, 6, 0, 1, 0, 1, 1, 1, 2, 1, 1, 1, 1, 3, 3, 7, 1, 1, 0, 1, 1, 2, 5, 0, 1, 4 }; /* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM. Performed when YYTABLE doesn't specify something else to do. Zero means the default is an error. */ static const grecs_dhcpdtype_uint8 grecs_dhcpddefact[] = { 3, 29, 24, 17, 0, 2, 4, 5, 7, 8, 0, 9, 0, 24, 25, 11, 0, 18, 19, 20, 22, 23, 1, 6, 13, 0, 0, 0, 3, 10, 21, 0, 3, 26, 0, 0, 27, 0, 12, 15, 31, 16, 14, 30, 0, 36, 32, 33, 0, 0, 28, 37, 34, 3, 3, 0, 0, 35, 38 }; /* YYDEFGOTO[NTERM-NUM]. */ static const grecs_dhcpdtype_int8 grecs_dhcpddefgoto[] = { -1, 4, 5, 6, 7, 8, 27, 9, 42, 16, 17, 18, 19, 10, 21, 11, 12, 44, 45, 46, 47, 50, 51 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ #define YYPACT_NINF -29 static const grecs_dhcpdtype_int8 grecs_dhcpdpact[] = { -1, -29, -29, 1, 3, -29, -1, -29, -29, -29, -4, -29, 9, 2, -29, -29, 6, 10, 5, -29, -29, 7, -29, -29, -29, 11, 14, 13, -1, -29, -29, 16, -1, -29, 15, 17, -29, 18, -29, 19, 23, -29, -29, -29, 26, 27, 23, -29, 21, 24, -29, -29, -29, -1, -1, 22, 25, -29, -29 }; /* YYPGOTO[NTERM-NUM]. */ static const grecs_dhcpdtype_int8 grecs_dhcpdpgoto[] = { -29, -29, -28, -29, 30, -29, -29, -29, -29, -29, -29, -29, 20, -2, -29, -29, -29, -29, -29, -29, -7, -29, -29 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule which number is the opposite. If YYTABLE_NINF, syntax error. */ #define YYTABLE_NINF -26 static const grecs_dhcpdtype_int8 grecs_dhcpdtable[] = { 35, 20, 1, 22, 37, 24, 2, 3, 13, 14, -25, 15, 13, 14, 25, 26, 20, 28, 34, 29, 31, 33, 32, 36, 38, 55, 56, 43, 41, 39, 40, 48, 53, 49, 57, 54, 23, 58, 30, 52 }; #define grecs_dhcpdpact_value_is_default(Yystate) \ (!!((Yystate) == (-29))) #define grecs_dhcpdtable_value_is_error(Yytable_value) \ YYID (0) static const grecs_dhcpdtype_uint8 grecs_dhcpdcheck[] = { 28, 3, 3, 0, 32, 9, 7, 8, 7, 8, 9, 10, 7, 8, 5, 13, 18, 11, 5, 9, 13, 7, 11, 7, 9, 53, 54, 4, 9, 12, 12, 5, 11, 6, 12, 11, 6, 12, 18, 46 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const grecs_dhcpdtype_uint8 grecs_dhcpdstos[] = { 0, 3, 7, 8, 15, 16, 17, 18, 19, 21, 27, 29, 30, 7, 8, 10, 23, 24, 25, 26, 27, 28, 0, 18, 9, 5, 13, 20, 11, 9, 26, 13, 11, 7, 5, 16, 7, 16, 9, 12, 12, 9, 22, 4, 31, 32, 33, 34, 5, 6, 35, 36, 34, 11, 11, 16, 16, 12, 12 }; #define grecs_dhcpderrok (grecs_dhcpderrstatus = 0) #define grecs_dhcpdclearin (grecs_dhcpdchar = YYEMPTY) #define YYEMPTY (-2) #define YYEOF 0 #define YYACCEPT goto grecs_dhcpdacceptlab #define YYABORT goto grecs_dhcpdabortlab #define YYERROR goto grecs_dhcpderrorlab /* Like YYERROR except do call grecs_dhcpderror. This remains here temporarily to ease the transition to the new meaning of YYERROR, for GCC. Once GCC version 2 has supplanted version 1, this can go. However, YYFAIL appears to be in use. Nevertheless, it is formally deprecated in Bison 2.4.2's NEWS entry, where a plan to phase it out is discussed. */ #define YYFAIL goto grecs_dhcpderrlab #if defined YYFAIL /* This is here to suppress warnings from the GCC cpp's -Wunused-macros. Normally we don't worry about that warning, but some users do, and we want to make it easy for users to remove YYFAIL uses, which will produce warnings from Bison 2.5. */ #endif #define YYRECOVERING() (!!grecs_dhcpderrstatus) #define YYBACKUP(Token, Value) \ do \ if (grecs_dhcpdchar == YYEMPTY) \ { \ grecs_dhcpdchar = (Token); \ grecs_dhcpdlval = (Value); \ YYPOPSTACK (grecs_dhcpdlen); \ grecs_dhcpdstate = *grecs_dhcpdssp; \ goto grecs_dhcpdbackup; \ } \ else \ { \ grecs_dhcpderror (YY_("syntax error: cannot back up")); \ YYERROR; \ } \ while (YYID (0)) /* Error token number */ #define YYTERROR 1 #define YYERRCODE 256 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. If N is 0, then set CURRENT to the empty location which ends the previous symbol: RHS[0] (always defined). */ #ifndef YYLLOC_DEFAULT # define YYLLOC_DEFAULT(Current, Rhs, N) \ do \ if (YYID (N)) \ { \ (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ } \ else \ { \ (Current).first_line = (Current).last_line = \ YYRHSLOC (Rhs, 0).last_line; \ (Current).first_column = (Current).last_column = \ YYRHSLOC (Rhs, 0).last_column; \ } \ while (YYID (0)) #endif #define YYRHSLOC(Rhs, K) ((Rhs)[K]) /* YY_LOCATION_PRINT -- Print the location on the stream. This macro was not mandated originally: define only if we know we won't break user code: when these are the locations we know. */ #ifndef YY_LOCATION_PRINT # if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL /* Print *YYLOCP on YYO. Private, do not rely on its existence. */ __attribute__((__unused__)) #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static unsigned grecs_dhcpd_location_print_ (FILE *grecs_dhcpdo, YYLTYPE const * const grecs_dhcpdlocp) #else static unsigned grecs_dhcpd_location_print_ (grecs_dhcpdo, grecs_dhcpdlocp) FILE *grecs_dhcpdo; YYLTYPE const * const grecs_dhcpdlocp; #endif { unsigned res = 0; int end_col = 0 != grecs_dhcpdlocp->last_column ? grecs_dhcpdlocp->last_column - 1 : 0; if (0 <= grecs_dhcpdlocp->first_line) { res += fprintf (grecs_dhcpdo, "%d", grecs_dhcpdlocp->first_line); if (0 <= grecs_dhcpdlocp->first_column) res += fprintf (grecs_dhcpdo, ".%d", grecs_dhcpdlocp->first_column); } if (0 <= grecs_dhcpdlocp->last_line) { if (grecs_dhcpdlocp->first_line < grecs_dhcpdlocp->last_line) { res += fprintf (grecs_dhcpdo, "-%d", grecs_dhcpdlocp->last_line); if (0 <= end_col) res += fprintf (grecs_dhcpdo, ".%d", end_col); } else if (0 <= end_col && grecs_dhcpdlocp->first_column < end_col) res += fprintf (grecs_dhcpdo, "-%d", end_col); } return res; } # define YY_LOCATION_PRINT(File, Loc) \ grecs_dhcpd_location_print_ (File, &(Loc)) # else # define YY_LOCATION_PRINT(File, Loc) ((void) 0) # endif #endif /* YYLEX -- calling `grecs_dhcpdlex' with the right arguments. */ #ifdef YYLEX_PARAM # define YYLEX grecs_dhcpdlex (YYLEX_PARAM) #else # define YYLEX grecs_dhcpdlex () #endif /* Enable debugging if requested. */ #if YYDEBUG # ifndef YYFPRINTF # include <stdio.h> /* INFRINGES ON USER NAME SPACE */ # define YYFPRINTF fprintf # endif # define YYDPRINTF(Args) \ do { \ if (grecs_dhcpddebug) \ YYFPRINTF Args; \ } while (YYID (0)) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ do { \ if (grecs_dhcpddebug) \ { \ YYFPRINTF (stderr, "%s ", Title); \ grecs_dhcpd_symbol_print (stderr, \ Type, Value, Location); \ YYFPRINTF (stderr, "\n"); \ } \ } while (YYID (0)) /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ /*ARGSUSED*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void grecs_dhcpd_symbol_value_print (FILE *grecs_dhcpdoutput, int grecs_dhcpdtype, YYSTYPE const * const grecs_dhcpdvaluep, YYLTYPE const * const grecs_dhcpdlocationp) #else static void grecs_dhcpd_symbol_value_print (grecs_dhcpdoutput, grecs_dhcpdtype, grecs_dhcpdvaluep, grecs_dhcpdlocationp) FILE *grecs_dhcpdoutput; int grecs_dhcpdtype; YYSTYPE const * const grecs_dhcpdvaluep; YYLTYPE const * const grecs_dhcpdlocationp; #endif { FILE *grecs_dhcpdo = grecs_dhcpdoutput; YYUSE (grecs_dhcpdo); if (!grecs_dhcpdvaluep) return; YYUSE (grecs_dhcpdlocationp); # ifdef YYPRINT if (grecs_dhcpdtype < YYNTOKENS) YYPRINT (grecs_dhcpdoutput, grecs_dhcpdtoknum[grecs_dhcpdtype], *grecs_dhcpdvaluep); # else YYUSE (grecs_dhcpdoutput); # endif switch (grecs_dhcpdtype) { default: break; } } /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void grecs_dhcpd_symbol_print (FILE *grecs_dhcpdoutput, int grecs_dhcpdtype, YYSTYPE const * const grecs_dhcpdvaluep, YYLTYPE const * const grecs_dhcpdlocationp) #else static void grecs_dhcpd_symbol_print (grecs_dhcpdoutput, grecs_dhcpdtype, grecs_dhcpdvaluep, grecs_dhcpdlocationp) FILE *grecs_dhcpdoutput; int grecs_dhcpdtype; YYSTYPE const * const grecs_dhcpdvaluep; YYLTYPE const * const grecs_dhcpdlocationp; #endif { if (grecs_dhcpdtype < YYNTOKENS) YYFPRINTF (grecs_dhcpdoutput, "token %s (", grecs_dhcpdtname[grecs_dhcpdtype]); else YYFPRINTF (grecs_dhcpdoutput, "nterm %s (", grecs_dhcpdtname[grecs_dhcpdtype]); YY_LOCATION_PRINT (grecs_dhcpdoutput, *grecs_dhcpdlocationp); YYFPRINTF (grecs_dhcpdoutput, ": "); grecs_dhcpd_symbol_value_print (grecs_dhcpdoutput, grecs_dhcpdtype, grecs_dhcpdvaluep, grecs_dhcpdlocationp); YYFPRINTF (grecs_dhcpdoutput, ")"); } /*------------------------------------------------------------------. | grecs_dhcpd_stack_print -- Print the state stack from its BOTTOM up to its | | TOP (included). | `------------------------------------------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void grecs_dhcpd_stack_print (grecs_dhcpdtype_int16 *grecs_dhcpdbottom, grecs_dhcpdtype_int16 *grecs_dhcpdtop) #else static void grecs_dhcpd_stack_print (grecs_dhcpdbottom, grecs_dhcpdtop) grecs_dhcpdtype_int16 *grecs_dhcpdbottom; grecs_dhcpdtype_int16 *grecs_dhcpdtop; #endif { YYFPRINTF (stderr, "Stack now"); for (; grecs_dhcpdbottom <= grecs_dhcpdtop; grecs_dhcpdbottom++) { int grecs_dhcpdbot = *grecs_dhcpdbottom; YYFPRINTF (stderr, " %d", grecs_dhcpdbot); } YYFPRINTF (stderr, "\n"); } # define YY_STACK_PRINT(Bottom, Top) \ do { \ if (grecs_dhcpddebug) \ grecs_dhcpd_stack_print ((Bottom), (Top)); \ } while (YYID (0)) /*------------------------------------------------. | Report that the YYRULE is going to be reduced. | `------------------------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void grecs_dhcpd_reduce_print (YYSTYPE *grecs_dhcpdvsp, YYLTYPE *grecs_dhcpdlsp, int grecs_dhcpdrule) #else static void grecs_dhcpd_reduce_print (grecs_dhcpdvsp, grecs_dhcpdlsp, grecs_dhcpdrule) YYSTYPE *grecs_dhcpdvsp; YYLTYPE *grecs_dhcpdlsp; int grecs_dhcpdrule; #endif { int grecs_dhcpdnrhs = grecs_dhcpdr2[grecs_dhcpdrule]; int grecs_dhcpdi; unsigned long int grecs_dhcpdlno = grecs_dhcpdrline[grecs_dhcpdrule]; YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", grecs_dhcpdrule - 1, grecs_dhcpdlno); /* The symbols being reduced. */ for (grecs_dhcpdi = 0; grecs_dhcpdi < grecs_dhcpdnrhs; grecs_dhcpdi++) { YYFPRINTF (stderr, " $%d = ", grecs_dhcpdi + 1); grecs_dhcpd_symbol_print (stderr, grecs_dhcpdrhs[grecs_dhcpdprhs[grecs_dhcpdrule] + grecs_dhcpdi], &(grecs_dhcpdvsp[(grecs_dhcpdi + 1) - (grecs_dhcpdnrhs)]) , &(grecs_dhcpdlsp[(grecs_dhcpdi + 1) - (grecs_dhcpdnrhs)]) ); YYFPRINTF (stderr, "\n"); } } # define YY_REDUCE_PRINT(Rule) \ do { \ if (grecs_dhcpddebug) \ grecs_dhcpd_reduce_print (grecs_dhcpdvsp, grecs_dhcpdlsp, Rule); \ } while (YYID (0)) /* Nonzero means print parse trace. It is left uninitialized so that multiple parsers can coexist. */ int grecs_dhcpddebug; #else /* !YYDEBUG */ # define YYDPRINTF(Args) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) # define YY_STACK_PRINT(Bottom, Top) # define YY_REDUCE_PRINT(Rule) #endif /* !YYDEBUG */ /* YYINITDEPTH -- initial size of the parser's stacks. */ #ifndef YYINITDEPTH # define YYINITDEPTH 200 #endif /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only if the built-in stack extension method is used). Do not make this value too large; the results are undefined if YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) evaluated with infinite-precision integer arithmetic. */ #ifndef YYMAXDEPTH # define YYMAXDEPTH 10000 #endif #if YYERROR_VERBOSE # ifndef grecs_dhcpdstrlen # if defined __GLIBC__ && defined _STRING_H # define grecs_dhcpdstrlen strlen # else /* Return the length of YYSTR. */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static YYSIZE_T grecs_dhcpdstrlen (const char *grecs_dhcpdstr) #else static YYSIZE_T grecs_dhcpdstrlen (grecs_dhcpdstr) const char *grecs_dhcpdstr; #endif { YYSIZE_T grecs_dhcpdlen; for (grecs_dhcpdlen = 0; grecs_dhcpdstr[grecs_dhcpdlen]; grecs_dhcpdlen++) continue; return grecs_dhcpdlen; } # endif # endif # ifndef grecs_dhcpdstpcpy # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE # define grecs_dhcpdstpcpy stpcpy # else /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in YYDEST. */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static char * grecs_dhcpdstpcpy (char *grecs_dhcpddest, const char *grecs_dhcpdsrc) #else static char * grecs_dhcpdstpcpy (grecs_dhcpddest, grecs_dhcpdsrc) char *grecs_dhcpddest; const char *grecs_dhcpdsrc; #endif { char *grecs_dhcpdd = grecs_dhcpddest; const char *grecs_dhcpds = grecs_dhcpdsrc; while ((*grecs_dhcpdd++ = *grecs_dhcpds++) != '\0') continue; return grecs_dhcpdd - 1; } # endif # endif # ifndef grecs_dhcpdtnamerr /* Copy to YYRES the contents of YYSTR after stripping away unnecessary quotes and backslashes, so that it's suitable for grecs_dhcpderror. The heuristic is that double-quoting is unnecessary unless the string contains an apostrophe, a comma, or backslash (other than backslash-backslash). YYSTR is taken from grecs_dhcpdtname. If YYRES is null, do not copy; instead, return the length of what the result would have been. */ static YYSIZE_T grecs_dhcpdtnamerr (char *grecs_dhcpdres, const char *grecs_dhcpdstr) { if (*grecs_dhcpdstr == '"') { YYSIZE_T grecs_dhcpdn = 0; char const *grecs_dhcpdp = grecs_dhcpdstr; for (;;) switch (*++grecs_dhcpdp) { case '\'': case ',': goto do_not_strip_quotes; case '\\': if (*++grecs_dhcpdp != '\\') goto do_not_strip_quotes; /* Fall through. */ default: if (grecs_dhcpdres) grecs_dhcpdres[grecs_dhcpdn] = *grecs_dhcpdp; grecs_dhcpdn++; break; case '"': if (grecs_dhcpdres) grecs_dhcpdres[grecs_dhcpdn] = '\0'; return grecs_dhcpdn; } do_not_strip_quotes: ; } if (! grecs_dhcpdres) return grecs_dhcpdstrlen (grecs_dhcpdstr); return grecs_dhcpdstpcpy (grecs_dhcpdres, grecs_dhcpdstr) - grecs_dhcpdres; } # endif /* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message about the unexpected token YYTOKEN for the state stack whose top is YYSSP. Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is not large enough to hold the message. In that case, also set *YYMSG_ALLOC to the required number of bytes. Return 2 if the required number of bytes is too large to store. */ static int grecs_dhcpdsyntax_error (YYSIZE_T *grecs_dhcpdmsg_alloc, char **grecs_dhcpdmsg, grecs_dhcpdtype_int16 *grecs_dhcpdssp, int grecs_dhcpdtoken) { YYSIZE_T grecs_dhcpdsize0 = grecs_dhcpdtnamerr (YY_NULL, grecs_dhcpdtname[grecs_dhcpdtoken]); YYSIZE_T grecs_dhcpdsize = grecs_dhcpdsize0; enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; /* Internationalized format string. */ const char *grecs_dhcpdformat = YY_NULL; /* Arguments of grecs_dhcpdformat. */ char const *grecs_dhcpdarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; /* Number of reported tokens (one for the "unexpected", one per "expected"). */ int grecs_dhcpdcount = 0; /* There are many possibilities here to consider: - Assume YYFAIL is not used. It's too flawed to consider. See <http://lists.gnu.org/archive/html/bison-patches/2009-12/msg00024.html> for details. YYERROR is fine as it does not invoke this function. - If this state is a consistent state with a default action, then the only way this function was invoked is if the default action is an error action. In that case, don't check for expected tokens because there are none. - The only way there can be no lookahead present (in grecs_dhcpdchar) is if this state is a consistent state with a default action. Thus, detecting the absence of a lookahead is sufficient to determine that there is no unexpected or expected token to report. In that case, just report a simple "syntax error". - Don't assume there isn't a lookahead just because this state is a consistent state with a default action. There might have been a previous inconsistent state, consistent state with a non-default action, or user semantic action that manipulated grecs_dhcpdchar. - Of course, the expected token list depends on states to have correct lookahead information, and it depends on the parser not to perform extra reductions after fetching a lookahead from the scanner and before detecting a syntax error. Thus, state merging (from LALR or IELR) and default reductions corrupt the expected token list. However, the list is correct for canonical LR with one exception: it will still contain any token that will not be accepted due to an error action in a later state. */ if (grecs_dhcpdtoken != YYEMPTY) { int grecs_dhcpdn = grecs_dhcpdpact[*grecs_dhcpdssp]; grecs_dhcpdarg[grecs_dhcpdcount++] = grecs_dhcpdtname[grecs_dhcpdtoken]; if (!grecs_dhcpdpact_value_is_default (grecs_dhcpdn)) { /* Start YYX at -YYN if negative to avoid negative indexes in YYCHECK. In other words, skip the first -YYN actions for this state because they are default actions. */ int grecs_dhcpdxbegin = grecs_dhcpdn < 0 ? -grecs_dhcpdn : 0; /* Stay within bounds of both grecs_dhcpdcheck and grecs_dhcpdtname. */ int grecs_dhcpdchecklim = YYLAST - grecs_dhcpdn + 1; int grecs_dhcpdxend = grecs_dhcpdchecklim < YYNTOKENS ? grecs_dhcpdchecklim : YYNTOKENS; int grecs_dhcpdx; for (grecs_dhcpdx = grecs_dhcpdxbegin; grecs_dhcpdx < grecs_dhcpdxend; ++grecs_dhcpdx) if (grecs_dhcpdcheck[grecs_dhcpdx + grecs_dhcpdn] == grecs_dhcpdx && grecs_dhcpdx != YYTERROR && !grecs_dhcpdtable_value_is_error (grecs_dhcpdtable[grecs_dhcpdx + grecs_dhcpdn])) { if (grecs_dhcpdcount == YYERROR_VERBOSE_ARGS_MAXIMUM) { grecs_dhcpdcount = 1; grecs_dhcpdsize = grecs_dhcpdsize0; break; } grecs_dhcpdarg[grecs_dhcpdcount++] = grecs_dhcpdtname[grecs_dhcpdx]; { YYSIZE_T grecs_dhcpdsize1 = grecs_dhcpdsize + grecs_dhcpdtnamerr (YY_NULL, grecs_dhcpdtname[grecs_dhcpdx]); if (! (grecs_dhcpdsize <= grecs_dhcpdsize1 && grecs_dhcpdsize1 <= YYSTACK_ALLOC_MAXIMUM)) return 2; grecs_dhcpdsize = grecs_dhcpdsize1; } } } } switch (grecs_dhcpdcount) { # define YYCASE_(N, S) \ case N: \ grecs_dhcpdformat = S; \ break YYCASE_(0, YY_("syntax error")); YYCASE_(1, YY_("syntax error, unexpected %s")); YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s")); YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s")); YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s")); # undef YYCASE_ } { YYSIZE_T grecs_dhcpdsize1 = grecs_dhcpdsize + grecs_dhcpdstrlen (grecs_dhcpdformat); if (! (grecs_dhcpdsize <= grecs_dhcpdsize1 && grecs_dhcpdsize1 <= YYSTACK_ALLOC_MAXIMUM)) return 2; grecs_dhcpdsize = grecs_dhcpdsize1; } if (*grecs_dhcpdmsg_alloc < grecs_dhcpdsize) { *grecs_dhcpdmsg_alloc = 2 * grecs_dhcpdsize; if (! (grecs_dhcpdsize <= *grecs_dhcpdmsg_alloc && *grecs_dhcpdmsg_alloc <= YYSTACK_ALLOC_MAXIMUM)) *grecs_dhcpdmsg_alloc = YYSTACK_ALLOC_MAXIMUM; return 1; } /* Avoid sprintf, as that infringes on the user's name space. Don't have undefined behavior even if the translation produced a string with the wrong number of "%s"s. */ { char *grecs_dhcpdp = *grecs_dhcpdmsg; int grecs_dhcpdi = 0; while ((*grecs_dhcpdp = *grecs_dhcpdformat) != '\0') if (*grecs_dhcpdp == '%' && grecs_dhcpdformat[1] == 's' && grecs_dhcpdi < grecs_dhcpdcount) { grecs_dhcpdp += grecs_dhcpdtnamerr (grecs_dhcpdp, grecs_dhcpdarg[grecs_dhcpdi++]); grecs_dhcpdformat += 2; } else { grecs_dhcpdp++; grecs_dhcpdformat++; } } return 0; } #endif /* YYERROR_VERBOSE */ /*-----------------------------------------------. | Release the memory associated to this symbol. | `-----------------------------------------------*/ /*ARGSUSED*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void grecs_dhcpddestruct (const char *grecs_dhcpdmsg, int grecs_dhcpdtype, YYSTYPE *grecs_dhcpdvaluep, YYLTYPE *grecs_dhcpdlocationp) #else static void grecs_dhcpddestruct (grecs_dhcpdmsg, grecs_dhcpdtype, grecs_dhcpdvaluep, grecs_dhcpdlocationp) const char *grecs_dhcpdmsg; int grecs_dhcpdtype; YYSTYPE *grecs_dhcpdvaluep; YYLTYPE *grecs_dhcpdlocationp; #endif { YYUSE (grecs_dhcpdvaluep); YYUSE (grecs_dhcpdlocationp); if (!grecs_dhcpdmsg) grecs_dhcpdmsg = "Deleting"; YY_SYMBOL_PRINT (grecs_dhcpdmsg, grecs_dhcpdtype, grecs_dhcpdvaluep, grecs_dhcpdlocationp); switch (grecs_dhcpdtype) { default: break; } } /* The lookahead symbol. */ int grecs_dhcpdchar; #ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN # define YY_IGNORE_MAYBE_UNINITIALIZED_END #endif #ifndef YY_INITIAL_VALUE # define YY_INITIAL_VALUE(Value) /* Nothing. */ #endif /* The semantic value of the lookahead symbol. */ YYSTYPE grecs_dhcpdlval YY_INITIAL_VALUE(grecs_dhcpdval_default); /* Location data for the lookahead symbol. */ YYLTYPE grecs_dhcpdlloc # if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL = { 1, 1, 1, 1 } # endif ; /* Number of syntax errors so far. */ int grecs_dhcpdnerrs; /*----------. | grecs_dhcpdparse. | `----------*/ #ifdef YYPARSE_PARAM #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) int grecs_dhcpdparse (void *YYPARSE_PARAM) #else int grecs_dhcpdparse (YYPARSE_PARAM) void *YYPARSE_PARAM; #endif #else /* ! YYPARSE_PARAM */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) int grecs_dhcpdparse (void) #else int grecs_dhcpdparse () #endif #endif { int grecs_dhcpdstate; /* Number of tokens to shift before error messages enabled. */ int grecs_dhcpderrstatus; /* The stacks and their tools: `grecs_dhcpdss': related to states. `grecs_dhcpdvs': related to semantic values. `grecs_dhcpdls': related to locations. Refer to the stacks through separate pointers, to allow grecs_dhcpdoverflow to reallocate them elsewhere. */ /* The state stack. */ grecs_dhcpdtype_int16 grecs_dhcpdssa[YYINITDEPTH]; grecs_dhcpdtype_int16 *grecs_dhcpdss; grecs_dhcpdtype_int16 *grecs_dhcpdssp; /* The semantic value stack. */ YYSTYPE grecs_dhcpdvsa[YYINITDEPTH]; YYSTYPE *grecs_dhcpdvs; YYSTYPE *grecs_dhcpdvsp; /* The location stack. */ YYLTYPE grecs_dhcpdlsa[YYINITDEPTH]; YYLTYPE *grecs_dhcpdls; YYLTYPE *grecs_dhcpdlsp; /* The locations where the error started and ended. */ YYLTYPE grecs_dhcpderror_range[3]; YYSIZE_T grecs_dhcpdstacksize; int grecs_dhcpdn; int grecs_dhcpdresult; /* Lookahead token as an internal (translated) token number. */ int grecs_dhcpdtoken = 0; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE grecs_dhcpdval; YYLTYPE grecs_dhcpdloc; #if YYERROR_VERBOSE /* Buffer for error messages, and its allocated size. */ char grecs_dhcpdmsgbuf[128]; char *grecs_dhcpdmsg = grecs_dhcpdmsgbuf; YYSIZE_T grecs_dhcpdmsg_alloc = sizeof grecs_dhcpdmsgbuf; #endif #define YYPOPSTACK(N) (grecs_dhcpdvsp -= (N), grecs_dhcpdssp -= (N), grecs_dhcpdlsp -= (N)) /* The number of symbols on the RHS of the reduced rule. Keep to zero when no symbol should be popped. */ int grecs_dhcpdlen = 0; grecs_dhcpdssp = grecs_dhcpdss = grecs_dhcpdssa; grecs_dhcpdvsp = grecs_dhcpdvs = grecs_dhcpdvsa; grecs_dhcpdlsp = grecs_dhcpdls = grecs_dhcpdlsa; grecs_dhcpdstacksize = YYINITDEPTH; YYDPRINTF ((stderr, "Starting parse\n")); grecs_dhcpdstate = 0; grecs_dhcpderrstatus = 0; grecs_dhcpdnerrs = 0; grecs_dhcpdchar = YYEMPTY; /* Cause a token to be read. */ grecs_dhcpdlsp[0] = grecs_dhcpdlloc; goto grecs_dhcpdsetstate; /*------------------------------------------------------------. | grecs_dhcpdnewstate -- Push a new state, which is found in grecs_dhcpdstate. | `------------------------------------------------------------*/ grecs_dhcpdnewstate: /* In all cases, when you get here, the value and location stacks have just been pushed. So pushing a state here evens the stacks. */ grecs_dhcpdssp++; grecs_dhcpdsetstate: *grecs_dhcpdssp = grecs_dhcpdstate; if (grecs_dhcpdss + grecs_dhcpdstacksize - 1 <= grecs_dhcpdssp) { /* Get the current used size of the three stacks, in elements. */ YYSIZE_T grecs_dhcpdsize = grecs_dhcpdssp - grecs_dhcpdss + 1; #ifdef grecs_dhcpdoverflow { /* Give user a chance to reallocate the stack. Use copies of these so that the &'s don't force the real ones into memory. */ YYSTYPE *grecs_dhcpdvs1 = grecs_dhcpdvs; grecs_dhcpdtype_int16 *grecs_dhcpdss1 = grecs_dhcpdss; YYLTYPE *grecs_dhcpdls1 = grecs_dhcpdls; /* Each stack pointer address is followed by the size of the data in use in that stack, in bytes. This used to be a conditional around just the two extra args, but that might be undefined if grecs_dhcpdoverflow is a macro. */ grecs_dhcpdoverflow (YY_("memory exhausted"), &grecs_dhcpdss1, grecs_dhcpdsize * sizeof (*grecs_dhcpdssp), &grecs_dhcpdvs1, grecs_dhcpdsize * sizeof (*grecs_dhcpdvsp), &grecs_dhcpdls1, grecs_dhcpdsize * sizeof (*grecs_dhcpdlsp), &grecs_dhcpdstacksize); grecs_dhcpdls = grecs_dhcpdls1; grecs_dhcpdss = grecs_dhcpdss1; grecs_dhcpdvs = grecs_dhcpdvs1; } #else /* no grecs_dhcpdoverflow */ # ifndef YYSTACK_RELOCATE goto grecs_dhcpdexhaustedlab; # else /* Extend the stack our own way. */ if (YYMAXDEPTH <= grecs_dhcpdstacksize) goto grecs_dhcpdexhaustedlab; grecs_dhcpdstacksize *= 2; if (YYMAXDEPTH < grecs_dhcpdstacksize) grecs_dhcpdstacksize = YYMAXDEPTH; { grecs_dhcpdtype_int16 *grecs_dhcpdss1 = grecs_dhcpdss; union grecs_dhcpdalloc *grecs_dhcpdptr = (union grecs_dhcpdalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (grecs_dhcpdstacksize)); if (! grecs_dhcpdptr) goto grecs_dhcpdexhaustedlab; YYSTACK_RELOCATE (grecs_dhcpdss_alloc, grecs_dhcpdss); YYSTACK_RELOCATE (grecs_dhcpdvs_alloc, grecs_dhcpdvs); YYSTACK_RELOCATE (grecs_dhcpdls_alloc, grecs_dhcpdls); # undef YYSTACK_RELOCATE if (grecs_dhcpdss1 != grecs_dhcpdssa) YYSTACK_FREE (grecs_dhcpdss1); } # endif #endif /* no grecs_dhcpdoverflow */ grecs_dhcpdssp = grecs_dhcpdss + grecs_dhcpdsize - 1; grecs_dhcpdvsp = grecs_dhcpdvs + grecs_dhcpdsize - 1; grecs_dhcpdlsp = grecs_dhcpdls + grecs_dhcpdsize - 1; YYDPRINTF ((stderr, "Stack size increased to %lu\n", (unsigned long int) grecs_dhcpdstacksize)); if (grecs_dhcpdss + grecs_dhcpdstacksize - 1 <= grecs_dhcpdssp) YYABORT; } YYDPRINTF ((stderr, "Entering state %d\n", grecs_dhcpdstate)); if (grecs_dhcpdstate == YYFINAL) YYACCEPT; goto grecs_dhcpdbackup; /*-----------. | grecs_dhcpdbackup. | `-----------*/ grecs_dhcpdbackup: /* Do appropriate processing given the current state. Read a lookahead token if we need one and don't already have one. */ /* First try to decide what to do without reference to lookahead token. */ grecs_dhcpdn = grecs_dhcpdpact[grecs_dhcpdstate]; if (grecs_dhcpdpact_value_is_default (grecs_dhcpdn)) goto grecs_dhcpddefault; /* Not known => get a lookahead token if don't already have one. */ /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ if (grecs_dhcpdchar == YYEMPTY) { YYDPRINTF ((stderr, "Reading a token: ")); grecs_dhcpdchar = YYLEX; } if (grecs_dhcpdchar <= YYEOF) { grecs_dhcpdchar = grecs_dhcpdtoken = YYEOF; YYDPRINTF ((stderr, "Now at end of input.\n")); } else { grecs_dhcpdtoken = YYTRANSLATE (grecs_dhcpdchar); YY_SYMBOL_PRINT ("Next token is", grecs_dhcpdtoken, &grecs_dhcpdlval, &grecs_dhcpdlloc); } /* If the proper action on seeing token YYTOKEN is to reduce or to detect an error, take that action. */ grecs_dhcpdn += grecs_dhcpdtoken; if (grecs_dhcpdn < 0 || YYLAST < grecs_dhcpdn || grecs_dhcpdcheck[grecs_dhcpdn] != grecs_dhcpdtoken) goto grecs_dhcpddefault; grecs_dhcpdn = grecs_dhcpdtable[grecs_dhcpdn]; if (grecs_dhcpdn <= 0) { if (grecs_dhcpdtable_value_is_error (grecs_dhcpdn)) goto grecs_dhcpderrlab; grecs_dhcpdn = -grecs_dhcpdn; goto grecs_dhcpdreduce; } /* Count tokens shifted since error; after three, turn off error status. */ if (grecs_dhcpderrstatus) grecs_dhcpderrstatus--; /* Shift the lookahead token. */ YY_SYMBOL_PRINT ("Shifting", grecs_dhcpdtoken, &grecs_dhcpdlval, &grecs_dhcpdlloc); /* Discard the shifted token. */ grecs_dhcpdchar = YYEMPTY; grecs_dhcpdstate = grecs_dhcpdn; YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++grecs_dhcpdvsp = grecs_dhcpdlval; YY_IGNORE_MAYBE_UNINITIALIZED_END *++grecs_dhcpdlsp = grecs_dhcpdlloc; goto grecs_dhcpdnewstate; /*-----------------------------------------------------------. | grecs_dhcpddefault -- do the default action for the current state. | `-----------------------------------------------------------*/ grecs_dhcpddefault: grecs_dhcpdn = grecs_dhcpddefact[grecs_dhcpdstate]; if (grecs_dhcpdn == 0) goto grecs_dhcpderrlab; goto grecs_dhcpdreduce; /*-----------------------------. | grecs_dhcpdreduce -- Do a reduction. | `-----------------------------*/ grecs_dhcpdreduce: /* grecs_dhcpdn is the number of a rule to reduce with. */ grecs_dhcpdlen = grecs_dhcpdr2[grecs_dhcpdn]; /* If YYLEN is nonzero, implement the default value of the action: `$$ = $1'. Otherwise, the following line sets YYVAL to garbage. This behavior is undocumented and Bison users should not rely upon it. Assigning to YYVAL unconditionally makes the parser a bit smaller, and it avoids a GCC warning that YYVAL may be used uninitialized. */ grecs_dhcpdval = grecs_dhcpdvsp[1-grecs_dhcpdlen]; /* Default location. */ YYLLOC_DEFAULT (grecs_dhcpdloc, (grecs_dhcpdlsp - grecs_dhcpdlen), grecs_dhcpdlen); YY_REDUCE_PRINT (grecs_dhcpdn); switch (grecs_dhcpdn) { case 2: /* Line 1792 of yacc.c */ #line 78 "dhcpd-gram.y" { parse_tree = grecs_node_create(grecs_node_root, &(grecs_dhcpdlsp[(1) - (1)])); parse_tree->v.texttab = grecs_text_table(); grecs_node_bind(parse_tree, (grecs_dhcpdvsp[(1) - (1)].node), 1); } break; case 3: /* Line 1792 of yacc.c */ #line 87 "dhcpd-gram.y" { (grecs_dhcpdval.node) = NULL; } break; case 4: /* Line 1792 of yacc.c */ #line 91 "dhcpd-gram.y" { (grecs_dhcpdval.node) = (grecs_dhcpdvsp[(1) - (1)].node_list).head; } break; case 5: /* Line 1792 of yacc.c */ #line 97 "dhcpd-gram.y" { (grecs_dhcpdval.node_list).head = (grecs_dhcpdval.node_list).tail = (grecs_dhcpdvsp[(1) - (1)].node); } break; case 6: /* Line 1792 of yacc.c */ #line 101 "dhcpd-gram.y" { if ((grecs_dhcpdvsp[(2) - (2)].node)) { if (!(grecs_dhcpdvsp[(1) - (2)].node_list).head) (grecs_dhcpdvsp[(1) - (2)].node_list).head = (grecs_dhcpdvsp[(1) - (2)].node_list).tail = (grecs_dhcpdvsp[(2) - (2)].node); else grecs_node_bind((grecs_dhcpdvsp[(1) - (2)].node_list).tail, (grecs_dhcpdvsp[(2) - (2)].node), 0); } (grecs_dhcpdval.node_list) = (grecs_dhcpdvsp[(1) - (2)].node_list); } break; case 10: /* Line 1792 of yacc.c */ #line 118 "dhcpd-gram.y" { if (strcmp((grecs_dhcpdvsp[(1) - (3)].string), "include") == 0 && (grecs_dhcpdvsp[(2) - (3)].pvalue)->type == GRECS_TYPE_STRING) { grecs_dhcpd_new_source((grecs_dhcpdvsp[(2) - (3)].pvalue)->v.string, &(grecs_dhcpdlsp[(1) - (3)])); (grecs_dhcpdval.node) = NULL; } else { (grecs_dhcpdval.node) = grecs_node_create_points(grecs_node_stmt, (grecs_dhcpdlsp[(1) - (3)]).beg, (grecs_dhcpdlsp[(2) - (3)]).end); (grecs_dhcpdval.node)->ident = (grecs_dhcpdvsp[(1) - (3)].string); (grecs_dhcpdval.node)->idloc = (grecs_dhcpdlsp[(1) - (3)]); (grecs_dhcpdval.node)->v.value = (grecs_dhcpdvsp[(2) - (3)].pvalue); } } break; case 11: /* Line 1792 of yacc.c */ #line 131 "dhcpd-gram.y" { grecs_dhcpd_begin_expr(); } break; case 12: /* Line 1792 of yacc.c */ #line 132 "dhcpd-gram.y" { (grecs_dhcpdval.node) = grecs_node_create_points(grecs_node_stmt, (grecs_dhcpdlsp[(1) - (5)]).beg, (grecs_dhcpdlsp[(5) - (5)]).end); (grecs_dhcpdval.node)->ident = (grecs_dhcpdvsp[(1) - (5)].string); (grecs_dhcpdval.node)->idloc = (grecs_dhcpdlsp[(1) - (5)]); (grecs_dhcpdval.node)->v.value = make_string_value((grecs_dhcpdvsp[(4) - (5)].string)); } break; case 13: /* Line 1792 of yacc.c */ #line 140 "dhcpd-gram.y" { (grecs_dhcpdval.node) = grecs_node_create(grecs_node_stmt, &(grecs_dhcpdlsp[(1) - (2)])); (grecs_dhcpdval.node)->ident = (grecs_dhcpdvsp[(1) - (2)].string); (grecs_dhcpdval.node)->idloc = (grecs_dhcpdlsp[(1) - (2)]); (grecs_dhcpdval.node)->v.value = NULL; } break; case 14: /* Line 1792 of yacc.c */ #line 149 "dhcpd-gram.y" { (grecs_dhcpdval.node) = grecs_node_create_points(grecs_node_block, (grecs_dhcpdlsp[(1) - (6)]).beg, (grecs_dhcpdlsp[(5) - (6)]).end); (grecs_dhcpdval.node)->ident = (grecs_dhcpdvsp[(1) - (6)].string); (grecs_dhcpdval.node)->idloc = (grecs_dhcpdlsp[(1) - (6)]); (grecs_dhcpdval.node)->v.value = (grecs_dhcpdvsp[(2) - (6)].pvalue); grecs_node_bind((grecs_dhcpdval.node), (grecs_dhcpdvsp[(4) - (6)].node), 1); } break; case 17: /* Line 1792 of yacc.c */ #line 164 "dhcpd-gram.y" { (grecs_dhcpdval.pvalue) = NULL; } break; case 19: /* Line 1792 of yacc.c */ #line 171 "dhcpd-gram.y" { size_t n; if ((n = grecs_list_size((grecs_dhcpdvsp[(1) - (1)].list))) == 1) { (grecs_dhcpdval.pvalue) = grecs_list_index((grecs_dhcpdvsp[(1) - (1)].list), 0); } else { size_t i; struct grecs_list_entry *ep; (grecs_dhcpdval.pvalue) = grecs_malloc(sizeof((grecs_dhcpdval.pvalue)[0])); (grecs_dhcpdval.pvalue)->type = GRECS_TYPE_ARRAY; (grecs_dhcpdval.pvalue)->locus = (grecs_dhcpdlsp[(1) - (1)]); (grecs_dhcpdval.pvalue)->v.arg.c = n; (grecs_dhcpdval.pvalue)->v.arg.v = grecs_calloc(n, sizeof((grecs_dhcpdval.pvalue)->v.arg.v[0])); for (i = 0, ep = (grecs_dhcpdvsp[(1) - (1)].list)->head; ep; i++, ep = ep->next) (grecs_dhcpdval.pvalue)->v.arg.v[i] = ep->data; } (grecs_dhcpdvsp[(1) - (1)].list)->free_entry = NULL; grecs_list_free((grecs_dhcpdvsp[(1) - (1)].list)); } break; case 20: /* Line 1792 of yacc.c */ #line 195 "dhcpd-gram.y" { (grecs_dhcpdval.list) = grecs_value_list_create(); grecs_list_append((grecs_dhcpdval.list), grecs_value_ptr_from_static(&(grecs_dhcpdvsp[(1) - (1)].svalue))); } break; case 21: /* Line 1792 of yacc.c */ #line 200 "dhcpd-gram.y" { grecs_list_append((grecs_dhcpdvsp[(1) - (2)].list), grecs_value_ptr_from_static(&(grecs_dhcpdvsp[(2) - (2)].svalue))); } break; case 22: /* Line 1792 of yacc.c */ #line 206 "dhcpd-gram.y" { (grecs_dhcpdval.svalue).type = GRECS_TYPE_STRING; (grecs_dhcpdval.svalue).locus = (grecs_dhcpdlsp[(1) - (1)]); (grecs_dhcpdval.svalue).v.string = (grecs_dhcpdvsp[(1) - (1)].string); } break; case 23: /* Line 1792 of yacc.c */ #line 212 "dhcpd-gram.y" { (grecs_dhcpdval.svalue).type = GRECS_TYPE_LIST; (grecs_dhcpdval.svalue).locus = (grecs_dhcpdlsp[(1) - (1)]); (grecs_dhcpdval.svalue).v.list = (grecs_dhcpdvsp[(1) - (1)].list); } break; case 26: /* Line 1792 of yacc.c */ #line 224 "dhcpd-gram.y" { grecs_value_t val; (grecs_dhcpdval.list) = grecs_value_list_create(); val.type = GRECS_TYPE_STRING; val.locus = (grecs_dhcpdlsp[(1) - (3)]); val.v.string = (grecs_dhcpdvsp[(1) - (3)].string); grecs_list_append((grecs_dhcpdval.list), grecs_value_ptr_from_static(&val)); val.type = GRECS_TYPE_STRING; val.locus = (grecs_dhcpdlsp[(3) - (3)]); val.v.string = (grecs_dhcpdvsp[(3) - (3)].string); grecs_list_append((grecs_dhcpdval.list), grecs_value_ptr_from_static(&val)); } break; case 27: /* Line 1792 of yacc.c */ #line 240 "dhcpd-gram.y" { grecs_value_t val; val.type = GRECS_TYPE_STRING; val.locus = (grecs_dhcpdlsp[(3) - (3)]); val.v.string = (grecs_dhcpdvsp[(3) - (3)].string); grecs_list_append((grecs_dhcpdvsp[(1) - (3)].list), grecs_value_ptr_from_static(&val)); } break; case 28: /* Line 1792 of yacc.c */ #line 251 "dhcpd-gram.y" { (grecs_dhcpdval.node) = grecs_node_create_points(grecs_node_block, (grecs_dhcpdlsp[(1) - (7)]).beg, (grecs_dhcpdlsp[(7) - (7)]).end); grecs_line_begin(); grecs_line_add("if", 2); (grecs_dhcpdval.node)->ident = grecs_line_finish(); (grecs_dhcpdval.node)->idloc = (grecs_dhcpdlsp[(1) - (7)]); (grecs_dhcpdval.node)->v.value = make_string_value ((grecs_dhcpdvsp[(2) - (7)].string)); grecs_node_bind((grecs_dhcpdval.node), (grecs_dhcpdvsp[(4) - (7)].node), 1); if ((grecs_dhcpdvsp[(6) - (7)].node_list).head) { grecs_node_bind((grecs_dhcpdvsp[(6) - (7)].node_list).tail, (grecs_dhcpdvsp[(7) - (7)].node), 0); grecs_node_bind((grecs_dhcpdval.node), (grecs_dhcpdvsp[(6) - (7)].node_list).head, 0); } } break; case 29: /* Line 1792 of yacc.c */ #line 272 "dhcpd-gram.y" { grecs_dhcpd_begin_bool(); } break; case 30: /* Line 1792 of yacc.c */ #line 278 "dhcpd-gram.y" { grecs_dhcpd_begin_bool(); } break; case 31: /* Line 1792 of yacc.c */ #line 284 "dhcpd-gram.y" { (grecs_dhcpdval.node_list).head = (grecs_dhcpdval.node_list).tail = NULL; } break; case 33: /* Line 1792 of yacc.c */ #line 291 "dhcpd-gram.y" { (grecs_dhcpdval.node_list).head = (grecs_dhcpdval.node_list).tail = (grecs_dhcpdvsp[(1) - (1)].node); } break; case 34: /* Line 1792 of yacc.c */ #line 295 "dhcpd-gram.y" { if ((grecs_dhcpdvsp[(2) - (2)].node)) { if (!(grecs_dhcpdvsp[(1) - (2)].node_list).head) (grecs_dhcpdvsp[(1) - (2)].node_list).head = (grecs_dhcpdvsp[(1) - (2)].node_list).tail = (grecs_dhcpdvsp[(2) - (2)].node); else grecs_node_bind((grecs_dhcpdvsp[(1) - (2)].node_list).tail, (grecs_dhcpdvsp[(2) - (2)].node), 0); } (grecs_dhcpdval.node_list) = (grecs_dhcpdvsp[(1) - (2)].node_list); } break; case 35: /* Line 1792 of yacc.c */ #line 307 "dhcpd-gram.y" { (grecs_dhcpdval.node) = grecs_node_create_points(grecs_node_block, (grecs_dhcpdlsp[(1) - (5)]).beg, (grecs_dhcpdlsp[(5) - (5)]).end); grecs_line_begin(); grecs_line_add("elsif", 5); (grecs_dhcpdval.node)->ident = grecs_line_finish(); (grecs_dhcpdval.node)->idloc = (grecs_dhcpdlsp[(1) - (5)]); (grecs_dhcpdval.node)->v.value = make_string_value ((grecs_dhcpdvsp[(2) - (5)].string)); grecs_node_bind((grecs_dhcpdval.node), (grecs_dhcpdvsp[(4) - (5)].node), 1); } break; case 36: /* Line 1792 of yacc.c */ #line 322 "dhcpd-gram.y" { (grecs_dhcpdval.node) = NULL; } break; case 38: /* Line 1792 of yacc.c */ #line 329 "dhcpd-gram.y" { (grecs_dhcpdval.node) = grecs_node_create_points(grecs_node_block, (grecs_dhcpdlsp[(1) - (4)]).beg, (grecs_dhcpdlsp[(4) - (4)]).end); grecs_line_begin(); grecs_line_add("else", 4); (grecs_dhcpdval.node)->ident = grecs_line_finish(); (grecs_dhcpdval.node)->idloc = (grecs_dhcpdlsp[(1) - (4)]); (grecs_dhcpdval.node)->v.value = NULL; grecs_node_bind((grecs_dhcpdval.node), (grecs_dhcpdvsp[(3) - (4)].node), 1); } break; /* Line 1792 of yacc.c */ #line 1889 "dhcpd-gram.c" default: break; } /* User semantic actions sometimes alter grecs_dhcpdchar, and that requires that grecs_dhcpdtoken be updated with the new translation. We take the approach of translating immediately before every use of grecs_dhcpdtoken. One alternative is translating here after every semantic action, but that translation would be missed if the semantic action invokes YYABORT, YYACCEPT, or YYERROR immediately after altering grecs_dhcpdchar or if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an incorrect destructor might then be invoked immediately. In the case of YYERROR or YYBACKUP, subsequent parser actions might lead to an incorrect destructor call or verbose syntax error message before the lookahead is translated. */ YY_SYMBOL_PRINT ("-> $$ =", grecs_dhcpdr1[grecs_dhcpdn], &grecs_dhcpdval, &grecs_dhcpdloc); YYPOPSTACK (grecs_dhcpdlen); grecs_dhcpdlen = 0; YY_STACK_PRINT (grecs_dhcpdss, grecs_dhcpdssp); *++grecs_dhcpdvsp = grecs_dhcpdval; *++grecs_dhcpdlsp = grecs_dhcpdloc; /* Now `shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ grecs_dhcpdn = grecs_dhcpdr1[grecs_dhcpdn]; grecs_dhcpdstate = grecs_dhcpdpgoto[grecs_dhcpdn - YYNTOKENS] + *grecs_dhcpdssp; if (0 <= grecs_dhcpdstate && grecs_dhcpdstate <= YYLAST && grecs_dhcpdcheck[grecs_dhcpdstate] == *grecs_dhcpdssp) grecs_dhcpdstate = grecs_dhcpdtable[grecs_dhcpdstate]; else grecs_dhcpdstate = grecs_dhcpddefgoto[grecs_dhcpdn - YYNTOKENS]; goto grecs_dhcpdnewstate; /*------------------------------------. | grecs_dhcpderrlab -- here on detecting error | `------------------------------------*/ grecs_dhcpderrlab: /* Make sure we have latest lookahead translation. See comments at user semantic actions for why this is necessary. */ grecs_dhcpdtoken = grecs_dhcpdchar == YYEMPTY ? YYEMPTY : YYTRANSLATE (grecs_dhcpdchar); /* If not already recovering from an error, report this error. */ if (!grecs_dhcpderrstatus) { ++grecs_dhcpdnerrs; #if ! YYERROR_VERBOSE grecs_dhcpderror (YY_("syntax error")); #else # define YYSYNTAX_ERROR grecs_dhcpdsyntax_error (&grecs_dhcpdmsg_alloc, &grecs_dhcpdmsg, \ grecs_dhcpdssp, grecs_dhcpdtoken) { char const *grecs_dhcpdmsgp = YY_("syntax error"); int grecs_dhcpdsyntax_error_status; grecs_dhcpdsyntax_error_status = YYSYNTAX_ERROR; if (grecs_dhcpdsyntax_error_status == 0) grecs_dhcpdmsgp = grecs_dhcpdmsg; else if (grecs_dhcpdsyntax_error_status == 1) { if (grecs_dhcpdmsg != grecs_dhcpdmsgbuf) YYSTACK_FREE (grecs_dhcpdmsg); grecs_dhcpdmsg = (char *) YYSTACK_ALLOC (grecs_dhcpdmsg_alloc); if (!grecs_dhcpdmsg) { grecs_dhcpdmsg = grecs_dhcpdmsgbuf; grecs_dhcpdmsg_alloc = sizeof grecs_dhcpdmsgbuf; grecs_dhcpdsyntax_error_status = 2; } else { grecs_dhcpdsyntax_error_status = YYSYNTAX_ERROR; grecs_dhcpdmsgp = grecs_dhcpdmsg; } } grecs_dhcpderror (grecs_dhcpdmsgp); if (grecs_dhcpdsyntax_error_status == 2) goto grecs_dhcpdexhaustedlab; } # undef YYSYNTAX_ERROR #endif } grecs_dhcpderror_range[1] = grecs_dhcpdlloc; if (grecs_dhcpderrstatus == 3) { /* If just tried and failed to reuse lookahead token after an error, discard it. */ if (grecs_dhcpdchar <= YYEOF) { /* Return failure if at end of input. */ if (grecs_dhcpdchar == YYEOF) YYABORT; } else { grecs_dhcpddestruct ("Error: discarding", grecs_dhcpdtoken, &grecs_dhcpdlval, &grecs_dhcpdlloc); grecs_dhcpdchar = YYEMPTY; } } /* Else will try to reuse lookahead token after shifting the error token. */ goto grecs_dhcpderrlab1; /*---------------------------------------------------. | grecs_dhcpderrorlab -- error raised explicitly by YYERROR. | `---------------------------------------------------*/ grecs_dhcpderrorlab: /* Pacify compilers like GCC when the user code never invokes YYERROR and the label grecs_dhcpderrorlab therefore never appears in user code. */ if (/*CONSTCOND*/ 0) goto grecs_dhcpderrorlab; grecs_dhcpderror_range[1] = grecs_dhcpdlsp[1-grecs_dhcpdlen]; /* Do not reclaim the symbols of the rule which action triggered this YYERROR. */ YYPOPSTACK (grecs_dhcpdlen); grecs_dhcpdlen = 0; YY_STACK_PRINT (grecs_dhcpdss, grecs_dhcpdssp); grecs_dhcpdstate = *grecs_dhcpdssp; goto grecs_dhcpderrlab1; /*-------------------------------------------------------------. | grecs_dhcpderrlab1 -- common code for both syntax error and YYERROR. | `-------------------------------------------------------------*/ grecs_dhcpderrlab1: grecs_dhcpderrstatus = 3; /* Each real token shifted decrements this. */ for (;;) { grecs_dhcpdn = grecs_dhcpdpact[grecs_dhcpdstate]; if (!grecs_dhcpdpact_value_is_default (grecs_dhcpdn)) { grecs_dhcpdn += YYTERROR; if (0 <= grecs_dhcpdn && grecs_dhcpdn <= YYLAST && grecs_dhcpdcheck[grecs_dhcpdn] == YYTERROR) { grecs_dhcpdn = grecs_dhcpdtable[grecs_dhcpdn]; if (0 < grecs_dhcpdn) break; } } /* Pop the current state because it cannot handle the error token. */ if (grecs_dhcpdssp == grecs_dhcpdss) YYABORT; grecs_dhcpderror_range[1] = *grecs_dhcpdlsp; grecs_dhcpddestruct ("Error: popping", grecs_dhcpdstos[grecs_dhcpdstate], grecs_dhcpdvsp, grecs_dhcpdlsp); YYPOPSTACK (1); grecs_dhcpdstate = *grecs_dhcpdssp; YY_STACK_PRINT (grecs_dhcpdss, grecs_dhcpdssp); } YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++grecs_dhcpdvsp = grecs_dhcpdlval; YY_IGNORE_MAYBE_UNINITIALIZED_END grecs_dhcpderror_range[2] = grecs_dhcpdlloc; /* Using YYLLOC is tempting, but would change the location of the lookahead. YYLOC is available though. */ YYLLOC_DEFAULT (grecs_dhcpdloc, grecs_dhcpderror_range, 2); *++grecs_dhcpdlsp = grecs_dhcpdloc; /* Shift the error token. */ YY_SYMBOL_PRINT ("Shifting", grecs_dhcpdstos[grecs_dhcpdn], grecs_dhcpdvsp, grecs_dhcpdlsp); grecs_dhcpdstate = grecs_dhcpdn; goto grecs_dhcpdnewstate; /*-------------------------------------. | grecs_dhcpdacceptlab -- YYACCEPT comes here. | `-------------------------------------*/ grecs_dhcpdacceptlab: grecs_dhcpdresult = 0; goto grecs_dhcpdreturn; /*-----------------------------------. | grecs_dhcpdabortlab -- YYABORT comes here. | `-----------------------------------*/ grecs_dhcpdabortlab: grecs_dhcpdresult = 1; goto grecs_dhcpdreturn; #if !defined grecs_dhcpdoverflow || YYERROR_VERBOSE /*-------------------------------------------------. | grecs_dhcpdexhaustedlab -- memory exhaustion comes here. | `-------------------------------------------------*/ grecs_dhcpdexhaustedlab: grecs_dhcpderror (YY_("memory exhausted")); grecs_dhcpdresult = 2; /* Fall through. */ #endif grecs_dhcpdreturn: if (grecs_dhcpdchar != YYEMPTY) { /* Make sure we have latest lookahead translation. See comments at user semantic actions for why this is necessary. */ grecs_dhcpdtoken = YYTRANSLATE (grecs_dhcpdchar); grecs_dhcpddestruct ("Cleanup: discarding lookahead", grecs_dhcpdtoken, &grecs_dhcpdlval, &grecs_dhcpdlloc); } /* Do not reclaim the symbols of the rule which action triggered this YYABORT or YYACCEPT. */ YYPOPSTACK (grecs_dhcpdlen); YY_STACK_PRINT (grecs_dhcpdss, grecs_dhcpdssp); while (grecs_dhcpdssp != grecs_dhcpdss) { grecs_dhcpddestruct ("Cleanup: popping", grecs_dhcpdstos[*grecs_dhcpdssp], grecs_dhcpdvsp, grecs_dhcpdlsp); YYPOPSTACK (1); } #ifndef grecs_dhcpdoverflow if (grecs_dhcpdss != grecs_dhcpdssa) YYSTACK_FREE (grecs_dhcpdss); #endif #if YYERROR_VERBOSE if (grecs_dhcpdmsg != grecs_dhcpdmsgbuf) YYSTACK_FREE (grecs_dhcpdmsg); #endif /* Make sure YYID is used. */ return YYID (grecs_dhcpdresult); } /* Line 2055 of yacc.c */ #line 343 "dhcpd-gram.y" int grecs_dhcpderror(char const *s) { grecs_error(&grecs_dhcpdlloc, 0, "%s", s); return 0; } struct grecs_node * grecs_dhcpd_parser(const char *name, int traceflags) { int rc; if (grecs_dhcpd_new_source(name, NULL)) return NULL; grecs_dhcpd_flex_debug = traceflags & GRECS_TRACE_LEX; grecs_dhcpddebug = traceflags & GRECS_TRACE_GRAM; parse_tree = NULL; grecs_line_acc_create(); rc = grecs_dhcpdparse(); grecs_dhcpd_close_sources(); if (grecs_error_count) rc = 1; grecs_line_acc_free(); if (rc) { grecs_tree_free(parse_tree); parse_tree = NULL; } return parse_tree; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/src/Make.am����������������������������������������������������������������������0000644�0001750�0001750�00000004770�13511403723�016263� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of grecs - Gray's Extensible Configuration System # Copyright (C) 2007-2019 Sergey Poznyakoff # # Grecs 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. # # Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. PARSER_DEFS = if GRECS_COND_META1_PARSER GRECS_PARSER_META1 = meta1-gram.y meta1-lex.l GRECS_EXTRA_META1 = meta1-gram.h PARSER_DEFS += -DENABLE_META1_PARSER endif if GRECS_COND_BIND_PARSER GRECS_PARSER_BIND = bind-gram.y bind-lex.l GRECS_EXTRA_BIND = bind-gram.h PARSER_DEFS += -DENABLE_BIND_PARSER endif if GRECS_COND_DHCPD_PARSER GRECS_PARSER_DHCPD = dhcpd-gram.y dhcpd-lex.l GRECS_EXTRA_DHCPD = dhcpd-gram.h PARSER_DEFS += -DENABLE_DHCPD_PARSER endif if GRECS_COND_GIT_PARSER GRECS_PARSER_GIT = git-parser.c PARSER_DEFS += -DENABLE_GIT_PARSER endif if GRECS_COND_JSON GRECS_JSON = json-gram.y json-lex.l jsonfmt.c GRECS_EXTRA_JSON = json-gram.h endif GRECS_SRC = \ asprintf.c\ assert.c\ cidr.c\ diag.c\ format.c\ grecs-gram.y\ grecs-lex.l\ ipstr.c\ join.c\ lineacc.c\ list.c\ lookup.c\ mem.c\ opthelp.c\ parser.c\ parsertab.c\ path-parser.c\ preproc.c\ sort.c\ symtab.c\ text.c\ tree.c\ txtacc.c\ version.c\ $(GRECS_JSON)\ $(GRECS_PARSER_BIND)\ $(GRECS_PARSER_DHCPD)\ $(GRECS_PARSER_GIT)\ $(GRECS_PARSER_META1) VPATH += $(top_srcdir)/@GRECS_SUBDIR@/wordsplit NODIST_GRECS_SRC = wordsplit.c if GRECS_COND_SOCKADDR_LIST GRECS_SRC += sockaddr.c endif EXTRA_DIST=\ grecs-gram.h\ $(GRECS_EXTRA_BIND)\ $(GRECS_EXTRA_DHCPD)\ $(GRECS_EXTRA_JSON)\ $(GRECS_EXTRA_META1)\ $(PP_SETUP_FILE)\ Make.am Make-inst.am Make-shared.am Make-static.am AM_CPPFLAGS = \ -I$(srcdir)\ -I$(top_srcdir)/@GRECS_SUBDIR@\ @GRECS_INCLUDES@\ @GRECS_HOST_PROJECT_INCLUDES@\ $(PARSER_DEFS) AM_YFLAGS = -dtv AM_LFLAGS = -d incdir=$(pkgdatadir)/$(VERSION)/include inc_DATA = $(PP_SETUP_FILE) LEXCOMPILE = $(top_srcdir)/@GRECS_SUBDIR@/build-aux/yyrename '$(LEX) $(LFLAGS) $(AM_LFLAGS)' YACCCOMPILE = $(top_srcdir)/@GRECS_SUBDIR@/build-aux/yyrename '$(YACC) $(YFLAGS) $(AM_YFLAGS)' ��������direvent-5.2/grecs/src/symtab.c���������������������������������������������������������������������0000644�0001750�0001750�00000024144�13244106110�016520� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* grecs - Gray's Extensible Configuration System Copyright (C) 2007-2016 Sergey Poznyakoff Grecs 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. Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include <grecs.h> #include <stdlib.h> #include <errno.h> #include <string.h> #include <ctype.h> /* |hash_size| defines a sequence of symbol table sizes. These are prime numbers, each of which is approximately twice its predecessor. */ static unsigned int hash_size[] = { 7, 17, 37, 101, 229, 487, 1009, 2039, 4091, 8191, 16411 }; /* |max_rehash| keeps the number of entries in |hash_size| table. */ static unsigned int max_rehash = sizeof(hash_size) / sizeof(hash_size[0]); enum symtab_defer_type { defer_add, defer_del }; struct grecs_symtab { int flags; unsigned int hash_num; /* Index to hash_size table */ size_t elsize; /* Size of an element */ size_t elcount; /* Number of elements in use */ struct grecs_syment **tab; /* Table of element pointers */ /* Functions that can be overridden when creating the symtab: */ unsigned (*hash_fun)(void *, unsigned long); int (*cmp_fun)(const void *, const void *); int (*copy_fun)(void *, void *); void *(*syment_alloc_fun)(size_t); void (*syment_free_fun) (void *); /* Support for deferred operations. When an insertion or deletion is requested while the symtab is being iterated over, this operation is deferred until the iteration is finished. */ /* Iteration level. Gets increased upon entry to grecs_symtab_foreach, and decreased right before leaving it. */ unsigned int itr_level; /* Two deferment lists keep track of the deferred additions and removals: */ grecs_list_ptr_t defer_list[2]; }; static void syment_free(struct grecs_symtab *st, void *ptr) { if (st->syment_free_fun) st->syment_free_fun(ptr); else free(ptr); } static struct grecs_syment * syment_alloc(struct grecs_symtab *st, void *key) { struct grecs_syment *ent; ent = st->syment_alloc_fun ? st->syment_alloc_fun(st->elsize) : malloc(st->elsize); if (ent) { memset(ent, 0, st->elsize); if (st->copy_fun(ent, key)) { int ec = errno; syment_free(st, ent); errno = ec; return NULL; } } return ent; } static void symtab_defer_op(struct grecs_symtab *st, enum symtab_defer_type type, struct grecs_syment *ent) { if (!st->defer_list[type]) { st->defer_list[type] = grecs_list_create(); st->defer_list[type]->cmp = st->cmp_fun; } grecs_list_append(st->defer_list[type], ent); } unsigned grecs_hash_string(const char *name, unsigned long hashsize) { unsigned i; for (i = 0; *name; name++) { i <<= 1; i ^= *(unsigned char*) name; } return i % hashsize; } unsigned grecs_hash_string_ci(const char *name, unsigned long hashsize) { unsigned i; for (i = 0; *name; name++) { i <<= 1; i ^= tolower (*(unsigned char*) name); } return i % hashsize; } static unsigned def_hash(void *data, unsigned long hashsize) { struct grecs_syment *sym = data; return grecs_hash_string(sym->name, hashsize); } static int def_cmp(const void *a, const void *b) { struct grecs_syment const *syma = a; struct grecs_syment const *symb = b; return strcmp(syma->name, symb->name); } static int def_copy(void *a, void *b) { struct grecs_syment *syma = a; struct grecs_syment *symb = b; syma->name = strdup(symb->name); return syma->name == NULL; } static void def_free_fun(void *p) { struct grecs_syment *sym = p; free(sym->name); free(sym); } static unsigned symtab_insert_pos(struct grecs_symtab *st, void *elt) { unsigned i; unsigned pos = st->hash_fun(elt, hash_size[st->hash_num]); for (i = pos; st->tab[i];) { if (++i >= hash_size[st->hash_num]) i = 0; if (i == pos) /* FIXME: Error message? */ abort(); } return i; } int grecs_symtab_replace(struct grecs_symtab *st, void *ent, void **old_ent) { struct grecs_syment *entry; unsigned i, pos = st->hash_fun(ent, hash_size[st->hash_num]); for (i = pos; (entry = st->tab[i]);) { if (st->cmp_fun(entry, ent) == 0) break; if (++i >= hash_size[st->hash_num]) i = 0; if (i == pos) return ENOENT; } if (old_ent) *old_ent = entry; st->tab[i] = ent; return 0; } static int symtab_rehash(struct grecs_symtab *st) { struct grecs_syment **old_tab = st->tab; struct grecs_syment **new_tab; unsigned int i; unsigned int hash_num = st->hash_num + 1; if (hash_num >= max_rehash) return E2BIG; new_tab = calloc(hash_size[hash_num], sizeof(*new_tab)); if (!new_tab) return ENOMEM; st->tab = new_tab; if (old_tab) { st->hash_num = hash_num; for (i = 0; i < hash_size[hash_num-1]; i++) { struct grecs_syment *elt = old_tab[i]; if (elt->name) { unsigned n = symtab_insert_pos(st, elt); new_tab[n] = elt; } } free(old_tab); } return 0; } const char * grecs_symtab_strerror(int rc) { switch (rc) { case ENOENT: return _("element not found in table"); case E2BIG: return _("symbol table is full"); case ENOMEM: return strerror(ENOMEM); } return strerror(rc); } int grecs_symtab_remove(struct grecs_symtab *st, void *elt) { unsigned int pos, i, j, r; struct grecs_syment *entry; if (st->itr_level) { if (grecs_list_remove(st->defer_list[defer_add], elt) == 0) return 0; } pos = st->hash_fun(elt, hash_size[st->hash_num]); for (i = pos; (entry = st->tab[i]);) { if (st->cmp_fun(entry, elt) == 0) break; if (++i >= hash_size[st->hash_num]) i = 0; if (i == pos) return ENOENT; } if (!entry) return ENOENT; if (st->itr_level) { symtab_defer_op(st, defer_del, entry); //FIXME: mark the entry as deleted return 0; } syment_free(st, entry); st->elcount--; for (;;) { st->tab[i] = NULL; j = i; do { if (++i >= hash_size[st->hash_num]) i = 0; if (!st->tab[i]) return 0; r = st->hash_fun(st->tab[i], hash_size[st->hash_num]); } while ((j < r && r <= i) || (i < j && j < r) || (r <= i && i < j)); st->tab[j] = st->tab[i]; } return 0; } int grecs_symtab_get_index(unsigned *idx, struct grecs_symtab *st, void *key, int *install) { int rc; unsigned i, pos; struct grecs_syment *elem; if (!st->tab) { if (install) { rc = symtab_rehash(st); if (rc) return rc; } else return ENOENT; } pos = st->hash_fun(key, hash_size[st->hash_num]); for (i = pos; (elem = st->tab[i]);) { if (st->cmp_fun(elem, key) == 0) { if (install) *install = 0; *idx = i; return 0; } if (++i >= hash_size[st->hash_num]) i = 0; if (i == pos) break; } if (!install) return ENOENT; if (!elem) { *install = 1; *idx = i; return 0; } if ((rc = symtab_rehash(st)) != 0) return rc; return grecs_symtab_get_index(idx, st, key, install); } void * grecs_symtab_lookup_or_install(struct grecs_symtab *st, void *key, int *install) { unsigned i; int rc = grecs_symtab_get_index(&i, st, key, install); if (rc == 0) { if (install && *install == 1) { struct grecs_syment *ent = syment_alloc(st, key); if (!ent) { errno = ENOMEM; return NULL; } if (st->itr_level) { symtab_defer_op(st, defer_add, ent); } else { st->tab[i] = ent; st->elcount++; } return ent; } else return st->tab[i]; } else if (rc == ENOENT && st->itr_level) { void *ptr = grecs_list_locate(st->defer_list[defer_add], key); if (ptr) return ptr; rc = ENOENT; } errno = rc; return NULL; } void grecs_symtab_clear(struct grecs_symtab *st) { unsigned i, hs; if (!st || !st->tab) return; hs = hash_size[st->hash_num]; for (i = 0; i < hs; i++) { struct grecs_syment *elem = st->tab[i]; if (elem) { syment_free(st, elem); st->tab[i] = NULL; } } st->elcount = 0; } struct grecs_symtab * grecs_symtab_create(size_t elsize, unsigned (*hash_fun)(void *, unsigned long), int (*cmp_fun)(const void *, const void *), int (*copy_fun)(void *, void *), void *(*alloc_fun)(size_t), void (*free_fun)(void *)) { struct grecs_symtab *st = malloc(sizeof(*st)); if (st) { memset(st, 0, sizeof(*st)); st->elsize = elsize; st->elcount = 0; st->hash_fun = hash_fun ? hash_fun : def_hash; st->cmp_fun = cmp_fun ? cmp_fun : def_cmp; st->copy_fun = copy_fun ? copy_fun : def_copy; st->syment_alloc_fun = alloc_fun; if (free_fun) st->syment_free_fun = free_fun; else if (!copy_fun) st->syment_free_fun = def_free_fun; else st->syment_free_fun = NULL; st->tab = calloc(hash_size[st->hash_num], sizeof(*st->tab)); if (!st->tab) { free(st); st = NULL; } } return st; } struct grecs_symtab * grecs_symtab_create_default(size_t elsize) { return grecs_symtab_create(elsize, NULL, NULL, NULL, NULL, NULL); } void grecs_symtab_free(struct grecs_symtab *st) { if (st) { grecs_symtab_clear(st); grecs_list_free(st->defer_list[defer_add]); grecs_list_free(st->defer_list[defer_del]); free(st->tab); free(st); } } size_t grecs_symtab_count(struct grecs_symtab *st) { return st->elcount; } int grecs_symtab_foreach(struct grecs_symtab *st, grecs_symtab_enumerator_t fun, void *data) { unsigned i; struct grecs_syment *ep; if (!st) return 0; ++st->itr_level; for (i = 0; i < hash_size[st->hash_num]; i++) { ep = st->tab[i]; if (ep && !grecs_list_locate(st->defer_list[defer_del], ep)) { int rc = fun(ep, data); if (rc) return rc; } } if (--st->itr_level == 0) { while ((ep = grecs_list_pop(st->defer_list[defer_del])) != NULL) grecs_symtab_remove(st, ep); while ((ep = grecs_list_pop(st->defer_list[defer_add])) != NULL) { int install = 1; if (grecs_symtab_get_index(&i, st, ep, &install) == 0) { st->tab[i] = ep; st->elcount++; } } } return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/src/grecs-gram.y�����������������������������������������������������������������0000644�0001750�0001750�00000012220�13244106110�017266� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������%{ /* grecs - Gray's Extensible Configuration System Copyright (C) 2007-2016 Sergey Poznyakoff Grecs 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. Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include <grecs.h> #include <grecs-gram.h> #include <stdlib.h> #include <stdarg.h> #include <string.h> #include <errno.h> int yylex(void); int yyerror(char const *s); static struct grecs_node *parse_tree; %} %error-verbose %locations %union { char *string; grecs_value_t svalue, *pvalue; struct grecs_list *list; struct grecs_node *node; grecs_locus_t locus; struct { struct grecs_node *head, *tail; } node_list; } %token <string> STRING QSTRING MSTRING IDENT %type <string> string slist %type <list> slist0 %type <svalue> value %type <pvalue> vallist tag %type <list> values list vlist %type <node> stmt simple block maybe_stmtlist %type <node_list> stmtlist %% input : maybe_stmtlist { parse_tree = grecs_node_create(grecs_node_root, &@1); parse_tree->v.texttab = grecs_text_table(); grecs_node_bind(parse_tree, $1, 1); } ; maybe_stmtlist: /* empty */ { $$ = NULL; } | stmtlist { $$ = $1.head; } ; stmtlist: stmt { $$.head = $$.tail = $1; } | stmtlist stmt { grecs_node_bind($1.tail, $2, 0); } ; stmt : simple | block ; simple : IDENT vallist ';' { $$ = grecs_node_create_points(grecs_node_stmt, @1.beg, @2.end); $$->ident = $1; $$->idloc = @1; $$->v.value = $2; } | IDENT ';' { $$ = grecs_node_create(grecs_node_stmt, &@1); $$->ident = $1; $$->idloc = @1; $$->v.value = NULL; } ; block : IDENT tag '{' stmtlist '}' opt_sc { $$ = grecs_node_create_points(grecs_node_block, @1.beg, @5.end); $$->ident = $1; $$->idloc = @1; $$->v.value = $2; grecs_node_bind($$, $4.head, 1); } ; tag : /* empty */ { $$ = NULL; } | vallist ; vallist : vlist { size_t n; if ((n = grecs_list_size($1)) == 1) { $$ = grecs_list_index($1, 0); } else { size_t i; struct grecs_list_entry *ep; $$ = grecs_malloc(sizeof($$[0])); $$->type = GRECS_TYPE_ARRAY; $$->locus = @1; $$->v.arg.c = n; $$->v.arg.v = grecs_calloc(n, sizeof($$->v.arg.v[0])); for (i = 0, ep = $1->head; ep; i++, ep = ep->next) $$->v.arg.v[i] = ep->data; } $1->free_entry = NULL; grecs_list_free($1); } ; vlist : value { $$ = grecs_value_list_create(); grecs_list_append($$, grecs_value_ptr_from_static(&$1)); } | vlist value { grecs_list_append($1, grecs_value_ptr_from_static(&$2)); } ; value : string { $$.type = GRECS_TYPE_STRING; $$.locus = @1; $$.v.string = $1; } | list { $$.type = GRECS_TYPE_LIST; $$.locus = @1; $$.v.list = $1; } | MSTRING { $$.type = GRECS_TYPE_STRING; $$.locus = @1; $$.v.string = $1; } ; string : STRING | IDENT | slist ; slist : slist0 { struct grecs_list_entry *ep; grecs_line_begin(); for (ep = $1->head; ep; ep = ep->next) { grecs_line_add(ep->data, strlen(ep->data)); free(ep->data); ep->data = NULL; } $$ = grecs_line_finish(); grecs_list_free($1); } ; slist0 : QSTRING { $$ = grecs_list_create(); grecs_list_append($$, $1); } | slist0 QSTRING { grecs_list_append($1, $2); $$ = $1; } ; list : '(' ')' { $$ = NULL; } | '(' values ')' { $$ = $2; } | '(' values ',' ')' { $$ = $2; } ; values : value { $$ = grecs_value_list_create(); grecs_list_append($$, grecs_value_ptr_from_static(&$1)); } | values ',' value { grecs_list_append($1, grecs_value_ptr_from_static(&$3)); $$ = $1; } ; opt_sc : /* empty */ | ';' ; %% int yyerror(char const *s) { grecs_error(&yylloc, 0, "%s", s); return 0; } struct grecs_node * grecs_grecs_parser(const char *name, int traceflags) { int rc; if (grecs_lex_begin(name, traceflags & GRECS_TRACE_LEX)) return NULL; yydebug = traceflags & GRECS_TRACE_GRAM; parse_tree = NULL; rc = yyparse(); if (grecs_error_count) rc = 1; grecs_lex_end(rc); if (rc) { grecs_tree_free(parse_tree); parse_tree = NULL; } return parse_tree; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/src/dhcpd-gram.y�����������������������������������������������������������������0000644�0001750�0001750�00000017100�13244106110�017247� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������%{ /* grecs - Gray's Extensible Configuration System Copyright (C) 2007-2016 Sergey Poznyakoff Grecs 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. Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include <grecs.h> #include <dhcpd-gram.h> #include <stdlib.h> #include <stdarg.h> #include <string.h> #include <errno.h> int yylex(void); int yyerror(char const *s); static struct grecs_node *parse_tree; extern int yy_flex_debug; extern int grecs_dhcpd_new_source(const char *name, grecs_locus_t *loc); extern void grecs_dhcpd_close_sources(void); extern void grecs_dhcpd_begin_bool(void); extern void grecs_dhcpd_begin_expr(void); /* NOTE: STRING must be allocated */ static grecs_value_t * make_string_value(char *string) { grecs_value_t *val; val = grecs_malloc(sizeof(val[0])); val->type = GRECS_TYPE_STRING; val->v.string = string; return val; } %} %error-verbose %locations %union { char *string; grecs_value_t svalue, *pvalue; struct grecs_list *list; struct grecs_node *node; grecs_locus_t locus; struct { struct grecs_node *head, *tail; } node_list; } %token <string> DHCPD_IF DHCPD_ELSIF DHCPD_EXPR %token DHCPD_ELSE %token <string> DHCPD_STRING DHCPD_IDENT %type <string> string %type <svalue> value %type <pvalue> vallist tag %type <list> vlist strlist %type <node> stmt simple block maybe_stmtlist %type <node> cond elsecond opt_elsecond elsifcond %type <node_list> stmtlist elsifchain opt_elsifchain %% input : maybe_stmtlist { parse_tree = grecs_node_create(grecs_node_root, &@1); parse_tree->v.texttab = grecs_text_table(); grecs_node_bind(parse_tree, $1, 1); } ; maybe_stmtlist: /* empty */ { $$ = NULL; } | stmtlist { $$ = $1.head; } ; stmtlist: stmt { $$.head = $$.tail = $1; } | stmtlist stmt { if ($2) { if (!$1.head) $1.head = $1.tail = $2; else grecs_node_bind($1.tail, $2, 0); } $$ = $1; } ; stmt : simple | block | cond ; simple : DHCPD_IDENT vallist ';' { if (strcmp($1, "include") == 0 && $2->type == GRECS_TYPE_STRING) { grecs_dhcpd_new_source($2->v.string, &@1); $$ = NULL; } else { $$ = grecs_node_create_points(grecs_node_stmt, @1.beg, @2.end); $$->ident = $1; $$->idloc = @1; $$->v.value = $2; } } | DHCPD_IDENT '=' { grecs_dhcpd_begin_expr(); } DHCPD_EXPR ';' { $$ = grecs_node_create_points(grecs_node_stmt, @1.beg, @5.end); $$->ident = $1; $$->idloc = @1; $$->v.value = make_string_value($4); } | string ';' { $$ = grecs_node_create(grecs_node_stmt, &@1); $$->ident = $1; $$->idloc = @1; $$->v.value = NULL; } ; block : DHCPD_IDENT tag '{' maybe_stmtlist '}' opt_semi { $$ = grecs_node_create_points(grecs_node_block, @1.beg, @5.end); $$->ident = $1; $$->idloc = @1; $$->v.value = $2; grecs_node_bind($$, $4, 1); } ; opt_semi: /* empty */ | ';' ; tag : /* empty */ { $$ = NULL; } | vallist ; vallist : vlist { size_t n; if ((n = grecs_list_size($1)) == 1) { $$ = grecs_list_index($1, 0); } else { size_t i; struct grecs_list_entry *ep; $$ = grecs_malloc(sizeof($$[0])); $$->type = GRECS_TYPE_ARRAY; $$->locus = @1; $$->v.arg.c = n; $$->v.arg.v = grecs_calloc(n, sizeof($$->v.arg.v[0])); for (i = 0, ep = $1->head; ep; i++, ep = ep->next) $$->v.arg.v[i] = ep->data; } $1->free_entry = NULL; grecs_list_free($1); } ; vlist : value { $$ = grecs_value_list_create(); grecs_list_append($$, grecs_value_ptr_from_static(&$1)); } | vlist value { grecs_list_append($1, grecs_value_ptr_from_static(&$2)); } ; value : string { $$.type = GRECS_TYPE_STRING; $$.locus = @1; $$.v.string = $1; } | strlist { $$.type = GRECS_TYPE_LIST; $$.locus = @1; $$.v.list = $1; } ; string : DHCPD_STRING | DHCPD_IDENT ; strlist : DHCPD_STRING ',' DHCPD_STRING { grecs_value_t val; $$ = grecs_value_list_create(); val.type = GRECS_TYPE_STRING; val.locus = @1; val.v.string = $1; grecs_list_append($$, grecs_value_ptr_from_static(&val)); val.type = GRECS_TYPE_STRING; val.locus = @3; val.v.string = $3; grecs_list_append($$, grecs_value_ptr_from_static(&val)); } | strlist ',' DHCPD_STRING { grecs_value_t val; val.type = GRECS_TYPE_STRING; val.locus = @3; val.v.string = $3; grecs_list_append($1, grecs_value_ptr_from_static(&val)); } ; cond : if DHCPD_EXPR '{' maybe_stmtlist '}' opt_elsifchain opt_elsecond { $$ = grecs_node_create_points(grecs_node_block, @1.beg, @7.end); grecs_line_begin(); grecs_line_add("if", 2); $$->ident = grecs_line_finish(); $$->idloc = @1; $$->v.value = make_string_value ($2); grecs_node_bind($$, $4, 1); if ($6.head) { grecs_node_bind($6.tail, $7, 0); grecs_node_bind($$, $6.head, 0); } } ; if : DHCPD_IF { grecs_dhcpd_begin_bool(); } ; elsif : DHCPD_ELSIF { grecs_dhcpd_begin_bool(); } ; opt_elsifchain: /* empty */ { $$.head = $$.tail = NULL; } | elsifchain ; elsifchain: elsifcond { $$.head = $$.tail = $1; } | elsifchain elsifcond { if ($2) { if (!$1.head) $1.head = $1.tail = $2; else grecs_node_bind($1.tail, $2, 0); } $$ = $1; } ; elsifcond: elsif DHCPD_EXPR '{' maybe_stmtlist '}' { $$ = grecs_node_create_points(grecs_node_block, @1.beg, @5.end); grecs_line_begin(); grecs_line_add("elsif", 5); $$->ident = grecs_line_finish(); $$->idloc = @1; $$->v.value = make_string_value ($2); grecs_node_bind($$, $4, 1); } ; opt_elsecond: /* empty */ { $$ = NULL; } | elsecond ; elsecond: DHCPD_ELSE '{' maybe_stmtlist '}' { $$ = grecs_node_create_points(grecs_node_block, @1.beg, @4.end); grecs_line_begin(); grecs_line_add("else", 4); $$->ident = grecs_line_finish(); $$->idloc = @1; $$->v.value = NULL; grecs_node_bind($$, $3, 1); } ; %% int yyerror(char const *s) { grecs_error(&yylloc, 0, "%s", s); return 0; } struct grecs_node * grecs_dhcpd_parser(const char *name, int traceflags) { int rc; if (grecs_dhcpd_new_source(name, NULL)) return NULL; yy_flex_debug = traceflags & GRECS_TRACE_LEX; yydebug = traceflags & GRECS_TRACE_GRAM; parse_tree = NULL; grecs_line_acc_create(); rc = yyparse(); grecs_dhcpd_close_sources(); if (grecs_error_count) rc = 1; grecs_line_acc_free(); if (rc) { grecs_tree_free(parse_tree); parse_tree = NULL; } return parse_tree; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/src/parsertab.c������������������������������������������������������������������0000644�0001750�0001750�00000003341�13244106110�017200� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* grecs - Gray's Extensible Configuration System Copyright (C) 2007-2016 Sergey Poznyakoff Grecs 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. Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include <stdlib.h> #include <strings.h> #include <errno.h> #include "grecs.h" static struct parser_tab { const char *name; grecs_parser_t parser; } parser_tab[] = { { "GRECS", grecs_grecs_parser }, { "PATH", grecs_path_parser }, #ifdef ENABLE_META1_PARSER { "META1", grecs_meta1_parser }, #endif #ifdef ENABLE_BIND_PARSER { "BIND", grecs_bind_parser }, #endif #ifdef ENABLE_DHCPD_PARSER { "DHCPD", grecs_dhcpd_parser }, { "DHCP", grecs_dhcpd_parser }, #endif #ifdef ENABLE_GIT_PARSER { "GIT", grecs_git_parser }, #endif { NULL } }; int grecs_enumerate_parsers(int (*fun)(const char *, grecs_parser_t, void *), void *data) { struct parser_tab *pt; int rc = 0; for (pt = parser_tab; rc == 0 && pt->name; pt++) rc = fun(pt->name, pt->parser, data); return rc; } grecs_parser_t grecs_get_parser_by_type(const char *type) { struct parser_tab *pt; for (pt = parser_tab; pt->name; pt++) { if (strcasecmp(pt->name, type) == 0) return pt->parser; } return NULL; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/src/json-lex.l�������������������������������������������������������������������0000644�0001750�0001750�00000013023�13511403723�016772� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������%option noinput %option nounput %top { #ifdef HAVE_CONFIG_H # include <config.h> #endif } %{ /* This file is part of Grecs. Copyright (C) 2012-2016 Sergey Poznyakoff. Grecs 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. Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. */ #include "grecs.h" #include "json-gram.h" #include "grecs/json.h" static char const *input_ptr; static size_t input_size; struct grecs_locus_point json_current_locus_point; /* Input location */ char const *json_err_diag; struct grecs_locus json_err_locus; #undef YY_INPUT #define YY_INPUT(buf,result,max_size) \ do { \ size_t n = (max_size > input_size) ? input_size : max_size; \ if (n) { \ memcpy(buf, input_ptr, n); \ input_ptr += n; \ input_size -= n; \ } \ result = n; \ } while(0) #define YY_USER_ACTION do { \ if (YYSTATE == 0) { \ yylloc.beg = json_current_locus_point; \ yylloc.beg.col++; \ } \ json_current_locus_point.col += yyleng; \ yylloc.end = json_current_locus_point; \ } while (0); void jsonlex_diag(const char *s) { if (!json_err_diag) { json_err_diag = s; json_err_locus = yylloc; } } static int utf8_wctomb(char *u) { unsigned int wc = strtoul(u, NULL, 16); int count; char r[6]; if (wc < 0x80) count = 1; else if (wc < 0x800) count = 2; else if (wc < 0x10000) count = 3; else if (wc < 0x200000) count = 4; else if (wc < 0x4000000) count = 5; else if (wc <= 0x7fffffff) count = 6; else return -1; switch (count) { /* Note: code falls through cases! */ case 6: r[5] = 0x80 | (wc & 0x3f); wc = wc >> 6; wc |= 0x4000000; case 5: r[4] = 0x80 | (wc & 0x3f); wc = wc >> 6; wc |= 0x200000; case 4: r[3] = 0x80 | (wc & 0x3f); wc = wc >> 6; wc |= 0x10000; case 3: r[2] = 0x80 | (wc & 0x3f); wc = wc >> 6; wc |= 0x800; case 2: r[1] = 0x80 | (wc & 0x3f); wc = wc >> 6; wc |= 0xc0; case 1: r[0] = wc; } grecs_line_acc_grow(r, count); return count; } int json_unescape(char c, char *o) { static char transtab[] = "\\\\\"\"b\bf\fn\nr\rt\t"; char *p; for (p = transtab; *p; p += 2) { if (p[0] == c) { *o = p[1]; return 0; } } return -1; } #define YY_SKIP_YYWRAP 1 static int yywrap() { return 1; } static struct grecs_txtacc *json_line_acc; static void json_line_begin() { if (!json_line_acc) json_line_acc = grecs_txtacc_create(); } static char * json_line_finish() { if (json_line_acc) { char nil = 0; grecs_txtacc_grow(json_line_acc, &nil, 1); return grecs_txtacc_finish(json_line_acc, 1); } return NULL; } static void json_line_grow(char const *text, size_t len) { grecs_txtacc_grow(json_line_acc, text, len); } %} D [0-9] X [0-9a-fA-F] %x STR %% "-"?{D}{D}*(.{D}{D}*)?([eE][-+]?{D}{D}*)? { yylval.n = strtod(yytext, NULL); return T_NUMBER; } \"[^\\\"]*\" { json_line_begin(); json_line_grow(yytext + 1, yyleng - 2); yylval.s = json_line_finish(); return T_STRING; } \"[^\\\"]*\\{X}{4} { BEGIN(STR); json_line_begin(); json_line_grow(yytext + 1, yyleng - 5); utf8_wctomb(yytext + yyleng - 4); } \"[^\\\"]*\\. { char c; BEGIN(STR); json_line_begin(); json_line_grow(yytext + 1, yyleng - 3); if (json_unescape(yytext[yyleng - 1], &c)) { jsonlex_diag("invalid UTF-8 codepoint"); return T_ERR; } json_line_grow(&c, 1); } <STR>[^\\\"]*\" { BEGIN(INITIAL); if (yyleng > 1) json_line_grow(yytext, yyleng - 1); yylval.s = json_line_finish(); return T_STRING; } <STR>[^\\\"]*\\{X}{4} { json_line_grow(yytext, yyleng - 5); utf8_wctomb(yytext + yyleng - 4); } <STR>[^\\\"]*\\. { char c; json_line_grow(yytext, yyleng - 2); if (json_unescape(yytext[yyleng - 1], &c)) { jsonlex_diag("invalid UTF-8 codepoint"); return T_ERR; } json_line_grow(&c, 1); } null { return T_NULL; } true { yylval.b = 1; return T_BOOL; } false { yylval.b = 0; return T_BOOL; } "{"|"}"|"["|"]"|":"|"," return yytext[0]; [ \t]* ; \n grecs_locus_point_advance_line(json_current_locus_point); . { jsonlex_diag("bogus character"); return T_ERR; } %% void jsonlex_setup(char const *s, size_t l) { input_ptr = s; input_size = l; json_current_locus_point.file = "input"; json_current_locus_point.line = 1; json_current_locus_point.col = 0; json_err_diag = NULL; yy_flex_debug = 0; BEGIN(INITIAL); yyrestart(NULL); } void jsonlex_cleanup(void) { if (json_line_acc) { grecs_txtacc_free(json_line_acc); json_line_acc = NULL; } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/src/bind-lex.c�������������������������������������������������������������������0000644�0001750�0001750�00000214150�13244106172�016731� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#line 5 "bind-lex.l" #ifdef HAVE_CONFIG_H # include <config.h> #endif #line 9 "bind-lex.c" #define YY_INT_ALIGNED short int /* A lexical scanner generated by flex */ /* %not-for-header */ /* %if-c-only */ /* %if-not-reentrant */ /* %endif */ /* %endif */ /* %ok-for-header */ #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 5 #define YY_FLEX_SUBMINOR_VERSION 37 #if YY_FLEX_SUBMINOR_VERSION > 0 #define FLEX_BETA #endif /* %if-c++-only */ /* %endif */ /* %if-c-only */ /* %endif */ /* %if-c-only */ /* %endif */ /* First, we deal with platform-specific or compiler-specific issues. */ /* begin standard C headers. */ /* %if-c-only */ #include <stdio.h> #include <string.h> #include <errno.h> #include <stdlib.h> /* %endif */ /* %if-tables-serialization */ /* %endif */ /* end standard C headers. */ /* %if-c-or-c++ */ /* flex integer type definitions */ #ifndef FLEXINT_H #define FLEXINT_H /* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */ #if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, * if you want the limit (max/min) macros for int types. */ #ifndef __STDC_LIMIT_MACROS #define __STDC_LIMIT_MACROS 1 #endif #include <inttypes.h> typedef int8_t flex_int8_t; typedef uint8_t flex_uint8_t; typedef int16_t flex_int16_t; typedef uint16_t flex_uint16_t; typedef int32_t flex_int32_t; typedef uint32_t flex_uint32_t; #else typedef signed char flex_int8_t; typedef short int flex_int16_t; typedef int flex_int32_t; typedef unsigned char flex_uint8_t; typedef unsigned short int flex_uint16_t; typedef unsigned int flex_uint32_t; /* Limits of integral types. */ #ifndef INT8_MIN #define INT8_MIN (-128) #endif #ifndef INT16_MIN #define INT16_MIN (-32767-1) #endif #ifndef INT32_MIN #define INT32_MIN (-2147483647-1) #endif #ifndef INT8_MAX #define INT8_MAX (127) #endif #ifndef INT16_MAX #define INT16_MAX (32767) #endif #ifndef INT32_MAX #define INT32_MAX (2147483647) #endif #ifndef UINT8_MAX #define UINT8_MAX (255U) #endif #ifndef UINT16_MAX #define UINT16_MAX (65535U) #endif #ifndef UINT32_MAX #define UINT32_MAX (4294967295U) #endif #endif /* ! C99 */ #endif /* ! FLEXINT_H */ /* %endif */ /* %if-c++-only */ /* %endif */ #ifdef __cplusplus /* The "const" storage-class-modifier is valid. */ #define YY_USE_CONST #else /* ! __cplusplus */ /* C99 requires __STDC__ to be defined as 1. */ #if defined (__STDC__) #define YY_USE_CONST #endif /* defined (__STDC__) */ #endif /* ! __cplusplus */ #ifdef YY_USE_CONST #define grecs_bind_const const #else #define grecs_bind_const #endif /* %not-for-header */ /* Returned upon end-of-file. */ #define YY_NULL 0 /* %ok-for-header */ /* %not-for-header */ /* Promotes a possibly negative, possibly signed char to an unsigned * integer for use as an array index. If the signed char is negative, * we want to instead treat it as an 8-bit unsigned char, hence the * double cast. */ #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) /* %ok-for-header */ /* %if-reentrant */ /* %endif */ /* %if-not-reentrant */ /* %endif */ /* Enter a start condition. This macro really ought to take a parameter, * but we do it the disgusting crufty way forced on us by the ()-less * definition of BEGIN. */ #define BEGIN (grecs_bind__start) = 1 + 2 * /* Translate the current start state into a value that can be later handed * to BEGIN to return to the state. The YYSTATE alias is for lex * compatibility. */ #define YY_START (((grecs_bind__start) - 1) / 2) #define YYSTATE YY_START /* Action number for EOF rule of a given start state. */ #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) /* Special action meaning "start processing a new file". */ #define YY_NEW_FILE grecs_bind_restart(grecs_bind_in ) #define YY_END_OF_BUFFER_CHAR 0 /* Size of default input buffer. */ #ifndef YY_BUF_SIZE #define YY_BUF_SIZE 16384 #endif /* The state buf must be large enough to hold one state per character in the main buffer. */ #define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(grecs_bind__state_type)) #ifndef YY_TYPEDEF_YY_BUFFER_STATE #define YY_TYPEDEF_YY_BUFFER_STATE typedef struct grecs_bind__buffer_state *YY_BUFFER_STATE; #endif #ifndef YY_TYPEDEF_YY_SIZE_T #define YY_TYPEDEF_YY_SIZE_T typedef size_t grecs_bind__size_t; #endif /* %if-not-reentrant */ extern grecs_bind__size_t grecs_bind_leng; /* %endif */ /* %if-c-only */ /* %if-not-reentrant */ extern FILE *grecs_bind_in, *grecs_bind_out; /* %endif */ /* %endif */ #define EOB_ACT_CONTINUE_SCAN 0 #define EOB_ACT_END_OF_FILE 1 #define EOB_ACT_LAST_MATCH 2 #define YY_LESS_LINENO(n) /* Return all but the first "n" matched characters back to the input stream. */ #define grecs_bind_less(n) \ do \ { \ /* Undo effects of setting up grecs_bind_text. */ \ int grecs_bind_less_macro_arg = (n); \ YY_LESS_LINENO(grecs_bind_less_macro_arg);\ *grecs_bind__cp = (grecs_bind__hold_char); \ YY_RESTORE_YY_MORE_OFFSET \ (grecs_bind__c_buf_p) = grecs_bind__cp = grecs_bind__bp + grecs_bind_less_macro_arg - YY_MORE_ADJ; \ YY_DO_BEFORE_ACTION; /* set up grecs_bind_text again */ \ } \ while ( 0 ) #define unput(c) grecs_bind_unput( c, (grecs_bind_text_ptr) ) #ifndef YY_STRUCT_YY_BUFFER_STATE #define YY_STRUCT_YY_BUFFER_STATE struct grecs_bind__buffer_state { /* %if-c-only */ FILE *grecs_bind__input_file; /* %endif */ /* %if-c++-only */ /* %endif */ char *grecs_bind__ch_buf; /* input buffer */ char *grecs_bind__buf_pos; /* current position in input buffer */ /* Size of input buffer in bytes, not including room for EOB * characters. */ grecs_bind__size_t grecs_bind__buf_size; /* Number of characters read into grecs_bind__ch_buf, not including EOB * characters. */ grecs_bind__size_t grecs_bind__n_chars; /* Whether we "own" the buffer - i.e., we know we created it, * and can realloc() it to grow it, and should free() it to * delete it. */ int grecs_bind__is_our_buffer; /* Whether this is an "interactive" input source; if so, and * if we're using stdio for input, then we want to use getc() * instead of fread(), to make sure we stop fetching input after * each newline. */ int grecs_bind__is_interactive; /* Whether we're considered to be at the beginning of a line. * If so, '^' rules will be active on the next match, otherwise * not. */ int grecs_bind__at_bol; int grecs_bind__bs_lineno; /**< The line count. */ int grecs_bind__bs_column; /**< The column count. */ /* Whether to try to fill the input buffer when we reach the * end of it. */ int grecs_bind__fill_buffer; int grecs_bind__buffer_status; #define YY_BUFFER_NEW 0 #define YY_BUFFER_NORMAL 1 /* When an EOF's been seen but there's still some text to process * then we mark the buffer as YY_EOF_PENDING, to indicate that we * shouldn't try reading from the input source any more. We might * still have a bunch of tokens to match, though, because of * possible backing-up. * * When we actually see the EOF, we change the status to "new" * (via grecs_bind_restart()), so that the user can continue scanning by * just pointing grecs_bind_in at a new input file. */ #define YY_BUFFER_EOF_PENDING 2 }; #endif /* !YY_STRUCT_YY_BUFFER_STATE */ /* %if-c-only Standard (non-C++) definition */ /* %not-for-header */ /* %if-not-reentrant */ /* Stack of input buffers. */ static size_t grecs_bind__buffer_stack_top = 0; /**< index of top of stack. */ static size_t grecs_bind__buffer_stack_max = 0; /**< capacity of stack. */ static YY_BUFFER_STATE * grecs_bind__buffer_stack = 0; /**< Stack as an array. */ /* %endif */ /* %ok-for-header */ /* %endif */ /* We provide macros for accessing buffer states in case in the * future we want to put the buffer states in a more general * "scanner state". * * Returns the top of the stack, or NULL. */ #define YY_CURRENT_BUFFER ( (grecs_bind__buffer_stack) \ ? (grecs_bind__buffer_stack)[(grecs_bind__buffer_stack_top)] \ : NULL) /* Same as previous macro, but useful when we know that the buffer stack is not * NULL or when we need an lvalue. For internal use only. */ #define YY_CURRENT_BUFFER_LVALUE (grecs_bind__buffer_stack)[(grecs_bind__buffer_stack_top)] /* %if-c-only Standard (non-C++) definition */ /* %if-not-reentrant */ /* %not-for-header */ /* grecs_bind__hold_char holds the character lost when grecs_bind_text is formed. */ static char grecs_bind__hold_char; static grecs_bind__size_t grecs_bind__n_chars; /* number of characters read into grecs_bind__ch_buf */ grecs_bind__size_t grecs_bind_leng; /* Points to current character in buffer. */ static char *grecs_bind__c_buf_p = (char *) 0; static int grecs_bind__init = 0; /* whether we need to initialize */ static int grecs_bind__start = 0; /* start state number */ /* Flag which is used to allow grecs_bind_wrap()'s to do buffer switches * instead of setting up a fresh grecs_bind_in. A bit of a hack ... */ static int grecs_bind__did_buffer_switch_on_eof; /* %ok-for-header */ /* %endif */ void grecs_bind_restart (FILE *input_file ); void grecs_bind__switch_to_buffer (YY_BUFFER_STATE new_buffer ); YY_BUFFER_STATE grecs_bind__create_buffer (FILE *file,int size ); void grecs_bind__delete_buffer (YY_BUFFER_STATE b ); void grecs_bind__flush_buffer (YY_BUFFER_STATE b ); void grecs_bind_push_buffer_state (YY_BUFFER_STATE new_buffer ); void grecs_bind_pop_buffer_state (void ); static void grecs_bind_ensure_buffer_stack (void ); static void grecs_bind__load_buffer_state (void ); static void grecs_bind__init_buffer (YY_BUFFER_STATE b,FILE *file ); #define YY_FLUSH_BUFFER grecs_bind__flush_buffer(YY_CURRENT_BUFFER ) YY_BUFFER_STATE grecs_bind__scan_buffer (char *base,grecs_bind__size_t size ); YY_BUFFER_STATE grecs_bind__scan_string (grecs_bind_const char *grecs_bind__str ); YY_BUFFER_STATE grecs_bind__scan_bytes (grecs_bind_const char *bytes,grecs_bind__size_t len ); /* %endif */ void *grecs_bind_alloc (grecs_bind__size_t ); void *grecs_bind_realloc (void *,grecs_bind__size_t ); void grecs_bind_free (void * ); #define grecs_bind__new_buffer grecs_bind__create_buffer #define grecs_bind__set_interactive(is_interactive) \ { \ if ( ! YY_CURRENT_BUFFER ){ \ grecs_bind_ensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ grecs_bind__create_buffer(grecs_bind_in,YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->grecs_bind__is_interactive = is_interactive; \ } #define grecs_bind__set_bol(at_bol) \ { \ if ( ! YY_CURRENT_BUFFER ){\ grecs_bind_ensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ grecs_bind__create_buffer(grecs_bind_in,YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->grecs_bind__at_bol = at_bol; \ } #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->grecs_bind__at_bol) /* %% [1.0] grecs_bind_text/grecs_bind_in/grecs_bind_out/grecs_bind__state_type/grecs_bind_lineno etc. def's & init go here */ /* Begin user sect3 */ #define FLEX_DEBUG typedef unsigned char YY_CHAR; FILE *grecs_bind_in = (FILE *) 0, *grecs_bind_out = (FILE *) 0; typedef int grecs_bind__state_type; extern int grecs_bind_lineno; int grecs_bind_lineno = 1; extern char *grecs_bind_text; #define grecs_bind_text_ptr grecs_bind_text /* %if-c-only Standard (non-C++) definition */ static grecs_bind__state_type grecs_bind__get_previous_state (void ); static grecs_bind__state_type grecs_bind__try_NUL_trans (grecs_bind__state_type current_state ); static int grecs_bind__get_next_buffer (void ); static void grecs_bind__fatal_error (grecs_bind_const char msg[] ); /* %endif */ /* Done after the current pattern has been matched and before the * corresponding action - sets up grecs_bind_text. */ #define YY_DO_BEFORE_ACTION \ (grecs_bind_text_ptr) = grecs_bind__bp; \ /* %% [2.0] code to fiddle grecs_bind_text and grecs_bind_leng for grecs_bind_more() goes here \ */\ grecs_bind_leng = (size_t) (grecs_bind__cp - grecs_bind__bp); \ (grecs_bind__hold_char) = *grecs_bind__cp; \ *grecs_bind__cp = '\0'; \ /* %% [3.0] code to copy grecs_bind_text_ptr to grecs_bind_text[] goes here, if %array \ */\ (grecs_bind__c_buf_p) = grecs_bind__cp; /* %% [4.0] data tables for the DFA and the user's section 1 definitions go here */ #define YY_NUM_RULES 27 #define YY_END_OF_BUFFER 28 /* This struct is not used in this scanner, but its presence is necessary. */ struct grecs_bind__trans_info { flex_int32_t grecs_bind__verify; flex_int32_t grecs_bind__nxt; }; static grecs_bind_const flex_int16_t grecs_bind__accept[94] = { 0, 0, 0, 2, 2, 0, 0, 28, 26, 23, 24, 25, 26, 9, 13, 13, 12, 23, 9, 2, 4, 3, 27, 20, 22, 27, 23, 0, 17, 14, 0, 9, 8, 13, 1, 11, 12, 23, 0, 9, 9, 9, 2, 3, 3, 5, 0, 20, 22, 0, 0, 21, 0, 18, 15, 16, 13, 11, 10, 11, 12, 0, 0, 0, 9, 9, 9, 19, 0, 0, 0, 9, 9, 0, 0, 9, 9, 9, 0, 0, 0, 9, 6, 9, 9, 0, 6, 0, 0, 9, 7, 0, 7, 0 } ; static grecs_bind_const flex_int32_t grecs_bind__ec[256] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 5, 6, 7, 1, 1, 1, 1, 5, 5, 8, 1, 5, 9, 10, 11, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 10, 5, 1, 1, 1, 1, 10, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 1, 15, 1, 1, 14, 1, 14, 14, 14, 14, 16, 14, 14, 14, 17, 14, 14, 18, 14, 19, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 5, 1, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; static grecs_bind_const flex_int32_t grecs_bind__meta[20] = { 0, 1, 2, 3, 1, 1, 4, 1, 5, 6, 6, 6, 7, 7, 6, 1, 6, 6, 6, 6 } ; static grecs_bind_const flex_int16_t grecs_bind__base[116] = { 0, 0, 18, 18, 19, 25, 38, 108, 330, 28, 330, 330, 51, 104, 0, 25, 13, 65, 71, 0, 330, 26, 87, 330, 32, 0, 41, 100, 330, 330, 102, 101, 330, 0, 330, 115, 127, 0, 137, 0, 154, 35, 0, 31, 38, 330, 170, 330, 330, 0, 45, 330, 98, 330, 330, 330, 0, 97, 330, 0, 178, 0, 97, 81, 188, 0, 52, 330, 56, 95, 77, 53, 47, 89, 78, 58, 62, 73, 86, 74, 89, 75, 330, 76, 84, 80, 330, 82, 67, 48, 330, 26, 330, 330, 194, 201, 208, 215, 217, 219, 226, 233, 240, 247, 254, 261, 264, 267, 274, 280, 287, 294, 301, 308, 315, 322 } ; static grecs_bind_const flex_int16_t grecs_bind__def[116] = { 0, 93, 1, 94, 94, 95, 95, 93, 93, 93, 93, 93, 96, 97, 98, 98, 99, 93, 97, 100, 93, 101, 102, 93, 103, 104, 93, 96, 93, 93, 105, 97, 93, 106, 93, 93, 107, 17, 93, 18, 18, 97, 100, 101, 101, 93, 102, 93, 93, 104, 103, 93, 93, 93, 93, 93, 106, 108, 93, 35, 107, 38, 109, 93, 97, 40, 97, 93, 93, 109, 93, 110, 97, 111, 93, 110, 112, 97, 111, 113, 93, 112, 93, 112, 114, 113, 93, 113, 115, 114, 93, 115, 93, 0, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93 } ; static grecs_bind_const flex_int16_t grecs_bind__nxt[350] = { 0, 8, 9, 10, 9, 11, 12, 13, 14, 14, 14, 15, 14, 14, 16, 8, 16, 16, 16, 16, 17, 20, 20, 33, 33, 18, 21, 21, 23, 92, 26, 24, 26, 34, 44, 51, 35, 45, 32, 93, 25, 23, 93, 26, 24, 26, 44, 52, 51, 45, 32, 90, 66, 25, 28, 32, 32, 29, 68, 76, 52, 32, 73, 77, 76, 82, 30, 37, 83, 26, 92, 72, 38, 39, 32, 84, 32, 86, 82, 82, 87, 83, 83, 86, 40, 86, 87, 90, 87, 41, 47, 88, 79, 48, 80, 79, 74, 68, 70, 68, 58, 67, 49, 28, 32, 55, 29, 32, 93, 93, 93, 93, 93, 93, 93, 30, 57, 57, 58, 57, 57, 57, 57, 59, 59, 59, 59, 59, 59, 59, 57, 59, 59, 59, 59, 56, 93, 56, 56, 61, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 62, 93, 93, 93, 93, 63, 64, 93, 93, 93, 93, 93, 93, 93, 93, 93, 65, 65, 93, 93, 93, 93, 31, 47, 93, 93, 48, 93, 93, 93, 93, 93, 93, 93, 93, 49, 56, 93, 56, 56, 64, 32, 93, 93, 71, 19, 19, 19, 19, 19, 19, 19, 22, 22, 22, 22, 22, 22, 22, 27, 27, 27, 27, 27, 27, 27, 31, 31, 31, 31, 31, 31, 31, 33, 33, 36, 36, 42, 42, 93, 42, 93, 42, 42, 43, 43, 93, 43, 43, 43, 43, 46, 46, 46, 46, 46, 46, 46, 50, 50, 50, 93, 50, 50, 50, 53, 53, 93, 53, 53, 53, 53, 54, 54, 54, 54, 54, 54, 54, 56, 56, 56, 60, 60, 60, 57, 57, 57, 57, 57, 57, 57, 69, 93, 93, 93, 93, 69, 75, 75, 75, 75, 75, 75, 75, 78, 78, 93, 78, 78, 78, 78, 81, 81, 81, 81, 81, 81, 81, 85, 85, 85, 85, 85, 85, 85, 89, 89, 89, 89, 89, 89, 89, 91, 91, 91, 91, 91, 91, 91, 7, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93 } ; static grecs_bind_const flex_int16_t grecs_bind__chk[350] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 4, 16, 16, 2, 3, 4, 5, 91, 9, 5, 9, 15, 21, 24, 15, 21, 41, 43, 5, 6, 43, 26, 6, 26, 44, 24, 50, 44, 72, 89, 41, 6, 12, 66, 71, 12, 68, 71, 50, 75, 68, 72, 75, 76, 12, 17, 76, 17, 88, 66, 17, 18, 18, 77, 77, 79, 81, 83, 79, 81, 83, 85, 18, 87, 85, 84, 87, 18, 22, 80, 78, 22, 74, 73, 70, 69, 63, 62, 57, 52, 22, 27, 31, 30, 27, 13, 7, 0, 0, 0, 0, 0, 0, 27, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 36, 0, 36, 36, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 38, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 40, 0, 0, 0, 0, 40, 46, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 46, 60, 0, 60, 60, 64, 64, 0, 0, 64, 94, 94, 94, 94, 94, 94, 94, 95, 95, 95, 95, 95, 95, 95, 96, 96, 96, 96, 96, 96, 96, 97, 97, 97, 97, 97, 97, 97, 98, 98, 99, 99, 100, 100, 0, 100, 0, 100, 100, 101, 101, 0, 101, 101, 101, 101, 102, 102, 102, 102, 102, 102, 102, 103, 103, 103, 0, 103, 103, 103, 104, 104, 0, 104, 104, 104, 104, 105, 105, 105, 105, 105, 105, 105, 106, 106, 106, 107, 107, 107, 108, 108, 108, 108, 108, 108, 108, 109, 0, 0, 0, 0, 109, 110, 110, 110, 110, 110, 110, 110, 111, 111, 0, 111, 111, 111, 111, 112, 112, 112, 112, 112, 112, 112, 113, 113, 113, 113, 113, 113, 113, 114, 114, 114, 114, 114, 114, 114, 115, 115, 115, 115, 115, 115, 115, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93 } ; static grecs_bind__state_type grecs_bind__last_accepting_state; static char *grecs_bind__last_accepting_cpos; extern int grecs_bind__flex_debug; int grecs_bind__flex_debug = 1; static grecs_bind_const flex_int16_t grecs_bind__rule_linenum[27] = { 0, 55, 56, 57, 58, 59, 61, 65, 70, 71, 72, 73, 75, 82, 88, 92, 93, 98, 101, 102, 104, 105, 106, 111, 113, 114, 115 } ; /* The intent behind this definition is that it'll catch * any uses of REJECT which flex missed. */ #define REJECT reject_used_but_not_detected #define grecs_bind_more() grecs_bind_more_used_but_not_detected #define YY_MORE_ADJ 0 #define YY_RESTORE_YY_MORE_OFFSET char *grecs_bind_text; #line 1 "bind-lex.l" /* grecs - Gray's Extensible Configuration System -*- c -*- */ #define YY_NO_INPUT 1 #line 10 "bind-lex.l" /* grecs - Gray's Extensible Configuration System Copyright (C) 2007-2016 Sergey Poznyakoff Grecs 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. Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. */ #include <grecs.h> #include <bind-gram.h> #include <unistd.h> #include <fcntl.h> #include <ctype.h> #include <stdlib.h> #include <errno.h> #include <sys/stat.h> #include <wordsplit.h> #define YY_USER_ACTION do { \ if (YYSTATE == 0) { \ grecs_bind_lloc.beg = grecs_current_locus_point; \ grecs_bind_lloc.beg.col++; \ } \ grecs_current_locus_point.col += grecs_bind_leng; \ grecs_bind_lloc.end = grecs_current_locus_point; \ } while (0); #line 695 "bind-lex.c" #define INITIAL 0 #define COMMENT 1 #define STR 2 #ifndef YY_NO_UNISTD_H /* Special case for "unistd.h", since it is non-ANSI. We include it way * down here because we want the user's section 1 to have been scanned first. * The user has a chance to override it with an option. */ /* %if-c-only */ #include <unistd.h> /* %endif */ /* %if-c++-only */ /* %endif */ #endif #ifndef YY_EXTRA_TYPE #define YY_EXTRA_TYPE void * #endif /* %if-c-only Reentrant structure and macros (non-C++). */ /* %if-reentrant */ /* %if-c-only */ static int grecs_bind__init_globals (void ); /* %endif */ /* %if-reentrant */ /* %endif */ /* %endif End reentrant structures and macros. */ /* Accessor methods to globals. These are made visible to non-reentrant scanners for convenience. */ int grecs_bind_lex_destroy (void ); int grecs_bind_get_debug (void ); void grecs_bind_set_debug (int debug_flag ); YY_EXTRA_TYPE grecs_bind_get_extra (void ); void grecs_bind_set_extra (YY_EXTRA_TYPE user_defined ); FILE *grecs_bind_get_in (void ); void grecs_bind_set_in (FILE * in_str ); FILE *grecs_bind_get_out (void ); void grecs_bind_set_out (FILE * out_str ); grecs_bind__size_t grecs_bind_get_leng (void ); char *grecs_bind_get_text (void ); int grecs_bind_get_lineno (void ); void grecs_bind_set_lineno (int line_number ); /* %if-bison-bridge */ /* %endif */ /* Macros after this point can all be overridden by user definitions in * section 1. */ #ifndef YY_SKIP_YYWRAP #ifdef __cplusplus extern "C" int grecs_bind_wrap (void ); #else extern int grecs_bind_wrap (void ); #endif #endif /* %not-for-header */ /* %ok-for-header */ /* %endif */ #ifndef grecs_bind_text_ptr static void grecs_bind__flex_strncpy (char *,grecs_bind_const char *,int ); #endif #ifdef YY_NEED_STRLEN static int grecs_bind__flex_strlen (grecs_bind_const char * ); #endif #ifndef YY_NO_INPUT /* %if-c-only Standard (non-C++) definition */ /* %not-for-header */ #ifdef __cplusplus static int grecs_bind_input (void ); #else static int input (void ); #endif /* %ok-for-header */ /* %endif */ #endif /* %if-c-only */ /* %endif */ /* Amount of stuff to slurp up with each read. */ #ifndef YY_READ_BUF_SIZE #define YY_READ_BUF_SIZE 8192 #endif /* Copy whatever the last rule matched to the standard output. */ #ifndef ECHO /* %if-c-only Standard (non-C++) definition */ /* This used to be an fputs(), but since the string might contain NUL's, * we now use fwrite(). */ #define ECHO do { if (fwrite( grecs_bind_text, grecs_bind_leng, 1, grecs_bind_out )) {} } while (0) /* %endif */ /* %if-c++-only C++ definition */ /* %endif */ #endif /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, * is returned in "result". */ #ifndef YY_INPUT #define YY_INPUT(buf,result,max_size) \ /* %% [5.0] fread()/read() definition of YY_INPUT goes here unless we're doing C++ \ */\ if ( YY_CURRENT_BUFFER_LVALUE->grecs_bind__is_interactive ) \ { \ int c = '*'; \ size_t n; \ for ( n = 0; n < max_size && \ (c = getc( grecs_bind_in )) != EOF && c != '\n'; ++n ) \ buf[n] = (char) c; \ if ( c == '\n' ) \ buf[n++] = (char) c; \ if ( c == EOF && ferror( grecs_bind_in ) ) \ YY_FATAL_ERROR( "input in flex scanner failed" ); \ result = n; \ } \ else \ { \ errno=0; \ while ( (result = fread(buf, 1, max_size, grecs_bind_in))==0 && ferror(grecs_bind_in)) \ { \ if( errno != EINTR) \ { \ YY_FATAL_ERROR( "input in flex scanner failed" ); \ break; \ } \ errno=0; \ clearerr(grecs_bind_in); \ } \ }\ \ /* %if-c++-only C++ definition \ */\ /* %endif */ #endif /* No semi-colon after return; correct usage is to write "grecs_bind_terminate();" - * we don't want an extra ';' after the "return" because that will cause * some compilers to complain about unreachable statements. */ #ifndef grecs_bind_terminate #define grecs_bind_terminate() return YY_NULL #endif /* Number of entries by which start-condition stack grows. */ #ifndef YY_START_STACK_INCR #define YY_START_STACK_INCR 25 #endif /* Report a fatal error. */ #ifndef YY_FATAL_ERROR /* %if-c-only */ #define YY_FATAL_ERROR(msg) grecs_bind__fatal_error( msg ) /* %endif */ /* %if-c++-only */ /* %endif */ #endif /* %if-tables-serialization structures and prototypes */ /* %not-for-header */ /* %ok-for-header */ /* %not-for-header */ /* %tables-grecs_bind_dmap generated elements */ /* %endif */ /* end tables serialization structures and prototypes */ /* %ok-for-header */ /* Default declaration of generated scanner - a define so the user can * easily add parameters. */ #ifndef YY_DECL #define YY_DECL_IS_OURS 1 /* %if-c-only Standard (non-C++) definition */ extern int grecs_bind_lex (void); #define YY_DECL int grecs_bind_lex (void) /* %endif */ /* %if-c++-only C++ definition */ /* %endif */ #endif /* !YY_DECL */ /* Code executed at the beginning of each rule, after grecs_bind_text and grecs_bind_leng * have been set up. */ #ifndef YY_USER_ACTION #define YY_USER_ACTION #endif /* Code executed at the end of each rule. */ #ifndef YY_BREAK #define YY_BREAK break; #endif /* %% [6.0] YY_RULE_SETUP definition goes here */ #define YY_RULE_SETUP \ if ( grecs_bind_leng > 0 ) \ YY_CURRENT_BUFFER_LVALUE->grecs_bind__at_bol = \ (grecs_bind_text[grecs_bind_leng - 1] == '\n'); \ YY_USER_ACTION /* %not-for-header */ /** The main scanner function which does all the work. */ YY_DECL { register grecs_bind__state_type grecs_bind__current_state; register char *grecs_bind__cp, *grecs_bind__bp; register int grecs_bind__act; /* %% [7.0] user's declarations go here */ #line 53 "bind-lex.l" /* C-style comments */ #line 943 "bind-lex.c" if ( !(grecs_bind__init) ) { (grecs_bind__init) = 1; #ifdef YY_USER_INIT YY_USER_INIT; #endif if ( ! (grecs_bind__start) ) (grecs_bind__start) = 1; /* first start state */ if ( ! grecs_bind_in ) /* %if-c-only */ grecs_bind_in = stdin; /* %endif */ /* %if-c++-only */ /* %endif */ if ( ! grecs_bind_out ) /* %if-c-only */ grecs_bind_out = stdout; /* %endif */ /* %if-c++-only */ /* %endif */ if ( ! YY_CURRENT_BUFFER ) { grecs_bind_ensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = grecs_bind__create_buffer(grecs_bind_in,YY_BUF_SIZE ); } grecs_bind__load_buffer_state( ); } while ( 1 ) /* loops until end-of-file is reached */ { /* %% [8.0] grecs_bind_more()-related code goes here */ grecs_bind__cp = (grecs_bind__c_buf_p); /* Support of grecs_bind_text. */ *grecs_bind__cp = (grecs_bind__hold_char); /* grecs_bind__bp points to the position in grecs_bind__ch_buf of the start of * the current run. */ grecs_bind__bp = grecs_bind__cp; /* %% [9.0] code to set up and find next match goes here */ grecs_bind__current_state = (grecs_bind__start); grecs_bind__current_state += YY_AT_BOL(); grecs_bind__match: do { register YY_CHAR grecs_bind__c = grecs_bind__ec[YY_SC_TO_UI(*grecs_bind__cp)]; if ( grecs_bind__accept[grecs_bind__current_state] ) { (grecs_bind__last_accepting_state) = grecs_bind__current_state; (grecs_bind__last_accepting_cpos) = grecs_bind__cp; } while ( grecs_bind__chk[grecs_bind__base[grecs_bind__current_state] + grecs_bind__c] != grecs_bind__current_state ) { grecs_bind__current_state = (int) grecs_bind__def[grecs_bind__current_state]; if ( grecs_bind__current_state >= 94 ) grecs_bind__c = grecs_bind__meta[(unsigned int) grecs_bind__c]; } grecs_bind__current_state = grecs_bind__nxt[grecs_bind__base[grecs_bind__current_state] + (unsigned int) grecs_bind__c]; ++grecs_bind__cp; } while ( grecs_bind__base[grecs_bind__current_state] != 330 ); grecs_bind__find_action: /* %% [10.0] code to find the action number goes here */ grecs_bind__act = grecs_bind__accept[grecs_bind__current_state]; if ( grecs_bind__act == 0 ) { /* have to back up */ grecs_bind__cp = (grecs_bind__last_accepting_cpos); grecs_bind__current_state = (grecs_bind__last_accepting_state); grecs_bind__act = grecs_bind__accept[grecs_bind__current_state]; } YY_DO_BEFORE_ACTION; /* %% [11.0] code for grecs_bind_lineno update goes here */ do_action: /* This label is used only to access EOF actions. */ /* %% [12.0] debug code goes here */ if ( grecs_bind__flex_debug ) { if ( grecs_bind__act == 0 ) fprintf( stderr, "--scanner backing up\n" ); else if ( grecs_bind__act < 27 ) fprintf( stderr, "--accepting rule at line %ld (\"%s\")\n", (long)grecs_bind__rule_linenum[grecs_bind__act], grecs_bind_text ); else if ( grecs_bind__act == 27 ) fprintf( stderr, "--accepting default rule (\"%s\")\n", grecs_bind_text ); else if ( grecs_bind__act == 28 ) fprintf( stderr, "--(end of buffer or a NUL)\n" ); else fprintf( stderr, "--EOF (start condition %d)\n", YY_START ); } switch ( grecs_bind__act ) { /* beginning of action switch */ /* %% [13.0] actions go here */ case 0: /* must back up */ /* undo the effects of YY_DO_BEFORE_ACTION */ *grecs_bind__cp = (grecs_bind__hold_char); grecs_bind__cp = (grecs_bind__last_accepting_cpos); grecs_bind__current_state = (grecs_bind__last_accepting_state); goto grecs_bind__find_action; case 1: YY_RULE_SETUP #line 55 "bind-lex.l" BEGIN(COMMENT); YY_BREAK case 2: YY_RULE_SETUP #line 56 "bind-lex.l" /* eat anything that's not a '*' */ YY_BREAK case 3: YY_RULE_SETUP #line 57 "bind-lex.l" /* eat up '*'s not followed by '/'s */ YY_BREAK case 4: /* rule 4 can match eol */ YY_RULE_SETUP #line 58 "bind-lex.l" grecs_locus_point_advance_line(grecs_current_locus_point); YY_BREAK case 5: YY_RULE_SETUP #line 59 "bind-lex.l" BEGIN(INITIAL); YY_BREAK /* Line directive */ case 6: /* rule 6 can match eol */ YY_RULE_SETUP #line 61 "bind-lex.l" { grecs_parse_line_directive_cpp(grecs_bind_text, &grecs_bind_lloc, &grecs_current_locus_point, NULL); } YY_BREAK case 7: /* rule 7 can match eol */ YY_RULE_SETUP #line 65 "bind-lex.l" { grecs_parse_line_directive(grecs_bind_text, &grecs_bind_lloc, &grecs_current_locus_point, NULL); } YY_BREAK /* End-of-line comments */ case 8: /* rule 8 can match eol */ YY_RULE_SETUP #line 70 "bind-lex.l" { grecs_locus_point_advance_line(grecs_current_locus_point); } YY_BREAK case 9: YY_RULE_SETUP #line 71 "bind-lex.l" /* end-of-file comment */; YY_BREAK case 10: /* rule 10 can match eol */ YY_RULE_SETUP #line 72 "bind-lex.l" { grecs_locus_point_advance_line(grecs_current_locus_point); } YY_BREAK case 11: YY_RULE_SETUP #line 73 "bind-lex.l" /* end-of-file comment */; YY_BREAK /* Identifiers */ case 12: YY_RULE_SETUP #line 75 "bind-lex.l" { grecs_line_begin(); grecs_line_add(grecs_bind_text, grecs_bind_leng); grecs_bind_lval.string = grecs_line_finish(); return strcmp(grecs_bind_lval.string, "controls") == 0 ? BIND_CONTROLS : BIND_IDENT; } YY_BREAK /* Strings */ case 13: YY_RULE_SETUP #line 82 "bind-lex.l" { grecs_line_begin(); grecs_line_add(grecs_bind_text, grecs_bind_leng); grecs_bind_lval.string = grecs_line_finish(); return BIND_STRING; } YY_BREAK /* Quoted strings */ case 14: YY_RULE_SETUP #line 88 "bind-lex.l" { grecs_line_begin(); grecs_line_add(grecs_bind_text + 1, grecs_bind_leng - 2); grecs_bind_lval.string = grecs_line_finish(); return BIND_STRING; } YY_BREAK case 15: #line 93 "bind-lex.l" case 16: /* rule 16 can match eol */ YY_RULE_SETUP #line 93 "bind-lex.l" { BEGIN(STR); grecs_line_begin(); grecs_line_acc_grow_unescape_last(grecs_bind_text + 1, grecs_bind_leng - 1, &grecs_bind_lloc); } YY_BREAK case 17: /* rule 17 can match eol */ YY_RULE_SETUP #line 98 "bind-lex.l" { BEGIN(STR); grecs_line_begin(); grecs_line_acc_grow(grecs_bind_text + 1, grecs_bind_leng - 1); } YY_BREAK case 18: #line 102 "bind-lex.l" case 19: /* rule 19 can match eol */ YY_RULE_SETUP #line 102 "bind-lex.l" { grecs_line_acc_grow_unescape_last(grecs_bind_text, grecs_bind_leng, &grecs_bind_lloc); } YY_BREAK case 20: /* rule 20 can match eol */ #line 105 "bind-lex.l" case 21: /* rule 21 can match eol */ YY_RULE_SETUP #line 105 "bind-lex.l" { grecs_line_acc_grow(grecs_bind_text, grecs_bind_leng); } YY_BREAK case 22: YY_RULE_SETUP #line 106 "bind-lex.l" { BEGIN(INITIAL); if (grecs_bind_leng > 1) grecs_line_add(grecs_bind_text, grecs_bind_leng - 1); grecs_bind_lval.string = grecs_line_finish(); return BIND_STRING; } YY_BREAK case 23: YY_RULE_SETUP #line 111 "bind-lex.l" ; YY_BREAK /* Other tokens */ case 24: /* rule 24 can match eol */ YY_RULE_SETUP #line 113 "bind-lex.l" { grecs_locus_point_advance_line(grecs_current_locus_point); } YY_BREAK case 25: YY_RULE_SETUP #line 114 "bind-lex.l" return grecs_bind_text[0]; YY_BREAK case 26: YY_RULE_SETUP #line 115 "bind-lex.l" { if (isascii(grecs_bind_text[0]) && isprint(grecs_bind_text[0])) grecs_error(&grecs_bind_lloc, 0, _("stray character %c"), grecs_bind_text[0]); else grecs_error(&grecs_bind_lloc, 0, _("stray character \\%03o"), (unsigned char) grecs_bind_text[0]); } YY_BREAK case 27: YY_RULE_SETUP #line 121 "bind-lex.l" ECHO; YY_BREAK #line 1235 "bind-lex.c" case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(COMMENT): case YY_STATE_EOF(STR): grecs_bind_terminate(); case YY_END_OF_BUFFER: { /* Amount of text matched not including the EOB char. */ int grecs_bind__amount_of_matched_text = (int) (grecs_bind__cp - (grecs_bind_text_ptr)) - 1; /* Undo the effects of YY_DO_BEFORE_ACTION. */ *grecs_bind__cp = (grecs_bind__hold_char); YY_RESTORE_YY_MORE_OFFSET if ( YY_CURRENT_BUFFER_LVALUE->grecs_bind__buffer_status == YY_BUFFER_NEW ) { /* We're scanning a new file or input source. It's * possible that this happened because the user * just pointed grecs_bind_in at a new source and called * grecs_bind_lex(). If so, then we have to assure * consistency between YY_CURRENT_BUFFER and our * globals. Here is the right place to do so, because * this is the first action (other than possibly a * back-up) that will match for the new input source. */ (grecs_bind__n_chars) = YY_CURRENT_BUFFER_LVALUE->grecs_bind__n_chars; YY_CURRENT_BUFFER_LVALUE->grecs_bind__input_file = grecs_bind_in; YY_CURRENT_BUFFER_LVALUE->grecs_bind__buffer_status = YY_BUFFER_NORMAL; } /* Note that here we test for grecs_bind__c_buf_p "<=" to the position * of the first EOB in the buffer, since grecs_bind__c_buf_p will * already have been incremented past the NUL character * (since all states make transitions on EOB to the * end-of-buffer state). Contrast this with the test * in input(). */ if ( (grecs_bind__c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->grecs_bind__ch_buf[(grecs_bind__n_chars)] ) { /* This was really a NUL. */ grecs_bind__state_type grecs_bind__next_state; (grecs_bind__c_buf_p) = (grecs_bind_text_ptr) + grecs_bind__amount_of_matched_text; grecs_bind__current_state = grecs_bind__get_previous_state( ); /* Okay, we're now positioned to make the NUL * transition. We couldn't have * grecs_bind__get_previous_state() go ahead and do it * for us because it doesn't know how to deal * with the possibility of jamming (and we don't * want to build jamming into it because then it * will run more slowly). */ grecs_bind__next_state = grecs_bind__try_NUL_trans( grecs_bind__current_state ); grecs_bind__bp = (grecs_bind_text_ptr) + YY_MORE_ADJ; if ( grecs_bind__next_state ) { /* Consume the NUL. */ grecs_bind__cp = ++(grecs_bind__c_buf_p); grecs_bind__current_state = grecs_bind__next_state; goto grecs_bind__match; } else { /* %% [14.0] code to do back-up for compressed tables and set up grecs_bind__cp goes here */ grecs_bind__cp = (grecs_bind__c_buf_p); goto grecs_bind__find_action; } } else switch ( grecs_bind__get_next_buffer( ) ) { case EOB_ACT_END_OF_FILE: { (grecs_bind__did_buffer_switch_on_eof) = 0; if ( grecs_bind_wrap( ) ) { /* Note: because we've taken care in * grecs_bind__get_next_buffer() to have set up * grecs_bind_text, we can now set up * grecs_bind__c_buf_p so that if some total * hoser (like flex itself) wants to * call the scanner after we return the * YY_NULL, it'll still work - another * YY_NULL will get returned. */ (grecs_bind__c_buf_p) = (grecs_bind_text_ptr) + YY_MORE_ADJ; grecs_bind__act = YY_STATE_EOF(YY_START); goto do_action; } else { if ( ! (grecs_bind__did_buffer_switch_on_eof) ) YY_NEW_FILE; } break; } case EOB_ACT_CONTINUE_SCAN: (grecs_bind__c_buf_p) = (grecs_bind_text_ptr) + grecs_bind__amount_of_matched_text; grecs_bind__current_state = grecs_bind__get_previous_state( ); grecs_bind__cp = (grecs_bind__c_buf_p); grecs_bind__bp = (grecs_bind_text_ptr) + YY_MORE_ADJ; goto grecs_bind__match; case EOB_ACT_LAST_MATCH: (grecs_bind__c_buf_p) = &YY_CURRENT_BUFFER_LVALUE->grecs_bind__ch_buf[(grecs_bind__n_chars)]; grecs_bind__current_state = grecs_bind__get_previous_state( ); grecs_bind__cp = (grecs_bind__c_buf_p); grecs_bind__bp = (grecs_bind_text_ptr) + YY_MORE_ADJ; goto grecs_bind__find_action; } break; } default: YY_FATAL_ERROR( "fatal flex scanner internal error--no action found" ); } /* end of action switch */ } /* end of scanning one token */ } /* end of grecs_bind_lex */ /* %ok-for-header */ /* %if-c++-only */ /* %not-for-header */ /* %ok-for-header */ /* %endif */ /* grecs_bind__get_next_buffer - try to read in a new buffer * * Returns a code representing an action: * EOB_ACT_LAST_MATCH - * EOB_ACT_CONTINUE_SCAN - continue scanning from current position * EOB_ACT_END_OF_FILE - end of file */ /* %if-c-only */ static int grecs_bind__get_next_buffer (void) /* %endif */ /* %if-c++-only */ /* %endif */ { register char *dest = YY_CURRENT_BUFFER_LVALUE->grecs_bind__ch_buf; register char *source = (grecs_bind_text_ptr); register int number_to_move, i; int ret_val; if ( (grecs_bind__c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->grecs_bind__ch_buf[(grecs_bind__n_chars) + 1] ) YY_FATAL_ERROR( "fatal flex scanner internal error--end of buffer missed" ); if ( YY_CURRENT_BUFFER_LVALUE->grecs_bind__fill_buffer == 0 ) { /* Don't try to fill the buffer, so this is an EOF. */ if ( (grecs_bind__c_buf_p) - (grecs_bind_text_ptr) - YY_MORE_ADJ == 1 ) { /* We matched a single character, the EOB, so * treat this as a final EOF. */ return EOB_ACT_END_OF_FILE; } else { /* We matched some text prior to the EOB, first * process it. */ return EOB_ACT_LAST_MATCH; } } /* Try to read more data. */ /* First move last chars to start of buffer. */ number_to_move = (int) ((grecs_bind__c_buf_p) - (grecs_bind_text_ptr)) - 1; for ( i = 0; i < number_to_move; ++i ) *(dest++) = *(source++); if ( YY_CURRENT_BUFFER_LVALUE->grecs_bind__buffer_status == YY_BUFFER_EOF_PENDING ) /* don't do the read, it's not guaranteed to return an EOF, * just force an EOF */ YY_CURRENT_BUFFER_LVALUE->grecs_bind__n_chars = (grecs_bind__n_chars) = 0; else { grecs_bind__size_t num_to_read = YY_CURRENT_BUFFER_LVALUE->grecs_bind__buf_size - number_to_move - 1; while ( num_to_read <= 0 ) { /* Not enough room in the buffer - grow it. */ /* just a shorter name for the current buffer */ YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE; int grecs_bind__c_buf_p_offset = (int) ((grecs_bind__c_buf_p) - b->grecs_bind__ch_buf); if ( b->grecs_bind__is_our_buffer ) { grecs_bind__size_t new_size = b->grecs_bind__buf_size * 2; if ( new_size <= 0 ) b->grecs_bind__buf_size += b->grecs_bind__buf_size / 8; else b->grecs_bind__buf_size *= 2; b->grecs_bind__ch_buf = (char *) /* Include room in for 2 EOB chars. */ grecs_bind_realloc((void *) b->grecs_bind__ch_buf,b->grecs_bind__buf_size + 2 ); } else /* Can't grow it, we don't own it. */ b->grecs_bind__ch_buf = 0; if ( ! b->grecs_bind__ch_buf ) YY_FATAL_ERROR( "fatal error - scanner input buffer overflow" ); (grecs_bind__c_buf_p) = &b->grecs_bind__ch_buf[grecs_bind__c_buf_p_offset]; num_to_read = YY_CURRENT_BUFFER_LVALUE->grecs_bind__buf_size - number_to_move - 1; } if ( num_to_read > YY_READ_BUF_SIZE ) num_to_read = YY_READ_BUF_SIZE; /* Read in more data. */ YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->grecs_bind__ch_buf[number_to_move]), (grecs_bind__n_chars), num_to_read ); YY_CURRENT_BUFFER_LVALUE->grecs_bind__n_chars = (grecs_bind__n_chars); } if ( (grecs_bind__n_chars) == 0 ) { if ( number_to_move == YY_MORE_ADJ ) { ret_val = EOB_ACT_END_OF_FILE; grecs_bind_restart(grecs_bind_in ); } else { ret_val = EOB_ACT_LAST_MATCH; YY_CURRENT_BUFFER_LVALUE->grecs_bind__buffer_status = YY_BUFFER_EOF_PENDING; } } else ret_val = EOB_ACT_CONTINUE_SCAN; if ((grecs_bind__size_t) ((grecs_bind__n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->grecs_bind__buf_size) { /* Extend the array by 50%, plus the number we really need. */ grecs_bind__size_t new_size = (grecs_bind__n_chars) + number_to_move + ((grecs_bind__n_chars) >> 1); YY_CURRENT_BUFFER_LVALUE->grecs_bind__ch_buf = (char *) grecs_bind_realloc((void *) YY_CURRENT_BUFFER_LVALUE->grecs_bind__ch_buf,new_size ); if ( ! YY_CURRENT_BUFFER_LVALUE->grecs_bind__ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in grecs_bind__get_next_buffer()" ); } (grecs_bind__n_chars) += number_to_move; YY_CURRENT_BUFFER_LVALUE->grecs_bind__ch_buf[(grecs_bind__n_chars)] = YY_END_OF_BUFFER_CHAR; YY_CURRENT_BUFFER_LVALUE->grecs_bind__ch_buf[(grecs_bind__n_chars) + 1] = YY_END_OF_BUFFER_CHAR; (grecs_bind_text_ptr) = &YY_CURRENT_BUFFER_LVALUE->grecs_bind__ch_buf[0]; return ret_val; } /* grecs_bind__get_previous_state - get the state just before the EOB char was reached */ /* %if-c-only */ /* %not-for-header */ static grecs_bind__state_type grecs_bind__get_previous_state (void) /* %endif */ /* %if-c++-only */ /* %endif */ { register grecs_bind__state_type grecs_bind__current_state; register char *grecs_bind__cp; /* %% [15.0] code to get the start state into grecs_bind__current_state goes here */ grecs_bind__current_state = (grecs_bind__start); grecs_bind__current_state += YY_AT_BOL(); for ( grecs_bind__cp = (grecs_bind_text_ptr) + YY_MORE_ADJ; grecs_bind__cp < (grecs_bind__c_buf_p); ++grecs_bind__cp ) { /* %% [16.0] code to find the next state goes here */ register YY_CHAR grecs_bind__c = (*grecs_bind__cp ? grecs_bind__ec[YY_SC_TO_UI(*grecs_bind__cp)] : 1); if ( grecs_bind__accept[grecs_bind__current_state] ) { (grecs_bind__last_accepting_state) = grecs_bind__current_state; (grecs_bind__last_accepting_cpos) = grecs_bind__cp; } while ( grecs_bind__chk[grecs_bind__base[grecs_bind__current_state] + grecs_bind__c] != grecs_bind__current_state ) { grecs_bind__current_state = (int) grecs_bind__def[grecs_bind__current_state]; if ( grecs_bind__current_state >= 94 ) grecs_bind__c = grecs_bind__meta[(unsigned int) grecs_bind__c]; } grecs_bind__current_state = grecs_bind__nxt[grecs_bind__base[grecs_bind__current_state] + (unsigned int) grecs_bind__c]; } return grecs_bind__current_state; } /* grecs_bind__try_NUL_trans - try to make a transition on the NUL character * * synopsis * next_state = grecs_bind__try_NUL_trans( current_state ); */ /* %if-c-only */ static grecs_bind__state_type grecs_bind__try_NUL_trans (grecs_bind__state_type grecs_bind__current_state ) /* %endif */ /* %if-c++-only */ /* %endif */ { register int grecs_bind__is_jam; /* %% [17.0] code to find the next state, and perhaps do backing up, goes here */ register char *grecs_bind__cp = (grecs_bind__c_buf_p); register YY_CHAR grecs_bind__c = 1; if ( grecs_bind__accept[grecs_bind__current_state] ) { (grecs_bind__last_accepting_state) = grecs_bind__current_state; (grecs_bind__last_accepting_cpos) = grecs_bind__cp; } while ( grecs_bind__chk[grecs_bind__base[grecs_bind__current_state] + grecs_bind__c] != grecs_bind__current_state ) { grecs_bind__current_state = (int) grecs_bind__def[grecs_bind__current_state]; if ( grecs_bind__current_state >= 94 ) grecs_bind__c = grecs_bind__meta[(unsigned int) grecs_bind__c]; } grecs_bind__current_state = grecs_bind__nxt[grecs_bind__base[grecs_bind__current_state] + (unsigned int) grecs_bind__c]; grecs_bind__is_jam = (grecs_bind__current_state == 93); return grecs_bind__is_jam ? 0 : grecs_bind__current_state; } /* %if-c-only */ /* %endif */ /* %if-c-only */ #ifndef YY_NO_INPUT #ifdef __cplusplus static int grecs_bind_input (void) #else static int input (void) #endif /* %endif */ /* %if-c++-only */ /* %endif */ { int c; *(grecs_bind__c_buf_p) = (grecs_bind__hold_char); if ( *(grecs_bind__c_buf_p) == YY_END_OF_BUFFER_CHAR ) { /* grecs_bind__c_buf_p now points to the character we want to return. * If this occurs *before* the EOB characters, then it's a * valid NUL; if not, then we've hit the end of the buffer. */ if ( (grecs_bind__c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->grecs_bind__ch_buf[(grecs_bind__n_chars)] ) /* This was really a NUL. */ *(grecs_bind__c_buf_p) = '\0'; else { /* need more input */ grecs_bind__size_t offset = (grecs_bind__c_buf_p) - (grecs_bind_text_ptr); ++(grecs_bind__c_buf_p); switch ( grecs_bind__get_next_buffer( ) ) { case EOB_ACT_LAST_MATCH: /* This happens because grecs_bind__g_n_b() * sees that we've accumulated a * token and flags that we need to * try matching the token before * proceeding. But for input(), * there's no matching to consider. * So convert the EOB_ACT_LAST_MATCH * to EOB_ACT_END_OF_FILE. */ /* Reset buffer status. */ grecs_bind_restart(grecs_bind_in ); /*FALLTHROUGH*/ case EOB_ACT_END_OF_FILE: { if ( grecs_bind_wrap( ) ) return EOF; if ( ! (grecs_bind__did_buffer_switch_on_eof) ) YY_NEW_FILE; #ifdef __cplusplus return grecs_bind_input(); #else return input(); #endif } case EOB_ACT_CONTINUE_SCAN: (grecs_bind__c_buf_p) = (grecs_bind_text_ptr) + offset; break; } } } c = *(unsigned char *) (grecs_bind__c_buf_p); /* cast for 8-bit char's */ *(grecs_bind__c_buf_p) = '\0'; /* preserve grecs_bind_text */ (grecs_bind__hold_char) = *++(grecs_bind__c_buf_p); /* %% [19.0] update BOL and grecs_bind_lineno */ YY_CURRENT_BUFFER_LVALUE->grecs_bind__at_bol = (c == '\n'); return c; } /* %if-c-only */ #endif /* ifndef YY_NO_INPUT */ /* %endif */ /** Immediately switch to a different input stream. * @param input_file A readable stream. * * @note This function does not reset the start condition to @c INITIAL . */ /* %if-c-only */ void grecs_bind_restart (FILE * input_file ) /* %endif */ /* %if-c++-only */ /* %endif */ { if ( ! YY_CURRENT_BUFFER ){ grecs_bind_ensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = grecs_bind__create_buffer(grecs_bind_in,YY_BUF_SIZE ); } grecs_bind__init_buffer(YY_CURRENT_BUFFER,input_file ); grecs_bind__load_buffer_state( ); } /** Switch to a different input buffer. * @param new_buffer The new input buffer. * */ /* %if-c-only */ void grecs_bind__switch_to_buffer (YY_BUFFER_STATE new_buffer ) /* %endif */ /* %if-c++-only */ /* %endif */ { /* TODO. We should be able to replace this entire function body * with * grecs_bind_pop_buffer_state(); * grecs_bind_push_buffer_state(new_buffer); */ grecs_bind_ensure_buffer_stack (); if ( YY_CURRENT_BUFFER == new_buffer ) return; if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(grecs_bind__c_buf_p) = (grecs_bind__hold_char); YY_CURRENT_BUFFER_LVALUE->grecs_bind__buf_pos = (grecs_bind__c_buf_p); YY_CURRENT_BUFFER_LVALUE->grecs_bind__n_chars = (grecs_bind__n_chars); } YY_CURRENT_BUFFER_LVALUE = new_buffer; grecs_bind__load_buffer_state( ); /* We don't actually know whether we did this switch during * EOF (grecs_bind_wrap()) processing, but the only time this flag * is looked at is after grecs_bind_wrap() is called, so it's safe * to go ahead and always set it. */ (grecs_bind__did_buffer_switch_on_eof) = 1; } /* %if-c-only */ static void grecs_bind__load_buffer_state (void) /* %endif */ /* %if-c++-only */ /* %endif */ { (grecs_bind__n_chars) = YY_CURRENT_BUFFER_LVALUE->grecs_bind__n_chars; (grecs_bind_text_ptr) = (grecs_bind__c_buf_p) = YY_CURRENT_BUFFER_LVALUE->grecs_bind__buf_pos; grecs_bind_in = YY_CURRENT_BUFFER_LVALUE->grecs_bind__input_file; (grecs_bind__hold_char) = *(grecs_bind__c_buf_p); } /** Allocate and initialize an input buffer state. * @param file A readable stream. * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. * * @return the allocated buffer state. */ /* %if-c-only */ YY_BUFFER_STATE grecs_bind__create_buffer (FILE * file, int size ) /* %endif */ /* %if-c++-only */ /* %endif */ { YY_BUFFER_STATE b; b = (YY_BUFFER_STATE) grecs_bind_alloc(sizeof( struct grecs_bind__buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in grecs_bind__create_buffer()" ); b->grecs_bind__buf_size = size; /* grecs_bind__ch_buf has to be 2 characters longer than the size given because * we need to put in 2 end-of-buffer characters. */ b->grecs_bind__ch_buf = (char *) grecs_bind_alloc(b->grecs_bind__buf_size + 2 ); if ( ! b->grecs_bind__ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in grecs_bind__create_buffer()" ); b->grecs_bind__is_our_buffer = 1; grecs_bind__init_buffer(b,file ); return b; } /** Destroy the buffer. * @param b a buffer created with grecs_bind__create_buffer() * */ /* %if-c-only */ void grecs_bind__delete_buffer (YY_BUFFER_STATE b ) /* %endif */ /* %if-c++-only */ /* %endif */ { if ( ! b ) return; if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; if ( b->grecs_bind__is_our_buffer ) grecs_bind_free((void *) b->grecs_bind__ch_buf ); grecs_bind_free((void *) b ); } /* Initializes or reinitializes a buffer. * This function is sometimes called more than once on the same buffer, * such as during a grecs_bind_restart() or at EOF. */ /* %if-c-only */ static void grecs_bind__init_buffer (YY_BUFFER_STATE b, FILE * file ) /* %endif */ /* %if-c++-only */ /* %endif */ { int oerrno = errno; grecs_bind__flush_buffer(b ); b->grecs_bind__input_file = file; b->grecs_bind__fill_buffer = 1; /* If b is the current buffer, then grecs_bind__init_buffer was _probably_ * called from grecs_bind_restart() or through grecs_bind__get_next_buffer. * In that case, we don't want to reset the lineno or column. */ if (b != YY_CURRENT_BUFFER){ b->grecs_bind__bs_lineno = 1; b->grecs_bind__bs_column = 0; } /* %if-c-only */ b->grecs_bind__is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; /* %endif */ /* %if-c++-only */ /* %endif */ errno = oerrno; } /** Discard all buffered characters. On the next scan, YY_INPUT will be called. * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. * */ /* %if-c-only */ void grecs_bind__flush_buffer (YY_BUFFER_STATE b ) /* %endif */ /* %if-c++-only */ /* %endif */ { if ( ! b ) return; b->grecs_bind__n_chars = 0; /* We always need two end-of-buffer characters. The first causes * a transition to the end-of-buffer state. The second causes * a jam in that state. */ b->grecs_bind__ch_buf[0] = YY_END_OF_BUFFER_CHAR; b->grecs_bind__ch_buf[1] = YY_END_OF_BUFFER_CHAR; b->grecs_bind__buf_pos = &b->grecs_bind__ch_buf[0]; b->grecs_bind__at_bol = 1; b->grecs_bind__buffer_status = YY_BUFFER_NEW; if ( b == YY_CURRENT_BUFFER ) grecs_bind__load_buffer_state( ); } /* %if-c-or-c++ */ /** Pushes the new state onto the stack. The new state becomes * the current state. This function will allocate the stack * if necessary. * @param new_buffer The new state. * */ /* %if-c-only */ void grecs_bind_push_buffer_state (YY_BUFFER_STATE new_buffer ) /* %endif */ /* %if-c++-only */ /* %endif */ { if (new_buffer == NULL) return; grecs_bind_ensure_buffer_stack(); /* This block is copied from grecs_bind__switch_to_buffer. */ if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(grecs_bind__c_buf_p) = (grecs_bind__hold_char); YY_CURRENT_BUFFER_LVALUE->grecs_bind__buf_pos = (grecs_bind__c_buf_p); YY_CURRENT_BUFFER_LVALUE->grecs_bind__n_chars = (grecs_bind__n_chars); } /* Only push if top exists. Otherwise, replace top. */ if (YY_CURRENT_BUFFER) (grecs_bind__buffer_stack_top)++; YY_CURRENT_BUFFER_LVALUE = new_buffer; /* copied from grecs_bind__switch_to_buffer. */ grecs_bind__load_buffer_state( ); (grecs_bind__did_buffer_switch_on_eof) = 1; } /* %endif */ /* %if-c-or-c++ */ /** Removes and deletes the top of the stack, if present. * The next element becomes the new top. * */ /* %if-c-only */ void grecs_bind_pop_buffer_state (void) /* %endif */ /* %if-c++-only */ /* %endif */ { if (!YY_CURRENT_BUFFER) return; grecs_bind__delete_buffer(YY_CURRENT_BUFFER ); YY_CURRENT_BUFFER_LVALUE = NULL; if ((grecs_bind__buffer_stack_top) > 0) --(grecs_bind__buffer_stack_top); if (YY_CURRENT_BUFFER) { grecs_bind__load_buffer_state( ); (grecs_bind__did_buffer_switch_on_eof) = 1; } } /* %endif */ /* %if-c-or-c++ */ /* Allocates the stack if it does not exist. * Guarantees space for at least one push. */ /* %if-c-only */ static void grecs_bind_ensure_buffer_stack (void) /* %endif */ /* %if-c++-only */ /* %endif */ { grecs_bind__size_t num_to_alloc; if (!(grecs_bind__buffer_stack)) { /* First allocation is just for 2 elements, since we don't know if this * scanner will even need a stack. We use 2 instead of 1 to avoid an * immediate realloc on the next call. */ num_to_alloc = 1; (grecs_bind__buffer_stack) = (struct grecs_bind__buffer_state**)grecs_bind_alloc (num_to_alloc * sizeof(struct grecs_bind__buffer_state*) ); if ( ! (grecs_bind__buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in grecs_bind_ensure_buffer_stack()" ); memset((grecs_bind__buffer_stack), 0, num_to_alloc * sizeof(struct grecs_bind__buffer_state*)); (grecs_bind__buffer_stack_max) = num_to_alloc; (grecs_bind__buffer_stack_top) = 0; return; } if ((grecs_bind__buffer_stack_top) >= ((grecs_bind__buffer_stack_max)) - 1){ /* Increase the buffer to prepare for a possible push. */ int grow_size = 8 /* arbitrary grow size */; num_to_alloc = (grecs_bind__buffer_stack_max) + grow_size; (grecs_bind__buffer_stack) = (struct grecs_bind__buffer_state**)grecs_bind_realloc ((grecs_bind__buffer_stack), num_to_alloc * sizeof(struct grecs_bind__buffer_state*) ); if ( ! (grecs_bind__buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in grecs_bind_ensure_buffer_stack()" ); /* zero only the new slots.*/ memset((grecs_bind__buffer_stack) + (grecs_bind__buffer_stack_max), 0, grow_size * sizeof(struct grecs_bind__buffer_state*)); (grecs_bind__buffer_stack_max) = num_to_alloc; } } /* %endif */ /* %if-c-only */ /** Setup the input buffer state to scan directly from a user-specified character buffer. * @param base the character buffer * @param size the size in bytes of the character buffer * * @return the newly allocated buffer state object. */ YY_BUFFER_STATE grecs_bind__scan_buffer (char * base, grecs_bind__size_t size ) { YY_BUFFER_STATE b; if ( size < 2 || base[size-2] != YY_END_OF_BUFFER_CHAR || base[size-1] != YY_END_OF_BUFFER_CHAR ) /* They forgot to leave room for the EOB's. */ return 0; b = (YY_BUFFER_STATE) grecs_bind_alloc(sizeof( struct grecs_bind__buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in grecs_bind__scan_buffer()" ); b->grecs_bind__buf_size = size - 2; /* "- 2" to take care of EOB's */ b->grecs_bind__buf_pos = b->grecs_bind__ch_buf = base; b->grecs_bind__is_our_buffer = 0; b->grecs_bind__input_file = 0; b->grecs_bind__n_chars = b->grecs_bind__buf_size; b->grecs_bind__is_interactive = 0; b->grecs_bind__at_bol = 1; b->grecs_bind__fill_buffer = 0; b->grecs_bind__buffer_status = YY_BUFFER_NEW; grecs_bind__switch_to_buffer(b ); return b; } /* %endif */ /* %if-c-only */ /** Setup the input buffer state to scan a string. The next call to grecs_bind_lex() will * scan from a @e copy of @a str. * @param grecs_bind_str a NUL-terminated string to scan * * @return the newly allocated buffer state object. * @note If you want to scan bytes that may contain NUL values, then use * grecs_bind__scan_bytes() instead. */ YY_BUFFER_STATE grecs_bind__scan_string (grecs_bind_const char * grecs_bind_str ) { return grecs_bind__scan_bytes(grecs_bind_str,strlen(grecs_bind_str) ); } /* %endif */ /* %if-c-only */ /** Setup the input buffer state to scan the given bytes. The next call to grecs_bind_lex() will * scan from a @e copy of @a bytes. * @param grecs_bind_bytes the byte buffer to scan * @param _grecs_bind_bytes_len the number of bytes in the buffer pointed to by @a bytes. * * @return the newly allocated buffer state object. */ YY_BUFFER_STATE grecs_bind__scan_bytes (grecs_bind_const char * grecs_bind_bytes, grecs_bind__size_t _grecs_bind_bytes_len ) { YY_BUFFER_STATE b; char *buf; grecs_bind__size_t n; int i; /* Get memory for full buffer, including space for trailing EOB's. */ n = _grecs_bind_bytes_len + 2; buf = (char *) grecs_bind_alloc(n ); if ( ! buf ) YY_FATAL_ERROR( "out of dynamic memory in grecs_bind__scan_bytes()" ); for ( i = 0; i < _grecs_bind_bytes_len; ++i ) buf[i] = grecs_bind_bytes[i]; buf[_grecs_bind_bytes_len] = buf[_grecs_bind_bytes_len+1] = YY_END_OF_BUFFER_CHAR; b = grecs_bind__scan_buffer(buf,n ); if ( ! b ) YY_FATAL_ERROR( "bad buffer in grecs_bind__scan_bytes()" ); /* It's okay to grow etc. this buffer, and we should throw it * away when we're done. */ b->grecs_bind__is_our_buffer = 1; return b; } /* %endif */ #ifndef YY_EXIT_FAILURE #define YY_EXIT_FAILURE 2 #endif /* %if-c-only */ static void grecs_bind__fatal_error (grecs_bind_const char* msg ) { (void) fprintf( stderr, "%s\n", msg ); exit( YY_EXIT_FAILURE ); } /* %endif */ /* %if-c++-only */ /* %endif */ /* Redefine grecs_bind_less() so it works in section 3 code. */ #undef grecs_bind_less #define grecs_bind_less(n) \ do \ { \ /* Undo effects of setting up grecs_bind_text. */ \ int grecs_bind_less_macro_arg = (n); \ YY_LESS_LINENO(grecs_bind_less_macro_arg);\ grecs_bind_text[grecs_bind_leng] = (grecs_bind__hold_char); \ (grecs_bind__c_buf_p) = grecs_bind_text + grecs_bind_less_macro_arg; \ (grecs_bind__hold_char) = *(grecs_bind__c_buf_p); \ *(grecs_bind__c_buf_p) = '\0'; \ grecs_bind_leng = grecs_bind_less_macro_arg; \ } \ while ( 0 ) /* Accessor methods (get/set functions) to struct members. */ /* %if-c-only */ /* %if-reentrant */ /* %endif */ /** Get the current line number. * */ int grecs_bind_get_lineno (void) { return grecs_bind_lineno; } /** Get the input stream. * */ FILE *grecs_bind_get_in (void) { return grecs_bind_in; } /** Get the output stream. * */ FILE *grecs_bind_get_out (void) { return grecs_bind_out; } /** Get the length of the current token. * */ grecs_bind__size_t grecs_bind_get_leng (void) { return grecs_bind_leng; } /** Get the current token. * */ char *grecs_bind_get_text (void) { return grecs_bind_text; } /* %if-reentrant */ /* %endif */ /** Set the current line number. * @param line_number * */ void grecs_bind_set_lineno (int line_number ) { grecs_bind_lineno = line_number; } /** Set the input stream. This does not discard the current * input buffer. * @param in_str A readable stream. * * @see grecs_bind__switch_to_buffer */ void grecs_bind_set_in (FILE * in_str ) { grecs_bind_in = in_str ; } void grecs_bind_set_out (FILE * out_str ) { grecs_bind_out = out_str ; } int grecs_bind_get_debug (void) { return grecs_bind__flex_debug; } void grecs_bind_set_debug (int bdebug ) { grecs_bind__flex_debug = bdebug ; } /* %endif */ /* %if-reentrant */ /* %if-bison-bridge */ /* %endif */ /* %endif if-c-only */ /* %if-c-only */ static int grecs_bind__init_globals (void) { /* Initialization is the same as for the non-reentrant scanner. * This function is called from grecs_bind_lex_destroy(), so don't allocate here. */ (grecs_bind__buffer_stack) = 0; (grecs_bind__buffer_stack_top) = 0; (grecs_bind__buffer_stack_max) = 0; (grecs_bind__c_buf_p) = (char *) 0; (grecs_bind__init) = 0; (grecs_bind__start) = 0; /* Defined in main.c */ #ifdef YY_STDINIT grecs_bind_in = stdin; grecs_bind_out = stdout; #else grecs_bind_in = (FILE *) 0; grecs_bind_out = (FILE *) 0; #endif /* For future reference: Set errno on error, since we are called by * grecs_bind_lex_init() */ return 0; } /* %endif */ /* %if-c-only SNIP! this currently causes conflicts with the c++ scanner */ /* grecs_bind_lex_destroy is for both reentrant and non-reentrant scanners. */ int grecs_bind_lex_destroy (void) { /* Pop the buffer stack, destroying each element. */ while(YY_CURRENT_BUFFER){ grecs_bind__delete_buffer(YY_CURRENT_BUFFER ); YY_CURRENT_BUFFER_LVALUE = NULL; grecs_bind_pop_buffer_state(); } /* Destroy the stack itself. */ grecs_bind_free((grecs_bind__buffer_stack) ); (grecs_bind__buffer_stack) = NULL; /* Reset the globals. This is important in a non-reentrant scanner so the next time * grecs_bind_lex() is called, initialization will occur. */ grecs_bind__init_globals( ); /* %if-reentrant */ /* %endif */ return 0; } /* %endif */ /* * Internal utility routines. */ #ifndef grecs_bind_text_ptr static void grecs_bind__flex_strncpy (char* s1, grecs_bind_const char * s2, int n ) { register int i; for ( i = 0; i < n; ++i ) s1[i] = s2[i]; } #endif #ifdef YY_NEED_STRLEN static int grecs_bind__flex_strlen (grecs_bind_const char * s ) { register int n; for ( n = 0; s[n]; ++n ) ; return n; } #endif void *grecs_bind_alloc (grecs_bind__size_t size ) { return (void *) malloc( size ); } void *grecs_bind_realloc (void * ptr, grecs_bind__size_t size ) { /* The cast to (char *) in the following accommodates both * implementations that use char* generic pointers, and those * that use void* generic pointers. It works with the latter * because both ANSI C and C++ allow castless assignment from * any pointer type to void*, and deal with argument conversions * as though doing an assignment. */ return (void *) realloc( (char *) ptr, size ); } void grecs_bind_free (void * ptr ) { free( (char *) ptr ); /* see grecs_bind_realloc() for (char *) cast */ } /* %if-tables-serialization definitions */ /* %define-grecs_bind_tables The name for this specific scanner's tables. */ #define YYTABLES_NAME "grecs_bind_tables" /* %endif */ /* %ok-for-header */ #line 121 "bind-lex.l" struct bind_input_context { ino_t i_node; dev_t i_dev; struct grecs_locus_point point; grecs_locus_t locus; /* Current input location */ YY_BUFFER_STATE state; FILE *input; }; static struct grecs_list *input_stack; static ino_t i_node; static dev_t i_dev; static void free_context(void *ptr) { free(ptr); } static int cmp_context(const void *a, const void *b) { struct bind_input_context const *ac = a; struct bind_input_context const *bc = b; return !(ac->i_node == bc->i_node && ac->i_dev == bc->i_dev); } static int _push_context(const char *name, ino_t i_node, dev_t i_dev, grecs_locus_t *loc) { struct bind_input_context ctx, *pctx; if (!input_stack) { input_stack = grecs_list_create(); input_stack->free_entry = free_context; input_stack->cmp = cmp_context; } else { ctx.i_dev = i_dev; ctx.i_node = i_node; pctx = grecs_list_locate(input_stack, &ctx); if (pctx) { grecs_error(&grecs_bind_lloc, 0, _("%s has already been included"), name); grecs_error(&pctx->locus, 0, _("this is where the previous inclusion occurred")); return 1; } pctx = grecs_malloc(sizeof(*pctx)); pctx->i_node = i_node; pctx->i_dev = i_dev; if (loc) pctx->locus = *loc; else memset(&pctx->locus, 0, sizeof(pctx->locus)); /* FIXME */ pctx->point = grecs_current_locus_point; pctx->state = YY_CURRENT_BUFFER; pctx->input = grecs_bind_in; grecs_list_push(input_stack, pctx); } return 0; } static int _pop_context() { struct bind_input_context *pctx; if (!grecs_bind_in) return 1; if (grecs_preprocessor) pclose(grecs_bind_in); else fclose(grecs_bind_in); pctx = grecs_list_pop(input_stack); if (!pctx) { grecs_bind_in = NULL; return 1; } i_node = pctx->i_node; i_dev = pctx->i_dev; grecs_current_locus_point = pctx->point; grecs_bind_in = pctx->input; grecs_bind__delete_buffer(YY_CURRENT_BUFFER); grecs_bind__switch_to_buffer(pctx->state); grecs_free(pctx); return 0; } int grecs_bind_wrap() { return _pop_context(); } int grecs_bind_new_source(const char *name, grecs_locus_t *loc) { struct stat st; FILE *fp; if (access(name, F_OK)) { int ec = errno; char *tmp = grecs_find_include_file(name, 0); if (!tmp) { grecs_error(loc, ec, _("cannot open `%s'"), name); return 1; } name = grecs_install_text(tmp); free(tmp); } fp = fopen(name, "r"); if (!fp) { grecs_error(loc, errno, _("cannot open `%s'"), name); return 1; } if (fstat(fileno(fp), &st)) { grecs_error(loc, errno, _("can't state %s"), name); fclose(fp); return 1; } if (grecs_preprocessor) { char *cmd = NULL; size_t size = 0; fclose(fp); if (grecs_asprintf(&cmd, &size, "%s \"%s\"", grecs_preprocessor, name)) grecs_alloc_die(); fp = popen(cmd, "r"); if (!fp) { grecs_error(loc, errno, _("cannot open `%s'"), cmd); grecs_free(cmd); return 1; } grecs_free(cmd); } if (_push_context(name, st.st_ino, st.st_dev, loc)) { return 1; } i_node = st.st_ino; i_dev = st.st_dev; grecs_bind_in = fp; grecs_bind__switch_to_buffer(grecs_bind__create_buffer(grecs_bind_in,YY_BUF_SIZE)); grecs_current_locus_point.file = grecs_install_text(name); grecs_current_locus_point.line = 1; grecs_current_locus_point.col = 0; return 0; } void grecs_bind_close_sources() { while (!_pop_context()) ; grecs_list_free(input_stack); input_stack = NULL; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/src/mem.c������������������������������������������������������������������������0000644�0001750�0001750�00000004007�13244106110�015773� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* grecs - Gray's Extensible Configuration System Copyright (C) 2007-2016 Sergey Poznyakoff Grecs 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. Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include <grecs.h> #include <stdlib.h> #include <string.h> #include <errno.h> static void * def_malloc_fun(size_t size) { return malloc(size); } static void * def_realloc_fun(void *ptr, size_t size) { return realloc(ptr, size); } static void def_free_fun(void *ptr) { free(ptr); } void *(*grecs_malloc_fun)(size_t size) = def_malloc_fun; void *(*grecs_realloc_fun)(void *ptr, size_t size) = def_realloc_fun; void (*grecs_alloc_die_fun)(void); void (*grecs_free_fun)(void *) = def_free_fun; void grecs_free(void *ptr) { grecs_free_fun(ptr); } void * grecs_malloc(size_t size) { void *ptr = grecs_malloc_fun(size); if (!ptr) grecs_alloc_die(); return ptr; } void * grecs_zalloc(size_t size) { void *ptr = grecs_malloc(size); memset(ptr, 0, size); return ptr; } void * grecs_calloc(size_t nmemb, size_t size) { return grecs_zalloc(nmemb * size); } void * grecs_realloc(void *ptr, size_t size) { void *newptr = grecs_realloc_fun(ptr, size); if (!newptr) grecs_alloc_die(); return newptr; } char * grecs_strdup(const char *str) { char *newstr = grecs_malloc(strlen(str) + 1); return strcpy(newstr, str); } void grecs_alloc_die(void) { if (grecs_alloc_die_fun) grecs_alloc_die_fun(); grecs_error(NULL, ENOMEM, "fatal error"); exit(70); /* EX_SOFTWARE */ } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/src/assert.c���������������������������������������������������������������������0000644�0001750�0001750�00000003260�13511403723�016525� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* grecs - Gray's Extensible Configuration System Copyright (C) 2007-2019 Sergey Poznyakoff Grecs 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. Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include <errno.h> #include <grecs.h> int grecs_assert_value_type(const grecs_value_t *value, int type, grecs_locus_t *refloc) { if (GRECS_VALUE_EMPTY_P(value)) { grecs_error(refloc, 0, _("expected %s"), gettext(grecs_value_type_string(type))); return 1; } if (value->type != type) { grecs_error(&value->locus, 0, _("expected %s, but found %s"), gettext(grecs_value_type_string(type)), gettext(grecs_value_type_string(value->type))); return 1; } return 0; } int grecs_assert_scalar_stmt(grecs_locus_t *locus, enum grecs_callback_command cmd) { if (cmd != grecs_callback_set_value) { grecs_error(locus, 0, _("unexpected block statement")); return 1; } return 0; } int grecs_assert_node_value_type(enum grecs_callback_command cmd, grecs_node_t *node, int type) { return grecs_assert_scalar_stmt(&node->locus, cmd) || grecs_assert_value_type(node->v.value, type, &node->locus); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/src/join.c�����������������������������������������������������������������������0000644�0001750�0001750�00000003720�13244106110�016155� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* grecs - Gray's Extensible Configuration System Copyright (C) 2007-2016 Sergey Poznyakoff Grecs 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. Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include <stdlib.h> #include <errno.h> #include "grecs.h" static void reset_point(struct grecs_locus_point *point, struct grecs_symtab *st) { struct grecs_syment *ent, key; int install = 1; if (!point->file) return; key.name = (char*) point->file; ent = grecs_symtab_lookup_or_install(st, &key, &install); if (!ent) grecs_alloc_die(); point->file = ent->name; } static enum grecs_tree_recurse_res reset_locus(enum grecs_tree_recurse_op op, struct grecs_node *node, void *data) { struct grecs_symtab *st = data; switch (op) { case grecs_tree_recurse_set: case grecs_tree_recurse_pre: reset_point(&node->locus.beg, st); reset_point(&node->locus.end, st); break; default: break; } return grecs_tree_recurse_ok; } int grecs_tree_join(struct grecs_node *dst, struct grecs_node *src) { struct grecs_node *p; if (dst->type != grecs_node_root || src->type != grecs_node_root) return 1; grecs_node_bind(dst, src->down, 1); for (p = src->down; p; p = p->next) p->up = dst; if (!src->v.texttab) { dst->v.texttab = src->v.texttab; } else { grecs_tree_recurse(src->down, reset_locus, dst->v.texttab); grecs_symtab_free(src->v.texttab); } src->v.texttab = NULL; src->down = NULL; return 0; } ������������������������������������������������direvent-5.2/grecs/src/text.c�����������������������������������������������������������������������0000644�0001750�0001750�00000002744�13244106110�016207� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* grecs - Gray's Extensible Configuration System Copyright (C) 2007-2016 Sergey Poznyakoff Grecs 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. Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include <grecs.h> #include <string.h> static struct grecs_symtab *text_table; /* Lookup a text. If it does not exist, create it. */ char * grecs_install_text(const char *str) { struct grecs_syment key; struct grecs_syment *ent; int install = 1; if (!text_table) { text_table = grecs_symtab_create_default( sizeof(struct grecs_syment)); if (!text_table) grecs_alloc_die(); } key.name = (char*) str; ent = grecs_symtab_lookup_or_install(text_table, &key, &install); if (!ent) grecs_alloc_die(); return ent->name; } void grecs_destroy_text() { grecs_symtab_free(text_table); } struct grecs_symtab * grecs_text_table() { struct grecs_symtab *tmp = text_table; text_table = NULL; return tmp; } ����������������������������direvent-5.2/grecs/src/ipstr.c����������������������������������������������������������������������0000644�0001750�0001750�00000004132�13244106110�016355� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* grecs - Gray's Extensible Configuration System Copyright (C) 2007-2016 Sergey Poznyakoff Grecs 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. Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include <string.h> #include <ctype.h> #include "grecs.h" int grecs_str_is_ipv4(const char *addr) { int dot_count = 0; int digit_count = 0; for (; *addr; addr++) { if (!isascii(*addr)) return 0; if (*addr == '.') { if (++dot_count > 3) break; digit_count = 0; } else if (!(isdigit(*addr) && ++digit_count <= 3)) return 0; } return (dot_count == 3); } int grecs_str_is_ipv6(const char *addr) { int col_count = 0; /* Number of colons */ int dcol = 0; /* Did we encounter a double-colon? */ int dig_count = 0; /* Number of digits in the last group */ for (; *addr; addr++) { if (!isascii(*addr)) return 0; else if (isxdigit(*addr)) { if (++dig_count > 4) return 0; } else if (*addr == ':') { if (col_count && dig_count == 0 && ++dcol > 1) return 0; if (++col_count > 7) return 0; dig_count = 0; } else return 0; } return (col_count == 7 || dcol); } int grecs_str_is_num(const char *s) { for (; *s; ++s) if (!isdigit(*s)) return 0; return 1; } int grecs_str_is_ipaddr(const char *addr) { if (strchr (addr, '.')) return grecs_str_is_ipv4(addr); else if (strchr (addr, ':')) return grecs_str_is_ipv6(addr); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/src/sort.c�����������������������������������������������������������������������0000644�0001750�0001750�00000006226�13244106110�016211� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* grecs - Gray's Extensible Configuration System Copyright (C) 2007-2016 Sergey Poznyakoff Grecs 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. Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include <stdlib.h> #include "grecs.h" struct node_list { struct grecs_node *head, *tail; }; static void node_list_init(struct node_list *list, struct grecs_node *node) { if (node) { list->head = node; while (node->next) node = node->next; list->tail = node; } else list->head = list->tail = NULL; } static void node_list_add(struct node_list *list, struct grecs_node *node) { node->next = NULL; node->prev = list->tail; if (list->tail) list->tail->next = node; else list->head = node; list->tail = node; } static void node_list_join(struct node_list *a, struct node_list *b) { if (!b->head) return; b->head->prev = a->tail; if (a->tail) a->tail->next = b->head; else a->head = b->head; a->tail = b->tail; } static void _qsort_nodelist(struct node_list *list, int (*compare)(struct grecs_node const *, struct grecs_node const *)) { struct grecs_node *cur, *middle; struct node_list high_list, low_list; int rc; if (!list->head) return; cur = list->head; do { cur = cur->next; if (!cur) return; } while ((rc = compare(list->head, cur)) == 0); /* Select the lower of the two as the middle value */ middle = (rc > 0) ? cur : list->head; /* Split into two sublists */ node_list_init(&low_list, NULL); node_list_init(&high_list, NULL); for (cur = list->head; cur; ) { struct grecs_node *next = cur->next; cur->next = NULL; if (compare(middle, cur) < 0) node_list_add(&high_list, cur); else node_list_add(&low_list, cur); cur = next; } if (!low_list.head) low_list = high_list; else if (high_list.head) { /* Sort both sublists recursively */ _qsort_nodelist(&low_list, compare); _qsort_nodelist(&high_list, compare); /* Join both lists in order */ node_list_join(&low_list, &high_list); } /* Return the resulting list */ list->head = low_list.head; list->tail = low_list.tail; } struct grecs_node * grecs_nodelist_sort(struct grecs_node *node, int (*compare)(struct grecs_node const *, struct grecs_node const *)) { struct node_list list; node_list_init(&list, node); _qsort_nodelist(&list, compare); return list.head; } void grecs_tree_sort(struct grecs_node *node, int (*compare)(struct grecs_node const *, struct grecs_node const *)) { if (node && node->down) { node->down = grecs_nodelist_sort(node->down, compare); for (node = node->down; node; node = node->next) grecs_tree_sort(node, compare); } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/include/�������������������������������������������������������������������������0000755�0001750�0001750�00000000000�13512403133�015707� 5����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/include/grecs.h������������������������������������������������������������������0000644�0001750�0001750�00000002341�13244106110�017160� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* grecs - Gray's Extensible Configuration System -*- c -*- Copyright (C) 2007-2016 Sergey Poznyakoff Grecs 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. Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. */ #ifndef _GRECS_H #define _GRECS_H #include <grecs/types.h> #include <grecs/version.h> #include <grecs/doc.h> #include <grecs/error.h> #include <grecs/format.h> #include <grecs/lex.h> #include <grecs/list.h> #include <grecs/locus.h> #include <grecs/mem.h> #include <grecs/node.h> #include <grecs/parser.h> #include <grecs/preproc.h> #include <grecs/sockaddr.h> #include <grecs/symtab.h> #include <grecs/table.h> #include <grecs/tree.h> #include <grecs/txtacc.h> #include <grecs/util.h> #include <grecs/value.h> #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/include/Makefile.am��������������������������������������������������������������0000644�0001750�0001750�00000000626�13511403723�017753� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������SUBDIRS = grecs GRECS_HDR = grecs.h $(top_srcdir)/@GRECS_SUBDIR@/wordsplit/wordsplit.h if GRECS_COND_BUILD_INSTALL include_HEADERS = $(GRECS_HDR) endif if GRECS_COND_BUILD_SHARED if GRECS_COND_INSTALLHEADERS grecsincludedir = @GRECS_INCLUDE_DIR@ grecsinclude_HEADERS = $(GRECS_HDR) else noinst_HEADERS = $(GRECS_HDR) endif endif if GRECS_COND_BUILD_STATIC noinst_HEADERS = $(GRECS_HDR) endif ����������������������������������������������������������������������������������������������������������direvent-5.2/grecs/include/Makefile.in��������������������������������������������������������������0000644�0001750�0001750�00000055727�13512402622�017776� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 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@ 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 = grecs/include 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)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__grecsinclude_HEADERS_DIST) \ $(am__include_HEADERS_DIST) $(am__noinst_HEADERS_DIST) \ $(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 = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__grecsinclude_HEADERS_DIST = grecs.h \ $(top_srcdir)/@GRECS_SUBDIR@/wordsplit/wordsplit.h 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; }; \ } am__installdirs = "$(DESTDIR)$(grecsincludedir)" \ "$(DESTDIR)$(includedir)" am__include_HEADERS_DIST = grecs.h \ $(top_srcdir)/@GRECS_SUBDIR@/wordsplit/wordsplit.h am__noinst_HEADERS_DIST = grecs.h \ $(top_srcdir)/@GRECS_SUBDIR@/wordsplit/wordsplit.h HEADERS = $(grecsinclude_HEADERS) $(include_HEADERS) $(noinst_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" 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@ 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@ 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@ 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@ 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@ SUBDIRS = grecs GRECS_HDR = grecs.h $(top_srcdir)/@GRECS_SUBDIR@/wordsplit/wordsplit.h @GRECS_COND_BUILD_INSTALL_TRUE@include_HEADERS = $(GRECS_HDR) @GRECS_COND_BUILD_SHARED_TRUE@@GRECS_COND_INSTALLHEADERS_TRUE@grecsincludedir = @GRECS_INCLUDE_DIR@ @GRECS_COND_BUILD_SHARED_TRUE@@GRECS_COND_INSTALLHEADERS_TRUE@grecsinclude_HEADERS = $(GRECS_HDR) @GRECS_COND_BUILD_SHARED_TRUE@@GRECS_COND_INSTALLHEADERS_FALSE@noinst_HEADERS = $(GRECS_HDR) @GRECS_COND_BUILD_STATIC_TRUE@noinst_HEADERS = $(GRECS_HDR) all: all-recursive .SUFFIXES: $(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 grecs/include/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnits grecs/include/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__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ 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): install-grecsincludeHEADERS: $(grecsinclude_HEADERS) @$(NORMAL_INSTALL) @list='$(grecsinclude_HEADERS)'; test -n "$(grecsincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(grecsincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(grecsincludedir)" || 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_HEADER) $$files '$(DESTDIR)$(grecsincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(grecsincludedir)" || exit $$?; \ done uninstall-grecsincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(grecsinclude_HEADERS)'; test -n "$(grecsincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(grecsincludedir)'; $(am__uninstall_files_from_dir) install-includeHEADERS: $(include_HEADERS) @$(NORMAL_INSTALL) @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(includedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(includedir)" || 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_HEADER) $$files '$(DESTDIR)$(includedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(includedir)" || exit $$?; \ done uninstall-includeHEADERS: @$(NORMAL_UNINSTALL) @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(includedir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(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 @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(HEADERS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(grecsincludedir)" "$(DESTDIR)$(includedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: 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-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-grecsincludeHEADERS install-includeHEADERS install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-grecsincludeHEADERS uninstall-includeHEADERS .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic cscopelist-am ctags ctags-am \ distclean distclean-generic distclean-tags 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-grecsincludeHEADERS install-html \ install-html-am install-includeHEADERS install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags tags-am uninstall uninstall-am \ uninstall-grecsincludeHEADERS uninstall-includeHEADERS .PRECIOUS: Makefile # 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.2/grecs/include/grecs/�������������������������������������������������������������������0000755�0001750�0001750�00000000000�13512403133�017012� 5����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/include/grecs/json.h�������������������������������������������������������������0000644�0001750�0001750�00000005474�13511403723�020152� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* This file is part of Grecs. Copyright (C) 2012-2016 Sergey Poznyakoff. Grecs 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. Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. */ #include <grecs.h> enum json_value_type { json_null, json_bool, json_number, json_string, json_arr, json_object }; struct json_value; struct json_array { size_t oc; struct json_value **ov; struct grecs_list *ol; }; struct json_value { enum json_value_type type; union { int b; /* json_bool */ double n; /* json_number */ char *s; /* json_string */ struct json_array *a; /* json_arr */ struct grecs_symtab *o; /* json_object */ } v; }; struct json_pair { char *k; struct json_value *v; }; extern char const *json_err_diag; extern struct grecs_locus json_err_locus; extern struct json_value *json_return_obj; void jsonlex_setup(char const *s, size_t l); void jsonlex_cleanup(void); void jsonlex_diag(const char *s); int json_unescape(char c, char *o); struct json_value *json_value_create(int type); struct grecs_symtab *json_assoc_create(void); void json_value_free(struct json_value *obj); struct json_value *json_parse_string(char const *input, size_t len); struct json_value *json_value_lookup(struct json_value *obj, const char *ident); struct json_format { size_t indent; int precision; void (*write) (void *, char const *, size_t); void *data; }; void json_format_value(struct json_value *obj, struct json_format *fmt); struct json_value *json_new_null(void); struct json_value *json_new_bool(int b); struct json_value *json_new_number(double n); struct json_value *json_new_string(char const *str); struct json_value *json_new_object(void); int json_object_set(struct json_value *obj, char const *name, struct json_value *val); int json_object_get(struct json_value *obj, char const *name, struct json_value **retval); struct json_value *json_new_array(void); size_t json_array_size(struct json_value *j); void json_array_flatten(struct json_value *j); int json_array_insert(struct json_value *j, size_t idx, struct json_value *v); int json_array_append(struct json_value *j, struct json_value *v); int json_array_set(struct json_value *j, size_t idx, struct json_value *v); int json_array_get(struct json_value *j, size_t idx, struct json_value **retval); ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/include/grecs/mem.h��������������������������������������������������������������0000644�0001750�0001750�00000002307�13244106110�017740� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* grecs - Gray's Extensible Configuration System -*- c -*- Copyright (C) 2007-2016 Sergey Poznyakoff Grecs 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. Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. */ #ifndef _GRECS_MEM_H #define _GRECS_MEM_H extern void *(*grecs_malloc_fun)(size_t size); extern void *(*grecs_realloc_fun)(void *ptr, size_t size); extern void (*grecs_alloc_die_fun)(void); extern void (*grecs_free_fun)(void *ptr); void *grecs_malloc(size_t size); void *grecs_zalloc(size_t size); void *grecs_calloc(size_t nmemb, size_t size); void *grecs_realloc(void *ptr, size_t size); void grecs_alloc_die(void); char *grecs_strdup(const char *str); void grecs_free(void *ptr); #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/include/grecs/Makefile.am��������������������������������������������������������0000644�0001750�0001750�00000001207�13244106110�021043� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������GRECS_PKG_HDR =\ doc.h\ error.h\ format.h\ lex.h\ list.h\ locus.h\ mem.h\ node.h\ opt.h\ parser.h\ preproc.h\ sockaddr.h\ symtab.h\ table.h\ tree.h\ txtacc.h\ types.h\ util.h\ value.h\ version.h if GRECS_COND_JSON GRECS_PKG_HDR += json.h endif if GRECS_COND_BUILD_INSTALL grecsincludedir = @GRECS_INCLUDE_DIR@ grecsinclude_HEADERS = $(GRECS_PKG_HDR) endif if GRECS_COND_BUILD_SHARED if GRECS_COND_INSTALLHEADERS grecsincludedir = @GRECS_INCLUDE_DIR@ grecsinclude_HEADERS = $(GRECS_PKG_HDR) else noinst_HEADERS = $(GRECS_PKG_HDR) endif endif if GRECS_COND_BUILD_STATIC noinst_HEADERS = $(GRECS_PKG_HDR) endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/include/grecs/parser.h�����������������������������������������������������������0000644�0001750�0001750�00000003777�13244106110�020472� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* grecs - Gray's Extensible Configuration System -*- c -*- Copyright (C) 2007-2016 Sergey Poznyakoff Grecs 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. Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. */ #ifndef _GRECS_PARSER_H #define _GRECS_PARSER_H typedef struct grecs_node *(*grecs_parser_t)(const char *name, int trace); #define GRECS_TRACE_GRAM 0x01 #define GRECS_TRACE_LEX 0x02 extern int grecs_trace_flags; extern grecs_parser_t grecs_parser_fun; extern int grecs_default_port; extern struct grecs_locus_point grecs_current_locus_point; extern grecs_locus_t grecs_locus; extern int grecs_error_count; #define GRECS_OPTION_ADJUST_STRING_LOCATIONS 0x01 #define GRECS_OPTION_QUOTED_STRING_CONCAT 0x02 extern int grecs_parser_options; /* Main entry point */ struct grecs_node *grecs_parse(const char *name); void grecs_gram_trace(int n); void grecs_lex_trace(int n); /* Parsers: */ struct grecs_node *grecs_grecs_parser(const char *name, int traceflags); struct grecs_node *grecs_meta1_parser(const char *name, int traceflags); struct grecs_node *grecs_bind_parser(const char *name, int traceflags); struct grecs_node *grecs_dhcpd_parser(const char *name, int traceflags); struct grecs_node *grecs_git_parser(const char *name, int traceflags); struct grecs_node *grecs_path_parser(const char *name, int traceflags); /* Parser database */ int grecs_enumerate_parsers(int (*fun)(const char *, grecs_parser_t, void *), void *); grecs_parser_t grecs_get_parser_by_type(const char *type); #endif �direvent-5.2/grecs/include/grecs/error.h������������������������������������������������������������0000644�0001750�0001750�00000002467�13244106110�020322� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* grecs - Gray's Extensible Configuration System -*- c -*- Copyright (C) 2007-2016 Sergey Poznyakoff Grecs 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. Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. */ #ifndef _GRECS_ERROR_H #define _GRECS_ERROR_H #include <grecs/locus.h> extern int grecs_log_to_stderr; extern void (*grecs_log_setup_hook)(void); extern void (*grecs_print_diag_fun)(grecs_locus_t const *, int, int, const char*); void grecs_warning(grecs_locus_t const *locus, int errcode, const char *fmt, ...) __attribute__ ((__format__ (__printf__, 3, 4))); void grecs_error(grecs_locus_t const *locus, int errcode, const char *fmt, ...) __attribute__ ((__format__ (__printf__, 3, 4))); int grecs_asprint_locus(char **locstr, size_t *size, grecs_locus_t const *locus); #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/include/grecs/opt.h��������������������������������������������������������������0000644�0001750�0001750�00000003214�13244106110�017762� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* grecs - Gray's Extensible Configuration System Copyright (C) 2007-2016 Sergey Poznyakoff Grecs 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. Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. */ #ifndef _GRECS_OPT_H #define _GRECS_OPT_H struct grecs_proginfo { const char *progname; char **subcmd; const char *docstring; const char *args_doc; struct grecs_opthelp *opthelp; size_t optcount; void (*print_help_hook)(FILE *stream); void (*print_version_hook)(FILE *stream); const char *package; const char *version; const char *license; const char *copyright_year; const char *copyright_holder; const char **authors; const char *bug_address; const char *url; const char *epilogue; }; struct grecs_opthelp { const char *opt; const char *arg; int is_optional; const char *descr; }; #define DESCRCOLUMN 30 #define RMARGIN 79 #define GROUPCOLUMN 2 #define USAGECOLUMN 13 void grecs_print_help(struct grecs_proginfo *pinfo); void grecs_print_usage(struct grecs_proginfo *pinfo); void grecs_print_version_only(struct grecs_proginfo *pinfo, FILE *stream); void grecs_print_version(struct grecs_proginfo *pinfo, FILE *stream); #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/include/grecs/table.h������������������������������������������������������������0000644�0001750�0001750�00000005664�13244106110�020262� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* grecs - Gray's Extensible Configuration System -*- c -*- Copyright (C) 2007-2016 Sergey Poznyakoff Grecs 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. Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. */ #ifndef _GRECS_TABLE_H #define _GRECS_TABLE_H #include <grecs/node.h> enum grecs_data_type { grecs_type_void, grecs_type_string, grecs_type_short, grecs_type_ushort, grecs_type_int, grecs_type_uint, grecs_type_long, grecs_type_ulong, grecs_type_size, /* grecs_type_off,*/ grecs_type_time, grecs_type_bool, grecs_type_ipv4, grecs_type_cidr, grecs_type_host, grecs_type_sockaddr, grecs_type_section, grecs_type_null }; #define GRECS_DFLT 0x00 /* Default keyword flags */ #define GRECS_AGGR 0x01 /* Multiple entries aggregate */ #define GRECS_MULT 0x02 /* Statement can appear multiple times */ #define GRECS_INAC 0x04 /* Inactive keyword */ #define GRECS_LIST 0x08 /* Value is a list of declared type */ #define GRECS_HIDDEN 0x10 /* Hidden keyword: don't display in help output */ #define GRECS_CONST 0x20 /* For string types: initial value is constant, don't try to free it before assigning new value. This flag is cleared after the first assignment. */ enum grecs_callback_command { grecs_callback_section_begin, grecs_callback_section_end, grecs_callback_set_value }; typedef int (*grecs_callback_fn)( #if GRECS_TREE_API enum grecs_callback_command cmd, grecs_node_t * /* node */, void * /* varptr */, void * /* cb_data */ #else enum grecs_callback_command cmd, grecs_locus_t * /* locus */, void * /* varptr */, grecs_value_t * /* value */, void * /* cb_data */ #endif ); struct grecs_keyword { const char *ident; const char *argname; const char *docstring; enum grecs_data_type type; int flags; void *varptr; size_t offset; grecs_callback_fn callback; void *callback_data; struct grecs_keyword *kwd; }; extern int grecs_string_convert(void *target, enum grecs_data_type type, const char *string, grecs_locus_t const *locus); extern void grecs_process_ident(struct grecs_keyword *kwp, grecs_value_t *value, void *base, grecs_locus_t *locus); const char *grecs_data_type_string(enum grecs_data_type type); int grecs_tree_process(struct grecs_node *node, struct grecs_keyword *kwd); int grecs_tree_reduce(struct grecs_node *node, struct grecs_keyword *kwd, int flags); #endif ����������������������������������������������������������������������������direvent-5.2/grecs/include/grecs/lex.h��������������������������������������������������������������0000644�0001750�0001750�00000003526�13244106110�017756� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* grecs - Gray's Extensible Configuration System -*- c -*- Copyright (C) 2007-2016 Sergey Poznyakoff Grecs 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. Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. */ #ifndef _GRECS_LEX_H #define _GRECS_LEX_H int grecs_lex_begin(const char*, int); void grecs_lex_end(int err); char *grecs_install_text(const char *str); void grecs_destroy_text(void); struct grecs_symtab *grecs_text_table(void); void grecs_parse_line_directive(char *text, grecs_locus_t *ploc, struct grecs_locus_point *ppoint, size_t *pxlines); void grecs_parse_line_directive_cpp(char *text, grecs_locus_t *ploc, struct grecs_locus_point *ppoint, size_t *pxlines); void grecs_line_acc_create(void); void grecs_line_acc_free(void); void grecs_line_acc_grow_char(int c); int grecs_line_acc_grow_char_unescape(int c); void grecs_line_acc_grow(const char *text, size_t len); void grecs_line_acc_grow_unescape_last(char *text, size_t len, grecs_locus_t const *loc); void grecs_line_begin(void); #define grecs_line_add grecs_line_acc_grow char *grecs_line_finish(void); int grecs_str_is_ipv4(const char *addr); int grecs_str_is_num(const char *s); int grecs_str_is_ipv6(const char *addr); int grecs_str_is_num(const char *s); int grecs_str_is_ipaddr(const char *addr); #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/include/grecs/Makefile.in��������������������������������������������������������0000644�0001750�0001750�00000044443�13512402622�021072� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 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@ 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@ @GRECS_COND_JSON_TRUE@am__append_1 = json.h subdir = grecs/include/grecs 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)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__grecsinclude_HEADERS_DIST) \ $(am__noinst_HEADERS_DIST) $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = types.h 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__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__grecsinclude_HEADERS_DIST = doc.h error.h format.h lex.h list.h \ locus.h mem.h node.h opt.h parser.h preproc.h sockaddr.h \ symtab.h table.h tree.h txtacc.h types.h util.h value.h \ version.h json.h 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; }; \ } am__installdirs = "$(DESTDIR)$(grecsincludedir)" am__noinst_HEADERS_DIST = doc.h error.h format.h lex.h list.h locus.h \ mem.h node.h opt.h parser.h preproc.h sockaddr.h symtab.h \ table.h tree.h txtacc.h types.h util.h value.h version.h \ json.h HEADERS = $(grecsinclude_HEADERS) $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/types.h.in 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@ 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@ 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@ 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@ 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@ GRECS_PKG_HDR = doc.h error.h format.h lex.h list.h locus.h mem.h \ node.h opt.h parser.h preproc.h sockaddr.h symtab.h table.h \ tree.h txtacc.h types.h util.h value.h version.h \ $(am__append_1) @GRECS_COND_BUILD_INSTALL_TRUE@grecsincludedir = @GRECS_INCLUDE_DIR@ @GRECS_COND_BUILD_SHARED_TRUE@@GRECS_COND_INSTALLHEADERS_TRUE@grecsincludedir = @GRECS_INCLUDE_DIR@ @GRECS_COND_BUILD_INSTALL_TRUE@grecsinclude_HEADERS = $(GRECS_PKG_HDR) @GRECS_COND_BUILD_SHARED_TRUE@@GRECS_COND_INSTALLHEADERS_TRUE@grecsinclude_HEADERS = $(GRECS_PKG_HDR) @GRECS_COND_BUILD_SHARED_TRUE@@GRECS_COND_INSTALLHEADERS_FALSE@noinst_HEADERS = $(GRECS_PKG_HDR) @GRECS_COND_BUILD_STATIC_TRUE@noinst_HEADERS = $(GRECS_PKG_HDR) all: all-am .SUFFIXES: $(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 grecs/include/grecs/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnits grecs/include/grecs/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__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ 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): types.h: $(top_builddir)/config.status $(srcdir)/types.h.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ install-grecsincludeHEADERS: $(grecsinclude_HEADERS) @$(NORMAL_INSTALL) @list='$(grecsinclude_HEADERS)'; test -n "$(grecsincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(grecsincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(grecsincludedir)" || 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_HEADER) $$files '$(DESTDIR)$(grecsincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(grecsincludedir)" || exit $$?; \ done uninstall-grecsincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(grecsinclude_HEADERS)'; test -n "$(grecsincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(grecsincludedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(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 check-am: all-am check: check-am all-am: Makefile $(HEADERS) installdirs: for dir in "$(DESTDIR)$(grecsincludedir)"; 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-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-grecsincludeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-grecsincludeHEADERS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ cscopelist-am ctags ctags-am distclean distclean-generic \ distclean-tags 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-grecsincludeHEADERS install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags tags-am uninstall uninstall-am \ uninstall-grecsincludeHEADERS .PRECIOUS: Makefile # 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.2/grecs/include/grecs/format.h�����������������������������������������������������������0000644�0001750�0001750�00000004271�13244106110�020454� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* grecs - Gray's Extensible Configuration System -*- c -*- Copyright (C) 2007-2016 Sergey Poznyakoff Grecs 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. Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. */ #ifndef _GRECS_FORMAT_H #define _GRECS_FORMAT_H #include <grecs/value.h> #include <grecs/locus.h> #include <grecs/node.h> #include <grecs/txtacc.h> struct grecs_format_closure { int (*fmtfun)(const char *, void *); void *data; }; void grecs_format_locus(grecs_locus_t *locus, struct grecs_format_closure *fp); void grecs_format_node_path(struct grecs_node *node, int flag, struct grecs_format_closure *fp); void grecs_format_value(struct grecs_value *val, int flags, struct grecs_format_closure *fp); #define GRECS_NODE_FLAG_PATH 0x00100 #define GRECS_NODE_FLAG_VALUE 0x00200 #define GRECS_NODE_FLAG_DESCEND 0x01000 #define GRECS_NODE_FLAG_LOCUS 0x02000 #define GRECS_NODE_FLAG_QUOTE 0x04000 #define GRECS_NODE_FLAG_NOQUOTE 0x08000 #define GRECS_NODE_FLAG_QUOTE_HEX 0x10000 #define _GRECS_NODE_MASK_DELIM 0x000ff #define _GRECS_NODE_MASK_OUTPUT 0x00f00 #define GRECS_NODE_FLAG_DEFAULT \ (GRECS_NODE_FLAG_PATH|GRECS_NODE_FLAG_VALUE|\ GRECS_NODE_FLAG_DESCEND|GRECS_NODE_FLAG_QUOTE) int grecs_format_node(struct grecs_node *node, int flags, struct grecs_format_closure *fp); void grecs_print_locus(grecs_locus_t *locus, FILE *fp); void grecs_print_node_path(struct grecs_node *node, int flag, FILE *fp); void grecs_print_value(struct grecs_value *val, int flags, FILE *fp); int grecs_print_node(struct grecs_node *node, int flags, FILE *fp); void grecs_txtacc_format_value(struct grecs_value *val, int flags, grecs_txtacc_t acc); #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/include/grecs/sockaddr.h���������������������������������������������������������0000644�0001750�0001750�00000003622�13244106325�020765� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* grecs - Gray's Extensible Configuration System -*- c -*- Copyright (C) 2007-2017 Sergey Poznyakoff Grecs 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. Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. */ #ifndef _GRECS_SOCKADDR_H #define _GRECS_SOCKADDR_H struct grecs_sockaddr { #if GRECS_SOCKADDR_LIST struct grecs_sockaddr *next; char *str; #endif int len; struct sockaddr *sa; }; #if GRECS_SOCKADDR_LIST #define GRECS_AH_PASSIVE 0x01 #define GRECS_HINT_SERVICE 0x02 #define GRECS_HINT_PORT 0x04 struct grecs_sockaddr_hints { int flags; char *service; unsigned short port; }; extern struct grecs_sockaddr_hints *grecs_sockaddr_hints; struct grecs_sockaddr *grecs_sockaddr_new(size_t s); void grecs_sockaddr_free(struct grecs_sockaddr *p); int grecs_str_to_sockaddr(struct grecs_sockaddr **sap, const char *arg, struct grecs_sockaddr_hints *gh, grecs_locus_t const *locus); char const *grecs_sockaddr_str(struct grecs_sockaddr *); #endif #define GRECS_INADDR_BYTES 16 struct grecs_cidr { int family; int len; unsigned char address[GRECS_INADDR_BYTES]; unsigned char netmask[GRECS_INADDR_BYTES]; }; int grecs_str_to_cidr(struct grecs_cidr *pcidr, const char *str, grecs_locus_t const *locus); int grecs_sockaddr_to_cidr(struct grecs_cidr *cidr, const struct sockaddr *sa); int grecs_sockadd_cidr_match(struct sockaddr *sa, struct grecs_cidr *cidr); #endif ��������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/include/grecs/locus.h������������������������������������������������������������0000644�0001750�0001750�00000004537�13244106110�020316� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* grecs - Gray's Extensible Configuration System Copyright (C) 2007-2016 Sergey Poznyakoff Grecs 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. Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. */ #ifndef _GRECS_LOCUS_H #define _GRECS_LOCUS_H struct grecs_locus_point { char *file; unsigned line; unsigned col; }; #define grecs_locus_point_advance_line(loc) do { \ (loc).line++; \ (loc).col = 0; \ } while (0) #define GRECS_LOCUS_POINT_EQ(a,b) \ ((strcmp((a)->file, (b)->file) == 0) && ((a)->line == (b)->line)) typedef struct grecs_locus { struct grecs_locus_point beg; struct grecs_locus_point end; } grecs_locus_t; #define YYLTYPE grecs_locus_t #define YYLLOC_DEFAULT(Current, Rhs, N) \ do { \ if (N) { \ (Current).beg = YYRHSLOC(Rhs, 1).beg; \ (Current).end = YYRHSLOC(Rhs, N).end; \ } else { \ (Current).beg = YYRHSLOC(Rhs, 0).end; \ (Current).end = (Current).beg; \ } \ } while (0) #define YY_LOCATION_PRINT(File, Loc) do { \ if ((Loc).beg.col == 0) \ fprintf(File, "%s:%u", \ (Loc).beg.file, \ (Loc).beg.line); \ else if (strcmp((Loc).beg.file, (Loc).end.file)) \ fprintf(File, "%s:%u.%u-%s:%u.%u", \ (Loc).beg.file, \ (Loc).beg.line, (Loc).beg.col, \ (Loc).end.file, \ (Loc).end.line, (Loc).end.col); \ else if ((Loc).beg.line != (Loc).end.line) \ fprintf(File, "%s:%u.%u-%u.%u", \ (Loc).beg.file, \ (Loc).beg.line, (Loc).beg.col, \ (Loc).end.line, (Loc).end.col); \ else if ((Loc).beg.col != (Loc).end.col) \ fprintf(File, "%s:%u.%u-%u", \ (Loc).beg.file, \ (Loc).beg.line, (Loc).beg.col, \ (Loc).end.col); \ else \ fprintf(File, "%s:%u.%u", \ (Loc).beg.file, \ (Loc).beg.line, \ (Loc).beg.col); \ } while (0) #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/include/grecs/doc.h��������������������������������������������������������������0000644�0001750�0001750�00000002303�13244106110�017723� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* grecs - Gray's Extensible Configuration System -*- c -*- Copyright (C) 2007-2016 Sergey Poznyakoff Grecs 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. Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. */ #ifndef _GRECS_DOC_H #define _GRECS_DOC_H #include <stdio.h> #include <grecs/table.h> void grecs_print_docstring(const char *docstring, unsigned level, FILE *stream); void grecs_print_simple_statement(struct grecs_keyword *kwp, unsigned level, FILE *stream); void grecs_print_block_statement(struct grecs_keyword *kwp, unsigned level, FILE *stream); void grecs_print_statement_array(struct grecs_keyword *kwp, unsigned n, unsigned level, FILE *stream); #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/include/grecs/version.h����������������������������������������������������������0000644�0001750�0001750�00000002444�13244106110�020651� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* grecs - Gray's Extensible Configuration System -*- c -*- Copyright (C) 2007-2016 Sergey Poznyakoff Grecs 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. Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. */ #ifndef _GRECS_VERSION_H #define _GRECS_VERSION_H struct grecs_version_info { const char *package; const char *version; const char *id; int major; int minor; int patch; char *suffix; char *buffer; }; struct grecs_version_info *grecs_version(void); int grecs_version_cmp(const char *, const char *, int *); int grecs_version_ok(const char *); void grecs_version_info_free(struct grecs_version_info *); struct grecs_version_info *grecs_version_split(const char *); int grecs_version_info_cmp(struct grecs_version_info *, struct grecs_version_info *, int *); #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/include/grecs/list.h�������������������������������������������������������������0000644�0001750�0001750�00000003623�13244106110�020137� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* grecs - Gray's Extensible Configuration System -*- c -*- Copyright (C) 2007-2016 Sergey Poznyakoff Grecs 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. Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. */ #ifndef _GRECS_LIST_H #define _GRECS_LIST_H typedef struct grecs_list_entry *grecs_list_entry_ptr_t; typedef struct grecs_list *grecs_list_ptr_t; struct grecs_list_entry { struct grecs_list_entry *next, *prev; void *data; }; struct grecs_list { struct grecs_list_entry *head, *tail; size_t count; int (*cmp)(const void *, const void *); void (*free_entry)(void *); }; grecs_list_ptr_t grecs_list_create(void); size_t grecs_list_size(grecs_list_ptr_t); void grecs_list_append(grecs_list_ptr_t, void *); void grecs_list_push(grecs_list_ptr_t, void *); void *grecs_list_pop(grecs_list_ptr_t); void *grecs_list_locate(grecs_list_ptr_t, void *); void *grecs_list_index(grecs_list_ptr_t, size_t); void *grecs_list_remove_tail(grecs_list_ptr_t); void grecs_list_remove_entry(grecs_list_ptr_t, grecs_list_entry_ptr_t); int grecs_list_remove(struct grecs_list *lp, void *data); void grecs_list_clear(grecs_list_ptr_t); void grecs_list_free(grecs_list_ptr_t); void grecs_list_add(grecs_list_ptr_t, grecs_list_ptr_t); int grecs_list_compare(grecs_list_ptr_t, grecs_list_ptr_t); /* FIXME */ struct grecs_list *_grecs_simple_list_create(int dispose); struct grecs_list *grecs_value_list_create(void); #endif �������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/include/grecs/tree.h�������������������������������������������������������������0000644�0001750�0001750�00000005626�13511403723�020137� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* grecs - Gray's Extensible Configuration System -*- c -*- Copyright (C) 2007-2016 Sergey Poznyakoff Grecs 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. Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. */ #ifndef _GRECS_TREE_H #define _GRECS_TREE_H #include <grecs/node.h> int grecs_tree_free(struct grecs_node *node); void grecs_tree_sort(struct grecs_node *node, int (*compare)(struct grecs_node const *, struct grecs_node const *)); struct grecs_node *grecs_tree_first_node(struct grecs_node *tree); struct grecs_node *grecs_next_node(struct grecs_node *node); struct grecs_node *grecs_find_node(struct grecs_node *node, const char *path); enum grecs_tree_recurse_op { grecs_tree_recurse_set, grecs_tree_recurse_pre, grecs_tree_recurse_post }; enum grecs_tree_recurse_res { grecs_tree_recurse_ok, grecs_tree_recurse_fail, grecs_tree_recurse_skip, grecs_tree_recurse_stop }; typedef enum grecs_tree_recurse_res (*grecs_tree_recursor_t)(enum grecs_tree_recurse_op, struct grecs_node *, void *); int grecs_tree_recurse(struct grecs_node *node, grecs_tree_recursor_t recfun, void *data); int grecs_tree_join(struct grecs_node *dst, struct grecs_node *src); enum grecs_tree_recurse_res grecs_node_exact_match( enum grecs_tree_recurse_op op, struct grecs_node *node, void *data); typedef struct grecs_match_buf *grecs_match_buf_t; struct grecs_node *grecs_match_first(struct grecs_node *tree, const char *pattern, grecs_match_buf_t *buf); struct grecs_node *grecs_match_next(struct grecs_match_buf *buf); void grecs_match_buf_free(struct grecs_match_buf *buf); grecs_match_buf_t grecs_match_buf_create(int argc, char **argv, struct grecs_value **labelv); struct grecs_node *grecs_match_buf_first(struct grecs_match_buf *buf, struct grecs_node *tree); struct grecs_node *grecs_match_buf_get_node(grecs_match_buf_t buf); size_t grecs_match_buf_get_args(grecs_match_buf_t buf, char ***argv); struct grecs_node *grecs_match_buf_get_root(grecs_match_buf_t buf); void grecs_match_buf_set_root(grecs_match_buf_t buf, struct grecs_node *root); /* Assertions */ int grecs_assert_value_type(const grecs_value_t *value, int type, grecs_locus_t *refloc); int grecs_assert_scalar_stmt(grecs_locus_t *locus, enum grecs_callback_command cmd); int grecs_assert_node_value_type(enum grecs_callback_command cmd, grecs_node_t *node, int type); #endif ����������������������������������������������������������������������������������������������������������direvent-5.2/grecs/include/grecs/txtacc.h�����������������������������������������������������������0000644�0001750�0001750�00000002526�13244106110�020453� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* grecs - Gray's Extensible Configuration System -*- c -*- Copyright (C) 2007-2016 Sergey Poznyakoff Grecs 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. Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. */ #ifndef _GRECS_TXTACC_H #define _GRECS_TXTACC_H #define GRECS_TXTACC_BUFSIZE 1024 typedef struct grecs_txtacc *grecs_txtacc_t; grecs_txtacc_t grecs_txtacc_create(void); void grecs_txtacc_free(grecs_txtacc_t); void grecs_txtacc_grow(grecs_txtacc_t, const char *, size_t); void grecs_txtacc_grow_string(grecs_txtacc_t, const char *); void grecs_txtacc_grow_string_escape(grecs_txtacc_t, const char *); #define grecs_txtacc_grow_char(acc,c) \ do { \ char __ch = c; \ grecs_txtacc_grow(acc,&__ch,1); \ } while (0) char *grecs_txtacc_finish(grecs_txtacc_t, int); void grecs_txtacc_free_string(grecs_txtacc_t, char *); #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/include/grecs/value.h������������������������������������������������������������0000644�0001750�0001750�00000003107�13511403723�020304� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* grecs - Gray's Extensible Configuration System -*- c -*- Copyright (C) 2007-2016 Sergey Poznyakoff Grecs 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. Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. */ #ifndef _GRECS_VALUE_H #define _GRECS_VALUE_H #include <grecs/locus.h> #include <grecs/list.h> #define GRECS_TYPE_STRING 0 #define GRECS_TYPE_LIST 1 #define GRECS_TYPE_ARRAY 2 typedef struct grecs_value { int type; grecs_locus_t locus; union { grecs_list_ptr_t list; char *string; struct { size_t c; struct grecs_value **v; } arg; } v; } grecs_value_t; #define GRECS_VALUE_EMPTY_P(val) \ (!(val) || \ ((val)->type == GRECS_TYPE_STRING && (val)->v.string == NULL)) void grecs_value_free(struct grecs_value *val); void grecs_value_free_content(struct grecs_value *val); grecs_value_t *grecs_value_ptr_from_static(grecs_value_t *input); const char *grecs_value_type_string(int t); int grecs_value_eq(struct grecs_value *a, struct grecs_value *b); int grecs_value_match(struct grecs_value *pat, struct grecs_value *b, int flags); #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/include/grecs/types.h.in���������������������������������������������������������0000644�0001750�0001750�00000000616�13244106110�020734� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#ifndef _GRECS_TYPES_H #define _GRECS_TYPES_H #define GRECS_VERSION_MAJOR 1 #define GRECS_VERSION_MINOR 0 #define GRECS_TREE_API @GRECS_TREE_API@ #define GRECS_SOCKADDR_LIST @GRECS_SOCKADDR_LIST@ #if ENABLE_NLS # include "gettext.h" #else # ifndef gettext # define gettext(msgid) msgid # endif #endif #ifndef _ # define _(msgid) gettext(msgid) #endif #ifndef N_ # define N_(s) s #endif #endif ������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/include/grecs/symtab.h�����������������������������������������������������������0000644�0001750�0001750�00000003677�13244106110�020474� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* grecs - Gray's Extensible Configuration System -*- c -*- Copyright (C) 2007-2016 Sergey Poznyakoff Grecs 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. Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. */ #ifndef _GRECS_SYMTAB_H #define _GRECS_SYMTAB_H typedef struct grecs_symtab *grecs_symtab_ptr_t; typedef struct grecs_syment *grecs_syment_ptr_t; struct grecs_syment { char *name; }; typedef int (*grecs_symtab_enumerator_t)(void *sym, void *data); const char *grecs_symtab_strerror(int rc); void *grecs_symtab_lookup_or_install(grecs_symtab_ptr_t st, void *key, int *install); void grecs_symtab_clear(grecs_symtab_ptr_t st); grecs_symtab_ptr_t grecs_symtab_create(size_t elsize, unsigned (*hash_fun)(void *, unsigned long), int (*cmp_fun)(const void *, const void *), int (*copy_fun)(void *, void *), void *(*alloc_fun)(size_t), void (*free_fun)(void *)); grecs_symtab_ptr_t grecs_symtab_create_default(size_t elsize); void grecs_symtab_free(grecs_symtab_ptr_t pst); int grecs_symtab_remove(grecs_symtab_ptr_t st, void *elt); int grecs_symtab_replace(grecs_symtab_ptr_t st, void *ent, void **old_ent); int grecs_symtab_foreach(grecs_symtab_ptr_t st, grecs_symtab_enumerator_t fun, void *data); size_t grecs_symtab_count(grecs_symtab_ptr_t st); unsigned grecs_hash_string(const char *name, unsigned long hashsize); unsigned grecs_hash_string_ci(const char *name, unsigned long hashsize); #endif �����������������������������������������������������������������direvent-5.2/grecs/include/grecs/util.h�������������������������������������������������������������0000644�0001750�0001750�00000001765�13244106110�020146� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* grecs - Gray's Extensible Configuration System -*- c -*- Copyright (C) 2007-2016 Sergey Poznyakoff Grecs 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. Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. */ #ifndef _GRECS_UTIL_H #define _GRECS_UTIL_H #include <stdarg.h> ssize_t grecs_getline(char **pbuf, size_t *psize, FILE *fp); int grecs_vasprintf(char **pbuf, size_t *psize, const char *fmt, va_list ap); int grecs_asprintf(char **pbuf, size_t *psize, const char *fmt, ...); #endif �����������direvent-5.2/grecs/include/grecs/preproc.h����������������������������������������������������������0000644�0001750�0001750�00000003123�13244106110�020631� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* grecs - Gray's Extensible Configuration System -*- c -*- Copyright (C) 2007-2016 Sergey Poznyakoff Grecs 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. Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. */ #ifndef _GRECS_PREPROC_H #define _GRECS_PREPROC_H #include <sys/types.h> extern const char *grecs_preprocessor; size_t grecs_preproc_fill_buffer(char *buf, size_t size); void grecs_preproc_add_include_dir(char *dir); int grecs_preproc_init(const char *name); void grecs_preproc_done(void); int grecs_preproc_run(const char *config_file, const char *extpp); #define GRECS_STD_INCLUDE 0x01 #define GRECS_USR_INCLUDE 0x02 size_t grecs_include_path_count(int flag); int grecs_foreach_include_dir(int flag, int (*fun)(int, const char *, void *), void *data); char *grecs_find_include_file(const char *name, int allow_cwd); FILE *grecs_preproc_extrn_start(const char *file, pid_t *ppid); void grecs_preproc_extrn_shutdown(pid_t pid); void grecs_include_path_clear(void); void grecs_include_path_setup(const char *dir, ...); void grecs_include_path_setup_v(char **dirs); #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/include/grecs/types.h������������������������������������������������������������0000644�0001750�0001750�00000000553�13512402705�020336� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#ifndef _GRECS_TYPES_H #define _GRECS_TYPES_H #define GRECS_VERSION_MAJOR 1 #define GRECS_VERSION_MINOR 0 #define GRECS_TREE_API 1 #define GRECS_SOCKADDR_LIST 0 #if ENABLE_NLS # include "gettext.h" #else # ifndef gettext # define gettext(msgid) msgid # endif #endif #ifndef _ # define _(msgid) gettext(msgid) #endif #ifndef N_ # define N_(s) s #endif #endif �����������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/grecs/include/grecs/node.h�������������������������������������������������������������0000644�0001750�0001750�00000003740�13511403723�020120� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* grecs - Gray's Extensible Configuration System -*- c -*- Copyright (C) 2007-2016 Sergey Poznyakoff Grecs 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. Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. */ #ifndef _GRECS_NODE_H #define _GRECS_NODE_H #include <grecs/locus.h> #include <grecs/symtab.h> #include <grecs/value.h> enum grecs_node_type { grecs_node_root, grecs_node_stmt, grecs_node_block }; typedef struct grecs_node { enum grecs_node_type type; grecs_locus_t locus; struct grecs_node *up; struct grecs_node *down; struct grecs_node *next; struct grecs_node *prev; char *ident; grecs_locus_t idloc; /* Location of the identifier */ union { grecs_value_t *value; grecs_symtab_ptr_t texttab; } v; } grecs_node_t; void grecs_node_free(struct grecs_node *node); struct grecs_node *grecs_node_create(enum grecs_node_type type, grecs_locus_t *loc); struct grecs_node *grecs_node_create_points(enum grecs_node_type type, struct grecs_locus_point beg, struct grecs_locus_point end); void grecs_node_bind(struct grecs_node *master, struct grecs_node *node, int dn); int grecs_node_eq(struct grecs_node *a, struct grecs_node *b); int grecs_node_unlink(struct grecs_node *node); struct grecs_node *grecs_node_from_path(const char *path, const char *value); struct grecs_node *grecs_node_from_path_locus(const char *path, const char *value, grecs_locus_t *locus, grecs_locus_t *vallocus); #endif ��������������������������������direvent-5.2/src/�����������������������������������������������������������������������������������0000755�0001750�0001750�00000000000�13512403134�013751� 5����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/src/gettext.h��������������������������������������������������������������������������0000644�0001750�0001750�00000023117�12625627743�015634� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convenience header for conditional use of GNU <libintl.h>. Copyright (C) 1995-1998, 2000-2002, 2004-2006, 2009 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef _LIBGETTEXT_H #define _LIBGETTEXT_H 1 /* NLS can be disabled through the configure --disable-nls option. */ #if ENABLE_NLS /* Get declarations of GNU message catalog functions. */ # include <libintl.h> /* You can set the DEFAULT_TEXT_DOMAIN macro to specify the domain used by the gettext() and ngettext() macros. This is an alternative to calling textdomain(), and is useful for libraries. */ # ifdef DEFAULT_TEXT_DOMAIN # undef gettext # define gettext(Msgid) \ dgettext (DEFAULT_TEXT_DOMAIN, Msgid) # undef ngettext # define ngettext(Msgid1, Msgid2, N) \ dngettext (DEFAULT_TEXT_DOMAIN, Msgid1, Msgid2, N) # endif #else /* Solaris /usr/include/locale.h includes /usr/include/libintl.h, which chokes if dcgettext is defined as a macro. So include it now, to make later inclusions of <locale.h> a NOP. We don't include <libintl.h> as well because people using "gettext.h" will not include <libintl.h>, and also including <libintl.h> would fail on SunOS 4, whereas <locale.h> is OK. */ #if defined(__sun) # include <locale.h> #endif /* Many header files from the libstdc++ coming with g++ 3.3 or newer include <libintl.h>, which chokes if dcgettext is defined as a macro. So include it now, to make later inclusions of <libintl.h> a NOP. */ #if defined(__cplusplus) && defined(__GNUG__) && (__GNUC__ >= 3) # include <cstdlib> # if (__GLIBC__ >= 2) || _GLIBCXX_HAVE_LIBINTL_H # include <libintl.h> # endif #endif /* Disabled NLS. The casts to 'const char *' serve the purpose of producing warnings for invalid uses of the value returned from these functions. On pre-ANSI systems without 'const', the config.h file is supposed to contain "#define const". */ # undef gettext # define gettext(Msgid) ((const char *) (Msgid)) # undef dgettext # define dgettext(Domainname, Msgid) ((void) (Domainname), gettext (Msgid)) # undef dcgettext # define dcgettext(Domainname, Msgid, Category) \ ((void) (Category), dgettext (Domainname, Msgid)) # undef ngettext # define ngettext(Msgid1, Msgid2, N) \ ((N) == 1 \ ? ((void) (Msgid2), (const char *) (Msgid1)) \ : ((void) (Msgid1), (const char *) (Msgid2))) # undef dngettext # define dngettext(Domainname, Msgid1, Msgid2, N) \ ((void) (Domainname), ngettext (Msgid1, Msgid2, N)) # undef dcngettext # define dcngettext(Domainname, Msgid1, Msgid2, N, Category) \ ((void) (Category), dngettext(Domainname, Msgid1, Msgid2, N)) # undef textdomain # define textdomain(Domainname) ((const char *) (Domainname)) # undef bindtextdomain # define bindtextdomain(Domainname, Dirname) \ ((void) (Domainname), (const char *) (Dirname)) # undef bind_textdomain_codeset # define bind_textdomain_codeset(Domainname, Codeset) \ ((void) (Domainname), (const char *) (Codeset)) #endif /* A pseudo function call that serves as a marker for the automated extraction of messages, but does not call gettext(). The run-time translation is done at a different place in the code. The argument, String, should be a literal string. Concatenated strings and other string expressions won't work. The macro's expansion is not parenthesized, so that it is suitable as initializer for static 'char[]' or 'const char[]' variables. */ #define gettext_noop(String) String /* The separator between msgctxt and msgid in a .mo file. */ #define GETTEXT_CONTEXT_GLUE "\004" /* Pseudo function calls, taking a MSGCTXT and a MSGID instead of just a MSGID. MSGCTXT and MSGID must be string literals. MSGCTXT should be short and rarely need to change. The letter 'p' stands for 'particular' or 'special'. */ #ifdef DEFAULT_TEXT_DOMAIN # define pgettext(Msgctxt, Msgid) \ pgettext_aux (DEFAULT_TEXT_DOMAIN, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES) #else # define pgettext(Msgctxt, Msgid) \ pgettext_aux (NULL, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES) #endif #define dpgettext(Domainname, Msgctxt, Msgid) \ pgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES) #define dcpgettext(Domainname, Msgctxt, Msgid, Category) \ pgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, Category) #ifdef DEFAULT_TEXT_DOMAIN # define npgettext(Msgctxt, Msgid, MsgidPlural, N) \ npgettext_aux (DEFAULT_TEXT_DOMAIN, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES) #else # define npgettext(Msgctxt, Msgid, MsgidPlural, N) \ npgettext_aux (NULL, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES) #endif #define dnpgettext(Domainname, Msgctxt, Msgid, MsgidPlural, N) \ npgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES) #define dcnpgettext(Domainname, Msgctxt, Msgid, MsgidPlural, N, Category) \ npgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, Category) #ifdef __GNUC__ __inline #else #ifdef __cplusplus inline #endif #endif static const char * pgettext_aux (const char *domain, const char *msg_ctxt_id, const char *msgid, int category) { const char *translation = dcgettext (domain, msg_ctxt_id, category); if (translation == msg_ctxt_id) return msgid; else return translation; } #ifdef __GNUC__ __inline #else #ifdef __cplusplus inline #endif #endif static const char * npgettext_aux (const char *domain, const char *msg_ctxt_id, const char *msgid, const char *msgid_plural, unsigned long int n, int category) { const char *translation = dcngettext (domain, msg_ctxt_id, msgid_plural, n, category); if (translation == msg_ctxt_id || translation == msgid_plural) return (n == 1 ? msgid : msgid_plural); else return translation; } /* The same thing extended for non-constant arguments. Here MSGCTXT and MSGID can be arbitrary expressions. But for string literals these macros are less efficient than those above. */ #include <string.h> #define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS \ (((__GNUC__ >= 3 || __GNUG__ >= 2) && !__STRICT_ANSI__) \ /* || __STDC_VERSION__ >= 199901L */ ) #if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS #include <stdlib.h> #endif #define pgettext_expr(Msgctxt, Msgid) \ dcpgettext_expr (NULL, Msgctxt, Msgid, LC_MESSAGES) #define dpgettext_expr(Domainname, Msgctxt, Msgid) \ dcpgettext_expr (Domainname, Msgctxt, Msgid, LC_MESSAGES) #ifdef __GNUC__ __inline #else #ifdef __cplusplus inline #endif #endif static const char * dcpgettext_expr (const char *domain, const char *msgctxt, const char *msgid, int category) { size_t msgctxt_len = strlen (msgctxt) + 1; size_t msgid_len = strlen (msgid) + 1; const char *translation; #if _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS char msg_ctxt_id[msgctxt_len + msgid_len]; #else char buf[1024]; char *msg_ctxt_id = (msgctxt_len + msgid_len <= sizeof (buf) ? buf : (char *) malloc (msgctxt_len + msgid_len)); if (msg_ctxt_id != NULL) #endif { memcpy (msg_ctxt_id, msgctxt, msgctxt_len - 1); msg_ctxt_id[msgctxt_len - 1] = '\004'; memcpy (msg_ctxt_id + msgctxt_len, msgid, msgid_len); translation = dcgettext (domain, msg_ctxt_id, category); #if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS if (msg_ctxt_id != buf) free (msg_ctxt_id); #endif if (translation != msg_ctxt_id) return translation; } return msgid; } #define npgettext_expr(Msgctxt, Msgid, MsgidPlural, N) \ dcnpgettext_expr (NULL, Msgctxt, Msgid, MsgidPlural, N, LC_MESSAGES) #define dnpgettext_expr(Domainname, Msgctxt, Msgid, MsgidPlural, N) \ dcnpgettext_expr (Domainname, Msgctxt, Msgid, MsgidPlural, N, LC_MESSAGES) #ifdef __GNUC__ __inline #else #ifdef __cplusplus inline #endif #endif static const char * dcnpgettext_expr (const char *domain, const char *msgctxt, const char *msgid, const char *msgid_plural, unsigned long int n, int category) { size_t msgctxt_len = strlen (msgctxt) + 1; size_t msgid_len = strlen (msgid) + 1; const char *translation; #if _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS char msg_ctxt_id[msgctxt_len + msgid_len]; #else char buf[1024]; char *msg_ctxt_id = (msgctxt_len + msgid_len <= sizeof (buf) ? buf : (char *) malloc (msgctxt_len + msgid_len)); if (msg_ctxt_id != NULL) #endif { memcpy (msg_ctxt_id, msgctxt, msgctxt_len - 1); msg_ctxt_id[msgctxt_len - 1] = '\004'; memcpy (msg_ctxt_id + msgctxt_len, msgid, msgid_len); translation = dcngettext (domain, msg_ctxt_id, msgid_plural, n, category); #if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS if (msg_ctxt_id != buf) free (msg_ctxt_id); #endif if (!(translation == msg_ctxt_id || translation == msgid_plural)) return translation; } return (n == 1 ? msgid : msgid_plural); } #endif /* _LIBGETTEXT_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/src/detach-darwin.c��������������������������������������������������������������������0000644�0001750�0001750�00000005076�12764623664�016663� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* direvent - directory content watcher daemon Copyright (C) 2012-2016 Sergey Poznyakoff 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. 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 <http://www.gnu.org/licenses/>. */ /* A "post-init" variant of detach(), used on systems where the kqueue state cannot be inherited by the child process (most notably, Darwin). The function first performs a fork, then calls the init function, while still being connected to the controlling terminal and having the first three descriptors inherited from the parent process. If the initialization succeeds, the child sends a SIGUSR1 to the parent, closes the first three descriptors and disconnects itself from the controlling terminal. Otherwise, it exits with a non-zero code. The parent waits until a signal is delivered. It exits successfully if delivered a SIGUSR1, and reports an error otherwise. */ #include "direvent.h" #include <unistd.h> #include <fcntl.h> #include <signal.h> #include <errno.h> #include <stdlib.h> #ifdef HAVE_PATHS_H # include <paths.h> #endif #ifndef _PATH_DEVNULL # define _PATH_DEVNULL "/dev/null" #endif static int lastsig; void catch_signal(int sig) { lastsig = sig; } void waitchild() { while (lastsig == 0) pause(); if (lastsig == SIGUSR1) _exit(0); diag(LOG_CRIT, "failed to install watchers"); exit(1); } int detach(void (*init)()) { static struct sigtab sigtab[] = { { SIGHUP, SIG_IGN }, { SIGCHLD, catch_signal }, { SIGUSR1, catch_signal } }; struct sigaction oldsa[NITEMS(sigtab)]; pid_t pid; int ec; if (sigv_set_tab(NITEMS(sigtab), sigtab, oldsa)) return -1; switch (fork()) { case -1: sigv_restore_tab(NITEMS(sigtab), sigtab, oldsa); return -1; case 0: break; default: waitchild(); } init(); kill(getppid(), SIGUSR1); pid = setsid(); ec = errno; sigv_restore_tab(NITEMS(sigtab), sigtab, oldsa); if (pid == -1) { errno = ec; return -1; } chdir("/"); close(0); close(1); close(2); open(_PATH_DEVNULL, O_RDONLY); open(_PATH_DEVNULL, O_WRONLY); dup(1); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/src/Makefile.am������������������������������������������������������������������������0000644�0001750�0001750�00000002660�12764623664�016035� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of Direvent -*- autoconf -*- # Copyright (C) 2012-2016 Sergey Poznyakoff # # 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. # # 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 <http://www.gnu.org/licenses/>. bin_PROGRAMS=direvent direvent_SOURCES=\ direvent.c\ direvent.h\ cmdline.h\ config.c\ environ.c\ event.c\ fnpat.c\ handler.c\ watcher.c\ progman.c\ sigv.c if DIREVENT_INOTIFY direvent_SOURCES += ev_inotify.c detach-std.c endif if DIREVENT_KQUEUE direvent_SOURCES += ev_kqueue.c if DIREVENT_RFORK direvent_SOURCES += detach-bsd.c else direvent_SOURCES += detach-darwin.c endif endif LDADD=@GRECS_LDADD@ @LIBINTL@ AM_CPPFLAGS=\ @GRECS_INCLUDES@\ -DSYSCONFDIR=\"$(sysconfdir)\"\ -DLOCALEDIR=\"$(localedir)\"\ -DINCLUDE_PATH_ARGS='$(INCLUDE_PATH_ARGS)' BUILT_SOURCES=cmdline.h EXTRA_DIST=cmdline.opt noinst_HEADERS=gettext.h SUFFIXES=.opt .c .h .opt.h: $(AM_V_GEN)m4 -s $(top_srcdir)/@GRECS_SUBDIR@/build-aux/getopt.m4 $< > $@ ��������������������������������������������������������������������������������direvent-5.2/src/cmdline.h��������������������������������������������������������������������������0000644�0001750�0001750�00000021456�13244106153�015550� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#line 424 "../grecs/build-aux/getopt.m4" /* -*- buffer-read-only: t -*- vi: set ro: THIS FILE IS GENERATED AUTOMATICALLY. PLEASE DO NOT EDIT. */ #line 1 "cmdline.opt" #define EX_USAGE 1 #line 79 "cmdline.opt" #line 79 #line 79 #ifdef HAVE_CONFIG_H #line 79 # include <config.h> #line 79 #endif #line 79 #ifdef HAVE_GETOPT_H #line 79 # include <getopt.h> #line 79 #endif #line 79 #include <unistd.h> #line 79 #line 79 #include <grecs.h> #line 79 #include <grecs/opt.h> #line 79 /* Option codes */ #line 79 enum { #line 79 _OPTION_INIT=255, #line 79 #line 79 "cmdline.opt" #line 79 OPTION_USAGE, #line 79 "cmdline.opt" MAX_OPTION #line 79 }; #line 79 #ifdef HAVE_GETOPT_LONG #line 79 static struct option long_options[] = { #line 79 #line 10 "cmdline.opt" #line 10 { "debug", no_argument, 0, 'd' }, #line 25 "cmdline.opt" #line 25 { "facility", required_argument, 0, 'F' }, #line 31 "cmdline.opt" #line 31 { "foreground", no_argument, 0, 'f' }, #line 37 "cmdline.opt" #line 37 { "include-directory", required_argument, 0, 'I' }, #line 43 "cmdline.opt" #line 43 { "self-test", required_argument, 0, 'T' }, #line 49 "cmdline.opt" #line 49 { "pidfile", required_argument, 0, 'P' }, #line 55 "cmdline.opt" #line 55 { "lint", no_argument, 0, 't' }, #line 61 "cmdline.opt" #line 61 { "user", required_argument, 0, 'u' }, #line 71 "cmdline.opt" #line 71 { "config-help", no_argument, 0, 'H' }, #line 79 "cmdline.opt" #line 79 { "help", no_argument, 0, 'h' }, #line 79 "cmdline.opt" #line 79 { "usage", no_argument, 0, OPTION_USAGE }, #line 79 "cmdline.opt" #line 79 { "version", no_argument, 0, 'V' }, #line 79 "cmdline.opt" {0, 0, 0, 0} #line 79 }; #line 79 #endif #line 79 static struct grecs_opthelp opthelp[] = { #line 79 #line 12 "cmdline.opt" #line 12 { #line 12 #ifdef HAVE_GETOPT_LONG #line 12 "-d, --debug", #line 12 #else #line 12 "-d", #line 12 #endif #line 12 NULL, 0, N_("increase debug level") }, #line 18 "cmdline.opt" #line 18 { #line 18 #ifdef HAVE_GETOPT_LONG #line 18 "-l", #line 18 #else #line 18 "-l", #line 18 #endif #line 18 N_("PRIO"), 0, N_("log everything with priority PRIO and higher to the stderr, as well as to the syslog") }, #line 27 "cmdline.opt" #line 27 { #line 27 #ifdef HAVE_GETOPT_LONG #line 27 "-F, --facility", #line 27 #else #line 27 "-F", #line 27 #endif #line 27 N_("NAME"), 0, N_("set syslog facility") }, #line 33 "cmdline.opt" #line 33 { #line 33 #ifdef HAVE_GETOPT_LONG #line 33 "-f, --foreground", #line 33 #else #line 33 "-f", #line 33 #endif #line 33 NULL, 0, N_("remain in foreground") }, #line 39 "cmdline.opt" #line 39 { #line 39 #ifdef HAVE_GETOPT_LONG #line 39 "-I, --include-directory", #line 39 #else #line 39 "-I", #line 39 #endif #line 39 N_("DIR"), 0, N_("add include directory") }, #line 45 "cmdline.opt" #line 45 { #line 45 #ifdef HAVE_GETOPT_LONG #line 45 "-T, --self-test", #line 45 #else #line 45 "-T", #line 45 #endif #line 45 N_("PROG"), 0, N_("self-test mode") }, #line 51 "cmdline.opt" #line 51 { #line 51 #ifdef HAVE_GETOPT_LONG #line 51 "-P, --pidfile", #line 51 #else #line 51 "-P", #line 51 #endif #line 51 N_("FILE"), 0, N_("set PID file") }, #line 57 "cmdline.opt" #line 57 { #line 57 #ifdef HAVE_GETOPT_LONG #line 57 "-t, --lint", #line 57 #else #line 57 "-t", #line 57 #endif #line 57 NULL, 0, N_("check configuration file and exit") }, #line 63 "cmdline.opt" #line 63 { #line 63 #ifdef HAVE_GETOPT_LONG #line 63 "-u, --user", #line 63 #else #line 63 "-u", #line 63 #endif #line 63 N_("USER"), 0, N_("run as this user") }, #line 73 "cmdline.opt" #line 73 { #line 73 #ifdef HAVE_GETOPT_LONG #line 73 "-H, --config-help", #line 73 #else #line 73 "-H", #line 73 #endif #line 73 NULL, 0, N_("show configuration file summary") }, #line 79 "cmdline.opt" #line 79 { NULL, NULL, 0, N_("Other options") }, #line 79 "cmdline.opt" #line 79 { #line 79 #ifdef HAVE_GETOPT_LONG #line 79 "-h, --help", #line 79 #else #line 79 "-h", #line 79 #endif #line 79 NULL, 0, N_("Give this help list") }, #line 79 "cmdline.opt" #line 79 { #line 79 #ifdef HAVE_GETOPT_LONG #line 79 "--usage", #line 79 #else #line 79 "", #line 79 #endif #line 79 NULL, 0, N_("Give a short usage message") }, #line 79 "cmdline.opt" #line 79 { #line 79 #ifdef HAVE_GETOPT_LONG #line 79 "-V, --version", #line 79 #else #line 79 "-V", #line 79 #endif #line 79 NULL, 0, N_("Print program version") }, #line 79 "cmdline.opt" }; #line 3 "cmdline.opt" #line 3 #line 3 static struct grecs_proginfo proginfo = { #line 3 "direvent", /* progname */ #line 3 NULL, /* subcommands */ #line 3 N_("GNU direvent monitors changes in directories"), /* docstring */ #line 3 N_("[CONFIG]"), /* args_doc */ #line 3 opthelp, /* opthelp */ #line 3 sizeof(opthelp)/sizeof(opthelp[0]), /* optcount */ #line 3 NULL, /* print_help_hook */ #line 3 NULL, /* print_version_hook */ #line 3 PACKAGE_NAME, /* package */ #line 3 PACKAGE_VERSION, /* version */ #line 3 NULL, /* license */ #line 3 "2012-2014",/* copyright_year */ #line 3 "Sergey Poznyakoff", /* copyright_holder */ #line 3 NULL, /* *authors */ #line 3 "<" PACKAGE_BUGREPORT ">", /* bug_address */ #line 3 PACKAGE_URL, /* url */ #line 3 NULL /* epilogue */ #line 3 }; #line 3 static struct grecs_node *cmdline_tree; #line 3 #line 3 #line 79 "cmdline.opt" #line 79 static int print_dir(int flag, const char *dir, void *data) { FILE *fp = data; fprintf(fp, "%s\n", dir); return 0; } static void help_hook(FILE *fp) { fprintf(fp, _("The optional CONFIG argument supplies the name of the " "configuration file\n" "to use instead of %s.\n\n"), DEFAULT_CONFFILE); /* TRANSLATORS: %s is one of: inotify, kqueue */ fprintf(fp, _("This direvent uses %s interface.\n\n"), INTERFACE); if (grecs_include_path_count(GRECS_STD_INCLUDE)) { fprintf(fp, _("Include search path:\n")); grecs_foreach_include_dir(GRECS_STD_INCLUDE, print_dir, fp); } else fprintf(fp, _("No include search path.\n")); fprintf(fp, "\n"); } void parse_options(int argc, char *argv[], int *index) { proginfo.print_help_hook = help_hook; #line 111 { #line 111 int c; #line 111 #line 111 optind = 0; #line 111 #ifdef HAVE_GETOPT_LONG #line 111 while ((c = getopt_long(argc, argv, "dl:F:fI:T:P:tu:HhV", #line 111 long_options, NULL)) != EOF) #line 111 #else #line 111 while ((c = getopt(argc, argv, "dl:F:fI:T:P:tu:HhV")) != EOF) #line 111 #endif #line 111 { #line 111 switch (c) #line 111 { #line 111 default: #line 111 exit(EX_USAGE); #line 111 #line 12 "cmdline.opt" case 'd': #line 12 { #line 12 opt_debug_level++; #line 14 break; #line 14 } #line 18 "cmdline.opt" case 'l': #line 18 { #line 18 if (strcmp(optarg, "none") == 0) log_to_stderr = -1; else log_to_stderr = get_priority(optarg); #line 23 break; #line 23 } #line 27 "cmdline.opt" case 'F': #line 27 { #line 27 opt_facility = get_facility(optarg); #line 29 break; #line 29 } #line 33 "cmdline.opt" case 'f': #line 33 { #line 33 opt_foreground++; #line 35 break; #line 35 } #line 39 "cmdline.opt" case 'I': #line 39 { #line 39 grecs_preproc_add_include_dir(optarg); #line 41 break; #line 41 } #line 45 "cmdline.opt" case 'T': #line 45 { #line 45 self_test_prog = optarg; #line 47 break; #line 47 } #line 51 "cmdline.opt" case 'P': #line 51 { #line 51 opt_pidfile = optarg; #line 53 break; #line 53 } #line 57 "cmdline.opt" case 't': #line 57 { #line 57 lint_only = 1; #line 59 break; #line 59 } #line 63 "cmdline.opt" case 'u': #line 63 { #line 63 opt_user = optarg; if (!getpwnam(opt_user)) { diag(LOG_CRIT, "no such user: %s", opt_user); exit(1); } #line 69 break; #line 69 } #line 73 "cmdline.opt" case 'H': #line 73 { #line 73 config_help(); exit(0); #line 76 break; #line 76 } #line 79 "cmdline.opt" case 'h': #line 79 { #line 79 #line 79 grecs_print_help(&proginfo); #line 79 exit(0); #line 79 #line 79 break; #line 79 } #line 79 "cmdline.opt" case OPTION_USAGE: #line 79 { #line 79 #line 79 grecs_print_usage(&proginfo); #line 79 exit(0); #line 79 #line 79 break; #line 79 } #line 79 "cmdline.opt" case 'V': #line 79 { #line 79 #line 79 /* Give version */ #line 79 grecs_print_version(&proginfo, stdout); #line 79 exit(0); #line 79 #line 79 break; #line 79 } #line 111 "cmdline.opt" } #line 111 } #line 111 #line 111 *index = optind; #line 111 if (cmdline_tree) #line 111 { #line 111 struct grecs_node *rn = grecs_node_create(grecs_node_root, NULL); #line 111 rn->down = cmdline_tree; #line 111 cmdline_tree = rn; #line 111 } #line 111 } #line 111 } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/src/config.c���������������������������������������������������������������������������0000644�0001750�0001750�00000037741�12764623664�015422� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* direvent - directory content watcher daemon Copyright (C) 2012-2016 Sergey Poznyakoff 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. 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 <http://www.gnu.org/licenses/>. */ #include "direvent.h" #include <grecs.h> #include <pwd.h> #include <grp.h> static struct transtab kwpri[] = { { "emerg", LOG_EMERG }, { "alert", LOG_ALERT }, { "crit", LOG_CRIT }, { "err", LOG_ERR }, { "warning", LOG_WARNING }, { "notice", LOG_NOTICE }, { "info", LOG_INFO }, { "debug", LOG_DEBUG }, { NULL } }; static struct transtab kwfac[] = { { "user", LOG_USER }, { "daemon", LOG_DAEMON }, { "auth", LOG_AUTH }, { "authpriv",LOG_AUTHPRIV }, { "mail", LOG_MAIL }, { "cron", LOG_CRON }, { "local0", LOG_LOCAL0 }, { "local1", LOG_LOCAL1 }, { "local2", LOG_LOCAL2 }, { "local3", LOG_LOCAL3 }, { "local4", LOG_LOCAL4 }, { "local5", LOG_LOCAL5 }, { "local6", LOG_LOCAL6 }, { "local7", LOG_LOCAL7 }, { NULL } }; int get_facility(const char *arg) { int f; char *p; errno = 0; f = strtoul (arg, &p, 0); if (*p == 0 && errno == 0) return f; if (trans_strtotok(kwfac, arg, &f)) { diag(LOG_CRIT, _("unknown syslog facility: %s"), arg); exit(1); } return f; } int get_priority(const char *arg) { int f; char *p; errno = 0; f = strtoul (arg, &p, 0); if (*p == 0 && errno == 0) return f; if (trans_strtotok(kwpri, arg, &f)) { diag(LOG_CRIT, _("unknown syslog priority: %s"), arg); exit(1); } return f; } #define ASSERT_SCALAR(cmd, locus) \ if ((cmd) != grecs_callback_set_value) { \ grecs_error(locus, 0, _("unexpected block statement")); \ return 1; \ } int assert_grecs_value_type(grecs_locus_t *locus, const grecs_value_t *value, int type) { if (GRECS_VALUE_EMPTY_P(value)) { grecs_error(locus, 0, _("expected %s"), grecs_data_type_string(type)); return 1; } if (value->type != type) { grecs_error(locus, 0, _("expected %s, but found %s"), grecs_data_type_string(type), grecs_data_type_string(value->type)); return 1; } return 0; } static int cb_syslog_facility(enum grecs_callback_command cmd, grecs_node_t *node, void *varptr, void *cb_data) { grecs_locus_t *locus = &node->locus; grecs_value_t *value = node->v.value; int fac; ASSERT_SCALAR(cmd, locus); if (assert_grecs_value_type(&value->locus, value, GRECS_TYPE_STRING)) return 1; if (trans_strtotok(kwfac, value->v.string, &fac)) grecs_error(&value->locus, 0, _("unknown syslog facility `%s'"), value->v.string); else *(int*)varptr = fac; return 0; } static struct grecs_keyword syslog_kw[] = { { "facility", N_("name"), N_("Set syslog facility. Arg is one of the following: user, daemon, " "auth, authpriv, mail, cron, local0 through local7 " "(case-insensitive), or a facility number."), grecs_type_string, GRECS_DFLT, &facility, 0, cb_syslog_facility }, { "tag", N_("string"), N_("Tag syslog messages with this string"), grecs_type_string, GRECS_DFLT, &tag }, { "print-priority", N_("arg"), N_("Prefix each message with its priority"), grecs_type_bool, GRECS_DFLT, &syslog_include_prio }, { NULL }, }; struct eventconf { struct grecs_list *pathlist; event_mask ev_mask; filpatlist_t fpat; struct prog_handler prog_handler; }; static struct eventconf eventconf; static void eventconf_init(void) { memset(&eventconf, 0, sizeof eventconf); eventconf.prog_handler.timeout = DEFAULT_TIMEOUT; } static void eventconf_free(void) { grecs_list_free(eventconf.pathlist); prog_handler_free(&eventconf.prog_handler); filpatlist_destroy(&eventconf.fpat); } void eventconf_flush(grecs_locus_t *loc) { struct grecs_list_entry *ep; struct handler *hp = prog_handler_alloc(eventconf.ev_mask, eventconf.fpat, &eventconf.prog_handler); for (ep = eventconf.pathlist->head; ep; ep = ep->next) { struct pathent *pe = ep->data; struct watchpoint *wpt; int isnew; wpt = watchpoint_install(pe->path, &isnew); if (!wpt) abort(); if (!isnew && wpt->depth != pe->depth) grecs_error(loc, 0, _("%s: recursion depth does not match previous definition"), pe->path); wpt->depth = pe->depth; handler_list_append(wpt->handler_list, hp); } grecs_list_free(eventconf.pathlist); eventconf_init(); } static int cb_watcher(enum grecs_callback_command cmd, grecs_node_t *node, void *varptr, void *cb_data) { int err = 0; switch (cmd) { case grecs_callback_section_begin: eventconf_init(); break; case grecs_callback_section_end: if (!eventconf.pathlist) { grecs_error(&node->locus, 0, _("no paths configured")); ++err; } if (!eventconf.prog_handler.command) { grecs_error(&node->locus, 0, _("no command configured")); ++err; } if (evtnullp(&eventconf.ev_mask)) evtsetall(&eventconf.ev_mask); if (err == 0) eventconf_flush(&node->locus); else eventconf_free(); break; case grecs_callback_set_value: grecs_error(&node->locus, 0, _("invalid use of block statement")); } return 0; } static struct pathent * pathent_alloc(char *s, long depth) { size_t len = strlen(s); struct pathent *p = emalloc(sizeof(*p) + len); p->len = len; strcpy(p->path, s); p->depth = depth; return p; } static int cb_path(enum grecs_callback_command cmd, grecs_node_t *node, void *varptr, void *cb_data) { grecs_locus_t *locus = &node->locus; grecs_value_t *val = node->v.value; struct grecs_list **lpp = varptr, *lp; struct pathent *pe; char *s; long depth = 0; ASSERT_SCALAR(cmd, locus); switch (val->type) { case GRECS_TYPE_STRING: s = val->v.string; break; case GRECS_TYPE_ARRAY: if (assert_grecs_value_type(&val->v.arg.v[0]->locus, val->v.arg.v[0], GRECS_TYPE_STRING)) return 1; if (assert_grecs_value_type(&val->v.arg.v[1]->locus, val->v.arg.v[1], GRECS_TYPE_STRING)) return 1; if (strcmp(val->v.arg.v[1]->v.string, "recursive")) { grecs_error(&val->v.arg.v[1]->locus, 0, _("expected \"recursive\" or end of statement")); return 1; } switch (val->v.arg.c) { case 2: depth = -1; break; case 3: if (grecs_string_convert(&depth, grecs_type_long, val->v.arg.v[2]->v.string, &val->v.arg.v[2]->locus)) return 1; break; default: grecs_error(&val->v.arg.v[3]->locus, 0, _("surplus argument")); return 1; } s = val->v.arg.v[0]->v.string; break; case GRECS_TYPE_LIST: grecs_error(locus, 0, _("unexpected list")); return 1; } pe = pathent_alloc(s, depth); if (*lpp) lp = *lpp; else { lp = _grecs_simple_list_create(1); *lpp = lp; } grecs_list_append(lp, pe); return 0; } static int cb_eventlist(enum grecs_callback_command cmd, grecs_node_t *node, void *varptr, void *cb_data) { grecs_locus_t *locus = &node->locus; grecs_value_t *val = node->v.value; event_mask *mask = varptr; event_mask m; struct grecs_list_entry *ep; int i; ASSERT_SCALAR(cmd, locus); switch (val->type) { case GRECS_TYPE_STRING: if (getevt(val->v.string, &m)) { grecs_error(&val->locus, 0, _("unrecognized event code")); return 1; } mask->gen_mask |= m.gen_mask; mask->sys_mask |= m.sys_mask; break; case GRECS_TYPE_ARRAY: for (i = 0; i < val->v.arg.c; i++) { if (assert_grecs_value_type(&val->v.arg.v[i]->locus, val->v.arg.v[i], GRECS_TYPE_STRING)) return 1; if (getevt(val->v.arg.v[i]->v.string, &m)) { grecs_error(&val->v.arg.v[i]->locus, 0, _("unrecognized event code")); return 1; } mask->gen_mask |= m.gen_mask; mask->sys_mask |= m.sys_mask; } break; case GRECS_TYPE_LIST: for (ep = val->v.list->head; ep; ep = ep->next) { grecs_value_t *vp = ep->data; if (assert_grecs_value_type(&vp->locus, vp, GRECS_TYPE_STRING)) return 1; if (getevt(vp->v.string, &m)) { grecs_error(&vp->locus, 0, _("unrecognized event code")); return 1; } mask->gen_mask |= m.gen_mask; mask->sys_mask |= m.sys_mask; } break; } return 0; } static int membergid(gid_t gid, size_t gc, gid_t *gv) { int i; for (i = 0; i < gc; i++) if (gv[i] == gid) return 1; return 0; } static void get_user_groups(char *user, gid_t gid, size_t *pgidc, gid_t **pgidv) { size_t gidc = 0, n = 0; gid_t *gidv = NULL; struct group *gr; n = 32; gidv = emalloc(n * sizeof(gidv[0])); gidv[0] = gid; gidc = 1; setgrent(); while (gr = getgrent()) { char **p; for (p = gr->gr_mem; *p; p++) if (strcmp(*p, user) == 0) { if (n == gidc) { n += 32; gidv = erealloc(gidv, n * sizeof(gidv[0])); } if (!membergid(gr->gr_gid, gidc, gidv)) gidv[gidc++] = gr->gr_gid; } } endgrent(); *pgidc = gidc; *pgidv = gidv; } static int cb_user(enum grecs_callback_command cmd, grecs_node_t *node, void *varptr, void *cb_data) { grecs_locus_t *locus = &node->locus; grecs_value_t *val = node->v.value; struct passwd *pw; struct group *gr; grecs_value_t *uv, *gv = NULL; gid_t gid; ASSERT_SCALAR(cmd, locus); switch (val->type) { case GRECS_TYPE_STRING: uv = val; break; case GRECS_TYPE_ARRAY: if (assert_grecs_value_type(&val->v.arg.v[0]->locus, val->v.arg.v[0], GRECS_TYPE_STRING)) return 1; if (assert_grecs_value_type(&val->v.arg.v[1]->locus, val->v.arg.v[1], GRECS_TYPE_STRING)) return 1; if (val->v.arg.c > 2) { grecs_locus_t loc; loc.beg = val->v.arg.v[2]->locus.beg; loc.end = val->v.arg.v[val->v.arg.c - 1]->locus.end; grecs_error(&loc, 0, _("surplus arguments")); return 1; } uv = val->v.arg.v[0]; gv = val->v.arg.v[1]; break; case GRECS_TYPE_LIST: grecs_error(locus, 0, _("unexpected list")); return 1; } pw = getpwnam(uv->v.string); if (!pw) { grecs_error(&uv->locus, 0, _("no such user")); return 1; } if (gv) { gr = getgrnam(gv->v.string); if (!gr) { grecs_error(&gv->locus, 0, _("no such group")); return 1; } gid = gr->gr_gid; } else gid = pw->pw_gid; eventconf.prog_handler.uid = pw->pw_uid; get_user_groups(uv->v.string, gid, &eventconf.prog_handler.gidc, &eventconf.prog_handler.gidv); return 0; } static int cb_option(enum grecs_callback_command cmd, grecs_node_t *node, void *varptr, void *cb_data) { grecs_locus_t *locus = &node->locus; grecs_value_t *val = node->v.value; struct grecs_list_entry *ep; ASSERT_SCALAR(cmd, locus); if (assert_grecs_value_type(&val->locus, val, GRECS_TYPE_LIST)) return 1; for (ep = val->v.list->head; ep; ep = ep->next) { grecs_value_t *vp = ep->data; if (assert_grecs_value_type(&vp->locus, vp, GRECS_TYPE_STRING)) return 1; if (strcmp(vp->v.string, "nowait") == 0) eventconf.prog_handler.flags |= HF_NOWAIT; else if (strcmp(vp->v.string, "wait") == 0) eventconf.prog_handler.flags &= ~HF_NOWAIT; else if (strcmp(vp->v.string, "stdout") == 0) eventconf.prog_handler.flags |= HF_STDOUT; else if (strcmp(vp->v.string, "stderr") == 0) eventconf.prog_handler.flags |= HF_STDERR; else if (strcmp(vp->v.string, "shell") == 0) eventconf.prog_handler.flags |= HF_SHELL; else grecs_error(&vp->locus, 0, _("unrecognized option")); } return 0; } static int cb_environ(enum grecs_callback_command cmd, grecs_node_t *node, void *varptr, void *cb_data) { grecs_locus_t *locus = &node->locus; grecs_value_t *val = node->v.value; struct grecs_list_entry *ep; int i, j; ASSERT_SCALAR(cmd, locus); switch (val->type) { case GRECS_TYPE_STRING: if (assert_grecs_value_type(&val->locus, val, GRECS_TYPE_STRING)) return 1; i = prog_handler_envrealloc(&eventconf.prog_handler, 1); eventconf.prog_handler.env[i] = estrdup(val->v.string); eventconf.prog_handler.env[i+1] = NULL; break; case GRECS_TYPE_ARRAY: j = prog_handler_envrealloc(&eventconf.prog_handler, val->v.arg.c); for (i = 0; i < val->v.arg.c; i++, j++) { if (assert_grecs_value_type(&val->v.arg.v[i]->locus, val->v.arg.v[i], GRECS_TYPE_STRING)) return 1; eventconf.prog_handler.env[j] = estrdup(val->v.arg.v[i]->v.string); } eventconf.prog_handler.env[j] = NULL; break; case GRECS_TYPE_LIST: j = prog_handler_envrealloc(&eventconf.prog_handler, val->v.list->count); for (ep = val->v.list->head; ep; ep = ep->next, j++) { grecs_value_t *vp = ep->data; if (assert_grecs_value_type(&vp->locus, vp, GRECS_TYPE_STRING)) return 1; eventconf.prog_handler.env[j] = estrdup(vp->v.string); } eventconf.prog_handler.env[j] = NULL; } return 0; } static int file_name_pattern(filpatlist_t *fptr, grecs_value_t *val) { if (assert_grecs_value_type(&val->locus, val, GRECS_TYPE_STRING)) return 1; return filpatlist_add(fptr, val->v.string, &val->locus); } static int cb_file_pattern(enum grecs_callback_command cmd, grecs_node_t *node, void *varptr, void *cb_data) { grecs_value_t *val = node->v.value; filpatlist_t *fpat = varptr; struct grecs_list_entry *ep; int i; ASSERT_SCALAR(cmd, &node->locus); switch (val->type) { case GRECS_TYPE_STRING: file_name_pattern(fpat, val); break; case GRECS_TYPE_ARRAY: for (i = 0; i < val->v.arg.c; i++) if (file_name_pattern(fpat, val->v.arg.v[i])) break; break; case GRECS_TYPE_LIST: for (ep = val->v.list->head; ep; ep = ep->next) if (file_name_pattern(fpat, (grecs_value_t *) ep->data)) break; break; } return 0; } static struct grecs_keyword watcher_kw[] = { { "path", NULL, N_("Pathname to watch"), grecs_type_string, GRECS_DFLT, &eventconf.pathlist, 0, cb_path }, { "event", NULL, N_("Events to watch for"), grecs_type_string, GRECS_LIST, &eventconf.ev_mask, 0, cb_eventlist }, { "file", N_("regexp"), N_("Files to watch for"), grecs_type_string, GRECS_LIST, &eventconf.fpat, 0, cb_file_pattern }, { "command", NULL, N_("Command to execute on event"), grecs_type_string, GRECS_DFLT, &eventconf.prog_handler.command }, { "user", N_("name"), N_("Run command as this user"), grecs_type_string, GRECS_DFLT, NULL, 0, cb_user }, { "timeout", N_("seconds"), N_("Timeout for the command"), grecs_type_uint, GRECS_DFLT, &eventconf.prog_handler.timeout }, { "option", NULL, N_("List of additional options"), grecs_type_string, GRECS_LIST, NULL, 0, cb_option }, { "environ", N_("<arg: string> <arg: string>..."), N_("Modify environment"), grecs_type_string, GRECS_DFLT, NULL, 0, cb_environ }, { NULL } }; static struct grecs_keyword direvent_kw[] = { { "user", NULL, N_("Run as this user"), grecs_type_string, GRECS_DFLT, &user }, { "foreground", NULL, N_("Run in foreground"), grecs_type_bool, GRECS_DFLT, &foreground }, { "pidfile", N_("file"), N_("Set pid file name"), grecs_type_string, GRECS_DFLT, &pidfile }, { "syslog", NULL, N_("Configure syslog logging"), grecs_type_section, GRECS_DFLT, NULL, 0, NULL, NULL, syslog_kw }, { "debug", N_("level"), N_("Set debug level"), grecs_type_int, GRECS_DFLT, &debug_level }, { "watcher", NULL, N_("Configure event watcher"), grecs_type_section, GRECS_DFLT, NULL, 0, cb_watcher, NULL, watcher_kw }, { NULL } }; void config_help() { static char docstring[] = N_("Configuration file structure for direvent.\n" "For more information, use `info direvent configuration'."); grecs_print_docstring(docstring, 0, stdout); grecs_print_statement_array(direvent_kw, 1, 0, stdout); } void config_init(void) { grecs_include_path_setup(INCLUDE_PATH_ARGS, NULL); } void config_parse(char const *conffile) { struct grecs_node *tree; grecs_parser_options = GRECS_OPTION_QUOTED_STRING_CONCAT; tree = grecs_parse(conffile); if (!tree) exit(1); if (grecs_tree_process(tree, direvent_kw)) exit(1); } �������������������������������direvent-5.2/src/fnpat.c����������������������������������������������������������������������������0000644�0001750�0001750�00000006751�12764623664�015262� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* direvent - directory content watcher daemon Copyright (C) 2012-2016 Sergey Poznyakoff 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. 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 <http://www.gnu.org/licenses/>. */ #include "direvent.h" #include <fnmatch.h> #include <grecs.h> static void filename_pattern_free(void *p) { struct filename_pattern *pat = p; switch (pat->type) { case PAT_EXACT: case PAT_GLOB: free(pat->v.glob); break; case PAT_REGEX: regfree(&pat->v.re); } free(pat); } struct filpatlist { grecs_list_ptr_t list; }; static int is_glob(char const *str) { return strcspn(str, "[]*?") < strlen(str); } void filpatlist_add_pattern(filpatlist_t *fptr, struct filename_pattern *pat) { grecs_list_ptr_t list; if (!*fptr) { *fptr = emalloc(sizeof(*fptr)); (*fptr)->list = grecs_list_create(); (*fptr)->list->free_entry = filename_pattern_free; } list = (*fptr)->list; grecs_list_append(list, pat); } void filpatlist_add_exact(filpatlist_t *fptr, char const *arg) { struct filename_pattern *pat = emalloc(sizeof(*pat)); pat->neg = 0; pat->type = PAT_EXACT; pat->v.glob = estrdup(arg); filpatlist_add_pattern(fptr, pat); } int filpatlist_add(filpatlist_t *fptr, char const *arg, grecs_locus_t *loc) { int flags = REG_EXTENDED|REG_NOSUB; struct filename_pattern *pat; pat = emalloc(sizeof(*pat)); if (*arg == '!') { pat->neg = 1; ++arg; } else pat->neg = 0; if (arg[0] == '/') { int rc; char *q, *p; pat->type = PAT_REGEX; p = strchr(arg+1, '/'); if (!p) { grecs_error(loc, 0, _("unterminated regexp")); free(pat); return 1; } for (q = p + 1; *q; q++) { switch (*q) { case 'b': flags &= ~REG_EXTENDED; break; case 'i': flags |= REG_ICASE; break; default: grecs_error(loc, 0, _("unrecognized flag: %c"), *q); free(pat); return 1; } } *p = 0; rc = regcomp(&pat->v.re, arg + 1, flags); *p = '/'; if (rc) { char errbuf[128]; regerror(rc, &pat->v.re, errbuf, sizeof(errbuf)); grecs_error(loc, 0, "%s", errbuf); filename_pattern_free(pat); return 1; } } else { pat->type = is_glob(arg) ? PAT_GLOB : PAT_EXACT; pat->v.glob = estrdup(arg); } filpatlist_add_pattern(fptr, pat); return 0; } void filpatlist_destroy(filpatlist_t *fptr) { if (fptr && *fptr) { grecs_list_free((*fptr)->list); free(*fptr); *fptr = NULL; } } int filpatlist_is_empty(filpatlist_t fp) { if (!fp) return 1; return grecs_list_size(fp->list) == 0; } int filpatlist_match(filpatlist_t fp, const char *name) { struct grecs_list_entry *ep; if (!fp || !fp->list) return 0; for (ep = fp->list->head; ep; ep = ep->next) { struct filename_pattern *pat = ep->data; int rc; switch (pat->type) { case PAT_EXACT: rc = strcmp(pat->v.glob, name); break; case PAT_GLOB: rc = fnmatch(pat->v.glob, name, FNM_PATHNAME); break; case PAT_REGEX: rc = regexec(&pat->v.re, name, 0, NULL, 0); break; } if (pat->neg) rc = !rc; if (rc == 0) return 0; } return 1; } �����������������������direvent-5.2/src/environ.c��������������������������������������������������������������������������0000644�0001750�0001750�00000012611�12764623664�015622� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* direvent - directory content watcher daemon Copyright (C) 2012-2016 Sergey Poznyakoff 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. 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 <http://www.gnu.org/licenses/>. */ #include "direvent.h" #include "wordsplit.h" #include <ctype.h> extern char **environ; /* Environment */ #define DEBUG_ENVIRON(l,env) do { \ if (debug_level >= (l)) { \ diag(LOG_DEBUG, _("environment: ")); \ for (i = 0; (env)[i]; i++) \ diag(LOG_DEBUG, "%s ", (env)[i]); \ diag(LOG_DEBUG, "\n"); \ } \ } while (0) static int find_env_pos(char **env, char *name, size_t *idx, size_t *valoff) { size_t nlen = strcspn(name, "+="); size_t i; for (i = 0; env[i]; i++) { size_t elen = strcspn(env[i], "="); if (elen == nlen && memcmp(name, env[i], nlen) == 0) { if (idx) *idx = i; if (valoff) *valoff = elen + 1; return 0; } } return -1; } static char * find_env_ptr(char **env, char *name, int val) { size_t i, j; if (find_env_pos(env, name, &i, &j)) return NULL; return val ? env[i] + j : env[i]; } static int var_is_unset(char **env, const char *name) { int i; int nlen = strcspn(name, "="); for (i = 0; env[i]; i++) { if (env[i][0] == '-') { size_t elen = strcspn(env[i] + 1, "="); if (elen == nlen && memcmp(name, env[i] + 1, nlen) == 0) { if (env[i][nlen + 1]) return strcmp(name + nlen, env[i] + 1 + nlen) == 0; else return 1; } } } return 0; } static char * env_concat(const char *name, size_t namelen, const char *a, const char *b) { char *res; size_t len; if (a && b) { res = emalloc(namelen + 1 + strlen(a) + strlen(b) + 1); strcpy(res + namelen + 1, a); strcat(res + namelen + 1, b); } else if (a) { len = strlen(a); if (ispunct(a[len-1])) len--; res = emalloc(namelen + 1 + len + 1); memcpy(res + namelen + 1, a, len); res[namelen + 1 + len] = 0; } else { /* if (a == NULL) */ if (ispunct(b[0])) b++; len = strlen(b); res = emalloc(namelen + 1 + len + 1); strcpy(res + namelen + 1, b); } memcpy(res, name, namelen); res[namelen] = '='; return res; } static char *defenv[] = { "DIREVENT_SYSEV_CODE=${sysev_code}", "DIREVENT_SYSEV_NAME=${sysev_name}", "DIREVENT_GENEV_CODE=${genev_code}", "DIREVENT_GENEV_NAME=${genev_name}", "DIREVENT_FILE=${file}", NULL }; char ** environ_setup(char **hint, char **kve) { char *empty[1] = { NULL }; char **old_env = environ; char **new_env; char **addenv = defenv; char *var; size_t count, i, j, n; struct wordsplit ws; int wsflags = WRDSF_NOCMD | WRDSF_QUOTE | WRDSF_NOSPLIT | WRDSF_ENV | WRDSF_ENV_KV; ws.ws_env = (const char **) kve; if (!hint) hint = empty; else if (strcmp(hint[0], "-") == 0 || strcmp(hint[0], "--") == 0) { old_env = NULL; if (hint[0][1] == '-') addenv = empty; hint++; } /* Count new environment size */ count = 0; if (old_env) for (i = 0; old_env[i]; i++) count++; for (i = 0; addenv[i]; i++) count++; for (i = 0; hint[i]; i++) count++; if (self_test_pid) count++; /* Allocate new environment. */ new_env = ecalloc(count + 1, sizeof new_env[0]); /* Populate the environment. */ n = 0; if (old_env) for (i = 0; old_env[i]; i++) { if (!var_is_unset(hint, old_env[i])) new_env[n++] = old_env[i]; } for (i = 0; addenv[i]; i++) if (!var_is_unset(hint, addenv[i])) { if (wordsplit(addenv[i], &ws, wsflags)) { diag(LOG_CRIT, "wordsplit: %s", wordsplit_strerror(&ws)); _exit(127); } wsflags |= WRDSF_REUSE; new_env[n++] = estrdup(ws.ws_wordv[0]); } for (i = 0; hint[i]; i++) { char *p; if (hint[i][0] == '-') { /* Skip unset directives. */ continue; } if (wordsplit(hint[i], &ws, wsflags)) { diag(LOG_CRIT, "wordsplit: %s", wordsplit_strerror(&ws)); _exit(127); } wsflags |= WRDSF_REUSE; var = ws.ws_wordv[0]; /* Find the slot for the variable. Use next available slot if there's no such variable in new_env */ if (find_env_pos(new_env, hint[i], &j, NULL)) j = n; if ((p = strchr(var, '='))) { if (p == var) continue; /* Ignore erroneous entry */ if (p[-1] == '+') new_env[j] = env_concat(var, p - var - 1, find_env_ptr(environ, var, 1), p + 1); else if (p[1] == '+') new_env[j] = env_concat(var, p - var, p + 2, find_env_ptr(environ, var, 1)); else new_env[j] = estrdup(var); } else if ((p = find_env_ptr(environ, hint[i], 0))) new_env[j] = p; else continue; /* Adjust environment size */ if (j == n) ++n; } if (self_test_pid) { char buf[512]; snprintf(buf, sizeof buf, "DIREVENT_SELF_TEST_PID=%lu", (unsigned long)self_test_pid); new_env[n++] = estrdup(buf);; } new_env[n] = NULL; if (wsflags & WRDSF_REUSE) wordsplit_free(&ws); return new_env; } �����������������������������������������������������������������������������������������������������������������������direvent-5.2/src/handler.c��������������������������������������������������������������������������0000644�0001750�0001750�00000011117�12764623664�015557� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* direvent - directory content watcher daemon Copyright (C) 2012-2016 Sergey Poznyakoff 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. 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 <http://www.gnu.org/licenses/>. */ #include "direvent.h" #include <grecs.h> struct handler * handler_alloc(event_mask ev_mask) { struct handler *hp = ecalloc(1, sizeof(*hp)); hp->refcnt = 0; hp->ev_mask = ev_mask; return hp; } void watchpoint_run_handlers(struct watchpoint *wp, int evflags, const char *dirname, const char *filename) { handler_iterator_t itr; struct handler *hp; event_mask m; for_each_handler(wp, itr, hp) { if (handler_matches_event(hp, sys, evflags, filename)) hp->run(wp, event_mask_init(&m, evflags, &hp->ev_mask), dirname, filename, hp->data); } } static void handler_ref(struct handler *hp) { ++hp->refcnt; } void handler_free(struct handler *hp) { filpatlist_destroy(&hp->fnames); if (hp->free) hp->free(hp->data); } static void handler_unref(struct handler *hp) { if (hp && --hp->refcnt) { handler_free(hp); free(hp); } } /* Handler lists */ static void handler_listent_free(void *p) { struct handler *hp = p; handler_unref(hp); } struct handler_list { size_t refcnt; grecs_list_ptr_t list; struct handler_iterator *itr_chain; }; struct handler_iterator { struct handler_iterator *prev, *next; handler_list_t hlist; struct grecs_list_entry *ent; int advanced; }; static struct handler_iterator *itr_avail; struct handler * handler_itr_first(struct watchpoint *wpt, handler_iterator_t *ret_itr) { struct handler_iterator *itr; if (!wpt->handler_list) return NULL; if (itr_avail) { itr = itr_avail; itr_avail = itr->next; if (itr_avail) itr_avail->prev = NULL; } else itr = emalloc(sizeof *itr); itr->prev = NULL; itr->next = wpt->handler_list->itr_chain; itr->hlist = wpt->handler_list; if (wpt->handler_list->itr_chain) wpt->handler_list->itr_chain->prev = itr; wpt->handler_list->itr_chain = itr; itr->ent = wpt->handler_list->list->head; itr->advanced = 0; *ret_itr = itr; return handler_itr_current(itr); } struct handler * handler_itr_next(handler_iterator_t *pitr) { struct handler_iterator *itr; if (!pitr || (itr = *pitr) == NULL) return NULL; if (itr->advanced) itr->advanced = 0; else itr->ent = itr->ent->next; if (!itr->ent) { /* Remove from iterator chain */ struct handler_iterator *p; if ((p = itr->prev) != NULL) p->next = itr->next; else itr->hlist->itr_chain = itr->next; if ((p = itr->next) != NULL) p->prev = itr->prev; /* Add to the available chain */ if (itr_avail) itr_avail->prev = itr; itr->prev = NULL; itr->next = itr_avail; itr->hlist = NULL; itr_avail = itr; *pitr = NULL; return NULL; } return handler_itr_current(itr); } struct handler * handler_itr_current(handler_iterator_t itr) { if (!itr) return NULL; return itr->ent ? itr->ent->data : NULL; } handler_list_t handler_list_create(void) { handler_list_t hlist = emalloc(sizeof(*hlist)); hlist->list = grecs_list_create(); hlist->list->free_entry = handler_listent_free; hlist->refcnt = 1; hlist->itr_chain = NULL; return hlist; } size_t handler_list_size(handler_list_t hlist) { return grecs_list_size(hlist->list); } handler_list_t handler_list_copy(handler_list_t orig) { if (!orig) return handler_list_create(); ++orig->refcnt; return orig; } void handler_list_unref(handler_list_t hlist) { if (hlist) { if (--hlist->refcnt == 0) { grecs_list_free(hlist->list); free(hlist); } } } void handler_list_append(handler_list_t hlist, struct handler *hp) { handler_ref(hp); grecs_list_append(hlist->list, hp); } size_t handler_list_remove(handler_list_t hlist, struct handler *hp) { struct grecs_list_entry *ep; for (ep = hlist->list->head; ep; ep = ep->next) if (ep->data == hp) break; if (!ep) abort(); if (hlist->itr_chain) { struct handler_iterator *itr; for (itr = hlist->itr_chain; itr; itr = itr->next) if (itr->ent == ep) { itr->ent = ep->next; itr->advanced = 1; } } grecs_list_remove_entry(hlist->list, ep); return grecs_list_size(hlist->list); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/src/sigv.c�����������������������������������������������������������������������������0000644�0001750�0001750�00000003671�12764623664�015120� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* direvent - directory content watcher daemon Copyright (C) 2012-2016 Sergey Poznyakoff 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. 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 <http://www.gnu.org/licenses/>. */ #include "direvent.h" int sigv_set_action(int sigc, int *sigv, struct sigaction *sa) { int i; for (i = 0; i < sigc; i++) { if (sigaction(sigv[i], &sa[i], NULL)) return i+1; } return 0; } int sigv_restore_tab(int sigc, struct sigtab *sigtab, struct sigaction *sa) { int i; for (i = 0; i < sigc; i++) { if (sigaction(sigtab[i].signo, &sa[i], NULL)) return i+1; } return 0; } int sigv_set_all(void (*handler)(int), int sigc, int *sigv, struct sigaction *retsa) { int i; struct sigaction sa; sigemptyset(&sa.sa_mask); sa.sa_flags = 0; for (i = 0; i < sigc; i++) { sa.sa_handler = handler; if (sigaction(sigv[i], &sa, retsa ? &retsa[i] : NULL)) { if (retsa) { int ec = errno; sigv_set_action(i, sigv, retsa); errno = ec; } return -1; } } return 0; } int sigv_set_tab(int sigc, struct sigtab *sigtab, struct sigaction *retsa) { int i; struct sigaction sa; sigemptyset(&sa.sa_mask); sa.sa_flags = 0; for (i = 0; i < sigc; i++) { sa.sa_handler = sigtab[i].sigfun; if (sigaction(sigtab[i].signo, &sa, retsa ? &retsa[i] : NULL)) { if (retsa) { int ec = errno; sigv_restore_tab(i, sigtab, retsa); errno = ec; } return -1; } } return 0; } �����������������������������������������������������������������������direvent-5.2/src/Makefile.in������������������������������������������������������������������������0000644�0001750�0001750�00000055227�13512402623�016033� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 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 Direvent -*- autoconf -*- # Copyright (C) 2012-2016 Sergey Poznyakoff # # 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. # # 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 <http://www.gnu.org/licenses/>. 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@ bin_PROGRAMS = direvent$(EXEEXT) @DIREVENT_INOTIFY_TRUE@am__append_1 = ev_inotify.c detach-std.c @DIREVENT_KQUEUE_TRUE@am__append_2 = ev_kqueue.c @DIREVENT_KQUEUE_TRUE@@DIREVENT_RFORK_TRUE@am__append_3 = detach-bsd.c @DIREVENT_KQUEUE_TRUE@@DIREVENT_RFORK_FALSE@am__append_4 = detach-darwin.c subdir = src 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)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) am__direvent_SOURCES_DIST = direvent.c direvent.h cmdline.h config.c \ environ.c event.c fnpat.c handler.c watcher.c progman.c sigv.c \ ev_inotify.c detach-std.c ev_kqueue.c detach-bsd.c \ detach-darwin.c @DIREVENT_INOTIFY_TRUE@am__objects_1 = ev_inotify.$(OBJEXT) \ @DIREVENT_INOTIFY_TRUE@ detach-std.$(OBJEXT) @DIREVENT_KQUEUE_TRUE@am__objects_2 = ev_kqueue.$(OBJEXT) @DIREVENT_KQUEUE_TRUE@@DIREVENT_RFORK_TRUE@am__objects_3 = detach-bsd.$(OBJEXT) @DIREVENT_KQUEUE_TRUE@@DIREVENT_RFORK_FALSE@am__objects_4 = detach-darwin.$(OBJEXT) am_direvent_OBJECTS = direvent.$(OBJEXT) config.$(OBJEXT) \ environ.$(OBJEXT) event.$(OBJEXT) fnpat.$(OBJEXT) \ handler.$(OBJEXT) watcher.$(OBJEXT) progman.$(OBJEXT) \ sigv.$(OBJEXT) $(am__objects_1) $(am__objects_2) \ $(am__objects_3) $(am__objects_4) direvent_OBJECTS = $(am_direvent_OBJECTS) direvent_LDADD = $(LDADD) direvent_DEPENDENCIES = 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 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(direvent_SOURCES) DIST_SOURCES = $(am__direvent_SOURCES_DIST) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/build-aux/depcomp 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@ 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@ 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@ 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@ 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@ direvent_SOURCES = direvent.c direvent.h cmdline.h config.c environ.c \ event.c fnpat.c handler.c watcher.c progman.c sigv.c \ $(am__append_1) $(am__append_2) $(am__append_3) \ $(am__append_4) LDADD = @GRECS_LDADD@ @LIBINTL@ AM_CPPFLAGS = \ @GRECS_INCLUDES@\ -DSYSCONFDIR=\"$(sysconfdir)\"\ -DLOCALEDIR=\"$(localedir)\"\ -DINCLUDE_PATH_ARGS='$(INCLUDE_PATH_ARGS)' BUILT_SOURCES = cmdline.h EXTRA_DIST = cmdline.opt noinst_HEADERS = gettext.h SUFFIXES = .opt .c .h all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: .SUFFIXES: .opt .c .h .o .obj $(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 src/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnits src/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__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ 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): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) installcheck-binPROGRAMS: $(bin_PROGRAMS) bad=0; pid=$$$$; list="$(bin_PROGRAMS)"; for p in $$list; do \ case ' $(AM_INSTALLCHECK_STD_OPTIONS_EXEMPT) ' in \ *" $$p "* | *" $(srcdir)/$$p "*) continue;; \ esac; \ f=`echo "$$p" | \ sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \ for opt in --help --version; do \ if "$(DESTDIR)$(bindir)/$$f" $$opt >c$${pid}_.out \ 2>c$${pid}_.err </dev/null \ && test -n "`cat c$${pid}_.out`" \ && test -z "`cat c$${pid}_.err`"; then :; \ else echo "$$f does not support $$opt" 1>&2; bad=1; fi; \ done; \ done; rm -f c$${pid}_.???; exit $$bad direvent$(EXEEXT): $(direvent_OBJECTS) $(direvent_DEPENDENCIES) $(EXTRA_direvent_DEPENDENCIES) @rm -f direvent$(EXEEXT) $(AM_V_CCLD)$(LINK) $(direvent_OBJECTS) $(direvent_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/config.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/detach-bsd.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/detach-darwin.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/detach-std.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/direvent.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/environ.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ev_inotify.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ev_kqueue.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/event.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fnpat.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/handler.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/progman.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sigv.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/watcher.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(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 check-am: all-am check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-am all-am: Makefile $(PROGRAMS) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(bindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) 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." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) clean: clean-am clean-am: clean-binPROGRAMS clean-generic mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: installcheck-binPROGRAMS maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS .MAKE: all check install install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ clean-binPROGRAMS clean-generic cscopelist-am ctags ctags-am \ distclean distclean-compile distclean-generic distclean-tags \ distdir dvi dvi-am html html-am info info-am install \ install-am install-binPROGRAMS 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-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installcheck-binPROGRAMS installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-binPROGRAMS .PRECIOUS: Makefile .opt.h: $(AM_V_GEN)m4 -s $(top_srcdir)/@GRECS_SUBDIR@/build-aux/getopt.m4 $< > $@ # 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.2/src/watcher.c��������������������������������������������������������������������������0000644�0001750�0001750�00000026510�12764623664�015602� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* direvent - directory content watcher daemon Copyright (C) 2012-2016 Sergey Poznyakoff 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. 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 <http://www.gnu.org/licenses/>. */ #include "direvent.h" #include <dirent.h> #include <sys/stat.h> void watchpoint_ref(struct watchpoint *wpt) { ++wpt->refcnt; } void watchpoint_unref(struct watchpoint *wpt) { if (--wpt->refcnt) return; free(wpt->dirname); handler_list_unref(wpt->handler_list); free(wpt); } struct wpref { int used; struct watchpoint *wpt; }; static unsigned wpref_hash(void *data, unsigned long hashsize) { struct wpref *sym = data; return grecs_hash_string(sym->wpt->dirname, hashsize); } static int wpref_cmp(const void *a, const void *b) { struct wpref const *syma = a; struct wpref const *symb = b; return strcmp(syma->wpt->dirname, symb->wpt->dirname); } static int wpref_copy(void *a, void *b) { struct wpref *syma = a; struct wpref *symb = b; syma->used = 1; syma->wpt = symb->wpt; return 0; } static void wpref_free(void *p) { struct wpref *wpref = p; watchpoint_unref(wpref->wpt); free(wpref); } struct grecs_symtab *nametab; struct watchpoint * watchpoint_install(const char *path, int *pnew) { struct watchpoint wpkey; struct wpref key; struct wpref *ent; int install = 1; if (!nametab) { nametab = grecs_symtab_create(sizeof(struct wpref), wpref_hash, wpref_cmp, wpref_copy, NULL, wpref_free); if (!nametab) { diag(LOG_CRIT, _("not enough memory")); exit(1); } } wpkey.dirname = (char*) path; key.wpt = &wpkey; ent = grecs_symtab_lookup_or_install(nametab, &key, &install); if (install) { struct watchpoint *wpt = ecalloc(1, sizeof(*wpt)); wpt->dirname = estrdup(path); wpt->wd = -1; wpt->handler_list = handler_list_create(); wpt->refcnt = 0; ent->wpt = wpt; } if (!ent) abort(); /* FIXME */ watchpoint_ref(ent->wpt); if (pnew) *pnew = install; return ent->wpt; } struct watchpoint * watchpoint_install_ptr(struct watchpoint *wpt) { struct wpref key; int install = 1; key.wpt = wpt; if (!grecs_symtab_lookup_or_install(nametab, &key, &install)) { diag(LOG_CRIT, _("not enough memory")); exit(1); } watchpoint_ref(wpt); return wpt; } static void wpref_destroy(void *data) { struct watchpoint *wpt = data; watchpoint_destroy(wpt); } static grecs_list_ptr_t watchpoint_gc_list; void watchpoint_gc(void) { if (watchpoint_gc_list) { grecs_list_free(watchpoint_gc_list); watchpoint_gc_list = NULL; } } struct watchpoint * watchpoint_lookup(const char *dirname) { struct watchpoint wpkey; struct wpref key; struct wpref *ent; if (!nametab) return NULL; wpkey.dirname = (char*) dirname; key.wpt = &wpkey; ent = grecs_symtab_lookup_or_install(nametab, &key, NULL); return ent ? ent->wpt : NULL; } static void watchpoint_remove(const char *dirname) { struct watchpoint wpkey; struct wpref key; if (!nametab) return; wpkey.dirname = (char*) dirname; key.wpt = &wpkey; grecs_symtab_remove(nametab, &key); } void watchpoint_destroy(struct watchpoint *wpt) { debug(1, (_("removing watcher %s"), wpt->dirname)); sysev_rm_watch(wpt); watchpoint_remove(wpt->dirname); } void watchpoint_suspend(struct watchpoint *wpt) { if (!wpt->parent) /* A top-level watchpoint */ watchpoint_install_sentinel(wpt);//FIXME: error checking watchpoint_destroy(wpt); if (grecs_symtab_count(nametab) == 0) { diag(LOG_CRIT, _("no watchers left; exiting now")); stop = 1; } } struct sentinel { struct handler *hp; struct watchpoint *watchpoint; }; static int sentinel_handler_run(struct watchpoint *wp, event_mask *event, const char *dirname, const char *file, void *data) { struct sentinel *sentinel = data; struct watchpoint *wpt = sentinel->watchpoint; watchpoint_init(wpt); watchpoint_install_ptr(wpt); deliver_ev_create(wpt, dirname, file); if (handler_list_remove(wp->handler_list, sentinel->hp) == 0) { if (!watchpoint_gc_list) { watchpoint_gc_list = grecs_list_create(); watchpoint_gc_list->free_entry = wpref_destroy; } grecs_list_append(watchpoint_gc_list, wp); } return 0; } static void sentinel_handler_free(void *ptr) { struct sentinel *sentinel = ptr; watchpoint_unref(sentinel->watchpoint); free(sentinel); } int watchpoint_install_sentinel(struct watchpoint *wpt) { struct watchpoint *sent; char *dirname; char *filename; struct handler *hp; event_mask ev_mask; struct sentinel *sentinel; filename = split_pathname(wpt, &dirname); sent = watchpoint_install(dirname, NULL); getevt("create", &ev_mask); hp = handler_alloc(ev_mask); hp->run = sentinel_handler_run; hp->free = sentinel_handler_free; sentinel = emalloc(sizeof(*sentinel)); sentinel->watchpoint = wpt; sentinel->hp = hp; watchpoint_ref(wpt); hp->data = sentinel; filpatlist_add_exact(&hp->fnames, filename); handler_list_append(sent->handler_list, hp); unsplit_pathname(wpt); diag(LOG_NOTICE, _("installing CREATE sentinel for %s"), wpt->dirname); return watchpoint_init(sent); } int watchpoint_init(struct watchpoint *wpt) { struct stat st; event_mask mask = { 0, 0 }; struct handler *hp; handler_iterator_t itr; int wd; debug(1, (_("creating watcher %s"), wpt->dirname)); if (stat(wpt->dirname, &st)) { if (errno == ENOENT) { return watchpoint_install_sentinel(wpt); } else { diag(LOG_ERR, _("cannot set watcher on %s: %s"), wpt->dirname, strerror(errno)); return 1; } } wpt->isdir = S_ISDIR(st.st_mode); for_each_handler(wpt, itr, hp) { mask.sys_mask |= hp->ev_mask.sys_mask; mask.gen_mask |= hp->ev_mask.gen_mask; } wd = sysev_add_watch(wpt, mask); if (wd == -1) { diag(LOG_ERR, _("cannot set watcher on %s: %s"), wpt->dirname, strerror(errno)); return 1; } wpt->wd = wd; return 0; } static int watch_subdirs(struct watchpoint *parent, int notify); int subwatcher_create(struct watchpoint *parent, const char *dirname, int notify) { struct watchpoint *wpt; int inst; wpt = watchpoint_install(dirname, &inst); if (!inst) return -1; wpt->handler_list = handler_list_copy(parent->handler_list); wpt->parent = parent; if (parent->depth == -1) wpt->depth = parent->depth; else if (parent->depth) wpt->depth = parent->depth - 1; else wpt->depth = 0; if (watchpoint_init(wpt)) { //FIXME watchpoint_free(wpt); return -1; } return 1 + watch_subdirs(wpt, notify); } /* Deliver GENEV_CREATE event */ void deliver_ev_create(struct watchpoint *wp, const char *dirname, const char *name) { event_mask m = { GENEV_CREATE, 0 }; struct handler *hp; handler_iterator_t itr; for_each_handler(wp, itr, hp) { if (handler_matches_event(hp, gen, GENEV_CREATE, name)) hp->run(wp, &m, dirname, name, hp->data); } } /* Check if a new watcher must be created and create it if so. A watcher must be created if its parent's recursion depth has a non-null value. If it has a negative value, which means "recursively watch new subdirectories without limit on their nesting level", it will be inherited by the new watcher. Otherwise, the new watcher will inherit the parent's depth decreased by one, thus eventually cutting off creation of new watchers. Return 0 on success, -1 on error. */ int check_new_watcher(const char *dir, const char *name) { int rc; char *fname; struct stat st; struct watchpoint *parent; parent = watchpoint_lookup(dir); if (!parent || !parent->depth) return 0; fname = mkfilename(dir, name); if (!fname) { diag(LOG_ERR, _("cannot create watcher %s/%s: not enough memory"), dir, name); return -1; } if (stat(fname, &st)) { diag(LOG_ERR, _("cannot create watcher %s/%s, stat failed: %s"), dir, name, strerror(errno)); rc = -1; } else if (S_ISDIR(st.st_mode)) { deliver_ev_create(parent, parent->dirname, name); rc = subwatcher_create(parent, fname, 1); } else rc = 0; free(fname); return rc; } int watchpoint_pattern_match(struct watchpoint *wpt, const char *file_name) { struct handler *hp; handler_iterator_t itr; for_each_handler(wpt, itr, hp) { if (filpatlist_match(hp->fnames, file_name) == 0) return 0; } return 1; } /* Recursively scan subdirectories of parent and add them to the watcher list, as requested by the parent's recursion depth value. */ static int watch_subdirs(struct watchpoint *parent, int notify) { DIR *dir; struct dirent *ent; int filemask; int total = 0; if (!parent->isdir) return 0; filemask = sysev_filemask(parent); if (parent->depth) filemask |= S_IFDIR; if (!filemask) return 0; dir = opendir(parent->dirname); if (!dir) { diag(LOG_ERR, _("cannot open directory %s: %s"), parent->dirname, strerror(errno)); return 0; } while (ent = readdir(dir)) { struct stat st; char *dirname; if (ent->d_name[0] == '.' && (ent->d_name[1] == 0 || (ent->d_name[1] == '.' && ent->d_name[2] == 0))) continue; dirname = mkfilename(parent->dirname, ent->d_name); if (!dirname) { diag(LOG_ERR, _("cannot stat %s/%s: not enough memory"), parent->dirname, ent->d_name); continue; } if (stat(dirname, &st)) { diag(LOG_ERR, _("cannot stat %s: %s"), dirname, strerror(errno)); } else if (watchpoint_pattern_match(parent, ent->d_name) == 0) { if (notify) deliver_ev_create(parent, parent->dirname, ent->d_name); if (st.st_mode & filemask) { int rc = subwatcher_create(parent, dirname, notify); if (rc > 0) total += rc; } } free(dirname); } closedir(dir); return total; } static int setwatcher(void *ent, void *data) { struct wpref *wpref = (struct wpref *) ent; struct watchpoint *wpt = wpref->wpt; if (wpt->wd == -1 && watchpoint_init(wpt) == 0) watch_subdirs(wpt, 0); return 0; } static int checkwatcher(void *ent, void *data) { struct wpref *wpref = (struct wpref *) ent; struct watchpoint *wpt = wpref->wpt; return wpt->wd >= 0; } void setup_watchers(void) { sysev_init(); if (grecs_symtab_count(nametab) == 0) { diag(LOG_CRIT, _("no event handlers configured")); exit(1); } grecs_symtab_foreach(nametab, setwatcher, NULL); if (!grecs_symtab_foreach(nametab, checkwatcher, NULL)) { diag(LOG_CRIT, _("no event handlers installed")); exit(2); } } static int stopwatcher(void *ent, void *data) { struct wpref *wpref = (struct wpref *) ent; struct watchpoint *wpt = wpref->wpt; if (wpt->wd != -1) { debug(1, (_("removing watcher %s"), wpt->dirname)); sysev_rm_watch(wpt); } return 0; } void shutdown_watchers(void) { grecs_symtab_foreach(nametab, stopwatcher, NULL); grecs_symtab_clear(nametab); } char * split_pathname(struct watchpoint *dp, char **dirname) { char *p = strrchr(dp->dirname, '/'); if (p) { dp->split_p = p; *p++ = 0; *dirname = dp->dirname; } else { p = dp->dirname; *dirname = "."; } return p; } void unsplit_pathname(struct watchpoint *dp) { if (dp->split_p) { *dp->split_p = '/'; dp->split_p = NULL; } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/src/ev_inotify.c�����������������������������������������������������������������������0000644�0001750�0001750�00000012467�12764623664�016326� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* direvent - directory content watcher daemon Copyright (C) 2012-2016 Sergey Poznyakoff 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. 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 <http://www.gnu.org/licenses/>. */ #include "direvent.h" #include <signal.h> #include <sys/inotify.h> /* Event codes */ struct transtab sysev_transtab[] = { { "ACCESS", IN_ACCESS }, { "ATTRIB", IN_ATTRIB }, { "CLOSE_WRITE", IN_CLOSE_WRITE }, { "CLOSE_NOWRITE", IN_CLOSE_NOWRITE }, { "CREATE", IN_CREATE }, { "DELETE", IN_DELETE }, { "MODIFY", IN_MODIFY }, { "MOVED_FROM", IN_MOVED_FROM }, { "MOVED_TO", IN_MOVED_TO }, { "OPEN", IN_OPEN }, { 0 } }; event_mask genev_xlat[] = { { GENEV_CREATE, IN_CREATE|IN_MOVED_TO }, { GENEV_WRITE, IN_MODIFY|IN_CLOSE_WRITE }, { GENEV_ATTRIB, IN_ATTRIB }, { GENEV_DELETE, IN_DELETE|IN_MOVED_FROM }, { 0 } }; static int ifd; static struct watchpoint **wptab; static size_t wpsize; static int wpreg(int wd, struct watchpoint *wpt) { if (wd < 0) abort(); if (wd >= wpsize) { size_t n = wpsize; struct watchpoint **p; if (n == 0) n = sysconf(_SC_OPEN_MAX); while (wd >= n) { n *= 2; if (n < wpsize) { diag(LOG_CRIT, _("can't allocate memory for fd %d"), wd); return -1; } } p = realloc(wptab, n * sizeof(wptab[0])); if (!p) { diag(LOG_CRIT, _("can't allocate memory for fd %d"), wd); return -1; } memset(p + wpsize, 0, (n - wpsize) * sizeof(wptab[0])); wptab = p; wpsize = n; } watchpoint_ref(wpt); wptab[wd] = wpt; return 0; } static void wpunreg(int wd) { if (wd < 0 || wd > wpsize) abort(); if (wptab[wd]) { watchpoint_unref(wptab[wd]); wptab[wd] = NULL; } } static struct watchpoint * wpget(int wd) { if (wd >= 0 && wd < wpsize) return wptab[wd]; return NULL; } int sysev_filemask(struct watchpoint *dp) { return 0; } void sysev_init() { ifd = inotify_init(); if (ifd == -1) { diag(LOG_CRIT, "inotify_init: %s", strerror(errno)); exit(1); } } int sysev_add_watch(struct watchpoint *wpt, event_mask mask) { int wd = inotify_add_watch(ifd, wpt->dirname, mask.sys_mask); if (wd >= 0 && wpreg(wd, wpt)) { inotify_rm_watch(ifd, wd); return -1; } return wd; } void sysev_rm_watch(struct watchpoint *wpt) { wpunreg(wpt->wd); inotify_rm_watch(ifd, wpt->wd); } /* Remove a watcher identified by its directory and file name */ void remove_watcher(const char *dir, const char *name) { struct watchpoint *wpt; char *fullname = mkfilename(dir, name); if (!fullname) { diag(LOG_EMERG, "not enough memory: " "cannot look up a watcher to delete"); return; } wpt = watchpoint_lookup(fullname); free(fullname); if (wpt) watchpoint_suspend(wpt); } static void process_event(struct inotify_event *ep) { struct watchpoint *wpt; char *dirname, *filename; wpt = wpget(ep->wd); if (!wpt) { if (!(ep->mask & IN_IGNORED)) diag(LOG_NOTICE, _("watcher not found: %d (%s)"), ep->wd, ep->name); return; } if (ep->mask & IN_IGNORED) { diag(LOG_NOTICE, _("%s deleted"), wpt->dirname); watchpoint_suspend(wpt); return; } if (ep->mask & IN_Q_OVERFLOW) { diag(LOG_NOTICE, "event queue overflow"); return; } else if (ep->mask & IN_UNMOUNT) { /* FIXME: not sure if there's anything to do. Perhaps we should deregister the watched dirs that were located under the mountpoint */ return; } else if (!wpt) { if (ep->name) diag(LOG_NOTICE, "unrecognized event %x" "for %s", ep->mask, ep->name); else diag(LOG_NOTICE, "unrecognized event %x", ep->mask); return; } ev_log(ep->mask, wpt); if (ep->mask & IN_CREATE) { debug(1, ("%s/%s created", wpt->dirname, ep->name)); if (check_new_watcher(wpt->dirname, ep->name) > 0) return; } if (ep->len == 0) filename = split_pathname(wpt, &dirname); else { dirname = wpt->dirname; filename = ep->name; } watchpoint_run_handlers(wpt, ep->mask, dirname, filename); unsplit_pathname(wpt); if (ep->mask & (IN_DELETE|IN_MOVED_FROM)) { debug(1, ("%s/%s deleted", wpt->dirname, ep->name)); remove_watcher(wpt->dirname, ep->name); } } int sysev_select() { char buffer[4096]; struct inotify_event *ep; size_t size; ssize_t rdbytes; rdbytes = read(ifd, buffer, sizeof(buffer)); if (rdbytes == -1) { if (errno == EINTR) { if (!signo || signo == SIGCHLD || signo == SIGALRM) return 0; diag(LOG_NOTICE, "got signal %d", signo); return 1; } diag(LOG_NOTICE, "read failed: %s", strerror(errno)); return 1; } ep = (struct inotify_event *) buffer; while (rdbytes) { if (ep->wd >= 0) process_event(ep); size = sizeof(*ep) + ep->len; ep = (struct inotify_event *) ((char*) ep + size); rdbytes -= size; } return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/src/detach-bsd.c�����������������������������������������������������������������������0000644�0001750�0001750�00000003747�12764623664�016152� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* direvent - directory content watcher daemon Copyright (C) 2012-2016 Sergey Poznyakoff 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. 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 <http://www.gnu.org/licenses/>. */ /* "Early-init" detach() for BSD systems. It uses rfork instead of fork to ensure the event queue is inherited by the child process. According to the kqueue(2) manpage: The kqueue() system call creates a new kernel event queue and returns a descriptor. The queue is not inherited by a child created with fork(2). However, if rfork(2) is called without the RFFDG flag, then the descrip- tor table is shared, which will allow sharing of the kqueue between two processes. */ #include "direvent.h" #include <unistd.h> #include <fcntl.h> #include <signal.h> #include <errno.h> #include <stdlib.h> #ifdef HAVE_PATHS_H # include <paths.h> #endif #ifndef _PATH_DEVNULL # define _PATH_DEVNULL "/dev/null" #endif int detach(void (*init)()) { struct sigaction oldsa, sa; pid_t pid; int ec; init(); sigemptyset(&sa.sa_mask); sa.sa_handler = SIG_IGN; sa.sa_flags = 0; if (sigaction(SIGHUP, &sa, &oldsa)) return -1; switch (rfork(RFPROC)) { case -1: return -1; case 0: break; default: _exit(0); } pid = setsid(); ec = errno; sigaction(SIGHUP, &oldsa, NULL); if (pid == -1) { errno = ec; return -1; } chdir("/"); close(0); close(1); close(2); open(_PATH_DEVNULL, O_RDONLY); open(_PATH_DEVNULL, O_WRONLY); dup(1); return 0; } �������������������������direvent-5.2/src/direvent.h�������������������������������������������������������������������������0000644�0001750�0001750�00000021343�12764623664�015771� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* direvent - directory content watcher daemon Copyright (C) 2012-2016 Sergey Poznyakoff 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. 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 <http://www.gnu.org/licenses/>. */ #include "config.h" #include <sys/types.h> #include <stdio.h> #include <stdlib.h> #include <syslog.h> #include <errno.h> #include <string.h> #include <unistd.h> #include <signal.h> #include <regex.h> #include <grecs/list.h> #include <grecs/symtab.h> #include "gettext.h" #define _(s) gettext(s) #define N_(s) s /* Generic (system-independent) event codes */ #define GENEV_CREATE 0x01 #define GENEV_WRITE 0x02 #define GENEV_ATTRIB 0x04 #define GENEV_DELETE 0x08 /* Handler flags. */ #define HF_NOWAIT 0x01 /* Don't wait for termination */ #define HF_STDOUT 0x02 /* Capture stdout */ #define HF_STDERR 0x04 /* Capture stderr */ #define HF_SHELL 0x08 /* Call program via /bin/sh -c */ #ifndef DEFAULT_TIMEOUT # define DEFAULT_TIMEOUT 5 #endif typedef struct { int gen_mask; /* Generic event mask */ int sys_mask; /* System event mask */ } event_mask; /* Event description */ struct transtab { char *name; int tok; }; enum pattern_type { PAT_EXACT, PAT_GLOB, PAT_REGEX }; struct filename_pattern { enum pattern_type type; int neg; union { regex_t re; char *glob; } v; }; typedef struct filpatlist *filpatlist_t; struct watchpoint; typedef int (*event_handler_fn) (struct watchpoint *wp, event_mask *event, const char *dir, const char *file, void *data); typedef void (*handler_free_fn) (void *data); /* Handler structure */ struct handler { size_t refcnt; /* Reference counter */ event_mask ev_mask; /* Event mask */ filpatlist_t fnames; /* File name patterns */ event_handler_fn run; handler_free_fn free; void *data; }; typedef struct handler_list *handler_list_t; typedef struct handler_iterator *handler_iterator_t; /* Watchpoint links the directory being monitored and a list of handlers for various events: */ struct watchpoint { size_t refcnt; int wd; /* Watch descriptor */ struct watchpoint *parent; /* Points to the parent watcher. NULL for top-level watchers */ char *dirname; /* Pathname being watched */ int isdir; /* Is it directory */ handler_list_t handler_list; /* List of handlers */ int depth; /* Recursion depth */ char *split_p; /* Points to the deleted directory separator in dirname (see split_pathname, unsplit_pathname */ #if USE_IFACE == IFACE_KQUEUE mode_t file_mode; time_t file_ctime; #endif }; #define __cat2__(a,b) a ## b #define handler_matches_event(h,m,f,n) \ (((h)->ev_mask.__cat2__(m,_mask) & (f)) && \ filpatlist_match((h)->fnames, n) == 0) struct handler *handler_alloc(event_mask ev_mask); void handler_free(struct handler *hp); struct prog_handler { int flags; /* Handler flags */ char *command; /* Handler command (with eventual arguments) */ uid_t uid; /* Run as this user (unless 0) */ gid_t *gidv; /* Run with these groups' privileges */ size_t gidc; /* Number of elements in gidv */ unsigned timeout; /* Handler timeout */ char **env; /* Environment */ }; struct handler *prog_handler_alloc(event_mask ev_mask, filpatlist_t fpat, struct prog_handler *p); void prog_handler_free(struct prog_handler *); size_t prog_handler_envrealloc(struct prog_handler *hp, size_t count); extern int foreground; extern int debug_level; extern int facility; extern char *tag; extern int syslog_include_prio; extern char *pidfile; extern char *user; extern unsigned opt_timeout; extern unsigned opt_flags; extern int signo; extern int stop; extern pid_t self_test_pid; extern int exit_code; void *emalloc(size_t size); void *ecalloc(size_t nmemb, size_t size); void *erealloc(void *ptr, size_t size); char *estrdup(const char *str); char *mkfilename(const char *dir, const char *file); void diag(int prio, const char *fmt, ...); void debugprt(const char *fmt, ...); #define debug(l, c) do { if (debug_level>=(l)) debugprt c; } while(0) void signal_setup(void (*sf) (int)); int detach(void (*)(void)); int sysev_filemask(struct watchpoint *dp); void sysev_init(void); int sysev_add_watch(struct watchpoint *dwp, event_mask mask); void sysev_rm_watch(struct watchpoint *dwp); int sysev_select(void); int sysev_name_to_code(const char *name); const char *sysev_code_to_name(int code); int defevt(const char *name, event_mask *mask, int line); int getevt(const char *name, event_mask *mask); int evtnullp(event_mask *mask); event_mask *event_mask_init(event_mask *m, int fflags, event_mask const *); void evtsetall(event_mask *m); /* Translate generic events to system ones and vice-versa */ extern event_mask genev_xlat[]; /* Translate generic event codes to symbolic names and vice-versa */ extern struct transtab genev_transtab[]; /* Translate system event codes to symbolic names and vice-versa */ extern struct transtab sysev_transtab[]; int trans_strtotok(struct transtab *tab, const char *str, int *ret); char *trans_toktostr(struct transtab *tab, int tok); char *trans_tokfirst(struct transtab *tab, int tok, int *next); char *trans_toknext(struct transtab *tab, int tok, int *next); struct pathent { long depth; size_t len; char path[1]; }; void config_help(void); void config_init(void); void config_parse(const char *file); int get_facility(const char *arg); int get_priority(const char *arg); int watchpoint_init(struct watchpoint *dwp); void watchpoint_ref(struct watchpoint *dw); void watchpoint_unref(struct watchpoint *dw); void watchpoint_gc(void); int watchpoint_pattern_match(struct watchpoint *dwp, const char *file_name); void watchpoint_run_handlers(struct watchpoint *wp, int evflags, const char *dirname, const char *filename); void setup_watchers(void); void shutdown_watchers(void); struct watchpoint *watchpoint_lookup(const char *dirname); int check_new_watcher(const char *dir, const char *name); struct watchpoint *watchpoint_install(const char *path, int *pnew); struct watchpoint *watchpoint_install_ptr(struct watchpoint *dw); void watchpoint_suspend(struct watchpoint *dwp); void watchpoint_destroy(struct watchpoint *dwp); int watchpoint_install_sentinel(struct watchpoint *dwp); int watch_pathname(struct watchpoint *parent, const char *dirname, int isdir, int notify); char *split_pathname(struct watchpoint *dp, char **dirname); void unsplit_pathname(struct watchpoint *dp); void ev_log(int flags, struct watchpoint *dp); void deliver_ev_create(struct watchpoint *dp, const char *dirname, const char *filename); int subwatcher_create(struct watchpoint *parent, const char *dirname, int notify); struct handler *handler_itr_first(struct watchpoint *dp, handler_iterator_t *itr); struct handler *handler_itr_next(handler_iterator_t *itr); struct handler *handler_itr_current(handler_iterator_t itr); #define for_each_handler(d,i,h) \ for (h = handler_itr_first(d, &(i)); \ h; \ h = handler_itr_next(&(i))) handler_list_t handler_list_create(void); handler_list_t handler_list_copy(handler_list_t); void handler_list_unref(handler_list_t hlist); void handler_list_append(handler_list_t hlist, struct handler *hp); size_t handler_list_remove(handler_list_t hlist, struct handler *hp); size_t handler_list_size(handler_list_t hlist); struct process *process_lookup(pid_t pid); void process_cleanup(int expect_term); void process_timeouts(void); char **environ_setup(char **hint, char **kve); #define NITEMS(a) ((sizeof(a)/sizeof((a)[0]))) struct sigtab { int signo; void (*sigfun)(int); }; int sigv_set_action(int sigc, int *sigv, struct sigaction *sa); int sigv_set_all(void (*handler)(int), int sigc, int *sigv, struct sigaction *retsa); int sigv_set_tab(int sigc, struct sigtab *sigtab, struct sigaction *retsa); int sigv_set_action_tab(int sigc, struct sigtab *sigtab, struct sigaction *sa); struct grecs_locus; int filpatlist_add(filpatlist_t *fptr, char const *arg, struct grecs_locus *loc); void filpatlist_add_exact(filpatlist_t *fptr, char const *arg); void filpatlist_destroy(filpatlist_t *fptr); int filpatlist_match(filpatlist_t fp, const char *name); int filpatlist_is_empty(filpatlist_t fp); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/src/cmdline.opt������������������������������������������������������������������������0000644�0001750�0001750�00000004357�12764623664�016145� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#define EX_USAGE 1 OPTIONS_BEGIN("direvent", [<GNU direvent monitors changes in directories>], [<[CONFIG]>], [<gnu>], [<copyright_year=2012-2014>], [<copyright_holder=Sergey Poznyakoff>]) OPTION(debug,d,, [<increase debug level>]) BEGIN opt_debug_level++; END OPTION(,l,PRIO, [<log everything with priority PRIO and higher to the stderr, as well as to the syslog>]) BEGIN if (strcmp(optarg, "none") == 0) log_to_stderr = -1; else log_to_stderr = get_priority(optarg); END OPTION(facility,F,NAME, [<set syslog facility>]) BEGIN opt_facility = get_facility(optarg); END OPTION(foreground,f,, [<remain in foreground>]) BEGIN opt_foreground++; END OPTION(include-directory,I,DIR, [<add include directory>]) BEGIN grecs_preproc_add_include_dir(optarg); END OPTION(self-test,T,PROG, [<self-test mode>]) BEGIN self_test_prog = optarg; END OPTION(pidfile,P,FILE, [<set PID file>]) BEGIN opt_pidfile = optarg; END OPTION(lint,t,, [<check configuration file and exit>]) BEGIN lint_only = 1; END OPTION(user,u,USER, [<run as this user>]) BEGIN opt_user = optarg; if (!getpwnam(opt_user)) { diag(LOG_CRIT, "no such user: %s", opt_user); exit(1); } END OPTION(config-help,H,, [<show configuration file summary>]) BEGIN config_help(); exit(0); END OPTIONS_END static int print_dir(int flag, const char *dir, void *data) { FILE *fp = data; fprintf(fp, "%s\n", dir); return 0; } static void help_hook(FILE *fp) { fprintf(fp, _("The optional CONFIG argument supplies the name of the " "configuration file\n" "to use instead of %s.\n\n"), DEFAULT_CONFFILE); /* TRANSLATORS: %s is one of: inotify, kqueue */ fprintf(fp, _("This direvent uses %s interface.\n\n"), INTERFACE); if (grecs_include_path_count(GRECS_STD_INCLUDE)) { fprintf(fp, _("Include search path:\n")); grecs_foreach_include_dir(GRECS_STD_INCLUDE, print_dir, fp); } else fprintf(fp, _("No include search path.\n")); fprintf(fp, "\n"); } void parse_options(int argc, char *argv[], int *index) { proginfo.print_help_hook = help_hook; GETOPT(argc, argv, *index) } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/src/ev_kqueue.c������������������������������������������������������������������������0000644�0001750�0001750�00000012305�12764623664�016133� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* direvent - directory content watcher daemon Copyright (C) 2012-2016 Sergey Poznyakoff 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. 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 <http://www.gnu.org/licenses/>. */ #include "direvent.h" #include <sys/event.h> #include <fcntl.h> #include <signal.h> #include <dirent.h> #include <sys/stat.h> struct transtab sysev_transtab[] = { { "DELETE", NOTE_DELETE }, { "WRITE", NOTE_WRITE }, { "EXTEND", NOTE_EXTEND }, { "ATTRIB", NOTE_ATTRIB }, { "LINK", NOTE_LINK }, { "RENAME", NOTE_RENAME }, { "REVOKE", NOTE_REVOKE }, { NULL } }; static int kq; static struct kevent *evtab; static struct kevent *chtab; static int chcnt; static int chclosed = -1; event_mask genev_xlat[] = { { GENEV_CREATE, 0 }, { GENEV_WRITE, NOTE_WRITE|NOTE_EXTEND }, { GENEV_ATTRIB, NOTE_ATTRIB|NOTE_LINK }, { GENEV_DELETE, NOTE_DELETE|NOTE_RENAME|NOTE_REVOKE }, { 0 } }; void sysev_init() { kq = kqueue(); if (kq == -1) { diag(LOG_CRIT, "kqueue: %s", strerror(errno)); exit(1); } evtab = calloc(sysconf(_SC_OPEN_MAX), sizeof(evtab[0])); chtab = calloc(sysconf(_SC_OPEN_MAX), sizeof(chtab[0])); } int sysev_filemask(struct watchpoint *dp) { struct handler *h; handler_iterator_t itr; for_each_handler(dp, itr, h) { if (h->ev_mask.sys_mask) return S_IFMT; } return 0; } int sysev_add_watch(struct watchpoint *wpt, event_mask mask) { int wd = open(wpt->dirname, O_RDONLY); if (wd >= 0) { struct stat st; int sysmask; if (fstat(wd, &st)) { close(wd); return -1; } wpt->file_mode = st.st_mode; wpt->file_ctime = st.st_ctime; sysmask = mask.sys_mask | NOTE_DELETE; if (S_ISDIR(st.st_mode) && mask.gen_mask & GENEV_CREATE) sysmask |= NOTE_WRITE; EV_SET(chtab + chcnt, wd, EVFILT_VNODE, EV_ADD | EV_ENABLE | EV_CLEAR, sysmask, 0, wpt); wd = chcnt++; } return wd; } void sysev_rm_watch(struct watchpoint *wpt) { close(chtab[wpt->wd].ident); chtab[wpt->wd].ident = -1; if (chclosed == -1 || chclosed > wpt->wd) chclosed = wpt->wd; } static void chclosed_elim() { int i, j; if (chclosed == -1) return; for (i = chclosed, j = chclosed + 1; j < chcnt; j++) if (chtab[j].ident != -1) { struct watchpoint *wpt; chtab[i] = chtab[j]; wpt = chtab[i].udata; wpt->wd = i; i++; } chcnt = i; chclosed = -1; } static void check_created(struct watchpoint *dp) { DIR *dir; struct dirent *ent; dir = opendir(dp->dirname); if (!dir) { diag(LOG_ERR, "cannot open directory %s: %s", dp->dirname, strerror(errno)); return; } while (ent = readdir(dir)) { struct stat st; char *pathname; if (ent->d_name[0] == '.' && (ent->d_name[1] == 0 || (ent->d_name[1] == '.' && ent->d_name[2] == 0))) continue; if (watchpoint_pattern_match(dp, ent->d_name)) continue; pathname = mkfilename(dp->dirname, ent->d_name); if (!pathname) { diag(LOG_ERR, "cannot stat %s/%s: not enough memory", dp->dirname, ent->d_name); continue; } if (stat(pathname, &st)) { diag(LOG_ERR, "cannot stat %s: %s", pathname, strerror(errno)); /* If ok, first see if the file is newer than the last directory scan. If not, there is still a chance the file is new (the timestamp precision leaves a time window long enough for a file to be created) so try the more expensive hash lookup to see if we know about that file. If the file is new, register a watcher for it. */ } else if (st.st_ctime > dp->file_ctime || !watchpoint_lookup(pathname)) { deliver_ev_create(dp, dp->dirname, ent->d_name); subwatcher_create(dp, pathname, 1); dp->file_ctime = st.st_ctime; } free(pathname); } closedir(dir); } static void process_event(struct kevent *ep) { struct watchpoint *dp = ep->udata; char *filename, *dirname; if (!dp) { diag(LOG_NOTICE, "unrecognized event %x", ep->fflags); return; } ev_log(ep->fflags, dp); if (S_ISDIR(dp->file_mode) && !(ep->fflags & (NOTE_DELETE|NOTE_RENAME))) { /* Check if new files have appeared. */ if (ep->fflags & NOTE_WRITE) check_created(dp); return; } filename = split_pathname(dp, &dirname); watchpoint_run_handlers(dp, ep->fflags, dirname, filename); unsplit_pathname(dp); if (ep->fflags & (NOTE_DELETE|NOTE_RENAME)) { debug(1, ("%s deleted", dp->dirname)); watchpoint_suspend(dp); return; } } int sysev_select() { int i, n; chclosed_elim(); n = kevent(kq, chtab, chcnt, evtab, chcnt, NULL); if (n == -1) { if (errno == EINTR) { if (signo == 0 || signo == SIGCHLD || signo == SIGALRM) return 0; diag(LOG_NOTICE, "got signal %d", signo); } diag(LOG_ERR, "kevent: %s", strerror(errno)); return 1; } for (i = 0; i < n; i++) process_event(&evtab[i]); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/src/direvent.c�������������������������������������������������������������������������0000644�0001750�0001750�00000023510�12764623664�015762� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* direvent - directory content watcher daemon Copyright (C) 2012-2016 Sergey Poznyakoff 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. 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 <http://www.gnu.org/licenses/>. */ #include "direvent.h" #include <stdarg.h> #include <fcntl.h> #include <getopt.h> #include <pwd.h> #include <grp.h> #include <signal.h> #include <grecs.h> #include <locale.h> #include "wordsplit.h" #ifndef SYSCONFDIR # define SYSCONFDIR "/etc" #endif #define DEFAULT_CONFFILE SYSCONFDIR "/direvent.conf" /* Configuration settings */ const char *program_name; /* This program name */ const char *conffile = DEFAULT_CONFFILE; int foreground; /* Remain in the foreground */ char *self_test_prog; char *tag; /* Syslog tag */ int facility = -1; /* Use this syslog facility for logging. -1 means log to stderr */ int syslog_include_prio; int debug_level; /* Debug verbosity level */ char *pidfile = NULL; /* Store PID to this file */ char *user = NULL; /* User to run as */ int log_to_stderr = LOG_DEBUG; /* Diagnostic functions */ const char * severity(int prio) { switch (prio) { case LOG_EMERG: return "EMERG"; case LOG_ALERT: return "ALERT"; case LOG_CRIT: return "CRIT"; case LOG_ERR: return "ERROR"; case LOG_WARNING: return "WARNING"; case LOG_NOTICE: return "NOTICE"; case LOG_INFO: return "INFO"; case LOG_DEBUG: return "DEBUG"; } return NULL; } void vdiag(int prio, const char *fmt, va_list ap) { const char *s; va_list tmp; if (log_to_stderr >= prio) { fprintf(stderr, "%s: ", program_name); s = severity(prio); if (s) fprintf(stderr, "[%s] ", s); va_copy(tmp, ap); vfprintf(stderr, fmt, tmp); fputc('\n', stderr); va_end(tmp); } if (facility > 0) { if (syslog_include_prio && (s = severity(prio)) != NULL) { static char *fmtbuf; static size_t fmtsize; size_t len = strlen(fmt) + strlen(s) + 4; char *p; if (len > fmtsize) { fmtbuf = erealloc(fmtbuf, len); fmtsize = len; } p = fmtbuf; *p++ = '['; while (*s) *p++ = *s++; *p++ = ']'; *p++ = ' '; while (*p++ = *fmt++); vsyslog(prio, fmtbuf, ap); } else vsyslog(prio, fmt, ap); } } void diag(int prio, const char *fmt, ...) { va_list ap; va_start(ap, fmt); vdiag(prio, fmt, ap); va_end(ap); } void debugprt(const char *fmt, ...) { va_list ap; va_start(ap, fmt); vdiag(LOG_DEBUG, fmt, ap); va_end(ap); } /* Memory allocation with error checking */ void * emalloc(size_t size) { void *p = malloc(size); if (!p) { diag(LOG_CRIT, _("not enough memory")); exit(2); } return p; } void * ecalloc(size_t nmemb, size_t size) { void *p = calloc(nmemb, size); if (!p) { diag(LOG_CRIT, "not enough memory"); exit(2); } return p; } void * erealloc(void *ptr, size_t size) { void *p = realloc(ptr, size); if (!p) { diag(LOG_CRIT, _("not enough memory")); exit(2); } return p; } char * estrdup(const char *str) { size_t len = strlen(str); char *p = emalloc(len + 1); memcpy(p, str, len); p[len] = 0; return p; } /* Create a full file name from directory and file name */ char * mkfilename(const char *dir, const char *file) { char *tmp; size_t dirlen = strlen(dir); size_t fillen = strlen(file); size_t len; if (!file || file[0] == 0) return strdup(dir); while (dirlen > 0 && dir[dirlen-1] == '/') dirlen--; len = dirlen + (dir[0] ? 1 : 0) + fillen; tmp = malloc(len + 1); if (tmp) { memcpy(tmp, dir, dirlen); if (dir[0]) tmp[dirlen++] = '/'; memcpy(tmp + dirlen, file, fillen); tmp[len] = 0; } return tmp; } int trans_strtotok(struct transtab *tab, const char *str, int *ret) { for (; tab->name; tab++) if (strcmp(tab->name, str) == 0) { *ret = tab->tok; return 0; } return -1; } char * trans_toktostr(struct transtab *tab, int tok) { for (; tab->name; tab++) if (tab->tok == tok) return tab->name; return NULL; } char * trans_toknext(struct transtab *tab, int tok, int *next) { int i; for (i = *next; tab[i].name; i++) if (tab[i].tok & tok) { *next = i + 1; return tab[i].name; } *next = i; return NULL; } char * trans_tokfirst(struct transtab *tab, int tok, int *next) { *next = 0; return trans_toknext(tab, tok, next); } /* Command line processing and auxiliary functions */ static void set_program_name(const char *arg) { char *p = strrchr(arg, '/'); if (p) program_name = p + 1; else program_name = arg; } void signal_setup(void (*sf) (int)) { static int sigv[] = { SIGTERM, SIGQUIT, SIGINT, SIGHUP, SIGALRM, SIGUSR1, SIGUSR1, SIGCHLD }; sigv_set_all(sf, NITEMS(sigv), sigv, NULL); } void storepid(const char *pidfile) { FILE *fp = fopen(pidfile, "w"); if (!fp) { diag(LOG_ERR, _("cannot open pidfile %s for writing: %s"), pidfile, strerror(errno)); } else { fprintf(fp, "%lu\n", (unsigned long) getpid()); fclose(fp); } } static int membergid(gid_t gid, size_t gc, gid_t *gv) { int i; for (i = 0; i < gc; i++) if (gv[i] == gid) return 1; return 0; } static void get_user_groups(uid_t uid, size_t *pgidc, gid_t **pgidv) { size_t gidc = 0, n = 0; gid_t *gidv = NULL; struct passwd *pw; struct group *gr; pw = getpwuid(uid); if (!pw) { diag(LOG_ERR, 0, _("no user with UID %lu"), (unsigned long)uid); exit(2); } n = 32; gidv = ecalloc(n, sizeof(gidv[0])); gidv[0] = pw->pw_gid; gidc = 1; setgrent(); while (gr = getgrent()) { char **p; for (p = gr->gr_mem; *p; p++) if (strcmp(*p, pw->pw_name) == 0) { if (n == gidc) { n += 32; gidv = erealloc(gidv, n * sizeof(gidv[0])); } if (!membergid(gr->gr_gid, gidc, gidv)) gidv[gidc++] = gr->gr_gid; } } endgrent(); *pgidc = gidc; *pgidv = gidv; } void setuser(const char *user) { struct passwd *pw; size_t gidc; gid_t *gidv; pw = getpwnam(user); if (!pw) { diag(LOG_CRIT, "getpwnam(%s): %s", user, strerror(errno)); exit(2); } if (pw->pw_uid == 0) return; get_user_groups(pw->pw_uid, &gidc, &gidv); if (setgroups(gidc, gidv) < 0) { diag(LOG_CRIT, "setgroups: %s", strerror(errno)); exit(2); } free(gidv); if (setgid(pw->pw_gid)) { diag(LOG_CRIT, "setgid(%lu): %s", (unsigned long) pw->pw_gid, strerror(errno)); exit(2); } if (setuid(pw->pw_uid)) { diag(LOG_CRIT, "setuid(%lu): %s", (unsigned long) pw->pw_uid, strerror(errno)); exit(2); } } void ev_log(int flags, struct watchpoint *dp) { int i; char *p; if (debug_level > 0) { for (p = trans_tokfirst(sysev_transtab, flags, &i); p; p = trans_toknext(sysev_transtab, flags, &i)) debug(1, ("%s: %s", dp->dirname, p)); } } /* Initialize generic event table */ void genev_init() { int i; for (i = 0; i < genev_xlat[i].gen_mask; i++) defevt(trans_toktostr(genev_transtab, genev_xlat[i].gen_mask), &genev_xlat[i], 0); } int signo = 0; int stop = 0; pid_t self_test_pid; int exit_code = 0; void sigmain(int sig) { signo = sig; switch (signo) { case SIGCHLD: case SIGALRM: break; default: stop = 1; } } void self_test() { pid_t pid; char *args[4]; pid = fork(); if (pid == (pid_t)-1) { diag(LOG_CRIT, _("cannot run `%s': fork failed: %s"), self_test_prog, strerror(errno)); exit(2); } if (pid != 0) { self_test_pid = pid; return; } args[0] = "/bin/sh"; args[1] = "-c"; args[2] = self_test_prog; args[3] = NULL; execv(args[0], args); diag(LOG_ERR, "execv: %s: %s", self_test_prog, strerror(errno)); _exit(127); } #if USE_IFACE == IFACE_INOTIFY # define INTERFACE "inotify" #elif USE_IFACE == IFACE_KQUEUE # define INTERFACE "kqueue" #endif static int opt_debug_level = 0; static int opt_foreground = 0; static char *opt_pidfile = NULL; static char *opt_user = NULL; static int opt_facility = -1; static int lint_only = 0; #include "cmdline.h" int main(int argc, char **argv) { int i; #ifdef ENABLE_NLS setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, LOCALEDIR); textdomain(PACKAGE); #endif set_program_name(argv[0]); tag = estrdup(program_name); genev_init(); config_init(); parse_options(argc, argv, &i); argc -= i; argv += i; switch (argc) { default: diag(LOG_CRIT, _("too many arguments")); exit(1); case 1: conffile = argv[0]; break; case 0: break; } config_parse(conffile); if (lint_only) return 0; if (opt_debug_level) debug_level += opt_debug_level; if (opt_foreground) foreground = opt_foreground; if (opt_pidfile) pidfile = opt_pidfile; if (opt_facility != -1) facility = opt_facility; if (!foreground && facility <= 0) facility = LOG_DAEMON; if (opt_user) user = opt_user; if (facility > 0) { openlog(tag, LOG_PID, facility); grecs_log_to_stderr = 0; } if (foreground) setup_watchers(); else { /* Become a daemon */ if (detach(setup_watchers)) { diag(LOG_CRIT, "daemon: %s", strerror(errno)); exit(1); } log_to_stderr = -1; } diag(LOG_INFO, _("%s %s started"), program_name, VERSION); /* Write pidfile */ if (pidfile) storepid(pidfile); /* Relinquish superuser privileges */ if (user && getuid() == 0) setuser(user); signal_setup(sigmain); if (self_test_prog) self_test(); /* Main loop */ while (!stop && sysev_select() == 0) { process_timeouts(); process_cleanup(0); watchpoint_gc(); } shutdown_watchers(); diag(LOG_INFO, _("%s %s stopped"), program_name, VERSION); if (pidfile) unlink(pidfile); return exit_code; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/src/progman.c��������������������������������������������������������������������������0000644�0001750�0001750�00000032074�12764623664�015612� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* direvent - directory content watcher daemon Copyright (C) 2012-2016 Sergey Poznyakoff 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. 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 <http://www.gnu.org/licenses/>. */ #include "direvent.h" #include <time.h> #include <pwd.h> #include <grp.h> #include <signal.h> #include <sys/wait.h> #include "wordsplit.h" /* Process list */ /* Redirector codes */ #define REDIR_OUT 0 #define REDIR_ERR 1 #define PROC_HANDLER 0 #define PROC_REDIR 1 /* A running process is described by this structure */ struct process { struct process *next, *prev; int type; /* Process type */ unsigned timeout; /* Timeout in seconds */ pid_t pid; /* PID */ time_t start; /* Time when the process started */ union { struct process *redir[2]; /* Pointers to the redirector processes, if type == PROC_HANDLER (NULL if no redirector) */ struct process *master; /* Master process, if type == PROC_REDIR */ } v; }; /* List of running processes */ struct process *proc_list; /* List of available process slots */ struct process *proc_avail; /* Declare functions for handling process lists */ struct process * proc_unlink(struct process **root, struct process *p) { if (p->prev) p->prev->next = p->next; else *root = p->next; if (p->next) p->next->prev = p->prev; p->next = p->prev = NULL; return p; } struct process * proc_pop(struct process **pp) { if (*pp) return proc_unlink(pp, *pp); return NULL; } void proc_push(struct process **pp, struct process *p) { p->prev = NULL; p->next = *pp; if (*pp) (*pp)->prev = p; *pp = p; } /* Process list handling (high-level) */ struct process * register_process(int type, pid_t pid, time_t t, unsigned timeout) { struct process *p; if (proc_avail) p = proc_pop(&proc_avail); else p = emalloc(sizeof(*p)); memset(p, 0, sizeof(*p)); p->type = type; p->timeout = timeout; p->pid = pid; p->start = t; proc_push(&proc_list, p); return p; } void deregister_process(pid_t pid, time_t t) { struct process *p; for (p = proc_list; p; p = p->next) if (p->pid == pid) { if (p->prev) p->prev->next = p->next; else proc_list = p; if (p->next) p->next->prev = p->prev; free(p); break; } } struct process * process_lookup(pid_t pid) { struct process *p; for (p = proc_list; p; p = p->next) if (p->pid == pid) return p; return NULL; } static void print_status(pid_t pid, int status, sigset_t *mask) { if (WIFEXITED(status)) { if (WEXITSTATUS(status) == 0) debug(1, (_("process %lu exited successfully"), (unsigned long) pid)); else diag(LOG_ERR, _("process %lu failed with status %d"), (unsigned long) pid, WEXITSTATUS(status)); } else if (WIFSIGNALED(status)) { int prio; if (sigismember(mask, WTERMSIG(status))) prio = LOG_DEBUG; else prio = LOG_ERR; diag(prio, _("process %lu terminated on signal %d"), (unsigned long) pid, WTERMSIG(status)); } else if (WIFSTOPPED(status)) diag(LOG_ERR, _("process %lu stopped on signal %d"), (unsigned long) pid, WSTOPSIG(status)); #ifdef WCOREDUMP else if (WCOREDUMP(status)) diag(LOG_ERR, _("process %lu dumped core"), (unsigned long) pid); #endif else diag(LOG_ERR, _("process %lu terminated with unrecognized status"), (unsigned long) pid); } void process_cleanup(int expect_term) { pid_t pid; int status; while ((pid = waitpid(-1, &status, WNOHANG)) > 0) { sigset_t set; sigemptyset(&set); if (pid == self_test_pid) { sigaddset(&set, SIGHUP); print_status(pid, status, &set); if (WIFEXITED(status)) exit_code = WEXITSTATUS(status); else if (WIFSIGNALED(status)) { if (WTERMSIG(status) == SIGHUP) exit_code = 0; else exit_code = 2; } else exit_code = 2; stop = 1; } else { struct process *p = process_lookup(pid); if (expect_term) sigaddset(&set, SIGTERM); if (!p) { sigaddset(&set, SIGTERM); sigaddset(&set, SIGKILL); } print_status(pid, status, &set); if (!p) continue; if (p->type == PROC_HANDLER) { if (p->v.redir[REDIR_OUT]) p->v.redir[REDIR_OUT]->v.master = NULL; if (p->v.redir[REDIR_ERR]) p->v.redir[REDIR_ERR]->v.master = NULL; } p->pid = 0; proc_unlink(&proc_list, p); proc_push(&proc_avail, p); } } } void process_timeouts() { struct process *p; time_t now = time(NULL); time_t alarm_time = 0, x; debug(2, (_("begin scanning process list"))); for (p = proc_list; p; p = p->next) { x = now - p->start; if (x >= p->timeout) { diag(LOG_ERR, _("process %lu timed out"), (unsigned long) p->pid); kill(p->pid, SIGKILL); } else if (alarm_time == 0 || p->timeout - x < alarm_time) alarm_time = p->timeout - x; } if (alarm_time) { debug(2, (_("scheduling alarm in %lu seconds"), (unsigned long) alarm_time)); alarm(alarm_time); } debug(2, ("end scanning process list")); } int switchpriv(struct prog_handler *hp) { if (hp->uid == 0 || hp->uid == getuid()) return 0; if (setgroups(hp->gidc, hp->gidv) < 0) { diag(LOG_CRIT, "setgroups: %s", strerror(errno)); return 1; } if (setregid(hp->gidv[0], hp->gidv[0]) < 0) { diag(LOG_CRIT, "setregid(%lu,%lu): %s", (unsigned long) hp->gidv[0], (unsigned long) hp->gidv[0], strerror(errno)); return 1; } if (setreuid(hp->uid, hp->uid) < 0) { diag(LOG_CRIT, "setreuid(%lu,%lu): %s", (unsigned long) hp->uid, (unsigned long) hp->uid, strerror(errno)); return 1; } return 0; } typedef fd_set *bigfd_set; #define BIGFD_SET_COUNT \ ((sysconf(_SC_OPEN_MAX) + FD_SETSIZE - 1) / FD_SETSIZE) #define BIGFD_SET_ALLOC() \ ecalloc(BIGFD_SET_COUNT, sizeof(fd_set)) #define BIGFD_ZERO(fds) \ memset(fds, 0, sizeof(*bigfd_set) * BIGFD_SET_COUNT) #define BIGFD_SET(n, fds) \ FD_SET((n) % FD_SETSIZE, (fds) + (n) / FD_SETSIZE) #define BIGFD_ISSET(n, fds) \ FD_ISSET((n) % FD_SETSIZE, (fds) + (n) / FD_SETSIZE) static void close_fds(bigfd_set fdset) { int i; for (i = dup(0); i >= 0; i--) { if (fdset && BIGFD_ISSET(i, fdset)) continue; close(i); } } /* Operations with handlers and redirections */ static void redir_exit(int sig) { _exit(0); } int open_redirector(const char *tag, int prio, struct process **return_proc) { int p[2]; FILE *fp; char buf[512]; pid_t pid; bigfd_set fdset; if (pipe(p)) { diag(LOG_ERR, _("cannot start redirector for %s, pipe failed: %s"), tag, strerror(errno)); return -1; } switch (pid = fork()) { case 0: /* Redirector process */ fdset = BIGFD_SET_ALLOC(); BIGFD_SET(p[0], fdset); if (facility <= 0) BIGFD_SET(2, fdset); close_fds(fdset); alarm(0); signal_setup(redir_exit); fp = fdopen(p[0], "r"); if (fp == NULL) _exit(1); if (facility > 0) openlog(tag, LOG_PID, facility); while (fgets(buf, sizeof(buf), fp) > 0) { int len = strlen(buf); if (len && buf[len-1] == '\n') buf[len-1] = 0; diag(prio, "%s", buf); } _exit(0); case -1: diag(LOG_CRIT, _("cannot run redirector `%s': fork failed: %s"), tag, strerror(errno)); return -1; default: debug(1, (_("redirector for %s started, pid=%lu"), tag, (unsigned long) pid)); close(p[0]); *return_proc = register_process(PROC_REDIR, pid, time(NULL), 0); return p[1]; } } static void runcmd(const char *cmd, char **envhint, event_mask *event, const char *file, int shell) { char *kve[13]; char *p,*q; char buf[1024]; int i = 0, j; char **argv; char *xargv[4]; struct wordsplit ws; kve[i++] = "file"; kve[i++] = (char*) file; snprintf(buf, sizeof buf, "%d", event->sys_mask); kve[i++] = "sysev_code"; kve[i++] = estrdup(buf); if (self_test_pid) { snprintf(buf, sizeof buf, "%lu", (unsigned long)self_test_pid); kve[i++] = "self_test_pid"; kve[i++] = estrdup(buf); } q = buf; for (p = trans_tokfirst(sysev_transtab, event->sys_mask, &j); p; p = trans_toknext(sysev_transtab, event->sys_mask, &j)) { if (q > buf) *q++ = ' '; while (*p) *q++ = *p++; } *q = 0; if (q > buf) { kve[i++] = "sysev_name"; kve[i++] = estrdup(buf); } p = trans_toktostr(genev_transtab, event->gen_mask); if (p) { snprintf(buf, sizeof buf, "%d", event->gen_mask); kve[i++] = "genev_code"; kve[i++] = estrdup(buf); kve[i++] = "genev_name"; kve[i++] = p; } kve[i++] = 0; ws.ws_env = (const char **) kve; if (wordsplit(cmd, &ws, WRDSF_NOCMD | WRDSF_QUOTE | WRDSF_SQUEEZE_DELIMS | WRDSF_CESCAPES | WRDSF_ENV | WRDSF_ENV_KV | (shell ? WRDSF_NOSPLIT : 0))) { diag(LOG_CRIT, "wordsplit: %s", wordsplit_strerror (&ws)); _exit(127); } if (shell) { xargv[0] = "/bin/sh"; xargv[1] = "-c"; xargv[2] = ws.ws_wordv[0]; xargv[3] = NULL; argv = xargv; } else argv = ws.ws_wordv; execve(argv[0], argv, environ_setup(envhint, kve)); diag(LOG_ERR, "execve: %s \"%s\": %s", argv[0], cmd, strerror(errno)); _exit(127); } static int prog_handler_run(struct watchpoint *wp, event_mask *event, const char *dirname, const char *file, void *data) { pid_t pid; int redir_fd[2] = { -1, -1 }; struct process *redir_proc[2] = { NULL, NULL }; struct process *p; struct prog_handler *hp = data; if (!hp->command) return 0; debug(1, (_("starting %s, dir=%s, file=%s"), hp->command, dirname, file)); if (hp->flags & HF_STDERR) redir_fd[REDIR_ERR] = open_redirector(hp->command, LOG_ERR, &redir_proc[REDIR_ERR]); if (hp->flags & HF_STDOUT) redir_fd[REDIR_OUT] = open_redirector(hp->command, LOG_INFO, &redir_proc[REDIR_OUT]); pid = fork(); if (pid == -1) { diag(LOG_ERR, "fork: %s", strerror(errno)); close(redir_fd[REDIR_OUT]); close(redir_fd[REDIR_ERR]); if (redir_proc[REDIR_OUT]) kill(redir_proc[REDIR_OUT]->pid, SIGKILL); if (redir_proc[REDIR_ERR]) kill(redir_proc[REDIR_ERR]->pid, SIGKILL); return -1; } if (pid == 0) { /* child */ bigfd_set fdset = BIGFD_SET_ALLOC(); if (switchpriv(hp)) _exit(127); if (chdir(dirname)) { diag(LOG_CRIT, _("cannot change to %s: %s"), dirname, strerror(errno)); _exit(127); } if (redir_fd[REDIR_OUT] != -1) { if (redir_fd[REDIR_OUT] != 1 && dup2(redir_fd[REDIR_OUT], 1) == -1) { diag(LOG_ERR, "dup2: %s", strerror(errno)); _exit(127); } BIGFD_SET(1, fdset); } if (redir_fd[REDIR_ERR] != -1) { if (redir_fd[REDIR_ERR] != 2 && dup2(redir_fd[REDIR_ERR], 2) == -1) { diag(LOG_ERR, "dup2: %s", strerror(errno)); _exit(127); } BIGFD_SET(2, fdset); } close_fds(fdset); alarm(0); signal_setup(SIG_DFL); runcmd(hp->command, hp->env, event, file, hp->flags & HF_SHELL); } /* master */ debug(1, (_("%s running; dir=%s, file=%s, pid=%lu"), hp->command, dirname, file, (unsigned long)pid)); p = register_process(PROC_HANDLER, pid, time(NULL), hp->timeout); if (redir_proc[REDIR_OUT]) { redir_proc[REDIR_OUT]->v.master = p; redir_proc[REDIR_OUT]->timeout = hp->timeout; } if (redir_proc[REDIR_ERR]) { redir_proc[REDIR_ERR]->v.master = p; redir_proc[REDIR_ERR]->timeout = hp->timeout; } memcpy(p->v.redir, redir_proc, sizeof(p->v.redir)); close(redir_fd[REDIR_OUT]); close(redir_fd[REDIR_ERR]); if (hp->flags & HF_NOWAIT) { return 0; } debug(1, (_("waiting for %s (%lu) to terminate"), hp->command, (unsigned long)pid)); while (time(NULL) - p->start < 2 * p->timeout) { sleep(1); process_cleanup(1); if (p->pid == 0) break; } return 0; } static void envfree(char **env) { int i; if (!env) return; for (i = 0; env[i]; i++) free(env[i]); free(env); } void prog_handler_free(struct prog_handler *hp) { free(hp->command); free(hp->gidv); envfree(hp->env); } static void prog_handler_free_data(void *ptr) { prog_handler_free((struct prog_handler *)ptr); } struct handler * prog_handler_alloc(event_mask ev_mask, filpatlist_t fpat, struct prog_handler *p) { struct handler *hp = handler_alloc(ev_mask); struct prog_handler *mem; hp->fnames = fpat; hp->run = prog_handler_run; hp->free = prog_handler_free_data; mem = emalloc(sizeof(*mem)); *mem = *p; hp->data = mem; memset(p, 0, sizeof(*p)); return hp; } /* Reallocate environment of handler HP to accomodate COUNT more entries (not bytes) plus a final NULL entry. Return offset of the first unused entry. */ size_t prog_handler_envrealloc(struct prog_handler *hp, size_t count) { size_t i; if (!hp->env) { hp->env = ecalloc(count + 1, sizeof(hp->env[0])); i = 0; } else { for (i = 0; hp->env[i]; i++) ; hp->env = erealloc(hp->env, (i + count + 1) * sizeof(hp->env[0])); memset(hp->env + i, 0, (count + 1) * sizeof(hp->env[0])); } return i; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/src/event.c����������������������������������������������������������������������������0000644�0001750�0001750�00000006235�12764623664�015270� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* direvent - directory content watcher daemon Copyright (C) 2012-2016 Sergey Poznyakoff 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. 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 <http://www.gnu.org/licenses/>. */ #include "direvent.h" struct symevt { char *name; event_mask mask; int line; }; struct grecs_symtab *evtab; unsigned hash_string(const char *name, unsigned long hashsize) { unsigned i; for (i = 0; *name; name++) { i <<= 1; i ^= *(unsigned char*) name; } return i % hashsize; } static unsigned symevt_hash(void *data, unsigned long hashsize) { struct symevt *sym = data; return hash_string(sym->name, hashsize); } static int symevt_cmp(const void *a, const void *b) { struct symevt const *syma = a; struct symevt const *symb = b; return strcmp(syma->name, symb->name); } static int symevt_copy(void *a, void *b) { struct symevt *syma = a; struct symevt *symb = b; syma->name = estrdup(symb->name); return 0; } static void symevt_free(void *p) { struct symevt *sym = p; free(sym->name); free(sym); } int defevt(const char *name, event_mask *mask, int line) { struct symevt key, *evp; int install = 1; if (!evtab) { evtab = grecs_symtab_create(sizeof(struct symevt), symevt_hash, symevt_cmp, symevt_copy, NULL, symevt_free); if (!evtab) { diag(LOG_CRIT, "not enough memory"); exit(1); } } key.name = (char *) name; evp = grecs_symtab_lookup_or_install(evtab, &key, &install); if (!install) return evp->line; evp->mask = *mask; evp->line = line; return 0; } int getevt(const char *name, event_mask *mask) { if (evtab) { struct symevt key, *evp; key.name = (char *) name; evp = grecs_symtab_lookup_or_install(evtab, &key, NULL); if (evp) { *mask = evp->mask; return 0; } } if (trans_strtotok(sysev_transtab, name, &mask->sys_mask)) return -1; mask->gen_mask = 0; return 0; } int evtnullp(event_mask *mask) { return mask->gen_mask == 0 && mask->sys_mask == 0; } struct transtab genev_transtab[] = { { "create", GENEV_CREATE }, { "write", GENEV_WRITE }, { "attrib", GENEV_ATTRIB }, { "delete", GENEV_DELETE }, { NULL } }; event_mask * event_mask_init(event_mask *m, int fflags, event_mask const *req) { int i; m->sys_mask = fflags & req->sys_mask; m->gen_mask = 0; for (i = 0; i < genev_xlat[i].gen_mask; i++) if (genev_xlat[i].sys_mask & m->sys_mask) m->gen_mask |= genev_xlat[i].gen_mask; if (req->gen_mask) m->gen_mask &= req->gen_mask; return m; } void evtsetall(event_mask *m) { int i; m->sys_mask = 0; m->gen_mask = 0; for (i = 0; i < genev_xlat[i].gen_mask; i++) { m->gen_mask |= genev_xlat[i].gen_mask; m->sys_mask |= genev_xlat[i].sys_mask; } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/src/detach-std.c�����������������������������������������������������������������������0000644�0001750�0001750�00000003265�12764623664�016167� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* direvent - directory content watcher daemon Copyright (C) 2012-2016 Sergey Poznyakoff 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. 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 <http://www.gnu.org/licenses/>. */ /* A standard "early-init" version of detach(). The initialization function is called before fork. No special actions are needed to preserve the initialized watchers' state across fork. */ #include "direvent.h" #include <unistd.h> #include <fcntl.h> #include <signal.h> #include <errno.h> #include <stdlib.h> #ifdef HAVE_PATHS_H # include <paths.h> #endif #ifndef _PATH_DEVNULL # define _PATH_DEVNULL "/dev/null" #endif int detach(void (*init)()) { struct sigaction oldsa, sa; pid_t pid; int ec; init(); sigemptyset(&sa.sa_mask); sa.sa_handler = SIG_IGN; sa.sa_flags = 0; if (sigaction(SIGHUP, &sa, &oldsa)) return -1; switch (fork()) { case -1: return -1; case 0: break; default: _exit(0); } pid = setsid(); ec = errno; sigaction(SIGHUP, &oldsa, NULL); if (pid == -1) { errno = ec; return -1; } chdir("/"); close(0); close(1); close(2); open(_PATH_DEVNULL, O_RDONLY); open(_PATH_DEVNULL, O_WRONLY); dup(1); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������direvent-5.2/configure������������������������������������������������������������������������������0000755�0001750�0001750�00001052732�13512402623�015105� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for GNU Direvent 5.2. # # Report bugs to <bug-direvent@gnu.org.ua>. # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org and $0: bug-direvent@gnu.org.ua about your system, including $0: any error possibly output before this message. Then $0: install a modern shell, or manually run the script $0: under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 </dev/null exec 6>&1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='GNU Direvent' PACKAGE_TARNAME='direvent' PACKAGE_VERSION='5.2' PACKAGE_STRING='GNU Direvent 5.2' PACKAGE_BUGREPORT='bug-direvent@gnu.org.ua' PACKAGE_URL='http://www.gnu.org.ua/software/direvent' ac_unique_file="src/direvent.c" # Factoring default headers for most tests. ac_includes_default="\ #include <stdio.h> #ifdef HAVE_SYS_TYPES_H # include <sys/types.h> #endif #ifdef HAVE_SYS_STAT_H # include <sys/stat.h> #endif #ifdef STDC_HEADERS # include <stdlib.h> # include <stddef.h> #else # ifdef HAVE_STDLIB_H # include <stdlib.h> # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include <memory.h> # endif # include <string.h> #endif #ifdef HAVE_STRINGS_H # include <strings.h> #endif #ifdef HAVE_INTTYPES_H # include <inttypes.h> #endif #ifdef HAVE_STDINT_H # include <stdint.h> #endif #ifdef HAVE_UNISTD_H # include <unistd.h> #endif" gt_needs= ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS INCLUDE_PATH_ARGS POSUB LTLIBINTL LIBINTL INTLLIBS INTL_MACOSX_LIBS XGETTEXT_EXTRA_OPTIONS MSGMERGE XGETTEXT_015 XGETTEXT GMSGFMT_015 MSGFMT_015 GMSGFMT MSGFMT GETTEXT_MACRO_VERSION USE_NLS LTLIBICONV LIBICONV host_os host_vendor host_cpu host build_os build_vendor build_cpu build GRECS_COND_BUILD_STATIC_FALSE GRECS_COND_BUILD_STATIC_TRUE GRECS_COND_BUILD_SHARED_FALSE GRECS_COND_BUILD_SHARED_TRUE GRECS_COND_BUILD_INSTALL_FALSE GRECS_COND_BUILD_INSTALL_TRUE GRECS_INCLUDE_DIR GRECS_DISTDOC GRECS_HOST_PROJECT_LDADD GRECS_HOST_PROJECT_INCLUDES GRECS_README GRECS_DISTCK_AT GRECS_CHANGELOG GRECS_DOCDIR GRECS_LDADD GRECS_EXTRA_DIST GRECS_TESTDIR GRECS_INCLUDES GRECS_BUILD_AUX GRECS_SRCDIR GRECS_TREE_API GRECS_SOCKADDR_LIST GRECS_COND_JSON_FALSE GRECS_COND_JSON_TRUE GRECS_COND_SOCKADDR_LIST_FALSE GRECS_COND_SOCKADDR_LIST_TRUE GRECS_COND_INSTALLHEADERS_FALSE GRECS_COND_INSTALLHEADERS_TRUE GRECS_COND_GIT_PARSER_FALSE GRECS_COND_GIT_PARSER_TRUE GRECS_COND_DHCPD_PARSER_FALSE GRECS_COND_DHCPD_PARSER_TRUE GRECS_COND_BIND_PARSER_FALSE GRECS_COND_BIND_PARSER_TRUE GRECS_COND_META1_PARSER_FALSE GRECS_COND_META1_PARSER_TRUE AUTOM4TE PP_SETUP_FILE PPBIN DEFAULT_PREPROCESSOR GRECS_SUBDIR LEXLIB LEX_OUTPUT_ROOT LEX YFLAGS YACC DIREVENT_RFORK_FALSE DIREVENT_RFORK_TRUE IFACE DIREVENT_KQUEUE_FALSE DIREVENT_KQUEUE_TRUE DIREVENT_INOTIFY_FALSE DIREVENT_INOTIFY_TRUE EGREP GREP CPP RANLIB am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__quote am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_dependency_tracking with_gnu_ld enable_rpath with_libiconv_prefix enable_nls with_libintl_prefix with_include_path ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP YACC YFLAGS DEFAULT_PREPROCESSOR' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures GNU Direvent 5.2 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/direvent] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of GNU Direvent 5.2:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --disable-rpath do not hardcode runtime library paths --disable-nls do not use Native Language Support Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-gnu-ld assume the C compiler uses GNU ld default=no --with-libiconv-prefix[=DIR] search for libiconv in DIR/include and DIR/lib --without-libiconv-prefix don't search for libiconv in includedir and libdir --with-libintl-prefix[=DIR] search for libintl in DIR/include and DIR/lib --without-libintl-prefix don't search for libintl in includedir and libdir --with-include-path=PATH set direvent runtime include path Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a nonstandard directory <lib dir> LIBS libraries to pass to the linker, e.g. -l<library> CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if you have headers in a nonstandard directory <include dir> CPP C preprocessor YACC The `Yet Another Compiler Compiler' implementation to use. Defaults to the first program found out of: `bison -y', `byacc', `yacc'. YFLAGS The list of arguments that will be passed by default to $YACC. This script will default YFLAGS to the empty string to avoid a default value of `-d' given by some make applications. DEFAULT_PREPROCESSOR Set default preprocessor name Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to <bug-direvent@gnu.org.ua>. GNU Direvent home page: <http://www.gnu.org.ua/software/direvent>. General help using GNU software: <http://www.gnu.org/gethelp/>. _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF GNU Direvent configure 5.2 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ( $as_echo "## -------------------------------------- ## ## Report this to bug-direvent@gnu.org.ua ## ## -------------------------------------- ##" ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case <limits.h> declares $2. For example, HP-UX 11i <limits.h> declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer <limits.h> to <assert.h> if __STDC__ is defined, since <limits.h> exists even on freestanding compilers. */ #ifdef __STDC__ # include <limits.h> #else # include <assert.h> #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by GNU Direvent $as_me 5.2, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi gt_needs="$gt_needs need-formatstring-macros" # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_config_headers="$ac_config_headers config.h" ac_aux_dir= for ac_dir in build-aux "$srcdir"/build-aux; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in build-aux \"$srcdir\"/build-aux" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. am__api_version='1.15' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi if test "$2" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi rm -f conftest.file test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if ${ac_cv_path_mkdir+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=1;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='direvent' VERSION='5.2' cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html> # <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html> mkdir_p='$(MKDIR_P)' # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar plaintar pax cpio none' # The POSIX 1988 'ustar' format is defined with fixed-size fields. # There is notably a 21 bits limit for the UID and the GID. In fact, # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 # and bug#13588). am_max_uid=2097151 # 2^21 - 1 am_max_gid=$am_max_uid # The $UID and $GID variables are not portable, so we need to resort # to the POSIX-mandated id(1) utility. Errors in the 'id' calls # below are definitely unexpected, so allow the users to see them # (that is, avoid stderr redirection). am_uid=`id -u || echo unknown` am_gid=`id -g || echo unknown` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether UID '$am_uid' is supported by ustar format" >&5 $as_echo_n "checking whether UID '$am_uid' is supported by ustar format... " >&6; } if test $am_uid -le $am_max_uid; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } _am_tools=none fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether GID '$am_gid' is supported by ustar format" >&5 $as_echo_n "checking whether GID '$am_gid' is supported by ustar format... " >&6; } if test $am_gid -le $am_max_gid; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } _am_tools=none fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to create a ustar tar archive" >&5 $as_echo_n "checking how to create a ustar tar archive... " >&6; } # Go ahead even if we have the value already cached. We do so because we # need to set the values for the 'am__tar' and 'am__untar' variables. _am_tools=${am_cv_prog_tar_ustar-$_am_tools} for _am_tool in $_am_tools; do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do { echo "$as_me:$LINENO: $_am_tar --version" >&5 ($_am_tar --version) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && break done am__tar="$_am_tar --format=ustar -chf - "'"$$tardir"' am__tar_="$_am_tar --format=ustar -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x ustar -w "$$tardir"' am__tar_='pax -L -x ustar -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H ustar -L' am__tar_='find "$tardir" -print | cpio -o -H ustar -L' am__untar='cpio -i -H ustar -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_ustar}" && break # tar/untar a dummy directory, and stop if the command works. rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file { echo "$as_me:$LINENO: tardir=conftest.dir && eval $am__tar_ >conftest.tar" >&5 (tardir=conftest.dir && eval $am__tar_ >conftest.tar) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } rm -rf conftest.dir if test -s conftest.tar; then { echo "$as_me:$LINENO: $am__untar <conftest.tar" >&5 ($am__untar <conftest.tar) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { echo "$as_me:$LINENO: cat conftest.dir/file" >&5 (cat conftest.dir/file) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } grep GrepMe conftest.dir/file >/dev/null 2>&1 && break fi done rm -rf conftest.dir if ${am_cv_prog_tar_ustar+:} false; then : $as_echo_n "(cached) " >&6 else am_cv_prog_tar_ustar=$_am_tool fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_tar_ustar" >&5 $as_echo "$am_cv_prog_tar_ustar" >&6; } # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542> Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: <http://www.gnu.org/software/coreutils/>. If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 fi fi # Enable silent rules by default: # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=0;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' # Checks for programs. for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdio.h> int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdarg.h> #include <stdio.h> struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 $as_echo_n "checking whether $CC understands -c and -o together... " >&6; } if ${am_cv_prog_cc_c_o+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 $as_echo "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 $as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from 'make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 $as_echo "$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -Wno-parentheses" >&5 $as_echo_n "checking whether $CC accepts -Wno-parentheses... " >&6; } devt_save_cc="$CC" CC="$CC -Wno-parentheses" if test "$cross_compiling" = yes; then : devt_cv_cc__Wno_parentheses=no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main() { return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : devt_cv_cc__Wno_parentheses=yes else devt_cv_cc__Wno_parentheses=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi CC="$devt_save_cc" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $devt_cv_cc__Wno_parentheses" >&5 $as_echo "$devt_cv_cc__Wno_parentheses" >&6; } if test $devt_cv_cc__Wno_parentheses = yes; then CFLAGS="$CFLAGS -Wno-parentheses" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi # Checks for libraries. # Checks for header files. ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since # <limits.h> exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include <limits.h> #else # include <assert.h> #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <ac_nonexistent.h> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since # <limits.h> exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include <limits.h> #else # include <assert.h> #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <ac_nonexistent.h> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdlib.h> #include <stdarg.h> #include <string.h> #include <float.h> int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <string.h> _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdlib.h> _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <ctype.h> #include <stdlib.h> #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in sys/inotify.h sys/event.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done # Checks for typedefs, structures, and compiler characteristics. # Checks for library functions. for ac_func in inotify_init kqueue rfork do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done if test "$ac_cv_header_sys_inotify_h/$ac_cv_func_inotify_init" = yes/yes; then iface=inotify elif test "$ac_cv_header_sys_event_h/$ac_cv_func_kqueue" = yes/yes; then iface=kqueue else as_fn_error $? "no suitable interface found" "$LINENO" 5 fi if test $iface = inotify; then DIREVENT_INOTIFY_TRUE= DIREVENT_INOTIFY_FALSE='#' else DIREVENT_INOTIFY_TRUE='#' DIREVENT_INOTIFY_FALSE= fi if test $iface = kqueue; then DIREVENT_KQUEUE_TRUE= DIREVENT_KQUEUE_FALSE='#' else DIREVENT_KQUEUE_TRUE='#' DIREVENT_KQUEUE_FALSE= fi IFACE=$iface cat >>confdefs.h <<_ACEOF #define USE_IFACE IFACE_`echo $iface|tr a-z A-Z` _ACEOF if test "$ac_cv_func_rfork" = yes; then DIREVENT_RFORK_TRUE= DIREVENT_RFORK_FALSE='#' else DIREVENT_RFORK_TRUE='#' DIREVENT_RFORK_FALSE= fi # Grecs subsystem for ac_prog in flex lex do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_LEX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$LEX"; then ac_cv_prog_LEX="$LEX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_LEX="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi LEX=$ac_cv_prog_LEX if test -n "$LEX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LEX" >&5 $as_echo "$LEX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$LEX" && break done test -n "$LEX" || LEX=":" if test "x$LEX" != "x:"; then cat >conftest.l <<_ACEOF %% a { ECHO; } b { REJECT; } c { yymore (); } d { yyless (1); } e { /* IRIX 6.5 flex 2.5.4 underquotes its yyless argument. */ yyless ((input () != 0)); } f { unput (yytext[0]); } . { BEGIN INITIAL; } %% #ifdef YYTEXT_POINTER extern char *yytext; #endif int main (void) { return ! yylex () + ! yywrap (); } _ACEOF { { ac_try="$LEX conftest.l" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$LEX conftest.l") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking lex output file root" >&5 $as_echo_n "checking lex output file root... " >&6; } if ${ac_cv_prog_lex_root+:} false; then : $as_echo_n "(cached) " >&6 else if test -f lex.yy.c; then ac_cv_prog_lex_root=lex.yy elif test -f lexyy.c; then ac_cv_prog_lex_root=lexyy else as_fn_error $? "cannot find output from $LEX; giving up" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_lex_root" >&5 $as_echo "$ac_cv_prog_lex_root" >&6; } LEX_OUTPUT_ROOT=$ac_cv_prog_lex_root if test -z "${LEXLIB+set}"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking lex library" >&5 $as_echo_n "checking lex library... " >&6; } if ${ac_cv_lib_lex+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_LIBS=$LIBS ac_cv_lib_lex='none needed' for ac_lib in '' -lfl -ll; do LIBS="$ac_lib $ac_save_LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ `cat $LEX_OUTPUT_ROOT.c` _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_lex=$ac_lib fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext test "$ac_cv_lib_lex" != 'none needed' && break done LIBS=$ac_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lex" >&5 $as_echo "$ac_cv_lib_lex" >&6; } test "$ac_cv_lib_lex" != 'none needed' && LEXLIB=$ac_cv_lib_lex fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether yytext is a pointer" >&5 $as_echo_n "checking whether yytext is a pointer... " >&6; } if ${ac_cv_prog_lex_yytext_pointer+:} false; then : $as_echo_n "(cached) " >&6 else # POSIX says lex can declare yytext either as a pointer or an array; the # default is implementation-dependent. Figure out which it is, since # not all implementations provide the %pointer and %array declarations. ac_cv_prog_lex_yytext_pointer=no ac_save_LIBS=$LIBS LIBS="$LEXLIB $ac_save_LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define YYTEXT_POINTER 1 `cat $LEX_OUTPUT_ROOT.c` _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_prog_lex_yytext_pointer=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_lex_yytext_pointer" >&5 $as_echo "$ac_cv_prog_lex_yytext_pointer" >&6; } if test $ac_cv_prog_lex_yytext_pointer = yes; then $as_echo "#define YYTEXT_POINTER 1" >>confdefs.h fi rm -f conftest.l $LEX_OUTPUT_ROOT.c fi for ac_prog in 'bison -y' byacc do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_YACC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$YACC"; then ac_cv_prog_YACC="$YACC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_YACC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi YACC=$ac_cv_prog_YACC if test -n "$YACC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $YACC" >&5 $as_echo "$YACC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$YACC" && break done test -n "$YACC" || YACC="yacc" if test "$LEX" = :; then LEX=${am_missing_run}flex fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sys/wait.h that is POSIX.1 compatible" >&5 $as_echo_n "checking for sys/wait.h that is POSIX.1 compatible... " >&6; } if ${ac_cv_header_sys_wait_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> #include <sys/wait.h> #ifndef WEXITSTATUS # define WEXITSTATUS(stat_val) ((unsigned int) (stat_val) >> 8) #endif #ifndef WIFEXITED # define WIFEXITED(stat_val) (((stat_val) & 255) == 0) #endif int main () { int s; wait (&s); s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_sys_wait_h=yes else ac_cv_header_sys_wait_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_sys_wait_h" >&5 $as_echo "$ac_cv_header_sys_wait_h" >&6; } if test $ac_cv_header_sys_wait_h = yes; then $as_echo "#define HAVE_SYS_WAIT_H 1" >>confdefs.h fi GRECS_SUBDIR=grecs # ********************** # Preprocessor # ********************** use_ext_pp=no if test $use_ext_pp != no; then # Check for default preprocessor if test -z "$DEFAULT_PREPROCESSOR" ; then DEFAULT_PREPROCESSOR="m4 -s" fi save_PATH=$PATH PREPROC_OPTIONS=`echo $DEFAULT_PREPROCESSOR | sed -n 's/[^ ][^ ]* //p'` case "$DEFAULT_PREPROCESSOR" in /*) PATH=`expr $DEFAULT_PREPROCESSOR : '\(.*\)/.*'`:$PATH DEFAULT_PREPROCESSOR=`expr $DEFAULT_PREPROCESSOR : '.*/\(.*\)'`;; esac # Extract the first word of "$DEFAULT_PREPROCESSOR", so it can be a program name with args. set dummy $DEFAULT_PREPROCESSOR; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PPBIN+:} false; then : $as_echo_n "(cached) " >&6 else case $PPBIN in [\\/]* | ?:[\\/]*) ac_cv_path_PPBIN="$PPBIN" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PPBIN="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PPBIN=$ac_cv_path_PPBIN if test -n "$PPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PPBIN" >&5 $as_echo "$PPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -n "$PPBIN"; then DEFAULT_PREPROCESSOR="$PPBIN $PREPROC_OPTIONS" PP_SETUP_FILE= if test -n "$PP_SETUP_FILE"; then case $PPBIN in *m4) ;; # Install default pp-setup *) PP_SETUP_FILE=;; # Skip it esac fi DEFAULT_PREPROCESSOR="\\\"$DEFAULT_PREPROCESSOR\\\"" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: requested preprocessor command \"$DEFAULT_PREPROCESSOR\" not found" >&5 $as_echo "$as_me: WARNING: requested preprocessor command \"$DEFAULT_PREPROCESSOR\" not found" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: preprocessing disabled" >&5 $as_echo "$as_me: WARNING: preprocessing disabled" >&2;} DEFAULT_PREPROCESSOR=NULL fi PATH=$save_PATH else DEFAULT_PREPROCESSOR=NULL fi ac_config_commands="$ac_config_commands grecs/tests/atconfig" ac_config_files="$ac_config_files grecs/tests/Makefile grecs/tests/atlocal" AUTOM4TE=${AUTOM4TE-"${am_missing_run}autom4te"} GRECS_TESTDIR=tests GRECS_EXTRA_DIST='$(WORDSPLIT_TEST)' for ac_header in getopt.h do : ac_fn_c_check_header_mongrel "$LINENO" "getopt.h" "ac_cv_header_getopt_h" "$ac_includes_default" if test "x$ac_cv_header_getopt_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_GETOPT_H 1 _ACEOF fi done for ac_func in sysconf getdtablesize getopt_long do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done GRECS_BUILD_AUX="build-aux/getopt.m4" GRECS_BUILD_AUX="$GRECS_BUILD_AUX build-aux/git2chg.awk" if false; then GRECS_COND_META1_PARSER_TRUE= GRECS_COND_META1_PARSER_FALSE='#' else GRECS_COND_META1_PARSER_TRUE='#' GRECS_COND_META1_PARSER_FALSE= fi if false; then GRECS_COND_BIND_PARSER_TRUE= GRECS_COND_BIND_PARSER_FALSE='#' else GRECS_COND_BIND_PARSER_TRUE='#' GRECS_COND_BIND_PARSER_FALSE= fi if false; then GRECS_COND_DHCPD_PARSER_TRUE= GRECS_COND_DHCPD_PARSER_FALSE='#' else GRECS_COND_DHCPD_PARSER_TRUE='#' GRECS_COND_DHCPD_PARSER_FALSE= fi if false; then GRECS_COND_GIT_PARSER_TRUE= GRECS_COND_GIT_PARSER_FALSE='#' else GRECS_COND_GIT_PARSER_TRUE='#' GRECS_COND_GIT_PARSER_FALSE= fi if false; then GRECS_COND_INSTALLHEADERS_TRUE= GRECS_COND_INSTALLHEADERS_FALSE='#' else GRECS_COND_INSTALLHEADERS_TRUE='#' GRECS_COND_INSTALLHEADERS_FALSE= fi if false; then GRECS_COND_SOCKADDR_LIST_TRUE= GRECS_COND_SOCKADDR_LIST_FALSE='#' else GRECS_COND_SOCKADDR_LIST_TRUE='#' GRECS_COND_SOCKADDR_LIST_FALSE= fi if false; then GRECS_COND_JSON_TRUE= GRECS_COND_JSON_FALSE='#' else GRECS_COND_JSON_TRUE='#' GRECS_COND_JSON_FALSE= fi GRECS_SOCKADDR_LIST=0 GRECS_TREE_API=1 GRECS_SRCDIR=grecs GRECS_INCLUDES='-I$(top_srcdir)/grecs/include -I$(top_srcdir)/grecs/wordsplit -I$(top_builddir)/grecs/include' GRECS_INCLUDE_DIR='$(pkgincludedir)' GRECS_BUILD_TYPE=static GRECS_LDADD='$(top_builddir)/grecs/src/libgrecs.a' GRECS_CHANGELOG='#' GRECS_README=README.submodule ac_config_files="$ac_config_files grecs/src/Makefile:grecs/src/Make-static.in" if test $GRECS_BUILD_TYPE = install; then GRECS_COND_BUILD_INSTALL_TRUE= GRECS_COND_BUILD_INSTALL_FALSE='#' else GRECS_COND_BUILD_INSTALL_TRUE='#' GRECS_COND_BUILD_INSTALL_FALSE= fi if test $GRECS_BUILD_TYPE = shared; then GRECS_COND_BUILD_SHARED_TRUE= GRECS_COND_BUILD_SHARED_FALSE='#' else GRECS_COND_BUILD_SHARED_TRUE='#' GRECS_COND_BUILD_SHARED_FALSE= fi if test $GRECS_BUILD_TYPE = static; then GRECS_COND_BUILD_STATIC_TRUE= GRECS_COND_BUILD_STATIC_FALSE='#' else GRECS_COND_BUILD_STATIC_TRUE='#' GRECS_COND_BUILD_STATIC_FALSE= fi ac_config_files="$ac_config_files grecs/Makefile grecs/include/Makefile grecs/include/grecs/Makefile grecs/include/grecs/types.h:grecs/include/grecs/types.h.in" GRECS_HOST_PROJECT_INCLUDES='-I$(top_srcdir)/src' # Gettext. # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if ${ac_cv_build+:} false; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if ${ac_cv_host+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac if test "X$prefix" = "XNONE"; then acl_final_prefix="$ac_default_prefix" else acl_final_prefix="$prefix" fi if test "X$exec_prefix" = "XNONE"; then acl_final_exec_prefix='${prefix}' else acl_final_exec_prefix="$exec_prefix" fi acl_save_prefix="$prefix" prefix="$acl_final_prefix" eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" prefix="$acl_save_prefix" # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by GCC" >&5 $as_echo_n "checking for ld used by GCC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | [A-Za-z]:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the path of ld ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if ${acl_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then acl_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some GNU ld's only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in *GNU* | *'with BFD'*) test "$with_gnu_ld" != no && break ;; *) test "$with_gnu_ld" != yes && break ;; esac fi done IFS="$ac_save_ifs" else acl_cv_path_LD="$LD" # Let the user override the test with a path. fi fi LD="$acl_cv_path_LD" if test -n "$LD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if ${acl_cv_prog_gnu_ld+:} false; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU ld's only accept -v. case `$LD -v 2>&1 </dev/null` in *GNU* | *'with BFD'*) acl_cv_prog_gnu_ld=yes ;; *) acl_cv_prog_gnu_ld=no ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_prog_gnu_ld" >&5 $as_echo "$acl_cv_prog_gnu_ld" >&6; } with_gnu_ld=$acl_cv_prog_gnu_ld { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shared library run path origin" >&5 $as_echo_n "checking for shared library run path origin... " >&6; } if ${acl_cv_rpath+:} false; then : $as_echo_n "(cached) " >&6 else CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh . ./conftest.sh rm -f ./conftest.sh acl_cv_rpath=done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_rpath" >&5 $as_echo "$acl_cv_rpath" >&6; } wl="$acl_cv_wl" acl_libext="$acl_cv_libext" acl_shlibext="$acl_cv_shlibext" acl_libname_spec="$acl_cv_libname_spec" acl_library_names_spec="$acl_cv_library_names_spec" acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" acl_hardcode_direct="$acl_cv_hardcode_direct" acl_hardcode_minus_L="$acl_cv_hardcode_minus_L" # Check whether --enable-rpath was given. if test "${enable_rpath+set}" = set; then : enableval=$enable_rpath; : else enable_rpath=yes fi acl_libdirstem=lib acl_libdirstem2= case "$host_os" in solaris*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit host" >&5 $as_echo_n "checking for 64-bit host... " >&6; } if ${gl_cv_solaris_64bit+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef _LP64 sixtyfour bits #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "sixtyfour bits" >/dev/null 2>&1; then : gl_cv_solaris_64bit=yes else gl_cv_solaris_64bit=no fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_solaris_64bit" >&5 $as_echo "$gl_cv_solaris_64bit" >&6; } if test $gl_cv_solaris_64bit = yes; then acl_libdirstem=lib/64 case "$host_cpu" in sparc*) acl_libdirstem2=lib/sparcv9 ;; i*86 | x86_64) acl_libdirstem2=lib/amd64 ;; esac fi ;; *) searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` if test -n "$searchpath"; then acl_save_IFS="${IFS= }"; IFS=":" for searchdir in $searchpath; do if test -d "$searchdir"; then case "$searchdir" in */lib64/ | */lib64 ) acl_libdirstem=lib64 ;; */../ | */.. ) # Better ignore directories of this form. They are misleading. ;; *) searchdir=`cd "$searchdir" && pwd` case "$searchdir" in */lib64 ) acl_libdirstem=lib64 ;; esac ;; esac fi done IFS="$acl_save_IFS" fi ;; esac test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem" use_additional=yes acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" # Check whether --with-libiconv-prefix was given. if test "${with_libiconv_prefix+set}" = set; then : withval=$with_libiconv_prefix; if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" if test "$acl_libdirstem2" != "$acl_libdirstem" \ && ! test -d "$withval/$acl_libdirstem"; then additional_libdir="$withval/$acl_libdirstem2" fi fi fi fi LIBICONV= LTLIBICONV= INCICONV= LIBICONV_PREFIX= HAVE_LIBICONV= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='iconv ' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIBICONV="${LIBICONV}${LIBICONV:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$value" else : fi else found_dir= found_la= found_so= found_a= eval libname=\"$acl_libname_spec\" # typically: libname=lib$name if test -n "$acl_shlibext"; then shrext=".$acl_shlibext" # typically: shrext=.so else shrext= fi if test $use_additional = yes; then dir="$additional_libdir" if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then if test "$enable_rpath" = no \ || test "X$found_dir" = "X/usr/$acl_libdirstem" \ || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi if test "$acl_hardcode_direct" = yes; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else haveit= for x in $LDFLAGS $LIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir" fi if test "$acl_hardcode_minus_L" != no; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_a" else LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir -l$name" fi fi additional_includedir= case "$found_dir" in */$acl_libdirstem | */$acl_libdirstem/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` if test "$name" = 'iconv'; then LIBICONV_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem2 | */$acl_libdirstem2/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` if test "$name" = 'iconv'; then LIBICONV_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INCICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then INCICONV="${INCICONV}${INCICONV:+ }-I$additional_includedir" fi fi fi fi fi if test -n "$found_la"; then save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" for dep in $dependency_libs; do case "$dep" in -L*) additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \ && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then haveit= if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LIBICONV="${LIBICONV}${LIBICONV:+ }-L$additional_libdir" fi fi haveit= for x in $LDFLAGS $LTLIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$additional_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` ;; *.la) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) LIBICONV="${LIBICONV}${LIBICONV:+ }$dep" LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$dep" ;; esac done fi else LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$acl_hardcode_libdir_separator"; then alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" done acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" else for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then for found_dir in $ltrpathdirs; do LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-R$found_dir" done fi am_save_CPPFLAGS="$CPPFLAGS" for element in $INCICONV; do haveit= for x in $CPPFLAGS; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv" >&5 $as_echo_n "checking for iconv... " >&6; } if ${am_cv_func_iconv+:} false; then : $as_echo_n "(cached) " >&6 else am_cv_func_iconv="no, consider installing GNU libiconv" am_cv_lib_iconv=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdlib.h> #include <iconv.h> int main () { iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : am_cv_func_iconv=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test "$am_cv_func_iconv" != yes; then am_save_LIBS="$LIBS" LIBS="$LIBS $LIBICONV" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdlib.h> #include <iconv.h> int main () { iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : am_cv_lib_iconv=yes am_cv_func_iconv=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$am_save_LIBS" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv" >&5 $as_echo "$am_cv_func_iconv" >&6; } if test "$am_cv_func_iconv" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working iconv" >&5 $as_echo_n "checking for working iconv... " >&6; } if ${am_cv_func_iconv_works+:} false; then : $as_echo_n "(cached) " >&6 else am_save_LIBS="$LIBS" if test $am_cv_lib_iconv = yes; then LIBS="$LIBS $LIBICONV" fi if test "$cross_compiling" = yes; then : case "$host_os" in aix* | hpux*) am_cv_func_iconv_works="guessing no" ;; *) am_cv_func_iconv_works="guessing yes" ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <iconv.h> #include <string.h> int main () { /* Test against AIX 5.1 bug: Failures are not distinguishable from successful returns. */ { iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8"); if (cd_utf8_to_88591 != (iconv_t)(-1)) { static const char input[] = "\342\202\254"; /* EURO SIGN */ char buf[10]; const char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_utf8_to_88591, (char **) &inptr, &inbytesleft, &outptr, &outbytesleft); if (res == 0) return 1; } } /* Test against Solaris 10 bug: Failures are not distinguishable from successful returns. */ { iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646"); if (cd_ascii_to_88591 != (iconv_t)(-1)) { static const char input[] = "\263"; char buf[10]; const char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_ascii_to_88591, (char **) &inptr, &inbytesleft, &outptr, &outbytesleft); if (res == 0) return 1; } } #if 0 /* This bug could be worked around by the caller. */ /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */ { iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591"); if (cd_88591_to_utf8 != (iconv_t)(-1)) { static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; char buf[50]; const char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_88591_to_utf8, (char **) &inptr, &inbytesleft, &outptr, &outbytesleft); if ((int)res > 0) return 1; } } #endif /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is provided. */ if (/* Try standardized names. */ iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1) /* Try IRIX, OSF/1 names. */ && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1) /* Try AIX names. */ && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1) /* Try HP-UX names. */ && iconv_open ("utf8", "eucJP") == (iconv_t)(-1)) return 1; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : am_cv_func_iconv_works=yes else am_cv_func_iconv_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi LIBS="$am_save_LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv_works" >&5 $as_echo "$am_cv_func_iconv_works" >&6; } case "$am_cv_func_iconv_works" in *no) am_func_iconv=no am_cv_lib_iconv=no ;; *) am_func_iconv=yes ;; esac else am_func_iconv=no am_cv_lib_iconv=no fi if test "$am_func_iconv" = yes; then $as_echo "#define HAVE_ICONV 1" >>confdefs.h fi if test "$am_cv_lib_iconv" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libiconv" >&5 $as_echo_n "checking how to link with libiconv... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBICONV" >&5 $as_echo "$LIBICONV" >&6; } else CPPFLAGS="$am_save_CPPFLAGS" LIBICONV= LTLIBICONV= fi if test "$am_cv_func_iconv" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv declaration" >&5 $as_echo_n "checking for iconv declaration... " >&6; } if ${am_cv_proto_iconv+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdlib.h> #include <iconv.h> extern #ifdef __cplusplus "C" #endif #if defined(__STDC__) || defined(__cplusplus) size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); #else size_t iconv(); #endif int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : am_cv_proto_iconv_arg1="" else am_cv_proto_iconv_arg1="const" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);" fi am_cv_proto_iconv=`echo "$am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_proto_iconv" >&5 $as_echo " $am_cv_proto_iconv" >&6; } cat >>confdefs.h <<_ACEOF #define ICONV_CONST $am_cv_proto_iconv_arg1 _ACEOF fi mkdir_p="$MKDIR_P" case $mkdir_p in [\\/$]* | ?:[\\/]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5 $as_echo_n "checking whether NLS is requested... " >&6; } # Check whether --enable-nls was given. if test "${enable_nls+set}" = set; then : enableval=$enable_nls; USE_NLS=$enableval else USE_NLS=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 $as_echo "$USE_NLS" >&6; } GETTEXT_MACRO_VERSION=0.18 # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi # Find out how to test for executable files. Don't use a zero-byte file, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "msgfmt", so it can be a program name with args. set dummy msgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_MSGFMT+:} false; then : $as_echo_n "(cached) " >&6 else case "$MSGFMT" in [\\/]* | ?:[\\/]*) ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then echo "$as_me: trying $ac_dir/$ac_word..." >&5 if $ac_dir/$ac_word --statistics /dev/null >&5 2>&1 && (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then ac_cv_path_MSGFMT="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT=":" ;; esac fi MSGFMT="$ac_cv_path_MSGFMT" if test "$MSGFMT" != ":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5 $as_echo "$MSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "gmsgfmt", so it can be a program name with args. set dummy gmsgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_GMSGFMT+:} false; then : $as_echo_n "(cached) " >&6 else case $GMSGFMT in [\\/]* | ?:[\\/]*) ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" ;; esac fi GMSGFMT=$ac_cv_path_GMSGFMT if test -n "$GMSGFMT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5 $as_echo "$GMSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;; *) MSGFMT_015=$MSGFMT ;; esac case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;; *) GMSGFMT_015=$GMSGFMT ;; esac # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi # Find out how to test for executable files. Don't use a zero-byte file, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "xgettext", so it can be a program name with args. set dummy xgettext; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_XGETTEXT+:} false; then : $as_echo_n "(cached) " >&6 else case "$XGETTEXT" in [\\/]* | ?:[\\/]*) ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then echo "$as_me: trying $ac_dir/$ac_word..." >&5 if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&5 2>&1 && (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then ac_cv_path_XGETTEXT="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":" ;; esac fi XGETTEXT="$ac_cv_path_XGETTEXT" if test "$XGETTEXT" != ":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5 $as_echo "$XGETTEXT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f messages.po case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;; *) XGETTEXT_015=$XGETTEXT ;; esac # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi # Find out how to test for executable files. Don't use a zero-byte file, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "msgmerge", so it can be a program name with args. set dummy msgmerge; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_MSGMERGE+:} false; then : $as_echo_n "(cached) " >&6 else case "$MSGMERGE" in [\\/]* | ?:[\\/]*) ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then echo "$as_me: trying $ac_dir/$ac_word..." >&5 if $ac_dir/$ac_word --update -q /dev/null /dev/null >&5 2>&1; then ac_cv_path_MSGMERGE="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" test -z "$ac_cv_path_MSGMERGE" && ac_cv_path_MSGMERGE=":" ;; esac fi MSGMERGE="$ac_cv_path_MSGMERGE" if test "$MSGMERGE" != ":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGMERGE" >&5 $as_echo "$MSGMERGE" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$localedir" || localedir='${datadir}/locale' test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS= ac_config_commands="$ac_config_commands po-directories" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFPreferencesCopyAppValue" >&5 $as_echo_n "checking for CFPreferencesCopyAppValue... " >&6; } if ${gt_cv_func_CFPreferencesCopyAppValue+:} false; then : $as_echo_n "(cached) " >&6 else gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <CoreFoundation/CFPreferences.h> int main () { CFPreferencesCopyAppValue(NULL, NULL) ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_CFPreferencesCopyAppValue=yes else gt_cv_func_CFPreferencesCopyAppValue=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$gt_save_LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5 $as_echo "$gt_cv_func_CFPreferencesCopyAppValue" >&6; } if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then $as_echo "#define HAVE_CFPREFERENCESCOPYAPPVALUE 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFLocaleCopyCurrent" >&5 $as_echo_n "checking for CFLocaleCopyCurrent... " >&6; } if ${gt_cv_func_CFLocaleCopyCurrent+:} false; then : $as_echo_n "(cached) " >&6 else gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <CoreFoundation/CFLocale.h> int main () { CFLocaleCopyCurrent(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_CFLocaleCopyCurrent=yes else gt_cv_func_CFLocaleCopyCurrent=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$gt_save_LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFLocaleCopyCurrent" >&5 $as_echo "$gt_cv_func_CFLocaleCopyCurrent" >&6; } if test $gt_cv_func_CFLocaleCopyCurrent = yes; then $as_echo "#define HAVE_CFLOCALECOPYCURRENT 1" >>confdefs.h fi INTL_MACOSX_LIBS= if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" fi LIBINTL= LTLIBINTL= POSUB= case " $gt_needs " in *" need-formatstring-macros "*) gt_api_version=3 ;; *" need-ngettext "*) gt_api_version=2 ;; *) gt_api_version=1 ;; esac gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc" gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl" if test "$USE_NLS" = "yes"; then gt_use_preinstalled_gnugettext=no if test $gt_api_version -ge 3; then gt_revision_test_code=' #ifndef __GNU_GETTEXT_SUPPORTED_REVISION #define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) #endif typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; ' else gt_revision_test_code= fi if test $gt_api_version -ge 2; then gt_expression_test_code=' + * ngettext ("", "", 0)' else gt_expression_test_code= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libc" >&5 $as_echo_n "checking for GNU gettext in libc... " >&6; } if eval \${$gt_func_gnugettext_libc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <libintl.h> $gt_revision_test_code extern int _nl_msg_cat_cntr; extern int *_nl_domain_bindings; int main () { bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_bindings ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$gt_func_gnugettext_libc=yes" else eval "$gt_func_gnugettext_libc=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$gt_func_gnugettext_libc { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then am_save_CPPFLAGS="$CPPFLAGS" for element in $INCICONV; do haveit= for x in $CPPFLAGS; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv" >&5 $as_echo_n "checking for iconv... " >&6; } if ${am_cv_func_iconv+:} false; then : $as_echo_n "(cached) " >&6 else am_cv_func_iconv="no, consider installing GNU libiconv" am_cv_lib_iconv=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdlib.h> #include <iconv.h> int main () { iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : am_cv_func_iconv=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test "$am_cv_func_iconv" != yes; then am_save_LIBS="$LIBS" LIBS="$LIBS $LIBICONV" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdlib.h> #include <iconv.h> int main () { iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : am_cv_lib_iconv=yes am_cv_func_iconv=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$am_save_LIBS" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv" >&5 $as_echo "$am_cv_func_iconv" >&6; } if test "$am_cv_func_iconv" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working iconv" >&5 $as_echo_n "checking for working iconv... " >&6; } if ${am_cv_func_iconv_works+:} false; then : $as_echo_n "(cached) " >&6 else am_save_LIBS="$LIBS" if test $am_cv_lib_iconv = yes; then LIBS="$LIBS $LIBICONV" fi if test "$cross_compiling" = yes; then : case "$host_os" in aix* | hpux*) am_cv_func_iconv_works="guessing no" ;; *) am_cv_func_iconv_works="guessing yes" ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <iconv.h> #include <string.h> int main () { /* Test against AIX 5.1 bug: Failures are not distinguishable from successful returns. */ { iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8"); if (cd_utf8_to_88591 != (iconv_t)(-1)) { static const char input[] = "\342\202\254"; /* EURO SIGN */ char buf[10]; const char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_utf8_to_88591, (char **) &inptr, &inbytesleft, &outptr, &outbytesleft); if (res == 0) return 1; } } /* Test against Solaris 10 bug: Failures are not distinguishable from successful returns. */ { iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646"); if (cd_ascii_to_88591 != (iconv_t)(-1)) { static const char input[] = "\263"; char buf[10]; const char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_ascii_to_88591, (char **) &inptr, &inbytesleft, &outptr, &outbytesleft); if (res == 0) return 1; } } #if 0 /* This bug could be worked around by the caller. */ /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */ { iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591"); if (cd_88591_to_utf8 != (iconv_t)(-1)) { static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; char buf[50]; const char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_88591_to_utf8, (char **) &inptr, &inbytesleft, &outptr, &outbytesleft); if ((int)res > 0) return 1; } } #endif /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is provided. */ if (/* Try standardized names. */ iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1) /* Try IRIX, OSF/1 names. */ && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1) /* Try AIX names. */ && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1) /* Try HP-UX names. */ && iconv_open ("utf8", "eucJP") == (iconv_t)(-1)) return 1; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : am_cv_func_iconv_works=yes else am_cv_func_iconv_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi LIBS="$am_save_LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv_works" >&5 $as_echo "$am_cv_func_iconv_works" >&6; } case "$am_cv_func_iconv_works" in *no) am_func_iconv=no am_cv_lib_iconv=no ;; *) am_func_iconv=yes ;; esac else am_func_iconv=no am_cv_lib_iconv=no fi if test "$am_func_iconv" = yes; then $as_echo "#define HAVE_ICONV 1" >>confdefs.h fi if test "$am_cv_lib_iconv" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libiconv" >&5 $as_echo_n "checking how to link with libiconv... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBICONV" >&5 $as_echo "$LIBICONV" >&6; } else CPPFLAGS="$am_save_CPPFLAGS" LIBICONV= LTLIBICONV= fi use_additional=yes acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" # Check whether --with-libintl-prefix was given. if test "${with_libintl_prefix+set}" = set; then : withval=$with_libintl_prefix; if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" if test "$acl_libdirstem2" != "$acl_libdirstem" \ && ! test -d "$withval/$acl_libdirstem"; then additional_libdir="$withval/$acl_libdirstem2" fi fi fi fi LIBINTL= LTLIBINTL= INCINTL= LIBINTL_PREFIX= HAVE_LIBINTL= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='intl ' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIBINTL="${LIBINTL}${LIBINTL:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$value" else : fi else found_dir= found_la= found_so= found_a= eval libname=\"$acl_libname_spec\" # typically: libname=lib$name if test -n "$acl_shlibext"; then shrext=".$acl_shlibext" # typically: shrext=.so else shrext= fi if test $use_additional = yes; then dir="$additional_libdir" if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then if test "$enable_rpath" = no \ || test "X$found_dir" = "X/usr/$acl_libdirstem" \ || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" else haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi if test "$acl_hardcode_direct" = yes; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" else if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else haveit= for x in $LDFLAGS $LIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir" fi if test "$acl_hardcode_minus_L" != no; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" else LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_a" else LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir -l$name" fi fi additional_includedir= case "$found_dir" in */$acl_libdirstem | */$acl_libdirstem/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` if test "$name" = 'intl'; then LIBINTL_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem2 | */$acl_libdirstem2/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` if test "$name" = 'intl'; then LIBINTL_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INCINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then INCINTL="${INCINTL}${INCINTL:+ }-I$additional_includedir" fi fi fi fi fi if test -n "$found_la"; then save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" for dep in $dependency_libs; do case "$dep" in -L*) additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \ && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then haveit= if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LIBINTL="${LIBINTL}${LIBINTL:+ }-L$additional_libdir" fi fi haveit= for x in $LDFLAGS $LTLIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$additional_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` ;; *.la) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) LIBINTL="${LIBINTL}${LIBINTL:+ }$dep" LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$dep" ;; esac done fi else LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name" LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$acl_hardcode_libdir_separator"; then alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" done acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBINTL="${LIBINTL}${LIBINTL:+ }$flag" else for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBINTL="${LIBINTL}${LIBINTL:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then for found_dir in $ltrpathdirs; do LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-R$found_dir" done fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libintl" >&5 $as_echo_n "checking for GNU gettext in libintl... " >&6; } if eval \${$gt_func_gnugettext_libintl+:} false; then : $as_echo_n "(cached) " >&6 else gt_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $INCINTL" gt_save_LIBS="$LIBS" LIBS="$LIBS $LIBINTL" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <libintl.h> $gt_revision_test_code extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (const char *); int main () { bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("") ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$gt_func_gnugettext_libintl=yes" else eval "$gt_func_gnugettext_libintl=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then LIBS="$LIBS $LIBICONV" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <libintl.h> $gt_revision_test_code extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (const char *); int main () { bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("") ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : LIBINTL="$LIBINTL $LIBICONV" LTLIBINTL="$LTLIBINTL $LTLIBICONV" eval "$gt_func_gnugettext_libintl=yes" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CPPFLAGS="$gt_save_CPPFLAGS" LIBS="$gt_save_LIBS" fi eval ac_res=\$$gt_func_gnugettext_libintl { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \ || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \ && test "$PACKAGE" != gettext-runtime \ && test "$PACKAGE" != gettext-tools; }; then gt_use_preinstalled_gnugettext=yes else LIBINTL= LTLIBINTL= INCINTL= fi if test -n "$INTL_MACOSX_LIBS"; then if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then LIBINTL="$LIBINTL $INTL_MACOSX_LIBS" LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS" fi fi if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then $as_echo "#define ENABLE_NLS 1" >>confdefs.h else USE_NLS=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use NLS" >&5 $as_echo_n "checking whether to use NLS... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 $as_echo "$USE_NLS" >&6; } if test "$USE_NLS" = "yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking where the gettext function comes from" >&5 $as_echo_n "checking where the gettext function comes from... " >&6; } if test "$gt_use_preinstalled_gnugettext" = "yes"; then if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then gt_source="external libintl" else gt_source="libc" fi else gt_source="included intl directory" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_source" >&5 $as_echo "$gt_source" >&6; } fi if test "$USE_NLS" = "yes"; then if test "$gt_use_preinstalled_gnugettext" = "yes"; then if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libintl" >&5 $as_echo_n "checking how to link with libintl... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBINTL" >&5 $as_echo "$LIBINTL" >&6; } for element in $INCINTL; do haveit= for x in $CPPFLAGS; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" fi done fi $as_echo "#define HAVE_GETTEXT 1" >>confdefs.h $as_echo "#define HAVE_DCGETTEXT 1" >>confdefs.h fi POSUB=po fi INTLLIBS="$LIBINTL" INCLUDE_PATH_ARGS='$(pkgdatadir)/$(VERSION):$(pkgdatadir)/include' # Check whether --with-include-path was given. if test "${with_include_path+set}" = set; then : withval=$with_include_path; INCLUDE_PATH_ARGS=$withval fi INCLUDE_PATH_ARGS=$(echo "$INCLUDE_PATH_ARGS" | sed 's/:/\",\"/g;s/^/\"/;s/$/\"/') # Initialize the test suite. ac_config_commands="$ac_config_commands tests/atconfig" ac_config_files="$ac_config_files tests/Makefile tests/atlocal po/Makefile.in" AUTOM4TE=${AUTOM4TE-"${am_missing_run}autom4te"} ac_config_commands="$ac_config_commands status" ac_config_files="$ac_config_files Makefile src/Makefile doc/Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs { $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 $as_echo_n "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 $as_echo "done" >&6; } if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${DIREVENT_INOTIFY_TRUE}" && test -z "${DIREVENT_INOTIFY_FALSE}"; then as_fn_error $? "conditional \"DIREVENT_INOTIFY\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${DIREVENT_KQUEUE_TRUE}" && test -z "${DIREVENT_KQUEUE_FALSE}"; then as_fn_error $? "conditional \"DIREVENT_KQUEUE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${DIREVENT_RFORK_TRUE}" && test -z "${DIREVENT_RFORK_FALSE}"; then as_fn_error $? "conditional \"DIREVENT_RFORK\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GRECS_COND_META1_PARSER_TRUE}" && test -z "${GRECS_COND_META1_PARSER_FALSE}"; then as_fn_error $? "conditional \"GRECS_COND_META1_PARSER\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GRECS_COND_BIND_PARSER_TRUE}" && test -z "${GRECS_COND_BIND_PARSER_FALSE}"; then as_fn_error $? "conditional \"GRECS_COND_BIND_PARSER\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GRECS_COND_DHCPD_PARSER_TRUE}" && test -z "${GRECS_COND_DHCPD_PARSER_FALSE}"; then as_fn_error $? "conditional \"GRECS_COND_DHCPD_PARSER\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GRECS_COND_GIT_PARSER_TRUE}" && test -z "${GRECS_COND_GIT_PARSER_FALSE}"; then as_fn_error $? "conditional \"GRECS_COND_GIT_PARSER\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GRECS_COND_INSTALLHEADERS_TRUE}" && test -z "${GRECS_COND_INSTALLHEADERS_FALSE}"; then as_fn_error $? "conditional \"GRECS_COND_INSTALLHEADERS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GRECS_COND_SOCKADDR_LIST_TRUE}" && test -z "${GRECS_COND_SOCKADDR_LIST_FALSE}"; then as_fn_error $? "conditional \"GRECS_COND_SOCKADDR_LIST\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GRECS_COND_JSON_TRUE}" && test -z "${GRECS_COND_JSON_FALSE}"; then as_fn_error $? "conditional \"GRECS_COND_JSON\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GRECS_COND_BUILD_INSTALL_TRUE}" && test -z "${GRECS_COND_BUILD_INSTALL_FALSE}"; then as_fn_error $? "conditional \"GRECS_COND_BUILD_INSTALL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GRECS_COND_BUILD_SHARED_TRUE}" && test -z "${GRECS_COND_BUILD_SHARED_FALSE}"; then as_fn_error $? "conditional \"GRECS_COND_BUILD_SHARED\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GRECS_COND_BUILD_STATIC_TRUE}" && test -z "${GRECS_COND_BUILD_STATIC_FALSE}"; then as_fn_error $? "conditional \"GRECS_COND_BUILD_STATIC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by GNU Direvent $as_me 5.2, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to <bug-direvent@gnu.org.ua>. GNU Direvent home page: <http://www.gnu.org.ua/software/direvent>. General help using GNU software: <http://www.gnu.org/gethelp/>." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ GNU Direvent config.status 5.2 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" # Capture the value of obsolete ALL_LINGUAS because we need it to compute # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it # from automake < 1.5. eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"' # Capture the value of LINGUAS because we need it to compute CATALOGS. LINGUAS="${LINGUAS-%UNSET%}" iface=$iface _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "grecs/tests/atconfig") CONFIG_COMMANDS="$CONFIG_COMMANDS grecs/tests/atconfig" ;; "grecs/tests/Makefile") CONFIG_FILES="$CONFIG_FILES grecs/tests/Makefile" ;; "grecs/tests/atlocal") CONFIG_FILES="$CONFIG_FILES grecs/tests/atlocal" ;; "grecs/src/Makefile") CONFIG_FILES="$CONFIG_FILES grecs/src/Makefile:grecs/src/Make-static.in" ;; "grecs/Makefile") CONFIG_FILES="$CONFIG_FILES grecs/Makefile" ;; "grecs/include/Makefile") CONFIG_FILES="$CONFIG_FILES grecs/include/Makefile" ;; "grecs/include/grecs/Makefile") CONFIG_FILES="$CONFIG_FILES grecs/include/grecs/Makefile" ;; "grecs/include/grecs/types.h") CONFIG_FILES="$CONFIG_FILES grecs/include/grecs/types.h:grecs/include/grecs/types.h.in" ;; "po-directories") CONFIG_COMMANDS="$CONFIG_COMMANDS po-directories" ;; "tests/atconfig") CONFIG_COMMANDS="$CONFIG_COMMANDS tests/atconfig" ;; "tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;; "tests/atlocal") CONFIG_FILES="$CONFIG_FILES tests/atlocal" ;; "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;; "status") CONFIG_COMMANDS="$CONFIG_COMMANDS status" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' <conf$$subs.awk | sed ' /^[^""]/{ N s/\n// } ' >>$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' <confdefs.h | sed ' s/'"$ac_delim"'/"\\\ "/g' >>$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named 'Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running 'make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "$am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir=$dirpart/$fdir; as_fn_mkdir_p # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ;; "grecs/tests/atconfig":C) cat >grecs/tests/atconfig <<ATEOF # Configurable variable values for building test suites. # Generated by $0. # Copyright (C) 2012 Free Software Foundation, Inc. # The test suite will define top_srcdir=$at_top_srcdir/../.. etc. at_testdir='grecs/tests' abs_builddir='$ac_abs_builddir' at_srcdir='$ac_srcdir' abs_srcdir='$ac_abs_srcdir' at_top_srcdir='$ac_top_srcdir' abs_top_srcdir='$ac_abs_top_srcdir' at_top_build_prefix='$ac_top_build_prefix' abs_top_builddir='$ac_abs_top_builddir' # Backward compatibility with Autotest <= 2.59b: at_top_builddir=\$at_top_build_prefix AUTOTEST_PATH='grecs/tests' SHELL=\${CONFIG_SHELL-'$SHELL'} ATEOF ;; "po-directories":C) for ac_file in $CONFIG_FILES; do # Support "outfile[:infile[:infile...]]" case "$ac_file" in *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; esac # PO directories have a Makefile.in generated from Makefile.in.in. case "$ac_file" in */Makefile.in) # Adjust a relative srcdir. ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` # In autoconf-2.13 it is called $ac_given_srcdir. # In autoconf-2.50 it is called $srcdir. test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" case "$ac_given_srcdir" in .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; /*) top_srcdir="$ac_given_srcdir" ;; *) top_srcdir="$ac_dots$ac_given_srcdir" ;; esac # Treat a directory as a PO directory if and only if it has a # POTFILES.in file. This allows packages to have multiple PO # directories under different names or in different locations. if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then rm -f "$ac_dir/POTFILES" test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" POMAKEFILEDEPS="POTFILES.in" # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend # on $ac_dir but don't depend on user-specified configuration # parameters. if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then # The LINGUAS file contains the set of available languages. if test -n "$OBSOLETE_ALL_LINGUAS"; then test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" fi ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"` # Hide the ALL_LINGUAS assigment from automake < 1.5. eval 'ALL_LINGUAS''=$ALL_LINGUAS_' POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" else # The set of available languages was given in configure.in. # Hide the ALL_LINGUAS assigment from automake < 1.5. eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS' fi # Compute POFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) # Compute UPDATEPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) # Compute DUMMYPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) # Compute GMOFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) case "$ac_given_srcdir" in .) srcdirpre= ;; *) srcdirpre='$(srcdir)/' ;; esac POFILES= UPDATEPOFILES= DUMMYPOFILES= GMOFILES= for lang in $ALL_LINGUAS; do POFILES="$POFILES $srcdirpre$lang.po" UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" DUMMYPOFILES="$DUMMYPOFILES $lang.nop" GMOFILES="$GMOFILES $srcdirpre$lang.gmo" done # CATALOGS depends on both $ac_dir and the user's LINGUAS # environment variable. INST_LINGUAS= if test -n "$ALL_LINGUAS"; then for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "$LINGUAS"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then INST_LINGUAS="$INST_LINGUAS $presentlang" fi done fi CATALOGS= if test -n "$INST_LINGUAS"; then for lang in $INST_LINGUAS; do CATALOGS="$CATALOGS $lang.gmo" done fi test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do if test -f "$f"; then case "$f" in *.orig | *.bak | *~) ;; *) cat "$f" >> "$ac_dir/Makefile" ;; esac fi done fi ;; esac done ;; "tests/atconfig":C) cat >tests/atconfig <<ATEOF # Configurable variable values for building test suites. # Generated by $0. # Copyright (C) 2012 Free Software Foundation, Inc. # The test suite will define top_srcdir=$at_top_srcdir/../.. etc. at_testdir='tests' abs_builddir='$ac_abs_builddir' at_srcdir='$ac_srcdir' abs_srcdir='$ac_abs_srcdir' at_top_srcdir='$ac_top_srcdir' abs_top_srcdir='$ac_abs_top_srcdir' at_top_build_prefix='$ac_top_build_prefix' abs_top_builddir='$ac_abs_top_builddir' # Backward compatibility with Autotest <= 2.59b: at_top_builddir=\$at_top_build_prefix AUTOTEST_PATH='tests' SHELL=\${CONFIG_SHELL-'$SHELL'} ATEOF ;; "status":C) cat <<EOT Selected interface: $iface EOT ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������