rush-2.4/0000755000175000017500000000000014655401532012333 5ustar00graygray00000000000000rush-2.4/ABOUT-NLS0000644000175000017500000026713314436425500013574 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. 1.1 INSTALL Matters =================== Some packages are "localizable" when properly installed; the programs they contain can be made to speak your own native language. Most such packages use GNU `gettext'. Other packages have their own ways to internationalization, predating GNU `gettext'. By default, this package will be installed to allow translation of messages. It will automatically detect whether the system already provides the GNU `gettext' functions. Installers may use special options at configuration time for changing the default behaviour. The command: ./configure --disable-nls will _totally_ disable translation of messages. When you already have GNU `gettext' installed on your system and run configure without an option for your new package, `configure' will probably detect the previously built and installed `libintl' library and will decide to use it. If not, you may have to to use the `--with-libintl-prefix' option to tell `configure' where to look for it. Internationalized packages usually have many `po/LL.po' files, where LL gives an ISO 639 two-letter code identifying the language. Unless translations have been forbidden at `configure' time by using the `--disable-nls' switch, all available translations are installed together with the package. However, the environment variable `LINGUAS' may be set, prior to configuration, to limit the installed set. `LINGUAS' should then contain a space separated list of two-letter codes, stating which languages are allowed. 1.2 Using This Package ====================== As a user, if your language has been installed for this package, you only have to set the `LANG' environment variable to the appropriate `LL_CC' combination. If you happen to have the `LC_ALL' or some other `LC_xxx' environment variables set, you should unset them before setting `LANG', otherwise the setting of `LANG' will not have the desired effect. Here `LL' is an ISO 639 two-letter language code, and `CC' is an ISO 3166 two-letter country code. For example, let's suppose that you speak German and live in Germany. At the shell prompt, merely execute `setenv LANG de_DE' (in `csh'), `export LANG; LANG=de_DE' (in `sh') or `export LANG=de_DE' (in `bash'). This can be done from your `.login' or `.profile' file, once and for all. You might think that the country code specification is redundant. But in fact, some languages have dialects in different countries. For example, `de_AT' is used for Austria, and `pt_BR' for Brazil. The country code serves to distinguish the dialects. The locale naming convention of `LL_CC', with `LL' denoting the language and `CC' denoting the country, is the one use on systems based on GNU libc. On other systems, some variations of this scheme are used, such as `LL' or `LL_CC.ENCODING'. You can get the list of locales supported by your system for your language by running the command `locale -a | grep '^LL''. Not all programs have translations for all languages. By default, an English message is shown in place of a nonexistent translation. If you understand other languages, you can set up a priority list of languages. This is done through a different environment variable, called `LANGUAGE'. GNU `gettext' gives preference to `LANGUAGE' over `LANG' for the purpose of message handling, but you still need to have `LANG' set to the primary language; this is required by other parts of the system libraries. For example, some Swedish users who would rather read translations in German than English for when Swedish is not available, set `LANGUAGE' to `sv:de' while leaving `LANG' to `sv_SE'. Special advice for Norwegian users: The language code for Norwegian bokma*l changed from `no' to `nb' recently (in 2003). During the transition period, while some message catalogs for this language are installed under `nb' and some older ones under `no', it's recommended for Norwegian users to set `LANGUAGE' to `nb:no' so that both newer and older translations are used. In the `LANGUAGE' environment variable, but not in the `LANG' environment variable, `LL_CC' combinations can be abbreviated as `LL' to denote the language's main dialect. For example, `de' is equivalent to `de_DE' (German as spoken in Germany), and `pt' to `pt_PT' (Portuguese as spoken in Portugal) in this context. 1.3 Translating Teams ===================== For the Free Translation Project to be a success, we need interested people who like their own language and write it well, and who are also able to synergize with other translators speaking the same language. Each translation team has its own mailing list. The up-to-date list of teams can be found at the Free Translation Project's homepage, `http://translationproject.org/', in the "Teams" area. If you'd like to volunteer to _work_ at translating messages, you should become a member of the translating team for your own language. The subscribing address is _not_ the same as the list itself, it has `-request' appended. For example, speakers of Swedish can send a message to `sv-request@li.org', having this message body: subscribe Keep in mind that team members are expected to participate _actively_ in translations, or at solving translational difficulties, rather than merely lurking around. If your team does not exist yet and you want to start one, or if you are unsure about what to do or how to get started, please write to `coordinator@translationproject.org' to reach the coordinator for all translator teams. The English team is special. It works at improving and uniformizing the terminology in use. Proven linguistic skills are praised more than programming skills, here. 1.4 Available Packages ====================== Languages are not equally supported in all packages. The following matrix shows the current state of internationalization, as of June 2010. The matrix shows, in regard of each package, for which languages PO files have been submitted to translation coordination, with a translation percentage of at least 50%. Ready PO files af am an ar as ast az be be@latin bg bn_IN bs ca +--------------------------------------------------+ a2ps | [] [] | aegis | | ant-phone | | anubis | | aspell | [] [] | bash | | bfd | | bibshelf | [] | binutils | | bison | | bison-runtime | [] | bluez-pin | [] [] | bombono-dvd | | buzztard | | cflow | | clisp | | coreutils | [] [] | cpio | | cppi | | cpplib | [] | cryptsetup | | dfarc | | dialog | [] [] | dico | | diffutils | [] | dink | | doodle | | e2fsprogs | [] | enscript | [] | exif | | fetchmail | [] | findutils | [] | flex | [] | freedink | | gas | | gawk | [] [] | gcal | [] | gcc | | gettext-examples | [] [] [] [] | gettext-runtime | [] [] | gettext-tools | [] [] | gip | [] | gjay | | gliv | [] | glunarclock | [] [] | gnubiff | | gnucash | [] | gnuedu | | gnulib | | gnunet | | gnunet-gtk | | gnutls | | gold | | gpe-aerial | | gpe-beam | | gpe-bluetooth | | gpe-calendar | | gpe-clock | [] | gpe-conf | | gpe-contacts | | gpe-edit | | gpe-filemanager | | gpe-go | | gpe-login | | gpe-ownerinfo | [] | gpe-package | | gpe-sketchbook | | gpe-su | [] | gpe-taskmanager | [] | gpe-timesheet | [] | gpe-today | [] | gpe-todo | | gphoto2 | | gprof | [] | gpsdrive | | gramadoir | | grep | | grub | [] [] | gsasl | | gss | | gst-plugins-bad | [] | gst-plugins-base | [] | gst-plugins-good | [] | gst-plugins-ugly | [] | gstreamer | [] [] [] | gtick | | gtkam | [] | gtkorphan | [] | gtkspell | [] [] [] | gutenprint | | hello | [] | help2man | | hylafax | | idutils | | indent | [] [] | iso_15924 | | iso_3166 | [] [] [] [] [] [] [] | iso_3166_2 | | iso_4217 | | iso_639 | [] [] [] [] | iso_639_3 | | jwhois | | kbd | | keytouch | [] | keytouch-editor | | keytouch-keyboa... | [] | klavaro | [] | latrine | | ld | [] | leafpad | [] [] | libc | [] [] | libexif | () | libextractor | | libgnutls | | libgpewidget | | libgpg-error | | libgphoto2 | | libgphoto2_port | | libgsasl | | libiconv | [] | libidn | | lifelines | | liferea | [] [] | lilypond | | linkdr | [] | lordsawar | | lprng | | lynx | [] | m4 | | mailfromd | | mailutils | | make | | man-db | | man-db-manpages | | minicom | | mkisofs | | myserver | | nano | [] [] | opcodes | | parted | | pies | | popt | | psmisc | | pspp | [] | pwdutils | | radius | [] | recode | [] [] | rosegarden | | rpm | | rush | | sarg | | screem | | scrollkeeper | [] [] [] | sed | [] [] | sharutils | [] [] | shishi | | skencil | | solfege | | solfege-manual | | soundtracker | | sp | | sysstat | | tar | [] | texinfo | | tin | | unicode-han-tra... | | unicode-transla... | | util-linux-ng | [] | vice | | vmm | | vorbis-tools | | wastesedge | | wdiff | | wget | [] [] | wyslij-po | | xchat | [] [] [] [] | xdg-user-dirs | [] [] [] [] [] [] [] [] [] | xkeyboard-config | [] [] | +--------------------------------------------------+ af am an ar as ast az be be@latin bg bn_IN bs ca 6 0 1 2 3 19 1 10 3 28 3 1 38 crh cs da de el en en_GB en_ZA eo es et eu fa +-------------------------------------------------+ a2ps | [] [] [] [] [] [] [] | aegis | [] [] [] | ant-phone | [] () | anubis | [] [] | aspell | [] [] [] [] [] | bash | [] [] [] | bfd | [] | bibshelf | [] [] [] | binutils | [] | bison | [] [] | bison-runtime | [] [] [] [] | bluez-pin | [] [] [] [] [] [] | bombono-dvd | [] | buzztard | [] [] [] | cflow | [] [] | clisp | [] [] [] [] | coreutils | [] [] [] [] | cpio | | cppi | | cpplib | [] [] [] | cryptsetup | [] | dfarc | [] [] [] | dialog | [] [] [] [] [] | dico | | diffutils | [] [] [] [] [] [] | dink | [] [] [] | doodle | [] | e2fsprogs | [] [] [] | enscript | [] [] [] | exif | () [] [] | fetchmail | [] [] () [] [] [] | findutils | [] [] [] | flex | [] [] | freedink | [] [] [] | gas | [] | gawk | [] [] [] | gcal | [] | gcc | [] [] | gettext-examples | [] [] [] [] | gettext-runtime | [] [] [] [] | gettext-tools | [] [] [] | gip | [] [] [] [] | gjay | [] | gliv | [] [] [] | glunarclock | [] [] | gnubiff | () | gnucash | [] () () () () | gnuedu | [] [] | gnulib | [] [] | gnunet | | gnunet-gtk | [] | gnutls | [] [] | gold | [] | gpe-aerial | [] [] [] [] | gpe-beam | [] [] [] [] | gpe-bluetooth | [] [] | gpe-calendar | [] | gpe-clock | [] [] [] [] | gpe-conf | [] [] [] | gpe-contacts | [] [] [] | gpe-edit | [] [] | gpe-filemanager | [] [] [] | gpe-go | [] [] [] [] | gpe-login | [] [] | gpe-ownerinfo | [] [] [] [] | gpe-package | [] [] [] | gpe-sketchbook | [] [] [] [] | gpe-su | [] [] [] [] | gpe-taskmanager | [] [] [] [] | gpe-timesheet | [] [] [] [] | gpe-today | [] [] [] [] | gpe-todo | [] [] [] | gphoto2 | [] [] () [] [] [] | gprof | [] [] [] | gpsdrive | [] [] [] | gramadoir | [] [] [] | grep | [] | grub | [] [] | gsasl | [] | gss | | gst-plugins-bad | [] [] [] [] [] | gst-plugins-base | [] [] [] [] [] | gst-plugins-good | [] [] [] [] [] [] | gst-plugins-ugly | [] [] [] [] [] [] | gstreamer | [] [] [] [] [] | gtick | [] () [] | gtkam | [] [] () [] [] | gtkorphan | [] [] [] [] | gtkspell | [] [] [] [] [] [] [] | gutenprint | [] [] [] | hello | [] [] [] [] | help2man | [] | hylafax | [] [] | idutils | [] [] | indent | [] [] [] [] [] [] [] | iso_15924 | [] () [] [] | iso_3166 | [] [] [] [] () [] [] [] () | iso_3166_2 | () | iso_4217 | [] [] [] () [] [] | iso_639 | [] [] [] [] () [] [] | iso_639_3 | [] | jwhois | [] | kbd | [] [] [] [] [] | keytouch | [] [] | keytouch-editor | [] [] | keytouch-keyboa... | [] | klavaro | [] [] [] [] | latrine | [] () | ld | [] [] | leafpad | [] [] [] [] [] [] | libc | [] [] [] [] | libexif | [] [] () | libextractor | | libgnutls | [] | libgpewidget | [] [] | libgpg-error | [] [] | libgphoto2 | [] () | libgphoto2_port | [] () [] | libgsasl | | libiconv | [] [] [] [] [] | libidn | [] [] [] | lifelines | [] () | liferea | [] [] [] [] [] | lilypond | [] [] [] | linkdr | [] [] [] | lordsawar | [] | lprng | | lynx | [] [] [] [] | m4 | [] [] [] [] | mailfromd | | mailutils | [] | make | [] [] [] | man-db | | man-db-manpages | | minicom | [] [] [] [] | mkisofs | | myserver | | nano | [] [] [] | opcodes | [] [] | parted | [] [] | pies | | popt | [] [] [] [] [] | psmisc | [] [] [] | pspp | [] | pwdutils | [] | radius | [] | recode | [] [] [] [] [] [] | rosegarden | () () () | rpm | [] [] [] | rush | | sarg | | screem | | scrollkeeper | [] [] [] [] [] | sed | [] [] [] [] [] [] | sharutils | [] [] [] [] | shishi | | skencil | [] () [] | solfege | [] [] [] | solfege-manual | [] [] | soundtracker | [] [] [] | sp | [] | sysstat | [] [] [] | tar | [] [] [] [] | texinfo | [] [] [] | tin | [] [] | unicode-han-tra... | | unicode-transla... | | util-linux-ng | [] [] [] [] | vice | () () | vmm | [] | vorbis-tools | [] [] | wastesedge | [] | wdiff | [] [] | wget | [] [] [] | wyslij-po | | xchat | [] [] [] [] [] | xdg-user-dirs | [] [] [] [] [] [] [] [] [] | xkeyboard-config | [] [] [] [] [] [] | +-------------------------------------------------+ crh cs da de el en en_GB en_ZA eo es et eu fa 5 64 105 117 18 1 8 0 28 89 18 19 0 fi fr ga gl gu he hi hr hu hy id is it ja ka kn +----------------------------------------------------+ a2ps | [] [] [] [] | aegis | [] [] | ant-phone | [] [] | anubis | [] [] [] [] | aspell | [] [] [] [] | bash | [] [] [] [] | bfd | [] [] [] | bibshelf | [] [] [] [] [] | binutils | [] [] [] | bison | [] [] [] [] | bison-runtime | [] [] [] [] [] [] | bluez-pin | [] [] [] [] [] [] [] [] | bombono-dvd | [] | buzztard | [] | cflow | [] [] [] | clisp | [] | coreutils | [] [] [] [] [] | cpio | [] [] [] [] | cppi | [] [] | cpplib | [] [] [] | cryptsetup | [] [] [] | dfarc | [] [] [] | dialog | [] [] [] [] [] [] [] | dico | | diffutils | [] [] [] [] [] [] [] [] [] | dink | [] | doodle | [] [] | e2fsprogs | [] [] | enscript | [] [] [] [] | exif | [] [] [] [] [] [] | fetchmail | [] [] [] [] | findutils | [] [] [] [] [] [] | flex | [] [] [] | freedink | [] [] [] | gas | [] [] | gawk | [] [] [] [] () [] | gcal | [] | gcc | [] | gettext-examples | [] [] [] [] [] [] [] | gettext-runtime | [] [] [] [] [] [] | gettext-tools | [] [] [] [] | gip | [] [] [] [] [] [] | gjay | [] | gliv | [] () | glunarclock | [] [] [] [] | gnubiff | () [] () | gnucash | () () () () () [] | gnuedu | [] [] | gnulib | [] [] [] [] [] [] | gnunet | | gnunet-gtk | [] | gnutls | [] [] | gold | [] [] | gpe-aerial | [] [] [] | gpe-beam | [] [] [] [] | gpe-bluetooth | [] [] [] [] | gpe-calendar | [] [] | gpe-clock | [] [] [] [] [] | gpe-conf | [] [] [] [] | gpe-contacts | [] [] [] [] | gpe-edit | [] [] [] | gpe-filemanager | [] [] [] [] | gpe-go | [] [] [] [] [] | gpe-login | [] [] [] | gpe-ownerinfo | [] [] [] [] [] | gpe-package | [] [] [] | gpe-sketchbook | [] [] [] [] | gpe-su | [] [] [] [] [] [] | gpe-taskmanager | [] [] [] [] [] | gpe-timesheet | [] [] [] [] [] | gpe-today | [] [] [] [] [] [] [] | gpe-todo | [] [] [] | gphoto2 | [] [] [] [] [] [] | gprof | [] [] [] [] | gpsdrive | [] [] [] | gramadoir | [] [] [] | grep | [] [] | grub | [] [] [] [] | gsasl | [] [] [] [] [] | gss | [] [] [] [] [] | gst-plugins-bad | [] [] [] [] [] [] | gst-plugins-base | [] [] [] [] [] [] | gst-plugins-good | [] [] [] [] [] [] | gst-plugins-ugly | [] [] [] [] [] [] | gstreamer | [] [] [] [] [] | gtick | [] [] [] [] [] | gtkam | [] [] [] [] [] | gtkorphan | [] [] [] | gtkspell | [] [] [] [] [] [] [] [] [] | gutenprint | [] [] [] [] | hello | [] [] [] | help2man | [] [] | hylafax | [] | idutils | [] [] [] [] [] [] | indent | [] [] [] [] [] [] [] [] | iso_15924 | [] () [] [] | iso_3166 | [] () [] [] [] [] [] [] [] [] [] [] | iso_3166_2 | () [] [] [] | iso_4217 | [] () [] [] [] [] | iso_639 | [] () [] [] [] [] [] [] [] | iso_639_3 | () [] [] | jwhois | [] [] [] [] [] | kbd | [] [] | keytouch | [] [] [] [] [] [] | keytouch-editor | [] [] [] [] [] | keytouch-keyboa... | [] [] [] [] [] | klavaro | [] [] | latrine | [] [] [] | ld | [] [] [] [] | leafpad | [] [] [] [] [] [] [] () | libc | [] [] [] [] [] | libexif | [] | libextractor | | libgnutls | [] [] | libgpewidget | [] [] [] [] | libgpg-error | [] [] | libgphoto2 | [] [] [] | libgphoto2_port | [] [] [] | libgsasl | [] [] [] [] [] | libiconv | [] [] [] [] [] [] | libidn | [] [] [] [] | lifelines | () | liferea | [] [] [] [] | lilypond | [] [] | linkdr | [] [] [] [] [] | lordsawar | | lprng | [] | lynx | [] [] [] [] [] | m4 | [] [] [] [] [] [] | mailfromd | | mailutils | [] [] | make | [] [] [] [] [] [] [] [] [] | man-db | [] [] | man-db-manpages | [] | minicom | [] [] [] [] [] | mkisofs | [] [] [] [] | myserver | | nano | [] [] [] [] [] [] | opcodes | [] [] [] [] | parted | [] [] [] [] | pies | | popt | [] [] [] [] [] [] [] [] [] | psmisc | [] [] [] | pspp | | pwdutils | [] [] | radius | [] [] | recode | [] [] [] [] [] [] [] [] | rosegarden | () () () () () | rpm | [] [] | rush | | sarg | [] | screem | [] [] | scrollkeeper | [] [] [] [] | sed | [] [] [] [] [] [] [] [] | sharutils | [] [] [] [] [] [] [] | shishi | [] | skencil | [] | solfege | [] [] [] [] | solfege-manual | [] [] | soundtracker | [] [] | sp | [] () | sysstat | [] [] [] [] [] | tar | [] [] [] [] [] [] [] | texinfo | [] [] [] [] | tin | [] | unicode-han-tra... | | unicode-transla... | [] [] | util-linux-ng | [] [] [] [] [] [] | vice | () () () | vmm | [] | vorbis-tools | [] | wastesedge | () () | wdiff | [] | wget | [] [] [] [] [] [] [] [] | wyslij-po | [] [] [] | xchat | [] [] [] [] [] [] [] [] [] | xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] [] [] [] | xkeyboard-config | [] [] [] [] [] | +----------------------------------------------------+ fi fr ga gl gu he hi hr hu hy id is it ja ka kn 105 121 53 20 4 8 3 5 53 2 120 5 84 67 0 4 ko ku ky lg lt lv mk ml mn mr ms mt nb nds ne +-----------------------------------------------+ a2ps | [] | aegis | | ant-phone | | anubis | [] [] | aspell | [] | bash | | bfd | | bibshelf | [] [] | binutils | | bison | [] | bison-runtime | [] [] [] [] [] | bluez-pin | [] [] [] [] [] | bombono-dvd | | buzztard | | cflow | | clisp | | coreutils | [] | cpio | | cppi | | cpplib | | cryptsetup | | dfarc | [] | dialog | [] [] [] [] [] | dico | | diffutils | [] [] | dink | | doodle | | e2fsprogs | | enscript | | exif | [] | fetchmail | | findutils | | flex | | freedink | [] | gas | | gawk | | gcal | | gcc | | gettext-examples | [] [] [] [] | gettext-runtime | [] | gettext-tools | [] | gip | [] [] | gjay | | gliv | | glunarclock | [] | gnubiff | | gnucash | () () () () | gnuedu | | gnulib | | gnunet | | gnunet-gtk | | gnutls | [] | gold | | gpe-aerial | [] | gpe-beam | [] | gpe-bluetooth | [] [] | gpe-calendar | [] | gpe-clock | [] [] [] [] [] | gpe-conf | [] [] | gpe-contacts | [] [] | gpe-edit | [] | gpe-filemanager | [] [] | gpe-go | [] [] [] | gpe-login | [] | gpe-ownerinfo | [] [] | gpe-package | [] [] | gpe-sketchbook | [] [] | gpe-su | [] [] [] [] [] [] | gpe-taskmanager | [] [] [] [] [] [] | gpe-timesheet | [] [] | gpe-today | [] [] [] [] | gpe-todo | [] [] | gphoto2 | | gprof | [] | gpsdrive | | gramadoir | | grep | | grub | | gsasl | | gss | | gst-plugins-bad | [] [] [] [] | gst-plugins-base | [] [] | gst-plugins-good | [] [] | gst-plugins-ugly | [] [] [] [] [] | gstreamer | | gtick | | gtkam | [] | gtkorphan | [] [] | gtkspell | [] [] [] [] [] [] [] | gutenprint | | hello | [] [] [] | help2man | | hylafax | | idutils | | indent | | iso_15924 | [] [] | iso_3166 | [] [] () [] [] [] [] [] | iso_3166_2 | | iso_4217 | [] [] | iso_639 | [] [] | iso_639_3 | [] | jwhois | [] | kbd | | keytouch | [] | keytouch-editor | [] | keytouch-keyboa... | [] | klavaro | [] | latrine | [] | ld | | leafpad | [] [] [] | libc | [] | libexif | | libextractor | | libgnutls | [] | libgpewidget | [] [] | libgpg-error | | libgphoto2 | | libgphoto2_port | | libgsasl | | libiconv | | libidn | | lifelines | | liferea | | lilypond | | linkdr | | lordsawar | | lprng | | lynx | | m4 | | mailfromd | | mailutils | | make | [] | man-db | | man-db-manpages | | minicom | [] | mkisofs | | myserver | | nano | [] [] | opcodes | | parted | | pies | | popt | [] [] [] | psmisc | | pspp | | pwdutils | | radius | | recode | | rosegarden | | rpm | | rush | | sarg | | screem | | scrollkeeper | [] [] | sed | | sharutils | | shishi | | skencil | | solfege | [] | solfege-manual | | soundtracker | | sp | | sysstat | [] | tar | [] | texinfo | [] | tin | | unicode-han-tra... | | unicode-transla... | | util-linux-ng | | vice | | vmm | | vorbis-tools | | wastesedge | | wdiff | | wget | [] | wyslij-po | | xchat | [] [] [] | xdg-user-dirs | [] [] [] [] [] [] [] [] | xkeyboard-config | [] [] [] | +-----------------------------------------------+ ko ku ky lg lt lv mk ml mn mr ms mt nb nds ne 20 5 10 1 13 48 4 2 2 4 24 10 20 3 1 nl nn or pa pl ps pt pt_BR ro ru rw sk sl sq sr +---------------------------------------------------+ a2ps | [] [] [] [] [] [] [] [] | aegis | [] [] [] | ant-phone | [] [] | anubis | [] [] [] | aspell | [] [] [] [] [] | bash | [] [] | bfd | [] | bibshelf | [] [] | binutils | [] [] | bison | [] [] [] | bison-runtime | [] [] [] [] [] [] [] | bluez-pin | [] [] [] [] [] [] [] [] | bombono-dvd | [] () | buzztard | [] [] | cflow | [] | clisp | [] [] | coreutils | [] [] [] [] [] [] | cpio | [] [] [] | cppi | [] | cpplib | [] | cryptsetup | [] | dfarc | [] | dialog | [] [] [] [] | dico | [] | diffutils | [] [] [] [] [] [] | dink | () | doodle | [] [] | e2fsprogs | [] [] | enscript | [] [] [] [] [] | exif | [] [] [] () [] | fetchmail | [] [] [] [] | findutils | [] [] [] [] [] | flex | [] [] [] [] [] | freedink | [] [] | gas | | gawk | [] [] [] [] | gcal | | gcc | [] | gettext-examples | [] [] [] [] [] [] [] [] | gettext-runtime | [] [] [] [] [] [] [] [] [] | gettext-tools | [] [] [] [] [] [] | gip | [] [] [] [] [] | gjay | | gliv | [] [] [] [] [] [] | glunarclock | [] [] [] [] [] | gnubiff | [] () | gnucash | [] () () () | gnuedu | [] | gnulib | [] [] [] [] | gnunet | | gnunet-gtk | | gnutls | [] [] | gold | | gpe-aerial | [] [] [] [] [] [] [] | gpe-beam | [] [] [] [] [] [] [] | gpe-bluetooth | [] [] | gpe-calendar | [] [] [] [] | gpe-clock | [] [] [] [] [] [] [] [] | gpe-conf | [] [] [] [] [] [] [] | gpe-contacts | [] [] [] [] [] | gpe-edit | [] [] [] | gpe-filemanager | [] [] [] | gpe-go | [] [] [] [] [] [] [] [] | gpe-login | [] [] | gpe-ownerinfo | [] [] [] [] [] [] [] [] | gpe-package | [] [] | gpe-sketchbook | [] [] [] [] [] [] [] | gpe-su | [] [] [] [] [] [] [] [] | gpe-taskmanager | [] [] [] [] [] [] [] [] | gpe-timesheet | [] [] [] [] [] [] [] [] | gpe-today | [] [] [] [] [] [] [] [] | gpe-todo | [] [] [] [] [] | gphoto2 | [] [] [] [] [] [] [] [] | gprof | [] [] [] | gpsdrive | [] [] | gramadoir | [] [] | grep | [] [] [] [] | grub | [] [] [] | gsasl | [] [] [] [] | gss | [] [] [] | gst-plugins-bad | [] [] [] [] [] [] | gst-plugins-base | [] [] [] [] [] | gst-plugins-good | [] [] [] [] [] | gst-plugins-ugly | [] [] [] [] [] [] | gstreamer | [] [] [] [] [] | gtick | [] [] [] | gtkam | [] [] [] [] [] [] | gtkorphan | [] | gtkspell | [] [] [] [] [] [] [] [] [] [] | gutenprint | [] [] | hello | [] [] [] [] | help2man | [] [] | hylafax | [] | idutils | [] [] [] [] [] | indent | [] [] [] [] [] [] [] | iso_15924 | [] [] [] [] | iso_3166 | [] [] [] [] [] () [] [] [] [] [] [] [] [] | iso_3166_2 | [] [] [] | iso_4217 | [] [] [] [] [] [] [] [] | iso_639 | [] [] [] [] [] [] [] [] [] | iso_639_3 | [] [] | jwhois | [] [] [] [] | kbd | [] [] [] | keytouch | [] [] [] | keytouch-editor | [] [] [] | keytouch-keyboa... | [] [] [] | klavaro | [] [] | latrine | [] [] | ld | | leafpad | [] [] [] [] [] [] [] [] [] | libc | [] [] [] [] | libexif | [] [] () [] | libextractor | | libgnutls | [] [] | libgpewidget | [] [] [] | libgpg-error | [] [] | libgphoto2 | [] [] | libgphoto2_port | [] [] [] [] [] | libgsasl | [] [] [] [] [] | libiconv | [] [] [] [] [] | libidn | [] [] | lifelines | [] [] | liferea | [] [] [] [] [] () () [] | lilypond | [] | linkdr | [] [] [] | lordsawar | | lprng | [] | lynx | [] [] [] | m4 | [] [] [] [] [] | mailfromd | [] | mailutils | [] | make | [] [] [] [] | man-db | [] [] [] | man-db-manpages | [] [] [] | minicom | [] [] [] [] | mkisofs | [] [] [] | myserver | | nano | [] [] [] [] | opcodes | [] [] | parted | [] [] [] [] | pies | [] | popt | [] [] [] [] | psmisc | [] [] [] | pspp | [] [] | pwdutils | [] | radius | [] [] [] | recode | [] [] [] [] [] [] [] [] | rosegarden | () () | rpm | [] [] [] | rush | [] [] | sarg | | screem | | scrollkeeper | [] [] [] [] [] [] [] [] | sed | [] [] [] [] [] [] [] [] [] | sharutils | [] [] [] [] | shishi | [] | skencil | [] [] | solfege | [] [] [] [] | solfege-manual | [] [] [] | soundtracker | [] | sp | | sysstat | [] [] [] [] | tar | [] [] [] [] | texinfo | [] [] [] [] | tin | [] | unicode-han-tra... | | unicode-transla... | | util-linux-ng | [] [] [] [] [] | vice | [] | vmm | [] | vorbis-tools | [] [] | wastesedge | [] | wdiff | [] [] | wget | [] [] [] [] [] [] [] | wyslij-po | [] [] [] | xchat | [] [] [] [] [] [] [] [] [] | xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] [] [] [] [] | xkeyboard-config | [] [] [] | +---------------------------------------------------+ nl nn or pa pl ps pt pt_BR ro ru rw sk sl sq sr 135 10 4 7 105 1 29 62 47 91 3 54 46 9 37 sv sw ta te tg th tr uk vi wa zh_CN zh_HK zh_TW +---------------------------------------------------+ a2ps | [] [] [] [] [] | 27 aegis | [] | 9 ant-phone | [] [] [] [] | 9 anubis | [] [] [] [] | 15 aspell | [] [] [] | 20 bash | [] [] [] | 12 bfd | [] | 6 bibshelf | [] [] [] | 16 binutils | [] [] | 8 bison | [] [] | 12 bison-runtime | [] [] [] [] [] [] | 29 bluez-pin | [] [] [] [] [] [] [] [] | 37 bombono-dvd | [] | 4 buzztard | [] | 7 cflow | [] [] [] | 9 clisp | | 10 coreutils | [] [] [] [] | 22 cpio | [] [] [] [] [] [] | 13 cppi | [] [] | 5 cpplib | [] [] [] [] [] [] | 14 cryptsetup | [] [] | 7 dfarc | [] | 9 dialog | [] [] [] [] [] [] [] | 30 dico | [] | 2 diffutils | [] [] [] [] [] [] | 30 dink | | 4 doodle | [] [] | 7 e2fsprogs | [] [] [] | 11 enscript | [] [] [] [] | 17 exif | [] [] [] | 16 fetchmail | [] [] [] | 17 findutils | [] [] [] [] [] | 20 flex | [] [] [] [] | 15 freedink | [] | 10 gas | [] | 4 gawk | [] [] [] [] | 18 gcal | [] [] | 5 gcc | [] [] [] | 7 gettext-examples | [] [] [] [] [] [] [] | 34 gettext-runtime | [] [] [] [] [] [] [] | 29 gettext-tools | [] [] [] [] [] [] | 22 gip | [] [] [] [] | 22 gjay | [] | 3 gliv | [] [] [] | 14 glunarclock | [] [] [] [] [] | 19 gnubiff | [] [] | 4 gnucash | () [] () [] () | 10 gnuedu | [] [] | 7 gnulib | [] [] [] [] | 16 gnunet | [] | 1 gnunet-gtk | [] [] [] | 5 gnutls | [] [] [] | 10 gold | [] | 4 gpe-aerial | [] [] [] | 18 gpe-beam | [] [] [] | 19 gpe-bluetooth | [] [] [] | 13 gpe-calendar | [] [] [] [] | 12 gpe-clock | [] [] [] [] [] | 28 gpe-conf | [] [] [] [] | 20 gpe-contacts | [] [] [] | 17 gpe-edit | [] [] [] | 12 gpe-filemanager | [] [] [] [] | 16 gpe-go | [] [] [] [] [] | 25 gpe-login | [] [] [] | 11 gpe-ownerinfo | [] [] [] [] [] | 25 gpe-package | [] [] [] | 13 gpe-sketchbook | [] [] [] | 20 gpe-su | [] [] [] [] [] | 30 gpe-taskmanager | [] [] [] [] [] | 29 gpe-timesheet | [] [] [] [] [] | 25 gpe-today | [] [] [] [] [] [] | 30 gpe-todo | [] [] [] [] | 17 gphoto2 | [] [] [] [] [] | 24 gprof | [] [] [] | 15 gpsdrive | [] [] [] | 11 gramadoir | [] [] [] | 11 grep | [] [] [] | 10 grub | [] [] [] | 14 gsasl | [] [] [] [] | 14 gss | [] [] [] | 11 gst-plugins-bad | [] [] [] [] | 26 gst-plugins-base | [] [] [] [] [] | 24 gst-plugins-good | [] [] [] [] | 24 gst-plugins-ugly | [] [] [] [] [] | 29 gstreamer | [] [] [] [] | 22 gtick | [] [] [] | 13 gtkam | [] [] [] | 20 gtkorphan | [] [] [] | 14 gtkspell | [] [] [] [] [] [] [] [] [] | 45 gutenprint | [] | 10 hello | [] [] [] [] [] [] | 21 help2man | [] [] | 7 hylafax | [] | 5 idutils | [] [] [] [] | 17 indent | [] [] [] [] [] [] | 30 iso_15924 | () [] () [] [] | 16 iso_3166 | [] [] () [] [] () [] [] [] () | 53 iso_3166_2 | () [] () [] | 9 iso_4217 | [] () [] [] () [] [] | 26 iso_639 | [] [] [] () [] () [] [] [] [] | 38 iso_639_3 | [] () | 8 jwhois | [] [] [] [] [] | 16 kbd | [] [] [] [] [] | 15 keytouch | [] [] [] | 16 keytouch-editor | [] [] [] | 14 keytouch-keyboa... | [] [] [] | 14 klavaro | [] | 11 latrine | [] [] [] | 10 ld | [] [] [] [] | 11 leafpad | [] [] [] [] [] [] | 33 libc | [] [] [] [] [] | 21 libexif | [] () | 7 libextractor | [] | 1 libgnutls | [] [] [] | 9 libgpewidget | [] [] [] | 14 libgpg-error | [] [] [] | 9 libgphoto2 | [] [] | 8 libgphoto2_port | [] [] [] [] | 14 libgsasl | [] [] [] | 13 libiconv | [] [] [] [] | 21 libidn | () [] [] | 11 lifelines | [] | 4 liferea | [] [] [] | 21 lilypond | [] | 7 linkdr | [] [] [] [] [] | 17 lordsawar | | 1 lprng | [] | 3 lynx | [] [] [] [] | 17 m4 | [] [] [] [] | 19 mailfromd | [] [] | 3 mailutils | [] | 5 make | [] [] [] [] | 21 man-db | [] [] [] | 8 man-db-manpages | | 4 minicom | [] [] | 16 mkisofs | [] [] | 9 myserver | | 0 nano | [] [] [] [] | 21 opcodes | [] [] [] | 11 parted | [] [] [] [] [] | 15 pies | [] [] | 3 popt | [] [] [] [] [] [] | 27 psmisc | [] [] | 11 pspp | | 4 pwdutils | [] [] | 6 radius | [] [] | 9 recode | [] [] [] [] | 28 rosegarden | () | 0 rpm | [] [] [] | 11 rush | [] [] | 4 sarg | | 1 screem | [] | 3 scrollkeeper | [] [] [] [] [] | 27 sed | [] [] [] [] [] | 30 sharutils | [] [] [] [] [] | 22 shishi | [] | 3 skencil | [] [] | 7 solfege | [] [] [] [] | 16 solfege-manual | [] | 8 soundtracker | [] [] [] | 9 sp | [] | 3 sysstat | [] [] | 15 tar | [] [] [] [] [] [] | 23 texinfo | [] [] [] [] [] | 17 tin | | 4 unicode-han-tra... | | 0 unicode-transla... | | 2 util-linux-ng | [] [] [] [] | 20 vice | () () | 1 vmm | [] | 4 vorbis-tools | [] | 6 wastesedge | | 2 wdiff | [] [] | 7 wget | [] [] [] [] [] | 26 wyslij-po | [] [] | 8 xchat | [] [] [] [] [] [] | 36 xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] | 63 xkeyboard-config | [] [] [] | 22 +---------------------------------------------------+ 85 teams sv sw ta te tg th tr uk vi wa zh_CN zh_HK zh_TW 178 domains 119 1 3 3 0 10 65 51 155 17 98 7 41 2618 Some counters in the preceding matrix are higher than the number of visible blocks let us expect. This is because a few extra PO files are used for implementing regional variants of languages, or language dialects. For a PO file in the matrix above to be effective, the package to which it applies should also have been internationalized and distributed as such by its maintainer. There might be an observable lag between the mere existence a PO file and its wide availability in a distribution. If June 2010 seems to be old, you may fetch a more recent copy of this `ABOUT-NLS' file on most GNU archive sites. The most up-to-date matrix with full percentage details can be found at `http://translationproject.org/extra/matrix.html'. 1.5 Using `gettext' in new packages =================================== If you are writing a freely available program and want to internationalize it you are welcome to use GNU `gettext' in your package. Of course you have to respect the GNU Library General Public License which covers the use of the GNU `gettext' library. This means in particular that even non-free programs can use `libintl' as a shared library, whereas only free software can use `libintl' as a static library or use modified versions of `libintl'. Once the sources are changed appropriately and the setup can handle the use of `gettext' the only thing missing are the translations. The Free Translation Project is also available for packages which are not developed inside the GNU project. Therefore the information given above applies also for every other Free Software Project. Contact `coordinator@translationproject.org' to make the `.pot' files available to the translation teams. rush-2.4/Makefile.am0000644000175000017500000000327614643176116014403 0ustar00graygray00000000000000# This file is part of GNU Rush. # Copyright (C) 2008-2024 Sergey Poznyakoff # # GNU Rush is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Rush is distributed in the hope that 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 . ACLOCAL_AMFLAGS = -I m4 -I doc/imprimatur SUBDIRS=gnu lib src etc doc po tests # We never remove files from the configuration directory distuninstallcheck_listfiles = \ find $(prefix) -type f -not -path '$(sysconfdir)/*' .PHONY: ChangeLog ChangeLog: $(AM_V_GEN)if test -d .git; then \ cmd=$(top_srcdir)/build-aux/gitlog-to-changelog; \ $$cmd --format='%s%n%n%b%n' | \ sed '/$$/d' | fmt -s > cl-t; \ echo "Local Variables:" >> cl-t; \ echo "mode: change-log" >> cl-t; \ echo "version-control: never" >> cl-t; \ echo "buffer-read-only: t" >> cl-t; \ echo "End:" >> cl-t; \ rm -f ChangeLog; \ mv cl-t ChangeLog; \ fi rush-2.4/doc/0000755000175000017500000000000014655401530013076 5ustar00graygray00000000000000rush-2.4/doc/fdl.texi0000644000175000017500000005601514643176116014553 0ustar00graygray00000000000000@c The GNU Free Documentation License. @center Version 1.3, 3 November 2008 @c This file is intended to be included within another document, @c hence no sectioning command or @node. @display Copyright @copyright{} 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. @uref{http://fsf.org/} 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. The ``publisher'' means any person or entity that distributes copies of the Document to the public. 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 in 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 under this License. Any attempt otherwise to copy, modify, sublicense, or distribute it is void, and will automatically terminate your rights under this License. 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, receipt of a copy of some or all of the same material does not give you any rights to use it. @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. If the Document specifies that a proxy can decide which future versions of this License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Document. @item RELICENSING ``Massive Multiauthor Collaboration Site'' (or ``MMC Site'') means any World Wide Web server that publishes copyrightable works and also provides prominent facilities for anybody to edit those works. A public wiki that anybody can edit is an example of such a server. A ``Massive Multiauthor Collaboration'' (or ``MMC'') contained in the site means any set of copyrightable works thus published on the MMC site. ``CC-BY-SA'' means the Creative Commons Attribution-Share Alike 3.0 license published by Creative Commons Corporation, a not-for-profit corporation with a principal place of business in San Francisco, California, as well as future copyleft versions of that license published by that same organization. ``Incorporate'' means to publish or republish a Document, in whole or in part, as part of another Document. An MMC is ``eligible for relicensing'' if it is licensed under this License, and if all works that were first published under this License somewhere other than this MMC, and subsequently incorporated in whole or in part into the MMC, (1) had no cover texts or invariant sections, and (2) were thus incorporated prior to November 1, 2008. The operator of an MMC Site may republish an MMC contained in the site under CC-BY-SA on the same site at any time before August 1, 2009, provided the MMC is eligible for relicensing. @end enumerate @page @heading 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.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 group @end smallexample If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the ``with@dots{}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: rush-2.4/doc/rushlast.10000644000175000017500000002035314643176117015037 0ustar00graygray00000000000000.\" This file is part of GNU Rush. .\" Copyright (C) 2016-2024 Sergey Poznyakoff .\" .\" GNU Rush is free software; you can redistribute it and/or modify .\" it under the terms of the GNU General Public License as published by .\" the Free Software Foundation; either version 3, or (at your option) .\" any later version. .\" .\" GNU Rush is distributed in the hope that it will be useful, .\" but WITHOUT ANY WARRANTY; without even the implied warranty of .\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the .\" GNU General Public License for more details. .\" .\" You should have received a copy of the GNU General Public License .\" along with GNU Rush. If not, see . .TH RUSHLAST 1 "August 17, 2016" "RUSHLAST" "Rush User Reference" .SH NAME rushlast \- show listing of last Rush logins .SH SYNOPSIS \fBrushlast\fR\ [\fB\-Hh\fR]\ [\fB\-F\fR \fISTRING\fR]\ [\fB\-f\fR \fIDIR\fR]\ [\fB\-n\fR \fINUMBER\fR]\ [\fB\-\-file=\fIDIR\fR]\ [\fB\-\-format=\fISTRING\fR]\ [\fB\-\-forward\fR]\ [\fB\-\-help\fR]\ [\fB\-\-no\-header\fR]\ [\fB\-\-number=\fINUMBER\fR]\ [\fB\-\-usage\fR]\ [\fB\-\-version\fR]\ [\fIUSER\fR...] .SH NOTE This manpage is a short description of \fBrushlast\fR. For a detailed discussion, including examples and usage recommendations, refer to the manual \fBGNU Rush -- a restricted user shell\fR, available in texinfo format. If the \fBinfo\fR reader and the rush documentation are properly installed on your system, the command .PP .RS +4 .B info rushlast .RE .PP should give you access to the complete manual. .PP You can also view the manual using the info mode in .BR emacs (1), or find it in various formats online at .PP .RS +4 .B http://www.gnu.org.ua/software/rush/manual .RE .PP If any discrepancies occur between this manpage and the \fBManual\fR, the later shall be considered the authoritative source. .SH DESCRIPTION Searches back through the GNU Rush database and displays a list of all user sessions since the database was created. .PP The utility operates on the default accounting database, which is maintained only if .BR rush (1) runs in accounting mode. .SH OPTIONS .TP \fB\-F\fR, \fB\-\-format=\fISTRING\fR Use \fISTRING\fR instead of the default format. Use \fISTRING\fR instead of the default format. See the section \fBFORMAT\fR, for a detailed discussion of the format syntax. If the \fISTRING\fR begins with a \fB@\fR, then this character is removed from it, and the resulting string is regarded as a name of the file to read. The file is read literally, except that lines beginning with a semicolon are ignored. .TP \fB\-f\fR, \fB\-\-file=\fIDIR\fR Look for database files in \fIDIR\fR. .TP \fB\-\-forward\fR Show entries in chronological order. .TP \fB\-H\fR, \fB\-\-no\-header\fR Do not display header line. .TP \fB\-n\fR, \fB\-\-count=\fINUMBER\fR Show at most \fINUMBER\fR records. .PP Other options .TP \fB-h\fR, \fB\-\-help\fR Give this help list. .TP \fB\-\-usage\fR Give a short usage message. .TP \fB\-\-version\fR Print program version. .SH ENVIRONMENT .TP .B RUSHLAST_FORMAT When set, supplies a format string to use instead of the built-in format. If the value begins with a .B @ sign, rest of characters is treated as the name of file to read the format from, similarly to the \fB\-\-format\fR option, which see. .sp The precedence rule for format selection is: .RS .nr step 1 1 .IP \n[step]. The \fB\-\-format\fR option. .IP \n+[step]. The \fBRUSHLAST_FORMAT\fR environment variable. .IP \n+[step]. Built-in format. .SH FORMATS The format string supplied with the \fB\-F\fR (\fB\-\-format\fR) option controls the output of every record from the GNU Rush accounting database. It consists of the following classes of objects: .TP .I Ordinary characters These are copied to the output verbatim. .TP .I Escapes An escape is a backslash, followed by a single character. It is interpreted according to the following table: .sp .nf .ta 8n 20n .ul Sequence Replaced with \\a Audible bell character (ASCII 7) \\b Backspace character (ASCII 8) \\e Escape character (ASCII 27) \\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 \\\(dq A double-quote. .fi .sp Any escape not listed in the table above results in its second character being output. .TP .I Quoted strings Strings are delimited by single or double quotes. Within a string escape sequences are interpreted as described above. .TP .I Format specifications Format specification can be regarded as a kind of function, which outputs a particular piece of information from the database record. Syntactically, format specification starts with an opening brace and ends with a closing brace. The first word after the brace is the name of the specification. The rest of words are \fIpositional arguments\fR followed by \fIkeyword arguments\fR. Both are optional. A keyword argument begins with a colon. .PP The available format specifications are: .TP \fB(newline\fR [\fICOUNT\fR]\fB)\fR Causes the newline character to be output. If the optional \fIcount\fR is supplied, that many newlines will be printed .TP \fB(tab\fR [\fICOUNT\fR]\fB)\fR Advance to the next tab stop in the output stream. If optional \fICOUNT\fR is present, then skip that many tab stops. Each tab stop is eight characters long. .PP The following specifications output particular fields of a database record. They all take two positional arguments: \fIWIDTH\fR and \fITITLE\fR. .PP The first argument, \fIWIDTH\fR sets the maximum output length for this specification. If the number of characters actually output is less than the width, they will be padded with whitespace either to the left or to the right, depending on the presence of the \fB:right\fR keyword argument. If the number of characters is greater than \fIWIDTH\fR, they will be truncated to fit. If \fIWIDTH\fR is not given, the exact data are output as is. .PP The second argument, \fITITLE\fR, gives the title of this column for the heading line. By default no title is output. .PP Every field specification accepts at least two keyword arguments. The keyword \fB:right\fR may be used to request alignment to the right for the data. This keyword is ignored if \fIWIDTH\fR is not given. .PP The keyword \fB:empty\fR followed by a string causes the program to output that string if the resulting value for this specification would otherwise be empty. .TP \fB(user \fIWIDTH\fR \fITITLE\fR [\fB:empty\fR \fIREPL\fR][\fB:right\fR]\fB)\fR Print the user login name. .TP \fB(start\-time \fIWIDTH\fR \fITITLE\fR [\fB:empty\fR \fIREPL\fR][\fB:right\fR][\fB:format\fI \fIDATE-FORMAT\fR]\fB)\fR Date and time when the session started. The \fB:format\fR keyword introduces the .BR strftime (3) format string to be used when converting the date for printing. The default value is \fB"%a %H:%M"\fR. .TP \fB(stop\-time \fIWIDTH\fR \fITITLE\fR [\fB:empty\fR \fIREPL\fR][\fB:right\fR][\fB:format\fI \fIDATE-FORMAT\fR]\fB)\fR Time when the command finished. If it is still running, the word .B running is output. .TP \fB(duration \fIWIDTH\fR \fITITLE\fR [\fB:empty\fR \fIREPL\fR][\fB:right\fR]\fB)\fR Total time of the session duration. .TP \fB(rule \fIWIDTH\fR \fITITLE\fR [\fB:right\fR]\fB)\fR The tag of the rule that was used to serve the user. .TP \fB(command \fIWIDTH\fR \fITITLE\fR [\fB:empty\fR \fIREPL\fR][\fB:right\fR]\fB)\fR Command line being executed. .TP \fB(pid \fIWIDTH\fR \fITITLE\fR [\fB:right\fR]\fB)\fR PID of the process. .PP The default format is: .PP .EX (user 10 Login)" " (rule 8 Rule)" " (start-time 0 Start)" " (stop-time 0 Stop)" " (duration 7 Time)" " (command 32 Command) .EE .SH SEE ALSO .BR rush (1), .BR rushwho (1). .SH AUTHORS Sergey Poznyakoff .SH "BUG REPORTS" Report bugs to . .SH COPYRIGHT Copyright \(co 2016 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: rush-2.4/doc/rush.rc.50000644000175000017500000012143614643176117014566 0ustar00graygray00000000000000.\" This file is part of GNU Rush. .\" Copyright (C) 2016-2024 Sergey Poznyakoff .\" .\" GNU Rush is free software; you can redistribute it and/or modify .\" it under the terms of the GNU General Public License as published by .\" the Free Software Foundation; either version 3, or (at your option) .\" any later version. .\" .\" GNU Rush is distributed in the hope that it will be useful, .\" but WITHOUT ANY WARRANTY; without even the implied warranty of .\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the .\" GNU General Public License for more details. .\" .\" You should have received a copy of the GNU General Public License .\" along with GNU Rush. If not, see . .\" .\" Additional macros used in this document: .\" .\" Begins example text .de ex . nr rush-saved-indent \\n[.i] . nr rush-level-indent (\\n[rush-saved-indent] +2m) . nr mE \\n(.f . nf . nh . ft CW . in \\n[rush-level-indent]u . sp .. .\" End example. .de ee . in \\n[rush-saved-indent]u . ft \\n(mE . fi . hy \\n(HY . sp .. .de table . sp . nf . ta \\$1 \\$2 .. .de tabend . fi . sp .. .\" Document begins .TH RUSH.RC 5 "July 1, 2019" "RUSH.RC" "Rush User Reference" .SH NAME rush.rc \- configuration rules for remote user shell .SH DESCRIPTION The file .B /etc/rush.rc contains a set of rules that the .BR rush (8) shell uses in order to determine whether the user is allowed to execute the requested command and to set up the environment for its execution. .PP Empty lines are ignored. Lines beginning with a pound sign are comments and are ignored as well. .PP Except for comments and empty lines, each line of the configuration file consists of the keyword and optional value, and constitutes a \fIstatement\fR. Exceedingly long lines may be split across multiple physical lines, by ending each line with a backslash immediately followed by a newline. Statements fall into two major classes: \fIsection\fR and \fIregular\fR statements. A \fIsection\fR statement serves as a container for one or more regular statements that pursue the same goal, thus playing the role of a chapter in a book. A \fIregular\fR statement modifies a certain aspect of the program's behavior. .PP The overall file structure is as follows: .ex .B rush 2.0 .B global \fIkeyword\fR \fIvalue\fR ... .B rule \fIA\fB \fIkeyword\fR \fIvalue\fR ... .B rule \fIB\fB \fIkeyword\fR \fIvalue\fR ... .ee .PP A configuration file must begin with a \fBrush\fR statement indicating the version of the syntax this file uses. Current versions of \fBrush\fR implement syntax version 2.0. In the absence of the initial \fBrush\fR statement, the program will treat the configuration file as written in legacy configuration syntax (see .B http://www.gnu.org.ua/software/rush/manual/1.x for details). .PP There are two section statements: .B global and .BR rule . The .B global section contains statements configuring the behavior of the program in general. There can be as many \fBglobal\fR statements in the configuration as you consider necessary, each of them affecting the material up to the next \fBglobal\fR statement, or end of the file, whichever occurs first. .PP Examples of statements that can be used in a \fBglobal\fR section are: .BR debug , which sets the debug verbosity level, .BR message , which configures error messages, etc. See the .B global section for the full list. .PP One or more .B rule statements constitute the core of the configuration. Each .B rule statement provides a recipe for serving a specific class of input commands. When .B rush is invoked with a specific command, it will scan the configuration file looking for a rule that matches the requested command line. If such a rule is found, it will be applied. Commands that don't match any rule will be rejected. .PP A \fBrule\fR statement may be followed by a \fItag\fR, an arbitrary sequence of non-whitespace characters serving as a label for this rule. This sequence will be used in diagnostic messages to identify this rule. In the absence of user-supplied tag, the default one will be generated, consisting of the \fB#\fR symbol followed by the ordinal number of the rule in the configuration file (started with 1). .PP To match a particular command, each rule should contain the .B match statement. Its argument is a conditional expression that can contain comparison and boolean operators. The operands can refer to the command line using shell-like variables: .B $command to refer to the entire command line, .BR $# , referring to the number of arguments in the command line (the command itself being counted as one of the arguments), .BR $0 meaning the command name, and .BR $1 , .BR $2 , etc., referring to the particular command line arguments (arguments past the ninth one can be accessed as, e.g. .BR ${10} ). For example, the following rule: .ex rule match $command == "ls" .ee will match only the .B ls command without arguments. .PP The .B ~ (tilde) operator denotes regular expression matching. For example, the following rule matches \fBls\fR command, optionally preceded with any path prefix: .ex rule match $0 ~ "^(.*/)?ls$" .ee \fBMatch\fR expressions can contain terms of arbitrary complexity. Consider the following example: .ex rule match $0 ~ "^(.*/)?ls$" && $# == 2 \\ && $1 !~ "^(/|/etc)$" .ee This rule will match any \fBls\fR command having exactly one argument, unless that argument is \fB/\fR or \fB/etc\fR. Notice the use of the .B !~ operator to denote the negated regular expression matching, and the use of backslash to split a single expression across two physical lines. .PP Variables are referenced using the same syntax as in shell. For example, .B ${1:-/bin} expands to the value of the first parameter, if it is supplied, or to the string "/bin" otherwise. For details. see the section .BR "REFERENCE: VARIABLE EXPANSION" . .PP Although important, the \fBmatch\fR statement is not mandatory in a \fBrule\fR statement. If it is absent, the rule will match any command line. This is normally used in \fIfall-through\fR rules. A fall-through rule applies modifications to the command environment. After applying such rule, the scanning resumes at the rule that follows it. Fall-through rules are marked with the .BR fall\-through statement. .SS set A rule can modify the command line and environment in which it will be executed. The \fBset\fR statement is provided for altering the command line or its parts. It takes three arguments: the variable name or index, the operator and the value. For example, the statement: .ex set command = "/bin/sftp-server -u 002" .ee replaces the entire command line. To replace particular arguments, use the \fB[\fIN\fR]\fR syntax, where \fIN\fR is the index of the argument in the command line. For example, to set the first argument: .ex set [1] = "/tmp" .ee The part to the right of the equals sign can contain a transformation, i.e. a string followed by the \fB~\fR operand and a \fIs-expression\fR of the form \fBs/\fIregexp\fB/\fIreplacement\fB/\fR[\fIflags\fR]. Parenthesized groups in \fIregexp\fR can be referred to in \fIreplacement\fR using the backreference construct \fB\\\fIN\fR, where \fIN\fR is the 1-based ordinal number of the group. For example, the following statement sets the second argument to the directory part of the first one: .ex set [2] = "$1" ~ "s/(.*)\\\\//\\\\1/" .ee Two points are worth noticing. First, the left operand of \fB~\fR undergoes variable expansion. Secondly, the right-hand side operand is quoted and therefore each backslash in it has to be escaped. .PP The special operator \fB=~\fR is used if the resulted value is assigned to the same variable that served as its argument. For example, the two statements below are equivalent: .ex set [1] =~ "s/(.*)\\\\//\\\\1/" set [1] = "$1" ~ "s/(.*)\\\\//\\\\1/" .ee Parenthesized groups matched by the most recent \fBset\fR statement remain available for use in the statements that follow it in the rule. To refer to the group from the recent matching, use the following construct: \fB%\fIN\fR. For example, the following two statements set the first argument to the directory part, and second argument to the base name of the original \fB$1\fR value: .ex set [1] =~ "s/(.*)\\\\/(.*)/\\\\1/" set [2] = %2 .ee The .B set statement operates not only on positional arguments and built-in variables, but also on arbitrary user-defined variables. A user-defined variable springs into existence when it first appears as a left-hand side argument to the \fBset\fR statement. The name of the variable must follow the usual rules for variable names: it must begin with an alphabetical character or underscore and contain only letters, digits and underscores. References to user-defined variables follow the same syntax as for built-in ones. .PP The following example uses temporary variable \fBtemp\fR to swap two arguments: .ex set temp = $1 set [1] = $2 set [2] = $temp .ee .SS unset Variable definitions can be removed using the \fBunset\fR statement. It takes variable name or positional argument index as its argument: .ex unset temp .ee When index is given, the corresponding positional argument is removed and all arguments to the right of it are shifted one position left to occupy the released slot. For example, given the command line .ex scp -d -v -t /incoming .ee the statement .ex unset 1 .ee will reduce it to .ex scp -v -t /incoming .ee .SS delete The \fBdelete\fR statement provides a generalization of \fBunset\fR for positional arguments. It takes one or two argument indexes as arguments. When used with one index, it provides the same functionality as \fBunset\fR. When two indices are given, it deletes all arguments between those indices (inclusive). For example, the statement .ex delete 1 2 .ee will change the command line from the above example to .ex scp -t /incoming .ee Using negative indices, one can indicate arguments counting from right to left. Thus, the following will delete all arguments starting from the third: .ex delete 3 -1 .ee .SS remopt Whereas \fBdelete\fR and \fBunset\fR remove arguments at given positions, the \fBremopt\fR statement allows you to remove specific \fIcommand line options\fR from the command line. This is useful to ensure no potentially harmful options can be passed by the user. The statement takes one or two arguments. First argument supplies the short option letter. For example, the following removes all occurrences of the \fB\-A\fR option: .ex remopt A .ee If there is a long-option equivalent, it can be supplied as the second argument. For example, if \fB\-\-all\fR is an alias for \fB\-A\fR, the above statement would be rewritten as: .ex remopt A all .ee Notice, that the initial dash or double-dash is omitted from both the short and long option designation. .PP When looking for long option in the command line, \fBremopt\fR will recognize its possible abbreviations. In the example above, eventual occurrences of \fB\-\-al\fR will be removed as well. .PP If the option takes an argument, follow the first argument by a colon. For example, to remove occurrences of the options \fB\-r\fR along with its arguments write .ex remopt r: .ee The long option equivalent can be specified as well, e.g.: .ex remopt r: root .ee This will recognize all possible ways of option usage in the command line, such as: .BR "\-r ARG", .BR "\-rARG" , .BR "\-\-root=ARG" , or .BR "\-\-root ARG" . .B "\-afr ARG" In each case, both the option and its argument will be removed, so that the modified command line will remain valid. Short option appearing in a cluster will be recognized, .e.g .B \-afr ARG will be replaced by .BR \-af . Finally, if the option takes an optional argument, follow its short letter by two colons, as in: .ex remopt r:: root .ee .SS insert Arguments can also be inserted at arbitrary positions. The \fBinsert\fR statement is provided for this purpose. Its syntax is similar to \fBset\fR: .ex \fBinsert [\fIN\fB] = \fIvalue\fR .ee and .ex \fBinsert [\fIN\fB] = \fIvalue\fB ~ s/\fIregex\fB/\fIreplace\fB/ .ee where \fIN\fR is the position where to insert the new argument. All arguments starting from \fIN\fRth will be shifted one position to the right, and the \fIvalue\fR will be stored in the \fIN\fRth slot. In the second form, the value to be inserted is computed by applying the replacement expression to \fIvalue\fR. .SH REFERENCE: LEXICAL STRUCTURE A .I statement consists of a keyword and arguments, separated by any amount of whitespace. Arguments can be one of the following: .TP .I Identifiers Identifiers begin with a letter and consist of letters, digits, underscores and dashes. They serve as keywords and variable names. .TP .I Decimal numbers A sequence of decimal digits, optionally preceded by a minus or plus sign. .TP .I Unquoted strings An unquoted string is any contiguous sequence of any characters, except newlines, whitespace and the following special characters: .BR \e , .BR \(dq , .BR ! , .BR = , .BR < , .BR > , .BR ( , .BR ) , .BR { , .BR } , .BR [ , .BR ] , .BR $ , .BR % , .BR & , .BR | , .BR ~ , .BR # . .TP .I Quoted strings A quoted string is a sequence of characters enclosed in double-quotes. Quoted strings are subject to backslash interpretation, backreference interpretation and variable expansion. .sp During \fIbackslash interpretation\fR, the \fIescape sequences\fR are recognized and replaced as per table below: .table 8n 20n .ul 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 \\\(dq A double-quote. \\% Percent sign .tabend In addition, the sequence \fB\\\fInewline\fR is removed from the string. This allows to split long strings over several physical lines. .sp During the \fIbackreference interpretation\fR, references to parenthesized groups in regular expression are replaced with the actual content of the corresponding group in the most recently matched string. A reference is \fB%{\fIN\fB}\fR where \fIN\fR is a decimal number. If \fIN\fR is one digit, curly braces can be omitted: \fB%\fIN\fR If the \fB%\fR character resulted from previous backslash interpretation, no backreference interpretation occurs. .sp Strings used in the left-hand side of a comparison expression are subject to variable expansion. This is discussed later. .TP .I Backreferences The construct \fB%{\fIN\fB}\fR is replaced with the substring that matched the \fIN\fRth parenthesized subgroup in a most recently performed regular expression match. If \fIN\fR is one digit, curly braces can be omitted. .TP .I Variable references Variable references consist of a \fB$\fR sign, followed by the positional argument number or variable name, optionally enclosed in curly braces. Positional arguments greater than 9 must be enclosed in curly braces. The variable name must follow the rules for valid identifiers: it must begin with a letter and consist of letters, digits and underscores. Variable name in curly braces can be followed by \fB\-\fR, \fB=\fR, \fB?\fR, or \fB+\fR, optionally preceded by \fB:\fR as summarized in the table below: .table 8n 30n .ul Reference Meaning ${\fIVAR\fR:-\fIWORD\fR} Use Default Values ${\fIVAR\fR:=\fIWORD\fR} Assign Default Values ${\fIVAR\fR:?\fIWORD\fR} Display Error if Null or Unset ${\fIVAR\fR:+\fIWORD\fR} Use Alternate Value .tabend where \fIWORD\fR stands for any valid token as described in this section. See the section \fBREFERENCE: VARIABLE EXPANSION\fR, for a detailed discussion of these forms and their meaning. .TP .I Comparison and boolean operators .table 8n 30n && Boolean AND || Boolean OR ! Boolean negation == Equality (string or numeric) != Inequality (string or numeric) < Less than <= Less than or equal to > Greater than >= Greater than or equal to ~ Regexp matching !~ Negated regexp matching in Membership in set of strings group Membership in UNIX group = Assignment =~ Regular expression substitution .tabend .SH REFERENCE: VARIABLE EXPANSION Most statements in the configuration file undergo variable expansion prior to their use. During variable expansion, references to variables in the string are replaced with their actual values. A variable reference has two basic forms: .ex $V ${V} .ee where \fIV\fR is either the name of the variable (request, environment, or user-defined), or the index of the positional variable. The notation in curly braces serves several purposes. First, it is obligatory if \fIV\fR is an index of the positional variable that is negative or greater than 9. Secondly, it should be used if the variable reference is immediately followed by an alphanumeric symbol, which will otherwise be considered part of it (as in \fB${home}dir\fR). Finally, this form allows for specifying the action to take if the variable is undefined or expands to an empty value. .PP The following special forms are recognized: .TP \fB${\fIVARIABLE\fB:-\fIWORD\fB}\fR .IR "Use Default Values" . If \fIVARIABLE\fR is unset or null, the expansion of \fIWORD\fR is substituted. Otherwise, the value of \fIVARIABLE\fR is substituted. .TP \fB${\fIVARIABLE\fB:=\fIWORD\fB}\fR .IR "Assign Default Values" . If \fIVARIABLE\fR is unset or null, the expansion of \fIWORD\fR is assigned to the variable. The value of \fIVARIABLE\fR is then substituted. .TP \fB${\fIVARIABLE\fB:?\fIWORD\fB}\fR .IR "Display Error if Null or Unset" . If \fIVARIABLE\fR is null or unset, the expansion of \fIWORD\fR (or a message to that effect if \fIWORD\fR is not present) is output to the current logging channel. Otherwise, the value of \fIVARIABLE\fR is substituted. .TP \fB${\fIVARIABLE\fB:+\fIWORD\fB}\fR .IR "Use Alternate Value" . If \fIVARIABLE\fR is null or unset, nothing is substituted, otherwise the expansion of \fIWORD\fR is substituted. .SH REFERENCE: STATEMENTS There are three global statements, two of which can contain multiple substatements: .TP .B rush 2.0 Declares the version of the syntax this configuration file is written in. This must be the first statement in the configuration file. If this statement is missing, the configuration file will be treated as .I legacy configuration file from previous versions of .BR "GNU rush" . For the discussion of the legacy configuration file, please refer to .BR http://www.gnu.org.ua/software/rush/manual/1.x . .TP .B global Defines global settings. .TP \fBrule\fR [\fITAG\fR] Contains a set of rules for a certain class of input command lines. .SS global Introduces global settings. This statement is followed by one or more substatements. Global settings end at the nearest \fBrule\fR statement that follows. They remain in effect until the next \fBglobal\fR statement is encountered which alters them. .PP The following statements may appear in this section. .TP \fBexpand\-undefined\fR \fIBOOL\fR Controls how undefined variables are expanded. If \fIBOOL\fR is \fBtrue\fR, references to undefined variables are replaced with empty values. If it is \fBfalse\fR (the default), an error message is issued and program terminates. Any of the following values can be used as a synonym for \fBtrue\fR: .BR yes , .BR on , .BR t , .BR 1 . The following values can be used as synonyms for \fBfalse\fR: .BR no , .BR off , .BR nil , .BR 0 . .TP \fBdebug\fR \fINUM\fR Set debugging level. The bigger \fINUM\fR is, the more verbose is the logging. The debugging information is reported via \fBsyslog\fR at facility \fBauthpriv\fR, priority \fBdebug\fR. .TP \fBsleep\-time\fR \fINUM\fR Set the time in seconds to sleep before exiting on error. This statement is intended as a measure against brute-force attacks. Default sleep time is 5 seconds. .TP \fBmessage\fR \fICLASS\fR \fITEXT\fR Define a textual message which is returned to the remote party if an error of the given \fICLASS\fR occurs. Valid classes are: .RS 4 .TP .B usage\-error This error is reported when \fBrush\fR has been invoked improperly. The default text is: .sp \fB"You are not permitted to execute this command."\fR .TP .B nologin\-error A message which is returned if there is no such user name in the password database. Defaults to: .sp \fB"You are not permitted to execute this command."\fR .TP .B config\-error Define a textual message which is returned if the configuration file contained errors. Default is: .sp \fB"Local configuration error occurred."\fR .TP .B system\-error Define a textual message which is returned if a system error occurs. Default is: .sp \fB"A system error occurred while attempting to execute command."\fR .RE .TP \fBregexp\fR \fIFLAG\fR [\fIFLAG\fR...] Configure the type of regular expressions to be used by subsequent \fBmatch\fR, \fBset\fR, and \fBinsert\fR statements. Each \fIFLAG\fR is a word specifying a regular expression feature. It can be preceded by a plus sing to enable this feature (this is the default), or by the minus sign to disable it. Valid flags are: .RS 4 .TP .B extended Use POSIX Extended Regular Expression syntax when interpreting regex. This is the default. .TP .B basic Use basic regular expressions. Equivalent to \fB\-extended\fR. .TP \fBicase\fR or \fBignore\-case\fR Do not differentiate case. Subsequent regex matches will be case insensitive. .RE .TP \fBinclude\-security\fR \fIFLAG\fR [\fIFLAG\fR...] Configure the security checks for include files. Valid flags are: .RS 4 .TP .B all Enable all checks. .TP .B owner The file must be owned by root. .TP \fBiwgrp\fR or \fBgroupwritablefile\fR Forbid group writable files. .TP \fBiwoth\fR or \fBworldwritablefile\fR Forbid world writable files. .TP \fBdir_iwgrp\fR or \fBgroupwritabledir\fR Forbid files that reside in group writable directories. .TP \fBdir_iwoth\fR or \fBworldwritabledir\fR Forbid files that reside in world writable directories. .TP \fBlink\fR Forbid symbolic links to files residing in group or world writable directories. .RE .sp Each of the above keywords can be prefixed by \fBno\fR, which reverses its meaning. The special keyword \fBnone\fR disables all checks. .TP \fBacct\-umask\fR \fIMASK\fR Set umask used when accessing accounting database files. Default value is 022. .TP \fBacct\-dir\-mode\fR \fIMODE\fR Set mode bits for the accounting directory. The argument is the mode in octal. .TP \fBacct\-file\-mode\fR \fIMODE\fR Set mode bits for the \fBwtmp\fR and \fButmp\fR files. .SS rule Defines a rule. This is a block statement, which means that all statements located between it and the next \fBrule\fR statement (or end of file, whichever occurs first) modify the definition of that rule. .PP The syntax is: .ex rule \fBTAG\fR .ee Optional \fBTAG\fR argument supplies the identifier for that rule. It is used in diagnostic messages. If tag is missing, \fBrush\fR will supply a default one, which is constructed by concatenating the \fB#\fR character and the ordinal number of rule in the configuration file, in decimal notation. Rule numbering starts from 1. .PP A rule can contain the following statements: .TP \fBmatch\fR \fIEXPR\fR Defines conditions that decide whether the rule matches the particular request. The \fIEXPR\fR argument is a comparison expression. It can be a simple comparison expression or a boolean expression involving several other expressions. .sp A simple expression is either a comparison or a membership test. A comparison has the general syntax .ex .I lhs op rhs .ee where \fIlhs\fR and \fIrhs\fR are operands and \fIop\fR is the operation. The \fIlhs\fR is either a string (quoted or unquoted), or a variable reference. The \fIrhs\fR is a string or number. Prior to evaluating simple expression, its \fILHS\fR undergoes variable expansion. In contrast, the \fIRHS\fR operand is always treated verbatim. .sp The comparison operator \fIOP\fR is one of the following: .table 8n 30n == Equality (string or numeric) != Inequality (string or numeric) < Less than <= Less than or equal to > Greater than >= Greater than or equal to ~ Regexp matching !~ Negated regexp matching .tabend Two membership tests are available. The \fBin\fR test has the form .ex \fILHS\fR \fBin\fR ( \fISTRING\fR ... ) .ee and evaluates to true if \fILHS\fR matches one of the strings in parentheses. \fILHS\fR undergoes variable expansion and backreference interpretation prior to comparison. .sp The \fBgroup\fR test has the following syntax: .ex \fBgroup\fR \fIGRP\fR .ee It returns true if the requesting user is a member of the group \fIGRP\fR. Several groups can be given in parentheses: .ex \fBgroup (\fIGRP\fR ...\fB)\fR .ee in which case the test return true if the user is a member of at least one of the mentioned groups. .sp Compound boolean expression combine one or more expressions using logical operators .table 8n 30n && Boolean AND || Boolean OR ! Boolean negation .tabend .TP \fBset\fR \fINAME\fR \fB=\fR \fIVALUE\fR Sets the variable \fINAME\fR to \fIVALUE\fR, which undergoes backreference interpretation and variable expansion. .TP \fBset [\fIN\fB] = \fIVALUE\fR Sets the command line argument \fIN\fR to \fIVALUE\fR .TP \fBset \fINAME\fB = \fIVALUE\fB ~ \fIS-EXPR\fB Applies the .BR sed (1)-like search-and-replace expression \fBS-EXPR\fR to \fIVALUE\fR and assigns the result to the variable \fBNAME\fR. Both \fBVALUE\fR and \fBS-EXPR\fR are subject to variable expansion and backreference interpretation. .TP \fBset [\fIN\fB] = \fIVALUE\fB ~ \fIS-EXPR\fB Similar to the above, but assigns the result to the \fIN\fRth command line argument. .TP \fBset \fINAME\fB =~ \fIS-EXPR\fR This is a shortcut for .ex \fBset \fINAME\fB = \fB$\fINAME\fB ~ \fIS-EXPR\fR .ee i.e. it applies the search-and-replace expression \fIS-EXPR\fR to the current value of the variable \fINAME\fR and stores the resulting string as its new value. .TP \fBset [\fIN\fB] =~ \fIS-EXPR\fR A shortcut for .ex \fBset [\fIN\fB] = \fB$\fIN\fB ~ \fIS-EXPR\fB .ee .PP The \fIS-EXPR\fR, is a sed replace expression of the form: .ex \fBs/\fIREGEXP\fB/\fIREPLACE\fB/\fR[\fIFLAGS\fR] .ee where \fBREGEXP\fR is a regular expression, \fIREPLACE\fR is a replacement for each part of the input that matches \fIREGEXP\fR and optional \fIFLAGS\fR are flag letters that control the substitution. Both \fIREGEXP\fR and \fIREPLACE\fR are described in .BR sed (1) . .PP As in .BR sed , you can give several replace expressions, separated by semicolons. .PP The supported \fIFLAGS\fR are: .TP .B g Apply the replacement to all matches to the \fIREGEXP\fR, not just the first. .TP .B i Use case-insensitive matching. .TP .B x .I REGEXP is an extended regular expression. .TP .I NUMBER Only replace the \fINUMBER\fRth match of the \fIREGEXP\fR. .PP Notice, that the POSIX standard does not specify what should happen when you mix the \fBg\fR and \fINUMBER\fR modifiers. \fBRush\fR follows the GNU \fBsed\fR implementation in this regard, so the interaction is defined to be: ignore matches before the \fINUMBER\fRth, and then match and replace all matches from the \fINUMBER\fRth on. .PP Also notice, that usually \fIS-EXPR\fR is a quoted string, and as such it is subject to backslash interpretation. It is therefore important to properly escape backslashes, especially in the \fIREPLACE\fR part. E.g. .ex set bindir = $program ~ "s/(.*)\\\\//\\\\1/" .ee .TP \fBinsert [\fIN\fB] = \fIVALUE\fR Shift command line arguments starting from the \fIN\fRth one position to the right and store \fIVALUE\fR in the \fIN\fRth slot. \fIVALUE\fR is subject to variable expansion and backreference interpretation. .TP \fBinsert [\fIN\fB] = \fIVALUE\fB ~ \fIS-EXPR\fR Shift command line arguments starting from the \fIN\fRth one position to the right, apply \fIS-EXPR\fR to \fIVALUE\fR and store the result in the \fIN\fRth slot. Both \fIS-EXPR\fR and \fIVALUE\fR are subject to variable expansion and backreference interpretation. .TP \fBunset \fINAME\fR Unset the variable \fINAME\fR. .TP \fBunset \fIN\fR Unset the positional argument \fIN\fR (an integer number greater than 0), shifting the remaining arguments one position left. This is the same as \fBdelete \fIN\fR. .TP \fBremopt \fISOPT\fR Remove from the command line all occurrences of the short option described by \fISOPT\fR. The \fISOPT\fR argument is the short option letter, optionally followed by a colon if that option takes a mandatory argument, or by two colons if it takes an optional argument. .TP \fBremopt \fISOPT LOPT\fR Same as the above. \fILOPT\fR supplies the long option equivalent for the short option described by \fISOPT\fR. .TP \fBdelete \fIN\fR Delete \fBN\fRth argument. .TP \fBdelete \fII J\fR Delete arguments between \fII\fR and \fIJ\fR, inclusive. .TP \fBmap \fINAME FILE DELIM KEY KN VN\fR This statement uses file lookup to find a new value for the variable \fINAME\fR. The \fIFILE\fR argument supplies the name of the .IR "map file" . It must begin with .B / or .BR ~/ . Before use, the file permissions and ownership are checked using the criteria supplied in the \fBinclude\-security\fR statement (see the \fBglobal\fR section). .sp The map file consists of .IR records , separated by newline characters. Each record, in turn, consists of fields, separated by characters listed in the \fIDELIM\fR argument. If it contains a space character, then fields may be delimited by any amount of whitespace characters (spaces and/or tabulations). Otherwise, exactly one character delimits fields. Fields within a record are numbered starting from 1. .sp The \fBmap\fR action operates as follows. First, variable expansion and backreference interpretation is performed on the \fIKEY\fR argument. The result will be used as actual lookup key. Then, \fIFILE\fR is scanned for a record whose \fIKN\fRth field matches the lookup key. If such a record is found, the value of its \fIVN\fRth field is assigned to the variable. Otherwise, if \fIDEFAULT\fR is supplied, it is assigned to the variable. Otherwise, the variable remains unchanged. .TP \fBmap [\fIN\fB] \fIFILE DELIM KEY KN VN DEFAULT\fR Same as above, but the result of the lookup is assigned to \fIN\fRth argument. .PP The following statements modify command execution environment: .TP .B clrenv Clear the environment. .TP \fBkeepenv \fINAME\fR ... Retain the listed variables. This statement should be used in conjunction with \fBclrenv\fR. .sp Argument is a whitespace delimited list of variables to retain. Each element in the list can be either a variable name, or a shell-style globbing pattern, in which case all variables matching that pattern will be retained, or a variable name followed by an equals sign and a value, in which case it will be retained only if its actual value equals the supplied one. For example, to retain only variables with names beginning with 'LC_': .ex keepenv "LC_*" .ee .TP \fBsetenv \fINAME\fB = \fIVALUE\fR Set the environment variable \fINAME\fR. The \fIVALUE\fR argument is subject to variable expansion and backreference interpretation. .sp For example, to modify the 'PATH' value: .ex setenv PATH = "$PATH:/opt/bin" .ee .TP \fBunsetenv \fINAME\fR ... Unset environment variables. See \fBkeepenv\fR for a discussion of arguments. .TP \fBevalenv \fISTRING\fR Performs backslash interpretation, backreference interpretation and variable expansion on \fISTRING\fR and discards the result. This statement is similar to the shell's "colon" statement. .PP The following statements are \fIsystem actions\fR. They provide interface to the operating system. .TP \fBumask \fIMASK\fR Set the umask. The \fIMASK\fR must be an octal value not greater than 0777. The default umask is 022. .TP \fBnewgrp \fIGROUP-ID\fR Change the current group ID to \fIGROUP-ID\fR, which is either a numeric value or a name of an existing group. .TP \fBnewgroup \fIGROUP-ID\fR Alias to the above. .TP \fBchroot \fIDIR\fR Change the root directory to \fIDIR\fR. The argument is subject to tilde and variable expansions and backreference interpretation. During tilde expansion, a tilde at the start of string is replaced with the absolute pathname of the user's home directory. .TP \fBchdir \fIDIR\fR Change to the directory \fIDIR\fR. The argument is subject to tilde and variable expansions and backreference interpretation. If both \fBchdir\fR and \fBchroot\fR are specified, \fBchroot\fR is applied first. .TP \fBlimits \fIRES\fR Impose limits on system resources, as defined by \fIRES\fR. The argument consists of \fIcommands\fR, optionally separated by any amount of whitespace. A command is a single command letter followed by a number, that specifies the limit. The command letters are case-insensitive and coincide with those used by the shell \fBulimit\fR utility: .RS +4 .TP .B A max address space (KB) .TP .B C max core file size (KB) .TP .B D max data size (KB) .TP .B F maximum file size (KB) .TP .B M max locked-in-memory address space (KB) .TP .B N max number of open files .TP .B R max resident set size (KB) .TP .B S max stack size (KB) .TP .B T max CPU time (MIN) .TP .B U max number of processes .TP .B L max number of logins for this user (see below) .TP .B P process priority -20..20 (negative = high priority) .RE .sp If some limit cannot be set, execution of the rule aborts. In particular, the \fBL\fR limit can be regarded as a condition, rather than an action. Setting \fBlimit L5\fR succeeds only if no more than 5 \fBrush\fR instances are simultaneously running for the same user. This can be used to limit the number of simultaneously open sessions. .sp The use of \fBL\fR resource automatically enables \fIforked mode\fR. See the subsection .B Accounting and forked mode for details. .TP \fBfall\-through\fR or \fBfallthrough\fR Declare a fall-through rule. After evaluating such a rule, \fBrush\fR continues rule matching process from the next rule in the configuration. Any modifications to the request found in the fall-through rule take effect immediately, which means that subsequent rules will see modified command line and environment. Execution of any other actions found in the fall-through rule is delayed until a matching rule is found. .sp Fall-through rules are often used to set default values for subsequent rules. .SS Accounting and forked mode GNU \fBrush\fR is able to operate in two modes, which we call default and forked. When operating in the default mode, the process image of \fBrush\fR itself is overwritten by the command being executed. Thus, when it comes to launching the requested command, the running instance of \fBrush\fR ceases to exist. .PP There is also another operation mode, which we call \fIforked mode\fR. When running in this mode, \fBrush\fR executes the requested command in a subprocess, and remains in memory supervising its execution. Once the command terminates, \fBrush\fR exits. .PP One advantage of the forked mode is that it allows you to keep \fIaccounting\fR, i.e. to note who is doing what and to keep a history of invocations. The accounting, in turn, can be used to limit simultaneous executions of commands, as requested by the \fBL\fR command to \fBlimit\fR statement (see above). .TP \fBacct \fIBOOL\fR Turn accounting mode on or off, depending on \fIBOOL\fR. The argument can be one of the following: .BR yes , .BR on , .BR t , .BR true , or .BR 1 , to enable accounting, and .BR no , .BR off , .BR nil , .BR false , .BR 0 , to disable it. .TP \fBfork \fIBOOL\fR Enable or disable forked mode. See \fBacct\fR for a description of \fIBOOL\fR. Enabling accounting turns the fork mode as well. This statement is mainly designed as a way of disabling the forked mode for a given rule. .SS Post-process notification \fBRush\fR can be configured to send a \fInotification\fR over INET or UNIX sockets, after completing user request. It is done using the following statement: .TP \fBpost\-socket \fIURL\fR Notify \fIURL\fR about completing the user request. This statement implies forked mode. .PP Allowed formats for \fIURL\fR are: .TP \fBinet://\fIHOSTNAME\fR[\fB:\fIPORT\fR] Connect to remote host \fIHOSTNAME\fR using TCP/IP. \fIHOSTNAME\fR is the host name or IP address of the remote machine. Optional \fIPORT\fR specifies the port number to connect to. It can be either a decimal port number or a service name from .BR /etc/services . If \fIPORT\fR is absent, \fBtcpmux\fR (port 1) is assumed. .TP \fBunix://\fIFILENAME\fR or \fBlocal://\fIFILENAME\fR Connect to a UNIX socket \fIFILENAME\fR. .PP The notification protocol is based on TCPMUX (RFC 1078). After establishing connection, \fBrush\fR sends the rule tag followed by a CRLF pair. The rule tag acts as a service name. The remote party replies with a single character indicating positive (\fB+\fR) or negative (\fB\-\fR) acknowledgment, optionally followed by a message of explanation, and terminated with a CRLF. .PP If positive acknowledgment is received, \fBrush\fR sends a single line, consisting of the user name and the executed command line, separated by a single space character. The line is terminated with a CRLF. .PP After sending this line, \fBrush\fR closes the connection. .PP The post-process notification feature can be used to schedule execution of some actions after certain rules. .SS Exit rule .TP \fBexit \fIFD TEXT\fR Write textual message \fITEXT\fR to file descriptor \fIFD\fR. .TP \fBexit \fITEXT\fR Write textual message \fITEXT\fR to standard error. Similar to .ex \fBexit 2 \fITEXT\fR .ee In both cases the \fITEXT\fR argument can be either a quoted string, or an identifier. .PP If it is a quoted string, it is subject to backreference interpretation and variable expansion. .PP If \fITEXT\fR is an identifier, it must be the name of a predefined error message (see the list in the discussion of the \fBmessage\fR statement in \fBglobal\fR section, above). .SS Interactive access Sometimes it may be necessary to allow some group of users limited access to interactive shells. GNU \fBrush\fR contains provisions for such usage. When it is invoked without '-c' it assumes interactive usage. In this case only rules explicitly marked as interactive are considered, the rest of rules is ignored. .TP \fBinteractive \fIBOOL\fR If BOOL is true (see the \fBacct\fR statement above for allowed values), this statement marks the rule it appears in as interactive. This rule will match only if \fBrush\fR is invoked without command line arguments. .PP Unless command line transformations are applied, interactive rule finishes by executing \fB/bin/sh\fR. The first word in the command line (\fBargv[0]\fR) is normally set to the base name of the command being executed prefixed by a minus character. .PP An example .ex rule login interactive true group rshell map program /etc/rush.shell : ${user} 1 2 set [0] = ${program} ~ "s|^.*/||;s,^,-r," rule nologin interactive true exit You don't have interactive access to this machine. .ee The \fBlogin\fR rule will match interactive user requests if the user is a member of the group \fBrshell\fR. It looks up the shell to use for this in the file \fB/etc/rush.shell\fR. This map file consists of two fields, separated by a colon. If the shell is found, its base name, prefixed with \fB\-r\fR, will be used as \fBargv[0]\fR (this indicates a restricted login shell). Otherwise, the trap rule \fBnologin\fR will be matched, which will output the given diagnostics message and terminate \fBrush\fR. .SS Localization The following statement allow you to provide translations (localizations) for the messages in your \fBrush\fR configuration: .TP \fBlocale \fINAME\fR Set the locale name. To specify empty locale, use \(dq\(dq as \fINAME\fR (recall that empty locale name means to use the value of the environment variable 'LC_ALL' as locale name). .TP \fBlocale\-dir \fINAME\fR Set the name of the locale directory. .TP \fBtext\-domain \fINAME\fR Set the textual domain name. .PP An example: .ex rule l10n locale "pl_PL" text-domain "rush-config" fall-through .ee .SS include The \fBinclude\fR statement forces inclusion of the named file in that file location: .TP \fBinclude \fIFILE\fR .PP The statement is evaluated when parsing the configuration file, which means that \fIFILE\fR undergoes only tilde expansion: the two characters \fB~/\fR appearing at the beginning of file name are replaced with the full path name of the current user's home directory. .PP If \fIFILE\fR is a directory, that directory is searched for a file whose name coincides with the current user name. If such a file is found, it is included. .PP In any case, if the named file does not exist, no error is reported, and parsing of the configuration file continues. .PP Before including the file \fBrush\fR checks if it is secure, using the criteria set in the \fBinclude\-security\fR statement. See its description in the \fBglobal\fR section, above. .PP The \fBinclude\fR statement can be used only within a rule. The included file may not contain \fBrule\fR and \fBglobal\fR statements. .SH SEE ALSO .BR rush (8), .BR rushlast (1), .BR rushwho (1). .SH AUTHORS Sergey Poznyakoff .SH "BUG REPORTS" Report bugs to . .SH COPYRIGHT Copyright \(co 2016-2019 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: 60 .\" end: rush-2.4/doc/rush.texi0000644000175000017500000034452014643176117014771 0ustar00graygray00000000000000\input texinfo @c -*-texinfo-*- @smallbook @c %**start of header @setfilename rush.info @settitle GNU Rush -- a restricted user shell @c %**end of header @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 @include rendition.texi @ifinfo @dircategory System Administration Utilities @direntry * rush: (rush). A restricted user shell. * rushwho: (rush)Rushwho. Show who is using GNU Rush currently. * rushlast: (rush)Rushlast. Show listing of recent GNU Rush sessions. @end direntry @end ifinfo @copying Published by the Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Copyright @copyright{} 2008--2024 Sergey Poznyakoff Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled ``GNU Free Documentation License''. @end copying @titlepage @title GNU Rush -- a restricted user shell @subtitle version @value{VERSION}, @value{UPDATED} @author Sergey Poznyakoff @page @vskip 0pt plus 1filll @insertcopying @end titlepage @ifnothtml @page @summarycontents @end ifnothtml @page @contents @ifnottex @node Top @top GNU Rush This edition of the @cite{GNU Rush Manual}, last updated @value{UPDATED}, documents GNU Rush Version @value{VERSION}. @end ifnottex @menu * Intro:: * Operation:: * Quick Start:: * Configuration File:: * Default Configuration:: * Usage Tips:: * Test Mode:: * Option Summary:: * Rushwho:: The @code{rushwho} utility. * Rushlast:: The @code{rushlast} utility. * Accounting Database:: * Reporting Bugs:: How to Report a Bug. Appendices * Time and Date Formats:: * Copying This Manual:: The GNU Free Documentation License. * Concept Index:: Index of Concepts. @detailmenu --- The Detailed Node Listing --- Configuration File * Lexical Structure:: * Syntax:: * Global:: * Rule:: * Include:: The @code{global} statement * Expansion control:: * Debugging:: * sleep-time:: * Error Messages:: * regexp:: * include-security:: * Accounting control:: Rule * Request:: * Matching Conditions:: * Modifying variables:: * Environment:: * Transformations:: * System Actions:: * Fall-through:: * Accounting and Forked Mode:: * Notification:: * Exit:: * Interactive:: * Localization:: The Request * Positional variables:: * Request variables:: * Environment variables:: * User-defined variables:: * Variable expansion:: Matching Conditions * Comparisons:: * Membership operators:: * File system tests:: * Boolean expressions:: Modifying variables * set:: Set variable. * insert:: Insert positional arguments. * unset:: Unset variable. * remopt:: Remove options. * delete:: Delete arguments. * map:: Use file lookup to modify variable. Localization * Localization Directives:: * Writing Your Localization:: Usage Tips * scp:: * rsync:: * sftp:: * cvs:: * svn:: * git:: * notification example:: Test Mode * dump mode:: The @code{rushwho} utility. * Rushwho Options:: * Formats:: The @code{rushlast} utility. * Rushlast Options:: Accounting Database * wtmp:: The Structure of @file{wtmp} File. * utmp:: The Structure of @file{wtmp} File. @end detailmenu @end menu @node Intro @chapter Introduction GNU Rush is a Restricted User Shell, designed for sites that provide limited remote access to their resources, such as svn or git repositories, scp, or the like. Using a sophisticated configuration file, GNU Rush gives you complete control over the command lines that users execute, as well as over the usage of system resources, such as virtual memory, CPU time, etc. @node Operation @chapter Operation GNU Rush is usually installed as a user shell. When a user connects to the server (e.g. by using using SSH protocol), the shell binary, @command{rush}, is executed. GNU Rush must be called with exactly two arguments: the @option{-c} command line option and a command line to be executed on the host machine@footnote{Starting from version 1.6, it is possible to use GNU Rush for interactive shell sessions. @xref{Interactive}, for more information about it.}. If wrong arguments are supplied, the shell aborts. @cindex request The third argument to @command{rush} supplies a command line to be executed. That command line, shell environment for its execution and the password database entry for the user who executes @command{rush} are said to form a @dfn{request}. @cindex rule @cindex conditions @cindex actions After startup, @command{rush} reads a set of @dfn{rules} from its configuration file. Each rule consists of matching conditions and actions. @dfn{Conditions} decide whether the request matches the rule. They can include regular expression matching against entire command line or particular words thereof, comparisons of user name or group,, etc. If all conditions match the request, actions are executed. @dfn{Actions} can instruct @command{rush} to: @itemize @bullet @item Modify the command line; @item Impose resource limits; @item Set umask; @item Change current working directory; @item Modify the execution environment; @item Run command in a special root directory (@samp{chroot}). @end itemize Finally, after all actions have been completed successfully, @command{rush} runs the requested command. Notice, that by that time the resulting command line is not necessarily the same as the original one supplied to @command{rush} with the @option{-c} option. @cindex fall-through rule @cindex rule, fall-through A special kind of rules, called @dfn{fall-through} ones, is provided. Fall-through rules differ from other rules in that they do not execute the command. After all actions in a fall-through rule have been executed, GNU Rush continues to search for another matching rule in its configuration and applies it, if found. Fall-through rules are useful to set default values for subsequent rules. @node Quick Start @chapter Quick Start To give you the feel of GNU Rush possibilities, let's consider the following configuration file rule: @example @group rush 2.0 rule sftp # Matching condition match $uid >= 100 && $command ~ "^.*/sftp-server" # Actions: set [0] = "bin/sftp-server" umask 002 chroot "~" chdir "/" @end group @end example The first clause defines the version of the syntax this configuration uses. Each configuration must begin with this statement. Next clause, @code{rule}, defines a new rule. Its argument serves as a rule tag and is used for diagnostic messages and in accounting. Lines beginning with @samp{#} are comments, they are intended for a human reader and are ignored by @code{rush}. The @code{match} statement, defines condition that must be met for this rule to become active. In this example it requests that the UID of the requesting user be greater than or equal to 100, and the command line begin with @samp{/sftp-server}, optionally preceded by arbitrary directory components. Subsequent clauses define actions associated with this rule. The @code{set} clause contains instructions on how to modify the first argument of the command line. Argument indices start at 0, so @samp{[0]} refers to the command name. The expression in our example instructs GNU Rush to replace it with @samp{bin/sftp-server}. The @code{umask} clause sets the file creation mask. The @code{chroot} clause instructs GNU Rush to chroot to the user home directory before executing the command. Finally, the @code{chdir} statement sets the directory to change to after installing the chroot. @node Configuration File @chapter Configuration File @flindex rush.rc The configuration file @file{rush.rc} is located in @file{/usr/local/etc} by default.@footnote{The exact location of the configuration file is defined when configuring the package. See the file @file{INSTALL} in the GNU Rush source directory for more information}. The configuration file is read and parsed right after start up. Any errors occurred in parsing are reported using @code{syslog} facility @samp{authpriv} and priority @samp{notice}. When run in @samp{test} mode, all diagnostics is displayed on the standard error output. @xref{Test Mode}, for a detailed description of ways to debug and test your configurations. @anchor{security checks} Before parsing, @command{rush} checks the ownership and permissions of the configuration file for potential security breaches. The configuration file is considered unsafe if any of the following conditions are met: @enumerate 1 @item It is not owned by root. @item It is group writable. @item It is world writable. @item It resides in a group writable directory. @item It resides in a world writable directory. @item It is a symbolic link to a file residing in a group or world writable directory. @end enumerate If the file is considered unsafe, @command{rush} rejects it and aborts execution. Any of these tests can be disabled using the @command{--security-check} option (@pxref{--security-check}). As of version @value{VERSION}, @command{rush} supports two distinct configuration file formats. @cindex legacy syntax @cindex syntax, legacy The @dfn{legacy} configuration format is the one used in rush versions up to 1.9. It is still supported to facilitate transition of existing installations to the new syntax. Its support will eventually be removed in future versions, so the users are encouraged to switch to the new syntax as soon as possible. The legacy syntax is described in detail in @uref{http://www.gnu.org.ua/software/rush/legacy}. This manual describes new configuration file format. @menu * Lexical Structure:: * Syntax:: * Global:: * Rule:: * Include:: @end menu @node Lexical Structure @section Lexical Structure of the Configuration File Configuration file consists of tokens separated by arbitrary amount of whitespace characters: horizontal spaces and tabs. Except when enclosed in double quotes or preceded by a dollar sign, the @samp{#} character introduces an inline comment: the character itself and any material that follows it up to the end of the physical line is ignored. Comments are treated as newlines. @anchor{word} @anchor{token} The following classes of tokens are recognized. @table @dfn @item Newlines A newline character (ASCII 10) terminates a statement. If newline is immediately preceded by a backslash, both characters are removed and the following line is treated as a continuation of the current line. This allows for splitting exceedingly long statements over several physical lines. @cindex identifiers, configuration @item Identifiers Identifiers begin with a letter and consist of letters, digits, underscores and dashes. They serve as keywords and variable names. @item Decimal numbers A sequence of decimal digits, optionally preceded by a minus or plus sign. @cindex unquoted strings @item Unquoted strings An unquoted string is any contiguous sequence of any characters, except newlines, whitespace and the following special characters: @samp{\}, @samp{"}, @samp{!}, @samp{=}, @samp{<}, @samp{>}, @samp{(}, @samp{)}, @samp{@{}, @samp{@}}, @samp{[}, @samp{]}, @samp{$}, @samp{%}, @samp{&}, @samp{|}, @samp{~}, @samp{#}. @cindex quoted strings @item Quoted strings A quoted string is a sequence of characters enclosed in double-quotes. Quoted strings are subject to backslash interpretation, backreference interpretation and variable expansion. @cindex backslash interpretation During @dfn{backslash interpretation}, the @dfn{escape sequences} are recognized and replaced as per table below: @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 Single backslash character @item \" @tab Double-quote @item \% @tab Percent character @end multitable @end float A backslash immediately followed by newline character is removed. A backslash followed by any other character except as listed above is retained along with the character. @cindex backreference interpretation @anchor{backreference} During @dfn{backreference interpretation}, references to parenthesized groups in regular expression are replaced with the actual content of the corresponding group in the most recently matched string. A reference is @samp{%@{@var{n}@}} where @var{n} is a decimal number. If @var{n} is one digit, curly braces can be omitted: @samp{%@var{n}}. If the @samp{%} character results from previous backslash interpretation, no backreference interpretation occurs. Strings used in the left-hand side of a comparison expression are subject to variable expansion. This is discussed in detail in @ref{Variable expansion}. @item Variable references Variable references consist of a @samp{$} sign, followed by the positional argument number or variable name, optionally enclosed in curly braces. Positional arguments greater than 9 must be enclosed in curly braces. The variable name must follow the rules for valid identifiers: it must begin with a letter and consist of letters, digits and underscores. Variable name in curly braces can be followed by @samp{-}, @samp{=}, @samp{?}, or @samp{+}, optionally preceded by @samp{:} as summarized in the table below: @float Table, variable references @caption{Variable reference} @multitable @columnfractions 0.30 .5 @item Reference @tab Meaning @item $@{@var{var}:-@var{word}@} @tab Use Default Values @item $@{@var{var}:=@var{word}@} @tab Assign Default Values @item $@{@var{var}:?@var{word}@} @tab Display Error if Null or Unset @item $@{@var{var}:+@var{word}@} @tab Use Alternate Value @end multitable @end float Where @var{word} stands for any valid token as described in this section. @xref{Variable expansion}, for a detailed discussion of these forms and their meaning. @anchor{operator} @item Comparison and boolean operators These are: @float Table, Operators @caption{Operators} @multitable @columnfractions 0.30 .5 @item @samp{&&} @tab Boolean @dfn{and} @item @samp{||} @tab Boolean @dfn{or} @item @samp{!} @tab Boolean negation @item @samp{==} @tab Equality (string or numeric) @item @samp{!=} @tab Inequality (string or numeric) @item @samp{<} @tab Less than @item @samp{<=} @tab Less than or equal to @item @samp{>} @tab Greater than @item @samp{>=} @tab Greater than or equal to @item @samp{~} @tab Regexp matching @item @samp{!~} @tab Negated regexp matching @item @samp{in} @tab Membership in set of strings @item @samp{group} @tab Membership in UNIX group @item @samp{=} @tab Assignment @item @samp{=~} @tab Regular expression substitution @end multitable @end float @xref{Matching Conditions}, for a detailed discussion. @end table @node Syntax @section Syntax @cindex syntax, configuration files @cindex configuration file syntax The @samp{rush} configuration consists of @dfn{statements}. A @dfn{statement} consists of a keyword and optional arguments, separated by any amount of whitespace. Each statement occupies one line in the configuration file and is terminated by a newline character. Extremely long statements may be split across several physical lines by ending each line except the last with a backslash followed by a newline. Statements may be separated by any amount of empty lines or comments. @cindex syntax version statement @cindex @code{rush}, statement The first statement in a configuration file indicates the syntax version. It has the following form: @example rush 2.0 @end example This statement is mandatory. In its absence, the file will be treated as a legacy configuration file@footnote{For the discussion of the legacy syntax, please refer to @uref{http://www.gnu.org.ua/software/rush/legacy}.}. To avoid confusion, a notice message to that effect will be printed. Statements that follow form logical groups. Each group begins with a @code{rule} or @code{global} statement. The @code{global} statement introduces global settings. It affects all statements that follow it. The @code{rule} statement introduces a single @command{rush} rule, that defines how to process a particular command. These statements are described in the sections that follow. @node Global @section The @code{global} statement @cindex @code{global} The @code{global} statement defines global settings. The syntax is: @example global @var{stmt1} @var{stmt2} ... @end example @noindent where dots represent any number of statements. The following subsections discuss the statements that can be used within a @code{global} block. @menu * Expansion control:: * Debugging:: * sleep-time:: * Error Messages:: * regexp:: * include-security:: * Accounting control:: @end menu @node Expansion control @subsection Expansion control The following statement controls the behavior of @command{rush} when an undefined variable is expanded (@pxref{Variable expansion}). @deffn {global} expand-undefined @var{bool} If @var{bool} is @samp{true}, expand undefined variables to empty value. If it is @samp{false} (the default), issue an error and abort. The following values can be used as synonyms for @samp{true}: @samp{yes}, @samp{on}, @samp{t}, @samp{1}. The following values can be used as synonyms for @samp{false}: @samp{no}, @samp{off}, @samp{nil}, @samp{0}. @end deffn @xref{handling of undefined variables}, for a detailed discussion of how @command{rush} processes undefined variables and for the recommended techniques of handling them. @node Debugging @subsection Debugging @cindex debugging The @code{debug} global statement sets the @dfn{debugging level} -- an integer value that controls the verbosity of @command{rush}: @deffn {global} debug @var{num} Set debugging level to @var{num}. @end deffn The greater @var{num} is, the more verbose is the logging. The debugging information is reported via @code{syslog} at facility @samp{authpriv}, priority @samp{debug}. As of version @value{VERSION}, the following debugging levels are supported: @cindex debugging levels @table @asis @item 1 A minimum debugging level, and the only one whose messages are logged using the priority @samp{notice}. At this level, @command{rush} only logs requests and rules selected to handle them. For example: @example rush[16821]: Serving request "/usr/libexec/sftp-server" for sergiusz by rule sftp-savane @end example @item 2 List all actions executed when serving requests. @item 3 When parsing a legacy configuration file, verbosely describe parsing process. @end table More debugging levels may be implemented in future. @node sleep-time @subsection The @code{sleep-time} statement @deffn {global} sleep-time @var{num} Set the time to sleep before exiting on error, in seconds. This statement is intended as a measure against brute-force attacks. Default sleep time is 5 seconds. @end deffn @node Error Messages @subsection Error Messages @cindex error messages @deffn {global} message @var{class} @var{text} Define a textual message which is returned to the remote party if an error of the given @var{class} occurs. @end deffn Valid values for @var{class} are: @table @asis @cindex @code{usage-error} @item usage-error This error is reported when @command{rush} has been invoked improperly. The default text is: @example You are not permitted to execute this command. @end example @cindex nologin-error @item nologin-error Define a textual message which is returned to the remote user if there is no such user name in the password database. Default is: @example You do not have interactive login access to this machine. @end example @cindex @code{config-error} @item config-error Define a textual message which is returned to the remote party if the @command{rush} configuration file contains errors. Default is: @example Local configuration error occurred. @end example @cindex @code{system-error} @item system-error Define a textual message which is returned to the remote party if a system error occurs. Default message is: @example A system error occurred while attempting to execute command. @end example @end table @node regexp @subsection The @code{regexp} statement @cindex regular expressions @cindex extended regular expressions @cindex basic regular expressions The @code{regexp} statement configures the flavor of regular expressions for use by subsequent @code{match}, @code{set}, and @code{insert} statements. @deffn {global} regexp @var{flags} ... Configure the type of regular expressions. @end deffn Each @var{flag} is a word specifying some regular expression feature. It can be preceded by @samp{+} to enable this feature (this is the default), or by @samp{-} to disable it. Valid flags are: @table @samp @item extended Use @acronym{POSIX} Extended Regular Expression syntax when interpreting regex. This is the default. @item basic Use basic regular expressions. Equivalent to @samp{-extended}. @item icase @itemx ignore-case Do not differentiate case. Subsequent regex matches will be case insensitive. @end table For example, the following statement enables @acronym{POSIX} extended, case insensitive matching: @example global regex +extended +icase @end example @node include-security @subsection The @code{include-security} statement Additional configuration can be included to the main configuration file using the @code{include} statement (@pxref{Include}). Before inclusion, a number of checks is performed on the file to ensure it is safe to rely on it. These checks are configured using the following statement: @deffn {global} include-security @var{list} Configure the security checks for include files. This statement takes a list of arguments, separated by white space. The following arguments are recognized: @table @asis @cindex @code{all}, include security flag @item all Enable all checks. @cindex @code{owner}, include security flag @item owner The file is not owned by root. @cindex @code{iwgrp}, include security flag @cindex @code{groupwritablefile}, include security flag @item iwgrp @itemx groupwritablefile The file is group writable. @cindex @code{iwoth}, include security flag @cindex @code{worlwritablefile}, include security flag @item iwoth @itemx worldwritablefile The file is world writable. @cindex @code{dir_iwgrp}, include security flag @cindex @code{groupwritabledir}, include security flag @item dir_iwgrp @itemx groupwritabledir The file resides in a group writable directory. @cindex @code{dir_iwoth}, include security flag @cindex @code{worldwritabledir}, include security flag @item dir_iwoth @itemx worldwritabledir The file resides in a world writable directory. @cindex @code{link}, include security flag @item link The file is a symbolic link to a file residing in a group or world writable directory. @end table @end deffn Each of the above keywords may be prefixed by @samp{no}, which reverses its meaning. The special keyword @samp{none} disables all checks. Each keyword adds or removes a particular test to the existing check list, which is initialized as described in @ref{security checks}. Thus, the following statement results in all checks, except for the file ownership: @example global include-security noowner @end example In the example below, the check list is first cleared by using the @code{none} statement, and then a set of checks is added to it: @example global include-security none owner iwoth iwgrp @end example @node Accounting control @subsection Accounting control statements The following global statements control file mode and permissions of the @dfn{accounting database files}. For a detailed description of this feature, @xref{Accounting Database}. @deffn {global} acct-umask @var{mask} Set umask used when accessing accounting database files. Default value is @samp{022}. @end deffn @deffn {global} acct-dir-mode @var{mode} Set mode bits for the accounting directory. The @var{mode} argument is the mode in octal. @end deffn @deffn {global} acct-file-mode @var{mode} Set mode bits for the @file{wtmp} and @file{utmp} files. @end deffn @node Rule @section Rule @cindex @code{rule} The @code{rule} statement configures a GNU @command{rush} rule. This is a @dfn{block} statement, which means that all statements located between it and the next @code{rule} statement (or end of file, whichever occurs first) modify the definition of that rule. The syntax of the @code{rule} statement is: @deffn {Configuration} rule @var{tag} @end deffn @cindex rule tag @cindex tag, rule The @var{tag} argument is optional. If it is given, it supplies a @dfn{tag} for the rule, i.e. a (presumably unique) identifier, which is used to label this rule. @command{Rush} uses this tag in its diagnostic messages. For rules without explicit @var{tag}, @command{Rush} supplies a default tag, which is constructed by concatenating @samp{#} character and the ordinal number of rule in the configuration file, in decimal notation. Rule numbering starts from @samp{1}. Each rule group can contain a number of statements that control what kind of requests match that rule and what actions are taken when the rule is matched. Arguments to this statements can refer to command line arguments and other parts of the request. @menu * Request:: * Matching Conditions:: * Modifying variables:: * Environment:: * Transformations:: * System Actions:: * Fall-through:: * Accounting and Forked Mode:: * Notification:: * Exit:: * Interactive:: * Localization:: @end menu @node Request @subsection The Request @cindex request User request consists of the user @file{passwd} entry, the command line supplied to @command{rush}, and environment variables. The request is analyzed and can be eventually modified by rules in @command{rush} configuration file. Rules access parts of the request using @dfn{variables}. There are four classes of variables. All of them share the same namespace and are accessed using the same syntax. @menu * Positional variables:: * Request variables:: * Environment variables:: * User-defined variables:: * Variable expansion:: @end menu @node Positional variables @subsubsection Positional variables @anchor{indexing} @cindex word splitting @cindex indexing, words in command line Rush performs word splitting using the same rules as @command{sh}. Statements in the configuration file refer to command line arguments (@dfn{words}) by their @dfn{index}, using @dfn{positional variables}. A positional variable can have the following forms: @example $@var{n} $@{@var{n}@} @end example @noindent where @var{n} is the variable index. The form with curly braces must be used if @var{n} is negative (see below) or greater than 9. Arguments are numbered from @samp{0}. The name of the command is argument @samp{$0}. Consider, for example, the following command line: @example /bin/scp -t /upload @end example Word splitting phase results in three positional variables being defined: @multitable @columnfractions 0.3 0.7 @headitem Variable @tab Value @item $0 @tab /bin/scp @item $1 @tab -t @item $2 @tab /upload @end multitable These values can also be referred to using negative indexes. They refer to words in the reverse order, as illustrated in the following table (notice the use of curly braces): @multitable @columnfractions 0.3 0.7 @headitem Variable @tab Value @item $@{-3@} @tab /bin/scp @item $@{-2@} @tab -t @item $@{-1@} @tab /upload @end multitable Notice also, that negative indexes are 1-based. One final note about the @samp{$0} variable. Immediately after word splitting it refers to both the executable program name and the 0th argument that will be passed to that program (@code{argv[0]}). Most of the time the two values coincide. However, the rule can modify either value, so that they become different. Whether modified or not, the actual name of the program to be run is kept in the request variable @samp{$program} (see the following section). @node Request variables @subsubsection Request variables The following variables can be used to refer to various parts of the user request: @multitable @columnfractions 0.3 0.7 @headitem Variable @tab Expansion @vindex user @item $user @tab User name @vindex group @item $group @tab Name of the user's principal group @vindex uid @item $uid @tab UID @vindex gid @item $gid @tab GID @vindex home @item $home @tab User's home directory @vindex gecos @item $gecos @tab User's @acronym{GECOS} field @vindex program @item $program @tab Executable program name @vindex command @item $command @tab Entire command line @vindex $# @item $# @tab Number of arguments in @samp{$command} @end multitable @node Environment variables @subsubsection Environment variables Environment variables are accessed using the same syntax as the rest of the variables. Rules can modify them using the @code{setenv}, @code{clrenv} and @code{keepenv} statements (@pxref{Environment}). @node User-defined variables @subsubsection User-defined variables In addition to the built-in variables, arbitrary variables can be defined and used in the configuration file. These @dfn{user-defined} variables are defined using the @code{set} statement (@pxref{set}) and are normally used to pass information between rules. They are invisible to whatever command @command{rush} executes as the final result of processing. @node Variable expansion @subsubsection Variable Expansion Most statements in the configuration file undergo variable expansion prior to their use. During variable expansion, references to variables in the string are replaced with their actual values. A variable reference has two basic forms: @example $@var{v} $@{@var{v}@} @end example @noindent where @var{v} is either the name of the variable (request, environment, or user-defined), or the index of the positional variable. The notation in curly braces serves several purposes. First, it is obligatory if @var{v} is an index of the positional variable that is negative or greater than 9. Secondly, it should be used if the variable reference is immediately followed by an alphanumeric symbol, which will otherwise be considered part of it (as in @samp{$@{home@}dir}). Finally, this form allows for specifying the action to take if the variable is undefined or expands to an empty value. The following special forms are recognized: @table @asis @item $@{@var{variable}:-@var{word}@} @dfn{Use Default Values}. If @var{variable} is unset or null, the expansion of @var{word} is substituted. Otherwise, the value of @var{variable} is substituted. @item $@{@var{variable}:=@var{word}@} @dfn{Assign Default Values}. If @var{variable} is unset or null, the expansion of @var{word} is assigned to variable. The value of @var{variable} is then substituted. @item $@{@var{variable}:?@var{word}@} @dfn{Display Error if Null or Unset}. If @var{variable} is null or unset, the expansion of @var{word} (or a message to that effect if @var{word} is not present) is output to the current logging channel. Otherwise, the value of @var{variable} is substituted. @item $@{@var{variable}:+@var{word}@} @dfn{Use Alternate Value}. If @var{variable} is null or unset, nothing is substituted, otherwise the expansion of @var{word} is substituted. @end table These constructs test for a variable that is unset or null. Omitting the colon results in a test only for a variable that is unset. When expanding a variable reference, the variable name is first looked among the request variables. If it is not found, it is looked up in the user-defined variable list. If it is not there, the look up in the environment is attempted. @anchor{handling of undefined variables} @cindex expansion of undefined variables @cindex undefined variable, expansion If the variable name is not found in any of these lists, the default @command{rush} behavior is to report the error of @samp{config-error} class (@pxref{Error Messages}) and exit. To gracefully handle such cases, use the @dfn{default value construct}, defined above. For example, the following statement safely appends the string @samp{/opt/man} to the value of the @env{MANPATH} environment variable: @example setenv MANPATH = "$@{MANPATH:-""@}$@{MANPATH:+:@}/opt/man" @end example @noindent The @samp{$@{MANPATH:-""@}} reference ensures no error is reported if the variable is undefined. The @samp{$@{MANPATH:+:@}} reference appends a semicolon to the value, if the variable is defined. Finally the string @samp{/opt/man} is appended to the resulting value. Another way to gracefully handle undefined variables, is to use the @code{expand-undefined} global setting. If you place the following statement at the beginning of your configuration file, any undefined variable will be silently expanded to empty string: @example global expand-undefined true @end example This statement affects variable expansion in statements that follow it in the configuration file. So you can place it in some point after which this behavior is needed, and then disable it where it is no longer desired, by using the following global statement: @example global expand-undefined false @end example @node Matching Conditions @subsection Matching Conditions @cindex matching conditions @cindex conditions @deffn {rule} match @var{expr} The @code{match} statement defines conditions that decide whether the rule matches the particular request. Its argument is a simple expression or a boolean expression involving several simple expressions. @end deffn A @dfn{simple expression} is either a comparison or membership test. @menu * Comparisons:: * Membership operators:: * File system tests:: * Boolean expressions:: @end menu @node Comparisons @subsubsection Comparisons @cindex comparison A @dfn{comparison expression} is: @example @var{lhs} @var{op} @var{rhs} @end example @noindent here, @var{lhs} (@dfn{left-hand side}) is a string (quoted or unquoted), or a variable reference (@pxref{Lexical Structure}), @var{rhs} (@dfn{right-hand side}) is a string or number, and @var{op} is one of the following binary operators: @float Table, Comparison Operators @caption{Comparison Operators} @multitable @columnfractions 0.30 .5 @item @samp{==} @tab Equality (string or numeric) @item @samp{!=} @tab Inequality (string or numeric) @item @samp{<} @tab Less than @item @samp{<=} @tab Less than or equal to @item @samp{>} @tab Greater than @item @samp{>=} @tab Greater than or equal to @item @samp{~} @tab Regexp matching @item @samp{!~} @tab Negated regexp matching @end multitable @end float Prior to evaluating simple expression, its left-hand side undergoes variable expansion and backreference interpretation. In contrast, the right-hand side is always treated verbatim. For example the following rule will match any request with 2 or more arguments (recall, that the command name itself is counted as one of the arguments): @example rule match $# >= 2 @end example The @samp{==} and @samp{!=} can operate both on strings and on numbers. When applied to strings the @samp{==} means byte-to-byte equality, e.g. @example match $0 == "/bin/ls" @end example @noindent will match requests with @samp{/bin/ls} as the command name. The @samp{~} and @samp{!~} operators implement @dfn{regular expression matching}. The expression @samp{@var{lhs} ~ @var{rx}} yields @samp{true} if @var{lhs} matches regular expression @var{rx}. E.g. @example match $command ~ "^scp (-v )?-t /incoming/(alpha|ftp)" @end example The @samp{!~} evaluates to @samp{true} if @var{lhs} does not match the regular expression in the @var{rhs}. If the regular expression contains parenthesized groups, subsequent commands can refer to the strings that matched the groups using the @dfn{backreference notation} @samp{%@var{n}}, where @var{n} is 1-based index ordinal number of the group in the regular expression (@pxref{backreference}). The reference @samp{%0} expands to the entire matched string. For example: @example rule chdir match $command "^cd (.+) && (.+)" chdir %1 set command = %2 fall-through @end example It splits the compound command into the working directory and the command itself. Then it remembers the name of the working directory (first parenthesized group -- @samp{%1}) for changing to it later (@pxref{chdir}) and resets the command line to the part of the string that follows the @samp{&&} token. Finally, it passes control to another rules (@pxref{Fall-through}). @node Membership operators @subsubsection Membership operators Membership operators check if their argument is a member of some set of values. There are two such operators. @kwindex @samp{in}, operator @example @var{lhs} in ( @var{args} ) @end example The @code{in} operator evaluates to @samp{true} if @var{lhs} is listed in @var{args}, which is a whitespace-separated list of strings. For example: @example match $0 in ("scp" "rsync") @end example @kwindex @samp{group} The @code{group} operator evaluates to @samp{true} if the requesting user is a member of at least one group listed in its right-hand side. It can have two forms: @table @code @item group @var{grp} Evaluate to @samp{true} if the user is a member of the group @var{grp}. The group can be given either by its name or GID. @item group ( @var{list} ) Evaluate to @samp{true} if the user is a member of one of the groups in whitespace delimited @var{list}. Members of @var{list} are group names or GIDs. @end table @node File system tests @subsubsection File system tests @cindex file type, checking @cindex checking file type @cindex file ownership, checking @cindex checking file ownership File system tests check file types and ownership. They are similar to options to @command{test} shell command: @table @code @cindex -b, file system test @item -b @var{file} @var{file} exists and is block special @cindex -c, file system test @item -c @var{file} @var{file} exists and is character special @cindex -d, file system test @item -d @var{file} @var{file} exists and is a directory @cindex -e, file system test @item -e @var{file} @var{file} exists @cindex -f, file system test @item -f @var{file} @var{file} exists and is a regular file @cindex -g, file system test @item -g @var{file} @var{file} exists and is set-group-ID @cindex -G, file system test @item -G @var{file} @var{file} exists and is owned by the primary group of the current user. @cindex -h, file system test @cindex -L, file system test @item -h @var{file} @itemx -L @var{file} @var{file} exists and is a symbolic link @cindex -k, file system test @item -k @var{file} @var{file} exists and has its sticky bit set @cindex -L, file system test @item -L @var{file} @var{file} exists and is a symbolic link (same as -h) @cindex -O, file system test @item -O @var{file} @var{file} exists and is owned by the current user @cindex -p, file system test @item -p @var{file} @var{file} exists and is a named pipe @cindex -r, file system test @item -r @var{file} @var{file} exists and read permission is granted @cindex -s, file system test @item -s @var{file} @var{file} exists and has a size greater than zero @cindex -S, file system test @item -S @var{file} @var{file} exists and is a socket @cindex -u, file system test @item -u @var{file} @var{file} exists and its set-user-ID bit is set @cindex -w, file system test @item -w @var{file} @var{file} exists and write permission is granted @cindex -x, file system test @item -x @var{file} @var{file} exists and execute (or search) permission is granted @end table @node Boolean expressions @subsubsection Boolean expressions Simple expressions can be combined into complex conditions using boolean operators: @float Table, Boolean Operators @caption{Boolean Operators} @multitable @columnfractions 0.30 .5 @item @samp{||} @tab Disjunction (@dfn{or}) @item @samp{&&} @tab Conjunction (@dfn{and}) @item @samp{!} @tab Negation @end multitable @end float Arguments to these operators can be either simple expressions or another boolean expressions. The operators in the table above are ordered by their precedence. As in most programming languages, parentheses can be used to enforce the desired order of evaluation. Both binary operators implement shortcut evaluation. For example, the following rule will match if the command name contains @samp{git-receive-pack} or @samp{git-upload-pack} and either the UID is 100 or the user is a member of the group @samp{git}: @example @group rule match $0 ~ "git-(receive|upload)-pack" && \ ($uid == 100 || group "git") @end group @end example @noindent Notice the use of parentheses to enforce proper evaluation order. The @samp{&&} operator has higher priority than @samp{||}. Without parentheses the rule would match if either the command name matched the regexp and the user ID was 100, or if the user was a member of the @samp{git} group, no matter what command was issued. @node Modifying variables @subsection Modifying variables Rules can change or unset variables. Two separate groups of statements are provided to that effect. The @code{set}, @code{unset}, and @code{map} statements operate on positional, request, and user-defined variables. The @code{setenv}, @code{unsetenv}, @code{clrenv}, and @code{keepenv} statements modify the environment. These will be discussed in a separate subsection (@pxref{Environment}). Modifications to positional and request variables deserve a special explanation. The only two request variables that can be modified (but not unset) are @code{$command} and @code{$program}. Positional variables and the @code{$command} request variable are mutually dependent. If the @code{$command} is modified, the word splitting is applied to it and resulting words are assigned to the positional variables. Similarly, any modifications to positional variables trigger rebuilding of the @code{$command} variable from the modified arguments. Both operations are run immediately after the change that triggered them. Notice, however, that any transformations, including variable modifications, are executed after @code{match} statements have been evaluated, so that @code{match} always operates on unchanged variables, no matter where in the rule you place it, If the rules result in accepting the request, then modified @code{$command} becomes the actual command that @command{rush} will execute. Obviously, none of the request variables can be unset. You can however, unset a positional variable (excepting @samp{$0}). It is equivalent to removing the corresponding argument from the command line. @menu * set:: Set variable. * insert:: Insert positional arguments. * unset:: Unset variable. * remopt:: Remove options. * delete:: Delete arguments. * map:: Use file lookup to modify variable. @end menu @node set @subsubsection The @code{set} statement The @code{set} statement modifies the value of a positional, request, or user-defined variable. @deffn {rule} set @var{name} = @var{value} @deffnx {rule} set [@var{n}] = @var{value} Sets the variable @var{name} to @var{value}. Prior to use, @var{value} undergoes backreference interpretation (@pxref{backreference}) and variable expansion (@pxref{Variable expansion}). The second form assigns to the positional variable @samp{$@var{n}}. It is discussed in more detail in @ref{Transformations}. @end deffn @deffn {rule} set @var{name} = @var{value} ~ @var{s-expr} @deffnx {rule} set [@var{n}] = @var{value} ~ @var{s-expr} Applies the @command{sed} search-and-replace expression @var{s-expr} to @var{value} and assigns the result to the variable @var{name} or argument @var{n}. Both @var{value} and @var{s-expr} are subject to variable expansion and backreference interpretation. @end deffn @deffn {rule} set @var{name} =~ @var{s-expr} @deffnx {rule} set [@var{n}] =~ @var{s-expr} Applies the @command{sed}-like search-and-replace expression @var{s-expr} to the current value of the variable @var{name} and stores the resulting string as its new value. Prior to use, @var{s-expr} undergoes backreference interpretation (@pxref{backreference}) and variable expansion (@pxref{Variable expansion}). This is a shortcut for @example set @var{name} = $@{@var{name}:-""@} ~ @var{s-expr} @end example Second form modifies the value of the positional variable @samp{$@var{n}}. This statement is a shortcut for @example set [@var{n}] = $@{@var{n}:-""@} ~ @var{s-expr} @end example @xref{Transformations}, for a detailed discussion. @end deffn @cindex s-expression @anchor{s-expression} The transformation expression, @var{s-expr}, is @command{sed}-like replace expression of the form: @example s/@var{regexp}/@var{replace}/[@var{flags}] @end example @noindent where @var{regexp} is a @dfn{regular expression}, @var{replace} is a replacement for each part of the input that matches @var{regexp} and @var{flags} are optional flags that control the substitution. Both @var{regexp} and @var{replace} are described in @ref{The "s" Command, The "s" Command, The `s' Command, sed, GNU sed}. As in @command{sed}, you can give several replace expressions, separated by semicolons. Supported @var{flags} are: @table @samp @cindex g, @option{transform} flag @item g Apply the replacement to @emph{all} matches to the @var{regexp}, not just the first. @cindex i, @option{transform} flag @item i Use case-insensitive matching @cindex x, @option{transform} flag @item x @var{regexp} is an @dfn{extended regular expression} (@pxref{Extended regexps, Extended regular expressions, Extended regular expressions, sed, GNU sed}). @item @var{number} Only replace the @var{number}th match of the @var{regexp}. Note: the @acronym{POSIX} standard does not specify what should happen when you mix the @samp{g} and @var{number} modifiers. @command{Rush} follows the GNU @command{sed} implementation in this regard, so the interaction is defined to be: ignore matches before the @var{number}th, and then match and replace all matches from the @var{number}th on. @end table Normally, the @var{s-expr} is a quoted string, and as such it is subject to backslash interpretation. It is therefore important to properly escape backslashes, especially in @var{replace} part. Consider this example: @example set bindir = $program ~ "s/(.*)\\//\\1/" @end example The intention is to extract the directory part of the executable program name and store it in the variable @samp{bindir}. Notice, that each backslash is escaped, so that the actual string that is compiled into a regular expression is @example s/(.*)\//\1/ @end example @node insert @subsubsection The @code{insert} statement The @code{insert} statement inserts new positional argument at a given position. Its syntax is similar to @code{set}: @deffn {rule} insert [@var{n}] = @var{value} @deffnx {rule} insert [@var{n}] = @var{value} ~ @var{s-expr} Shift arguments starting from @var{n} one position to the right (so that @var{n} becomes @var{n+1} etc.) and insert @var{value} at @code{argv[@var{n}]}. In the second form, the value to be inserted is computed by applying sed-expression @var{s-expr} to @var{value}. Both @var{value} and @var{s-expr} are subject to variable expansion and backreference interpretation. @end deffn Example using this statement to insert the @code{--root=/tmp} argument at position 1: @example insert [1] = "--root=/tmp" @end example @noindent Note that when inserting multiple arguments (e.g. an option with a value), you have two possibilities. First, you can insert each argument at its corresponding position. For example, to insert two arguments @samp{--root} and @samp{/tmp} starting at position 1, one can use: @example insert [1] = "--root" insert [2] = "/tmp" @end example @noindent Otherwise, you can revert the arguments and insert them at the same position, as shown in the example below: @example insert [1] = "/tmp" insert [1] = "--root" @end example @node unset @subsubsection The @code{unset} statement @deffn {rule} unset @var{name} Unset the variable @var{name}. @end deffn @deffn {rule} unset @var{n} Unset the positional argument @var{n} (an integer number greater than 0), shifting the remaining arguments one position left. The effect is the same as from @code{delete} (@pxref{delete}). @end deffn @node remopt @subsubsection The @code{remopt} statement The @code{remopt} statement removes from the command line all occurrences of the supplied option. @deffn {rule} remopt @var{sopt} @deffnx {rule} remopt @var{sopt} @var{lopt} Remove from the command line all occurrences of the short option described by @var{sopt}. The @var{sopt} argument is the short option letter, optionally followed by a colon if that option takes a mandatory argument, or by two colons if it takes an optional argument. Optional @var{lopt} supplies a long option equivalent to @var{sopt}. If no short option equivalent exists, use @samp{_} as @var{sopt}, eventually followed by @samp{:} or @samp{::}. @end deffn For example, to remove all occurrences of the @code{-r} (@code{--root}) option that takes a mandatory argument, use: @example remopt r: root @end example @node delete @subsubsection The @code{delete} statement Another statement modifying the command line is @code{delete}: @deffn {rule} delete @var{n} Delete @var{n}th argument. @end deffn @deffn {rule} delete @var{i} @var{j} Delete positional parameters between @samp{$@var{i}} and @samp{$@var{j}}, inclusive. @end deffn Neither form can be used to delete the program name (@samp{$0}). For example, the following statement deletes all arguments from the command line, except for the program name: @example delete 1 -1 @end example To delete a single argument, @code{unset} can also be used. The following statements have the same effect: @example delete 2 unset 2 @end example @node map @subsubsection The @code{map} statement @deffn {rule} map @var{name} @var{file} @var{delim} @var{key} @ @var{kn} @var{vn} @deffnx {rule} map [@var{n}] @var{file} @var{delim} @var{key} @ @var{kn} @var{vn} @var{default} The @samp{map} statement uses file lookup to find a new value for the variable @var{name} (or, in its second form, for the positional variable @samp{$@var{n}}). Arguments are: @table @var @item file Name of the @dfn{map file}. It must begin with @samp{/} or @samp{~/}. Before using, the file permissions and ownership are checked using the procedure described in @ref{security checks}. @item delim A string containing allowed field delimiters. @item key The value of the lookup key. Before using, it undergoes backslash interpretation and variable expansion. @item kn Number of the key field in @var{file}. Fields are numbered starting from 1. @item vn Number of the value field. @item default If supplied, this value is used as a replacement value, when the key was not found in @var{file}. @end table @end deffn The map file consists of @dfn{records}, separated by newline characters (in other words, a record occupies one line). Each record consists of fields, separated by delimiters listed in @var{delim} argument. If @var{delim} contains a space character, then fields may be delimited by any amount of whitespace characters (spaces and/or tabulations). Otherwise, exactly one delimiter delimits fields. Fields are numbered starting from 1. The @code{map} action works as follows: @enumerate 1 @item Variable expansion is performed on the @var{key} argument (@pxref{Variable expansion}) and the resulting value is used as lookup key. @item The @var{file} is scanned for a record whose @var{kn}th field matches the lookup key. @item If such a record is found, the value of its @var{vn}th field is assigned to the variable. @item Otherwise, if @var{default} is supplied, it becomes the new value of the variable. @item Otherwise, the variable remains unchanged. @end enumerate For example, suppose that the file @file{/etc/passwd.rush} has the same syntax as the system @file{passwd} file (@pxref{passwd, Password File,,passwd(5), passwd(5) man page}). Then, the following statement will replace @samp{$0} with the value of @samp{shell} field, using the current user name as a key: @example map [0] /etc/passwd.rush : $@{user@} 1 7 @end example See also @ref{Interactive}, for another example of using this statement. @node Environment @subsection Environment @cindex Environment The following actions modify the environment in which the program will be executed. @deffn {rule} clrenv Clear the environment. @end deffn @deffn {rule} keepenv @var{list} Retain the names in @var{list} in the environment. This statement should be used in conjunction with @code{clrenv}. Argument is a whitespace delimited list of variables to retain. Each element in the list can be either a variable name, or a shell-style globbing pattern, in which case all variables matching that pattern will be retained, or a variable name followed by an equals sign and a value, in which case it will be retained only if its actual value equals the supplied one. For example, to retain only variables with names beginning with @samp{LC_}: @example keepenv "LC_*" @end example @end deffn @deffn {rule} setenv @var{name} = @var{value} Set the environment variable @var{name}. The @var{value} argument is subject to variable expansion (@pxref{Variable expansion}) and backreference interpretation (@pxref{backreference}). For example, to modify the @env{PATH} value: @example setenv PATH = "$PATH:/opt/bin" @end example @end deffn @deffn {rule} unsetenv @var{list} Unset environment variables listed as arguments. Argument is a whitespace delimited list of variables to retain. Each element in the list can be either a variable name, or a shell-style globbing pattern, in which case all variables matching that pattern will be unset, or a variable name followed by an equals sign and a value, in which case it will be unset only if its actual value equals the supplied one. @end deffn @deffn {rule} evalenv @var{string} Performs backslash interpretation, backreference interpretation and variable expansion on @var{string} and discards the result. This statement is similar to the shell's @dfn{colon} statement. For example, the following statement will define the @env{DEPTH} variable and initialize it to 10, unless it is already defined: @example evalenv $@{DEPTH:=10@} @end example @end deffn @node Transformations @subsection Transformations Transformations are special actions that modify entire command line or particular arguments from it (positional variables). Statements that modify variable have been described in the previous section: these are @code{set}, @code{insert}, @code{unset}, @code{remopt}, @code{delete} and @code{map} statements. When @code{set} or @code{map} is applied to the @samp{command} variable, it modifies entire command line. When these statements are applied to an index (@samp{[@var{n}]}), they modify the corresponding positional variable (argument). This subsection discusses the implications of modifying these variable and illustrates them with some examples. Positional variables and the @code{$command} request variable are mutually dependent. If the @code{$command} is modified, the word splitting is applied to it and resulting words are assigned to the positional variables. Similarly, any modifications to positional variables trigger rebuilding of the @code{$command} variable from the modified arguments. @xref{Modifying variables}, for more detail on it. Let's consider several examples. @enumerate 1 @item Echo the command line @example @group rule set command = "/bin/echo $command" @end group @end example @item Remove all occurrences of @option{-r} option and its arguments from the command line, and then adds its own @option{-r} option and replaces @samp{svnserve} with the full program file name. There are at least three different ways to do so. @enumerate a @item The recommended approach is to use the @code{remopt} and @code{insert} statements, as shown below: @example @group rule svn match $command ~ "^svnserve -t" set program = "/usr/bin/svnserve" remopt r: insert [1] = "-r" insert [2] = "/svnroot" @end group @end example @item The same can be achieved using regular expressions. This was the default in versions of @command{rush} prior to 2.0: @example @group rule svn match $command ~ "^svnserve -t" set command =~ "s/-r *[^ ]*//" set command =~ \ "s|^svnserve |/usr/bin/svnserve -r /svnroot |" @end group @end example @noindent Notice the use of @samp{|} as a delimiter in s-command, in order to avoid escaping each @samp{/} in the pathname. Without it, the expression in the second @code{set} command will be @example "s/^svnserve /\\/usr\\/bin\\/svnserve -r \\/svnroot /" @end example @item The same rule, rewritten using the single @command{set} statement: @example @group rule svn match $command ~ "^svnserve -t" set command =~ "s|-r *[^ ]*||;\ s|^svnserve |/usr/bin/svnserve -r /svnroot |" @end group @end example @end enumerate @item Override the executable program name. @example @group rule cvs match $command ~ "^cvs server" set [0] = /usr/bin/cvs @end group @end example @end enumerate @node System Actions @subsection System Actions @cindex system actions @cindex actions, system System actions provide an interface to the operating system. @deffn {rule} umask @var{mask} Set the umask. The @var{mask} must be an octal value not greater than @samp{0777}. The default umask is @samp{022}. @end deffn @deffn {rule} newgrp @var{group-id} @deffnx {rule} newgroup @var{group-id} Change the current group ID to @var{group-id}, which is either a numeric value or a name of an existing group. @end deffn @deffn {rule} chroot @var{dir} @cindex tilde expansion Change the root directory to that specified in @var{dir}. This directory will be used for file names beginning with @samp{/}. The argument is subject to tilde, variable, and backreference expansions. During tilde expansion, a tilde (@samp{~}) at the start of string is replaced with the absolute pathname of the user's home directory. The two other expansions are described in @ref{Variable expansion}, and @ref{backreference}. @end deffn The directory @var{dir} must be properly set up to execute the commands. For example, the following rule defines execution of @command{sftp-server} in an environment chrooted to the user's home directory: @example @group rule sftp match $program ~ "^.*/sftp-server" set [0] = "bin/sftp-server" chroot "~" @end group @end example For this to work, each user's home must contain the directory @file{bin} with a copy of @file{sftp-server} in it, as well as all directories and files that are needed for executing it, in particular @file{lib}. @anchor{chdir} @deffn {rule} chdir @var{dir} Change to the directory @var{dir}. The argument is subject to tilde, variable (@pxref{Variable expansion}), and backreference expansions (@pxref{backreference}). If both @code{chdir} and @code{chroot} are specified, then @code{chroot} is applied first. @end deffn @deffn {rule} limits @var{res} Impose limits on system resources, as defined by @var{res}. The argument consists of @dfn{commands}, optionally separated by any amount of whitespace. A command is a single command letter followed by a number, that specifies the limit. The command letters are case-insensitive and coincide with those used by the shell @code{ulimit} utility: @multitable @columnfractions 0.3 0.6 @headitem Command @tab The limit it sets @item A @tab max address space (KB) @item C @tab max core file size (KB) @item D @tab max data size (KB) @item F @tab maximum file size (KB) @item M @tab max locked-in-memory address space (KB) @item N @tab max number of open files @item R @tab max resident set size (KB) @item S @tab max stack size (KB) @item T @tab max CPU time (MIN) @item U @tab max number of processes @item L @tab max number of logins for this user (see below) @item P @tab process priority -20..20 (negative = high priority) @end multitable For example: @example limits T10 R20 U16 P20 @end example @cindex simultaneous sessions @cindex limiting number of simultaneous sessions @anchor{L limit} If some limit cannot be set, execution of the rule aborts. In particular, the @samp{L} limit can be regarded as a condition, rather than an action. Setting @code{limit L@var{n}} succeeds only if no more than @var{n} @code{rush} instances are simultaneously running for the same user. This can be used to limit the number of simultaneously open sessions. The use of @samp{L} resource automatically enables @dfn{forked mode}. @xref{Accounting and Forked Mode}, for more information about it. @end deffn @node Fall-through @subsection Fall-through @cindex fall-through statement @cindex fallthrough The @dfn{fall-through} statement is a special action that does not execute the requested command. When a matching fall-through rule is encountered, @command{rush} evaluates it and continues scanning its configuration for the next matching rule. Any modifications to the request found in the fall-through rule take effect immediately, which means that subsequent rules will see modified command line and environment. Execution of any other actions found in the fall-through rule is delayed until a usual rule is found. A fall-through rule is declared using the following statement: @deffn {rule} fall-through @deffnx {rule} fallthrough Declare a fall-through rule. @end deffn Usually this statement is placed as the last statement in a rule, e.g.: @example @group rule default umask 002 clrenv keepenv HOME USERNAME PATH fall-through @end group @end example Fall-through rules provide a way to set default values for subsequent rules. For example, any rules that follow the @samp{default} rule shown above, will inherit the umask and environment set there. One can also use fall-through rules to ``normalize'' command lines. For example, consider this rule: @example @group rule default set [0] =~ "s|.*/||" fall-through @end group @end example It will remove all path components from the first command line argument. As a result, all subsequent rules may expect a bare binary name as the first argument. Yet another common use for such rules is to enable accounting (see the next subsection), or set resource limits for the rest of rules: @example @group rule default limit l1 fall-through @end group @end example @node Accounting and Forked Mode @subsection Accounting and Forked Mode @cindex accounting GNU Rush is able to operate in two modes, which we call default and forked. When operating in the default mode, the process image of @command{rush} itself is overwritten by the command being executed. Thus, when it comes to launching the requested command, the running instance of @command{rush} ceases to exist. @cindex forked mode There is also another operation mode, which we call @dfn{forked mode}. When running in this mode, @command{rush} executes the requested command in a subprocess, and remains in memory supervising its execution. Once the command terminates, @command{rush} exits. One advantage of the forked mode is that it allows you to keep @dfn{accounting}, i.e. to note who is doing what and to keep a history of invocations. The accounting, in turn, can be used to limit simultaneous executions of commands (@dfn{logins}, in GNU Rush terminology), as requested by @samp{L} command to @code{limit} statement (@pxref{L limit}). The forked mode is enabled on a per-rule basis, for rules that contain either @samp{L} command in the @code{limit} statement, or @samp{acct on} command: @deffn {rule} acct @var{bool} Turn accounting mode on or off, depending on @var{bool}. The argument can be one of the following: @samp{yes}, @samp{on}, @samp{t}, @samp{true}, or @samp{1}, to enable accounting, and @samp{no}, @samp{off}, @samp{nil}, @samp{false}, @samp{0}, to disable it. Notice, that there is no need in explicit @code{acct on} command, if you use @command{limit L}. @end deffn The notion @samp{rule contains}, used above, means that either the rule in question contains that statement, or inherits it from one of the fall-through rules (@pxref{Fall-through}) that were matched before it. In fact, in most cases the accounting should affect all rules, therefore we suggest to enable it in a fall-through rule at the beginning of the configuration file, e.g.: @example rule default acct on fall-through @end example If the need be, you can disable it for some of the subsequent rules by placing @code{acct off} in it. Notice, that this will disable accounting only, the forked mode will remain in action. To disable it as well and enforce default mode for a given rule, use the following statement: @deffn {rule} fork @var{bool} Enable or disable forked mode. This statement is mainly designed as a way of disabling the forked mode for a given rule. @end deffn Once accounting is enabled, you can use the @code{rushwho} command to see the list of users presently running some commands (@pxref{Rushwho}) and view the history of last accesses using @code{rushlast} command (@pxref{Rushlast}). @node Notification @subsection Post-process Notification @command{Rush} can be configured to send a @dfn{notification} over @acronym{INET} or @acronym{UNIX} sockets, after completing user request. It is done using the @code{post-socket} statement: @deffn {rule} post-socket @var{url} Notify @acronym{URL} about completing the user request. This statement implies forked mode (@pxref{Accounting and Forked Mode}). Allowed formats for @var{url} are: @table @asis @item inet://@var{hostname}[:@var{port}] @cindex tcpmux Connect to remote host @var{hostname} using TCP/IP. @var{Hostname} is the host name or IP address of the remote machine. Optional @var{port} specifies the port number to connect to. It can be either a decimal port number or a service name from @file{/etc/services}. If @var{port} is absent, @samp{tcpmux} (port 1) is assumed. @item unix://@var{filename} @itemx local://@var{filename} Connect to a @acronym{UNIX} socket @var{filename}. @end table For example: @example @group rule default post-socket "inet://localhost" @end group @end example @end deffn The GNU Rush notification protocol is based on @acronym{TCPMUX} (@uref{http://www.rfc-editor.org/rfc/rfc1078.txt, RFC 1078}). After establishing connection, @command{rush} sends the rule tag followed by a CRLF pair. The rule tag acts as a service name. The remote party replies with a single character indicating positive (@samp{+}) or negative (@samp{-}) acknowledgment, optionally followed by a message of explanation, and terminated with a CRLF. If positive acknowledgment is received, @command{rush} sends a single line, consisting of the user name and the executed command line, separated by a single space character. The line is terminated with a CRLF. After sending this line, @command{rush} closes the connection. The post-process notification feature can be used to schedule execution of some actions after certain rules. @xref{notification example}, for an example of how to use this feature. @node Exit @subsection Exit rule @cindex exit rule The @dfn{exit} rule does not execute any commands. Instead, it writes the supplied error message to the specified file descriptor and exits immediately. The exit rule is defined using the following statement: @deffn {rule} exit @var{fd} @var{message} @deffnx {rule} exit @var{message} Write textual message @var{message} to a file descriptor, given by the optional argument @var{fd}. If @var{fd} is absent, @samp{2} (standard error) is used. @end deffn The @var{message} argument can be either a quoted string, or an identifier. If it is a quoted string, it is subject to backreference interpretation and variable expansion prior to being used. For example (note the use of line continuation character): @example exit "\ \r\nYou are not allowed to execute that command.\r\n\ \r\nIf you think this is wrong, ask for assistance.\r\n" @end example If @var{message} is an identifier, it must be the name of a predefined error message (@pxref{Error Messages}). The corresponding message text will be printed. For example: @example exit nologin-message @end example If the identifier does not match any predefined error message name, an error of type @samp{config-error} is signaled and @command{rush} exits. @cindex trap rule Exit actions are useful for writing @dfn{trap rules}, i.e. the rules that are intended to trap incorrect or prohibited command lines and to return customized reply messages in such cases. Consider the following rule: @example @group rule git match $program ~ "^git-.+" && $1 ~ "^/sources/[^ ]+\.git$" set command =~ "s|.*|/usr/bin/git-shell -c \"&\"|" @end group @end example It allows the client to use only those Git repositories that are located under @file{/sources} directory@footnote{@xref{git}, for a better way to handle Git accesses.}. If a user tries to access a repository outside this root, he will be returned a default error message, saying @samp{You are not permitted to execute this command} (@pxref{Error Messages, usage-error}). You can, however, provide a more convenient message in this case. To do so, place the following after the @samp{git} rule: @example @group rule git-trap match $command ~ "^git-.+" exit "fatal: Use of this repository is prohibited." @end group @end example @noindent This rule will trap all git invocations that do not match the @samp{git} rule. @node Interactive @subsection Interactive Access @cindex interactive access Sometimes it may be necessary to allow some group of users limited access to interactive shells. GNU Rush contains provisions for such usage. When @command{rush} is invoked without @option{-c} it assumes interactive usage. In this case only rules explicitly marked as interactive are considered, the rest of rules is ignored. @deffn {rule} interactive @var{bool} If @var{bool} is @samp{true}, this statement marks the rule it appears in as interactive. This rule will match only if @command{rush} is invoked without command line arguments. @end deffn Unless command line transformations are applied, interactive rule finishes by executing @command{/bin/sh}. The first word in the command line (@code{argv[0]}) is normally set to the base name of the command being executed prefixed by a dash sign. @noindent Consider the following example: @example rule login interactive true group rshell map program /etc/rush.shell : $@{user@} 1 2 set [0] = $@{program@} ~ "s|^.*/||;s,^,-r," rule nologin interactive true exit You don't have interactive access to this machine. @end example The @samp{login} rule will match interactive user requests if the user is a member of the group @samp{rshell}. It uses @file{/etc/rush.shell} to select a shell to use for that user (@pxref{map}). This map file consists of two fields, separated by a colon. If the shell is found, its base name, prefixed with @samp{-r}, will be used as @samp{argv[0]} (this indicates a restricted login shell). Otherwise, the trap rule @samp{nologin} will be matched, which will output the given diagnostics message and terminate @command{rush}. To test interactive access, use the @option{-i} option: @example rush --test -i @end example @node Localization @subsection Localization @cindex i18n @cindex internationalization @cindex l10n @cindex localization GNU Rush is internationalized, which means that it is able to produce log and diagnostic messages in any language, if a corresponding translation file is provided. This file is called a @dfn{localization} or @dfn{domain} file. To find an appropriate localization file, @command{rush} uses the following parameters: @table @var @cindex locale name @item locale @dfn{Locale name} is a string that describes the language, territory and optionally, the character set to use. It consists of the language (ISO 639) and country (ISO 3166) codes, separated by an underscore character, e.g. @samp{en_US} or @samp{pl_PL}. If a character set is specified, its name follows the country code and is separated from it by a @samp{@@} character. There are two special locale names: @samp{C} or @samp{POSIX} mean to use the default @acronym{POSIX} locale, and @samp{""} (an empty string), means to use the value of the environment variable @env{LC_ALL} as the locale name. @cindex locale directory @item locale_dir Directory where localization files are located. If not specified, a predefined set of directories is searched for the matching file. @cindex domain, localization @cindex textual domain @item domain @dfn{Text domain} defines the base name of the localization file. @end table @anchor{mo-name} Given these parameters, the name of the full pathname of the localization file is defined as: @example @var{locale_dir}/@var{locale}/LC_MESSAGES/@var{domain}.mo @end example GNU Rush produces three kinds of messages: @table @asis @item diagnostics These are diagnostics messages that GNU Rush produces to its log output (syslog, unless in test mode). @item error messages Messages sent to the remote party when @command{rush} is not able to execute the request (@pxref{Error Messages}). @item exit messages These are messages sent to the remote party by @code{exit} rules (@pxref{Exit}). @end table These messages use different domain names (and may use different locale directories). The diagnostics and error messages use textual domain @samp{rush}. The corresponding locale directory is defined at compile time and defaults to @file{@var{prefix}/share/locale}, where @var{prefix} stands for the installation prefix, which is @file{/usr/local}, by default. @c Makeinfo 5.2 is unable to cope with the @uref below @urefbreakstyle none GNU Rush is shipped with several localization files, which are installed by default. As of version @value{VERSION}, these files cover the following languages: Chinese, Danish, Dutch, Finnish, French, Galician, German, Polish, Portuguese, Serbian, Spanish, Swedish, Ukrainian, and Vietnamese. If the localization you need is not in this list, visit @uref{http://translationproject.org/domain/rush.html}. If it is not there either, consider writing it (see @ref{Translators,,,gettext, GNU gettext utilities}, for a detailed instructions on how to do that). Exit messages use custom domain files. It is the responsibility of the system administrator to provide and install such files. @menu * Localization Directives:: * Writing Your Localization:: @end menu @node Localization Directives @subsubsection Localization Directives @cindex localization directives The following configuration directives control localization. They are available for use in @code{rule} statements: @deffn {rule} locale @var{name} Sets the locale name. To specify empty locale, use @samp{""} as @var{name} (recall that empty locale name means to use the value of the environment variable @env{LC_ALL} as locale name). @end deffn @deffn {rule} locale-dir @var{name} Sets the name of the locale directory. @end deffn @deffn {rule} text-domain @var{name} Sets the textual domain name. @end deffn The following configuration fragment illustrates their use: @example @group rule l10n locale "pl_PL" text-domain "rush-config" fall-through @end group @end example Different users may have different localization preferences. @xref{per-user l10n}, for a description of how to implement this. @node Writing Your Localization @subsubsection Writing Your Localization You need to write a localization file for your configuration script if it implements exit rules (@pxref{Exit}) and changes user locale (@pxref{Localization Directives, locale}). Preparing a localization consists of three stages: extracting exit messages and forming a @acronym{PO} file, editing this file, compiling and installing it. The discussion below describes these stages in detail. @enumerate 1 @item Creating a @samp{po} file. A @acronym{PO} (@dfn{Portable Object}) file is a plain text file, containing original messages and their translations for a particular language. @xref{PO Files, The Format of PO Files,,gettext, GNU gettext utilities}, for a description of its format. @cindex rush-po @anchor{rush-po} The script @command{rush-po} extracts translatable messages from the configuration file and produces a valid @acronym{PO} file. It takes the name of the rush configuration file as its argument and produces the PO file on the standard output, or in the file given with the @option{-o} (@option{--output}) option. E.g., to create a PO file from your configuration file, run: @example rush-po -o myconf.po /usr/local/etc/rush.rc @end example @item Editing the @acronym{PO} file Open the created @acronym{PO} file with your favorite editor and supply message translations after @code{msgstr} keywords. Although you can use any editor capable of handling plain text files, we recommend to use GNU Emacs, which provides a special @dfn{po-mode}. @xref{Basics, PO Files and PO Mode Basics,,gettext, GNU gettext utilities}, for guidelines on editing @acronym{PO} files and using the po-mode. @item Compiling the @acronym{PO} file @pindex msgfmt When ready, the @acronym{PO} file needs be compiled into a @acronym{MO} (@dfn{Message Object}) file, which is directly readable by @command{rush}. This is done using @command{msgfmt} utility from GNU gettext: @example msgfmt -o myconf.mo myconf.po @end example @xref{msgfmt Invocation,,,gettext, GNU gettext utilities}, for a detailed description of the @command{msgfmt} utility. After creating the @acronym{MO} file, copy it into appropriate directory. It is important that the installed @acronym{MO} file uses the naming scheme described in @ref{mo-name,, localization file naming}. @end enumerate @node Include @section Include @cindex include The @code{include} statement forces inclusion of the named file in that file location: @deffn {rule} include @var{file} Include file @var{file}. @end deffn @cindex tilde expansion The statement is evaluated when parsing the configuration file, which means that @var{file} undergoes only @dfn{tilde expansion}: the two characters @samp{~/} appearing at the beginning of @var{file} are replaced with the full path name of the current user's home directory. If @var{file} is a directory, that directory is searched for a file whose name coincides with the current user name. If such a file is found, it is included. In any case, if the file named by @var{file} (after tilde expansion) does not exist, no error is reported, and parsing of the configuration file continues. Before including the file @command{rush} checks if it is secure, using the same rules as for the main configuration file (@pxref{security checks}). The exact list of checks can be tuned using the @code{include-security} statement (@pxref{include-security}). The @code{include} statement can be used only within a rule. The included file may not contain @code{rule} and @code{global} statements. This statement provides a convenient way for user-dependent @command{rush} configuration. For example, the following fall-through rule (@pxref{Fall-through}) allows the administrator to keep each user personal configuration in a file named @file{.rush}, located in the user's home directory: @example @group rule user include "~/.rush" fall-through @end group @end example Of course, it is supposed that such a per-user file, if it exists, is writable only for super-user. @anchor{per-user l10n} The use of include files may be especially useful for per-user localization (@pxref{Localization}). It suffices to provide a fall-through rule, similar to the one above, and to place a @code{locale} directive in @file{~/.rush} files, according to the user preferences. @node Default Configuration @chapter Default Configuration You can compile @command{rush} with the default configuration built in the binary. Such a binary can then be run without configuration file. However, if a configuration file is present, it will be used instead of the built-in configuration. To compile @command{rush} with the built-in configuration, first compile the package as usual. Then, prepare a configuration file, and test it using @command{rush --lint}. If the test shows no errors, reconfigure the package, using the @option{--with-default-config} option: @example ./configure --with-default-config=@var{file} @end example @noindent where @var{file} is the name of your configuration file. Then, recompile and install the package. @opindex --show-default You can inspect the built-in configuration using the @option{--show-default} option: @example rush --show-default @end example @node Usage Tips @chapter Usage Tips In this chapter we will explain how to write GNU Rush configuration rules for several popular remote copy and version control system utilities. For this purpose, we assume the following setup: @itemize @bullet @item Users are allowed to use @code{scp} and @code{rsync} to upload files to the @file{/incoming} directory and to copy files to and from their @file{~/public_html} directory. The actual location of the @file{/incoming} directory is @file{/home/ftp}, but that must be transparent to users, i.e. they use @code{scp @var{file} @var{host}:/incoming} (not @code{@var{host}:/home/ftp/incoming}) to upload files. @item Additionally, users may use @command{sftp} to manage their @file{~/public_html} directory. In this case, to prevent users from accessing other directories, @command{sftp-server} is executed in a chrooted environment. @item The server runs three version control system repositories, whose corresponding root directories are: @multitable @columnfractions 0.3 0.7 @headitem VCS @tab Repository Root @item cvs @tab /cvsroot @item svn @tab /svnroot @item git @tab /gitroot @end multitable @end itemize @menu * scp:: * rsync:: * sftp:: * cvs:: * svn:: * git:: * notification example:: @end menu @node scp @section scp @cindex scp The @code{scp} utility is executed on the server side with option @option{-t}, when copying files to server, and with @option{-f} when copying from it. Thus, the basic templates for @code{scp} rules are: @example @group # Copying to server: rule scp-to match $command ~ "^scp -t" ... # Copying from server: rule scp-from match $command ~ "^scp -f" ... @end group @end example You may also wish to allow for @option{-v} (@samp{verbose}) command line option. In this case, the @samp{scp-to} rule will become: @example @group rule scp-to match $command ~ "^scp (-v )?-t" ... @end group @end example Now, we want users to be able to upload files to @file{/home/ftp/incoming} directory. Moreover, the @file{/home/ftp} directory prefix must be invisible to them. We should also make sure that the user cannot get outside the @file{incoming} directory by using @file{../} components in his upload path. So, our first rule for @code{scp} uploads will be: @example @group rule scp-to-incoming match $command ~ "^scp (-v )?-t /incoming/" && \ $@{-1@} !~ "\\.\\./" set command "/bin/scp" set [-1] =~ "s|^|/home/ftp/|" @end group @end example The @code{match} statement ensures that no relative components are used. The two @code{set} statements ensure that the right @command{scp} binary is used and that @file{/home/ftp} prefix is prepended to the upload path. Other than uploading to @file{/incoming}, users must be able to use @command{scp} to manage @file{public_html} directories located in their homes. They should use relative paths for that, i.e., the command: @example $ scp file.html server: @end example @noindent will copy file @file{file.html} to @file{~/public_html/file.html} on the server. The corresponding rule is: @example @group rule scp-home match $command ~ "^scp (-v )?-[tf] [^/].*" && \ $@{-1@} !~ "\\.\\./" set [0] = "/bin/scp" set [-1] =~ "s|^|public_html/|" chdir "~" @end group @end example Finally, we provide two trap rules for diagnostic purposes: @example @group rule scp-to-trap match $command ~ "^scp (-v )?-t" exit "Error: Uploads to this directory prohibited" rule scp-from match $command ~ "^scp (-v )?-f" exit Error: Downloads from this directory prohibited @end group @end example @node rsync @section rsync @cindex rsync On the server side, @command{rsync} is executed with the @option{--server} command line option. In addition, when copying files from the server, the @option{--sender} option is used. This makes it possible to discern between incoming and outgoing requests. In our setup, @command{rsync} is used the same way as @command{scp}, so the two rules will be: @example @group rule rsync-incoming match $command ~ "^rsync --server" && \ $command !~ --sender && \ $@{-1@} ~ "/incoming/" && $@{-1@} !~ "\\.\\./" set [0] =~ "s|^|/usr/bin/|" set [-1] =~ "s|^|/home/ftp/|" rule rsync-home match $command ~ "^rsync" && \ $@{-1@} !~ "^[^/]" && \ $@{-1@} !~ "\\.\\./" set [0] = "s|^|/usr/bin/|" set [-1] =~ "s|^|public_html/|" chdir "~" @end group @end example The trap rules for @command{rsync} are trivial: @example @group rule rsync-to-trap match $command ~ "^rsync.*--sender" exit "Error: Downloads from this directory prohibited" rule rsync-from-trap match $command ~ "^rsync" exit "Error: Uploads to this directory prohibited" @end group @end example @node sftp @section sftp @cindex sftp Executing @command{sftp} on the client machine invokes @command{sftp-server}, without arguments, on the server. We want to allow our users to use @command{sftp} to manage their @file{public_html} directories. The @command{sftp-server} will be executed with the user's home directory as root, in a chrooted environment. For this to work, each user's home must contain a copy of @command{sftp-server} (which we'll place in @file{~/bin} subdirectory) and all files it needs for normal execution: @file{/etc/group} and @file{/etc/passwd} with one entry (for the user and his group), and, unless the binary is linked statically, all the shared libraries it is linked with, in the subdirectory @file{~/lib}. Given these prerequisites, the following rule will ensure proper @command{sftp} interaction: @example @group rule sftp-incoming match $command ~ "^.*/sftp-server" set [0] = "/bin/sftp-server" chroot "~" chdir "public_html" @end group @end example @noindent Notice the last action. Due to it, users don't have to type @code{cd public_html} at the beginning of their sftp sessions. @node cvs @section cvs @cindex cvs Using @command{cvs} over @code{ssh} invokes @command{cvs server} on the server machine. In the simplest case, the following rule will do to give users access to @acronym{CVS} repositories: @example @group rule cvs match $command ~ "^cvs server" set command ~ "s|^cvs|/usr/bin/cvs -f" @end group @end example However, @command{cvs} as of version 1.12.13 does not allow to limit root directories that users are allowed to access. It does have @option{--allow-root} option, but unfortunately this option is ignored when invoked as @command{cvs server}. To restrict possible roots, we have to run @command{cvs} in a chrooted environment. Let's suppose we created an environment for @command{cvs} in directory @file{/var/cvs}, with the @command{cvs} binary located in @file{/var/cvs/bin} and repository root directory being @file{/var/cvs/cvsroot}. Then, we can use the following rule: @example @group rule cvs match $command ~ "^cvs server" set [0] = "/bin/cvs" chroot "/var/cvs" @end group @end example @node svn @section svn @cindex svn Remote access to @acronym{SVN} repositories is done via @command{svnserve} binary. It is executed on server with @option{-t} option. The @option{-r} option can be used to restrict access to a subset of root directories. So, we can use the following rule: @example @group rule svn match $command ~ "^svnserve -t" set command =~ "s|-r *[^ ]*||" set command =~ \ "s|^svnserve |/usr/bin/svnserve -r /svnroot|" @end group @end example The first @code{set command} action removes any @option{-r} options the user might have specified and enforces a single root directory. A more restrictive action can be used to improve security: @example set command =~ "s|.*|/usr/bin/svnserve -r /svnroot|" @end example @node git @section git @cindex git @cindex git-receive-pack @cindex git-upload-pack @cindex git-shell Remote access to Git repositories over ssh causes execution of @code{git-receive-pack} and @code{git-upload-pack} on the server. The simplest rule for Git is: @example @group rule git set $command ~ "^git-(receive|upload)-pack" set [0] =~ "s|^|/usr/bin/|" @end group @end example @noindent The @code{set} action is necessary to ensure the proper location of Git binaries to use. This example supposes they are placed in @file{/usr/bin}, you will have to tailor it if they are located elsewhere on your system. To limit Git accesses to repositories under @file{/gitroot} directory, modify the @samp{$1}, as shown in the example below: @example @group rule git match $command ~ "^git-(receive|upload)-pack" set [1] =~ "^/gitroot[^ ]+\.git$" set [0] =~ "s|^|/usr/bin/|" @end group @end example To provide more helpful error messages, you may follow this rule by a trap rule (@pxref{Exit, trap rules}): @example @group # @r{Trap the rest of Git requests:} rule git-trap match $command ~ "^git-.+" exit "fatal: access to this repository is denied." @end group @end example @node notification example @section Notification In this section we will show how to set up a mail notification for Rush rules. Let's suppose we wish to receive emails for each upload by @code{scp-to} rule (@pxref{scp}). To do so, we add the following fall through rule to the beginning of @file{rush.rc}: @example @group rule default post-socket "inet://localhost" fall-trough @end group @end example This will enable notifications for each rule located below this one. Missing port in @code{post-socket} statement means @command{rush} will be using the default @samp{tcpmux} port. To receive and process these requests, you will need an @command{inetd} capable to handle @acronym{TCPMUX}. We recommend the one from GNU Inetutils package (@uref{http://www.gnu.org/software/inetutils, GNU Inetutils}). In @file{/etc/inetd.conf} file, we add: @example @group # @r{Enable @acronym{TCPMUX} handling}. tcpmux stream tcp nowait root internal # @r{Handle @samp{scp-to} service}. tcpmux/+scp-to stream tcp nowait root \ /usr/sbin/tcpd /bin/rushmail @end group @end example The program @command{/bin/rushmail} does the actual notification. Following is its simplest implementation: @example @group #! /bin/sh read user command /usr/sbin/sendmail -oi -t < To: Subject: GNU Rush notification Be informed that $user executed $command. EOT @end group @end example @node Test Mode @chapter Test Mode @cindex test mode @cindex testing configuration file @cindex configuration file, testing @opindex --test @opindex --lint @opindex -c GNU Rush provides a special @dfn{test mode}, intended to test configuration files and to emulate execution of commands. Test mode is enabled by the @option{--test} command line option (aliases: @option{--lint}, @option{-t}). When @command{rush} is given this option, the following occurs: @enumerate 1 @item All diagnostic messages are redirected to standard error, instead of syslog. @item If a single non-option argument is present, it is taken as a name of the configuration file to use. @item The configuration file is parsed. If parsing fails, the program exits with the code 1. @item If the @option{-c} option is present, @command{rush} processes its argument as usual (@pxref{Operation}), except that the command itself is not executed. @item Otherwise, if @option{-i} option is present, @command{rush} emulates interactive usage, but does not execute the final command. @end enumerate An exit status of 0 means no errors, 1 means an error has occurred. @opindex --user @opindex -u You can also emulate access by a particular user, by supplying his user name via the @option{--user} (@option{-u}) option. This option implies @option{--test}. @opindex --debug @opindex -d In test mode, you can set debugging level (@pxref{Debugging}) from the command line, using the @option{--debug} (@option{-d}) command line option. It expects a single number specifying debugging level as its argument. The debugging level set this way overrides settings from the configuration file. Here are several examples that illustrate the use of test mode in various cases: @enumerate 1 @item Test default configuration file: @example $ rush --test @end example @item Test configuration file @file{sample.rc}: @example $ rush --test sample.rc @end example @item Test interactive access @example $ rush --test -i sample.rc @end example @item Test the configuration file and emulate execution of the command @command{cvs server}. Use debugging level 2: @example $ rush --test --debug=2 -c "cvs server" @end example @item Same, but for user @samp{jeff}: @example $ rush --user=jeff --debug=2 -c "cvs server" @end example Note, that you don't need to specify @option{--test} along with @option{--user} or @option{-i} options. @item Same, but use @file{sample.rc} instead of the default configuration file: @example $ rush --test --debug=2 -c "cvs server" sample.rc @end example @end enumerate @menu * dump mode:: @end menu @node dump mode @section Dump Mode @cindex dump mode Dump mode is similar to test mode. The main difference is that in this mode, @command{rush} dumps to the standard output a description of the user request after performing all checks and transformations. @opindex --dump @opindex -D The mode is requested by the @option{--dump=@var{attr}} (@option{-D @var{attr}}) option. The argument @var{attr} is a comma-separated list of the names of attributes to be included in the dump, or the word @samp{all}, standing for all attributes. Additional options and arguments are the same as for the @option{--test} option. The description is formatted as a JSON object@footnote{Well, almost. It diverges from the JSON standard in that slash characters are not escaped in string objects.} with the following attributes. These are also the allowed values for the @var{attr} list: @table @asis @kwindex cmdline, dump attribute @item cmdline Command line after transformations. @kwindex argv, dump attribute @item argv Array of command line arguments after transformations. @kwindex prog, dump attribute @item prog Name of the program to be executed. If @samp{null}, @code{argv[0]} will be used. @kwindex interactive, dump attribute @item interactive @samp{0} for normal requests, @samp{1} for interactive requests. @kwindex pw_name, dump attribute @item pw_name Name of the user from the system user database. @kwindex pw_uid, dump attribute @item pw_uid UID of the user. @kwindex pw_gid, dump attribute @item pw_gid GID of the user. @kwindex pw_dir, dump attribute @item pw_dir Home directory of the user, as set in the system user database. @kwindex umask, dump attribute @item umask Value of the umask (octal). @kwindex chroot_dir, dump attribute @item chroot_dir Chroot directory. @kwindex home_dir, dump attribute @item home_dir Current working directory. @kwindex gid, dump attribute @item gid New GID as set by the @code{newgrp} action, or @samp{-1} if unchanged. @kwindex fork, dump attribute @item fork Fork mode. It is a three-state attribute: @samp{0} meaning @dfn{disabled}, @samp{1} meaning @dfn{enabled}, and @samp{-1} meaning @dfn{default state}. @kwindex acct, dump attribute @item acct Accounting mode. See @samp{fork}, for a description of possible values. @kwindex text_domain, dump attribute @item text_domain Textual domain for i18n. @kwindex localedir, dump attribute @item localedir Locale directory for i18n. @kwindex locale, dump attribute @item locale Locale name @kwindex environ, dump attribute @item environ Dump of the environment (array of assignments). @kwindex vars, dump attribute @item vars Defined variables, as a JSON object. @end table @kwindex all, dump attribute The attribute @samp{all} stands for all attribute in the same order as listed in the table above. @node Option Summary @chapter Option Summary @cindex options, command line This chapter provides a short summary of @command{rush} command line options. @table @option @opindex -c, @r{rush} @item -c @var{command} Specify the command to run. @anchor{--security-check} @opindex -C, @r{rush} @opindex --security-check, @r{rush} @item -C @var{test} @itemx --security-check=@var{test} Configure security checks for the main configuration file. @xref{include-security}, for the description of @var{test} argument. @xref{security checks}, for the discussion of the available security tests. @opindex -d, @r{rush} @opindex --debug, @r{rush} @item -d @var{number} @itemx --debug=@var{number} Set debugging level. @opindex -D @opindex --dump @item --dump=@var{attrs} @itemx -D @var{attrs} Run in @dfn{request dump mode}. Argument is a comma-separated list of attribute names. @xref{dump mode}, for a detailed description of the request dump mode. @opindex -i, @r{rush} @item -i Emulate interactive access. @xref{Test Mode}. @opindex --show-default, @r{rush} @item --show-default Display the default built-in configuration. @xref{Default Configuration}, for more information. @opindex -t, @r{rush} @opindex --test, @r{rush} @opindex --lint, @r{rush} @item -t @itemx --test @itemx --lint Run in test mode. An optional argument may be used with this option to specify alternative configuration file name, e.g.: @example $ rush --lint ./test.rc @end example If the @option{-c} option is also specified, @command{rush} emulates the normal processing for the command, but does not execute it. @opindex -x, @r{rush} @opindex --trace, @r{rush} @item -x @item --trace Print parser traces. When used twice, print lexical scanner traces as well. This option is intended for debugging. @opindex -T, @r{rush} @item -T Test scanner mode. This option is used by the @command{rush} testsuite. @opindex -u, @r{rush} @opindex --user, @r{rush} @item -u @var{name} @itemx --user=@var{name} Emulate access by user @var{name}. This option implies @option{--test} and is valid only when used by root and in conjunction with the @option{-c} option. @opindex -v, @r{rush} @opindex --version, @r{rush} @item -v @itemx --version Display program version. @opindex -h, @r{rush} @opindex --help, @r{rush} @item -h @itemx --help Display a short help message. @opindex --usage, @r{rush} @item --usage Display a concise usage summary. @end table @node Rushwho @chapter The @code{rushwho} utility. @prindex rushwho The @command{rushwho} utility displays a list of users who are currently using @command{rush}. The utility operates on default Rush database, which is maintained if @command{rush} runs in accounting mode (@pxref{Accounting and Forked Mode}). The following is a sample output from @code{rushwho}: @example Login Rule Start Time PID Command jeff sftp Sun 12:17 00:58:26 10673 bin/sftp-server @end example The information displayed is: @table @asis @item Login The login name of the user. @item Rule The tag of the rule he is served under (@pxref{Rule, tag}). @item Start Time when the rule began execution. @item Time Duration of the session. @item PID PID of the running command. @item Command Command line being executed. @end table @vrindex RUSHWHO_FORMAT This format is a built-in default. It may be changed either by setting the @env{RUSHWHO_FORMAT} environment variable to the desired format string, or by using @option{--format} command line option. @menu * Rushwho Options:: * Formats:: @end menu @node Rushwho Options @section Rushwho Options @cindex rushwho, command line options This section summarizes the command line options understood by @command{rushwho} utility. @table @option @anchor{format option} @opindex -F, @r{rushwho} @opindex --format, @r{rushwho} @item -F @var{string} @itemx --format=@var{string} Use @var{string} instead of the default format, described in @ref{Rushwho}. @xref{Formats}, for a detailed description of the output format syntax. If @var{string} begins with a @samp{@@}, then this character is removed from it, and the resulting string is treated as the name of the file to read. The contents of this file is the format string. The file is read literally, except that lines beginning with @samp{;} are ignored (they can be used to introduce comments). For example, @command{rushwho --format=@@formfile} reads in the contents of the file named @file{formfile}. @opindex -f, @r{rushwho} @opindex --file, @r{rushwho} @item -f @var{dir} @itemx --file=@var{dir} Use database directory @var{dir}, instead of the default. By default, database files are located in @file{/usr/local/var/rush}. @opindex -H, @r{rushwho} @opindex --no-header, @r{rushwho} @item -H @itemx --no-header Do not display header line. @opindex -v, @r{rushwho} @opindex --version, @r{rushwho} @item -v @itemx --version Display program version. @opindex -h, @r{rushwho} @opindex --help, @r{rushwho} @item -h @itemx --help Display a short help message. @opindex --usage, @r{rushwho} @item --usage Display a concise usage summary. @end table @node Formats @section Output Formats @cindex output formats A format string controls the output of every record from GNU Rush accounting database. It may contain following four types of objects: @table @asis @item Ordinary characters These are copied to the output verbatim. @item Escapes An escape is a backslash (@samp{\\}), followed by a single character. It is interpreted as follows: @multitable @columnfractions 0.30 .5 @item Escape @tab Output @item \a @tab Audible bell character (@acronym{ASCII} 7) @item \b @tab Backspace character (@acronym{ASCII} 8) @item \e @tab Escape character (@acronym{ASCII} 27) @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 Any escape not listed in the table above results in its second character being output. @item Quoted strings Strings are delimited by single or double quotes. Within a string escape sequences are interpreted as described above. @item Format specifications A @dfn{format specification} is a kind of function, which outputs a particular piece of information from the database record. @end table Each format specification starts with an opening brace and ends with a closing brace. The first word after the brace is the name of the format specification. Remaining words are @dfn{positional arguments} followed by @dfn{keyword arguments}. Both are optional. When specified, keyword arguments must follow positional ones. A keyword argument begins with a colon. For example: @table @code @item (time) A single format specification. @item (time 10) The same format specification with the output width limited to 10 characters. @item (time 10 Duration) The @samp{time} format specification, with the output width limited to 10 characters and @samp{Duration} as a header title. @item (time 10 "Session Duration" :right :format %H:%M) The same with two keyword arguments: @samp{:right} and @samp{:format}. The latter takes the string @samp{%H:%M} as its argument. Notice the use of quoted string to preserve the whitespace. @end table A full list of format specifications follows. @deffn {Format Spec} newline [@var{count}] Causes the newline character to be output. If the optional @var{count} is supplied, that many newlines will be printed @end deffn @deffn {Format Spec} tab [@var{num}] Advance to the next tab stop in the output stream. If optional @var{num} is present, then skip @var{num} tab stops. Each tab stop is eight characters long. @end deffn The following specifications output particular fields from the database record. They all take two positional arguments: @var{width} and @var{title}. The first argument, @var{width} sets the maximum output length for this specification. If the number of characters actually output is less than the width, they will be padded with whitespace either to the left or to the right, depending on the presence of the @code{:right} keyword argument. If the number of characters is greater than @var{width}, they will be truncated to fit. If @var{width} is not given, the field is output as is. The second argument, @var{title}, gives the title of this column for the heading line. By default no title is output. Every field specification accepts at least two keyword arguments. The keyword @code{:right} may be used to request alignment to the right. This keyword is ignored if @var{width} is not given. The keyword @code{:empty} followed by a string instructs @command{rushwho} to output that string if the resulting value for this specification would otherwise be empty. @need 800 @deffn {Format Spec} user @var{width} @var{title} [:empty @var{repl}][:right] Print the user login name. @end deffn @deffn {Format Spec} time @var{width} @var{title} @ [:empty @var{repl}] [:right] [:format @var{date-format}] @deffnx {Format Spec} start-time @var{width} @var{title} @ [:empty @var{repl}] [:right] [:format @var{date-format}] Date and time when the session started. The @code{:format} keyword introduces the @code{strftime} format string to be used when converting the date for printing. The default value is @samp{%a %H:%M}. @xref{Time and Date Formats}, for a detailed description of @code{strftime} format strings. @end deffn @deffn {Format Spec} stop-time @var{width} @var{title} @ [:empty @var{repl}] [:right] [:format @var{date-format}] Time when the command finished. This specifier is meaningful only for @command{rushlast} (@pxref{Rushlast}). If the command is still running, the word @samp{running} is output. @end deffn @deffn {Format Spec} duration @var{width} @var{title} @ [:empty @var{repl}] [:right] Total time of the session duration. @end deffn @deffn {Format Spec} rule @var{width} @var{title} [:right] The tag of the rule used to serve the user. @xref{Rule, tag}, for a detailed description of rules and tags. @end deffn @deffn {Format Spec} command @var{width} @var{title} @ [:empty @var{repl}] [:right] Command line being executed. @end deffn @deffn {Format Spec} pid @var{width} @var{title} [:right] PID of the process. @end deffn For example, the following is the default format for the @command{rushwho} utility. It is written in a form suitable for use in a file supplied with the @option{--format=@@@var{file}} command line option (@pxref{format option}): @example (user 10 Login)" " (rule 8 Rule)" " (start-time 0 Start)" " (duration 9 Time)" " (pid 10 PID)" " (command 28 Command) @end example @node Rushlast @chapter The @code{rushlast} utility. @prindex rushlast The @command{rushlast} utility searches back through the GNU Rush database and displays a list of all user sessions since the database was created. By default, it displays the following information: @example Login Rule Start Stop Time Command gray rsync Sun 20:43 Sun 20:43 05:57 /usr/bin/rsync /upload jeff sftp Sun 20:09 running 07:17 /bin/sftp-server @end example @table @asis @item Login The login name of the user. @item Rule The tag of the rule he is served under (@pxref{Rule, tag}). @item Start Time when the rule began execution. @item Start Time when the command finished, or the word @samp{running} if it is still running. @item Time Duration of the session. @item Command Command line being executed. @end table @vrindex RUSHLAST_FORMAT This format is a built-in default. It may be changed either by setting the @env{RUSHLAST_FORMAT} environment variable to the desired format string, or by using @option{--format} command line option (@pxref{Rushlast Options}). @menu * Rushlast Options:: @end menu @node Rushlast Options @section Rushlast Options This section summarizes the command line options understood by @command{rushlast} utility. @table @option @opindex -F, @r{rushlast} @opindex --format, @r{rushlast} @item -F @var{string} @itemx --format=@var{string} Use @var{string} instead of the default format, described in @ref{Rushwho}. @xref{Formats}, for a detailed description of the output format syntax. To read format from a file, use @option{--format=@@@var{filename}}. The file is read literally, except that lines beginning with @samp{;} are ignored (they can be used to introduce comments). @opindex -f, @r{rushlast} @opindex --file, @r{rushlast} @item -f @var{dir} @itemx --file=@var{dir} Use database directory @var{dir}, instead of the default. By default, database files are located in @file{/usr/local/var/rush}. @opindex --forward, @r{rushlast} @item --forward Display entries in chronological order, instead of the reverse chronological one, which is the default. @opindex -n, @r{rushlast} @opindex --count, @r{rushlast} @item -n @var{number} @itemx --count=@var{number} @itemx -@var{number} Show at most @var{number} records. The form @option{-@var{number}} is provided for compatibility with the @cite{last(1)} utility. @opindex -H, @r{rushlast} @opindex --no-header, @r{rushlast} @item -H @itemx --no-header Do not display header line. @opindex -v, @r{rushlast} @opindex --version, @r{rushlast} @item -v @itemx --version Display program version. @opindex -h, @r{rushlast} @opindex --help, @r{rushlast} @item -h @itemx --help Display a short help message. @opindex --usage, @r{rushlast} @item --usage Display a concise usage summary. @end table @node Accounting Database @chapter Accounting Database @cindex accounting database Rush accounting database is stored in the directory @file{@var{localstatedir}/rush}, where @var{localstatedir} stands for the name of the local state directory, defined at compile time. By default, it is @file{@var{prefix}/var}, where @var{prefix} is the installation prefix, which defaults to @file{/usr/local}. Thus, the default database directory is @file{/usr/local/var/rush}. You can change this default using the @option{--localstatedir} option to @command{configure} before compiling the package. The @option{--prefix} option affects it as well. @cindex @file{utmp} file, accounting database @cindex @file{wtmp} file, accounting database As of version @value{VERSION}, the database consists of two files, called @file{utmp} and @file{wtmp}. The @file{wtmp} file keeps information about all user sessions, both finished and still active. The @file{utmp} file contains indices to those records in @file{wtmp}, which represent active sessions. The @file{wtmp} grows continuously, while @file{utmp} normally grows the first day or two after enabling accounting mode, and from then on its size remains without changes. If you set up log file rotation, e.g. by using @command{logrotate} (@pxref{logrotate,,logrotate,logrotate(8), logrotate man page}), or a similar tool, it is safe to rotate @file{wtmp} without notifying @command{rush}. The only requirement is to truncate @file{utmp} to zero size after rotating @file{wtmp}, as shown in the following @file{logrotate.conf} snippet: @example /var/run/rush/wtmp @{ monthly create 0640 root svusers postrotate cat /dev/null > /var/run/rush/utmp endscript @} @end example Accounting files are owned by @samp{root} and normally are accessible only to the owner (file mode @samp{600}). You may change the default permissions using the following global configuration file statements: @deffn {global} acct-umask @var{mask} Set umask used when accessing accounting database files. Default value is @samp{022}. @end deffn @deffn {global} acct-dir-mode @var{mode} Set mode bits for the accounting directory. The @var{mode} argument is the mode in octal. @end deffn @deffn {global} acct-file-mode @var{mode} Set mode bits for @file{wtmp} and @file{utmp} files. @end deffn Notice, that these statements affect file and directory modes only when the corresponding file or directory is created. @command{Rush} will not change modes of the existing files. The following sections contain a detailed description of the structure of these two files. You may skip them, if you are not interested in technical details. @menu * wtmp:: The Structure of @file{wtmp} File. * utmp:: The Structure of @file{wtmp} File. @end menu @node wtmp @section The @file{wtmp} file @cindex @file{wtmp} The @file{wtmp} file consists of variable-size entries. It is designed so that it can easily be read in both directions. Each record begins with a fixed-size header, which is followed by three zero-terminated strings, and the record size in @code{size_t} representation. The three strings are, in that order: the user login name, the rule tag, and the full command line. The header has the following structure: @example @group struct rush_wtmp @{ size_t reclen; pid_t pid; struct timeval start; struct timeval stop; char *unused[3]; @}; @end group @end example @noindent where: @table @code @item reclen is the length of the entire record, including the size of this header. This field is duplicated at the end of the record. @item pid is the PID of the command executed for the user. @item start represents the time of the beginning of the user session. @item stop represents the time when the user session finished. If the session is still running, this field is filled with zeros. @item unused The three pointers at the end of the structure are used internally by @command{rush}. On disk, these fields are always filled with zeros. @end table @node utmp @section The @file{utmp} file @cindex @file{utmp} The @file{utmp} file consists of a fixed-size records of the following structure: @example @group struct rush_utmp @{ int status; off_t offset; @}; @end group @end example The fields have the following meaning: @table @code @item status Status of the record: @samp{0} if the record is unused, and @samp{1} if it represents an active session. @item offset Offset of the corresponding record in @file{wtmp} (see previous section). @end table @node Reporting Bugs @chapter How to Report a Bug Email bug reports to @email{bug-rush@@gnu.org}. Please include a detailed description of the bug and information about the conditions under which it occurs, so we can reproduce it. To facilitate the task, the following list shows the basic set of information that is needed in order to find the bug: @itemize @item Package version you use. @item A detailed description of the bug. @item Conditions under which the bug appears. @item It is often helpful to send the contents of @file{config.log} file along with your bug report. This file is created after running @command{./configure} in the GNU Rush source root directory. @end itemize @node Time and Date Formats @appendix Time and Date Formats @include strftime.texi @node Copying This Manual @appendix GNU Free Documentation License @include fdl.texi @node Concept Index @unnumbered Concept Index This is a general index of all issues discussed in this manual. @printindex cp @bye rush-2.4/doc/gendocs_template0000644000175000017500000000553214643176117016352 0ustar00graygray00000000000000 GNU Rush - Restricted user shell

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

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

rush-2.4/doc/stamp-vti0000644000175000017500000000013014655401303014735 0ustar00graygray00000000000000@set UPDATED 9 July 2024 @set UPDATED-MONTH July 2024 @set EDITION 2.4 @set VERSION 2.4 rush-2.4/doc/Makefile.am0000644000175000017500000000373114643176116015144 0ustar00graygray00000000000000# This file is part of GNU Rush. # Copyright (C) 2008-2024 Sergey Poznyakoff # # GNU Rush is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Rush is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Rush. If not, see . SUBDIRS=imprimatur info_TEXINFOS=rush.texi rush_TEXINFOS=\ fdl.texi\ strftime.texi EXTRA_DIST = \ gendocs_template dist_man_MANS=\ rush.8\ rushlast.1\ rushwho.1\ rush-po.1\ rush.rc.5 clean-local: rm -rf manual AM_MAKEINFOFLAGS=@IMPRIMATUR_MAKEINFOFLAGS@ imprimatur_INPUT=$(info_TEXINFOS) $(rush_TEXINFOS) include imprimatur/imprimatur.mk CHECK_DOCS=$(top_srcdir)/@IMPRIMATUR_MODULE_DIR@/check-docs.sh # Checking check-format: imprimatur-format imprimatur-check-sentence-spacing check-refs: imprimatur-refs check-fixmes: imprimatur-fixmes check-writeme: imprimatur-writemes check-unrevised: imprimatur-unrevised all-check-docs: imprimatur-basic-checks check-docs: $(MAKE) -k all-check-docs GENDOCS=$(srcdir)/gendocs.sh --no-copy-images --html '--init-file=$(abs_srcdir)/html.init' EXTRA_DIST += gendocs.sh TEXI2DVI=texi2dvi -t '@set $(RENDITION)' -I $(top_srcdir)/doc/imprimatur # Make sure you set TEXINPUTS. # TEXINPUTS=/usr/share/texmf/pdftex/plain/misc/ is ok for most distributions .PHONY: manual manual: TEXINPUTS=$(srcdir):$(top_srcdir)/build-aux:$(TEXINPUTS) \ MAKEINFO="$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS)" \ TEXI2DVI="$(TEXI2DVI) -t @finalout" \ $(GENDOCS) $(PACKAGE) '$(PACKAGE_NAME) manual' manual.tar.bz2: manual tar cfj manual.tar.bz2 manual man-tar: manual.tar.bz2 rush-2.4/doc/imprimatur/0000755000175000017500000000000014655401530015267 5ustar00graygray00000000000000rush-2.4/doc/imprimatur/imprimatur.m40000644000175000017500000001124413456274325017734 0ustar00graygray00000000000000# imprimatur.m4 serial 1 dnl This file is part of Imprimatur. dnl Copyright (C) 2011 Sergey Poznyakoff dnl dnl Imprimatur 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 Imprimatur 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 Imprimatur. If not, see . dnl The option stuff below is based on the similar code from Automake # _IMPRIMATUR_MANGLE_OPTION(NAME) # ------------------------------- # Convert NAME to a valid m4 identifier, by replacing invalid characters # with underscores, and prepend the _IMPRIMATUR_OPTION_ suffix to it. AC_DEFUN([_IMPRIMATUR_MANGLE_OPTION], [[_IMPRIMATUR_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _IMPRIMATUR_SET_OPTION(NAME) # ---------------------------- # Set option NAME. If NAME begins with a digit, treat it as a requested # Guile version number, and define _IMPRIMATUR_GUILE_VERSION to that number. # Otherwise, define the option using _IMPRIMATUR_MANGLE_OPTION. AC_DEFUN([_IMPRIMATUR_SET_OPTION], [m4_if(m4_bpatsubst($1,^[[0-9]].*,[]),,[m4_define([_IMPRIMATUR_GUILE_VERSION],[$1])],[m4_define(_IMPRIMATUR_MANGLE_OPTION([$1]), 1)])]) # _IMPRIMATUR_IF_OPTION_SET(NAME,IF-SET,IF-NOT-SET) # ------------------------------------------------- # Check if option NAME is set. AC_DEFUN([_IMPRIMATUR_IF_OPTION_SET], [m4_ifset(_IMPRIMATUR_MANGLE_OPTION([$1]),[$2],[$3])]) # _IMPRIMATUR_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([_IMPRIMATUR_OPTION_SWITCH], [m4_if([$4],,[_IMPRIMATUR_IF_OPTION_SET($@)],dnl [$3],,[_IMPRIMATUR_IF_OPTION_SET($@)],dnl [_IMPRIMATUR_IF_OPTION_SET([$1],[$2],[_IMPRIMATUR_OPTION_SWITCH(m4_shift(m4_shift($@)))])])]) # _IMPRIMATUR_SET_OPTIONS(OPTIONS) # -------------------------------- # OPTIONS is a space-separated list of IMPRIMATUR options. AC_DEFUN([_IMPRIMATUR_SET_OPTIONS], [m4_foreach_w([_IMPRIMATUR_Option], [$1], [_IMPRIMATUR_SET_OPTION(_IMPRIMATUR_Option)])]) # IMPRIMATUR_INIT([DIR],[OPTIONS]) # DIR - Directory in the source tree where imprimatur has been cloned. # Default is "imptimatur". # OPTIONS - A whitespace-separated list of options. Valid options are: # (1) any one of PROOF, DISTRIB or PUBLISH to set the default # rendition, (2) frenchspacing to declare that French sentence # spacing should be assumed, (3) makedoc to enable rules for # building imprimatur documentation, and (4) dist-info to # build and distribute imprimatur.info file (requires makedoc). AC_DEFUN([IMPRIMATUR_INIT],[ m4_pushdef([imprimaturdir],[m4_if([$1],,[imprimatur],[$1])]) AC_SUBST([IMPRIMATUR_MODULE_DIR],imprimaturdir) _IMPRIMATUR_SET_OPTIONS([$2]) AC_SUBST(RENDITION) _IMPRIMATUR_OPTION_SWITCH([PROOF],[RENDITION=PROOF], [DISTRIB],[RENDITION=DISTRIB], [PUBLISH],[RENDITION=PUBLISH], [ # Doc hints. # Select a rendition level: # DISTRIB for stable releases (at most one dot in the version number) # and maintenance releases (two dots, patchlevel < 50) # PROOF for alpha releases. # PUBLISH can only be required manually when running make in doc/ case `echo $VERSION|sed 's/[[^.]]//g'` in ""|".") RENDITION=DISTRIB;; "..") if test `echo $VERSION | sed 's/.*\.//'` -lt 50; then RENDITION=DISTRIB else RENDITION=PROOF fi;; *) RENDITION=PROOF;; esac ]) AC_SUBST([IMPRIMATUR_MAKEINFOFLAGS], ['-I $(top_srcdir)/imprimaturdir -D $(RENDITION)']) AM_CONDITIONAL([IMPRIMATUR_COND_MAKEDOC],dnl [_IMPRIMATUR_IF_OPTION_SET([makedoc],[true],[false])]) AM_CONDITIONAL([IMPRIMATUR_COND_FRENCHSPACING], [_IMPRIMATUR_IF_OPTION_SET([frenchspacing],[true],[false])]) AM_CONDITIONAL([IMPRIMATUR_COND_DIST_INFO], [_IMPRIMATUR_IF_OPTION_SET([dist-info],[true],[false])]) AC_CONFIG_FILES(imprimaturdir[/Makefile]) AM_COND_IF([IMPRIMATUR_COND_MAKEDOC],dnl [AC_MSG_NOTICE([Add imprimaturdir[/Makedoc] to your config files])]) m4_popdef([imprimaturdir]) ]) rush-2.4/doc/imprimatur/Makefile.am0000644000175000017500000000232113456274325017331 0ustar00graygray00000000000000# This file is part of Imprimatur. # Copyright (C) 2011, 2015 Sergey Poznyakoff # # Imprimatur 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. # # Imprimatur is distributed in the hope that 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 Imprimatur. If not, see . EXTRA_DIST=\ check-docs.sh\ emptynodes.awk\ imprimatur.m4\ imprimatur.mk\ mastermenu.el\ rendition.texi\ untabify.el if IMPRIMATUR_COND_MAKEDOC if IMPRIMATUR_COND_DIST_INFO EXTRA_DIST += imprimatur.info BUILT_SOURCES = imprimatur.info endif DISTCLEANFILES = Makedoc MAKEDOC = $(MAKE) -f Makedoc EXTRA_DIST += Makedoc.am Makedoc.in imprimatur.texi fdl.texi .PHONY: imprimatur.info imprimatur.info:; $(MAKEDOC) info: imprimatur.info pdf:; $(MAKEDOC) pdf dvi:; $(MAKEDOC) dvi ps:; $(MAKEDOC) ps clean-local:; $(MAKEDOC) clean endif rush-2.4/doc/imprimatur/untabify.el0000644000175000017500000000203713456274325017444 0ustar00graygray00000000000000;; This file is part of Imprimatur. ;; Copyright (C) 2006, 2007, 2010, 2011 Sergey Poznyakoff ;; ;; Imprimatur 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. ;; ;; Imprimatur is distributed in the hope that 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 Imprimatur. If not, see . ;;;; Untabify the sources. ;;;; Usage: emacs -batch -l untabify.el [file ...] (defun global-untabify (buflist) (mapcar (lambda (bufname) (set-buffer (find-file bufname)) (untabify (point-min) (point-max)) (save-buffer) (kill-buffer (current-buffer))) buflist)) (global-untabify command-line-args-left) rush-2.4/doc/imprimatur/README0000644000175000017500000001031313456274325016155 0ustar00graygray00000000000000Imprimatur README Copyright (C) 2011 Sergey Poznyakoff See the end of file for copying conditions. * Introduction This file contains brief information about installing and configuring Imprimatur. It is *not* intended as a replacement for the documentation, and is provided as a brief reference only. The complete documentation in Texinfo format is included. To build it, change to the imprimatur subdirectory and run `makeinfo imprimatur'. Complete documentation in various formats is available online from the following URL: http://www.gnu.org.ua/software/imprimatur/manual * Overview Imprimatur provides Texinfo macros for various editing tasks such as adding editor notes and annotations, as well as makeinfo rules for verifying texinfo document structure, format, and (to a certain extent) content coverage. In particular, it provides a mechanism for verifying whether the entities, such as command line options, configuration file statements, library functions, and the like, which are defined in a set of source files are also described in the Texinfo document. * Installation To use Imprimatur in your project, follow these steps: ** Import the package as a submodule This needs to be done only once: git submodule add git://git.gnu.org.ua/imprimatur.git imprimatur git submodule init The `submodule add' command takes two arguments: the submodule repository, which should be exactly as shown above, and the pathname of the cloned submodule in your project. This latter is entirely at your option. Throughout this document we will suppose that the module pathname is `imprimatur'. You will need to adjust the examples if you chose another name for it. ** Edit the toplevel Makefile.am Add `-I imprimatur' to the ACLOCAL_AMFLAGS variable, and `imprimatur' to the SUBDIRS variable. For example: ACLOCAL_AMFLAGS = -I m4 -I imprimatur SUBDIRS = imprimatur ** Edit the configure.ac file Add a call to IMPRIMATUR_INIT. Normally no parameters are needed. However, if you cloned Imprimatur into a directory with another name, the actual directory name must be supplied as the first argument. For example, if you used this submodule command git submodule add git://git.gnu.org.ua/imprimatur.git somedir then use IMPRIMATUR_INIT(somedir) in your configure.ac ** Edit Makefile.am in your doc subdirectory Apply the following changes to the Makefile.am located in the subdirectory where you have your Texinfo sources: 1. To AM_MAKEINFOFLAGS add @IMPRIMATUR_MAKEINFOFLAGS@ 2. Define the variable `imprimatur_INPUT'. It must contain the names of Texinfo sources to be verified by Imprimatur. Normally, the following definition is sufficient: imprimatur_INPUT=$(info_TEXINFOS) $(_TEXINFOS) where stands for the base name of your Texinfo document (e.g. "foo", if it is named "foo.texi"). 3. Include imprimatur.mk using relative addressing. For example, if your documentation subdirectory is located at the same nesting level as the directory you cloned Imprimatur to, use: include ../imprimatur/imprimatur.mk Do not use Automake substitutions nor Makefile variables in the argument to include. 4. If you plan to use the `check-docs.sh' script, define the following variable: CHECK_DOCS=$(top_srcdir)/@IMPRIMATUR_MODULE_DIR@/check-docs.sh For example: AM_MAKEINFOFLAGS = @IMPRIMATUR_MAKEINFOFLAGS@ imprimatur_INPUT=$(info_TEXINFOS) $(foo_TEXINFOS) include ../imprimatur/imprimatur.mk CHECK_DOCS=$(top_srcdir)/@IMPRIMATUR_MODULE_DIR@/check-docs.sh ** Include `rendition.texi' into your main Texinfo source. * Bug reporting. Send bug reports to . ^L * 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: rush-2.4/doc/imprimatur/rendition.texi0000644000175000017500000001507213456274325020172 0ustar00graygray00000000000000@c This file is part of Imprimatur. @c Copyright (C) 2001-2011, 2015 Sergey Poznyakoff @c @c Imprimatur is free software; you can redistribute it and/or modify @c it under the terms of the GNU General Public License as published by @c the Free Software Foundation; either version 3, or (at your option) @c any later version. @c @c Imprimatur is distributed in the hope that it will be useful, @c but WITHOUT ANY WARRANTY; without even the implied warranty of @c MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the @c GNU General Public License for more details. @c @c You should have received a copy of the GNU General Public License @c along with Imprimatur. If not, see . @c imprimatur-ignore @c ====================================================================== @c This file implements Fran@,{c}ois Pinard's concept of 'renditions': @c @c A document has three levels of rendition: PUBLISH, DISTRIB or PROOF, @c as decided by @set symbols. The PUBLISH rendition does not show @c notes or marks asking for revision. Nodes marked as unrevised or @c empty (see below) produce a compilation error in this rendition. @c It also implies @finalout. @c @c Most users will prefer having more information, even if this @c information is not fully revised for adequacy, so DISTRIB is the @c default for distributions. @c @c The PROOF rendition show all marks to the point of ugliness and is @c intended for those working on the manual itself. @c ====================================================================== @ifclear PUBLISH @ifclear DISTRIB @ifclear PROOF @set DISTRIB @end ifclear @end ifclear @end ifclear @ifset PUBLISH @set RENDITION The book, version @finalout @end ifset @ifset DISTRIB @set RENDITION FTP release, version @end ifset @ifset PROOF @set RENDITION Proof reading version @end ifset @c ------------------------------------------------------------------ @c @editorsnote{text} -- emit an editor note. @c Cannot be used inline. @c ------------------------------------------------------------------ @macro editorsnote{text} @ifinfo @quotation @center ================================================================== @center @strong{Editor's note:} \text\@* @center ================================================================== @end quotation @end ifinfo @ifnotinfo @cartouche @center @strong{Editor's note:} \text\ @end cartouche @end ifnotinfo @end macro @c ------------------------------------------------------------------ @c @WRITEME -- Indicate that the node is to be written. @c @c In PUBLISH mode, this produces a compilation error. @c Otherwise, this macro emits a prominent editor's notice stating @c that this node has yet to be written. @c @c ------------------------------------------------------------------ @macro WRITEME @ifset PUBLISH @errormsg{Empty node in publish rendition!} @end ifset @ifclear PUBLISH @editorsnote{This node is to be written.} @end ifclear @end macro @c ------------------------------------------------------------------ @c @UNREVISED -- Indicate that the node needs revision. @c @c In PUBLISH mode, this produces a compilation error. @c Otherwise, this macro emits a prominent editor's notice stating @c that this node is not revised. @c @c ------------------------------------------------------------------ @macro UNREVISED @ifset PUBLISH @errormsg{Unrevised node in publish rendition!} @end ifset @ifclear PUBLISH @editorsnote{The information in this node may be obsolete or otherwise inaccurate. This message will disappear, once this node revised.} @end ifclear @end macro @c ------------------------------------------------------------------ @c @FIXME{text} -- Output an editor's notice only in PROOF rendition. @c ------------------------------------------------------------------ @ifset PROOF @macro FIXME{string} @editorsnote{\string\} @w{} @end macro @end ifset @ifclear PROOF @macro FIXME{string} @end macro @end ifclear @c ------------------------------------------------------------------ @c @deadlink{} -- emit a dead link notice. @c This macro depends on the PROOF flag. Since it is used inline, @c it has to be defined twice: one instance for when PROOF is set, @c and another one for when it is cleared. @c ------------------------------------------------------------------ @ifset PROOF @macro deadlink{} @ (@strong{Editor's note: dangling link}) @end macro @end ifset @ifclear PROOF @macro deadlink{} @end macro @end ifclear @c ------------------------------------------------------------------ @c @FIXMEREF{text, string} -- output a reference to (possibly) @c undefined anchor. The `text' argument is usually ``see'' or @c ``See'', depending on context. The `string' argument is the cross @c reference text. @c In PROOF mode, a dangling link notice is output after the @c reference. @c @c This macro is used inline, so again, it is defined several times, @c for various output formats. @c ------------------------------------------------------------------ @macro FIXMEREF{text,string} \text\ @i{\string\}@deadlink{} @end macro @c ------------------------------------------------------------------ @c @FIXME-ref{node} -- produces a @ref-style reference to undefined @c node. @c ------------------------------------------------------------------ @ifset PUBLISH @macro FIXME-ref{string} @ref{string} @end macro @end ifset @ifclear PUBLISH @macro FIXME-ref{string} @FIXMEREF{,\string\} @end macro @end ifclear @c ------------------------------------------------------------------ @c @FIXME-pxref{node} -- produces a @pxref-style reference to @c undefined node. @c ------------------------------------------------------------------ @ifset PUBLISH @macro FIXME-pxref{string} @pxref{string} @end macro @end ifset @ifclear PUBLISH @macro FIXME-pxref{string} @FIXMEREF{see,\string\} @end macro @end ifclear @c ------------------------------------------------------------------ @c @FIXME-xref{node} -- produces a @xref-style reference to @c undefined node. @c ------------------------------------------------------------------ @ifset PUBLISH @macro FIXME-xref{string} @xref{string} @end macro @end ifset @ifclear PUBLISH @macro FIXME-xref{string} @FIXMEREF{See,\string\} @end macro @end ifclear @c =================================================================== @c The following macros are used in imprimatur.texi to produce example @c outputs without triggering check rules. @c =================================================================== @macro example-UNREVISED @UNREVISED @end macro @macro example-WRITEME @WRITEME @end macro @macro example-FIXME{string} @FIXME{\string\} @end macro @macro example-FIXME-xref{string} @FIXME-xref{\string\} @end macro rush-2.4/doc/imprimatur/Makefile.in0000644000175000017500000015152214655401220017336 0ustar00graygray00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # This file is part of Imprimatur. # Copyright (C) 2011, 2015 Sergey Poznyakoff # # Imprimatur 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. # # Imprimatur is distributed in the hope that 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 Imprimatur. 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@ @IMPRIMATUR_COND_DIST_INFO_TRUE@@IMPRIMATUR_COND_MAKEDOC_TRUE@am__append_1 = imprimatur.info @IMPRIMATUR_COND_MAKEDOC_TRUE@am__append_2 = Makedoc.am Makedoc.in imprimatur.texi fdl.texi subdir = doc/imprimatur ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/doc/imprimatur/imprimatur.m4 \ $(top_srcdir)/m4/00gnulib.m4 $(top_srcdir)/m4/__inline.m4 \ $(top_srcdir)/m4/absolute-header.m4 $(top_srcdir)/m4/alloca.m4 \ $(top_srcdir)/m4/assert_h.m4 $(top_srcdir)/m4/btowc.m4 \ $(top_srcdir)/m4/builtin-expect.m4 $(top_srcdir)/m4/c-bool.m4 \ $(top_srcdir)/m4/calloc.m4 $(top_srcdir)/m4/close.m4 \ $(top_srcdir)/m4/codeset.m4 \ $(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup2.m4 \ $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \ $(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \ $(top_srcdir)/m4/error_h.m4 $(top_srcdir)/m4/extensions.m4 \ $(top_srcdir)/m4/extern-inline.m4 $(top_srcdir)/m4/fcntl-o.m4 \ $(top_srcdir)/m4/fcntl.m4 $(top_srcdir)/m4/fcntl_h.m4 \ $(top_srcdir)/m4/flexmember.m4 $(top_srcdir)/m4/free.m4 \ $(top_srcdir)/m4/fstat.m4 $(top_srcdir)/m4/getdelim.m4 \ $(top_srcdir)/m4/getdtablesize.m4 $(top_srcdir)/m4/getline.m4 \ $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/getprogname.m4 \ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gnulib-common.m4 \ $(top_srcdir)/m4/gnulib-comp.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/include_next.m4 \ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/inttostr.m4 \ $(top_srcdir)/m4/inttypes.m4 $(top_srcdir)/m4/langinfo_h.m4 \ $(top_srcdir)/m4/largefile.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/limits-h.m4 $(top_srcdir)/m4/localcharset.m4 \ $(top_srcdir)/m4/locale-fr.m4 $(top_srcdir)/m4/locale-ja.m4 \ $(top_srcdir)/m4/locale-zh.m4 $(top_srcdir)/m4/locale_h.m4 \ $(top_srcdir)/m4/localeconv.m4 $(top_srcdir)/m4/lock.m4 \ $(top_srcdir)/m4/malloc.m4 $(top_srcdir)/m4/malloca.m4 \ $(top_srcdir)/m4/mbrtowc.m4 $(top_srcdir)/m4/mbsinit.m4 \ $(top_srcdir)/m4/mbstate_t.m4 $(top_srcdir)/m4/mbtowc.m4 \ $(top_srcdir)/m4/minmax.m4 $(top_srcdir)/m4/mktime.m4 \ $(top_srcdir)/m4/mode_t.m4 $(top_srcdir)/m4/msvc-inval.m4 \ $(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \ $(top_srcdir)/m4/musl.m4 $(top_srcdir)/m4/nl_langinfo.m4 \ $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/nocrash.m4 \ $(top_srcdir)/m4/nstrftime.m4 $(top_srcdir)/m4/off_t.m4 \ $(top_srcdir)/m4/open-cloexec.m4 \ $(top_srcdir)/m4/open-slash.m4 $(top_srcdir)/m4/open.m4 \ $(top_srcdir)/m4/pathmax.m4 $(top_srcdir)/m4/po.m4 \ $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/m4/pthread_rwlock_rdlock.m4 \ $(top_srcdir)/m4/realloc.m4 $(top_srcdir)/m4/reallocarray.m4 \ $(top_srcdir)/m4/regex.m4 $(top_srcdir)/m4/setenv.m4 \ $(top_srcdir)/m4/setlocale_null.m4 $(top_srcdir)/m4/ssize_t.m4 \ $(top_srcdir)/m4/stat-time.m4 $(top_srcdir)/m4/stat.m4 \ $(top_srcdir)/m4/stddef_h.m4 $(top_srcdir)/m4/stdint.m4 \ $(top_srcdir)/m4/stdio_h.m4 $(top_srcdir)/m4/stdlib_h.m4 \ $(top_srcdir)/m4/strerror.m4 $(top_srcdir)/m4/string_h.m4 \ $(top_srcdir)/m4/sys_socket_h.m4 \ $(top_srcdir)/m4/sys_stat_h.m4 $(top_srcdir)/m4/sys_types_h.m4 \ $(top_srcdir)/m4/threadlib.m4 $(top_srcdir)/m4/time_h.m4 \ $(top_srcdir)/m4/time_r.m4 $(top_srcdir)/m4/time_rz.m4 \ $(top_srcdir)/m4/timegm.m4 $(top_srcdir)/m4/tm_gmtoff.m4 \ $(top_srcdir)/m4/tzset.m4 $(top_srcdir)/m4/unistd_h.m4 \ $(top_srcdir)/m4/visibility.m4 $(top_srcdir)/m4/warn-on-use.m4 \ $(top_srcdir)/m4/wchar_h.m4 $(top_srcdir)/m4/wchar_t.m4 \ $(top_srcdir)/m4/wcrtomb.m4 $(top_srcdir)/m4/wctype_h.m4 \ $(top_srcdir)/m4/wint_t.m4 $(top_srcdir)/m4/xalloc.m4 \ $(top_srcdir)/m4/zzgnulib.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 = 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__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALLOCA_H = @ALLOCA_H@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ ASSERT_H = @ASSERT_H@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOM4TE = @AUTOM4TE@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ GETOPT_H = @GETOPT_H@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GL_CFLAG_ALLOW_WARNINGS = @GL_CFLAG_ALLOW_WARNINGS@ GL_CFLAG_GNULIB_WARNINGS = @GL_CFLAG_GNULIB_WARNINGS@ GL_GNULIB_ACCESS = @GL_GNULIB_ACCESS@ GL_GNULIB_ALIGNED_ALLOC = @GL_GNULIB_ALIGNED_ALLOC@ GL_GNULIB_ATOLL = @GL_GNULIB_ATOLL@ GL_GNULIB_BTOWC = @GL_GNULIB_BTOWC@ GL_GNULIB_CALLOC_GNU = @GL_GNULIB_CALLOC_GNU@ GL_GNULIB_CALLOC_POSIX = @GL_GNULIB_CALLOC_POSIX@ GL_GNULIB_CANONICALIZE_FILE_NAME = @GL_GNULIB_CANONICALIZE_FILE_NAME@ GL_GNULIB_CHDIR = @GL_GNULIB_CHDIR@ GL_GNULIB_CHMOD = @GL_GNULIB_CHMOD@ GL_GNULIB_CHOWN = @GL_GNULIB_CHOWN@ GL_GNULIB_CLOSE = @GL_GNULIB_CLOSE@ GL_GNULIB_COPY_FILE_RANGE = @GL_GNULIB_COPY_FILE_RANGE@ GL_GNULIB_CREAT = @GL_GNULIB_CREAT@ GL_GNULIB_CTIME = @GL_GNULIB_CTIME@ GL_GNULIB_DPRINTF = @GL_GNULIB_DPRINTF@ GL_GNULIB_DUP = @GL_GNULIB_DUP@ GL_GNULIB_DUP2 = @GL_GNULIB_DUP2@ GL_GNULIB_DUP3 = @GL_GNULIB_DUP3@ GL_GNULIB_DUPLOCALE = @GL_GNULIB_DUPLOCALE@ GL_GNULIB_ENVIRON = @GL_GNULIB_ENVIRON@ GL_GNULIB_EUIDACCESS = @GL_GNULIB_EUIDACCESS@ GL_GNULIB_EXECL = @GL_GNULIB_EXECL@ GL_GNULIB_EXECLE = @GL_GNULIB_EXECLE@ GL_GNULIB_EXECLP = @GL_GNULIB_EXECLP@ GL_GNULIB_EXECV = @GL_GNULIB_EXECV@ GL_GNULIB_EXECVE = @GL_GNULIB_EXECVE@ GL_GNULIB_EXECVP = @GL_GNULIB_EXECVP@ GL_GNULIB_EXECVPE = @GL_GNULIB_EXECVPE@ GL_GNULIB_EXPLICIT_BZERO = @GL_GNULIB_EXPLICIT_BZERO@ GL_GNULIB_FACCESSAT = @GL_GNULIB_FACCESSAT@ GL_GNULIB_FCHDIR = @GL_GNULIB_FCHDIR@ GL_GNULIB_FCHMODAT = @GL_GNULIB_FCHMODAT@ GL_GNULIB_FCHOWNAT = @GL_GNULIB_FCHOWNAT@ GL_GNULIB_FCLOSE = @GL_GNULIB_FCLOSE@ GL_GNULIB_FCNTL = @GL_GNULIB_FCNTL@ GL_GNULIB_FDATASYNC = @GL_GNULIB_FDATASYNC@ GL_GNULIB_FDOPEN = @GL_GNULIB_FDOPEN@ GL_GNULIB_FFLUSH = @GL_GNULIB_FFLUSH@ GL_GNULIB_FFSL = @GL_GNULIB_FFSL@ GL_GNULIB_FFSLL = @GL_GNULIB_FFSLL@ GL_GNULIB_FGETC = @GL_GNULIB_FGETC@ GL_GNULIB_FGETS = @GL_GNULIB_FGETS@ GL_GNULIB_FOPEN = @GL_GNULIB_FOPEN@ GL_GNULIB_FOPEN_GNU = @GL_GNULIB_FOPEN_GNU@ GL_GNULIB_FPRINTF = @GL_GNULIB_FPRINTF@ GL_GNULIB_FPRINTF_POSIX = @GL_GNULIB_FPRINTF_POSIX@ GL_GNULIB_FPURGE = @GL_GNULIB_FPURGE@ GL_GNULIB_FPUTC = @GL_GNULIB_FPUTC@ GL_GNULIB_FPUTS = @GL_GNULIB_FPUTS@ GL_GNULIB_FREAD = @GL_GNULIB_FREAD@ GL_GNULIB_FREE_POSIX = @GL_GNULIB_FREE_POSIX@ GL_GNULIB_FREOPEN = @GL_GNULIB_FREOPEN@ GL_GNULIB_FSCANF = @GL_GNULIB_FSCANF@ GL_GNULIB_FSEEK = @GL_GNULIB_FSEEK@ GL_GNULIB_FSEEKO = @GL_GNULIB_FSEEKO@ GL_GNULIB_FSTAT = @GL_GNULIB_FSTAT@ GL_GNULIB_FSTATAT = @GL_GNULIB_FSTATAT@ GL_GNULIB_FSYNC = @GL_GNULIB_FSYNC@ GL_GNULIB_FTELL = @GL_GNULIB_FTELL@ GL_GNULIB_FTELLO = @GL_GNULIB_FTELLO@ GL_GNULIB_FTRUNCATE = @GL_GNULIB_FTRUNCATE@ GL_GNULIB_FUTIMENS = @GL_GNULIB_FUTIMENS@ GL_GNULIB_FWRITE = @GL_GNULIB_FWRITE@ GL_GNULIB_GETC = @GL_GNULIB_GETC@ GL_GNULIB_GETCHAR = @GL_GNULIB_GETCHAR@ GL_GNULIB_GETCWD = @GL_GNULIB_GETCWD@ GL_GNULIB_GETDELIM = @GL_GNULIB_GETDELIM@ GL_GNULIB_GETDOMAINNAME = @GL_GNULIB_GETDOMAINNAME@ GL_GNULIB_GETDTABLESIZE = @GL_GNULIB_GETDTABLESIZE@ GL_GNULIB_GETENTROPY = @GL_GNULIB_GETENTROPY@ GL_GNULIB_GETGROUPS = @GL_GNULIB_GETGROUPS@ GL_GNULIB_GETHOSTNAME = @GL_GNULIB_GETHOSTNAME@ GL_GNULIB_GETLINE = @GL_GNULIB_GETLINE@ GL_GNULIB_GETLOADAVG = @GL_GNULIB_GETLOADAVG@ GL_GNULIB_GETLOGIN = @GL_GNULIB_GETLOGIN@ GL_GNULIB_GETLOGIN_R = @GL_GNULIB_GETLOGIN_R@ GL_GNULIB_GETOPT_POSIX = @GL_GNULIB_GETOPT_POSIX@ GL_GNULIB_GETPAGESIZE = @GL_GNULIB_GETPAGESIZE@ GL_GNULIB_GETPASS = @GL_GNULIB_GETPASS@ GL_GNULIB_GETPASS_GNU = @GL_GNULIB_GETPASS_GNU@ GL_GNULIB_GETPROGNAME = @GL_GNULIB_GETPROGNAME@ GL_GNULIB_GETSUBOPT = @GL_GNULIB_GETSUBOPT@ GL_GNULIB_GETUMASK = @GL_GNULIB_GETUMASK@ GL_GNULIB_GETUSERSHELL = @GL_GNULIB_GETUSERSHELL@ GL_GNULIB_GRANTPT = @GL_GNULIB_GRANTPT@ GL_GNULIB_GROUP_MEMBER = @GL_GNULIB_GROUP_MEMBER@ GL_GNULIB_IMAXABS = @GL_GNULIB_IMAXABS@ GL_GNULIB_IMAXDIV = @GL_GNULIB_IMAXDIV@ GL_GNULIB_ISATTY = @GL_GNULIB_ISATTY@ GL_GNULIB_ISWBLANK = @GL_GNULIB_ISWBLANK@ GL_GNULIB_ISWCTYPE = @GL_GNULIB_ISWCTYPE@ GL_GNULIB_ISWDIGIT = @GL_GNULIB_ISWDIGIT@ GL_GNULIB_ISWXDIGIT = @GL_GNULIB_ISWXDIGIT@ GL_GNULIB_LCHMOD = @GL_GNULIB_LCHMOD@ GL_GNULIB_LCHOWN = @GL_GNULIB_LCHOWN@ GL_GNULIB_LINK = @GL_GNULIB_LINK@ GL_GNULIB_LINKAT = @GL_GNULIB_LINKAT@ GL_GNULIB_LOCALECONV = @GL_GNULIB_LOCALECONV@ GL_GNULIB_LOCALENAME = @GL_GNULIB_LOCALENAME@ GL_GNULIB_LOCALTIME = @GL_GNULIB_LOCALTIME@ GL_GNULIB_LSEEK = @GL_GNULIB_LSEEK@ GL_GNULIB_LSTAT = @GL_GNULIB_LSTAT@ GL_GNULIB_MALLOC_GNU = @GL_GNULIB_MALLOC_GNU@ GL_GNULIB_MALLOC_POSIX = @GL_GNULIB_MALLOC_POSIX@ GL_GNULIB_MBRLEN = @GL_GNULIB_MBRLEN@ GL_GNULIB_MBRTOWC = @GL_GNULIB_MBRTOWC@ GL_GNULIB_MBSCASECMP = @GL_GNULIB_MBSCASECMP@ GL_GNULIB_MBSCASESTR = @GL_GNULIB_MBSCASESTR@ GL_GNULIB_MBSCHR = @GL_GNULIB_MBSCHR@ GL_GNULIB_MBSCSPN = @GL_GNULIB_MBSCSPN@ GL_GNULIB_MBSINIT = @GL_GNULIB_MBSINIT@ GL_GNULIB_MBSLEN = @GL_GNULIB_MBSLEN@ GL_GNULIB_MBSNCASECMP = @GL_GNULIB_MBSNCASECMP@ GL_GNULIB_MBSNLEN = @GL_GNULIB_MBSNLEN@ GL_GNULIB_MBSNRTOWCS = @GL_GNULIB_MBSNRTOWCS@ GL_GNULIB_MBSPBRK = @GL_GNULIB_MBSPBRK@ GL_GNULIB_MBSPCASECMP = @GL_GNULIB_MBSPCASECMP@ GL_GNULIB_MBSRCHR = @GL_GNULIB_MBSRCHR@ GL_GNULIB_MBSRTOWCS = @GL_GNULIB_MBSRTOWCS@ GL_GNULIB_MBSSEP = @GL_GNULIB_MBSSEP@ GL_GNULIB_MBSSPN = @GL_GNULIB_MBSSPN@ GL_GNULIB_MBSSTR = @GL_GNULIB_MBSSTR@ GL_GNULIB_MBSTOK_R = @GL_GNULIB_MBSTOK_R@ GL_GNULIB_MBSTOWCS = @GL_GNULIB_MBSTOWCS@ GL_GNULIB_MBTOWC = @GL_GNULIB_MBTOWC@ GL_GNULIB_MDA_ACCESS = @GL_GNULIB_MDA_ACCESS@ GL_GNULIB_MDA_CHDIR = @GL_GNULIB_MDA_CHDIR@ GL_GNULIB_MDA_CHMOD = @GL_GNULIB_MDA_CHMOD@ GL_GNULIB_MDA_CLOSE = @GL_GNULIB_MDA_CLOSE@ GL_GNULIB_MDA_CREAT = @GL_GNULIB_MDA_CREAT@ GL_GNULIB_MDA_DUP = @GL_GNULIB_MDA_DUP@ GL_GNULIB_MDA_DUP2 = @GL_GNULIB_MDA_DUP2@ GL_GNULIB_MDA_ECVT = @GL_GNULIB_MDA_ECVT@ GL_GNULIB_MDA_EXECL = @GL_GNULIB_MDA_EXECL@ GL_GNULIB_MDA_EXECLE = @GL_GNULIB_MDA_EXECLE@ GL_GNULIB_MDA_EXECLP = @GL_GNULIB_MDA_EXECLP@ GL_GNULIB_MDA_EXECV = @GL_GNULIB_MDA_EXECV@ GL_GNULIB_MDA_EXECVE = @GL_GNULIB_MDA_EXECVE@ GL_GNULIB_MDA_EXECVP = @GL_GNULIB_MDA_EXECVP@ GL_GNULIB_MDA_EXECVPE = @GL_GNULIB_MDA_EXECVPE@ GL_GNULIB_MDA_FCLOSEALL = @GL_GNULIB_MDA_FCLOSEALL@ GL_GNULIB_MDA_FCVT = @GL_GNULIB_MDA_FCVT@ GL_GNULIB_MDA_FDOPEN = @GL_GNULIB_MDA_FDOPEN@ GL_GNULIB_MDA_FILENO = @GL_GNULIB_MDA_FILENO@ GL_GNULIB_MDA_GCVT = @GL_GNULIB_MDA_GCVT@ GL_GNULIB_MDA_GETCWD = @GL_GNULIB_MDA_GETCWD@ GL_GNULIB_MDA_GETPID = @GL_GNULIB_MDA_GETPID@ GL_GNULIB_MDA_GETW = @GL_GNULIB_MDA_GETW@ GL_GNULIB_MDA_ISATTY = @GL_GNULIB_MDA_ISATTY@ GL_GNULIB_MDA_LSEEK = @GL_GNULIB_MDA_LSEEK@ GL_GNULIB_MDA_MEMCCPY = @GL_GNULIB_MDA_MEMCCPY@ GL_GNULIB_MDA_MKDIR = @GL_GNULIB_MDA_MKDIR@ GL_GNULIB_MDA_MKTEMP = @GL_GNULIB_MDA_MKTEMP@ GL_GNULIB_MDA_OPEN = @GL_GNULIB_MDA_OPEN@ GL_GNULIB_MDA_PUTENV = @GL_GNULIB_MDA_PUTENV@ GL_GNULIB_MDA_PUTW = @GL_GNULIB_MDA_PUTW@ GL_GNULIB_MDA_READ = @GL_GNULIB_MDA_READ@ GL_GNULIB_MDA_RMDIR = @GL_GNULIB_MDA_RMDIR@ GL_GNULIB_MDA_STRDUP = @GL_GNULIB_MDA_STRDUP@ GL_GNULIB_MDA_SWAB = @GL_GNULIB_MDA_SWAB@ GL_GNULIB_MDA_TEMPNAM = @GL_GNULIB_MDA_TEMPNAM@ GL_GNULIB_MDA_TZSET = @GL_GNULIB_MDA_TZSET@ GL_GNULIB_MDA_UMASK = @GL_GNULIB_MDA_UMASK@ GL_GNULIB_MDA_UNLINK = @GL_GNULIB_MDA_UNLINK@ GL_GNULIB_MDA_WCSDUP = @GL_GNULIB_MDA_WCSDUP@ GL_GNULIB_MDA_WRITE = @GL_GNULIB_MDA_WRITE@ GL_GNULIB_MEMCHR = @GL_GNULIB_MEMCHR@ GL_GNULIB_MEMMEM = @GL_GNULIB_MEMMEM@ GL_GNULIB_MEMPCPY = @GL_GNULIB_MEMPCPY@ GL_GNULIB_MEMRCHR = @GL_GNULIB_MEMRCHR@ GL_GNULIB_MEMSET_EXPLICIT = @GL_GNULIB_MEMSET_EXPLICIT@ GL_GNULIB_MKDIR = @GL_GNULIB_MKDIR@ GL_GNULIB_MKDIRAT = @GL_GNULIB_MKDIRAT@ GL_GNULIB_MKDTEMP = @GL_GNULIB_MKDTEMP@ GL_GNULIB_MKFIFO = @GL_GNULIB_MKFIFO@ GL_GNULIB_MKFIFOAT = @GL_GNULIB_MKFIFOAT@ GL_GNULIB_MKNOD = @GL_GNULIB_MKNOD@ GL_GNULIB_MKNODAT = @GL_GNULIB_MKNODAT@ GL_GNULIB_MKOSTEMP = @GL_GNULIB_MKOSTEMP@ GL_GNULIB_MKOSTEMPS = @GL_GNULIB_MKOSTEMPS@ GL_GNULIB_MKSTEMP = @GL_GNULIB_MKSTEMP@ GL_GNULIB_MKSTEMPS = @GL_GNULIB_MKSTEMPS@ GL_GNULIB_MKTIME = @GL_GNULIB_MKTIME@ GL_GNULIB_NANOSLEEP = @GL_GNULIB_NANOSLEEP@ GL_GNULIB_NL_LANGINFO = @GL_GNULIB_NL_LANGINFO@ GL_GNULIB_NONBLOCKING = @GL_GNULIB_NONBLOCKING@ GL_GNULIB_OBSTACK_PRINTF = @GL_GNULIB_OBSTACK_PRINTF@ GL_GNULIB_OBSTACK_PRINTF_POSIX = @GL_GNULIB_OBSTACK_PRINTF_POSIX@ GL_GNULIB_OPEN = @GL_GNULIB_OPEN@ GL_GNULIB_OPENAT = @GL_GNULIB_OPENAT@ GL_GNULIB_OVERRIDES_STRUCT_STAT = @GL_GNULIB_OVERRIDES_STRUCT_STAT@ GL_GNULIB_PCLOSE = @GL_GNULIB_PCLOSE@ GL_GNULIB_PERROR = @GL_GNULIB_PERROR@ GL_GNULIB_PIPE = @GL_GNULIB_PIPE@ GL_GNULIB_PIPE2 = @GL_GNULIB_PIPE2@ GL_GNULIB_POPEN = @GL_GNULIB_POPEN@ GL_GNULIB_POSIX_MEMALIGN = @GL_GNULIB_POSIX_MEMALIGN@ GL_GNULIB_POSIX_OPENPT = @GL_GNULIB_POSIX_OPENPT@ GL_GNULIB_PREAD = @GL_GNULIB_PREAD@ GL_GNULIB_PRINTF = @GL_GNULIB_PRINTF@ GL_GNULIB_PRINTF_POSIX = @GL_GNULIB_PRINTF_POSIX@ GL_GNULIB_PTSNAME = @GL_GNULIB_PTSNAME@ GL_GNULIB_PTSNAME_R = @GL_GNULIB_PTSNAME_R@ GL_GNULIB_PUTC = @GL_GNULIB_PUTC@ GL_GNULIB_PUTCHAR = @GL_GNULIB_PUTCHAR@ GL_GNULIB_PUTENV = @GL_GNULIB_PUTENV@ GL_GNULIB_PUTS = @GL_GNULIB_PUTS@ GL_GNULIB_PWRITE = @GL_GNULIB_PWRITE@ GL_GNULIB_QSORT_R = @GL_GNULIB_QSORT_R@ GL_GNULIB_RANDOM = @GL_GNULIB_RANDOM@ GL_GNULIB_RANDOM_R = @GL_GNULIB_RANDOM_R@ GL_GNULIB_RAWMEMCHR = @GL_GNULIB_RAWMEMCHR@ GL_GNULIB_READ = @GL_GNULIB_READ@ GL_GNULIB_READLINK = @GL_GNULIB_READLINK@ GL_GNULIB_READLINKAT = @GL_GNULIB_READLINKAT@ GL_GNULIB_REALLOCARRAY = @GL_GNULIB_REALLOCARRAY@ GL_GNULIB_REALLOC_GNU = @GL_GNULIB_REALLOC_GNU@ GL_GNULIB_REALLOC_POSIX = @GL_GNULIB_REALLOC_POSIX@ GL_GNULIB_REALPATH = @GL_GNULIB_REALPATH@ GL_GNULIB_REMOVE = @GL_GNULIB_REMOVE@ GL_GNULIB_RENAME = @GL_GNULIB_RENAME@ GL_GNULIB_RENAMEAT = @GL_GNULIB_RENAMEAT@ GL_GNULIB_RMDIR = @GL_GNULIB_RMDIR@ GL_GNULIB_RPMATCH = @GL_GNULIB_RPMATCH@ GL_GNULIB_SCANF = @GL_GNULIB_SCANF@ GL_GNULIB_SECURE_GETENV = @GL_GNULIB_SECURE_GETENV@ GL_GNULIB_SETENV = @GL_GNULIB_SETENV@ GL_GNULIB_SETHOSTNAME = @GL_GNULIB_SETHOSTNAME@ GL_GNULIB_SETLOCALE = @GL_GNULIB_SETLOCALE@ GL_GNULIB_SETLOCALE_NULL = @GL_GNULIB_SETLOCALE_NULL@ GL_GNULIB_SIGABBREV_NP = @GL_GNULIB_SIGABBREV_NP@ GL_GNULIB_SIGDESCR_NP = @GL_GNULIB_SIGDESCR_NP@ GL_GNULIB_SLEEP = @GL_GNULIB_SLEEP@ GL_GNULIB_SNPRINTF = @GL_GNULIB_SNPRINTF@ GL_GNULIB_SPRINTF_POSIX = @GL_GNULIB_SPRINTF_POSIX@ GL_GNULIB_STAT = @GL_GNULIB_STAT@ GL_GNULIB_STDIO_H_NONBLOCKING = @GL_GNULIB_STDIO_H_NONBLOCKING@ GL_GNULIB_STDIO_H_SIGPIPE = @GL_GNULIB_STDIO_H_SIGPIPE@ GL_GNULIB_STPCPY = @GL_GNULIB_STPCPY@ GL_GNULIB_STPNCPY = @GL_GNULIB_STPNCPY@ GL_GNULIB_STRCASESTR = @GL_GNULIB_STRCASESTR@ GL_GNULIB_STRCHRNUL = @GL_GNULIB_STRCHRNUL@ GL_GNULIB_STRDUP = @GL_GNULIB_STRDUP@ GL_GNULIB_STRERROR = @GL_GNULIB_STRERROR@ GL_GNULIB_STRERRORNAME_NP = @GL_GNULIB_STRERRORNAME_NP@ GL_GNULIB_STRERROR_R = @GL_GNULIB_STRERROR_R@ GL_GNULIB_STRFTIME = @GL_GNULIB_STRFTIME@ GL_GNULIB_STRNCAT = @GL_GNULIB_STRNCAT@ GL_GNULIB_STRNDUP = @GL_GNULIB_STRNDUP@ GL_GNULIB_STRNLEN = @GL_GNULIB_STRNLEN@ GL_GNULIB_STRPBRK = @GL_GNULIB_STRPBRK@ GL_GNULIB_STRPTIME = @GL_GNULIB_STRPTIME@ GL_GNULIB_STRSEP = @GL_GNULIB_STRSEP@ GL_GNULIB_STRSIGNAL = @GL_GNULIB_STRSIGNAL@ GL_GNULIB_STRSTR = @GL_GNULIB_STRSTR@ GL_GNULIB_STRTOD = @GL_GNULIB_STRTOD@ GL_GNULIB_STRTOIMAX = @GL_GNULIB_STRTOIMAX@ GL_GNULIB_STRTOK_R = @GL_GNULIB_STRTOK_R@ GL_GNULIB_STRTOL = @GL_GNULIB_STRTOL@ GL_GNULIB_STRTOLD = @GL_GNULIB_STRTOLD@ GL_GNULIB_STRTOLL = @GL_GNULIB_STRTOLL@ GL_GNULIB_STRTOUL = @GL_GNULIB_STRTOUL@ GL_GNULIB_STRTOULL = @GL_GNULIB_STRTOULL@ GL_GNULIB_STRTOUMAX = @GL_GNULIB_STRTOUMAX@ GL_GNULIB_STRVERSCMP = @GL_GNULIB_STRVERSCMP@ GL_GNULIB_SYMLINK = @GL_GNULIB_SYMLINK@ GL_GNULIB_SYMLINKAT = @GL_GNULIB_SYMLINKAT@ GL_GNULIB_SYSTEM_POSIX = @GL_GNULIB_SYSTEM_POSIX@ GL_GNULIB_TIME = @GL_GNULIB_TIME@ GL_GNULIB_TIMEGM = @GL_GNULIB_TIMEGM@ GL_GNULIB_TIMESPEC_GET = @GL_GNULIB_TIMESPEC_GET@ GL_GNULIB_TIMESPEC_GETRES = @GL_GNULIB_TIMESPEC_GETRES@ GL_GNULIB_TIME_R = @GL_GNULIB_TIME_R@ GL_GNULIB_TIME_RZ = @GL_GNULIB_TIME_RZ@ GL_GNULIB_TMPFILE = @GL_GNULIB_TMPFILE@ GL_GNULIB_TOWCTRANS = @GL_GNULIB_TOWCTRANS@ GL_GNULIB_TRUNCATE = @GL_GNULIB_TRUNCATE@ GL_GNULIB_TTYNAME_R = @GL_GNULIB_TTYNAME_R@ GL_GNULIB_TZSET = @GL_GNULIB_TZSET@ GL_GNULIB_UNISTD_H_GETOPT = @GL_GNULIB_UNISTD_H_GETOPT@ GL_GNULIB_UNISTD_H_NONBLOCKING = @GL_GNULIB_UNISTD_H_NONBLOCKING@ GL_GNULIB_UNISTD_H_SIGPIPE = @GL_GNULIB_UNISTD_H_SIGPIPE@ GL_GNULIB_UNLINK = @GL_GNULIB_UNLINK@ GL_GNULIB_UNLINKAT = @GL_GNULIB_UNLINKAT@ GL_GNULIB_UNLOCKPT = @GL_GNULIB_UNLOCKPT@ GL_GNULIB_UNSETENV = @GL_GNULIB_UNSETENV@ GL_GNULIB_USLEEP = @GL_GNULIB_USLEEP@ GL_GNULIB_UTIMENSAT = @GL_GNULIB_UTIMENSAT@ GL_GNULIB_VASPRINTF = @GL_GNULIB_VASPRINTF@ GL_GNULIB_VDPRINTF = @GL_GNULIB_VDPRINTF@ GL_GNULIB_VFPRINTF = @GL_GNULIB_VFPRINTF@ GL_GNULIB_VFPRINTF_POSIX = @GL_GNULIB_VFPRINTF_POSIX@ GL_GNULIB_VFSCANF = @GL_GNULIB_VFSCANF@ GL_GNULIB_VPRINTF = @GL_GNULIB_VPRINTF@ GL_GNULIB_VPRINTF_POSIX = @GL_GNULIB_VPRINTF_POSIX@ GL_GNULIB_VSCANF = @GL_GNULIB_VSCANF@ GL_GNULIB_VSNPRINTF = @GL_GNULIB_VSNPRINTF@ GL_GNULIB_VSPRINTF_POSIX = @GL_GNULIB_VSPRINTF_POSIX@ GL_GNULIB_WCPCPY = @GL_GNULIB_WCPCPY@ GL_GNULIB_WCPNCPY = @GL_GNULIB_WCPNCPY@ GL_GNULIB_WCRTOMB = @GL_GNULIB_WCRTOMB@ GL_GNULIB_WCSCASECMP = @GL_GNULIB_WCSCASECMP@ GL_GNULIB_WCSCAT = @GL_GNULIB_WCSCAT@ GL_GNULIB_WCSCHR = @GL_GNULIB_WCSCHR@ GL_GNULIB_WCSCMP = @GL_GNULIB_WCSCMP@ GL_GNULIB_WCSCOLL = @GL_GNULIB_WCSCOLL@ GL_GNULIB_WCSCPY = @GL_GNULIB_WCSCPY@ GL_GNULIB_WCSCSPN = @GL_GNULIB_WCSCSPN@ GL_GNULIB_WCSDUP = @GL_GNULIB_WCSDUP@ GL_GNULIB_WCSFTIME = @GL_GNULIB_WCSFTIME@ GL_GNULIB_WCSLEN = @GL_GNULIB_WCSLEN@ GL_GNULIB_WCSNCASECMP = @GL_GNULIB_WCSNCASECMP@ GL_GNULIB_WCSNCAT = @GL_GNULIB_WCSNCAT@ GL_GNULIB_WCSNCMP = @GL_GNULIB_WCSNCMP@ GL_GNULIB_WCSNCPY = @GL_GNULIB_WCSNCPY@ GL_GNULIB_WCSNLEN = @GL_GNULIB_WCSNLEN@ GL_GNULIB_WCSNRTOMBS = @GL_GNULIB_WCSNRTOMBS@ GL_GNULIB_WCSPBRK = @GL_GNULIB_WCSPBRK@ GL_GNULIB_WCSRCHR = @GL_GNULIB_WCSRCHR@ GL_GNULIB_WCSRTOMBS = @GL_GNULIB_WCSRTOMBS@ GL_GNULIB_WCSSPN = @GL_GNULIB_WCSSPN@ GL_GNULIB_WCSSTR = @GL_GNULIB_WCSSTR@ GL_GNULIB_WCSTOK = @GL_GNULIB_WCSTOK@ GL_GNULIB_WCSWIDTH = @GL_GNULIB_WCSWIDTH@ GL_GNULIB_WCSXFRM = @GL_GNULIB_WCSXFRM@ GL_GNULIB_WCTOB = @GL_GNULIB_WCTOB@ GL_GNULIB_WCTOMB = @GL_GNULIB_WCTOMB@ GL_GNULIB_WCTRANS = @GL_GNULIB_WCTRANS@ GL_GNULIB_WCTYPE = @GL_GNULIB_WCTYPE@ GL_GNULIB_WCWIDTH = @GL_GNULIB_WCWIDTH@ GL_GNULIB_WMEMCHR = @GL_GNULIB_WMEMCHR@ GL_GNULIB_WMEMCMP = @GL_GNULIB_WMEMCMP@ GL_GNULIB_WMEMCPY = @GL_GNULIB_WMEMCPY@ GL_GNULIB_WMEMMOVE = @GL_GNULIB_WMEMMOVE@ GL_GNULIB_WMEMPCPY = @GL_GNULIB_WMEMPCPY@ GL_GNULIB_WMEMSET = @GL_GNULIB_WMEMSET@ GL_GNULIB_WRITE = @GL_GNULIB_WRITE@ GL_GNULIB__EXIT = @GL_GNULIB__EXIT@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GNULIBHEADERS_OVERRIDE_WINT_T = @GNULIBHEADERS_OVERRIDE_WINT_T@ GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@ GREP = @GREP@ HARD_LOCALE_LIB = @HARD_LOCALE_LIB@ HAVE_ALIGNED_ALLOC = @HAVE_ALIGNED_ALLOC@ HAVE_ALLOCA_H = @HAVE_ALLOCA_H@ HAVE_ATOLL = @HAVE_ATOLL@ HAVE_BTOWC = @HAVE_BTOWC@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_COPY_FILE_RANGE = @HAVE_COPY_FILE_RANGE@ HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ HAVE_DECL_ECVT = @HAVE_DECL_ECVT@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_EXECVPE = @HAVE_DECL_EXECVPE@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FCLOSEALL = @HAVE_DECL_FCLOSEALL@ HAVE_DECL_FCVT = @HAVE_DECL_FCVT@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GCVT = @HAVE_DECL_GCVT@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_GETW = @HAVE_DECL_GETW@ HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@ HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_PROGRAM_INVOCATION_NAME = @HAVE_DECL_PROGRAM_INVOCATION_NAME@ HAVE_DECL_PUTW = @HAVE_DECL_PUTW@ HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DECL_WCSDUP = @HAVE_DECL_WCSDUP@ HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ HAVE_ERROR = @HAVE_ERROR@ HAVE_ERROR_AT_LINE = @HAVE_ERROR_AT_LINE@ HAVE_ERROR_H = @HAVE_ERROR_H@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_EXECVPE = @HAVE_EXECVPE@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHMODAT = @HAVE_FCHMODAT@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FCNTL = @HAVE_FCNTL@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FEATURES_H = @HAVE_FEATURES_H@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FREELOCALE = @HAVE_FREELOCALE@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSTATAT = @HAVE_FSTATAT@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_FUTIMENS = @HAVE_FUTIMENS@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETENTROPY = @HAVE_GETENTROPY@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GETPASS = @HAVE_GETPASS@ HAVE_GETPROGNAME = @HAVE_GETPROGNAME@ HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ HAVE_GETUMASK = @HAVE_GETUMASK@ HAVE_GRANTPT = @HAVE_GRANTPT@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_IMAXABS = @HAVE_IMAXABS@ HAVE_IMAXDIV = @HAVE_IMAXDIV@ HAVE_IMAXDIV_T = @HAVE_IMAXDIV_T@ HAVE_INITSTATE = @HAVE_INITSTATE@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_ISWBLANK = @HAVE_ISWBLANK@ HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ HAVE_LANGINFO_ALTMON = @HAVE_LANGINFO_ALTMON@ HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ HAVE_LCHMOD = @HAVE_LCHMOD@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_LSTAT = @HAVE_LSTAT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBRLEN = @HAVE_MBRLEN@ HAVE_MBRTOWC = @HAVE_MBRTOWC@ HAVE_MBSINIT = @HAVE_MBSINIT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ HAVE_MBTOWC = @HAVE_MBTOWC@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MEMSET_EXPLICIT = @HAVE_MEMSET_EXPLICIT@ HAVE_MKDIRAT = @HAVE_MKDIRAT@ HAVE_MKDTEMP = @HAVE_MKDTEMP@ HAVE_MKFIFO = @HAVE_MKFIFO@ HAVE_MKFIFOAT = @HAVE_MKFIFOAT@ HAVE_MKNOD = @HAVE_MKNOD@ HAVE_MKNODAT = @HAVE_MKNODAT@ HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ HAVE_MKSTEMP = @HAVE_MKSTEMP@ HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ HAVE_NEWLOCALE = @HAVE_NEWLOCALE@ HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ HAVE_OPENAT = @HAVE_OPENAT@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_POSIX_MEMALIGN = @HAVE_POSIX_MEMALIGN@ HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PTSNAME = @HAVE_PTSNAME@ HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_QSORT_R = @HAVE_QSORT_R@ HAVE_RANDOM = @HAVE_RANDOM@ HAVE_RANDOM_H = @HAVE_RANDOM_H@ HAVE_RANDOM_R = @HAVE_RANDOM_R@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ HAVE_REALPATH = @HAVE_REALPATH@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_RPMATCH = @HAVE_RPMATCH@ HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ HAVE_SETENV = @HAVE_SETENV@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SETSTATE = @HAVE_SETSTATE@ HAVE_SIGABBREV_NP = @HAVE_SIGABBREV_NP@ HAVE_SIGDESCR_NP = @HAVE_SIGDESCR_NP@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRERRORNAME_NP = @HAVE_STRERRORNAME_NP@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRPTIME = @HAVE_STRPTIME@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRTOD = @HAVE_STRTOD@ HAVE_STRTOL = @HAVE_STRTOL@ HAVE_STRTOLD = @HAVE_STRTOLD@ HAVE_STRTOLL = @HAVE_STRTOLL@ HAVE_STRTOUL = @HAVE_STRTOUL@ HAVE_STRTOULL = @HAVE_STRTOULL@ HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_TIMEGM = @HAVE_TIMEGM@ HAVE_TIMESPEC_GET = @HAVE_TIMESPEC_GET@ HAVE_TIMESPEC_GETRES = @HAVE_TIMESPEC_GETRES@ HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WCPCPY = @HAVE_WCPCPY@ HAVE_WCPNCPY = @HAVE_WCPNCPY@ HAVE_WCRTOMB = @HAVE_WCRTOMB@ HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ HAVE_WCSCAT = @HAVE_WCSCAT@ HAVE_WCSCHR = @HAVE_WCSCHR@ HAVE_WCSCMP = @HAVE_WCSCMP@ HAVE_WCSCOLL = @HAVE_WCSCOLL@ HAVE_WCSCPY = @HAVE_WCSCPY@ HAVE_WCSCSPN = @HAVE_WCSCSPN@ HAVE_WCSDUP = @HAVE_WCSDUP@ HAVE_WCSFTIME = @HAVE_WCSFTIME@ HAVE_WCSLEN = @HAVE_WCSLEN@ HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ HAVE_WCSNCAT = @HAVE_WCSNCAT@ HAVE_WCSNCMP = @HAVE_WCSNCMP@ HAVE_WCSNCPY = @HAVE_WCSNCPY@ HAVE_WCSNLEN = @HAVE_WCSNLEN@ HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ HAVE_WCSPBRK = @HAVE_WCSPBRK@ HAVE_WCSRCHR = @HAVE_WCSRCHR@ HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ HAVE_WCSSPN = @HAVE_WCSSPN@ HAVE_WCSSTR = @HAVE_WCSSTR@ HAVE_WCSTOK = @HAVE_WCSTOK@ HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ HAVE_WCSXFRM = @HAVE_WCSXFRM@ HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE_WINT_T = @HAVE_WINT_T@ HAVE_WMEMCHR = @HAVE_WMEMCHR@ HAVE_WMEMCMP = @HAVE_WMEMCMP@ HAVE_WMEMCPY = @HAVE_WMEMCPY@ HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ HAVE_WMEMPCPY = @HAVE_WMEMPCPY@ HAVE_WMEMSET = @HAVE_WMEMSET@ HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ HAVE__EXIT = @HAVE__EXIT@ IMPRIMATUR_MAKEINFOFLAGS = @IMPRIMATUR_MAKEINFOFLAGS@ IMPRIMATUR_MODULE_DIR = @IMPRIMATUR_MODULE_DIR@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@ INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBGNU_LIBDEPS = @LIBGNU_LIBDEPS@ LIBGNU_LTLIBDEPS = @LIBGNU_LTLIBDEPS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPMULTITHREAD = @LIBPMULTITHREAD@ LIBPTHREAD = @LIBPTHREAD@ LIBS = @LIBS@ LIBSTDTHREAD = @LIBSTDTHREAD@ LIBTHREAD = @LIBTHREAD@ LIB_HARD_LOCALE = @LIB_HARD_LOCALE@ LIB_MBRTOWC = @LIB_MBRTOWC@ LIB_NL_LANGINFO = @LIB_NL_LANGINFO@ LIB_SCHED_YIELD = @LIB_SCHED_YIELD@ LIB_SETLOCALE_NULL = @LIB_SETLOCALE_NULL@ LIMITS_H = @LIMITS_H@ LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ LOCALENAME_ENHANCE_LOCALE_FUNCS = @LOCALENAME_ENHANCE_LOCALE_FUNCS@ LOCALE_FR = @LOCALE_FR@ LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ LOCALE_JA = @LOCALE_JA@ LOCALE_ZH_CN = @LOCALE_ZH_CN@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBTHREAD = @LTLIBTHREAD@ MAKEINFO = @MAKEINFO@ MBRTOWC_LIB = @MBRTOWC_LIB@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NEXT_ASSERT_H = @NEXT_ASSERT_H@ NEXT_AS_FIRST_DIRECTIVE_ASSERT_H = @NEXT_AS_FIRST_DIRECTIVE_ASSERT_H@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_ERROR_H = @NEXT_AS_FIRST_DIRECTIVE_ERROR_H@ NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@ NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_ERROR_H = @NEXT_ERROR_H@ NEXT_FCNTL_H = @NEXT_FCNTL_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_LOCALE_H = @NEXT_LOCALE_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STDLIB_H = @NEXT_STDLIB_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_TIME_H = @NEXT_TIME_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NEXT_WCHAR_H = @NEXT_WCHAR_H@ NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ 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@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PRIPTR_PREFIX = @PRIPTR_PREFIX@ PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ RANLIB = @RANLIB@ RENDITION = @RENDITION@ REPLACE_ACCESS = @REPLACE_ACCESS@ REPLACE_ALIGNED_ALLOC = @REPLACE_ALIGNED_ALLOC@ REPLACE_BTOWC = @REPLACE_BTOWC@ REPLACE_CALLOC_FOR_CALLOC_GNU = @REPLACE_CALLOC_FOR_CALLOC_GNU@ REPLACE_CALLOC_FOR_CALLOC_POSIX = @REPLACE_CALLOC_FOR_CALLOC_POSIX@ REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ REPLACE_CHMOD = @REPLACE_CHMOD@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_COPY_FILE_RANGE = @REPLACE_COPY_FILE_RANGE@ REPLACE_CREAT = @REPLACE_CREAT@ REPLACE_CTIME = @REPLACE_CTIME@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_DUP3 = @REPLACE_DUP3@ REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ REPLACE_ERROR = @REPLACE_ERROR@ REPLACE_ERROR_AT_LINE = @REPLACE_ERROR_AT_LINE@ REPLACE_EXECL = @REPLACE_EXECL@ REPLACE_EXECLE = @REPLACE_EXECLE@ REPLACE_EXECLP = @REPLACE_EXECLP@ REPLACE_EXECV = @REPLACE_EXECV@ REPLACE_EXECVE = @REPLACE_EXECVE@ REPLACE_EXECVP = @REPLACE_EXECVP@ REPLACE_EXECVPE = @REPLACE_EXECVPE@ REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ REPLACE_FCHMODAT = @REPLACE_FCHMODAT@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FCNTL = @REPLACE_FCNTL@ REPLACE_FDATASYNC = @REPLACE_FDATASYNC@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FFSLL = @REPLACE_FFSLL@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FOPEN_FOR_FOPEN_GNU = @REPLACE_FOPEN_FOR_FOPEN_GNU@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREE = @REPLACE_FREE@ REPLACE_FREELOCALE = @REPLACE_FREELOCALE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FSTAT = @REPLACE_FSTAT@ REPLACE_FSTATAT = @REPLACE_FSTATAT@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETENTROPY = @REPLACE_GETENTROPY@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOADAVG = @REPLACE_GETLOADAVG@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_GETPASS = @REPLACE_GETPASS@ REPLACE_GETPASS_FOR_GETPASS_GNU = @REPLACE_GETPASS_FOR_GETPASS_GNU@ REPLACE_GETPROGNAME = @REPLACE_GETPROGNAME@ REPLACE_GETSUBOPT = @REPLACE_GETSUBOPT@ REPLACE_GMTIME = @REPLACE_GMTIME@ REPLACE_IMAXABS = @REPLACE_IMAXABS@ REPLACE_IMAXDIV = @REPLACE_IMAXDIV@ REPLACE_INITSTATE = @REPLACE_INITSTATE@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ REPLACE_ISWDIGIT = @REPLACE_ISWDIGIT@ REPLACE_ISWXDIGIT = @REPLACE_ISWXDIGIT@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_LSTAT = @REPLACE_LSTAT@ REPLACE_MALLOC_FOR_MALLOC_GNU = @REPLACE_MALLOC_FOR_MALLOC_GNU@ REPLACE_MALLOC_FOR_MALLOC_POSIX = @REPLACE_MALLOC_FOR_MALLOC_POSIX@ REPLACE_MBRLEN = @REPLACE_MBRLEN@ REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ REPLACE_MBSINIT = @REPLACE_MBSINIT@ REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ REPLACE_MBSTOWCS = @REPLACE_MBSTOWCS@ REPLACE_MBTOWC = @REPLACE_MBTOWC@ REPLACE_MB_CUR_MAX = @REPLACE_MB_CUR_MAX@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_MEMPCPY = @REPLACE_MEMPCPY@ REPLACE_MKDIR = @REPLACE_MKDIR@ REPLACE_MKFIFO = @REPLACE_MKFIFO@ REPLACE_MKFIFOAT = @REPLACE_MKFIFOAT@ REPLACE_MKNOD = @REPLACE_MKNOD@ REPLACE_MKNODAT = @REPLACE_MKNODAT@ REPLACE_MKOSTEMP = @REPLACE_MKOSTEMP@ REPLACE_MKOSTEMPS = @REPLACE_MKOSTEMPS@ REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ REPLACE_MKTIME = @REPLACE_MKTIME@ REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ REPLACE_NEWLOCALE = @REPLACE_NEWLOCALE@ REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_OPEN = @REPLACE_OPEN@ REPLACE_OPENAT = @REPLACE_OPENAT@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_PIPE2 = @REPLACE_PIPE2@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_POSIX_MEMALIGN = @REPLACE_POSIX_MEMALIGN@ REPLACE_POSIX_OPENPT = @REPLACE_POSIX_OPENPT@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PTSNAME = @REPLACE_PTSNAME@ REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ REPLACE_PUTENV = @REPLACE_PUTENV@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_QSORT_R = @REPLACE_QSORT_R@ REPLACE_RANDOM = @REPLACE_RANDOM@ REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ REPLACE_READ = @REPLACE_READ@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_READLINKAT = @REPLACE_READLINKAT@ REPLACE_REALLOCARRAY = @REPLACE_REALLOCARRAY@ REPLACE_REALLOC_FOR_REALLOC_GNU = @REPLACE_REALLOC_FOR_REALLOC_GNU@ REPLACE_REALLOC_FOR_REALLOC_POSIX = @REPLACE_REALLOC_FOR_REALLOC_POSIX@ REPLACE_REALPATH = @REPLACE_REALPATH@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_SETENV = @REPLACE_SETENV@ REPLACE_SETHOSTNAME = @REPLACE_SETHOSTNAME@ REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ REPLACE_SETSTATE = @REPLACE_SETSTATE@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_STAT = @REPLACE_STAT@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPCPY = @REPLACE_STPCPY@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERRORNAME_NP = @REPLACE_STRERRORNAME_NP@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRFTIME = @REPLACE_STRFTIME@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOD = @REPLACE_STRTOD@ REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_STRTOL = @REPLACE_STRTOL@ REPLACE_STRTOLD = @REPLACE_STRTOLD@ REPLACE_STRTOLL = @REPLACE_STRTOLL@ REPLACE_STRTOUL = @REPLACE_STRTOUL@ REPLACE_STRTOULL = @REPLACE_STRTOULL@ REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ REPLACE_TIME = @REPLACE_TIME@ REPLACE_TIMEGM = @REPLACE_TIMEGM@ REPLACE_TIMESPEC_GET = @REPLACE_TIMESPEC_GET@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_TZSET = @REPLACE_TZSET@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_UNSETENV = @REPLACE_UNSETENV@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ REPLACE_WCSCMP = @REPLACE_WCSCMP@ REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ REPLACE_WCSNCMP = @REPLACE_WCSNCMP@ REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ REPLACE_WCSSTR = @REPLACE_WCSSTR@ REPLACE_WCSTOK = @REPLACE_WCSTOK@ REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ REPLACE_WCTOB = @REPLACE_WCTOB@ REPLACE_WCTOMB = @REPLACE_WCTOMB@ REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ REPLACE_WMEMCMP = @REPLACE_WMEMCMP@ REPLACE_WMEMPCPY = @REPLACE_WMEMPCPY@ REPLACE_WRITE = @REPLACE_WRITE@ REPLACE__EXIT = @REPLACE__EXIT@ RUSH_DEFAULT_CONFIG = @RUSH_DEFAULT_CONFIG@ SCHED_YIELD_LIB = @SCHED_YIELD_LIB@ SED = @SED@ SETLOCALE_NULL_LIB = @SETLOCALE_NULL_LIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ STDCKDINT_H = @STDCKDINT_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_TIME_UTC = @TIME_H_DEFINES_TIME_UTC@ UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@ UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ UNISTD_H_HAVE_SYS_RANDOM_H = @UNISTD_H_HAVE_SYS_RANDOM_H@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ 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@ gl_LIBOBJDEPS = @gl_LIBOBJDEPS@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJDEPS = @gltests_LIBOBJDEPS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = check-docs.sh emptynodes.awk imprimatur.m4 imprimatur.mk \ mastermenu.el rendition.texi untabify.el $(am__append_1) \ $(am__append_2) @IMPRIMATUR_COND_DIST_INFO_TRUE@@IMPRIMATUR_COND_MAKEDOC_TRUE@BUILT_SOURCES = imprimatur.info @IMPRIMATUR_COND_MAKEDOC_TRUE@DISTCLEANFILES = Makedoc @IMPRIMATUR_COND_MAKEDOC_TRUE@MAKEDOC = $(MAKE) -f Makedoc all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) 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 doc/imprimatur/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnits doc/imprimatur/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-am all-am: Makefile installdirs: install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-am install-exec: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) 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 "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) @IMPRIMATUR_COND_MAKEDOC_FALSE@clean-local: clean: clean-am clean-am: clean-generic clean-local mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic @IMPRIMATUR_COND_MAKEDOC_FALSE@dvi: dvi-am dvi-am: html: html-am html-am: @IMPRIMATUR_COND_MAKEDOC_FALSE@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 -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic @IMPRIMATUR_COND_MAKEDOC_FALSE@pdf: pdf-am pdf-am: @IMPRIMATUR_COND_MAKEDOC_FALSE@ps: ps-am ps-am: uninstall-am: .MAKE: all check install install-am install-exec install-strip .PHONY: all all-am check check-am clean clean-generic clean-local \ cscopelist-am ctags-am 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-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-am uninstall uninstall-am .PRECIOUS: Makefile @IMPRIMATUR_COND_MAKEDOC_TRUE@.PHONY: imprimatur.info @IMPRIMATUR_COND_MAKEDOC_TRUE@imprimatur.info:; $(MAKEDOC) @IMPRIMATUR_COND_MAKEDOC_TRUE@info: imprimatur.info @IMPRIMATUR_COND_MAKEDOC_TRUE@pdf:; $(MAKEDOC) pdf @IMPRIMATUR_COND_MAKEDOC_TRUE@dvi:; $(MAKEDOC) dvi @IMPRIMATUR_COND_MAKEDOC_TRUE@ps:; $(MAKEDOC) ps @IMPRIMATUR_COND_MAKEDOC_TRUE@clean-local:; $(MAKEDOC) clean # 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: rush-2.4/doc/imprimatur/emptynodes.awk0000644000175000017500000000540213456274325020173 0ustar00graygray00000000000000# This file is part of Imprimatur. # Copyright (C) 2011 Sergey Poznyakoff # # Imprimatur 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. # # Imprimatur is distributed in the hope that 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 Imprimatur. If not, see . # State map: # 0 - Initial # 1 - Within @node # 2 - Within @ignore # 3 - Waiting for next @node BEGIN { if (!includepath) includepath="." if (makeinfoflags) { n=split(makeinfoflags, flags) for (i = 1; i <= n; i++) { if (flags[i] == "-I") includepath = includepath " " flags[++i] else if (match(flags[i], /^-I(.+)/, dirs)) includepath = includepath " " dirs[1] } } } function report() { if (!nodes_reported) { print "Empty nodes:" > "/dev/stderr" nodes_reported = 1 } if (node_locus) print node_locus ": " node_name > "/dev/stderr" else print FILENAME ":" FNR ": (unknown)" > "/dev/stderr" } skip_to && $1 == "@end" && $2 == skip_to { skip_to = ""; next } skip_to { next } /@c imprimatur-ignore/ { ignore = FILENAME } ignore == FILENAME { next } $1 == "@WRITEME" { node_locus=FILENAME ":" FNR node_name="(@WRITEME) " node_name report() state = 3 next } $1 == "@bye" { state = 0; node_locus = "" } $1 == "@macro" { skip_to = "macro"; next } $1 == "@include" && scriptname { ofile = $2 cmd = "find " includepath " -maxdepth 1 -name " ofile " -print -quit" $0="" cmd | getline close(cmd) file = $1 if (!file) { print FILENAME ":" FNR ": cannot find file " ofile > "/dev/stderr" next } cmd = "awk -f " scriptname \ " -v scriptname=" scriptname \ " -v includepath='" includepath "'" \ " -v state=" state \ " -v nodes_reported=" (nodes_reported+0) \ " -v node_locus=\"" node_locus "\"" \ " -v node_name=\"" node_name "\"" \ " -v report_state=1 " file cmd | getline close(cmd) state = $1 nodes_reported = $2 } $1 == "@node" { if (state == 1) report() sub(/@node[ \t][ \t]*/,"") node_name=$0 node_locus=FILENAME ":" FNR state = 1 next } state == 3 { next } state == 0 { next } state == 2 && /@end[ \t][ \t]*ignore/ { state = 1; next } state == 2 { next } /* Now in state 1: */ $1 == "@ignore" { state = 2; next } $1 == "@printindex" { state = 3; next } /^[ \t]*@/ || NF == 0 { next } { state = 3 } END { if (report_state) print state,nodes_reported else { if (state == 1) report() exit(nodes_reported) } } rush-2.4/doc/imprimatur/mastermenu.el0000644000175000017500000000532413456274325020005 0ustar00graygray00000000000000;; This file is part of Imprimatur. ;; Copyright (C) 2006, 2007, 2010, 2011 Sergey Poznyakoff ;; ;; Imprimatur 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. ;; ;; Imprimatur is distributed in the hope that 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 Imprimatur. If not, see . ;;; Commentary: ;; This file redefines texinfo-master-menu-list so that it takes into ;; account included files. ;; Known bugs: @menu without previous sectioning command will inherit ;; documentation string from the previous menu. However, since such a ;; menu is illegal in a texinfo file, we can live with it. (require 'texinfo) (require 'texnfo-upd) (defun texinfo-master-menu-list-recursive (title) "Auxiliary function used by `texinfo-master-menu-list'." (save-excursion (let (master-menu-list) (while (re-search-forward "\\(^@menu\\|^@include\\)" nil t) (cond ((string= (match-string 0) "@include") (skip-chars-forward " \t") (let ((included-name (let ((start (point))) (end-of-line) (skip-chars-backward " \t") (buffer-substring start (point))))) (end-of-line) (let ((prev-title (texinfo-copy-menu-title))) (save-excursion (set-buffer (find-file-noselect included-name)) (setq master-menu-list (append (texinfo-master-menu-list-recursive prev-title) master-menu-list)))))) (t (setq master-menu-list (cons (list (texinfo-copy-menu) (let ((menu-title (texinfo-copy-menu-title))) (if (string= menu-title "") title menu-title))) master-menu-list))))) master-menu-list))) (defun texinfo-master-menu-list () "Return a list of menu entries and header lines for the master menu, recursing into included files. Start with the menu for chapters and indices and then find each following menu and the title of the node preceding that menu. The master menu list has this form: \(\(\(... \"entry-1-2\" \"entry-1\"\) \"title-1\"\) \(\(... \"entry-2-2\" \"entry-2-1\"\) \"title-2\"\) ...\) However, there does not need to be a title field." (reverse (texinfo-master-menu-list-recursive ""))) (defun make-master-menu () "Create master menu in the first Emacs argument." (find-file (car command-line-args-left)) (texinfo-master-menu nil) (save-buffer)) ;;; mastermenu.el ends here rush-2.4/doc/imprimatur/imprimatur.mk0000644000175000017500000000757613456274325020040 0ustar00graygray00000000000000# This file is part of Imprimatur. # Copyright (C) 2006, 2007, 2010, 2011 Sergey Poznyakoff # # Imprimatur 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. # # Imprimatur is distributed in the hope that 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 Imprimatur. If not, see . imprimatur-format: @if test -n "`cat $(imprimatur_INPUT) | tr -d -c '\t'`"; then \ echo "Sources contain tabs; run make imprimatur-untabify"; \ false; \ fi imprimatur-refs: @for file in $(imprimatur_INPUT); \ do \ grep -q '^@c imprimatur-ignore' $$file && continue; \ sed -e = $$file | \ sed -n 'N;/@FIXME-.*ref/{s/\(^[0-9][0-9]*\).*@FIXME-.*ref{\([^}]*\)}.*/'$$file':\1: \2/gp}'; \ done > $@-t; \ if [ -s $@-t ]; then \ echo "Unresolved cross-references:"; \ cat $@-t;\ rm $@-t; \ else \ rm -f $@-t; \ fi imprimatur-fixmes: @for file in $(imprimatur_INPUT); \ do \ grep -q '^@c imprimatur-ignore' $$file && continue; \ sed -e = $$file | \ sed -n 'N;/@FIXME{/{s/\(^[0-9][0-9]*\).*@FIXME{\([^}]*\).*/'$$file':\1: \2/gp}'; \ done > $@-t; \ if [ -s $@-t ]; then \ echo "Unresolved FIXMEs:"; \ cat $@-t; \ rm $@-t; \ false; \ else \ rm -f $@-t; \ fi imprimatur-writemes: @files=`grep -c '^@c imprimatur-ignore' $(imprimatur_INPUT) | sed -n 's/:0$$//p'`; \ test -n "$$files" && grep -Hn '^[ \t]*@WRITEME' $$files > $@-t; \ if [ -s $@-t ]; then \ echo "Empty nodes:"; \ cat $@-t; \ rm $@-t; \ false;\ else \ rm $@-t; \ fi imprimatur-empty-nodes: @awk -f $(top_srcdir)/$(IMPRIMATUR_MODULE_DIR)/emptynodes.awk \ -v scriptname=$(top_srcdir)/$(IMPRIMATUR_MODULE_DIR)/emptynodes.awk \ -v makeinfoflags="$(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS)" \ $(info_TEXINFOS) imprimatur-unrevised: @files=`grep -c '^@c imprimatur-ignore' $(imprimatur_INPUT) | sed -n 's/:0$$//p'`; \ grep -Hn '^[ \t]*@UNREVISED' $$files > $@-t; \ if [ -s $@-t ]; then \ echo "Unrevised nodes:"; \ cat $@-t; \ rm $@-t; \ false;\ else \ rm $@-t; \ fi if IMPRIMATUR_COND_FRENCHSPACING imprimatur-check-sentence-spacing: @if grep -q '\. [@A-Z]' $(imprimatur_INPUT); then \ echo >&2 "Sources contain double-space sentence separators."; \ echo >&2 "Run make imprimatur-fix-sentence-spacing to fix."; \ fi imprimatur-fix-sentence-spacing: @for file in $(imprimatur_INPUT); \ do \ if grep -q '\. [@A-Z]' $$file; then \ mv $$file $${file}~; \ sed -r 's/\. ([@A-Z])/. \1/g' $${file}~ > $$file; \ fi; \ done else imprimatur-check-sentence-spacing: @if grep -q '\. [@A-Z]' $(imprimatur_INPUT); then \ echo >&2 "Sources contain single-space sentence separators."; \ echo >&2 "Run make imprimatur-fix-sentence-spacing to fix."; \ fi imprimatur-fix-sentence-spacing: @for file in $(imprimatur_INPUT); \ do \ if grep -q '\. [@A-Z]' $$file; then \ mv $$file $${file}~; \ sed -r 's/\. ([@A-Z])/. \1/g' $${file}~ > $$file; \ fi; \ done endif imprimatur-basic-checks: imprimatur-format imprimatur-check-sentence-spacing \ imprimatur-refs imprimatur-fixmes \ imprimatur-empty-nodes imprimatur-unrevised imprimatur-master-menu: @emacs -batch -l $(top_srcdir)/$(IMPRIMATUR_MODULE_DIR)/mastermenu.el \ -f make-master-menu $(info_TEXINFOS) imprimatur-untabify: @emacs -batch -l $(top_srcdir)/$(IMPRIMATUR_MODULE_DIR)/untabify.el \ $(imprimatur_INPUT) imprimatur-final: imprimatur-untabify imprimatur-master-menu rush-2.4/doc/imprimatur/check-docs.sh0000755000175000017500000000337313456274325017647 0ustar00graygray00000000000000#! /bin/sh # This file is part of Imprimatur. # Copyright (C) 2006, 2007, 2010, 2011 Sergey Poznyakoff # # Imprimatur 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. # # Imprimatur is distributed in the hope that 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 Imprimatur. If not, see . usage() { cat < $TEMPDIR/src $* | \ sed -n '/^@macro/,/^@end macro/d;'"$docsexp" | ltrim_ws \ | sort | uniq > $TEMPDIR/doc join -v1 $TEMPDIR/src $TEMPDIR/doc > $TEMPDIR/src-doc join -v2 $TEMPDIR/src $TEMPDIR/doc > $TEMPDIR/doc-src (if [ -s $TEMPDIR/src-doc ]; then echo "Not documented $item:" cat $TEMPDIR/src-doc fi if [ -s $TEMPDIR/doc-src ]; then echo "Non-existing $item:" cat $TEMPDIR/doc-src fi) > $TEMPDIR/report if [ -s $TEMPDIR/report ]; then cat $TEMPDIR/report rm -rf $TEMPDIR exit 1 else rm -rf $TEMPDIR exit 0 fi rush-2.4/doc/rushwho.10000644000175000017500000001762414643176117014700 0ustar00graygray00000000000000.\" This file is part of GNU Rush. .\" Copyright (C) 2016-2024 Sergey Poznyakoff .\" .\" GNU Rush is free software; you can redistribute it and/or modify .\" it under the terms of the GNU General Public License as published by .\" the Free Software Foundation; either version 3, or (at your option) .\" any later version. .\" .\" GNU Rush is distributed in the hope that it will be useful, .\" but WITHOUT ANY WARRANTY; without even the implied warranty of .\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the .\" GNU General Public License for more details. .\" .\" You should have received a copy of the GNU General Public License .\" along with GNU Rush. If not, see . .TH RUSHWHO 1 "August 17, 2016" "RUSHWHO" "Rush User Reference" .SH NAME rushwho \- show who is logged on by rush(1) .SH SYNOPSIS \fBrushwho\fR\ [\fB\-Hh\fR]\ [\fB\-F\fR \fISTRING\fR]\ [\fB\-f\fR \fIDIR\fR]\ [\fB\-\-file=\fIDIR\fR]\ [\fB\-\-format=\fISTRING\fR]\ [\fB\-\-help\fR]\ [\fB\-\-no\-header\fR]\ [\fB\-\-usage\fR]\ [\fB\-\-version\fR] .SH NOTE This manpage is a short description of \fBrushwho\fR. For a detailed discussion, including examples and usage recommendations, refer to the manual \fBGNU Rush -- a restricted user shell\fR, available in texinfo format. If the \fBinfo\fR reader and the rush documentation are properly installed on your system, the command .PP .RS +4 .B info rushwho .RE .PP should give you access to the complete manual. .PP You can also view the manual using the info mode in .BR emacs (1), or find it in various formats online at .PP .RS +4 .B http://www.gnu.org.ua/software/rush/manual .RE .PP If any discrepancies occur between this manpage and the \fBManual\fR, the later shall be considered the authoritative source. .SH DESCRIPTION Displays a list of users who are currently logged in by .BR rush (1). The utility operates on the default accounting database, which is maintained if .BR rush (1) runs in accounting mode. .SH OPTIONS .TP \fB\-F\fR, \fB\-\-format=\fISTRING\fR Use \fISTRING\fR instead of the default format. See the section \fBFORMAT\fR, for a detailed discussion of the format syntax. If the \fISTRING\fR begins with a \fB@\fR, then this character is removed from it, and the resulting string is regarded as a name of the file to read. The file is read literally, except that lines beginning with a semicolon are ignored. .TP \fB\-f\fR, \fB\-\-file=\fIDIR\fR Look for database files in \fIDIR\fR. .TP \fB\-n\fR, \fB\-\-count=\fINUMBER\fR Show at most \fINUMBER\fR records. .PP Other options .TP \fB-h\fR, \fB\-\-help\fR Give this help list. .TP \fB\-\-usage\fR Give a short usage message. .TP \fB\-\-version\fR Print program version. .SH ENVIRONMENT .TP .B RUSHWHO_FORMAT When set, supplies a format string to use instead of the built-in format. If the value begins with a .B @ sign, rest of characters is treated as the name of file to read the format from, similarly to the \fB\-\-format\fR option, which see. .sp The precedence rule for format selection is: .RS .nr step 1 1 .IP \n[step]. The \fB\-\-format\fR option. .IP \n+[step]. The \fBRUSHWHO_FORMAT\fR environment variable. .IP \n+[step]. Built-in format. .SH FORMAT The format string supplied with the \fB\-F\fR (\fB\-\-format\fR) option controls the output of every record from the GNU Rush accounting database. It consists of the following classes of objects: .TP .I Ordinary characters These are copied to the output verbatim. .TP .I Escapes An escape is a backslash, followed by a single character. It is interpreted according to the following table: .sp .nf .ta 8n 20n .ul Sequence Replaced with \\a Audible bell character (ASCII 7) \\b Backspace character (ASCII 8) \\e Escape character (ASCII 27) \\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 \\\(dq A double-quote. .fi .sp Any escape not listed in the table above results in its second character being output. .TP .I Quoted strings Strings are delimited by single or double quotes. Within a string escape sequences are interpreted as described above. .TP .I Format specifications Format specification can be regarded as a kind of function, which outputs a particular piece of information from the database record. Syntactically, format specification starts with an opening brace and ends with a closing brace. The first word after the brace is the name of the specification. The rest of words are \fIpositional arguments\fR followed by \fIkeyword arguments\fR. Both are optional. A keyword argument begins with a colon. .PP The available format specifications are: .TP \fB(newline\fR [\fICOUNT\fR]\fB)\fR Causes the newline character to be output. If the optional \fIcount\fR is supplied, that many newlines will be printed .TP \fB(tab\fR [\fICOUNT\fR]\fB)\fR Advance to the next tab stop in the output stream. If optional \fICOUNT\fR is present, then skip that many tab stops. Each tab stop is eight characters long. .PP The following specifications output particular fields of a database record. They all take two positional arguments: \fIWIDTH\fR and \fITITLE\fR. .PP The first argument, \fIWIDTH\fR sets the maximum output length for this specification. If the number of characters actually output is less than the width, they will be padded with whitespace either to the left or to the right, depending on the presence of the \fB:right\fR keyword argument. If the number of characters is greater than \fIWIDTH\fR, they will be truncated to fit. If \fIWIDTH\fR is not given, the exact data are output as is. .PP The second argument, \fITITLE\fR, gives the title of this column for the heading line. By default no title is output. .PP Every field specification accepts at least two keyword arguments. The keyword \fB:right\fR may be used to request alignment to the right for the data. This keyword is ignored if \fIWIDTH\fR is not given. .PP The keyword \fB:empty\fR followed by a string causes the program to output that string if the resulting value for this specification would otherwise be empty. .TP \fB(user \fIWIDTH\fR \fITITLE\fR [\fB:empty\fR \fIREPL\fR][\fB:right\fR]\fB)\fR Print the user login name. .TP \fB(time \fIWIDTH\fR \fITITLE\fR [\fB:empty\fR \fIREPL\fR][\fB:right\fR][\fB:format\fI \fIDATE-FORMAT\fR]\fB)\fR Date and time when the session started. The word \fBstart\-time\fR can be used instead of \fBtime\fR. The \fB:format\fR keyword introduces the .BR strftime (3) format string to be used when converting the date for printing. The default value is \fB"%a %H:%M"\fR. .TP \fB(duration \fIWIDTH\fR \fITITLE\fR [\fB:empty\fR \fIREPL\fR][\fB:right\fR]\fB)\fR Total time of the session duration. .TP \fB(rule \fIWIDTH\fR \fITITLE\fR [\fB:right\fR]\fB)\fR The tag of the rule that was used to serve the user. .TP \fB(command \fIWIDTH\fR \fITITLE\fR [\fB:empty\fR \fIREPL\fR][\fB:right\fR]\fB)\fR Command line being executed. .TP \fB(pid \fIWIDTH\fR \fITITLE\fR [\fB:right\fR]\fB)\fR PID of the process. .PP For example, the following is the default format for .BR rushwho . It is written in a form, suitable for use in a file supplied with the .B \-\-format=@\fIFILE\fR option: .PP .EX (user 10 Login)" " (rule 8 Rule)" " (start-time 0 Start)" " (duration 9 Time)" " (pid 10 PID)" " (command 28 Command) .EE .SH SEE ALSO .BR rush (1), .BR rushwho (1). .SH AUTHORS Sergey Poznyakoff .SH "BUG REPORTS" Report bugs to . .SH COPYRIGHT Copyright \(co 2016 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: rush-2.4/doc/version.texi0000644000175000017500000000013014655401303015446 0ustar00graygray00000000000000@set UPDATED 9 July 2024 @set UPDATED-MONTH July 2024 @set EDITION 2.4 @set VERSION 2.4 rush-2.4/doc/rush.80000644000175000017500000001226714643176117014167 0ustar00graygray00000000000000.\" This file is part of GNU Rush. .\" Copyright (C) 2016-2024 Sergey Poznyakoff .\" .\" GNU Rush is free software; you can redistribute it and/or modify .\" it under the terms of the GNU General Public License as published by .\" the Free Software Foundation; either version 3, or (at your option) .\" any later version. .\" .\" GNU Rush is distributed in the hope that it will be useful, .\" but WITHOUT ANY WARRANTY; without even the implied warranty of .\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the .\" GNU General Public License for more details. .\" .\" You should have received a copy of the GNU General Public License .\" along with GNU Rush. If not, see . .TH RUSH 8 "May 15, 2019" "RUSH" "Rush User Reference" .SH NAME rush \- restricted user shell .SH SYNOPSIS \fBrush\fR\ [\fB\-htTx\fR]\ [\fB\-C\fR \fICHECK\fR]\ [\fB\-D\fR \fIATTR\fR[\fB,\fIATTR\fR...]]\ [\fB\-c\fR \fICOMMAND\fR]\ [\fB\-d\fR \fINUMBER\fR]\ [\fB\-i\fR]\ [\fB\-u\fR \fIUSER\fR]\ [\fB\-\-debug\fR \fINUMBER\fR]\ [\fB\-\-dump=\fIATTR\fR[\fB,\fIATTR\fR...]]\ [\fB\-\-help\fR]\ [\fB\-\-show\-default\fR]\ [\fB\-\-trace\fR]\ [\fB\-\-usage\fR]\ [\fB\-\-version\fR]\ [\fIFILE\fR] .SH NOTE This manpage is a short description of GNU \fBrush\fR. For a detailed discussion, including examples and usage recommendations, refer to the manual \fBGNU Rush -- a restricted user shell\fR, available in texinfo format. If the \fBinfo\fR reader and the rush documentation are properly installed on your system, the command .PP .RS +4 .B info rush .RE .PP should give you access to the complete manual. .PP You can also view the manual using the info mode in .BR emacs (1), or find it in various formats online at .PP .RS +4 .B http://www.gnu.org.ua/software/rush/manual .RE .PP If any discrepancies occur between this manpage and the \fBManual\fR, the later shall be considered the authoritative source. .SH DESCRIPTION GNU \fBrush\fR is a restricted user shell, designed for sites that provide limited remote access to their resources, such as svn or git repositories, scp, or the like. .PP Upon startup \fBrush\fR analyzes its command line and examines the set of configuration rules to determine what kind of access the user is to be granted. .SH OPTIONS .TP \fB\-c\fR \fICOMMAND\fR Execute \fICOMMAND\fR. .TP \fB\-C\fR, \fB\-\-security\-check=\fICHECK\fR Add or remove configuration security check. The argument is one of the following: .RS .TP .B all Enable all checks. .TP .B owner Check if the file is owned by root. .TP .BR iwgrp ", " groupwritablefile Check if the file is not group writable. .TP .BR iwoth ", " worldwritablefile Check if the file is not world writable. .TP .BR dir_iwgrp ", " groupwritabledir Check if the directory where the file resides is not group writable. .TP .BR dir_iwoth ", " worldwritabledir Check if the directory where the file resides is not world writable. .TP .BR link Check if the file is not a symbolic link to a file residing in a group or world writable directory. .RE .TP \fB\-d\fR, \fB\-\-debug=\fINUMBER\fR Set debugging level. The greater is the \fINUMBER\fR, the more verbose is the logging. The debugging information is reported via .BR syslog (3) using .BR authpriv, priority .BR debug . Maximum meaningful value for \fINUMBER\fR is \fB3\fR. .TP \fB\-D\fR, \fB\-\-dump=\fIATTR\fR[\fB,\fIATTR\fR...] Request dump mode. Arguments are the names of the attributes to be dumped, or the word .B all standing for all attributes. Refer to the GNU Rush manual for a detailed description. .TP .B \-i Emulate interactive access. Use this option to test whether and how does your configuration allow interactive access. .TP .B \-\-show\-default Show default configuration. .TP \fB\-t\fR, \fB\-\-test\fR, \fB\-\-lint Run in test mode. When this option is given, the following occurs: .RS .nr step 1 1 .IP \n[step]. All diagnostic messages are redirected to standard error, instead of syslog. .IP \n+[step]. If a single non-option argument is present, it is taken as a name of the configuration file to use. .IP \n+[step]. The configuration file is parsed. If parsing fails, the program exits with the code 1. .IP \n+[step]. If the \fB\-c\fR option is present, \fBrush\fR processes its argument as usual, except that the command itself is not executed. .RE .TP \fB\-T Test scanner mode. This option is used by the \fBrush\fR testsuite. .TP \fB\-u\fR, \fB\-\-user=\fINAME\fR Supplies user name for use with \fB\-\-test\fR. .TP \fB\-x\fR, \fB\-\-trace\fR Print parser traces. When used twice, print lexical scanner traces as well. This option is intended for debugging. .SH SEE ALSO .BR rush.rc (5), .BR rushlast (1), .BR rushwho (1). .SH AUTHORS Sergey Poznyakoff .SH "BUG REPORTS" Report bugs to . .SH COPYRIGHT Copyright \(co 2016-2019 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: rush-2.4/doc/Makefile.in0000644000175000017500000024311314655401220015143 0ustar00graygray00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # This file is part of GNU Rush. # Copyright (C) 2008-2024 Sergey Poznyakoff # # GNU Rush is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Rush is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Rush. If not, see . # This file is part of Imprimatur. # Copyright (C) 2006, 2007, 2010, 2011 Sergey Poznyakoff # # Imprimatur 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. # # Imprimatur is distributed in the hope that 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 Imprimatur. 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)/doc/imprimatur/imprimatur.m4 \ $(top_srcdir)/m4/00gnulib.m4 $(top_srcdir)/m4/__inline.m4 \ $(top_srcdir)/m4/absolute-header.m4 $(top_srcdir)/m4/alloca.m4 \ $(top_srcdir)/m4/assert_h.m4 $(top_srcdir)/m4/btowc.m4 \ $(top_srcdir)/m4/builtin-expect.m4 $(top_srcdir)/m4/c-bool.m4 \ $(top_srcdir)/m4/calloc.m4 $(top_srcdir)/m4/close.m4 \ $(top_srcdir)/m4/codeset.m4 \ $(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup2.m4 \ $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \ $(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \ $(top_srcdir)/m4/error_h.m4 $(top_srcdir)/m4/extensions.m4 \ $(top_srcdir)/m4/extern-inline.m4 $(top_srcdir)/m4/fcntl-o.m4 \ $(top_srcdir)/m4/fcntl.m4 $(top_srcdir)/m4/fcntl_h.m4 \ $(top_srcdir)/m4/flexmember.m4 $(top_srcdir)/m4/free.m4 \ $(top_srcdir)/m4/fstat.m4 $(top_srcdir)/m4/getdelim.m4 \ $(top_srcdir)/m4/getdtablesize.m4 $(top_srcdir)/m4/getline.m4 \ $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/getprogname.m4 \ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gnulib-common.m4 \ $(top_srcdir)/m4/gnulib-comp.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/include_next.m4 \ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/inttostr.m4 \ $(top_srcdir)/m4/inttypes.m4 $(top_srcdir)/m4/langinfo_h.m4 \ $(top_srcdir)/m4/largefile.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/limits-h.m4 $(top_srcdir)/m4/localcharset.m4 \ $(top_srcdir)/m4/locale-fr.m4 $(top_srcdir)/m4/locale-ja.m4 \ $(top_srcdir)/m4/locale-zh.m4 $(top_srcdir)/m4/locale_h.m4 \ $(top_srcdir)/m4/localeconv.m4 $(top_srcdir)/m4/lock.m4 \ $(top_srcdir)/m4/malloc.m4 $(top_srcdir)/m4/malloca.m4 \ $(top_srcdir)/m4/mbrtowc.m4 $(top_srcdir)/m4/mbsinit.m4 \ $(top_srcdir)/m4/mbstate_t.m4 $(top_srcdir)/m4/mbtowc.m4 \ $(top_srcdir)/m4/minmax.m4 $(top_srcdir)/m4/mktime.m4 \ $(top_srcdir)/m4/mode_t.m4 $(top_srcdir)/m4/msvc-inval.m4 \ $(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \ $(top_srcdir)/m4/musl.m4 $(top_srcdir)/m4/nl_langinfo.m4 \ $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/nocrash.m4 \ $(top_srcdir)/m4/nstrftime.m4 $(top_srcdir)/m4/off_t.m4 \ $(top_srcdir)/m4/open-cloexec.m4 \ $(top_srcdir)/m4/open-slash.m4 $(top_srcdir)/m4/open.m4 \ $(top_srcdir)/m4/pathmax.m4 $(top_srcdir)/m4/po.m4 \ $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/m4/pthread_rwlock_rdlock.m4 \ $(top_srcdir)/m4/realloc.m4 $(top_srcdir)/m4/reallocarray.m4 \ $(top_srcdir)/m4/regex.m4 $(top_srcdir)/m4/setenv.m4 \ $(top_srcdir)/m4/setlocale_null.m4 $(top_srcdir)/m4/ssize_t.m4 \ $(top_srcdir)/m4/stat-time.m4 $(top_srcdir)/m4/stat.m4 \ $(top_srcdir)/m4/stddef_h.m4 $(top_srcdir)/m4/stdint.m4 \ $(top_srcdir)/m4/stdio_h.m4 $(top_srcdir)/m4/stdlib_h.m4 \ $(top_srcdir)/m4/strerror.m4 $(top_srcdir)/m4/string_h.m4 \ $(top_srcdir)/m4/sys_socket_h.m4 \ $(top_srcdir)/m4/sys_stat_h.m4 $(top_srcdir)/m4/sys_types_h.m4 \ $(top_srcdir)/m4/threadlib.m4 $(top_srcdir)/m4/time_h.m4 \ $(top_srcdir)/m4/time_r.m4 $(top_srcdir)/m4/time_rz.m4 \ $(top_srcdir)/m4/timegm.m4 $(top_srcdir)/m4/tm_gmtoff.m4 \ $(top_srcdir)/m4/tzset.m4 $(top_srcdir)/m4/unistd_h.m4 \ $(top_srcdir)/m4/visibility.m4 $(top_srcdir)/m4/warn-on-use.m4 \ $(top_srcdir)/m4/wchar_h.m4 $(top_srcdir)/m4/wchar_t.m4 \ $(top_srcdir)/m4/wcrtomb.m4 $(top_srcdir)/m4/wctype_h.m4 \ $(top_srcdir)/m4/wint_t.m4 $(top_srcdir)/m4/xalloc.m4 \ $(top_srcdir)/m4/zzgnulib.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)/rush.info TEXINFO_TEX = $(top_srcdir)/build-aux/texinfo.tex am__TEXINFO_TEX_DIR = $(top_srcdir)/build-aux DVIS = rush.dvi PDFS = rush.pdf PSS = rush.ps HTMLS = rush.html TEXINFOS = rush.texi TEXI2PDF = $(TEXI2DVI) --pdf --batch MAKEINFOHTML = $(MAKEINFO) --html AM_MAKEINFOHTMLFLAGS = $(AM_MAKEINFOFLAGS) DVIPS = dvips 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__installdirs = "$(DESTDIR)$(infodir)" "$(DESTDIR)$(man1dir)" \ "$(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; }; \ } man1dir = $(mandir)/man1 man5dir = $(mandir)/man5 man8dir = $(mandir)/man8 NROFF = nroff MANS = $(dist_man_MANS) 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 distdir-am 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)` DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(dist_man_MANS) $(rush_TEXINFOS) \ $(srcdir)/Makefile.in $(srcdir)/imprimatur/imprimatur.mk \ $(top_srcdir)/build-aux/mdate-sh \ $(top_srcdir)/build-aux/texinfo.tex 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@ ALLOCA = @ALLOCA@ ALLOCA_H = @ALLOCA_H@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ ASSERT_H = @ASSERT_H@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOM4TE = @AUTOM4TE@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ GETOPT_H = @GETOPT_H@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GL_CFLAG_ALLOW_WARNINGS = @GL_CFLAG_ALLOW_WARNINGS@ GL_CFLAG_GNULIB_WARNINGS = @GL_CFLAG_GNULIB_WARNINGS@ GL_GNULIB_ACCESS = @GL_GNULIB_ACCESS@ GL_GNULIB_ALIGNED_ALLOC = @GL_GNULIB_ALIGNED_ALLOC@ GL_GNULIB_ATOLL = @GL_GNULIB_ATOLL@ GL_GNULIB_BTOWC = @GL_GNULIB_BTOWC@ GL_GNULIB_CALLOC_GNU = @GL_GNULIB_CALLOC_GNU@ GL_GNULIB_CALLOC_POSIX = @GL_GNULIB_CALLOC_POSIX@ GL_GNULIB_CANONICALIZE_FILE_NAME = @GL_GNULIB_CANONICALIZE_FILE_NAME@ GL_GNULIB_CHDIR = @GL_GNULIB_CHDIR@ GL_GNULIB_CHMOD = @GL_GNULIB_CHMOD@ GL_GNULIB_CHOWN = @GL_GNULIB_CHOWN@ GL_GNULIB_CLOSE = @GL_GNULIB_CLOSE@ GL_GNULIB_COPY_FILE_RANGE = @GL_GNULIB_COPY_FILE_RANGE@ GL_GNULIB_CREAT = @GL_GNULIB_CREAT@ GL_GNULIB_CTIME = @GL_GNULIB_CTIME@ GL_GNULIB_DPRINTF = @GL_GNULIB_DPRINTF@ GL_GNULIB_DUP = @GL_GNULIB_DUP@ GL_GNULIB_DUP2 = @GL_GNULIB_DUP2@ GL_GNULIB_DUP3 = @GL_GNULIB_DUP3@ GL_GNULIB_DUPLOCALE = @GL_GNULIB_DUPLOCALE@ GL_GNULIB_ENVIRON = @GL_GNULIB_ENVIRON@ GL_GNULIB_EUIDACCESS = @GL_GNULIB_EUIDACCESS@ GL_GNULIB_EXECL = @GL_GNULIB_EXECL@ GL_GNULIB_EXECLE = @GL_GNULIB_EXECLE@ GL_GNULIB_EXECLP = @GL_GNULIB_EXECLP@ GL_GNULIB_EXECV = @GL_GNULIB_EXECV@ GL_GNULIB_EXECVE = @GL_GNULIB_EXECVE@ GL_GNULIB_EXECVP = @GL_GNULIB_EXECVP@ GL_GNULIB_EXECVPE = @GL_GNULIB_EXECVPE@ GL_GNULIB_EXPLICIT_BZERO = @GL_GNULIB_EXPLICIT_BZERO@ GL_GNULIB_FACCESSAT = @GL_GNULIB_FACCESSAT@ GL_GNULIB_FCHDIR = @GL_GNULIB_FCHDIR@ GL_GNULIB_FCHMODAT = @GL_GNULIB_FCHMODAT@ GL_GNULIB_FCHOWNAT = @GL_GNULIB_FCHOWNAT@ GL_GNULIB_FCLOSE = @GL_GNULIB_FCLOSE@ GL_GNULIB_FCNTL = @GL_GNULIB_FCNTL@ GL_GNULIB_FDATASYNC = @GL_GNULIB_FDATASYNC@ GL_GNULIB_FDOPEN = @GL_GNULIB_FDOPEN@ GL_GNULIB_FFLUSH = @GL_GNULIB_FFLUSH@ GL_GNULIB_FFSL = @GL_GNULIB_FFSL@ GL_GNULIB_FFSLL = @GL_GNULIB_FFSLL@ GL_GNULIB_FGETC = @GL_GNULIB_FGETC@ GL_GNULIB_FGETS = @GL_GNULIB_FGETS@ GL_GNULIB_FOPEN = @GL_GNULIB_FOPEN@ GL_GNULIB_FOPEN_GNU = @GL_GNULIB_FOPEN_GNU@ GL_GNULIB_FPRINTF = @GL_GNULIB_FPRINTF@ GL_GNULIB_FPRINTF_POSIX = @GL_GNULIB_FPRINTF_POSIX@ GL_GNULIB_FPURGE = @GL_GNULIB_FPURGE@ GL_GNULIB_FPUTC = @GL_GNULIB_FPUTC@ GL_GNULIB_FPUTS = @GL_GNULIB_FPUTS@ GL_GNULIB_FREAD = @GL_GNULIB_FREAD@ GL_GNULIB_FREE_POSIX = @GL_GNULIB_FREE_POSIX@ GL_GNULIB_FREOPEN = @GL_GNULIB_FREOPEN@ GL_GNULIB_FSCANF = @GL_GNULIB_FSCANF@ GL_GNULIB_FSEEK = @GL_GNULIB_FSEEK@ GL_GNULIB_FSEEKO = @GL_GNULIB_FSEEKO@ GL_GNULIB_FSTAT = @GL_GNULIB_FSTAT@ GL_GNULIB_FSTATAT = @GL_GNULIB_FSTATAT@ GL_GNULIB_FSYNC = @GL_GNULIB_FSYNC@ GL_GNULIB_FTELL = @GL_GNULIB_FTELL@ GL_GNULIB_FTELLO = @GL_GNULIB_FTELLO@ GL_GNULIB_FTRUNCATE = @GL_GNULIB_FTRUNCATE@ GL_GNULIB_FUTIMENS = @GL_GNULIB_FUTIMENS@ GL_GNULIB_FWRITE = @GL_GNULIB_FWRITE@ GL_GNULIB_GETC = @GL_GNULIB_GETC@ GL_GNULIB_GETCHAR = @GL_GNULIB_GETCHAR@ GL_GNULIB_GETCWD = @GL_GNULIB_GETCWD@ GL_GNULIB_GETDELIM = @GL_GNULIB_GETDELIM@ GL_GNULIB_GETDOMAINNAME = @GL_GNULIB_GETDOMAINNAME@ GL_GNULIB_GETDTABLESIZE = @GL_GNULIB_GETDTABLESIZE@ GL_GNULIB_GETENTROPY = @GL_GNULIB_GETENTROPY@ GL_GNULIB_GETGROUPS = @GL_GNULIB_GETGROUPS@ GL_GNULIB_GETHOSTNAME = @GL_GNULIB_GETHOSTNAME@ GL_GNULIB_GETLINE = @GL_GNULIB_GETLINE@ GL_GNULIB_GETLOADAVG = @GL_GNULIB_GETLOADAVG@ GL_GNULIB_GETLOGIN = @GL_GNULIB_GETLOGIN@ GL_GNULIB_GETLOGIN_R = @GL_GNULIB_GETLOGIN_R@ GL_GNULIB_GETOPT_POSIX = @GL_GNULIB_GETOPT_POSIX@ GL_GNULIB_GETPAGESIZE = @GL_GNULIB_GETPAGESIZE@ GL_GNULIB_GETPASS = @GL_GNULIB_GETPASS@ GL_GNULIB_GETPASS_GNU = @GL_GNULIB_GETPASS_GNU@ GL_GNULIB_GETPROGNAME = @GL_GNULIB_GETPROGNAME@ GL_GNULIB_GETSUBOPT = @GL_GNULIB_GETSUBOPT@ GL_GNULIB_GETUMASK = @GL_GNULIB_GETUMASK@ GL_GNULIB_GETUSERSHELL = @GL_GNULIB_GETUSERSHELL@ GL_GNULIB_GRANTPT = @GL_GNULIB_GRANTPT@ GL_GNULIB_GROUP_MEMBER = @GL_GNULIB_GROUP_MEMBER@ GL_GNULIB_IMAXABS = @GL_GNULIB_IMAXABS@ GL_GNULIB_IMAXDIV = @GL_GNULIB_IMAXDIV@ GL_GNULIB_ISATTY = @GL_GNULIB_ISATTY@ GL_GNULIB_ISWBLANK = @GL_GNULIB_ISWBLANK@ GL_GNULIB_ISWCTYPE = @GL_GNULIB_ISWCTYPE@ GL_GNULIB_ISWDIGIT = @GL_GNULIB_ISWDIGIT@ GL_GNULIB_ISWXDIGIT = @GL_GNULIB_ISWXDIGIT@ GL_GNULIB_LCHMOD = @GL_GNULIB_LCHMOD@ GL_GNULIB_LCHOWN = @GL_GNULIB_LCHOWN@ GL_GNULIB_LINK = @GL_GNULIB_LINK@ GL_GNULIB_LINKAT = @GL_GNULIB_LINKAT@ GL_GNULIB_LOCALECONV = @GL_GNULIB_LOCALECONV@ GL_GNULIB_LOCALENAME = @GL_GNULIB_LOCALENAME@ GL_GNULIB_LOCALTIME = @GL_GNULIB_LOCALTIME@ GL_GNULIB_LSEEK = @GL_GNULIB_LSEEK@ GL_GNULIB_LSTAT = @GL_GNULIB_LSTAT@ GL_GNULIB_MALLOC_GNU = @GL_GNULIB_MALLOC_GNU@ GL_GNULIB_MALLOC_POSIX = @GL_GNULIB_MALLOC_POSIX@ GL_GNULIB_MBRLEN = @GL_GNULIB_MBRLEN@ GL_GNULIB_MBRTOWC = @GL_GNULIB_MBRTOWC@ GL_GNULIB_MBSCASECMP = @GL_GNULIB_MBSCASECMP@ GL_GNULIB_MBSCASESTR = @GL_GNULIB_MBSCASESTR@ GL_GNULIB_MBSCHR = @GL_GNULIB_MBSCHR@ GL_GNULIB_MBSCSPN = @GL_GNULIB_MBSCSPN@ GL_GNULIB_MBSINIT = @GL_GNULIB_MBSINIT@ GL_GNULIB_MBSLEN = @GL_GNULIB_MBSLEN@ GL_GNULIB_MBSNCASECMP = @GL_GNULIB_MBSNCASECMP@ GL_GNULIB_MBSNLEN = @GL_GNULIB_MBSNLEN@ GL_GNULIB_MBSNRTOWCS = @GL_GNULIB_MBSNRTOWCS@ GL_GNULIB_MBSPBRK = @GL_GNULIB_MBSPBRK@ GL_GNULIB_MBSPCASECMP = @GL_GNULIB_MBSPCASECMP@ GL_GNULIB_MBSRCHR = @GL_GNULIB_MBSRCHR@ GL_GNULIB_MBSRTOWCS = @GL_GNULIB_MBSRTOWCS@ GL_GNULIB_MBSSEP = @GL_GNULIB_MBSSEP@ GL_GNULIB_MBSSPN = @GL_GNULIB_MBSSPN@ GL_GNULIB_MBSSTR = @GL_GNULIB_MBSSTR@ GL_GNULIB_MBSTOK_R = @GL_GNULIB_MBSTOK_R@ GL_GNULIB_MBSTOWCS = @GL_GNULIB_MBSTOWCS@ GL_GNULIB_MBTOWC = @GL_GNULIB_MBTOWC@ GL_GNULIB_MDA_ACCESS = @GL_GNULIB_MDA_ACCESS@ GL_GNULIB_MDA_CHDIR = @GL_GNULIB_MDA_CHDIR@ GL_GNULIB_MDA_CHMOD = @GL_GNULIB_MDA_CHMOD@ GL_GNULIB_MDA_CLOSE = @GL_GNULIB_MDA_CLOSE@ GL_GNULIB_MDA_CREAT = @GL_GNULIB_MDA_CREAT@ GL_GNULIB_MDA_DUP = @GL_GNULIB_MDA_DUP@ GL_GNULIB_MDA_DUP2 = @GL_GNULIB_MDA_DUP2@ GL_GNULIB_MDA_ECVT = @GL_GNULIB_MDA_ECVT@ GL_GNULIB_MDA_EXECL = @GL_GNULIB_MDA_EXECL@ GL_GNULIB_MDA_EXECLE = @GL_GNULIB_MDA_EXECLE@ GL_GNULIB_MDA_EXECLP = @GL_GNULIB_MDA_EXECLP@ GL_GNULIB_MDA_EXECV = @GL_GNULIB_MDA_EXECV@ GL_GNULIB_MDA_EXECVE = @GL_GNULIB_MDA_EXECVE@ GL_GNULIB_MDA_EXECVP = @GL_GNULIB_MDA_EXECVP@ GL_GNULIB_MDA_EXECVPE = @GL_GNULIB_MDA_EXECVPE@ GL_GNULIB_MDA_FCLOSEALL = @GL_GNULIB_MDA_FCLOSEALL@ GL_GNULIB_MDA_FCVT = @GL_GNULIB_MDA_FCVT@ GL_GNULIB_MDA_FDOPEN = @GL_GNULIB_MDA_FDOPEN@ GL_GNULIB_MDA_FILENO = @GL_GNULIB_MDA_FILENO@ GL_GNULIB_MDA_GCVT = @GL_GNULIB_MDA_GCVT@ GL_GNULIB_MDA_GETCWD = @GL_GNULIB_MDA_GETCWD@ GL_GNULIB_MDA_GETPID = @GL_GNULIB_MDA_GETPID@ GL_GNULIB_MDA_GETW = @GL_GNULIB_MDA_GETW@ GL_GNULIB_MDA_ISATTY = @GL_GNULIB_MDA_ISATTY@ GL_GNULIB_MDA_LSEEK = @GL_GNULIB_MDA_LSEEK@ GL_GNULIB_MDA_MEMCCPY = @GL_GNULIB_MDA_MEMCCPY@ GL_GNULIB_MDA_MKDIR = @GL_GNULIB_MDA_MKDIR@ GL_GNULIB_MDA_MKTEMP = @GL_GNULIB_MDA_MKTEMP@ GL_GNULIB_MDA_OPEN = @GL_GNULIB_MDA_OPEN@ GL_GNULIB_MDA_PUTENV = @GL_GNULIB_MDA_PUTENV@ GL_GNULIB_MDA_PUTW = @GL_GNULIB_MDA_PUTW@ GL_GNULIB_MDA_READ = @GL_GNULIB_MDA_READ@ GL_GNULIB_MDA_RMDIR = @GL_GNULIB_MDA_RMDIR@ GL_GNULIB_MDA_STRDUP = @GL_GNULIB_MDA_STRDUP@ GL_GNULIB_MDA_SWAB = @GL_GNULIB_MDA_SWAB@ GL_GNULIB_MDA_TEMPNAM = @GL_GNULIB_MDA_TEMPNAM@ GL_GNULIB_MDA_TZSET = @GL_GNULIB_MDA_TZSET@ GL_GNULIB_MDA_UMASK = @GL_GNULIB_MDA_UMASK@ GL_GNULIB_MDA_UNLINK = @GL_GNULIB_MDA_UNLINK@ GL_GNULIB_MDA_WCSDUP = @GL_GNULIB_MDA_WCSDUP@ GL_GNULIB_MDA_WRITE = @GL_GNULIB_MDA_WRITE@ GL_GNULIB_MEMCHR = @GL_GNULIB_MEMCHR@ GL_GNULIB_MEMMEM = @GL_GNULIB_MEMMEM@ GL_GNULIB_MEMPCPY = @GL_GNULIB_MEMPCPY@ GL_GNULIB_MEMRCHR = @GL_GNULIB_MEMRCHR@ GL_GNULIB_MEMSET_EXPLICIT = @GL_GNULIB_MEMSET_EXPLICIT@ GL_GNULIB_MKDIR = @GL_GNULIB_MKDIR@ GL_GNULIB_MKDIRAT = @GL_GNULIB_MKDIRAT@ GL_GNULIB_MKDTEMP = @GL_GNULIB_MKDTEMP@ GL_GNULIB_MKFIFO = @GL_GNULIB_MKFIFO@ GL_GNULIB_MKFIFOAT = @GL_GNULIB_MKFIFOAT@ GL_GNULIB_MKNOD = @GL_GNULIB_MKNOD@ GL_GNULIB_MKNODAT = @GL_GNULIB_MKNODAT@ GL_GNULIB_MKOSTEMP = @GL_GNULIB_MKOSTEMP@ GL_GNULIB_MKOSTEMPS = @GL_GNULIB_MKOSTEMPS@ GL_GNULIB_MKSTEMP = @GL_GNULIB_MKSTEMP@ GL_GNULIB_MKSTEMPS = @GL_GNULIB_MKSTEMPS@ GL_GNULIB_MKTIME = @GL_GNULIB_MKTIME@ GL_GNULIB_NANOSLEEP = @GL_GNULIB_NANOSLEEP@ GL_GNULIB_NL_LANGINFO = @GL_GNULIB_NL_LANGINFO@ GL_GNULIB_NONBLOCKING = @GL_GNULIB_NONBLOCKING@ GL_GNULIB_OBSTACK_PRINTF = @GL_GNULIB_OBSTACK_PRINTF@ GL_GNULIB_OBSTACK_PRINTF_POSIX = @GL_GNULIB_OBSTACK_PRINTF_POSIX@ GL_GNULIB_OPEN = @GL_GNULIB_OPEN@ GL_GNULIB_OPENAT = @GL_GNULIB_OPENAT@ GL_GNULIB_OVERRIDES_STRUCT_STAT = @GL_GNULIB_OVERRIDES_STRUCT_STAT@ GL_GNULIB_PCLOSE = @GL_GNULIB_PCLOSE@ GL_GNULIB_PERROR = @GL_GNULIB_PERROR@ GL_GNULIB_PIPE = @GL_GNULIB_PIPE@ GL_GNULIB_PIPE2 = @GL_GNULIB_PIPE2@ GL_GNULIB_POPEN = @GL_GNULIB_POPEN@ GL_GNULIB_POSIX_MEMALIGN = @GL_GNULIB_POSIX_MEMALIGN@ GL_GNULIB_POSIX_OPENPT = @GL_GNULIB_POSIX_OPENPT@ GL_GNULIB_PREAD = @GL_GNULIB_PREAD@ GL_GNULIB_PRINTF = @GL_GNULIB_PRINTF@ GL_GNULIB_PRINTF_POSIX = @GL_GNULIB_PRINTF_POSIX@ GL_GNULIB_PTSNAME = @GL_GNULIB_PTSNAME@ GL_GNULIB_PTSNAME_R = @GL_GNULIB_PTSNAME_R@ GL_GNULIB_PUTC = @GL_GNULIB_PUTC@ GL_GNULIB_PUTCHAR = @GL_GNULIB_PUTCHAR@ GL_GNULIB_PUTENV = @GL_GNULIB_PUTENV@ GL_GNULIB_PUTS = @GL_GNULIB_PUTS@ GL_GNULIB_PWRITE = @GL_GNULIB_PWRITE@ GL_GNULIB_QSORT_R = @GL_GNULIB_QSORT_R@ GL_GNULIB_RANDOM = @GL_GNULIB_RANDOM@ GL_GNULIB_RANDOM_R = @GL_GNULIB_RANDOM_R@ GL_GNULIB_RAWMEMCHR = @GL_GNULIB_RAWMEMCHR@ GL_GNULIB_READ = @GL_GNULIB_READ@ GL_GNULIB_READLINK = @GL_GNULIB_READLINK@ GL_GNULIB_READLINKAT = @GL_GNULIB_READLINKAT@ GL_GNULIB_REALLOCARRAY = @GL_GNULIB_REALLOCARRAY@ GL_GNULIB_REALLOC_GNU = @GL_GNULIB_REALLOC_GNU@ GL_GNULIB_REALLOC_POSIX = @GL_GNULIB_REALLOC_POSIX@ GL_GNULIB_REALPATH = @GL_GNULIB_REALPATH@ GL_GNULIB_REMOVE = @GL_GNULIB_REMOVE@ GL_GNULIB_RENAME = @GL_GNULIB_RENAME@ GL_GNULIB_RENAMEAT = @GL_GNULIB_RENAMEAT@ GL_GNULIB_RMDIR = @GL_GNULIB_RMDIR@ GL_GNULIB_RPMATCH = @GL_GNULIB_RPMATCH@ GL_GNULIB_SCANF = @GL_GNULIB_SCANF@ GL_GNULIB_SECURE_GETENV = @GL_GNULIB_SECURE_GETENV@ GL_GNULIB_SETENV = @GL_GNULIB_SETENV@ GL_GNULIB_SETHOSTNAME = @GL_GNULIB_SETHOSTNAME@ GL_GNULIB_SETLOCALE = @GL_GNULIB_SETLOCALE@ GL_GNULIB_SETLOCALE_NULL = @GL_GNULIB_SETLOCALE_NULL@ GL_GNULIB_SIGABBREV_NP = @GL_GNULIB_SIGABBREV_NP@ GL_GNULIB_SIGDESCR_NP = @GL_GNULIB_SIGDESCR_NP@ GL_GNULIB_SLEEP = @GL_GNULIB_SLEEP@ GL_GNULIB_SNPRINTF = @GL_GNULIB_SNPRINTF@ GL_GNULIB_SPRINTF_POSIX = @GL_GNULIB_SPRINTF_POSIX@ GL_GNULIB_STAT = @GL_GNULIB_STAT@ GL_GNULIB_STDIO_H_NONBLOCKING = @GL_GNULIB_STDIO_H_NONBLOCKING@ GL_GNULIB_STDIO_H_SIGPIPE = @GL_GNULIB_STDIO_H_SIGPIPE@ GL_GNULIB_STPCPY = @GL_GNULIB_STPCPY@ GL_GNULIB_STPNCPY = @GL_GNULIB_STPNCPY@ GL_GNULIB_STRCASESTR = @GL_GNULIB_STRCASESTR@ GL_GNULIB_STRCHRNUL = @GL_GNULIB_STRCHRNUL@ GL_GNULIB_STRDUP = @GL_GNULIB_STRDUP@ GL_GNULIB_STRERROR = @GL_GNULIB_STRERROR@ GL_GNULIB_STRERRORNAME_NP = @GL_GNULIB_STRERRORNAME_NP@ GL_GNULIB_STRERROR_R = @GL_GNULIB_STRERROR_R@ GL_GNULIB_STRFTIME = @GL_GNULIB_STRFTIME@ GL_GNULIB_STRNCAT = @GL_GNULIB_STRNCAT@ GL_GNULIB_STRNDUP = @GL_GNULIB_STRNDUP@ GL_GNULIB_STRNLEN = @GL_GNULIB_STRNLEN@ GL_GNULIB_STRPBRK = @GL_GNULIB_STRPBRK@ GL_GNULIB_STRPTIME = @GL_GNULIB_STRPTIME@ GL_GNULIB_STRSEP = @GL_GNULIB_STRSEP@ GL_GNULIB_STRSIGNAL = @GL_GNULIB_STRSIGNAL@ GL_GNULIB_STRSTR = @GL_GNULIB_STRSTR@ GL_GNULIB_STRTOD = @GL_GNULIB_STRTOD@ GL_GNULIB_STRTOIMAX = @GL_GNULIB_STRTOIMAX@ GL_GNULIB_STRTOK_R = @GL_GNULIB_STRTOK_R@ GL_GNULIB_STRTOL = @GL_GNULIB_STRTOL@ GL_GNULIB_STRTOLD = @GL_GNULIB_STRTOLD@ GL_GNULIB_STRTOLL = @GL_GNULIB_STRTOLL@ GL_GNULIB_STRTOUL = @GL_GNULIB_STRTOUL@ GL_GNULIB_STRTOULL = @GL_GNULIB_STRTOULL@ GL_GNULIB_STRTOUMAX = @GL_GNULIB_STRTOUMAX@ GL_GNULIB_STRVERSCMP = @GL_GNULIB_STRVERSCMP@ GL_GNULIB_SYMLINK = @GL_GNULIB_SYMLINK@ GL_GNULIB_SYMLINKAT = @GL_GNULIB_SYMLINKAT@ GL_GNULIB_SYSTEM_POSIX = @GL_GNULIB_SYSTEM_POSIX@ GL_GNULIB_TIME = @GL_GNULIB_TIME@ GL_GNULIB_TIMEGM = @GL_GNULIB_TIMEGM@ GL_GNULIB_TIMESPEC_GET = @GL_GNULIB_TIMESPEC_GET@ GL_GNULIB_TIMESPEC_GETRES = @GL_GNULIB_TIMESPEC_GETRES@ GL_GNULIB_TIME_R = @GL_GNULIB_TIME_R@ GL_GNULIB_TIME_RZ = @GL_GNULIB_TIME_RZ@ GL_GNULIB_TMPFILE = @GL_GNULIB_TMPFILE@ GL_GNULIB_TOWCTRANS = @GL_GNULIB_TOWCTRANS@ GL_GNULIB_TRUNCATE = @GL_GNULIB_TRUNCATE@ GL_GNULIB_TTYNAME_R = @GL_GNULIB_TTYNAME_R@ GL_GNULIB_TZSET = @GL_GNULIB_TZSET@ GL_GNULIB_UNISTD_H_GETOPT = @GL_GNULIB_UNISTD_H_GETOPT@ GL_GNULIB_UNISTD_H_NONBLOCKING = @GL_GNULIB_UNISTD_H_NONBLOCKING@ GL_GNULIB_UNISTD_H_SIGPIPE = @GL_GNULIB_UNISTD_H_SIGPIPE@ GL_GNULIB_UNLINK = @GL_GNULIB_UNLINK@ GL_GNULIB_UNLINKAT = @GL_GNULIB_UNLINKAT@ GL_GNULIB_UNLOCKPT = @GL_GNULIB_UNLOCKPT@ GL_GNULIB_UNSETENV = @GL_GNULIB_UNSETENV@ GL_GNULIB_USLEEP = @GL_GNULIB_USLEEP@ GL_GNULIB_UTIMENSAT = @GL_GNULIB_UTIMENSAT@ GL_GNULIB_VASPRINTF = @GL_GNULIB_VASPRINTF@ GL_GNULIB_VDPRINTF = @GL_GNULIB_VDPRINTF@ GL_GNULIB_VFPRINTF = @GL_GNULIB_VFPRINTF@ GL_GNULIB_VFPRINTF_POSIX = @GL_GNULIB_VFPRINTF_POSIX@ GL_GNULIB_VFSCANF = @GL_GNULIB_VFSCANF@ GL_GNULIB_VPRINTF = @GL_GNULIB_VPRINTF@ GL_GNULIB_VPRINTF_POSIX = @GL_GNULIB_VPRINTF_POSIX@ GL_GNULIB_VSCANF = @GL_GNULIB_VSCANF@ GL_GNULIB_VSNPRINTF = @GL_GNULIB_VSNPRINTF@ GL_GNULIB_VSPRINTF_POSIX = @GL_GNULIB_VSPRINTF_POSIX@ GL_GNULIB_WCPCPY = @GL_GNULIB_WCPCPY@ GL_GNULIB_WCPNCPY = @GL_GNULIB_WCPNCPY@ GL_GNULIB_WCRTOMB = @GL_GNULIB_WCRTOMB@ GL_GNULIB_WCSCASECMP = @GL_GNULIB_WCSCASECMP@ GL_GNULIB_WCSCAT = @GL_GNULIB_WCSCAT@ GL_GNULIB_WCSCHR = @GL_GNULIB_WCSCHR@ GL_GNULIB_WCSCMP = @GL_GNULIB_WCSCMP@ GL_GNULIB_WCSCOLL = @GL_GNULIB_WCSCOLL@ GL_GNULIB_WCSCPY = @GL_GNULIB_WCSCPY@ GL_GNULIB_WCSCSPN = @GL_GNULIB_WCSCSPN@ GL_GNULIB_WCSDUP = @GL_GNULIB_WCSDUP@ GL_GNULIB_WCSFTIME = @GL_GNULIB_WCSFTIME@ GL_GNULIB_WCSLEN = @GL_GNULIB_WCSLEN@ GL_GNULIB_WCSNCASECMP = @GL_GNULIB_WCSNCASECMP@ GL_GNULIB_WCSNCAT = @GL_GNULIB_WCSNCAT@ GL_GNULIB_WCSNCMP = @GL_GNULIB_WCSNCMP@ GL_GNULIB_WCSNCPY = @GL_GNULIB_WCSNCPY@ GL_GNULIB_WCSNLEN = @GL_GNULIB_WCSNLEN@ GL_GNULIB_WCSNRTOMBS = @GL_GNULIB_WCSNRTOMBS@ GL_GNULIB_WCSPBRK = @GL_GNULIB_WCSPBRK@ GL_GNULIB_WCSRCHR = @GL_GNULIB_WCSRCHR@ GL_GNULIB_WCSRTOMBS = @GL_GNULIB_WCSRTOMBS@ GL_GNULIB_WCSSPN = @GL_GNULIB_WCSSPN@ GL_GNULIB_WCSSTR = @GL_GNULIB_WCSSTR@ GL_GNULIB_WCSTOK = @GL_GNULIB_WCSTOK@ GL_GNULIB_WCSWIDTH = @GL_GNULIB_WCSWIDTH@ GL_GNULIB_WCSXFRM = @GL_GNULIB_WCSXFRM@ GL_GNULIB_WCTOB = @GL_GNULIB_WCTOB@ GL_GNULIB_WCTOMB = @GL_GNULIB_WCTOMB@ GL_GNULIB_WCTRANS = @GL_GNULIB_WCTRANS@ GL_GNULIB_WCTYPE = @GL_GNULIB_WCTYPE@ GL_GNULIB_WCWIDTH = @GL_GNULIB_WCWIDTH@ GL_GNULIB_WMEMCHR = @GL_GNULIB_WMEMCHR@ GL_GNULIB_WMEMCMP = @GL_GNULIB_WMEMCMP@ GL_GNULIB_WMEMCPY = @GL_GNULIB_WMEMCPY@ GL_GNULIB_WMEMMOVE = @GL_GNULIB_WMEMMOVE@ GL_GNULIB_WMEMPCPY = @GL_GNULIB_WMEMPCPY@ GL_GNULIB_WMEMSET = @GL_GNULIB_WMEMSET@ GL_GNULIB_WRITE = @GL_GNULIB_WRITE@ GL_GNULIB__EXIT = @GL_GNULIB__EXIT@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GNULIBHEADERS_OVERRIDE_WINT_T = @GNULIBHEADERS_OVERRIDE_WINT_T@ GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@ GREP = @GREP@ HARD_LOCALE_LIB = @HARD_LOCALE_LIB@ HAVE_ALIGNED_ALLOC = @HAVE_ALIGNED_ALLOC@ HAVE_ALLOCA_H = @HAVE_ALLOCA_H@ HAVE_ATOLL = @HAVE_ATOLL@ HAVE_BTOWC = @HAVE_BTOWC@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_COPY_FILE_RANGE = @HAVE_COPY_FILE_RANGE@ HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ HAVE_DECL_ECVT = @HAVE_DECL_ECVT@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_EXECVPE = @HAVE_DECL_EXECVPE@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FCLOSEALL = @HAVE_DECL_FCLOSEALL@ HAVE_DECL_FCVT = @HAVE_DECL_FCVT@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GCVT = @HAVE_DECL_GCVT@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_GETW = @HAVE_DECL_GETW@ HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@ HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_PROGRAM_INVOCATION_NAME = @HAVE_DECL_PROGRAM_INVOCATION_NAME@ HAVE_DECL_PUTW = @HAVE_DECL_PUTW@ HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DECL_WCSDUP = @HAVE_DECL_WCSDUP@ HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ HAVE_ERROR = @HAVE_ERROR@ HAVE_ERROR_AT_LINE = @HAVE_ERROR_AT_LINE@ HAVE_ERROR_H = @HAVE_ERROR_H@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_EXECVPE = @HAVE_EXECVPE@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHMODAT = @HAVE_FCHMODAT@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FCNTL = @HAVE_FCNTL@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FEATURES_H = @HAVE_FEATURES_H@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FREELOCALE = @HAVE_FREELOCALE@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSTATAT = @HAVE_FSTATAT@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_FUTIMENS = @HAVE_FUTIMENS@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETENTROPY = @HAVE_GETENTROPY@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GETPASS = @HAVE_GETPASS@ HAVE_GETPROGNAME = @HAVE_GETPROGNAME@ HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ HAVE_GETUMASK = @HAVE_GETUMASK@ HAVE_GRANTPT = @HAVE_GRANTPT@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_IMAXABS = @HAVE_IMAXABS@ HAVE_IMAXDIV = @HAVE_IMAXDIV@ HAVE_IMAXDIV_T = @HAVE_IMAXDIV_T@ HAVE_INITSTATE = @HAVE_INITSTATE@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_ISWBLANK = @HAVE_ISWBLANK@ HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ HAVE_LANGINFO_ALTMON = @HAVE_LANGINFO_ALTMON@ HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ HAVE_LCHMOD = @HAVE_LCHMOD@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_LSTAT = @HAVE_LSTAT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBRLEN = @HAVE_MBRLEN@ HAVE_MBRTOWC = @HAVE_MBRTOWC@ HAVE_MBSINIT = @HAVE_MBSINIT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ HAVE_MBTOWC = @HAVE_MBTOWC@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MEMSET_EXPLICIT = @HAVE_MEMSET_EXPLICIT@ HAVE_MKDIRAT = @HAVE_MKDIRAT@ HAVE_MKDTEMP = @HAVE_MKDTEMP@ HAVE_MKFIFO = @HAVE_MKFIFO@ HAVE_MKFIFOAT = @HAVE_MKFIFOAT@ HAVE_MKNOD = @HAVE_MKNOD@ HAVE_MKNODAT = @HAVE_MKNODAT@ HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ HAVE_MKSTEMP = @HAVE_MKSTEMP@ HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ HAVE_NEWLOCALE = @HAVE_NEWLOCALE@ HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ HAVE_OPENAT = @HAVE_OPENAT@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_POSIX_MEMALIGN = @HAVE_POSIX_MEMALIGN@ HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PTSNAME = @HAVE_PTSNAME@ HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_QSORT_R = @HAVE_QSORT_R@ HAVE_RANDOM = @HAVE_RANDOM@ HAVE_RANDOM_H = @HAVE_RANDOM_H@ HAVE_RANDOM_R = @HAVE_RANDOM_R@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ HAVE_REALPATH = @HAVE_REALPATH@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_RPMATCH = @HAVE_RPMATCH@ HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ HAVE_SETENV = @HAVE_SETENV@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SETSTATE = @HAVE_SETSTATE@ HAVE_SIGABBREV_NP = @HAVE_SIGABBREV_NP@ HAVE_SIGDESCR_NP = @HAVE_SIGDESCR_NP@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRERRORNAME_NP = @HAVE_STRERRORNAME_NP@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRPTIME = @HAVE_STRPTIME@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRTOD = @HAVE_STRTOD@ HAVE_STRTOL = @HAVE_STRTOL@ HAVE_STRTOLD = @HAVE_STRTOLD@ HAVE_STRTOLL = @HAVE_STRTOLL@ HAVE_STRTOUL = @HAVE_STRTOUL@ HAVE_STRTOULL = @HAVE_STRTOULL@ HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_TIMEGM = @HAVE_TIMEGM@ HAVE_TIMESPEC_GET = @HAVE_TIMESPEC_GET@ HAVE_TIMESPEC_GETRES = @HAVE_TIMESPEC_GETRES@ HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WCPCPY = @HAVE_WCPCPY@ HAVE_WCPNCPY = @HAVE_WCPNCPY@ HAVE_WCRTOMB = @HAVE_WCRTOMB@ HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ HAVE_WCSCAT = @HAVE_WCSCAT@ HAVE_WCSCHR = @HAVE_WCSCHR@ HAVE_WCSCMP = @HAVE_WCSCMP@ HAVE_WCSCOLL = @HAVE_WCSCOLL@ HAVE_WCSCPY = @HAVE_WCSCPY@ HAVE_WCSCSPN = @HAVE_WCSCSPN@ HAVE_WCSDUP = @HAVE_WCSDUP@ HAVE_WCSFTIME = @HAVE_WCSFTIME@ HAVE_WCSLEN = @HAVE_WCSLEN@ HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ HAVE_WCSNCAT = @HAVE_WCSNCAT@ HAVE_WCSNCMP = @HAVE_WCSNCMP@ HAVE_WCSNCPY = @HAVE_WCSNCPY@ HAVE_WCSNLEN = @HAVE_WCSNLEN@ HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ HAVE_WCSPBRK = @HAVE_WCSPBRK@ HAVE_WCSRCHR = @HAVE_WCSRCHR@ HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ HAVE_WCSSPN = @HAVE_WCSSPN@ HAVE_WCSSTR = @HAVE_WCSSTR@ HAVE_WCSTOK = @HAVE_WCSTOK@ HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ HAVE_WCSXFRM = @HAVE_WCSXFRM@ HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE_WINT_T = @HAVE_WINT_T@ HAVE_WMEMCHR = @HAVE_WMEMCHR@ HAVE_WMEMCMP = @HAVE_WMEMCMP@ HAVE_WMEMCPY = @HAVE_WMEMCPY@ HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ HAVE_WMEMPCPY = @HAVE_WMEMPCPY@ HAVE_WMEMSET = @HAVE_WMEMSET@ HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ HAVE__EXIT = @HAVE__EXIT@ IMPRIMATUR_MAKEINFOFLAGS = @IMPRIMATUR_MAKEINFOFLAGS@ IMPRIMATUR_MODULE_DIR = @IMPRIMATUR_MODULE_DIR@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@ INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBGNU_LIBDEPS = @LIBGNU_LIBDEPS@ LIBGNU_LTLIBDEPS = @LIBGNU_LTLIBDEPS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPMULTITHREAD = @LIBPMULTITHREAD@ LIBPTHREAD = @LIBPTHREAD@ LIBS = @LIBS@ LIBSTDTHREAD = @LIBSTDTHREAD@ LIBTHREAD = @LIBTHREAD@ LIB_HARD_LOCALE = @LIB_HARD_LOCALE@ LIB_MBRTOWC = @LIB_MBRTOWC@ LIB_NL_LANGINFO = @LIB_NL_LANGINFO@ LIB_SCHED_YIELD = @LIB_SCHED_YIELD@ LIB_SETLOCALE_NULL = @LIB_SETLOCALE_NULL@ LIMITS_H = @LIMITS_H@ LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ LOCALENAME_ENHANCE_LOCALE_FUNCS = @LOCALENAME_ENHANCE_LOCALE_FUNCS@ LOCALE_FR = @LOCALE_FR@ LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ LOCALE_JA = @LOCALE_JA@ LOCALE_ZH_CN = @LOCALE_ZH_CN@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBTHREAD = @LTLIBTHREAD@ MAKEINFO = @MAKEINFO@ MBRTOWC_LIB = @MBRTOWC_LIB@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NEXT_ASSERT_H = @NEXT_ASSERT_H@ NEXT_AS_FIRST_DIRECTIVE_ASSERT_H = @NEXT_AS_FIRST_DIRECTIVE_ASSERT_H@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_ERROR_H = @NEXT_AS_FIRST_DIRECTIVE_ERROR_H@ NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@ NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_ERROR_H = @NEXT_ERROR_H@ NEXT_FCNTL_H = @NEXT_FCNTL_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_LOCALE_H = @NEXT_LOCALE_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STDLIB_H = @NEXT_STDLIB_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_TIME_H = @NEXT_TIME_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NEXT_WCHAR_H = @NEXT_WCHAR_H@ NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ 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@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PRIPTR_PREFIX = @PRIPTR_PREFIX@ PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ RANLIB = @RANLIB@ RENDITION = @RENDITION@ REPLACE_ACCESS = @REPLACE_ACCESS@ REPLACE_ALIGNED_ALLOC = @REPLACE_ALIGNED_ALLOC@ REPLACE_BTOWC = @REPLACE_BTOWC@ REPLACE_CALLOC_FOR_CALLOC_GNU = @REPLACE_CALLOC_FOR_CALLOC_GNU@ REPLACE_CALLOC_FOR_CALLOC_POSIX = @REPLACE_CALLOC_FOR_CALLOC_POSIX@ REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ REPLACE_CHMOD = @REPLACE_CHMOD@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_COPY_FILE_RANGE = @REPLACE_COPY_FILE_RANGE@ REPLACE_CREAT = @REPLACE_CREAT@ REPLACE_CTIME = @REPLACE_CTIME@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_DUP3 = @REPLACE_DUP3@ REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ REPLACE_ERROR = @REPLACE_ERROR@ REPLACE_ERROR_AT_LINE = @REPLACE_ERROR_AT_LINE@ REPLACE_EXECL = @REPLACE_EXECL@ REPLACE_EXECLE = @REPLACE_EXECLE@ REPLACE_EXECLP = @REPLACE_EXECLP@ REPLACE_EXECV = @REPLACE_EXECV@ REPLACE_EXECVE = @REPLACE_EXECVE@ REPLACE_EXECVP = @REPLACE_EXECVP@ REPLACE_EXECVPE = @REPLACE_EXECVPE@ REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ REPLACE_FCHMODAT = @REPLACE_FCHMODAT@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FCNTL = @REPLACE_FCNTL@ REPLACE_FDATASYNC = @REPLACE_FDATASYNC@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FFSLL = @REPLACE_FFSLL@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FOPEN_FOR_FOPEN_GNU = @REPLACE_FOPEN_FOR_FOPEN_GNU@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREE = @REPLACE_FREE@ REPLACE_FREELOCALE = @REPLACE_FREELOCALE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FSTAT = @REPLACE_FSTAT@ REPLACE_FSTATAT = @REPLACE_FSTATAT@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETENTROPY = @REPLACE_GETENTROPY@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOADAVG = @REPLACE_GETLOADAVG@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_GETPASS = @REPLACE_GETPASS@ REPLACE_GETPASS_FOR_GETPASS_GNU = @REPLACE_GETPASS_FOR_GETPASS_GNU@ REPLACE_GETPROGNAME = @REPLACE_GETPROGNAME@ REPLACE_GETSUBOPT = @REPLACE_GETSUBOPT@ REPLACE_GMTIME = @REPLACE_GMTIME@ REPLACE_IMAXABS = @REPLACE_IMAXABS@ REPLACE_IMAXDIV = @REPLACE_IMAXDIV@ REPLACE_INITSTATE = @REPLACE_INITSTATE@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ REPLACE_ISWDIGIT = @REPLACE_ISWDIGIT@ REPLACE_ISWXDIGIT = @REPLACE_ISWXDIGIT@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_LSTAT = @REPLACE_LSTAT@ REPLACE_MALLOC_FOR_MALLOC_GNU = @REPLACE_MALLOC_FOR_MALLOC_GNU@ REPLACE_MALLOC_FOR_MALLOC_POSIX = @REPLACE_MALLOC_FOR_MALLOC_POSIX@ REPLACE_MBRLEN = @REPLACE_MBRLEN@ REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ REPLACE_MBSINIT = @REPLACE_MBSINIT@ REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ REPLACE_MBSTOWCS = @REPLACE_MBSTOWCS@ REPLACE_MBTOWC = @REPLACE_MBTOWC@ REPLACE_MB_CUR_MAX = @REPLACE_MB_CUR_MAX@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_MEMPCPY = @REPLACE_MEMPCPY@ REPLACE_MKDIR = @REPLACE_MKDIR@ REPLACE_MKFIFO = @REPLACE_MKFIFO@ REPLACE_MKFIFOAT = @REPLACE_MKFIFOAT@ REPLACE_MKNOD = @REPLACE_MKNOD@ REPLACE_MKNODAT = @REPLACE_MKNODAT@ REPLACE_MKOSTEMP = @REPLACE_MKOSTEMP@ REPLACE_MKOSTEMPS = @REPLACE_MKOSTEMPS@ REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ REPLACE_MKTIME = @REPLACE_MKTIME@ REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ REPLACE_NEWLOCALE = @REPLACE_NEWLOCALE@ REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_OPEN = @REPLACE_OPEN@ REPLACE_OPENAT = @REPLACE_OPENAT@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_PIPE2 = @REPLACE_PIPE2@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_POSIX_MEMALIGN = @REPLACE_POSIX_MEMALIGN@ REPLACE_POSIX_OPENPT = @REPLACE_POSIX_OPENPT@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PTSNAME = @REPLACE_PTSNAME@ REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ REPLACE_PUTENV = @REPLACE_PUTENV@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_QSORT_R = @REPLACE_QSORT_R@ REPLACE_RANDOM = @REPLACE_RANDOM@ REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ REPLACE_READ = @REPLACE_READ@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_READLINKAT = @REPLACE_READLINKAT@ REPLACE_REALLOCARRAY = @REPLACE_REALLOCARRAY@ REPLACE_REALLOC_FOR_REALLOC_GNU = @REPLACE_REALLOC_FOR_REALLOC_GNU@ REPLACE_REALLOC_FOR_REALLOC_POSIX = @REPLACE_REALLOC_FOR_REALLOC_POSIX@ REPLACE_REALPATH = @REPLACE_REALPATH@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_SETENV = @REPLACE_SETENV@ REPLACE_SETHOSTNAME = @REPLACE_SETHOSTNAME@ REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ REPLACE_SETSTATE = @REPLACE_SETSTATE@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_STAT = @REPLACE_STAT@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPCPY = @REPLACE_STPCPY@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERRORNAME_NP = @REPLACE_STRERRORNAME_NP@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRFTIME = @REPLACE_STRFTIME@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOD = @REPLACE_STRTOD@ REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_STRTOL = @REPLACE_STRTOL@ REPLACE_STRTOLD = @REPLACE_STRTOLD@ REPLACE_STRTOLL = @REPLACE_STRTOLL@ REPLACE_STRTOUL = @REPLACE_STRTOUL@ REPLACE_STRTOULL = @REPLACE_STRTOULL@ REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ REPLACE_TIME = @REPLACE_TIME@ REPLACE_TIMEGM = @REPLACE_TIMEGM@ REPLACE_TIMESPEC_GET = @REPLACE_TIMESPEC_GET@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_TZSET = @REPLACE_TZSET@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_UNSETENV = @REPLACE_UNSETENV@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ REPLACE_WCSCMP = @REPLACE_WCSCMP@ REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ REPLACE_WCSNCMP = @REPLACE_WCSNCMP@ REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ REPLACE_WCSSTR = @REPLACE_WCSSTR@ REPLACE_WCSTOK = @REPLACE_WCSTOK@ REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ REPLACE_WCTOB = @REPLACE_WCTOB@ REPLACE_WCTOMB = @REPLACE_WCTOMB@ REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ REPLACE_WMEMCMP = @REPLACE_WMEMCMP@ REPLACE_WMEMPCPY = @REPLACE_WMEMPCPY@ REPLACE_WRITE = @REPLACE_WRITE@ REPLACE__EXIT = @REPLACE__EXIT@ RUSH_DEFAULT_CONFIG = @RUSH_DEFAULT_CONFIG@ SCHED_YIELD_LIB = @SCHED_YIELD_LIB@ SED = @SED@ SETLOCALE_NULL_LIB = @SETLOCALE_NULL_LIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ STDCKDINT_H = @STDCKDINT_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_TIME_UTC = @TIME_H_DEFINES_TIME_UTC@ UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@ UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ UNISTD_H_HAVE_SYS_RANDOM_H = @UNISTD_H_HAVE_SYS_RANDOM_H@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ 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@ gl_LIBOBJDEPS = @gl_LIBOBJDEPS@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJDEPS = @gltests_LIBOBJDEPS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = imprimatur info_TEXINFOS = rush.texi rush_TEXINFOS = \ fdl.texi\ strftime.texi EXTRA_DIST = gendocs_template gendocs.sh dist_man_MANS = \ rush.8\ rushlast.1\ rushwho.1\ rush-po.1\ rush.rc.5 AM_MAKEINFOFLAGS = @IMPRIMATUR_MAKEINFOFLAGS@ imprimatur_INPUT = $(info_TEXINFOS) $(rush_TEXINFOS) CHECK_DOCS = $(top_srcdir)/@IMPRIMATUR_MODULE_DIR@/check-docs.sh GENDOCS = $(srcdir)/gendocs.sh --no-copy-images --html '--init-file=$(abs_srcdir)/html.init' TEXI2DVI = texi2dvi -t '@set $(RENDITION)' -I $(top_srcdir)/doc/imprimatur all: all-recursive .SUFFIXES: .SUFFIXES: .dvi .html .info .pdf .ps .texi $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(srcdir)/imprimatur/imprimatur.mk $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits doc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnits doc/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(srcdir)/imprimatur/imprimatur.mk $(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): .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)/rush.info: rush.texi $(srcdir)/version.texi $(rush_TEXINFOS) rush.dvi: rush.texi $(srcdir)/version.texi $(rush_TEXINFOS) rush.pdf: rush.texi $(srcdir)/version.texi $(rush_TEXINFOS) rush.html: rush.texi $(srcdir)/version.texi $(rush_TEXINFOS) $(srcdir)/version.texi: $(srcdir)/stamp-vti $(srcdir)/stamp-vti: rush.texi $(top_srcdir)/configure @(dir=.; test -f ./rush.texi || dir=$(srcdir); \ set `$(SHELL) $(top_srcdir)/build-aux/mdate-sh $$dir/rush.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 rush.t2d rush.t2p clean-aminfo: -test -z "rush.dvi rush.pdf rush.ps rush.html" \ || rm -rf rush.dvi rush.pdf rush.ps rush.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-man1: $(dist_man_MANS) @$(NORMAL_INSTALL) @list1=''; \ list2='$(dist_man_MANS)'; \ test -n "$(man1dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || 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 '/\.1[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,^[^1][0-9a-z]*$$,1,;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)$(man1dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$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)$(man1dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ done; } uninstall-man1: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man1dir)" || 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 '/\.1[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) 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) # 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: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @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 $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-info check-am: all-am check: check-recursive all-am: Makefile $(INFO_DEPS) $(MANS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(infodir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man8dir)"; 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-aminfo clean-generic clean-local mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: $(DVIS) html: html-recursive html-am: $(HTMLS) info: info-recursive info-am: $(INFO_DEPS) install-data-am: install-info-am install-man install-dvi: install-dvi-recursive 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-recursive 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-recursive 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-man1 install-man5 install-man8 install-pdf: install-pdf-recursive 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-recursive 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-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-aminfo \ maintainer-clean-generic maintainer-clean-vti mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-aminfo mostlyclean-generic mostlyclean-vti pdf: pdf-recursive pdf-am: $(PDFS) ps: ps-recursive 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-man1 uninstall-man5 uninstall-man8 .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-aminfo clean-generic clean-local \ cscopelist-am ctags ctags-am dist-info 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-man1 install-man5 \ install-man8 install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs installdirs-am 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 \ tags-am uninstall uninstall-am uninstall-dvi-am \ uninstall-html-am uninstall-info-am uninstall-man \ uninstall-man1 uninstall-man5 uninstall-man8 uninstall-pdf-am \ uninstall-ps-am .PRECIOUS: Makefile clean-local: rm -rf manual imprimatur-format: @if test -n "`cat $(imprimatur_INPUT) | tr -d -c '\t'`"; then \ echo "Sources contain tabs; run make imprimatur-untabify"; \ false; \ fi imprimatur-refs: @for file in $(imprimatur_INPUT); \ do \ grep -q '^@c imprimatur-ignore' $$file && continue; \ sed -e = $$file | \ sed -n 'N;/@FIXME-.*ref/{s/\(^[0-9][0-9]*\).*@FIXME-.*ref{\([^}]*\)}.*/'$$file':\1: \2/gp}'; \ done > $@-t; \ if [ -s $@-t ]; then \ echo "Unresolved cross-references:"; \ cat $@-t;\ rm $@-t; \ else \ rm -f $@-t; \ fi imprimatur-fixmes: @for file in $(imprimatur_INPUT); \ do \ grep -q '^@c imprimatur-ignore' $$file && continue; \ sed -e = $$file | \ sed -n 'N;/@FIXME{/{s/\(^[0-9][0-9]*\).*@FIXME{\([^}]*\).*/'$$file':\1: \2/gp}'; \ done > $@-t; \ if [ -s $@-t ]; then \ echo "Unresolved FIXMEs:"; \ cat $@-t; \ rm $@-t; \ false; \ else \ rm -f $@-t; \ fi imprimatur-writemes: @files=`grep -c '^@c imprimatur-ignore' $(imprimatur_INPUT) | sed -n 's/:0$$//p'`; \ test -n "$$files" && grep -Hn '^[ \t]*@WRITEME' $$files > $@-t; \ if [ -s $@-t ]; then \ echo "Empty nodes:"; \ cat $@-t; \ rm $@-t; \ false;\ else \ rm $@-t; \ fi imprimatur-empty-nodes: @awk -f $(top_srcdir)/$(IMPRIMATUR_MODULE_DIR)/emptynodes.awk \ -v scriptname=$(top_srcdir)/$(IMPRIMATUR_MODULE_DIR)/emptynodes.awk \ -v makeinfoflags="$(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS)" \ $(info_TEXINFOS) imprimatur-unrevised: @files=`grep -c '^@c imprimatur-ignore' $(imprimatur_INPUT) | sed -n 's/:0$$//p'`; \ grep -Hn '^[ \t]*@UNREVISED' $$files > $@-t; \ if [ -s $@-t ]; then \ echo "Unrevised nodes:"; \ cat $@-t; \ rm $@-t; \ false;\ else \ rm $@-t; \ fi @IMPRIMATUR_COND_FRENCHSPACING_TRUE@imprimatur-check-sentence-spacing: @IMPRIMATUR_COND_FRENCHSPACING_TRUE@ @if grep -q '\. [@A-Z]' $(imprimatur_INPUT); then \ @IMPRIMATUR_COND_FRENCHSPACING_TRUE@ echo >&2 "Sources contain double-space sentence separators."; \ @IMPRIMATUR_COND_FRENCHSPACING_TRUE@ echo >&2 "Run make imprimatur-fix-sentence-spacing to fix."; \ @IMPRIMATUR_COND_FRENCHSPACING_TRUE@ fi @IMPRIMATUR_COND_FRENCHSPACING_TRUE@imprimatur-fix-sentence-spacing: @IMPRIMATUR_COND_FRENCHSPACING_TRUE@ @for file in $(imprimatur_INPUT); \ @IMPRIMATUR_COND_FRENCHSPACING_TRUE@ do \ @IMPRIMATUR_COND_FRENCHSPACING_TRUE@ if grep -q '\. [@A-Z]' $$file; then \ @IMPRIMATUR_COND_FRENCHSPACING_TRUE@ mv $$file $${file}~; \ @IMPRIMATUR_COND_FRENCHSPACING_TRUE@ sed -r 's/\. ([@A-Z])/. \1/g' $${file}~ > $$file; \ @IMPRIMATUR_COND_FRENCHSPACING_TRUE@ fi; \ @IMPRIMATUR_COND_FRENCHSPACING_TRUE@ done @IMPRIMATUR_COND_FRENCHSPACING_FALSE@imprimatur-check-sentence-spacing: @IMPRIMATUR_COND_FRENCHSPACING_FALSE@ @if grep -q '\. [@A-Z]' $(imprimatur_INPUT); then \ @IMPRIMATUR_COND_FRENCHSPACING_FALSE@ echo >&2 "Sources contain single-space sentence separators."; \ @IMPRIMATUR_COND_FRENCHSPACING_FALSE@ echo >&2 "Run make imprimatur-fix-sentence-spacing to fix."; \ @IMPRIMATUR_COND_FRENCHSPACING_FALSE@ fi @IMPRIMATUR_COND_FRENCHSPACING_FALSE@imprimatur-fix-sentence-spacing: @IMPRIMATUR_COND_FRENCHSPACING_FALSE@ @for file in $(imprimatur_INPUT); \ @IMPRIMATUR_COND_FRENCHSPACING_FALSE@ do \ @IMPRIMATUR_COND_FRENCHSPACING_FALSE@ if grep -q '\. [@A-Z]' $$file; then \ @IMPRIMATUR_COND_FRENCHSPACING_FALSE@ mv $$file $${file}~; \ @IMPRIMATUR_COND_FRENCHSPACING_FALSE@ sed -r 's/\. ([@A-Z])/. \1/g' $${file}~ > $$file; \ @IMPRIMATUR_COND_FRENCHSPACING_FALSE@ fi; \ @IMPRIMATUR_COND_FRENCHSPACING_FALSE@ done imprimatur-basic-checks: imprimatur-format imprimatur-check-sentence-spacing \ imprimatur-refs imprimatur-fixmes \ imprimatur-empty-nodes imprimatur-unrevised imprimatur-master-menu: @emacs -batch -l $(top_srcdir)/$(IMPRIMATUR_MODULE_DIR)/mastermenu.el \ -f make-master-menu $(info_TEXINFOS) imprimatur-untabify: @emacs -batch -l $(top_srcdir)/$(IMPRIMATUR_MODULE_DIR)/untabify.el \ $(imprimatur_INPUT) imprimatur-final: imprimatur-untabify imprimatur-master-menu # Checking check-format: imprimatur-format imprimatur-check-sentence-spacing check-refs: imprimatur-refs check-fixmes: imprimatur-fixmes check-writeme: imprimatur-writemes check-unrevised: imprimatur-unrevised all-check-docs: imprimatur-basic-checks check-docs: $(MAKE) -k all-check-docs # Make sure you set TEXINPUTS. # TEXINPUTS=/usr/share/texmf/pdftex/plain/misc/ is ok for most distributions .PHONY: manual manual: TEXINPUTS=$(srcdir):$(top_srcdir)/build-aux:$(TEXINPUTS) \ MAKEINFO="$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS)" \ TEXI2DVI="$(TEXI2DVI) -t @finalout" \ $(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: rush-2.4/doc/strftime.texi0000644000175000017500000001340514643176117015640 0ustar00graygray00000000000000@c This file is part of the GNU Dico manual. @c Copyright (C) 2006, 2013 Free Software Foundation, Inc. @c This file is distributed under GFDL 1.1 or any later version @c published by the Free Software Foundation. @c @appendix Time and Date Formats @cindex time formats, for @option{--time-format} option This appendix documents the time format specifications understood by the @code{:format} keyword in time output format specifiers (@pxref{Formats}). Essentially, it is a reproduction of the man page for GNU @code{strftime} function. Ordinary characters placed in the format string are reproduced without conversion. Conversion specifiers are introduced by a @samp{%} character, and are replaced as follows: @multitable @columnfractions 0.2 0.7 @item %a @tab The abbreviated weekday name according to the current locale. @item %A @tab The full weekday name according to the current locale. @item %b @tab The abbreviated month name according to the current locale. @item %B @tab The full month name according to the current locale. @anchor{%c time format} @item %c @tab The preferred date and time representation for the current locale. @item %C @tab The century number (year/100) as a 2-digit integer. @item %d @tab The day of the month as a decimal number (range 01 to 31). @item %D @tab Equivalent to @samp{%m/%d/%y}. @item %e @tab Like @samp{%d}, the day of the month as a decimal number, but a leading zero is replaced by a space. @item %E @tab Modifier: use alternative format, see below (@pxref{conversion specs}). @item %F @tab Equivalent to @samp{%Y-%m-%d} (the ISO 8601 date format). @item %G @tab The ISO 8601 year with century as a decimal number. The 4-digit year corresponding to the ISO week number (see @samp{%V}). This has the same format and value as @samp{%y}, except that if the ISO week number belongs to the previous or next year, that year is used instead. @item %g @tab Like @samp{%G}, but without century, i.e., with a 2-digit year (00-99). @item %h @tab Equivalent to @samp{%b}. @item %H @tab The hour as a decimal number using a 24-hour clock (range 00 to 23). @item %I @tab The hour as a decimal number using a 12-hour clock (range 01 to 12). @item %j @tab The day of the year as a decimal number (range 001 to 366). @item %k @tab The hour (24-hour clock) as a decimal number (range 0 to 23); single digits are preceded by a blank. (See also @samp{%H}.) @item %l @tab The hour (12-hour clock) as a decimal number (range 1 to 12); single digits are preceded by a blank. (See also @samp{%I}.) @item %m @tab The month as a decimal number (range 01 to 12). @item %M @tab The minute as a decimal number (range 00 to 59). @item %n @tab A newline character. @item %O @tab Modifier: use alternative format, see below (@pxref{conversion specs}). @item %p @tab Either @samp{AM} or @samp{PM} according to the given time value, or the corresponding strings for the current locale. Noon is treated as @samp{pm} and midnight as @samp{am}. @item %P @tab Like @samp{%p} but in lowercase: @samp{am} or @samp{pm} or a corresponding string for the current locale. @item %r @tab The time in @samp{a.m.} or @samp{p.m.} notation. In the POSIX locale this is equivalent to @samp{%I:%M:%S %p}. @item %R @tab The time in 24-hour notation (@samp{%H:%M}). For a version including the seconds, see @samp{%T} below. @anchor{%s time format} @item %s @tab The number of seconds since the Epoch, i.e., since 1970-01-01 00:00:00 UTC. @item %S @tab The second as a decimal number (range 00 to 61). @item %t @tab A tab character. @item %T @tab The time in 24-hour notation (@samp{%H:%M:%S}). @item %u @tab The day of the week as a decimal, range 1 to 7, Monday being 1. See also @samp{%w}. @item %U @tab The week number of the current year as a decimal number, range 00 to 53, starting with the first Sunday as the first day of week 01. See also @samp{%V} and @samp{%W}. @item %V @tab The ISO 8601:1988 week number of the current year as a decimal number, range 01 to 53, where week 1 is the first week that has at least 4 days in the current year, and with Monday as the first day of the week. See also @samp{%U} and @samp{%W}. @item %w @tab The day of the week as a decimal, range 0 to 6, Sunday being 0. See also @samp{%u}. @item %W @tab The week number of the current year as a decimal number, range 00 to 53, starting with the first Monday as the first day of week 01. @item %x @tab The preferred date representation for the current locale without the time. @item %X @tab The preferred time representation for the current locale without the date. @item %y @tab The year as a decimal number without a century (range 00 to 99). @item %Y @tab The year as a decimal number including the century. @item %z @tab The time-zone as hour offset from @acronym{GMT}. Required to emit RFC822-conformant dates (using @samp{%a, %d %b %Y %H:%M:%S %z}) @item %Z @tab The time zone or name or abbreviation. @item %+ @tab The date and time in @cite{date(1)} format. @item %% @tab A literal @samp{%} character. @end multitable @anchor{conversion specs} Some conversion specifiers can be modified by preceding them by the @samp{E} or @samp{O} modifier to indicate that an alternative format should be used. If the alternative format or specification does not exist for the current locale, the behaviour will be as if the unmodified conversion specification were used. The Single Unix Specification mentions @samp{%Ec}, @samp{%EC}, @samp{%Ex}, @samp{%EX}, @samp{%Ry}, @samp{%EY}, @samp{%Od}, @samp{%Oe}, @samp{%OH}, @samp{%OI}, @samp{%Om}, @samp{%OM}, @samp{%OS}, @samp{%Ou}, @samp{%OU}, @samp{%OV}, @samp{%Ow}, @samp{%OW}, @samp{%Oy}, where the effect of the @samp{O} modifier is to use alternative numeric symbols (say, roman numerals), and that of the @samp{E} modifier is to use a locale-dependent alternative representation. rush-2.4/doc/rush.info0000644000175000017500000050210114655401311014730 0ustar00graygray00000000000000This is rush.info, produced by makeinfo version 6.7 from rush.texi. Published by the Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Copyright (C) 2008-2024 Sergey Poznyakoff Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License". INFO-DIR-SECTION System Administration Utilities START-INFO-DIR-ENTRY * rush: (rush). A restricted user shell. * rushwho: (rush)Rushwho. Show who is using GNU Rush currently. * rushlast: (rush)Rushlast. Show listing of recent GNU Rush sessions. END-INFO-DIR-ENTRY  File: rush.info, Node: Top, Next: Intro, Up: (dir) GNU Rush ******** This edition of the 'GNU Rush Manual', last updated 9 July 2024, documents GNU Rush Version 2.4. * Menu: * Intro:: * Operation:: * Quick Start:: * Configuration File:: * Default Configuration:: * Usage Tips:: * Test Mode:: * Option Summary:: * Rushwho:: The 'rushwho' utility. * Rushlast:: The 'rushlast' utility. * Accounting Database:: * Reporting Bugs:: How to Report a Bug. Appendices * Time and Date Formats:: * Copying This Manual:: The GNU Free Documentation License. * Concept Index:: Index of Concepts. -- The Detailed Node Listing -- Configuration File * Lexical Structure:: * Syntax:: * Global:: * Rule:: * Include:: The 'global' statement * Expansion control:: * Debugging:: * sleep-time:: * Error Messages:: * regexp:: * include-security:: * Accounting control:: Rule * Request:: * Matching Conditions:: * Modifying variables:: * Environment:: * Transformations:: * System Actions:: * Fall-through:: * Accounting and Forked Mode:: * Notification:: * Exit:: * Interactive:: * Localization:: The Request * Positional variables:: * Request variables:: * Environment variables:: * User-defined variables:: * Variable expansion:: Matching Conditions * Comparisons:: * Membership operators:: * File system tests:: * Boolean expressions:: Modifying variables * set:: Set variable. * insert:: Insert positional arguments. * unset:: Unset variable. * remopt:: Remove options. * delete:: Delete arguments. * map:: Use file lookup to modify variable. Localization * Localization Directives:: * Writing Your Localization:: Usage Tips * scp:: * rsync:: * sftp:: * cvs:: * svn:: * git:: * notification example:: Test Mode * dump mode:: The 'rushwho' utility. * Rushwho Options:: * Formats:: The 'rushlast' utility. * Rushlast Options:: Accounting Database * wtmp:: The Structure of 'wtmp' File. * utmp:: The Structure of 'wtmp' File.  File: rush.info, Node: Intro, Next: Operation, Prev: Top, Up: Top 1 Introduction ************** GNU Rush is a Restricted User Shell, designed for sites that provide limited remote access to their resources, such as svn or git repositories, scp, or the like. Using a sophisticated configuration file, GNU Rush gives you complete control over the command lines that users execute, as well as over the usage of system resources, such as virtual memory, CPU time, etc.  File: rush.info, Node: Operation, Next: Quick Start, Prev: Intro, Up: Top 2 Operation *********** GNU Rush is usually installed as a user shell. When a user connects to the server (e.g. by using using SSH protocol), the shell binary, 'rush', is executed. GNU Rush must be called with exactly two arguments: the '-c' command line option and a command line to be executed on the host machine(1). If wrong arguments are supplied, the shell aborts. The third argument to 'rush' supplies a command line to be executed. That command line, shell environment for its execution and the password database entry for the user who executes 'rush' are said to form a "request". After startup, 'rush' reads a set of "rules" from its configuration file. Each rule consists of matching conditions and actions. "Conditions" decide whether the request matches the rule. They can include regular expression matching against entire command line or particular words thereof, comparisons of user name or group,, etc. If all conditions match the request, actions are executed. "Actions" can instruct 'rush' to: * Modify the command line; * Impose resource limits; * Set umask; * Change current working directory; * Modify the execution environment; * Run command in a special root directory ('chroot'). Finally, after all actions have been completed successfully, 'rush' runs the requested command. Notice, that by that time the resulting command line is not necessarily the same as the original one supplied to 'rush' with the '-c' option. A special kind of rules, called "fall-through" ones, is provided. Fall-through rules differ from other rules in that they do not execute the command. After all actions in a fall-through rule have been executed, GNU Rush continues to search for another matching rule in its configuration and applies it, if found. Fall-through rules are useful to set default values for subsequent rules. ---------- Footnotes ---------- (1) Starting from version 1.6, it is possible to use GNU Rush for interactive shell sessions. *Note Interactive::, for more information about it.  File: rush.info, Node: Quick Start, Next: Configuration File, Prev: Operation, Up: Top 3 Quick Start ************* To give you the feel of GNU Rush possibilities, let's consider the following configuration file rule: rush 2.0 rule sftp # Matching condition match $uid >= 100 && $command ~ "^.*/sftp-server" # Actions: set [0] = "bin/sftp-server" umask 002 chroot "~" chdir "/" The first clause defines the version of the syntax this configuration uses. Each configuration must begin with this statement. Next clause, 'rule', defines a new rule. Its argument serves as a rule tag and is used for diagnostic messages and in accounting. Lines beginning with '#' are comments, they are intended for a human reader and are ignored by 'rush'. The 'match' statement, defines condition that must be met for this rule to become active. In this example it requests that the UID of the requesting user be greater than or equal to 100, and the command line begin with '/sftp-server', optionally preceded by arbitrary directory components. Subsequent clauses define actions associated with this rule. The 'set' clause contains instructions on how to modify the first argument of the command line. Argument indices start at 0, so '[0]' refers to the command name. The expression in our example instructs GNU Rush to replace it with 'bin/sftp-server'. The 'umask' clause sets the file creation mask. The 'chroot' clause instructs GNU Rush to chroot to the user home directory before executing the command. Finally, the 'chdir' statement sets the directory to change to after installing the chroot.  File: rush.info, Node: Configuration File, Next: Default Configuration, Prev: Quick Start, Up: Top 4 Configuration File ******************** The configuration file 'rush.rc' is located in '/usr/local/etc' by default.(1). The configuration file is read and parsed right after start up. Any errors occurred in parsing are reported using 'syslog' facility 'authpriv' and priority 'notice'. When run in 'test' mode, all diagnostics is displayed on the standard error output. *Note Test Mode::, for a detailed description of ways to debug and test your configurations. Before parsing, 'rush' checks the ownership and permissions of the configuration file for potential security breaches. The configuration file is considered unsafe if any of the following conditions are met: 1. It is not owned by root. 2. It is group writable. 3. It is world writable. 4. It resides in a group writable directory. 5. It resides in a world writable directory. 6. It is a symbolic link to a file residing in a group or world writable directory. If the file is considered unsafe, 'rush' rejects it and aborts execution. Any of these tests can be disabled using the '--security-check' option (*note --security-check::). As of version 2.4, 'rush' supports two distinct configuration file formats. The "legacy" configuration format is the one used in rush versions up to 1.9. It is still supported to facilitate transition of existing installations to the new syntax. Its support will eventually be removed in future versions, so the users are encouraged to switch to the new syntax as soon as possible. The legacy syntax is described in detail in . This manual describes new configuration file format. * Menu: * Lexical Structure:: * Syntax:: * Global:: * Rule:: * Include:: ---------- Footnotes ---------- (1) The exact location of the configuration file is defined when configuring the package. See the file 'INSTALL' in the GNU Rush source directory for more information  File: rush.info, Node: Lexical Structure, Next: Syntax, Up: Configuration File 4.1 Lexical Structure of the Configuration File =============================================== Configuration file consists of tokens separated by arbitrary amount of whitespace characters: horizontal spaces and tabs. Except when enclosed in double quotes or preceded by a dollar sign, the '#' character introduces an inline comment: the character itself and any material that follows it up to the end of the physical line is ignored. Comments are treated as newlines. The following classes of tokens are recognized. "Newlines" A newline character (ASCII 10) terminates a statement. If newline is immediately preceded by a backslash, both characters are removed and the following line is treated as a continuation of the current line. This allows for splitting exceedingly long statements over several physical lines. "Identifiers" Identifiers begin with a letter and consist of letters, digits, underscores and dashes. They serve as keywords and variable names. "Decimal numbers" A sequence of decimal digits, optionally preceded by a minus or plus sign. "Unquoted strings" An unquoted string is any contiguous sequence of any characters, except newlines, whitespace and the following special characters: '\', '"', '!', '=', '<', '>', '(', ')', '{', '}', '[', ']', '$', '%', '&', '|', '~', '#'. "Quoted strings" A quoted string is a sequence of characters enclosed in double-quotes. Quoted strings are subject to backslash interpretation, backreference interpretation and variable expansion. During "backslash interpretation", the "escape sequences" are recognized and replaced as per table below: 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) \\ Single backslash character \" Double-quote \% Percent character Table 4.1: Backslash escapes A backslash immediately followed by newline character is removed. A backslash followed by any other character except as listed above is retained along with the character. During "backreference interpretation", references to parenthesized groups in regular expression are replaced with the actual content of the corresponding group in the most recently matched string. A reference is '%{N}' where N is a decimal number. If N is one digit, curly braces can be omitted: '%N'. If the '%' character results from previous backslash interpretation, no backreference interpretation occurs. Strings used in the left-hand side of a comparison expression are subject to variable expansion. This is discussed in detail in *note Variable expansion::. "Variable references" Variable references consist of a '$' sign, followed by the positional argument number or variable name, optionally enclosed in curly braces. Positional arguments greater than 9 must be enclosed in curly braces. The variable name must follow the rules for valid identifiers: it must begin with a letter and consist of letters, digits and underscores. Variable name in curly braces can be followed by '-', '=', '?', or '+', optionally preceded by ':' as summarized in the table below: Reference Meaning ${VAR:-WORD} Use Default Values ${VAR:=WORD} Assign Default Values ${VAR:?WORD} Display Error if Null or Unset ${VAR:+WORD} Use Alternate Value Table 4.2: Variable reference Where WORD stands for any valid token as described in this section. *Note Variable expansion::, for a detailed discussion of these forms and their meaning. "Comparison and boolean operators" These are: '&&' Boolean "and" '||' Boolean "or" '!' Boolean negation '==' Equality (string or numeric) '!=' Inequality (string or numeric) '<' Less than '<=' Less than or equal to '>' Greater than '>=' Greater than or equal to '~' Regexp matching '!~' Negated regexp matching 'in' Membership in set of strings 'group' Membership in UNIX group '=' Assignment '=~' Regular expression substitution Table 4.3: Operators *Note Matching Conditions::, for a detailed discussion.  File: rush.info, Node: Syntax, Next: Global, Prev: Lexical Structure, Up: Configuration File 4.2 Syntax ========== The 'rush' configuration consists of "statements". A "statement" consists of a keyword and optional arguments, separated by any amount of whitespace. Each statement occupies one line in the configuration file and is terminated by a newline character. Extremely long statements may be split across several physical lines by ending each line except the last with a backslash followed by a newline. Statements may be separated by any amount of empty lines or comments. The first statement in a configuration file indicates the syntax version. It has the following form: rush 2.0 This statement is mandatory. In its absence, the file will be treated as a legacy configuration file(1). To avoid confusion, a notice message to that effect will be printed. Statements that follow form logical groups. Each group begins with a 'rule' or 'global' statement. The 'global' statement introduces global settings. It affects all statements that follow it. The 'rule' statement introduces a single 'rush' rule, that defines how to process a particular command. These statements are described in the sections that follow. ---------- Footnotes ---------- (1) For the discussion of the legacy syntax, please refer to .  File: rush.info, Node: Global, Next: Rule, Prev: Syntax, Up: Configuration File 4.3 The 'global' statement ========================== The 'global' statement defines global settings. The syntax is: global STMT1 STMT2 ... where dots represent any number of statements. The following subsections discuss the statements that can be used within a 'global' block. * Menu: * Expansion control:: * Debugging:: * sleep-time:: * Error Messages:: * regexp:: * include-security:: * Accounting control::  File: rush.info, Node: Expansion control, Next: Debugging, Up: Global 4.3.1 Expansion control ----------------------- The following statement controls the behavior of 'rush' when an undefined variable is expanded (*note Variable expansion::). -- global: expand-undefined BOOL If BOOL is 'true', expand undefined variables to empty value. If it is 'false' (the default), issue an error and abort. The following values can be used as synonyms for 'true': 'yes', 'on', 't', '1'. The following values can be used as synonyms for 'false': 'no', 'off', 'nil', '0'. *Note handling of undefined variables::, for a detailed discussion of how 'rush' processes undefined variables and for the recommended techniques of handling them.  File: rush.info, Node: Debugging, Next: sleep-time, Prev: Expansion control, Up: Global 4.3.2 Debugging --------------- The 'debug' global statement sets the "debugging level" - an integer value that controls the verbosity of 'rush': -- global: debug NUM Set debugging level to NUM. The greater NUM is, the more verbose is the logging. The debugging information is reported via 'syslog' at facility 'authpriv', priority 'debug'. As of version 2.4, the following debugging levels are supported: 1 A minimum debugging level, and the only one whose messages are logged using the priority 'notice'. At this level, 'rush' only logs requests and rules selected to handle them. For example: rush[16821]: Serving request "/usr/libexec/sftp-server" for sergiusz by rule sftp-savane 2 List all actions executed when serving requests. 3 When parsing a legacy configuration file, verbosely describe parsing process. More debugging levels may be implemented in future.  File: rush.info, Node: sleep-time, Next: Error Messages, Prev: Debugging, Up: Global 4.3.3 The 'sleep-time' statement -------------------------------- -- global: sleep-time NUM Set the time to sleep before exiting on error, in seconds. This statement is intended as a measure against brute-force attacks. Default sleep time is 5 seconds.  File: rush.info, Node: Error Messages, Next: regexp, Prev: sleep-time, Up: Global 4.3.4 Error Messages -------------------- -- global: message CLASS TEXT Define a textual message which is returned to the remote party if an error of the given CLASS occurs. Valid values for CLASS are: usage-error This error is reported when 'rush' has been invoked improperly. The default text is: You are not permitted to execute this command. nologin-error Define a textual message which is returned to the remote user if there is no such user name in the password database. Default is: You do not have interactive login access to this machine. config-error Define a textual message which is returned to the remote party if the 'rush' configuration file contains errors. Default is: Local configuration error occurred. system-error Define a textual message which is returned to the remote party if a system error occurs. Default message is: A system error occurred while attempting to execute command.  File: rush.info, Node: regexp, Next: include-security, Prev: Error Messages, Up: Global 4.3.5 The 'regexp' statement ---------------------------- The 'regexp' statement configures the flavor of regular expressions for use by subsequent 'match', 'set', and 'insert' statements. -- global: regexp FLAGS ... Configure the type of regular expressions. Each FLAG is a word specifying some regular expression feature. It can be preceded by '+' to enable this feature (this is the default), or by '-' to disable it. Valid flags are: 'extended' Use POSIX Extended Regular Expression syntax when interpreting regex. This is the default. 'basic' Use basic regular expressions. Equivalent to '-extended'. 'icase' 'ignore-case' Do not differentiate case. Subsequent regex matches will be case insensitive. For example, the following statement enables POSIX extended, case insensitive matching: global regex +extended +icase  File: rush.info, Node: include-security, Next: Accounting control, Prev: regexp, Up: Global 4.3.6 The 'include-security' statement -------------------------------------- Additional configuration can be included to the main configuration file using the 'include' statement (*note Include::). Before inclusion, a number of checks is performed on the file to ensure it is safe to rely on it. These checks are configured using the following statement: -- global: include-security LIST Configure the security checks for include files. This statement takes a list of arguments, separated by white space. The following arguments are recognized: all Enable all checks. owner The file is not owned by root. iwgrp groupwritablefile The file is group writable. iwoth worldwritablefile The file is world writable. dir_iwgrp groupwritabledir The file resides in a group writable directory. dir_iwoth worldwritabledir The file resides in a world writable directory. link The file is a symbolic link to a file residing in a group or world writable directory. Each of the above keywords may be prefixed by 'no', which reverses its meaning. The special keyword 'none' disables all checks. Each keyword adds or removes a particular test to the existing check list, which is initialized as described in *note security checks::. Thus, the following statement results in all checks, except for the file ownership: global include-security noowner In the example below, the check list is first cleared by using the 'none' statement, and then a set of checks is added to it: global include-security none owner iwoth iwgrp  File: rush.info, Node: Accounting control, Prev: include-security, Up: Global 4.3.7 Accounting control statements ----------------------------------- The following global statements control file mode and permissions of the "accounting database files". For a detailed description of this feature, *Note Accounting Database::. -- global: acct-umask MASK Set umask used when accessing accounting database files. Default value is '022'. -- global: acct-dir-mode MODE Set mode bits for the accounting directory. The MODE argument is the mode in octal. -- global: acct-file-mode MODE Set mode bits for the 'wtmp' and 'utmp' files.  File: rush.info, Node: Rule, Next: Include, Prev: Global, Up: Configuration File 4.4 Rule ======== The 'rule' statement configures a GNU 'rush' rule. This is a "block" statement, which means that all statements located between it and the next 'rule' statement (or end of file, whichever occurs first) modify the definition of that rule. The syntax of the 'rule' statement is: -- Configuration: rule TAG The TAG argument is optional. If it is given, it supplies a "tag" for the rule, i.e. a (presumably unique) identifier, which is used to label this rule. 'Rush' uses this tag in its diagnostic messages. For rules without explicit TAG, 'Rush' supplies a default tag, which is constructed by concatenating '#' character and the ordinal number of rule in the configuration file, in decimal notation. Rule numbering starts from '1'. Each rule group can contain a number of statements that control what kind of requests match that rule and what actions are taken when the rule is matched. Arguments to this statements can refer to command line arguments and other parts of the request. * Menu: * Request:: * Matching Conditions:: * Modifying variables:: * Environment:: * Transformations:: * System Actions:: * Fall-through:: * Accounting and Forked Mode:: * Notification:: * Exit:: * Interactive:: * Localization::  File: rush.info, Node: Request, Next: Matching Conditions, Up: Rule 4.4.1 The Request ----------------- User request consists of the user 'passwd' entry, the command line supplied to 'rush', and environment variables. The request is analyzed and can be eventually modified by rules in 'rush' configuration file. Rules access parts of the request using "variables". There are four classes of variables. All of them share the same namespace and are accessed using the same syntax. * Menu: * Positional variables:: * Request variables:: * Environment variables:: * User-defined variables:: * Variable expansion::  File: rush.info, Node: Positional variables, Next: Request variables, Up: Request 4.4.1.1 Positional variables ............................ Rush performs word splitting using the same rules as 'sh'. Statements in the configuration file refer to command line arguments ("words") by their "index", using "positional variables". A positional variable can have the following forms: $N ${N} where N is the variable index. The form with curly braces must be used if N is negative (see below) or greater than 9. Arguments are numbered from '0'. The name of the command is argument '$0'. Consider, for example, the following command line: /bin/scp -t /upload Word splitting phase results in three positional variables being defined: Variable Value -------------------------------------------------------------------------- $0 /bin/scp $1 -t $2 /upload These values can also be referred to using negative indexes. They refer to words in the reverse order, as illustrated in the following table (notice the use of curly braces): Variable Value -------------------------------------------------------------------------- ${-3} /bin/scp ${-2} -t ${-1} /upload Notice also, that negative indexes are 1-based. One final note about the '$0' variable. Immediately after word splitting it refers to both the executable program name and the 0th argument that will be passed to that program ('argv[0]'). Most of the time the two values coincide. However, the rule can modify either value, so that they become different. Whether modified or not, the actual name of the program to be run is kept in the request variable '$program' (see the following section).  File: rush.info, Node: Request variables, Next: Environment variables, Prev: Positional variables, Up: Request 4.4.1.2 Request variables ......................... The following variables can be used to refer to various parts of the user request: Variable Expansion -------------------------------------------------------------------------- $user User name $group Name of the user's principal group $uid UID $gid GID $home User's home directory $gecos User's GECOS field $program Executable program name $command Entire command line $# Number of arguments in '$command'  File: rush.info, Node: Environment variables, Next: User-defined variables, Prev: Request variables, Up: Request 4.4.1.3 Environment variables ............................. Environment variables are accessed using the same syntax as the rest of the variables. Rules can modify them using the 'setenv', 'clrenv' and 'keepenv' statements (*note Environment::).  File: rush.info, Node: User-defined variables, Next: Variable expansion, Prev: Environment variables, Up: Request 4.4.1.4 User-defined variables .............................. In addition to the built-in variables, arbitrary variables can be defined and used in the configuration file. These "user-defined" variables are defined using the 'set' statement (*note set::) and are normally used to pass information between rules. They are invisible to whatever command 'rush' executes as the final result of processing.  File: rush.info, Node: Variable expansion, Prev: User-defined variables, Up: Request 4.4.1.5 Variable Expansion .......................... Most statements in the configuration file undergo variable expansion prior to their use. During variable expansion, references to variables in the string are replaced with their actual values. A variable reference has two basic forms: $V ${V} where V is either the name of the variable (request, environment, or user-defined), or the index of the positional variable. The notation in curly braces serves several purposes. First, it is obligatory if V is an index of the positional variable that is negative or greater than 9. Secondly, it should be used if the variable reference is immediately followed by an alphanumeric symbol, which will otherwise be considered part of it (as in '${home}dir'). Finally, this form allows for specifying the action to take if the variable is undefined or expands to an empty value. The following special forms are recognized: ${VARIABLE:-WORD} "Use Default Values". If VARIABLE is unset or null, the expansion of WORD is substituted. Otherwise, the value of VARIABLE is substituted. ${VARIABLE:=WORD} "Assign Default Values". If VARIABLE is unset or null, the expansion of WORD is assigned to variable. The value of VARIABLE is then substituted. ${VARIABLE:?WORD} "Display Error if Null or Unset". If VARIABLE is null or unset, the expansion of WORD (or a message to that effect if WORD is not present) is output to the current logging channel. Otherwise, the value of VARIABLE is substituted. ${VARIABLE:+WORD} "Use Alternate Value". If VARIABLE is null or unset, nothing is substituted, otherwise the expansion of WORD is substituted. These constructs test for a variable that is unset or null. Omitting the colon results in a test only for a variable that is unset. When expanding a variable reference, the variable name is first looked among the request variables. If it is not found, it is looked up in the user-defined variable list. If it is not there, the look up in the environment is attempted. If the variable name is not found in any of these lists, the default 'rush' behavior is to report the error of 'config-error' class (*note Error Messages::) and exit. To gracefully handle such cases, use the "default value construct", defined above. For example, the following statement safely appends the string '/opt/man' to the value of the 'MANPATH' environment variable: setenv MANPATH = "${MANPATH:-""}${MANPATH:+:}/opt/man" The '${MANPATH:-""}' reference ensures no error is reported if the variable is undefined. The '${MANPATH:+:}' reference appends a semicolon to the value, if the variable is defined. Finally the string '/opt/man' is appended to the resulting value. Another way to gracefully handle undefined variables, is to use the 'expand-undefined' global setting. If you place the following statement at the beginning of your configuration file, any undefined variable will be silently expanded to empty string: global expand-undefined true This statement affects variable expansion in statements that follow it in the configuration file. So you can place it in some point after which this behavior is needed, and then disable it where it is no longer desired, by using the following global statement: global expand-undefined false  File: rush.info, Node: Matching Conditions, Next: Modifying variables, Prev: Request, Up: Rule 4.4.2 Matching Conditions ------------------------- -- rule: match EXPR The 'match' statement defines conditions that decide whether the rule matches the particular request. Its argument is a simple expression or a boolean expression involving several simple expressions. A "simple expression" is either a comparison or membership test. * Menu: * Comparisons:: * Membership operators:: * File system tests:: * Boolean expressions::  File: rush.info, Node: Comparisons, Next: Membership operators, Up: Matching Conditions 4.4.2.1 Comparisons ................... A "comparison expression" is: LHS OP RHS here, LHS ("left-hand side") is a string (quoted or unquoted), or a variable reference (*note Lexical Structure::), RHS ("right-hand side") is a string or number, and OP is one of the following binary operators: '==' Equality (string or numeric) '!=' Inequality (string or numeric) '<' Less than '<=' Less than or equal to '>' Greater than '>=' Greater than or equal to '~' Regexp matching '!~' Negated regexp matching Table 4.4: Comparison Operators Prior to evaluating simple expression, its left-hand side undergoes variable expansion and backreference interpretation. In contrast, the right-hand side is always treated verbatim. For example the following rule will match any request with 2 or more arguments (recall, that the command name itself is counted as one of the arguments): rule match $# >= 2 The '==' and '!=' can operate both on strings and on numbers. When applied to strings the '==' means byte-to-byte equality, e.g. match $0 == "/bin/ls" will match requests with '/bin/ls' as the command name. The '~' and '!~' operators implement "regular expression matching". The expression 'LHS ~ RX' yields 'true' if LHS matches regular expression RX. E.g. match $command ~ "^scp (-v )?-t /incoming/(alpha|ftp)" The '!~' evaluates to 'true' if LHS does not match the regular expression in the RHS. If the regular expression contains parenthesized groups, subsequent commands can refer to the strings that matched the groups using the "backreference notation" '%N', where N is 1-based index ordinal number of the group in the regular expression (*note backreference::). The reference '%0' expands to the entire matched string. For example: rule chdir match $command "^cd (.+) && (.+)" chdir %1 set command = %2 fall-through It splits the compound command into the working directory and the command itself. Then it remembers the name of the working directory (first parenthesized group - '%1') for changing to it later (*note chdir::) and resets the command line to the part of the string that follows the '&&' token. Finally, it passes control to another rules (*note Fall-through::).  File: rush.info, Node: Membership operators, Next: File system tests, Prev: Comparisons, Up: Matching Conditions 4.4.2.2 Membership operators ............................ Membership operators check if their argument is a member of some set of values. There are two such operators. LHS in ( ARGS ) The 'in' operator evaluates to 'true' if LHS is listed in ARGS, which is a whitespace-separated list of strings. For example: match $0 in ("scp" "rsync") The 'group' operator evaluates to 'true' if the requesting user is a member of at least one group listed in its right-hand side. It can have two forms: 'group GRP' Evaluate to 'true' if the user is a member of the group GRP. The group can be given either by its name or GID. 'group ( LIST )' Evaluate to 'true' if the user is a member of one of the groups in whitespace delimited LIST. Members of LIST are group names or GIDs.  File: rush.info, Node: File system tests, Next: Boolean expressions, Prev: Membership operators, Up: Matching Conditions 4.4.2.3 File system tests ......................... File system tests check file types and ownership. They are similar to options to 'test' shell command: '-b FILE' FILE exists and is block special '-c FILE' FILE exists and is character special '-d FILE' FILE exists and is a directory '-e FILE' FILE exists '-f FILE' FILE exists and is a regular file '-g FILE' FILE exists and is set-group-ID '-G FILE' FILE exists and is owned by the primary group of the current user. '-h FILE' '-L FILE' FILE exists and is a symbolic link '-k FILE' FILE exists and has its sticky bit set '-L FILE' FILE exists and is a symbolic link (same as -h) '-O FILE' FILE exists and is owned by the current user '-p FILE' FILE exists and is a named pipe '-r FILE' FILE exists and read permission is granted '-s FILE' FILE exists and has a size greater than zero '-S FILE' FILE exists and is a socket '-u FILE' FILE exists and its set-user-ID bit is set '-w FILE' FILE exists and write permission is granted '-x FILE' FILE exists and execute (or search) permission is granted  File: rush.info, Node: Boolean expressions, Prev: File system tests, Up: Matching Conditions 4.4.2.4 Boolean expressions ........................... Simple expressions can be combined into complex conditions using boolean operators: '||' Disjunction ("or") '&&' Conjunction ("and") '!' Negation Table 4.5: Boolean Operators Arguments to these operators can be either simple expressions or another boolean expressions. The operators in the table above are ordered by their precedence. As in most programming languages, parentheses can be used to enforce the desired order of evaluation. Both binary operators implement shortcut evaluation. For example, the following rule will match if the command name contains 'git-receive-pack' or 'git-upload-pack' and either the UID is 100 or the user is a member of the group 'git': rule match $0 ~ "git-(receive|upload)-pack" && \ ($uid == 100 || group "git") Notice the use of parentheses to enforce proper evaluation order. The '&&' operator has higher priority than '||'. Without parentheses the rule would match if either the command name matched the regexp and the user ID was 100, or if the user was a member of the 'git' group, no matter what command was issued.  File: rush.info, Node: Modifying variables, Next: Environment, Prev: Matching Conditions, Up: Rule 4.4.3 Modifying variables ------------------------- Rules can change or unset variables. Two separate groups of statements are provided to that effect. The 'set', 'unset', and 'map' statements operate on positional, request, and user-defined variables. The 'setenv', 'unsetenv', 'clrenv', and 'keepenv' statements modify the environment. These will be discussed in a separate subsection (*note Environment::). Modifications to positional and request variables deserve a special explanation. The only two request variables that can be modified (but not unset) are '$command' and '$program'. Positional variables and the '$command' request variable are mutually dependent. If the '$command' is modified, the word splitting is applied to it and resulting words are assigned to the positional variables. Similarly, any modifications to positional variables trigger rebuilding of the '$command' variable from the modified arguments. Both operations are run immediately after the change that triggered them. Notice, however, that any transformations, including variable modifications, are executed after 'match' statements have been evaluated, so that 'match' always operates on unchanged variables, no matter where in the rule you place it, If the rules result in accepting the request, then modified '$command' becomes the actual command that 'rush' will execute. Obviously, none of the request variables can be unset. You can however, unset a positional variable (excepting '$0'). It is equivalent to removing the corresponding argument from the command line. * Menu: * set:: Set variable. * insert:: Insert positional arguments. * unset:: Unset variable. * remopt:: Remove options. * delete:: Delete arguments. * map:: Use file lookup to modify variable.  File: rush.info, Node: set, Next: insert, Up: Modifying variables 4.4.3.1 The 'set' statement ........................... The 'set' statement modifies the value of a positional, request, or user-defined variable. -- rule: set NAME = VALUE -- rule: set [N] = VALUE Sets the variable NAME to VALUE. Prior to use, VALUE undergoes backreference interpretation (*note backreference::) and variable expansion (*note Variable expansion::). The second form assigns to the positional variable '$N'. It is discussed in more detail in *note Transformations::. -- rule: set NAME = VALUE ~ S-EXPR -- rule: set [N] = VALUE ~ S-EXPR Applies the 'sed' search-and-replace expression S-EXPR to VALUE and assigns the result to the variable NAME or argument N. Both VALUE and S-EXPR are subject to variable expansion and backreference interpretation. -- rule: set NAME =~ S-EXPR -- rule: set [N] =~ S-EXPR Applies the 'sed'-like search-and-replace expression S-EXPR to the current value of the variable NAME and stores the resulting string as its new value. Prior to use, S-EXPR undergoes backreference interpretation (*note backreference::) and variable expansion (*note Variable expansion::). This is a shortcut for set NAME = ${NAME:-""} ~ S-EXPR Second form modifies the value of the positional variable '$N'. This statement is a shortcut for set [N] = ${N:-""} ~ S-EXPR *Note Transformations::, for a detailed discussion. The transformation expression, S-EXPR, is 'sed'-like replace expression of the form: s/REGEXP/REPLACE/[FLAGS] where REGEXP is a "regular expression", REPLACE is a replacement for each part of the input that matches REGEXP and FLAGS are optional flags that control the substitution. Both REGEXP and REPLACE are described in *note The "s" Command: (sed)The "s" Command. As in 'sed', you can give several replace expressions, separated by semicolons. Supported FLAGS are: 'g' Apply the replacement to _all_ matches to the REGEXP, not just the first. 'i' Use case-insensitive matching 'x' REGEXP is an "extended regular expression" (*note Extended regular expressions: (sed)Extended regexps.). 'NUMBER' Only replace the NUMBERth match of the REGEXP. Note: the POSIX standard does not specify what should happen when you mix the 'g' and NUMBER modifiers. 'Rush' follows the GNU 'sed' implementation in this regard, so the interaction is defined to be: ignore matches before the NUMBERth, and then match and replace all matches from the NUMBERth on. Normally, the S-EXPR is a quoted string, and as such it is subject to backslash interpretation. It is therefore important to properly escape backslashes, especially in REPLACE part. Consider this example: set bindir = $program ~ "s/(.*)\\//\\1/" The intention is to extract the directory part of the executable program name and store it in the variable 'bindir'. Notice, that each backslash is escaped, so that the actual string that is compiled into a regular expression is s/(.*)\//\1/  File: rush.info, Node: insert, Next: unset, Prev: set, Up: Modifying variables 4.4.3.2 The 'insert' statement .............................. The 'insert' statement inserts new positional argument at a given position. Its syntax is similar to 'set': -- rule: insert [N] = VALUE -- rule: insert [N] = VALUE ~ S-EXPR Shift arguments starting from N one position to the right (so that N becomes N+1 etc.) and insert VALUE at 'argv[N]'. In the second form, the value to be inserted is computed by applying sed-expression S-EXPR to VALUE. Both VALUE and S-EXPR are subject to variable expansion and backreference interpretation. Example using this statement to insert the '--root=/tmp' argument at position 1: insert [1] = "--root=/tmp" Note that when inserting multiple arguments (e.g. an option with a value), you have two possibilities. First, you can insert each argument at its corresponding position. For example, to insert two arguments '--root' and '/tmp' starting at position 1, one can use: insert [1] = "--root" insert [2] = "/tmp" Otherwise, you can revert the arguments and insert them at the same position, as shown in the example below: insert [1] = "/tmp" insert [1] = "--root"  File: rush.info, Node: unset, Next: remopt, Prev: insert, Up: Modifying variables 4.4.3.3 The 'unset' statement ............................. -- rule: unset NAME Unset the variable NAME. -- rule: unset N Unset the positional argument N (an integer number greater than 0), shifting the remaining arguments one position left. The effect is the same as from 'delete' (*note delete::).  File: rush.info, Node: remopt, Next: delete, Prev: unset, Up: Modifying variables 4.4.3.4 The 'remopt' statement .............................. The 'remopt' statement removes from the command line all occurrences of the supplied option. -- rule: remopt SOPT -- rule: remopt SOPT LOPT Remove from the command line all occurrences of the short option described by SOPT. The SOPT argument is the short option letter, optionally followed by a colon if that option takes a mandatory argument, or by two colons if it takes an optional argument. Optional LOPT supplies a long option equivalent to SOPT. If no short option equivalent exists, use '_' as SOPT, eventually followed by ':' or '::'. For example, to remove all occurrences of the '-r' ('--root') option that takes a mandatory argument, use: remopt r: root  File: rush.info, Node: delete, Next: map, Prev: remopt, Up: Modifying variables 4.4.3.5 The 'delete' statement .............................. Another statement modifying the command line is 'delete': -- rule: delete N Delete Nth argument. -- rule: delete I J Delete positional parameters between '$I' and '$J', inclusive. Neither form can be used to delete the program name ('$0'). For example, the following statement deletes all arguments from the command line, except for the program name: delete 1 -1 To delete a single argument, 'unset' can also be used. The following statements have the same effect: delete 2 unset 2  File: rush.info, Node: map, Prev: delete, Up: Modifying variables 4.4.3.6 The 'map' statement ........................... -- rule: map NAME FILE DELIM KEY KN VN -- rule: map [N] FILE DELIM KEY KN VN DEFAULT The 'map' statement uses file lookup to find a new value for the variable NAME (or, in its second form, for the positional variable '$N'). Arguments are: FILE Name of the "map file". It must begin with '/' or '~/'. Before using, the file permissions and ownership are checked using the procedure described in *note security checks::. DELIM A string containing allowed field delimiters. KEY The value of the lookup key. Before using, it undergoes backslash interpretation and variable expansion. KN Number of the key field in FILE. Fields are numbered starting from 1. VN Number of the value field. DEFAULT If supplied, this value is used as a replacement value, when the key was not found in FILE. The map file consists of "records", separated by newline characters (in other words, a record occupies one line). Each record consists of fields, separated by delimiters listed in DELIM argument. If DELIM contains a space character, then fields may be delimited by any amount of whitespace characters (spaces and/or tabulations). Otherwise, exactly one delimiter delimits fields. Fields are numbered starting from 1. The 'map' action works as follows: 1. Variable expansion is performed on the KEY argument (*note Variable expansion::) and the resulting value is used as lookup key. 2. The FILE is scanned for a record whose KNth field matches the lookup key. 3. If such a record is found, the value of its VNth field is assigned to the variable. 4. Otherwise, if DEFAULT is supplied, it becomes the new value of the variable. 5. Otherwise, the variable remains unchanged. For example, suppose that the file '/etc/passwd.rush' has the same syntax as the system 'passwd' file (*note Password File: (passwd(5))passwd.). Then, the following statement will replace '$0' with the value of 'shell' field, using the current user name as a key: map [0] /etc/passwd.rush : ${user} 1 7 See also *note Interactive::, for another example of using this statement.  File: rush.info, Node: Environment, Next: Transformations, Prev: Modifying variables, Up: Rule 4.4.4 Environment ----------------- The following actions modify the environment in which the program will be executed. -- rule: clrenv Clear the environment. -- rule: keepenv LIST Retain the names in LIST in the environment. This statement should be used in conjunction with 'clrenv'. Argument is a whitespace delimited list of variables to retain. Each element in the list can be either a variable name, or a shell-style globbing pattern, in which case all variables matching that pattern will be retained, or a variable name followed by an equals sign and a value, in which case it will be retained only if its actual value equals the supplied one. For example, to retain only variables with names beginning with 'LC_': keepenv "LC_*" -- rule: setenv NAME = VALUE Set the environment variable NAME. The VALUE argument is subject to variable expansion (*note Variable expansion::) and backreference interpretation (*note backreference::). For example, to modify the 'PATH' value: setenv PATH = "$PATH:/opt/bin" -- rule: unsetenv LIST Unset environment variables listed as arguments. Argument is a whitespace delimited list of variables to retain. Each element in the list can be either a variable name, or a shell-style globbing pattern, in which case all variables matching that pattern will be unset, or a variable name followed by an equals sign and a value, in which case it will be unset only if its actual value equals the supplied one. -- rule: evalenv STRING Performs backslash interpretation, backreference interpretation and variable expansion on STRING and discards the result. This statement is similar to the shell's "colon" statement. For example, the following statement will define the 'DEPTH' variable and initialize it to 10, unless it is already defined: evalenv ${DEPTH:=10}  File: rush.info, Node: Transformations, Next: System Actions, Prev: Environment, Up: Rule 4.4.5 Transformations --------------------- Transformations are special actions that modify entire command line or particular arguments from it (positional variables). Statements that modify variable have been described in the previous section: these are 'set', 'insert', 'unset', 'remopt', 'delete' and 'map' statements. When 'set' or 'map' is applied to the 'command' variable, it modifies entire command line. When these statements are applied to an index ('[N]'), they modify the corresponding positional variable (argument). This subsection discusses the implications of modifying these variable and illustrates them with some examples. Positional variables and the '$command' request variable are mutually dependent. If the '$command' is modified, the word splitting is applied to it and resulting words are assigned to the positional variables. Similarly, any modifications to positional variables trigger rebuilding of the '$command' variable from the modified arguments. *Note Modifying variables::, for more detail on it. Let's consider several examples. 1. Echo the command line rule set command = "/bin/echo $command" 2. Remove all occurrences of '-r' option and its arguments from the command line, and then adds its own '-r' option and replaces 'svnserve' with the full program file name. There are at least three different ways to do so. a. The recommended approach is to use the 'remopt' and 'insert' statements, as shown below: rule svn match $command ~ "^svnserve -t" set program = "/usr/bin/svnserve" remopt r: insert [1] = "-r" insert [2] = "/svnroot" b. The same can be achieved using regular expressions. This was the default in versions of 'rush' prior to 2.0: rule svn match $command ~ "^svnserve -t" set command =~ "s/-r *[^ ]*//" set command =~ \ "s|^svnserve |/usr/bin/svnserve -r /svnroot |" Notice the use of '|' as a delimiter in s-command, in order to avoid escaping each '/' in the pathname. Without it, the expression in the second 'set' command will be "s/^svnserve /\\/usr\\/bin\\/svnserve -r \\/svnroot /" c. The same rule, rewritten using the single 'set' statement: rule svn match $command ~ "^svnserve -t" set command =~ "s|-r *[^ ]*||;\ s|^svnserve |/usr/bin/svnserve -r /svnroot |" 3. Override the executable program name. rule cvs match $command ~ "^cvs server" set [0] = /usr/bin/cvs  File: rush.info, Node: System Actions, Next: Fall-through, Prev: Transformations, Up: Rule 4.4.6 System Actions -------------------- System actions provide an interface to the operating system. -- rule: umask MASK Set the umask. The MASK must be an octal value not greater than '0777'. The default umask is '022'. -- rule: newgrp GROUP-ID -- rule: newgroup GROUP-ID Change the current group ID to GROUP-ID, which is either a numeric value or a name of an existing group. -- rule: chroot DIR Change the root directory to that specified in DIR. This directory will be used for file names beginning with '/'. The argument is subject to tilde, variable, and backreference expansions. During tilde expansion, a tilde ('~') at the start of string is replaced with the absolute pathname of the user's home directory. The two other expansions are described in *note Variable expansion::, and *note backreference::. The directory DIR must be properly set up to execute the commands. For example, the following rule defines execution of 'sftp-server' in an environment chrooted to the user's home directory: rule sftp match $program ~ "^.*/sftp-server" set [0] = "bin/sftp-server" chroot "~" For this to work, each user's home must contain the directory 'bin' with a copy of 'sftp-server' in it, as well as all directories and files that are needed for executing it, in particular 'lib'. -- rule: chdir DIR Change to the directory DIR. The argument is subject to tilde, variable (*note Variable expansion::), and backreference expansions (*note backreference::). If both 'chdir' and 'chroot' are specified, then 'chroot' is applied first. -- rule: limits RES Impose limits on system resources, as defined by RES. The argument consists of "commands", optionally separated by any amount of whitespace. A command is a single command letter followed by a number, that specifies the limit. The command letters are case-insensitive and coincide with those used by the shell 'ulimit' utility: Command The limit it sets ------------------------------------------------------------------- A max address space (KB) C max core file size (KB) D max data size (KB) F maximum file size (KB) M max locked-in-memory address space (KB) N max number of open files R max resident set size (KB) S max stack size (KB) T max CPU time (MIN) U max number of processes L max number of logins for this user (see below) P process priority -20..20 (negative = high priority) For example: limits T10 R20 U16 P20 If some limit cannot be set, execution of the rule aborts. In particular, the 'L' limit can be regarded as a condition, rather than an action. Setting 'limit LN' succeeds only if no more than N 'rush' instances are simultaneously running for the same user. This can be used to limit the number of simultaneously open sessions. The use of 'L' resource automatically enables "forked mode". *Note Accounting and Forked Mode::, for more information about it.  File: rush.info, Node: Fall-through, Next: Accounting and Forked Mode, Prev: System Actions, Up: Rule 4.4.7 Fall-through ------------------ The "fall-through" statement is a special action that does not execute the requested command. When a matching fall-through rule is encountered, 'rush' evaluates it and continues scanning its configuration for the next matching rule. Any modifications to the request found in the fall-through rule take effect immediately, which means that subsequent rules will see modified command line and environment. Execution of any other actions found in the fall-through rule is delayed until a usual rule is found. A fall-through rule is declared using the following statement: -- rule: fall-through -- rule: fallthrough Declare a fall-through rule. Usually this statement is placed as the last statement in a rule, e.g.: rule default umask 002 clrenv keepenv HOME USERNAME PATH fall-through Fall-through rules provide a way to set default values for subsequent rules. For example, any rules that follow the 'default' rule shown above, will inherit the umask and environment set there. One can also use fall-through rules to "normalize" command lines. For example, consider this rule: rule default set [0] =~ "s|.*/||" fall-through It will remove all path components from the first command line argument. As a result, all subsequent rules may expect a bare binary name as the first argument. Yet another common use for such rules is to enable accounting (see the next subsection), or set resource limits for the rest of rules: rule default limit l1 fall-through  File: rush.info, Node: Accounting and Forked Mode, Next: Notification, Prev: Fall-through, Up: Rule 4.4.8 Accounting and Forked Mode -------------------------------- GNU Rush is able to operate in two modes, which we call default and forked. When operating in the default mode, the process image of 'rush' itself is overwritten by the command being executed. Thus, when it comes to launching the requested command, the running instance of 'rush' ceases to exist. There is also another operation mode, which we call "forked mode". When running in this mode, 'rush' executes the requested command in a subprocess, and remains in memory supervising its execution. Once the command terminates, 'rush' exits. One advantage of the forked mode is that it allows you to keep "accounting", i.e. to note who is doing what and to keep a history of invocations. The accounting, in turn, can be used to limit simultaneous executions of commands ("logins", in GNU Rush terminology), as requested by 'L' command to 'limit' statement (*note L limit::). The forked mode is enabled on a per-rule basis, for rules that contain either 'L' command in the 'limit' statement, or 'acct on' command: -- rule: acct BOOL Turn accounting mode on or off, depending on BOOL. The argument can be one of the following: 'yes', 'on', 't', 'true', or '1', to enable accounting, and 'no', 'off', 'nil', 'false', '0', to disable it. Notice, that there is no need in explicit 'acct on' command, if you use 'limit L'. The notion 'rule contains', used above, means that either the rule in question contains that statement, or inherits it from one of the fall-through rules (*note Fall-through::) that were matched before it. In fact, in most cases the accounting should affect all rules, therefore we suggest to enable it in a fall-through rule at the beginning of the configuration file, e.g.: rule default acct on fall-through If the need be, you can disable it for some of the subsequent rules by placing 'acct off' in it. Notice, that this will disable accounting only, the forked mode will remain in action. To disable it as well and enforce default mode for a given rule, use the following statement: -- rule: fork BOOL Enable or disable forked mode. This statement is mainly designed as a way of disabling the forked mode for a given rule. Once accounting is enabled, you can use the 'rushwho' command to see the list of users presently running some commands (*note Rushwho::) and view the history of last accesses using 'rushlast' command (*note Rushlast::).  File: rush.info, Node: Notification, Next: Exit, Prev: Accounting and Forked Mode, Up: Rule 4.4.9 Post-process Notification ------------------------------- 'Rush' can be configured to send a "notification" over INET or UNIX sockets, after completing user request. It is done using the 'post-socket' statement: -- rule: post-socket URL Notify URL about completing the user request. This statement implies forked mode (*note Accounting and Forked Mode::). Allowed formats for URL are: inet://HOSTNAME[:PORT] Connect to remote host HOSTNAME using TCP/IP. HOSTNAME is the host name or IP address of the remote machine. Optional PORT specifies the port number to connect to. It can be either a decimal port number or a service name from '/etc/services'. If PORT is absent, 'tcpmux' (port 1) is assumed. unix://FILENAME local://FILENAME Connect to a UNIX socket FILENAME. For example: rule default post-socket "inet://localhost" The GNU Rush notification protocol is based on TCPMUX (RFC 1078 (http://www.rfc-editor.org/rfc/rfc1078.txt)). After establishing connection, 'rush' sends the rule tag followed by a CRLF pair. The rule tag acts as a service name. The remote party replies with a single character indicating positive ('+') or negative ('-') acknowledgment, optionally followed by a message of explanation, and terminated with a CRLF. If positive acknowledgment is received, 'rush' sends a single line, consisting of the user name and the executed command line, separated by a single space character. The line is terminated with a CRLF. After sending this line, 'rush' closes the connection. The post-process notification feature can be used to schedule execution of some actions after certain rules. *Note notification example::, for an example of how to use this feature.  File: rush.info, Node: Exit, Next: Interactive, Prev: Notification, Up: Rule 4.4.10 Exit rule ---------------- The "exit" rule does not execute any commands. Instead, it writes the supplied error message to the specified file descriptor and exits immediately. The exit rule is defined using the following statement: -- rule: exit FD MESSAGE -- rule: exit MESSAGE Write textual message MESSAGE to a file descriptor, given by the optional argument FD. If FD is absent, '2' (standard error) is used. The MESSAGE argument can be either a quoted string, or an identifier. If it is a quoted string, it is subject to backreference interpretation and variable expansion prior to being used. For example (note the use of line continuation character): exit "\ \r\nYou are not allowed to execute that command.\r\n\ \r\nIf you think this is wrong, ask for assistance.\r\n" If MESSAGE is an identifier, it must be the name of a predefined error message (*note Error Messages::). The corresponding message text will be printed. For example: exit nologin-message If the identifier does not match any predefined error message name, an error of type 'config-error' is signaled and 'rush' exits. Exit actions are useful for writing "trap rules", i.e. the rules that are intended to trap incorrect or prohibited command lines and to return customized reply messages in such cases. Consider the following rule: rule git match $program ~ "^git-.+" && $1 ~ "^/sources/[^ ]+\.git$" set command =~ "s|.*|/usr/bin/git-shell -c \"&\"|" It allows the client to use only those Git repositories that are located under '/sources' directory(1). If a user tries to access a repository outside this root, he will be returned a default error message, saying 'You are not permitted to execute this command' (*note usage-error: Error Messages.). You can, however, provide a more convenient message in this case. To do so, place the following after the 'git' rule: rule git-trap match $command ~ "^git-.+" exit "fatal: Use of this repository is prohibited." This rule will trap all git invocations that do not match the 'git' rule. ---------- Footnotes ---------- (1) *Note git::, for a better way to handle Git accesses.  File: rush.info, Node: Interactive, Next: Localization, Prev: Exit, Up: Rule 4.4.11 Interactive Access ------------------------- Sometimes it may be necessary to allow some group of users limited access to interactive shells. GNU Rush contains provisions for such usage. When 'rush' is invoked without '-c' it assumes interactive usage. In this case only rules explicitly marked as interactive are considered, the rest of rules is ignored. -- rule: interactive BOOL If BOOL is 'true', this statement marks the rule it appears in as interactive. This rule will match only if 'rush' is invoked without command line arguments. Unless command line transformations are applied, interactive rule finishes by executing '/bin/sh'. The first word in the command line ('argv[0]') is normally set to the base name of the command being executed prefixed by a dash sign. Consider the following example: rule login interactive true group rshell map program /etc/rush.shell : ${user} 1 2 set [0] = ${program} ~ "s|^.*/||;s,^,-r," rule nologin interactive true exit You don't have interactive access to this machine. The 'login' rule will match interactive user requests if the user is a member of the group 'rshell'. It uses '/etc/rush.shell' to select a shell to use for that user (*note map::). This map file consists of two fields, separated by a colon. If the shell is found, its base name, prefixed with '-r', will be used as 'argv[0]' (this indicates a restricted login shell). Otherwise, the trap rule 'nologin' will be matched, which will output the given diagnostics message and terminate 'rush'. To test interactive access, use the '-i' option: rush --test -i  File: rush.info, Node: Localization, Prev: Interactive, Up: Rule 4.4.12 Localization ------------------- GNU Rush is internationalized, which means that it is able to produce log and diagnostic messages in any language, if a corresponding translation file is provided. This file is called a "localization" or "domain" file. To find an appropriate localization file, 'rush' uses the following parameters: LOCALE "Locale name" is a string that describes the language, territory and optionally, the character set to use. It consists of the language (ISO 639) and country (ISO 3166) codes, separated by an underscore character, e.g. 'en_US' or 'pl_PL'. If a character set is specified, its name follows the country code and is separated from it by a '@' character. There are two special locale names: 'C' or 'POSIX' mean to use the default POSIX locale, and '""' (an empty string), means to use the value of the environment variable 'LC_ALL' as the locale name. LOCALE_DIR Directory where localization files are located. If not specified, a predefined set of directories is searched for the matching file. DOMAIN "Text domain" defines the base name of the localization file. Given these parameters, the name of the full pathname of the localization file is defined as: LOCALE_DIR/LOCALE/LC_MESSAGES/DOMAIN.mo GNU Rush produces three kinds of messages: diagnostics These are diagnostics messages that GNU Rush produces to its log output (syslog, unless in test mode). error messages Messages sent to the remote party when 'rush' is not able to execute the request (*note Error Messages::). exit messages These are messages sent to the remote party by 'exit' rules (*note Exit::). These messages use different domain names (and may use different locale directories). The diagnostics and error messages use textual domain 'rush'. The corresponding locale directory is defined at compile time and defaults to 'PREFIX/share/locale', where PREFIX stands for the installation prefix, which is '/usr/local', by default. GNU Rush is shipped with several localization files, which are installed by default. As of version 2.4, these files cover the following languages: Chinese, Danish, Dutch, Finnish, French, Galician, German, Polish, Portuguese, Serbian, Spanish, Swedish, Ukrainian, and Vietnamese. If the localization you need is not in this list, visit . If it is not there either, consider writing it (see *note (gettext)Translators::, for a detailed instructions on how to do that). Exit messages use custom domain files. It is the responsibility of the system administrator to provide and install such files. * Menu: * Localization Directives:: * Writing Your Localization::  File: rush.info, Node: Localization Directives, Next: Writing Your Localization, Up: Localization 4.4.12.1 Localization Directives ................................ The following configuration directives control localization. They are available for use in 'rule' statements: -- rule: locale NAME Sets the locale name. To specify empty locale, use '""' as NAME (recall that empty locale name means to use the value of the environment variable 'LC_ALL' as locale name). -- rule: locale-dir NAME Sets the name of the locale directory. -- rule: text-domain NAME Sets the textual domain name. The following configuration fragment illustrates their use: rule l10n locale "pl_PL" text-domain "rush-config" fall-through Different users may have different localization preferences. *Note per-user l10n::, for a description of how to implement this.  File: rush.info, Node: Writing Your Localization, Prev: Localization Directives, Up: Localization 4.4.12.2 Writing Your Localization .................................. You need to write a localization file for your configuration script if it implements exit rules (*note Exit::) and changes user locale (*note locale: Localization Directives.). Preparing a localization consists of three stages: extracting exit messages and forming a PO file, editing this file, compiling and installing it. The discussion below describes these stages in detail. 1. Creating a 'po' file. A PO ("Portable Object") file is a plain text file, containing original messages and their translations for a particular language. *Note The Format of PO Files: (gettext)PO Files, for a description of its format. The script 'rush-po' extracts translatable messages from the configuration file and produces a valid PO file. It takes the name of the rush configuration file as its argument and produces the PO file on the standard output, or in the file given with the '-o' ('--output') option. E.g., to create a PO file from your configuration file, run: rush-po -o myconf.po /usr/local/etc/rush.rc 2. Editing the PO file Open the created PO file with your favorite editor and supply message translations after 'msgstr' keywords. Although you can use any editor capable of handling plain text files, we recommend to use GNU Emacs, which provides a special "po-mode". *Note PO Files and PO Mode Basics: (gettext)Basics, for guidelines on editing PO files and using the po-mode. 3. Compiling the PO file When ready, the PO file needs be compiled into a MO ("Message Object") file, which is directly readable by 'rush'. This is done using 'msgfmt' utility from GNU gettext: msgfmt -o myconf.mo myconf.po *Note (gettext)msgfmt Invocation::, for a detailed description of the 'msgfmt' utility. After creating the MO file, copy it into appropriate directory. It is important that the installed MO file uses the naming scheme described in *note localization file naming: mo-name.  File: rush.info, Node: Include, Prev: Rule, Up: Configuration File 4.5 Include =========== The 'include' statement forces inclusion of the named file in that file location: -- rule: include FILE Include file FILE. The statement is evaluated when parsing the configuration file, which means that FILE undergoes only "tilde expansion": the two characters '~/' appearing at the beginning of FILE are replaced with the full path name of the current user's home directory. If FILE is a directory, that directory is searched for a file whose name coincides with the current user name. If such a file is found, it is included. In any case, if the file named by FILE (after tilde expansion) does not exist, no error is reported, and parsing of the configuration file continues. Before including the file 'rush' checks if it is secure, using the same rules as for the main configuration file (*note security checks::). The exact list of checks can be tuned using the 'include-security' statement (*note include-security::). The 'include' statement can be used only within a rule. The included file may not contain 'rule' and 'global' statements. This statement provides a convenient way for user-dependent 'rush' configuration. For example, the following fall-through rule (*note Fall-through::) allows the administrator to keep each user personal configuration in a file named '.rush', located in the user's home directory: rule user include "~/.rush" fall-through Of course, it is supposed that such a per-user file, if it exists, is writable only for super-user. The use of include files may be especially useful for per-user localization (*note Localization::). It suffices to provide a fall-through rule, similar to the one above, and to place a 'locale' directive in '~/.rush' files, according to the user preferences.  File: rush.info, Node: Default Configuration, Next: Usage Tips, Prev: Configuration File, Up: Top 5 Default Configuration *********************** You can compile 'rush' with the default configuration built in the binary. Such a binary can then be run without configuration file. However, if a configuration file is present, it will be used instead of the built-in configuration. To compile 'rush' with the built-in configuration, first compile the package as usual. Then, prepare a configuration file, and test it using 'rush --lint'. If the test shows no errors, reconfigure the package, using the '--with-default-config' option: ./configure --with-default-config=FILE where FILE is the name of your configuration file. Then, recompile and install the package. You can inspect the built-in configuration using the '--show-default' option: rush --show-default  File: rush.info, Node: Usage Tips, Next: Test Mode, Prev: Default Configuration, Up: Top 6 Usage Tips ************ In this chapter we will explain how to write GNU Rush configuration rules for several popular remote copy and version control system utilities. For this purpose, we assume the following setup: * Users are allowed to use 'scp' and 'rsync' to upload files to the '/incoming' directory and to copy files to and from their '~/public_html' directory. The actual location of the '/incoming' directory is '/home/ftp', but that must be transparent to users, i.e. they use 'scp FILE HOST:/incoming' (not 'HOST:/home/ftp/incoming') to upload files. * Additionally, users may use 'sftp' to manage their '~/public_html' directory. In this case, to prevent users from accessing other directories, 'sftp-server' is executed in a chrooted environment. * The server runs three version control system repositories, whose corresponding root directories are: VCS Repository Root -------------------------------------------------------------------------- cvs /cvsroot svn /svnroot git /gitroot * Menu: * scp:: * rsync:: * sftp:: * cvs:: * svn:: * git:: * notification example::  File: rush.info, Node: scp, Next: rsync, Up: Usage Tips 6.1 scp ======= The 'scp' utility is executed on the server side with option '-t', when copying files to server, and with '-f' when copying from it. Thus, the basic templates for 'scp' rules are: # Copying to server: rule scp-to match $command ~ "^scp -t" ... # Copying from server: rule scp-from match $command ~ "^scp -f" ... You may also wish to allow for '-v' ('verbose') command line option. In this case, the 'scp-to' rule will become: rule scp-to match $command ~ "^scp (-v )?-t" ... Now, we want users to be able to upload files to '/home/ftp/incoming' directory. Moreover, the '/home/ftp' directory prefix must be invisible to them. We should also make sure that the user cannot get outside the 'incoming' directory by using '../' components in his upload path. So, our first rule for 'scp' uploads will be: rule scp-to-incoming match $command ~ "^scp (-v )?-t /incoming/" && \ ${-1} !~ "\\.\\./" set command "/bin/scp" set [-1] =~ "s|^|/home/ftp/|" The 'match' statement ensures that no relative components are used. The two 'set' statements ensure that the right 'scp' binary is used and that '/home/ftp' prefix is prepended to the upload path. Other than uploading to '/incoming', users must be able to use 'scp' to manage 'public_html' directories located in their homes. They should use relative paths for that, i.e., the command: $ scp file.html server: will copy file 'file.html' to '~/public_html/file.html' on the server. The corresponding rule is: rule scp-home match $command ~ "^scp (-v )?-[tf] [^/].*" && \ ${-1} !~ "\\.\\./" set [0] = "/bin/scp" set [-1] =~ "s|^|public_html/|" chdir "~" Finally, we provide two trap rules for diagnostic purposes: rule scp-to-trap match $command ~ "^scp (-v )?-t" exit "Error: Uploads to this directory prohibited" rule scp-from match $command ~ "^scp (-v )?-f" exit Error: Downloads from this directory prohibited  File: rush.info, Node: rsync, Next: sftp, Prev: scp, Up: Usage Tips 6.2 rsync ========= On the server side, 'rsync' is executed with the '--server' command line option. In addition, when copying files from the server, the '--sender' option is used. This makes it possible to discern between incoming and outgoing requests. In our setup, 'rsync' is used the same way as 'scp', so the two rules will be: rule rsync-incoming match $command ~ "^rsync --server" && \ $command !~ --sender && \ ${-1} ~ "/incoming/" && ${-1} !~ "\\.\\./" set [0] =~ "s|^|/usr/bin/|" set [-1] =~ "s|^|/home/ftp/|" rule rsync-home match $command ~ "^rsync" && \ ${-1} !~ "^[^/]" && \ ${-1} !~ "\\.\\./" set [0] = "s|^|/usr/bin/|" set [-1] =~ "s|^|public_html/|" chdir "~" The trap rules for 'rsync' are trivial: rule rsync-to-trap match $command ~ "^rsync.*--sender" exit "Error: Downloads from this directory prohibited" rule rsync-from-trap match $command ~ "^rsync" exit "Error: Uploads to this directory prohibited"  File: rush.info, Node: sftp, Next: cvs, Prev: rsync, Up: Usage Tips 6.3 sftp ======== Executing 'sftp' on the client machine invokes 'sftp-server', without arguments, on the server. We want to allow our users to use 'sftp' to manage their 'public_html' directories. The 'sftp-server' will be executed with the user's home directory as root, in a chrooted environment. For this to work, each user's home must contain a copy of 'sftp-server' (which we'll place in '~/bin' subdirectory) and all files it needs for normal execution: '/etc/group' and '/etc/passwd' with one entry (for the user and his group), and, unless the binary is linked statically, all the shared libraries it is linked with, in the subdirectory '~/lib'. Given these prerequisites, the following rule will ensure proper 'sftp' interaction: rule sftp-incoming match $command ~ "^.*/sftp-server" set [0] = "/bin/sftp-server" chroot "~" chdir "public_html" Notice the last action. Due to it, users don't have to type 'cd public_html' at the beginning of their sftp sessions.  File: rush.info, Node: cvs, Next: svn, Prev: sftp, Up: Usage Tips 6.4 cvs ======= Using 'cvs' over 'ssh' invokes 'cvs server' on the server machine. In the simplest case, the following rule will do to give users access to CVS repositories: rule cvs match $command ~ "^cvs server" set command ~ "s|^cvs|/usr/bin/cvs -f" However, 'cvs' as of version 1.12.13 does not allow to limit root directories that users are allowed to access. It does have '--allow-root' option, but unfortunately this option is ignored when invoked as 'cvs server'. To restrict possible roots, we have to run 'cvs' in a chrooted environment. Let's suppose we created an environment for 'cvs' in directory '/var/cvs', with the 'cvs' binary located in '/var/cvs/bin' and repository root directory being '/var/cvs/cvsroot'. Then, we can use the following rule: rule cvs match $command ~ "^cvs server" set [0] = "/bin/cvs" chroot "/var/cvs"  File: rush.info, Node: svn, Next: git, Prev: cvs, Up: Usage Tips 6.5 svn ======= Remote access to SVN repositories is done via 'svnserve' binary. It is executed on server with '-t' option. The '-r' option can be used to restrict access to a subset of root directories. So, we can use the following rule: rule svn match $command ~ "^svnserve -t" set command =~ "s|-r *[^ ]*||" set command =~ \ "s|^svnserve |/usr/bin/svnserve -r /svnroot|" The first 'set command' action removes any '-r' options the user might have specified and enforces a single root directory. A more restrictive action can be used to improve security: set command =~ "s|.*|/usr/bin/svnserve -r /svnroot|"  File: rush.info, Node: git, Next: notification example, Prev: svn, Up: Usage Tips 6.6 git ======= Remote access to Git repositories over ssh causes execution of 'git-receive-pack' and 'git-upload-pack' on the server. The simplest rule for Git is: rule git set $command ~ "^git-(receive|upload)-pack" set [0] =~ "s|^|/usr/bin/|" The 'set' action is necessary to ensure the proper location of Git binaries to use. This example supposes they are placed in '/usr/bin', you will have to tailor it if they are located elsewhere on your system. To limit Git accesses to repositories under '/gitroot' directory, modify the '$1', as shown in the example below: rule git match $command ~ "^git-(receive|upload)-pack" set [1] =~ "^/gitroot[^ ]+\.git$" set [0] =~ "s|^|/usr/bin/|" To provide more helpful error messages, you may follow this rule by a trap rule (*note trap rules: Exit.): # Trap the rest of Git requests: rule git-trap match $command ~ "^git-.+" exit "fatal: access to this repository is denied."  File: rush.info, Node: notification example, Prev: git, Up: Usage Tips 6.7 Notification ================ In this section we will show how to set up a mail notification for Rush rules. Let's suppose we wish to receive emails for each upload by 'scp-to' rule (*note scp::). To do so, we add the following fall through rule to the beginning of 'rush.rc': rule default post-socket "inet://localhost" fall-trough This will enable notifications for each rule located below this one. Missing port in 'post-socket' statement means 'rush' will be using the default 'tcpmux' port. To receive and process these requests, you will need an 'inetd' capable to handle TCPMUX. We recommend the one from GNU Inetutils package (GNU Inetutils (http://www.gnu.org/software/inetutils)). In '/etc/inetd.conf' file, we add: # Enable TCPMUX handling. tcpmux stream tcp nowait root internal # Handle 'scp-to' service. tcpmux/+scp-to stream tcp nowait root \ /usr/sbin/tcpd /bin/rushmail The program '/bin/rushmail' does the actual notification. Following is its simplest implementation: #! /bin/sh read user command /usr/sbin/sendmail -oi -t < To: Subject: GNU Rush notification Be informed that $user executed $command. EOT  File: rush.info, Node: Test Mode, Next: Option Summary, Prev: Usage Tips, Up: Top 7 Test Mode *********** GNU Rush provides a special "test mode", intended to test configuration files and to emulate execution of commands. Test mode is enabled by the '--test' command line option (aliases: '--lint', '-t'). When 'rush' is given this option, the following occurs: 1. All diagnostic messages are redirected to standard error, instead of syslog. 2. If a single non-option argument is present, it is taken as a name of the configuration file to use. 3. The configuration file is parsed. If parsing fails, the program exits with the code 1. 4. If the '-c' option is present, 'rush' processes its argument as usual (*note Operation::), except that the command itself is not executed. 5. Otherwise, if '-i' option is present, 'rush' emulates interactive usage, but does not execute the final command. An exit status of 0 means no errors, 1 means an error has occurred. You can also emulate access by a particular user, by supplying his user name via the '--user' ('-u') option. This option implies '--test'. In test mode, you can set debugging level (*note Debugging::) from the command line, using the '--debug' ('-d') command line option. It expects a single number specifying debugging level as its argument. The debugging level set this way overrides settings from the configuration file. Here are several examples that illustrate the use of test mode in various cases: 1. Test default configuration file: $ rush --test 2. Test configuration file 'sample.rc': $ rush --test sample.rc 3. Test interactive access $ rush --test -i sample.rc 4. Test the configuration file and emulate execution of the command 'cvs server'. Use debugging level 2: $ rush --test --debug=2 -c "cvs server" 5. Same, but for user 'jeff': $ rush --user=jeff --debug=2 -c "cvs server" Note, that you don't need to specify '--test' along with '--user' or '-i' options. 6. Same, but use 'sample.rc' instead of the default configuration file: $ rush --test --debug=2 -c "cvs server" sample.rc * Menu: * dump mode::  File: rush.info, Node: dump mode, Up: Test Mode 7.1 Dump Mode ============= Dump mode is similar to test mode. The main difference is that in this mode, 'rush' dumps to the standard output a description of the user request after performing all checks and transformations. The mode is requested by the '--dump=ATTR' ('-D ATTR') option. The argument ATTR is a comma-separated list of the names of attributes to be included in the dump, or the word 'all', standing for all attributes. Additional options and arguments are the same as for the '--test' option. The description is formatted as a JSON object(1) with the following attributes. These are also the allowed values for the ATTR list: cmdline Command line after transformations. argv Array of command line arguments after transformations. prog Name of the program to be executed. If 'null', 'argv[0]' will be used. interactive '0' for normal requests, '1' for interactive requests. pw_name Name of the user from the system user database. pw_uid UID of the user. pw_gid GID of the user. pw_dir Home directory of the user, as set in the system user database. umask Value of the umask (octal). chroot_dir Chroot directory. home_dir Current working directory. gid New GID as set by the 'newgrp' action, or '-1' if unchanged. fork Fork mode. It is a three-state attribute: '0' meaning "disabled", '1' meaning "enabled", and '-1' meaning "default state". acct Accounting mode. See 'fork', for a description of possible values. text_domain Textual domain for i18n. localedir Locale directory for i18n. locale Locale name environ Dump of the environment (array of assignments). vars Defined variables, as a JSON object. The attribute 'all' stands for all attribute in the same order as listed in the table above. ---------- Footnotes ---------- (1) Well, almost. It diverges from the JSON standard in that slash characters are not escaped in string objects.  File: rush.info, Node: Option Summary, Next: Rushwho, Prev: Test Mode, Up: Top 8 Option Summary **************** This chapter provides a short summary of 'rush' command line options. '-c COMMAND' Specify the command to run. '-C TEST' '--security-check=TEST' Configure security checks for the main configuration file. *Note include-security::, for the description of TEST argument. *Note security checks::, for the discussion of the available security tests. '-d NUMBER' '--debug=NUMBER' Set debugging level. '--dump=ATTRS' '-D ATTRS' Run in "request dump mode". Argument is a comma-separated list of attribute names. *Note dump mode::, for a detailed description of the request dump mode. '-i' Emulate interactive access. *Note Test Mode::. '--show-default' Display the default built-in configuration. *Note Default Configuration::, for more information. '-t' '--test' '--lint' Run in test mode. An optional argument may be used with this option to specify alternative configuration file name, e.g.: $ rush --lint ./test.rc If the '-c' option is also specified, 'rush' emulates the normal processing for the command, but does not execute it. '-x' '--trace' Print parser traces. When used twice, print lexical scanner traces as well. This option is intended for debugging. '-T' Test scanner mode. This option is used by the 'rush' testsuite. '-u NAME' '--user=NAME' Emulate access by user NAME. This option implies '--test' and is valid only when used by root and in conjunction with the '-c' option. '-v' '--version' Display program version. '-h' '--help' Display a short help message. '--usage' Display a concise usage summary.  File: rush.info, Node: Rushwho, Next: Rushlast, Prev: Option Summary, Up: Top 9 The 'rushwho' utility. ************************ The 'rushwho' utility displays a list of users who are currently using 'rush'. The utility operates on default Rush database, which is maintained if 'rush' runs in accounting mode (*note Accounting and Forked Mode::). The following is a sample output from 'rushwho': Login Rule Start Time PID Command jeff sftp Sun 12:17 00:58:26 10673 bin/sftp-server The information displayed is: Login The login name of the user. Rule The tag of the rule he is served under (*note tag: Rule.). Start Time when the rule began execution. Time Duration of the session. PID PID of the running command. Command Command line being executed. This format is a built-in default. It may be changed either by setting the 'RUSHWHO_FORMAT' environment variable to the desired format string, or by using '--format' command line option. * Menu: * Rushwho Options:: * Formats::  File: rush.info, Node: Rushwho Options, Next: Formats, Up: Rushwho 9.1 Rushwho Options =================== This section summarizes the command line options understood by 'rushwho' utility. '-F STRING' '--format=STRING' Use STRING instead of the default format, described in *note Rushwho::. *Note Formats::, for a detailed description of the output format syntax. If STRING begins with a '@', then this character is removed from it, and the resulting string is treated as the name of the file to read. The contents of this file is the format string. The file is read literally, except that lines beginning with ';' are ignored (they can be used to introduce comments). For example, 'rushwho --format=@formfile' reads in the contents of the file named 'formfile'. '-f DIR' '--file=DIR' Use database directory DIR, instead of the default. By default, database files are located in '/usr/local/var/rush'. '-H' '--no-header' Do not display header line. '-v' '--version' Display program version. '-h' '--help' Display a short help message. '--usage' Display a concise usage summary.  File: rush.info, Node: Formats, Prev: Rushwho Options, Up: Rushwho 9.2 Output Formats ================== A format string controls the output of every record from GNU Rush accounting database. It may contain following four types of objects: Ordinary characters These are copied to the output verbatim. Escapes An escape is a backslash ('\\'), followed by a single character. It is interpreted as follows: Escape Output \a Audible bell character (ASCII 7) \b Backspace character (ASCII 8) \e Escape character (ASCII 27) \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. Any escape not listed in the table above results in its second character being output. Quoted strings Strings are delimited by single or double quotes. Within a string escape sequences are interpreted as described above. Format specifications A "format specification" is a kind of function, which outputs a particular piece of information from the database record. Each format specification starts with an opening brace and ends with a closing brace. The first word after the brace is the name of the format specification. Remaining words are "positional arguments" followed by "keyword arguments". Both are optional. When specified, keyword arguments must follow positional ones. A keyword argument begins with a colon. For example: '(time)' A single format specification. '(time 10)' The same format specification with the output width limited to 10 characters. '(time 10 Duration)' The 'time' format specification, with the output width limited to 10 characters and 'Duration' as a header title. '(time 10 "Session Duration" :right :format %H:%M)' The same with two keyword arguments: ':right' and ':format'. The latter takes the string '%H:%M' as its argument. Notice the use of quoted string to preserve the whitespace. A full list of format specifications follows. -- Format Spec: newline [COUNT] Causes the newline character to be output. If the optional COUNT is supplied, that many newlines will be printed -- Format Spec: tab [NUM] Advance to the next tab stop in the output stream. If optional NUM is present, then skip NUM tab stops. Each tab stop is eight characters long. The following specifications output particular fields from the database record. They all take two positional arguments: WIDTH and TITLE. The first argument, WIDTH sets the maximum output length for this specification. If the number of characters actually output is less than the width, they will be padded with whitespace either to the left or to the right, depending on the presence of the ':right' keyword argument. If the number of characters is greater than WIDTH, they will be truncated to fit. If WIDTH is not given, the field is output as is. The second argument, TITLE, gives the title of this column for the heading line. By default no title is output. Every field specification accepts at least two keyword arguments. The keyword ':right' may be used to request alignment to the right. This keyword is ignored if WIDTH is not given. The keyword ':empty' followed by a string instructs 'rushwho' to output that string if the resulting value for this specification would otherwise be empty. -- Format Spec: user WIDTH TITLE [:empty REPL][:right] Print the user login name. -- Format Spec: time WIDTH TITLE [:empty REPL] [:right] [:format DATE-FORMAT] -- Format Spec: start-time WIDTH TITLE [:empty REPL] [:right] [:format DATE-FORMAT] Date and time when the session started. The ':format' keyword introduces the 'strftime' format string to be used when converting the date for printing. The default value is '%a %H:%M'. *Note Time and Date Formats::, for a detailed description of 'strftime' format strings. -- Format Spec: stop-time WIDTH TITLE [:empty REPL] [:right] [:format DATE-FORMAT] Time when the command finished. This specifier is meaningful only for 'rushlast' (*note Rushlast::). If the command is still running, the word 'running' is output. -- Format Spec: duration WIDTH TITLE [:empty REPL] [:right] Total time of the session duration. -- Format Spec: rule WIDTH TITLE [:right] The tag of the rule used to serve the user. *Note tag: Rule, for a detailed description of rules and tags. -- Format Spec: command WIDTH TITLE [:empty REPL] [:right] Command line being executed. -- Format Spec: pid WIDTH TITLE [:right] PID of the process. For example, the following is the default format for the 'rushwho' utility. It is written in a form suitable for use in a file supplied with the '--format=@FILE' command line option (*note format option::): (user 10 Login)" " (rule 8 Rule)" " (start-time 0 Start)" " (duration 9 Time)" " (pid 10 PID)" " (command 28 Command)  File: rush.info, Node: Rushlast, Next: Accounting Database, Prev: Rushwho, Up: Top 10 The 'rushlast' utility. ************************** The 'rushlast' utility searches back through the GNU Rush database and displays a list of all user sessions since the database was created. By default, it displays the following information: Login Rule Start Stop Time Command gray rsync Sun 20:43 Sun 20:43 05:57 /usr/bin/rsync /upload jeff sftp Sun 20:09 running 07:17 /bin/sftp-server Login The login name of the user. Rule The tag of the rule he is served under (*note tag: Rule.). Start Time when the rule began execution. Start Time when the command finished, or the word 'running' if it is still running. Time Duration of the session. Command Command line being executed. This format is a built-in default. It may be changed either by setting the 'RUSHLAST_FORMAT' environment variable to the desired format string, or by using '--format' command line option (*note Rushlast Options::). * Menu: * Rushlast Options::  File: rush.info, Node: Rushlast Options, Up: Rushlast 10.1 Rushlast Options ===================== This section summarizes the command line options understood by 'rushlast' utility. '-F STRING' '--format=STRING' Use STRING instead of the default format, described in *note Rushwho::. *Note Formats::, for a detailed description of the output format syntax. To read format from a file, use '--format=@FILENAME'. The file is read literally, except that lines beginning with ';' are ignored (they can be used to introduce comments). '-f DIR' '--file=DIR' Use database directory DIR, instead of the default. By default, database files are located in '/usr/local/var/rush'. '--forward' Display entries in chronological order, instead of the reverse chronological one, which is the default. '-n NUMBER' '--count=NUMBER' '-NUMBER' Show at most NUMBER records. The form '-NUMBER' is provided for compatibility with the 'last(1)' utility. '-H' '--no-header' Do not display header line. '-v' '--version' Display program version. '-h' '--help' Display a short help message. '--usage' Display a concise usage summary.  File: rush.info, Node: Accounting Database, Next: Reporting Bugs, Prev: Rushlast, Up: Top 11 Accounting Database ********************** Rush accounting database is stored in the directory 'LOCALSTATEDIR/rush', where LOCALSTATEDIR stands for the name of the local state directory, defined at compile time. By default, it is 'PREFIX/var', where PREFIX is the installation prefix, which defaults to '/usr/local'. Thus, the default database directory is '/usr/local/var/rush'. You can change this default using the '--localstatedir' option to 'configure' before compiling the package. The '--prefix' option affects it as well. As of version 2.4, the database consists of two files, called 'utmp' and 'wtmp'. The 'wtmp' file keeps information about all user sessions, both finished and still active. The 'utmp' file contains indices to those records in 'wtmp', which represent active sessions. The 'wtmp' grows continuously, while 'utmp' normally grows the first day or two after enabling accounting mode, and from then on its size remains without changes. If you set up log file rotation, e.g. by using 'logrotate' (*note logrotate: (logrotate(8))logrotate.), or a similar tool, it is safe to rotate 'wtmp' without notifying 'rush'. The only requirement is to truncate 'utmp' to zero size after rotating 'wtmp', as shown in the following 'logrotate.conf' snippet: /var/run/rush/wtmp { monthly create 0640 root svusers postrotate cat /dev/null > /var/run/rush/utmp endscript } Accounting files are owned by 'root' and normally are accessible only to the owner (file mode '600'). You may change the default permissions using the following global configuration file statements: -- global: acct-umask MASK Set umask used when accessing accounting database files. Default value is '022'. -- global: acct-dir-mode MODE Set mode bits for the accounting directory. The MODE argument is the mode in octal. -- global: acct-file-mode MODE Set mode bits for 'wtmp' and 'utmp' files. Notice, that these statements affect file and directory modes only when the corresponding file or directory is created. 'Rush' will not change modes of the existing files. The following sections contain a detailed description of the structure of these two files. You may skip them, if you are not interested in technical details. * Menu: * wtmp:: The Structure of 'wtmp' File. * utmp:: The Structure of 'wtmp' File.  File: rush.info, Node: wtmp, Next: utmp, Up: Accounting Database 11.1 The 'wtmp' file ==================== The 'wtmp' file consists of variable-size entries. It is designed so that it can easily be read in both directions. Each record begins with a fixed-size header, which is followed by three zero-terminated strings, and the record size in 'size_t' representation. The three strings are, in that order: the user login name, the rule tag, and the full command line. The header has the following structure: struct rush_wtmp { size_t reclen; pid_t pid; struct timeval start; struct timeval stop; char *unused[3]; }; where: 'reclen' is the length of the entire record, including the size of this header. This field is duplicated at the end of the record. 'pid' is the PID of the command executed for the user. 'start' represents the time of the beginning of the user session. 'stop' represents the time when the user session finished. If the session is still running, this field is filled with zeros. 'unused' The three pointers at the end of the structure are used internally by 'rush'. On disk, these fields are always filled with zeros.  File: rush.info, Node: utmp, Prev: wtmp, Up: Accounting Database 11.2 The 'utmp' file ==================== The 'utmp' file consists of a fixed-size records of the following structure: struct rush_utmp { int status; off_t offset; }; The fields have the following meaning: 'status' Status of the record: '0' if the record is unused, and '1' if it represents an active session. 'offset' Offset of the corresponding record in 'wtmp' (see previous section).  File: rush.info, Node: Reporting Bugs, Next: Time and Date Formats, Prev: Accounting Database, Up: Top 12 How to Report a Bug ********************** Email bug reports to . Please include a detailed description of the bug and information about the conditions under which it occurs, so we can reproduce it. To facilitate the task, the following list shows the basic set of information that is needed in order to find the bug: * Package version you use. * A detailed description of the bug. * Conditions under which the bug appears. * It is often helpful to send the contents of 'config.log' file along with your bug report. This file is created after running './configure' in the GNU Rush source root directory.  File: rush.info, Node: Time and Date Formats, Next: Copying This Manual, Prev: Reporting Bugs, Up: Top Appendix A Time and Date Formats ******************************** This appendix documents the time format specifications understood by the ':format' keyword in time output format specifiers (*note Formats::). Essentially, it is a reproduction of the man page for GNU 'strftime' function. Ordinary characters placed in the format string are reproduced without conversion. Conversion specifiers are introduced by a '%' character, and are replaced as follows: %a The abbreviated weekday name according to the current locale. %A The full weekday name according to the current locale. %b The abbreviated month name according to the current locale. %B The full month name according to the current locale. %c The preferred date and time representation for the current locale. %C The century number (year/100) as a 2-digit integer. %d The day of the month as a decimal number (range 01 to 31). %D Equivalent to '%m/%d/%y'. %e Like '%d', the day of the month as a decimal number, but a leading zero is replaced by a space. %E Modifier: use alternative format, see below (*note conversion specs::). %F Equivalent to '%Y-%m-%d' (the ISO 8601 date format). %G The ISO 8601 year with century as a decimal number. The 4-digit year corresponding to the ISO week number (see '%V'). This has the same format and value as '%y', except that if the ISO week number belongs to the previous or next year, that year is used instead. %g Like '%G', but without century, i.e., with a 2-digit year (00-99). %h Equivalent to '%b'. %H The hour as a decimal number using a 24-hour clock (range 00 to 23). %I The hour as a decimal number using a 12-hour clock (range 01 to 12). %j The day of the year as a decimal number (range 001 to 366). %k The hour (24-hour clock) as a decimal number (range 0 to 23); single digits are preceded by a blank. (See also '%H'.) %l The hour (12-hour clock) as a decimal number (range 1 to 12); single digits are preceded by a blank. (See also '%I'.) %m The month as a decimal number (range 01 to 12). %M The minute as a decimal number (range 00 to 59). %n A newline character. %O Modifier: use alternative format, see below (*note conversion specs::). %p Either 'AM' or 'PM' according to the given time value, or the corresponding strings for the current locale. Noon is treated as 'pm' and midnight as 'am'. %P Like '%p' but in lowercase: 'am' or 'pm' or a corresponding string for the current locale. %r The time in 'a.m.' or 'p.m.' notation. In the POSIX locale this is equivalent to '%I:%M:%S %p'. %R The time in 24-hour notation ('%H:%M'). For a version including the seconds, see '%T' below. %s The number of seconds since the Epoch, i.e., since 1970-01-01 00:00:00 UTC. %S The second as a decimal number (range 00 to 61). %t A tab character. %T The time in 24-hour notation ('%H:%M:%S'). %u The day of the week as a decimal, range 1 to 7, Monday being 1. See also '%w'. %U The week number of the current year as a decimal number, range 00 to 53, starting with the first Sunday as the first day of week 01. See also '%V' and '%W'. %V The ISO 8601:1988 week number of the current year as a decimal number, range 01 to 53, where week 1 is the first week that has at least 4 days in the current year, and with Monday as the first day of the week. See also '%U' and '%W'. %w The day of the week as a decimal, range 0 to 6, Sunday being 0. See also '%u'. %W The week number of the current year as a decimal number, range 00 to 53, starting with the first Monday as the first day of week 01. %x The preferred date representation for the current locale without the time. %X The preferred time representation for the current locale without the date. %y The year as a decimal number without a century (range 00 to 99). %Y The year as a decimal number including the century. %z The time-zone as hour offset from GMT. Required to emit RFC822-conformant dates (using '%a, %d %b %Y %H:%M:%S %z') %Z The time zone or name or abbreviation. %+ The date and time in 'date(1)' format. %% A literal '%' character. Some conversion specifiers can be modified by preceding them by the 'E' or 'O' modifier to indicate that an alternative format should be used. If the alternative format or specification does not exist for the current locale, the behaviour will be as if the unmodified conversion specification were used. The Single Unix Specification mentions '%Ec', '%EC', '%Ex', '%EX', '%Ry', '%EY', '%Od', '%Oe', '%OH', '%OI', '%Om', '%OM', '%OS', '%Ou', '%OU', '%OV', '%Ow', '%OW', '%Oy', where the effect of the 'O' modifier is to use alternative numeric symbols (say, roman numerals), and that of the 'E' modifier is to use a locale-dependent alternative representation.  File: rush.info, Node: Copying This Manual, Next: Concept Index, Prev: Time and Date Formats, Up: Top Appendix B GNU Free Documentation License ***************************************** Version 1.3, 3 November 2008 Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. 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. The "publisher" means any person or entity that distributes copies of the Document to the public. 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 in 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 under this License. Any attempt otherwise to copy, modify, sublicense, or distribute it is void, and will automatically terminate your rights under this License. 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, receipt of a copy of some or all of the same material does not give you any rights to use it. 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. If the Document specifies that a proxy can decide which future versions of this License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Document. 11. RELICENSING "Massive Multiauthor Collaboration Site" (or "MMC Site") means any World Wide Web server that publishes copyrightable works and also provides prominent facilities for anybody to edit those works. A public wiki that anybody can edit is an example of such a server. A "Massive Multiauthor Collaboration" (or "MMC") contained in the site means any set of copyrightable works thus published on the MMC site. "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 license published by Creative Commons Corporation, a not-for-profit corporation with a principal place of business in San Francisco, California, as well as future copyleft versions of that license published by that same organization. "Incorporate" means to publish or republish a Document, in whole or in part, as part of another Document. An MMC is "eligible for relicensing" if it is licensed under this License, and if all works that were first published under this License somewhere other than this MMC, and subsequently incorporated in whole or in part into the MMC, (1) had no cover texts or invariant sections, and (2) were thus incorporated prior to November 1, 2008. The operator of an MMC Site may republish an MMC contained in the site under CC-BY-SA on the same site at any time before August 1, 2009, provided the MMC is eligible for relicensing. 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.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''. 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: rush.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: * $#: Request variables. (line 18) * --count, rushlast: Rushlast Options. (line 27) * --debug: Test Mode. (line 32) * --debug, rush: Option Summary. (line 18) * --dump: dump mode. (line 10) * --dump <1>: Option Summary. (line 22) * --file, rushlast: Rushlast Options. (line 18) * --file, rushwho: Rushwho Options. (line 21) * --format, rushlast: Rushlast Options. (line 9) * --format, rushwho: Rushwho Options. (line 9) * --forward, rushlast: Rushlast Options. (line 23) * --help, rush: Option Summary. (line 64) * --help, rushlast: Rushlast Options. (line 41) * --help, rushwho: Rushwho Options. (line 34) * --lint: Test Mode. (line 6) * --lint, rush: Option Summary. (line 35) * --no-header, rushlast: Rushlast Options. (line 33) * --no-header, rushwho: Rushwho Options. (line 26) * --security-check, rush: Option Summary. (line 11) * --show-default: Default Configuration. (line 21) * --show-default, rush: Option Summary. (line 31) * --test: Test Mode. (line 6) * --test, rush: Option Summary. (line 35) * --trace, rush: Option Summary. (line 46) * --usage, rush: Option Summary. (line 68) * --usage, rushlast: Rushlast Options. (line 45) * --usage, rushwho: Rushwho Options. (line 38) * --user: Test Mode. (line 29) * --user, rush: Option Summary. (line 54) * --version, rush: Option Summary. (line 60) * --version, rushlast: Rushlast Options. (line 37) * --version, rushwho: Rushwho Options. (line 30) * -b, file system test: File system tests. (line 9) * -c: Test Mode. (line 6) * -c, file system test: File system tests. (line 12) * -c, rush: Option Summary. (line 8) * -C, rush: Option Summary. (line 11) * -d: Test Mode. (line 32) * -D: dump mode. (line 10) * -D <1>: Option Summary. (line 22) * -d, file system test: File system tests. (line 15) * -d, rush: Option Summary. (line 18) * -e, file system test: File system tests. (line 18) * -f, file system test: File system tests. (line 21) * -F, rushlast: Rushlast Options. (line 9) * -f, rushlast: Rushlast Options. (line 18) * -F, rushwho: Rushwho Options. (line 9) * -f, rushwho: Rushwho Options. (line 21) * -g, file system test: File system tests. (line 24) * -G, file system test: File system tests. (line 27) * -h, file system test: File system tests. (line 30) * -h, rush: Option Summary. (line 64) * -H, rushlast: Rushlast Options. (line 33) * -h, rushlast: Rushlast Options. (line 41) * -H, rushwho: Rushwho Options. (line 26) * -h, rushwho: Rushwho Options. (line 34) * -i, rush: Option Summary. (line 28) * -k, file system test: File system tests. (line 34) * -L, file system test: File system tests. (line 30) * -L, file system test <1>: File system tests. (line 37) * -n, rushlast: Rushlast Options. (line 27) * -O, file system test: File system tests. (line 40) * -p, file system test: File system tests. (line 43) * -r, file system test: File system tests. (line 46) * -s, file system test: File system tests. (line 49) * -S, file system test: File system tests. (line 52) * -t, rush: Option Summary. (line 35) * -T, rush: Option Summary. (line 51) * -u: Test Mode. (line 29) * -u, file system test: File system tests. (line 55) * -u, rush: Option Summary. (line 54) * -v, rush: Option Summary. (line 60) * -v, rushlast: Rushlast Options. (line 37) * -v, rushwho: Rushwho Options. (line 30) * -w, file system test: File system tests. (line 58) * -x, file system test: File system tests. (line 61) * -x, rush: Option Summary. (line 46) * accounting: Accounting and Forked Mode. (line 6) * accounting database: Accounting Database. (line 6) * acct: Accounting and Forked Mode. (line 27) * acct, dump attribute: dump mode. (line 61) * acct-dir-mode: Accounting control. (line 14) * acct-dir-mode <1>: Accounting Database. (line 44) * acct-file-mode: Accounting control. (line 18) * acct-file-mode <1>: Accounting Database. (line 48) * acct-umask: Accounting control. (line 10) * acct-umask <1>: Accounting Database. (line 40) * actions: Operation. (line 18) * actions, system: System Actions. (line 6) * all, dump attribute: dump mode. (line 79) * all, include security flag: include-security. (line 16) * argv, dump attribute: dump mode. (line 23) * backreference interpretation: Lexical Structure. (line 66) * backslash interpretation: Lexical Structure. (line 42) * basic regular expressions: regexp. (line 6) * chdir: System Actions. (line 39) * checking file ownership: File system tests. (line 6) * checking file type: File system tests. (line 6) * chroot: System Actions. (line 17) * chroot_dir, dump attribute: dump mode. (line 48) * clrenv: Environment. (line 9) * cmdline, dump attribute: dump mode. (line 20) * command: Request variables. (line 17) * command <1>: Formats. (line 126) * comparison: Comparisons. (line 6) * conditions: Operation. (line 18) * conditions <1>: Matching Conditions. (line 6) * config-error: Error Messages. (line 26) * configuration file syntax: Syntax. (line 6) * configuration file, testing: Test Mode. (line 6) * cvs: cvs. (line 6) * debug: Debugging. (line 9) * debugging: Debugging. (line 6) * debugging levels: Debugging. (line 17) * delete: delete. (line 8) * delete <1>: delete. (line 11) * dir_iwgrp, include security flag: include-security. (line 30) * dir_iwoth, include security flag: include-security. (line 34) * domain, localization: Localization. (line 28) * dump mode: dump mode. (line 6) * duration: Formats. (line 119) * environ, dump attribute: dump mode. (line 73) * Environment: Environment. (line 6) * error messages: Error Messages. (line 6) * evalenv: Environment. (line 45) * exit: Exit. (line 10) * exit <1>: Exit. (line 11) * exit rule: Exit. (line 6) * expand-undefined: Expansion control. (line 9) * expansion of undefined variables: Variable expansion. (line 54) * extended regular expressions: regexp. (line 6) * fall-through: Fall-through. (line 17) * fall-through rule: Operation. (line 38) * fall-through statement: Fall-through. (line 6) * fallthrough: Fall-through. (line 18) * fallthrough <1>: Fall-through. (line 6) * file ownership, checking: File system tests. (line 6) * file type, checking: File system tests. (line 6) * fork: Accounting and Forked Mode. (line 52) * fork, dump attribute: dump mode. (line 57) * forked mode: Accounting and Forked Mode. (line 12) * g, transform flag: set. (line 57) * gecos: Request variables. (line 15) * gid: Request variables. (line 13) * gid, dump attribute: dump mode. (line 54) * git: git. (line 6) * git-receive-pack: git. (line 6) * git-shell: git. (line 6) * git-upload-pack: git. (line 6) * global: Global. (line 6) * group: Membership operators. (line 16) * group <1>: Request variables. (line 11) * groupwritabledir, include security flag: include-security. (line 30) * groupwritablefile, include security flag: include-security. (line 22) * home: Request variables. (line 14) * home_dir, dump attribute: dump mode. (line 51) * i, transform flag: set. (line 61) * i18n: Localization. (line 6) * identifiers, configuration: Lexical Structure. (line 22) * in, operator: Membership operators. (line 9) * include: Include. (line 9) * include <1>: Include. (line 6) * include-security: include-security. (line 11) * indexing, words in command line: Positional variables. (line 6) * insert: insert. (line 9) * insert <1>: insert. (line 10) * interactive: Interactive. (line 12) * interactive access: Interactive. (line 6) * interactive, dump attribute: dump mode. (line 30) * internationalization: Localization. (line 6) * iwgrp, include security flag: include-security. (line 22) * iwoth, include security flag: include-security. (line 26) * keepenv: Environment. (line 12) * l10n: Localization. (line 6) * legacy syntax: Configuration File. (line 37) * limiting number of simultaneous sessions: System Actions. (line 74) * limits: System Actions. (line 45) * link, include security flag: include-security. (line 38) * locale: Localization Directives. (line 9) * locale directory: Localization. (line 24) * locale name: Localization. (line 12) * locale, dump attribute: dump mode. (line 70) * locale-dir: Localization Directives. (line 14) * localedir, dump attribute: dump mode. (line 67) * localization: Localization. (line 6) * localization directives: Localization Directives. (line 6) * map: map. (line 6) * map <1>: map. (line 7) * match: Matching Conditions. (line 6) * matching conditions: Matching Conditions. (line 6) * message: Error Messages. (line 6) * msgfmt: Writing Your Localization. (line 41) * newgroup: System Actions. (line 13) * newgrp: System Actions. (line 12) * newline: Formats. (line 67) * nologin-error: Error Messages. (line 18) * options, command line: Option Summary. (line 6) * output formats: Formats. (line 6) * owner, include security flag: include-security. (line 19) * pid: Formats. (line 129) * post-socket: Notification. (line 10) * prog, dump attribute: dump mode. (line 26) * program: Request variables. (line 16) * pw_dir, dump attribute: dump mode. (line 42) * pw_gid, dump attribute: dump mode. (line 39) * pw_name, dump attribute: dump mode. (line 33) * pw_uid, dump attribute: dump mode. (line 36) * quoted strings: Lexical Structure. (line 36) * regexp: regexp. (line 9) * regular expressions: regexp. (line 6) * remopt: remopt. (line 9) * remopt <1>: remopt. (line 10) * request: Operation. (line 13) * request <1>: Request. (line 6) * rsync: rsync. (line 6) * rule: Operation. (line 18) * rule <1>: Rule. (line 13) * rule <2>: Rule. (line 6) * rule <3>: Formats. (line 122) * rule tag: Rule. (line 15) * rule, fall-through: Operation. (line 38) * rush, statement: Syntax. (line 16) * rush-po: Writing Your Localization. (line 21) * rush.rc: Configuration File. (line 6) * rushlast: Rushlast. (line 6) * RUSHLAST_FORMAT: Rushlast. (line 33) * rushwho: Rushwho. (line 6) * rushwho, command line options: Rushwho Options. (line 6) * RUSHWHO_FORMAT: Rushwho. (line 34) * s-expression: set. (line 42) * scp: scp. (line 6) * set: set. (line 9) * set <1>: set. (line 10) * set <2>: set. (line 18) * set <3>: set. (line 19) * set <4>: set. (line 25) * set <5>: set. (line 26) * setenv: Environment. (line 26) * sftp: sftp. (line 6) * simultaneous sessions: System Actions. (line 74) * sleep-time: sleep-time. (line 6) * start-time: Formats. (line 103) * stop-time: Formats. (line 113) * svn: svn. (line 6) * syntax version statement: Syntax. (line 16) * syntax, configuration files: Syntax. (line 6) * syntax, legacy: Configuration File. (line 37) * system actions: System Actions. (line 6) * system-error: Error Messages. (line 34) * tab: Formats. (line 71) * tag, rule: Rule. (line 15) * tcpmux: Notification. (line 17) * test mode: Test Mode. (line 6) * testing configuration file: Test Mode. (line 6) * text-domain: Localization Directives. (line 17) * textual domain: Localization. (line 28) * text_domain, dump attribute: dump mode. (line 64) * tilde expansion: System Actions. (line 18) * tilde expansion <1>: Include. (line 12) * time: Formats. (line 101) * time formats, for --time-format option: Time and Date Formats. (line 6) * trap rule: Exit. (line 36) * uid: Request variables. (line 12) * umask: System Actions. (line 8) * umask, dump attribute: dump mode. (line 45) * undefined variable, expansion: Variable expansion. (line 54) * unquoted strings: Lexical Structure. (line 30) * unset: unset. (line 6) * unset <1>: unset. (line 9) * unsetenv: Environment. (line 35) * usage-error: Error Messages. (line 12) * user: Request variables. (line 9) * user <1>: Formats. (line 98) * utmp: utmp. (line 6) * utmp file, accounting database: Accounting Database. (line 15) * vars, dump attribute: dump mode. (line 76) * word splitting: Positional variables. (line 6) * worldwritabledir, include security flag: include-security. (line 34) * worlwritablefile, include security flag: include-security. (line 26) * wtmp: wtmp. (line 6) * wtmp file, accounting database: Accounting Database. (line 15) * x, transform flag: set. (line 64)  Tag Table: Node: Top872 Node: Intro2927 Node: Operation3402 Ref: Operation-Footnote-15397 Node: Quick Start5548 Node: Configuration File7242 Ref: security checks7822 Ref: Configuration File-Footnote-19136 Node: Lexical Structure9308 Ref: word9866 Ref: token9866 Ref: backslash-interpretation11105 Ref: backreference12035 Ref: variable references13207 Ref: operator13656 Ref: Operators13708 Node: Syntax14529 Ref: Syntax-Footnote-115840 Node: Global15951 Node: Expansion control16491 Node: Debugging17261 Node: sleep-time18299 Node: Error Messages18663 Node: regexp19780 Node: include-security20762 Node: Accounting control22569 Node: Rule23236 Node: Request24581 Node: Positional variables25207 Ref: indexing25354 Node: Request variables27044 Node: Environment variables27787 Node: User-defined variables28156 Node: Variable expansion28683 Ref: handling of undefined variables30878 Node: Matching Conditions32179 Node: Comparisons32743 Ref: Comparison Operators33139 Node: Membership operators35270 Node: File system tests36211 Node: Boolean expressions37501 Ref: Boolean Operators37742 Node: Modifying variables38823 Node: set40776 Ref: s-expression42315 Node: insert43951 Node: unset45222 Node: remopt45637 Node: delete46506 Node: map47183 Node: Environment49584 Node: Transformations51666 Node: System Actions54547 Ref: chdir56037 Ref: L limit57602 Node: Fall-through58102 Node: Accounting and Forked Mode59815 Node: Notification62449 Node: Exit64392 Ref: Exit-Footnote-166675 Node: Interactive66737 Node: Localization68500 Ref: mo-name69749 Node: Localization Directives71362 Node: Writing Your Localization72278 Ref: rush-po73100 Node: Include74500 Ref: per-user l10n76123 Node: Default Configuration76387 Node: Usage Tips77285 Node: scp78627 Node: rsync80814 Node: sftp81980 Node: cvs83075 Node: svn84049 Node: git84787 Node: notification example85880 Node: Test Mode87305 Node: dump mode89570 Ref: dump mode-Footnote-191518 Node: Option Summary91636 Ref: --security-check91875 Node: Rushwho93435 Node: Rushwho Options94505 Ref: format option94702 Node: Formats95678 Node: Rushlast101196 Node: Rushlast Options102295 Node: Accounting Database103500 Node: wtmp106030 Node: utmp107312 Node: Reporting Bugs107836 Node: Time and Date Formats108599 Ref: %c time format109602 Ref: %s time format112590 Ref: conversion specs114730 Node: Copying This Manual115396 Node: Concept Index140547  End Tag Table  Local Variables: coding: utf-8 End: rush-2.4/doc/rush-po.10000644000175000017500000000371014643176117014565 0ustar00graygray00000000000000.\" This file is part of GNU Rush. .\" Copyright (C) 2016-2024 Sergey Poznyakoff .\" .\" GNU Rush is free software; you can redistribute it and/or modify .\" it under the terms of the GNU General Public License as published by .\" the Free Software Foundation; either version 3, or (at your option) .\" any later version. .\" .\" GNU Rush is distributed in the hope that it will be useful, .\" but WITHOUT ANY WARRANTY; without even the implied warranty of .\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the .\" GNU General Public License for more details. .\" .\" You should have received a copy of the GNU General Public License .\" along with GNU Rush. If not, see . .TH RUSH-PO 1 "April 23, 2019" "RUSH-PO" "Rush User Reference" .SH NAME rush\-po \- extracts translatable strings from \fBrush\.rc\fR file .SH SYNOPSIS \fBrush\-po\fR\ [\fB\-o \fIPOFILE\fR]\ [\fB\-\-output=\fIPOFILE\fR]\ \fIFILE\fR .sp \fBrush\-po \-h\fR | \fB\-\-help\fR .SH DESCRIPTION Extracts translatable strings from \fBrush\fR configuration file \fIFILE\fR. .PP Produces on output a valid portable object (PO) file that can be compiled into localization file using .BR msgfmt (1). .SH OPTIONS .TP \fB\-h, \fB\-\-help\fR Print a short help summary and exit. .TP \fB\-o, \fB\-\-output=\fIFILE\fR Write output to \fIFILE\fR, instead of the standard output. .SH SEE ALSO .BR rush.rc (5), .BR rush (8), .BR msgfmt (1). .SH "BUG REPORTS" Report bugs to . .SH COPYRIGHT Copyright \(co 2019 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: rush-2.4/doc/gendocs.sh0000755000175000017500000004106614643176117015075 0ustar00graygray00000000000000#!/bin/sh -e # gendocs.sh -- generate a GNU manual in many formats. This script is # mentioned in maintain.texi. See the help message below for usage details. scriptversion=2015-02-28.17 # Copyright 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 # 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 . # # 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: ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/ChangeLog����������������������������������������������������������������������������������0000644�0001750�0001750�00000174672�14655401526�014131� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������2024-08-09 Sergey Poznyakoff <gray@gnu.org> Version 2.4 2024-07-09 Sergey Poznyakoff <gray@gnu.org> Version 2.3.90 2024-06-14 Sergey Poznyakoff <gray@gnu.org> Use getgrouplist, if available. * configure.ac: Check if getgrouplist is available. Define GNULIB_XALLOC_DIE to provide a prototype of xalloc_die for gnulib. * src/rush.c (get_user_groups): Use getgrouplist, if available. 2024-06-09 Sergey Poznyakoff <gray@gnu.org> Fix rush-po * src/rush-po: Fix processing of quoted strings. Fix recognition of "exit" rules. 2023-11-26 Sergey Poznyakoff <gray@gnu.org> Minor change. * src/cf.c (make_socket): Use getaddrinfo. 2023-06-02 Sergey Poznyakoff <gray@gnu.org> Add missing include Switch to newer autotools 2023-04-05 Sergey Poznyakoff <gray@gnu.org> Fix bug in handling of the "message" statement * src/rush.c (set_error_msg): Copy message text. 2023-01-22 Sergey Poznyakoff <gray@gnu.org> Update copyright years 2022-07-16 Sergey Poznyakoff <gray@gnu.org> Version 2.3 2022-07-13 Sergey Poznyakoff <gray@gnu.org> Pull latest wordsplit 2022-07-13 Sergey Poznyakoff <gray@gnu.org> Bugfix in remopt * src/rush.c (remove_option): Make sure tail pointer never points past the terminating null character. 2022-01-17 Sergey Poznyakoff <gray@gnu.org> Improve previous commit 2022-01-12 Sergey Poznyakoff <gray@gnu.org> Fix EOF check with flex >= 2.6.1 2022-01-02 Sergey Poznyakoff <gray@gnu.org> Version 2.2 Update copyright year 2021-09-01 Sergey Poznyakoff <gray@gnu.org> Add missing includes 2021-08-28 Sergey Poznyakoff <gray@gnu.org> transform: fix replacement of numbered pattern instance * src/transform.c (_single_transform_name_to_slist): Avoid duplicating initial prefix if replace is not needed. * tests/transform.at: Add new testcases. 2021-04-07 Sergey Poznyakoff <gray@gnu.org> Pull wordsplit 2021-02-16 Sergey Poznyakoff <gray@gnu.org> Bugfix * src/rush.c: Expand argument to -X test 2021-02-16 Sergey Poznyakoff <gray@gnu.org> Implement file type and ownership tests * NEWS: Document changes. * configure.ac: Version 2.1.90. Raise autoconf and automake requirements. * doc/rush.texi: Document changes. * src/cfgram.y: New rule for file system tests. * src/cflex.l: New rule for the TEST token. * src/rush.c (groupmember): Change type of the first argument. (rush_access,eval_fstest): New functions. (test_eval): Process the test_fstest node type. * src/rush.h (test_fstest): New node type. (fstest_op): New enum. (test_node): New member: fstest * tests/.gitignore: Add mksock * tests/mksock.c: New file. * tests/fstest.at: New test. * tests/Makefile.am: Add new test. * tests/testsuite.at: Likewise. 2021-01-06 Sergey Poznyakoff <gray@gnu.org> Update copyright years 2020-06-14 Sergey Poznyakoff <gray@gnu.org> Use wordsplit v1.1 2019-07-12 Sergey Poznyakoff <gray@gnu.org> Version 2.1 2019-07-10 Sergey Poznyakoff <gray@gnu.org> Use wordsplit for a submodule 2019-07-01 Sergey Poznyakoff <gray@gnu.org> Bugfixes * doc/rush.rc.5: Fix typo. * src/cfgram.y: Allow for multiple EOLs and comments after the preface statement. * src/cflex.l: \n produces a single EOL token * tests/regexp.at: Fix improper usage of literal user name in the expected string. 2019-07-01 Sergey Poznyakoff <gray@gnu.org> Version 2.0 2019-06-30 Sergey Poznyakoff <gray@gnu.org> Minor fix * configure.ac: Version 1.9.91 * NEWS: Update. * src/cfgram.y: Fix calls to compile_transform_expr. * src/config.c: Likewise. * src/rush.c (die): Allow for fmt==NULL. (die_usage): New function. * src/rush.h (die_usage): New proto. (compile_transform_expr): Change signature. * src/transform.c (parse_transform_expr): Take struct cfloc * as an additional argument. Use it in diagnostics. (compile_transform_expr): Likewise. 2019-06-29 Sergey Poznyakoff <gray@gnu.org> Issue a notice when parsing a legacy configuration file * NEWS: Document changes. * doc/rush.texi: Fix references to the legacy syntax docs. * src/config.c (cfparse_old): Issue a notice. * src/rush.c (vlogmsg): Discern between LOG_INFO and LOG_NOTICE. * tests/legacy/argc.at: Update stderr expectation. * tests/legacy/backref.at: Likewise. * tests/legacy/chdir.at: Likewise. * tests/legacy/command.at: Likewise. * tests/legacy/delete.at: Likewise. * tests/legacy/env.at: Likewise. * tests/legacy/error.at: Likewise. * tests/legacy/fallthrough.at: Likewise. * tests/legacy/gid.at: Likewise. * tests/legacy/interactive.at: Likewise. * tests/legacy/map.at: Likewise. * tests/legacy/match.at: Likewise. * tests/legacy/matchprog.at: Likewise. * tests/legacy/newgrp.at: Likewise. * tests/legacy/set.at: Likewise. * tests/legacy/setvar.at: Likewise. * tests/legacy/transform.at: Likewise. * tests/legacy/uid.at: Likewise. * tests/legacy/umask.at: Likewise. * tests/legacy/unsetvar.at: Likewise. 2019-06-29 Sergey Poznyakoff <gray@gnu.org> Finish the docs 2019-06-27 Sergey Poznyakoff <gray@gnu.org> New transformation statements: insert and remopt * doc/rush.rc.5: Update (unfinished). * doc/rush.texi: Document the changes. * etc/rush.rc (svn): Rewrite the rule using insert and remopt. * src/cfgram.y: New statements: insert and remopt. * src/cflex.l: New keywords. * src/config.c (_parse_transform_ar,_parse_map_ar) (_parse_delete_ar,_parse_delete): Initialize node->target.v.arg.ins to 0. * src/rush.c (get_arg_no): Strict boundary checking. (rush_transform): Special handling for transform_remopt. Support argument insertions. * src/rush.h (transform_target.arg): Change type. (transform_remopt): New constant. (option_defn): New struct. (transform_node.v.remopt): New member. * tests/insert.at: New file. * tests/remopt.at: New file. * tests/Makefile.am: Add new tests. * tests/testsuite.at: Include new tests. 2019-06-13 Sergey Poznyakoff <gray@gnu.org> Make sure user-defined variables are given preference over the environment ones. The order of precedence is: (1) request variables, (2) user variables, (3) environment. * lib/wordsplit.c (wordsplit_find_env): Rewrite as wsplt_env_lookup (wsplt_env_getvar): New function. (expvar): Select preference of wsplt_env_lookup vs. wsplt_env_getvar depending on the value if WRDSO_GETVARPREF option. * lib/wordsplit.h (WRDSO_GETVARPREF): New option. * src/map.c (rush_expand_string): Set WRDSO_GETVARPREF option. 2019-06-13 Sergey Poznyakoff <gray@gnu.org> Propagate changes to the environment due to ${X=V} constructs. * doc/rush.texi: Document the evalenv statement. * lib/wordsplit.c (_wsplt_store_errctx): Fix typo in the error message. (wsplt_assign_var): Fix a +1 offset of the ws_envidx field. * src/cfgram.y: New rule for the evalenv statement. * src/cflex.l: Likewise. * src/map.c (find_user_varptr): New function. (rush_getvarptr): Use find_user_varptr. (getvar): Try user-defined variables if no request variable matched. Environment variables are handled by wordsplit itself. (rush_expand_string): Pass environment to wordsplit. Propagate changes back to req->env and req->var_kv. * src/rush.c (envar_eval): New case. * src/rush.h (envar_eval): New constant. * tests/Makefile.am: Add new test. * tests/testsuite.at: Add new test. * tests/evalenv.at: New test. 2019-06-06 Sergey Poznyakoff <gray@gnu.org> Minor fix in wordsplit (pull from grecs a0c096190f) 2019-06-03 Sergey Poznyakoff <gray@gnu.org> Minor fix * lib/librush.h (wildmatch): Both string arguments are constant. * lib/wildmatch.c: Likewise. 2019-06-01 Sergey Poznyakoff <gray@gnu.org> Bugfix * lib/wildmatch.c (wilder_match): Fix processing of Kleene star. 2019-05-31 Sergey Poznyakoff <gray@gnu.org> Fix typo 2019-05-21 Sergey Poznyakoff <gray@gnu.org> Accept wildcards as arguments to keepenv and unsetenv commands. * lib/wildmatch.c: New source. * lib/Makefile.am: Add wildmatch.c * lib/librush.h (wildmatch): New proto. * src/cfgram.y (asgn_list): Accept quoted strings. (unset_envar): New function. (env_setup): Call unset_envar. * tests/keepenv.at: Test new features. * tests/unsetenv.at: Likewise. * doc/rush.8: Update. * doc/rush.rc.5: Start rewriting. * doc/rush.texi: Update. 2019-05-16 Sergey Poznyakoff <gray@gnu.org> Synch with grecs 1fa2dd2c 2019-05-15 Sergey Poznyakoff <gray@gnu.org> Rename "member" test to "group" 2019-05-15 Sergey Poznyakoff <gray@gnu.org> Bugixes * doc/rush.texi: Revise the docs. * etc/rush.rc: Fix typo. * src/cf.c (glattrib_debug): Don't override the value set from the command line. 2019-05-15 Sergey Poznyakoff <gray@gnu.org> Report names of undefined variables * lib/wordsplit.c: Import from grecs 20899f65 * lib/wordsplit.h: Likewise. * src/map.c (rush_ws_error): New function. (rush_expand_string): Set ws.ws_error. Use error context when reporting WRDSE_UNDEF. * src/rush.c (main): Use reparse_cmdline. * src/rush.h (rush_ws_error): New proto. * tests/undef.at: Update. 2019-05-15 Sergey Poznyakoff <gray@gnu.org> Refuse to set or unset read-only request variables. Among the request variables, only $program, $command, and positional variables can be changed. Neither $program nor $command can be unset. Unsetting a positional variable has the same effect as deleting it. * doc/rush.texi: Improve docs. * src/cf.h (new_rush_rule): Change signature. * src/cfgram.y: Refuse to modify read-only variables. New statement: unset [N] (equivalent to "delete N") * src/config.c (parse_input_buf): Rule tag generation is handled by new_rush_rule now. * src/map.c (vardef): New field: target. (rush_variable_target): New function. (rush_request_getvar): Removed. (rush_getvarptr): New function to use instead of it. * src/rush.c (rush_transform): Use rush_getvarptr * src/rush.h (target_readonly): New target type. (rush_request_getvar): Remove proto. (rush_getvarptr) (rush_variable_target): New proto. * tests/delete.at: Reflect the changes. * tests/setvar.at: Likewise. * tests/unsetvar.at: Likewise. 2019-05-14 Sergey Poznyakoff <gray@gnu.org> Import wordsplit from grecs 1658f568 * doc/rush.texi: Document $# * lib/wordsplit.c: Update. * lib/wordsplit.h: Update. * src/cflex.l: Handle $#, $@, and $* as one word. * src/config.c (_parse_argc): Translate to $# * src/map.c (var_argc): Remove. (request_vars): Remove argc. * tests/argc.at: Use $# instead of $argc * tests/compound.at: Likewise. 2019-05-14 Sergey Poznyakoff <gray@gnu.org> Import wordsplit from grecs 8652a500 This fixes handling of variable and command references in the request command line. 2019-05-14 Sergey Poznyakoff <gray@gnu.org> docs: spell checking 2019-05-13 Sergey Poznyakoff <gray@gnu.org> Convert example configuration to the new format 2019-05-13 Sergey Poznyakoff <gray@gnu.org> Add support for ${-N} argument references * lib/wordsplit.c (ISPOSBEG): New define. (expvar): Support for ${-N} notation. * src/cflex.l: Support for ${-N} notation. * tests/matcharg.at: Test ${N} and ${-N} notations. 2019-05-12 Sergey Poznyakoff <gray@gnu.org> Rewrite rush.texi (initial draft) 2019-05-12 Sergey Poznyakoff <gray@gnu.org> Improve the "member" condition * src/cfgram.y: "member" condition can take one argument. 2019-05-10 Sergey Poznyakoff <gray@gnu.org> Improve scanner * src/cf.c (cfstream_open_stdin): New function. (cfstream_avail): Use eof field. * src/cf.h (CFSTREAM): New field: eof. (cfstream_open_stdin,cflex_test,dumpstr): New proto. * src/cflex.l: Don't expand escapes within ${V:-""} construct. Keep track of locations when returning single-character tokens. (cflex_test): New function. * src/dump.c (dumpstr): New function. * src/map.c (rush_expand_string): Retain backslash in invalid escape sequences. * src/rush.c: Implement scanner test mode. * src/rushopt.opt (-T): New option. * tests/lex.at: New test. * tests/Makefile.am: Add new test. * tests/testsuite.at: Add new test. 2019-05-09 Sergey Poznyakoff <gray@gnu.org> Update rush-po to support both versions of the configuration file. 2019-05-08 Sergey Poznyakoff <gray@gnu.org> Fixes in scanner * src/cflex.l: Merge INMATCH and ARGS. Generalize rule for unquoted strings. Use stringbuf_add_escape_octal and stringbuf_add_escape_hex (complements dc4dcf015f24). 2019-05-08 Sergey Poznyakoff <gray@gnu.org> New comparison operator !~ * src/cfgram.y: New production. * src/cflex.l: Handle !~ * tests/regexp.at: Add new test. 2019-05-08 Sergey Poznyakoff <gray@gnu.org> Additional documentation 2019-05-07 Sergey Poznyakoff <gray@gnu.org> Bugfixes. * src/cf.c (cfstream_open_file) (cfstream_open_mem,cfstream_rewind): Initialize eol to 0. (cfstream_read): Force final newline. * src/cf.h (CFSTREAM): New field: eol. * src/cfgram.y: Initialize current_rule->file and line. 2019-05-07 Sergey Poznyakoff <gray@gnu.org> Implement include statements * src/cf.c (cfstream_same_file): New function. * src/cf.h (cfstream_same_file): New proto. * src/cfgram.y: Fix processing of the "include" statement. (new_envar): Bugfix. Initialize the "next" field. * src/cflex.l: Fix processing of the "include" statement. Forbid the use of "rule" and "global" in include files. * src/rush.c (env_setup): Catch internal errors. * tests/Makefile.am: Add new files. * tests/testsuite.at: Add new files. * tests/inc00.at: New file. * tests/inc01.at: New file. 2019-05-07 Sergey Poznyakoff <gray@gnu.org> Minor fixes * src/cfgram.y: Free unnecessary string values. 2019-05-06 Sergey Poznyakoff <gray@gnu.org> Use consistent printable token representation. 2019-05-06 Sergey Poznyakoff <gray@gnu.org> Change config format version recognition. * src/cf.h (cflex_normal): New proto. * src/cfgram.y: Change format version selection algorithm. * src/cflex.l: Likewise. 2019-05-06 Sergey Poznyakoff <gray@gnu.org> Fix testsuite * tests/delete.at: Add missing "rush 2.0" preface. 2019-05-06 Sergey Poznyakoff <gray@gnu.org> Fix backreference expansion. * src/cfgram.y (eol): New production. Use it instead of the EOL token. * src/cflex.l: Optimize handling of backslash escapes in quoted strings. * src/dump.c (dump_string_data): Fix escaping. * src/map.c (expandref): Allow for accessing backreferences with numbers greater than 9. The syntax is %{NN}. (rush_expand_string): Expand backreferences before all other expansions, to avoid spurious expansion of '%' sequences obtained as a result of variable expansion. Don't expand '\%'. * tests/Makefile.am: Add new tests. * tests/backref.at: Test the %{N} form. * tests/testsuite.at: Add new tests. * tests/qstr.at: New test case. 2019-05-06 Sergey Poznyakoff <gray@gnu.org> Improve parser. Add more tests. * src/cf.c: New global option "expand-undefined". (global_attrib_set): Handle the 'b' data type marker. * src/cf.h (expand_undefined): New extern. * src/cfgram.y: Provide textual descriptions for named tokens. Require '=' or '=~' between identifier and value in SET and SETENV rules. Allow for values in UNSETENV list. * src/cflex.l: Accept slashes in unquoted strings. Gracefully handle undefined escape sequences in strings. * src/map.c (expand_undefined): New global. (rush_expand_string): Expand undefined variables to empty strings if expand_undefined is set. * tests/Makefile.am: Add new tests. * tests/testsuite.at: Add new tests. * tests/backref.at: New file. * tests/clrenv.at: New file. * tests/keepenv.at: New file. * tests/regexp.at: New file. * tests/setenv.at: New file. * tests/setvar.at: New file. * tests/undef.at: New file. 2019-05-04 Sergey Poznyakoff <gray@gnu.org> Add testcases for the new rc syntax * src/Makefile.am (EXTRA_DIST): Add cfgram.output (AM_YFLAGS): Produce state map. * src/cf.c (vcferror): Finalize the stringbuf. * src/cf.h (cflex_pushargs,cflex_popargs) (skiptoeol,restorenormal): New protos. * src/cfgram.y: Provide textual token descriptions. Minor fixes in the grammar. * src/cflex.l: Various fixes. * tests/Makefile.am: Move old tests to the legacy/ subdirectory. Add new tests. 2019-05-03 Sergey Poznyakoff <gray@gnu.org> Simplify parser 2019-05-03 Sergey Poznyakoff <gray@gnu.org> Bugfixes * src/cf.c (cfloc_print): Don't null-terminate the string. * src/cf.h (cflex_debug,cfgram_debug): New protos. (curloc): New extern. * src/cfgram.y (yyerror): Rewrite using vlogmsg. (cfgram_debug): New function. * src/cflex.l (cflex_debug): New function. * src/rush.c (main): Configure parser and scanner traces if -x was given. * src/rushopt.opt (-x, --trace): New option. 2019-05-03 Sergey Poznyakoff <gray@gnu.org> Major rewrite: implement rest of configuration file statements * src/cf.c: Add functions for handling the following statements: Rule attributes: umask OCTAL chroot STRING chdir STRING fork BOOL acct BOOL post-socket STRING text-domain STRING locale-dir STRING locale STRING interactive BOOL newgroup|newgrp STRING Global attributes: debug STRING message sleep-time|usage-error |nologin-error|config-error |system-error STRING regexp [+-]STRING ... include-security STRING... acct-file-mode OCTAL acct-dir-mode OCTAL acct-umask OCTAL * src/cf.h: New prototypes. * src/cfgram.y: New statement "global". Handle rule and global attributes. Rewrite strlist support. * src/cflex.l: New rules for handling rule and global attributes, and the new "global" keyword. Handle +STRING, -STRING, and positional arguments as strings. * src/config.c (_parse_re_flags): Bugfix. "basic" and "icase" were mishandled if prefixed with "+" or "-" (_parse_acct_umask): Bugfix. rushdb_dir_mode was changed, instead of rushdb_umask. (all): Use functions from cf.c where possible. Use cferror for error reporting. 2019-05-02 Sergey Poznyakoff <gray@gnu.org> Begin major rewrite * configure.ac: Version 1.9.90. Check for yacc and lex * src/Makefile.am: Add new files. * src/cf.c: New file. * src/cf.h: New file. * src/cfgram.y: New file. * src/cflex.l: New file. * src/config.c: Use new I/O functions and control structures. * src/limits.c (limits_record_create) (limits_record_add): New functions. (parse_limits): Use them. Improve error reporting. * src/map.c: New built-in rush variable "argc". (rush_request_getvar,rush_request_delvar): New functions. (getvar): Support negative positional argument indexes. * src/rush.c: Rewrite test, transformation and environment evaluator. Use cfparse to process configuration file. * src/rush.h (transform_target_type): New enum. (transform_target): New struct. (transform_node,test_node): Complete rewrite. (test_type): New enum. (cmp_match,cmp_in): New opcodes. (test_numeric_node,test_arg_node): Remove. (rush_num_t): New data type. (rush_bool_t): New data type. (rush_error): New struct. (rush_rule): Remove test_head, test_tail; Use test_node instead. Remove error_msg, error_fd; Use single pointer instead. New fields: clrenv, envar_head, envar_tail. (vlogmsg): New proto. (limits_record_create) (limits_record_add) (rush_request_getvar) (rush_request_delvar) (new_standard_error) (new_error) (rush_error_msg): New protos. (envar_type): New enum. (envar): New struct. * lib/wordsplit.c (wordsplit_finish): Return single empty word in ws_wordv[0] on empty input. * tests/unsetvar.at: Fix typo 2019-04-24 Sergey Poznyakoff <gray@gnu.org> Version 1.9 2019-04-23 Sergey Poznyakoff <gray@gnu.org> Minor fixes 2019-04-23 Sergey Poznyakoff <gray@gnu.org> New program rush-po Extracts translatable strings from the rush configuration. Replaces rush-po.awk 2019-04-22 Sergey Poznyakoff <gray@gnu.org> Revise the docs 2019-04-20 Sergey Poznyakoff <gray@gnu.org> Implement backreference expansion and user-defined variables * NEWS: Updated. * configure.ac: Version 1.8.90 * doc/rush.texi: Document new features. * gnulib.modules: Remove obstack * src/config.c (_parse_command) (_parse_match): Don't pass REG_NOSUB flag. Subexpressions are needed now. (_parse_setvar,_parse_unsetvar): New functions. (TOK_ASSC): New token type. (parse_input_buf): Handle TOK_ASSC tokens. (toktab): Two new statements: setvar and unsetvar. * src/dump.c: Include user-defined variables to the dump. * src/map.c (rush_expand_string): Pass user-defined variables to wordsplit. Expand backreferences. * src/rush.c (test_regex): New function. (test_request_cmdline) (test_request_arg): Use test_regex. (expand_dir): New function. (transform_setvar_fun): New function. (run_rule): Use expand_dir to process directories. * src/rush.h (transform_setvar) (transform_unsetvar): New transform types. (transform_node): New member: varname. (rush_backref): New struct. (rush_request): Keep track of backreferences. * tests/Makefile.am: Add new tests. * tests/backref.at: New test. * tests/setvar.at: New test. * tests/unsetvar.at: New test. * tests/testsuite.at (m4_run_rush, m4_fmt_out) (m4_fmt_err, m4_fmt_out): Escape any double-quotes present in the argument to -c. Include new tests. * gnulib.modules: Remove obstack. * lib/Makefile.am (AM_CPPFLAGS): Define LOCALEDIR. * lib/i18n.c: Forget about configmake.h * po/POTFILES.in: Update. 2019-04-20 Sergey Poznyakoff <gray@gnu.org> Rewrite string expansion via wordsplit. Note: this commit drops support for $^ variable. * lib/wordsplit.c: Pull from grecs 3e07e3ad30e8a7a091e213eb4df839b7cf7f1e64 * lib/wordsplit.h: Likewise. * src/map.c (rush_expand_string): Use wordsplit to expand string. * tests/transform.at: Use $program instead of ${^} 2019-04-19 Sergey Poznyakoff <gray@gnu.org> Update copyright years Upgrade gnulib Upgrade wordsplit from grecs 1498bd570eb001a6b2bc3f1a5074e8b384d6db30 2019-04-19 Sergey Poznyakoff <gray@gnu.org> Minor fixes. * gnulib.modules: Remove vasprintf. * lib/rushdb.c (format_error): Use static buffer. * lib/wtmp.c (output_duration): Make sure outbytes is always initialized. (rush_wtmp_rewind,rush_wtmp_read): Add default statements, just in case. * src/rush.c (main): Check return from setuid. 2019-04-19 Sergey Poznyakoff <gray@gnu.org> Minor doc fixes * doc/Makefile.am: Rename rush.1 * doc/rush.1: Move to section 8 * doc/rush.rc.5: Fix section number. * doc/rush.texi: Fix wording of the copyright statement to match exactly that of GFDL without invariant sections. 2019-04-19 Sergey Poznyakoff <gray@gnu.org> Minor fix * src/rush.c: Remove unnecessary condition 2017-01-02 Sergey Poznyakoff <gray@gnu.org> Happy GNU Year 2016-10-01 Sergey Poznyakoff <gray@gnu.org> Version 1.8 2016-08-25 Sergey Poznyakoff <gray@gnu.org.ua> Fix testsuite Use AT_CHECK_UNQUOTED with variable substitution instead of postprocessing stderr and stdout with sed. 2016-08-22 Sergey Poznyakoff <gray@gnu.org.ua> Fix spelling errors 2016-08-20 Sergey Poznyakoff <gray@gnu.org.ua> Document the request dump mode. 2016-08-20 Sergey Poznyakoff <gray@gnu.org> Bugfixes 2016-08-20 Sergey Poznyakoff <gray@gnu.org.ua> Bugfixes * src/config.c (TOK_ENV): New flag. (toktab): Mark "env" with this flag. (parse_input_buf): If TOK_ENV bit is set, do environment variable expansion. * src/rush.c (env_setup): Bugfixes. Make sure it operates exactly as documented. (run_transforms): Major cleanup. * tests/env.at: New tests. * NEWS: Document the changes. * doc/rush.rc.5: Likewise. * doc/rush.texi: Likewise. 2016-08-19 Sergey Poznyakoff <gray@gnu.org.ua> Finish the testsuite. * doc/rush.rc.5: Fix typos. * doc/rush.texi: Likewise. * src/dump.c (dump_argv): Optionally sort the array. * src/map.c (meta_expand_string): Fix $N evaluation. (mapdef): Allow to use ${^} as a synonym to ${program}. * src/rush.c (env_setup): Fix handling of NAME+= and NAME=+ * tests/Makefile.am: Add new files. * tests/atlocal.in (RUSHDIR): New variable. (myfilter): New function. * tests/testsuite.at (AT_RUSH_TEST): Handle optional environment and interactive settings. Include New tests. * tests/chdir.at: New file. * tests/delete.at: New file. * tests/env.at: New file. * tests/error.at: New file. * tests/fallthrough.at: New file. * tests/gid.at: New file. * tests/interactive.at: New file. * tests/map.at: New file. * tests/newgrp.at: New file. * tests/set.at: New file. * tests/transform.at: New file. * tests/uid.at: New file. * tests/umask.at: New file. 2016-08-18 Sergey Poznyakoff <gray@gnu.org.ua> Fix typos 2016-08-18 Sergey Poznyakoff <gray@gnu.org.ua> Add testsuite * .gitignore: Update * src/.gitignore: Update. * Makefile.am (SUBDIRS): Add tests * configure.ac: Initialize testsuite * src/Makefile.am (rush_SOURCES)L Add dump.c * src/dump.c: New file. * src/rush.c (dump_option): New variable. (run_rule): Dump request if dump_option is set. * src/rush.h (dump_option): New extern. (dump_request): New proto. * src/rushopt.opt: New option --dump (-D) * tests/Makefile.am: New file. * tests/testsuite.at: New file. * tests/.gitignore: New file. * tests/argc.at: New file. * tests/atlocal.in: New file. * tests/command.at: New file. * tests/match.at: New file. * tests/matchprog.at: New file. * tests/myid.c: New file. 2016-08-17 Sergey Poznyakoff <gray@gnu.org.ua> Simplify the debugging code * src/rush.h (debug): Rewrite as a variadic macro. (debug2-debug6): Remove. * src/config.c: Use the debug macro. * src/limits.c: Likewise. * src/rush.c: Likewise. 2016-08-17 Sergey Poznyakoff <gray@gnu.org.ua> Get rid of the argmatch module * gnulib.modules: Remove argmatch * src/rush.h: Remove argmatch.h * src/cfck.c (chk_args): Change into struct. (chk_vals): Remove. (cfck_keyword): Rewrite. * src/rush.c (string_to_error_index): Scan array. 2016-08-17 Sergey Poznyakoff <gray@gnu.org.ua> Update copyright years in --version output * src/getopt.m4 (version_etc_copyright): Update copyright years. 2016-08-17 Sergey Poznyakoff <gray@gnu.org.ua> Update wordsplit. * lib/wordsplit.c: Update. * lib/wordsplit.h: Update. * src/rush.c: Use wordsplit_getwords to steal parsed-out words from the wordsplit_t. * src/rush.h (rush_request) <argc>: Change type to size_t. 2016-08-17 Sergey Poznyakoff <gray@gnu.org.ua> Bugfix * lib/rushdb.c (output_duration): Fix format specification. 2016-08-17 Sergey Poznyakoff <gray@gnu.org.ua> Update copyright years 2016-08-17 Sergey Poznyakoff <gray@gnu.org.ua> Redo support for interactive requests * src/rush.h (rush_rule, rush_request) <interactive>: New member. * src/rush.c (rush_interactive_shell): Remove. (match_rule): Remove. (env_concat): Fix eventual use of uninitialized variable. (run_rule): Select the return message depending on whether the request is interactive. Fix up argv[0] for interactive requests. (main): Redo support for interactive requests. * src/rushopt.opt: New option -i * src/config.c: The interactive keyword must be used within a rule. * doc/rush.texi: Document new interactive features. * NEWS: Likewise. * doc/rush.1: Update. * doc/rush.rc.5: Update. * doc/rushlast.1: Update. * doc/rushwho.1: Update. * src/map.c: Minor change. 2016-08-17 Sergey Poznyakoff <gray@gnu.org.ua> Version 1.7.91 Add gnulib as a submodule * .gitignore: Update. * .gitmodules: Update. Set version number 1.7.91 * configure.aca: Update. * NEWS: Update. * README: Update. Fix documentation. * src/getopt.m4: Fix --usage output. * doc/rush.1: New file. * doc/rushlast.1: New file. * doc/rushwho.1: New file. * doc/rush.rc.5: New file. * doc/Makefile.am: Distribute new manpages. 2015-04-24 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-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-05-26 Sergey Poznyakoff <gray@gnu.org> Update copyleft years 2014-02-11 Sergey Poznyakoff <gray@gnu.org> bootstrap.conf: initialize submodules 2014-01-20 Mats Erik Andersson <gnu@gisladisker.se> Protect against CVE-2013-6889 (tiny change). Reset the effective user identification in testing mode. 2013-12-18 Sergey Poznyakoff <gray@gnu.org.ua> Implement the "none" keyword in the "include-security" statement. Use imprimatur as submodule. 2013-12-17 Sergey Poznyakoff <gray@gnu.org.ua> Use wordsplit instead of the obsolete argcv_ stuff * lib/argcv.h: Remove. * lib/wordsplit.c: New file (from grecs). * lib/wordsplit.h: Likewise. * lib/Makefile.am (librush_a_SOURCES): Update. * lib/argcv.c: Rewrite. * lib/librush.h (slist_alloc) (argcv_free,argcv_string): New protos. * lib/slist.c (new_line_seg): New function. * src/config.c: Use wordsplit. * src/map.c: Likewise. * src/rush.c: Likewise. * src/rush.h: Include wordsplit.h * .gitignore: Update * po/.gitignore: Update 2013-06-19 Sergey Poznyakoff <gray@gnu.org.ua> Reread passwd database after chrooting. * src/rush.c (run_rule): Reread pw after chrooting. 2013-06-19 Sergey Poznyakoff <gray@gnu.org.ua> Set supplementary groups when switching to user privileges. * src/rush.c (membergid, get_user_groups) (setowner): New static functions. (run_rule): Call setowner to switch to user privileges. 2011-11-02 Sergey Poznyakoff <gray@gnu.org.ua> Version 1.7.90 2011-11-02 Sergey Poznyakoff <gray@gnu.org.ua> Assorted fixes. * lib/rushdb.c (output_duration): Select the best suitable time representation for the requested width. * NEWS: Fix typo. * lib/librush.h (RUSH_NORETURN): New define. * src/rush.h: Use RUSH_NORETURN. 2011-01-30 Sergey Poznyakoff <gray@gnu.org.ua> Minor fix * src/socket.c (post_socket_send): Use "a+" file mode. Suggested by Mats Erik Andersson. 2011-01-30 Sergey Poznyakoff <gray@gnu.org.ua> Remove obsolete gnulib modules. 2010-07-07 Sergey Poznyakoff <gray@gnu.org.ua> Version 1.7 * NEWS: Update. * configure.ac: Update. 2010-06-23 Sergey Poznyakoff <gray@gnu.org.ua> Allow the use of symbolic names in 'uid' and 'gid'. New command 'newgrp'. This also undoes commit ccb22a037, which became superfluous with the advent of these changes. * src/config.c (parsegid, parseuid): New functions. (new_rush_rule): Initialize gid to NO_GID. (parse_cmp_op): Handle != (accidentally sunonymous to !) (numstrtonum): New function. (parse_numtest): Take conversion function as 4th argument. All callers updated. (uidtonum): New function. (_parse_uid): Use uidtonum as a conversion function. (gidtonum): New function. (_parse_gid): Use gidtonum as a conversion function. (_parse_newgroup): New function. (_parse_main_group): Remove. (toktab): Remove "main-group", add "newgroup" and "newgrp". * src/rush.c (groupcmp): Remove princ parameter. All callers updated. (test_request): Remove test_request_main_group. (run_rule): Handle `newgrp' request. (main): Initialize req.gid to NO_GID. * src/rush.h (test_type): Remove test_main_group. (rush_rule)<gid>: New member. (rush_request)<gid>: New member. (NO_GID): New constant. * doc/rush.texi: Update. * NEWS, configure.ac: Set version 1.6.91 2010-06-13 Sergey Poznyakoff <gray@gnu.org.ua> Add new condition: main-group. * src/config.c (toktab): New condition main-group. * src/rush.c (groupcmp): New argument `princ' specifies whether to match only principal group or all the groups the user is member of. (test_request_group): Call groupcmp with princ=0. (test_request_main_group): New test. (test_request): Add test_request_main_group. * src/rush.h (test_type): New type test_main_group. * NEWS, THANKS: Update. 2010-04-21 Sergey Poznyakoff <gray@gnu.org.ua> Allow for "include" statements outside of rule context. * src/config.c (toktab): Remove TOK_RUL from the flags. 2010-04-20 Sergey Poznyakoff <gray@gnu.org.ua> Update NEWS. 2010-04-20 Sergey Poznyakoff <gray@gnu.org.ua> Improve rule parsing. A configuration file consisting of a single fall-through rule caused infinite loop in main. * src/rush.c (match_rule): return immediately if rule is NULL. (run_rule): Run accounting only if req->acct is rush_true. (main): Break the loop when NULL rule is hit. Report "no matching rule" if exited from the loop. 2010-04-20 Sergey Poznyakoff <gray@gnu.org.ua> Bugfix * src/rush.c (run_transforms)<transform_setcmd>: Add GET_TGT_VAL(); 2010-04-17 Sergey Poznyakoff <gray@gnu.org.ua> Version 1.6.90 * configure.ac: Update version number. * NEWS: Update. 2010-04-17 Sergey Poznyakoff <gray@gnu.org.ua> Configurable permissions for accounting database. * lib/librush.h (rush_wtmp_mode): Remove. (rushdb_umask, rushdb_dir_mode, rushdb_file_mode): New externs. * lib/rushdb.c (rushdb_umask, rushdb_dir_mode) (rushdb_file_mode): New variables. (rushdb_open_internal): New function. (rushdb_open): Call rushdb_open_internal after setting the rushdb_umask. (rushdb_print_header)<FDATA_STRING>: Fix first argument to output_string. * lib/utmp.c (rush_utmp_open): Use file permissions from rushdb_file_mode. * lib/wtmp.c (rush_wtmp_mode): Remove. (rush_wtmp_open): Use file permissions from rushdb_file_mode. * src/config.c (parse_file_mode): New function. (_parse_umask): Use parse_file_mode. (_parse_acct_file_mode,_parse_acct_dir_mode) (_parse_acct_umask): New functions. (toktab): New keywords: acct-file-mode, acct-dir-mode, acct-umask. * src/rush.c (run_rule): Don't set umask before calling rushdb_open, the function itself takes care of it. * doc/rush.texi: Document new configuration statements. * NEWS: Update. 2010-04-17 Sergey Poznyakoff <gray@gnu.org.ua> Fix http://puszcza.gnu.org.ua/bugs/?127 * src/rush.c (make_file_name): Fix typo (misplaced `+ 1'). 2010-02-05 Sergey Poznyakoff <gray@gnu.org.ua> Apply the default regex flags to `transfer' statement. * src/rush.h (compile_transform_expr): Change signature. * src/transform.c (parse_transform_expr) (compile_transform_expr): Pass regcomp flags as argument. * src/config.c (_parse_transform_common): Pass re_flags to compile_transform_expr. 2010-02-05 Sergey Poznyakoff <gray@gnu.org.ua> Improve configuration machinery. * configure.ac: Enable silent rules. Require Automake 1.11.1. * Makefile.am (make-ChangeLog): Remove rule. (ChangeLog): Rewrite. * src/Makefile.am (sbinPROGRAMS_INSTALL): Remove. New Automake does not support it any more. Instead use: (change-suid-mode): New rule. (install-exec-hook): New rule. (defines.h): Make rule a silent one. (.opt.h): Likewise. 2010-01-02 Sergey Poznyakoff <gray@gnu.org.ua> Update copyright years. Happy GNU Year! 2009-10-29 Sergey Poznyakoff <gray@gnu.org.ua> Fix doc/Commit * doc/Commit (gray_print_section): Output anchors before chapter/section/etc. titles, so that the heading menu in monolithic document works properly. 2009-10-27 Sergey Poznyakoff <gray@gnu.org.ua> Bugfixes. * configure.ac: Check for socket.h and sys/socket.h. Needed for socklen_t check below. * src/getopt.m4: Remove useless test. 2009-10-27 Sergey Poznyakoff <gray@gnu.org.ua> Update docs to match the new webpage format. * doc/Makefile.am (manual.tar.bz2, man-tar): New rules. (manual): Declare as phony. * doc/gendocs_template: Rewrite. * doc/rush.texi: Minor changes. 2009-08-04 Sergey Poznyakoff <gray@gnu.org.ua> Bugfixes * src/getopt.m4 (BEGIN): Remove extra quoting. (GETOPT): Rename c to optchar * src/rlopt.opt: Change the way of handling -[0-9]+ argument. In particular, it is able to correctly handle options like -10. 2009-02-12 Sergey Poznyakoff <gray@gnu.org.ua> Bugfixes * configure.ac: Check for socklen_t. * src/rush.h: Include sys/time.h; Provide a backup definition for LOG_AUTHPRIV. 2009-02-10 Sergey Poznyakoff <gray@gnu.org.ua> Fix diagnostic message in run_transforms Update docs, set version number 1.6 Update docs 2009-02-04 Sergey Poznyakoff <gray@gnu.org.ua> Allow references to predefined error messages in `exit' statements. * NEWS, doc/rush.texi: Update * src/cfck.c: Remove inclusion of argmatch.h * src/config.c (_parse_usage_error, _parse_nologin_error) (_parse_config_error, _parse_system_error): Use set_error_msg. (_parse_exit): Special handling of initial @ in the message text. * src/rush-po.awk: Special handling of initial @ in the message text. Capture arguments of usage-error, nologin-error, config-error and system-error. Fix input line counting. * src/rush.c (error_msg): Array of structures. (set_error_msg, string_to_error_index): New functions. (send_msg): Use error_msg[type].custom to decide what textual domain to use for translation. (run_transforms): Remove temp. The result of rush_expand_string is assigned to val directly and is never freed. (run_rule): Special handling of initial @ in the error message text. * src/rush.h: Include argmatch.h (error_msg): Remove declaration. (set_error_msg, string_to_error_index): New prototypes. 2009-02-04 Sergey Poznyakoff <gray@gnu.org.ua> Update docs 2009-02-03 Sergey Poznyakoff <gray@gnu.org.ua> Update docs 2009-02-02 Sergey Poznyakoff <gray@gnu.org.ua> Minor docs changes 2009-02-02 Sergey Poznyakoff <gray@gnu.org.ua> Allow to use patterns in set rules. * lib/argcv.c (quote_transtab): Add \v. * src/config.c (_parse_set, _parse_set_ar): Store value in node->pattern. * src/rush.c (run_transforms): Use patterns in set rules. (run_rule): Fix wording of a diagnostic message. * src/rush.h (struct transform_node.v): Remove val. * NEWS: Update * doc/Makefile.am (check-writeme): New goal. (all-check-docs): Add dependency on check-writeme. * doc/rendition.texi (WRITEME): New macro. * doc/rush.texi: Update. 2009-02-01 Sergey Poznyakoff <gray@gnu.org.ua> Minor change 2009-02-01 Sergey Poznyakoff <gray@gnu.org.ua> Allow to specify source strings for transformations. * NEWS: Update. * lib/argcv.c (_ARGCV_WORD_SED_EXPR, _ARGCV_WORD_MASK): New defines. (argcv_scan): Treat sed expressions as words, if ARGCV_SED_EXPR is set. (argcv_get_np): Do not unquote word if ARGCV_QUOTE is not set, or the word is a sed expression. (ARGCV_DEFFLAGS): Move to argcv.h * lib/argcv.h (ARGCV_DEFFLAGS, ARGCV_SED_EXPR): New defines. * src/config.c (_parse_transform_common): New function. (_parse_transform,_parse_transform_ar): Call _parse_transform_common. (TOK_SED): New define. (toktab): Mark `transform' with TOK_SED. (parse_input_buf): Use argcv_get_np for field splitting. If the token is marked with TOK_SED, assume ARGCV_SED_EXPR flag. * src/map.c (mapdef): New meta-variable: "command". (rush_expand_string): New function. * src/rush.c (run_transforms): Use node->pattern, if not NULL. * src/rush.h (struct transform_node.pattern): New field. (rush_expand_string): New proto. 2009-02-01 Sergey Poznyakoff <gray@gnu.org.ua> Allow to modify program name, as opposed to argv[0] * configure.ac, NEWS: Version 1.5.90 * lib/argcv.c, lib/argcv.h: Fix copyright years. * src/config.c (new_transform_node): Take addtional argument. All uses updated. (struct stmt_env.progmode): New field. (check_argc): New function. (TOK_CRT): New token flag. (toktab): New commands "delete" and "set". Mark "transform" and "map" with TOK_CRT. (parse_input_buf): If TOK_CRT is set, allow ^ as an index, indicating program name, as opposed to argv[0]. * src/map.c (mapdef): New meta-variable "program". * src/rush.c (ARG_NO): New macro. (test_request_arg): Use ARG_NO. (get_arg_no,assign_string): New functions. (run_transforms): Handle delete and set commands. Set or modify program name, if required ([^]). (run_rule): Use req->prog, if set. * src/rush.h (transform_delarg, transform_setcmd) (transform_setarg): New constants. (struct transform_node): New fields: progmod, v.val, v.arg_end. (struct rush_request): New field: prog. (PROGFILE): New macro. 2009-01-31 Sergey Poznyakoff <gray@gnu.org.ua> Fix use of index in map[] instruction 2009-01-30 Sergey Poznyakoff <gray@gnu.org.ua> Fix word splitting. * src/argcv.h, src/argcv.c: Move to lib. * lib/argcv.h (ARGCV_WS, ARGCV_QUOTE, ARGCV_RETURN_DELIMS): New defines. * lib/argcv.c: Implement more flags to control the word splitter behavior. * lib/Makefile.am (librush_a_SOURCES): Add argcv.[ch] * src/config.c (_parse_map_ar): Allocate memory for defval. * src/map.c (map_string): Strip off trailing newline before parsing the buffer. 2009-01-30 Sergey Poznyakoff <gray@gnu.org.ua> Implement `map' transformations (follow-up). * gnulib.modules: Add getline and obstack. * src/Makefile.am (rush_SOURCES): Add map.c * src/map.c: New file. * src/cfck.c (cfck_keyword): Remove 2nd argument. * src/config.c (parse_strv): Remove. (struct stmt_env): New data type. (parse_neg_strv): New function. (_parse_map_ar): New function. (TOK_ARGN,TOK_DFLN): New defines. (struct token.parses): Change proto. All _parse_.* functions updated. (toktab): Update flags. New command word "map". (parse_input_buf): Update use of token.parses. Handle TOK_ARGN. * src/rush.c (run_transforms): Handle transform_map case. (run_rule): Add typecast. * src/rush.h (struct rush_map): New data type. (transform_map): New transform type. (struct transform_node): Replace "trans" with union. (debug6): Fix definition. (debug7): New macro. (cfck_keyword): Takes 1 argument. (map_string): New prototype. * src/rushlast.c, src/rushopt.opt, src/rushwho.c: Minor fixes. 2009-01-30 Sergey Poznyakoff <gray@gnu.org.ua> Implement `map' transformations. * gnulib.modules: Add getline and obstack. * src/Makefile.am (rush_SOURCES): Add map.c * src/map.c: New file. * src/cfck.c (cfck_keyword): Remove 2nd argument. * src/config.c (parse_strv): Remove. (struct stmt_env): New data type. (parse_neg_strv): New function. (_parse_map_ar): New function. (TOK_ARGN,TOK_DFLN): New defines. (struct token.parses): Change proto. All _parse_.* functions updated. (toktab): Update flags. New command word "map". (parse_input_buf): Update use of token.parses. Handle TOK_ARGN. * src/rush.c (run_transforms): Handle transform_map case. (run_rule): Add typecast. * src/rush.h (struct rush_map): New data type. (transform_map): New transform type. (struct transform_node): Replace "trans" with union. (debug6): Fix definition. (debug7): New macro. (cfck_keyword): Takes 1 argument. (map_string): New prototype. * src/rushlast.c, src/rushopt.opt, src/rushwho.c: Minor fixes. 2009-01-30 Sergey Poznyakoff <gray@gnu.org.ua> Initial implementation of "interactive" mode. * src/config.c (_parse_interactive): New function. (toktab): New token "interactive". * src/rush.c (rush_interactive_shell): New variable. (main): Use rush_interactive_shell as the command, if -c is not given. * src/rush.h (rush_interactive_shell): New declaration. 2009-01-14 Sergey Poznyakoff <gray@gnu.org.ua> Version 1.15 * NEWS: Version 1.15 * configure.ac: Likewise. * bootstrap.conf: Remove SKIP_PO setting. The TP URL is operational now. * doc/gendocs_template: Mark as a GNU project. * doc/rush.texi: Change bug-reporting email. * gnulib.modules: Remove progname. * lib/progname.c: Provide own version of the progname module. * lib/Makefile.am (librush_a_SOURCES): Add progname.c * lib/librush.h (program_name): New global decl. (rush_set_program_name): New proto. * src/rush.h: Remove progname.h * src/rush.c (main): Use rush_set_program_name. * src/rushlast.c: Likewise. * src/rushwho.c: Likewise. 2009-01-14 Sergey Poznyakoff <gray@gnu.org.ua> Minor fixes. * README, doc/rush.texi: Update. * configure.ac: Allow relative file name as an argument to --with-default-config. * confpaths.h.in: Remove. * gnulib.modules: Add progname * lib/librush.h: Include unistd.h * src/Makefile.am (LDADD): Add @LTLIBINTL@ * src/defconf.sed: Bugfix. * src/rush.c (main): Use set_program_name * src/rushwho.c: Likewise. * src/rushlast.c: Likewise. * src/socket.c: Move network-related includes to rush.h 2009-01-13 Sergey Poznyakoff <gray@gnu.org.ua> Rush is dubbed GNU software Change documentation license to GFDLv1.3+ 2009-01-13 Sergey Poznyakoff <gray@gnu.org.ua> Finish 1.4.90 * NEWS: Update. * README: Update. * configure.ac: New option --with-default-config * doc/rush.texi: Update. * src/.gitignore: Add rlopt.h, rushopt.h and rwopt.h * src/Makefile.am (EXTRA_DIST): Add defconf.sed (BUILT_SOURCES): Add rwopt.h and rlopt.h (defines.h): Define RUSH_DEFAULT_CONFIG, if requested by --with-default-config. * src/config.c (init_input_buf): Do not abort on unexisting file, if RUSH_DEFAULT_CONFIG is defined. (include-safety): Rename include-security. (parse_config): Add debug diagnostics. * src/rushopt.opt: Rename --safety-check to --security-check. New option --show-default. 2009-01-13 Sergey Poznyakoff <gray@gnu.org.ua> Add missing files 2009-01-12 Sergey Poznyakoff <gray@gnu.org.ua> Redo option parsing. * src/getopt.m4: New file. * src/rlopt.opt: New file. * src/rushopt.opt: New file. * src/rwopt.opt: New file. * src/Makefile.am (EXTRA_DIST): Add getopt.m4, *.opt (rush_SOURCES): Add rushopt.h (rushwho_SOURCES): Add rwopt.h (rushlast_SOURCES): Add rlopt.h (MAINTAINER_CLEANFILES): Add rushopt.h, rwopt.h, rlopt.h (.opt.h): New rule. * src/config.c (check_dir): Fix diagnostic messages. (toktab): Rename config-safety to include-safety * src/rush.c, src/rushlast.c, src/rushwho.c: Redo option parsing. * NEWS: Update. 2009-01-11 Sergey Poznyakoff <gray@gnu.org.ua> Implement configuration file safety checks. * gnulib.modules (argmatch,dirname): New modules. * src/cfck.c: New file. * src/Makefile.am (rush_SOURCES): Add cfck.c * src/config.c (init_input_buf): Call check_config_permissions (_parse_include): Store NULL into ret_buf, if the file does not exist. (_parse_config_safety): New function. (toktab): New statement "config-safety" (parse_input_buf): Do not reset the input buf, if ret_buf is NULL. * src/rush.c: New option --safety-check (-C) * src/rush.h (RUSH_CHK_.*): New defines. (check_config_permissions,cfck_keyword): New prototypes. 2009-01-11 Sergey Poznyakoff <gray@gnu.org.ua> Update docs 2009-01-10 Sergey Poznyakoff <gray@gnu.org.ua> Minor fixes. * src/rush-po.awk: New file. * src/Makefile.am (pkgdata_DATA): Add rush-po.awk * NEWS, doc/rush.texi: Update docs. * src/config.c (toktab): Fix flags of several statements. * lib/librush.h, src/Makefile.am, src/rush.c, src/rush.h src/rushlast.c, src/rushwho.c: Update copyright years. 2009-01-10 Sergey Poznyakoff <gray@gnu.org.ua> Minor fixes. * src/config.c (free_input_buf): Avoid freeing ibuf->file, which remains used by node structures. (_parse_locale): Allow for empty locale value. * src/rush.c: Minor fixes. (run_rule): Form environment before eventually printing error_msg. * src/rushlast.c, src/rushwho.c: Fix typos. 2009-01-09 Sergey Poznyakoff <gray@gnu.org.ua> Rewrite support for file inlcusion. * src/config.c: Rewrite support for file inlcusion. Files can be included at any point. 2009-01-07 Sergey Poznyakoff <gray@gnu.org.ua> Implement I18n. * lib/i18n.c: New file. * Makefile.am: Add po. * po: New directory * po/POTFILES.in: New file. * bootstrap.conf: Add i18n. * configure.ac: Check for gettext. * gnulib.modules: Add gettext-h * lib/Makefile.am (librush_a_SOURCES): Add i18n.c * librush.h: Include gettext.h (_,N_): New macros. (RUSH_ARG_UNUSED, RUSH_PRINTFLIKE): New macros. (rush_i18n_init, user_gettext): New prototypes. * lib/readfmt.c: Include librush.h Add nls markers. * lib/rushdb.c, lib/version.c, src/config.c, src/limits.c, src/rushlast.c, src/rushwho.c, src/socket.c, src/transform.c: Add nls markers * src/rush.c: Add nls markers (rush_pw): New global. (die): Take an extra argument. Use user_gettext to translate user message. (make_file_name): New function. (run_rule): Copy i18n to the request. (main): Save struct passwd in rush_pw. * src/rush.h (struct rush_i18n): New structure. (struct rush_rule, rush_request): New member i18n. (rush_pw): New global. (die): Change prototype. (make_file_name, expand_tilde): New prototypes. 2008-12-09 Sergey Poznyakoff <gray@gnu.org.ua> Version 1.4.90 * NEWS, configure.ac: Version 1.4.90 * doc/rush.texi: Document notification * src/rush.c (run_rule): Non-empty post-sockaddr implies `fork on'. 2008-12-09 Sergey Poznyakoff <gray@gnu.org.ua> Socket notification: switch to TCPMUX protocol. * src/config.c (_parse_post_socket): Use tcpmux service by default. * src/socket.c: Use TCPMUX protocol. 2008-12-07 Sergey Poznyakoff <gray@gnu.org.ua> Initial implementation of socket notification interface. * src/socket.c: New file. * src/Makefile.am: Add socket.c * src/config.c: New statement `post-socket'. * src/rush.c (struct rush_request): Move to rush.h (fork_process): Run post_socket_send, if post_sockaddr is given. (run_rule): Propagate post_sockaddr. (main): Minor fix. * src/rush.h (struct rush_request): Moved from rush.c; New member post_sockaddr. (struct rush_sockaddr): New structure. (struct rush_rule): New member post_sockaddr. (post_socket_send): New proto. 2008-10-20 Sergey Poznyakoff <gray@gnu.org.ua> Version 1.4 2008-10-19 Sergey Poznyakoff <gray@gnu.org.ua> Minor changes. * src/rushlast.c: Format preferences: command line option, RUSHLAST_FORMAT env. variable, default format. * src/rushwho.c: Format preferences: command line option, RUSHWHO_FORMAT env. variable, default format. * doc/rush.texi: Mention RUSHLAST_FORMAT and RUSHWHO_FORMAT vars. 2008-10-19 Sergey Poznyakoff <gray@gnu.org.ua> Bugfix Fix direntry references 2008-10-14 Sergey Poznyakoff <gray@gnu.org.ua> Update 2008-10-14 Sergey Poznyakoff <gray@gnu.org.ua> Version 1.3 * Makefile.am (DISTCLEANFILES, EXTRA_DIST): Remove. * NEWS: Version 1.3 * configure.ac: Version 1.3 * doc/rush.texi (direntry): Fixed. Add missing opindexes. Arrange option tables in a traditional manner (short options first). * lib/rushdb.c (output_duration): Fix indentation. (format_pid): Fix size of buf. * src/Makefile.am (INCLUDES): Fix. * src/rush.c: Remove isatty restriction. 2008-10-14 Sergey Poznyakoff <gray@gnu.org.ua> Minor improvement * doc/rush.texi: Document --user option. * src/rush.c: Support all options only if invoked from a tty, otherwise support only -c. 2008-10-14 Sergey Poznyakoff <gray@gnu.org.ua> Minor fix. * doc/rush.texi: Various fixes. * src/rush.c: Implement --user (-u) option. 2008-10-14 Sergey Poznyakoff <gray@gnu.org.ua> Rearrange the docs 2008-10-13 Sergey Poznyakoff <gray@gnu.org.ua> Minor changes. * lib/rushdb.c (output_duration): Minor fix in width calculation. * doc/rush.texi: Added missing sections. Spell checked. 2008-10-12 Sergey Poznyakoff <gray@gnu.org.ua> Various improvements. * gnulib.modules: Add error. * lib/readfmt.c: New file. * lib/Makefile.am (librush_a_SOURCES): Add readfmt.c * lib/librush.h (rush_read_format): New prototype. * lib/rushdb.c: Fix indentation. Allow to use quoted strings and escapes inside forms. Ignore explicit newlines. * lib/wtmp.c (rush_wtmp_copy): Copy pid. * src/rushlast.c: Use error instead of fprintf to stderr. Accept --format=@file. Fix default output format. * src/rushwho.c: Likewise. * doc/rush.texi: Document rushlast and rushwho * doc/strftime.texi: New file. * doc/Makefile.am (rush_TEXINFOS): Add strftime.texi 2008-10-12 Sergey Poznyakoff <gray@gnu.org.ua> Bugfixes * doc/rush.texi: Document forked mode. * lib/rushdb.c (output_duration): Honor width. (rushdb_compile_format): Use xzalloc to create new form. * src/rushwho.c: Change default format. 2008-10-12 Sergey Poznyakoff <gray@gnu.org.ua> Implement acct db locking. * gnulib.modules: Add vasprintf * lib/librush.h (rush_utmp_lock_all) (rush_utmp_unlock_all,rushdb_lock,rushdb_unlock): New functions. * lib/rushdb.c (rushdb_lock,rushdb_unlock): New functions. (rushdb_start): Lock utmp for writing. * lib/utmp.c (rush_utmp_write): Lock affected record for writing. (rush_utmp_lock_all,rush_utmp_unlock_all): New functions. * lib/wtmp.c (rush_wtmp_append): Lock affected record for writing. 2008-10-12 Sergey Poznyakoff <gray@gnu.org.ua> Minor fix 2008-10-12 Sergey Poznyakoff <gray@gnu.org.ua> Finish rushlast and rushwho. * lib/librush.h (RUSH_UTMP_NAME, RUSH_WTMP_NAME): New defines, instead of _SUF counterparts. (enum rushdb_result, enum rush_wtmp_dir): new constants. (rush_wtmp_set_dir, rush_wtmp_rewind): New functions. (rush_wtmp_read, rush_utmp_read): Return enum rushdb_result. (rushdb_backward_direction): New function. * lib/rushdb.c (format_error): New function (rushdb_open): Return enum rushdb_result. (rushdb_backward_direction): New function. (format_stop): Correctly handle empty stop date. (rushdb_compile_format): Make sure time formats have correct widths. * lib/utmp.c (rush_utmp_read0, rush_utmp_read): Change return value. * lib/wtmp.c (rush_wtmp_dir): New variable. (rush_wtmp_rewind): New function. (rush_wtmp_read): Rewrite to be able to scan the file in both directions. (rush_wtmp_update,rush_wtmp_update): Likewise. * src/limits.c: Use RUSH_DB_FILE, handle new return type from rushdb_open. * src/rush.c: Likewise. * src/rush.h (RUSH_DB_FILE): Rename to RUSH_DB. * src/rushlast.c: Implement new options. Show records in reverse chronological order by default. * src/rushwho.c: Implement new options. 2008-10-11 Sergey Poznyakoff <gray@gnu.org.ua> Implement accounting (in forked mode only). * paths, acinclude.m4, lib/logwtmp.c, lib/utmp_init.c, lib/utmp_logout.c: Delete * src/slist.c: Move to lib/slist.c * configure.ac: Remove utmp stuff * gnulib.modules (readutmp): Remove (fprintftime): Add * lib/Makefile.am: Add new files. * src/.gitignore: Add rushlast, rushwho and .gdbinit * src/Makefile.am (bin_PROGRAMS): New var. Add rushlast and rushwho. (rush_SOURCES): Remove slist.c (defines.h): Define LOCALSTATEDIR * src/config.c (new_rush_rule): Init acct and mask members. (_parse_acct): New function. * src/limits.c (check_logins): Use rushdb, instead of the system utmp/wtmp. * src/rush.c (struct rush_request): new members: umask, home_dir, acct. (acct_on, acct_off): New functions. (fork_process): Run accounting, if requested. (run_rule): Save chroot_dir, umask and acct in the struct rush_request. Always do chroot only once. (version): Remove. Implemented in lib/version.c (main): Initialize new members in req. * src/rush.h: Add new includes. (RUSH_DB_FILE): New define. (slist_t, slist_append, slist_create) (slist_reduce, slist_free): Remove. (struct rush_rule): New member `acct'. (NO_UMASK): New define. 2008-10-10 Sergey Poznyakoff <gray@gnu.org.ua> Add framework for updating wtmp/utmp 2008-10-10 Sergey Poznyakoff <gray@gnu.org.ua> Implement 'forked mode' * gnulib.modules: Add inttostr. * src/config.c (new_rush_rule): Initialize p->fork (get_bool, _parse_fork): New functions. (toktab): New statement "fork". (parse_input_buf): If a rule is not tagged set its tag to #NUM, where NUM is its number. * src/rush.c (struct rush_request): New member: fork. (fork_process): New function. (run_rule): Call fork_process if fork is true. (all functions): Use rule->tag freely, it can't be NULL. * src/rush.h: include <inttostr.h> (enum rush_three_state): New type. (struct rush_rule): Remove const from tag; New members: fork, prologue, epilogue. 2008-10-06 Sergey Poznyakoff <gray@gnu.org.ua> Minor fix 2008-09-06 Sergey Poznyakoff <gray@gnu.org.ua> Release 1.2 * NEWS, configure.ac: Version 1.2 * doc/rush.texi: Proof-read. 2008-09-05 Sergey Poznyakoff <gray@gnu.org.ua> Implement a test mode. * NEWS: Document test mode. * doc/rush.texi: Document test mode. * src/config.c (_parse_debug): Command line settings override the configuration file. * src/rush.c (debug_option): New global. (run_rule): Exit instead of executing the command, if lint_option is set. (longopts): New option --test, an alias for -t. (help): Improve help output. (usage): New function. (main): Implement full-fledged test mode. 2008-09-05 Sergey Poznyakoff <gray@gnu.org.ua> Implement command line options for testing configuration files. * NEWS, configure.ac: version 1.1.90. * gnulib.modules: Add getopt. * src/Makefile.am (AM_INSTALLCHECK_STD_OPTIONS_EXEMPT): Remove. * src/config.c (init_input_buf): Report ENOENT as error if lint_option is set. (parse_config): Use rush_config_file. (all funcs): Replace calls to syslog with logmsg. * src/limits.c: Replace calls to syslog with logmsg. * src/rush.h: Likewise. * src/rush.c: Include getopt.h (rush_config_file, lint_option): New globals. (vlogmsg, logmsg): New functions. (die): Rewrite using vlogmsg. Do not print error_msg if lint_option is set. (main): Handle new command line options. 2008-08-30 Sergey Poznyakoff <gray@gnu.org.ua> Finish release 1.1 * NEWS, configure.ac: version 1.1 * doc/rush.texi: Updated. * src/config.c (_parse_command, _parse_match): Use global regex flags. (_parse_re_flags): New function. (toktab): New statement `regexp'. 2008-08-29 Sergey Poznyakoff <gray@gnu.org.ua> Minor fixes. * doc/rush.texi: Spell check. 2008-08-29 Sergey Poznyakoff <gray@gnu.org.ua> Fix typos Update docs and examples Update docs and examples Update docs 2008-08-28 Sergey Poznyakoff <gray@gnu.org.ua> Minor fixes. * doc/rush.texi: Write `git' section. 2008-08-28 Sergey Poznyakoff <gray@gnu.org.ua> Minor fixes. * src/rush.c (send_msg): First try to send message to stderr and fall back to stdout if this fails. * doc/rush.texi: Guidelines for further improvements. 2008-08-28 Sergey Poznyakoff <gray@gnu.org.ua> Introduce exit rules. * src/config.c (copy_string): Force terminating newline. (_parse_exit): New function. (toktab): New keyword "exit". * src/rush.c (expand_tilde): Shut GCC warnings. (run_rule): Support `exit' rules. * src/rush.h (getmaxfd): New define. (struct rush_rule): New members error_msg and error_fd. (die): Mark with ATTRIBUTE_NORETURN. * NEWS: Version number 1.0.90. Document new features. * configure.ac: Check for sysconf and getdtablesize. Raise version number to 1.0.90. * doc/rush.texi: Document new features. * etc/rush.rc: Improve. 2008-08-28 Sergey Poznyakoff <gray@gnu.org.ua> Introduce negated conditions. * src/config.c (_parse_negation): New function. (_parse_command, _parse_match, _parse_argc, _parse_uid, _parse_gid) (_parse_user, _parse_group): Handle negation operator. * src/rush.c (run_tests): Handle negation. * src/rush.h (struct test_arg_node): New member `negate'. * doc/rush.texi (Conditions): Document condition negation. * NEWS: Update 2008-08-27 Sergey Poznyakoff <gray@gnu.org.ua> Update docs 2008-08-27 Sergey Poznyakoff <gray@gnu.org.ua> Run command line transformations sequentially. * src/config.c (_parse_transform, _parse_transform_ar): Use new transform node structure. * src/rush.c (run_transforms, rebuild_cmdline, reparse_cmdline): New functions. (run_rule): Run all transformations sequentially, in the order of their appearance in the configuration file. * src/rush.h (struct transform_node, enum transform_node_type): New data types. (struct rush_rule): Remove trans, arg_head, arg_tail. (transform_head, transform_tail): New members. 2008-08-26 Sergey Poznyakoff <gray@gnu.org.ua> Release 1.0 Update docs Add doc/.gitignore 2008-08-26 Sergey Poznyakoff <gray@gnu.org.ua> Change bug-reporting email. * NEWS: * README: * README-alpha: * configure.ac: * doc/rush.texi: 2008-08-26 Sergey Poznyakoff <gray@gnu.org.ua> Improve configuration syntax. * src/argcv.c (argcv_string): Remove const specifier from the 2nd arg. * src/argcv.h: Likewise. * src/config.c: Improve the syntax. Introduce fall-through statement. Remove the default_entry, it can be provided using RUSH_DEFAULT_CONFIG define and an external file. * src/limits.c: Renumber debug levels. * src/rush.c: Support fall-through rules. * src/rush.h (struct command_config): Rename to rush_rule. All uses updated. (config_list, config_tail): Rename to rule_head, rule_tail, correspondingly. * etc/rush.rc: Use new syntax. * doc/rush.texi: Update. 2008-08-26 Sergey Poznyakoff <gray@gnu.org.ua> Code cleanup. * src/config.c: Rewrite using table-driven parser. 2008-08-26 Sergey Poznyakoff <gray@gnu.org.ua> Rewrite look ups in config file in a more logical manner. * src/rush.h (struct match_arg): Remove. (enum test_type, struct test_numeric_node, struct test_arg_node) (struct test_node): New data types. (struct command_config): Remove regex, match_head, match_tail, argc, cmp_op, users, groups, min_uid. New members: test_head, test_tail * src/config.c (parse_input_buf): Reflect changes to struct command_config. * src/rush.c (run_tests, test_request_cmdline, test_request_arg) (test_request_argc, test_request_uid, test_request_gid, test_request_group) (test_request_user): New functions. (run_tests): New function. (match_config): Rewrite using run_tests. 2008-08-26 Sergey Poznyakoff <gray@gnu.org.ua> Minor fix. * run_config: Set umask as late as possible. Provide a reasonable default in case it is not set in the config. 2008-08-25 Sergey Poznyakoff <gray@gnu.org.ua> Discern config entries based on user/group name. * src/config.c: New keywords: users and groups. * src/rush.c (match_config): Take an additional argument (all uses updated). Compare username and groups. * src/rush.h: Include grp.h (struct command_config): New members: users and groups. 2008-08-25 Sergey Poznyakoff <gray@gnu.org.ua> Bugfixes. * Makefile.am: Add distuninstallcheck_listfiles. * etc/rush.rc: Update. * src/config.c (read_line): Fix keeping track of input line number. (check_dir): Avoid checks for existency of ~-directories. (parse_input_buf): Don't check for home dir presence, if chroot was requested. * src/rush.c (run_config): Remove implicit / home. 2008-08-25 Sergey Poznyakoff <gray@gnu.org.ua> Improve docs 2008-08-25 Sergey Poznyakoff <gray@gnu.org.ua> Provide a documentation framework. * doc/Makefile.am: New file. * doc/fdl.texi: New file. * doc/gendocs_template: New file. * doc/rendition.texi: New file. * doc/rush.info: New file. * doc/rush.texi: New file. * Makefile.am (SUBDIRS): Add doc. * configure.ac: Add doc. 2008-08-25 Sergey Poznyakoff <gray@gnu.org.ua> Provide a way for modifying program environment. * src/config.c (new_command_config): Set default env. (parse_input_buf): New keyword env. * src/rush.c (run_config): Tailor environment before running the command. * src/rush.h (struct command_config): New member env. 2008-08-25 Sergey Poznyakoff <gray@gnu.org.ua> Add default configuration file. * etc/Makefile.am: New file. * etc/rush.rc: New file. * Makefile.am (SUBDIRS): Add etc * configure.ac: Add etc. 2008-08-25 Sergey Poznyakoff <gray@gnu.org.ua> Update .gitignore's Add rules for generating ChangeLog Add .gitignore's Initial import Local Variables: mode: change-log version-control: never buffer-read-only: t End: ����������������������������������������������������������������������rush-2.4/README�������������������������������������������������������������������������������������0000644�0001750�0001750�00000003447�14643176116�013227� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������GNU Rush README See end of file for the copying conditions * Introduction This file contains brief information about configuring, testing and running GNU Rush. It is *not* intended as a replacement for the documentation, it is provided as a brief reference only. The complete documentation for GNU Rush is available in info format. To read it without installing the package run `info -f ./rush.info'. After installation, the documentation can be accessed running `info rush'. An online copy of the documentation in various formats is available at http://rush.man.gnu.org.ua. * Overview GNU Rush is a restricted user shell, designed for use with ssh, sftp, and similar programs. * Building The usual sequence applies: ./configure ./make ./make install Refer to the INSTALL file for information about generic configure options. GNU Rush can be compiled with the default configuration built into the binary. To do so, store the configuration in a file, and use the command: ./configure --with-default-config=FILE For more information, refer to chapter 5, `Default Configuration' in the GNU Rush manual. * Bug reporting. Send bug reports to <bug-rush@gnu.org.ua>. * Copyright information: Copyright (C) 2008-2024 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: �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/po/����������������������������������������������������������������������������������������0000755�0001750�0001750�00000000000�14655401532�012751� 5����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/po/zh_CN.po��������������������������������������������������������������������������������0000644�0001750�0001750�00000056036�14655401314�014322� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# SOME DESCRIPTIVE TITLE. # Copyright (C) 2016 Free Software Foundation, Inc. # This file is distributed under the same license as the rush package. # Tianze Wang <zwpwjwtz@126.com>, 2017. # #: rwopt.opt:23 msgid "" msgstr "" "Project-Id-Version: rush-2.2\n" "Report-Msgid-Bugs-To: bug-rush@gnu.org\n" "POT-Creation-Date: 2024-08-09 14:51+0300\n" "PO-Revision-Date: 2022-01-10 22:01+0800\n" "Last-Translator: Tianze Wang <zwpwjwtz@126.com>\n" "Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n" "Language: zh_CN\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.2.1\n" "Plural-Forms: nplurals=1; plural=0;\n" #: src/config.c:163 #, c-format msgid "Finished parsing %s" msgstr "è§£æž %s 完æˆ" #: src/config.c:169 #, c-format msgid "Resuming parsing %s from line %d" msgstr "继续从第 %2$d 行åŽè§£æž %1$s" #: src/config.c:262 #, c-format msgid "invalid number: %s" msgstr "ç¼–å·æ— æ•ˆï¼š%s" #: src/config.c:275 msgid "invalid opcode" msgstr "æ“作符无效" #: src/config.c:297 #, c-format msgid "invalid regexp: %s" msgstr "æ­£åˆ™è¡¨è¾¾å¼æ— æ•ˆï¼š%s" #: src/config.c:336 #, c-format msgid "unknown regexp flag: %s" msgstr "æ­£åˆ™è¡¨è¾¾å¼æ ‡è¯†æœªçŸ¥ï¼š%s" #: src/config.c:353 msgid "too few arguments" msgstr "傿•°å¤ªå°‘" #: src/config.c:357 src/rush.c:1381 msgid "too many arguments" msgstr "傿•°å¤ªå¤š" #: src/config.c:428 #, c-format msgid "no such user: %s" msgstr "用户ä¸å­˜åœ¨ï¼š%s" #: src/config.c:453 src/config.c:1106 #, c-format msgid "no such group: %s" msgstr "组ä¸å­˜åœ¨ï¼š%s" #: src/config.c:543 #, c-format msgid "unknown limit: %s" msgstr "é™é¢æœªçŸ¥ï¼š%s" #: src/config.c:560 #, c-format msgid "expected ~ as the second argument, but found %s" msgstr "ç¬¬äºŒä¸ªå‚æ•°åº”当为“~â€ï¼Œä½†å®žé™…为 %s" #: src/config.c:718 #, c-format msgid "debug level set to %d" msgstr "设置调试等级为 %d" #: src/config.c:730 #, c-format msgid "invalid time: %s" msgstr "时间无效:%s" #: src/config.c:786 msgid "invalid file descriptor" msgstr "文件æè¿°ç¬¦æ— æ•ˆ" #: src/config.c:800 msgid "Unknown message reference" msgstr "消æ¯å¼•用未" #: src/config.c:893 msgid "invalid include file name" msgstr "åŒ…å«æ–‡ä»¶ï¼ˆincludeï¼‰çš„æ–‡ä»¶åæ— æ•ˆ" #: src/config.c:900 #, c-format msgid "Ignoring non-existing include file %s" msgstr "忽略ä¸å­˜åœ¨çš„åŒ…å«æ–‡ä»¶ %s" #: src/config.c:906 #, c-format msgid "cannot stat file %s: %s" msgstr "无法对文件 %s 执行 stat 命令:%s" #: src/config.c:934 rushopt.opt:90 #, c-format msgid "unknown keyword: %s" msgstr "关键字未知:%s" #: src/config.c:982 msgid "key field is not a number" msgstr "键字段应当为数字" #: src/config.c:988 msgid "value field is not a number" msgstr "值字段应当为数字" #: src/config.c:1033 src/config.c:1038 src/rush.c:262 #, c-format msgid "%s: not a number" msgstr "%s:应当为数字" #: src/config.c:1211 src/config.c:1340 #, c-format msgid "Parsing %s" msgstr "è§£æž %s" #: src/config.c:1245 #, c-format msgid "unknown statement: %s" msgstr "声明未知:%s" #: src/config.c:1280 msgid "missing ]" msgstr "缺少“]â€" #: src/config.c:1289 msgid "invalid statement: missing value" msgstr "声明无效:缺少值" #: src/config.c:1310 #, c-format msgid "failed to parse value: %s" msgstr "è§£æžå€¼å¤±è´¥ï¼š%s" #: src/config.c:1328 msgid "statement cannot be used outside a rule" msgstr "无法在规则外使用声明" #: src/config.c:1366 msgid "parsing legacy built-in configuration" msgstr "è§£æžå†…置的默认é…ç½®" #: src/config.c:1368 #, c-format msgid "parsing legacy configuration file %s" msgstr "è§£æžé»˜è®¤çš„é…置文件 %s" #: src/limits.c:53 #, c-format msgid "Setting limit %d to %lu" msgstr "设置é™é¢ %d 至 %lu" #: src/limits.c:58 #, c-format msgid "error setting limit: %s" msgstr "é™é¢è®¾ç½®å‡ºé”™ï¼š%s" #: src/limits.c:68 #, c-format msgid "Setting priority to %d" msgstr "设置优先级为 %d" #: src/limits.c:70 #, c-format msgid "error setting priority: %s" msgstr "优先级设置出错:%s" #: src/limits.c:86 src/limits.c:87 #, c-format msgid "No logins allowed for `%s'" msgstr "“%sâ€ä¸å…许登录" #: src/limits.c:91 #, c-format msgid "counting logins for %s" msgstr "统计 %s 的登录情况" #: src/limits.c:97 msgid "acct database is empty" msgstr "账户数æ®åº“为空" #: src/limits.c:101 #, c-format msgid "Cannot open database %s: %s" msgstr "无法打开数æ®åº“ %s:%s" #: src/limits.c:119 #, c-format msgid "counted %zu/%zu logins for %s" msgstr "统计 %3$s 在 %1$zu/%2$zu 的登录情况" #: src/limits.c:126 src/limits.c:128 #, c-format msgid "Too many logins (max %zu) for %s" msgstr "%2$s 的登录次数过多(最多为 %1$zu)" #: src/limits.c:143 #, c-format msgid "Setting limits for %s" msgstr "为 %s 设置é™é¢" #: src/rush.c:43 msgid "" "You are not permitted to execute this command.\n" "Contact the systems administrator for further assistance.\n" msgstr "" "æ‚¨æ— æƒæ‰§è¡Œæ­¤å‘½ä»¤ã€‚\n" "请è”系系统管ç†å‘˜ä»¥èŽ·å–æ›´å¤šå¸®åŠ©ã€‚\n" #: src/rush.c:47 msgid "" "You do not have interactive login access to this machine.\n" "Contact the systems administrator for further assistance.\n" msgstr "" "您无法以交互形å¼ç™»å½•到本机器。\n" "请è”系系统管ç†å‘˜ä»¥èŽ·å–æ›´å¤šå¸®åŠ©ã€‚\n" #: src/rush.c:51 msgid "" "Local configuration error occurred.\n" "Contact the systems administrator for further assistance.\n" msgstr "" "本地é…置出错。\n" "请è”系系统管ç†å‘˜ä»¥èŽ·å–æ›´å¤šå¸®åŠ©ã€‚\n" #: src/rush.c:55 msgid "" "A system error occurred while attempting to execute command.\n" "Contact the systems administrator for further assistance.\n" msgstr "" "å°è¯•执行命令时出现系统错误。\n" "请è”系系统管ç†å‘˜ä»¥èŽ·å–æ›´å¤šå¸®åŠ©ã€‚\n" #: src/rush.c:156 #, c-format msgid "failed to write message to stderr: %s" msgstr "å‘ stderr 写入消æ¯å¤±è´¥ï¼š%s" #: src/rush.c:160 #, c-format msgid "failed to write message to stdout: %s" msgstr "å‘ stdout 写入消æ¯å¤±è´¥ï¼š%s" #: src/rush.c:172 #, c-format msgid "Debug: " msgstr "调试:" #: src/rush.c:176 #, c-format msgid "Info: " msgstr "ä¿¡æ¯ï¼š" #: src/rush.c:180 #, c-format msgid "Notice: " msgstr "注æ„:" #: src/rush.c:184 #, c-format msgid "Warning: " msgstr "警告:" #: src/rush.c:191 #, c-format msgid "Error: " msgstr "错误:" #: src/rush.c:248 msgid "Not enough memory" msgstr "内存ä¸è¶³" #: src/rush.c:279 src/rush.c:324 #, c-format msgid "INTERNAL ERROR at %s:%d: unrecognized opcode %d" msgstr "%s:%d 处å‘生内部错误:æ“作符 %d 未知" #: src/rush.c:408 #, c-format msgid "%s:%d: %s: can't stat '%s': %s" msgstr "%s:%d:%s:无法对“%sâ€æ‰§è¡Œ stat 命令:%s" #: src/rush.c:469 #, c-format msgid "INTERNAL ERROR at %s:%d: unrecognized operation %d" msgstr "%s:%d 处å‘生内部错误:æ“作 %d 未知" #: src/rush.c:509 #, c-format msgid "INTERNAL ERROR at %s:%d: unrecognized node type %d" msgstr "%s:%d 处å‘生内部错误:节点类型 %d 未知" #: src/rush.c:718 #, c-format msgid "INTERNAL ERROR at %s:%d: invalid envar type %d" msgstr "%s:%d 处å‘生内部错误:环境å˜é‡ç±»åž‹ %d 未知" #: src/rush.c:723 msgid "Final environment:" msgstr "最终环境å˜é‡ï¼š" #: src/rush.c:737 #, c-format msgid "wordsplit(%s) failed: %s" msgstr "å•è¯åˆ†å‰²ï¼ˆ%s)失败:%s" #: src/rush.c:763 #, c-format msgid "no argument at index %d in command: %s" msgstr "命令中的第 %d 个ä½ç½®å¤„ç¼ºå°‘å‚æ•°ï¼š%s" #: src/rush.c:906 #, c-format msgid "Removing option %s %s" msgstr "移除选项 %s %s" #: src/rush.c:918 msgid "Transforming command line" msgstr "转æ¢å‘½ä»¤è¡Œ" #: src/rush.c:925 #, c-format msgid "Transforming program name (%s)" msgstr "修改程åºå(%s)" #: src/rush.c:943 #, c-format msgid "Transforming argv[%d]" msgstr "修改 argv[%d]" #: src/rush.c:950 #, c-format msgid "Transforming variable %s=%s" msgstr "修改å˜é‡ %s=%s" #: src/rush.c:957 src/rush.c:1043 msgid "environment transformation is not yet implemented" msgstr "修改环境å˜é‡çš„功能尚未实现" #: src/rush.c:961 #, c-format msgid "INTERNAL ERROR at %s:%d: can't modify read-only target" msgstr "%s:%d 处å‘生内部错误:无法修改åªè¯»çš„目标" #: src/rush.c:980 #, c-format msgid "Transformation map: %s, %s, %s, %u, %u, %s" msgstr "è½¬æ¢æ˜ å°„:%s,%s,%s,%u,%u,%s" #: src/rush.c:994 #, c-format msgid "INTERNAL ERROR at %s:%d: invalid node type %d" msgstr "%s:%d 处å‘生内部错误:节点类型 %d 未知" #: src/rush.c:1001 #, c-format msgid "transformed value: %s" msgstr "转æ¢åŽçš„值:%s" #: src/rush.c:1022 #, c-format msgid "Deleting arguments %d-%d" msgstr "åˆ é™¤å‚æ•° %d-%d" #: src/rush.c:1025 msgid "Deleting argv[0] is prohibited" msgstr "ç¦æ­¢åˆ é™¤ argv[0]" #: src/rush.c:1047 #, c-format msgid "INTERNAL ERROR at %s:%d: invalid target type %d" msgstr "%s:%d 处å‘生内部错误:目标类型 %d 未知" #: src/rush.c:1065 #, c-format msgid "Program name: %s" msgstr "程åºå:%s" #: src/rush.c:1066 msgid "Final arguments:" msgstr "æœ€ç»ˆå‚æ•°ï¼š" #: src/rush.c:1084 #, c-format msgid "error writing to database %s: %s" msgstr "写入到数æ®åº“ %s 时出错:%s" #: src/rush.c:1093 #, c-format msgid "error writing stop to database file %s: %s" msgstr "写入 stop 到数æ®åº“ %s 时出错:%s" #: src/rush.c:1114 #, c-format msgid "%s:%d: %s: cannot fork: %s" msgstr "%s:%d:%s:无法创建å­è¿›ç¨‹ï¼š%s" #: src/rush.c:1124 #, c-format msgid "Forked process %lu" msgstr "从进程 %lu 创建å­è¿›ç¨‹" #: src/rush.c:1128 #, c-format msgid "%s: subprocess exited with code %d" msgstr "%s:å­è¿›ç¨‹é€€å‡ºï¼Œçжæ€ç  %d" #: src/rush.c:1131 #, c-format msgid "%s: subprocess terminated on signal %d" msgstr "%s:å­è¿›ç¨‹æ”¶åˆ°ä¿¡å· %d 终止" #: src/rush.c:1134 #, c-format msgid "%s: subprocess terminated" msgstr "%s:å­è¿›ç¨‹ç»ˆæ­¢" #: src/rush.c:1223 #, c-format msgid "cannot enforce gid %lu: %s" msgstr "无法强制 gid 为 %lu:%s" #: src/rush.c:1228 #, c-format msgid "cannot enforce uid %lu: %s" msgstr "无法强制 uid 为 %lu:%s" #: src/rush.c:1233 msgid "seteuid(0) succeeded when it should not" msgstr "seteuid(0) 调用æˆåŠŸï¼Œä½†è¿™å¹¶ä¸æ˜¯æœŸæœ›çš„结果" #: src/rush.c:1239 #, c-format msgid "Rule %s at %s:%d matched" msgstr "匹é…到 %2$s:%3$d 处的规则 %1$s" #: src/rush.c:1253 #, c-format msgid "Error message: %s" msgstr "错误消æ¯ï¼š%s" #: src/rush.c:1256 #, c-format msgid "Error sending diagnostic message to descriptor %d: %s" msgstr "å‘é€è¯Šæ–­ä¿¡æ¯è‡³æè¿°ç¬¦ %d 失败:%s" #: src/rush.c:1262 #, c-format msgid "cannot set limits for %s" msgstr "无法设置 %s çš„é™é¢" #: src/rush.c:1269 #, c-format msgid "Chroot dir: %s" msgstr "Chroot 至目录 %s" #: src/rush.c:1276 #, c-format msgid "Home dir: %s" msgstr "主目录:%s" #: src/rush.c:1281 #, c-format msgid "GID: %lu" msgstr "GID:%lu" #: src/rush.c:1306 #, c-format msgid "cannot open database %s: %s" msgstr "无法打开数æ®åº“ %s:%s" #: src/rush.c:1315 #, c-format msgid "cannot chroot to %s: %s" msgstr "无法 chroot 至 %s:%s" #: src/rush.c:1322 src/rush.c:1414 #, c-format msgid "invalid uid %lu" msgstr "UID %lu 无效" #: src/rush.c:1327 #, c-format msgid "chdir %s" msgstr "chdir %s" #: src/rush.c:1330 #, c-format msgid "cannot change to dir %s: %s" msgstr "无法切æ¢è‡³ç›®å½• %s:%s" #: src/rush.c:1334 #, c-format msgid "Executing %s, %s" msgstr "执行 %s,%s" #: src/rush.c:1349 #, c-format msgid "%s:%d: %s: cannot execute %s: %s" msgstr "%s:%d:%s:无法执行 %s:%s" #: src/rush.c:1392 src/rush.c:1394 msgid "invalid command line" msgstr "命令行无效" #: src/rush.c:1405 msgid "invalid user name" msgstr "ç”¨æˆ·åæ— æ•ˆ" #: src/rush.c:1416 #, c-format msgid "user %s, uid %lu" msgstr "用户 %s,UID %lu" #: src/rush.c:1428 msgid "Command line:" msgstr "命令行:" #: src/rush.c:1431 msgid "Environment:" msgstr "环境å˜é‡ï¼š" #: src/rush.c:1462 #, c-format msgid "Serving interactive shell request for %s by rule %s" msgstr "æ ¹æ®è§„则 %2$s å“应 %1$s çš„äº¤äº’å¼ shell 请求" #: src/rush.c:1466 #, c-format msgid "Serving request \"%s\" for %s by rule %s" msgstr "æ ¹æ®è§„则 %3$s å“应 %2$s 的“%1$sâ€è¯·æ±‚" #: src/rush.c:1472 #, c-format msgid "no matching rule for \"%s\", user %s" msgstr "没有与“%sâ€åŒ¹é…的规则,用户å为 %s" #: src/rushlast.c:31 src/rushwho.c:30 #, c-format msgid "not enough memory" msgstr "内存ä¸è¶³" #: src/rushlast.c:78 src/rushwho.c:67 #, c-format msgid "invalid format: %s" msgstr "æ ¼å¼æ— æ•ˆï¼š%s" #: src/rushlast.c:88 src/rushwho.c:77 #, c-format msgid "cannot open database file %s" msgstr "无法打开数æ®åº“ %s" #: src/rushwho.c:61 #, c-format msgid "extra arguments" msgstr "é¢å¤–çš„å‚æ•°" #: src/socket.c:61 #, c-format msgid "%s: TCPMUX did not respond" msgstr "%s:TCPMUX 未å“应" #: src/socket.c:65 #, c-format msgid "%s: TCPMUX returned %s" msgstr "%s:TCPMUX 返回 %s" #: src/transform.c:155 msgid "" "Transform expression must start with 's' followed by a punctuation character" msgstr "转æ¢è¡¨è¾¾å¼å¿…须以“sâ€å¼€å¤´ï¼Œä¹‹åŽåº”当为一个标点符å·" #: src/transform.c:166 #, c-format msgid "Missing 2nd delimiter in position %d of expression %s" msgstr "åœ¨è¡¨è¾¾å¼ %2$s 的第 %1$d 个ä½ç½®ç¼ºå°‘第二分隔符" #: src/transform.c:176 #, c-format msgid "Missing trailing delimiter in position %d of expression %s" msgstr "åœ¨è¡¨è¾¾å¼ %2$s 的第 %1$d 个ä½ç½®ç¼ºå°‘尾分隔符" #: src/transform.c:203 #, c-format msgid "Unknown flag in transform expression: %c" msgstr "转æ¢è¡¨è¾¾å¼ä¸­æœ‰æœªçŸ¥æ ‡è¯†ï¼š%c" #: src/transform.c:220 #, c-format msgid "Invalid transform expression: %s" msgstr "转æ¢è¡¨è¾¾å¼æ— æ•ˆï¼š%s" #: src/transform.c:248 msgid "Invalid transform replacement: back reference out of range" msgstr "转æ¢è¡¨è¾¾å¼ä¸­çš„æ›¿æ¢æ–¹å¼æ— æ•ˆï¼šåŽå‘引用超出范围" #: rushopt.opt:27 rlopt.opt:56 msgid "NUMBER" msgstr "等级编å·" #: rushopt.opt:27 msgid "Set debugging level." msgstr "设置调试等级。" #: rushopt.opt:35 msgid "Run in test mode." msgstr "以测试模å¼è¿è¡Œã€‚" #: rushopt.opt:41 msgid "Scanner test." msgstr "扫æè€…测试。" #: rushopt.opt:47 msgid "Print grammar and lexical analyzer traces" msgstr "æ˜¾ç¤ºè¯­æ³•å’Œè¯æ³•分æžå™¨çš„æ¶ˆæ¯" #: rushopt.opt:53 msgid "NAME" msgstr "åç§°" #: rushopt.opt:53 msgid "Supply user name in test mode." msgstr "设置测试模å¼ä¸‹çš„用户å。" #: rushopt.opt:65 msgid "COMMAND" msgstr "命令" #: rushopt.opt:65 msgid "Execute COMMAND." msgstr "执行命令。" #: rushopt.opt:71 msgid "Force interactive shell." msgstr "å¼ºåˆ¶ä½¿ç”¨äº¤äº’å¼ shell。" #: rushopt.opt:78 msgid "KEYWORDS" msgstr "关键字" #: rushopt.opt:78 msgid "Dump final request in test mode." msgstr "在测试模å¼ä¸­è½¬å‚¨æœ€ç»ˆçš„命令请求。" #: rushopt.opt:85 msgid "CHECK" msgstr "检验" #: rushopt.opt:85 msgid "Add or remove configuration security check." msgstr "添加或移除é…置安全检验。" #: rushopt.opt:93 msgid "Show default configuration." msgstr "显示默认é…置。" #: rushopt.opt:102 rwopt.opt:40 rlopt.opt:82 msgid "Other options" msgstr "其他选项" #: rushopt.opt:102 rwopt.opt:40 rlopt.opt:82 msgid "Give this help list" msgstr "显示此帮助列表" #: rushopt.opt:102 rwopt.opt:40 rlopt.opt:82 msgid "Give a short usage message" msgstr "显示简短的用法信æ¯" #: rushopt.opt:102 rwopt.opt:40 rlopt.opt:82 msgid "Print program version" msgstr "显示程åºç‰ˆæœ¬" #: rushopt.opt:23 msgid "rush - restricted user shell." msgstr "rush - 有é™è®¿é—®çš„用户 shell。" #: rushopt.opt:25 msgid "[FILE]" msgstr "[文件]" #: rushopt.opt:125 rushopt.opt:359 rwopt.opt:123 rwopt.opt:357 rlopt.opt:126 #: rlopt.opt:360 msgid "Usage:" msgstr "用法:" #: rushopt.opt:125 rwopt.opt:123 rlopt.opt:126 msgid "OPTION" msgstr "选项" #: rushopt.opt:243 rwopt.opt:241 rlopt.opt:244 msgid "" "Mandatory or optional arguments to long options are also mandatory or " "optional for any corresponding short options." msgstr "用于长选项的必选(或å¯é€‰ï¼‰é€‰é¡¹ï¼Œå¯¹äºŽçŸ­é€‰é¡¹ä¹Ÿæ˜¯å¿…选(或å¯é€‰ï¼‰çš„。" #: rushopt.opt:247 rwopt.opt:245 rlopt.opt:248 #, c-format msgid "Report bugs to %s.\n" msgstr "请将软件缺陷å馈给 %s。\n" #: rushopt.opt:700 rwopt.opt:698 rlopt.opt:701 msgid "(C)" msgstr "©" #: rushopt.opt:718 rwopt.opt:716 rlopt.opt:719 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 第三版或更高版本<http://gnu.org/licenses/gpl.html>\n" "本软件是自由软件,你å¯ä»¥å¯¹å…¶è‡ªç”±ä¿®æ”¹å’Œå†åˆ†å‘。\n" "本软件在法律å…è®¸èŒƒå›´å†…ä¸æä¾›ä»»ä½•æ‹…ä¿ã€‚\n" "\n" #: rushopt.opt:60 msgid "the --user option is allowed for the superuser only" msgstr "--user 选项åªèƒ½ç”¨äºŽè¶…级用户" #: rushopt.opt:100 #, c-format msgid "No default configuration" msgstr "缺少默认é…ç½®" #: rwopt.opt:24 rlopt.opt:28 msgid "STRING" msgstr "字符串" #: rwopt.opt:24 rlopt.opt:28 msgid "Use STRING instead of the default format." msgstr "用指定字符串替代默认格å¼ã€‚" #: rwopt.opt:30 rlopt.opt:35 msgid "DIR" msgstr "目录" #: rwopt.opt:30 rlopt.opt:35 msgid "Look for database files in DIR." msgstr "在指定目录中查找数æ®åº“文件。" #: rwopt.opt:36 rlopt.opt:49 msgid "Do not display header line." msgstr "䏿˜¾ç¤ºæ ‡é¢˜è¡Œã€‚" #: rwopt.opt:21 msgid "rushwho - show listing of online Rush users." msgstr "rushwho - 显示在线的 Rush 用户列表。" #: rlopt.opt:42 msgid "Show entries in chronological order." msgstr "ä»¥æ—¶é—´é¡ºåºæ˜¾ç¤ºå„项。" #: rlopt.opt:56 msgid "Show at most NUM records." msgstr "指定最多显示多少æ¡è®°å½•。" #: rlopt.opt:24 msgid "rushlast - show listing of last Rush logins." msgstr "rushlast - 显示最近的 Rush 登录情况。" #: rlopt.opt:26 msgid "[user [user...]]" msgstr "[用户 [用户...]]" #: rlopt.opt:63 #, c-format msgid "invalid number (%s)" msgstr "ç¼–å·æ— æ•ˆï¼ˆ%s)" #: lib/readfmt.c:40 #, c-format msgid "cannot stat format file %s" msgstr "æ— æ³•å¯¹æ ¼å¼æ–‡ä»¶ %s 执行 stat 命令" #: lib/readfmt.c:42 #, c-format msgid "%s is not a regular file" msgstr "%s 䏿˜¯æ™®é€šæ–‡ä»¶" #: lib/readfmt.c:46 #, c-format msgid "cannot open format file %s" msgstr "æ— æ³•æ‰“å¼€æ ¼å¼æ–‡ä»¶ %s" #: lib/rushdb.c:79 #, c-format msgid "cannot create directory %s: %s" msgstr "无法创建目录 %s:%s" #: lib/rushdb.c:84 #, c-format msgid "cannot stat directory %s: %s" msgstr "无法对目录 %s 执行 stat 命令:%s" #: lib/rushdb.c:89 #, c-format msgid "%s is not a directory" msgstr "%s 䏿˜¯ç›®å½•" #: lib/rushdb.c:100 lib/rushdb.c:114 #, c-format msgid "cannot open file %s: %s" msgstr "无法打开文件 %s:%s" #: lib/rushdb.c:586 #, c-format msgid "missing closing quote in string started near `%s'" msgstr "“%sâ€é™„近的字符串缺少å³å¼•å·" #: lib/version.c:28 msgid "" "\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" msgstr "" "\n" "GPLv3+ 许å¯è¯ï¼šGNU GPL 第三版或更高版本<http://gnu.org/licenses/gpl.html>\n" "本软件是自由软件,你å¯ä»¥å¯¹å…¶è‡ªç”±ä¿®æ”¹å’Œå†åˆ†å‘。\n" "本软件在法律å…è®¸èŒƒå›´å†…ä¸æä¾›ä»»ä½•æ‹…ä¿ã€‚\n" "\n" #: gnu/error.c:194 msgid "Unknown system error" msgstr "未知系统错误" #: gnu/getopt.c:278 #, c-format msgid "%s: option '%s%s' is ambiguous\n" msgstr "%s:选项“%s%sâ€æœ‰äºŒä¹‰æ€§\n" #: gnu/getopt.c:284 #, c-format msgid "%s: option '%s%s' is ambiguous; possibilities:" msgstr "%s:选项“%s%s有二义性;它å¯èƒ½æ˜¯ï¼š" #: gnu/getopt.c:319 #, c-format msgid "%s: unrecognized option '%s%s'\n" msgstr "%s: 无法识别选项“%s%sâ€\n" #: gnu/getopt.c:345 #, c-format msgid "%s: option '%s%s' doesn't allow an argument\n" msgstr "%s:选项“%s%sâ€ä¸æŽ¥å—傿•°\n" #: gnu/getopt.c:360 #, c-format msgid "%s: option '%s%s' requires an argument\n" msgstr "%s:选项“%s%sâ€éœ€è¦ä¸€ä¸ªå‚æ•°\n" #: gnu/getopt.c:621 #, c-format msgid "%s: invalid option -- '%c'\n" msgstr "%s:无效选项 -- “%câ€\n" #: gnu/getopt.c:636 gnu/getopt.c:682 #, c-format msgid "%s: option requires an argument -- '%c'\n" msgstr "%s:选项“%câ€éœ€è¦ä¸€ä¸ªå‚æ•°\n" #~ msgid "Ignoring non-existing file %s" #~ msgstr "忽略ä¸å­˜åœ¨çš„æ–‡ä»¶ %s" #~ msgid "%s: file is not safe" #~ msgstr "%s:文件ä¸å®‰å…¨" #~ msgid "error reading file %s: %s" #~ msgstr "è¯»å–æ–‡ä»¶ %s 时出错:%s" #~ msgid "read 0 bytes from file %s" #~ msgstr "无法从文件 %s 中读å–内容" #~ msgid "not an absolute directory name" #~ msgstr "䏿˜¯ç»å¯¹ç›®å½•å" #~ msgid "%s:%d: %s is not a directory" #~ msgstr "%s:%d:%s 䏿˜¯ç›®å½•" #~ msgid "%s:%d: invalid number: %s" #~ msgstr "%s:%d:数字无效:%s" #~ msgid "%s:%d: invalid chroot directory" #~ msgstr "%s:%d:chroot 目录无效" #~ msgid "%s:%d: invalid home directory" #~ msgstr "%s:%d:主目录无效" #~ msgid "%s:%d: Unknown message reference" #~ msgstr "%s:%d:消æ¯å¼•用未知" #~ msgid "%s:%d: expected boolean value, but found `%s'" #~ msgstr "%s:%d:应当为布尔值,但实际为“%sâ€" #~ msgid "%s:%d: unknown address family" #~ msgstr "%s:%d:地å€ç±»åž‹æœªçŸ¥" #~ msgid "%s:%d: malformed URL" #~ msgstr "%s:%d:URL æ ¼å¼é”™è¯¯" #~ msgid "%s:%d: port is meaningless for UNIX sockets" #~ msgstr "%s:%d:端å£å·åœ¨ UNIX 套接字中ä¸èµ·ä½œç”¨" #~ msgid "%s:%d: UNIX socket name too long" #~ msgstr "%s:%d:UNIX 套接字å太长" #~ msgid "%s:%d: bad port number" #~ msgstr "%s:%d:端å£å·é”™è¯¯" #~ msgid "%s:%d: unknown service name" #~ msgstr "%s:%d:æœåŠ¡å称未知" #~ msgid "%s:%d: unknown host name %s" #~ msgstr "%s:%d:主机å %s 未知" #~ msgid "%s:%d: unsupported address family" #~ msgstr "%s:%d:地å€ç±»åž‹ä¸æ”¯æŒ" #~ msgid "%s:%d: cannot stat file %s: %s" #~ msgstr "%s:%d:无法对文件 %s 执行 stat 命令:%s" #~ msgid "%s:%d: unknown keyword: %s" #~ msgstr "%s:%d:关键字未知:%s" #~ msgid "Falling back to the default configuration" #~ msgstr "改用默认é…ç½®" #~ msgid "%s:%d: INTERNAL ERROR: node type out of range" #~ msgstr "%s:%d:内部错误:节点类型超出范围" #~ msgid "Transform: \"%s\" -> \"%s\"" #~ msgstr "转æ¢ï¼šâ€œ%sâ€->“%sâ€" #~ msgid "Command line: %s" #~ msgstr "命令行:%s" #~ msgid "Setting command line" #~ msgstr "设置命令行" #~ msgid "%s:%d: internal error" #~ msgstr "%s:%d:内部错误" #~ msgid "%s: option '--%s' doesn't allow an argument\n" #~ msgstr "%s:选项“--%sâ€ä¸æŽ¥å—傿•°\n" #~ msgid "%s: unrecognized option '--%s'\n" #~ msgstr "%s: 无法识别选项“--%sâ€\n" #~ msgid "%s: option '-W %s' is ambiguous\n" #~ msgstr "%s:选项“-W %sâ€æœ‰äºŒä¹‰æ€§\n" #~ msgid "%s: option '-W %s' doesn't allow an argument\n" #~ msgstr "%s:选项“-W %sâ€ä¸æŽ¥å—傿•°\n" #~ msgid "%s: option '-W %s' requires an argument\n" #~ msgstr "%s:选项“-W %sâ€éœ€è¦ä¸€ä¸ªå‚æ•°\n" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/po/es.po�����������������������������������������������������������������������������������0000644�0001750�0001750�00000061433�14655401313�013724� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Spanish translation of GNU rush 2.2 # Copyright (C) 2018, 2024 Free Software Foundation, Inc. # This file is distributed under the same license as the rush package. # Francisco Javier Serrador <fserrador@gmail.com>, 2018. # Cristian Othón Martínez Vera <cfuga@cfuga.mx>, 2024. # #: rwopt.opt:23 msgid "" msgstr "" "Project-Id-Version: GNU rush 2.2\n" "Report-Msgid-Bugs-To: bug-rush@gnu.org\n" "POT-Creation-Date: 2024-08-09 14:51+0300\n" "PO-Revision-Date: 2024-06-06 13:58-0600\n" "Last-Translator: Cristian Othón Martínez Vera <cfuga@cfuga.mx>\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" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/config.c:163 #, c-format msgid "Finished parsing %s" msgstr "Terminó la interpretación de %s" #: src/config.c:169 #, c-format msgid "Resuming parsing %s from line %d" msgstr "Continúa la interpretación de %s a partir de la línea %d" #: src/config.c:262 #, c-format msgid "invalid number: %s" msgstr "número inválido: %s" #: src/config.c:275 msgid "invalid opcode" msgstr "código operacional inválido" #: src/config.c:297 #, c-format msgid "invalid regexp: %s" msgstr "expresión regular inválida: %s" #: src/config.c:336 #, c-format msgid "unknown regexp flag: %s" msgstr "opción de expresión regular desconocida: %s" #: src/config.c:353 msgid "too few arguments" msgstr "faltan argumentos" #: src/config.c:357 src/rush.c:1381 msgid "too many arguments" msgstr "demasiados argumentos" #: src/config.c:428 #, c-format msgid "no such user: %s" msgstr "no existe el usuario: %s" #: src/config.c:453 src/config.c:1106 #, c-format msgid "no such group: %s" msgstr "no existe el grupo: %s" #: src/config.c:543 #, c-format msgid "unknown limit: %s" msgstr "límite desconocido: %s" #: src/config.c:560 #, c-format msgid "expected ~ as the second argument, but found %s" msgstr "se esperaba ~ como el segundo argumento, pero se encontró %s" #: src/config.c:718 #, c-format msgid "debug level set to %d" msgstr "se estableció el nivel de depuración a %d" #: src/config.c:730 #, c-format msgid "invalid time: %s" msgstr "fecha/hora inválida: %s" #: src/config.c:786 msgid "invalid file descriptor" msgstr "descriptor de fichero inválido" #: src/config.c:800 msgid "Unknown message reference" msgstr "referencia a mensaje desconocida" #: src/config.c:893 msgid "invalid include file name" msgstr "nombre de fichero incluido inválido" #: src/config.c:900 #, c-format msgid "Ignoring non-existing include file %s" msgstr "Se descarta el nombre de fichero incluido %s que no existe" #: src/config.c:906 #, c-format msgid "cannot stat file %s: %s" msgstr "no se puede ejecutar 'stat' sobre el fichero %s: %s" #: src/config.c:934 rushopt.opt:90 #, c-format msgid "unknown keyword: %s" msgstr "palabra clave desconocida: %s" #: src/config.c:982 msgid "key field is not a number" msgstr "la clave de campo no es un número" #: src/config.c:988 msgid "value field is not a number" msgstr "el valor del campo no es un número" #: src/config.c:1033 src/config.c:1038 src/rush.c:262 #, c-format msgid "%s: not a number" msgstr "%s: no es un número" #: src/config.c:1211 src/config.c:1340 #, c-format msgid "Parsing %s" msgstr "Se interpreta %s" #: src/config.c:1245 #, c-format msgid "unknown statement: %s" msgstr "declaración desconocida: %s" #: src/config.c:1280 msgid "missing ]" msgstr "falta ]" #: src/config.c:1289 msgid "invalid statement: missing value" msgstr "declaración inválida: falta un valor" #: src/config.c:1310 #, c-format msgid "failed to parse value: %s" msgstr "falló al interpretar el valor: %s" #: src/config.c:1328 msgid "statement cannot be used outside a rule" msgstr "la declaración no se puede usar fuera de una regla" #: src/config.c:1366 msgid "parsing legacy built-in configuration" msgstr "se interpreta la configuración interna heredada" #: src/config.c:1368 #, c-format msgid "parsing legacy configuration file %s" msgstr "se interpreta el fichero de configuración heredada %s" #: src/limits.c:53 #, c-format msgid "Setting limit %d to %lu" msgstr "Se establece el límite %d a %lu" #: src/limits.c:58 #, c-format msgid "error setting limit: %s" msgstr "error al establecer el límite: %s" #: src/limits.c:68 #, c-format msgid "Setting priority to %d" msgstr "Se establece la prioridad a %d" #: src/limits.c:70 #, c-format msgid "error setting priority: %s" msgstr "error al establecer la prioridad: %s" #: src/limits.c:86 src/limits.c:87 #, c-format msgid "No logins allowed for `%s'" msgstr "No se permiten accesos para `%s'" #: src/limits.c:91 #, c-format msgid "counting logins for %s" msgstr "se cuentan accesos para %s" #: src/limits.c:97 msgid "acct database is empty" msgstr "la base de datos acct está vacía" #: src/limits.c:101 #, c-format msgid "Cannot open database %s: %s" msgstr "No se puede abrir la base de datos %s: %s" #: src/limits.c:119 #, c-format msgid "counted %zu/%zu logins for %s" msgstr "se contaron %zu/%zu accesos para %s" #: src/limits.c:126 src/limits.c:128 #, c-format msgid "Too many logins (max %zu) for %s" msgstr "Demasiados accesos (máx %zu) para %s" #: src/limits.c:143 #, c-format msgid "Setting limits for %s" msgstr "Se establecen límites para %s" #: src/rush.c:43 msgid "" "You are not permitted to execute this command.\n" "Contact the systems administrator for further assistance.\n" msgstr "" "No tiene permitido ejecutar esta orden.\n" "Contacte al administrador de sistemas para más ayuda.\n" #: src/rush.c:47 msgid "" "You do not have interactive login access to this machine.\n" "Contact the systems administrator for further assistance.\n" msgstr "" "No tiene acceso a sesiones interactivas en este equipo.\n" "Contacte al administrador de sistemas para más ayuda.\n" #: src/rush.c:51 msgid "" "Local configuration error occurred.\n" "Contact the systems administrator for further assistance.\n" msgstr "" "Sucedió un error de configuración local.\n" "Contacte al administrador de sistemas para más ayuda.\n" #: src/rush.c:55 msgid "" "A system error occurred while attempting to execute command.\n" "Contact the systems administrator for further assistance.\n" msgstr "" "Sucedió un error de sistema al tratar de ejecutar la orden.\n" "Contacte al administrador de sistemas para más ayuda.\n" #: src/rush.c:156 #, c-format msgid "failed to write message to stderr: %s" msgstr "falló al escribir el mensaje a la salida de error: %s" #: src/rush.c:160 #, c-format msgid "failed to write message to stdout: %s" msgstr "falló al escribir el mensaje a la salida estándard: %s" #: src/rush.c:172 #, c-format msgid "Debug: " msgstr "Depuración: " #: src/rush.c:176 #, c-format msgid "Info: " msgstr "Info: " #: src/rush.c:180 #, c-format msgid "Notice: " msgstr "Aviso: " #: src/rush.c:184 #, c-format msgid "Warning: " msgstr "Advertencia: " #: src/rush.c:191 #, c-format msgid "Error: " msgstr "Error: " #: src/rush.c:248 msgid "Not enough memory" msgstr "Sin memoria suficiente" #: src/rush.c:279 src/rush.c:324 #, c-format msgid "INTERNAL ERROR at %s:%d: unrecognized opcode %d" msgstr "ERROR INTERNO en %s:%d: no se reconoce el código de operación %d" #: src/rush.c:408 #, c-format msgid "%s:%d: %s: can't stat '%s': %s" msgstr "%s:%d: %s: no se puede ejecutar 'stat' sobre '%s': %s" #: src/rush.c:469 #, c-format msgid "INTERNAL ERROR at %s:%d: unrecognized operation %d" msgstr "ERROR INTERNO en %s:%d: no se reconoce la operación %d" #: src/rush.c:509 #, c-format msgid "INTERNAL ERROR at %s:%d: unrecognized node type %d" msgstr "ERROR INTERNO en %s:%d: no se reconoce el tipo de nodo %d" #: src/rush.c:718 #, c-format msgid "INTERNAL ERROR at %s:%d: invalid envar type %d" msgstr "ERROR INTERNO en %s:%d: tipo de variable de ambiente %d inválido" #: src/rush.c:723 msgid "Final environment:" msgstr "Ambiente final:" #: src/rush.c:737 #, c-format msgid "wordsplit(%s) failed: %s" msgstr "falló wordsplit(%s): %s" #: src/rush.c:763 #, c-format msgid "no argument at index %d in command: %s" msgstr "sin argumentos en el índice %d en la orden: %s" #: src/rush.c:906 #, c-format msgid "Removing option %s %s" msgstr "Se descarta la opción %s %s" #: src/rush.c:918 msgid "Transforming command line" msgstr "Se transforma la línea de órdenes" #: src/rush.c:925 #, c-format msgid "Transforming program name (%s)" msgstr "Se transforma el nombre de programa (%s)" #: src/rush.c:943 #, c-format msgid "Transforming argv[%d]" msgstr "Se transforma argv[%d]" #: src/rush.c:950 #, c-format msgid "Transforming variable %s=%s" msgstr "Se transforma la variable %s=%s" #: src/rush.c:957 src/rush.c:1043 msgid "environment transformation is not yet implemented" msgstr "aún no no se implementa la transformación de ambiente" #: src/rush.c:961 #, c-format msgid "INTERNAL ERROR at %s:%d: can't modify read-only target" msgstr "" "ERROR INTERNO en %s:%d: no se puede modificar un objetivo de sólo lectura" #: src/rush.c:980 #, c-format msgid "Transformation map: %s, %s, %s, %u, %u, %s" msgstr "Mapa de transformación: %s, %s, %s, %u, %u, %s" #: src/rush.c:994 #, c-format msgid "INTERNAL ERROR at %s:%d: invalid node type %d" msgstr "ERROR INTERNO en %s:%d: tipo de nodo %d inválido" #: src/rush.c:1001 #, c-format msgid "transformed value: %s" msgstr "valor transformado: %s" #: src/rush.c:1022 #, c-format msgid "Deleting arguments %d-%d" msgstr "Se borran los argumentos %d-%d" #: src/rush.c:1025 msgid "Deleting argv[0] is prohibited" msgstr "Se prohíbe borrar argv[0]" #: src/rush.c:1047 #, c-format msgid "INTERNAL ERROR at %s:%d: invalid target type %d" msgstr "ERROR INTERNO en %s:%d: tipo de objetivo %d inválido" #: src/rush.c:1065 #, c-format msgid "Program name: %s" msgstr "Nombre del programa: %s" #: src/rush.c:1066 msgid "Final arguments:" msgstr "Argumentos finales:" #: src/rush.c:1084 #, c-format msgid "error writing to database %s: %s" msgstr "error al escribir a la base de datos %s:%s" #: src/rush.c:1093 #, c-format msgid "error writing stop to database file %s: %s" msgstr "error al detener la escritura al fichero de base de datos %s:%s" #: src/rush.c:1114 #, c-format msgid "%s:%d: %s: cannot fork: %s" msgstr "%s:%d: %s: no se puede ejecutar fork(): %s" #: src/rush.c:1124 #, c-format msgid "Forked process %lu" msgstr "Proceso bifurcado %lu" #: src/rush.c:1128 #, c-format msgid "%s: subprocess exited with code %d" msgstr "%s: el subproceso terminó con código %d" #: src/rush.c:1131 #, c-format msgid "%s: subprocess terminated on signal %d" msgstr "%s: el subproceso terminó por la señal %d" #: src/rush.c:1134 #, c-format msgid "%s: subprocess terminated" msgstr "%s: el subproceso terminó" #: src/rush.c:1223 #, c-format msgid "cannot enforce gid %lu: %s" msgstr "no puede forzar gid %lu: %s" #: src/rush.c:1228 #, c-format msgid "cannot enforce uid %lu: %s" msgstr "no puede forzar uid %lu: %s" #: src/rush.c:1233 msgid "seteuid(0) succeeded when it should not" msgstr "seteuid(0) correcto cuando no debería serlo" #: src/rush.c:1239 #, c-format msgid "Rule %s at %s:%d matched" msgstr "Coincidió la regla %s en %s:%d" #: src/rush.c:1253 #, c-format msgid "Error message: %s" msgstr "Mensaje de error: %s" #: src/rush.c:1256 #, c-format msgid "Error sending diagnostic message to descriptor %d: %s" msgstr "Error al enviar el mensaje de diagnóstico al descriptor %d: %s" #: src/rush.c:1262 #, c-format msgid "cannot set limits for %s" msgstr "no se puede establecer límites para %s" #: src/rush.c:1269 #, c-format msgid "Chroot dir: %s" msgstr "Directorio chroot: %s" #: src/rush.c:1276 #, c-format msgid "Home dir: %s" msgstr "Directorio inicial: %s" #: src/rush.c:1281 #, c-format msgid "GID: %lu" msgstr "GID: %lu" #: src/rush.c:1306 #, c-format msgid "cannot open database %s: %s" msgstr "no se puede abrir la base de datos %s: %s" #: src/rush.c:1315 #, c-format msgid "cannot chroot to %s: %s" msgstr "no se puede hacer chroot a %s: %s" #: src/rush.c:1322 src/rush.c:1414 #, c-format msgid "invalid uid %lu" msgstr "uid inválida: %lu" #: src/rush.c:1327 #, c-format msgid "chdir %s" msgstr "chdir %s" #: src/rush.c:1330 #, c-format msgid "cannot change to dir %s: %s" msgstr "no se puede cambiar al directorio %s: %s" #: src/rush.c:1334 #, c-format msgid "Executing %s, %s" msgstr "Se ejecuta %s, %s" #: src/rush.c:1349 #, c-format msgid "%s:%d: %s: cannot execute %s: %s" msgstr "%s:%d %s: no se puede ejecutar %s: %s" #: src/rush.c:1392 src/rush.c:1394 msgid "invalid command line" msgstr "línea de órdenes inválida" #: src/rush.c:1405 msgid "invalid user name" msgstr "nombre de usuario inválido" #: src/rush.c:1416 #, c-format msgid "user %s, uid %lu" msgstr "usuario %s, uid %lu" #: src/rush.c:1428 msgid "Command line:" msgstr "Línea de órdenes:" #: src/rush.c:1431 msgid "Environment:" msgstr "Ambiente:" #: src/rush.c:1462 #, c-format msgid "Serving interactive shell request for %s by rule %s" msgstr "Se concede la petición de shell interactivo para %s por la regla %s" #: src/rush.c:1466 #, c-format msgid "Serving request \"%s\" for %s by rule %s" msgstr "Se concede la petición \"%s\" para %s por la regla %s" #: src/rush.c:1472 #, c-format msgid "no matching rule for \"%s\", user %s" msgstr "no hay una regla coincidente para \"%s\", usuario %s" #: src/rushlast.c:31 src/rushwho.c:30 #, c-format msgid "not enough memory" msgstr "sin memoria suficiente" #: src/rushlast.c:78 src/rushwho.c:67 #, c-format msgid "invalid format: %s" msgstr "formato inválido: %s" #: src/rushlast.c:88 src/rushwho.c:77 #, c-format msgid "cannot open database file %s" msgstr "no se puede abrir el fichero de base de datos %s" #: src/rushwho.c:61 #, c-format msgid "extra arguments" msgstr "argumentos adicionales" #: src/socket.c:61 #, c-format msgid "%s: TCPMUX did not respond" msgstr "%s: TCPMUX no respondió" #: src/socket.c:65 #, c-format msgid "%s: TCPMUX returned %s" msgstr "%s: TCPMUX devolvió %s" #: src/transform.c:155 msgid "" "Transform expression must start with 's' followed by a punctuation character" msgstr "" "La expresión de transformación debe iniciar con 's' seguida por un carácter " "de puntuación" #: src/transform.c:166 #, c-format msgid "Missing 2nd delimiter in position %d of expression %s" msgstr "Falta el segundo delimitador en la posición %d de la expresión %s" #: src/transform.c:176 #, c-format msgid "Missing trailing delimiter in position %d of expression %s" msgstr "Falta el delimitador final en la posición %d de la expresión %s" #: src/transform.c:203 #, c-format msgid "Unknown flag in transform expression: %c" msgstr "Opción desconocida en la expresión de transformación: %c" #: src/transform.c:220 #, c-format msgid "Invalid transform expression: %s" msgstr "Expresión de transformación inválida: %s" #: src/transform.c:248 msgid "Invalid transform replacement: back reference out of range" msgstr "" "Reemplazo de transformación inválido: referencia hacia atrás fuera de rango" #: rushopt.opt:27 rlopt.opt:56 msgid "NUMBER" msgstr "NÚMERO" #: rushopt.opt:27 msgid "Set debugging level." msgstr "Establece el nivel de depuración." #: rushopt.opt:35 msgid "Run in test mode." msgstr "Ejecuta en modo de prueba." #: rushopt.opt:41 msgid "Scanner test." msgstr "Prueba de decodificador." #: rushopt.opt:47 msgid "Print grammar and lexical analyzer traces" msgstr "Muestra el rastreo del analizador gramático y léxico" #: rushopt.opt:53 msgid "NAME" msgstr "NOMBRE" #: rushopt.opt:53 msgid "Supply user name in test mode." msgstr "Proporciona el nombre de usuario en modo de prueba." #: rushopt.opt:65 msgid "COMMAND" msgstr "ORDEN" #: rushopt.opt:65 msgid "Execute COMMAND." msgstr "Ejecuta ORDEN." #: rushopt.opt:71 msgid "Force interactive shell." msgstr "Fuerza el shell interactivo." #: rushopt.opt:78 msgid "KEYWORDS" msgstr "PALABRASCLAVE" #: rushopt.opt:78 msgid "Dump final request in test mode." msgstr "Vuelca la solicitud final en modo de prueba." #: rushopt.opt:85 msgid "CHECK" msgstr "COMPROBACIÓN" #: rushopt.opt:85 msgid "Add or remove configuration security check." msgstr "Agrega o elimina la revisión de la configuración de seguridad." #: rushopt.opt:93 msgid "Show default configuration." msgstr "Muestra la configuración por defecto." #: rushopt.opt:102 rwopt.opt:40 rlopt.opt:82 msgid "Other options" msgstr "Otras opciones" #: rushopt.opt:102 rwopt.opt:40 rlopt.opt:82 msgid "Give this help list" msgstr "Muestra este listado de ayuda" #: rushopt.opt:102 rwopt.opt:40 rlopt.opt:82 msgid "Give a short usage message" msgstr "Muestra un mensaje de empleo corto" #: rushopt.opt:102 rwopt.opt:40 rlopt.opt:82 msgid "Print program version" msgstr "Muestra la versión del programa" #: rushopt.opt:23 msgid "rush - restricted user shell." msgstr "rush - shell de usuario restringido" #: rushopt.opt:25 msgid "[FILE]" msgstr "[FICHERO]" #: rushopt.opt:125 rushopt.opt:359 rwopt.opt:123 rwopt.opt:357 rlopt.opt:126 #: rlopt.opt:360 msgid "Usage:" msgstr "Uso:" #: rushopt.opt:125 rwopt.opt:123 rlopt.opt:126 msgid "OPTION" msgstr "OPCIÓN" #: rushopt.opt:243 rwopt.opt:241 rlopt.opt:244 msgid "" "Mandatory or optional arguments to long options are also mandatory or " "optional for any corresponding short options." msgstr "" "Los argumentos obligatorios u opcionales para opciones largas son también " "obligatorios u opcionales para las opciones correspondientes cortas." #: rushopt.opt:247 rwopt.opt:245 rlopt.opt:248 #, c-format msgid "Report bugs to %s.\n" msgstr "Reportar defectos a %s.\n" #: rushopt.opt:700 rwopt.opt:698 rlopt.opt:701 msgid "(C)" msgstr "(C)" #: rushopt.opt:718 rwopt.opt:716 rlopt.opt:719 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 <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" #: rushopt.opt:60 msgid "the --user option is allowed for the superuser only" msgstr "la opción --user solamente se permite para el superusuario" #: rushopt.opt:100 #, c-format msgid "No default configuration" msgstr "No hay configuración predeterminada" #: rwopt.opt:24 rlopt.opt:28 msgid "STRING" msgstr "CADENA" #: rwopt.opt:24 rlopt.opt:28 msgid "Use STRING instead of the default format." msgstr "Usa CADENA en lugar del formato por defecto." #: rwopt.opt:30 rlopt.opt:35 msgid "DIR" msgstr "DIR" #: rwopt.opt:30 rlopt.opt:35 msgid "Look for database files in DIR." msgstr "Busca ficheros de base de datos en DIR." #: rwopt.opt:36 rlopt.opt:49 msgid "Do not display header line." msgstr "No muestra la línea de cabecera." #: rwopt.opt:21 msgid "rushwho - show listing of online Rush users." msgstr "rushwho - muestra una lista de los usuarios de Rush en línea." #: rlopt.opt:42 msgid "Show entries in chronological order." msgstr "Muestra las entradas en orden cronológico." #: rlopt.opt:56 msgid "Show at most NUM records." msgstr "Muestra hasta NUM registros." #: rlopt.opt:24 msgid "rushlast - show listing of last Rush logins." msgstr "rushlast - muestra una lista de los últimos accesos de Rush." #: rlopt.opt:26 msgid "[user [user...]]" msgstr "[usuario [usuario...]]" #: rlopt.opt:63 #, c-format msgid "invalid number (%s)" msgstr "número inválido (%s)" #: lib/readfmt.c:40 #, c-format msgid "cannot stat format file %s" msgstr "no se puede ejecutar 'stat sobre el fichero de formato %s" #: lib/readfmt.c:42 #, c-format msgid "%s is not a regular file" msgstr "%s no es un fichero regular" #: lib/readfmt.c:46 #, c-format msgid "cannot open format file %s" msgstr "no se puede abrir el fichero de formato %s" #: lib/rushdb.c:79 #, c-format msgid "cannot create directory %s: %s" msgstr "no se puede crear el directorio %s: %s" #: lib/rushdb.c:84 #, c-format msgid "cannot stat directory %s: %s" msgstr "no se puede ejecutar 'stat' sobre el directorio %s: %s" #: lib/rushdb.c:89 #, c-format msgid "%s is not a directory" msgstr "%s no es un directorio" #: lib/rushdb.c:100 lib/rushdb.c:114 #, c-format msgid "cannot open file %s: %s" msgstr "no se puede abrir el fichero %s: %s" #: lib/rushdb.c:586 #, c-format msgid "missing closing quote in string started near `%s'" msgstr "falta la comilla que cierra en la cadena que inicia cerca de `%s'" #: lib/version.c:28 msgid "" "\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" msgstr "" "\n" "Licencia GPLv3+: GPL de GNU versión 3 o posterior <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" #: gnu/error.c:194 msgid "Unknown system error" msgstr "Error de sistema desconocido" #: gnu/getopt.c:278 #, c-format msgid "%s: option '%s%s' is ambiguous\n" msgstr "%s: la opción '%s%s' es ambigua\n" #: gnu/getopt.c:284 #, c-format msgid "%s: option '%s%s' is ambiguous; possibilities:" msgstr "%s: la opción '%s%s' es ambigua; posibilidades:" #: gnu/getopt.c:319 #, c-format msgid "%s: unrecognized option '%s%s'\n" msgstr "%s: no se reconoce la opción '%s%s'\n" #: gnu/getopt.c:345 #, c-format msgid "%s: option '%s%s' doesn't allow an argument\n" msgstr "%s: la opción '%s%s' no admite un argumento\n" #: gnu/getopt.c:360 #, c-format msgid "%s: option '%s%s' requires an argument\n" msgstr "%s: la opción '%s%s' requiere un argumento\n" #: gnu/getopt.c:621 #, c-format msgid "%s: invalid option -- '%c'\n" msgstr "%s: opción inválida -- '%c'\n" #: gnu/getopt.c:636 gnu/getopt.c:682 #, c-format msgid "%s: option requires an argument -- '%c'\n" msgstr "%s: la opción requiere un argumento -- '%c'\n" #, fuzzy #~ msgid "Ignoring non-existing file %s" #~ msgstr "Intentaba purgar macro inexistente «%s»" #, fuzzy #~ msgid "%s: file is not safe" #~ msgstr ", seguro" #, fuzzy #~ msgid "error reading file %s: %s" #~ msgstr "error de entrada al leer el archivo de esquema %s" #~ msgid "read 0 bytes from file %s" #~ msgstr "lee 0 bytes desde fichero %s" #, fuzzy #~ msgid "not an absolute directory name" #~ msgstr "directorio: nombre del directorio al que desea modificarse.\n" #, fuzzy #~ msgid "%s:%d: %s is not a directory" #~ msgstr "%s:%d: directorio casa inválido" #~ msgid "%s:%d: invalid number: %s" #~ msgstr "%s:%d: número inválido: %s" #~ msgid "%s:%d: invalid chroot directory" #~ msgstr "%s:%d: chroot inválido directorio" #~ msgid "%s:%d: invalid home directory" #~ msgstr "%s:%d: directorio casa inválido" #, fuzzy #~ msgid "%s:%d: Unknown message reference" #~ msgstr "omitiendo mensaje %s@%s:%d (%d octetos)" #, fuzzy #~ msgid "%s:%d: expected boolean value, but found `%s'" #~ msgstr "valor numérico esperado, pero encontró «%s»" #, fuzzy #~ msgid "%s:%d: unknown address family" #~ msgstr "familia direccional no compatible: %d" #~ msgid "%s:%d: malformed URL" #~ msgstr "%s:%d: URL mal formada" #, fuzzy #~ msgid "%s:%d: port is meaningless for UNIX sockets" #~ msgstr "" #~ "tipo de conexión inválida: %s; puerto está con problemas para los socket " #~ "UNIX" #, fuzzy #~ msgid "%s:%d: UNIX socket name too long" #~ msgstr "%s: nombre de socket UNIX demasiado largo" #, fuzzy #~ msgid "%s:%d: bad port number" #~ msgstr "%s: no un número de puerto válido" #~ msgid "%s:%d: unknown service name" #~ msgstr "%s:%d: nombre de servicio desconocido" #, fuzzy #~ msgid "%s:%d: unknown host name %s" #~ msgstr "%s: nombre de hospedante %s desconocido" #, fuzzy #~ msgid "%s:%d: unsupported address family" #~ msgstr "%s: familia de dirección no soportada" #, fuzzy #~ msgid "%s:%d: cannot stat file %s: %s" #~ msgstr "%s:%d: no puede declarar %s: %s" #, fuzzy #~ msgid "%s:%d: unknown keyword: %s" #~ msgstr "%s:%d: tecleo clave desconocida" #, fuzzy #~ msgid "Falling back to the default configuration" #~ msgstr "no se puede despertar al servidor; recurriendo a %s" #, fuzzy #~ msgid "%s:%d: INTERNAL ERROR: node type out of range" #~ msgstr "ERROR INTERNO al %s:%d, tipo de nodo inesperado %d" #~ msgid "Transform: \"%s\" -> \"%s\"" #~ msgstr "Transforma: «%s» → «%s»" #, fuzzy #~ msgid "Command line: %s" #~ msgstr "Línea de órdenes %s\n" #, fuzzy #~ msgid "Setting command line" #~ msgstr "Línea de órdenes." #, fuzzy #~ msgid "%s:%d: internal error" #~ msgstr "%s:%d: ERROR INTERNO: sin respuesta (%s)" #, fuzzy #~ msgid "%s: option '--%s' doesn't allow an argument\n" #~ msgstr "%s: la opción «--%s» no permite un argumento\n" #~ msgid "%s: option '-W %s' is ambiguous\n" #~ msgstr "%s: la opción '-W %s' es ambigua\n" #~ msgid "%s: option '-W %s' doesn't allow an argument\n" #~ msgstr "%s: la opción '-W %s' no admite ningún argumento\n" #~ msgid "%s: option '-W %s' requires an argument\n" #~ msgstr "%s: la opción '-W %s' requiere un argumento\n" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/po/rush.pot��������������������������������������������������������������������������������0000644�0001750�0001750�00000035270�14655401312�014461� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Sergey Poznyakoff # This file is distributed under the same license as the GNU rush package. # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. # #: rwopt.opt:23 #, fuzzy msgid "" msgstr "" "Project-Id-Version: GNU rush 2.4\n" "Report-Msgid-Bugs-To: bug-rush@gnu.org\n" "POT-Creation-Date: 2024-08-09 14:51+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" #: src/config.c:163 #, c-format msgid "Finished parsing %s" msgstr "" #: src/config.c:169 #, c-format msgid "Resuming parsing %s from line %d" msgstr "" #: src/config.c:262 #, c-format msgid "invalid number: %s" msgstr "" #: src/config.c:275 msgid "invalid opcode" msgstr "" #: src/config.c:297 #, c-format msgid "invalid regexp: %s" msgstr "" #: src/config.c:336 #, c-format msgid "unknown regexp flag: %s" msgstr "" #: src/config.c:353 msgid "too few arguments" msgstr "" #: src/config.c:357 src/rush.c:1381 msgid "too many arguments" msgstr "" #: src/config.c:428 #, c-format msgid "no such user: %s" msgstr "" #: src/config.c:453 src/config.c:1106 #, c-format msgid "no such group: %s" msgstr "" #: src/config.c:543 #, c-format msgid "unknown limit: %s" msgstr "" #: src/config.c:560 #, c-format msgid "expected ~ as the second argument, but found %s" msgstr "" #: src/config.c:718 #, c-format msgid "debug level set to %d" msgstr "" #: src/config.c:730 #, c-format msgid "invalid time: %s" msgstr "" #: src/config.c:786 msgid "invalid file descriptor" msgstr "" #: src/config.c:800 msgid "Unknown message reference" msgstr "" #: src/config.c:893 msgid "invalid include file name" msgstr "" #: src/config.c:900 #, c-format msgid "Ignoring non-existing include file %s" msgstr "" #: src/config.c:906 #, c-format msgid "cannot stat file %s: %s" msgstr "" #: src/config.c:934 rushopt.opt:90 #, c-format msgid "unknown keyword: %s" msgstr "" #: src/config.c:982 msgid "key field is not a number" msgstr "" #: src/config.c:988 msgid "value field is not a number" msgstr "" #: src/config.c:1033 src/config.c:1038 src/rush.c:262 #, c-format msgid "%s: not a number" msgstr "" #: src/config.c:1211 src/config.c:1340 #, c-format msgid "Parsing %s" msgstr "" #: src/config.c:1245 #, c-format msgid "unknown statement: %s" msgstr "" #: src/config.c:1280 msgid "missing ]" msgstr "" #: src/config.c:1289 msgid "invalid statement: missing value" msgstr "" #: src/config.c:1310 #, c-format msgid "failed to parse value: %s" msgstr "" #: src/config.c:1328 msgid "statement cannot be used outside a rule" msgstr "" #: src/config.c:1366 msgid "parsing legacy built-in configuration" msgstr "" #: src/config.c:1368 #, c-format msgid "parsing legacy configuration file %s" msgstr "" #: src/limits.c:53 #, c-format msgid "Setting limit %d to %lu" msgstr "" #: src/limits.c:58 #, c-format msgid "error setting limit: %s" msgstr "" #: src/limits.c:68 #, c-format msgid "Setting priority to %d" msgstr "" #: src/limits.c:70 #, c-format msgid "error setting priority: %s" msgstr "" #: src/limits.c:86 src/limits.c:87 #, c-format msgid "No logins allowed for `%s'" msgstr "" #: src/limits.c:91 #, c-format msgid "counting logins for %s" msgstr "" #: src/limits.c:97 msgid "acct database is empty" msgstr "" #: src/limits.c:101 #, c-format msgid "Cannot open database %s: %s" msgstr "" #: src/limits.c:119 #, c-format msgid "counted %zu/%zu logins for %s" msgstr "" #: src/limits.c:126 src/limits.c:128 #, c-format msgid "Too many logins (max %zu) for %s" msgstr "" #: src/limits.c:143 #, c-format msgid "Setting limits for %s" msgstr "" #: src/rush.c:43 msgid "" "You are not permitted to execute this command.\n" "Contact the systems administrator for further assistance.\n" msgstr "" #: src/rush.c:47 msgid "" "You do not have interactive login access to this machine.\n" "Contact the systems administrator for further assistance.\n" msgstr "" #: src/rush.c:51 msgid "" "Local configuration error occurred.\n" "Contact the systems administrator for further assistance.\n" msgstr "" #: src/rush.c:55 msgid "" "A system error occurred while attempting to execute command.\n" "Contact the systems administrator for further assistance.\n" msgstr "" #: src/rush.c:156 #, c-format msgid "failed to write message to stderr: %s" msgstr "" #: src/rush.c:160 #, c-format msgid "failed to write message to stdout: %s" msgstr "" #: src/rush.c:172 #, c-format msgid "Debug: " msgstr "" #: src/rush.c:176 #, c-format msgid "Info: " msgstr "" #: src/rush.c:180 #, c-format msgid "Notice: " msgstr "" #: src/rush.c:184 #, c-format msgid "Warning: " msgstr "" #: src/rush.c:191 #, c-format msgid "Error: " msgstr "" #: src/rush.c:248 msgid "Not enough memory" msgstr "" #: src/rush.c:279 src/rush.c:324 #, c-format msgid "INTERNAL ERROR at %s:%d: unrecognized opcode %d" msgstr "" #: src/rush.c:408 #, c-format msgid "%s:%d: %s: can't stat '%s': %s" msgstr "" #: src/rush.c:469 #, c-format msgid "INTERNAL ERROR at %s:%d: unrecognized operation %d" msgstr "" #: src/rush.c:509 #, c-format msgid "INTERNAL ERROR at %s:%d: unrecognized node type %d" msgstr "" #: src/rush.c:718 #, c-format msgid "INTERNAL ERROR at %s:%d: invalid envar type %d" msgstr "" #: src/rush.c:723 msgid "Final environment:" msgstr "" #: src/rush.c:737 #, c-format msgid "wordsplit(%s) failed: %s" msgstr "" #: src/rush.c:763 #, c-format msgid "no argument at index %d in command: %s" msgstr "" #: src/rush.c:906 #, c-format msgid "Removing option %s %s" msgstr "" #: src/rush.c:918 msgid "Transforming command line" msgstr "" #: src/rush.c:925 #, c-format msgid "Transforming program name (%s)" msgstr "" #: src/rush.c:943 #, c-format msgid "Transforming argv[%d]" msgstr "" #: src/rush.c:950 #, c-format msgid "Transforming variable %s=%s" msgstr "" #: src/rush.c:957 src/rush.c:1043 msgid "environment transformation is not yet implemented" msgstr "" #: src/rush.c:961 #, c-format msgid "INTERNAL ERROR at %s:%d: can't modify read-only target" msgstr "" #: src/rush.c:980 #, c-format msgid "Transformation map: %s, %s, %s, %u, %u, %s" msgstr "" #: src/rush.c:994 #, c-format msgid "INTERNAL ERROR at %s:%d: invalid node type %d" msgstr "" #: src/rush.c:1001 #, c-format msgid "transformed value: %s" msgstr "" #: src/rush.c:1022 #, c-format msgid "Deleting arguments %d-%d" msgstr "" #: src/rush.c:1025 msgid "Deleting argv[0] is prohibited" msgstr "" #: src/rush.c:1047 #, c-format msgid "INTERNAL ERROR at %s:%d: invalid target type %d" msgstr "" #: src/rush.c:1065 #, c-format msgid "Program name: %s" msgstr "" #: src/rush.c:1066 msgid "Final arguments:" msgstr "" #: src/rush.c:1084 #, c-format msgid "error writing to database %s: %s" msgstr "" #: src/rush.c:1093 #, c-format msgid "error writing stop to database file %s: %s" msgstr "" #: src/rush.c:1114 #, c-format msgid "%s:%d: %s: cannot fork: %s" msgstr "" #: src/rush.c:1124 #, c-format msgid "Forked process %lu" msgstr "" #: src/rush.c:1128 #, c-format msgid "%s: subprocess exited with code %d" msgstr "" #: src/rush.c:1131 #, c-format msgid "%s: subprocess terminated on signal %d" msgstr "" #: src/rush.c:1134 #, c-format msgid "%s: subprocess terminated" msgstr "" #: src/rush.c:1223 #, c-format msgid "cannot enforce gid %lu: %s" msgstr "" #: src/rush.c:1228 #, c-format msgid "cannot enforce uid %lu: %s" msgstr "" #: src/rush.c:1233 msgid "seteuid(0) succeeded when it should not" msgstr "" #: src/rush.c:1239 #, c-format msgid "Rule %s at %s:%d matched" msgstr "" #: src/rush.c:1253 #, c-format msgid "Error message: %s" msgstr "" #: src/rush.c:1256 #, c-format msgid "Error sending diagnostic message to descriptor %d: %s" msgstr "" #: src/rush.c:1262 #, c-format msgid "cannot set limits for %s" msgstr "" #: src/rush.c:1269 #, c-format msgid "Chroot dir: %s" msgstr "" #: src/rush.c:1276 #, c-format msgid "Home dir: %s" msgstr "" #: src/rush.c:1281 #, c-format msgid "GID: %lu" msgstr "" #: src/rush.c:1306 #, c-format msgid "cannot open database %s: %s" msgstr "" #: src/rush.c:1315 #, c-format msgid "cannot chroot to %s: %s" msgstr "" #: src/rush.c:1322 src/rush.c:1414 #, c-format msgid "invalid uid %lu" msgstr "" #: src/rush.c:1327 #, c-format msgid "chdir %s" msgstr "" #: src/rush.c:1330 #, c-format msgid "cannot change to dir %s: %s" msgstr "" #: src/rush.c:1334 #, c-format msgid "Executing %s, %s" msgstr "" #: src/rush.c:1349 #, c-format msgid "%s:%d: %s: cannot execute %s: %s" msgstr "" #: src/rush.c:1392 src/rush.c:1394 msgid "invalid command line" msgstr "" #: src/rush.c:1405 msgid "invalid user name" msgstr "" #: src/rush.c:1416 #, c-format msgid "user %s, uid %lu" msgstr "" #: src/rush.c:1428 msgid "Command line:" msgstr "" #: src/rush.c:1431 msgid "Environment:" msgstr "" #: src/rush.c:1462 #, c-format msgid "Serving interactive shell request for %s by rule %s" msgstr "" #: src/rush.c:1466 #, c-format msgid "Serving request \"%s\" for %s by rule %s" msgstr "" #: src/rush.c:1472 #, c-format msgid "no matching rule for \"%s\", user %s" msgstr "" #: src/rushlast.c:31 src/rushwho.c:30 #, c-format msgid "not enough memory" msgstr "" #: src/rushlast.c:78 src/rushwho.c:67 #, c-format msgid "invalid format: %s" msgstr "" #: src/rushlast.c:88 src/rushwho.c:77 #, c-format msgid "cannot open database file %s" msgstr "" #: src/rushwho.c:61 #, c-format msgid "extra arguments" msgstr "" #: src/socket.c:61 #, c-format msgid "%s: TCPMUX did not respond" msgstr "" #: src/socket.c:65 #, c-format msgid "%s: TCPMUX returned %s" msgstr "" #: src/transform.c:155 msgid "" "Transform expression must start with 's' followed by a punctuation character" msgstr "" #: src/transform.c:166 #, c-format msgid "Missing 2nd delimiter in position %d of expression %s" msgstr "" #: src/transform.c:176 #, c-format msgid "Missing trailing delimiter in position %d of expression %s" msgstr "" #: src/transform.c:203 #, c-format msgid "Unknown flag in transform expression: %c" msgstr "" #: src/transform.c:220 #, c-format msgid "Invalid transform expression: %s" msgstr "" #: src/transform.c:248 msgid "Invalid transform replacement: back reference out of range" msgstr "" #: rushopt.opt:27 rlopt.opt:56 msgid "NUMBER" msgstr "" #: rushopt.opt:27 msgid "Set debugging level." msgstr "" #: rushopt.opt:35 msgid "Run in test mode." msgstr "" #: rushopt.opt:41 msgid "Scanner test." msgstr "" #: rushopt.opt:47 msgid "Print grammar and lexical analyzer traces" msgstr "" #: rushopt.opt:53 msgid "NAME" msgstr "" #: rushopt.opt:53 msgid "Supply user name in test mode." msgstr "" #: rushopt.opt:65 msgid "COMMAND" msgstr "" #: rushopt.opt:65 msgid "Execute COMMAND." msgstr "" #: rushopt.opt:71 msgid "Force interactive shell." msgstr "" #: rushopt.opt:78 msgid "KEYWORDS" msgstr "" #: rushopt.opt:78 msgid "Dump final request in test mode." msgstr "" #: rushopt.opt:85 msgid "CHECK" msgstr "" #: rushopt.opt:85 msgid "Add or remove configuration security check." msgstr "" #: rushopt.opt:93 msgid "Show default configuration." msgstr "" #: rushopt.opt:102 rwopt.opt:40 rlopt.opt:82 msgid "Other options" msgstr "" #: rushopt.opt:102 rwopt.opt:40 rlopt.opt:82 msgid "Give this help list" msgstr "" #: rushopt.opt:102 rwopt.opt:40 rlopt.opt:82 msgid "Give a short usage message" msgstr "" #: rushopt.opt:102 rwopt.opt:40 rlopt.opt:82 msgid "Print program version" msgstr "" #: rushopt.opt:23 msgid "rush - restricted user shell." msgstr "" #: rushopt.opt:25 msgid "[FILE]" msgstr "" #: rushopt.opt:125 rushopt.opt:359 rwopt.opt:123 rwopt.opt:357 rlopt.opt:126 #: rlopt.opt:360 msgid "Usage:" msgstr "" #: rushopt.opt:125 rwopt.opt:123 rlopt.opt:126 msgid "OPTION" msgstr "" #: rushopt.opt:243 rwopt.opt:241 rlopt.opt:244 msgid "" "Mandatory or optional arguments to long options are also mandatory or " "optional for any corresponding short options." msgstr "" #: rushopt.opt:247 rwopt.opt:245 rlopt.opt:248 #, c-format msgid "Report bugs to %s.\n" msgstr "" #: rushopt.opt:700 rwopt.opt:698 rlopt.opt:701 msgid "(C)" msgstr "" #: rushopt.opt:718 rwopt.opt:716 rlopt.opt:719 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 "" #: rushopt.opt:60 msgid "the --user option is allowed for the superuser only" msgstr "" #: rushopt.opt:100 #, c-format msgid "No default configuration" msgstr "" #: rwopt.opt:24 rlopt.opt:28 msgid "STRING" msgstr "" #: rwopt.opt:24 rlopt.opt:28 msgid "Use STRING instead of the default format." msgstr "" #: rwopt.opt:30 rlopt.opt:35 msgid "DIR" msgstr "" #: rwopt.opt:30 rlopt.opt:35 msgid "Look for database files in DIR." msgstr "" #: rwopt.opt:36 rlopt.opt:49 msgid "Do not display header line." msgstr "" #: rwopt.opt:21 msgid "rushwho - show listing of online Rush users." msgstr "" #: rlopt.opt:42 msgid "Show entries in chronological order." msgstr "" #: rlopt.opt:56 msgid "Show at most NUM records." msgstr "" #: rlopt.opt:24 msgid "rushlast - show listing of last Rush logins." msgstr "" #: rlopt.opt:26 msgid "[user [user...]]" msgstr "" #: rlopt.opt:63 #, c-format msgid "invalid number (%s)" msgstr "" #: lib/readfmt.c:40 #, c-format msgid "cannot stat format file %s" msgstr "" #: lib/readfmt.c:42 #, c-format msgid "%s is not a regular file" msgstr "" #: lib/readfmt.c:46 #, c-format msgid "cannot open format file %s" msgstr "" #: lib/rushdb.c:79 #, c-format msgid "cannot create directory %s: %s" msgstr "" #: lib/rushdb.c:84 #, c-format msgid "cannot stat directory %s: %s" msgstr "" #: lib/rushdb.c:89 #, c-format msgid "%s is not a directory" msgstr "" #: lib/rushdb.c:100 lib/rushdb.c:114 #, c-format msgid "cannot open file %s: %s" msgstr "" #: lib/rushdb.c:586 #, c-format msgid "missing closing quote in string started near `%s'" msgstr "" #: lib/version.c:28 msgid "" "\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" msgstr "" #: gnu/error.c:194 msgid "Unknown system error" msgstr "" #: gnu/getopt.c:278 #, c-format msgid "%s: option '%s%s' is ambiguous\n" msgstr "" #: gnu/getopt.c:284 #, c-format msgid "%s: option '%s%s' is ambiguous; possibilities:" msgstr "" #: gnu/getopt.c:319 #, c-format msgid "%s: unrecognized option '%s%s'\n" msgstr "" #: gnu/getopt.c:345 #, c-format msgid "%s: option '%s%s' doesn't allow an argument\n" msgstr "" #: gnu/getopt.c:360 #, c-format msgid "%s: option '%s%s' requires an argument\n" msgstr "" #: gnu/getopt.c:621 #, c-format msgid "%s: invalid option -- '%c'\n" msgstr "" #: gnu/getopt.c:636 gnu/getopt.c:682 #, c-format msgid "%s: option requires an argument -- '%c'\n" msgstr "" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/po/sr.po�����������������������������������������������������������������������������������0000644�0001750�0001750�00000072415�14655401313�013743� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Serbian translation of rush. # Copyright © 2020 Free Software Foundation, Inc. # This file is distributed under the same license as the rush package. # МироÑлав Ðиколић <miroslavnikolic@rocketmail.com>, 2012–2022. #: rwopt.opt:23 msgid "" msgstr "" "Project-Id-Version: rush-2.2\n" "Report-Msgid-Bugs-To: bug-rush@gnu.org\n" "POT-Creation-Date: 2024-08-09 14:51+0300\n" "PO-Revision-Date: 2022-02-15 21:12+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" "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-Bugs: Report translation errors to the Language-Team address.\n" #: src/config.c:163 #, c-format msgid "Finished parsing %s" msgstr "Завршио Ñам анализирање %s" #: src/config.c:169 #, c-format msgid "Resuming parsing %s from line %d" msgstr "ÐаÑтављам анализирање „%s“ од реда %d" #: src/config.c:262 #, c-format msgid "invalid number: %s" msgstr "неиÑправан број: %s" #: src/config.c:275 msgid "invalid opcode" msgstr "неиÑправан опкод" #: src/config.c:297 #, c-format msgid "invalid regexp: %s" msgstr "неиÑправан регизраз: %s" #: src/config.c:336 #, c-format msgid "unknown regexp flag: %s" msgstr "непозната опција регизраза: %s" #: src/config.c:353 msgid "too few arguments" msgstr "премало аргумената" #: src/config.c:357 src/rush.c:1381 msgid "too many arguments" msgstr "превише аргумената" #: src/config.c:428 #, c-format msgid "no such user: %s" msgstr "нема таквог кориÑника: %s" #: src/config.c:453 src/config.c:1106 #, c-format msgid "no such group: %s" msgstr "нема такве групе: %s" #: src/config.c:543 #, c-format msgid "unknown limit: %s" msgstr "непознато ограничење: %s" #: src/config.c:560 #, c-format msgid "expected ~ as the second argument, but found %s" msgstr "очекивана је ~ као други аргумент, али је пронађено %s" #: src/config.c:718 #, c-format msgid "debug level set to %d" msgstr "ниво уклањања грешака је подешен на %d" #: src/config.c:730 #, c-format msgid "invalid time: %s" msgstr "неиÑправно време: %s" #: src/config.c:786 msgid "invalid file descriptor" msgstr "неиÑправан опиÑник датотеке" #: src/config.c:800 msgid "Unknown message reference" msgstr "Ðепознат указивач поруке" #: src/config.c:893 msgid "invalid include file name" msgstr "неиÑправан назив датотеке укључивања" #: src/config.c:900 #, c-format msgid "Ignoring non-existing include file %s" msgstr "Занемарујем не-поÑтојећу датотеку укључивања „%s“" #: src/config.c:906 #, c-format msgid "cannot stat file %s: %s" msgstr "не могу да добавим податке датотеке %s: %s" #: src/config.c:934 rushopt.opt:90 #, c-format msgid "unknown keyword: %s" msgstr "непозната кључна реч: %s" #: src/config.c:982 msgid "key field is not a number" msgstr "поље кључа није број" #: src/config.c:988 msgid "value field is not a number" msgstr "поље вредноÑти није број" #: src/config.c:1033 src/config.c:1038 src/rush.c:262 #, c-format msgid "%s: not a number" msgstr "%s: није број" #: src/config.c:1211 src/config.c:1340 #, c-format msgid "Parsing %s" msgstr "Обрађујем %s" #: src/config.c:1245 #, c-format msgid "unknown statement: %s" msgstr "непозната тврдња: %s" #: src/config.c:1280 msgid "missing ]" msgstr "недоÑтаје ]" #: src/config.c:1289 msgid "invalid statement: missing value" msgstr "неиÑправна тврдња: недоÑтаје вредноÑÑ‚" #: src/config.c:1310 #, c-format msgid "failed to parse value: %s" msgstr "ниÑам уÑпео да обрадим вредноÑÑ‚: %s" #: src/config.c:1328 msgid "statement cannot be used outside a rule" msgstr "тврдња не може бити коришћена изван правила" #: src/config.c:1366 msgid "parsing legacy built-in configuration" msgstr "обрађујем Ñтаро уграђено подешавање" #: src/config.c:1368 #, c-format msgid "parsing legacy configuration file %s" msgstr "обрађујем Ñтару датотеку подешавања „%s“" #: src/limits.c:53 #, c-format msgid "Setting limit %d to %lu" msgstr "Подешавам ограничење %d на %lu" #: src/limits.c:58 #, c-format msgid "error setting limit: %s" msgstr "грешка подешавања ограничења: %s" #: src/limits.c:68 #, c-format msgid "Setting priority to %d" msgstr "Подешавам приоритет на %d" #: src/limits.c:70 #, c-format msgid "error setting priority: %s" msgstr "грешка подешавања приоритета: %s" #: src/limits.c:86 src/limits.c:87 #, c-format msgid "No logins allowed for `%s'" msgstr "ÐиÑу допуштена пријављивања за „%s“" #: src/limits.c:91 #, c-format msgid "counting logins for %s" msgstr "бројим пријављивања за %s" #: src/limits.c:97 msgid "acct database is empty" msgstr "аццт база података је празна" #: src/limits.c:101 #, c-format msgid "Cannot open database %s: %s" msgstr "Ðе могу да отворим базу података %s: %s" #: src/limits.c:119 #, c-format msgid "counted %zu/%zu logins for %s" msgstr "избројао Ñам %zu/%zu пријављивања за %s" #: src/limits.c:126 src/limits.c:128 #, c-format msgid "Too many logins (max %zu) for %s" msgstr "Превише пријављивања (највише %zu) за %s" #: src/limits.c:143 #, c-format msgid "Setting limits for %s" msgstr "Подешавам ограничења за %s" #: src/rush.c:43 msgid "" "You are not permitted to execute this command.\n" "Contact the systems administrator for further assistance.\n" msgstr "" "Вама није допуштено да извршите ову наредбу.\n" "ПоÑаветујте Ñе Ñа админиÑтратором ÑиÑтема за даљу иÑпомоћ.\n" #: src/rush.c:47 msgid "" "You do not have interactive login access to this machine.\n" "Contact the systems administrator for further assistance.\n" msgstr "" "Ви немате приÑтуп међудејÑтвеног пријављивања на овај рачунар.\n" "ПоÑаветујте Ñе Ñа админиÑтратором ÑиÑтема за даљу иÑпомоћ.\n" #: src/rush.c:51 msgid "" "Local configuration error occurred.\n" "Contact the systems administrator for further assistance.\n" msgstr "" "Дошло је до меÑне грешке подешавања.\n" "ПоÑаветујте Ñе Ñа админиÑтратором ÑиÑтема за даљу иÑпомоћ.\n" #: src/rush.c:55 msgid "" "A system error occurred while attempting to execute command.\n" "Contact the systems administrator for further assistance.\n" msgstr "" "Дошло је до ÑиÑтемÑке грешке док Ñам покушавао да извршим наредбу.\n" "ПоÑаветујте Ñе Ñа админиÑтратором ÑиÑтема за даљу иÑпомоћ.\n" #: src/rush.c:156 #, c-format msgid "failed to write message to stderr: %s" msgstr "ниÑам уÑпео да упишем поруку у Ñтнд_грешку: %s" #: src/rush.c:160 #, c-format msgid "failed to write message to stdout: %s" msgstr "ниÑам уÑпео да упишем поруку у Ñтнд_излаз: %s" #: src/rush.c:172 #, c-format msgid "Debug: " msgstr "Уклањање грешака: " #: src/rush.c:176 #, c-format msgid "Info: " msgstr "Подаци: " #: src/rush.c:180 #, c-format msgid "Notice: " msgstr "Ðапомена: " #: src/rush.c:184 #, c-format msgid "Warning: " msgstr "Упозорење: " #: src/rush.c:191 #, c-format msgid "Error: " msgstr "Грешка: " #: src/rush.c:248 msgid "Not enough memory" msgstr "Ðема довољно меморије" #: src/rush.c:279 src/rush.c:324 #, c-format msgid "INTERNAL ERROR at %s:%d: unrecognized opcode %d" msgstr "УÐУТРÐШЊРГРЕШКРна %s:%d: непознат опкод %d" #: src/rush.c:408 #, c-format msgid "%s:%d: %s: can't stat '%s': %s" msgstr "%s:%d: %s: не могу да добавим податке за „%s“: %s" #: src/rush.c:469 #, c-format msgid "INTERNAL ERROR at %s:%d: unrecognized operation %d" msgstr "УÐУТРÐШЊРГРЕШКРна %s:%d: непозната радња %d" #: src/rush.c:509 #, c-format msgid "INTERNAL ERROR at %s:%d: unrecognized node type %d" msgstr "УÐУТРÐШЊРГРЕШКРна %s:%d: непозната врÑта чвора %d" #: src/rush.c:718 #, c-format msgid "INTERNAL ERROR at %s:%d: invalid envar type %d" msgstr "УÐУТРÐШЊРГРЕШКРна %s:%d: непозната врÑта енвар %d" #: src/rush.c:723 msgid "Final environment:" msgstr "Крајње окружење:" #: src/rush.c:737 #, c-format msgid "wordsplit(%s) failed: %s" msgstr "„wordsplit(%s)“ није уÑпело: %s" #: src/rush.c:763 #, c-format msgid "no argument at index %d in command: %s" msgstr "нема аргумента у индекÑу %d у наредби: %s" #: src/rush.c:906 #, c-format msgid "Removing option %s %s" msgstr "Уклањам опцију „%s %s“" #: src/rush.c:918 msgid "Transforming command line" msgstr "Преображавам наредбу" #: src/rush.c:925 #, c-format msgid "Transforming program name (%s)" msgstr "Преображавам назив програма (%s)" #: src/rush.c:943 #, c-format msgid "Transforming argv[%d]" msgstr "Преображавам „argv[%d]“" #: src/rush.c:950 #, c-format msgid "Transforming variable %s=%s" msgstr "Преображавам променљиву „%s=%s“" #: src/rush.c:957 src/rush.c:1043 msgid "environment transformation is not yet implemented" msgstr "преображавање окружења још није примењиво" #: src/rush.c:961 #, c-format msgid "INTERNAL ERROR at %s:%d: can't modify read-only target" msgstr "УÐУТРÐШЊРГРЕШКРна %s:%d: не могу да изменим мету Ñамо за читање" #: src/rush.c:980 #, c-format msgid "Transformation map: %s, %s, %s, %u, %u, %s" msgstr "Мапа преображаја: %s, %s, %s, %u, %u, %s" #: src/rush.c:994 #, c-format msgid "INTERNAL ERROR at %s:%d: invalid node type %d" msgstr "УÐУТРÐШЊРГРЕШКРна %s:%d: неиÑправна врÑта чвора %d" #: src/rush.c:1001 #, c-format msgid "transformed value: %s" msgstr "реображена вредноÑÑ‚: %s" #: src/rush.c:1022 #, c-format msgid "Deleting arguments %d-%d" msgstr "Бришем аргументе %d-%d" #: src/rush.c:1025 msgid "Deleting argv[0] is prohibited" msgstr "БриÑање „argv[0]“ је забрањено" #: src/rush.c:1047 #, c-format msgid "INTERNAL ERROR at %s:%d: invalid target type %d" msgstr "УÐУТРÐШЊРГРЕШКРна %s:%d: неиÑправна врÑта мете %d" #: src/rush.c:1065 #, c-format msgid "Program name: %s" msgstr "Ðазив програма: %s" #: src/rush.c:1066 msgid "Final arguments:" msgstr "Крајњи аргументи:" #: src/rush.c:1084 #, c-format msgid "error writing to database %s: %s" msgstr "грешка пиÑања у базу података %s: %s" #: src/rush.c:1093 #, c-format msgid "error writing stop to database file %s: %s" msgstr "грешка пиÑања зауÑтављања у датотеку базе података %s: %s" #: src/rush.c:1114 #, c-format msgid "%s:%d: %s: cannot fork: %s" msgstr "%s:%d: %s: не могу да издвојим: %s" #: src/rush.c:1124 #, c-format msgid "Forked process %lu" msgstr "Издвојен Ð¿Ñ€Ð¾Ñ†ÐµÑ %lu" #: src/rush.c:1128 #, c-format msgid "%s: subprocess exited with code %d" msgstr "%s: Ð¿Ð¾Ñ‚Ð¿Ñ€Ð¾Ñ†ÐµÑ Ñ˜Ðµ изашао Ñа шифром %d" #: src/rush.c:1131 #, c-format msgid "%s: subprocess terminated on signal %d" msgstr "%s: Ð¿Ð¾Ñ‚Ð¿Ñ€Ð¾Ñ†ÐµÑ Ñ˜Ðµ окончан на Ñигналу %d" #: src/rush.c:1134 #, c-format msgid "%s: subprocess terminated" msgstr "%s: Ð¿Ð¾Ñ‚Ð¿Ñ€Ð¾Ñ†ÐµÑ Ñ˜Ðµ окончан" #: src/rush.c:1223 #, c-format msgid "cannot enforce gid %lu: %s" msgstr "не могу да приÑилим гиб %lu: %s" #: src/rush.c:1228 #, c-format msgid "cannot enforce uid %lu: %s" msgstr "не могу да приÑилим уиб %lu: %s" #: src/rush.c:1233 msgid "seteuid(0) succeeded when it should not" msgstr "„seteuid(0)“ је уÑпело када није требало" #: src/rush.c:1239 #, c-format msgid "Rule %s at %s:%d matched" msgstr "Правило %s на %s:%d је подударено" #: src/rush.c:1253 #, c-format msgid "Error message: %s" msgstr "Порука грешке: %s" #: src/rush.c:1256 #, c-format msgid "Error sending diagnostic message to descriptor %d: %s" msgstr "Грешка Ñлања диајгноÑтичке грешке опиÑнику %d: %s" #: src/rush.c:1262 #, c-format msgid "cannot set limits for %s" msgstr "не могу да подеÑим ограничења за %s" #: src/rush.c:1269 #, c-format msgid "Chroot dir: %s" msgstr "Корени дир промене: %s" #: src/rush.c:1276 #, c-format msgid "Home dir: %s" msgstr "Лични дир: %s" #: src/rush.c:1281 #, c-format msgid "GID: %lu" msgstr "ГИБ: %lu" #: src/rush.c:1306 #, c-format msgid "cannot open database %s: %s" msgstr "не могу да отворим базу података %s: %s" #: src/rush.c:1315 #, c-format msgid "cannot chroot to %s: %s" msgstr "не могу да променим корен у %s: %s" #: src/rush.c:1322 src/rush.c:1414 #, c-format msgid "invalid uid %lu" msgstr "неиÑправан уиб %lu" #: src/rush.c:1327 #, c-format msgid "chdir %s" msgstr "промени дир „%s“" #: src/rush.c:1330 #, c-format msgid "cannot change to dir %s: %s" msgstr "не могу да променим у директоријум %s: %s" #: src/rush.c:1334 #, c-format msgid "Executing %s, %s" msgstr "Извршавам %s, %s" #: src/rush.c:1349 #, c-format msgid "%s:%d: %s: cannot execute %s: %s" msgstr "%s:%d: %s: не могу да извршим %s: %s" #: src/rush.c:1392 src/rush.c:1394 msgid "invalid command line" msgstr "неиÑправна наредба" #: src/rush.c:1405 msgid "invalid user name" msgstr "неиÑправан кориÑник" #: src/rush.c:1416 #, c-format msgid "user %s, uid %lu" msgstr "кориÑник %s, уиб %lu" #: src/rush.c:1428 msgid "Command line:" msgstr "Ðаредба:" #: src/rush.c:1431 msgid "Environment:" msgstr "Окружење:" #: src/rush.c:1462 #, c-format msgid "Serving interactive shell request for %s by rule %s" msgstr "ПоÑлужујем захтев међудејÑтвене шкољке за %s правилом %s" #: src/rush.c:1466 #, c-format msgid "Serving request \"%s\" for %s by rule %s" msgstr "ПоÑлужујем захтев „%s“ за %s правилом %s" #: src/rush.c:1472 #, c-format msgid "no matching rule for \"%s\", user %s" msgstr "нема одговарајућег правила за „%s“, кориÑник %s" #: src/rushlast.c:31 src/rushwho.c:30 #, c-format msgid "not enough memory" msgstr "нема довољно меморије" #: src/rushlast.c:78 src/rushwho.c:67 #, c-format msgid "invalid format: %s" msgstr "неиÑправан формат: %s" #: src/rushlast.c:88 src/rushwho.c:77 #, c-format msgid "cannot open database file %s" msgstr "не могу да отворим датотеку базе података %s" #: src/rushwho.c:61 #, c-format msgid "extra arguments" msgstr "додатни аргументи" #: src/socket.c:61 #, c-format msgid "%s: TCPMUX did not respond" msgstr "%s: ТЦПМУКС не одговара" #: src/socket.c:65 #, c-format msgid "%s: TCPMUX returned %s" msgstr "%s: ТЦПМУКС је вратио %s" #: src/transform.c:155 msgid "" "Transform expression must start with 's' followed by a punctuation character" msgstr "Израз преображавања мора почети Ñа „s“ за којим Ñледи знак тачке" #: src/transform.c:166 #, c-format msgid "Missing 2nd delimiter in position %d of expression %s" msgstr "ÐедоÑтаје 2. граничник на положају %d израза %s" #: src/transform.c:176 #, c-format msgid "Missing trailing delimiter in position %d of expression %s" msgstr "ÐедоÑтаје пратећи граничник на положају %d израза %s" #: src/transform.c:203 #, c-format msgid "Unknown flag in transform expression: %c" msgstr "Ðепозната опција у изразу преображаја: %c" #: src/transform.c:220 #, c-format msgid "Invalid transform expression: %s" msgstr "ÐеиÑправан израз преображаја: %s" #: src/transform.c:248 msgid "Invalid transform replacement: back reference out of range" msgstr "ÐеиÑправна замена преображаја: повратна референца је изван опÑега" #: rushopt.opt:27 rlopt.opt:56 msgid "NUMBER" msgstr "БРОЈ" #: rushopt.opt:27 msgid "Set debugging level." msgstr "ПоÑтавља ниво иÑправљања грешака." #: rushopt.opt:35 msgid "Run in test mode." msgstr "Ради у режиму иÑпробавања." #: rushopt.opt:41 msgid "Scanner test." msgstr "Проба Ñкенера." #: rushopt.opt:47 msgid "Print grammar and lexical analyzer traces" msgstr "Трагови граматике штампања и лекÑичког анализатора" #: rushopt.opt:53 msgid "NAME" msgstr "ИМЕ" #: rushopt.opt:53 msgid "Supply user name in test mode." msgstr "ДоÑтавља кориÑничко име у режиму иÑпробавања." #: rushopt.opt:65 msgid "COMMAND" msgstr "ÐÐРЕДБÐ" #: rushopt.opt:65 msgid "Execute COMMAND." msgstr "Извршава ÐÐРЕДБУ." #: rushopt.opt:71 msgid "Force interactive shell." msgstr "Приморава међудејÑтвену шкољку." #: rushopt.opt:78 msgid "KEYWORDS" msgstr "КЉУЧÐЕ_РЕЧИ" #: rushopt.opt:78 msgid "Dump final request in test mode." msgstr "Даје крајњи захтец у режиму текÑта." #: rushopt.opt:85 msgid "CHECK" msgstr "ПРОВЕРÐ" #: rushopt.opt:85 msgid "Add or remove configuration security check." msgstr "Додаје или уклања безбедну проверу подешавања." #: rushopt.opt:93 msgid "Show default configuration." msgstr "Приказује оÑновно подешавање." #: rushopt.opt:102 rwopt.opt:40 rlopt.opt:82 msgid "Other options" msgstr "ОÑтале опције" #: rushopt.opt:102 rwopt.opt:40 rlopt.opt:82 msgid "Give this help list" msgstr "Приказује овај ÑпиÑак помоћи" #: rushopt.opt:102 rwopt.opt:40 rlopt.opt:82 msgid "Give a short usage message" msgstr "Приказује кратку поруку коришћења" #: rushopt.opt:102 rwopt.opt:40 rlopt.opt:82 msgid "Print program version" msgstr "ИÑпиÑује издање програма" #: rushopt.opt:23 msgid "rush - restricted user shell." msgstr "rush — ограничена кориÑничка конзола." #: rushopt.opt:25 msgid "[FILE]" msgstr "[ДÐТОТЕКÐ]" #: rushopt.opt:125 rushopt.opt:359 rwopt.opt:123 rwopt.opt:357 rlopt.opt:126 #: rlopt.opt:360 msgid "Usage:" msgstr "Употреба:" #: rushopt.opt:125 rwopt.opt:123 rlopt.opt:126 msgid "OPTION" msgstr "ОПЦИЈÐ" #: rushopt.opt:243 rwopt.opt:241 rlopt.opt:244 msgid "" "Mandatory or optional arguments to long options are also mandatory or " "optional for any corresponding short options." msgstr "" "Обавезни или опционални аргументи за дуге опције Ñу такође обавезни или " "опционални за Ñве одговарајуће кратке опције." #: rushopt.opt:247 rwopt.opt:245 rlopt.opt:248 #, c-format msgid "Report bugs to %s.\n" msgstr "Грешке пријавите на %s.\n" #: rushopt.opt:700 rwopt.opt:698 rlopt.opt:701 msgid "(C)" msgstr "(C)" #: rushopt.opt:718 rwopt.opt:716 rlopt.opt:719 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" #: rushopt.opt:60 msgid "the --user option is allowed for the superuser only" msgstr "опција „--user“ је дозвољена Ñамо Ñупер кориÑнику" #: rushopt.opt:100 #, c-format msgid "No default configuration" msgstr "Ðема оÑновног подешавања" #: rwopt.opt:24 rlopt.opt:28 msgid "STRING" msgstr "ÐИСКÐ" #: rwopt.opt:24 rlopt.opt:28 msgid "Use STRING instead of the default format." msgstr "КориÑти ÐИСКУ умеÑто оÑновног формата." #: rwopt.opt:30 rlopt.opt:35 msgid "DIR" msgstr "ДИР" #: rwopt.opt:30 rlopt.opt:35 msgid "Look for database files in DIR." msgstr "Тражи датотеке базе података у ДИРЕКТОРИЈУМУ." #: rwopt.opt:36 rlopt.opt:49 msgid "Do not display header line." msgstr "Ðе приказује ред заглавља." #: rwopt.opt:21 msgid "rushwho - show listing of online Rush users." msgstr "rushwho — приказује ÑпиÑак кориÑника Раша на мрежи." #: rlopt.opt:42 msgid "Show entries in chronological order." msgstr "Приказује уноÑе хронолошким редом." #: rlopt.opt:56 msgid "Show at most NUM records." msgstr "Приказује барем БРОЈЕВÐЕ запиÑе." #: rlopt.opt:24 msgid "rushlast - show listing of last Rush logins." msgstr "rushlast — приказује ÑпиÑак поÑледњих пријављивања Раша." #: rlopt.opt:26 msgid "[user [user...]]" msgstr "[кориÑник [кориÑник...]]" #: rlopt.opt:63 #, c-format msgid "invalid number (%s)" msgstr "неиÑправан број (%s)" #: lib/readfmt.c:40 #, c-format msgid "cannot stat format file %s" msgstr "не могу да добавим податке датотеке формата %s" #: lib/readfmt.c:42 #, c-format msgid "%s is not a regular file" msgstr "„%s“ није обична датотека" #: lib/readfmt.c:46 #, c-format msgid "cannot open format file %s" msgstr "не могу да отворим датотеку формата %s" #: lib/rushdb.c:79 #, c-format msgid "cannot create directory %s: %s" msgstr "не могу да направим директоријум „%s“: %s" #: lib/rushdb.c:84 #, c-format msgid "cannot stat directory %s: %s" msgstr "не могу да добавим податке директоријума %s: %s" #: lib/rushdb.c:89 #, c-format msgid "%s is not a directory" msgstr "„%s“ није директоријум" #: lib/rushdb.c:100 lib/rushdb.c:114 #, c-format msgid "cannot open file %s: %s" msgstr "не могу да отворим датотеку „%s“: %s" #: lib/rushdb.c:586 #, c-format msgid "missing closing quote in string started near `%s'" msgstr "недоÑтаје затворена заграда у ниÑци започетој близу „%s“" #: lib/version.c:28 msgid "" "\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" msgstr "" "\n" "Лиценца ОЈЛв3+: ГÐУ ОЈЛ издање 3 или каÑније <http://gnu.org/licenses/gpl." "html>\n" "Ово је Ñлободан Ñофтвер: Ñлободни Ñте да га мењате и раÑподељујете.\n" "Ðе поÑтоји ÐИКÐКВРГÐРÐÐЦИЈÐ, у оквирима дозвољеним законом.\n" "\n" #: gnu/error.c:194 msgid "Unknown system error" msgstr "Ðепозната грешка ÑиÑтема" #: gnu/getopt.c:278 #, c-format msgid "%s: option '%s%s' is ambiguous\n" msgstr "%s: опција „%s%s“ је нејаÑна\n" #: gnu/getopt.c:284 #, c-format msgid "%s: option '%s%s' is ambiguous; possibilities:" msgstr "%s: опција „%s%s“ је нејаÑна; могућноÑти:" #: gnu/getopt.c:319 #, c-format msgid "%s: unrecognized option '%s%s'\n" msgstr "%s: непозната опција „%s%s“\n" #: gnu/getopt.c:345 #, c-format msgid "%s: option '%s%s' doesn't allow an argument\n" msgstr "%s: опција „%s%s“ не дозвољава аргумент\n" #: gnu/getopt.c:360 #, c-format msgid "%s: option '%s%s' requires an argument\n" msgstr "%s: опција „%s%s“ захтева аргумент\n" #: gnu/getopt.c:621 #, c-format msgid "%s: invalid option -- '%c'\n" msgstr "%s: неиÑправна опција -- „%c“\n" #: gnu/getopt.c:636 gnu/getopt.c:682 #, c-format msgid "%s: option requires an argument -- '%c'\n" msgstr "%s: опција захтева аргумент -- „%c“\n" #~ msgid "Ignoring non-existing file %s" #~ msgstr "Занемарујем не-поÑтојећу датотеку „%s“" #~ msgid "%s: file is not safe" #~ msgstr "%s: датотека није безбедна" #~ msgid "error reading file %s: %s" #~ msgstr "грешка читања датотеке „%s“: %s" #~ msgid "read 0 bytes from file %s" #~ msgstr "прочитао Ñам 0 бајта из датотеке „%s“" #~ msgid "not an absolute directory name" #~ msgstr "није апÑолутни назив директоријума" #~ msgid "%s:%d: %s is not a directory" #~ msgstr "%s:%d: „%s“ није директоријум" #~ msgid "%s:%d: invalid number: %s" #~ msgstr "%s:%d: неиÑправан број: %s" #~ msgid "%s:%d: invalid chroot directory" #~ msgstr "%s:%d: неиÑправна промена кореног директоријума" #~ msgid "%s:%d: invalid home directory" #~ msgstr "%s:%d: неиÑправан лични директоријум" #~ msgid "%s:%d: Unknown message reference" #~ msgstr "%s:%d: Ðепозната референца поруке" #~ msgid "%s:%d: expected boolean value, but found `%s'" #~ msgstr "%s:%d: очекивана је логичка вредноÑÑ‚, али је пронађено „%s“" #~ msgid "%s:%d: unknown address family" #~ msgstr "%s:%d: непозната породица адреÑе" #~ msgid "%s:%d: malformed URL" #~ msgstr "%s:%d: лоша адреÑа" #~ msgid "%s:%d: port is meaningless for UNIX sockets" #~ msgstr "%s:%d: прикључник је беÑмиÑлен за ЈУÐИКС прикључнице" #~ msgid "%s:%d: UNIX socket name too long" #~ msgstr "%s:%d: назив ЈУÐИКС прикључнице је предуг" #~ msgid "%s:%d: bad port number" #~ msgstr "%s:%d: лош број прикључника" #~ msgid "%s:%d: unknown service name" #~ msgstr "%s:%d: непознат назив уÑуге" #~ msgid "%s:%d: unknown host name %s" #~ msgstr "%s:%d: непознат назив домаћина %s" #~ msgid "%s:%d: unsupported address family" #~ msgstr "%s:%d: неподржана породица адреÑе" #~ msgid "%s:%d: cannot stat file %s: %s" #~ msgstr "%s:%d: не могу да добавим податке датотеке %s: %s" #~ msgid "%s:%d: unknown keyword: %s" #~ msgstr "%s:%d: непозната кључна реч: %s" #~ msgid "Falling back to the default configuration" #~ msgstr "Пребацујем Ñе на оÑновно подешавање" #~ msgid "%s:%d: INTERNAL ERROR: node type out of range" #~ msgstr "%s:%d: УÐУТРÐШЊРГРЕШКÐ: врÑта чвора је изван опÑега" #~ msgid "Transform: \"%s\" -> \"%s\"" #~ msgstr "Преображај: „%s“ —> „%s“" #~ msgid "Command line: %s" #~ msgstr "Ðаредба: %s" #~ msgid "Setting command line" #~ msgstr "Подешавам наредбу" #~ msgid "%s:%d: internal error" #~ msgstr "%s:%d: унутрашња грешка" #~ msgid "%s: option '--%s' doesn't allow an argument\n" #~ msgstr "%s: опција „--%s“ не дозвољава аргумент\n" #~ msgid "%s: unrecognized option '--%s'\n" #~ msgstr "%s: непозната опција „--%s“\n" #~ msgid "%s: option '-W %s' is ambiguous\n" #~ msgstr "%s: опција „—W %s“ је нејаÑна\n" #~ msgid "%s: option '-W %s' doesn't allow an argument\n" #~ msgstr "%s: опција „-W %s“ не дозвољава аргумент\n" #~ msgid "%s: option '-W %s' requires an argument\n" #~ msgstr "%s: опција „-W %s“ захтева аргумент\n" #~ msgid "argcv_string failed: %s" #~ msgstr "„argcv_string“ није уÑпело: %s" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/po/remove-potcdate.sin���������������������������������������������������������������������0000644�0001750�0001750�00000000660�13456274525�016574� 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 } ��������������������������������������������������������������������������������rush-2.4/po/stamp-po��������������������������������������������������������������������������������0000644�0001750�0001750�00000000012�14655401314�014423� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������timestamp ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/po/zh_CN.gmo�������������������������������������������������������������������������������0000644�0001750�0001750�00000036330�14655401314�014461� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Þ•����³������´��ï���L ��������É��� �����Ó�����é���������������4�����P��,���a�����Ž��.���®��'���Ý��(�����"���.�����Q��&���k�����’�����²�� ���Ñ�����ò����� ��w�����+���‰�����µ�����»�����Ã�����ß�� ���î�����ü����������������!�����@�� ���\�� ���}�����Š��5���œ�����Ò�����Ú�����ë�����ü����� ����� �����4�����M�����`�����i�����„�� ���˜��6���¥��.���Ü��-��� ��/���9��2���i��/���œ��2���Ì��%���ÿ�����%�� ���,��:���M�����ˆ��È���‘��^���Z�����¹��s���Ù��5���M��:���ƒ�����¾�����Ã�����Ê�����ã�����þ������������ ��� �� ���.��)���9�����c�����y�����Š����� �� ���´�����Õ�����î�������� �����3�����&���I�����p�����…����������³�����Ê�����ä��$���������%�� ���D��L���e��*���²�����Ý�����ó����� �����,��(���H�����q�����‹����� ��)���§�� ���Ñ��i���Û��t���E�����º�����Á�����Ò�����é���������������<�����W�����r�����Ž�����«�����Ã�����Þ�����÷����������,�����G�����P�����n�����…��1���›�����Í�����å��*���� �� ���+ ��/���L �����| �����Œ ��%���¦ ��%���Ì �����ò �����!�����!�����2!�����L!�����`!�����s!�����‚!�� ���•!�����¶!�����Ç!�����×!�����é!�� ���"��1��� "��&���?"��"���f"�����‰"�����›"�����¬"��%���¾"��$���ä"����� #��,���'#��,���T#��'���#��'���©#��3���Ñ#�����$�����$�����*$�����@$�����T$�����f$�����~$�����”$�����¥$�����Á$��Ã��Ú$��Ø���ž&�����w'�����‡'�����'�����³'�����É'�����è'��%���ý'��"���#(��0���F(��(���w(��&��� (��#���Ç(�����ë(��$����)��!���%)��7���G)��#���)��)���£)�����Í)��\���Ð)��$���-*�����R*�����Y*�����`*�����~*�� ���’*�����Ÿ*�� ���¦*�����°*�����Ã*�����Ø*��0���î*�����+�����/+��-���A+�� ���o+�����y+�����‰+�����˜+�����¨+�����¾+�����Ï+�����î+�� ��� ,�����,�����2,�����H,��9���W,��:���‘,��4���Ì,��4���-��4���6-��1���k-��.���-��!���Ì-�� ���î-�����ø-��B���.�� ���V.��×���`.��G���8/��*���€/��`���«/��<��� 0��9���I0�����ƒ0�� ���Š0�����—0�����ª0�� ���Â0�� ���Ï0�����Ù0�� ���à0�� ���í0��'���÷0�����1�����21�����A1��"���T1��#���w1��'���›1�����Ã1�� ���Ü1�����æ1��7���ù1��1���12�����c2�����y2�����‘2�����¥2��$���»2�����à2�����ö2��$���3��/���:3��I���j3��*���´3�����ß3�����ï3�����ÿ3�����4��&���*4�����Q4�����a4�� ���t4��'���~4�� ���¦4��M���°4��_���þ4�����^5�����g5�����|5�����’5�����°5�����Ê5�����å5�����6�����!6�����?6�����X6�����s6�����6��*���©6��*���Ô6��+���ÿ6�����+7��+���47�����`7�����z7��'���“7�����»7�����Ó7��*���î7��$���8��1���>8�����p8�����€8��"���•8��"���¸8�����Û8�����ë8�����9��+���9�����?9�����T9�����f9�����v9�����‘9�����ª9�����¼9�����Ë9�����Û9�� ���ô9��)���:��0���,:��2���]:�����:�����¢:�� ���·:�����Ä:�����à:��%���ÿ:��/���%;��.���U;��8���„;�����½;��%���Ü;�� ���<�� ���<�����<�����1<�����F<�� ���X<�����y<�����‹<�����Ÿ<�����¸<�����5�����������_���£���¨���„������±������=���g���}������������� ���8�������]���m���Q���’�������”���S������Ÿ���!���K���C�������•���'���"�����������E���ƒ���0���›�������<������®���O������Š���r��������������6��� ������������������l������¡����������¦���\������¢���^�������1������k�����������²���u���{�������n���A�������‘��� ���v�������%���™�����������+�����������x���;���W�������&��� �������P�����������������†���w���o���ˆ���������������…���B���‰������|���©���s������������� �������—���$���ª�������U������i�������Z���Ž���ž���z������,���J���‹���������������`���¥���¬�������4���y���­���˜������������������d���(������ ����������7�������Y������N���*���X���.���“������[���H�������œ�����������R���T����������t���–���@����������>���q�������~���#���2���:������/���V���������������¤���D���9���F�������-���€������ ���M�������«�������3�������‡���)���L������a���š���G���I���‚���f���p���³���j���e���b�������Œ������°���?���§���c�������¯���h���� 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. �%s is not a directory�%s is not a regular file�%s: TCPMUX did not respond�%s: TCPMUX returned %s�%s: invalid option -- '%c' �%s: not a number�%s: option '%s%s' doesn't allow an argument �%s: option '%s%s' is ambiguous �%s: option '%s%s' is ambiguous; possibilities:�%s: option '%s%s' requires an argument �%s: option requires an argument -- '%c' �%s: subprocess exited with code %d�%s: subprocess terminated�%s: subprocess terminated on signal %d�%s: unrecognized option '%s%s' �%s:%d: %s: can't stat '%s': %s�%s:%d: %s: cannot execute %s: %s�%s:%d: %s: cannot fork: %s�(C)�A system error occurred while attempting to execute command. Contact the systems administrator for further assistance. �Add or remove configuration security check.�CHECK�COMMAND�Cannot open database %s: %s�Chroot dir: %s�Command line:�DIR�Debug: �Deleting arguments %d-%d�Deleting argv[0] is prohibited�Do not display header line.�Dump final request in test mode.�Environment:�Error message: %s�Error sending diagnostic message to descriptor %d: %s�Error: �Execute COMMAND.�Executing %s, %s�Final arguments:�Final environment:�Finished parsing %s�Force interactive shell.�Forked process %lu�GID: %lu�Give a short usage message�Give this help list�Home dir: %s�INTERNAL ERROR at %s:%d: can't modify read-only target�INTERNAL ERROR at %s:%d: invalid envar type %d�INTERNAL ERROR at %s:%d: invalid node type %d�INTERNAL ERROR at %s:%d: invalid target type %d�INTERNAL ERROR at %s:%d: unrecognized node type %d�INTERNAL ERROR at %s:%d: unrecognized opcode %d�INTERNAL ERROR at %s:%d: unrecognized operation %d�Ignoring non-existing include file %s�Info: �Invalid transform expression: %s�Invalid transform replacement: back reference out of range�KEYWORDS�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. �Local configuration error occurred. Contact the systems administrator for further assistance. �Look for database files in DIR.�Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options.�Missing 2nd delimiter in position %d of expression %s�Missing trailing delimiter in position %d of expression %s�NAME�NUMBER�No default configuration�No logins allowed for `%s'�Not enough memory�Notice: �OPTION�Other options�Parsing %s�Print grammar and lexical analyzer traces�Print program version�Program name: %s�Removing option %s %s�Report bugs to %s. �Resuming parsing %s from line %d�Rule %s at %s:%d matched�Run in test mode.�STRING�Scanner test.�Serving interactive shell request for %s by rule %s�Serving request "%s" for %s by rule %s�Set debugging level.�Setting limit %d to %lu�Setting limits for %s�Setting priority to %d�Show at most NUM records.�Show default configuration.�Show entries in chronological order.�Supply user name in test mode.�Too many logins (max %zu) for %s�Transform expression must start with 's' followed by a punctuation character�Transformation map: %s, %s, %s, %u, %u, %s�Transforming argv[%d]�Transforming command line�Transforming program name (%s)�Transforming variable %s=%s�Unknown flag in transform expression: %c�Unknown message reference�Unknown system error�Usage:�Use STRING instead of the default format.�Warning: �You are not permitted to execute this command. Contact the systems administrator for further assistance. �You do not have interactive login access to this machine. Contact the systems administrator for further assistance. �[FILE]�[user [user...]]�acct database is empty�cannot change to dir %s: %s�cannot chroot to %s: %s�cannot create directory %s: %s�cannot enforce gid %lu: %s�cannot enforce uid %lu: %s�cannot open database %s: %s�cannot open database file %s�cannot open file %s: %s�cannot open format file %s�cannot set limits for %s�cannot stat directory %s: %s�cannot stat file %s: %s�cannot stat format file %s�chdir %s�counted %zu/%zu logins for %s�counting logins for %s�debug level set to %d�environment transformation is not yet implemented�error setting limit: %s�error setting priority: %s�error writing stop to database file %s: %s�error writing to database %s: %s�expected ~ as the second argument, but found %s�extra arguments�failed to parse value: %s�failed to write message to stderr: %s�failed to write message to stdout: %s�invalid command line�invalid file descriptor�invalid format: %s�invalid include file name�invalid number (%s)�invalid number: %s�invalid opcode�invalid regexp: %s�invalid statement: missing value�invalid time: %s�invalid uid %lu�invalid user name�key field is not a number�missing ]�missing closing quote in string started near `%s'�no argument at index %d in command: %s�no matching rule for "%s", user %s�no such group: %s�no such user: %s�not enough memory�parsing legacy built-in configuration�parsing legacy configuration file %s�rush - restricted user shell.�rushlast - show listing of last Rush logins.�rushwho - show listing of online Rush users.�seteuid(0) succeeded when it should not�statement cannot be used outside a rule�the --user option is allowed for the superuser only�too few arguments�too many arguments�transformed value: %s�unknown keyword: %s�unknown limit: %s�unknown regexp flag: %s�unknown statement: %s�user %s, uid %lu�value field is not a number�wordsplit(%s) failed: %s�Project-Id-Version: rush-2.2 Report-Msgid-Bugs-To: bug-rush@gnu.org PO-Revision-Date: 2022-01-10 22:01+0800 Last-Translator: Tianze Wang <zwpwjwtz@126.com> Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com> Language: zh_CN 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.2.1 Plural-Forms: nplurals=1; plural=0; � GPLv3+ 许å¯è¯ï¼šGNU GPL 第三版或更高版本<http://gnu.org/licenses/gpl.html> 本软件是自由软件,你å¯ä»¥å¯¹å…¶è‡ªç”±ä¿®æ”¹å’Œå†åˆ†å‘。 本软件在法律å…è®¸èŒƒå›´å†…ä¸æä¾›ä»»ä½•æ‹…ä¿ã€‚ �%s 䏿˜¯ç›®å½•�%s 䏿˜¯æ™®é€šæ–‡ä»¶�%s:TCPMUX 未å“应�%s:TCPMUX 返回 %s�%s:无效选项 -- “%c†�%s:应当为数字�%s:选项“%s%sâ€ä¸æŽ¥å—傿•° �%s:选项“%s%sâ€æœ‰äºŒä¹‰æ€§ �%s:选项“%s%s有二义性;它å¯èƒ½æ˜¯ï¼š�%s:选项“%s%sâ€éœ€è¦ä¸€ä¸ªå‚æ•° �%s:选项“%câ€éœ€è¦ä¸€ä¸ªå‚æ•° �%s:å­è¿›ç¨‹é€€å‡ºï¼Œçжæ€ç  %d�%s:å­è¿›ç¨‹ç»ˆæ­¢�%s:å­è¿›ç¨‹æ”¶åˆ°ä¿¡å· %d 终止�%s: 无法识别选项“%s%s†�%s:%d:%s:无法对“%sâ€æ‰§è¡Œ stat 命令:%s�%s:%d:%s:无法执行 %s:%s�%s:%d:%s:无法创建å­è¿›ç¨‹ï¼š%s�©�å°è¯•执行命令时出现系统错误。 请è”系系统管ç†å‘˜ä»¥èŽ·å–æ›´å¤šå¸®åŠ©ã€‚ �添加或移除é…置安全检验。�检验�命令�无法打开数æ®åº“ %s:%s�Chroot 至目录 %s�命令行:�目录�调试:�åˆ é™¤å‚æ•° %d-%d�ç¦æ­¢åˆ é™¤ argv[0]�䏿˜¾ç¤ºæ ‡é¢˜è¡Œã€‚�在测试模å¼ä¸­è½¬å‚¨æœ€ç»ˆçš„命令请求。�环境å˜é‡ï¼š�错误消æ¯ï¼š%s�å‘é€è¯Šæ–­ä¿¡æ¯è‡³æè¿°ç¬¦ %d 失败:%s�错误:�执行命令。�执行 %s,%s�æœ€ç»ˆå‚æ•°ï¼š�最终环境å˜é‡ï¼š�è§£æž %s 完æˆ�å¼ºåˆ¶ä½¿ç”¨äº¤äº’å¼ shell。�从进程 %lu 创建å­è¿›ç¨‹�GID:%lu�显示简短的用法信æ¯�显示此帮助列表�主目录:%s�%s:%d 处å‘生内部错误:无法修改åªè¯»çš„目标�%s:%d 处å‘生内部错误:环境å˜é‡ç±»åž‹ %d 未知�%s:%d 处å‘生内部错误:节点类型 %d 未知�%s:%d 处å‘生内部错误:目标类型 %d 未知�%s:%d 处å‘生内部错误:节点类型 %d 未知�%s:%d 处å‘生内部错误:æ“作符 %d 未知�%s:%d 处å‘生内部错误:æ“作 %d 未知�忽略ä¸å­˜åœ¨çš„åŒ…å«æ–‡ä»¶ %s�ä¿¡æ¯ï¼š�转æ¢è¡¨è¾¾å¼æ— æ•ˆï¼š%s�转æ¢è¡¨è¾¾å¼ä¸­çš„æ›¿æ¢æ–¹å¼æ— æ•ˆï¼šåŽå‘引用超出范围�关键字�GPLv3+ 许å¯è¯ï¼šGNU GPL 第三版或更高版本<http://gnu.org/licenses/gpl.html> 本软件是自由软件,你å¯ä»¥å¯¹å…¶è‡ªç”±ä¿®æ”¹å’Œå†åˆ†å‘。 本软件在法律å…è®¸èŒƒå›´å†…ä¸æä¾›ä»»ä½•æ‹…ä¿ã€‚ �本地é…置出错。 请è”系系统管ç†å‘˜ä»¥èŽ·å–æ›´å¤šå¸®åŠ©ã€‚ �在指定目录中查找数æ®åº“文件。�用于长选项的必选(或å¯é€‰ï¼‰é€‰é¡¹ï¼Œå¯¹äºŽçŸ­é€‰é¡¹ä¹Ÿæ˜¯å¿…选(或å¯é€‰ï¼‰çš„。�åœ¨è¡¨è¾¾å¼ %2$s 的第 %1$d 个ä½ç½®ç¼ºå°‘第二分隔符�åœ¨è¡¨è¾¾å¼ %2$s 的第 %1$d 个ä½ç½®ç¼ºå°‘尾分隔符�åç§°�等级编å·�缺少默认é…ç½®�“%sâ€ä¸å…许登录�内存ä¸è¶³�注æ„:�选项�其他选项�è§£æž %s�æ˜¾ç¤ºè¯­æ³•å’Œè¯æ³•分æžå™¨çš„æ¶ˆæ¯�显示程åºç‰ˆæœ¬�程åºå:%s�移除选项 %s %s�请将软件缺陷å馈给 %s。 �继续从第 %2$d 行åŽè§£æž %1$s�匹é…到 %2$s:%3$d 处的规则 %1$s�以测试模å¼è¿è¡Œã€‚�字符串�扫æè€…测试。�æ ¹æ®è§„则 %2$s å“应 %1$s çš„äº¤äº’å¼ shell 请求�æ ¹æ®è§„则 %3$s å“应 %2$s 的“%1$sâ€è¯·æ±‚�设置调试等级。�设置é™é¢ %d 至 %lu�为 %s 设置é™é¢�设置优先级为 %d�指定最多显示多少æ¡è®°å½•。�显示默认é…置。�ä»¥æ—¶é—´é¡ºåºæ˜¾ç¤ºå„项。�设置测试模å¼ä¸‹çš„用户å。�%2$s 的登录次数过多(最多为 %1$zu)�转æ¢è¡¨è¾¾å¼å¿…须以“sâ€å¼€å¤´ï¼Œä¹‹åŽåº”当为一个标点符å·�è½¬æ¢æ˜ å°„:%s,%s,%s,%u,%u,%s�修改 argv[%d]�转æ¢å‘½ä»¤è¡Œ�修改程åºå(%s)�修改å˜é‡ %s=%s�转æ¢è¡¨è¾¾å¼ä¸­æœ‰æœªçŸ¥æ ‡è¯†ï¼š%c�消æ¯å¼•用未�未知系统错误�用法:�用指定字符串替代默认格å¼ã€‚�警告:�æ‚¨æ— æƒæ‰§è¡Œæ­¤å‘½ä»¤ã€‚ 请è”系系统管ç†å‘˜ä»¥èŽ·å–æ›´å¤šå¸®åŠ©ã€‚ �您无法以交互形å¼ç™»å½•到本机器。 请è”系系统管ç†å‘˜ä»¥èŽ·å–æ›´å¤šå¸®åŠ©ã€‚ �[文件]�[用户 [用户...]]�账户数æ®åº“为空�无法切æ¢è‡³ç›®å½• %s:%s�无法 chroot 至 %s:%s�无法创建目录 %s:%s�无法强制 gid 为 %lu:%s�无法强制 uid 为 %lu:%s�无法打开数æ®åº“ %s:%s�无法打开数æ®åº“ %s�无法打开文件 %s:%s�æ— æ³•æ‰“å¼€æ ¼å¼æ–‡ä»¶ %s�无法设置 %s çš„é™é¢�无法对目录 %s 执行 stat 命令:%s�无法对文件 %s 执行 stat 命令:%s�æ— æ³•å¯¹æ ¼å¼æ–‡ä»¶ %s 执行 stat 命令�chdir %s�统计 %3$s 在 %1$zu/%2$zu 的登录情况�统计 %s 的登录情况�设置调试等级为 %d�修改环境å˜é‡çš„功能尚未实现�é™é¢è®¾ç½®å‡ºé”™ï¼š%s�优先级设置出错:%s�写入 stop 到数æ®åº“ %s 时出错:%s�写入到数æ®åº“ %s 时出错:%s�ç¬¬äºŒä¸ªå‚æ•°åº”当为“~â€ï¼Œä½†å®žé™…为 %s�é¢å¤–çš„å‚æ•°�è§£æžå€¼å¤±è´¥ï¼š%s�å‘ stderr 写入消æ¯å¤±è´¥ï¼š%s�å‘ stdout 写入消æ¯å¤±è´¥ï¼š%s�命令行无效�文件æè¿°ç¬¦æ— æ•ˆ�æ ¼å¼æ— æ•ˆï¼š%s�åŒ…å«æ–‡ä»¶ï¼ˆincludeï¼‰çš„æ–‡ä»¶åæ— æ•ˆ�ç¼–å·æ— æ•ˆï¼ˆ%s)�ç¼–å·æ— æ•ˆï¼š%s�æ“作符无效�æ­£åˆ™è¡¨è¾¾å¼æ— æ•ˆï¼š%s�声明无效:缺少值�时间无效:%s�UID %lu 无效�ç”¨æˆ·åæ— æ•ˆ�键字段应当为数字�缺少“]â€�“%sâ€é™„近的字符串缺少å³å¼•å·�命令中的第 %d 个ä½ç½®å¤„ç¼ºå°‘å‚æ•°ï¼š%s�没有与“%sâ€åŒ¹é…的规则,用户å为 %s�组ä¸å­˜åœ¨ï¼š%s�用户ä¸å­˜åœ¨ï¼š%s�内存ä¸è¶³�è§£æžå†…置的默认é…ç½®�è§£æžé»˜è®¤çš„é…置文件 %s�rush - 有é™è®¿é—®çš„用户 shell。�rushlast - 显示最近的 Rush 登录情况。�rushwho - 显示在线的 Rush 用户列表。�seteuid(0) 调用æˆåŠŸï¼Œä½†è¿™å¹¶ä¸æ˜¯æœŸæœ›çš„结果�无法在规则外使用声明�--user 选项åªèƒ½ç”¨äºŽè¶…级用户�傿•°å¤ªå°‘�傿•°å¤ªå¤š�转æ¢åŽçš„值:%s�关键字未知:%s�é™é¢æœªçŸ¥ï¼š%s�æ­£åˆ™è¡¨è¾¾å¼æ ‡è¯†æœªçŸ¥ï¼š%s�声明未知:%s�用户 %s,UID %lu�值字段应当为数字�å•è¯åˆ†å‰²ï¼ˆ%s)失败:%s���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/po/pt_BR.gmo�������������������������������������������������������������������������������0000644�0001750�0001750�00000040053�14655401314�014463� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Þ•����¯������”��é��� ������°��É���±�����{�����‘�����ª�����Å�����Ü�����ø��,��� �����6��.���V��'���…��(���­��"���Ö�����ù��&��������:�� ���Z�����{�����–��w���š��+��������>�����D�����L�����h�� ���w�����…�����‰�����‘�����ª�����É�� ���å�� ����������5���%�����[�����c�����t�����…�����–�����©�����½�����Ö�����é�����ò����� �� ���!��6���.��.���e��-���”��/���Â��2���ò��/���%��%���U�����{�� ���‚��:���£�����Þ��È���ç��^���°�������s���/��5���£��:���Ù��������������� �����9�����T�����f�����o�� ���v�� ���„��)��������¹�����Ï�����à�����ö�� ��� �����+�����D�����V�� ���]��3���k��&���Ÿ�����Æ�����Û�����ó����� ����� �����:��$���V�����{�� ���š��L���»��*��������3�����I�����c�����‚��(���ž�����Ç�����á�����ö��)���ý�� ���'��i���1��t���›���������������(�����?�����[�����s�����’�����­�����È�����ä���������������4�����M�����j�����‚����������¦�����Ä�����Û��1���ñ�����#�����;��*���V�� �����/���¢�����Ò�����â��%���ü��%���" �����H �����] �����u �����ˆ �����¢ �����¶ �����É �����Ø �� ���ë ����� !�����!�����-!�����?!�� ���Y!��1���c!��&���•!��"���¼!�����ß!�����ñ!�����"��%���"��$���:"��,���_"��,���Œ"��'���¹"��'���á"��3��� #�����=#�����O#�����b#�����v#�����ˆ#����� #�����¶#�����Ç#�����ã#��ç��ü#��å���ä%�����Ê&�����ã&�����ÿ&�����'�����0'�����O'��/���f'��!���–'��1���¸'��(���ê'��*���(��%���>(�����d(��,���€(�� ���­(��-���Î(��1���ü(�����.)��}���1)��A���¯)�����ñ)�����÷)��0���ÿ)�����0*�����I*�����[*�� ���_*�����m*�� ���ˆ*�����©*��+���É*�� ���õ*�����ÿ*��=���+�����R+�����Y+�����j+�����|+�����+�����Ÿ+�����¹+�����Ò+�����ï+��!���ø+�����,�����6,��G���M,��1���•,��/���Ç,��0���÷,��6���(-��@���_-��-��� -�����Î-��+���Ý-��R��� .�����\.��ä���l.��h���Q/��.���º/��y���é/��9���c0��;���0�����Ù0�����Þ0�� ���æ0��!���1�����)1�����?1�����N1�����V1�� ���f1��3���t1�����¨1�����Ã1�����Ø1�����ð1��-���2�����52�����T2�����k2�����q2��>���…2��/���Ä2�����ô2�����3�����13�����K3�� ���h3�����‰3��&���¨3��'���Ï3��1���÷3��Z���)4��/���„4�����´4�����Ë4��#���ê4�����5��9���,5��$���f5�����‹5�����¨5��$���­5�����Ò5��u���Ú5��x���P6�� ���É6�����Ó6��$���è6��3��� 7��+���A7��,���m7��&���š7��&���Á7��0���è7��7���8��)���Q8��0���{8��*���¬8��4���×8��1��� 9��-���>9�����l9�����u9�����•9��&���­9��9���Ô9�����:�����):��?���H:��-���ˆ:��9���¶:�����ð:�����;��*���;��*���H;�����s;�����Ž;�����­;��#���Ã;�����ç;�����þ;�����<�� ���4<��&���U<�����|<�����“<�����¥<�����À<�� ���ß<��?���ê<��-���*=��3���X=�����Œ=�����¢=�����»=��)���Ñ=��.���û=��7���*>��:���b>��(���>��2���Æ>��9���ù>�����3?�����E?�����W?�����v?��.���Ž?�����½?�����Û?��!���ð?�����@�����’���¥����������J���o�������H�������g������� ���€�������K���ƒ�������������a���������“�������&�������\������f�������?�������Q���k�������A���5���S���p������¤���V���]������1������z���˜�������ž������¨�������®���>�������”���:������L���e���Ž���Ÿ������j���'���ˆ�������*�����������¯���3���‚�������=���U����������������������‡���œ���|�������i���š���9���q���s�������[�����������������������–���,������ ���©���¦������� ������/���h���0�������M�������{������������£�������%���r���F���§���„�������c���n���"�������D����������•��� �������4���`�������¢���}���¬���_�������v���O����������Š���T���C���#���B���)���†����������—���6���-���G�����������W���Œ���l�������Z���~������8���<�������������‘������^������­��� ���…���«�������.�������m����������™���$�������P���‹���d���Y�������X���‰���7�������x�������+���w������� ���¡���@������� ���u����������I������!���ª�������;���N���E���(���t���R�������y������b����������›���2���� 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. �%s is not a directory�%s is not a regular file�%s: TCPMUX did not respond�%s: TCPMUX returned %s�%s: invalid option -- '%c' �%s: not a number�%s: option '%s%s' doesn't allow an argument �%s: option '%s%s' is ambiguous �%s: option '%s%s' is ambiguous; possibilities:�%s: option '%s%s' requires an argument �%s: option requires an argument -- '%c' �%s: subprocess exited with code %d�%s: subprocess terminated�%s: subprocess terminated on signal %d�%s: unrecognized option '%s%s' �%s:%d: %s: cannot execute %s: %s�%s:%d: %s: cannot fork: %s�(C)�A system error occurred while attempting to execute command. Contact the systems administrator for further assistance. �Add or remove configuration security check.�CHECK�COMMAND�Cannot open database %s: %s�Chroot dir: %s�Command line:�DIR�Debug: �Deleting arguments %d-%d�Deleting argv[0] is prohibited�Do not display header line.�Dump final request in test mode.�Environment:�Error message: %s�Error sending diagnostic message to descriptor %d: %s�Error: �Execute COMMAND.�Executing %s, %s�Final arguments:�Final environment:�Finished parsing %s�Force interactive shell.�Forked process %lu�GID: %lu�Give a short usage message�Give this help list�Home dir: %s�INTERNAL ERROR at %s:%d: can't modify read-only target�INTERNAL ERROR at %s:%d: invalid envar type %d�INTERNAL ERROR at %s:%d: invalid node type %d�INTERNAL ERROR at %s:%d: invalid target type %d�INTERNAL ERROR at %s:%d: unrecognized node type %d�INTERNAL ERROR at %s:%d: unrecognized opcode %d�Ignoring non-existing include file %s�Info: �Invalid transform expression: %s�Invalid transform replacement: back reference out of range�KEYWORDS�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. �Local configuration error occurred. Contact the systems administrator for further assistance. �Look for database files in DIR.�Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options.�Missing 2nd delimiter in position %d of expression %s�Missing trailing delimiter in position %d of expression %s�NAME�NUMBER�No default configuration�No logins allowed for `%s'�Not enough memory�Notice: �OPTION�Other options�Parsing %s�Print grammar and lexical analyzer traces�Print program version�Program name: %s�Removing option %s %s�Report bugs to %s. �Resuming parsing %s from line %d�Rule %s at %s:%d matched�Run in test mode.�STRING�Scanner test.�Serving interactive shell request for %s by rule %s�Serving request "%s" for %s by rule %s�Set debugging level.�Setting limit %d to %lu�Setting limits for %s�Setting priority to %d�Show at most NUM records.�Show default configuration.�Show entries in chronological order.�Supply user name in test mode.�Too many logins (max %zu) for %s�Transform expression must start with 's' followed by a punctuation character�Transformation map: %s, %s, %s, %u, %u, %s�Transforming argv[%d]�Transforming command line�Transforming program name (%s)�Transforming variable %s=%s�Unknown flag in transform expression: %c�Unknown message reference�Unknown system error�Usage:�Use STRING instead of the default format.�Warning: �You are not permitted to execute this command. Contact the systems administrator for further assistance. �You do not have interactive login access to this machine. Contact the systems administrator for further assistance. �[FILE]�[user [user...]]�acct database is empty�cannot change to dir %s: %s�cannot chroot to %s: %s�cannot create directory %s: %s�cannot enforce gid %lu: %s�cannot enforce uid %lu: %s�cannot open database %s: %s�cannot open database file %s�cannot open file %s: %s�cannot open format file %s�cannot set limits for %s�cannot stat directory %s: %s�cannot stat file %s: %s�cannot stat format file %s�chdir %s�counted %zu/%zu logins for %s�counting logins for %s�debug level set to %d�environment transformation is not yet implemented�error setting limit: %s�error setting priority: %s�error writing stop to database file %s: %s�error writing to database %s: %s�expected ~ as the second argument, but found %s�extra arguments�failed to parse value: %s�failed to write message to stderr: %s�failed to write message to stdout: %s�invalid command line�invalid file descriptor�invalid format: %s�invalid include file name�invalid number (%s)�invalid number: %s�invalid opcode�invalid regexp: %s�invalid statement: missing value�invalid time: %s�invalid uid %lu�invalid user name�key field is not a number�missing ]�missing closing quote in string started near `%s'�no argument at index %d in command: %s�no matching rule for "%s", user %s�no such group: %s�no such user: %s�not enough memory�parsing legacy built-in configuration�parsing legacy configuration file %s�rushlast - show listing of last Rush logins.�rushwho - show listing of online Rush users.�seteuid(0) succeeded when it should not�statement cannot be used outside a rule�the --user option is allowed for the superuser only�too few arguments�too many arguments�unknown keyword: %s�unknown limit: %s�unknown regexp flag: %s�unknown statement: %s�user %s, uid %lu�value field is not a number�wordsplit(%s) failed: %s�Project-Id-Version: rush 2.0 Report-Msgid-Bugs-To: bug-rush@gnu.org PO-Revision-Date: 2019-07-02 16:54-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 Plural-Forms: nplurals=2; plural=(n > 1); X-Generator: Virtaal 1.0.0-beta1 X-Bugs: Report translation errors to the Language-Team address. � Licença GPLv3+: GNU GPL versão 3 ou posterior <http://gnu.org/licenses/gpl.html> Este é um software livre: você é livre para alterá-lo e redistribuí-lo. NÃO Hà QUALQUER GARANTIA, na máxima extensão permitida em lei. �%s não é um diretório�%s não é um arquivo comum�%s: TCPMUX não respondeu�%s: TCPMUX retornou %s�%s: opção inválida -- "%c" �%s: não é um número�%s: a opção "%s%s" não permite um argumento �%s: a opção "%s%s" é ambígua �%s: a opção "%s%s" é ambígua; possibilidades:�%s: a opção "%s%s" exige um argumento �%s: a opção requer um argumento -- "%c" �%s: o subprocesso saiu com código %d�%s: o subprocesso terminado�%s: o subprocesso foi terminado com sinal %d�%s: opção desconhecida "%s%s" �%s:%d: %s: não foi possível executar %s: %s�%s:%d: %s: não foi possível bifurcar (fork): %s�©�Ocorreu um erro de sistema enquanto tentava executar comando. Contate o administrador do seu sistema para mais assistência. �Adiciona ou remove verificação de segurança de configuração.�VERIF�COMANDO�Não foi possível abrir o banco de dados %s: %s�Diretório de chroot: %s�Linha de comando:�DIR�Depuração: �Excluindo argumentos %d-%d�Exclusão de argv[0] é proibida�Não exibe linha de cabeçalho.�Despeja a requisição final em modo teste.�Ambiente:�Mensagem de erro: %s�Erro ao enviar mensagem de diagnóstico para descritor %d: %s�Erro: �Executa COMANDO.�Executando %s, %s�Argumentos finais:�Ambiente final:�Finalizada análise de %s�Força shell interativa.�Bifurcou (fork) processo %lu�GID: %lu�Fornece uma mensagem de uso curta�Fornece essa lista de ajuda�Diretório pessoal: %s�ERRO INTERNO em %s:%d: não é possível modificar algo somente leitura�ERRO INTERNO em %s:%d: tipo de envar inválido %d�ERRO INTERNO em %s:%d: tipo de nó inválido %d�ERRO INTERNO em %s:%d: tipo de alvo inválido %d�ERRO INTERNO em %s:%d: tipo de nó não reconhecido %d�ERRO INTERNO em %s:%d: código de operação não reconhecido %d�Ignorando arquivo incluído não-existente %s�Informação: �Expressão de transformação inválida: %s�Substituição de transformação inválida: referência inversa fora de intervalo�PALAVRAS-CHAVES�Licença GPLv3+: GNU GPL versão 3 ou posterior <http://gnu.org/licenses/gpl.html> Este é um software livre: você é livre para alterá-lo e redistribuí-lo. NÃO Hà QUALQUER GARANTIA, na máxima extensão permitida em lei. �Ocorreu um erro de configuração local. Contate o administrador do seu sistema para mais assistência. �Procura por arquivos de banco de dados em DIR.�Argumentos obrigatórios ou opcionais para opções longas também o são para quaisquer opções curtas correspondentes.�Faltando 2º delimitador na posição %d da expressão %s�Faltando delimitador final na posição %d da expressão %s�NOME�NÚMERO�Nenhum arquivo de configuração�Não é permitido login para "%s"�Memória insuficiente�Observação: �OPÇÃO�Outras opções�Analisando %s�Imprimir traços de gramática e analisador léxico�Mostra versão do programa�Nome do programa: %s�Removendo opção %s %s�Relate erros para %s. �Resumindo análise de %s a partir da linha %d�Regra %s em %s:%d correspondeu�Executa no modo teste.�TEXTO�Teste de varredura.�Servindo requisição de shell interativa para %s por regra %s�Servindo requisição "%s" para %s por regra %s�Define o nível de depuração.�Definindo limite %d para %lu�Definindo limites para %s�Definindo prioridade para %d�Mostra no máximo NUM registros.�Mostra configuração padrão.�Mostra entradas em ordem cronológica.�Fornece nome de usuário no modo teste.�Número excessivo de logins (máximo %zu) para %s�Expressão de transformação deve iniciar com "s" seguido por um caractere de pontuação�Mapa de transformação: %s, %s, %s, %u, %u, %s�Transformando argv[%d]�Transformando linha de comando�Transformando nome do programa (%s)�Transformando variável %s=%s�Opção desconhecida na expressão de transformação: %c�Referência de mensagem desconhecida�Erro desconhecido de sistema�Uso:�Usa TEXTO em vez do formato padrão.�Aviso: �Você não tem permissão para executar esse comando. Contate o administrador do seu sistema para mais assistência. �Você não tem acesso a login interativo nesta máquina. Contate o administrador do seu sistema para mais assistência. �[ARQUIVO]�[user [usuário...]]�banco de dados de contas está vazio�não foi possível alterar para o diretório %s: %s�não foi possível fazer chroot para %s: %s�não foi possível criar o diretório %s: %s�não foi possível aplicar gid %lu: %s�não foi possível aplicar uid %lu: %s�não foi possível abrir o banco de dados %s: %s�não foi possível abrir o arquivo de banco de dados %s�não foi possível abrir o arquivo %s: %s�não foi possível abrir o arquivo de formato %s�não foi possível definir limites para %s�não foi possível obter estado do diretório %s: %s�não foi possível obter estado do arquivo %s: %s�não foi possível obter estado do arquivo %s�chdir %s�contados %zu/%zu logins para %s�contando logins para %s�nível de depuração definido para %d�transformação de ambiente não está implementado ainda�erro ao definir limite: %s�erro ao definir prioridade: %s�erro ao escrever parada para o arquivo de banco de dados %s: %s�erro ao escrever para o banco de dados %s: %s�esperava-se ~ como o segundo argumento, mas encontrada %s�argumentos extra�falha ao analisar valor: %s�falha ao escrever mensagem para stderr: %s�falha ao escrever mensagem para stdout: %s�linha de comando inválida�descritor de arquivo inválido�formato inválido: %s�nome de arquivo incluído inválido�número inválido (%s)�número inválido: %s�código de operação inválido�expressão regular inválida: %s�declaração inválida: faltando valor�horário inválido: %s�uid %lu inválido�nome de usuário inválido�campo chave não é um número�faltando ]�faltando aspas de fechamento na string iniciada próximo a "%s"�nenhum argumento no índice %d no comando: %s�nenhuma regra correspondente para "%s", usuário %s�grupo inexistente: %s�usuário inexistente: %s�memória insuficiente�analisando configuração embutida legada�analisando arquivo de configuração legada %s�rushlast - mostra listagem dos últimos logins ao Rush.�rushwho - mostra listagem de usuários conectados ao Rush.�seteuid(0) funcionou quando não deveria�declaração não pode ser usada fora de uma regra�a opção --user é permitida para o superusuário apenas�poucos argumentos�argumentos demais�palavra-chave desconhecida: %s�limite desconhecido: %s�opção de expressão regular desconhecida: %s�declaração desconhecida: %s�usuário %s, uid %lu�campo de valor não é um número�wordsplit(%s) falhou: %s��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/po/insert-header.sin�����������������������������������������������������������������������0000644�0001750�0001750�00000001240�13456274525�016223� 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 } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/po/es.gmo����������������������������������������������������������������������������������0000644�0001750�0001750�00000040776�14655401314�014100� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Þ•����³������´��ï���L ��������É��� �����Ó�����é���������������4�����P��,���a�����Ž��.���®��'���Ý��(�����"���.�����Q��&���k�����’�����²�� ���Ñ�����ò����� ��w�����+���‰�����µ�����»�����Ã�����ß�� ���î�����ü����������������!�����@�� ���\�� ���}�����Š��5���œ�����Ò�����Ú�����ë�����ü����� ����� �����4�����M�����`�����i�����„�� ���˜��6���¥��.���Ü��-��� ��/���9��2���i��/���œ��2���Ì��%���ÿ�����%�� ���,��:���M�����ˆ��È���‘��^���Z�����¹��s���Ù��5���M��:���ƒ�����¾�����Ã�����Ê�����ã�����þ������������ ��� �� ���.��)���9�����c�����y�����Š����� �� ���´�����Õ�����î�������� �����3�����&���I�����p�����…����������³�����Ê�����ä��$���������%�� ���D��L���e��*���²�����Ý�����ó����� �����,��(���H�����q�����‹����� ��)���§�� ���Ñ��i���Û��t���E�����º�����Á�����Ò�����é���������������<�����W�����r�����Ž�����«�����Ã�����Þ�����÷����������,�����G�����P�����n�����…��1���›�����Í�����å��*���� �� ���+ ��/���L �����| �����Œ ��%���¦ ��%���Ì �����ò �����!�����!�����2!�����L!�����`!�����s!�����‚!�� ���•!�����¶!�����Ç!�����×!�����é!�� ���"��1��� "��&���?"��"���f"�����‰"�����›"�����¬"��%���¾"��$���ä"����� #��,���'#��,���T#��'���#��'���©#��3���Ñ#�����$�����$�����*$�����@$�����T$�����f$�����~$�����”$�����¥$�����Á$��©��Ú$��Õ���„&�����Z'�����q'�����'�����¦'�����¾'�����Ý'��-���ò'��!��� (��0���B(��,���s(��-��� (��)���Î(�����ø(��+���)��%���?)��5���e)��%���›)��*���Á)�����ì)��t���ð)��@���e*�� ���¦*�����´*��)���º*�����ä*�����ú*�����+�� ���+����� +�����?+��!���Z+��,���|+�� ���©+�����³+��?���È+�����,�����,�����,�����1,�����E,��!���U,�����w,�����”,�����ª,��"���³,�����Ö,�����ô,��J��� -��A���V-��1���˜-��5���Ê-��9����.��B���:.��7���}.��:���µ.�����ð.��+���÷.��N���#/�� ���r/��Ô���€/��b���U0��'���¸0�����à0��C���p1��A���´1�����ö1�����ý1��$���2�� ���*2�����K2�����b2�����j2�����r2�����2��6���’2�� ���É2�����ê2�����3�����3��;���83�����t3�����”3�����¯3�����¶3��D���Ï3��4���4��"���I4�� ���l4�����4�����¬4�����Ë4��&���è4��+���5��3���;5��%���o5��]���•5��/���ó5�����#6��#���:6��(���^6�����‡6��;���§6�� ���ã6�����7�����!7��,���&7�� ���S7��_���a7��o���Á7�� ���18�����;8��"���R8��(���u8��!���ž8��&���À8�����ç8�����9��)���9��0���I9��#���z9��*���ž9��'���É9��6���ñ9��3���(:��9���\:�����–:��#���Ÿ:�����Ã:��+���Þ:��7��� ;��"���B;��$���e;��?���Š;��*���Ê;��=���õ;�����3<��"���J<��6���m<��8���¤<�����Ý<�����ú<�����=��$���0=�����U=�����l=�����‚=�� ��� =��&���Á=�����è=�����>�����>��"���0>�����S>��A���[>��/���>��2���Í>������?�����?�����0?��0���G?��6���x?��#���¯?��=���Ó?��>���@��,���P@��3���}@��;���±@�����í@�����ÿ@�����A�����,A�����JA��-���bA�����A�����­A��#���ÁA�����åA�����5�����������_���£���¨���„������±������=���g���}������������� ���8�������]���m���Q���’�������”���S������Ÿ���!���K���C�������•���'���"�����������E���ƒ���0���›�������<������®���O������Š���r��������������6��� ������������������l������¡����������¦���\������¢���^�������1������k�����������²���u���{�������n���A�������‘��� ���v�������%���™�����������+�����������x���;���W�������&��� �������P�����������������†���w���o���ˆ���������������…���B���‰������|���©���s������������� �������—���$���ª�������U������i�������Z���Ž���ž���z������,���J���‹���������������`���¥���¬�������4���y���­���˜������������������d���(������ ����������7�������Y������N���*���X���.���“������[���H�������œ�����������R���T����������t���–���@����������>���q�������~���#���2���:������/���V���������������¤���D���9���F�������-���€������ ���M�������«�������3�������‡���)���L������a���š���G���I���‚���f���p���³���j���e���b�������Œ������°���?���§���c�������¯���h���� 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. �%s is not a directory�%s is not a regular file�%s: TCPMUX did not respond�%s: TCPMUX returned %s�%s: invalid option -- '%c' �%s: not a number�%s: option '%s%s' doesn't allow an argument �%s: option '%s%s' is ambiguous �%s: option '%s%s' is ambiguous; possibilities:�%s: option '%s%s' requires an argument �%s: option requires an argument -- '%c' �%s: subprocess exited with code %d�%s: subprocess terminated�%s: subprocess terminated on signal %d�%s: unrecognized option '%s%s' �%s:%d: %s: can't stat '%s': %s�%s:%d: %s: cannot execute %s: %s�%s:%d: %s: cannot fork: %s�(C)�A system error occurred while attempting to execute command. Contact the systems administrator for further assistance. �Add or remove configuration security check.�CHECK�COMMAND�Cannot open database %s: %s�Chroot dir: %s�Command line:�DIR�Debug: �Deleting arguments %d-%d�Deleting argv[0] is prohibited�Do not display header line.�Dump final request in test mode.�Environment:�Error message: %s�Error sending diagnostic message to descriptor %d: %s�Error: �Execute COMMAND.�Executing %s, %s�Final arguments:�Final environment:�Finished parsing %s�Force interactive shell.�Forked process %lu�GID: %lu�Give a short usage message�Give this help list�Home dir: %s�INTERNAL ERROR at %s:%d: can't modify read-only target�INTERNAL ERROR at %s:%d: invalid envar type %d�INTERNAL ERROR at %s:%d: invalid node type %d�INTERNAL ERROR at %s:%d: invalid target type %d�INTERNAL ERROR at %s:%d: unrecognized node type %d�INTERNAL ERROR at %s:%d: unrecognized opcode %d�INTERNAL ERROR at %s:%d: unrecognized operation %d�Ignoring non-existing include file %s�Info: �Invalid transform expression: %s�Invalid transform replacement: back reference out of range�KEYWORDS�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. �Local configuration error occurred. Contact the systems administrator for further assistance. �Look for database files in DIR.�Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options.�Missing 2nd delimiter in position %d of expression %s�Missing trailing delimiter in position %d of expression %s�NAME�NUMBER�No default configuration�No logins allowed for `%s'�Not enough memory�Notice: �OPTION�Other options�Parsing %s�Print grammar and lexical analyzer traces�Print program version�Program name: %s�Removing option %s %s�Report bugs to %s. �Resuming parsing %s from line %d�Rule %s at %s:%d matched�Run in test mode.�STRING�Scanner test.�Serving interactive shell request for %s by rule %s�Serving request "%s" for %s by rule %s�Set debugging level.�Setting limit %d to %lu�Setting limits for %s�Setting priority to %d�Show at most NUM records.�Show default configuration.�Show entries in chronological order.�Supply user name in test mode.�Too many logins (max %zu) for %s�Transform expression must start with 's' followed by a punctuation character�Transformation map: %s, %s, %s, %u, %u, %s�Transforming argv[%d]�Transforming command line�Transforming program name (%s)�Transforming variable %s=%s�Unknown flag in transform expression: %c�Unknown message reference�Unknown system error�Usage:�Use STRING instead of the default format.�Warning: �You are not permitted to execute this command. Contact the systems administrator for further assistance. �You do not have interactive login access to this machine. Contact the systems administrator for further assistance. �[FILE]�[user [user...]]�acct database is empty�cannot change to dir %s: %s�cannot chroot to %s: %s�cannot create directory %s: %s�cannot enforce gid %lu: %s�cannot enforce uid %lu: %s�cannot open database %s: %s�cannot open database file %s�cannot open file %s: %s�cannot open format file %s�cannot set limits for %s�cannot stat directory %s: %s�cannot stat file %s: %s�cannot stat format file %s�chdir %s�counted %zu/%zu logins for %s�counting logins for %s�debug level set to %d�environment transformation is not yet implemented�error setting limit: %s�error setting priority: %s�error writing stop to database file %s: %s�error writing to database %s: %s�expected ~ as the second argument, but found %s�extra arguments�failed to parse value: %s�failed to write message to stderr: %s�failed to write message to stdout: %s�invalid command line�invalid file descriptor�invalid format: %s�invalid include file name�invalid number (%s)�invalid number: %s�invalid opcode�invalid regexp: %s�invalid statement: missing value�invalid time: %s�invalid uid %lu�invalid user name�key field is not a number�missing ]�missing closing quote in string started near `%s'�no argument at index %d in command: %s�no matching rule for "%s", user %s�no such group: %s�no such user: %s�not enough memory�parsing legacy built-in configuration�parsing legacy configuration file %s�rush - restricted user shell.�rushlast - show listing of last Rush logins.�rushwho - show listing of online Rush users.�seteuid(0) succeeded when it should not�statement cannot be used outside a rule�the --user option is allowed for the superuser only�too few arguments�too many arguments�transformed value: %s�unknown keyword: %s�unknown limit: %s�unknown regexp flag: %s�unknown statement: %s�user %s, uid %lu�value field is not a number�wordsplit(%s) failed: %s�Project-Id-Version: GNU rush 2.2 Report-Msgid-Bugs-To: bug-rush@gnu.org PO-Revision-Date: 2024-06-06 13:58-0600 Last-Translator: Cristian Othón Martínez Vera <cfuga@cfuga.mx> 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. Plural-Forms: nplurals=2; plural=(n != 1); � 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. �%s no es un directorio�%s no es un fichero regular�%s: TCPMUX no respondió�%s: TCPMUX devolvió %s�%s: opción inválida -- '%c' �%s: no es un número�%s: la opción '%s%s' no admite un argumento �%s: la opción '%s%s' es ambigua �%s: la opción '%s%s' es ambigua; posibilidades:�%s: la opción '%s%s' requiere un argumento �%s: la opción requiere un argumento -- '%c' �%s: el subproceso terminó con código %d�%s: el subproceso terminó�%s: el subproceso terminó por la señal %d�%s: no se reconoce la opción '%s%s' �%s:%d: %s: no se puede ejecutar 'stat' sobre '%s': %s�%s:%d %s: no se puede ejecutar %s: %s�%s:%d: %s: no se puede ejecutar fork(): %s�(C)�Sucedió un error de sistema al tratar de ejecutar la orden. Contacte al administrador de sistemas para más ayuda. �Agrega o elimina la revisión de la configuración de seguridad.�COMPROBACIÓN�ORDEN�No se puede abrir la base de datos %s: %s�Directorio chroot: %s�Línea de órdenes:�DIR�Depuración: �Se borran los argumentos %d-%d�Se prohíbe borrar argv[0]�No muestra la línea de cabecera.�Vuelca la solicitud final en modo de prueba.�Ambiente:�Mensaje de error: %s�Error al enviar el mensaje de diagnóstico al descriptor %d: %s�Error: �Ejecuta ORDEN.�Se ejecuta %s, %s�Argumentos finales:�Ambiente final:�Terminó la interpretación de %s�Fuerza el shell interactivo.�Proceso bifurcado %lu�GID: %lu�Muestra un mensaje de empleo corto�Muestra este listado de ayuda�Directorio inicial: %s�ERROR INTERNO en %s:%d: no se puede modificar un objetivo de sólo lectura�ERROR INTERNO en %s:%d: tipo de variable de ambiente %d inválido�ERROR INTERNO en %s:%d: tipo de nodo %d inválido�ERROR INTERNO en %s:%d: tipo de objetivo %d inválido�ERROR INTERNO en %s:%d: no se reconoce el tipo de nodo %d�ERROR INTERNO en %s:%d: no se reconoce el código de operación %d�ERROR INTERNO en %s:%d: no se reconoce la operación %d�Se descarta el nombre de fichero incluido %s que no existe�Info: �Expresión de transformación inválida: %s�Reemplazo de transformación inválido: referencia hacia atrás fuera de rango�PALABRASCLAVE�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. �Sucedió un error de configuración local. Contacte al administrador de sistemas para más ayuda. �Busca ficheros de base de datos en DIR.�Los argumentos obligatorios u opcionales para opciones largas son también obligatorios u opcionales para las opciones correspondientes cortas.�Falta el segundo delimitador en la posición %d de la expresión %s�Falta el delimitador final en la posición %d de la expresión %s�NOMBRE�NÚMERO�No hay configuración predeterminada�No se permiten accesos para `%s'�Sin memoria suficiente�Aviso: �OPCIÓN�Otras opciones�Se interpreta %s�Muestra el rastreo del analizador gramático y léxico�Muestra la versión del programa�Nombre del programa: %s�Se descarta la opción %s %s�Reportar defectos a %s. �Continúa la interpretación de %s a partir de la línea %d�Coincidió la regla %s en %s:%d�Ejecuta en modo de prueba.�CADENA�Prueba de decodificador.�Se concede la petición de shell interactivo para %s por la regla %s�Se concede la petición "%s" para %s por la regla %s�Establece el nivel de depuración.�Se establece el límite %d a %lu�Se establecen límites para %s�Se establece la prioridad a %d�Muestra hasta NUM registros.�Muestra la configuración por defecto.�Muestra las entradas en orden cronológico.�Proporciona el nombre de usuario en modo de prueba.�Demasiados accesos (máx %zu) para %s�La expresión de transformación debe iniciar con 's' seguida por un carácter de puntuación�Mapa de transformación: %s, %s, %s, %u, %u, %s�Se transforma argv[%d]�Se transforma la línea de órdenes�Se transforma el nombre de programa (%s)�Se transforma la variable %s=%s�Opción desconocida en la expresión de transformación: %c�referencia a mensaje desconocida�Error de sistema desconocido�Uso:�Usa CADENA en lugar del formato por defecto.�Advertencia: �No tiene permitido ejecutar esta orden. Contacte al administrador de sistemas para más ayuda. �No tiene acceso a sesiones interactivas en este equipo. Contacte al administrador de sistemas para más ayuda. �[FICHERO]�[usuario [usuario...]]�la base de datos acct está vacía�no se puede cambiar al directorio %s: %s�no se puede hacer chroot a %s: %s�no se puede crear el directorio %s: %s�no puede forzar gid %lu: %s�no puede forzar uid %lu: %s�no se puede abrir la base de datos %s: %s�no se puede abrir el fichero de base de datos %s�no se puede abrir el fichero %s: %s�no se puede abrir el fichero de formato %s�no se puede establecer límites para %s�no se puede ejecutar 'stat' sobre el directorio %s: %s�no se puede ejecutar 'stat' sobre el fichero %s: %s�no se puede ejecutar 'stat sobre el fichero de formato %s�chdir %s�se contaron %zu/%zu accesos para %s�se cuentan accesos para %s�se estableció el nivel de depuración a %d�aún no no se implementa la transformación de ambiente�error al establecer el límite: %s�error al establecer la prioridad: %s�error al detener la escritura al fichero de base de datos %s:%s�error al escribir a la base de datos %s:%s�se esperaba ~ como el segundo argumento, pero se encontró %s�argumentos adicionales�falló al interpretar el valor: %s�falló al escribir el mensaje a la salida de error: %s�falló al escribir el mensaje a la salida estándard: %s�línea de órdenes inválida�descriptor de fichero inválido�formato inválido: %s�nombre de fichero incluido inválido�número inválido (%s)�número inválido: %s�código operacional inválido�expresión regular inválida: %s�declaración inválida: falta un valor�fecha/hora inválida: %s�uid inválida: %lu�nombre de usuario inválido�la clave de campo no es un número�falta ]�falta la comilla que cierra en la cadena que inicia cerca de `%s'�sin argumentos en el índice %d en la orden: %s�no hay una regla coincidente para "%s", usuario %s�no existe el grupo: %s�no existe el usuario: %s�sin memoria suficiente�se interpreta la configuración interna heredada�se interpreta el fichero de configuración heredada %s�rush - shell de usuario restringido�rushlast - muestra una lista de los últimos accesos de Rush.�rushwho - muestra una lista de los usuarios de Rush en línea.�seteuid(0) correcto cuando no debería serlo�la declaración no se puede usar fuera de una regla�la opción --user solamente se permite para el superusuario�faltan argumentos�demasiados argumentos�valor transformado: %s�palabra clave desconocida: %s�límite desconocido: %s�opción de expresión regular desconocida: %s�declaración desconocida: %s�usuario %s, uid %lu�el valor del campo no es un número�falló wordsplit(%s): %s���rush-2.4/po/pl.po�����������������������������������������������������������������������������������0000644�0001750�0001750�00000053157�14655401313�013734� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Polish translations for GNU Rush # This file is distributed under the same license as the Rush package. # Copyright (C) 2019 Free Software Foundation, Inc. # Sergey Poznyakoff <gray@gnu.org>, 2009-2019 # #: rwopt.opt:23 msgid "" msgstr "" "Project-Id-Version: rush 2.0\n" "Report-Msgid-Bugs-To: bug-rush@gnu.org\n" "POT-Creation-Date: 2024-08-09 14:51+0300\n" "PO-Revision-Date: 2019-07-01 10:14+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" #: src/config.c:163 #, c-format msgid "Finished parsing %s" msgstr "Koniec parsowania %s" #: src/config.c:169 #, c-format msgid "Resuming parsing %s from line %d" msgstr "Ponowienie parsowania %s w linii %d" #: src/config.c:262 #, c-format msgid "invalid number: %s" msgstr "niepoprawna liczba: %s" #: src/config.c:275 msgid "invalid opcode" msgstr "niepoprawny kod operacji" #: src/config.c:297 #, c-format msgid "invalid regexp: %s" msgstr "niepoprawne wyrażenie regularne: %s" #: src/config.c:336 #, c-format msgid "unknown regexp flag: %s" msgstr "nieznana flaga wyrażenia regularnego: %s" #: src/config.c:353 msgid "too few arguments" msgstr "za maÅ‚o argumentów" #: src/config.c:357 src/rush.c:1381 msgid "too many arguments" msgstr "za wiele argumentów" #: src/config.c:428 #, c-format msgid "no such user: %s" msgstr "nie ma takiego użytkownika: %s" #: src/config.c:453 src/config.c:1106 #, c-format msgid "no such group: %s" msgstr "nie ma takiej grupy: %s" #: src/config.c:543 #, c-format msgid "unknown limit: %s" msgstr "nieznany limit: %s" #: src/config.c:560 #, c-format msgid "expected ~ as the second argument, but found %s" msgstr "oczekiwano ~ jako drugiego argumentu, ale znaleziono %s" #: src/config.c:718 #, c-format msgid "debug level set to %d" msgstr "ustanowiono poziom odpluskwiania %d" #: src/config.c:730 #, c-format msgid "invalid time: %s" msgstr "niepoprawny czas: %s" #: src/config.c:786 msgid "invalid file descriptor" msgstr "niepoprawny deskryptor pliku" #: src/config.c:800 msgid "Unknown message reference" msgstr "OdwoÅ‚anie do nieznanego komunikatu" #: src/config.c:893 msgid "invalid include file name" msgstr "niepoprawna nazwa pliku dołączanego" #: src/config.c:900 #, c-format msgid "Ignoring non-existing include file %s" msgstr "Ignorowanie nieistniejÄ…cego pliku dołączanego %s" #: src/config.c:906 #, c-format msgid "cannot stat file %s: %s" msgstr "stat(%s) nie powiodÅ‚a siÄ™: %s" #: src/config.c:934 rushopt.opt:90 #, c-format msgid "unknown keyword: %s" msgstr "nieznane sÅ‚owo kluczowe: %s" #: src/config.c:982 msgid "key field is not a number" msgstr "pole klucza nie jest liczbÄ…" #: src/config.c:988 msgid "value field is not a number" msgstr "pole wartoÅ›ci nie jest liczbÄ…" #: src/config.c:1033 src/config.c:1038 src/rush.c:262 #, c-format msgid "%s: not a number" msgstr "%s: nie jest liczbÄ…" #: src/config.c:1211 src/config.c:1340 #, c-format msgid "Parsing %s" msgstr "Parsowanie %s" #: src/config.c:1245 #, c-format msgid "unknown statement: %s" msgstr "nieznana instrukcja: %s" #: src/config.c:1280 msgid "missing ]" msgstr "brak ]" #: src/config.c:1289 msgid "invalid statement: missing value" msgstr "niepoprawna instrukcja: brakuje wartoÅ›ci" #: src/config.c:1310 #, c-format msgid "failed to parse value: %s" msgstr "nie można rozparsować wartoÅ›ci: %s" #: src/config.c:1328 msgid "statement cannot be used outside a rule" msgstr "instrukcji nie można używać poza regułą" #: src/config.c:1366 msgid "parsing legacy built-in configuration" msgstr "parsowanie konfiguracji wbudowanej w przestarzaÅ‚ym formacie" #: src/config.c:1368 #, c-format msgid "parsing legacy configuration file %s" msgstr "parsowanie pliku konfiguracji %s w przestarzaÅ‚ym formacie" #: src/limits.c:53 #, c-format msgid "Setting limit %d to %lu" msgstr "Ustawienie limitu %d w %lu" #: src/limits.c:58 #, c-format msgid "error setting limit: %s" msgstr "błąd podczas ustawienia limitu: %s" #: src/limits.c:68 #, c-format msgid "Setting priority to %d" msgstr "Ustawienie priorytetu %d" #: src/limits.c:70 #, c-format msgid "error setting priority: %s" msgstr "błąd podczas ustawienia priorytetu: %s" #: src/limits.c:86 src/limits.c:87 #, c-format msgid "No logins allowed for `%s'" msgstr "Logowanie nie jest dozwolone dla `%s'" #: src/limits.c:91 #, c-format msgid "counting logins for %s" msgstr "obliczenie iloÅ›ci logowaÅ„ użytkownika `%s'" #: src/limits.c:97 msgid "acct database is empty" msgstr "baza danych `acct' jest pusta" #: src/limits.c:101 #, c-format msgid "Cannot open database %s: %s" msgstr "Nie można otworzyć bazy danych %s: %s" #: src/limits.c:119 #, c-format msgid "counted %zu/%zu logins for %s" msgstr "ilość logowaÅ„ %3$s: %1$zu/%2$zu" #: src/limits.c:126 src/limits.c:128 #, c-format msgid "Too many logins (max %zu) for %s" msgstr "%2$s: za wiele logowaÅ„ (maks. %1$zu)" #: src/limits.c:143 #, c-format msgid "Setting limits for %s" msgstr "Ustawienie limitów dla użytkownika %s" #: src/rush.c:43 msgid "" "You are not permitted to execute this command.\n" "Contact the systems administrator for further assistance.\n" msgstr "" "Nie masz uprawnieÅ„ na wykonanie tego polecenia.\n" "W celu uzyskania pomocy skontaktuj siÄ™ z administratorem systemu.\n" #: src/rush.c:47 msgid "" "You do not have interactive login access to this machine.\n" "Contact the systems administrator for further assistance.\n" msgstr "" "Nie masz dostÄ™pu interaktywnego do tej maszyny.\n" "W celu uzyskania pomocy skontaktuj siÄ™ z administratorem systemu.\n" #: src/rush.c:51 msgid "" "Local configuration error occurred.\n" "Contact the systems administrator for further assistance.\n" msgstr "" "WystÄ…piÅ‚ błąd konfiguracji lokalnej.\n" "W celu uzyskania pomocy skontaktuj siÄ™ z administratorem systemu.\n" #: src/rush.c:55 msgid "" "A system error occurred while attempting to execute command.\n" "Contact the systems administrator for further assistance.\n" msgstr "" "Podczas wykonania polecenia wystÄ…piÅ‚ błąd systemowy.\n" "W celu uzyskania pomocy skontaktuj siÄ™ z administratorem systemu.\n" #: src/rush.c:156 #, c-format msgid "failed to write message to stderr: %s" msgstr "zapis komunikatu do standardowego wyjÅ›cia błędów nie powiódÅ‚ siÄ™: %s" #: src/rush.c:160 #, c-format msgid "failed to write message to stdout: %s" msgstr "zapis komunikatu do standardowego wyjÅ›cia nie powiódÅ‚ siÄ™: %s" #: src/rush.c:172 #, c-format msgid "Debug: " msgstr "Debug: " #: src/rush.c:176 #, c-format msgid "Info: " msgstr "Info: " #: src/rush.c:180 #, c-format msgid "Notice: " msgstr "Ostrzeżenie" #: src/rush.c:184 #, c-format msgid "Warning: " msgstr "Uwaga: " #: src/rush.c:191 #, c-format msgid "Error: " msgstr "Błąd: " #: src/rush.c:248 msgid "Not enough memory" msgstr "Brak pamiÄ™ci" #: src/rush.c:279 src/rush.c:324 #, c-format msgid "INTERNAL ERROR at %s:%d: unrecognized opcode %d" msgstr "BÅÄ„D WEWNĘTRZNY w %s:%d: nieobsÅ‚ugiwany kod operacji %d" #: src/rush.c:408 #, fuzzy, c-format msgid "%s:%d: %s: can't stat '%s': %s" msgstr "%s:%d: %s: nie można wykonać %s: %s" #: src/rush.c:469 #, fuzzy, c-format msgid "INTERNAL ERROR at %s:%d: unrecognized operation %d" msgstr "BÅÄ„D WEWNĘTRZNY w %s:%d: nieobsÅ‚ugiwany kod operacji %d" #: src/rush.c:509 #, c-format msgid "INTERNAL ERROR at %s:%d: unrecognized node type %d" msgstr "BÅÄ„D WEWNĘTRZNY w %s:%d: nierozpoznany typ wÄ™zÅ‚a %d" #: src/rush.c:718 #, c-format msgid "INTERNAL ERROR at %s:%d: invalid envar type %d" msgstr "BÅÄ„D WEWNĘTRZNY w %s:%d: niepoprawny typ zmiennej Å›rodowiska %d" #: src/rush.c:723 msgid "Final environment:" msgstr "Otoczenie koÅ„cowe:" #: src/rush.c:737 #, c-format msgid "wordsplit(%s) failed: %s" msgstr "wordsplit(%s) nie powiodÅ‚a siÄ™: %s" #: src/rush.c:763 #, c-format msgid "no argument at index %d in command: %s" msgstr "brak argumentu w pozycji %d w poleceniu: %s" #: src/rush.c:906 #, c-format msgid "Removing option %s %s" msgstr "UsuniÄ™cie opcji %s %s" #: src/rush.c:918 msgid "Transforming command line" msgstr "PrzeksztaÅ‚canie linii polecenia" #: src/rush.c:925 #, c-format msgid "Transforming program name (%s)" msgstr "Modyfikowanie nazwy programu (%s)" #: src/rush.c:943 #, c-format msgid "Transforming argv[%d]" msgstr "Modyfikowanie argv[%d]" #: src/rush.c:950 #, c-format msgid "Transforming variable %s=%s" msgstr "PrzeksztaÅ‚canie zmiennej %s=%s" #: src/rush.c:957 src/rush.c:1043 msgid "environment transformation is not yet implemented" msgstr "przeksztaÅ‚cenie Å›rodowiska jeszcze nie jest zaimplementowane" #: src/rush.c:961 #, c-format msgid "INTERNAL ERROR at %s:%d: can't modify read-only target" msgstr "BÅÄ„D WEWNĘTRZNY w %s:%d: nie można modyfikować celu tylko do odczytu" #: src/rush.c:980 #, c-format msgid "Transformation map: %s, %s, %s, %u, %u, %s" msgstr "Mapa przeksztaÅ‚cania: %s, %s, %s, %u, %u, %s" #: src/rush.c:994 #, c-format msgid "INTERNAL ERROR at %s:%d: invalid node type %d" msgstr "BÅÄ„D WEWNĘTRZNY w %s:%d: niepoprawny typ wÄ™zÅ‚a %d" #: src/rush.c:1001 #, fuzzy, c-format msgid "transformed value: %s" msgstr "PrzeksztaÅ‚canie zmiennej %s=%s" #: src/rush.c:1022 #, c-format msgid "Deleting arguments %d-%d" msgstr "UsuniÄ™cie argumentów %d-%d" #: src/rush.c:1025 msgid "Deleting argv[0] is prohibited" msgstr "UsuniÄ™cie argv[0] jest zabronione" #: src/rush.c:1047 #, c-format msgid "INTERNAL ERROR at %s:%d: invalid target type %d" msgstr "BÅÄ„D WEWNĘTRZNY w %s:%d: niepoprawny typ celu %d" #: src/rush.c:1065 #, c-format msgid "Program name: %s" msgstr "Nazwa programu: %s" #: src/rush.c:1066 msgid "Final arguments:" msgstr "Argumenty koÅ„cowe:" #: src/rush.c:1084 #, c-format msgid "error writing to database %s: %s" msgstr "błąd zapisu do bazy danych %s: %s" #: src/rush.c:1093 #, c-format msgid "error writing stop to database file %s: %s" msgstr "błąd podczas zapisu terminatora do bazy danych %s: %s" #: src/rush.c:1114 #, c-format msgid "%s:%d: %s: cannot fork: %s" msgstr "%s:%d: %s: fork nie powiodÅ‚a siÄ™: %s" #: src/rush.c:1124 #, c-format msgid "Forked process %lu" msgstr "Stworzono proces %lu" #: src/rush.c:1128 #, c-format msgid "%s: subprocess exited with code %d" msgstr "%s: proces zakoÅ„czyÅ‚ siÄ™ z kodem %d" #: src/rush.c:1131 #, c-format msgid "%s: subprocess terminated on signal %d" msgstr "%s: proces zakoÅ„czyÅ‚ siÄ™ sygnaÅ‚em %d" #: src/rush.c:1134 #, c-format msgid "%s: subprocess terminated" msgstr "%s: proces zakoÅ„czyÅ‚ siÄ™" #: src/rush.c:1223 #, c-format msgid "cannot enforce gid %lu: %s" msgstr "nie można ustawić GID %lu: %s" #: src/rush.c:1228 #, c-format msgid "cannot enforce uid %lu: %s" msgstr "nie można ustawić UID %lu: %s" #: src/rush.c:1233 msgid "seteuid(0) succeeded when it should not" msgstr "wywoÅ‚anie seteuid(0) powiodÅ‚o siÄ™ chociaż nie powinno byÅ‚o" #: src/rush.c:1239 #, c-format msgid "Rule %s at %s:%d matched" msgstr "Pasuje reguÅ‚a %s w %s:%d" #: src/rush.c:1253 #, c-format msgid "Error message: %s" msgstr "Komunikat błędu: %s" #: src/rush.c:1256 #, c-format msgid "Error sending diagnostic message to descriptor %d: %s" msgstr "Błąd podczas zapisu komunikatu do deskryptora %d: %s" #: src/rush.c:1262 #, c-format msgid "cannot set limits for %s" msgstr "nie można ustawić limitów dla %s" #: src/rush.c:1269 #, c-format msgid "Chroot dir: %s" msgstr "Katalog chroot: %s" #: src/rush.c:1276 #, c-format msgid "Home dir: %s" msgstr "Katalog domowy: %s" #: src/rush.c:1281 #, c-format msgid "GID: %lu" msgstr "GID: %lu" #: src/rush.c:1306 #, c-format msgid "cannot open database %s: %s" msgstr "nie można otworzyć bazy danych %s: %s" #: src/rush.c:1315 #, c-format msgid "cannot chroot to %s: %s" msgstr "nie można zrobić chroot do %s: %s" #: src/rush.c:1322 src/rush.c:1414 #, c-format msgid "invalid uid %lu" msgstr "niepoprawny UID %lu" #: src/rush.c:1327 #, c-format msgid "chdir %s" msgstr "chdir %s" #: src/rush.c:1330 #, c-format msgid "cannot change to dir %s: %s" msgstr "nie można przejść do katalogu %s: %s" #: src/rush.c:1334 #, c-format msgid "Executing %s, %s" msgstr "Uruchomienie %s, %s" #: src/rush.c:1349 #, c-format msgid "%s:%d: %s: cannot execute %s: %s" msgstr "%s:%d: %s: nie można wykonać %s: %s" #: src/rush.c:1392 src/rush.c:1394 msgid "invalid command line" msgstr "niepoprawna linia polecenia" #: src/rush.c:1405 msgid "invalid user name" msgstr "niepoprawna nazwa użytkownika" #: src/rush.c:1416 #, c-format msgid "user %s, uid %lu" msgstr "użytkownik %s, uid %lu" #: src/rush.c:1428 msgid "Command line:" msgstr "Linia polecenia" #: src/rush.c:1431 msgid "Environment:" msgstr "Otoczenie:" #: src/rush.c:1462 #, c-format msgid "Serving interactive shell request for %s by rule %s" msgstr "" "ObsÅ‚ugiwanie żądania interaktywnego dostÄ™pu od użytkownika %s przez regułę %s" #: src/rush.c:1466 #, c-format msgid "Serving request \"%s\" for %s by rule %s" msgstr "ObsÅ‚ugiwanie polecenia \"%s\" od użytkownika %s przez regułę %s" #: src/rush.c:1472 #, c-format msgid "no matching rule for \"%s\", user %s" msgstr "brak reguÅ‚y, pasujÄ…cej do polecenia \"%s\" od użytkownika %s" #: src/rushlast.c:31 src/rushwho.c:30 #, c-format msgid "not enough memory" msgstr "brak pamiÄ™ci" #: src/rushlast.c:78 src/rushwho.c:67 #, c-format msgid "invalid format: %s" msgstr "niepoprawny format: %s" #: src/rushlast.c:88 src/rushwho.c:77 #, c-format msgid "cannot open database file %s" msgstr "nie można otworzyć pliku bazy danych %s" #: src/rushwho.c:61 #, c-format msgid "extra arguments" msgstr "dodatkowe argumenty" #: src/socket.c:61 #, c-format msgid "%s: TCPMUX did not respond" msgstr "%s: TCPMUX nie odpowiedziaÅ‚" #: src/socket.c:65 #, c-format msgid "%s: TCPMUX returned %s" msgstr "%s: TCPMUX odpowiedziaÅ‚ `%s'" #: src/transform.c:155 msgid "" "Transform expression must start with 's' followed by a punctuation character" msgstr "" "Wyrażenie przeksztaÅ‚cenia musi zaczynać siÄ™ od 's' po której wystÄ™puje znak " "interpunkcyjny" #: src/transform.c:166 #, c-format msgid "Missing 2nd delimiter in position %d of expression %s" msgstr "Brak drugiego ogranicznika w pozycji %d instrukcji %s" #: src/transform.c:176 #, c-format msgid "Missing trailing delimiter in position %d of expression %s" msgstr "Brak koÅ„cowego ogranicznika w pozycji %d instrukcji %s" #: src/transform.c:203 #, c-format msgid "Unknown flag in transform expression: %c" msgstr "Nieznana flaga w instrukcji przeksztaÅ‚cenia: %c" #: src/transform.c:220 #, c-format msgid "Invalid transform expression: %s" msgstr "NieprawidÅ‚owe polecenie przeksztaÅ‚cenia: %s" #: src/transform.c:248 msgid "Invalid transform replacement: back reference out of range" msgstr "Niepoprawna zamiana: odwoÅ‚anie zwrotne spoza zakresu odwoÅ‚aÅ„" #: rushopt.opt:27 rlopt.opt:56 msgid "NUMBER" msgstr "LICZBA" #: rushopt.opt:27 msgid "Set debugging level." msgstr "Ustawia poziom odpluskwiania." #: rushopt.opt:35 msgid "Run in test mode." msgstr "Uruchomienie w trybie testowym." #: rushopt.opt:41 msgid "Scanner test." msgstr "Test skanera." #: rushopt.opt:47 msgid "Print grammar and lexical analyzer traces" msgstr "Wydruk przebiegu analizy gramatycznej i leksykalnej" #: rushopt.opt:53 msgid "NAME" msgstr "NAZWA" #: rushopt.opt:53 msgid "Supply user name in test mode." msgstr "Podaje nazwÄ™ użytkownika w trybie testowym." #: rushopt.opt:65 msgid "COMMAND" msgstr "POLECENIE" #: rushopt.opt:65 msgid "Execute COMMAND." msgstr "Emulowanie wykonania polecenia." #: rushopt.opt:71 msgid "Force interactive shell." msgstr "Emulacja powÅ‚oki interaktywnej." #: rushopt.opt:78 msgid "KEYWORDS" msgstr "SÅOWA-KLUCZOWE" #: rushopt.opt:78 msgid "Dump final request in test mode." msgstr "Zrzut żądania koÅ„cowego w trybie testowym." #: rushopt.opt:85 msgid "CHECK" msgstr "TEST" #: rushopt.opt:85 msgid "Add or remove configuration security check." msgstr "Dodaje lub usuwa sprawdzanie bezpieczeÅ„stwa konfiguracji." #: rushopt.opt:93 msgid "Show default configuration." msgstr "WyÅ›wietla konfiguracjÄ™ domyÅ›lnÄ…." #: rushopt.opt:102 rwopt.opt:40 rlopt.opt:82 msgid "Other options" msgstr "Inne opcje" #: rushopt.opt:102 rwopt.opt:40 rlopt.opt:82 msgid "Give this help list" msgstr "WyÅ›wietla ten tekst pomocy." #: rushopt.opt:102 rwopt.opt:40 rlopt.opt:82 msgid "Give a short usage message" msgstr "WyÅ›wietla streszczenie skÅ‚adni użycia." #: rushopt.opt:102 rwopt.opt:40 rlopt.opt:82 msgid "Print program version" msgstr "WyÅ›wietla wersjÄ™ programu." #: rushopt.opt:23 #, fuzzy msgid "rush - restricted user shell." msgstr "rush - powÅ‚oka ograniczona." #: rushopt.opt:25 msgid "[FILE]" msgstr "[PLIK]" #: rushopt.opt:125 rushopt.opt:359 rwopt.opt:123 rwopt.opt:357 rlopt.opt:126 #: rlopt.opt:360 msgid "Usage:" msgstr "Użycie:" #: rushopt.opt:125 rwopt.opt:123 rlopt.opt:126 msgid "OPTION" msgstr "OPCJA" #: rushopt.opt:243 rwopt.opt:241 rlopt.opt:244 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." #: rushopt.opt:247 rwopt.opt:245 rlopt.opt:248 #, c-format msgid "Report bugs to %s.\n" msgstr "Raporty o błędach wysyÅ‚aj do %s.\n" #: rushopt.opt:700 rwopt.opt:698 rlopt.opt:701 msgid "(C)" msgstr "(C)" #: rushopt.opt:718 rwopt.opt:716 rlopt.opt:719 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 wersji 3 lub nowszej <http://gnu.org/licenses/gpl." "html>\n" "To jest wolne oprogramowanie: masz prawo modyfikować i rozpowszechniać go.\n" "Nie ma Å»ADNYCH GWARANCJI, o ile prawo na to zezwala.\n" "\n" #: rushopt.opt:60 msgid "the --user option is allowed for the superuser only" msgstr "tylko superużytkownik może używać opcji --user" #: rushopt.opt:100 #, c-format msgid "No default configuration" msgstr "Brak konfiguracji domyÅ›lnej" #: rwopt.opt:24 rlopt.opt:28 msgid "STRING" msgstr "ÅAŃCUCH" #: rwopt.opt:24 rlopt.opt:28 msgid "Use STRING instead of the default format." msgstr "Ustawia nowy format." #: rwopt.opt:30 rlopt.opt:35 msgid "DIR" msgstr "KATALOG" #: rwopt.opt:30 rlopt.opt:35 msgid "Look for database files in DIR." msgstr "Szuka plików bazy danych w podanym katalogu." #: rwopt.opt:36 rlopt.opt:49 msgid "Do not display header line." msgstr "Wyłącza drukowanie linii nagłówka." #: rwopt.opt:21 msgid "rushwho - show listing of online Rush users." msgstr "rushwho - wyÅ›wietla listÄ™ obecnie zalogowanych użytkowników Rush." #: rlopt.opt:42 msgid "Show entries in chronological order." msgstr "Drukuje wpisy w porzÄ…dku chronologicznym." #: rlopt.opt:56 msgid "Show at most NUM records." msgstr "Drukuje nie wiÄ™cej niż N wpisów." #: rlopt.opt:24 msgid "rushlast - show listing of last Rush logins." msgstr "rushlast - wyÅ›wietla listÄ™ ostatnich logowaÅ„ przez Rush." #: rlopt.opt:26 msgid "[user [user...]]" msgstr "[użytkownik [użytkownik...]]" #: rlopt.opt:63 #, c-format msgid "invalid number (%s)" msgstr "niepoprawna liczba (%s)" #: lib/readfmt.c:40 #, c-format msgid "cannot stat format file %s" msgstr "stat pliku formatu nie powiodÅ‚a siÄ™: %s" #: lib/readfmt.c:42 #, c-format msgid "%s is not a regular file" msgstr "%s nie jest plikiem regularnym" #: lib/readfmt.c:46 #, c-format msgid "cannot open format file %s" msgstr "nie mogÄ™ otworzyć plik formatu %s" #: lib/rushdb.c:79 #, c-format msgid "cannot create directory %s: %s" msgstr "nie można stworzyć katalogu %s: %s" #: lib/rushdb.c:84 #, c-format msgid "cannot stat directory %s: %s" msgstr "stat katalogu %s nie powiódÅ‚ siÄ™: %s" #: lib/rushdb.c:89 #, c-format msgid "%s is not a directory" msgstr "%s nie jest katalogiem" #: lib/rushdb.c:100 lib/rushdb.c:114 #, c-format msgid "cannot open file %s: %s" msgstr "nie można otworzyć pliku %s: %s" #: lib/rushdb.c:586 #, c-format msgid "missing closing quote in string started near `%s'" msgstr "brak cudzysÅ‚owu zamykajÄ…cego w Å‚aÅ„cuchu rozpoczÄ™tym przy `%s'" #: lib/version.c:28 msgid "" "\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" msgstr "" "\n" "Licencja GPLv3+: GNU GPL wersji 3 lub nowszej <http://gnu.org/licenses/gpl." "html>\n" "To jest wolne oprogramowanie: masz prawo modyfikować i rozpowszechniać go.\n" "Nie ma Å»ADNYCH GWARANCJI, o ile prawo na to zezwala.\n" "\n" #: gnu/error.c:194 msgid "Unknown system error" msgstr "Nieznany błąd systemowy" #: gnu/getopt.c:278 #, c-format msgid "%s: option '%s%s' is ambiguous\n" msgstr "%s: opcja '%s%s' jest niejednoznaczna\n" #: gnu/getopt.c:284 #, c-format msgid "%s: option '%s%s' is ambiguous; possibilities:" msgstr "%s: opcja '%s%s' jest niejednoznaczna; możliwe zakoÅ„czenia:" #: gnu/getopt.c:319 #, c-format msgid "%s: unrecognized option '%s%s'\n" msgstr "%s: nieznana opcja '%s%s'\n" #: gnu/getopt.c:345 #, c-format msgid "%s: option '%s%s' doesn't allow an argument\n" msgstr "%s: opcja '%s%s' nie może mieć argumentów\n" #: gnu/getopt.c:360 #, c-format msgid "%s: option '%s%s' requires an argument\n" msgstr "%s: opcja '%s%s' musi mieć argument\n" #: gnu/getopt.c:621 #, c-format msgid "%s: invalid option -- '%c'\n" msgstr "%s: błędna opcja -- '%c'\n" #: gnu/getopt.c:636 gnu/getopt.c:682 #, c-format msgid "%s: option requires an argument -- '%c'\n" msgstr "%s: opcja musi mieć argument -- '%c'\n" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/po/gl.po�����������������������������������������������������������������������������������0000644�0001750�0001750�00000053372�14655401313�013722� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Galician translation of GNU rush. # This file is distributed under the same license as the rush package. # Copyright (C) 2013 Free Software Foundation, Inc. # Copyright (C) 2013 Leandro Regueiro. # # Leandro Regueiro <leandro.regueiro@gmail.com>, 2013. # # Proxecto Trasno - Adaptación do software libre á lingua galega: Se desexas # colaborar connosco, podes atopar máis información en <http://www.trasno.net> # #: rwopt.opt:23 msgid "" msgstr "" "Project-Id-Version: GNU rush 1.7\n" "Report-Msgid-Bugs-To: bug-rush@gnu.org\n" "POT-Creation-Date: 2024-08-09 14:51+0300\n" "PO-Revision-Date: 2013-02-02 16:55+0200\n" "Last-Translator: Leandro Regueiro <leandro.regueiro@gmail.com>\n" "Language-Team: Galician <proxecto@trasno.net>\n" "Language: gl\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" #: src/config.c:163 #, c-format msgid "Finished parsing %s" msgstr "Finalizou a análise de %s" #: src/config.c:169 #, c-format msgid "Resuming parsing %s from line %d" msgstr "Continuando a análise de %s desde a liña %d" #: src/config.c:262 #, fuzzy, c-format msgid "invalid number: %s" msgstr "número non válido (%s)" #: src/config.c:275 #, fuzzy msgid "invalid opcode" msgstr "liña de ordes incorrecta" #: src/config.c:297 #, fuzzy, c-format msgid "invalid regexp: %s" msgstr "%s:%d: expresión regular non válida: %s" #: src/config.c:336 #, fuzzy, c-format msgid "unknown regexp flag: %s" msgstr "palabra clave descoñecida: %s" #: src/config.c:353 #, fuzzy msgid "too few arguments" msgstr "%s:%d: moi poucos argumentos" #: src/config.c:357 src/rush.c:1381 #, fuzzy msgid "too many arguments" msgstr "%s:%d: demasiados argumentos" #: src/config.c:428 #, fuzzy, c-format msgid "no such user: %s" msgstr "%s:%d: non existe tal usuario: %s" #: src/config.c:453 src/config.c:1106 #, fuzzy, c-format msgid "no such group: %s" msgstr "%s:%d: non existe tal grupo: %s" #: src/config.c:543 #, fuzzy, c-format msgid "unknown limit: %s" msgstr "%s:%d: límite descoñecido: %s" #: src/config.c:560 #, fuzzy, c-format msgid "expected ~ as the second argument, but found %s" msgstr "%s:%d: agardábase un valor booleano, pero atopouse «%s»" #: src/config.c:718 #, c-format msgid "debug level set to %d" msgstr "" #: src/config.c:730 #, fuzzy, c-format msgid "invalid time: %s" msgstr "%s:%d: tempo non válido: %s" #: src/config.c:786 #, fuzzy msgid "invalid file descriptor" msgstr "%s:%d: descritor de ficheiro non válido" #: src/config.c:800 #, fuzzy msgid "Unknown message reference" msgstr "Referencia de mensaxe descoñecida: %s\n" #: src/config.c:893 #, fuzzy msgid "invalid include file name" msgstr "nome de usuario incorrecto" #: src/config.c:900 #, c-format msgid "Ignoring non-existing include file %s" msgstr "Ignorando o ficheiro include inexistente %s" #: src/config.c:906 #, c-format msgid "cannot stat file %s: %s" msgstr "non é posíbel obter información do ficheiro %s: %s" #: src/config.c:934 rushopt.opt:90 #, c-format msgid "unknown keyword: %s" msgstr "palabra clave descoñecida: %s" #: src/config.c:982 #, fuzzy msgid "key field is not a number" msgstr "%s:%d: o campo de clave non é un número" #: src/config.c:988 #, fuzzy msgid "value field is not a number" msgstr "%s:%d: o campo de clave non é un número" #: src/config.c:1033 src/config.c:1038 src/rush.c:262 #, fuzzy, c-format msgid "%s: not a number" msgstr "%s:%d: %s: non é un número" #: src/config.c:1211 src/config.c:1340 #, c-format msgid "Parsing %s" msgstr "Analizando %s" #: src/config.c:1245 #, fuzzy, c-format msgid "unknown statement: %s" msgstr "%s:%d: nome de servidor descoñecido %s" #: src/config.c:1280 msgid "missing ]" msgstr "" #: src/config.c:1289 msgid "invalid statement: missing value" msgstr "" #: src/config.c:1310 #, fuzzy, c-format msgid "failed to parse value: %s" msgstr "%s:%d: produciuse un erro ao analizar o valor: %s" #: src/config.c:1328 msgid "statement cannot be used outside a rule" msgstr "" #: src/config.c:1366 #, fuzzy msgid "parsing legacy built-in configuration" msgstr "Non hai configuración predeterminada" #: src/config.c:1368 #, fuzzy, c-format msgid "parsing legacy configuration file %s" msgstr "producíronse erros ao analizar o ficheiro de configuración" #: src/limits.c:53 #, c-format msgid "Setting limit %d to %lu" msgstr "" #: src/limits.c:58 #, c-format msgid "error setting limit: %s" msgstr "produciuse un erro ao definir o límite: %s" #: src/limits.c:68 #, c-format msgid "Setting priority to %d" msgstr "Definindo a prioridade como %d" #: src/limits.c:70 #, c-format msgid "error setting priority: %s" msgstr "produciuse un erro ao definir a prioridade: %s" #: src/limits.c:86 src/limits.c:87 #, c-format msgid "No logins allowed for `%s'" msgstr "" #: src/limits.c:91 #, c-format msgid "counting logins for %s" msgstr "" #: src/limits.c:97 msgid "acct database is empty" msgstr "" #: src/limits.c:101 #, c-format msgid "Cannot open database %s: %s" msgstr "Non foi posíbel abrir a base de datos %s: %s" #: src/limits.c:119 #, c-format msgid "counted %zu/%zu logins for %s" msgstr "" #: src/limits.c:126 src/limits.c:128 #, c-format msgid "Too many logins (max %zu) for %s" msgstr "" #: src/limits.c:143 #, c-format msgid "Setting limits for %s" msgstr "Definindo os límites para %s" #: src/rush.c:43 msgid "" "You are not permitted to execute this command.\n" "Contact the systems administrator for further assistance.\n" msgstr "" "Non se lle permite executar esta orde.\n" "Contacte co administrador do sistema para que lle axude.\n" #: src/rush.c:47 msgid "" "You do not have interactive login access to this machine.\n" "Contact the systems administrator for further assistance.\n" msgstr "" #: src/rush.c:51 msgid "" "Local configuration error occurred.\n" "Contact the systems administrator for further assistance.\n" msgstr "" "Produciuse un erro na configuración local.\n" "Contacte co administrador do sistema para que lle axude.\n" #: src/rush.c:55 msgid "" "A system error occurred while attempting to execute command.\n" "Contact the systems administrator for further assistance.\n" msgstr "" "Produciuse un erro no sistema ao intentar executar a orde.\n" "Contacte co administrador do sistema para que lle axude.\n" #: src/rush.c:156 #, c-format msgid "failed to write message to stderr: %s" msgstr "" #: src/rush.c:160 #, c-format msgid "failed to write message to stdout: %s" msgstr "" #: src/rush.c:172 #, c-format msgid "Debug: " msgstr "Depuración: " #: src/rush.c:176 #, c-format msgid "Info: " msgstr "Información: " #: src/rush.c:180 #, c-format msgid "Notice: " msgstr "" #: src/rush.c:184 #, c-format msgid "Warning: " msgstr "Advertencia: " #: src/rush.c:191 #, c-format msgid "Error: " msgstr "Erro: " #: src/rush.c:248 msgid "Not enough memory" msgstr "Non hai suficiente memoria" #: src/rush.c:279 src/rush.c:324 #, c-format msgid "INTERNAL ERROR at %s:%d: unrecognized opcode %d" msgstr "" #: src/rush.c:408 #, fuzzy, c-format msgid "%s:%d: %s: can't stat '%s': %s" msgstr "%s:%d: non se pode obter información de %s: %s" #: src/rush.c:469 #, fuzzy, c-format msgid "INTERNAL ERROR at %s:%d: unrecognized operation %d" msgstr "%s: opción «--%s» non recoñecida\n" #: src/rush.c:509 #, c-format msgid "INTERNAL ERROR at %s:%d: unrecognized node type %d" msgstr "" #: src/rush.c:718 #, c-format msgid "INTERNAL ERROR at %s:%d: invalid envar type %d" msgstr "" #: src/rush.c:723 msgid "Final environment:" msgstr "Ambiente final:" #: src/rush.c:737 #, fuzzy, c-format msgid "wordsplit(%s) failed: %s" msgstr "Produciuse un erro durante a execución de argcv_get(%s): %s" #: src/rush.c:763 #, c-format msgid "no argument at index %d in command: %s" msgstr "" #: src/rush.c:906 #, c-format msgid "Removing option %s %s" msgstr "" #: src/rush.c:918 msgid "Transforming command line" msgstr "Transformando a liña de ordes" #: src/rush.c:925 #, fuzzy, c-format msgid "Transforming program name (%s)" msgstr "Modificando o nome do programa (%s)" #: src/rush.c:943 #, fuzzy, c-format msgid "Transforming argv[%d]" msgstr "Modificando argv[%d]" #: src/rush.c:950 #, fuzzy, c-format msgid "Transforming variable %s=%s" msgstr "Transformando a liña de ordes" #: src/rush.c:957 src/rush.c:1043 msgid "environment transformation is not yet implemented" msgstr "" #: src/rush.c:961 #, c-format msgid "INTERNAL ERROR at %s:%d: can't modify read-only target" msgstr "" #: src/rush.c:980 #, c-format msgid "Transformation map: %s, %s, %s, %u, %u, %s" msgstr "" #: src/rush.c:994 #, c-format msgid "INTERNAL ERROR at %s:%d: invalid node type %d" msgstr "" #: src/rush.c:1001 #, c-format msgid "transformed value: %s" msgstr "" #: src/rush.c:1022 #, c-format msgid "Deleting arguments %d-%d" msgstr "" #: src/rush.c:1025 msgid "Deleting argv[0] is prohibited" msgstr "" #: src/rush.c:1047 #, c-format msgid "INTERNAL ERROR at %s:%d: invalid target type %d" msgstr "" #: src/rush.c:1065 #, c-format msgid "Program name: %s" msgstr "Nome do programa: %s" #: src/rush.c:1066 msgid "Final arguments:" msgstr "Argumentos finais:" #: src/rush.c:1084 #, c-format msgid "error writing to database %s: %s" msgstr "produciuse un erro ao escribir na base de datos %s: %s" #: src/rush.c:1093 #, c-format msgid "error writing stop to database file %s: %s" msgstr "" #: src/rush.c:1114 #, c-format msgid "%s:%d: %s: cannot fork: %s" msgstr "" #: src/rush.c:1124 #, c-format msgid "Forked process %lu" msgstr "" #: src/rush.c:1128 #, c-format msgid "%s: subprocess exited with code %d" msgstr "" #: src/rush.c:1131 #, c-format msgid "%s: subprocess terminated on signal %d" msgstr "" #: src/rush.c:1134 #, c-format msgid "%s: subprocess terminated" msgstr "" #: src/rush.c:1223 #, c-format msgid "cannot enforce gid %lu: %s" msgstr "" #: src/rush.c:1228 #, c-format msgid "cannot enforce uid %lu: %s" msgstr "" #: src/rush.c:1233 msgid "seteuid(0) succeeded when it should not" msgstr "" #: src/rush.c:1239 #, c-format msgid "Rule %s at %s:%d matched" msgstr "" #: src/rush.c:1253 #, c-format msgid "Error message: %s" msgstr "Mensaxe de erro: %s" #: src/rush.c:1256 #, c-format msgid "Error sending diagnostic message to descriptor %d: %s" msgstr "" "Produciuse un erro ao enviar mensaxe de diagnóstico ao descritor %d: %s" #: src/rush.c:1262 #, c-format msgid "cannot set limits for %s" msgstr "non é posíbel definir os límites para %s" #: src/rush.c:1269 #, c-format msgid "Chroot dir: %s" msgstr "" #: src/rush.c:1276 #, c-format msgid "Home dir: %s" msgstr "" #: src/rush.c:1281 #, c-format msgid "GID: %lu" msgstr "GID: %lu" #: src/rush.c:1306 #, c-format msgid "cannot open database %s: %s" msgstr "non foi posíbel abrir a base de datos %s: %s" #: src/rush.c:1315 #, c-format msgid "cannot chroot to %s: %s" msgstr "" #: src/rush.c:1322 src/rush.c:1414 #, c-format msgid "invalid uid %lu" msgstr "uid incorrecto %lu" #: src/rush.c:1327 #, c-format msgid "chdir %s" msgstr "" #: src/rush.c:1330 #, c-format msgid "cannot change to dir %s: %s" msgstr "" #: src/rush.c:1334 #, c-format msgid "Executing %s, %s" msgstr "Executando %s, %s" #: src/rush.c:1349 #, c-format msgid "%s:%d: %s: cannot execute %s: %s" msgstr "" #: src/rush.c:1392 src/rush.c:1394 msgid "invalid command line" msgstr "liña de ordes incorrecta" #: src/rush.c:1405 msgid "invalid user name" msgstr "nome de usuario incorrecto" #: src/rush.c:1416 #, c-format msgid "user %s, uid %lu" msgstr "usuario %s, uid %lu" #: src/rush.c:1428 msgid "Command line:" msgstr "Liña de ordes:" #: src/rush.c:1431 msgid "Environment:" msgstr "Ambiente:" #: src/rush.c:1462 #, c-format msgid "Serving interactive shell request for %s by rule %s" msgstr "" #: src/rush.c:1466 #, c-format msgid "Serving request \"%s\" for %s by rule %s" msgstr "" #: src/rush.c:1472 #, c-format msgid "no matching rule for \"%s\", user %s" msgstr "" #: src/rushlast.c:31 src/rushwho.c:30 #, c-format msgid "not enough memory" msgstr "non hai memoria suficiente" #: src/rushlast.c:78 src/rushwho.c:67 #, c-format msgid "invalid format: %s" msgstr "formato incorrecto: %s" #: src/rushlast.c:88 src/rushwho.c:77 #, c-format msgid "cannot open database file %s" msgstr "non foi posíbel abrir o ficheiro da base de datos %s" #: src/rushwho.c:61 #, c-format msgid "extra arguments" msgstr "argumentos adicionais" #: src/socket.c:61 #, c-format msgid "%s: TCPMUX did not respond" msgstr "" #: src/socket.c:65 #, c-format msgid "%s: TCPMUX returned %s" msgstr "" #: src/transform.c:155 msgid "" "Transform expression must start with 's' followed by a punctuation character" msgstr "" #: src/transform.c:166 #, c-format msgid "Missing 2nd delimiter in position %d of expression %s" msgstr "" #: src/transform.c:176 #, c-format msgid "Missing trailing delimiter in position %d of expression %s" msgstr "" #: src/transform.c:203 #, c-format msgid "Unknown flag in transform expression: %c" msgstr "" #: src/transform.c:220 #, c-format msgid "Invalid transform expression: %s" msgstr "" #: src/transform.c:248 msgid "Invalid transform replacement: back reference out of range" msgstr "" #: rushopt.opt:27 rlopt.opt:56 msgid "NUMBER" msgstr "NÚMERO" #: rushopt.opt:27 msgid "Set debugging level." msgstr "Definir o nivel de depuración." #: rushopt.opt:35 msgid "Run in test mode." msgstr "Executar en modo de probas." #: rushopt.opt:41 msgid "Scanner test." msgstr "" #: rushopt.opt:47 msgid "Print grammar and lexical analyzer traces" msgstr "" #: rushopt.opt:53 msgid "NAME" msgstr "NOME" #: rushopt.opt:53 msgid "Supply user name in test mode." msgstr "Fornecer o nome de usuario no modo de probas." #: rushopt.opt:65 msgid "COMMAND" msgstr "ORDE" #: rushopt.opt:65 msgid "Execute COMMAND." msgstr "Executar ORDE." #: rushopt.opt:71 msgid "Force interactive shell." msgstr "" #: rushopt.opt:78 msgid "KEYWORDS" msgstr "" #: rushopt.opt:78 #, fuzzy msgid "Dump final request in test mode." msgstr "Executar en modo de probas." #: rushopt.opt:85 msgid "CHECK" msgstr "" #: rushopt.opt:85 msgid "Add or remove configuration security check." msgstr "" #: rushopt.opt:93 msgid "Show default configuration." msgstr "Mostrar a configuración predeterminada." #: rushopt.opt:102 rwopt.opt:40 rlopt.opt:82 msgid "Other options" msgstr "Outras opcións" #: rushopt.opt:102 rwopt.opt:40 rlopt.opt:82 msgid "Give this help list" msgstr "Devolver esta lista de axuda" #: rushopt.opt:102 rwopt.opt:40 rlopt.opt:82 msgid "Give a short usage message" msgstr "Devolver unha mensaxe curta sobre o uso" #: rushopt.opt:102 rwopt.opt:40 rlopt.opt:82 msgid "Print program version" msgstr "Mostrar a versión do programa" #: rushopt.opt:23 msgid "rush - restricted user shell." msgstr "" #: rushopt.opt:25 msgid "[FILE]" msgstr "[FICHEIRO]" #: rushopt.opt:125 rushopt.opt:359 rwopt.opt:123 rwopt.opt:357 rlopt.opt:126 #: rlopt.opt:360 msgid "Usage:" msgstr "Modo de uso:" #: rushopt.opt:125 rwopt.opt:123 rlopt.opt:126 msgid "OPTION" msgstr "OPCIÓN" #: rushopt.opt:243 rwopt.opt:241 rlopt.opt:244 msgid "" "Mandatory or optional arguments to long options are also mandatory or " "optional for any corresponding short options." msgstr "" #: rushopt.opt:247 rwopt.opt:245 rlopt.opt:248 #, c-format msgid "Report bugs to %s.\n" msgstr "Envíe os informes de fallo a %s.\n" #: rushopt.opt:700 rwopt.opt:698 rlopt.opt:701 msgid "(C)" msgstr "©" #: rushopt.opt:718 rwopt.opt:716 rlopt.opt:719 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 "" "Licenza GPL3v+: GNU GPL versión3 ou posterior <http://gnu.org/licenses/gpl." "html>\n" "Isto é software libre: pode modificalo e redistribuílo.\n" "Non hai NINGUNHA GARANTÃA, ata onde o permita a lei.\n" "\n" #: rushopt.opt:60 msgid "the --user option is allowed for the superuser only" msgstr "a opción --user só se lle permite usar ao superusuario" #: rushopt.opt:100 #, c-format msgid "No default configuration" msgstr "Non hai configuración predeterminada" #: rwopt.opt:24 rlopt.opt:28 msgid "STRING" msgstr "CADEA" #: rwopt.opt:24 rlopt.opt:28 msgid "Use STRING instead of the default format." msgstr "Usar CADEA en vez do formato predefinido." #: rwopt.opt:30 rlopt.opt:35 msgid "DIR" msgstr "DIR" #: rwopt.opt:30 rlopt.opt:35 msgid "Look for database files in DIR." msgstr "Buscar ficheiros de base de datos en DIR." #: rwopt.opt:36 rlopt.opt:49 msgid "Do not display header line." msgstr "Non mostrar a liña de cabeceira." #: rwopt.opt:21 msgid "rushwho - show listing of online Rush users." msgstr "" #: rlopt.opt:42 msgid "Show entries in chronological order." msgstr "Mostrar as entradas en orde cronolóxica." #: rlopt.opt:56 msgid "Show at most NUM records." msgstr "Mostrar como moito NÚM rexistros." #: rlopt.opt:24 msgid "rushlast - show listing of last Rush logins." msgstr "" #: rlopt.opt:26 msgid "[user [user...]]" msgstr "" #: rlopt.opt:63 #, c-format msgid "invalid number (%s)" msgstr "número non válido (%s)" #: lib/readfmt.c:40 #, c-format msgid "cannot stat format file %s" msgstr "non foi posíbel obter información do ficheiro de formato %s" #: lib/readfmt.c:42 #, c-format msgid "%s is not a regular file" msgstr "%s non é un ficheiro normal" #: lib/readfmt.c:46 #, c-format msgid "cannot open format file %s" msgstr "non foi posíbel abrir o ficheiro de formato %s" #: lib/rushdb.c:79 #, c-format msgid "cannot create directory %s: %s" msgstr "non é posíbel crear o directorio %s: %s" #: lib/rushdb.c:84 #, c-format msgid "cannot stat directory %s: %s" msgstr "non é posíbel obter información do directorio %s: %s" #: lib/rushdb.c:89 #, c-format msgid "%s is not a directory" msgstr "%s non é un directorio" #: lib/rushdb.c:100 lib/rushdb.c:114 #, c-format msgid "cannot open file %s: %s" msgstr "non é posíbel abrir o ficheiro %s: %s" #: lib/rushdb.c:586 #, c-format msgid "missing closing quote in string started near `%s'" msgstr "" #: lib/version.c:28 msgid "" "\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" msgstr "" "\n" "Licenza GPL3v+: GNU GPL versión3 ou posterior <http://gnu.org/licenses/gpl." "html>\n" "Isto é software libre: pode modificalo e redistribuílo.\n" "Non hai NINGUNHA GARANTÃA, ata onde o permita a lei.\n" "\n" #: gnu/error.c:194 msgid "Unknown system error" msgstr "Erro de sistema descoñecido" #: gnu/getopt.c:278 #, fuzzy, c-format msgid "%s: option '%s%s' is ambiguous\n" msgstr "%s: a opción «%s» é ambigua\n" #: gnu/getopt.c:284 #, fuzzy, c-format msgid "%s: option '%s%s' is ambiguous; possibilities:" msgstr "%s: a opción «%s» é ambigua\n" #: gnu/getopt.c:319 #, fuzzy, c-format msgid "%s: unrecognized option '%s%s'\n" msgstr "%s: opción «%c%s» non recoñecida\n" #: gnu/getopt.c:345 #, fuzzy, c-format msgid "%s: option '%s%s' doesn't allow an argument\n" msgstr "%s: a opción «%c%s» non permite ningún argumento\n" #: gnu/getopt.c:360 #, fuzzy, c-format msgid "%s: option '%s%s' requires an argument\n" msgstr "%s: a opción «--%s» require un argumento\n" #: gnu/getopt.c:621 #, c-format msgid "%s: invalid option -- '%c'\n" msgstr "%s: opción incorrecta -- «%c»\n" #: gnu/getopt.c:636 gnu/getopt.c:682 #, c-format msgid "%s: option requires an argument -- '%c'\n" msgstr "%s: a opción require un argumento -- «%c»\n" #, c-format #~ msgid "Ignoring non-existing file %s" #~ msgstr "Ignorando o ficheiro inexistente %s" #, c-format #~ msgid "%s: file is not safe" #~ msgstr "%s: o ficheiro non é seguro" #, c-format #~ msgid "error reading file %s: %s" #~ msgstr "produciuse un erro ao ler o ficheiro %s: %s" #, c-format #~ msgid "read 0 bytes from file %s" #~ msgstr "léronse 0 bytes do ficheiro %s" #~ msgid "not an absolute directory name" #~ msgstr "non é un nome de directorio absoluto" #, c-format #~ msgid "%s:%d: %s is not a directory" #~ msgstr "%s:%d: %s non é un directorio" #, c-format #~ msgid "%s:%d: invalid number: %s" #~ msgstr "%s:%d: número non válido: %s" #, c-format #~ msgid "%s:%d: invalid home directory" #~ msgstr "%s:%d: directorio persoal non válido" #, c-format #~ msgid "%s:%d: Unknown message reference" #~ msgstr "%s:%d: referencia de mensaxe descoñecida" #, c-format #~ msgid "%s:%d: malformed URL" #~ msgstr "%s:%d: URL malformado" #, fuzzy, c-format #~ msgid "%s:%d: port is meaningless for UNIX sockets" #~ msgstr "%s:%d: o porto non ten sentido nos sockets de UNIX" #, c-format #~ msgid "%s:%d: bad port number" #~ msgstr "%s:%d: número de porto erróneo" #, c-format #~ msgid "%s:%d: unknown service name" #~ msgstr "%s:%d: nome de servizo descoñecido" #, c-format #~ msgid "%s:%d: cannot stat file %s: %s" #~ msgstr "%s:%d: non é posíbel obter información do ficheiro %s: %s" #, c-format #~ msgid "%s:%d: unknown keyword: %s" #~ msgstr "%s:%d: palabra clave descoñecida: %s" #~ msgid "Falling back to the default configuration" #~ msgstr "Volvendo á configuración predeterminada" #, c-format #~ msgid "argcv_string failed: %s" #~ msgstr "Produciuse un erro durante a execución de argcv_string: %s" #, c-format #~ msgid "Transform: \"%s\" -> \"%s\"" #~ msgstr "Transformar: «%s» -> «%s»" #, c-format #~ msgid "Command line: %s" #~ msgstr "Liña de ordes: %s" #~ msgid "Setting command line" #~ msgstr "Definindo a liña de ordes" #, c-format #~ msgid "%s: option '--%s' doesn't allow an argument\n" #~ msgstr "%s: a opción «--%s» non permite ningún argumento\n" #, c-format #~ msgid "%s: option '-W %s' is ambiguous\n" #~ msgstr "%s: a opción «-W %s» é ambigua\n" #, c-format #~ msgid "%s: option '-W %s' doesn't allow an argument\n" #~ msgstr "%s: a opción «-W %s» non permite ningún argumento\n" #, c-format #~ msgid "%s: option '-W %s' requires an argument\n" #~ msgstr "%s: a opción «-W %s» require un argumento\n" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/po/de.gmo����������������������������������������������������������������������������������0000644�0001750�0001750�00000041604�14655401314�014050� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Þ•����³������´��ï���L ��������É��� �����Ó�����é���������������4�����P��,���a�����Ž��.���®��'���Ý��(�����"���.�����Q��&���k�����’�����²�� ���Ñ�����ò����� ��w�����+���‰�����µ�����»�����Ã�����ß�� ���î�����ü����������������!�����@�� ���\�� ���}�����Š��5���œ�����Ò�����Ú�����ë�����ü����� ����� �����4�����M�����`�����i�����„�� ���˜��6���¥��.���Ü��-��� ��/���9��2���i��/���œ��2���Ì��%���ÿ�����%�� ���,��:���M�����ˆ��È���‘��^���Z�����¹��s���Ù��5���M��:���ƒ�����¾�����Ã�����Ê�����ã�����þ������������ ��� �� ���.��)���9�����c�����y�����Š����� �� ���´�����Õ�����î�������� �����3�����&���I�����p�����…����������³�����Ê�����ä��$���������%�� ���D��L���e��*���²�����Ý�����ó����� �����,��(���H�����q�����‹����� ��)���§�� ���Ñ��i���Û��t���E�����º�����Á�����Ò�����é���������������<�����W�����r�����Ž�����«�����Ã�����Þ�����÷����������,�����G�����P�����n�����…��1���›�����Í�����å��*���� �� ���+ ��/���L �����| �����Œ ��%���¦ ��%���Ì �����ò �����!�����!�����2!�����L!�����`!�����s!�����‚!�� ���•!�����¶!�����Ç!�����×!�����é!�� ���"��1��� "��&���?"��"���f"�����‰"�����›"�����¬"��%���¾"��$���ä"����� #��,���'#��,���T#��'���#��'���©#��3���Ñ#�����$�����$�����*$�����@$�����T$�����f$�����~$�����”$�����¥$�����Á$��ä��Ú$��Í���¿&�����'�����¥'�����Â'�����Þ'�� ���ø'�����(��.���((��,���W(��=���„(��/���Â(��0���ò(��(���#)�����L)��(���e)�����Ž)��=���®)��/���ì)��;���*�����X*�����\*��F���í*�����4+�����:+��,���A+�����n+�� ���…+�� ���“+�����Ÿ+�� ���§+��&���È+�����ï+��'��� ,�� ���1,�����;,��A���M,�����,�����˜,�����«,�����Ã,�����Ú,�����ð,��!��� -�����.-�����M-��!���]-�����-�����”-��O���©-��>���ù-��1���8.��0���j.��5���›.��3���Ñ.��5���/��2���;/�����n/��#���u/��^���™/�����ø/��Ø��� 0��~���ã0��,���b1��‡���1��>���2��C���V2�����š2�����Ÿ2�����¤2��%���À2�����æ2�� ���ÿ2����� 3�����3�����!3��?���43�����t3�����3�����ž3��t���¹3��2���.4��(���a4�����Š4�� ���£4�� ���°4��D���¾4��9���5�����=5��"���\5��#���5��(���£5��%���Ì5�����ò5��-���6��%���@6��'���f6��P���Ž6��,���ß6����� 7�����&7�� ���D7�����e7��/���…7�����µ7�����Ñ7�����ê7��4���ò7�� ���'8�����18��Ž���±8�����@9�����H9��!���b9��0���„9��7���µ9��/���í9��.���:��/���L:��,���|:��-���©:��*���×:��*���;��1���-;��:���_;��4���š;��6���Ï;�����<��$���<��#���A<�����e<��0���€<��&���±<��%���Ø<��F���þ<��-���E=��7���s=�����«=��%���Â=��H���è=��B���1>�����t>�����Œ>�����¨>��"���¿>�����â>�����÷>����� ?��#���?�� ���B?�����c?�����w?�����’?�����«?�����Ê?��K���Ò?��'���@��-���F@�����t@�����Œ@�����¦@��2���¿@��;���ò@��*���.A��<���YA��:���–A��-���ÑA��<���ÿA��8���<B�����uB�����‰B�����œB�����³B�����ÒB��/���ìB�����C�����5C�����JC�� ���cC�����5�����������_���£���¨���„������±������=���g���}������������� ���8�������]���m���Q���’�������”���S������Ÿ���!���K���C�������•���'���"�����������E���ƒ���0���›�������<������®���O������Š���r��������������6��� ������������������l������¡����������¦���\������¢���^�������1������k�����������²���u���{�������n���A�������‘��� ���v�������%���™�����������+�����������x���;���W�������&��� �������P�����������������†���w���o���ˆ���������������…���B���‰������|���©���s������������� �������—���$���ª�������U������i�������Z���Ž���ž���z������,���J���‹���������������`���¥���¬�������4���y���­���˜������������������d���(������ ����������7�������Y������N���*���X���.���“������[���H�������œ�����������R���T����������t���–���@����������>���q�������~���#���2���:������/���V���������������¤���D���9���F�������-���€������ ���M�������«�������3�������‡���)���L������a���š���G���I���‚���f���p���³���j���e���b�������Œ������°���?���§���c�������¯���h���� 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. �%s is not a directory�%s is not a regular file�%s: TCPMUX did not respond�%s: TCPMUX returned %s�%s: invalid option -- '%c' �%s: not a number�%s: option '%s%s' doesn't allow an argument �%s: option '%s%s' is ambiguous �%s: option '%s%s' is ambiguous; possibilities:�%s: option '%s%s' requires an argument �%s: option requires an argument -- '%c' �%s: subprocess exited with code %d�%s: subprocess terminated�%s: subprocess terminated on signal %d�%s: unrecognized option '%s%s' �%s:%d: %s: can't stat '%s': %s�%s:%d: %s: cannot execute %s: %s�%s:%d: %s: cannot fork: %s�(C)�A system error occurred while attempting to execute command. Contact the systems administrator for further assistance. �Add or remove configuration security check.�CHECK�COMMAND�Cannot open database %s: %s�Chroot dir: %s�Command line:�DIR�Debug: �Deleting arguments %d-%d�Deleting argv[0] is prohibited�Do not display header line.�Dump final request in test mode.�Environment:�Error message: %s�Error sending diagnostic message to descriptor %d: %s�Error: �Execute COMMAND.�Executing %s, %s�Final arguments:�Final environment:�Finished parsing %s�Force interactive shell.�Forked process %lu�GID: %lu�Give a short usage message�Give this help list�Home dir: %s�INTERNAL ERROR at %s:%d: can't modify read-only target�INTERNAL ERROR at %s:%d: invalid envar type %d�INTERNAL ERROR at %s:%d: invalid node type %d�INTERNAL ERROR at %s:%d: invalid target type %d�INTERNAL ERROR at %s:%d: unrecognized node type %d�INTERNAL ERROR at %s:%d: unrecognized opcode %d�INTERNAL ERROR at %s:%d: unrecognized operation %d�Ignoring non-existing include file %s�Info: �Invalid transform expression: %s�Invalid transform replacement: back reference out of range�KEYWORDS�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. �Local configuration error occurred. Contact the systems administrator for further assistance. �Look for database files in DIR.�Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options.�Missing 2nd delimiter in position %d of expression %s�Missing trailing delimiter in position %d of expression %s�NAME�NUMBER�No default configuration�No logins allowed for `%s'�Not enough memory�Notice: �OPTION�Other options�Parsing %s�Print grammar and lexical analyzer traces�Print program version�Program name: %s�Removing option %s %s�Report bugs to %s. �Resuming parsing %s from line %d�Rule %s at %s:%d matched�Run in test mode.�STRING�Scanner test.�Serving interactive shell request for %s by rule %s�Serving request "%s" for %s by rule %s�Set debugging level.�Setting limit %d to %lu�Setting limits for %s�Setting priority to %d�Show at most NUM records.�Show default configuration.�Show entries in chronological order.�Supply user name in test mode.�Too many logins (max %zu) for %s�Transform expression must start with 's' followed by a punctuation character�Transformation map: %s, %s, %s, %u, %u, %s�Transforming argv[%d]�Transforming command line�Transforming program name (%s)�Transforming variable %s=%s�Unknown flag in transform expression: %c�Unknown message reference�Unknown system error�Usage:�Use STRING instead of the default format.�Warning: �You are not permitted to execute this command. Contact the systems administrator for further assistance. �You do not have interactive login access to this machine. Contact the systems administrator for further assistance. �[FILE]�[user [user...]]�acct database is empty�cannot change to dir %s: %s�cannot chroot to %s: %s�cannot create directory %s: %s�cannot enforce gid %lu: %s�cannot enforce uid %lu: %s�cannot open database %s: %s�cannot open database file %s�cannot open file %s: %s�cannot open format file %s�cannot set limits for %s�cannot stat directory %s: %s�cannot stat file %s: %s�cannot stat format file %s�chdir %s�counted %zu/%zu logins for %s�counting logins for %s�debug level set to %d�environment transformation is not yet implemented�error setting limit: %s�error setting priority: %s�error writing stop to database file %s: %s�error writing to database %s: %s�expected ~ as the second argument, but found %s�extra arguments�failed to parse value: %s�failed to write message to stderr: %s�failed to write message to stdout: %s�invalid command line�invalid file descriptor�invalid format: %s�invalid include file name�invalid number (%s)�invalid number: %s�invalid opcode�invalid regexp: %s�invalid statement: missing value�invalid time: %s�invalid uid %lu�invalid user name�key field is not a number�missing ]�missing closing quote in string started near `%s'�no argument at index %d in command: %s�no matching rule for "%s", user %s�no such group: %s�no such user: %s�not enough memory�parsing legacy built-in configuration�parsing legacy configuration file %s�rush - restricted user shell.�rushlast - show listing of last Rush logins.�rushwho - show listing of online Rush users.�seteuid(0) succeeded when it should not�statement cannot be used outside a rule�the --user option is allowed for the superuser only�too few arguments�too many arguments�transformed value: %s�unknown keyword: %s�unknown limit: %s�unknown regexp flag: %s�unknown statement: %s�user %s, uid %lu�value field is not a number�wordsplit(%s) failed: %s�Project-Id-Version: GNU rush 2.2 Report-Msgid-Bugs-To: bug-rush@gnu.org PO-Revision-Date: 2022-01-02 18:29+0100 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. X-Generator: Lokalize 21.12.0 Plural-Forms: nplurals=2; plural=(n != 1) � Lizenz GPLv3+: GNU GPL Version 3 oder neuer <http://gnu.org/licenses/gpl.html> Dies ist freie Software: Sie können sie ändern und weitergeben. Es gibt keinerlei Garantien, soweit gesetzlich zulässig. �%s ist kein Verzeichnis�%s ist keine reguläre Datei�%s: TCPMUX antwortete nicht�%s: TCPMUX gab %s zurück�%s: ungültige Option -- »%c« �%s: Keine Zahl�%s: Die Option »%s%s« erlaubt kein Argument �%s: Die Option »%s%s« ist nicht eindeutig �%s: Die Option »%s%s« ist nicht eindeutig; möglich wären:�%s: Die Option »%s%s« benötigt ein Argument �%s: Die Option benötigt ein Argument -- »%c« �%s: Unterprozess abgebrochen mit Code %d�%s: Unterprozess beendet�%s: Unterprozess beendet durch Signal %d�%s: Unbekannte Option »%s%s« �%s:%d: %s: Aufruf von »stat« für »%s« nicht möglich: %s�%s:%d: %s: %s kann nicht ausgeführt werden: %s�%s:%d: %s: Erzeugen eines Unterprozesses nicht möglich: %s�(C)�Beim Versuch, einen Befehl auszuführen, ist ein Systemfehler aufgetreten. Kontaktieren Sie den Systemadministrator für weitere Informationen. �Sicherheitsüberprüfung der Konfiguration hinzufügen oder entfernen.�CHECK�BEFEHL�Datenbank %s kann nicht geöffnet werden: %s�Chroot-Verzeichnis: %s�Befehlszeile:�VERZEICHNIS�Debug: �Argumente %d-%d werden gelöscht�Löschen von argv[0] ist nicht erlaubt�Keine Kopfzeile anzeigen.�Finale Anfrage im Testmodus ausführen.�Umgebung:�Fehlermeldung: %s�Fehler beim Senden der Diagnosemeldungen an den Deskriptor %d: %s�Fehler: �Führt BEFEHL aus.�%s wird ausgeführt, %s�Endgültige Argumente:�Endgültige Umgebung:�Einlesen von »%s« beendet�Interaktive Shell wird erzwungen.�Unterprozess %lu wurde erzeugt�Gruppen-ID: %lu�Kurzen Bedienungshinweis ausgeben�Diese Hilfe ausgeben�Home-Verzeichnis: %s�INTERNER FEHLER in %s:%d: schreibgeschütztes Ziel kann nicht verändert werden�INTERNER FEHLER in %s:%d: Ungültiger Umgebungsvariablentyp %d�INTERNER FEHLER in %s:%d: Ungültiger Node-Typ %d�INTERNER FEHLER in %s:%d: Ungültiger Zieltyp %d�INTERNER FEHLER in %s:%d: Nicht erkannter Node-Typ %d�INTERNER FEHLER in %s:%d: Nicht erkannter Opcode %d�INTERNER FEHLER in %s:%d: Nicht erkannte Operation %d�Nicht existierende Include-Datei %s wird ignoriert�Info: �Ungültiger Umwandlungsausdruck: %s�Ungültige Ersetzung bei der Umwandlung: Rückreferenz ist außerhalb des zulässigen Bereichs�SCHLÜSSELWÖRTER�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. �In der lokalen Konfiguration ist ein Fehler aufgetreten. Kontaktieren Sie den Systemadministrator für weitere Informationen. �In VERZEICHNIS nach Datenbankdateien suchen.�Erforderliche oder optionale Argumente für lange Optionen sind ebenso erforderlich bzw. optional für die entsprechenden Kurzoptionen.�Fehlendes zweites Trennzeichen in Position %d des Ausdrucks %s�Fehlendes angehängtes Trennzeichen in Position %d des Ausdrucks %s�NAME�ZAHL�Keine Standardkonfiguration�Keine Anmeldungen erlaubt für »%s«�Nicht genügend Speicher�Hinweis: �OPTION�Weitere Optionen�%s wird eingelesen�Ergebnisse der grammatischen und lexikalischen Analyse ausgeben�Programmversion ausgeben�Programmname: %s�Option %s %s wird entfernt�Melden Sie Fehler an %s. Fehler in der Übersetzung melden Sie bitte an <translation-team-de@lists.sourceforge.net> �Einlesen von %s wird in Zeile %d wiederaufgenommen�Übereinstimmung für Regel %s bei %s:%d�Im Testmodus ausführen.�ZEICHENKETTE�Scanner-Test.�Anfrage für interaktive Shell »%s« gemäß Regel %s wird gestellt�Anfrage »%s« für »%s« gemäß Regel %s wird gestellt�Fehlerdiagnosestufe festlegen.�Begrenzung %d wird auf %lu gesetzt�Begrenzungen für %s werden gesetzt�Fehler beim Setzen der Priorität auf %d�Höchstens ZAHL Datensätze anzeigen.�Standardkonfiguration anzeigen.�Einträge in zeitlicher Reihenfolge anzeigen.�Benutzername im Testmodus übergeben.�Zu viele Anmeldungen (max. %zu) für %s�Umwandlungsausdruck muss mit »s« beginnen, dem ein Interpunktionszeichen folgt�Umwandlungsanweisung: %s, %s, %s, %u, %u, %s�argv[%d] wird modifiziert�Befehlszeile wird umgewandelt�Programmname wird geändert (%s)�Variable %s=%s wird umgewandelt�Unbekannter Schalter im Umwandlungsausdruck: %c�Unbekannte Meldungsreferenz�Unbekannter Systemfehler�Aufruf:�ZEICHENKETTE anstelle des Standardformats verwenden.�Warnung: �Es ist Ihnen nicht gestattet, diesen Befehl auszuführen. Kontaktieren Sie den Systemadministrator für weitere Informationen. �Sie haben nicht das Recht, sich interaktiv an diesem Rechner anzumelden. Kontaktieren Sie den Systemadministrator für weitere Informationen. �[DATEI]�[Benutzer [Benutzer …]]�Benutzerkonten-Datenbank ist leer�Wechsel in das Verzeichnis %s nicht möglich: %s�Wechsel in das chroot-Verzeichnis %s nicht möglich: %s�Verzeichnis %s konnte nicht erstellt werden: %s�Gruppen-ID %lu kann nicht erzwungen werden: %s�Benutzer-ID %lu kann nicht erzwungen werden: %s�Datenbank %s kann nicht geöffnet werden: %s�Datenbankdatei %s kann nicht geöffnet werden�Datei %s konnte nicht geöffnet werden: %s�Formatdatei %s kann nicht geöffnet werden�Begrenzungen für %s können nicht gesetzt werden�Aufruf von »stat« für Verzeichnis %s nicht möglich: %s�Aufruf von »stat« für Datei %s nicht möglich: %s�Aufruf von »stat« für Formatdatei %s nicht möglich�In %s wird gewechselt�%zu/%zu Anmeldungen für %s gezählt�Anmeldungen für %s werden gezählt�Debug-Level auf %d gesetzt�Umgebungsumwandlung ist noch nicht implementiert�Fehler beim Setzen der Begerenzung: %s�Fehler beim Setzen der Priorität: %s�Fehler beim Schreiben der Stoppmarkierung in die Datenbankdatei %s: %s�Fehler beim Schreiben in die Datenbank %s: %s�~ wurde als zweites Argument erwartet, aber %s gefunden�zusätzliche Argumente�Wert kann nicht eingelesen werden: %s�Meldung konnte nicht in die Standardfehlerausgabe geschrieben werden: %s�Meldung konnte nicht in die Standardausgabe geschrieben werden: %s�ungültige Befehlszeile�Ungültiger Dateideskriptor�Ungültiges Format: %s�Ungültiger Name der Include-Datei�Ungültige Zahl (%s)�Ungültige Zahl: %s�Ungültiger Opcode�Ungültiger regulärer Ausdruck: %s�Ungültige Anweisung: Wert fehlt�Ungültige Zeit: %s�ungültige Benutzer-ID %lu�ungültiger Benutzername�Schlüssel-Feld ist keine Zahl�] fehlt�Fehlendes schließendes Zitatzeichen in Zeichenkette, öffnendes bei »%s«�Kein Argument im Index %d im Befehl: %s�Keine passende Regel für »%s«, Benutzer %s�Keine solche Gruppe: %s�Kein solcher Benutzer: %s�Nicht genügend Speicher�Veraltete eingebaute Konfiguration wird eingelesen�Veraltete eingebaute Konfigurationsdatei %s wird eingelesen�rush - eine eingeschränkte Benutzershell.�rushlast - zeigt eine Liste der letzten Rush-Anmeldungen an.�rushwho – Liste der angemeldeten Rush-Benutzer anzeigen.�seteuid(0) war erfolgreich, sollte aber nicht�Anweisung kann nicht außerhalb einer Regel verwendet werden�Die Option --user ist dem Superuser »root« vorbehalten�Zu wenige Argumente�Zu viele Argumente�Umgewandelter Wert: %s�unbekanntes Schlüsselwort: %s�Unbekannte Begrenzung: %s�Unbekannter Schalter im regulären Ausdruck: %s�Unbekannte Anweisung: %s�Benutzer %s, UID %lu�Wert-Feld ist keine Zahl�wordsplit(%s) fehlgeschlagen: %s�����������������������������������������������������������������������������������������������������������������������������rush-2.4/po/sv.gmo����������������������������������������������������������������������������������0000644�0001750�0001750�00000037370�14655401314�014115� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Þ•����³������´��ï���L ��������É��� �����Ó�����é���������������4�����P��,���a�����Ž��.���®��'���Ý��(�����"���.�����Q��&���k�����’�����²�� ���Ñ�����ò����� ��w�����+���‰�����µ�����»�����Ã�����ß�� ���î�����ü����������������!�����@�� ���\�� ���}�����Š��5���œ�����Ò�����Ú�����ë�����ü����� ����� �����4�����M�����`�����i�����„�� ���˜��6���¥��.���Ü��-��� ��/���9��2���i��/���œ��2���Ì��%���ÿ�����%�� ���,��:���M�����ˆ��È���‘��^���Z�����¹��s���Ù��5���M��:���ƒ�����¾�����Ã�����Ê�����ã�����þ������������ ��� �� ���.��)���9�����c�����y�����Š����� �� ���´�����Õ�����î�������� �����3�����&���I�����p�����…����������³�����Ê�����ä��$���������%�� ���D��L���e��*���²�����Ý�����ó����� �����,��(���H�����q�����‹����� ��)���§�� ���Ñ��i���Û��t���E�����º�����Á�����Ò�����é���������������<�����W�����r�����Ž�����«�����Ã�����Þ�����÷����������,�����G�����P�����n�����…��1���›�����Í�����å��*���� �� ���+ ��/���L �����| �����Œ ��%���¦ ��%���Ì �����ò �����!�����!�����2!�����L!�����`!�����s!�����‚!�� ���•!�����¶!�����Ç!�����×!�����é!�� ���"��1��� "��&���?"��"���f"�����‰"�����›"�����¬"��%���¾"��$���ä"����� #��,���'#��,���T#��'���#��'���©#��3���Ñ#�����$�����$�����*$�����@$�����T$�����f$�����~$�����”$�����¥$�����Á$��¾��Ú$��Ñ���™&�����k'�����‚'�����œ'�����´'�����Î'�����í'��2���(��#���4(��1���X(��+���Š(��,���¶(��%���ã(����� )��2���%)�����X)��(���v)��#���Ÿ)��"���Ã)�����æ)��k���ê)��=���V*�����”*�����*�����¦*�����Å*�� ���Ø*�����å*�� ���é*�����÷*��"���+�����2+��&���F+�����m+�����u+��C���‡+�����Ë+�����Ñ+�����ä+�����õ+�����,�����,�����1,�����N,�����a,��%���j,�����,�����¥,��D���´,��3���ù,��(���--��)���V-��'���€-��&���¨-��*���Ï-��0���ú-�����+.�����2.��?���P.�� ���.��Ð���š.��]���k/�����É/�����è/��6���h0��:���Ÿ0�����Ú0�����ß0�����æ0��)���1�����,1�����I1�����Q1�� ���X1�� ���f1��8���p1�����©1�����Á1�����Ñ1�����ç1��'����2�����(2�����D2�����V2�����^2��5���o2��/���¥2�����Õ2��$���ò2��"���3�����:3�����Z3�����t3��"���3��#���³3��*���×3��E���4��.���H4�����w4�����Ž4�����¨4�����Ç4��$���ä4����� 5�����#5�� ���45��.���A5�� ���p5��l���z5��u���ç5�����]6�����c6�����€6��!���•6��!���·6�����Ù6�����÷6�����7�����77�����V7�����t7�����7��*���¬7��&���×7��"���þ7��$���!8�����F8��%���O8��"���u8�����˜8��1���·8��(���é8��%���9��1���89��%���j9��7���9�����È9��%���×9��6���ý9��6���4:�����k:�����:�����•:�����©:�����Å:�����×:�� ���è:�����ö:�����;�����2;�����B;�����S;�����i;�����‰;��C���’;��*���Ö;��2���<�����4<�����K<�����g<��(���„<��'���­<�� ���Õ<��6���ö<��5���-=��6���c=��&���š=��9���Á=�����û=����� >�����">�����;>�����P>��)���h>�����’>�����¢>�����¹>�����Ù>�����5�����������_���£���¨���„������±������=���g���}������������� ���8�������]���m���Q���’�������”���S������Ÿ���!���K���C�������•���'���"�����������E���ƒ���0���›�������<������®���O������Š���r��������������6��� ������������������l������¡����������¦���\������¢���^�������1������k�����������²���u���{�������n���A�������‘��� ���v�������%���™�����������+�����������x���;���W�������&��� �������P�����������������†���w���o���ˆ���������������…���B���‰������|���©���s������������� �������—���$���ª�������U������i�������Z���Ž���ž���z������,���J���‹���������������`���¥���¬�������4���y���­���˜������������������d���(������ ����������7�������Y������N���*���X���.���“������[���H�������œ�����������R���T����������t���–���@����������>���q�������~���#���2���:������/���V���������������¤���D���9���F�������-���€������ ���M�������«�������3�������‡���)���L������a���š���G���I���‚���f���p���³���j���e���b�������Œ������°���?���§���c�������¯���h���� 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. �%s is not a directory�%s is not a regular file�%s: TCPMUX did not respond�%s: TCPMUX returned %s�%s: invalid option -- '%c' �%s: not a number�%s: option '%s%s' doesn't allow an argument �%s: option '%s%s' is ambiguous �%s: option '%s%s' is ambiguous; possibilities:�%s: option '%s%s' requires an argument �%s: option requires an argument -- '%c' �%s: subprocess exited with code %d�%s: subprocess terminated�%s: subprocess terminated on signal %d�%s: unrecognized option '%s%s' �%s:%d: %s: can't stat '%s': %s�%s:%d: %s: cannot execute %s: %s�%s:%d: %s: cannot fork: %s�(C)�A system error occurred while attempting to execute command. Contact the systems administrator for further assistance. �Add or remove configuration security check.�CHECK�COMMAND�Cannot open database %s: %s�Chroot dir: %s�Command line:�DIR�Debug: �Deleting arguments %d-%d�Deleting argv[0] is prohibited�Do not display header line.�Dump final request in test mode.�Environment:�Error message: %s�Error sending diagnostic message to descriptor %d: %s�Error: �Execute COMMAND.�Executing %s, %s�Final arguments:�Final environment:�Finished parsing %s�Force interactive shell.�Forked process %lu�GID: %lu�Give a short usage message�Give this help list�Home dir: %s�INTERNAL ERROR at %s:%d: can't modify read-only target�INTERNAL ERROR at %s:%d: invalid envar type %d�INTERNAL ERROR at %s:%d: invalid node type %d�INTERNAL ERROR at %s:%d: invalid target type %d�INTERNAL ERROR at %s:%d: unrecognized node type %d�INTERNAL ERROR at %s:%d: unrecognized opcode %d�INTERNAL ERROR at %s:%d: unrecognized operation %d�Ignoring non-existing include file %s�Info: �Invalid transform expression: %s�Invalid transform replacement: back reference out of range�KEYWORDS�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. �Local configuration error occurred. Contact the systems administrator for further assistance. �Look for database files in DIR.�Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options.�Missing 2nd delimiter in position %d of expression %s�Missing trailing delimiter in position %d of expression %s�NAME�NUMBER�No default configuration�No logins allowed for `%s'�Not enough memory�Notice: �OPTION�Other options�Parsing %s�Print grammar and lexical analyzer traces�Print program version�Program name: %s�Removing option %s %s�Report bugs to %s. �Resuming parsing %s from line %d�Rule %s at %s:%d matched�Run in test mode.�STRING�Scanner test.�Serving interactive shell request for %s by rule %s�Serving request "%s" for %s by rule %s�Set debugging level.�Setting limit %d to %lu�Setting limits for %s�Setting priority to %d�Show at most NUM records.�Show default configuration.�Show entries in chronological order.�Supply user name in test mode.�Too many logins (max %zu) for %s�Transform expression must start with 's' followed by a punctuation character�Transformation map: %s, %s, %s, %u, %u, %s�Transforming argv[%d]�Transforming command line�Transforming program name (%s)�Transforming variable %s=%s�Unknown flag in transform expression: %c�Unknown message reference�Unknown system error�Usage:�Use STRING instead of the default format.�Warning: �You are not permitted to execute this command. Contact the systems administrator for further assistance. �You do not have interactive login access to this machine. Contact the systems administrator for further assistance. �[FILE]�[user [user...]]�acct database is empty�cannot change to dir %s: %s�cannot chroot to %s: %s�cannot create directory %s: %s�cannot enforce gid %lu: %s�cannot enforce uid %lu: %s�cannot open database %s: %s�cannot open database file %s�cannot open file %s: %s�cannot open format file %s�cannot set limits for %s�cannot stat directory %s: %s�cannot stat file %s: %s�cannot stat format file %s�chdir %s�counted %zu/%zu logins for %s�counting logins for %s�debug level set to %d�environment transformation is not yet implemented�error setting limit: %s�error setting priority: %s�error writing stop to database file %s: %s�error writing to database %s: %s�expected ~ as the second argument, but found %s�extra arguments�failed to parse value: %s�failed to write message to stderr: %s�failed to write message to stdout: %s�invalid command line�invalid file descriptor�invalid format: %s�invalid include file name�invalid number (%s)�invalid number: %s�invalid opcode�invalid regexp: %s�invalid statement: missing value�invalid time: %s�invalid uid %lu�invalid user name�key field is not a number�missing ]�missing closing quote in string started near `%s'�no argument at index %d in command: %s�no matching rule for "%s", user %s�no such group: %s�no such user: %s�not enough memory�parsing legacy built-in configuration�parsing legacy configuration file %s�rush - restricted user shell.�rushlast - show listing of last Rush logins.�rushwho - show listing of online Rush users.�seteuid(0) succeeded when it should not�statement cannot be used outside a rule�the --user option is allowed for the superuser only�too few arguments�too many arguments�transformed value: %s�unknown keyword: %s�unknown limit: %s�unknown regexp flag: %s�unknown statement: %s�user %s, uid %lu�value field is not a number�wordsplit(%s) failed: %s�Project-Id-Version: rush 2.2 Report-Msgid-Bugs-To: bug-rush@gnu.org PO-Revision-Date: 2022-01-02 16:40+0100 Last-Translator: Luna Jernberg <droidbittin@gmail.com> 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. Plural-Forms: nplurals=2; plural=(n != 1); X-Generator: Poedit 2.2.1 � Licens GPLv3+: GNU GPL version 3 eller senare <http://gnu.org/licenses/gpl.html> Detta är fri programvara; du kan fritt ändra och Ã¥terdistribuera den. Den kommer UTAN GARANTI, sÃ¥ lÃ¥ngt lagen tillÃ¥ter. �%s är inte en katalog�%s är inte en vanlig fil�%s: TCPMUX svarade inte�%s: TCPMUX returnerade %s�%s: okänd flagga -- â€%c†�%s: inte ett nummer�%s: flagga â€%s%s†tillÃ¥ter inte ett argument �%s: flagga â€%s%s†är tvetydig �%s: flagga â€%s%s†är tvetydig; möjligheter:�%s: flagga â€%s%s†kräver ett argument �%s: flagga kräver ett argument -- â€%c†�%s: underprocess avslutade med kod %d�%s: underprocess avslutades�%s: underprocess avslutades pÃ¥ grund av signal %d�%s: okänd flagga â€%s%s†�%s:%d: %s: kan inte köra stat: '%s': %s�%s:%d: %s: kan inte exekvera %s: %s�%s:%d: %s: kan inte köra fork: %s�(C)�Ett systemfel uppstod under exekvering av kommando. Kontakta systemadministratören för vidare assistans. �Lägg till eller ta bort säkerhetskontroll av konfiguration.�KONTROLL�KOMMANDO�Kan inte öppna databas %s: %s�Chroot-katalog: %s�Kommandorad:�KAT�Felsökning: �Tar bort argument %d-%d�Att ta bort argv[0] är förbjudet�Visa inte huvudrad.�Dumpa slutgiltig begäran i testläge.�Miljö:�Felmeddelande: %s�Fel vid sändning av diagnostiskt meddelande till deskriptor %d: %s�Fel: �Exekvera KOMMANDO.�Exekverar %s, %s�Sista argument:�Slutgiltig miljö:�Avslutade tolkning av %s�Framtvinga interaktivt skal.�Grenad process %lu�GID: %lu�Ge ett kort meddelande om användning�Ge denna hjälplista�Hemkatalog: %s�INTERNT FEL vid %s:%d: det gÃ¥r inte att modifiera skrivskyddat mÃ¥l�INTERNT FEL vid %s:%d: ogiltig miljövariabeltyp %d�INTERNT FEL vid %s:%d: ogiltig nodtyp %d�INTERNT FEL vid %s:%d: ogiltig mÃ¥ltyp %d�INTERNT FEL vid %s:%d: okänd nodtyp %d�INTERNT FEL vid %s:%d: okänd opkod %d�INTERNT FEL vid %s:%d: okänd operation %d�Hoppar över icke-existerande inkluderingsfil %s�Info: �Ogiltigt transformuttryck: %s�Ogiltig transformersättning: bakÃ¥treferens utanför intervall�NYCKELORD�Licens GPLv3+: GNU GPL version 3 eller senare <http://gnu.org/licenses/gpl.html> Detta är fri programvara: du kan fritt ändra och Ã¥terdistribuera den. Den kommer UTAN GARANTI, sÃ¥ lÃ¥ngt lagen tillÃ¥ter. �Ett lokalt konfigurationsfel uppstod. Kontakta systemadministratören för vidare assistans. �Leta efter databasfiler i KAT.�Obligatoriska eller valfria argument till lÃ¥nga flaggor är ocksÃ¥ obligatoriska eller valfria för motsvarande korta flaggor.�Saknar andra avgränsaren vid position %d i uttryck %s�Saknar avslutande avgränsare vid position %d i uttryck %s�NAMN�NUMMER�Ingen standardkonfiguration�Inga inloggningar tillÃ¥tna för â€%sâ€�Inte tillräckligt med minne�Notis: �FLAGGA�Andra flaggor�Tolkar %s�Skriv ut spÃ¥r för grammatisk och lexikalisk analysator�Skriv ut programversion�Programnamn: %s�Tar bort flagga %s %s�Rapportera fel till %s. �Ã…terupptog tolkning av %s frÃ¥n rad %d�Regel %s vid %s:%d matchade�Kör i testläge.�STRÄNG�Avläsningstest.�Hanterar interaktiv skalbegäran för %s via regel %s�Hanterar begäran â€%s†för %s via regel %s�Ställ in felsökningsnivÃ¥.�Ställer in begränsning %d till %lu�Ställer in begränsningar för %s�Ställer inte prioritet till %d�Visa som mest NUM poster.�Visa standardkonfiguration.�Visa poster i kronologisk ordning.�Tillför användarnamn i testläge.�För mÃ¥nga inloggningar (max %zu) för %s�Transformuttryck mÃ¥ste börja med â€s†följt av ett skiljetecken�Transformerar mappning: %s, %s, %s, %u, %u, %s�Transformerar argv[%d]�Transformerar kommandorad�Transformerar programnamn (%s)�Transformerar variabel %s=%s�Okänd flagga i transformuttryck: %c�Okänd meddelandereferens�Okänt systemfel�Användning:�Använd STRÄNG istället för standardformat.�Varning: �Du har inte tillÃ¥telse att exekvera detta kommando. Kontakta systemadministratören för vidare assistans. �Du har inte interaktiv inloggningsÃ¥tkomst till denna maskin. Kontakta systemadministratören för vidare assistans. �[FIL]�[användare [användare…]]�kontodatabas är tom�kan inte byta katalog till %s: %s�kan inte köra chroot till %s: %s�kan inte skapa katalog %s: %s�kan inte genomdriva gid %lu: %s�kan inte genomdriva uid %lu: %s�kan inte öppna databas %s: %s�kan inte öppna databasfil %s�kan inte öppna fil %s: %s�kan inte öppna formatfil %s�kan inte ställa in begränsningar för %s�kan inte köra stat pÃ¥ katalog %s: %s�kan inte köra stat pÃ¥ fil %s: %s�kan inte köra stat pÃ¥ formatfil %s�chdir %s�räknade %zu/%zu inloggningar för %s�räknar inloggningar för â€%sâ€�felsökningsnivÃ¥ satt till %d�miljötransformering är inte implementerad ännu�fel vid inställning av begränsning: %s�fel vid inställning av prioritet: %s�fel vid skrivning av stopp till databasfil %s: %s�fel vid skrivning till databas %s: %s�förväntade ~ som det andra argumentet, men hittade %s�extra argument�misslyckades med att tolka värde: %s�misslyckades med att skriva meddelande till stderr: %s�misslyckades med att skriva meddelande till stdout: %s�ogiltig kommandorad�ogiltig fildeskriptor�ogiltigt format: %s�ogiltig inkluderingsfilnamn�ogiltigt tal (%s)�ogiltigt tal: %s�ogiltig opkod�ogiltigt reguljärt uttryck: %s�ogiltig sats: saknar värde�ogiltig tid: %s�ogiltigt uid %lu�ogiltig användarnamn�nyckelfält är inte ett nummer�saknar ]�saknar avslutande citattecken i sträng som började nära â€%sâ€�inget argument vid index %d i kommando: %s�ingen matchande regel för â€%sâ€, användare %s�ingen sÃ¥dan grupp: %s�ingen sÃ¥dan användare: %s�inte tillräckligt med minne�tolkar förÃ¥ldrad inbyggd konfiguration�tolkar förÃ¥ldrad konfigurationsfil %s�rush - begränsat användarskal.�rushlast - visa lista över senaste Rush-inloggningar.�rushwho - visa lista över inloggade Rush-användare.�seteuid(0) framgÃ¥ngsrikt när det inte borde vara det�sats kan inte användas utanför regel�--user-flaggan är endast tillÃ¥ten för superanvändaren�för fÃ¥ argument�för mÃ¥nga argument�transformerat värde: %s�okänt nyckelord: %s�okänd begränsning: %s�okänd flagga för reguljärt uttryck: %s�okänd sats: %s�användare %s, uid %lu�värdefält är inte ett nummer�wordsplit(%s) misslyckades: %s�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/po/fr.gmo����������������������������������������������������������������������������������0000644�0001750�0001750�00000040752�14655401314�014072� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Þ•����³������´��ï���L ��������É��� �����Ó�����é���������������4�����P��,���a�����Ž��.���®��'���Ý��(�����"���.�����Q��&���k�����’�����²�� ���Ñ�����ò����� ��w�����+���‰�����µ�����»�����Ã�����ß�� ���î�����ü����������������!�����@�� ���\�� ���}�����Š��5���œ�����Ò�����Ú�����ë�����ü����� ����� �����4�����M�����`�����i�����„�� ���˜��6���¥��.���Ü��-��� ��/���9��2���i��/���œ��2���Ì��%���ÿ�����%�� ���,��:���M�����ˆ��È���‘��^���Z�����¹��s���Ù��5���M��:���ƒ�����¾�����Ã�����Ê�����ã�����þ������������ ��� �� ���.��)���9�����c�����y�����Š����� �� ���´�����Õ�����î�������� �����3�����&���I�����p�����…����������³�����Ê�����ä��$���������%�� ���D��L���e��*���²�����Ý�����ó����� �����,��(���H�����q�����‹����� ��)���§�� ���Ñ��i���Û��t���E�����º�����Á�����Ò�����é���������������<�����W�����r�����Ž�����«�����Ã�����Þ�����÷����������,�����G�����P�����n�����…��1���›�����Í�����å��*���� �� ���+ ��/���L �����| �����Œ ��%���¦ ��%���Ì �����ò �����!�����!�����2!�����L!�����`!�����s!�����‚!�� ���•!�����¶!�����Ç!�����×!�����é!�� ���"��1��� "��&���?"��"���f"�����‰"�����›"�����¬"��%���¾"��$���ä"����� #��,���'#��,���T#��'���#��'���©#��3���Ñ#�����$�����$�����*$�����@$�����T$�����f$�����~$�����”$�����¥$�����Á$��™��Ú$��à���t&�����U'�����q'�����‰'�����£'��$���½'�����â'��2���õ'��'���((��8���P(��/���‰(��0���¹(��5���ê(��#��� )��2���D)��!���w)��1���™)��*���Ë)��$���ö)�����*��z���*��E���š*�����à*�����æ*��/���ï*�����+�� ���7+�����B+�� ���F+�����S+�����s+�����’+��(���®+�����×+�����ç+��H���ý+�� ���F,�����P,�����d,�����y,�����Œ,�����¢,��%���º,�����à,�� ���ö,��(����-�����)-�����=-��J���X-��0���£-��3���Ô-��3���.��2���<.��+���o.��0���›.��+���Ì.�����ø.��*����/��N���+/�����z/��ß���ƒ/��f���c0�� ���Ê0��n���ë0��C���Z1��9���ž1�����Ø1�����Ü1�����ã1��%���2�����)2�����?2�����G2�����N2�� ���]2��,���k2�� ���˜2�����¹2�����Ï2�����í2��8��� 3�� ���B3�����c3�����x3�����3��T���3��>���å3�����$4�����D4�����\4��!���{4��"���4��%���À4��0���æ4��*���5��$���B5��]���g5��0���Å5�����ö5�����6��'���/6��#���W6��8���{6�����´6�����Ô6�����í6��.���õ6�� ���$7��l���17��w���ž7�� ���8����� 8��!���?8��1���a8��(���“8��+���¼8��$���è8��#��� 9��/���19��5���a9��&���—9��!���¾9��,���à9��5��� :��1���C:��6���u:�����¬:�����µ:�����Ð:��!���ð:��3���;��!���F;��2���h;��C���›;��;���ß;��3���<�����O<��3���j<��;���ž<��;���Ú<�����=��!���+=�����M=�����d=�����ƒ=�����š=�����±=�����Ã=��)���Ù=�����>�����>�����,>��!���I>�� ���k>��+���v>��3���¢>��6���Ö>����� ?�����?�����6?��/���L?��<���|?��#���¹?��)���Ý?��3���@��1���;@��@���m@��>���®@�����í@�����A�����A�����-A�����CA�����XA�����vA�����A��#���¨A�����ÌA�����5�����������_���£���¨���„������±������=���g���}������������� ���8�������]���m���Q���’�������”���S������Ÿ���!���K���C�������•���'���"�����������E���ƒ���0���›�������<������®���O������Š���r��������������6��� ������������������l������¡����������¦���\������¢���^�������1������k�����������²���u���{�������n���A�������‘��� ���v�������%���™�����������+�����������x���;���W�������&��� �������P�����������������†���w���o���ˆ���������������…���B���‰������|���©���s������������� �������—���$���ª�������U������i�������Z���Ž���ž���z������,���J���‹���������������`���¥���¬�������4���y���­���˜������������������d���(������ ����������7�������Y������N���*���X���.���“������[���H�������œ�����������R���T����������t���–���@����������>���q�������~���#���2���:������/���V���������������¤���D���9���F�������-���€������ ���M�������«�������3�������‡���)���L������a���š���G���I���‚���f���p���³���j���e���b�������Œ������°���?���§���c�������¯���h���� 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. �%s is not a directory�%s is not a regular file�%s: TCPMUX did not respond�%s: TCPMUX returned %s�%s: invalid option -- '%c' �%s: not a number�%s: option '%s%s' doesn't allow an argument �%s: option '%s%s' is ambiguous �%s: option '%s%s' is ambiguous; possibilities:�%s: option '%s%s' requires an argument �%s: option requires an argument -- '%c' �%s: subprocess exited with code %d�%s: subprocess terminated�%s: subprocess terminated on signal %d�%s: unrecognized option '%s%s' �%s:%d: %s: can't stat '%s': %s�%s:%d: %s: cannot execute %s: %s�%s:%d: %s: cannot fork: %s�(C)�A system error occurred while attempting to execute command. Contact the systems administrator for further assistance. �Add or remove configuration security check.�CHECK�COMMAND�Cannot open database %s: %s�Chroot dir: %s�Command line:�DIR�Debug: �Deleting arguments %d-%d�Deleting argv[0] is prohibited�Do not display header line.�Dump final request in test mode.�Environment:�Error message: %s�Error sending diagnostic message to descriptor %d: %s�Error: �Execute COMMAND.�Executing %s, %s�Final arguments:�Final environment:�Finished parsing %s�Force interactive shell.�Forked process %lu�GID: %lu�Give a short usage message�Give this help list�Home dir: %s�INTERNAL ERROR at %s:%d: can't modify read-only target�INTERNAL ERROR at %s:%d: invalid envar type %d�INTERNAL ERROR at %s:%d: invalid node type %d�INTERNAL ERROR at %s:%d: invalid target type %d�INTERNAL ERROR at %s:%d: unrecognized node type %d�INTERNAL ERROR at %s:%d: unrecognized opcode %d�INTERNAL ERROR at %s:%d: unrecognized operation %d�Ignoring non-existing include file %s�Info: �Invalid transform expression: %s�Invalid transform replacement: back reference out of range�KEYWORDS�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. �Local configuration error occurred. Contact the systems administrator for further assistance. �Look for database files in DIR.�Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options.�Missing 2nd delimiter in position %d of expression %s�Missing trailing delimiter in position %d of expression %s�NAME�NUMBER�No default configuration�No logins allowed for `%s'�Not enough memory�Notice: �OPTION�Other options�Parsing %s�Print grammar and lexical analyzer traces�Print program version�Program name: %s�Removing option %s %s�Report bugs to %s. �Resuming parsing %s from line %d�Rule %s at %s:%d matched�Run in test mode.�STRING�Scanner test.�Serving interactive shell request for %s by rule %s�Serving request "%s" for %s by rule %s�Set debugging level.�Setting limit %d to %lu�Setting limits for %s�Setting priority to %d�Show at most NUM records.�Show default configuration.�Show entries in chronological order.�Supply user name in test mode.�Too many logins (max %zu) for %s�Transform expression must start with 's' followed by a punctuation character�Transformation map: %s, %s, %s, %u, %u, %s�Transforming argv[%d]�Transforming command line�Transforming program name (%s)�Transforming variable %s=%s�Unknown flag in transform expression: %c�Unknown message reference�Unknown system error�Usage:�Use STRING instead of the default format.�Warning: �You are not permitted to execute this command. Contact the systems administrator for further assistance. �You do not have interactive login access to this machine. Contact the systems administrator for further assistance. �[FILE]�[user [user...]]�acct database is empty�cannot change to dir %s: %s�cannot chroot to %s: %s�cannot create directory %s: %s�cannot enforce gid %lu: %s�cannot enforce uid %lu: %s�cannot open database %s: %s�cannot open database file %s�cannot open file %s: %s�cannot open format file %s�cannot set limits for %s�cannot stat directory %s: %s�cannot stat file %s: %s�cannot stat format file %s�chdir %s�counted %zu/%zu logins for %s�counting logins for %s�debug level set to %d�environment transformation is not yet implemented�error setting limit: %s�error setting priority: %s�error writing stop to database file %s: %s�error writing to database %s: %s�expected ~ as the second argument, but found %s�extra arguments�failed to parse value: %s�failed to write message to stderr: %s�failed to write message to stdout: %s�invalid command line�invalid file descriptor�invalid format: %s�invalid include file name�invalid number (%s)�invalid number: %s�invalid opcode�invalid regexp: %s�invalid statement: missing value�invalid time: %s�invalid uid %lu�invalid user name�key field is not a number�missing ]�missing closing quote in string started near `%s'�no argument at index %d in command: %s�no matching rule for "%s", user %s�no such group: %s�no such user: %s�not enough memory�parsing legacy built-in configuration�parsing legacy configuration file %s�rush - restricted user shell.�rushlast - show listing of last Rush logins.�rushwho - show listing of online Rush users.�seteuid(0) succeeded when it should not�statement cannot be used outside a rule�the --user option is allowed for the superuser only�too few arguments�too many arguments�transformed value: %s�unknown keyword: %s�unknown limit: %s�unknown regexp flag: %s�unknown statement: %s�user %s, uid %lu�value field is not a number�wordsplit(%s) failed: %s�Project-Id-Version: rush 2.2 Report-Msgid-Bugs-To: bug-rush@gnu.org PO-Revision-Date: 2022-07-05 00:04+0200 Last-Translator: Stéphane Aulery <lkppo@free.fr> 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); � Licence GPLv3+: GNU GPL version 3 et plus <http://gnu.org/licenses/gpl.html> Ceci est un logiciel libre: vous êtres libre de le modifier et de le redistribuer. Il n'y'a AUCUNE GARANTIE, dans la limite permise par la loi. �%s n'est pas un répertoire�%s n'est pas un fichier�%s: TCPMUX ne répond pas�%s: TCPMUX a retourné %s�%s: option non valide -- « %c » �%s : pas un nombre�%s: l'option « %s%s » ne prend aucun argument �%s: l'option « %s%s » est ambiguë �%s : l'option « %s%s » est ambiguë ; possibilités :�%s: l'option « %s%s » requiert un argument �%s: l'option requiert un argument -- « %c » �%s : le sous-processus s'est terminé avec le code %d�%s : le sous-processus est terminé�%s : le sous-processus s'est terminé au signal %d�%s: option inconnue « %s%s » �%s:%d: %s : impossible d'exécuter stat '%s' : %s�%s:%d: %s : impossible d'exécuter %s : %s�%s:%d: %s: impossible de forker : %s�(C)�Un erreur système est survenue lors de l'exécution de la commande. Contactez l'administrateur système pour assistance. �Ajouter ou supprimer un configuration de vérification de sécurité.�CHECK�COMMANDE�Impossible d'ouvrir la base de données %s : %s�Chroot répertoire : %s�Commande :�REP�Débogage : �Suppression des arguments %d-%d�Supprimer argv[0] est interdit�Ne pas afficher l'en-tête.�Afficher la requête finale en mode test�Environnement :�Message d'erreur : %s�Erreur lors de l'envoi du message de diagnostique au descripteur %d : %s�Erreur : �Exécuter COMMANDE.�Exécution de %s, %s�Arguments finaux :�Environnement final :�Analyse de %s terminée�Forcer l’interpréteur de commande.�Fork du processus %lu�GID : %lu�Donner une courte indication sur l'usage�Afficher cette aide�Répertoire d'accueil : %s�ERREUR INTERNE à %s:%d : impossible de modifier la cible en lecture seule�ERREUR INTERNE à %s:%d : type envar %d invalide�ERREUR INTERNE à %s:%d : type de nÅ“ud %d invalide�ERREUR INTERNE à %s:%d : type de cible %d invalide�ERREUR INTERNE à %s:%d : type de nÅ“ud %d inconnu�ERREUR INTERNE à %s:%d : opcode %d inconnu�ERREUR INTERNE à %s:%d : opération %d inconnue�fichier d'inclusion non existant %s ignoré�Info : �Expression de transformation invalide : %s�Remplacement de transformée non valide : référence arrière hors intervalle�KEYWORDS�Licence GPLv3+: GNU GPL version 3 et plus <http://gnu.org/licenses/gpl.html> Ceci est un logiciel libre: vous êtres libre de le modifier et de le redistribuer. Il n'y'a AUCUNE GARANTIE, dans la limite permise par la loi. �Une erreur de configuration locale est survenue. Contactez l'administrateur système pour assistance. �Recherche des fichiers dans REP.�Les arguments optionnels ou obligatoires pour les options longues le sont également pour les options courtes.�Deuxième délimiteur manquant à la position %d de l'expression %s�Délimiteur manquant à la position %d de l'expression %s�NOM�NOMBRE�Aucun configuration par défaut�Aucune connexion autorisée pour "%s"�Mémoire insuffisante�Note : �OPTION�Autres options�Analyse de %s�Traces des analyses lexicale et grammaticale�Afficher la version du programme�Nom du programme : %s�Suppression de l'option %s %s�Signalez tout bogue à %s. �Reprise de l'analyse syntaxique de %s depuis la ligne %d�La règle %s à %s:%d correspond�Lancer en mode test.�FORMAT�Test du scanner.�Service de la requête à l’interpréteur de commande pour %s suivant la règle %s�Service de la requête « %s » pour %s suivant la règle %s�Ajuster le niveau de débogage.�Limitation à %d de %lu�Ajustement des limites pour %s�Définition de la priorité à %d�Montrer au plus N enregistrements.�Montrer la configuration par défaut.�Montrer les entrées dans l'ordre chronologique.�Fournir le nom d'utilisateur en mode test.�Trop de connexions (max %zu) pour %s�L'expression de transformation doit débutée par un "s" suivi d'un caractère de ponctuation�Transformation de carte : %s, %s, %s, %u, %u, %s�Transformation de argv[%d]�Transformation de la commande�Transformation du nom du programme (%s)�Transformation de la variable %s=%s�Drapeau inconnu dans l'expression de transformation : %c�Référence de message inconnue�Erreur système inconnue�Usage :�Utiliser FORMAT au lieu du format par défaut.�Attention : �Vous n'avez l'autorisation d'exécuter cette commande. Contactez l'administrateur système pour assistance. �Vous n'avez pas un accès interactif de connexion à cette machineContactez l'administrateur système pour assistance. �[FICHIER]�[utilisateur [utilisateur...]]�La base de données acct est vide�impossible de changer le répertoire vers %s : %s�impossible d'appliquer chroot à %s : %s�impossible de créer le répertoire %s : %s�impossible de forcer le gid %lu : %s�impossible de forcer l'uid %lu : %s�impossible d'ouvrir la base de données %s : %s�impossible d'ouvrir le fichier de base de données %s�impossible d'ouvrir le fichier %s : %s�impossible d'ouvrir le fichier %s�impossible de spécifier les limites pour %s�impossible d'obtenir le status du répertoire %s : %s�impossible d'obtenir le status du fichier %s : %s�impossible d'obtenir le status du fichier de format %s�chdir %s�%zu/%zu connexions pour %s�comptage des connexions pour %s�niveau de débogage défini à %d�transformation de l'environnement non implémentée�erreur pendant la limitation : %s�erreur lors de la définition de la priorité : %s�erreur lors de l'écriture de stop dans la base de données %s : %s�erreur lors de l'écriture dans la base de données %s : %s�~ attendu comme deuxième argument, mais %s trouvé�arguments supplémentaires�impossible d'analyser syntaxiquement la valeur : %s�impossible d'écrire le message sur la sortie d'erreur : %s�impossible d'écrire le message sur la sortie standard : %s�commande non valide �descripteur de fichier non valide�format non valide : %s�fichier d'inclusion non valide�nombre non valide (%s)�nombre non valide : %s�opcode non valide�regex non valide : %s�instruction non valide : valeur manquante�temps non valide : %s�uid %lu non valide�nom d'utilisateur non valide�le champ clé n'est pas un nombre�] manquant�guillemets fermants manquants près de "%s"�aucun argument à l'indice %d dans la commande : %s�aucune règle correspondante pour "%s", utilisateur %s�aucun groupe : %s�aucun utilisateur : %s�mémoire insuffisante�analyse de l'ancienne configuration par défaut�analyse du fichier %s dans un ancien format de configuration�rush - shell utilisateur restreint.�rushlast - lister les derniers logs Rush.�rushtwo - lister les utilisateurs de Rush en ligne.�seteuid(0) a réussi alors qu'il n'aurait pas dû�l'instruction ne peut pas être utilisée en dehors d'une règle�l'option --user n'est autorisée que pour le super-utilisateur�pas assez d'arguments�trop d'arguments�valeur transformée : %s�Mot clé inconnu : %s�limite inconnue : %s�drapeau de regex inconnu : %s�instruction inconnue : %s�utilisateur %s, uid %lu�le champ valeur n'est pas un nombre�wordsplit(%s) a échoué : %s�����������������������rush-2.4/po/boldquot.sed����������������������������������������������������������������������������0000644�0001750�0001750�00000000331�13456274525�015304� 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 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/po/fi.gmo����������������������������������������������������������������������������������0000644�0001750�0001750�00000030406�14655401314�014054� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Þ•����€��������­���������Ð ��É���Ñ �����› �����± �����Ê �����å �����ü ��(��� ��"���A �����d ��&���~ �� ���¥ �����Æ �����á ��w���å ��+���] �����‰ ����� �����— �����³ �� ��� �����Ð �����Ô �����Ü �����õ ������� ���0�� ���Q�����^��5���p�����¦�����®�����¿�����Ð�����á�����ô����������!�����4�����=�����X�� ���l��%���y�����Ÿ�� ���¦��:���Ç�������È��� ��^���Ô�����3��s���S��5���Ç��:���ý�����8�����=�����D�����]�����x�����Š�� ���‘�� ���Ÿ�����ª�����À�����Ñ�� ���å���������������1��3���8��&���l�����“�����¨�����À�����Ö�����í�������$���#�����H�� ���g��*���ˆ�����³��(���Í�����ö����� ��)����� ���<��i���F��t���°�����%�����,�����=�����T�����p�����ˆ�����§�����Â�����Ý�����ù����������.�����I�����b����������—�����²�����Ð�����ç�����ý�������*���0�� ���[�����|�����Œ�����¡�����´�����È�����Ø��1���ê��&�����"���C�����f��,���x��,���¥��'���Ò��3���ú�����.�����B�����S��Ú��l��å���G�����-�����A�����_�����t��&���‹��+���²��#���Þ�������(�����4���E��(���z�����£��ƒ���¦��,���*�����W�����`��)���h�����’�� ���§�����´�����º�����Ê��/���æ����� ��)���2 �� ���\ �����i ��>���{ �����º ����� �����Ó �����æ �����ý ��%���!��.���:!�����i!�����„!�����!�����ª!�����È!��&���Ú!�����"����� "��>���*"�� ���i"��å���t"��e���Z#��-���À#�����î#��4���|$��6���±$�����è$�����í$�����ô$��8���%�� ���?%�����M%�����V%�����f%�����‚%�����˜%��‰���ª%��2���4&��(���g&�����&�� ���¨&��Q���³&��;���'�����A'�����Z'��!���w'�����™'��$���µ'�����Ú'��$���ó'��$���(��D���=(��%���‚(�����¨(��(���Á(�����ê(�� ���)��'���)�� ���:)��s���E)��Š���¹)�� ���D*�����O*�����n*��+���ˆ*��;���´*��'���ð*��7���+��<���P+��)���+��-���·+��'���å+��(��� ,��-���6,��<���d,��;���¡,��<���Ý,��8���-��1���S-��"���…-�����¨-��$���Å-��>���ê-��)���).�����S.�����c.�����|.�����“.��(���¬.�����Õ.��K���ò.��,���>/��@���k/�����¬/��>���½/��A���ü/��0���>0��2���o0�����¢0��+���»0�����ç0�����n���E���<�������R���a����������i����������z�������A���D���M������ ���t����������5���L����������$���o���~���G�����������&���J���"�������f���%���/���������h���x����������q���N�������S�������€������� ������W���\���������������������s�������I���.���1������� �����������Y������������������������`�������6�������4�������������^���>���?���V���=���#��� ���_�������O�������P���U������3���Z���-�����������[���|���y���F������Q���K���l���m�������8���@���u���r���{�����������C����������j���d���(���7���B���T������;���*���v�������,��� ��������������)���:��������������g����������0�������������w���b���p���2���]������'���+������� ���X���}�������e���!���k���c���9�������H�������� 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. �%s is not a directory�%s is not a regular file�%s: TCPMUX did not respond�%s: TCPMUX returned %s�%s: invalid option -- '%c' �%s: option requires an argument -- '%c' �%s: subprocess exited with code %d�%s: subprocess terminated�%s: subprocess terminated on signal %d�%s:%d: %s: cannot execute %s: %s�%s:%d: %s: cannot fork: %s�(C)�A system error occurred while attempting to execute command. Contact the systems administrator for further assistance. �Add or remove configuration security check.�CHECK�COMMAND�Cannot open database %s: %s�Chroot dir: %s�Command line:�DIR�Debug: �Deleting arguments %d-%d�Deleting argv[0] is prohibited�Do not display header line.�Dump final request in test mode.�Environment:�Error message: %s�Error sending diagnostic message to descriptor %d: %s�Error: �Execute COMMAND.�Executing %s, %s�Final arguments:�Final environment:�Finished parsing %s�Force interactive shell.�Forked process %lu�GID: %lu�Give a short usage message�Give this help list�Home dir: %s�Ignoring non-existing include file %s�Info: �Invalid transform expression: %s�Invalid transform replacement: back reference out of range�KEYWORDS�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. �Local configuration error occurred. Contact the systems administrator for further assistance. �Look for database files in DIR.�Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options.�Missing 2nd delimiter in position %d of expression %s�Missing trailing delimiter in position %d of expression %s�NAME�NUMBER�No default configuration�No logins allowed for `%s'�Not enough memory�OPTION�Other options�Parsing %s�Print program version�Program name: %s�Report bugs to %s. �Resuming parsing %s from line %d�Rule %s at %s:%d matched�Run in test mode.�STRING�Serving interactive shell request for %s by rule %s�Serving request "%s" for %s by rule %s�Set debugging level.�Setting limit %d to %lu�Setting limits for %s�Setting priority to %d�Show at most NUM records.�Show default configuration.�Show entries in chronological order.�Supply user name in test mode.�Too many logins (max %zu) for %s�Transformation map: %s, %s, %s, %u, %u, %s�Transforming command line�Unknown flag in transform expression: %c�Unknown system error�Usage:�Use STRING instead of the default format.�Warning: �You are not permitted to execute this command. Contact the systems administrator for further assistance. �You do not have interactive login access to this machine. Contact the systems administrator for further assistance. �[FILE]�[user [user...]]�acct database is empty�cannot change to dir %s: %s�cannot chroot to %s: %s�cannot create directory %s: %s�cannot enforce gid %lu: %s�cannot enforce uid %lu: %s�cannot open database %s: %s�cannot open database file %s�cannot open file %s: %s�cannot open format file %s�cannot set limits for %s�cannot stat directory %s: %s�cannot stat file %s: %s�cannot stat format file %s�counted %zu/%zu logins for %s�counting logins for %s�debug level set to %d�error setting limit: %s�error setting priority: %s�error writing stop to database file %s: %s�error writing to database %s: %s�extra arguments�invalid command line�invalid format: %s�invalid number (%s)�invalid uid %lu�invalid user name�missing closing quote in string started near `%s'�no argument at index %d in command: %s�no matching rule for "%s", user %s�not enough memory�rushlast - show listing of last Rush logins.�rushwho - show listing of online Rush users.�seteuid(0) succeeded when it should not�the --user option is allowed for the superuser only�unknown keyword: %s�user %s, uid %lu�wordsplit(%s) failed: %s�Project-Id-Version: GNU rush 1.8 Report-Msgid-Bugs-To: bug-rush@gnu.org PO-Revision-Date: 2016-12-17 13:00+0200 Last-Translator: Jorma Karvonen <karvonen.jorma@gmail.com> Language-Team: Finnish <translation-team-fi@lists.sourceforge.net> Language: fi 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.5.4 � Lisenssi GPLv3+: GNU GPL versio 3 tai myöhäisempi <http://gnu.org/licenses/gpl.html> Tämä on vapaa ojelmisto: voit vapaasti muuttaa ja jakaa sitä edelleen. Ohjelmalla EI OLE TAKUUTA siinä laajuudessa, minkä laki sallii. �%s ei ole hakemisto�%s ei ole tavallinen tiedosto�%s: TCPMUX ei vastaa�%s: TCPMUX palautti %s�%s: virheellinen valitsin -- ’%c’ �%s: valitsin vaatii argumentin -- ’%c’ �%s: aliprosessi poistui koodilla %d�%s: aliprosessi päättyi�%s: aliprosessi päättyi signaalilla %d�%s:%d: %s: kohteen %s suorittaminen epäonnistui: %s�%s:%d: %s: fork-funktio epäonnistui: %s�©�Tapahtui järjestelmävirhe, kun yritettiin suorittaa komentoa. Ota yhteyttä järjestelmän ylläpitäjään, jos tarviset tukea. �Lisää tai poista asetuksen turvatarkistus.�TARKISTA�KOMENTO�Tietokannan %s avaaminen epäonnistui: %s�Chroot hakemisto: %s�Komentorivi:�HAKEM�Vianjäljitys: �Poistetaan argumentit %d-%d�Argumentin argv[0] poistaminen ei ole sallittua�Älä näytä otsakeriviä.�Vedosta viimeinen pyyntö testaustilassa.�Ympäristö:�Virheilmoitus: %s�Virhe lähetettäessä vianmäärityssanoma selosteelle %d: %s�Virhe: �Suorita KOMENTO.�Suoritetaan %s, %s�Lopulliset argumentit:�Viimeinen ympäristö:�Tiedoston %s jäsentäminen päättyi�Pakota vuorovaikutteinen komentotulkkiohjelma.�Haaroitettiin prosessi %lu�GID: %lu�Näytä lyhyt käyttöviesti�Näytä tämä opasteluettelo�Kotihakemisto: %s�Ohitetaan puuttuva include-tiedosto %s�Tiedot: �Virheellinen muunnoslauseke: %s�Virheellinen muuntokorvaus: paluuviite lukualueen ulkopuolella�AVAINSANAT�Lisenssi GPLv3+: GNU GPL versio 3 tai myöhäisempi <http://gnu.org/licenses/gpl.html> Tämä on vapaa ohjelmisto: voit vapaasti muuttaa ja jakaa sitä edelleen. Ohjelmalla EI OLE TAKUUTA siinä laajuudessa, minkä laki sallii. �Tapahtui paikallinen asetusvirhe. Ota yhteyttä järjestelmän ylläpitäjään, jos tarviset tukea. �Etsi tietokantatiedostoja hakemistosta HAKEM.�Pakolliset tai valinnaiset argumentit pitkille valitsimelle ovat pakollisia tai valinnaisia myös kaikille vastaaville lyhyille valitsimille.�Puuttuu toinen erotin sijainnissa %d lausekkeessa %s�Puuttuu seuraava erotin sijainnissa %d lausekkeessa %s�NIMI�NUMERO�Ei oletusasetusta�Sisäänkirjautumisia ei sallita käyttäjälle â€%sâ€�Muisti loppui�VALITSIN�Muut valitsimet�Jäsennetään tiedostoa %s�Tulosta ohjelmaversio�Ohjelman nimi: %s�Ilmoita virheistä (englanniksi) osoitteeseen %s. Ilmoita käännösvirheistä osoitteeseen <translation-team-fi@lists.sourceforge.net>. �Jatketaan tiedoston %s jäsentämistä riviltä %d�Sääntö %s osoitteessa %s:%d täsmäsi�Suorita testaustilassa.�MERKKIJONO�Palvellaan vuorovaikutteista komentotulkkipyyntöä kohteelle %s säännöllä %s�Palvellaan pyyntöä â€%s†kohteelle %s säännöllä %s�Aseta vianjäljitystaso.�Asetetaan raja %d arvoon %lu�Asetetaan rajat käyttäjälle %s�Asetetaan prioriteetiksi %d�Näytä enimmillään NUM tietuetta.�Näytä oletusasetukset.�Näytä alkiot aikajärjestyksessä.�Tarjoa käyttäjänimi testitilassa.�Liian monia sisäänkirjautumisia (enintään %zu) käyttäjälle %s�Muunnoskartta: %s, %s, %s, %u, %u, %s�Muunnetaan komentoriviä�Tuntematon lippu muunnoslausekkeessa: %c�Tuntematon järjestelmävirhe�Käyttö:�käytä MERKKIJONOa eikä oletusmuotoa.�Varoitus: �Sinulla ei ole lupaa suorittaa tätä komentoa. Ota yhteyttä järjestelmän ylläpitäjään, jos tarviset tukea. �Sinulla ei ole lupaa avata vuorovaikutteista istuntoa tälle koneelle. Ota yhteyttä järjestelmän ylläpitäjään, jos tarviset tukea. �[TIEDOSTO]�[käyttäjä [käyttäjä...]]�acct-tietokanta on tyhjä�hakemistoon %s vaihtaminen epäonnistui: %s�komennon chroot suorittaminen kohteelle %s epäonnistui: %s�hakemiston %s luominen epäonnistui: %s�ryhmätunnisteen gid %lu vahvistaminen epäonnistui: %s�käyttäjätunnisteen uid %lu vahvistaminen epäonnistui: %s�tietokannan %s avaaminen epäonnistui: %s�tietokantatiedoston %s avaaminen epäonnistui�tiedoston %s avaaminen epäonnistui: %s�muototiedoston %s avaaminen epäonnistui�rajojen asettaminen kohteelle %s epäonnistui�stat-komennon suorittaminen hakemistolle %s epäonnistui: %s�komennon stat suorittaminen tiedostolle %s epäonnistui: %s�stat-komennon suorittaminen muototiedostolle %s epäonnistui�laskettu %zu/%zu sisäänkirjautumista käyttäjälle %s�lasketaan sisäänkirjautumisia käyttäjälle %s�vianjäljitystasoksi asetettiin %d�virhe asetettaessa rajaa: %s�virhe asetettaessa prioriteettia: %s�virhe kirjoitettaessa pysäytystä tietokantatiedostoon %s: %s�virhe kirjoitettaessa tietokantaan %s: %s�lisäargumentit�virheellinen komentorivi�virheellinen muoto: %s�virheellinen numero (%s)�virheellinen käyttäjätunniste uid %lu�virheellinen käyttäjänimi�puuttuva sulkeva lainausmerkki merkkijonossa, joka alkoi lähellä â€%sâ€�ei argumenttia indeksissä %d komennossa: %s�ei täsmäävää sääntöä kohteelle â€%sâ€, käyttäjä %s�muisti ei riitä�rushlast - näytä luettelo viimeisistä Rush-kirjautumisista.�rushwho - näytä luettelo verkossa olevista Rush-käyttäjistä.�seteuid(0) onnistui vaikka sen ei olisi pitänyt�valitsin --user sallitaan vain pääkäyttäjälle�tuntematon avainsana: %s�käyttäjä %s, käyttäjätunniste uid %lu�wordsplit(%s) epäonnistui: %s�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/po/uk.gmo����������������������������������������������������������������������������������0000644�0001750�0001750�00000047661�14655401314�014110� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Þ•����¯������”��é��� ������°��É���±�����{�����‘�����ª�����Å�����Ü�����ø��,��� �����6��.���V��'���…��(���­��"���Ö�����ù��&��������:�� ���Z�����{�����–��w���š��+��������>�����D�����L�����h�� ���w�����…�����‰�����‘�����ª�����É�� ���å�� ����������5���%�����[�����c�����t�����…�����–�����©�����½�����Ö�����é�����ò����� �� ���!��6���.��.���e��-���”��/���Â��2���ò��/���%��%���U�����{�� ���‚��:���£�����Þ��È���ç��^���°�������s���/��5���£��:���Ù��������������� �����9�����T�����f�����o�� ���v�� ���„��)��������¹�����Ï�����à�����ö�� ��� �����+�����D�����V�� ���]��3���k��&���Ÿ�����Æ�����Û�����ó����� ����� �����:��$���V�����{�� ���š��L���»��*��������3�����I�����c�����‚��(���ž�����Ç�����á�����ö��)���ý�� ���'��i���1��t���›���������������(�����?�����[�����s�����’�����­�����È�����ä���������������4�����M�����j�����‚����������¦�����Ä�����Û��1���ñ�����#�����;��*���V�� �����/���¢�����Ò�����â��%���ü��%���" �����H �����] �����u �����ˆ �����¢ �����¶ �����É �����Ø �� ���ë ����� !�����!�����-!�����?!�� ���Y!��1���c!��&���•!��"���¼!�����ß!�����ñ!�����"��%���"��$���:"��,���_"��,���Œ"��'���¹"��'���á"��3��� #�����=#�����O#�����b#�����v#�����ˆ#����� #�����¶#�����Ç#�����ã#��ö��ü#��È���ó%�����¼&��*���Ú&�� ���'�����&'��(���E'�����n'��@���‡'��/���È'��A���ø'��8���:(��7���s(��6���«(��%���â(��<���)��'���E)��8���m)��"���¦)�����É)��ß���Í)��e���­*�����+�����&+��A���5+�����w+�����‘+�����°+�����¿+��+���Ú+��-���,��7���4,��X���l,�����Å,��2���×,��a��� -�����l-�����}-�����œ-��&���¶-��$���Ý-��#���.��=���&.��!���d.�����†.��Y���.��#���é.��#��� /�����1/��r���±/��Y���$0��W���~0��]���Ö0��a���41��;���–1�����Ò1��>���é1��„���(2�����­2��\��Ç2��½���$4��S���â4��„���65��Y���»5��]���6�� ���s6�� ���~6��6���‰6��.���À6��$���ï6�� ���7�� ���!7�����,7�����@7��g���P7��-���¸7�����æ7��#���8��0���*8��L���[8��%���¨8��)���Î8�� ���ø8��$���9��x���(9��Q���¡9��:���ó9��5���.:��3���d:��0���˜:��C���É:��;��� ;��I���I;��W���“;��B���ë;��„���.<��=���³<�����ñ<��8���=��7���J=��-���‚=��L���°=��E���ý=��2���C>�����v>��/���>�����À>��½���Û>��Ú���™?�� ���t@��0���@��+���°@��A���Ü@��H���A��<���gA��6���¤A��6���ÛA��A���B��F���TB��3���›B��>���ÏB��G���C��N���VC��R���¥C��Z���øC�����SD��L���\D��5���©D��?���ßD��c���E��>���ƒE��@���ÂE��O���F��;���SF��Y���F��!���éF��G��� G��B���SG��B���–G��0���ÙG��2��� H��#���=H��B���aH�� ���¤H�����ÅH��*���åH��6���I��@���GI�����ˆI�����¦I��/���ÁI��(���ñI�����J��Y���-J��F���‡J��U���ÎJ��$���$K��2���IK��$���|K��Q���¡K��^���óK��Y���RL��X���¬L��I���M��]���OM��„���­M��+���2N��%���^N��#���„N��'���¨N��E���ÐN��)���O�� ���@O��.���aO�� ���O�����’���¥����������J���o�������H�������g������� ���€�������K���ƒ�������������a���������“�������&�������\������f�������?�������Q���k�������A���5���S���p������¤���V���]������1������z���˜�������ž������¨�������®���>�������”���:������L���e���Ž���Ÿ������j���'���ˆ�������*�����������¯���3���‚�������=���U����������������������‡���œ���|�������i���š���9���q���s�������[�����������������������–���,������ ���©���¦������� ������/���h���0�������M�������{������������£�������%���r���F���§���„�������c���n���"�������D����������•��� �������4���`�������¢���}���¬���_�������v���O����������Š���T���C���#���B���)���†����������—���6���-���G�����������W���Œ���l�������Z���~������8���<�������������‘������^������­��� ���…���«�������.�������m����������™���$�������P���‹���d���Y�������X���‰���7�������x�������+���w������� ���¡���@������� ���u����������I������!���ª�������;���N���E���(���t���R�������y������b����������›���2���� 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. �%s is not a directory�%s is not a regular file�%s: TCPMUX did not respond�%s: TCPMUX returned %s�%s: invalid option -- '%c' �%s: not a number�%s: option '%s%s' doesn't allow an argument �%s: option '%s%s' is ambiguous �%s: option '%s%s' is ambiguous; possibilities:�%s: option '%s%s' requires an argument �%s: option requires an argument -- '%c' �%s: subprocess exited with code %d�%s: subprocess terminated�%s: subprocess terminated on signal %d�%s: unrecognized option '%s%s' �%s:%d: %s: cannot execute %s: %s�%s:%d: %s: cannot fork: %s�(C)�A system error occurred while attempting to execute command. Contact the systems administrator for further assistance. �Add or remove configuration security check.�CHECK�COMMAND�Cannot open database %s: %s�Chroot dir: %s�Command line:�DIR�Debug: �Deleting arguments %d-%d�Deleting argv[0] is prohibited�Do not display header line.�Dump final request in test mode.�Environment:�Error message: %s�Error sending diagnostic message to descriptor %d: %s�Error: �Execute COMMAND.�Executing %s, %s�Final arguments:�Final environment:�Finished parsing %s�Force interactive shell.�Forked process %lu�GID: %lu�Give a short usage message�Give this help list�Home dir: %s�INTERNAL ERROR at %s:%d: can't modify read-only target�INTERNAL ERROR at %s:%d: invalid envar type %d�INTERNAL ERROR at %s:%d: invalid node type %d�INTERNAL ERROR at %s:%d: invalid target type %d�INTERNAL ERROR at %s:%d: unrecognized node type %d�INTERNAL ERROR at %s:%d: unrecognized opcode %d�Ignoring non-existing include file %s�Info: �Invalid transform expression: %s�Invalid transform replacement: back reference out of range�KEYWORDS�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. �Local configuration error occurred. Contact the systems administrator for further assistance. �Look for database files in DIR.�Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options.�Missing 2nd delimiter in position %d of expression %s�Missing trailing delimiter in position %d of expression %s�NAME�NUMBER�No default configuration�No logins allowed for `%s'�Not enough memory�Notice: �OPTION�Other options�Parsing %s�Print grammar and lexical analyzer traces�Print program version�Program name: %s�Removing option %s %s�Report bugs to %s. �Resuming parsing %s from line %d�Rule %s at %s:%d matched�Run in test mode.�STRING�Scanner test.�Serving interactive shell request for %s by rule %s�Serving request "%s" for %s by rule %s�Set debugging level.�Setting limit %d to %lu�Setting limits for %s�Setting priority to %d�Show at most NUM records.�Show default configuration.�Show entries in chronological order.�Supply user name in test mode.�Too many logins (max %zu) for %s�Transform expression must start with 's' followed by a punctuation character�Transformation map: %s, %s, %s, %u, %u, %s�Transforming argv[%d]�Transforming command line�Transforming program name (%s)�Transforming variable %s=%s�Unknown flag in transform expression: %c�Unknown message reference�Unknown system error�Usage:�Use STRING instead of the default format.�Warning: �You are not permitted to execute this command. Contact the systems administrator for further assistance. �You do not have interactive login access to this machine. Contact the systems administrator for further assistance. �[FILE]�[user [user...]]�acct database is empty�cannot change to dir %s: %s�cannot chroot to %s: %s�cannot create directory %s: %s�cannot enforce gid %lu: %s�cannot enforce uid %lu: %s�cannot open database %s: %s�cannot open database file %s�cannot open file %s: %s�cannot open format file %s�cannot set limits for %s�cannot stat directory %s: %s�cannot stat file %s: %s�cannot stat format file %s�chdir %s�counted %zu/%zu logins for %s�counting logins for %s�debug level set to %d�environment transformation is not yet implemented�error setting limit: %s�error setting priority: %s�error writing stop to database file %s: %s�error writing to database %s: %s�expected ~ as the second argument, but found %s�extra arguments�failed to parse value: %s�failed to write message to stderr: %s�failed to write message to stdout: %s�invalid command line�invalid file descriptor�invalid format: %s�invalid include file name�invalid number (%s)�invalid number: %s�invalid opcode�invalid regexp: %s�invalid statement: missing value�invalid time: %s�invalid uid %lu�invalid user name�key field is not a number�missing ]�missing closing quote in string started near `%s'�no argument at index %d in command: %s�no matching rule for "%s", user %s�no such group: %s�no such user: %s�not enough memory�parsing legacy built-in configuration�parsing legacy configuration file %s�rushlast - show listing of last Rush logins.�rushwho - show listing of online Rush users.�seteuid(0) succeeded when it should not�statement cannot be used outside a rule�the --user option is allowed for the superuser only�too few arguments�too many arguments�unknown keyword: %s�unknown limit: %s�unknown regexp flag: %s�unknown statement: %s�user %s, uid %lu�value field is not a number�wordsplit(%s) failed: %s�Project-Id-Version: rush 2.0 Report-Msgid-Bugs-To: bug-rush@gnu.org PO-Revision-Date: 2019-07-01 10:40+0300 Last-Translator: Sergey Poznyakoff <gray@gnu.org> Language-Team: Ukrainian <trans-uk@lists.fedoraproject.org> 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); � Ð›Ñ–Ñ†ÐµÐ½Ð·Ñ–Ñ GPLv3+: GNU GPL верÑÑ–Ñ— 3 або пізнішої <http://gnu.org/licenses/gpl.html> Ðемає ЖОДÐИХ ГÐРÐÐТІЙ, в межах дозволених правом. �%s не Ñ” каталогом�%s не Ñ” звичайним файлом�%s: TCPMUX не відповів�%s: TCPMUX повернув %s�%s: недійÑна Ð¾Ð¿Ñ†Ñ–Ñ -- '%c' �%s: не Ñ” чиÑлом�%s: Ð¾Ð¿Ñ†Ñ–Ñ '%s%s' не може мати аргументу �%s: Ð¾Ð¿Ñ†Ñ–Ñ '%s%s' неоднозначна �%s: Ð¾Ð¿Ñ†Ñ–Ñ '%s%s' неоднозначна: варіанти:�%s: Ð¾Ð¿Ñ†Ñ–Ñ '%s%s' вимагає аргументу �%s: Ð¾Ð¿Ñ†Ñ–Ñ Ð²Ð¸Ð¼Ð°Ð³Ð°Ñ” аргумент -- '%c' �%s: Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð·Ð°Ð²ÐµÑ€ÑˆÐ¸Ð²ÑÑ Ð· кодом %d�%s: Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð·Ð°ÐºÑ–Ð½Ñ‡Ð¸Ð²ÑÑ�%s: Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð·Ð°ÐºÑ–Ð½Ñ‡Ð¸Ð²ÑÑ Ð¿Ð¾ Ñигналу %d�%s: невідома Ð¾Ð¿Ñ†Ñ–Ñ '%s%s' �%s:%d: %s: не вдаєтьÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ %s: %s�%s:%d: %s: помилка fork: %s�(C)�Під Ñ‡Ð°Ñ Ñпроби Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸ ÑталаÑÑ ÑиÑтемна помилка. Ð”Ð»Ñ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¸, зв'ÑжітьÑÑ Ð· адмініÑтратором ÑиÑтеми. �Додає або уÑуває перевірку безпеки файлу конфігурації.�ПЕРЕВІРКÐ�КОМÐÐДÐ�Ðе вдаєтьÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ базу даних %s: %s�Каталог chroot: %s�Командний Ñ€Ñдок:�КÐТÐЛОГ�ÐалагодженнÑ: �УÑÑƒÐ²Ð°Ð½Ð½Ñ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ñ–Ð² %d-%d�УÑÑƒÐ²Ð°Ð½Ð½Ñ argv[0] заборонено�Вимикає Ð´Ñ€ÑƒÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÑƒ.�Друкувати кінцеве Ð·Ð°Ð¿Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð² теÑтовому режимі.�ОточеннÑ:�ÐŸÐ¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾ помилку: %s�Помилка виÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ñ‡ÐµÑ€ÐµÐ· деÑкриптор %d: %s�Помилка: �Виконує команду.�Ð’Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ %s, %s�ОÑтаточні аргументи:�ОÑтаточне оточеннÑ:�Розбір %s закінчено.�ЕмулÑÑ†Ñ–Ñ Ñ–Ð½Ñ‚ÐµÑ€Ð°ÐºÑ‚Ð¸Ð²Ð½Ð¾Ñ— оболонки.�Створено Ð¿Ñ€Ð¾Ñ†ÐµÑ %lu�GID: %lu�Виводить коротке Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾ викориÑтаннÑ.�Показує цю довідку.�Домашній каталог: %s�Ð’ÐУТРІШÐЯ ПОМИЛКРв %s:%d: неможливо модифікувати ціль лише Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ�Ð’ÐУТРІШÐЯ ПОМИЛКРв %s:%d: неправильний тип змінної Ñередовища %d�Ð’ÐУТРІШÐЯ ПОМИЛКРв %s:%d: неправилиний тип вузла %d�Ð’ÐУТРІШÐЯ ПОМИЛКРв %s:%d: неправильний тип цілі %d�Ð’ÐУТРІШÐЯ ПОМИЛКРв %s:%d: непрозпізнаний тип вузла %d�Ð’ÐУТРІШÐЯ ПОМИЛКРв %s:%d: нерозпізнаний код операції %d�Ð†Ð³Ð½Ð¾Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð½ÐµÑ–Ñнуючого файлу %s�ІнформаціÑ: �ÐедійÑний вираз перетворюваннÑ: %s�ÐедійÑний вираз перетворюваннÑ: зворотне поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð·Ð° межами діапазону�КЛЮЧОВІ_СЛОВÐ�Ð›Ñ–Ñ†ÐµÐ½Ð·Ñ–Ñ GPLv3+: GNU GPL верÑÑ–Ñ— 3 або пізнішої <http://gnu.org/licenses/gpl.html> Це Ñ” вільне програмне забезпеченнÑ: ви можете змінювати та розповÑюджувати його. Ðемає ЖОДÐИХ ГÐРÐÐТІЙ, в межах дозволених правом. �Викрито помилку локальної конфігурації. Ð”Ð»Ñ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¸, зв'ÑжітьÑÑ Ð· адмініÑтратором ÑиÑтеми. �Пошук файлів бази даних у вказаному каталогу.�Ðргументи, обов'Ñзкові Ð´Ð»Ñ Ð´Ð¾Ð²Ð³Ð¸Ñ… ключів, Ñ” обов'Ñзковими й Ð´Ð»Ñ ÐºÐ¾Ñ€Ð¾Ñ‚ÐºÐ¸Ñ….�Брак другого роздільника у позиції %d Ð²Ð¸Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ %s�Брак кінцевого роздільника у позиції %d Ð²Ð¸Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ %s�ÐÐЗВÐ�ЧИСЛО�Брак вбудованої конфігурації�Вхід не дозволений Ð´Ð»Ñ `%s'�ÐедоÑтатньо пам'Ñті�Увага: �ОПЦІЯ�Інші опції�Розбір %s�Ð”Ñ€ÑƒÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð¿ÐµÑ€ÐµÐ±Ñ–Ð³Ñƒ граматичного та лекÑичного аналізу�Показує верÑÑ–ÑŽ програми.�Ðазва програми: %s�Ð’Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð¾Ð¿Ñ†Ñ–Ñ— %s %s�Про помилки звітуйте на %s. �Ð’Ñ–Ð´Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ñ€Ð¾Ð·Ð±Ð¾Ñ€Ñƒ %s починаючи з Ñ€Ñдку %d�ПаÑує правило %s в %s:%d�Вмикає теÑтовий режим.�РЯДОК�ТеÑÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñканера.�ОбÑÐ»ÑƒÐ³Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð°Ð¿Ð¸Ñ‚Ñƒ інтерактивного доÑтупу Ð´Ð»Ñ %s за правилом %s�ОбÑÐ»ÑƒÐ³Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð°Ð¿Ð¸Ñ‚Ñƒ "%s" Ð´Ð»Ñ %s за правилом %s�Ð’Ñтановлює рівень налагодженнÑ�Ð’ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ %d у %lu�Ð’ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½ÑŒ Ð´Ð»Ñ %s�Ð’ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ñ–Ð¾Ñ€Ð¸Ñ‚ÐµÑ‚Ñƒ %d�Обмежує кількіÑть запиÑів у видруку.�Показує вбудовану конфігурацію.�Друкує логіни у хронологічному порÑдку.�Ð’Ñтановити ім'Ñ ÐºÐ¾Ñ€Ð¸Ñтувача у теÑтовому режимі.�Забагато логинів (Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ %zu) Ð´Ð»Ñ %s�Вираз Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€ÑŽÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ð²Ð¸Ð½ÐµÐ½ починатиÑÑ Ð· літери 's' та знаку пунктуації�Мапа перетворюваннÑ: %s, %s, %s, %u, %u, %s�ÐœÐ¾Ð´Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ argv[%d]�ÐŸÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð³Ð¾ Ñ€Ñдка�ÐœÐ¾Ð´Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ Ð½Ð°Ð·Ð²Ð¸ програми (%s)�ÐŸÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð·Ð¼Ñ–Ð½Ð½Ð¾Ñ— %s=%s�Ðезнана ознака у виразі перетворюваннÑ: %c�ПоÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð´Ð¾ невідомого повідомленнÑ�Ðевідомий тип повідомленнÑ�ВикориÑтаннÑ:�Ð’Ñтановлює формат виводу.�ПопередженнÑ: �Вам не дозволено Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ñ†Ñ–Ñ”Ñ— команди. Ð”Ð»Ñ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¸, зв'ÑжітьÑÑ Ð· адмініÑтратором ÑиÑтеми. �Ви не маєте права інтерактивного доÑтупу до цієї машини. Ð”Ð»Ñ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¸, зв'ÑжітьÑÑ Ð· адмініÑтратором ÑиÑтеми. �[ФÐЙЛ]�[кориÑтувач [кориÑтувач...]]�база даних обліку пуÑта�не вдаєтьÑÑ Ð¿ÐµÑ€ÐµÐ¹Ñ‚Ð¸ до каталогу %s: %s�не вдаєтьÑÑ Ð·Ñ€Ð¾Ð±Ð¸Ñ‚Ð¸ chroot до каталогу %s: %s�не вдаєтьÑÑ Ñтворити каталог %s: %s�не вдаєтьÑÑ Ð²Ñтановити GID %lu: %s�не вдаєтьÑÑ Ð²Ñтановити UID %lu: %s�не вдаєтьÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ базу даних %s: %s�не вдаєтьÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ файл бази даних %s�неможливо відкрити файл %s: %s�неможливо відкрити файл формату %s�не вдаєтьÑÑ Ð²Ñтановити Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ Ð´Ð»Ñ %s�не вдаєтьÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ дані про каталог %s: %s�не вдаєтьÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ інформацію про файл %s: %s�неможливо отримати інформацію про файл формату %s�chdir %s�кількіÑть логинів Ð´Ð»Ñ %3$s Ñтановить %1$zu/%2$zu�Ñ€Ð°Ñ…ÑƒÐ²Ð°Ð½Ð½Ñ ÐºÑ–Ð»ÑŒÐºÐ¾Ñті входів %s�вÑтановлено рівень Ð½Ð°Ð»Ð°Ð³Ð¾Ð´Ð¶ÐµÐ½Ð½Ñ %d�Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð·Ð¼Ñ–Ð½Ð½Ð¸Ñ… Ð¾Ñ‚Ð¾Ñ‡ÐµÐ½Ð½Ñ Ñ‰Ðµ не заімплементоване�помилка вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ: %s�помилка вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ñ–Ð¾Ñ€Ð¸Ñ‚ÐµÑ‚Ñƒ: %s�помилка запиÑу термінатора до Ñкриньки %s: %s�Помилка запиÑу до бази даних %s: %s�очікувалоÑÑŒ ~ у другому аргументі, але отримано %s�додатні аргументи�не вдаєтьÑÑ Ð¿Ñ€Ð¾Ð°Ð½Ð°Ð»Ñ–Ð·ÑƒÐ²Ð°Ñ‚Ð¸ значеннÑ: %s�помилка запиÑу Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼ÐµÐ½Ð½Ñ Ð´Ð¾ stderr: %s�помилка запиÑу Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼ÐµÐ½Ð½Ñ Ð´Ð¾ stdout: %s�недійÑний командний Ñ€Ñдок�недійÑний деÑкриптор файлу�недійÑний формат: %s�недійÑна назва файлу що включаєтьÑÑ�недійÑне чиÑло (%s)�недійÑне чиÑло: %s�недійÑний код операції�недійÑний регулÑрний вираз: %s�недійÑна інÑтрукціÑ: брак значеннÑ�недійÑний чаÑ: %s�недійÑний UID %lu�недійÑне Ім'Ñ ÐºÐ¾Ñ€Ð¸Ñтувача�поле ключа не Ñ” чиÑлом�відÑÑƒÑ‚Ð½Ñ ]�брак замикаючої лапки у Ñ€Ñдку, що почавÑÑ Ð±Ñ–Ð»Ñ `%s'�брак аргументу в позиції %d у команді: %s�жодне правило не паÑує до "%s", від кориÑтувача %s�немає такої групи: %s�немає такого кориÑтувача: %s�недоÑтатньо пам'Ñті�Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð·Ð°Ñтарілої вбудованої конфігурації�Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð° конфігурації %s в заÑтарілому форматі�rushlast - друкує перелік оÑтанніх логувань через Rush.�rushwho - друкує перелік активних логувань через Rush.�виклик seteuid(0) вдавÑÑ, хоча не повинен був�інÑтрукцію не можна викориÑтовувати поза правилом�викориÑÑ‚Ð°Ð½Ð½Ñ Ð¾Ð¿Ñ†Ñ–Ñ— --user дозволено тільки привилейованому кориÑтувачеві�недоÑтатньо аргументів�забагато аргументів�невідома команда: %s�невідоме обмеженнÑ: %s�невідома ознака регулÑрного виразу: %s�невідома інÑтрукціÑ: %s�кориÑтувач %s, UID %lu�поле Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð½Ðµ Ñ” чиÑлом�помилка wordsplit(%s): %s��������������������������������������������������������������������������������rush-2.4/po/vi.po�����������������������������������������������������������������������������������0000644�0001750�0001750�00000064012�14655401314�013730� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Vietnamese translation for Rush. # Bản dịch tiến Việt dành cho Rush. # Copyright © 2016 Free Software Foundation, Inc. # This file is distributed under the same license as the rush package. # Clytie Siddall <clytie@riverland.net.au>, 2009, 2010. # Trần Ngá»c Quân <vnwildman@gmail.com>, 2016. # #: rwopt.opt:23 msgid "" msgstr "" "Project-Id-Version: rush 1.8\n" "Report-Msgid-Bugs-To: bug-rush@gnu.org\n" "POT-Creation-Date: 2024-08-09 14:51+0300\n" "PO-Revision-Date: 2016-10-03 07:06+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" #: src/config.c:163 #, c-format msgid "Finished parsing %s" msgstr "Hoàn tất phân tích cú pháp cá»§a %s" #: src/config.c:169 #, c-format msgid "Resuming parsing %s from line %d" msgstr "Äang tiếp tục lại phân tích cú pháp cá»§a %s từ dòng %d" #: src/config.c:262 #, fuzzy, c-format msgid "invalid number: %s" msgstr "con số không hợp lệ (%s)" #: src/config.c:275 #, fuzzy msgid "invalid opcode" msgstr "%s:%d: mã thao tác không hợp lệ" #: src/config.c:297 #, fuzzy, c-format msgid "invalid regexp: %s" msgstr "%s:%d: biểu thức chính quy không hợp lệ: %s" #: src/config.c:336 #, fuzzy, c-format msgid "unknown regexp flag: %s" msgstr "%s:%d: không rõ cá» biểu thức chính quy: %s" #: src/config.c:353 #, fuzzy msgid "too few arguments" msgstr "%s:%d: quá ít đối số" #: src/config.c:357 src/rush.c:1381 #, fuzzy msgid "too many arguments" msgstr "%s:%d: quá nhiá»u đối số" #: src/config.c:428 #, fuzzy, c-format msgid "no such user: %s" msgstr "%s:%d: không có ngưá»i dùng như vậy: %s" #: src/config.c:453 src/config.c:1106 #, fuzzy, c-format msgid "no such group: %s" msgstr "%s:%d: không có nhóm như vậy: %s" #: src/config.c:543 #, fuzzy, c-format msgid "unknown limit: %s" msgstr "%s:%d: không rõ giá»›i hạn: %s" #: src/config.c:560 #, fuzzy, c-format msgid "expected ~ as the second argument, but found %s" msgstr "%s:%d: cần “~†là đối số thứ hai, nhưng lại nhận được %s" #: src/config.c:718 #, c-format msgid "debug level set to %d" msgstr "cấp gỡ lá»—i được đăt thành %d" #: src/config.c:730 #, fuzzy, c-format msgid "invalid time: %s" msgstr "%s:%d: thá»i gian không hợp lệ: %s" #: src/config.c:786 #, fuzzy msgid "invalid file descriptor" msgstr "%s:%d: bá»™ mô tả tập tin không hợp lệ" #: src/config.c:800 #, fuzzy msgid "Unknown message reference" msgstr "Không rõ tham chiếu thông Ä‘iệp: %s\n" #: src/config.c:893 #, fuzzy msgid "invalid include file name" msgstr "%s:%d: tên tập tin bao gồm không hợp lệ" #: src/config.c:900 #, c-format msgid "Ignoring non-existing include file %s" msgstr "Äang bá» qua tập tin bao gồm không tồn tại %s" #: src/config.c:906 #, c-format msgid "cannot stat file %s: %s" msgstr "không thể lấy thống kê cho tập tin %s: %s" #: src/config.c:934 rushopt.opt:90 #, c-format msgid "unknown keyword: %s" msgstr "không rõ từ khóa: %s" #: src/config.c:982 #, fuzzy msgid "key field is not a number" msgstr "%s:%d: trưá»ng khóa không phải là con số" #: src/config.c:988 #, fuzzy msgid "value field is not a number" msgstr "%s:%d: trưá»ng giá trị không phải là con số" #: src/config.c:1033 src/config.c:1038 src/rush.c:262 #, fuzzy, c-format msgid "%s: not a number" msgstr "%s:%d: %s: không phải con số" #: src/config.c:1211 src/config.c:1340 #, c-format msgid "Parsing %s" msgstr "Äang phân tích cú pháp cá»§a %s" #: src/config.c:1245 #, fuzzy, c-format msgid "unknown statement: %s" msgstr "%s:%d: không rõ câu lệnh: %s" #: src/config.c:1280 #, fuzzy msgid "missing ]" msgstr "%s:%d: thiếu ]" #: src/config.c:1289 #, fuzzy msgid "invalid statement: missing value" msgstr "%s:%d: biểu thức không hợp lệ: giá trị còn thiếu" #: src/config.c:1310 #, fuzzy, c-format msgid "failed to parse value: %s" msgstr "%s:%d: không phân tích được cú pháp cá»§a giá trị: %s" #: src/config.c:1328 #, fuzzy msgid "statement cannot be used outside a rule" msgstr "%s:%d: câu lệnh không thể được dùng bên ngoài má»™t quy tắc" #: src/config.c:1366 #, fuzzy msgid "parsing legacy built-in configuration" msgstr "Không có cấu hình mặc định" #: src/config.c:1368 #, fuzzy, c-format msgid "parsing legacy configuration file %s" msgstr "gặp lá»—i khi phân tích cú pháp cá»§a tập tin cấu hình" #: src/limits.c:53 #, c-format msgid "Setting limit %d to %lu" msgstr "Äang đặt giá»›i hạn %d thành %lu" #: src/limits.c:58 #, c-format msgid "error setting limit: %s" msgstr "gặp lá»—i khi đặt giá»›i hạn: %s" #: src/limits.c:68 #, c-format msgid "Setting priority to %d" msgstr "Äang đặt mức ưu tiên thành %d" #: src/limits.c:70 #, c-format msgid "error setting priority: %s" msgstr "gặp lá»—i khi đặt mức ưu tiên: %s" #: src/limits.c:86 src/limits.c:87 #, c-format msgid "No logins allowed for `%s'" msgstr "không cho phép đăng nhập đối vá»›i “%sâ€" #: src/limits.c:91 #, c-format msgid "counting logins for %s" msgstr "Ä‘ang đếm các lần đăng nhập đối vá»›i %s" #: src/limits.c:97 msgid "acct database is empty" msgstr "cÆ¡ sở dữ liệu acct vẫn trống" #: src/limits.c:101 #, c-format msgid "Cannot open database %s: %s" msgstr "Không thể mở cÆ¡ sở dữ liệu %s: %s" #: src/limits.c:119 #, c-format msgid "counted %zu/%zu logins for %s" msgstr "đã đếm %zu/%zu lần đăng nhập đối vá»›i %s" #: src/limits.c:126 src/limits.c:128 #, c-format msgid "Too many logins (max %zu) for %s" msgstr "Quá nhiá»u lần đăng nhập (tối Ä‘a %zu) đối vá»›i %s" #: src/limits.c:143 #, c-format msgid "Setting limits for %s" msgstr "Äang đặt các giá»›i hạn cho %s" #: src/rush.c:43 msgid "" "You are not permitted to execute this command.\n" "Contact the systems administrator for further assistance.\n" msgstr "" "Bạn không có quyá»n thá»±c hiện câu lệnh này.\n" "Hãy liên lạc vá»›i quản trị hệ thống.\n" #: src/rush.c:47 msgid "" "You do not have interactive login access to this machine.\n" "Contact the systems administrator for further assistance.\n" msgstr "" "Bạn không có quyá»n truy cập đến mày này bằng cách đăng nhập tương tác.\n" "Hãy liên lạc vá»›i quản trị hệ thống.\n" #: src/rush.c:51 msgid "" "Local configuration error occurred.\n" "Contact the systems administrator for further assistance.\n" msgstr "" "Lá»—i cấu hình cục bá»™.\n" "Hãy liên lạc vá»›i quản trị hệ thống.\n" #: src/rush.c:55 msgid "" "A system error occurred while attempting to execute command.\n" "Contact the systems administrator for further assistance.\n" msgstr "" "Gặp lá»—i hệ thống trong khi thá»­ thá»±c hiện câu lệnh.\n" "Hãy liên lạc vá»›i quản trị hệ thống.\n" #: src/rush.c:156 #, c-format msgid "failed to write message to stderr: %s" msgstr "" #: src/rush.c:160 #, c-format msgid "failed to write message to stdout: %s" msgstr "" #: src/rush.c:172 #, c-format msgid "Debug: " msgstr "Gỡ lá»—i: " #: src/rush.c:176 #, c-format msgid "Info: " msgstr "Thông tin: " #: src/rush.c:180 #, c-format msgid "Notice: " msgstr "" #: src/rush.c:184 #, c-format msgid "Warning: " msgstr "Cảnh báo : " #: src/rush.c:191 #, c-format msgid "Error: " msgstr "Lá»—i: " #: src/rush.c:248 msgid "Not enough memory" msgstr "Không đủ bá»™ nhá»›" #: src/rush.c:279 src/rush.c:324 #, c-format msgid "INTERNAL ERROR at %s:%d: unrecognized opcode %d" msgstr "" #: src/rush.c:408 #, fuzzy, c-format msgid "%s:%d: %s: can't stat '%s': %s" msgstr "%s:%d: không thể lấy thống kê cho %s: %s" #: src/rush.c:469 #, fuzzy, c-format msgid "INTERNAL ERROR at %s:%d: unrecognized operation %d" msgstr "%s: không nhận ra tùy chá»n “--%sâ€\n" #: src/rush.c:509 #, c-format msgid "INTERNAL ERROR at %s:%d: unrecognized node type %d" msgstr "" #: src/rush.c:718 #, c-format msgid "INTERNAL ERROR at %s:%d: invalid envar type %d" msgstr "" #: src/rush.c:723 msgid "Final environment:" msgstr "Môi trưá»ng cuối cùng:" #: src/rush.c:737 #, c-format msgid "wordsplit(%s) failed: %s" msgstr "wordsplit(%s) bị lá»—i: %s" #: src/rush.c:763 #, c-format msgid "no argument at index %d in command: %s" msgstr "không có đối số ở chỉ mục %d trong câu lệnh %s" #: src/rush.c:906 #, c-format msgid "Removing option %s %s" msgstr "" #: src/rush.c:918 msgid "Transforming command line" msgstr "Äang chuyển dạng dòng lệnh" #: src/rush.c:925 #, fuzzy, c-format msgid "Transforming program name (%s)" msgstr "Äang sá»­a đổi tên chương trình (%s)" #: src/rush.c:943 #, fuzzy, c-format msgid "Transforming argv[%d]" msgstr "Äang sá»­a đổi argv[%d]" #: src/rush.c:950 #, fuzzy, c-format msgid "Transforming variable %s=%s" msgstr "Äang chuyển dạng dòng lệnh" #: src/rush.c:957 src/rush.c:1043 msgid "environment transformation is not yet implemented" msgstr "" #: src/rush.c:961 #, c-format msgid "INTERNAL ERROR at %s:%d: can't modify read-only target" msgstr "" #: src/rush.c:980 #, c-format msgid "Transformation map: %s, %s, %s, %u, %u, %s" msgstr "SÆ¡ đồ chuyển dạng: %s, %s, %s, %u, %u, %s" #: src/rush.c:994 #, c-format msgid "INTERNAL ERROR at %s:%d: invalid node type %d" msgstr "" #: src/rush.c:1001 #, c-format msgid "transformed value: %s" msgstr "" #: src/rush.c:1022 #, c-format msgid "Deleting arguments %d-%d" msgstr "Äang xóa các đối số %d-%d" #: src/rush.c:1025 msgid "Deleting argv[0] is prohibited" msgstr "Không cho phép xóa argv[0]" #: src/rush.c:1047 #, c-format msgid "INTERNAL ERROR at %s:%d: invalid target type %d" msgstr "" #: src/rush.c:1065 #, c-format msgid "Program name: %s" msgstr "Tên chương trình: %s" #: src/rush.c:1066 msgid "Final arguments:" msgstr "Các đối số cuối cùng:" #: src/rush.c:1084 #, c-format msgid "error writing to database %s: %s" msgstr "gặp lá»—i khi ghi vào cÆ¡ sở dữ liệu %s: %s" #: src/rush.c:1093 #, c-format msgid "error writing stop to database file %s: %s" msgstr "gặp lá»—i khi ghi dừng vào cÆ¡ sở dữ liệu %s: %s" #: src/rush.c:1114 #, c-format msgid "%s:%d: %s: cannot fork: %s" msgstr "%s:%d: %s: không thể phân nhánh: %s" #: src/rush.c:1124 #, c-format msgid "Forked process %lu" msgstr "Tiến trình đã phân nhánh %lu" #: src/rush.c:1128 #, c-format msgid "%s: subprocess exited with code %d" msgstr "%s: tiến trình con đã kết thúc vá»›i mã %d" #: src/rush.c:1131 #, c-format msgid "%s: subprocess terminated on signal %d" msgstr "%s: tiến trình con bị chấm dứt do tín hiệu %d" #: src/rush.c:1134 #, c-format msgid "%s: subprocess terminated" msgstr "%s: tiến trình con bị chấm dứt" #: src/rush.c:1223 #, c-format msgid "cannot enforce gid %lu: %s" msgstr "không thể ép buá»™c GID %lu: %s" #: src/rush.c:1228 #, c-format msgid "cannot enforce uid %lu: %s" msgstr "không thể ép buá»™c UID %lu: %s" #: src/rush.c:1233 msgid "seteuid(0) succeeded when it should not" msgstr "seteuid(0) thành công khi không nên" #: src/rush.c:1239 #, c-format msgid "Rule %s at %s:%d matched" msgstr "Quy tắc %s ở %s:%d được khá»›p" #: src/rush.c:1253 #, c-format msgid "Error message: %s" msgstr "Thông báo lá»—i: %s" #: src/rush.c:1256 #, c-format msgid "Error sending diagnostic message to descriptor %d: %s" msgstr "Gặp lá»—i khi gá»­i thông Ä‘iệp chẩn Ä‘oán cho bá»™ mô tả %d: %s" #: src/rush.c:1262 #, c-format msgid "cannot set limits for %s" msgstr "không đặt được giá»›i hạn cho %s" #: src/rush.c:1269 #, c-format msgid "Chroot dir: %s" msgstr "Thư mục chroot: %s" #: src/rush.c:1276 #, c-format msgid "Home dir: %s" msgstr "Thư mục chính: %s" #: src/rush.c:1281 #, c-format msgid "GID: %lu" msgstr "GID: %lu" #: src/rush.c:1306 #, c-format msgid "cannot open database %s: %s" msgstr "không thể mở cÆ¡ sở dữ liệu %s: %s" #: src/rush.c:1315 #, c-format msgid "cannot chroot to %s: %s" msgstr "không thể chuyển thư mục gốc (chroot) sang %s: %s" #: src/rush.c:1322 src/rush.c:1414 #, c-format msgid "invalid uid %lu" msgstr "UID sai %lu" #: src/rush.c:1327 #, c-format msgid "chdir %s" msgstr "" #: src/rush.c:1330 #, c-format msgid "cannot change to dir %s: %s" msgstr "không thể chuyển đổi sang thư mục %s: %s" #: src/rush.c:1334 #, c-format msgid "Executing %s, %s" msgstr "Äang thá»±c hiện %s, %s" #: src/rush.c:1349 #, c-format msgid "%s:%d: %s: cannot execute %s: %s" msgstr "%s:%d: %s: không thể thá»±c hiện %s: %s" #: src/rush.c:1392 src/rush.c:1394 msgid "invalid command line" msgstr "dòng lệnh không hợp lệ" #: src/rush.c:1405 msgid "invalid user name" msgstr "tên ngưá»i dùng sai" #: src/rush.c:1416 #, c-format msgid "user %s, uid %lu" msgstr "ngưá»i dùng %s, UID %lu" #: src/rush.c:1428 msgid "Command line:" msgstr "Dòng lệnh:" #: src/rush.c:1431 msgid "Environment:" msgstr "Môi trưá»ng:" #: src/rush.c:1462 #, c-format msgid "Serving interactive shell request for %s by rule %s" msgstr "Äang phục vụ yêu cầu hệ vá» tương tác cho %s theo quy tắc %s" #: src/rush.c:1466 #, c-format msgid "Serving request \"%s\" for %s by rule %s" msgstr "Äang phục vụ yêu cầu “%s†cho %s tùy theo quy tắc %s" #: src/rush.c:1472 #, c-format msgid "no matching rule for \"%s\", user %s" msgstr "không tìm thấy quy tắc tương ứng vá»›i “%sâ€, ngưá»i dùng %s" #: src/rushlast.c:31 src/rushwho.c:30 #, c-format msgid "not enough memory" msgstr "không đủ bá»™ nhá»›" #: src/rushlast.c:78 src/rushwho.c:67 #, c-format msgid "invalid format: %s" msgstr "sai định dạng: %s" #: src/rushlast.c:88 src/rushwho.c:77 #, c-format msgid "cannot open database file %s" msgstr "không thể mở tập tin cÆ¡ sở dữ liệu %s" #: src/rushwho.c:61 #, c-format msgid "extra arguments" msgstr "đối số bổ sung" #: src/socket.c:61 #, c-format msgid "%s: TCPMUX did not respond" msgstr "%s: TCPMUX chưa đáp ứng" #: src/socket.c:65 #, c-format msgid "%s: TCPMUX returned %s" msgstr "%s: TCPMUX trả lại %s" #: src/transform.c:155 msgid "" "Transform expression must start with 's' followed by a punctuation character" msgstr "" #: src/transform.c:166 #, c-format msgid "Missing 2nd delimiter in position %d of expression %s" msgstr "Thiếu dấu định giá»›i thứ 2 ở vị trí %d cá»§a biểu thức %s" #: src/transform.c:176 #, c-format msgid "Missing trailing delimiter in position %d of expression %s" msgstr "Thiếu dấu định giá»›i theo sau ở vị trí %d cá»§a biểu thức %s" #: src/transform.c:203 #, c-format msgid "Unknown flag in transform expression: %c" msgstr "Không rõ cá» trong biểu thức chuyển dạng: %c" #: src/transform.c:220 #, c-format msgid "Invalid transform expression: %s" msgstr "Biểu thức chuyển dạng không hợp lệ: %s" #: src/transform.c:248 msgid "Invalid transform replacement: back reference out of range" msgstr "Sai thay thế khi chuyển dạng: tham chiếu ngược ở ngoại phạm vi" #: rushopt.opt:27 rlopt.opt:56 msgid "NUMBER" msgstr "Sá»" #: rushopt.opt:27 msgid "Set debugging level." msgstr "Äặt cấp gỡ lá»—i." #: rushopt.opt:35 msgid "Run in test mode." msgstr "Chạy ở chế độ thá»­." #: rushopt.opt:41 msgid "Scanner test." msgstr "" #: rushopt.opt:47 msgid "Print grammar and lexical analyzer traces" msgstr "" #: rushopt.opt:53 msgid "NAME" msgstr "TÊN" #: rushopt.opt:53 msgid "Supply user name in test mode." msgstr "Ãp dụng tên ngưá»i dùng trong chế độ thá»­." #: rushopt.opt:65 msgid "COMMAND" msgstr "CÂU_LỆNH" #: rushopt.opt:65 msgid "Execute COMMAND." msgstr "Thá»±c hiện câu lệnh này." #: rushopt.opt:71 msgid "Force interactive shell." msgstr "Ép buá»™c hệ vá» tương tác." #: rushopt.opt:78 msgid "KEYWORDS" msgstr "CÃC_TỪ_KHÓA" #: rushopt.opt:78 msgid "Dump final request in test mode." msgstr "Äổ yêu cầu cuối ở chế độ thá»­." #: rushopt.opt:85 msgid "CHECK" msgstr "HÀM_THỬ" #: rushopt.opt:85 msgid "Add or remove configuration security check." msgstr "Thêm hay gỡ bá» hàm kiểm tra tình trạng bảo mật." #: rushopt.opt:93 msgid "Show default configuration." msgstr "Hiển thị cấu hình mặc định." #: rushopt.opt:102 rwopt.opt:40 rlopt.opt:82 msgid "Other options" msgstr "Tùy chá»n khác" #: rushopt.opt:102 rwopt.opt:40 rlopt.opt:82 msgid "Give this help list" msgstr "Hiển thị trợ giúp này" #: rushopt.opt:102 rwopt.opt:40 rlopt.opt:82 msgid "Give a short usage message" msgstr "Hiện trợ giúp ngắn gá»n" #: rushopt.opt:102 rwopt.opt:40 rlopt.opt:82 msgid "Print program version" msgstr "In ra phiên bản chương trình" #: rushopt.opt:23 #, fuzzy msgid "rush - restricted user shell." msgstr "rush — má»™t hệ vá» ngưá»i dùng bị hạn chế." #: rushopt.opt:25 msgid "[FILE]" msgstr "[TẬP_TIN]" #: rushopt.opt:125 rushopt.opt:359 rwopt.opt:123 rwopt.opt:357 rlopt.opt:126 #: rlopt.opt:360 msgid "Usage:" msgstr "Cách dùng:" #: rushopt.opt:125 rwopt.opt:123 rlopt.opt:126 msgid "OPTION" msgstr "TÙY_CHỌN" #: rushopt.opt:243 rwopt.opt:241 rlopt.opt:244 msgid "" "Mandatory or optional arguments to long options are also mandatory or " "optional for any corresponding short options." msgstr "" "Các đối số là bắt buá»™c hay chỉ là tùy chá»n khi dùng vá»›i tùy chá»n dài thì tùy " "chá»n ngắn tương ứng cÅ©ng vậy." #: rushopt.opt:247 rwopt.opt:245 rlopt.opt:248 #, c-format msgid "Report bugs to %s.\n" msgstr "" "Hãy thông báo lá»—i cho %s.\n" "Thông báo lá»—i dịch cho: <http://translationproject.org/team/vi.html>.\n" #: rushopt.opt:700 rwopt.opt:698 rlopt.opt:701 msgid "(C)" msgstr "©" #: rushopt.opt:718 rwopt.opt:716 rlopt.opt:719 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" #: rushopt.opt:60 msgid "the --user option is allowed for the superuser only" msgstr "tùy chá»n “--user†được phép chỉ cho siêu ngưá»i dùng thôi" #: rushopt.opt:100 #, c-format msgid "No default configuration" msgstr "Không có cấu hình mặc định" #: rwopt.opt:24 rlopt.opt:28 msgid "STRING" msgstr "CHUá»–I" #: rwopt.opt:24 rlopt.opt:28 msgid "Use STRING instead of the default format." msgstr "Dùng chuá»—i này thay cho định dạng mặc định." #: rwopt.opt:30 rlopt.opt:35 msgid "DIR" msgstr "TMỤC" #: rwopt.opt:30 rlopt.opt:35 msgid "Look for database files in DIR." msgstr "Tìm tập tin cÆ¡ sở dữ liệu trong thư mục này." #: rwopt.opt:36 rlopt.opt:49 msgid "Do not display header line." msgstr "Không hiển thị dòng phần đầu." #: rwopt.opt:21 msgid "rushwho - show listing of online Rush users." msgstr "rushwho — hiển thị danh sách các ngưá»i dùng Rush trá»±c tuyến." #: rlopt.opt:42 msgid "Show entries in chronological order." msgstr "Hiển thị các mục nhập theo thứ tá»± thá»i gian." #: rlopt.opt:56 msgid "Show at most NUM records." msgstr "Hiển thị nhiá»u nhất Sá» mục ghi." #: rlopt.opt:24 msgid "rushlast - show listing of last Rush logins." msgstr "rushlast — hiển thị danh sách các sá»± đăng nhập Rush cuối cùng." #: rlopt.opt:26 msgid "[user [user...]]" msgstr "[ngưá»i_dùng [ngưá»i_dùng…]]" #: rlopt.opt:63 #, c-format msgid "invalid number (%s)" msgstr "con số không hợp lệ (%s)" #: lib/readfmt.c:40 #, c-format msgid "cannot stat format file %s" msgstr "không thể lấy thống kê cho tập tin định dạng %s" #: lib/readfmt.c:42 #, c-format msgid "%s is not a regular file" msgstr "%s không phải là má»™t tập tin tiêu chuẩn" #: lib/readfmt.c:46 #, c-format msgid "cannot open format file %s" msgstr "không thể mở tập tin định dạng %s" #: lib/rushdb.c:79 #, c-format msgid "cannot create directory %s: %s" msgstr "không thể tạo thư mục %s: %s" #: lib/rushdb.c:84 #, c-format msgid "cannot stat directory %s: %s" msgstr "không thể lấy thống kê cho thư mục %s: %s" #: lib/rushdb.c:89 #, c-format msgid "%s is not a directory" msgstr "%s không phải thư mục" #: lib/rushdb.c:100 lib/rushdb.c:114 #, c-format msgid "cannot open file %s: %s" msgstr "không thể mở tập tin %s: %s" #: lib/rushdb.c:586 #, c-format msgid "missing closing quote in string started near `%s'" msgstr "thiếu dấu trích dẫn đóng trong chuá»—i đã bắt đầu gần “%sâ€" #: lib/version.c:28 msgid "" "\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" msgstr "" "\n" "Giấy phép GPL pb3+: Giấy phép Công cá»™ng GNU phiên bản 3 và 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 kiện được pháp luật cho phép\n" "\n" #: gnu/error.c:194 msgid "Unknown system error" msgstr "Lá»—i hệ thống không rõ" #: gnu/getopt.c:278 #, fuzzy, c-format msgid "%s: option '%s%s' is ambiguous\n" msgstr "%s: tùy chá»n “%s†chưa rõ ràng\n" #: gnu/getopt.c:284 #, fuzzy, c-format msgid "%s: option '%s%s' is ambiguous; possibilities:" msgstr "%s: tùy chá»n \"%s\" chưa rõ ràng; khả năng là:" #: gnu/getopt.c:319 #, fuzzy, c-format msgid "%s: unrecognized option '%s%s'\n" msgstr "%s: không nhận ra tùy chá»n “%c%sâ€\n" #: gnu/getopt.c:345 #, fuzzy, c-format msgid "%s: option '%s%s' doesn't allow an argument\n" msgstr "%s: tùy chá»n “%c%s†không cho phép đối số\n" #: gnu/getopt.c:360 #, fuzzy, c-format msgid "%s: option '%s%s' requires an argument\n" msgstr "%s: tùy chá»n “--%s†yêu cầu má»™t đối số\n" #: gnu/getopt.c:621 #, c-format msgid "%s: invalid option -- '%c'\n" msgstr "%s: tùy chá»n không hợp lệ -- “%câ€\n" #: gnu/getopt.c:636 gnu/getopt.c:682 #, c-format msgid "%s: option requires an argument -- '%c'\n" msgstr "%s: tùy chá»n yêu cầu má»™t đối số -- “%câ€\n" #, c-format #~ msgid "Ignoring non-existing file %s" #~ msgstr "Äang bá» qua tập tin không tồn tại %s" #, c-format #~ msgid "%s: file is not safe" #~ msgstr "%s: tập tin không an toàn" #, c-format #~ msgid "error reading file %s: %s" #~ msgstr "gặp lá»—i khi Ä‘á»c tập tin %s: %s" #, c-format #~ msgid "read 0 bytes from file %s" #~ msgstr "đã Ä‘á»c 0 byte từ tập tin %s" #~ msgid "not an absolute directory name" #~ msgstr "không phải là má»™t tên thư mục tuyệt đối" #, c-format #~ msgid "%s:%d: %s is not a directory" #~ msgstr "%s:%d: %s không phải thư mục" #, c-format #~ msgid "%s:%d: invalid number: %s" #~ msgstr "%s:%d: con số không hợp lệ: %s" #, c-format #~ msgid "%s:%d: invalid chroot directory" #~ msgstr "%s:%d: thư mục chroot không hợp lệ" #, c-format #~ msgid "%s:%d: invalid home directory" #~ msgstr "%s:%d: thư mục chính không hợp lệ" #, c-format #~ msgid "%s:%d: Unknown message reference" #~ msgstr "%s:%d: không rõ tham chiếu thông Ä‘iệp" #, c-format #~ msgid "%s:%d: expected boolean value, but found `%s'" #~ msgstr "%s:%d: cần giá trị luận lý, nhưng lại nhận được “%sâ€" #, c-format #~ msgid "%s:%d: unknown address family" #~ msgstr "%s:%d: không rõ nhóm địa chỉ" #, c-format #~ msgid "%s:%d: malformed URL" #~ msgstr "%s:%d: địa chỉ URL dạng sai" #, c-format #~ msgid "%s:%d: port is meaningless for UNIX sockets" #~ msgstr "%s:%d: cổng vô ích cho ổ cắm UNIX" #, c-format #~ msgid "%s:%d: UNIX socket name too long" #~ msgstr "%s:%d: tên ổ cắm UNIX quá dài" #, c-format #~ msgid "%s:%d: bad port number" #~ msgstr "%s:%d: số thứ tá»± cổng sai" #, c-format #~ msgid "%s:%d: unknown service name" #~ msgstr "%s:%d: không rõ tên dịch vụ" #, c-format #~ msgid "%s:%d: unknown host name %s" #~ msgstr "%s:%d: không nhận ra tên máy %s" #, c-format #~ msgid "%s:%d: unsupported address family" #~ msgstr "%s:%d: gặp nhóm địa chỉ không được há»— trợ" #, c-format #~ msgid "%s:%d: cannot stat file %s: %s" #~ msgstr "%s:%d: không thể lấy thống kê cho tập tin %s: %s" #, c-format #~ msgid "%s:%d: unknown keyword: %s" #~ msgstr "%s:%d: không rõ từ khóa: %s" #~ msgid "Falling back to the default configuration" #~ msgstr "Äang phục hồi cấu hình mặc định" #, c-format #~ msgid "%s:%d: INTERNAL ERROR: node type out of range" #~ msgstr "%s:%d: Lá»–I NỘI BỘ : loại nút ở ngoại phạm vi" #, c-format #~ msgid "Transform: \"%s\" -> \"%s\"" #~ msgstr "Chuyển dạng “%s†thành “%sâ€" #, c-format #~ msgid "Command line: %s" #~ msgstr "Dòng lệnh: %s" #~ msgid "Setting command line" #~ msgstr "Äang đặt dòng lệnh" #, c-format #~ msgid "%s:%d: internal error" #~ msgstr "%s:%d: lá»—i ná»™i bá»™" #, c-format #~ msgid "%s: option '--%s' doesn't allow an argument\n" #~ msgstr "%s: tùy chá»n “--%s†không cho phép đối số\n" #, c-format #~ msgid "%s: option '-W %s' is ambiguous\n" #~ msgstr "%s: tùy chá»n \"-W %s\" chưa rõ ràng\n" #, c-format #~ msgid "%s: option '-W %s' doesn't allow an argument\n" #~ msgstr "%s: tùy chá»n “-W %s†không cho phép đối số\n" #, c-format #~ msgid "%s: option '-W %s' requires an argument\n" #~ msgstr "%s: tùy chá»n “-W %s†yêu cầu má»™t đối số\n" #~ msgid "argcv_string failed: %s" #~ msgstr "argcv_string bị lá»—i: %s" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/po/nl.gmo����������������������������������������������������������������������������������0000644�0001750�0001750�00000027134�14655401314�014073� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Þ•����€��������­���������Ð ��É���Ñ �����› �����± �����Ê �����å �����ü ��(��� ��"���A �����d ��&���~ �� ���¥ �����Æ �����á ��w���å ��+���] �����‰ ����� �����— �����³ �� ��� �����Ð �����Ô �����Ü �����õ ������� ���0�� ���Q�����^��5���p�����¦�����®�����¿�����Ð�����á�����ô����������!�����4�����=�����X�� ���l��%���y�����Ÿ�� ���¦��:���Ç�������È��� ��^���Ô�����3��s���S��5���Ç��:���ý�����8�����=�����D�����]�����x�����Š�� ���‘�� ���Ÿ�����ª�����À�����Ñ�� ���å���������������1��3���8��&���l�����“�����¨�����À�����Ö�����í�������$���#�����H�� ���g��*���ˆ�����³��(���Í�����ö����� ��)����� ���<��i���F��t���°�����%�����,�����=�����T�����p�����ˆ�����§�����Â�����Ý�����ù����������.�����I�����b����������—�����²�����Ð�����ç�����ý�������*���0�� ���[�����|�����Œ�����¡�����´�����È�����Ø��1���ê��&�����"���C�����f��,���x��,���¥��'���Ò��3���ú�����.�����B�����S��—��l��Ñ��������Ö�����å��&�����#���(�����L��+���l��$���˜�����½��&���Ö��$���ý��-���"�����P��q���S��>���Å���������� ����������3�����B�����Q�����U��"���]��.���€�����¯��%���È�� ���î�����ø��I��� �����T �����[ �����o �����‡ �����¡ �����¹ �����Ó �����ñ �����!��$��� !�����0!�����E!��0���Z!�����‹!��'���’!��@���º!�����û!��Ð��� "��W���Û"��"���3#��}���V#��B���Ô#��F���$�����^$�����c$�����j$��$���…$�����ª$�����¿$�� ���Å$�����Ñ$�����â$�����ø$����� %��*���%��!���H%�����j%�����‚%��F���‰%��8���Ð%����� &�� ���$&��!���E&�� ���g&�����ˆ&�����¥&��#���Â&��$���æ&��$��� '��/���0'��#���`'��/���„'�����´'�����Ê'��2���Ó'�����(��l���(��l���‚(�� ���ï(�����ù(�����)��"���/)��$���R)�����w)�����”)�����³)�����Ò)��"���ò)�����*��!���4*��#���V*��'���z*��+���¢*��.���Î*�����ý*�����+�����:+�����V+��%���t+��;���š+��'���Ö+�����þ+�����,�����,,�����A,�����V,�����g,��E���€,��*���Æ,��5���ñ,�����'-��>���<-��7���{-��0���³-��-���ä-�����.�����,.�����B.�����n���E���<�������R���a����������i����������z�������A���D���M������ ���t����������5���L����������$���o���~���G�����������&���J���"�������f���%���/���������h���x����������q���N�������S�������€������� ������W���\���������������������s�������I���.���1������� �����������Y������������������������`�������6�������4�������������^���>���?���V���=���#��� ���_�������O�������P���U������3���Z���-�����������[���|���y���F������Q���K���l���m�������8���@���u���r���{�����������C����������j���d���(���7���B���T������;���*���v�������,��� ��������������)���:��������������g����������0�������������w���b���p���2���]������'���+������� ���X���}�������e���!���k���c���9�������H�������� 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. �%s is not a directory�%s is not a regular file�%s: TCPMUX did not respond�%s: TCPMUX returned %s�%s: invalid option -- '%c' �%s: option requires an argument -- '%c' �%s: subprocess exited with code %d�%s: subprocess terminated�%s: subprocess terminated on signal %d�%s:%d: %s: cannot execute %s: %s�%s:%d: %s: cannot fork: %s�(C)�A system error occurred while attempting to execute command. Contact the systems administrator for further assistance. �Add or remove configuration security check.�CHECK�COMMAND�Cannot open database %s: %s�Chroot dir: %s�Command line:�DIR�Debug: �Deleting arguments %d-%d�Deleting argv[0] is prohibited�Do not display header line.�Dump final request in test mode.�Environment:�Error message: %s�Error sending diagnostic message to descriptor %d: %s�Error: �Execute COMMAND.�Executing %s, %s�Final arguments:�Final environment:�Finished parsing %s�Force interactive shell.�Forked process %lu�GID: %lu�Give a short usage message�Give this help list�Home dir: %s�Ignoring non-existing include file %s�Info: �Invalid transform expression: %s�Invalid transform replacement: back reference out of range�KEYWORDS�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. �Local configuration error occurred. Contact the systems administrator for further assistance. �Look for database files in DIR.�Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options.�Missing 2nd delimiter in position %d of expression %s�Missing trailing delimiter in position %d of expression %s�NAME�NUMBER�No default configuration�No logins allowed for `%s'�Not enough memory�OPTION�Other options�Parsing %s�Print program version�Program name: %s�Report bugs to %s. �Resuming parsing %s from line %d�Rule %s at %s:%d matched�Run in test mode.�STRING�Serving interactive shell request for %s by rule %s�Serving request "%s" for %s by rule %s�Set debugging level.�Setting limit %d to %lu�Setting limits for %s�Setting priority to %d�Show at most NUM records.�Show default configuration.�Show entries in chronological order.�Supply user name in test mode.�Too many logins (max %zu) for %s�Transformation map: %s, %s, %s, %u, %u, %s�Transforming command line�Unknown flag in transform expression: %c�Unknown system error�Usage:�Use STRING instead of the default format.�Warning: �You are not permitted to execute this command. Contact the systems administrator for further assistance. �You do not have interactive login access to this machine. Contact the systems administrator for further assistance. �[FILE]�[user [user...]]�acct database is empty�cannot change to dir %s: %s�cannot chroot to %s: %s�cannot create directory %s: %s�cannot enforce gid %lu: %s�cannot enforce uid %lu: %s�cannot open database %s: %s�cannot open database file %s�cannot open file %s: %s�cannot open format file %s�cannot set limits for %s�cannot stat directory %s: %s�cannot stat file %s: %s�cannot stat format file %s�counted %zu/%zu logins for %s�counting logins for %s�debug level set to %d�error setting limit: %s�error setting priority: %s�error writing stop to database file %s: %s�error writing to database %s: %s�extra arguments�invalid command line�invalid format: %s�invalid number (%s)�invalid uid %lu�invalid user name�missing closing quote in string started near `%s'�no argument at index %d in command: %s�no matching rule for "%s", user %s�not enough memory�rushlast - show listing of last Rush logins.�rushwho - show listing of online Rush users.�seteuid(0) succeeded when it should not�the --user option is allowed for the superuser only�unknown keyword: %s�user %s, uid %lu�wordsplit(%s) failed: %s�Project-Id-Version: GNU rush 1.8 Report-Msgid-Bugs-To: bug-rush@gnu.org PO-Revision-Date: 2016-10-03 03:19+0100 Last-Translator: Koen Torfs <koen@drunkfelines.com> 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: Poedit 1.6.10 � Licentie GPLv3+: GNU GPL versie 3 of later <http://gnu.org/licenses/gpl.html> Dit is vrije software: je mag het vrijelijk wijzigen en verder verspreiden. Er is GEEN GARANTIE, voor zover de wet dit toestaat. �%s is geen map�%s is geen regulier bestand�%s: geen antwoord van TCPMUX verkregen�%s: TCPMUX kwam terug met waarde %s�%s: ongeldige optie --‘%c’ �%s: optie vereist een argument -- ‘%c’ �%s: subproces beëindigd met code %d�%s: subproces afgesloten�%s: subproces afgesloten op signaal %d�%s:%d: %s: kan %s niet uitvoeren: %s�%s:%d: %s: kan geen nieuw proces beginnen: %s�©�Er trad een systeemfout op bij het uitvoeren van de opdracht. Neem contact op met de systeembeheerder voor hulp. �Veiligheidscontrole van configuratie toevoegen of verwijderen.�CHECK�OPDRACHT�Kan database %s niet openen: %s�Chroot-map: %s�Opdrachtregel:�MAP�Debug: �Argumenten %d-%d worden verwijderd�Het verwijderen van argv[0] is niet toegestaan�Koptekstlijn niet tonen.�Laatste aanvraag in testmodus dumpen.�Omgeving:�Foutboodschap: %s�Fout bij het sturen van een diagnostische boodschap aan descriptor %d: %s�Fout: �OPDRACHT uitvoeren.�%s wordt uitgevoerd, %s�Uiteindelijke argumenten:�Uiteindelijke omgeving:�Ontleding van %s compleet�Interactieve shell afdwingen.�Nieuw proces %lu�GID: %lu�Een korte gebruikssamenvatting tonen�Deze helplijst tonen�Persoonlijke map: %s�Onbestaand insluitingsbestand %s wordt genegeerd�Info: �Ongeldige transformatie-uitdrukking: %s�Ongeldige transformatievervanging: terugverwijzing buiten bereik�SLEUTELWOORDEN�Licentie GPLv3+: GNU GPL versie 3 of later <http://gnu.org/licenses/gpl.html> Dit is vrije software: je mag het vrijelijk wijzigen en verder verspreiden. Er is GEEN GARANTIE, voor zover de wet dit toestaat. �Lokale configuratiefout opgetreden. Neem contact op met de systeembeheerder voor hulp. �Databasebestanden in MAP opzoeken.�Vereiste of optionele argumenten bij lange opties zijn eveneens vereist of optioneel bij enige corresponderende korte opties.�Ontbrekend tweede scheidingsteken op positie %d van uitdrukking %s�Ontbrekend afsluitend scheidingsteken op positie %d van uitdrukking %s�NAAM�NUMMER�Geen standaardconfiguratie�Geen logins toegestaan voor ‘%s’�Onvoldoende geheugen�OPTIE�Meer opties�%s wordt ontleed�Programmaversie tonen�Programmanaam: %s�Meld bugs aan %s. �Ontleden van %s wordt hervat vanaf lijn %d�Regel %s bij %s:%d overeengekomen�In testmodus uitvoeren.�STRING�Aanvraag van interactieve shell voor %s wordt bediend volgens regel %s�Aanvraag “%s†voor %s wordt bediend volgens regel %s�Debuggingniveau instellen.�Limiet %d wordt op %lu ingesteld�Limieten voor %s worden ingesteld�Prioriteit wordt op %d ingesteld�Hoogstens NUM records tonen.�Standaardconfiguratie tonen.�Items in chronologische orde tonen.�Gebruikersnaam in testmodus opgeven.�Te veel logins (maximum %zu) voor %s�Transformatietoewijzing: %s, %s, %s, %u, %u, %s�Opdrachtregel wordt getransformeerd�Onbekende vlag in transformatie-uitdrukking: %c�Onbekende systeemfout�Gebruik:�Gebruik STRING in plaats van het standaardformaat.�Waarschuwing: �Je hebt geen toestemming om deze opdracht uit te voeren. Neem contact op met de systeembeheerder voor hulp. �Je hebt geen interactieve logintoegang tot deze machine. Neem contact op met de systeembeheerder voor hulp. �[BESTAND]�[gebruiker [gebruiker…]]�accountingdatabase is leeg�kan niet navigeren naar map %s: %s�kan chroot niet uitvoeren naar %s:%s�kan map %s niet aanmaken: %s�kan gid %lu niet handhaven: %s�kan uid %lu niet handhaven: %s�kan database %s niet openen: %s�kan databasebestand %s niet openen�Kan bestand %s niet openen: %s�kan formaatbestand %s niet openen�kan limieten voor %s niet instellen�kan status van map %s niet opvragen: %s�Kan status van bestand %s niet opvragen: %s�kan status van formaatbestand %s niet opvragen�%zu/%zu logins geteld voor %s�logins voor %s worden opgeteld�debugniveau op %d ingesteld�fout bij instellen limiet: %s�fout bij instellen van prioriteit: %s�fout bij het schrijven van stop naar databasebestand %s: %s�fout bij schrijven naar database %s: %s�bijkomende argumenten�ongeldige opdrachtregel�ongeldig formaat: %s�ongeldig nummer (%s)�ongeldig uid %lu�ongeldige gebruikersnaam�ontbrekend sluitend aanhalingsteken in string begonnen nabij ‘%s’�geen argument bij index %d in opdracht: %s�geen overeenkomende regel voor “%sâ€, gebruiker %s�onvoldoende geheugen�rushlast – een lijst van de meest recente Rush-logins tonen.�rushwho – een lijst van online Rush-gebruikers tonen.�seteuid(0) geslaagd wanneer het had moeten falen�de optie --user is enkel toegestaan voor root�onbekend sleutelwoord: %s�gebruiker %s, uid %lu�wordsplit(%s) gefaald: %s�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/po/Rules-quot������������������������������������������������������������������������������0000644�0001750�0001750�00000004142�14436425501�014754� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file, Rules-quot, can be copied and used freely without restrictions. # 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-tools"; 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 | \ { case `$(MSGFILTER) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-8] | 0.1[0-8].*) \ $(MSGFILTER) $(SED) -f `echo $$lang | sed -e 's/.*@//'`.sed \ ;; \ *) \ $(MSGFILTER) `echo $$lang | sed -e 's/.*@//'` \ ;; \ esac } 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 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/po/da.gmo����������������������������������������������������������������������������������0000644�0001750�0001750�00000037254�14655401314�014052� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Þ•����³������´��ï���L ��������É��� �����Ó�����é���������������4�����P��,���a�����Ž��.���®��'���Ý��(�����"���.�����Q��&���k�����’�����²�� ���Ñ�����ò����� ��w�����+���‰�����µ�����»�����Ã�����ß�� ���î�����ü����������������!�����@�� ���\�� ���}�����Š��5���œ�����Ò�����Ú�����ë�����ü����� ����� �����4�����M�����`�����i�����„�� ���˜��6���¥��.���Ü��-��� ��/���9��2���i��/���œ��2���Ì��%���ÿ�����%�� ���,��:���M�����ˆ��È���‘��^���Z�����¹��s���Ù��5���M��:���ƒ�����¾�����Ã�����Ê�����ã�����þ������������ ��� �� ���.��)���9�����c�����y�����Š����� �� ���´�����Õ�����î�������� �����3�����&���I�����p�����…����������³�����Ê�����ä��$���������%�� ���D��L���e��*���²�����Ý�����ó����� �����,��(���H�����q�����‹����� ��)���§�� ���Ñ��i���Û��t���E�����º�����Á�����Ò�����é���������������<�����W�����r�����Ž�����«�����Ã�����Þ�����÷����������,�����G�����P�����n�����…��1���›�����Í�����å��*���� �� ���+ ��/���L �����| �����Œ ��%���¦ ��%���Ì �����ò �����!�����!�����2!�����L!�����`!�����s!�����‚!�� ���•!�����¶!�����Ç!�����×!�����é!�� ���"��1��� "��&���?"��"���f"�����‰"�����›"�����¬"��%���¾"��$���ä"����� #��,���'#��,���T#��'���#��'���©#��3���Ñ#�����$�����$�����*$�����@$�����T$�����f$�����~$�����”$�����¥$�����Á$��x��Ú$��Ä���S&�����'�����,'�����E'�����]'�����w'�����—'��1���§'��$���Ù'��0���þ'��+���/(��,���[(��(���ˆ(�����±(��/���Ñ(��*���)��-���,)�� ���Z)�� ���{)�����œ)��y��� )��9���*�����T*�����\*�����e*�����…*�����–*�����¥*�� ���«*�����¶*�����Ï*�����î*��*���+�����3+�����;+��O���J+�����š+�����¡+�� ���°+�����¾+�����Ó+�����ä+�����,�����,�����1,�����:,�����T,�����m,��;���},��,���¹,��+���æ,��*���-��6���=-��3���t-��6���¨-��)���ß-����� .��"���.��E���3.�� ���y.��Ã���ƒ.��a���G/�� ���©/��~���Ê/��5���I0��A���0�����Á0�����Æ0�����Í0�����é0����� 1�� ���1�����*1�� ���21�� ���@1��8���M1�����†1�����1�����­1�����Å1��)���Ý1�����2�����#2�����82�� ���?2��;���L2��4���ˆ2�����½2�����Ø2�����ø2�����3�����/3�����H3��)���c3�� ���3��#���®3��I���Ò3��+���4�����H4�����c4��"���4�� ���¢4��'���Ã4�����ë4�����5�����5��*���5�� ���E5��m���P5��p���¾5�����/6�����56�����J6��!���`6�����‚6�����6�����¼6�����Ü6�����ü6�����7�����;7�����W7��%���u7��%���›7��$���Á7��&���æ7����� 8�����8�����28��"���H8��0���k8��6���œ8��3���Ó8��C���9��6���K9��1���‚9�����´9�����Æ9��6���å9��4���:�����Q:�����g:�����}:�����‘:�����ª:�����¿:�����Ó:�����â:��!����;�����";�����;;�����K;�����_;�� ���y;��E���…;��+���Ë;��+���÷;�����#<�����;<�����S<��+���g<��(���“<�����¼<��1���Ú<��0��� =��'���==��(���e=��1���Ž=�����À=�����Ó=�����è=�����>�����>�� ���.>�����O>�����a>�����t>�����Ž>�����5�����������_���£���¨���„������±������=���g���}������������� ���8�������]���m���Q���’�������”���S������Ÿ���!���K���C�������•���'���"�����������E���ƒ���0���›�������<������®���O������Š���r��������������6��� ������������������l������¡����������¦���\������¢���^�������1������k�����������²���u���{�������n���A�������‘��� ���v�������%���™�����������+�����������x���;���W�������&��� �������P�����������������†���w���o���ˆ���������������…���B���‰������|���©���s������������� �������—���$���ª�������U������i�������Z���Ž���ž���z������,���J���‹���������������`���¥���¬�������4���y���­���˜������������������d���(������ ����������7�������Y������N���*���X���.���“������[���H�������œ�����������R���T����������t���–���@����������>���q�������~���#���2���:������/���V���������������¤���D���9���F�������-���€������ ���M�������«�������3�������‡���)���L������a���š���G���I���‚���f���p���³���j���e���b�������Œ������°���?���§���c�������¯���h���� 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. �%s is not a directory�%s is not a regular file�%s: TCPMUX did not respond�%s: TCPMUX returned %s�%s: invalid option -- '%c' �%s: not a number�%s: option '%s%s' doesn't allow an argument �%s: option '%s%s' is ambiguous �%s: option '%s%s' is ambiguous; possibilities:�%s: option '%s%s' requires an argument �%s: option requires an argument -- '%c' �%s: subprocess exited with code %d�%s: subprocess terminated�%s: subprocess terminated on signal %d�%s: unrecognized option '%s%s' �%s:%d: %s: can't stat '%s': %s�%s:%d: %s: cannot execute %s: %s�%s:%d: %s: cannot fork: %s�(C)�A system error occurred while attempting to execute command. Contact the systems administrator for further assistance. �Add or remove configuration security check.�CHECK�COMMAND�Cannot open database %s: %s�Chroot dir: %s�Command line:�DIR�Debug: �Deleting arguments %d-%d�Deleting argv[0] is prohibited�Do not display header line.�Dump final request in test mode.�Environment:�Error message: %s�Error sending diagnostic message to descriptor %d: %s�Error: �Execute COMMAND.�Executing %s, %s�Final arguments:�Final environment:�Finished parsing %s�Force interactive shell.�Forked process %lu�GID: %lu�Give a short usage message�Give this help list�Home dir: %s�INTERNAL ERROR at %s:%d: can't modify read-only target�INTERNAL ERROR at %s:%d: invalid envar type %d�INTERNAL ERROR at %s:%d: invalid node type %d�INTERNAL ERROR at %s:%d: invalid target type %d�INTERNAL ERROR at %s:%d: unrecognized node type %d�INTERNAL ERROR at %s:%d: unrecognized opcode %d�INTERNAL ERROR at %s:%d: unrecognized operation %d�Ignoring non-existing include file %s�Info: �Invalid transform expression: %s�Invalid transform replacement: back reference out of range�KEYWORDS�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. �Local configuration error occurred. Contact the systems administrator for further assistance. �Look for database files in DIR.�Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options.�Missing 2nd delimiter in position %d of expression %s�Missing trailing delimiter in position %d of expression %s�NAME�NUMBER�No default configuration�No logins allowed for `%s'�Not enough memory�Notice: �OPTION�Other options�Parsing %s�Print grammar and lexical analyzer traces�Print program version�Program name: %s�Removing option %s %s�Report bugs to %s. �Resuming parsing %s from line %d�Rule %s at %s:%d matched�Run in test mode.�STRING�Scanner test.�Serving interactive shell request for %s by rule %s�Serving request "%s" for %s by rule %s�Set debugging level.�Setting limit %d to %lu�Setting limits for %s�Setting priority to %d�Show at most NUM records.�Show default configuration.�Show entries in chronological order.�Supply user name in test mode.�Too many logins (max %zu) for %s�Transform expression must start with 's' followed by a punctuation character�Transformation map: %s, %s, %s, %u, %u, %s�Transforming argv[%d]�Transforming command line�Transforming program name (%s)�Transforming variable %s=%s�Unknown flag in transform expression: %c�Unknown message reference�Unknown system error�Usage:�Use STRING instead of the default format.�Warning: �You are not permitted to execute this command. Contact the systems administrator for further assistance. �You do not have interactive login access to this machine. Contact the systems administrator for further assistance. �[FILE]�[user [user...]]�acct database is empty�cannot change to dir %s: %s�cannot chroot to %s: %s�cannot create directory %s: %s�cannot enforce gid %lu: %s�cannot enforce uid %lu: %s�cannot open database %s: %s�cannot open database file %s�cannot open file %s: %s�cannot open format file %s�cannot set limits for %s�cannot stat directory %s: %s�cannot stat file %s: %s�cannot stat format file %s�chdir %s�counted %zu/%zu logins for %s�counting logins for %s�debug level set to %d�environment transformation is not yet implemented�error setting limit: %s�error setting priority: %s�error writing stop to database file %s: %s�error writing to database %s: %s�expected ~ as the second argument, but found %s�extra arguments�failed to parse value: %s�failed to write message to stderr: %s�failed to write message to stdout: %s�invalid command line�invalid file descriptor�invalid format: %s�invalid include file name�invalid number (%s)�invalid number: %s�invalid opcode�invalid regexp: %s�invalid statement: missing value�invalid time: %s�invalid uid %lu�invalid user name�key field is not a number�missing ]�missing closing quote in string started near `%s'�no argument at index %d in command: %s�no matching rule for "%s", user %s�no such group: %s�no such user: %s�not enough memory�parsing legacy built-in configuration�parsing legacy configuration file %s�rush - restricted user shell.�rushlast - show listing of last Rush logins.�rushwho - show listing of online Rush users.�seteuid(0) succeeded when it should not�statement cannot be used outside a rule�the --user option is allowed for the superuser only�too few arguments�too many arguments�transformed value: %s�unknown keyword: %s�unknown limit: %s�unknown regexp flag: %s�unknown statement: %s�user %s, uid %lu�value field is not a number�wordsplit(%s) failed: %s�Project-Id-Version: GNU rush 2.2 Report-Msgid-Bugs-To: bug-rush@gnu.org PO-Revision-Date: 2022-05-29 13:26+0200 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. � 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. Der er ingen GARANTI, indenfor lovens omfang. �%s er ikke en mappe�%s er ikke en normal fil�%s: TCPMUX svarede ikke�%s: TCPMUX returnerede %s�%s: ugyldigt tilvalg -- »%c« �%s: ikke et tal�%s: tilvalget »%s%s« tillader ikke et argument �%s: tilvalget »%s%s« er tvetydigt �%s: tilvalget »%s%s« er tvetydigt: muligheder:�%s: tilvalget »%s%s« kræver et argument �%s: tilvalget kræver et argument -- »%c« �%s: underproces afsluttedes med koden %d�%s: underproces blev termineret�%s: underproces blev termineret pÃ¥ signalet %d�%s: tilvalget »%s%s« blev ikke genkendt �%s:%d: %s: kan ikke køre stat pÃ¥ »%s«: %s�%s:%d: %s: kan ikke køre %s: %s�%s:%d: %s: kan ikke forgrene: %s�(C)�Der opstod en systemfejl under forsøg pÃ¥ at køre kommandoen. Kontakt systemadministratoren for yderligere assistance. �Tilføj eller fjern sikkerhedskontrol af konfigurationen.�KONTROL�KOMMANDO�Kan ikke Ã¥bne databasen %s: %s�Chroot-mappe: %s�Kommandolinje:�MAPPE�Fejlsøg: �Sletter argumenter %d-%d�Sletning af argv[0] er forbudt�Vis ikke teksthovedlinje.�Dump endelig forespørgsel i testtilstand.�Miljø:�Fejlbesked: %s�Der opstod en fejl, da en diagnostisk besked blev sendt til deskriptoren %d: %s�Fejl: �Kør KOMMANDO.�Kører %s, %s�Endelige argumenter:�Endeligt miljø:�Afsluttede fortolkning af %s�Fremtving interaktiv skal.�Forgrenet proces %lu�GID: %lu�Angiv en kort brugsbesked�Angiv denne hjælpeliste�Hjemmemappe: %s�INTERN FEJL ved %s:%d: kan ikke ændre skrivebeskyttet mÃ¥l�INTERN FEJL ved %s:%d: ugyldig envar-type %d�INTERN FEJL ved %s:%d: ugyldig knudetype %d�INTERN FEJL ved %s:%d: ugyldig mÃ¥ltype %d�INTERN FEJL ved %s:%d: knudetype blev ikke genkendt %d�INTERN FEJL ved %s:%d: opkode blev ikke genkendt %d�INTERN FEJL ved %s:%d: operation blev ikke genkendt %d�Ignorerer ikkeeksisterende include-fil %s�Info: �Ugyldigt transformeringsudtryk: %s�Ugyldig transformeringserstatning: tilbagereference uden for interval�NØGLEORD�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. Der er ingen GARANTI, indenfor lovens omfang. �Der opstod en lokal konfigurationsfejl. Kontakt systemadministratoren for yderligere assistance. �Kig efter databasefiler i MAPPE.�Obligatoriske eller valgfrie argumenter til lange tilvalg er ogsÃ¥ obligatoriske eller valgfrie for tilsvarende korte tilvalg.�Manglende 2. skilletegn pÃ¥ position %d for udtryk %s�Manglende efterfølgende skilletegn pÃ¥ position %d for udtryk %s�NAVN�NUMMER�Ingen standardkonfiguration�Ingen logind tilladt for »%s«�Ikke nok hukommelse�Meddelelse: �TILVALG�Andre tilvalg�Fortolker %s�Udskriv grammatik og funktionslog for leksikalsk analyse�Udskriv programversion�Programnavn: %s�Fjerner tilvalget %s %s�Rapporter fejl til %s. �Genoptager fortolkning af %s fra linje %d�Regel %s pÃ¥ %s:%d matchede�Kør i testtilstand.�STRENG�Skannertest.�Betjener interaktiv skalforespørgsel for %s efter regel %s�Betjerner forespørgsel »%s« for %s efter regel %s�Angiv fejlsøgningsniveau.�Angiver begrænsning %d til %lu�Angiver begrænsninger for %s�Angiver prioritet til %d�Vis maks. NUM elementer.�Vis standardkonfiguration.�Vis elementer i kronologisk rækkefølge.�Angiv brugernavn i testtilstand.�For mange logind (maks. %zu) for %s�Transformeringsudtryk skal starte med »s« fulgt af et tegnsætningstegn�Transformeringskort: %s, %s, %s, %u, %u, %s�Transformering af argv[%d]�Transformerer kommandolinje�Transformering af programnavn (%s)�Transformering af variabel %s=%s�Ukendt flag i transformeringsudtryk: %c�Ukendt beskedreference�Ukendt systemfejl�Brug:�Brug STRENG i stedet for standardformatet.�Advarsel: �Du har ikke tilladelse til at køre denne kommando. Kontakt systemadministratoren for yderligere assistance. �Du har ikke interaktiv logindadgang til denne maskine. Kontakt systemadministratoren for yderligere assistance. �[FIL]�[bruger [bruger...]]�acct-databasen er tom�kan ikke ændre til mappen %s: %s�kan ikke chroot til %s: %s�kan ikke oprette mappen %s: %s�kan ikke fremtvinge gid %lu: %s�kan ikke fremtvinge uid %lu: %s�kan ikke Ã¥bne database %s: %s�kan ikke Ã¥bne databasefilen %s�kan ikke Ã¥bne filen %s: %s�kan ikke Ã¥ben formatfilen %s�kan ikke angive begrænsninger for %s�kan ikke køre stat pÃ¥ mappen %s: %s�kan ikke køre stat pÃ¥ filen %s: %s�kan ikke køre stat pÃ¥ formatfilen %s�chdir %s�talte %zu/%zu-logind for %s�tæller logind for %s�fejlsøgningsniveau angivet til %d�miljøtransformering er endnu ikke implementeret�der opstod en fejl under angivelse af begrænsning: %s�der opstod en fejl under angivelse af prioritet: %s�der opstod en fejl under skrivning af stop til databasefilen %s: %s�der opstod en fejl under skrivning til database %s: %s�forventede ~ som det andet argument, men fandt %s�ekstra argumenter�kunne ikke fortolke værdi: %s�kunne ikke skrive besked til standardfejl (stderr): %s�kunne ikke skrive besked til standardud (stdout): %s�ugyldig kommandolinje�ugyldig fildeskriptor�ugyldigt format: %s�ugyldigt include-filnavn�ugyldigt nummer (%s)�ugyldigt nummer: %s�ugyldig opcode�ugyldigt regulært udtryk: %s�ugyldigt udtryk: manglende værdi�ugyldigt klokkeslæt: %s�ugyldig uid %lu�ugyldigt brugernavn�nøglefelt er ikke et tal�manglende ]�manglende afsluttende citationstegn i streng startede tæt pÃ¥ »%s«�intet argument ved indeks %d i kommando: %s�ingen matchende regel for »%s«, bruger %s�ingen sÃ¥dan gruppe: %s�ingen sÃ¥dan bruger: %s�ikke nok hukommelse�fortolker forældet indbygget konfiguration�fortolker forældet konfigurationsfil %s�rush - begrænset brugerskal.�rushlast - vis liste over de seneste Rush-logind.�rushwho - vis liste over tilkoblede Rushbrugere.�seteuid(0) lykkedes hvor den ikke burde�udtryk kan ikke bruges uden for en regel�tilvalget --user er kun tilladt for superbrugeren�for fÃ¥ argumenter�for mange argumenter�transformeret værdi: %s�ukendt nøgleord: %s�ukendt begrænsning: %s�ukendt regulært udtryksflag: %s�ukendt udtryk: %s�bruger %s, uid %lu�værdifelt er ikke et tal�wordsplit(%s) mislykkedes: %s�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/po/ro.gmo����������������������������������������������������������������������������������0000644�0001750�0001750�00000041712�14655401314�014100� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Þ•����³������´��ï���L ��������É��� �����Ó�����é���������������4�����P��,���a�����Ž��.���®��'���Ý��(�����"���.�����Q��&���k�����’�����²�� ���Ñ�����ò����� ��w�����+���‰�����µ�����»�����Ã�����ß�� ���î�����ü����������������!�����@�� ���\�� ���}�����Š��5���œ�����Ò�����Ú�����ë�����ü����� ����� �����4�����M�����`�����i�����„�� ���˜��6���¥��.���Ü��-��� ��/���9��2���i��/���œ��2���Ì��%���ÿ�����%�� ���,��:���M�����ˆ��È���‘��^���Z�����¹��s���Ù��5���M��:���ƒ�����¾�����Ã�����Ê�����ã�����þ������������ ��� �� ���.��)���9�����c�����y�����Š����� �� ���´�����Õ�����î�������� �����3�����&���I�����p�����…����������³�����Ê�����ä��$���������%�� ���D��L���e��*���²�����Ý�����ó����� �����,��(���H�����q�����‹����� ��)���§�� ���Ñ��i���Û��t���E�����º�����Á�����Ò�����é���������������<�����W�����r�����Ž�����«�����Ã�����Þ�����÷����������,�����G�����P�����n�����…��1���›�����Í�����å��*���� �� ���+ ��/���L �����| �����Œ ��%���¦ ��%���Ì �����ò �����!�����!�����2!�����L!�����`!�����s!�����‚!�� ���•!�����¶!�����Ç!�����×!�����é!�� ���"��1��� "��&���?"��"���f"�����‰"�����›"�����¬"��%���¾"��$���ä"����� #��,���'#��,���T#��'���#��'���©#��3���Ñ#�����$�����$�����*$�����@$�����T$�����f$�����~$�����”$�����¥$�����Á$����Ú$��û���ñ&�����í'�����(�����$(�����=(��#���V(�����z(��0���(��'���Á(��7���é(��/���!)��0���Q)��$���‚)�����§)��+���Ä)��'���ð)��4���*��%���M*��+���s*�����Ÿ*��“���¢*��>���6+�� ���u+�����€+��(���ˆ+�����±+�����Í+�����à+�� ���é+�����ô+��"���,�����3,��0���Q,�����‚,�����‰,��J���,�����è,�����ñ,�����-�����-�� ���'-�����5-�����Q-�����q-�����…-��"���Ž-�� ���±-�����Ò-��I���ê-��@���4.��/���u.��5���¥.��4���Û.��:���/��5���K/��/���/�� ���±/��#���¾/��c���â/�� ���F0��î���T0��s���C1��-���·1��™���å1��?���2��<���¿2�����ü2�����3�����3��/���'3�����W3�����s3�����z3�� ���ƒ3�����‘3��7���£3�� ���Û3�����ü3�����4�����/4��$���J4��"���o4�����’4�����ª4�����¯4��>���À4��3���ÿ4�����35�����S5�����s5�� ���“5��*���´5��$���ß5��.���6��5���36��-���i6��^���—6��*���ö6�����!7�����47��"���Q7�����t7��/���7��%���¿7�����å7�� ���8��.���8�� ���=8��{���K8��†���Ç8�� ���N9�����X9��#���u9��(���™9��%���Â9��"���è9��D��� :��J���P:��(���›:��8���Ä:��%���ý:��,���#;��$���P;��.���u;��-���¤;��5���Ò;�����<��,���<��(���><�� ���g<��/���ˆ<�� ���¸<��&���Ù<��L����=��*���M=��B���x=�����»=��%���Ò=��F���ø=��<���?>�����|>�����˜>�����¶>��$���É>�����î>�����?�����?�� ���.?��)���O?�����y?�����Œ?�����œ?��"���·?�����Ú?��C���ì?��9���0@��A���j@�����¬@�����Æ@�����æ@��6���ü@��4���3A��*���hA��:���“A��:���ÎA��+��� B��8���5B��A���nB�����°B�����ÇB�����ÜB�����ôB�����C��+���*C�����VC�����sC��$���ŠC�����¯C�����5�����������_���£���¨���„������±������=���g���}������������� ���8�������]���m���Q���’�������”���S������Ÿ���!���K���C�������•���'���"�����������E���ƒ���0���›�������<������®���O������Š���r��������������6��� ������������������l������¡����������¦���\������¢���^�������1������k�����������²���u���{�������n���A�������‘��� ���v�������%���™�����������+�����������x���;���W�������&��� �������P�����������������†���w���o���ˆ���������������…���B���‰������|���©���s������������� �������—���$���ª�������U������i�������Z���Ž���ž���z������,���J���‹���������������`���¥���¬�������4���y���­���˜������������������d���(������ ����������7�������Y������N���*���X���.���“������[���H�������œ�����������R���T����������t���–���@����������>���q�������~���#���2���:������/���V���������������¤���D���9���F�������-���€������ ���M�������«�������3�������‡���)���L������a���š���G���I���‚���f���p���³���j���e���b�������Œ������°���?���§���c�������¯���h���� 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. �%s is not a directory�%s is not a regular file�%s: TCPMUX did not respond�%s: TCPMUX returned %s�%s: invalid option -- '%c' �%s: not a number�%s: option '%s%s' doesn't allow an argument �%s: option '%s%s' is ambiguous �%s: option '%s%s' is ambiguous; possibilities:�%s: option '%s%s' requires an argument �%s: option requires an argument -- '%c' �%s: subprocess exited with code %d�%s: subprocess terminated�%s: subprocess terminated on signal %d�%s: unrecognized option '%s%s' �%s:%d: %s: can't stat '%s': %s�%s:%d: %s: cannot execute %s: %s�%s:%d: %s: cannot fork: %s�(C)�A system error occurred while attempting to execute command. Contact the systems administrator for further assistance. �Add or remove configuration security check.�CHECK�COMMAND�Cannot open database %s: %s�Chroot dir: %s�Command line:�DIR�Debug: �Deleting arguments %d-%d�Deleting argv[0] is prohibited�Do not display header line.�Dump final request in test mode.�Environment:�Error message: %s�Error sending diagnostic message to descriptor %d: %s�Error: �Execute COMMAND.�Executing %s, %s�Final arguments:�Final environment:�Finished parsing %s�Force interactive shell.�Forked process %lu�GID: %lu�Give a short usage message�Give this help list�Home dir: %s�INTERNAL ERROR at %s:%d: can't modify read-only target�INTERNAL ERROR at %s:%d: invalid envar type %d�INTERNAL ERROR at %s:%d: invalid node type %d�INTERNAL ERROR at %s:%d: invalid target type %d�INTERNAL ERROR at %s:%d: unrecognized node type %d�INTERNAL ERROR at %s:%d: unrecognized opcode %d�INTERNAL ERROR at %s:%d: unrecognized operation %d�Ignoring non-existing include file %s�Info: �Invalid transform expression: %s�Invalid transform replacement: back reference out of range�KEYWORDS�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. �Local configuration error occurred. Contact the systems administrator for further assistance. �Look for database files in DIR.�Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options.�Missing 2nd delimiter in position %d of expression %s�Missing trailing delimiter in position %d of expression %s�NAME�NUMBER�No default configuration�No logins allowed for `%s'�Not enough memory�Notice: �OPTION�Other options�Parsing %s�Print grammar and lexical analyzer traces�Print program version�Program name: %s�Removing option %s %s�Report bugs to %s. �Resuming parsing %s from line %d�Rule %s at %s:%d matched�Run in test mode.�STRING�Scanner test.�Serving interactive shell request for %s by rule %s�Serving request "%s" for %s by rule %s�Set debugging level.�Setting limit %d to %lu�Setting limits for %s�Setting priority to %d�Show at most NUM records.�Show default configuration.�Show entries in chronological order.�Supply user name in test mode.�Too many logins (max %zu) for %s�Transform expression must start with 's' followed by a punctuation character�Transformation map: %s, %s, %s, %u, %u, %s�Transforming argv[%d]�Transforming command line�Transforming program name (%s)�Transforming variable %s=%s�Unknown flag in transform expression: %c�Unknown message reference�Unknown system error�Usage:�Use STRING instead of the default format.�Warning: �You are not permitted to execute this command. Contact the systems administrator for further assistance. �You do not have interactive login access to this machine. Contact the systems administrator for further assistance. �[FILE]�[user [user...]]�acct database is empty�cannot change to dir %s: %s�cannot chroot to %s: %s�cannot create directory %s: %s�cannot enforce gid %lu: %s�cannot enforce uid %lu: %s�cannot open database %s: %s�cannot open database file %s�cannot open file %s: %s�cannot open format file %s�cannot set limits for %s�cannot stat directory %s: %s�cannot stat file %s: %s�cannot stat format file %s�chdir %s�counted %zu/%zu logins for %s�counting logins for %s�debug level set to %d�environment transformation is not yet implemented�error setting limit: %s�error setting priority: %s�error writing stop to database file %s: %s�error writing to database %s: %s�expected ~ as the second argument, but found %s�extra arguments�failed to parse value: %s�failed to write message to stderr: %s�failed to write message to stdout: %s�invalid command line�invalid file descriptor�invalid format: %s�invalid include file name�invalid number (%s)�invalid number: %s�invalid opcode�invalid regexp: %s�invalid statement: missing value�invalid time: %s�invalid uid %lu�invalid user name�key field is not a number�missing ]�missing closing quote in string started near `%s'�no argument at index %d in command: %s�no matching rule for "%s", user %s�no such group: %s�no such user: %s�not enough memory�parsing legacy built-in configuration�parsing legacy configuration file %s�rush - restricted user shell.�rushlast - show listing of last Rush logins.�rushwho - show listing of online Rush users.�seteuid(0) succeeded when it should not�statement cannot be used outside a rule�the --user option is allowed for the superuser only�too few arguments�too many arguments�transformed value: %s�unknown keyword: %s�unknown limit: %s�unknown regexp flag: %s�unknown statement: %s�user %s, uid %lu�value field is not a number�wordsplit(%s) failed: %s�Project-Id-Version: rush 2.2 Report-Msgid-Bugs-To: bug-rush@gnu.org PO-Revision-Date: 2023-07-25 15:56+0200 Last-Translator: Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org> Language-Team: Romanian <translation-team-ro@lists.sourceforge.net> Language: ro MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n==0 || (n!=1 && n%100>=1 && n%100<=19) ? 1 : 2); X-Bugs: Report translation errors to the Language-Team address. X-Generator: Poedit 3.2.2 � LicenÈ›a GPLv3+: GNU GPL versiunea 3 sau o versiune ulterioară: <http://gnu.org/licenses/gpl.html> Acesta este software liber: sunteÈ›i liber să îl modificaÈ›i È™i să îl redistribuiÈ›i. NU EXISTÄ‚ NICIO GARANÈšIE, în măsura permisă de lege. �%s nu este un director�%s nu este un fiÈ™ier obiÈ™nuit�%s: TCPMUX nu a răspuns�%s: TCPMUX a returnat %s�%s: opÈ›iune nevalidă -- „%c†�%s: nu este un număr�%s: opÈ›iunea „%s%s†nu permite un argument �%s: opÈ›iunea „%s%s†este ambiguă �%s: opÈ›iunea „%s%s†este ambiguă; posibilități:�%s: opÈ›iunea „%s%s†necesită un argument �%s: opÈ›iunea necesită un argument -- „%c†�%s: subprocesul a ieÈ™it cu codul %d�%s: subprocesul s-a terminat�%s: subprocesul s-a terminat la semnalul %d�%s: opÈ›iune nerecunoscută „%s%s†�%s:%d: %s: nu se poate determina starea „%sâ€: %s�%s:%d: %s: nu se poate executa %s: %s�%s:%d: %s: nu se poate crea o bifurcare: %s�©�A apărut o eroare de sistem în timpul încercării de a executa comanda. ContactaÈ›i administratorul de sistem pentru asistență suplimentară. �Adaugă sau elimină verificarea securității configuraÈ›iei.�VERIFICARE�COMANDA�Nu se poate deschide baza de date %s: %s�Directorul „chrootâ€: %s�Linia de comandă:�DIRECTOR�Depanare: �Se È™terg argumentele %d-%d�Ștergerea argv[0] este interzisă�Nu afiÈ™ează linia de antet.�AfiÈ™ează cererea finală în modul de testare.�Mediu:�Mesaj de eroare: %s�Eroare la trimiterea mesajului de diagnosticare către descriptorul %d: %s�Eroare: �Execută COMANDA�Se execută %s, %s�Argumente finale:�Mediul final:�S-a finalizat analizarea %s�ForÈ›ează shell-ul interactiv.�Proces bifurcat %lu�GID: %lu�Oferă un mesaj scurt de utilizare�Oferă această listă de ajutor�Directorul personal: %s�EROARE INTERNÄ‚ la %s:%d: nu se poate modifica È›inta numai-pentru-citire�ERROR INTERNAL la %s:%d: tip de variabilă de mediu nevalidă %d�EROARE INTERNÄ‚ la %s:%d: tip de nod nevalid %d�EROARE INTERNÄ‚ la %s:%d: tip de È›intă nevalidă %d�EROARE INTERNÄ‚ la %s:%d: tip de nod nerecunoscut %d�EROARE INTERNÄ‚ la %s:%d: cod operaÈ›ional nerecunoscut %d�EROARE INTERNÄ‚ la %s:%d: operaÈ›ie nerecunoscută %d�Se ignoră fiÈ™ierul de includere inexistent %s�InformaÈ›ii:�Expresie de conversie nevalidă: %s�ÃŽnlocuire nevalidă a conversiei de transformare: referinÈ›a din spate este în afara intervalului�CUVINTE-CHEIE�LicenÈ›a GPLv3+: GNU GPL versiunea 3 sau ulterioară <http://gnu.org/licenses/gpl.html> Acesta este software liber: sunteÈ›i liber să îl modificaÈ›i È™i să îl redistribuiÈ›i. NU există NICIO GARANÈšIE, în măsura permisă de lege. �A apărut o eroare de configurare locală. ContactaÈ›i administratorul de sistem pentru asistență suplimentară. �Caută fiÈ™ierele bazei de date în DIRECTOR.�Argumentele obligatorii sau opÈ›ionale ale opÈ›iunilor lungi sunt, de asemenea, obligatorii sau opÈ›ionale pentru orice opÈ›iuni scurte corespunzătoare.�LipseÈ™te al doilea delimitator în poziÈ›ia %d din expresia %s�LipseÈ™te delimitatorul final la poziÈ›ia %d din expresia %s�NUME�NUMÄ‚R�Nicio configuraÈ›ie implicită�Nu este permisă autentificarea pentru „%sâ€�Nu este suficientă memorie�Aviz: �OPÈšIUNE�Alte opÈ›iuni�Se analizează %s�AfiÈ™ează rezultatul analizei gramaticale È™i lexicale�AfiÈ™ează versiunea programului�Numele programului: %s�Se elimină opÈ›iunea %s %s�RaportaÈ›i erorile la %s. �Se reia analizarea %s de la linia %d�Regula %s de la %s:%d s-a potrivit�Rulează în modul test�ÅžIR�Test de scanare.�Servirea cererii de shell interactiv pentru %s după regula %s�Servirea cererii „%s†pentru %s după regula %s�StabileÈ™te nivelul de depanare�Se stabileÈ™te limita %d la %lu�Se stabilesc limitele pentru %s�Se stabileÈ™te prioritatea la %d�AfiÈ™ează cel mult NUMÄ‚R înregistrări.�AfiÈ™ează configuraÈ›ia implicită.�AfiÈ™ează intrările în ordine cronologică.�FurnizaÈ›i numele de utilizator în modul de testare.�Prea multe autentificări (max %zu) pentru %s�Expresia de transformare trebuie să înceapă cu „s†urmat de un caracter de punctuaÈ›ie.�Harta de conversie: %s, %s, %s, %u, %u, %s�Conversia argv[%d]�Conversia liniei de comandă�Conversia numelui programului (%s)�Conversia variabilei %s=%s�Fanion necunoscut în expresia de conversie: %c�Referință necunoscută pentru mesaj�Eroare de sistem necunoscută�Utilizare:�Utilizează ȘIR în loc de formatul implicit.�Avertisment: �Nu vi se permite să executaÈ›i această comandă. ContactaÈ›i administratorul de sistem pentru asistență suplimentară. �Nu aveÈ›i acces interactiv de conectare la această maÈ™ină. ContactaÈ›i administratorul de sistem pentru asistență suplimentară. �[FIȘIER]�[utilizator [utilizator...]]�baza de date de conturi este goală�nu se poate schimba la directorul %s: %s�nu se poate efectua chroot în %s: %s�nu se poate crea directorul %s: %s�nu se poate forÈ›a aplicarea identificatorului de grup (gid) %lu: %s�nu se poate forÈ›a aplicarea identificatorului de utilizator (uid) %lu: %s�nu se poate deschide baza de date %s: %s�nu se poate deschide fiÈ™ierul de bază de date „%sâ€�nu se poate deschide fiÈ™ierul %s: %s�nu se poate deschide fiÈ™ierul în format %s�nu se pot stabili limitele pentru %s�nu se poate obÈ›ine starea directorului %s: %s�nu se poate obÈ›ine starea fiÈ™ierului %s: %s�nu s-a putut interoga starea fiÈ™ierului de format %s�chdir %s�contorizate %zu/%zu autentificări pentru %s�contorizarea autentificărilor pentru %s�nivel de depanare stabilit la %d�conversia mediului nu este încă implementată�eroare la stabilirea limitei: %s�eroare la stabilirea priorității: %s�Eroare la scrierea marcatorului de oprire în fiÈ™ierul bazei de date %s: %s�eroare la scrierea în baza de date %s: %s�se aÈ™tepta „~†ca al doilea argument, dar s-a găsit „%sâ€�argumente suplimentare�nu s-a reuÈ™it analizarea valorii: %s�nu s-a putut scrie mesajul la ieÈ™irea de eroare standard (stderr): %s�nu s-a putut scrie mesajul la ieÈ™irea standard (stdout): %s�linie de comandă nevalidă�descriptor de fiÈ™ier nevalid�format nevalid: %s�nume de fiÈ™ier de includere nevalid�număr nevalid (%s)�număr nevalid: %s�cod operaÈ›ional nevalid�expresie regulată nevalidă: %s�declaraÈ›ie nevalidă: lipseÈ™te valoarea�oră nevalidă: %s�uid nevalid %lu�nume de utilizator nevalid�câmpul de cheie nu este un număr�lipseÈ™te „]â€�ghilimele de închidere lipsă din È™irul început lângă „%sâ€�nu există niciun argument la indicele %d din comanda: %s�nicio regulă care să corespundă pentru „%sâ€, utilizator %s�nu există acest grup: %s�nu există acest utilizator: %s�memorie insuficientă�se analizează configuraÈ›ia încorporată moÈ™tenită�se analizează fiÈ™ierul de configurare moÈ™tenit %s�rush - shell de utilizator restricÈ›ionat.�rushlast - afiÈ™ează lista ultimelor autentificări Rush.�rushwho - afiÈ™ează lista utilizatorilor Rush conectaÈ›i.�seteuid(0) a reuÈ™it când nu ar fi trebuit�declaraÈ›ia nu poate fi utilizată în afara unei reguli�opÈ›iunea „--user†este permisă doar pentru superutilizator.�prea puÈ›ine argumente�prea multe argumente�valoare convertită: %s�cuvânt cheie necunoscut: %s�limită necunoscută: %s�fanion de expresie regulată necunoscut: %s�declaraÈ›ie necunoscută: %s�utilizator %s, uid %lu�câmpul de valoare nu este un număr�wordsplit(%s) a eÈ™uat: %s�������������������������������������������������������rush-2.4/po/de.po�����������������������������������������������������������������������������������0000644�0001750�0001750�00000060700�14655401312�013700� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# German translation of rush. # Copyright (C) 2014 Free Software Foundation, Inc. # This file is distributed under the same license as the rush package. # Mario Blättermann <mario.blaettermann@gmail.com>, 2014-2019, 2022. #: rwopt.opt:23 msgid "" msgstr "" "Project-Id-Version: GNU rush 2.2\n" "Report-Msgid-Bugs-To: bug-rush@gnu.org\n" "POT-Creation-Date: 2024-08-09 14:51+0300\n" "PO-Revision-Date: 2022-01-02 18:29+0100\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" "X-Generator: Lokalize 21.12.0\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" #: src/config.c:163 #, c-format msgid "Finished parsing %s" msgstr "Einlesen von »%s« beendet" #: src/config.c:169 #, c-format msgid "Resuming parsing %s from line %d" msgstr "Einlesen von %s wird in Zeile %d wiederaufgenommen" #: src/config.c:262 #, c-format msgid "invalid number: %s" msgstr "Ungültige Zahl: %s" #: src/config.c:275 msgid "invalid opcode" msgstr "Ungültiger Opcode" #: src/config.c:297 #, c-format msgid "invalid regexp: %s" msgstr "Ungültiger regulärer Ausdruck: %s" #: src/config.c:336 #, c-format msgid "unknown regexp flag: %s" msgstr "Unbekannter Schalter im regulären Ausdruck: %s" #: src/config.c:353 msgid "too few arguments" msgstr "Zu wenige Argumente" #: src/config.c:357 src/rush.c:1381 msgid "too many arguments" msgstr "Zu viele Argumente" #: src/config.c:428 #, c-format msgid "no such user: %s" msgstr "Kein solcher Benutzer: %s" #: src/config.c:453 src/config.c:1106 #, c-format msgid "no such group: %s" msgstr "Keine solche Gruppe: %s" #: src/config.c:543 #, c-format msgid "unknown limit: %s" msgstr "Unbekannte Begrenzung: %s" #: src/config.c:560 #, c-format msgid "expected ~ as the second argument, but found %s" msgstr "~ wurde als zweites Argument erwartet, aber %s gefunden" #: src/config.c:718 #, c-format msgid "debug level set to %d" msgstr "Debug-Level auf %d gesetzt" #: src/config.c:730 #, c-format msgid "invalid time: %s" msgstr "Ungültige Zeit: %s" #: src/config.c:786 msgid "invalid file descriptor" msgstr "Ungültiger Dateideskriptor" #: src/config.c:800 msgid "Unknown message reference" msgstr "Unbekannte Meldungsreferenz" #: src/config.c:893 msgid "invalid include file name" msgstr "Ungültiger Name der Include-Datei" #: src/config.c:900 #, c-format msgid "Ignoring non-existing include file %s" msgstr "Nicht existierende Include-Datei %s wird ignoriert" #: src/config.c:906 #, c-format msgid "cannot stat file %s: %s" msgstr "Aufruf von »stat« für Datei %s nicht möglich: %s" #: src/config.c:934 rushopt.opt:90 #, c-format msgid "unknown keyword: %s" msgstr "unbekanntes Schlüsselwort: %s" #: src/config.c:982 msgid "key field is not a number" msgstr "Schlüssel-Feld ist keine Zahl" #: src/config.c:988 msgid "value field is not a number" msgstr "Wert-Feld ist keine Zahl" #: src/config.c:1033 src/config.c:1038 src/rush.c:262 #, c-format msgid "%s: not a number" msgstr "%s: Keine Zahl" #: src/config.c:1211 src/config.c:1340 #, c-format msgid "Parsing %s" msgstr "%s wird eingelesen" #: src/config.c:1245 #, c-format msgid "unknown statement: %s" msgstr "Unbekannte Anweisung: %s" #: src/config.c:1280 msgid "missing ]" msgstr "] fehlt" #: src/config.c:1289 msgid "invalid statement: missing value" msgstr "Ungültige Anweisung: Wert fehlt" #: src/config.c:1310 #, c-format msgid "failed to parse value: %s" msgstr "Wert kann nicht eingelesen werden: %s" #: src/config.c:1328 msgid "statement cannot be used outside a rule" msgstr "Anweisung kann nicht außerhalb einer Regel verwendet werden" #: src/config.c:1366 msgid "parsing legacy built-in configuration" msgstr "Veraltete eingebaute Konfiguration wird eingelesen" #: src/config.c:1368 #, c-format msgid "parsing legacy configuration file %s" msgstr "Veraltete eingebaute Konfigurationsdatei %s wird eingelesen" #: src/limits.c:53 #, c-format msgid "Setting limit %d to %lu" msgstr "Begrenzung %d wird auf %lu gesetzt" #: src/limits.c:58 #, c-format msgid "error setting limit: %s" msgstr "Fehler beim Setzen der Begerenzung: %s" #: src/limits.c:68 #, c-format msgid "Setting priority to %d" msgstr "Fehler beim Setzen der Priorität auf %d" #: src/limits.c:70 #, c-format msgid "error setting priority: %s" msgstr "Fehler beim Setzen der Priorität: %s" #: src/limits.c:86 src/limits.c:87 #, c-format msgid "No logins allowed for `%s'" msgstr "Keine Anmeldungen erlaubt für »%s«" #: src/limits.c:91 #, c-format msgid "counting logins for %s" msgstr "Anmeldungen für %s werden gezählt" #: src/limits.c:97 msgid "acct database is empty" msgstr "Benutzerkonten-Datenbank ist leer" #: src/limits.c:101 #, c-format msgid "Cannot open database %s: %s" msgstr "Datenbank %s kann nicht geöffnet werden: %s" #: src/limits.c:119 #, c-format msgid "counted %zu/%zu logins for %s" msgstr "%zu/%zu Anmeldungen für %s gezählt" #: src/limits.c:126 src/limits.c:128 #, c-format msgid "Too many logins (max %zu) for %s" msgstr "Zu viele Anmeldungen (max. %zu) für %s" #: src/limits.c:143 #, c-format msgid "Setting limits for %s" msgstr "Begrenzungen für %s werden gesetzt" #: src/rush.c:43 msgid "" "You are not permitted to execute this command.\n" "Contact the systems administrator for further assistance.\n" msgstr "" "Es ist Ihnen nicht gestattet, diesen Befehl auszuführen.\n" "Kontaktieren Sie den Systemadministrator für weitere\n" "Informationen.\n" #: src/rush.c:47 msgid "" "You do not have interactive login access to this machine.\n" "Contact the systems administrator for further assistance.\n" msgstr "" "Sie haben nicht das Recht, sich interaktiv an diesem Rechner\n" "anzumelden. Kontaktieren Sie den Systemadministrator für\n" "weitere Informationen.\n" #: src/rush.c:51 msgid "" "Local configuration error occurred.\n" "Contact the systems administrator for further assistance.\n" msgstr "" "In der lokalen Konfiguration ist ein Fehler aufgetreten.\n" "Kontaktieren Sie den Systemadministrator für weitere\n" "Informationen.\n" #: src/rush.c:55 msgid "" "A system error occurred while attempting to execute command.\n" "Contact the systems administrator for further assistance.\n" msgstr "" "Beim Versuch, einen Befehl auszuführen, ist ein Systemfehler\n" "aufgetreten. Kontaktieren Sie den Systemadministrator für\n" "weitere Informationen.\n" #: src/rush.c:156 #, c-format msgid "failed to write message to stderr: %s" msgstr "" "Meldung konnte nicht in die Standardfehlerausgabe geschrieben werden: %s" #: src/rush.c:160 #, c-format msgid "failed to write message to stdout: %s" msgstr "Meldung konnte nicht in die Standardausgabe geschrieben werden: %s" #: src/rush.c:172 #, c-format msgid "Debug: " msgstr "Debug: " #: src/rush.c:176 #, c-format msgid "Info: " msgstr "Info: " #: src/rush.c:180 #, c-format msgid "Notice: " msgstr "Hinweis: " #: src/rush.c:184 #, c-format msgid "Warning: " msgstr "Warnung: " #: src/rush.c:191 #, c-format msgid "Error: " msgstr "Fehler: " #: src/rush.c:248 msgid "Not enough memory" msgstr "Nicht genügend Speicher" #: src/rush.c:279 src/rush.c:324 #, c-format msgid "INTERNAL ERROR at %s:%d: unrecognized opcode %d" msgstr "INTERNER FEHLER in %s:%d: Nicht erkannter Opcode %d" #: src/rush.c:408 #, c-format msgid "%s:%d: %s: can't stat '%s': %s" msgstr "%s:%d: %s: Aufruf von »stat« für »%s« nicht möglich: %s" #: src/rush.c:469 #, c-format msgid "INTERNAL ERROR at %s:%d: unrecognized operation %d" msgstr "INTERNER FEHLER in %s:%d: Nicht erkannte Operation %d" #: src/rush.c:509 #, c-format msgid "INTERNAL ERROR at %s:%d: unrecognized node type %d" msgstr "INTERNER FEHLER in %s:%d: Nicht erkannter Node-Typ %d" #: src/rush.c:718 #, c-format msgid "INTERNAL ERROR at %s:%d: invalid envar type %d" msgstr "INTERNER FEHLER in %s:%d: Ungültiger Umgebungsvariablentyp %d" #: src/rush.c:723 msgid "Final environment:" msgstr "Endgültige Umgebung:" #: src/rush.c:737 #, c-format msgid "wordsplit(%s) failed: %s" msgstr "wordsplit(%s) fehlgeschlagen: %s" #: src/rush.c:763 #, c-format msgid "no argument at index %d in command: %s" msgstr "Kein Argument im Index %d im Befehl: %s" #: src/rush.c:906 #, c-format msgid "Removing option %s %s" msgstr "Option %s %s wird entfernt" #: src/rush.c:918 msgid "Transforming command line" msgstr "Befehlszeile wird umgewandelt" #: src/rush.c:925 #, c-format msgid "Transforming program name (%s)" msgstr "Programmname wird geändert (%s)" #: src/rush.c:943 #, c-format msgid "Transforming argv[%d]" msgstr "argv[%d] wird modifiziert" #: src/rush.c:950 #, c-format msgid "Transforming variable %s=%s" msgstr "Variable %s=%s wird umgewandelt" #: src/rush.c:957 src/rush.c:1043 msgid "environment transformation is not yet implemented" msgstr "Umgebungsumwandlung ist noch nicht implementiert" #: src/rush.c:961 #, c-format msgid "INTERNAL ERROR at %s:%d: can't modify read-only target" msgstr "" "INTERNER FEHLER in %s:%d: schreibgeschütztes Ziel kann nicht verändert werden" #: src/rush.c:980 #, c-format msgid "Transformation map: %s, %s, %s, %u, %u, %s" msgstr "Umwandlungsanweisung: %s, %s, %s, %u, %u, %s" #: src/rush.c:994 #, c-format msgid "INTERNAL ERROR at %s:%d: invalid node type %d" msgstr "INTERNER FEHLER in %s:%d: Ungültiger Node-Typ %d" #: src/rush.c:1001 #, c-format msgid "transformed value: %s" msgstr "Umgewandelter Wert: %s" #: src/rush.c:1022 #, c-format msgid "Deleting arguments %d-%d" msgstr "Argumente %d-%d werden gelöscht" #: src/rush.c:1025 msgid "Deleting argv[0] is prohibited" msgstr "Löschen von argv[0] ist nicht erlaubt" #: src/rush.c:1047 #, c-format msgid "INTERNAL ERROR at %s:%d: invalid target type %d" msgstr "INTERNER FEHLER in %s:%d: Ungültiger Zieltyp %d" #: src/rush.c:1065 #, c-format msgid "Program name: %s" msgstr "Programmname: %s" #: src/rush.c:1066 msgid "Final arguments:" msgstr "Endgültige Argumente:" #: src/rush.c:1084 #, c-format msgid "error writing to database %s: %s" msgstr "Fehler beim Schreiben in die Datenbank %s: %s" #: src/rush.c:1093 #, c-format msgid "error writing stop to database file %s: %s" msgstr "Fehler beim Schreiben der Stoppmarkierung in die Datenbankdatei %s: %s" #: src/rush.c:1114 #, c-format msgid "%s:%d: %s: cannot fork: %s" msgstr "%s:%d: %s: Erzeugen eines Unterprozesses nicht möglich: %s" #: src/rush.c:1124 #, c-format msgid "Forked process %lu" msgstr "Unterprozess %lu wurde erzeugt" #: src/rush.c:1128 #, c-format msgid "%s: subprocess exited with code %d" msgstr "%s: Unterprozess abgebrochen mit Code %d" #: src/rush.c:1131 #, c-format msgid "%s: subprocess terminated on signal %d" msgstr "%s: Unterprozess beendet durch Signal %d" #: src/rush.c:1134 #, c-format msgid "%s: subprocess terminated" msgstr "%s: Unterprozess beendet" #: src/rush.c:1223 #, c-format msgid "cannot enforce gid %lu: %s" msgstr "Gruppen-ID %lu kann nicht erzwungen werden: %s" #: src/rush.c:1228 #, c-format msgid "cannot enforce uid %lu: %s" msgstr "Benutzer-ID %lu kann nicht erzwungen werden: %s" #: src/rush.c:1233 msgid "seteuid(0) succeeded when it should not" msgstr "seteuid(0) war erfolgreich, sollte aber nicht" #: src/rush.c:1239 #, c-format msgid "Rule %s at %s:%d matched" msgstr "Übereinstimmung für Regel %s bei %s:%d" #: src/rush.c:1253 #, c-format msgid "Error message: %s" msgstr "Fehlermeldung: %s" #: src/rush.c:1256 #, c-format msgid "Error sending diagnostic message to descriptor %d: %s" msgstr "Fehler beim Senden der Diagnosemeldungen an den Deskriptor %d: %s" #: src/rush.c:1262 #, c-format msgid "cannot set limits for %s" msgstr "Begrenzungen für %s können nicht gesetzt werden" #: src/rush.c:1269 #, c-format msgid "Chroot dir: %s" msgstr "Chroot-Verzeichnis: %s" #: src/rush.c:1276 #, c-format msgid "Home dir: %s" msgstr "Home-Verzeichnis: %s" #: src/rush.c:1281 #, c-format msgid "GID: %lu" msgstr "Gruppen-ID: %lu" #: src/rush.c:1306 #, c-format msgid "cannot open database %s: %s" msgstr "Datenbank %s kann nicht geöffnet werden: %s" #: src/rush.c:1315 #, c-format msgid "cannot chroot to %s: %s" msgstr "Wechsel in das chroot-Verzeichnis %s nicht möglich: %s" #: src/rush.c:1322 src/rush.c:1414 #, c-format msgid "invalid uid %lu" msgstr "ungültige Benutzer-ID %lu" #: src/rush.c:1327 #, c-format msgid "chdir %s" msgstr "In %s wird gewechselt" #: src/rush.c:1330 #, c-format msgid "cannot change to dir %s: %s" msgstr "Wechsel in das Verzeichnis %s nicht möglich: %s" #: src/rush.c:1334 #, c-format msgid "Executing %s, %s" msgstr "%s wird ausgeführt, %s" #: src/rush.c:1349 #, c-format msgid "%s:%d: %s: cannot execute %s: %s" msgstr "%s:%d: %s: %s kann nicht ausgeführt werden: %s" #: src/rush.c:1392 src/rush.c:1394 msgid "invalid command line" msgstr "ungültige Befehlszeile" #: src/rush.c:1405 msgid "invalid user name" msgstr "ungültiger Benutzername" #: src/rush.c:1416 #, c-format msgid "user %s, uid %lu" msgstr "Benutzer %s, UID %lu" #: src/rush.c:1428 msgid "Command line:" msgstr "Befehlszeile:" #: src/rush.c:1431 msgid "Environment:" msgstr "Umgebung:" #: src/rush.c:1462 #, c-format msgid "Serving interactive shell request for %s by rule %s" msgstr "Anfrage für interaktive Shell »%s« gemäß Regel %s wird gestellt" #: src/rush.c:1466 #, c-format msgid "Serving request \"%s\" for %s by rule %s" msgstr "Anfrage »%s« für »%s« gemäß Regel %s wird gestellt" #: src/rush.c:1472 #, c-format msgid "no matching rule for \"%s\", user %s" msgstr "Keine passende Regel für »%s«, Benutzer %s" #: src/rushlast.c:31 src/rushwho.c:30 #, c-format msgid "not enough memory" msgstr "Nicht genügend Speicher" #: src/rushlast.c:78 src/rushwho.c:67 #, c-format msgid "invalid format: %s" msgstr "Ungültiges Format: %s" #: src/rushlast.c:88 src/rushwho.c:77 #, c-format msgid "cannot open database file %s" msgstr "Datenbankdatei %s kann nicht geöffnet werden" #: src/rushwho.c:61 #, c-format msgid "extra arguments" msgstr "zusätzliche Argumente" #: src/socket.c:61 #, c-format msgid "%s: TCPMUX did not respond" msgstr "%s: TCPMUX antwortete nicht" #: src/socket.c:65 #, c-format msgid "%s: TCPMUX returned %s" msgstr "%s: TCPMUX gab %s zurück" #: src/transform.c:155 msgid "" "Transform expression must start with 's' followed by a punctuation character" msgstr "" "Umwandlungsausdruck muss mit »s« beginnen, dem ein Interpunktionszeichen " "folgt" #: src/transform.c:166 #, c-format msgid "Missing 2nd delimiter in position %d of expression %s" msgstr "Fehlendes zweites Trennzeichen in Position %d des Ausdrucks %s" #: src/transform.c:176 #, c-format msgid "Missing trailing delimiter in position %d of expression %s" msgstr "Fehlendes angehängtes Trennzeichen in Position %d des Ausdrucks %s" #: src/transform.c:203 #, c-format msgid "Unknown flag in transform expression: %c" msgstr "Unbekannter Schalter im Umwandlungsausdruck: %c" #: src/transform.c:220 #, c-format msgid "Invalid transform expression: %s" msgstr "Ungültiger Umwandlungsausdruck: %s" #: src/transform.c:248 msgid "Invalid transform replacement: back reference out of range" msgstr "" "Ungültige Ersetzung bei der Umwandlung: Rückreferenz ist außerhalb des " "zulässigen Bereichs" #: rushopt.opt:27 rlopt.opt:56 msgid "NUMBER" msgstr "ZAHL" #: rushopt.opt:27 msgid "Set debugging level." msgstr "Fehlerdiagnosestufe festlegen." #: rushopt.opt:35 msgid "Run in test mode." msgstr "Im Testmodus ausführen." #: rushopt.opt:41 msgid "Scanner test." msgstr "Scanner-Test." #: rushopt.opt:47 msgid "Print grammar and lexical analyzer traces" msgstr "Ergebnisse der grammatischen und lexikalischen Analyse ausgeben" #: rushopt.opt:53 msgid "NAME" msgstr "NAME" #: rushopt.opt:53 msgid "Supply user name in test mode." msgstr "Benutzername im Testmodus übergeben." #: rushopt.opt:65 msgid "COMMAND" msgstr "BEFEHL" #: rushopt.opt:65 msgid "Execute COMMAND." msgstr "Führt BEFEHL aus." #: rushopt.opt:71 msgid "Force interactive shell." msgstr "Interaktive Shell wird erzwungen." #: rushopt.opt:78 msgid "KEYWORDS" msgstr "SCHLÜSSELWÖRTER" #: rushopt.opt:78 msgid "Dump final request in test mode." msgstr "Finale Anfrage im Testmodus ausführen." #: rushopt.opt:85 msgid "CHECK" msgstr "CHECK" #: rushopt.opt:85 msgid "Add or remove configuration security check." msgstr "Sicherheitsüberprüfung der Konfiguration hinzufügen oder entfernen." #: rushopt.opt:93 msgid "Show default configuration." msgstr "Standardkonfiguration anzeigen." #: rushopt.opt:102 rwopt.opt:40 rlopt.opt:82 msgid "Other options" msgstr "Weitere Optionen" #: rushopt.opt:102 rwopt.opt:40 rlopt.opt:82 msgid "Give this help list" msgstr "Diese Hilfe ausgeben" #: rushopt.opt:102 rwopt.opt:40 rlopt.opt:82 msgid "Give a short usage message" msgstr "Kurzen Bedienungshinweis ausgeben" #: rushopt.opt:102 rwopt.opt:40 rlopt.opt:82 msgid "Print program version" msgstr "Programmversion ausgeben" #: rushopt.opt:23 msgid "rush - restricted user shell." msgstr "rush - eine eingeschränkte Benutzershell." #: rushopt.opt:25 msgid "[FILE]" msgstr "[DATEI]" #: rushopt.opt:125 rushopt.opt:359 rwopt.opt:123 rwopt.opt:357 rlopt.opt:126 #: rlopt.opt:360 msgid "Usage:" msgstr "Aufruf:" #: rushopt.opt:125 rwopt.opt:123 rlopt.opt:126 msgid "OPTION" msgstr "OPTION" #: rushopt.opt:243 rwopt.opt:241 rlopt.opt:244 msgid "" "Mandatory or optional arguments to long options are also mandatory or " "optional for any corresponding short options." msgstr "" "Erforderliche oder optionale Argumente für lange Optionen sind ebenso " "erforderlich bzw. optional für die entsprechenden Kurzoptionen." #: rushopt.opt:247 rwopt.opt:245 rlopt.opt:248 #, 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" #: rushopt.opt:700 rwopt.opt:698 rlopt.opt:701 msgid "(C)" msgstr "(C)" #: rushopt.opt:718 rwopt.opt:716 rlopt.opt:719 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" #: rushopt.opt:60 msgid "the --user option is allowed for the superuser only" msgstr "Die Option --user ist dem Superuser »root« vorbehalten" #: rushopt.opt:100 #, c-format msgid "No default configuration" msgstr "Keine Standardkonfiguration" #: rwopt.opt:24 rlopt.opt:28 msgid "STRING" msgstr "ZEICHENKETTE" #: rwopt.opt:24 rlopt.opt:28 msgid "Use STRING instead of the default format." msgstr "ZEICHENKETTE anstelle des Standardformats verwenden." #: rwopt.opt:30 rlopt.opt:35 msgid "DIR" msgstr "VERZEICHNIS" #: rwopt.opt:30 rlopt.opt:35 msgid "Look for database files in DIR." msgstr "In VERZEICHNIS nach Datenbankdateien suchen." #: rwopt.opt:36 rlopt.opt:49 msgid "Do not display header line." msgstr "Keine Kopfzeile anzeigen." #: rwopt.opt:21 msgid "rushwho - show listing of online Rush users." msgstr "rushwho – Liste der angemeldeten Rush-Benutzer anzeigen." #: rlopt.opt:42 msgid "Show entries in chronological order." msgstr "Einträge in zeitlicher Reihenfolge anzeigen." #: rlopt.opt:56 msgid "Show at most NUM records." msgstr "Höchstens ZAHL Datensätze anzeigen." #: rlopt.opt:24 msgid "rushlast - show listing of last Rush logins." msgstr "rushlast - zeigt eine Liste der letzten Rush-Anmeldungen an." #: rlopt.opt:26 msgid "[user [user...]]" msgstr "[Benutzer [Benutzer …]]" #: rlopt.opt:63 #, c-format msgid "invalid number (%s)" msgstr "Ungültige Zahl (%s)" #: lib/readfmt.c:40 #, c-format msgid "cannot stat format file %s" msgstr "Aufruf von »stat« für Formatdatei %s nicht möglich" #: lib/readfmt.c:42 #, c-format msgid "%s is not a regular file" msgstr "%s ist keine reguläre Datei" #: lib/readfmt.c:46 #, c-format msgid "cannot open format file %s" msgstr "Formatdatei %s kann nicht geöffnet werden" #: lib/rushdb.c:79 #, c-format msgid "cannot create directory %s: %s" msgstr "Verzeichnis %s konnte nicht erstellt werden: %s" #: lib/rushdb.c:84 #, c-format msgid "cannot stat directory %s: %s" msgstr "Aufruf von »stat« für Verzeichnis %s nicht möglich: %s" #: lib/rushdb.c:89 #, c-format msgid "%s is not a directory" msgstr "%s ist kein Verzeichnis" #: lib/rushdb.c:100 lib/rushdb.c:114 #, c-format msgid "cannot open file %s: %s" msgstr "Datei %s konnte nicht geöffnet werden: %s" #: lib/rushdb.c:586 #, c-format msgid "missing closing quote in string started near `%s'" msgstr "" "Fehlendes schließendes Zitatzeichen in Zeichenkette, öffnendes bei »%s«" #: lib/version.c:28 msgid "" "\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" msgstr "" "\n" "Lizenz GPLv3+: GNU GPL Version 3 oder neuer <http://gnu.org/licenses/gpl." "html>\n" "Dies ist freie Software: Sie können sie ändern und weitergeben.\n" "Es gibt keinerlei Garantien, soweit gesetzlich zulässig.\n" "\n" #: gnu/error.c:194 msgid "Unknown system error" msgstr "Unbekannter Systemfehler" #: gnu/getopt.c:278 #, c-format msgid "%s: option '%s%s' is ambiguous\n" msgstr "%s: Die Option »%s%s« ist nicht eindeutig\n" #: gnu/getopt.c:284 #, c-format msgid "%s: option '%s%s' is ambiguous; possibilities:" msgstr "%s: Die Option »%s%s« ist nicht eindeutig; möglich wären:" #: gnu/getopt.c:319 #, c-format msgid "%s: unrecognized option '%s%s'\n" msgstr "%s: Unbekannte Option »%s%s«\n" #: gnu/getopt.c:345 #, c-format msgid "%s: option '%s%s' doesn't allow an argument\n" msgstr "%s: Die Option »%s%s« erlaubt kein Argument\n" #: gnu/getopt.c:360 #, c-format msgid "%s: option '%s%s' requires an argument\n" msgstr "%s: Die Option »%s%s« benötigt ein Argument\n" #: gnu/getopt.c:621 #, c-format msgid "%s: invalid option -- '%c'\n" msgstr "%s: ungültige Option -- »%c«\n" #: gnu/getopt.c:636 gnu/getopt.c:682 #, c-format msgid "%s: option requires an argument -- '%c'\n" msgstr "%s: Die Option benötigt ein Argument -- »%c«\n" #~ msgid "Ignoring non-existing file %s" #~ msgstr "Nicht existierende Datei %s wird ignoriert" #~ msgid "%s: file is not safe" #~ msgstr "%s: Datei ist nicht sicher" #~ msgid "error reading file %s: %s" #~ msgstr "Fehler beim Lesen der Datei %s: %s" #~ msgid "read 0 bytes from file %s" #~ msgstr "0 Bytes aus Datei %s gelesen" #~ msgid "not an absolute directory name" #~ msgstr "Kein absoluter Verzeichnisname" #~ msgid "%s:%d: %s is not a directory" #~ msgstr "%s:%d: %s ist kein Verzeichnis" #~ msgid "%s:%d: invalid number: %s" #~ msgstr "%s:%d: Ungültige Zahl: %s" #~ msgid "%s:%d: invalid chroot directory" #~ msgstr "%s:%d: Ungültiges chroot-Verzeichnis" #~ msgid "%s:%d: invalid home directory" #~ msgstr "%s:%d: Ungültiges Home-Verzeichnis" #~ msgid "%s:%d: Unknown message reference" #~ msgstr "%s:%d: Unbekannte Meldungsreferenz" #~ msgid "%s:%d: expected boolean value, but found `%s'" #~ msgstr "%s:%d: Boolescher Wert wurde erwartet, aber »%s« gefunden" #~ msgid "%s:%d: unknown address family" #~ msgstr "%s:%d: Ungültige Adressfamilie" #~ msgid "%s:%d: malformed URL" #~ msgstr "%s:%d: Beschädigte URL" #~ msgid "%s:%d: port is meaningless for UNIX sockets" #~ msgstr "%s:%d: Port ist für UNIX-Sockets bedeutungslos" #~ msgid "%s:%d: UNIX socket name too long" #~ msgstr "%s:%d: UNIX-Name des Sockets ist zu lang" #~ msgid "%s:%d: bad port number" #~ msgstr "%s:%d: Falsche Portnummer" #~ msgid "%s:%d: unknown service name" #~ msgstr "%s:%d: Unbekannter Dienstname" #~ msgid "%s:%d: unknown host name %s" #~ msgstr "%s:%d: Unbekannter Rechnername %s" #~ msgid "%s:%d: unsupported address family" #~ msgstr "%s:%d: Nicht unterstützte Adressfamilie" #~ msgid "%s:%d: cannot stat file %s: %s" #~ msgstr "%s:%d: Aufruf von »stat« für Datei %s nicht möglich: %s" #~ msgid "%s:%d: unknown keyword: %s" #~ msgstr "%s:%d: Unbekanntes Schlüsselwort: %s" #~ msgid "Falling back to the default configuration" #~ msgstr "Es wird auf die Standardkonfiguration ausgewichen" #~ msgid "%s:%d: INTERNAL ERROR: node type out of range" #~ msgstr "%s:%d: INTERNER FEHLER: Node-Typ außerhalb des zulässigen Bereichs" #~ msgid "Transform: \"%s\" -> \"%s\"" #~ msgstr "Umwandlung: »%s« -> »%s«" #~ msgid "Command line: %s" #~ msgstr "Befehlszeile: %s" #~ msgid "Setting command line" #~ msgstr "Befehlszeile wird gesetzt" #~ msgid "%s:%d: internal error" #~ msgstr "%s:%d: Interner Fehler" ����������������������������������������������������������������rush-2.4/po/vi.gmo����������������������������������������������������������������������������������0000644�0001750�0001750�00000031646�14655401314�014103� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Þ•����€��������­���������Ð ��É���Ñ �����› �����± �����Ê �����å �����ü ��(��� ��"���A �����d ��&���~ �� ���¥ �����Æ �����á ��w���å ��+���] �����‰ ����� �����— �����³ �� ��� �����Ð �����Ô �����Ü �����õ ������� ���0�� ���Q�����^��5���p�����¦�����®�����¿�����Ð�����á�����ô����������!�����4�����=�����X�� ���l��%���y�����Ÿ�� ���¦��:���Ç�������È��� ��^���Ô�����3��s���S��5���Ç��:���ý�����8�����=�����D�����]�����x�����Š�� ���‘�� ���Ÿ�����ª�����À�����Ñ�� ���å���������������1��3���8��&���l�����“�����¨�����À�����Ö�����í�������$���#�����H�� ���g��*���ˆ�����³��(���Í�����ö����� ��)����� ���<��i���F��t���°�����%�����,�����=�����T�����p�����ˆ�����§�����Â�����Ý�����ù����������.�����I�����b����������—�����²�����Ð�����ç�����ý�������*���0�� ���[�����|�����Œ�����¡�����´�����È�����Ø��1���ê��&�����"���C�����f��,���x��,���¥��'���Ò��3���ú�����.�����B�����S��Ø��l��"��E�����h��2���„�����·�����Ô��.���î��9�����3���W��'���‹��9���³��,���í��(��������C��v���F��>���½�� ���ü�� ��� ��-��� �����A �� ���W �����e �� ���l ��!���y �����› ��(���¹ ��.���â �����!�����!!��K���7!�����ƒ!�����‹!�����«!�����Æ!�����å!��*���"��"���-"��#���P"�����t"�����}"�����"�����»"��8���Ñ"�� ��� #��3���#��O���K#�����›#��"��«#��P���Î$��:���%�����Z%��L���ê%��M���7&�����…&�����Š&��$���&��4���´&�����é&�� ���'����� '��$���'��"���D'�����g'��k���€'��E���ì'��&���2(�����Y(�����w(��L���(��C���Ì(�����)��'���))��%���Q)��&���w)��+���ž)��'���Ê)��;���ò)��7���.*��@���f*��1���§*��"���Ù*��7���ü*�����4+�� ���R+��9���_+�����™+��k���¨+�����,�� ���¥,��$���±,��'���Ö,��3���þ,��;���2-��$���n-��#���“-��#���·-��-���Û-��3��� .��"���=.��-���`.��*���Ž.��4���¹.��3���î.��>���"/��7���a/��5���™/��)���Ï/��'���ù/��*���!0��;���L0��4���ˆ0�����½0�����Ó0�����ò0����� 1�� ���)1�����51��P���M1��>���ž1��L���Ý1�����*2��O���B2��L���’2��'���ß2��L���3�����T3�����n3�����‰3�����n���E���<�������R���a����������i����������z�������A���D���M������ ���t����������5���L����������$���o���~���G�����������&���J���"�������f���%���/���������h���x����������q���N�������S�������€������� ������W���\���������������������s�������I���.���1������� �����������Y������������������������`�������6�������4�������������^���>���?���V���=���#��� ���_�������O�������P���U������3���Z���-�����������[���|���y���F������Q���K���l���m�������8���@���u���r���{�����������C����������j���d���(���7���B���T������;���*���v�������,��� ��������������)���:��������������g����������0�������������w���b���p���2���]������'���+������� ���X���}�������e���!���k���c���9�������H�������� 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. �%s is not a directory�%s is not a regular file�%s: TCPMUX did not respond�%s: TCPMUX returned %s�%s: invalid option -- '%c' �%s: option requires an argument -- '%c' �%s: subprocess exited with code %d�%s: subprocess terminated�%s: subprocess terminated on signal %d�%s:%d: %s: cannot execute %s: %s�%s:%d: %s: cannot fork: %s�(C)�A system error occurred while attempting to execute command. Contact the systems administrator for further assistance. �Add or remove configuration security check.�CHECK�COMMAND�Cannot open database %s: %s�Chroot dir: %s�Command line:�DIR�Debug: �Deleting arguments %d-%d�Deleting argv[0] is prohibited�Do not display header line.�Dump final request in test mode.�Environment:�Error message: %s�Error sending diagnostic message to descriptor %d: %s�Error: �Execute COMMAND.�Executing %s, %s�Final arguments:�Final environment:�Finished parsing %s�Force interactive shell.�Forked process %lu�GID: %lu�Give a short usage message�Give this help list�Home dir: %s�Ignoring non-existing include file %s�Info: �Invalid transform expression: %s�Invalid transform replacement: back reference out of range�KEYWORDS�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. �Local configuration error occurred. Contact the systems administrator for further assistance. �Look for database files in DIR.�Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options.�Missing 2nd delimiter in position %d of expression %s�Missing trailing delimiter in position %d of expression %s�NAME�NUMBER�No default configuration�No logins allowed for `%s'�Not enough memory�OPTION�Other options�Parsing %s�Print program version�Program name: %s�Report bugs to %s. �Resuming parsing %s from line %d�Rule %s at %s:%d matched�Run in test mode.�STRING�Serving interactive shell request for %s by rule %s�Serving request "%s" for %s by rule %s�Set debugging level.�Setting limit %d to %lu�Setting limits for %s�Setting priority to %d�Show at most NUM records.�Show default configuration.�Show entries in chronological order.�Supply user name in test mode.�Too many logins (max %zu) for %s�Transformation map: %s, %s, %s, %u, %u, %s�Transforming command line�Unknown flag in transform expression: %c�Unknown system error�Usage:�Use STRING instead of the default format.�Warning: �You are not permitted to execute this command. Contact the systems administrator for further assistance. �You do not have interactive login access to this machine. Contact the systems administrator for further assistance. �[FILE]�[user [user...]]�acct database is empty�cannot change to dir %s: %s�cannot chroot to %s: %s�cannot create directory %s: %s�cannot enforce gid %lu: %s�cannot enforce uid %lu: %s�cannot open database %s: %s�cannot open database file %s�cannot open file %s: %s�cannot open format file %s�cannot set limits for %s�cannot stat directory %s: %s�cannot stat file %s: %s�cannot stat format file %s�counted %zu/%zu logins for %s�counting logins for %s�debug level set to %d�error setting limit: %s�error setting priority: %s�error writing stop to database file %s: %s�error writing to database %s: %s�extra arguments�invalid command line�invalid format: %s�invalid number (%s)�invalid uid %lu�invalid user name�missing closing quote in string started near `%s'�no argument at index %d in command: %s�no matching rule for "%s", user %s�not enough memory�rushlast - show listing of last Rush logins.�rushwho - show listing of online Rush users.�seteuid(0) succeeded when it should not�the --user option is allowed for the superuser only�unknown keyword: %s�user %s, uid %lu�wordsplit(%s) failed: %s�Project-Id-Version: rush 1.8 Report-Msgid-Bugs-To: bug-rush@gnu.org PO-Revision-Date: 2016-10-03 07:06+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 � Giấy phép GPL pb3+: Giấy phép Công cá»™ng GNU phiên bản 3 và 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 kiện được pháp luật cho phép �%s không phải thư mục�%s không phải là má»™t tập tin tiêu chuẩn�%s: TCPMUX chưa đáp ứng�%s: TCPMUX trả lại %s�%s: tùy chá»n không hợp lệ -- “%c†�%s: tùy chá»n yêu cầu má»™t đối số -- “%c†�%s: tiến trình con đã kết thúc vá»›i mã %d�%s: tiến trình con bị chấm dứt�%s: tiến trình con bị chấm dứt do tín hiệu %d�%s:%d: %s: không thể thá»±c hiện %s: %s�%s:%d: %s: không thể phân nhánh: %s�©�Gặp lá»—i hệ thống trong khi thá»­ thá»±c hiện câu lệnh. Hãy liên lạc vá»›i quản trị hệ thống. �Thêm hay gỡ bá» hàm kiểm tra tình trạng bảo mật.�HÀM_THỬ�CÂU_LỆNH�Không thể mở cÆ¡ sở dữ liệu %s: %s�Thư mục chroot: %s�Dòng lệnh:�TMỤC�Gỡ lá»—i: �Äang xóa các đối số %d-%d�Không cho phép xóa argv[0]�Không hiển thị dòng phần đầu.�Äổ yêu cầu cuối ở chế độ thá»­.�Môi trưá»ng:�Thông báo lá»—i: %s�Gặp lá»—i khi gá»­i thông Ä‘iệp chẩn Ä‘oán cho bá»™ mô tả %d: %s�Lá»—i: �Thá»±c hiện câu lệnh này.�Äang thá»±c hiện %s, %s�Các đối số cuối cùng:�Môi trưá»ng cuối cùng:�Hoàn tất phân tích cú pháp cá»§a %s�Ép buá»™c hệ vá» tương tác.�Tiến trình đã phân nhánh %lu�GID: %lu�Hiện trợ giúp ngắn gá»n�Hiển thị trợ giúp này�Thư mục chính: %s�Äang bá» qua tập tin bao gồm không tồn tại %s�Thông tin: �Biểu thức chuyển dạng không hợp lệ: %s�Sai thay thế khi chuyển dạng: tham chiếu ngược ở ngoại phạm vi�CÃC_TỪ_KHÓA�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. �Lá»—i cấu hình cục bá»™. Hãy liên lạc vá»›i quản trị hệ thống. �Tìm tập tin cÆ¡ sở dữ liệu trong thư mục này.�Các đối số là bắt buá»™c hay chỉ là tùy chá»n khi dùng vá»›i tùy chá»n dài thì tùy chá»n ngắn tương ứng cÅ©ng vậy.�Thiếu dấu định giá»›i thứ 2 ở vị trí %d cá»§a biểu thức %s�Thiếu dấu định giá»›i theo sau ở vị trí %d cá»§a biểu thức %s�TÊN�Sá»�Không có cấu hình mặc định�không cho phép đăng nhập đối vá»›i “%sâ€�Không đủ bá»™ nhá»›�TÙY_CHỌN�Tùy chá»n khác�Äang phân tích cú pháp cá»§a %s�In ra phiên bản chương trình�Tên chương trình: %s�Hãy thông báo lá»—i cho %s. Thông báo lá»—i dịch cho: <http://translationproject.org/team/vi.html>. �Äang tiếp tục lại phân tích cú pháp cá»§a %s từ dòng %d�Quy tắc %s ở %s:%d được khá»›p�Chạy ở chế độ thá»­.�CHUá»–I�Äang phục vụ yêu cầu hệ vá» tương tác cho %s theo quy tắc %s�Äang phục vụ yêu cầu “%s†cho %s tùy theo quy tắc %s�Äặt cấp gỡ lá»—i.�Äang đặt giá»›i hạn %d thành %lu�Äang đặt các giá»›i hạn cho %s�Äang đặt mức ưu tiên thành %d�Hiển thị nhiá»u nhất Sá» mục ghi.�Hiển thị cấu hình mặc định.�Hiển thị các mục nhập theo thứ tá»± thá»i gian.�Ãp dụng tên ngưá»i dùng trong chế độ thá»­.�Quá nhiá»u lần đăng nhập (tối Ä‘a %zu) đối vá»›i %s�SÆ¡ đồ chuyển dạng: %s, %s, %s, %u, %u, %s�Äang chuyển dạng dòng lệnh�Không rõ cá» trong biểu thức chuyển dạng: %c�Lá»—i hệ thống không rõ�Cách dùng:�Dùng chuá»—i này thay cho định dạng mặc định.�Cảnh báo : �Bạn không có quyá»n thá»±c hiện câu lệnh này. Hãy liên lạc vá»›i quản trị hệ thống. �Bạn không có quyá»n truy cập đến mày này bằng cách đăng nhập tương tác. Hãy liên lạc vá»›i quản trị hệ thống. �[TẬP_TIN]�[ngưá»i_dùng [ngưá»i_dùng…]]�cÆ¡ sở dữ liệu acct vẫn trống�không thể chuyển đổi sang thư mục %s: %s�không thể chuyển thư mục gốc (chroot) sang %s: %s�không thể tạo thư mục %s: %s�không thể ép buá»™c GID %lu: %s�không thể ép buá»™c UID %lu: %s�không thể mở cÆ¡ sở dữ liệu %s: %s�không thể mở tập tin cÆ¡ sở dữ liệu %s�không thể mở tập tin %s: %s�không thể mở tập tin định dạng %s�không đặt được giá»›i hạn cho %s�không thể lấy thống kê cho thư mục %s: %s�không thể lấy thống kê cho tập tin %s: %s�không thể lấy thống kê cho tập tin định dạng %s�đã đếm %zu/%zu lần đăng nhập đối vá»›i %s�Ä‘ang đếm các lần đăng nhập đối vá»›i %s�cấp gỡ lá»—i được đăt thành %d�gặp lá»—i khi đặt giá»›i hạn: %s�gặp lá»—i khi đặt mức ưu tiên: %s�gặp lá»—i khi ghi dừng vào cÆ¡ sở dữ liệu %s: %s�gặp lá»—i khi ghi vào cÆ¡ sở dữ liệu %s: %s�đối số bổ sung�dòng lệnh không hợp lệ�sai định dạng: %s�con số không hợp lệ (%s)�UID sai %lu�tên ngưá»i dùng sai�thiếu dấu trích dẫn đóng trong chuá»—i đã bắt đầu gần “%sâ€�không có đối số ở chỉ mục %d trong câu lệnh %s�không tìm thấy quy tắc tương ứng vá»›i “%sâ€, ngưá»i dùng %s�không đủ bá»™ nhá»›�rushlast — hiển thị danh sách các sá»± đăng nhập Rush cuối cùng.�rushwho — hiển thị danh sách các ngưá»i dùng Rush trá»±c tuyến.�seteuid(0) thành công khi không nên�tùy chá»n “--user†được phép chỉ cho siêu ngưá»i dùng thôi�không rõ từ khóa: %s�ngưá»i dùng %s, UID %lu�wordsplit(%s) bị lá»—i: %s�������������������������������������������������������������������������������������������rush-2.4/po/POTFILES.in�����������������������������������������������������������������������������0000644�0001750�0001750�00000000311�14643176120�014520� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������src/config.c src/limits.c src/rush.c src/rushlast.c src/rushwho.c src/socket.c src/transform.c src/rushopt.h src/rwopt.h src/rlopt.h lib/readfmt.c lib/rushdb.c lib/version.c gnu/error.c gnu/getopt.c �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/po/sv.po�����������������������������������������������������������������������������������0000644�0001750�0001750�00000057414�14655401313�013751� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Swedish messages for rush. # Copyright © 2017, 2019, 2020 Free Software Foundation, Inc. # This file is distributed under the same license as the rush package. # Sebastian Rasmussen <sebras@gmail.com>, 2017. # Anders Jonsson <anders.jonsson@norsjovallen.se>, 2017, 2019, 2020. # Luna Jernberg <droidbittin@gmail.com>, 2022. # #: rwopt.opt:23 msgid "" msgstr "" "Project-Id-Version: rush 2.2\n" "Report-Msgid-Bugs-To: bug-rush@gnu.org\n" "POT-Creation-Date: 2024-08-09 14:51+0300\n" "PO-Revision-Date: 2022-01-02 16:40+0100\n" "Last-Translator: Luna Jernberg <droidbittin@gmail.com>\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" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 2.2.1\n" #: src/config.c:163 #, c-format msgid "Finished parsing %s" msgstr "Avslutade tolkning av %s" #: src/config.c:169 #, c-format msgid "Resuming parsing %s from line %d" msgstr "Ã…terupptog tolkning av %s frÃ¥n rad %d" #: src/config.c:262 #, c-format msgid "invalid number: %s" msgstr "ogiltigt tal: %s" #: src/config.c:275 msgid "invalid opcode" msgstr "ogiltig opkod" #: src/config.c:297 #, c-format msgid "invalid regexp: %s" msgstr "ogiltigt reguljärt uttryck: %s" #: src/config.c:336 #, c-format msgid "unknown regexp flag: %s" msgstr "okänd flagga för reguljärt uttryck: %s" #: src/config.c:353 msgid "too few arguments" msgstr "för fÃ¥ argument" #: src/config.c:357 src/rush.c:1381 msgid "too many arguments" msgstr "för mÃ¥nga argument" #: src/config.c:428 #, c-format msgid "no such user: %s" msgstr "ingen sÃ¥dan användare: %s" #: src/config.c:453 src/config.c:1106 #, c-format msgid "no such group: %s" msgstr "ingen sÃ¥dan grupp: %s" #: src/config.c:543 #, c-format msgid "unknown limit: %s" msgstr "okänd begränsning: %s" #: src/config.c:560 #, c-format msgid "expected ~ as the second argument, but found %s" msgstr "förväntade ~ som det andra argumentet, men hittade %s" #: src/config.c:718 #, c-format msgid "debug level set to %d" msgstr "felsökningsnivÃ¥ satt till %d" #: src/config.c:730 #, c-format msgid "invalid time: %s" msgstr "ogiltig tid: %s" #: src/config.c:786 msgid "invalid file descriptor" msgstr "ogiltig fildeskriptor" #: src/config.c:800 msgid "Unknown message reference" msgstr "Okänd meddelandereferens" #: src/config.c:893 msgid "invalid include file name" msgstr "ogiltig inkluderingsfilnamn" #: src/config.c:900 #, c-format msgid "Ignoring non-existing include file %s" msgstr "Hoppar över icke-existerande inkluderingsfil %s" #: src/config.c:906 #, c-format msgid "cannot stat file %s: %s" msgstr "kan inte köra stat pÃ¥ fil %s: %s" #: src/config.c:934 rushopt.opt:90 #, c-format msgid "unknown keyword: %s" msgstr "okänt nyckelord: %s" #: src/config.c:982 msgid "key field is not a number" msgstr "nyckelfält är inte ett nummer" #: src/config.c:988 msgid "value field is not a number" msgstr "värdefält är inte ett nummer" #: src/config.c:1033 src/config.c:1038 src/rush.c:262 #, c-format msgid "%s: not a number" msgstr "%s: inte ett nummer" #: src/config.c:1211 src/config.c:1340 #, c-format msgid "Parsing %s" msgstr "Tolkar %s" #: src/config.c:1245 #, c-format msgid "unknown statement: %s" msgstr "okänd sats: %s" #: src/config.c:1280 msgid "missing ]" msgstr "saknar ]" #: src/config.c:1289 msgid "invalid statement: missing value" msgstr "ogiltig sats: saknar värde" #: src/config.c:1310 #, c-format msgid "failed to parse value: %s" msgstr "misslyckades med att tolka värde: %s" #: src/config.c:1328 msgid "statement cannot be used outside a rule" msgstr "sats kan inte användas utanför regel" #: src/config.c:1366 msgid "parsing legacy built-in configuration" msgstr "tolkar förÃ¥ldrad inbyggd konfiguration" #: src/config.c:1368 #, c-format msgid "parsing legacy configuration file %s" msgstr "tolkar förÃ¥ldrad konfigurationsfil %s" #: src/limits.c:53 #, c-format msgid "Setting limit %d to %lu" msgstr "Ställer in begränsning %d till %lu" #: src/limits.c:58 #, c-format msgid "error setting limit: %s" msgstr "fel vid inställning av begränsning: %s" #: src/limits.c:68 #, c-format msgid "Setting priority to %d" msgstr "Ställer inte prioritet till %d" #: src/limits.c:70 #, c-format msgid "error setting priority: %s" msgstr "fel vid inställning av prioritet: %s" #: src/limits.c:86 src/limits.c:87 #, c-format msgid "No logins allowed for `%s'" msgstr "Inga inloggningar tillÃ¥tna för â€%sâ€" #: src/limits.c:91 #, c-format msgid "counting logins for %s" msgstr "räknar inloggningar för â€%sâ€" #: src/limits.c:97 msgid "acct database is empty" msgstr "kontodatabas är tom" #: src/limits.c:101 #, c-format msgid "Cannot open database %s: %s" msgstr "Kan inte öppna databas %s: %s" #: src/limits.c:119 #, c-format msgid "counted %zu/%zu logins for %s" msgstr "räknade %zu/%zu inloggningar för %s" #: src/limits.c:126 src/limits.c:128 #, c-format msgid "Too many logins (max %zu) for %s" msgstr "För mÃ¥nga inloggningar (max %zu) för %s" #: src/limits.c:143 #, c-format msgid "Setting limits for %s" msgstr "Ställer in begränsningar för %s" #: src/rush.c:43 msgid "" "You are not permitted to execute this command.\n" "Contact the systems administrator for further assistance.\n" msgstr "" "Du har inte tillÃ¥telse att exekvera detta kommando.\n" "Kontakta systemadministratören för vidare assistans.\n" #: src/rush.c:47 msgid "" "You do not have interactive login access to this machine.\n" "Contact the systems administrator for further assistance.\n" msgstr "" "Du har inte interaktiv inloggningsÃ¥tkomst till denna maskin.\n" "Kontakta systemadministratören för vidare assistans.\n" #: src/rush.c:51 msgid "" "Local configuration error occurred.\n" "Contact the systems administrator for further assistance.\n" msgstr "" "Ett lokalt konfigurationsfel uppstod.\n" "Kontakta systemadministratören för vidare assistans.\n" #: src/rush.c:55 msgid "" "A system error occurred while attempting to execute command.\n" "Contact the systems administrator for further assistance.\n" msgstr "" "Ett systemfel uppstod under exekvering av kommando.\n" "Kontakta systemadministratören för vidare assistans.\n" #: src/rush.c:156 #, c-format msgid "failed to write message to stderr: %s" msgstr "misslyckades med att skriva meddelande till stderr: %s" #: src/rush.c:160 #, c-format msgid "failed to write message to stdout: %s" msgstr "misslyckades med att skriva meddelande till stdout: %s" #: src/rush.c:172 #, c-format msgid "Debug: " msgstr "Felsökning: " #: src/rush.c:176 #, c-format msgid "Info: " msgstr "Info: " #: src/rush.c:180 #, c-format msgid "Notice: " msgstr "Notis: " #: src/rush.c:184 #, c-format msgid "Warning: " msgstr "Varning: " #: src/rush.c:191 #, c-format msgid "Error: " msgstr "Fel: " #: src/rush.c:248 msgid "Not enough memory" msgstr "Inte tillräckligt med minne" #: src/rush.c:279 src/rush.c:324 #, c-format msgid "INTERNAL ERROR at %s:%d: unrecognized opcode %d" msgstr "INTERNT FEL vid %s:%d: okänd opkod %d" #: src/rush.c:408 #, c-format msgid "%s:%d: %s: can't stat '%s': %s" msgstr "%s:%d: %s: kan inte köra stat: '%s': %s" #: src/rush.c:469 #, c-format msgid "INTERNAL ERROR at %s:%d: unrecognized operation %d" msgstr "INTERNT FEL vid %s:%d: okänd operation %d" #: src/rush.c:509 #, c-format msgid "INTERNAL ERROR at %s:%d: unrecognized node type %d" msgstr "INTERNT FEL vid %s:%d: okänd nodtyp %d" #: src/rush.c:718 #, c-format msgid "INTERNAL ERROR at %s:%d: invalid envar type %d" msgstr "INTERNT FEL vid %s:%d: ogiltig miljövariabeltyp %d" #: src/rush.c:723 msgid "Final environment:" msgstr "Slutgiltig miljö:" #: src/rush.c:737 #, c-format msgid "wordsplit(%s) failed: %s" msgstr "wordsplit(%s) misslyckades: %s" #: src/rush.c:763 #, c-format msgid "no argument at index %d in command: %s" msgstr "inget argument vid index %d i kommando: %s" #: src/rush.c:906 #, c-format msgid "Removing option %s %s" msgstr "Tar bort flagga %s %s" #: src/rush.c:918 msgid "Transforming command line" msgstr "Transformerar kommandorad" #: src/rush.c:925 #, c-format msgid "Transforming program name (%s)" msgstr "Transformerar programnamn (%s)" #: src/rush.c:943 #, c-format msgid "Transforming argv[%d]" msgstr "Transformerar argv[%d]" #: src/rush.c:950 #, c-format msgid "Transforming variable %s=%s" msgstr "Transformerar variabel %s=%s" #: src/rush.c:957 src/rush.c:1043 msgid "environment transformation is not yet implemented" msgstr "miljötransformering är inte implementerad ännu" #: src/rush.c:961 #, c-format msgid "INTERNAL ERROR at %s:%d: can't modify read-only target" msgstr "INTERNT FEL vid %s:%d: det gÃ¥r inte att modifiera skrivskyddat mÃ¥l" #: src/rush.c:980 #, c-format msgid "Transformation map: %s, %s, %s, %u, %u, %s" msgstr "Transformerar mappning: %s, %s, %s, %u, %u, %s" #: src/rush.c:994 #, c-format msgid "INTERNAL ERROR at %s:%d: invalid node type %d" msgstr "INTERNT FEL vid %s:%d: ogiltig nodtyp %d" #: src/rush.c:1001 #, c-format msgid "transformed value: %s" msgstr "transformerat värde: %s" #: src/rush.c:1022 #, c-format msgid "Deleting arguments %d-%d" msgstr "Tar bort argument %d-%d" #: src/rush.c:1025 msgid "Deleting argv[0] is prohibited" msgstr "Att ta bort argv[0] är förbjudet" #: src/rush.c:1047 #, c-format msgid "INTERNAL ERROR at %s:%d: invalid target type %d" msgstr "INTERNT FEL vid %s:%d: ogiltig mÃ¥ltyp %d" #: src/rush.c:1065 #, c-format msgid "Program name: %s" msgstr "Programnamn: %s" #: src/rush.c:1066 msgid "Final arguments:" msgstr "Sista argument:" #: src/rush.c:1084 #, c-format msgid "error writing to database %s: %s" msgstr "fel vid skrivning till databas %s: %s" #: src/rush.c:1093 #, c-format msgid "error writing stop to database file %s: %s" msgstr "fel vid skrivning av stopp till databasfil %s: %s" #: src/rush.c:1114 #, c-format msgid "%s:%d: %s: cannot fork: %s" msgstr "%s:%d: %s: kan inte köra fork: %s" #: src/rush.c:1124 #, c-format msgid "Forked process %lu" msgstr "Grenad process %lu" #: src/rush.c:1128 #, c-format msgid "%s: subprocess exited with code %d" msgstr "%s: underprocess avslutade med kod %d" #: src/rush.c:1131 #, c-format msgid "%s: subprocess terminated on signal %d" msgstr "%s: underprocess avslutades pÃ¥ grund av signal %d" #: src/rush.c:1134 #, c-format msgid "%s: subprocess terminated" msgstr "%s: underprocess avslutades" #: src/rush.c:1223 #, c-format msgid "cannot enforce gid %lu: %s" msgstr "kan inte genomdriva gid %lu: %s" #: src/rush.c:1228 #, c-format msgid "cannot enforce uid %lu: %s" msgstr "kan inte genomdriva uid %lu: %s" #: src/rush.c:1233 msgid "seteuid(0) succeeded when it should not" msgstr "seteuid(0) framgÃ¥ngsrikt när det inte borde vara det" #: src/rush.c:1239 #, c-format msgid "Rule %s at %s:%d matched" msgstr "Regel %s vid %s:%d matchade" #: src/rush.c:1253 #, c-format msgid "Error message: %s" msgstr "Felmeddelande: %s" #: src/rush.c:1256 #, c-format msgid "Error sending diagnostic message to descriptor %d: %s" msgstr "Fel vid sändning av diagnostiskt meddelande till deskriptor %d: %s" #: src/rush.c:1262 #, c-format msgid "cannot set limits for %s" msgstr "kan inte ställa in begränsningar för %s" #: src/rush.c:1269 #, c-format msgid "Chroot dir: %s" msgstr "Chroot-katalog: %s" #: src/rush.c:1276 #, c-format msgid "Home dir: %s" msgstr "Hemkatalog: %s" #: src/rush.c:1281 #, c-format msgid "GID: %lu" msgstr "GID: %lu" #: src/rush.c:1306 #, c-format msgid "cannot open database %s: %s" msgstr "kan inte öppna databas %s: %s" #: src/rush.c:1315 #, c-format msgid "cannot chroot to %s: %s" msgstr "kan inte köra chroot till %s: %s" #: src/rush.c:1322 src/rush.c:1414 #, c-format msgid "invalid uid %lu" msgstr "ogiltigt uid %lu" #: src/rush.c:1327 #, c-format msgid "chdir %s" msgstr "chdir %s" #: src/rush.c:1330 #, c-format msgid "cannot change to dir %s: %s" msgstr "kan inte byta katalog till %s: %s" #: src/rush.c:1334 #, c-format msgid "Executing %s, %s" msgstr "Exekverar %s, %s" #: src/rush.c:1349 #, c-format msgid "%s:%d: %s: cannot execute %s: %s" msgstr "%s:%d: %s: kan inte exekvera %s: %s" #: src/rush.c:1392 src/rush.c:1394 msgid "invalid command line" msgstr "ogiltig kommandorad" #: src/rush.c:1405 msgid "invalid user name" msgstr "ogiltig användarnamn" #: src/rush.c:1416 #, c-format msgid "user %s, uid %lu" msgstr "användare %s, uid %lu" #: src/rush.c:1428 msgid "Command line:" msgstr "Kommandorad:" #: src/rush.c:1431 msgid "Environment:" msgstr "Miljö:" #: src/rush.c:1462 #, c-format msgid "Serving interactive shell request for %s by rule %s" msgstr "Hanterar interaktiv skalbegäran för %s via regel %s" #: src/rush.c:1466 #, c-format msgid "Serving request \"%s\" for %s by rule %s" msgstr "Hanterar begäran â€%s†för %s via regel %s" #: src/rush.c:1472 #, c-format msgid "no matching rule for \"%s\", user %s" msgstr "ingen matchande regel för â€%sâ€, användare %s" #: src/rushlast.c:31 src/rushwho.c:30 #, c-format msgid "not enough memory" msgstr "inte tillräckligt med minne" #: src/rushlast.c:78 src/rushwho.c:67 #, c-format msgid "invalid format: %s" msgstr "ogiltigt format: %s" #: src/rushlast.c:88 src/rushwho.c:77 #, c-format msgid "cannot open database file %s" msgstr "kan inte öppna databasfil %s" #: src/rushwho.c:61 #, c-format msgid "extra arguments" msgstr "extra argument" #: src/socket.c:61 #, c-format msgid "%s: TCPMUX did not respond" msgstr "%s: TCPMUX svarade inte" #: src/socket.c:65 #, c-format msgid "%s: TCPMUX returned %s" msgstr "%s: TCPMUX returnerade %s" #: src/transform.c:155 msgid "" "Transform expression must start with 's' followed by a punctuation character" msgstr "Transformuttryck mÃ¥ste börja med â€s†följt av ett skiljetecken" #: src/transform.c:166 #, c-format msgid "Missing 2nd delimiter in position %d of expression %s" msgstr "Saknar andra avgränsaren vid position %d i uttryck %s" #: src/transform.c:176 #, c-format msgid "Missing trailing delimiter in position %d of expression %s" msgstr "Saknar avslutande avgränsare vid position %d i uttryck %s" #: src/transform.c:203 #, c-format msgid "Unknown flag in transform expression: %c" msgstr "Okänd flagga i transformuttryck: %c" #: src/transform.c:220 #, c-format msgid "Invalid transform expression: %s" msgstr "Ogiltigt transformuttryck: %s" #: src/transform.c:248 msgid "Invalid transform replacement: back reference out of range" msgstr "Ogiltig transformersättning: bakÃ¥treferens utanför intervall" #: rushopt.opt:27 rlopt.opt:56 msgid "NUMBER" msgstr "NUMMER" #: rushopt.opt:27 msgid "Set debugging level." msgstr "Ställ in felsökningsnivÃ¥." #: rushopt.opt:35 msgid "Run in test mode." msgstr "Kör i testläge." #: rushopt.opt:41 msgid "Scanner test." msgstr "Avläsningstest." #: rushopt.opt:47 msgid "Print grammar and lexical analyzer traces" msgstr "Skriv ut spÃ¥r för grammatisk och lexikalisk analysator" #: rushopt.opt:53 msgid "NAME" msgstr "NAMN" #: rushopt.opt:53 msgid "Supply user name in test mode." msgstr "Tillför användarnamn i testläge." #: rushopt.opt:65 msgid "COMMAND" msgstr "KOMMANDO" #: rushopt.opt:65 msgid "Execute COMMAND." msgstr "Exekvera KOMMANDO." #: rushopt.opt:71 msgid "Force interactive shell." msgstr "Framtvinga interaktivt skal." #: rushopt.opt:78 msgid "KEYWORDS" msgstr "NYCKELORD" #: rushopt.opt:78 msgid "Dump final request in test mode." msgstr "Dumpa slutgiltig begäran i testläge." #: rushopt.opt:85 msgid "CHECK" msgstr "KONTROLL" #: rushopt.opt:85 msgid "Add or remove configuration security check." msgstr "Lägg till eller ta bort säkerhetskontroll av konfiguration." #: rushopt.opt:93 msgid "Show default configuration." msgstr "Visa standardkonfiguration." #: rushopt.opt:102 rwopt.opt:40 rlopt.opt:82 msgid "Other options" msgstr "Andra flaggor" #: rushopt.opt:102 rwopt.opt:40 rlopt.opt:82 msgid "Give this help list" msgstr "Ge denna hjälplista" #: rushopt.opt:102 rwopt.opt:40 rlopt.opt:82 msgid "Give a short usage message" msgstr "Ge ett kort meddelande om användning" #: rushopt.opt:102 rwopt.opt:40 rlopt.opt:82 msgid "Print program version" msgstr "Skriv ut programversion" #: rushopt.opt:23 msgid "rush - restricted user shell." msgstr "rush - begränsat användarskal." #: rushopt.opt:25 msgid "[FILE]" msgstr "[FIL]" #: rushopt.opt:125 rushopt.opt:359 rwopt.opt:123 rwopt.opt:357 rlopt.opt:126 #: rlopt.opt:360 msgid "Usage:" msgstr "Användning:" #: rushopt.opt:125 rwopt.opt:123 rlopt.opt:126 msgid "OPTION" msgstr "FLAGGA" #: rushopt.opt:243 rwopt.opt:241 rlopt.opt:244 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." #: rushopt.opt:247 rwopt.opt:245 rlopt.opt:248 #, c-format msgid "Report bugs to %s.\n" msgstr "Rapportera fel till %s.\n" #: rushopt.opt:700 rwopt.opt:698 rlopt.opt:701 msgid "(C)" msgstr "(C)" #: rushopt.opt:718 rwopt.opt:716 rlopt.opt:719 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" "Detta är fri programvara: du kan fritt ändra och Ã¥terdistribuera den.\n" "Den kommer UTAN GARANTI, sÃ¥ lÃ¥ngt lagen tillÃ¥ter.\n" "\n" #: rushopt.opt:60 msgid "the --user option is allowed for the superuser only" msgstr "--user-flaggan är endast tillÃ¥ten för superanvändaren" #: rushopt.opt:100 #, c-format msgid "No default configuration" msgstr "Ingen standardkonfiguration" #: rwopt.opt:24 rlopt.opt:28 msgid "STRING" msgstr "STRÄNG" #: rwopt.opt:24 rlopt.opt:28 msgid "Use STRING instead of the default format." msgstr "Använd STRÄNG istället för standardformat." #: rwopt.opt:30 rlopt.opt:35 msgid "DIR" msgstr "KAT" #: rwopt.opt:30 rlopt.opt:35 msgid "Look for database files in DIR." msgstr "Leta efter databasfiler i KAT." #: rwopt.opt:36 rlopt.opt:49 msgid "Do not display header line." msgstr "Visa inte huvudrad." #: rwopt.opt:21 msgid "rushwho - show listing of online Rush users." msgstr "rushwho - visa lista över inloggade Rush-användare." #: rlopt.opt:42 msgid "Show entries in chronological order." msgstr "Visa poster i kronologisk ordning." #: rlopt.opt:56 msgid "Show at most NUM records." msgstr "Visa som mest NUM poster." #: rlopt.opt:24 msgid "rushlast - show listing of last Rush logins." msgstr "rushlast - visa lista över senaste Rush-inloggningar." #: rlopt.opt:26 msgid "[user [user...]]" msgstr "[användare [användare…]]" #: rlopt.opt:63 #, c-format msgid "invalid number (%s)" msgstr "ogiltigt tal (%s)" #: lib/readfmt.c:40 #, c-format msgid "cannot stat format file %s" msgstr "kan inte köra stat pÃ¥ formatfil %s" #: lib/readfmt.c:42 #, c-format msgid "%s is not a regular file" msgstr "%s är inte en vanlig fil" #: lib/readfmt.c:46 #, c-format msgid "cannot open format file %s" msgstr "kan inte öppna formatfil %s" #: lib/rushdb.c:79 #, c-format msgid "cannot create directory %s: %s" msgstr "kan inte skapa katalog %s: %s" #: lib/rushdb.c:84 #, c-format msgid "cannot stat directory %s: %s" msgstr "kan inte köra stat pÃ¥ katalog %s: %s" #: lib/rushdb.c:89 #, c-format msgid "%s is not a directory" msgstr "%s är inte en katalog" #: lib/rushdb.c:100 lib/rushdb.c:114 #, c-format msgid "cannot open file %s: %s" msgstr "kan inte öppna fil %s: %s" #: lib/rushdb.c:586 #, c-format msgid "missing closing quote in string started near `%s'" msgstr "saknar avslutande citattecken i sträng som började nära â€%sâ€" #: lib/version.c:28 msgid "" "\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" msgstr "" "\n" "Licens GPLv3+: GNU GPL version 3 eller senare <http://gnu.org/licenses/gpl." "html>\n" "Detta är fri programvara; du kan fritt ändra och Ã¥terdistribuera den.\n" "Den kommer UTAN GARANTI, sÃ¥ lÃ¥ngt lagen tillÃ¥ter.\n" "\n" #: gnu/error.c:194 msgid "Unknown system error" msgstr "Okänt systemfel" #: gnu/getopt.c:278 #, c-format msgid "%s: option '%s%s' is ambiguous\n" msgstr "%s: flagga â€%s%s†är tvetydig\n" #: gnu/getopt.c:284 #, c-format msgid "%s: option '%s%s' is ambiguous; possibilities:" msgstr "%s: flagga â€%s%s†är tvetydig; möjligheter:" #: gnu/getopt.c:319 #, c-format msgid "%s: unrecognized option '%s%s'\n" msgstr "%s: okänd flagga â€%s%sâ€\n" #: gnu/getopt.c:345 #, c-format msgid "%s: option '%s%s' doesn't allow an argument\n" msgstr "%s: flagga â€%s%s†tillÃ¥ter inte ett argument\n" #: gnu/getopt.c:360 #, c-format msgid "%s: option '%s%s' requires an argument\n" msgstr "%s: flagga â€%s%s†kräver ett argument\n" #: gnu/getopt.c:621 #, c-format msgid "%s: invalid option -- '%c'\n" msgstr "%s: okänd flagga -- â€%câ€\n" #: gnu/getopt.c:636 gnu/getopt.c:682 #, c-format msgid "%s: option requires an argument -- '%c'\n" msgstr "%s: flagga kräver ett argument -- â€%câ€\n" #~ msgid "Ignoring non-existing file %s" #~ msgstr "Hoppar över icke-existerande fil %s" #~ msgid "%s: file is not safe" #~ msgstr "%s: fil är inte säker" #~ msgid "error reading file %s: %s" #~ msgstr "fel vid inläsning av fil %s: %s" #~ msgid "read 0 bytes from file %s" #~ msgstr "läste 0 byte frÃ¥n fil %s" #~ msgid "not an absolute directory name" #~ msgstr "inte ett absolut katalognamn" #~ msgid "%s:%d: %s is not a directory" #~ msgstr "%s:%d: %s är inte en katalog" #~ msgid "%s:%d: invalid number: %s" #~ msgstr "%s:%d: ogiltigt nummer: %s" #~ msgid "%s:%d: invalid chroot directory" #~ msgstr "%s:%d: ogiltig chroot-katalog" #~ msgid "%s:%d: invalid home directory" #~ msgstr "%s:%d: ogiltig hemkatalog" #~ msgid "%s:%d: Unknown message reference" #~ msgstr "%s:%d: Okänd meddelandereferens" #~ msgid "%s:%d: expected boolean value, but found `%s'" #~ msgstr "%s:%d: förväntade booleskt värde, men hittade â€%sâ€" #~ msgid "%s:%d: unknown address family" #~ msgstr "%s:%d: okänd adressfamilj" #~ msgid "%s:%d: malformed URL" #~ msgstr "%s:%d: felformaterad URL" #~ msgid "%s:%d: port is meaningless for UNIX sockets" #~ msgstr "%s:%d: port är meningslös för UNIX-uttag" #~ msgid "%s:%d: UNIX socket name too long" #~ msgstr "%s:%d: namn pÃ¥ UNIX-uttag för lÃ¥ngt" #~ msgid "%s:%d: bad port number" #~ msgstr "%s:%d: felaktigt portnummer" #~ msgid "%s:%d: unknown service name" #~ msgstr "%s:%d: okänt servicenamn" #~ msgid "%s:%d: unknown host name %s" #~ msgstr "%s:%d: okänt värdnamn %s" #~ msgid "%s:%d: unsupported address family" #~ msgstr "%s:%d: adressfamilj stöds inte" #~ msgid "%s:%d: cannot stat file %s: %s" #~ msgstr "%s:%d: kan inte köra stat pÃ¥ fil %s: %s" #~ msgid "%s:%d: unknown keyword: %s" #~ msgstr "%s:%d: okänt nyckelord: %s" #~ msgid "Falling back to the default configuration" #~ msgstr "Faller tillbaka pÃ¥ standardkonfigurationen" #~ msgid "%s:%d: INTERNAL ERROR: node type out of range" #~ msgstr "%s:%d: INTERNT FEL: nodtyp utanför intervall" #~ msgid "Transform: \"%s\" -> \"%s\"" #~ msgstr "Transformera: â€%s†-> â€%sâ€" #~ msgid "Command line: %s" #~ msgstr "Kommandorad: %s" #~ msgid "Setting command line" #~ msgstr "Ställer in kommandorad" #~ msgid "%s:%d: internal error" #~ msgstr "%s:%d: internt fel" #~ msgid "%s: option '--%s' doesn't allow an argument\n" #~ msgstr "%s: flagga â€--%s†tillÃ¥ter inte ett argument\n" #~ msgid "%s: unrecognized option '--%s'\n" #~ msgstr "%s: okänd flagga â€--%sâ€\n" #~ msgid "%s: option '-W %s' is ambiguous\n" #~ msgstr "%s: flagga â€-W %s†är tvetydig\n" #~ msgid "%s: option '-W %s' doesn't allow an argument\n" #~ msgstr "%s: flagga â€-W %s†tillÃ¥ter inget argument\n" #~ msgid "%s: option '-W %s' requires an argument\n" #~ msgstr "%s: flagga â€-W %s†kräver ett argument\n" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/po/ro.po�����������������������������������������������������������������������������������0000644�0001750�0001750�00000054564�14655401313�013744� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Romanian translation for rush. # Traducerea în limba română a mesajelor de rush. # Copyright © 2023 Free Software Foundation, Inc. # This file is distributed under the same license as the rush package. # # Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>, 2023. # # Cronologia traducerii fiÈ™ierului „žrushâ€Â: # Traducerea iniÈ›ială, făcută de R-GC, pentru versiunea rush 2.2. # Actualizare a traducerii pentru versiunea Y, făcută de X, Z(luna-anul). # #: rwopt.opt:23 msgid "" msgstr "" "Project-Id-Version: rush 2.2\n" "Report-Msgid-Bugs-To: bug-rush@gnu.org\n" "POT-Creation-Date: 2024-08-09 14:51+0300\n" "PO-Revision-Date: 2023-07-25 15:56+0200\n" "Last-Translator: Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>\n" "Language-Team: Romanian <translation-team-ro@lists.sourceforge.net>\n" "Language: ro\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n==0 || (n!=1 && n%100>=1 && " "n%100<=19) ? 1 : 2);\n" "X-Bugs: Report translation errors to the Language-Team address.\n" "X-Generator: Poedit 3.2.2\n" #: src/config.c:163 #, c-format msgid "Finished parsing %s" msgstr "S-a finalizat analizarea %s" #: src/config.c:169 #, c-format msgid "Resuming parsing %s from line %d" msgstr "Se reia analizarea %s de la linia %d" #: src/config.c:262 #, c-format msgid "invalid number: %s" msgstr "număr nevalid: %s" #: src/config.c:275 msgid "invalid opcode" msgstr "cod operaÈ›ional nevalid" #: src/config.c:297 #, c-format msgid "invalid regexp: %s" msgstr "expresie regulată nevalidă: %s" #: src/config.c:336 #, c-format msgid "unknown regexp flag: %s" msgstr "fanion de expresie regulată necunoscut: %s" #: src/config.c:353 msgid "too few arguments" msgstr "prea puÈ›ine argumente" #: src/config.c:357 src/rush.c:1381 msgid "too many arguments" msgstr "prea multe argumente" #: src/config.c:428 #, c-format msgid "no such user: %s" msgstr "nu există acest utilizator: %s" #: src/config.c:453 src/config.c:1106 #, c-format msgid "no such group: %s" msgstr "nu există acest grup: %s" #: src/config.c:543 #, c-format msgid "unknown limit: %s" msgstr "limită necunoscută: %s" #: src/config.c:560 #, c-format msgid "expected ~ as the second argument, but found %s" msgstr "se aÈ™tepta „~†ca al doilea argument, dar s-a găsit „%sâ€" #: src/config.c:718 #, c-format msgid "debug level set to %d" msgstr "nivel de depanare stabilit la %d" #: src/config.c:730 #, c-format msgid "invalid time: %s" msgstr "oră nevalidă: %s" #: src/config.c:786 msgid "invalid file descriptor" msgstr "descriptor de fiÈ™ier nevalid" #: src/config.c:800 msgid "Unknown message reference" msgstr "Referință necunoscută pentru mesaj" #: src/config.c:893 msgid "invalid include file name" msgstr "nume de fiÈ™ier de includere nevalid" #: src/config.c:900 #, c-format msgid "Ignoring non-existing include file %s" msgstr "Se ignoră fiÈ™ierul de includere inexistent %s" #: src/config.c:906 #, c-format msgid "cannot stat file %s: %s" msgstr "nu se poate obÈ›ine starea fiÈ™ierului %s: %s" #: src/config.c:934 rushopt.opt:90 #, c-format msgid "unknown keyword: %s" msgstr "cuvânt cheie necunoscut: %s" #: src/config.c:982 msgid "key field is not a number" msgstr "câmpul de cheie nu este un număr" #: src/config.c:988 msgid "value field is not a number" msgstr "câmpul de valoare nu este un număr" #: src/config.c:1033 src/config.c:1038 src/rush.c:262 #, c-format msgid "%s: not a number" msgstr "%s: nu este un număr" #: src/config.c:1211 src/config.c:1340 #, c-format msgid "Parsing %s" msgstr "Se analizează %s" #: src/config.c:1245 #, c-format msgid "unknown statement: %s" msgstr "declaraÈ›ie necunoscută: %s" #: src/config.c:1280 msgid "missing ]" msgstr "lipseÈ™te „]â€" #: src/config.c:1289 msgid "invalid statement: missing value" msgstr "declaraÈ›ie nevalidă: lipseÈ™te valoarea" #: src/config.c:1310 #, c-format msgid "failed to parse value: %s" msgstr "nu s-a reuÈ™it analizarea valorii: %s" #: src/config.c:1328 msgid "statement cannot be used outside a rule" msgstr "declaraÈ›ia nu poate fi utilizată în afara unei reguli" #: src/config.c:1366 msgid "parsing legacy built-in configuration" msgstr "se analizează configuraÈ›ia încorporată moÈ™tenită" #: src/config.c:1368 #, c-format msgid "parsing legacy configuration file %s" msgstr "se analizează fiÈ™ierul de configurare moÈ™tenit %s" #: src/limits.c:53 #, c-format msgid "Setting limit %d to %lu" msgstr "Se stabileÈ™te limita %d la %lu" #: src/limits.c:58 #, c-format msgid "error setting limit: %s" msgstr "eroare la stabilirea limitei: %s" #: src/limits.c:68 #, c-format msgid "Setting priority to %d" msgstr "Se stabileÈ™te prioritatea la %d" #: src/limits.c:70 #, c-format msgid "error setting priority: %s" msgstr "eroare la stabilirea priorității: %s" #: src/limits.c:86 src/limits.c:87 #, c-format msgid "No logins allowed for `%s'" msgstr "Nu este permisă autentificarea pentru „%sâ€" #: src/limits.c:91 #, c-format msgid "counting logins for %s" msgstr "contorizarea autentificărilor pentru %s" #: src/limits.c:97 msgid "acct database is empty" msgstr "baza de date de conturi este goală" #: src/limits.c:101 #, c-format msgid "Cannot open database %s: %s" msgstr "Nu se poate deschide baza de date %s: %s" #: src/limits.c:119 #, c-format msgid "counted %zu/%zu logins for %s" msgstr "contorizate %zu/%zu autentificări pentru %s" #: src/limits.c:126 src/limits.c:128 #, c-format msgid "Too many logins (max %zu) for %s" msgstr "Prea multe autentificări (max %zu) pentru %s" #: src/limits.c:143 #, c-format msgid "Setting limits for %s" msgstr "Se stabilesc limitele pentru %s" #: src/rush.c:43 msgid "" "You are not permitted to execute this command.\n" "Contact the systems administrator for further assistance.\n" msgstr "" "Nu vi se permite să executaÈ›i această comandă.\n" "ContactaÈ›i administratorul de sistem pentru asistență suplimentară.\n" #: src/rush.c:47 msgid "" "You do not have interactive login access to this machine.\n" "Contact the systems administrator for further assistance.\n" msgstr "" "Nu aveÈ›i acces interactiv de conectare la această maÈ™ină.\n" "ContactaÈ›i administratorul de sistem pentru asistență suplimentară.\n" #: src/rush.c:51 msgid "" "Local configuration error occurred.\n" "Contact the systems administrator for further assistance.\n" msgstr "" "A apărut o eroare de configurare locală.\n" "ContactaÈ›i administratorul de sistem pentru asistență suplimentară.\n" #: src/rush.c:55 msgid "" "A system error occurred while attempting to execute command.\n" "Contact the systems administrator for further assistance.\n" msgstr "" "A apărut o eroare de sistem în timpul încercării de a executa comanda.\n" "ContactaÈ›i administratorul de sistem pentru asistență suplimentară.\n" #: src/rush.c:156 #, c-format msgid "failed to write message to stderr: %s" msgstr "nu s-a putut scrie mesajul la ieÈ™irea de eroare standard (stderr): %s" #: src/rush.c:160 #, c-format msgid "failed to write message to stdout: %s" msgstr "nu s-a putut scrie mesajul la ieÈ™irea standard (stdout): %s" #: src/rush.c:172 #, c-format msgid "Debug: " msgstr "Depanare: " #: src/rush.c:176 #, c-format msgid "Info: " msgstr "InformaÈ›ii:" #: src/rush.c:180 #, c-format msgid "Notice: " msgstr "Aviz: " #: src/rush.c:184 #, c-format msgid "Warning: " msgstr "Avertisment: " #: src/rush.c:191 #, c-format msgid "Error: " msgstr "Eroare: " #: src/rush.c:248 msgid "Not enough memory" msgstr "Nu este suficientă memorie" #: src/rush.c:279 src/rush.c:324 #, c-format msgid "INTERNAL ERROR at %s:%d: unrecognized opcode %d" msgstr "EROARE INTERNÄ‚ la %s:%d: cod operaÈ›ional nerecunoscut %d" #: src/rush.c:408 #, c-format msgid "%s:%d: %s: can't stat '%s': %s" msgstr "%s:%d: %s: nu se poate determina starea „%sâ€: %s" #: src/rush.c:469 #, c-format msgid "INTERNAL ERROR at %s:%d: unrecognized operation %d" msgstr "EROARE INTERNÄ‚ la %s:%d: operaÈ›ie nerecunoscută %d" #: src/rush.c:509 #, c-format msgid "INTERNAL ERROR at %s:%d: unrecognized node type %d" msgstr "EROARE INTERNÄ‚ la %s:%d: tip de nod nerecunoscut %d" #: src/rush.c:718 #, c-format msgid "INTERNAL ERROR at %s:%d: invalid envar type %d" msgstr "ERROR INTERNAL la %s:%d: tip de variabilă de mediu nevalidă %d" #: src/rush.c:723 msgid "Final environment:" msgstr "Mediul final:" #: src/rush.c:737 #, c-format msgid "wordsplit(%s) failed: %s" msgstr "wordsplit(%s) a eÈ™uat: %s" #: src/rush.c:763 #, c-format msgid "no argument at index %d in command: %s" msgstr "nu există niciun argument la indicele %d din comanda: %s" #: src/rush.c:906 #, c-format msgid "Removing option %s %s" msgstr "Se elimină opÈ›iunea %s %s" #: src/rush.c:918 msgid "Transforming command line" msgstr "Conversia liniei de comandă" #: src/rush.c:925 #, c-format msgid "Transforming program name (%s)" msgstr "Conversia numelui programului (%s)" #: src/rush.c:943 #, c-format msgid "Transforming argv[%d]" msgstr "Conversia argv[%d]" #: src/rush.c:950 #, c-format msgid "Transforming variable %s=%s" msgstr "Conversia variabilei %s=%s" #: src/rush.c:957 src/rush.c:1043 msgid "environment transformation is not yet implemented" msgstr "conversia mediului nu este încă implementată" #: src/rush.c:961 #, c-format msgid "INTERNAL ERROR at %s:%d: can't modify read-only target" msgstr "" "EROARE INTERNÄ‚ la %s:%d: nu se poate modifica È›inta numai-pentru-citire" #: src/rush.c:980 #, c-format msgid "Transformation map: %s, %s, %s, %u, %u, %s" msgstr "Harta de conversie: %s, %s, %s, %u, %u, %s" #: src/rush.c:994 #, c-format msgid "INTERNAL ERROR at %s:%d: invalid node type %d" msgstr "EROARE INTERNÄ‚ la %s:%d: tip de nod nevalid %d" #: src/rush.c:1001 #, c-format msgid "transformed value: %s" msgstr "valoare convertită: %s" #: src/rush.c:1022 #, c-format msgid "Deleting arguments %d-%d" msgstr "Se È™terg argumentele %d-%d" #: src/rush.c:1025 msgid "Deleting argv[0] is prohibited" msgstr "Ștergerea argv[0] este interzisă" #: src/rush.c:1047 #, c-format msgid "INTERNAL ERROR at %s:%d: invalid target type %d" msgstr "EROARE INTERNÄ‚ la %s:%d: tip de È›intă nevalidă %d" #: src/rush.c:1065 #, c-format msgid "Program name: %s" msgstr "Numele programului: %s" #: src/rush.c:1066 msgid "Final arguments:" msgstr "Argumente finale:" #: src/rush.c:1084 #, c-format msgid "error writing to database %s: %s" msgstr "eroare la scrierea în baza de date %s: %s" #: src/rush.c:1093 #, c-format msgid "error writing stop to database file %s: %s" msgstr "" "Eroare la scrierea marcatorului de oprire în fiÈ™ierul bazei de date %s: %s" #: src/rush.c:1114 #, c-format msgid "%s:%d: %s: cannot fork: %s" msgstr "%s:%d: %s: nu se poate crea o bifurcare: %s" #: src/rush.c:1124 #, c-format msgid "Forked process %lu" msgstr "Proces bifurcat %lu" #: src/rush.c:1128 #, c-format msgid "%s: subprocess exited with code %d" msgstr "%s: subprocesul a ieÈ™it cu codul %d" #: src/rush.c:1131 #, c-format msgid "%s: subprocess terminated on signal %d" msgstr "%s: subprocesul s-a terminat la semnalul %d" #: src/rush.c:1134 #, c-format msgid "%s: subprocess terminated" msgstr "%s: subprocesul s-a terminat" #: src/rush.c:1223 #, c-format msgid "cannot enforce gid %lu: %s" msgstr "nu se poate forÈ›a aplicarea identificatorului de grup (gid) %lu: %s" #: src/rush.c:1228 #, c-format msgid "cannot enforce uid %lu: %s" msgstr "" "nu se poate forÈ›a aplicarea identificatorului de utilizator (uid) %lu: %s" #: src/rush.c:1233 msgid "seteuid(0) succeeded when it should not" msgstr "seteuid(0) a reuÈ™it când nu ar fi trebuit" #: src/rush.c:1239 #, c-format msgid "Rule %s at %s:%d matched" msgstr "Regula %s de la %s:%d s-a potrivit" #: src/rush.c:1253 #, c-format msgid "Error message: %s" msgstr "Mesaj de eroare: %s" #: src/rush.c:1256 #, c-format msgid "Error sending diagnostic message to descriptor %d: %s" msgstr "" "Eroare la trimiterea mesajului de diagnosticare către descriptorul %d: %s" #: src/rush.c:1262 #, c-format msgid "cannot set limits for %s" msgstr "nu se pot stabili limitele pentru %s" #: src/rush.c:1269 #, c-format msgid "Chroot dir: %s" msgstr "Directorul „chrootâ€: %s" #: src/rush.c:1276 #, c-format msgid "Home dir: %s" msgstr "Directorul personal: %s" #: src/rush.c:1281 #, c-format msgid "GID: %lu" msgstr "GID: %lu" #: src/rush.c:1306 #, c-format msgid "cannot open database %s: %s" msgstr "nu se poate deschide baza de date %s: %s" #: src/rush.c:1315 #, c-format msgid "cannot chroot to %s: %s" msgstr "nu se poate efectua chroot în %s: %s" #: src/rush.c:1322 src/rush.c:1414 #, c-format msgid "invalid uid %lu" msgstr "uid nevalid %lu" #: src/rush.c:1327 #, c-format msgid "chdir %s" msgstr "chdir %s" #: src/rush.c:1330 #, c-format msgid "cannot change to dir %s: %s" msgstr "nu se poate schimba la directorul %s: %s" #: src/rush.c:1334 #, c-format msgid "Executing %s, %s" msgstr "Se execută %s, %s" #: src/rush.c:1349 #, c-format msgid "%s:%d: %s: cannot execute %s: %s" msgstr "%s:%d: %s: nu se poate executa %s: %s" #: src/rush.c:1392 src/rush.c:1394 msgid "invalid command line" msgstr "linie de comandă nevalidă" #: src/rush.c:1405 msgid "invalid user name" msgstr "nume de utilizator nevalid" #: src/rush.c:1416 #, c-format msgid "user %s, uid %lu" msgstr "utilizator %s, uid %lu" #: src/rush.c:1428 msgid "Command line:" msgstr "Linia de comandă:" #: src/rush.c:1431 msgid "Environment:" msgstr "Mediu:" #: src/rush.c:1462 #, c-format msgid "Serving interactive shell request for %s by rule %s" msgstr "Servirea cererii de shell interactiv pentru %s după regula %s" #: src/rush.c:1466 #, c-format msgid "Serving request \"%s\" for %s by rule %s" msgstr "Servirea cererii „%s†pentru %s după regula %s" #: src/rush.c:1472 #, c-format msgid "no matching rule for \"%s\", user %s" msgstr "nicio regulă care să corespundă pentru „%sâ€, utilizator %s" #: src/rushlast.c:31 src/rushwho.c:30 #, c-format msgid "not enough memory" msgstr "memorie insuficientă" #: src/rushlast.c:78 src/rushwho.c:67 #, c-format msgid "invalid format: %s" msgstr "format nevalid: %s" #: src/rushlast.c:88 src/rushwho.c:77 #, c-format msgid "cannot open database file %s" msgstr "nu se poate deschide fiÈ™ierul de bază de date „%sâ€" #: src/rushwho.c:61 #, c-format msgid "extra arguments" msgstr "argumente suplimentare" #: src/socket.c:61 #, c-format msgid "%s: TCPMUX did not respond" msgstr "%s: TCPMUX nu a răspuns" #: src/socket.c:65 #, c-format msgid "%s: TCPMUX returned %s" msgstr "%s: TCPMUX a returnat %s" #: src/transform.c:155 msgid "" "Transform expression must start with 's' followed by a punctuation character" msgstr "" "Expresia de transformare trebuie să înceapă cu „s†urmat de un caracter de " "punctuaÈ›ie." #: src/transform.c:166 #, c-format msgid "Missing 2nd delimiter in position %d of expression %s" msgstr "LipseÈ™te al doilea delimitator în poziÈ›ia %d din expresia %s" #: src/transform.c:176 #, c-format msgid "Missing trailing delimiter in position %d of expression %s" msgstr "LipseÈ™te delimitatorul final la poziÈ›ia %d din expresia %s" #: src/transform.c:203 #, c-format msgid "Unknown flag in transform expression: %c" msgstr "Fanion necunoscut în expresia de conversie: %c" #: src/transform.c:220 #, c-format msgid "Invalid transform expression: %s" msgstr "Expresie de conversie nevalidă: %s" #: src/transform.c:248 msgid "Invalid transform replacement: back reference out of range" msgstr "" "ÃŽnlocuire nevalidă a conversiei de transformare: referinÈ›a din spate este în " "afara intervalului" #: rushopt.opt:27 rlopt.opt:56 msgid "NUMBER" msgstr "NUMÄ‚R" #: rushopt.opt:27 msgid "Set debugging level." msgstr "StabileÈ™te nivelul de depanare" #: rushopt.opt:35 msgid "Run in test mode." msgstr "Rulează în modul test" #: rushopt.opt:41 msgid "Scanner test." msgstr "Test de scanare." #: rushopt.opt:47 msgid "Print grammar and lexical analyzer traces" msgstr "AfiÈ™ează rezultatul analizei gramaticale È™i lexicale" #: rushopt.opt:53 msgid "NAME" msgstr "NUME" #: rushopt.opt:53 msgid "Supply user name in test mode." msgstr "FurnizaÈ›i numele de utilizator în modul de testare." #: rushopt.opt:65 msgid "COMMAND" msgstr "COMANDA" #: rushopt.opt:65 msgid "Execute COMMAND." msgstr "Execută COMANDA" #: rushopt.opt:71 msgid "Force interactive shell." msgstr "ForÈ›ează shell-ul interactiv." #: rushopt.opt:78 msgid "KEYWORDS" msgstr "CUVINTE-CHEIE" #: rushopt.opt:78 msgid "Dump final request in test mode." msgstr "AfiÈ™ează cererea finală în modul de testare." #: rushopt.opt:85 msgid "CHECK" msgstr "VERIFICARE" #: rushopt.opt:85 msgid "Add or remove configuration security check." msgstr "Adaugă sau elimină verificarea securității configuraÈ›iei." #: rushopt.opt:93 msgid "Show default configuration." msgstr "AfiÈ™ează configuraÈ›ia implicită." #: rushopt.opt:102 rwopt.opt:40 rlopt.opt:82 msgid "Other options" msgstr "Alte opÈ›iuni" #: rushopt.opt:102 rwopt.opt:40 rlopt.opt:82 msgid "Give this help list" msgstr "Oferă această listă de ajutor" #: rushopt.opt:102 rwopt.opt:40 rlopt.opt:82 msgid "Give a short usage message" msgstr "Oferă un mesaj scurt de utilizare" #: rushopt.opt:102 rwopt.opt:40 rlopt.opt:82 msgid "Print program version" msgstr "AfiÈ™ează versiunea programului" #: rushopt.opt:23 msgid "rush - restricted user shell." msgstr "rush - shell de utilizator restricÈ›ionat." #: rushopt.opt:25 msgid "[FILE]" msgstr "[FIȘIER]" #: rushopt.opt:125 rushopt.opt:359 rwopt.opt:123 rwopt.opt:357 rlopt.opt:126 #: rlopt.opt:360 msgid "Usage:" msgstr "Utilizare:" #: rushopt.opt:125 rwopt.opt:123 rlopt.opt:126 msgid "OPTION" msgstr "OPÈšIUNE" #: rushopt.opt:243 rwopt.opt:241 rlopt.opt:244 msgid "" "Mandatory or optional arguments to long options are also mandatory or " "optional for any corresponding short options." msgstr "" "Argumentele obligatorii sau opÈ›ionale ale opÈ›iunilor lungi sunt, de " "asemenea, obligatorii sau opÈ›ionale pentru orice opÈ›iuni scurte " "corespunzătoare." #: rushopt.opt:247 rwopt.opt:245 rlopt.opt:248 #, c-format msgid "Report bugs to %s.\n" msgstr "RaportaÈ›i erorile la %s.\n" #: rushopt.opt:700 rwopt.opt:698 rlopt.opt:701 msgid "(C)" msgstr "©" #: rushopt.opt:718 rwopt.opt:716 rlopt.opt:719 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 versiunea 3 sau ulterioară <http://gnu.org/licenses/" "gpl.html>\n" "Acesta este software liber: sunteÈ›i liber să îl modificaÈ›i È™i să îl " "redistribuiÈ›i.\n" "NU există NICIO GARANÈšIE, în măsura permisă de lege.\n" "\n" #: rushopt.opt:60 msgid "the --user option is allowed for the superuser only" msgstr "opÈ›iunea „--user†este permisă doar pentru superutilizator." #: rushopt.opt:100 #, c-format msgid "No default configuration" msgstr "Nicio configuraÈ›ie implicită" #: rwopt.opt:24 rlopt.opt:28 msgid "STRING" msgstr "ÅžIR" #: rwopt.opt:24 rlopt.opt:28 msgid "Use STRING instead of the default format." msgstr "Utilizează ȘIR în loc de formatul implicit." #: rwopt.opt:30 rlopt.opt:35 msgid "DIR" msgstr "DIRECTOR" #: rwopt.opt:30 rlopt.opt:35 msgid "Look for database files in DIR." msgstr "Caută fiÈ™ierele bazei de date în DIRECTOR." #: rwopt.opt:36 rlopt.opt:49 msgid "Do not display header line." msgstr "Nu afiÈ™ează linia de antet." #: rwopt.opt:21 msgid "rushwho - show listing of online Rush users." msgstr "rushwho - afiÈ™ează lista utilizatorilor Rush conectaÈ›i." #: rlopt.opt:42 msgid "Show entries in chronological order." msgstr "AfiÈ™ează intrările în ordine cronologică." #: rlopt.opt:56 msgid "Show at most NUM records." msgstr "AfiÈ™ează cel mult NUMÄ‚R înregistrări." #: rlopt.opt:24 msgid "rushlast - show listing of last Rush logins." msgstr "rushlast - afiÈ™ează lista ultimelor autentificări Rush." #: rlopt.opt:26 msgid "[user [user...]]" msgstr "[utilizator [utilizator...]]" #: rlopt.opt:63 #, c-format msgid "invalid number (%s)" msgstr "număr nevalid (%s)" #: lib/readfmt.c:40 #, c-format msgid "cannot stat format file %s" msgstr "nu s-a putut interoga starea fiÈ™ierului de format %s" #: lib/readfmt.c:42 #, c-format msgid "%s is not a regular file" msgstr "%s nu este un fiÈ™ier obiÈ™nuit" #: lib/readfmt.c:46 #, c-format msgid "cannot open format file %s" msgstr "nu se poate deschide fiÈ™ierul în format %s" #: lib/rushdb.c:79 #, c-format msgid "cannot create directory %s: %s" msgstr "nu se poate crea directorul %s: %s" #: lib/rushdb.c:84 #, c-format msgid "cannot stat directory %s: %s" msgstr "nu se poate obÈ›ine starea directorului %s: %s" #: lib/rushdb.c:89 #, c-format msgid "%s is not a directory" msgstr "%s nu este un director" #: lib/rushdb.c:100 lib/rushdb.c:114 #, c-format msgid "cannot open file %s: %s" msgstr "nu se poate deschide fiÈ™ierul %s: %s" #: lib/rushdb.c:586 #, c-format msgid "missing closing quote in string started near `%s'" msgstr "ghilimele de închidere lipsă din È™irul început lângă „%sâ€" #: lib/version.c:28 msgid "" "\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" msgstr "" "\n" "LicenÈ›a GPLv3+: GNU GPL versiunea 3 sau o versiune ulterioară:\n" "<http://gnu.org/licenses/gpl.html>\n" "Acesta este software liber: sunteÈ›i liber să îl modificaÈ›i È™i să îl " "redistribuiÈ›i.\n" "NU EXISTÄ‚ NICIO GARANÈšIE, în măsura permisă de lege.\n" "\n" #: gnu/error.c:194 msgid "Unknown system error" msgstr "Eroare de sistem necunoscută" #: gnu/getopt.c:278 #, c-format msgid "%s: option '%s%s' is ambiguous\n" msgstr "%s: opÈ›iunea „%s%s†este ambiguă\n" #: gnu/getopt.c:284 #, c-format msgid "%s: option '%s%s' is ambiguous; possibilities:" msgstr "%s: opÈ›iunea „%s%s†este ambiguă; posibilități:" #: gnu/getopt.c:319 #, c-format msgid "%s: unrecognized option '%s%s'\n" msgstr "%s: opÈ›iune nerecunoscută „%s%sâ€\n" #: gnu/getopt.c:345 #, c-format msgid "%s: option '%s%s' doesn't allow an argument\n" msgstr "%s: opÈ›iunea „%s%s†nu permite un argument\n" #: gnu/getopt.c:360 #, c-format msgid "%s: option '%s%s' requires an argument\n" msgstr "%s: opÈ›iunea „%s%s†necesită un argument\n" #: gnu/getopt.c:621 #, c-format msgid "%s: invalid option -- '%c'\n" msgstr "%s: opÈ›iune nevalidă -- „%câ€\n" #: gnu/getopt.c:636 gnu/getopt.c:682 #, c-format msgid "%s: option requires an argument -- '%c'\n" msgstr "%s: opÈ›iunea necesită un argument -- „%câ€\n" ��������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/po/LINGUAS���������������������������������������������������������������������������������0000644�0001750�0001750�00000000063�14635353434�014002� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������da de es fi fr gl nl pl pt_BR ro sr sv uk vi zh_CN �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/po/en@quot.header��������������������������������������������������������������������������0000644�0001750�0001750�00000002263�13456274525�015551� 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. # ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/po/uk.po�����������������������������������������������������������������������������������0000644�0001750�0001750�00000063063�14655401313�013735� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Ukrainian messages for Rush # This file is distributed under the same license as the Rush package. # Copyright (C) 2019 Free Software Foundation, Inc. # Sergey Poznyakoff <gray@gnu.org>, 2009-2019. # #: rwopt.opt:23 msgid "" msgstr "" "Project-Id-Version: rush 2.0\n" "Report-Msgid-Bugs-To: bug-rush@gnu.org\n" "POT-Creation-Date: 2024-08-09 14:51+0300\n" "PO-Revision-Date: 2019-07-01 10:40+0300\n" "Last-Translator: Sergey Poznyakoff <gray@gnu.org>\n" "Language-Team: Ukrainian <trans-uk@lists.fedoraproject.org>\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" #: src/config.c:163 #, c-format msgid "Finished parsing %s" msgstr "Розбір %s закінчено." #: src/config.c:169 #, c-format msgid "Resuming parsing %s from line %d" msgstr "Ð’Ñ–Ð´Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ñ€Ð¾Ð·Ð±Ð¾Ñ€Ñƒ %s починаючи з Ñ€Ñдку %d" #: src/config.c:262 #, c-format msgid "invalid number: %s" msgstr "недійÑне чиÑло: %s" #: src/config.c:275 msgid "invalid opcode" msgstr "недійÑний код операції" #: src/config.c:297 #, c-format msgid "invalid regexp: %s" msgstr "недійÑний регулÑрний вираз: %s" #: src/config.c:336 #, c-format msgid "unknown regexp flag: %s" msgstr "невідома ознака регулÑрного виразу: %s" #: src/config.c:353 msgid "too few arguments" msgstr "недоÑтатньо аргументів" #: src/config.c:357 src/rush.c:1381 msgid "too many arguments" msgstr "забагато аргументів" #: src/config.c:428 #, c-format msgid "no such user: %s" msgstr "немає такого кориÑтувача: %s" #: src/config.c:453 src/config.c:1106 #, c-format msgid "no such group: %s" msgstr "немає такої групи: %s" #: src/config.c:543 #, c-format msgid "unknown limit: %s" msgstr "невідоме обмеженнÑ: %s" #: src/config.c:560 #, c-format msgid "expected ~ as the second argument, but found %s" msgstr "очікувалоÑÑŒ ~ у другому аргументі, але отримано %s" #: src/config.c:718 #, c-format msgid "debug level set to %d" msgstr "вÑтановлено рівень Ð½Ð°Ð»Ð°Ð³Ð¾Ð´Ð¶ÐµÐ½Ð½Ñ %d" #: src/config.c:730 #, c-format msgid "invalid time: %s" msgstr "недійÑний чаÑ: %s" #: src/config.c:786 msgid "invalid file descriptor" msgstr "недійÑний деÑкриптор файлу" #: src/config.c:800 msgid "Unknown message reference" msgstr "ПоÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð´Ð¾ невідомого повідомленнÑ" #: src/config.c:893 msgid "invalid include file name" msgstr "недійÑна назва файлу що включаєтьÑÑ" #: src/config.c:900 #, c-format msgid "Ignoring non-existing include file %s" msgstr "Ð†Ð³Ð½Ð¾Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð½ÐµÑ–Ñнуючого файлу %s" #: src/config.c:906 #, c-format msgid "cannot stat file %s: %s" msgstr "не вдаєтьÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ інформацію про файл %s: %s" #: src/config.c:934 rushopt.opt:90 #, c-format msgid "unknown keyword: %s" msgstr "невідома команда: %s" #: src/config.c:982 msgid "key field is not a number" msgstr "поле ключа не Ñ” чиÑлом" #: src/config.c:988 msgid "value field is not a number" msgstr "поле Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð½Ðµ Ñ” чиÑлом" #: src/config.c:1033 src/config.c:1038 src/rush.c:262 #, c-format msgid "%s: not a number" msgstr "%s: не Ñ” чиÑлом" #: src/config.c:1211 src/config.c:1340 #, c-format msgid "Parsing %s" msgstr "Розбір %s" #: src/config.c:1245 #, c-format msgid "unknown statement: %s" msgstr "невідома інÑтрукціÑ: %s" #: src/config.c:1280 msgid "missing ]" msgstr "відÑÑƒÑ‚Ð½Ñ ]" #: src/config.c:1289 msgid "invalid statement: missing value" msgstr "недійÑна інÑтрукціÑ: брак значеннÑ" #: src/config.c:1310 #, c-format msgid "failed to parse value: %s" msgstr "не вдаєтьÑÑ Ð¿Ñ€Ð¾Ð°Ð½Ð°Ð»Ñ–Ð·ÑƒÐ²Ð°Ñ‚Ð¸ значеннÑ: %s" #: src/config.c:1328 msgid "statement cannot be used outside a rule" msgstr "інÑтрукцію не можна викориÑтовувати поза правилом" #: src/config.c:1366 msgid "parsing legacy built-in configuration" msgstr "Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð·Ð°Ñтарілої вбудованої конфігурації" #: src/config.c:1368 #, c-format msgid "parsing legacy configuration file %s" msgstr "Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð° конфігурації %s в заÑтарілому форматі" #: src/limits.c:53 #, c-format msgid "Setting limit %d to %lu" msgstr "Ð’ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ %d у %lu" #: src/limits.c:58 #, c-format msgid "error setting limit: %s" msgstr "помилка вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ: %s" #: src/limits.c:68 #, c-format msgid "Setting priority to %d" msgstr "Ð’ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ñ–Ð¾Ñ€Ð¸Ñ‚ÐµÑ‚Ñƒ %d" #: src/limits.c:70 #, c-format msgid "error setting priority: %s" msgstr "помилка вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ñ–Ð¾Ñ€Ð¸Ñ‚ÐµÑ‚Ñƒ: %s" #: src/limits.c:86 src/limits.c:87 #, c-format msgid "No logins allowed for `%s'" msgstr "Вхід не дозволений Ð´Ð»Ñ `%s'" #: src/limits.c:91 #, c-format msgid "counting logins for %s" msgstr "Ñ€Ð°Ñ…ÑƒÐ²Ð°Ð½Ð½Ñ ÐºÑ–Ð»ÑŒÐºÐ¾Ñті входів %s" #: src/limits.c:97 msgid "acct database is empty" msgstr "база даних обліку пуÑта" #: src/limits.c:101 #, c-format msgid "Cannot open database %s: %s" msgstr "Ðе вдаєтьÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ базу даних %s: %s" #: src/limits.c:119 #, c-format msgid "counted %zu/%zu logins for %s" msgstr "кількіÑть логинів Ð´Ð»Ñ %3$s Ñтановить %1$zu/%2$zu" #: src/limits.c:126 src/limits.c:128 #, c-format msgid "Too many logins (max %zu) for %s" msgstr "Забагато логинів (Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ %zu) Ð´Ð»Ñ %s" #: src/limits.c:143 #, c-format msgid "Setting limits for %s" msgstr "Ð’ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½ÑŒ Ð´Ð»Ñ %s" #: src/rush.c:43 msgid "" "You are not permitted to execute this command.\n" "Contact the systems administrator for further assistance.\n" msgstr "" "Вам не дозволено Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ñ†Ñ–Ñ”Ñ— команди.\n" "Ð”Ð»Ñ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¸, зв'ÑжітьÑÑ Ð· адмініÑтратором ÑиÑтеми.\n" #: src/rush.c:47 msgid "" "You do not have interactive login access to this machine.\n" "Contact the systems administrator for further assistance.\n" msgstr "" "Ви не маєте права інтерактивного доÑтупу до цієї машини.\n" "Ð”Ð»Ñ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¸, зв'ÑжітьÑÑ Ð· адмініÑтратором ÑиÑтеми.\n" #: src/rush.c:51 msgid "" "Local configuration error occurred.\n" "Contact the systems administrator for further assistance.\n" msgstr "" "Викрито помилку локальної конфігурації.\n" "Ð”Ð»Ñ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¸, зв'ÑжітьÑÑ Ð· адмініÑтратором ÑиÑтеми.\n" #: src/rush.c:55 msgid "" "A system error occurred while attempting to execute command.\n" "Contact the systems administrator for further assistance.\n" msgstr "" "Під Ñ‡Ð°Ñ Ñпроби Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸ ÑталаÑÑ ÑиÑтемна помилка.\n" "Ð”Ð»Ñ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¸, зв'ÑжітьÑÑ Ð· адмініÑтратором ÑиÑтеми.\n" #: src/rush.c:156 #, c-format msgid "failed to write message to stderr: %s" msgstr "помилка запиÑу Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼ÐµÐ½Ð½Ñ Ð´Ð¾ stderr: %s" #: src/rush.c:160 #, c-format msgid "failed to write message to stdout: %s" msgstr "помилка запиÑу Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼ÐµÐ½Ð½Ñ Ð´Ð¾ stdout: %s" #: src/rush.c:172 #, c-format msgid "Debug: " msgstr "ÐалагодженнÑ: " #: src/rush.c:176 #, c-format msgid "Info: " msgstr "ІнформаціÑ: " #: src/rush.c:180 #, c-format msgid "Notice: " msgstr "Увага: " #: src/rush.c:184 #, c-format msgid "Warning: " msgstr "ПопередженнÑ: " #: src/rush.c:191 #, c-format msgid "Error: " msgstr "Помилка: " #: src/rush.c:248 msgid "Not enough memory" msgstr "ÐедоÑтатньо пам'Ñті" #: src/rush.c:279 src/rush.c:324 #, c-format msgid "INTERNAL ERROR at %s:%d: unrecognized opcode %d" msgstr "Ð’ÐУТРІШÐЯ ПОМИЛКРв %s:%d: нерозпізнаний код операції %d" #: src/rush.c:408 #, fuzzy, c-format msgid "%s:%d: %s: can't stat '%s': %s" msgstr "%s:%d: %s: не вдаєтьÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ %s: %s" #: src/rush.c:469 #, fuzzy, c-format msgid "INTERNAL ERROR at %s:%d: unrecognized operation %d" msgstr "Ð’ÐУТРІШÐЯ ПОМИЛКРв %s:%d: нерозпізнаний код операції %d" #: src/rush.c:509 #, c-format msgid "INTERNAL ERROR at %s:%d: unrecognized node type %d" msgstr "Ð’ÐУТРІШÐЯ ПОМИЛКРв %s:%d: непрозпізнаний тип вузла %d" #: src/rush.c:718 #, c-format msgid "INTERNAL ERROR at %s:%d: invalid envar type %d" msgstr "Ð’ÐУТРІШÐЯ ПОМИЛКРв %s:%d: неправильний тип змінної Ñередовища %d" #: src/rush.c:723 msgid "Final environment:" msgstr "ОÑтаточне оточеннÑ:" #: src/rush.c:737 #, c-format msgid "wordsplit(%s) failed: %s" msgstr "помилка wordsplit(%s): %s" #: src/rush.c:763 #, c-format msgid "no argument at index %d in command: %s" msgstr "брак аргументу в позиції %d у команді: %s" #: src/rush.c:906 #, c-format msgid "Removing option %s %s" msgstr "Ð’Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð¾Ð¿Ñ†Ñ–Ñ— %s %s" #: src/rush.c:918 msgid "Transforming command line" msgstr "ÐŸÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð³Ð¾ Ñ€Ñдка" #: src/rush.c:925 #, c-format msgid "Transforming program name (%s)" msgstr "ÐœÐ¾Ð´Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ Ð½Ð°Ð·Ð²Ð¸ програми (%s)" #: src/rush.c:943 #, c-format msgid "Transforming argv[%d]" msgstr "ÐœÐ¾Ð´Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ argv[%d]" #: src/rush.c:950 #, c-format msgid "Transforming variable %s=%s" msgstr "ÐŸÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð·Ð¼Ñ–Ð½Ð½Ð¾Ñ— %s=%s" #: src/rush.c:957 src/rush.c:1043 msgid "environment transformation is not yet implemented" msgstr "Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð·Ð¼Ñ–Ð½Ð½Ð¸Ñ… Ð¾Ñ‚Ð¾Ñ‡ÐµÐ½Ð½Ñ Ñ‰Ðµ не заімплементоване" #: src/rush.c:961 #, c-format msgid "INTERNAL ERROR at %s:%d: can't modify read-only target" msgstr "" "Ð’ÐУТРІШÐЯ ПОМИЛКРв %s:%d: неможливо модифікувати ціль лише Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ" #: src/rush.c:980 #, c-format msgid "Transformation map: %s, %s, %s, %u, %u, %s" msgstr "Мапа перетворюваннÑ: %s, %s, %s, %u, %u, %s" #: src/rush.c:994 #, c-format msgid "INTERNAL ERROR at %s:%d: invalid node type %d" msgstr "Ð’ÐУТРІШÐЯ ПОМИЛКРв %s:%d: неправилиний тип вузла %d" #: src/rush.c:1001 #, fuzzy, c-format msgid "transformed value: %s" msgstr "ÐŸÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð·Ð¼Ñ–Ð½Ð½Ð¾Ñ— %s=%s" #: src/rush.c:1022 #, c-format msgid "Deleting arguments %d-%d" msgstr "УÑÑƒÐ²Ð°Ð½Ð½Ñ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ñ–Ð² %d-%d" #: src/rush.c:1025 msgid "Deleting argv[0] is prohibited" msgstr "УÑÑƒÐ²Ð°Ð½Ð½Ñ argv[0] заборонено" #: src/rush.c:1047 #, c-format msgid "INTERNAL ERROR at %s:%d: invalid target type %d" msgstr "Ð’ÐУТРІШÐЯ ПОМИЛКРв %s:%d: неправильний тип цілі %d" #: src/rush.c:1065 #, c-format msgid "Program name: %s" msgstr "Ðазва програми: %s" #: src/rush.c:1066 msgid "Final arguments:" msgstr "ОÑтаточні аргументи:" #: src/rush.c:1084 #, c-format msgid "error writing to database %s: %s" msgstr "Помилка запиÑу до бази даних %s: %s" #: src/rush.c:1093 #, c-format msgid "error writing stop to database file %s: %s" msgstr "помилка запиÑу термінатора до Ñкриньки %s: %s" #: src/rush.c:1114 #, c-format msgid "%s:%d: %s: cannot fork: %s" msgstr "%s:%d: %s: помилка fork: %s" #: src/rush.c:1124 #, c-format msgid "Forked process %lu" msgstr "Створено Ð¿Ñ€Ð¾Ñ†ÐµÑ %lu" #: src/rush.c:1128 #, c-format msgid "%s: subprocess exited with code %d" msgstr "%s: Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð·Ð°Ð²ÐµÑ€ÑˆÐ¸Ð²ÑÑ Ð· кодом %d" #: src/rush.c:1131 #, c-format msgid "%s: subprocess terminated on signal %d" msgstr "%s: Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð·Ð°ÐºÑ–Ð½Ñ‡Ð¸Ð²ÑÑ Ð¿Ð¾ Ñигналу %d" #: src/rush.c:1134 #, c-format msgid "%s: subprocess terminated" msgstr "%s: Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð·Ð°ÐºÑ–Ð½Ñ‡Ð¸Ð²ÑÑ" #: src/rush.c:1223 #, c-format msgid "cannot enforce gid %lu: %s" msgstr "не вдаєтьÑÑ Ð²Ñтановити GID %lu: %s" #: src/rush.c:1228 #, c-format msgid "cannot enforce uid %lu: %s" msgstr "не вдаєтьÑÑ Ð²Ñтановити UID %lu: %s" #: src/rush.c:1233 msgid "seteuid(0) succeeded when it should not" msgstr "виклик seteuid(0) вдавÑÑ, хоча не повинен був" #: src/rush.c:1239 #, c-format msgid "Rule %s at %s:%d matched" msgstr "ПаÑує правило %s в %s:%d" #: src/rush.c:1253 #, c-format msgid "Error message: %s" msgstr "ÐŸÐ¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾ помилку: %s" #: src/rush.c:1256 #, c-format msgid "Error sending diagnostic message to descriptor %d: %s" msgstr "Помилка виÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ñ‡ÐµÑ€ÐµÐ· деÑкриптор %d: %s" #: src/rush.c:1262 #, c-format msgid "cannot set limits for %s" msgstr "не вдаєтьÑÑ Ð²Ñтановити Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ Ð´Ð»Ñ %s" #: src/rush.c:1269 #, c-format msgid "Chroot dir: %s" msgstr "Каталог chroot: %s" #: src/rush.c:1276 #, c-format msgid "Home dir: %s" msgstr "Домашній каталог: %s" #: src/rush.c:1281 #, c-format msgid "GID: %lu" msgstr "GID: %lu" #: src/rush.c:1306 #, c-format msgid "cannot open database %s: %s" msgstr "не вдаєтьÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ базу даних %s: %s" #: src/rush.c:1315 #, c-format msgid "cannot chroot to %s: %s" msgstr "не вдаєтьÑÑ Ð·Ñ€Ð¾Ð±Ð¸Ñ‚Ð¸ chroot до каталогу %s: %s" #: src/rush.c:1322 src/rush.c:1414 #, c-format msgid "invalid uid %lu" msgstr "недійÑний UID %lu" #: src/rush.c:1327 #, c-format msgid "chdir %s" msgstr "chdir %s" #: src/rush.c:1330 #, c-format msgid "cannot change to dir %s: %s" msgstr "не вдаєтьÑÑ Ð¿ÐµÑ€ÐµÐ¹Ñ‚Ð¸ до каталогу %s: %s" #: src/rush.c:1334 #, c-format msgid "Executing %s, %s" msgstr "Ð’Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ %s, %s" #: src/rush.c:1349 #, c-format msgid "%s:%d: %s: cannot execute %s: %s" msgstr "%s:%d: %s: не вдаєтьÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ %s: %s" #: src/rush.c:1392 src/rush.c:1394 msgid "invalid command line" msgstr "недійÑний командний Ñ€Ñдок" #: src/rush.c:1405 msgid "invalid user name" msgstr "недійÑне Ім'Ñ ÐºÐ¾Ñ€Ð¸Ñтувача" #: src/rush.c:1416 #, c-format msgid "user %s, uid %lu" msgstr "кориÑтувач %s, UID %lu" #: src/rush.c:1428 msgid "Command line:" msgstr "Командний Ñ€Ñдок:" #: src/rush.c:1431 msgid "Environment:" msgstr "ОточеннÑ:" #: src/rush.c:1462 #, c-format msgid "Serving interactive shell request for %s by rule %s" msgstr "ОбÑÐ»ÑƒÐ³Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð°Ð¿Ð¸Ñ‚Ñƒ інтерактивного доÑтупу Ð´Ð»Ñ %s за правилом %s" #: src/rush.c:1466 #, c-format msgid "Serving request \"%s\" for %s by rule %s" msgstr "ОбÑÐ»ÑƒÐ³Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð°Ð¿Ð¸Ñ‚Ñƒ \"%s\" Ð´Ð»Ñ %s за правилом %s" #: src/rush.c:1472 #, c-format msgid "no matching rule for \"%s\", user %s" msgstr "жодне правило не паÑує до \"%s\", від кориÑтувача %s" #: src/rushlast.c:31 src/rushwho.c:30 #, c-format msgid "not enough memory" msgstr "недоÑтатньо пам'Ñті" #: src/rushlast.c:78 src/rushwho.c:67 #, c-format msgid "invalid format: %s" msgstr "недійÑний формат: %s" #: src/rushlast.c:88 src/rushwho.c:77 #, c-format msgid "cannot open database file %s" msgstr "не вдаєтьÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ файл бази даних %s" #: src/rushwho.c:61 #, c-format msgid "extra arguments" msgstr "додатні аргументи" #: src/socket.c:61 #, c-format msgid "%s: TCPMUX did not respond" msgstr "%s: TCPMUX не відповів" #: src/socket.c:65 #, c-format msgid "%s: TCPMUX returned %s" msgstr "%s: TCPMUX повернув %s" #: src/transform.c:155 msgid "" "Transform expression must start with 's' followed by a punctuation character" msgstr "" "Вираз Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€ÑŽÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ð²Ð¸Ð½ÐµÐ½ починатиÑÑ Ð· літери 's' та знаку пунктуації" #: src/transform.c:166 #, c-format msgid "Missing 2nd delimiter in position %d of expression %s" msgstr "Брак другого роздільника у позиції %d Ð²Ð¸Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ %s" #: src/transform.c:176 #, c-format msgid "Missing trailing delimiter in position %d of expression %s" msgstr "Брак кінцевого роздільника у позиції %d Ð²Ð¸Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ %s" #: src/transform.c:203 #, c-format msgid "Unknown flag in transform expression: %c" msgstr "Ðезнана ознака у виразі перетворюваннÑ: %c" #: src/transform.c:220 #, c-format msgid "Invalid transform expression: %s" msgstr "ÐедійÑний вираз перетворюваннÑ: %s" #: src/transform.c:248 msgid "Invalid transform replacement: back reference out of range" msgstr "ÐедійÑний вираз перетворюваннÑ: зворотне поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð·Ð° межами діапазону" #: rushopt.opt:27 rlopt.opt:56 msgid "NUMBER" msgstr "ЧИСЛО" #: rushopt.opt:27 msgid "Set debugging level." msgstr "Ð’Ñтановлює рівень налагодженнÑ" #: rushopt.opt:35 msgid "Run in test mode." msgstr "Вмикає теÑтовий режим." #: rushopt.opt:41 msgid "Scanner test." msgstr "ТеÑÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñканера." #: rushopt.opt:47 msgid "Print grammar and lexical analyzer traces" msgstr "Ð”Ñ€ÑƒÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð¿ÐµÑ€ÐµÐ±Ñ–Ð³Ñƒ граматичного та лекÑичного аналізу" #: rushopt.opt:53 msgid "NAME" msgstr "ÐÐЗВÐ" #: rushopt.opt:53 msgid "Supply user name in test mode." msgstr "Ð’Ñтановити ім'Ñ ÐºÐ¾Ñ€Ð¸Ñтувача у теÑтовому режимі." #: rushopt.opt:65 msgid "COMMAND" msgstr "КОМÐÐДÐ" #: rushopt.opt:65 msgid "Execute COMMAND." msgstr "Виконує команду." #: rushopt.opt:71 msgid "Force interactive shell." msgstr "ЕмулÑÑ†Ñ–Ñ Ñ–Ð½Ñ‚ÐµÑ€Ð°ÐºÑ‚Ð¸Ð²Ð½Ð¾Ñ— оболонки." #: rushopt.opt:78 msgid "KEYWORDS" msgstr "КЛЮЧОВІ_СЛОВÐ" #: rushopt.opt:78 msgid "Dump final request in test mode." msgstr "Друкувати кінцеве Ð·Ð°Ð¿Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð² теÑтовому режимі." #: rushopt.opt:85 msgid "CHECK" msgstr "ПЕРЕВІРКÐ" #: rushopt.opt:85 msgid "Add or remove configuration security check." msgstr "Додає або уÑуває перевірку безпеки файлу конфігурації." #: rushopt.opt:93 msgid "Show default configuration." msgstr "Показує вбудовану конфігурацію." #: rushopt.opt:102 rwopt.opt:40 rlopt.opt:82 msgid "Other options" msgstr "Інші опції" #: rushopt.opt:102 rwopt.opt:40 rlopt.opt:82 msgid "Give this help list" msgstr "Показує цю довідку." #: rushopt.opt:102 rwopt.opt:40 rlopt.opt:82 msgid "Give a short usage message" msgstr "Виводить коротке Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾ викориÑтаннÑ." #: rushopt.opt:102 rwopt.opt:40 rlopt.opt:82 msgid "Print program version" msgstr "Показує верÑÑ–ÑŽ програми." #: rushopt.opt:23 #, fuzzy msgid "rush - restricted user shell." msgstr "rush - обмежена оболонка кориÑтувача" #: rushopt.opt:25 msgid "[FILE]" msgstr "[ФÐЙЛ]" #: rushopt.opt:125 rushopt.opt:359 rwopt.opt:123 rwopt.opt:357 rlopt.opt:126 #: rlopt.opt:360 msgid "Usage:" msgstr "ВикориÑтаннÑ:" #: rushopt.opt:125 rwopt.opt:123 rlopt.opt:126 msgid "OPTION" msgstr "ОПЦІЯ" #: rushopt.opt:243 rwopt.opt:241 rlopt.opt:244 msgid "" "Mandatory or optional arguments to long options are also mandatory or " "optional for any corresponding short options." msgstr "" "Ðргументи, обов'Ñзкові Ð´Ð»Ñ Ð´Ð¾Ð²Ð³Ð¸Ñ… ключів, Ñ” обов'Ñзковими й Ð´Ð»Ñ ÐºÐ¾Ñ€Ð¾Ñ‚ÐºÐ¸Ñ…." #: rushopt.opt:247 rwopt.opt:245 rlopt.opt:248 #, c-format msgid "Report bugs to %s.\n" msgstr "Про помилки звітуйте на %s.\n" #: rushopt.opt:700 rwopt.opt:698 rlopt.opt:701 msgid "(C)" msgstr "(C)" #: rushopt.opt:718 rwopt.opt:716 rlopt.opt:719 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://gnu.org/licenses/gpl." "html>\n" "Це Ñ” вільне програмне забезпеченнÑ: ви можете змінювати та розповÑюджувати " "його.\n" "Ðемає ЖОДÐИХ ГÐРÐÐТІЙ, в межах дозволених правом.\n" "\n" #: rushopt.opt:60 msgid "the --user option is allowed for the superuser only" msgstr "" "викориÑÑ‚Ð°Ð½Ð½Ñ Ð¾Ð¿Ñ†Ñ–Ñ— --user дозволено тільки привилейованому кориÑтувачеві" #: rushopt.opt:100 #, c-format msgid "No default configuration" msgstr "Брак вбудованої конфігурації" #: rwopt.opt:24 rlopt.opt:28 msgid "STRING" msgstr "РЯДОК" #: rwopt.opt:24 rlopt.opt:28 msgid "Use STRING instead of the default format." msgstr "Ð’Ñтановлює формат виводу." #: rwopt.opt:30 rlopt.opt:35 msgid "DIR" msgstr "КÐТÐЛОГ" #: rwopt.opt:30 rlopt.opt:35 msgid "Look for database files in DIR." msgstr "Пошук файлів бази даних у вказаному каталогу." #: rwopt.opt:36 rlopt.opt:49 msgid "Do not display header line." msgstr "Вимикає Ð´Ñ€ÑƒÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÑƒ." #: rwopt.opt:21 msgid "rushwho - show listing of online Rush users." msgstr "rushwho - друкує перелік активних логувань через Rush." #: rlopt.opt:42 msgid "Show entries in chronological order." msgstr "Друкує логіни у хронологічному порÑдку." #: rlopt.opt:56 msgid "Show at most NUM records." msgstr "Обмежує кількіÑть запиÑів у видруку." #: rlopt.opt:24 msgid "rushlast - show listing of last Rush logins." msgstr "rushlast - друкує перелік оÑтанніх логувань через Rush." #: rlopt.opt:26 msgid "[user [user...]]" msgstr "[кориÑтувач [кориÑтувач...]]" #: rlopt.opt:63 #, c-format msgid "invalid number (%s)" msgstr "недійÑне чиÑло (%s)" #: lib/readfmt.c:40 #, c-format msgid "cannot stat format file %s" msgstr "неможливо отримати інформацію про файл формату %s" #: lib/readfmt.c:42 #, c-format msgid "%s is not a regular file" msgstr "%s не Ñ” звичайним файлом" #: lib/readfmt.c:46 #, c-format msgid "cannot open format file %s" msgstr "неможливо відкрити файл формату %s" #: lib/rushdb.c:79 #, c-format msgid "cannot create directory %s: %s" msgstr "не вдаєтьÑÑ Ñтворити каталог %s: %s" #: lib/rushdb.c:84 #, c-format msgid "cannot stat directory %s: %s" msgstr "не вдаєтьÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ дані про каталог %s: %s" #: lib/rushdb.c:89 #, c-format msgid "%s is not a directory" msgstr "%s не Ñ” каталогом" #: lib/rushdb.c:100 lib/rushdb.c:114 #, c-format msgid "cannot open file %s: %s" msgstr "неможливо відкрити файл %s: %s" #: lib/rushdb.c:586 #, c-format msgid "missing closing quote in string started near `%s'" msgstr "брак замикаючої лапки у Ñ€Ñдку, що почавÑÑ Ð±Ñ–Ð»Ñ `%s'" #: lib/version.c:28 msgid "" "\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" msgstr "" "\n" "Ð›Ñ–Ñ†ÐµÐ½Ð·Ñ–Ñ GPLv3+: GNU GPL верÑÑ–Ñ— 3 або пізнішої <http://gnu.org/licenses/gpl." "html>\n" "Ðемає ЖОДÐИХ ГÐРÐÐТІЙ, в межах дозволених правом.\n" "\n" #: gnu/error.c:194 msgid "Unknown system error" msgstr "Ðевідомий тип повідомленнÑ" #: gnu/getopt.c:278 #, c-format msgid "%s: option '%s%s' is ambiguous\n" msgstr "%s: Ð¾Ð¿Ñ†Ñ–Ñ '%s%s' неоднозначна\n" #: gnu/getopt.c:284 #, c-format msgid "%s: option '%s%s' is ambiguous; possibilities:" msgstr "%s: Ð¾Ð¿Ñ†Ñ–Ñ '%s%s' неоднозначна: варіанти:" #: gnu/getopt.c:319 #, c-format msgid "%s: unrecognized option '%s%s'\n" msgstr "%s: невідома Ð¾Ð¿Ñ†Ñ–Ñ '%s%s'\n" #: gnu/getopt.c:345 #, c-format msgid "%s: option '%s%s' doesn't allow an argument\n" msgstr "%s: Ð¾Ð¿Ñ†Ñ–Ñ '%s%s' не може мати аргументу\n" #: gnu/getopt.c:360 #, c-format msgid "%s: option '%s%s' requires an argument\n" msgstr "%s: Ð¾Ð¿Ñ†Ñ–Ñ '%s%s' вимагає аргументу\n" #: gnu/getopt.c:621 #, c-format msgid "%s: invalid option -- '%c'\n" msgstr "%s: недійÑна Ð¾Ð¿Ñ†Ñ–Ñ -- '%c'\n" #: gnu/getopt.c:636 gnu/getopt.c:682 #, c-format msgid "%s: option requires an argument -- '%c'\n" msgstr "%s: Ð¾Ð¿Ñ†Ñ–Ñ Ð²Ð¸Ð¼Ð°Ð³Ð°Ñ” аргумент -- '%c'\n" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/po/en@boldquot.header����������������������������������������������������������������������0000644�0001750�0001750�00000002471�13456274525�016413� 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. # �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/po/fi.po�����������������������������������������������������������������������������������0000644�0001750�0001750�00000061424�14655401313�013713� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Finnish messages for rush. # Copyright © 2010, 2014, 2016 Free Software Foundation, Inc. # This file is distributed under the same license as the rush package. # Jorma Karvonen <karvonen.jorma@gmail.com>, 2010, 2016. # #: rwopt.opt:23 msgid "" msgstr "" "Project-Id-Version: GNU rush 1.8\n" "Report-Msgid-Bugs-To: bug-rush@gnu.org\n" "POT-Creation-Date: 2024-08-09 14:51+0300\n" "PO-Revision-Date: 2016-12-17 13:00+0200\n" "Last-Translator: Jorma Karvonen <karvonen.jorma@gmail.com>\n" "Language-Team: Finnish <translation-team-fi@lists.sourceforge.net>\n" "Language: fi\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.5.4\n" #: src/config.c:163 #, c-format msgid "Finished parsing %s" msgstr "Tiedoston %s jäsentäminen päättyi" #: src/config.c:169 #, c-format msgid "Resuming parsing %s from line %d" msgstr "Jatketaan tiedoston %s jäsentämistä riviltä %d" #: src/config.c:262 #, fuzzy, c-format msgid "invalid number: %s" msgstr "virheellinen numero (%s)" #: src/config.c:275 #, fuzzy msgid "invalid opcode" msgstr "%s:%d: virheellinen käskykoodi" #: src/config.c:297 #, fuzzy, c-format msgid "invalid regexp: %s" msgstr "%s:%d: virheellinen säännöllinen lauseke: %s" #: src/config.c:336 #, fuzzy, c-format msgid "unknown regexp flag: %s" msgstr "%s:%d: tuntematon säännöllisen lausekkeen lippu: %s" #: src/config.c:353 #, fuzzy msgid "too few arguments" msgstr "%s:%d: liian vähän argumentteja" #: src/config.c:357 src/rush.c:1381 #, fuzzy msgid "too many arguments" msgstr "%s:%d: liian monta argumenttia" #: src/config.c:428 #, fuzzy, c-format msgid "no such user: %s" msgstr "%s:%d: tuntematon käyttäjä: %s" #: src/config.c:453 src/config.c:1106 #, fuzzy, c-format msgid "no such group: %s" msgstr "%s:%d: tuntematon ryhmä: %s" #: src/config.c:543 #, fuzzy, c-format msgid "unknown limit: %s" msgstr "%s:%d: tuntematon raja: %s" #: src/config.c:560 #, fuzzy, c-format msgid "expected ~ as the second argument, but found %s" msgstr "%s:%d: odotettiin ~ toisena argumenttina, mutta löytyi %s" #: src/config.c:718 #, c-format msgid "debug level set to %d" msgstr "vianjäljitystasoksi asetettiin %d" #: src/config.c:730 #, fuzzy, c-format msgid "invalid time: %s" msgstr "%s:%d: virheellinen aika: %s" #: src/config.c:786 #, fuzzy msgid "invalid file descriptor" msgstr "%s:%d: virheellinen tiedostoseloste" #: src/config.c:800 #, fuzzy msgid "Unknown message reference" msgstr "Tuntematon viestiviite: %s\n" #: src/config.c:893 #, fuzzy msgid "invalid include file name" msgstr "%s:%d: virheellinen include-tiedostonimi" #: src/config.c:900 #, c-format msgid "Ignoring non-existing include file %s" msgstr "Ohitetaan puuttuva include-tiedosto %s" #: src/config.c:906 #, c-format msgid "cannot stat file %s: %s" msgstr "komennon stat suorittaminen tiedostolle %s epäonnistui: %s" #: src/config.c:934 rushopt.opt:90 #, c-format msgid "unknown keyword: %s" msgstr "tuntematon avainsana: %s" #: src/config.c:982 #, fuzzy msgid "key field is not a number" msgstr "%s:%d: avainkenttä ei ole numero" #: src/config.c:988 #, fuzzy msgid "value field is not a number" msgstr "%s:%d: arvokenttä ei ole numero" #: src/config.c:1033 src/config.c:1038 src/rush.c:262 #, fuzzy, c-format msgid "%s: not a number" msgstr "%s:%d: %s: ei ole numero" #: src/config.c:1211 src/config.c:1340 #, c-format msgid "Parsing %s" msgstr "Jäsennetään tiedostoa %s" #: src/config.c:1245 #, fuzzy, c-format msgid "unknown statement: %s" msgstr "%s:%d: tuntematon lause: %s" #: src/config.c:1280 #, fuzzy msgid "missing ]" msgstr "%s:%d: puuttuva ]" #: src/config.c:1289 #, fuzzy msgid "invalid statement: missing value" msgstr "%s:%d: virheellinen lause: arvo puuttuu" #: src/config.c:1310 #, fuzzy, c-format msgid "failed to parse value: %s" msgstr "%s:%d: arvon jäsentäminen epäonnistui: %s" #: src/config.c:1328 #, fuzzy msgid "statement cannot be used outside a rule" msgstr "%s:%d: lauseen käyttö säännön ulkopuolella epäonnistui" #: src/config.c:1366 #, fuzzy msgid "parsing legacy built-in configuration" msgstr "Ei oletusasetusta" #: src/config.c:1368 #, fuzzy, c-format msgid "parsing legacy configuration file %s" msgstr "asetustiedoston jäsentäminen epäonnistui" #: src/limits.c:53 #, c-format msgid "Setting limit %d to %lu" msgstr "Asetetaan raja %d arvoon %lu" #: src/limits.c:58 #, c-format msgid "error setting limit: %s" msgstr "virhe asetettaessa rajaa: %s" #: src/limits.c:68 #, c-format msgid "Setting priority to %d" msgstr "Asetetaan prioriteetiksi %d" #: src/limits.c:70 #, c-format msgid "error setting priority: %s" msgstr "virhe asetettaessa prioriteettia: %s" #: src/limits.c:86 src/limits.c:87 #, c-format msgid "No logins allowed for `%s'" msgstr "Sisäänkirjautumisia ei sallita käyttäjälle â€%sâ€" #: src/limits.c:91 #, c-format msgid "counting logins for %s" msgstr "lasketaan sisäänkirjautumisia käyttäjälle %s" #: src/limits.c:97 msgid "acct database is empty" msgstr "acct-tietokanta on tyhjä" #: src/limits.c:101 #, c-format msgid "Cannot open database %s: %s" msgstr "Tietokannan %s avaaminen epäonnistui: %s" #: src/limits.c:119 #, c-format msgid "counted %zu/%zu logins for %s" msgstr "laskettu %zu/%zu sisäänkirjautumista käyttäjälle %s" #: src/limits.c:126 src/limits.c:128 #, c-format msgid "Too many logins (max %zu) for %s" msgstr "Liian monia sisäänkirjautumisia (enintään %zu) käyttäjälle %s" #: src/limits.c:143 #, c-format msgid "Setting limits for %s" msgstr "Asetetaan rajat käyttäjälle %s" #: src/rush.c:43 msgid "" "You are not permitted to execute this command.\n" "Contact the systems administrator for further assistance.\n" msgstr "" "Sinulla ei ole lupaa suorittaa tätä komentoa.\n" "Ota yhteyttä järjestelmän ylläpitäjään, jos tarviset tukea.\n" #: src/rush.c:47 msgid "" "You do not have interactive login access to this machine.\n" "Contact the systems administrator for further assistance.\n" msgstr "" "Sinulla ei ole lupaa avata vuorovaikutteista istuntoa tälle koneelle.\n" "Ota yhteyttä järjestelmän ylläpitäjään, jos tarviset tukea.\n" #: src/rush.c:51 msgid "" "Local configuration error occurred.\n" "Contact the systems administrator for further assistance.\n" msgstr "" "Tapahtui paikallinen asetusvirhe.\n" "Ota yhteyttä järjestelmän ylläpitäjään, jos tarviset tukea.\n" #: src/rush.c:55 msgid "" "A system error occurred while attempting to execute command.\n" "Contact the systems administrator for further assistance.\n" msgstr "" "Tapahtui järjestelmävirhe, kun yritettiin suorittaa komentoa.\n" "Ota yhteyttä järjestelmän ylläpitäjään, jos tarviset tukea.\n" #: src/rush.c:156 #, c-format msgid "failed to write message to stderr: %s" msgstr "" #: src/rush.c:160 #, c-format msgid "failed to write message to stdout: %s" msgstr "" #: src/rush.c:172 #, c-format msgid "Debug: " msgstr "Vianjäljitys: " #: src/rush.c:176 #, c-format msgid "Info: " msgstr "Tiedot: " #: src/rush.c:180 #, c-format msgid "Notice: " msgstr "" #: src/rush.c:184 #, c-format msgid "Warning: " msgstr "Varoitus: " #: src/rush.c:191 #, c-format msgid "Error: " msgstr "Virhe: " #: src/rush.c:248 msgid "Not enough memory" msgstr "Muisti loppui" #: src/rush.c:279 src/rush.c:324 #, c-format msgid "INTERNAL ERROR at %s:%d: unrecognized opcode %d" msgstr "" #: src/rush.c:408 #, fuzzy, c-format msgid "%s:%d: %s: can't stat '%s': %s" msgstr "%s:%d: komennon stat %s suorittaminen epäonnistui: %s" #: src/rush.c:469 #, fuzzy, c-format msgid "INTERNAL ERROR at %s:%d: unrecognized operation %d" msgstr "%s: tunnistamaton valitsin ’--%s’\n" #: src/rush.c:509 #, c-format msgid "INTERNAL ERROR at %s:%d: unrecognized node type %d" msgstr "" #: src/rush.c:718 #, c-format msgid "INTERNAL ERROR at %s:%d: invalid envar type %d" msgstr "" #: src/rush.c:723 msgid "Final environment:" msgstr "Viimeinen ympäristö:" #: src/rush.c:737 #, c-format msgid "wordsplit(%s) failed: %s" msgstr "wordsplit(%s) epäonnistui: %s" #: src/rush.c:763 #, c-format msgid "no argument at index %d in command: %s" msgstr "ei argumenttia indeksissä %d komennossa: %s" #: src/rush.c:906 #, c-format msgid "Removing option %s %s" msgstr "" #: src/rush.c:918 msgid "Transforming command line" msgstr "Muunnetaan komentoriviä" #: src/rush.c:925 #, fuzzy, c-format msgid "Transforming program name (%s)" msgstr "Muokataan ohjelmanimeä (%s)" #: src/rush.c:943 #, fuzzy, c-format msgid "Transforming argv[%d]" msgstr "Muokataan argumenttia argv[%d]" #: src/rush.c:950 #, fuzzy, c-format msgid "Transforming variable %s=%s" msgstr "Muunnetaan komentoriviä" #: src/rush.c:957 src/rush.c:1043 msgid "environment transformation is not yet implemented" msgstr "" #: src/rush.c:961 #, c-format msgid "INTERNAL ERROR at %s:%d: can't modify read-only target" msgstr "" #: src/rush.c:980 #, c-format msgid "Transformation map: %s, %s, %s, %u, %u, %s" msgstr "Muunnoskartta: %s, %s, %s, %u, %u, %s" #: src/rush.c:994 #, c-format msgid "INTERNAL ERROR at %s:%d: invalid node type %d" msgstr "" #: src/rush.c:1001 #, c-format msgid "transformed value: %s" msgstr "" #: src/rush.c:1022 #, c-format msgid "Deleting arguments %d-%d" msgstr "Poistetaan argumentit %d-%d" #: src/rush.c:1025 msgid "Deleting argv[0] is prohibited" msgstr "Argumentin argv[0] poistaminen ei ole sallittua" #: src/rush.c:1047 #, c-format msgid "INTERNAL ERROR at %s:%d: invalid target type %d" msgstr "" #: src/rush.c:1065 #, c-format msgid "Program name: %s" msgstr "Ohjelman nimi: %s" #: src/rush.c:1066 msgid "Final arguments:" msgstr "Lopulliset argumentit:" #: src/rush.c:1084 #, c-format msgid "error writing to database %s: %s" msgstr "virhe kirjoitettaessa tietokantaan %s: %s" #: src/rush.c:1093 #, c-format msgid "error writing stop to database file %s: %s" msgstr "virhe kirjoitettaessa pysäytystä tietokantatiedostoon %s: %s" #: src/rush.c:1114 #, c-format msgid "%s:%d: %s: cannot fork: %s" msgstr "%s:%d: %s: fork-funktio epäonnistui: %s" #: src/rush.c:1124 #, c-format msgid "Forked process %lu" msgstr "Haaroitettiin prosessi %lu" #: src/rush.c:1128 #, c-format msgid "%s: subprocess exited with code %d" msgstr "%s: aliprosessi poistui koodilla %d" #: src/rush.c:1131 #, c-format msgid "%s: subprocess terminated on signal %d" msgstr "%s: aliprosessi päättyi signaalilla %d" #: src/rush.c:1134 #, c-format msgid "%s: subprocess terminated" msgstr "%s: aliprosessi päättyi" #: src/rush.c:1223 #, c-format msgid "cannot enforce gid %lu: %s" msgstr "ryhmätunnisteen gid %lu vahvistaminen epäonnistui: %s" #: src/rush.c:1228 #, c-format msgid "cannot enforce uid %lu: %s" msgstr "käyttäjätunnisteen uid %lu vahvistaminen epäonnistui: %s" #: src/rush.c:1233 msgid "seteuid(0) succeeded when it should not" msgstr "seteuid(0) onnistui vaikka sen ei olisi pitänyt" #: src/rush.c:1239 #, c-format msgid "Rule %s at %s:%d matched" msgstr "Sääntö %s osoitteessa %s:%d täsmäsi" #: src/rush.c:1253 #, c-format msgid "Error message: %s" msgstr "Virheilmoitus: %s" #: src/rush.c:1256 #, c-format msgid "Error sending diagnostic message to descriptor %d: %s" msgstr "Virhe lähetettäessä vianmäärityssanoma selosteelle %d: %s" #: src/rush.c:1262 #, c-format msgid "cannot set limits for %s" msgstr "rajojen asettaminen kohteelle %s epäonnistui" #: src/rush.c:1269 #, c-format msgid "Chroot dir: %s" msgstr "Chroot hakemisto: %s" #: src/rush.c:1276 #, c-format msgid "Home dir: %s" msgstr "Kotihakemisto: %s" #: src/rush.c:1281 #, c-format msgid "GID: %lu" msgstr "GID: %lu" #: src/rush.c:1306 #, c-format msgid "cannot open database %s: %s" msgstr "tietokannan %s avaaminen epäonnistui: %s" #: src/rush.c:1315 #, c-format msgid "cannot chroot to %s: %s" msgstr "komennon chroot suorittaminen kohteelle %s epäonnistui: %s" #: src/rush.c:1322 src/rush.c:1414 #, c-format msgid "invalid uid %lu" msgstr "virheellinen käyttäjätunniste uid %lu" #: src/rush.c:1327 #, c-format msgid "chdir %s" msgstr "" #: src/rush.c:1330 #, c-format msgid "cannot change to dir %s: %s" msgstr "hakemistoon %s vaihtaminen epäonnistui: %s" #: src/rush.c:1334 #, c-format msgid "Executing %s, %s" msgstr "Suoritetaan %s, %s" #: src/rush.c:1349 #, c-format msgid "%s:%d: %s: cannot execute %s: %s" msgstr "%s:%d: %s: kohteen %s suorittaminen epäonnistui: %s" #: src/rush.c:1392 src/rush.c:1394 msgid "invalid command line" msgstr "virheellinen komentorivi" #: src/rush.c:1405 msgid "invalid user name" msgstr "virheellinen käyttäjänimi" #: src/rush.c:1416 #, c-format msgid "user %s, uid %lu" msgstr "käyttäjä %s, käyttäjätunniste uid %lu" #: src/rush.c:1428 msgid "Command line:" msgstr "Komentorivi:" #: src/rush.c:1431 msgid "Environment:" msgstr "Ympäristö:" #: src/rush.c:1462 #, c-format msgid "Serving interactive shell request for %s by rule %s" msgstr "" "Palvellaan vuorovaikutteista komentotulkkipyyntöä kohteelle %s säännöllä %s" #: src/rush.c:1466 #, c-format msgid "Serving request \"%s\" for %s by rule %s" msgstr "Palvellaan pyyntöä â€%s†kohteelle %s säännöllä %s" #: src/rush.c:1472 #, c-format msgid "no matching rule for \"%s\", user %s" msgstr "ei täsmäävää sääntöä kohteelle â€%sâ€, käyttäjä %s" #: src/rushlast.c:31 src/rushwho.c:30 #, c-format msgid "not enough memory" msgstr "muisti ei riitä" #: src/rushlast.c:78 src/rushwho.c:67 #, c-format msgid "invalid format: %s" msgstr "virheellinen muoto: %s" #: src/rushlast.c:88 src/rushwho.c:77 #, c-format msgid "cannot open database file %s" msgstr "tietokantatiedoston %s avaaminen epäonnistui" #: src/rushwho.c:61 #, c-format msgid "extra arguments" msgstr "lisäargumentit" #: src/socket.c:61 #, c-format msgid "%s: TCPMUX did not respond" msgstr "%s: TCPMUX ei vastaa" #: src/socket.c:65 #, c-format msgid "%s: TCPMUX returned %s" msgstr "%s: TCPMUX palautti %s" #: src/transform.c:155 msgid "" "Transform expression must start with 's' followed by a punctuation character" msgstr "" #: src/transform.c:166 #, c-format msgid "Missing 2nd delimiter in position %d of expression %s" msgstr "Puuttuu toinen erotin sijainnissa %d lausekkeessa %s" #: src/transform.c:176 #, c-format msgid "Missing trailing delimiter in position %d of expression %s" msgstr "Puuttuu seuraava erotin sijainnissa %d lausekkeessa %s" #: src/transform.c:203 #, c-format msgid "Unknown flag in transform expression: %c" msgstr "Tuntematon lippu muunnoslausekkeessa: %c" #: src/transform.c:220 #, c-format msgid "Invalid transform expression: %s" msgstr "Virheellinen muunnoslauseke: %s" #: src/transform.c:248 msgid "Invalid transform replacement: back reference out of range" msgstr "Virheellinen muuntokorvaus: paluuviite lukualueen ulkopuolella" #: rushopt.opt:27 rlopt.opt:56 msgid "NUMBER" msgstr "NUMERO" #: rushopt.opt:27 msgid "Set debugging level." msgstr "Aseta vianjäljitystaso." #: rushopt.opt:35 msgid "Run in test mode." msgstr "Suorita testaustilassa." #: rushopt.opt:41 msgid "Scanner test." msgstr "" #: rushopt.opt:47 msgid "Print grammar and lexical analyzer traces" msgstr "" #: rushopt.opt:53 msgid "NAME" msgstr "NIMI" #: rushopt.opt:53 msgid "Supply user name in test mode." msgstr "Tarjoa käyttäjänimi testitilassa." #: rushopt.opt:65 msgid "COMMAND" msgstr "KOMENTO" #: rushopt.opt:65 msgid "Execute COMMAND." msgstr "Suorita KOMENTO." #: rushopt.opt:71 msgid "Force interactive shell." msgstr "Pakota vuorovaikutteinen komentotulkkiohjelma." #: rushopt.opt:78 msgid "KEYWORDS" msgstr "AVAINSANAT" #: rushopt.opt:78 msgid "Dump final request in test mode." msgstr "Vedosta viimeinen pyyntö testaustilassa." #: rushopt.opt:85 msgid "CHECK" msgstr "TARKISTA" #: rushopt.opt:85 msgid "Add or remove configuration security check." msgstr "Lisää tai poista asetuksen turvatarkistus." #: rushopt.opt:93 msgid "Show default configuration." msgstr "Näytä oletusasetukset." #: rushopt.opt:102 rwopt.opt:40 rlopt.opt:82 msgid "Other options" msgstr "Muut valitsimet" #: rushopt.opt:102 rwopt.opt:40 rlopt.opt:82 msgid "Give this help list" msgstr "Näytä tämä opasteluettelo" #: rushopt.opt:102 rwopt.opt:40 rlopt.opt:82 msgid "Give a short usage message" msgstr "Näytä lyhyt käyttöviesti" #: rushopt.opt:102 rwopt.opt:40 rlopt.opt:82 msgid "Print program version" msgstr "Tulosta ohjelmaversio" #: rushopt.opt:23 #, fuzzy msgid "rush - restricted user shell." msgstr "rush - rajoitettu käyttäjäkomentotulkki." #: rushopt.opt:25 msgid "[FILE]" msgstr "[TIEDOSTO]" #: rushopt.opt:125 rushopt.opt:359 rwopt.opt:123 rwopt.opt:357 rlopt.opt:126 #: rlopt.opt:360 msgid "Usage:" msgstr "Käyttö:" #: rushopt.opt:125 rwopt.opt:123 rlopt.opt:126 msgid "OPTION" msgstr "VALITSIN" #: rushopt.opt:243 rwopt.opt:241 rlopt.opt:244 msgid "" "Mandatory or optional arguments to long options are also mandatory or " "optional for any corresponding short options." msgstr "" "Pakolliset tai valinnaiset argumentit pitkille valitsimelle ovat pakollisia " "tai valinnaisia myös kaikille vastaaville lyhyille valitsimille." #: rushopt.opt:247 rwopt.opt:245 rlopt.opt:248 #, c-format msgid "Report bugs to %s.\n" msgstr "" "Ilmoita virheistä (englanniksi) osoitteeseen %s.\n" "Ilmoita käännösvirheistä osoitteeseen <translation-team-fi@lists.sourceforge." "net>.\n" #: rushopt.opt:700 rwopt.opt:698 rlopt.opt:701 msgid "(C)" msgstr "©" #: rushopt.opt:718 rwopt.opt:716 rlopt.opt:719 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 "" "Lisenssi GPLv3+: GNU GPL versio 3 tai myöhäisempi <http://gnu.org/licenses/" "gpl.html>\n" "Tämä on vapaa ohjelmisto: voit vapaasti muuttaa ja jakaa sitä edelleen.\n" "Ohjelmalla EI OLE TAKUUTA siinä laajuudessa, minkä laki sallii.\n" "\n" #: rushopt.opt:60 msgid "the --user option is allowed for the superuser only" msgstr "valitsin --user sallitaan vain pääkäyttäjälle" #: rushopt.opt:100 #, c-format msgid "No default configuration" msgstr "Ei oletusasetusta" #: rwopt.opt:24 rlopt.opt:28 msgid "STRING" msgstr "MERKKIJONO" #: rwopt.opt:24 rlopt.opt:28 msgid "Use STRING instead of the default format." msgstr "käytä MERKKIJONOa eikä oletusmuotoa." #: rwopt.opt:30 rlopt.opt:35 msgid "DIR" msgstr "HAKEM" #: rwopt.opt:30 rlopt.opt:35 msgid "Look for database files in DIR." msgstr "Etsi tietokantatiedostoja hakemistosta HAKEM." #: rwopt.opt:36 rlopt.opt:49 msgid "Do not display header line." msgstr "Älä näytä otsakeriviä." #: rwopt.opt:21 msgid "rushwho - show listing of online Rush users." msgstr "rushwho - näytä luettelo verkossa olevista Rush-käyttäjistä." #: rlopt.opt:42 msgid "Show entries in chronological order." msgstr "Näytä alkiot aikajärjestyksessä." #: rlopt.opt:56 msgid "Show at most NUM records." msgstr "Näytä enimmillään NUM tietuetta." #: rlopt.opt:24 msgid "rushlast - show listing of last Rush logins." msgstr "rushlast - näytä luettelo viimeisistä Rush-kirjautumisista." #: rlopt.opt:26 msgid "[user [user...]]" msgstr "[käyttäjä [käyttäjä...]]" #: rlopt.opt:63 #, c-format msgid "invalid number (%s)" msgstr "virheellinen numero (%s)" #: lib/readfmt.c:40 #, c-format msgid "cannot stat format file %s" msgstr "stat-komennon suorittaminen muototiedostolle %s epäonnistui" #: lib/readfmt.c:42 #, c-format msgid "%s is not a regular file" msgstr "%s ei ole tavallinen tiedosto" #: lib/readfmt.c:46 #, c-format msgid "cannot open format file %s" msgstr "muototiedoston %s avaaminen epäonnistui" #: lib/rushdb.c:79 #, c-format msgid "cannot create directory %s: %s" msgstr "hakemiston %s luominen epäonnistui: %s" #: lib/rushdb.c:84 #, c-format msgid "cannot stat directory %s: %s" msgstr "stat-komennon suorittaminen hakemistolle %s epäonnistui: %s" #: lib/rushdb.c:89 #, c-format msgid "%s is not a directory" msgstr "%s ei ole hakemisto" #: lib/rushdb.c:100 lib/rushdb.c:114 #, c-format msgid "cannot open file %s: %s" msgstr "tiedoston %s avaaminen epäonnistui: %s" #: lib/rushdb.c:586 #, c-format msgid "missing closing quote in string started near `%s'" msgstr "puuttuva sulkeva lainausmerkki merkkijonossa, joka alkoi lähellä â€%sâ€" #: lib/version.c:28 msgid "" "\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" msgstr "" "\n" "Lisenssi GPLv3+: GNU GPL versio 3 tai myöhäisempi <http://gnu.org/licenses/" "gpl.html>\n" "Tämä on vapaa ojelmisto: voit vapaasti muuttaa ja jakaa sitä edelleen.\n" "Ohjelmalla EI OLE TAKUUTA siinä laajuudessa, minkä laki sallii.\n" "\n" #: gnu/error.c:194 msgid "Unknown system error" msgstr "Tuntematon järjestelmävirhe" #: gnu/getopt.c:278 #, fuzzy, c-format msgid "%s: option '%s%s' is ambiguous\n" msgstr "%s: valitsin ’%s’ ei ole yksiselitteinen\n" #: gnu/getopt.c:284 #, fuzzy, c-format msgid "%s: option '%s%s' is ambiguous; possibilities:" msgstr "%s: valitsin ’%s’ ei ole yksiselitteinen; mahdollisuudet:" #: gnu/getopt.c:319 #, fuzzy, c-format msgid "%s: unrecognized option '%s%s'\n" msgstr "%s: tunnistamaton valitsin ’%c%s’\n" #: gnu/getopt.c:345 #, fuzzy, c-format msgid "%s: option '%s%s' doesn't allow an argument\n" msgstr "%s: valitsin ’%c%s’ ei salli argumenttia\n" #: gnu/getopt.c:360 #, fuzzy, c-format msgid "%s: option '%s%s' requires an argument\n" msgstr "%s: valitsin ’--%s’ vaatii argumentin\n" #: gnu/getopt.c:621 #, c-format msgid "%s: invalid option -- '%c'\n" msgstr "%s: virheellinen valitsin -- ’%c’\n" #: gnu/getopt.c:636 gnu/getopt.c:682 #, c-format msgid "%s: option requires an argument -- '%c'\n" msgstr "%s: valitsin vaatii argumentin -- ’%c’\n" #, c-format #~ msgid "Ignoring non-existing file %s" #~ msgstr "Ohitetaan puuttuva tiedosto %s" #, c-format #~ msgid "%s: file is not safe" #~ msgstr "%s: tiedosto ei ole turvallinen" #, c-format #~ msgid "error reading file %s: %s" #~ msgstr "virhe luettaessa tiedostoa %s: %s" #, c-format #~ msgid "read 0 bytes from file %s" #~ msgstr "luettu 0 tavua tiedostosta %s" #~ msgid "not an absolute directory name" #~ msgstr "ei ole absoluuttinen hakemistonimi" #, c-format #~ msgid "%s:%d: %s is not a directory" #~ msgstr "%s:%d: %s ei ole hakemisto" #, c-format #~ msgid "%s:%d: invalid number: %s" #~ msgstr "%s:%d: virheellinen numero: %s" #, c-format #~ msgid "%s:%d: invalid chroot directory" #~ msgstr "%s:%d: virheellinen chroot-hakemisto" #, c-format #~ msgid "%s:%d: invalid home directory" #~ msgstr "%s:%d: virheellinen kotihakemisto" #, c-format #~ msgid "%s:%d: Unknown message reference" #~ msgstr "%s:%d: Tuntematon viestiviite" #, c-format #~ msgid "%s:%d: expected boolean value, but found `%s'" #~ msgstr "%s:%d: odotettiin boolean-arvoa, mutta löytyi â€%sâ€" #, c-format #~ msgid "%s:%d: unknown address family" #~ msgstr "%s:%d: tuntematon osoiteperhe" #, c-format #~ msgid "%s:%d: malformed URL" #~ msgstr "%s:%d: vääränmuotoinen verkko-osoite" #, c-format #~ msgid "%s:%d: port is meaningless for UNIX sockets" #~ msgstr "%s:%d: portti on merkityksetön UNIX-pistokkeille" #, c-format #~ msgid "%s:%d: UNIX socket name too long" #~ msgstr "%s:%d: UNIX-pistokkeen nimi on liian pitkä" #, c-format #~ msgid "%s:%d: bad port number" #~ msgstr "%s:%d: virheellinen porttinumero" #, c-format #~ msgid "%s:%d: unknown service name" #~ msgstr "%s:%d: tuntematon palvelunimi" #, c-format #~ msgid "%s:%d: unknown host name %s" #~ msgstr "%s:%d: tuntematon verkkonimi %s" #, c-format #~ msgid "%s:%d: unsupported address family" #~ msgstr "%s:%d: osoiteperhettä ei tueta" #, c-format #~ msgid "%s:%d: cannot stat file %s: %s" #~ msgstr "%s:%d: stat-komennon suorittaminen tiedostolle %s epäonnistui: %s" #, c-format #~ msgid "%s:%d: unknown keyword: %s" #~ msgstr "%s:%d: tuntematon avainsana: %s" #~ msgid "Falling back to the default configuration" #~ msgstr "Käytetään oletusasetuksia" #, c-format #~ msgid "%s:%d: INTERNAL ERROR: node type out of range" #~ msgstr "%s:%d: SISÄINEN VIRHE: solmutyyppi on lukualueen ulkopuolella" #, c-format #~ msgid "Transform: \"%s\" -> \"%s\"" #~ msgstr "Muunnos: â€%s†-> â€%sâ€" #, c-format #~ msgid "Command line: %s" #~ msgstr "Komentorivi: %s" #~ msgid "Setting command line" #~ msgstr "Asetetaan komentorivi" #, c-format #~ msgid "%s:%d: internal error" #~ msgstr "%s:%d: sisäinen virhe" #, c-format #~ msgid "%s: option '--%s' doesn't allow an argument\n" #~ msgstr "%s: valitsin ’--%s’ ei salli argumenttia\n" #, c-format #~ msgid "%s: option '-W %s' is ambiguous\n" #~ msgstr "%s: valitsin ’-W %s’ ei ole yksiselitteinen\n" #, c-format #~ msgid "%s: option '-W %s' doesn't allow an argument\n" #~ msgstr "%s: valitsin ’-W %s’ ei salli argumenttia\n" #, c-format #~ msgid "%s: option '-W %s' requires an argument\n" #~ msgstr "%s: valitsin ’-W %s’ vaatii argumentin\n" #~ msgid "argcv_string failed: %s" #~ msgstr "argcv_string epäonnistui: %s" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/po/pl.gmo����������������������������������������������������������������������������������0000644�0001750�0001750�00000040117�14655401314�014071� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Þ•����¯������”��é��� ������°��É���±�����{�����‘�����ª�����Å�����Ü�����ø��,��� �����6��.���V��'���…��(���­��"���Ö�����ù��&��������:�� ���Z�����{�����–��w���š��+��������>�����D�����L�����h�� ���w�����…�����‰�����‘�����ª�����É�� ���å�� ����������5���%�����[�����c�����t�����…�����–�����©�����½�����Ö�����é�����ò����� �� ���!��6���.��.���e��-���”��/���Â��2���ò��/���%��%���U�����{�� ���‚��:���£�����Þ��È���ç��^���°�������s���/��5���£��:���Ù��������������� �����9�����T�����f�����o�� ���v�� ���„��)��������¹�����Ï�����à�����ö�� ��� �����+�����D�����V�� ���]��3���k��&���Ÿ�����Æ�����Û�����ó����� ����� �����:��$���V�����{�� ���š��L���»��*��������3�����I�����c�����‚��(���ž�����Ç�����á�����ö��)���ý�� ���'��i���1��t���›���������������(�����?�����[�����s�����’�����­�����È�����ä���������������4�����M�����j�����‚����������¦�����Ä�����Û��1���ñ�����#�����;��*���V�� �����/���¢�����Ò�����â��%���ü��%���" �����H �����] �����u �����ˆ �����¢ �����¶ �����É �����Ø �� ���ë ����� !�����!�����-!�����?!�� ���Y!��1���c!��&���•!��"���¼!�����ß!�����ñ!�����"��%���"��$���:"��,���_"��,���Œ"��'���¹"��'���á"��3��� #�����=#�����O#�����b#�����v#�����ˆ#����� #�����¶#�����Ç#�����ã#��ê��ü#��Ö���ç%�����¾&�����Õ&�����ô&�����'�����/'�����K'��-���`'��&���Ž'��=���µ'��%���ó'��&���(��&���@(�����g(��(���ƒ(�����¬(��%���Ç(��&���í(�����)��|���)��:���•)�����Ð)�� ���Õ)��'���ß)�����*�����*�����**�����2*�����:*��"���W*��&���z*��-���¡*�� ���Ï*�����Ú*��6���ð*�����'+�����0+�����P+�����d+�����x+�����Œ+�� ���¡+�����Â+�����×+��)���à+����� ,�����',��I���:,��C���„,��6���È,��3���ÿ,��8���3-��;���l-��3���¨-�����Ü-��-���ã-��?���.�����Q.��Õ���a.��l���7/��-���¤/��„���Ò/��5���W0��7���0�����Å0�����Ë0�����Ò0��%���ï0�� ���1�� ���#1�����01�� ���61�� ���A1��3���O1�����ƒ1����� 1�����³1��$���Ê1��#���ï1�����2�����-2�� ���M2�� ���W2��T���e2��A���º2�����ü2�����3��'���53�����]3��#���v3��$���š3��*���¿3��-���ê3��%���4��`���>4��-���Ÿ4�����Í4�� ���ä4��!���5�����'5��0���G5��#���x5�����œ5�����¶5�����¿5�����Ô5��t���Ü5��t���Q6�����Æ6�����Í6�����ì6��'��� 7��#���27��$���V7�����{7�����›7��'���»7��)���ã7��!��� 8��#���/8��#���S8��'���w8�����Ÿ8��)���¿8�����é8��"���ò8��-���9��#���C9��>���g9��$���¦9��(���Ë9��7���ô9��#���,:��7���P:�����ˆ:��%���œ:��K���Â:��A���;�����P;�����l;�����‰;��%��� ;�����Æ;�����Þ;�����õ;��$���<��)���3<�����]<�����r<�����†<�����¥<�����Â<��B���É<��+��� =��=���8=�����v=�����Ž=�� ���®=��<���¼=��:���ù=��;���4>��E���p>��?���¶>��,���ö>��2���#?�����V?�����k?�����€?�����?��)���°?�����Ú?�����ò?����� @��$���*@�����’���¥����������J���o�������H�������g������� ���€�������K���ƒ�������������a���������“�������&�������\������f�������?�������Q���k�������A���5���S���p������¤���V���]������1������z���˜�������ž������¨�������®���>�������”���:������L���e���Ž���Ÿ������j���'���ˆ�������*�����������¯���3���‚�������=���U����������������������‡���œ���|�������i���š���9���q���s�������[�����������������������–���,������ ���©���¦������� ������/���h���0�������M�������{������������£�������%���r���F���§���„�������c���n���"�������D����������•��� �������4���`�������¢���}���¬���_�������v���O����������Š���T���C���#���B���)���†����������—���6���-���G�����������W���Œ���l�������Z���~������8���<�������������‘������^������­��� ���…���«�������.�������m����������™���$�������P���‹���d���Y�������X���‰���7�������x�������+���w������� ���¡���@������� ���u����������I������!���ª�������;���N���E���(���t���R�������y������b����������›���2���� 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. �%s is not a directory�%s is not a regular file�%s: TCPMUX did not respond�%s: TCPMUX returned %s�%s: invalid option -- '%c' �%s: not a number�%s: option '%s%s' doesn't allow an argument �%s: option '%s%s' is ambiguous �%s: option '%s%s' is ambiguous; possibilities:�%s: option '%s%s' requires an argument �%s: option requires an argument -- '%c' �%s: subprocess exited with code %d�%s: subprocess terminated�%s: subprocess terminated on signal %d�%s: unrecognized option '%s%s' �%s:%d: %s: cannot execute %s: %s�%s:%d: %s: cannot fork: %s�(C)�A system error occurred while attempting to execute command. Contact the systems administrator for further assistance. �Add or remove configuration security check.�CHECK�COMMAND�Cannot open database %s: %s�Chroot dir: %s�Command line:�DIR�Debug: �Deleting arguments %d-%d�Deleting argv[0] is prohibited�Do not display header line.�Dump final request in test mode.�Environment:�Error message: %s�Error sending diagnostic message to descriptor %d: %s�Error: �Execute COMMAND.�Executing %s, %s�Final arguments:�Final environment:�Finished parsing %s�Force interactive shell.�Forked process %lu�GID: %lu�Give a short usage message�Give this help list�Home dir: %s�INTERNAL ERROR at %s:%d: can't modify read-only target�INTERNAL ERROR at %s:%d: invalid envar type %d�INTERNAL ERROR at %s:%d: invalid node type %d�INTERNAL ERROR at %s:%d: invalid target type %d�INTERNAL ERROR at %s:%d: unrecognized node type %d�INTERNAL ERROR at %s:%d: unrecognized opcode %d�Ignoring non-existing include file %s�Info: �Invalid transform expression: %s�Invalid transform replacement: back reference out of range�KEYWORDS�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. �Local configuration error occurred. Contact the systems administrator for further assistance. �Look for database files in DIR.�Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options.�Missing 2nd delimiter in position %d of expression %s�Missing trailing delimiter in position %d of expression %s�NAME�NUMBER�No default configuration�No logins allowed for `%s'�Not enough memory�Notice: �OPTION�Other options�Parsing %s�Print grammar and lexical analyzer traces�Print program version�Program name: %s�Removing option %s %s�Report bugs to %s. �Resuming parsing %s from line %d�Rule %s at %s:%d matched�Run in test mode.�STRING�Scanner test.�Serving interactive shell request for %s by rule %s�Serving request "%s" for %s by rule %s�Set debugging level.�Setting limit %d to %lu�Setting limits for %s�Setting priority to %d�Show at most NUM records.�Show default configuration.�Show entries in chronological order.�Supply user name in test mode.�Too many logins (max %zu) for %s�Transform expression must start with 's' followed by a punctuation character�Transformation map: %s, %s, %s, %u, %u, %s�Transforming argv[%d]�Transforming command line�Transforming program name (%s)�Transforming variable %s=%s�Unknown flag in transform expression: %c�Unknown message reference�Unknown system error�Usage:�Use STRING instead of the default format.�Warning: �You are not permitted to execute this command. Contact the systems administrator for further assistance. �You do not have interactive login access to this machine. Contact the systems administrator for further assistance. �[FILE]�[user [user...]]�acct database is empty�cannot change to dir %s: %s�cannot chroot to %s: %s�cannot create directory %s: %s�cannot enforce gid %lu: %s�cannot enforce uid %lu: %s�cannot open database %s: %s�cannot open database file %s�cannot open file %s: %s�cannot open format file %s�cannot set limits for %s�cannot stat directory %s: %s�cannot stat file %s: %s�cannot stat format file %s�chdir %s�counted %zu/%zu logins for %s�counting logins for %s�debug level set to %d�environment transformation is not yet implemented�error setting limit: %s�error setting priority: %s�error writing stop to database file %s: %s�error writing to database %s: %s�expected ~ as the second argument, but found %s�extra arguments�failed to parse value: %s�failed to write message to stderr: %s�failed to write message to stdout: %s�invalid command line�invalid file descriptor�invalid format: %s�invalid include file name�invalid number (%s)�invalid number: %s�invalid opcode�invalid regexp: %s�invalid statement: missing value�invalid time: %s�invalid uid %lu�invalid user name�key field is not a number�missing ]�missing closing quote in string started near `%s'�no argument at index %d in command: %s�no matching rule for "%s", user %s�no such group: %s�no such user: %s�not enough memory�parsing legacy built-in configuration�parsing legacy configuration file %s�rushlast - show listing of last Rush logins.�rushwho - show listing of online Rush users.�seteuid(0) succeeded when it should not�statement cannot be used outside a rule�the --user option is allowed for the superuser only�too few arguments�too many arguments�unknown keyword: %s�unknown limit: %s�unknown regexp flag: %s�unknown statement: %s�user %s, uid %lu�value field is not a number�wordsplit(%s) failed: %s�Project-Id-Version: rush 2.0 Report-Msgid-Bugs-To: bug-rush@gnu.org PO-Revision-Date: 2019-07-01 10:14+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; � Licencja GPLv3+: GNU GPL wersji 3 lub nowszej <http://gnu.org/licenses/gpl.html> To jest wolne oprogramowanie: masz prawo modyfikować i rozpowszechniać go. Nie ma Å»ADNYCH GWARANCJI, o ile prawo na to zezwala. �%s nie jest katalogiem�%s nie jest plikiem regularnym�%s: TCPMUX nie odpowiedziaÅ‚�%s: TCPMUX odpowiedziaÅ‚ `%s'�%s: błędna opcja -- '%c' �%s: nie jest liczbÄ…�%s: opcja '%s%s' nie może mieć argumentów �%s: opcja '%s%s' jest niejednoznaczna �%s: opcja '%s%s' jest niejednoznaczna; możliwe zakoÅ„czenia:�%s: opcja '%s%s' musi mieć argument �%s: opcja musi mieć argument -- '%c' �%s: proces zakoÅ„czyÅ‚ siÄ™ z kodem %d�%s: proces zakoÅ„czyÅ‚ siÄ™�%s: proces zakoÅ„czyÅ‚ siÄ™ sygnaÅ‚em %d�%s: nieznana opcja '%s%s' �%s:%d: %s: nie można wykonać %s: %s�%s:%d: %s: fork nie powiodÅ‚a siÄ™: %s�(C)�Podczas wykonania polecenia wystÄ…piÅ‚ błąd systemowy. W celu uzyskania pomocy skontaktuj siÄ™ z administratorem systemu. �Dodaje lub usuwa sprawdzanie bezpieczeÅ„stwa konfiguracji.�TEST�POLECENIE�Nie można otworzyć bazy danych %s: %s�Katalog chroot: %s�Linia polecenia�KATALOG�Debug: �UsuniÄ™cie argumentów %d-%d�UsuniÄ™cie argv[0] jest zabronione�Wyłącza drukowanie linii nagłówka.�Zrzut żądania koÅ„cowego w trybie testowym.�Otoczenie:�Komunikat błędu: %s�Błąd podczas zapisu komunikatu do deskryptora %d: %s�Błąd: �Emulowanie wykonania polecenia.�Uruchomienie %s, %s�Argumenty koÅ„cowe:�Otoczenie koÅ„cowe:�Koniec parsowania %s�Emulacja powÅ‚oki interaktywnej.�Stworzono proces %lu�GID: %lu�WyÅ›wietla streszczenie skÅ‚adni użycia.�WyÅ›wietla ten tekst pomocy.�Katalog domowy: %s�BÅÄ„D WEWNĘTRZNY w %s:%d: nie można modyfikować celu tylko do odczytu�BÅÄ„D WEWNĘTRZNY w %s:%d: niepoprawny typ zmiennej Å›rodowiska %d�BÅÄ„D WEWNĘTRZNY w %s:%d: niepoprawny typ wÄ™zÅ‚a %d�BÅÄ„D WEWNĘTRZNY w %s:%d: niepoprawny typ celu %d�BÅÄ„D WEWNĘTRZNY w %s:%d: nierozpoznany typ wÄ™zÅ‚a %d�BÅÄ„D WEWNĘTRZNY w %s:%d: nieobsÅ‚ugiwany kod operacji %d�Ignorowanie nieistniejÄ…cego pliku dołączanego %s�Info: �NieprawidÅ‚owe polecenie przeksztaÅ‚cenia: %s�Niepoprawna zamiana: odwoÅ‚anie zwrotne spoza zakresu odwoÅ‚aÅ„�SÅOWA-KLUCZOWE�Licencja GPLv3+: GNU GPL wersji 3 lub nowszej <http://gnu.org/licenses/gpl.html> To jest wolne oprogramowanie: masz prawo modyfikować i rozpowszechniać go. Nie ma Å»ADNYCH GWARANCJI, o ile prawo na to zezwala. �WystÄ…piÅ‚ błąd konfiguracji lokalnej. W celu uzyskania pomocy skontaktuj siÄ™ z administratorem systemu. �Szuka plików bazy danych w podanym katalogu.�Argumenty obowiÄ…zkowe lub opcjonalne dla dÅ‚ugich opcji sÄ… również obowiÄ…zkowe lub opcjonalne dla odpowiednich krótkich opcji.�Brak drugiego ogranicznika w pozycji %d instrukcji %s�Brak koÅ„cowego ogranicznika w pozycji %d instrukcji %s�NAZWA�LICZBA�Brak konfiguracji domyÅ›lnej�Logowanie nie jest dozwolone dla `%s'�Brak pamiÄ™ci�Ostrzeżenie�OPCJA�Inne opcje�Parsowanie %s�Wydruk przebiegu analizy gramatycznej i leksykalnej�WyÅ›wietla wersjÄ™ programu.�Nazwa programu: %s�UsuniÄ™cie opcji %s %s�Raporty o błędach wysyÅ‚aj do %s. �Ponowienie parsowania %s w linii %d�Pasuje reguÅ‚a %s w %s:%d�Uruchomienie w trybie testowym.�ÅAŃCUCH�Test skanera.�ObsÅ‚ugiwanie żądania interaktywnego dostÄ™pu od użytkownika %s przez regułę %s�ObsÅ‚ugiwanie polecenia "%s" od użytkownika %s przez regułę %s�Ustawia poziom odpluskwiania.�Ustawienie limitu %d w %lu�Ustawienie limitów dla użytkownika %s�Ustawienie priorytetu %d�Drukuje nie wiÄ™cej niż N wpisów.�WyÅ›wietla konfiguracjÄ™ domyÅ›lnÄ….�Drukuje wpisy w porzÄ…dku chronologicznym.�Podaje nazwÄ™ użytkownika w trybie testowym.�%2$s: za wiele logowaÅ„ (maks. %1$zu)�Wyrażenie przeksztaÅ‚cenia musi zaczynać siÄ™ od 's' po której wystÄ™puje znak interpunkcyjny�Mapa przeksztaÅ‚cania: %s, %s, %s, %u, %u, %s�Modyfikowanie argv[%d]�PrzeksztaÅ‚canie linii polecenia�Modyfikowanie nazwy programu (%s)�PrzeksztaÅ‚canie zmiennej %s=%s�Nieznana flaga w instrukcji przeksztaÅ‚cenia: %c�OdwoÅ‚anie do nieznanego komunikatu�Nieznany błąd systemowy�Użycie:�Ustawia nowy format.�Uwaga: �Nie masz uprawnieÅ„ na wykonanie tego polecenia. W celu uzyskania pomocy skontaktuj siÄ™ z administratorem systemu. �Nie masz dostÄ™pu interaktywnego do tej maszyny. W celu uzyskania pomocy skontaktuj siÄ™ z administratorem systemu. �[PLIK]�[użytkownik [użytkownik...]]�baza danych `acct' jest pusta�nie można przejść do katalogu %s: %s�nie można zrobić chroot do %s: %s�nie można stworzyć katalogu %s: %s�nie można ustawić GID %lu: %s�nie można ustawić UID %lu: %s�nie można otworzyć bazy danych %s: %s�nie można otworzyć pliku bazy danych %s�nie można otworzyć pliku %s: %s�nie mogÄ™ otworzyć plik formatu %s�nie można ustawić limitów dla %s�stat katalogu %s nie powiódÅ‚ siÄ™: %s�stat(%s) nie powiodÅ‚a siÄ™: %s�stat pliku formatu nie powiodÅ‚a siÄ™: %s�chdir %s�ilość logowaÅ„ %3$s: %1$zu/%2$zu�obliczenie iloÅ›ci logowaÅ„ użytkownika `%s'�ustanowiono poziom odpluskwiania %d�przeksztaÅ‚cenie Å›rodowiska jeszcze nie jest zaimplementowane�błąd podczas ustawienia limitu: %s�błąd podczas ustawienia priorytetu: %s�błąd podczas zapisu terminatora do bazy danych %s: %s�błąd zapisu do bazy danych %s: %s�oczekiwano ~ jako drugiego argumentu, ale znaleziono %s�dodatkowe argumenty�nie można rozparsować wartoÅ›ci: %s�zapis komunikatu do standardowego wyjÅ›cia błędów nie powiódÅ‚ siÄ™: %s�zapis komunikatu do standardowego wyjÅ›cia nie powiódÅ‚ siÄ™: %s�niepoprawna linia polecenia�niepoprawny deskryptor pliku�niepoprawny format: %s�niepoprawna nazwa pliku dołączanego�niepoprawna liczba (%s)�niepoprawna liczba: %s�niepoprawny kod operacji�niepoprawne wyrażenie regularne: %s�niepoprawna instrukcja: brakuje wartoÅ›ci�niepoprawny czas: %s�niepoprawny UID %lu�niepoprawna nazwa użytkownika�pole klucza nie jest liczbÄ…�brak ]�brak cudzysÅ‚owu zamykajÄ…cego w Å‚aÅ„cuchu rozpoczÄ™tym przy `%s'�brak argumentu w pozycji %d w poleceniu: %s�brak reguÅ‚y, pasujÄ…cej do polecenia "%s" od użytkownika %s�nie ma takiej grupy: %s�nie ma takiego użytkownika: %s�brak pamiÄ™ci�parsowanie konfiguracji wbudowanej w przestarzaÅ‚ym formacie�parsowanie pliku konfiguracji %s w przestarzaÅ‚ym formacie�rushlast - wyÅ›wietla listÄ™ ostatnich logowaÅ„ przez Rush.�rushwho - wyÅ›wietla listÄ™ obecnie zalogowanych użytkowników Rush.�wywoÅ‚anie seteuid(0) powiodÅ‚o siÄ™ chociaż nie powinno byÅ‚o�instrukcji nie można używać poza regułą�tylko superużytkownik może używać opcji --user�za maÅ‚o argumentów�za wiele argumentów�nieznane sÅ‚owo kluczowe: %s�nieznany limit: %s�nieznana flaga wyrażenia regularnego: %s�nieznana instrukcja: %s�użytkownik %s, uid %lu�pole wartoÅ›ci nie jest liczbÄ…�wordsplit(%s) nie powiodÅ‚a siÄ™: %s��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/po/gl.gmo����������������������������������������������������������������������������������0000644�0001750�0001750�00000016310�14655401314�014056� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Þ•����P������œ��k���������È��É���É�����“�����©�����Â��(���Þ�������w��� �����ƒ�����‹�� ���§�����µ�����¹�����Á�� ���Ý�����ê��5���ü�����2 �����: �����K �����\ �����m �����€ �����” ����� �����¸ ��%���Ì �����ò ��È���ù ��^��� �����! �����A �����F �����M �����f �����x �� ��� �� ��� �����˜ �����® �����¿ �� ���Ó �����ô ����� ����� �����" �����8 �����O �����i ��$���… �����ª �����É �����ã �����ø ��)���ÿ �� ���) ��i���3 ����� �����¤ �����à �����ß �����ü ����������/�����H�����e�����}�����˜�����°�� ���Ë�����ì�����ü����������$�����8�����H�����Z��3���l����� �����´��¯��Å��Å���u�����;�����S��!���p��-���’�����À��t���Ã�����8��-���=�����k�����{�� �����!����� ���¯�����¹��H���Í���������������,�����>�����Q�����a�����|��'���…�����­��+���Ê�����ö��Ä�����e���Ê��)���0�����Z�����_��%���g����������¨�����°�� ���À�����Î�����í��"�����-���%�����S�����o�����u�����•�����³��"���Ò��(���õ��)�����-���H�����v�����•�� ���²��)���¿�� ���é��`���÷�� ���X��)���c��-�����5���»��'���ñ��/�����+���I��7���u��5���­��=���ã��+���!��.���M��6���|�����³�����É�����ã�����ú����������&�����A��8���\�����•�����´�����/�������������H�������8������;���2���������=�������������� ���9���,�������+���)���J��� �������O����������� ������7���0�������%������C������������� ������!���M���A���'���?���B���F���*���L�������������&����������N��� ��������������-������������������������3�������(�������@������������5���4���G���1���I���>����������.�������#���<������6���D�������E���P������"���$������:��� �����������������������K���� 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. �%s is not a directory�%s is not a regular file�%s: invalid option -- '%c' �%s: option requires an argument -- '%c' �(C)�A system error occurred while attempting to execute command. Contact the systems administrator for further assistance. �COMMAND�Cannot open database %s: %s�Command line:�DIR�Debug: �Do not display header line.�Environment:�Error message: %s�Error sending diagnostic message to descriptor %d: %s�Error: �Execute COMMAND.�Executing %s, %s�Final arguments:�Final environment:�Finished parsing %s�GID: %lu�Give a short usage message�Give this help list�Ignoring non-existing include file %s�Info: �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. �Local configuration error occurred. Contact the systems administrator for further assistance. �Look for database files in DIR.�NAME�NUMBER�No default configuration�Not enough memory�OPTION�Other options�Parsing %s�Print program version�Program name: %s�Report bugs to %s. �Resuming parsing %s from line %d�Run in test mode.�STRING�Set debugging level.�Setting limits for %s�Setting priority to %d�Show at most NUM records.�Show default configuration.�Show entries in chronological order.�Supply user name in test mode.�Transforming command line�Unknown system error�Usage:�Use STRING instead of the default format.�Warning: �You are not permitted to execute this command. Contact the systems administrator for further assistance. �[FILE]�cannot create directory %s: %s�cannot open database %s: %s�cannot open database file %s�cannot open file %s: %s�cannot open format file %s�cannot set limits for %s�cannot stat directory %s: %s�cannot stat file %s: %s�cannot stat format file %s�error setting limit: %s�error setting priority: %s�error writing to database %s: %s�extra arguments�invalid command line�invalid format: %s�invalid number (%s)�invalid uid %lu�invalid user name�not enough memory�the --user option is allowed for the superuser only�unknown keyword: %s�user %s, uid %lu�Project-Id-Version: GNU rush 1.7 Report-Msgid-Bugs-To: bug-rush@gnu.org PO-Revision-Date: 2013-02-02 16:55+0200 Last-Translator: Leandro Regueiro <leandro.regueiro@gmail.com> Language-Team: Galician <proxecto@trasno.net> Language: gl 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); � Licenza GPL3v+: GNU GPL versión3 ou posterior <http://gnu.org/licenses/gpl.html> Isto é software libre: pode modificalo e redistribuílo. Non hai NINGUNHA GARANTÃA, ata onde o permita a lei. �%s non é un directorio�%s non é un ficheiro normal�%s: opción incorrecta -- «%c» �%s: a opción require un argumento -- «%c» �©�Produciuse un erro no sistema ao intentar executar a orde. Contacte co administrador do sistema para que lle axude. �ORDE�Non foi posíbel abrir a base de datos %s: %s�Liña de ordes:�DIR�Depuración: �Non mostrar a liña de cabeceira.�Ambiente:�Mensaxe de erro: %s�Produciuse un erro ao enviar mensaxe de diagnóstico ao descritor %d: %s�Erro: �Executar ORDE.�Executando %s, %s�Argumentos finais:�Ambiente final:�Finalizou a análise de %s�GID: %lu�Devolver unha mensaxe curta sobre o uso�Devolver esta lista de axuda�Ignorando o ficheiro include inexistente %s�Información: �Licenza GPL3v+: GNU GPL versión3 ou posterior <http://gnu.org/licenses/gpl.html> Isto é software libre: pode modificalo e redistribuílo. Non hai NINGUNHA GARANTÃA, ata onde o permita a lei. �Produciuse un erro na configuración local. Contacte co administrador do sistema para que lle axude. �Buscar ficheiros de base de datos en DIR.�NOME�NÚMERO�Non hai configuración predeterminada�Non hai suficiente memoria�OPCIÓN�Outras opcións�Analizando %s�Mostrar a versión do programa�Nome do programa: %s�Envíe os informes de fallo a %s. �Continuando a análise de %s desde a liña %d�Executar en modo de probas.�CADEA�Definir o nivel de depuración.�Definindo os límites para %s�Definindo a prioridade como %d�Mostrar como moito NÚM rexistros.�Mostrar a configuración predeterminada.�Mostrar as entradas en orde cronolóxica.�Fornecer o nome de usuario no modo de probas.�Transformando a liña de ordes�Erro de sistema descoñecido�Modo de uso:�Usar CADEA en vez do formato predefinido.�Advertencia: �Non se lle permite executar esta orde. Contacte co administrador do sistema para que lle axude. �[FICHEIRO]�non é posíbel crear o directorio %s: %s�non foi posíbel abrir a base de datos %s: %s�non foi posíbel abrir o ficheiro da base de datos %s�non é posíbel abrir o ficheiro %s: %s�non foi posíbel abrir o ficheiro de formato %s�non é posíbel definir os límites para %s�non é posíbel obter información do directorio %s: %s�non é posíbel obter información do ficheiro %s: %s�non foi posíbel obter información do ficheiro de formato %s�produciuse un erro ao definir o límite: %s�produciuse un erro ao definir a prioridade: %s�produciuse un erro ao escribir na base de datos %s: %s�argumentos adicionais�liña de ordes incorrecta�formato incorrecto: %s�número non válido (%s)�uid incorrecto %lu�nome de usuario incorrecto�non hai memoria suficiente�a opción --user só se lle permite usar ao superusuario�palabra clave descoñecida: %s�usuario %s, uid %lu�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/po/Makevars��������������������������������������������������������������������������������0000644�0001750�0001750�00000005167�14635353547�014470� 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_ \ \ --flag=_:1:pass-c-format\ --flag=N_:1:pass-c-format\ --flag=error:3:c-format --flag=error_at_line:5:c-format\ --flag=asprintf:2:pass-c-format\ --flag=vasprintf:2:pass-c-format\ --flag=format_error:1:pass-c-format\ --flag=die:3:pass-c-format\ --flag=logmsg:2:pass-c-format\ $${end_of_xgettext_options+} # 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-rush@gnu.org # 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 = # This tells whether the $(DOMAIN).pot file contains messages with an 'msgctxt' # context. Possible values are "yes" and "no". Set this to yes if the # package uses functions taking also a message context, like pgettext(), or # if in $(XGETTEXT_OPTIONS) you define keywords with a context argument. USE_MSGCTXT = no # These options get passed to msgmerge. # Useful options are in particular: # --previous to keep previous msgids of translated messages, # --quiet to reduce the verbosity. MSGMERGE_OPTIONS = ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/po/pt_BR.po��������������������������������������������������������������������������������0000644�0001750�0001750�00000061274�14655401313�014326� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Brazilian Portuguese translations for rush package # Traduções em português brasileiro para o pacot rush # Copyright (C) 2019 Free Software Foundation, Inc. # This file is distributed under the same license as the rush package. # Rafael Fontenelle <rafaelff@gnome.org>, 2014, 2016, 2017, 2019. #: rwopt.opt:23 msgid "" msgstr "" "Project-Id-Version: rush 2.0\n" "Report-Msgid-Bugs-To: bug-rush@gnu.org\n" "POT-Creation-Date: 2024-08-09 14:51+0300\n" "PO-Revision-Date: 2019-07-02 16:54-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" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "X-Generator: Virtaal 1.0.0-beta1\n" "X-Bugs: Report translation errors to the Language-Team address.\n" #: src/config.c:163 #, c-format msgid "Finished parsing %s" msgstr "Finalizada análise de %s" #: src/config.c:169 #, c-format msgid "Resuming parsing %s from line %d" msgstr "Resumindo análise de %s a partir da linha %d" #: src/config.c:262 #, c-format msgid "invalid number: %s" msgstr "número inválido: %s" #: src/config.c:275 msgid "invalid opcode" msgstr "código de operação inválido" #: src/config.c:297 #, c-format msgid "invalid regexp: %s" msgstr "expressão regular inválida: %s" #: src/config.c:336 #, c-format msgid "unknown regexp flag: %s" msgstr "opção de expressão regular desconhecida: %s" #: src/config.c:353 msgid "too few arguments" msgstr "poucos argumentos" #: src/config.c:357 src/rush.c:1381 msgid "too many arguments" msgstr "argumentos demais" #: src/config.c:428 #, c-format msgid "no such user: %s" msgstr "usuário inexistente: %s" #: src/config.c:453 src/config.c:1106 #, c-format msgid "no such group: %s" msgstr "grupo inexistente: %s" #: src/config.c:543 #, c-format msgid "unknown limit: %s" msgstr "limite desconhecido: %s" #: src/config.c:560 #, c-format msgid "expected ~ as the second argument, but found %s" msgstr "esperava-se ~ como o segundo argumento, mas encontrada %s" #: src/config.c:718 #, c-format msgid "debug level set to %d" msgstr "nível de depuração definido para %d" #: src/config.c:730 #, c-format msgid "invalid time: %s" msgstr "horário inválido: %s" #: src/config.c:786 msgid "invalid file descriptor" msgstr "descritor de arquivo inválido" #: src/config.c:800 msgid "Unknown message reference" msgstr "Referência de mensagem desconhecida" #: src/config.c:893 msgid "invalid include file name" msgstr "nome de arquivo incluído inválido" #: src/config.c:900 #, c-format msgid "Ignoring non-existing include file %s" msgstr "Ignorando arquivo incluído não-existente %s" #: src/config.c:906 #, c-format msgid "cannot stat file %s: %s" msgstr "não foi possível obter estado do arquivo %s: %s" #: src/config.c:934 rushopt.opt:90 #, c-format msgid "unknown keyword: %s" msgstr "palavra-chave desconhecida: %s" #: src/config.c:982 msgid "key field is not a number" msgstr "campo chave não é um número" #: src/config.c:988 msgid "value field is not a number" msgstr "campo de valor não é um número" #: src/config.c:1033 src/config.c:1038 src/rush.c:262 #, c-format msgid "%s: not a number" msgstr "%s: não é um número" #: src/config.c:1211 src/config.c:1340 #, c-format msgid "Parsing %s" msgstr "Analisando %s" #: src/config.c:1245 #, c-format msgid "unknown statement: %s" msgstr "declaração desconhecida: %s" #: src/config.c:1280 msgid "missing ]" msgstr "faltando ]" #: src/config.c:1289 msgid "invalid statement: missing value" msgstr "declaração inválida: faltando valor" #: src/config.c:1310 #, c-format msgid "failed to parse value: %s" msgstr "falha ao analisar valor: %s" #: src/config.c:1328 msgid "statement cannot be used outside a rule" msgstr "declaração não pode ser usada fora de uma regra" #: src/config.c:1366 msgid "parsing legacy built-in configuration" msgstr "analisando configuração embutida legada" #: src/config.c:1368 #, c-format msgid "parsing legacy configuration file %s" msgstr "analisando arquivo de configuração legada %s" #: src/limits.c:53 #, c-format msgid "Setting limit %d to %lu" msgstr "Definindo limite %d para %lu" #: src/limits.c:58 #, c-format msgid "error setting limit: %s" msgstr "erro ao definir limite: %s" #: src/limits.c:68 #, c-format msgid "Setting priority to %d" msgstr "Definindo prioridade para %d" #: src/limits.c:70 #, c-format msgid "error setting priority: %s" msgstr "erro ao definir prioridade: %s" #: src/limits.c:86 src/limits.c:87 #, c-format msgid "No logins allowed for `%s'" msgstr "Não é permitido login para \"%s\"" #: src/limits.c:91 #, c-format msgid "counting logins for %s" msgstr "contando logins para %s" #: src/limits.c:97 msgid "acct database is empty" msgstr "banco de dados de contas está vazio" #: src/limits.c:101 #, c-format msgid "Cannot open database %s: %s" msgstr "Não foi possível abrir o banco de dados %s: %s" #: src/limits.c:119 #, c-format msgid "counted %zu/%zu logins for %s" msgstr "contados %zu/%zu logins para %s" #: src/limits.c:126 src/limits.c:128 #, c-format msgid "Too many logins (max %zu) for %s" msgstr "Número excessivo de logins (máximo %zu) para %s" #: src/limits.c:143 #, c-format msgid "Setting limits for %s" msgstr "Definindo limites para %s" #: src/rush.c:43 msgid "" "You are not permitted to execute this command.\n" "Contact the systems administrator for further assistance.\n" msgstr "" "Você não tem permissão para executar esse comando.\n" "Contate o administrador do seu sistema para mais assistência.\n" #: src/rush.c:47 msgid "" "You do not have interactive login access to this machine.\n" "Contact the systems administrator for further assistance.\n" msgstr "" "Você não tem acesso a login interativo nesta máquina.\n" "Contate o administrador do seu sistema para mais assistência.\n" #: src/rush.c:51 msgid "" "Local configuration error occurred.\n" "Contact the systems administrator for further assistance.\n" msgstr "" "Ocorreu um erro de configuração local.\n" "Contate o administrador do seu sistema para mais assistência.\n" #: src/rush.c:55 msgid "" "A system error occurred while attempting to execute command.\n" "Contact the systems administrator for further assistance.\n" msgstr "" "Ocorreu um erro de sistema enquanto tentava executar comando.\n" "Contate o administrador do seu sistema para mais assistência.\n" #: src/rush.c:156 #, c-format msgid "failed to write message to stderr: %s" msgstr "falha ao escrever mensagem para stderr: %s" #: src/rush.c:160 #, c-format msgid "failed to write message to stdout: %s" msgstr "falha ao escrever mensagem para stdout: %s" #: src/rush.c:172 #, c-format msgid "Debug: " msgstr "Depuração: " #: src/rush.c:176 #, c-format msgid "Info: " msgstr "Informação: " #: src/rush.c:180 #, c-format msgid "Notice: " msgstr "Observação: " #: src/rush.c:184 #, c-format msgid "Warning: " msgstr "Aviso: " #: src/rush.c:191 #, c-format msgid "Error: " msgstr "Erro: " #: src/rush.c:248 msgid "Not enough memory" msgstr "Memória insuficiente" #: src/rush.c:279 src/rush.c:324 #, c-format msgid "INTERNAL ERROR at %s:%d: unrecognized opcode %d" msgstr "ERRO INTERNO em %s:%d: código de operação não reconhecido %d" #: src/rush.c:408 #, fuzzy, c-format msgid "%s:%d: %s: can't stat '%s': %s" msgstr "%s:%d: não foi possível obter estado de %s: %s" #: src/rush.c:469 #, fuzzy, c-format msgid "INTERNAL ERROR at %s:%d: unrecognized operation %d" msgstr "ERRO INTERNO em %s:%d: código de operação não reconhecido %d" #: src/rush.c:509 #, c-format msgid "INTERNAL ERROR at %s:%d: unrecognized node type %d" msgstr "ERRO INTERNO em %s:%d: tipo de nó não reconhecido %d" #: src/rush.c:718 #, c-format msgid "INTERNAL ERROR at %s:%d: invalid envar type %d" msgstr "ERRO INTERNO em %s:%d: tipo de envar inválido %d" #: src/rush.c:723 msgid "Final environment:" msgstr "Ambiente final:" #: src/rush.c:737 #, c-format msgid "wordsplit(%s) failed: %s" msgstr "wordsplit(%s) falhou: %s" #: src/rush.c:763 #, c-format msgid "no argument at index %d in command: %s" msgstr "nenhum argumento no índice %d no comando: %s" #: src/rush.c:906 #, c-format msgid "Removing option %s %s" msgstr "Removendo opção %s %s" #: src/rush.c:918 msgid "Transforming command line" msgstr "Transformando linha de comando" #: src/rush.c:925 #, c-format msgid "Transforming program name (%s)" msgstr "Transformando nome do programa (%s)" #: src/rush.c:943 #, c-format msgid "Transforming argv[%d]" msgstr "Transformando argv[%d]" #: src/rush.c:950 #, c-format msgid "Transforming variable %s=%s" msgstr "Transformando variável %s=%s" #: src/rush.c:957 src/rush.c:1043 msgid "environment transformation is not yet implemented" msgstr "transformação de ambiente não está implementado ainda" #: src/rush.c:961 #, c-format msgid "INTERNAL ERROR at %s:%d: can't modify read-only target" msgstr "ERRO INTERNO em %s:%d: não é possível modificar algo somente leitura" #: src/rush.c:980 #, c-format msgid "Transformation map: %s, %s, %s, %u, %u, %s" msgstr "Mapa de transformação: %s, %s, %s, %u, %u, %s" #: src/rush.c:994 #, c-format msgid "INTERNAL ERROR at %s:%d: invalid node type %d" msgstr "ERRO INTERNO em %s:%d: tipo de nó inválido %d" #: src/rush.c:1001 #, fuzzy, c-format msgid "transformed value: %s" msgstr "Transformando variável %s=%s" #: src/rush.c:1022 #, c-format msgid "Deleting arguments %d-%d" msgstr "Excluindo argumentos %d-%d" #: src/rush.c:1025 msgid "Deleting argv[0] is prohibited" msgstr "Exclusão de argv[0] é proibida" #: src/rush.c:1047 #, c-format msgid "INTERNAL ERROR at %s:%d: invalid target type %d" msgstr "ERRO INTERNO em %s:%d: tipo de alvo inválido %d" #: src/rush.c:1065 #, c-format msgid "Program name: %s" msgstr "Nome do programa: %s" #: src/rush.c:1066 msgid "Final arguments:" msgstr "Argumentos finais:" #: src/rush.c:1084 #, c-format msgid "error writing to database %s: %s" msgstr "erro ao escrever para o banco de dados %s: %s" #: src/rush.c:1093 #, c-format msgid "error writing stop to database file %s: %s" msgstr "erro ao escrever parada para o arquivo de banco de dados %s: %s" #: src/rush.c:1114 #, c-format msgid "%s:%d: %s: cannot fork: %s" msgstr "%s:%d: %s: não foi possível bifurcar (fork): %s" #: src/rush.c:1124 #, c-format msgid "Forked process %lu" msgstr "Bifurcou (fork) processo %lu" #: src/rush.c:1128 #, c-format msgid "%s: subprocess exited with code %d" msgstr "%s: o subprocesso saiu com código %d" #: src/rush.c:1131 #, c-format msgid "%s: subprocess terminated on signal %d" msgstr "%s: o subprocesso foi terminado com sinal %d" #: src/rush.c:1134 #, c-format msgid "%s: subprocess terminated" msgstr "%s: o subprocesso terminado" #: src/rush.c:1223 #, c-format msgid "cannot enforce gid %lu: %s" msgstr "não foi possível aplicar gid %lu: %s" #: src/rush.c:1228 #, c-format msgid "cannot enforce uid %lu: %s" msgstr "não foi possível aplicar uid %lu: %s" #: src/rush.c:1233 msgid "seteuid(0) succeeded when it should not" msgstr "seteuid(0) funcionou quando não deveria" #: src/rush.c:1239 #, c-format msgid "Rule %s at %s:%d matched" msgstr "Regra %s em %s:%d correspondeu" #: src/rush.c:1253 #, c-format msgid "Error message: %s" msgstr "Mensagem de erro: %s" #: src/rush.c:1256 #, c-format msgid "Error sending diagnostic message to descriptor %d: %s" msgstr "Erro ao enviar mensagem de diagnóstico para descritor %d: %s" #: src/rush.c:1262 #, c-format msgid "cannot set limits for %s" msgstr "não foi possível definir limites para %s" #: src/rush.c:1269 #, c-format msgid "Chroot dir: %s" msgstr "Diretório de chroot: %s" #: src/rush.c:1276 #, c-format msgid "Home dir: %s" msgstr "Diretório pessoal: %s" #: src/rush.c:1281 #, c-format msgid "GID: %lu" msgstr "GID: %lu" #: src/rush.c:1306 #, c-format msgid "cannot open database %s: %s" msgstr "não foi possível abrir o banco de dados %s: %s" #: src/rush.c:1315 #, c-format msgid "cannot chroot to %s: %s" msgstr "não foi possível fazer chroot para %s: %s" #: src/rush.c:1322 src/rush.c:1414 #, c-format msgid "invalid uid %lu" msgstr "uid %lu inválido" #: src/rush.c:1327 #, c-format msgid "chdir %s" msgstr "chdir %s" #: src/rush.c:1330 #, c-format msgid "cannot change to dir %s: %s" msgstr "não foi possível alterar para o diretório %s: %s" #: src/rush.c:1334 #, c-format msgid "Executing %s, %s" msgstr "Executando %s, %s" #: src/rush.c:1349 #, c-format msgid "%s:%d: %s: cannot execute %s: %s" msgstr "%s:%d: %s: não foi possível executar %s: %s" #: src/rush.c:1392 src/rush.c:1394 msgid "invalid command line" msgstr "linha de comando inválida" #: src/rush.c:1405 msgid "invalid user name" msgstr "nome de usuário inválido" #: src/rush.c:1416 #, c-format msgid "user %s, uid %lu" msgstr "usuário %s, uid %lu" #: src/rush.c:1428 msgid "Command line:" msgstr "Linha de comando:" #: src/rush.c:1431 msgid "Environment:" msgstr "Ambiente:" #: src/rush.c:1462 #, c-format msgid "Serving interactive shell request for %s by rule %s" msgstr "Servindo requisição de shell interativa para %s por regra %s" #: src/rush.c:1466 #, c-format msgid "Serving request \"%s\" for %s by rule %s" msgstr "Servindo requisição \"%s\" para %s por regra %s" #: src/rush.c:1472 #, c-format msgid "no matching rule for \"%s\", user %s" msgstr "nenhuma regra correspondente para \"%s\", usuário %s" #: src/rushlast.c:31 src/rushwho.c:30 #, c-format msgid "not enough memory" msgstr "memória insuficiente" #: src/rushlast.c:78 src/rushwho.c:67 #, c-format msgid "invalid format: %s" msgstr "formato inválido: %s" #: src/rushlast.c:88 src/rushwho.c:77 #, c-format msgid "cannot open database file %s" msgstr "não foi possível abrir o arquivo de banco de dados %s" #: src/rushwho.c:61 #, c-format msgid "extra arguments" msgstr "argumentos extra" #: src/socket.c:61 #, c-format msgid "%s: TCPMUX did not respond" msgstr "%s: TCPMUX não respondeu" #: src/socket.c:65 #, c-format msgid "%s: TCPMUX returned %s" msgstr "%s: TCPMUX retornou %s" #: src/transform.c:155 msgid "" "Transform expression must start with 's' followed by a punctuation character" msgstr "" "Expressão de transformação deve iniciar com \"s\" seguido por um caractere " "de pontuação" #: src/transform.c:166 #, c-format msgid "Missing 2nd delimiter in position %d of expression %s" msgstr "Faltando 2º delimitador na posição %d da expressão %s" #: src/transform.c:176 #, c-format msgid "Missing trailing delimiter in position %d of expression %s" msgstr "Faltando delimitador final na posição %d da expressão %s" #: src/transform.c:203 #, c-format msgid "Unknown flag in transform expression: %c" msgstr "Opção desconhecida na expressão de transformação: %c" #: src/transform.c:220 #, c-format msgid "Invalid transform expression: %s" msgstr "Expressão de transformação inválida: %s" #: src/transform.c:248 msgid "Invalid transform replacement: back reference out of range" msgstr "" "Substituição de transformação inválida: referência inversa fora de intervalo" #: rushopt.opt:27 rlopt.opt:56 msgid "NUMBER" msgstr "NÚMERO" #: rushopt.opt:27 msgid "Set debugging level." msgstr "Define o nível de depuração." #: rushopt.opt:35 msgid "Run in test mode." msgstr "Executa no modo teste." #: rushopt.opt:41 msgid "Scanner test." msgstr "Teste de varredura." #: rushopt.opt:47 msgid "Print grammar and lexical analyzer traces" msgstr "Imprimir traços de gramática e analisador léxico" #: rushopt.opt:53 msgid "NAME" msgstr "NOME" #: rushopt.opt:53 msgid "Supply user name in test mode." msgstr "Fornece nome de usuário no modo teste." #: rushopt.opt:65 msgid "COMMAND" msgstr "COMANDO" #: rushopt.opt:65 msgid "Execute COMMAND." msgstr "Executa COMANDO." #: rushopt.opt:71 msgid "Force interactive shell." msgstr "Força shell interativa." #: rushopt.opt:78 msgid "KEYWORDS" msgstr "PALAVRAS-CHAVES" #: rushopt.opt:78 msgid "Dump final request in test mode." msgstr "Despeja a requisição final em modo teste." #: rushopt.opt:85 msgid "CHECK" msgstr "VERIF" #: rushopt.opt:85 msgid "Add or remove configuration security check." msgstr "Adiciona ou remove verificação de segurança de configuração." #: rushopt.opt:93 msgid "Show default configuration." msgstr "Mostra configuração padrão." #: rushopt.opt:102 rwopt.opt:40 rlopt.opt:82 msgid "Other options" msgstr "Outras opções" #: rushopt.opt:102 rwopt.opt:40 rlopt.opt:82 msgid "Give this help list" msgstr "Fornece essa lista de ajuda" #: rushopt.opt:102 rwopt.opt:40 rlopt.opt:82 msgid "Give a short usage message" msgstr "Fornece uma mensagem de uso curta" #: rushopt.opt:102 rwopt.opt:40 rlopt.opt:82 msgid "Print program version" msgstr "Mostra versão do programa" #: rushopt.opt:23 #, fuzzy msgid "rush - restricted user shell." msgstr "rush - uma shell de usuário restrita." #: rushopt.opt:25 msgid "[FILE]" msgstr "[ARQUIVO]" #: rushopt.opt:125 rushopt.opt:359 rwopt.opt:123 rwopt.opt:357 rlopt.opt:126 #: rlopt.opt:360 msgid "Usage:" msgstr "Uso:" #: rushopt.opt:125 rwopt.opt:123 rlopt.opt:126 msgid "OPTION" msgstr "OPÇÃO" #: rushopt.opt:243 rwopt.opt:241 rlopt.opt:244 msgid "" "Mandatory or optional arguments to long options are also mandatory or " "optional for any corresponding short options." msgstr "" "Argumentos obrigatórios ou opcionais para opções longas também o são para " "quaisquer opções curtas correspondentes." #: rushopt.opt:247 rwopt.opt:245 rlopt.opt:248 #, c-format msgid "Report bugs to %s.\n" msgstr "Relate erros para %s.\n" #: rushopt.opt:700 rwopt.opt:698 rlopt.opt:701 msgid "(C)" msgstr "©" #: rushopt.opt:718 rwopt.opt:716 rlopt.opt:719 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" "Este é um software livre: você é livre para alterá-lo e redistribuí-lo.\n" "NÃO Hà QUALQUER GARANTIA, na máxima extensão permitida em lei.\n" "\n" #: rushopt.opt:60 msgid "the --user option is allowed for the superuser only" msgstr "a opção --user é permitida para o superusuário apenas" #: rushopt.opt:100 #, c-format msgid "No default configuration" msgstr "Nenhum arquivo de configuração" #: rwopt.opt:24 rlopt.opt:28 msgid "STRING" msgstr "TEXTO" #: rwopt.opt:24 rlopt.opt:28 msgid "Use STRING instead of the default format." msgstr "Usa TEXTO em vez do formato padrão." #: rwopt.opt:30 rlopt.opt:35 msgid "DIR" msgstr "DIR" #: rwopt.opt:30 rlopt.opt:35 msgid "Look for database files in DIR." msgstr "Procura por arquivos de banco de dados em DIR." #: rwopt.opt:36 rlopt.opt:49 msgid "Do not display header line." msgstr "Não exibe linha de cabeçalho." #: rwopt.opt:21 msgid "rushwho - show listing of online Rush users." msgstr "rushwho - mostra listagem de usuários conectados ao Rush." #: rlopt.opt:42 msgid "Show entries in chronological order." msgstr "Mostra entradas em ordem cronológica." #: rlopt.opt:56 msgid "Show at most NUM records." msgstr "Mostra no máximo NUM registros." #: rlopt.opt:24 msgid "rushlast - show listing of last Rush logins." msgstr "rushlast - mostra listagem dos últimos logins ao Rush." #: rlopt.opt:26 msgid "[user [user...]]" msgstr "[user [usuário...]]" #: rlopt.opt:63 #, c-format msgid "invalid number (%s)" msgstr "número inválido (%s)" #: lib/readfmt.c:40 #, c-format msgid "cannot stat format file %s" msgstr "não foi possível obter estado do arquivo %s" #: lib/readfmt.c:42 #, c-format msgid "%s is not a regular file" msgstr "%s não é um arquivo comum" #: lib/readfmt.c:46 #, c-format msgid "cannot open format file %s" msgstr "não foi possível abrir o arquivo de formato %s" #: lib/rushdb.c:79 #, c-format msgid "cannot create directory %s: %s" msgstr "não foi possível criar o diretório %s: %s" #: lib/rushdb.c:84 #, c-format msgid "cannot stat directory %s: %s" msgstr "não foi possível obter estado do diretório %s: %s" #: lib/rushdb.c:89 #, c-format msgid "%s is not a directory" msgstr "%s não é um diretório" #: lib/rushdb.c:100 lib/rushdb.c:114 #, c-format msgid "cannot open file %s: %s" msgstr "não foi possível abrir o arquivo %s: %s" #: lib/rushdb.c:586 #, c-format msgid "missing closing quote in string started near `%s'" msgstr "faltando aspas de fechamento na string iniciada próximo a \"%s\"" #: lib/version.c:28 msgid "" "\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" msgstr "" "\n" "Licença GPLv3+: GNU GPL versão 3 ou posterior <http://gnu.org/licenses/gpl." "html>\n" "Este é um software livre: você é livre para alterá-lo e redistribuí-lo.\n" "NÃO Hà QUALQUER GARANTIA, na máxima extensão permitida em lei.\n" "\n" #: gnu/error.c:194 msgid "Unknown system error" msgstr "Erro desconhecido de sistema" #: gnu/getopt.c:278 #, c-format msgid "%s: option '%s%s' is ambiguous\n" msgstr "%s: a opção \"%s%s\" é ambígua\n" #: gnu/getopt.c:284 #, c-format msgid "%s: option '%s%s' is ambiguous; possibilities:" msgstr "%s: a opção \"%s%s\" é ambígua; possibilidades:" #: gnu/getopt.c:319 #, c-format msgid "%s: unrecognized option '%s%s'\n" msgstr "%s: opção desconhecida \"%s%s\"\n" #: gnu/getopt.c:345 #, c-format msgid "%s: option '%s%s' doesn't allow an argument\n" msgstr "%s: a opção \"%s%s\" não permite um argumento\n" #: gnu/getopt.c:360 #, c-format msgid "%s: option '%s%s' requires an argument\n" msgstr "%s: a opção \"%s%s\" exige um argumento\n" #: gnu/getopt.c:621 #, c-format msgid "%s: invalid option -- '%c'\n" msgstr "%s: opção inválida -- \"%c\"\n" #: gnu/getopt.c:636 gnu/getopt.c:682 #, c-format msgid "%s: option requires an argument -- '%c'\n" msgstr "%s: a opção requer um argumento -- \"%c\"\n" #~ msgid "Ignoring non-existing file %s" #~ msgstr "Ignorando arquivo não existente %s" #~ msgid "%s: file is not safe" #~ msgstr "%s: arquivo não é seguro" #~ msgid "error reading file %s: %s" #~ msgstr "erro ao ler o arquivo %s: %s" #~ msgid "read 0 bytes from file %s" #~ msgstr "lido 0 bytes do arquivo %s" #~ msgid "not an absolute directory name" #~ msgstr "não é um nome absoluto de diretório" #~ msgid "%s:%d: %s is not a directory" #~ msgstr "%s:%d: %s não é um diretório" #~ msgid "%s:%d: invalid number: %s" #~ msgstr "%s:%d: número inválido: %s" #~ msgid "%s:%d: invalid chroot directory" #~ msgstr "%s:%d: diretório de chroot inválido" #~ msgid "%s:%d: invalid home directory" #~ msgstr "%s:%d: diretório pessoal inválido" #~ msgid "%s:%d: Unknown message reference" #~ msgstr "%s:%d: Referência de mensagem desconhecida" #~ msgid "%s:%d: expected boolean value, but found `%s'" #~ msgstr "%s:%d: esperava-se valor booleano, mas encontrou \"%s\"" #~ msgid "%s:%d: unknown address family" #~ msgstr "%s:%d: família de endereço desconhecido" #~ msgid "%s:%d: malformed URL" #~ msgstr "%s:%d: URL malformada" #~ msgid "%s:%d: port is meaningless for UNIX sockets" #~ msgstr "%s:%d: porta não tem sentido para soquetes UNIX" #~ msgid "%s:%d: UNIX socket name too long" #~ msgstr "%s:%d: nome de soquete UNIX grande demais" #~ msgid "%s:%d: bad port number" #~ msgstr "%s:%d: número de porta inválido" #~ msgid "%s:%d: unknown service name" #~ msgstr "%s:%d: nome de serviço desconhecido" #~ msgid "%s:%d: unknown host name %s" #~ msgstr "%s:%d: nome de máquina desconhecido %s" #~ msgid "%s:%d: unsupported address family" #~ msgstr "%s:%d: família de endereço sem suporte" #~ msgid "%s:%d: cannot stat file %s: %s" #~ msgstr "%s:%d: não foi possível obter estado de %s: %s" #~ msgid "%s:%d: unknown keyword: %s" #~ msgstr "%s:%d: palavra-chave desconhecida: %s" #~ msgid "Falling back to the default configuration" #~ msgstr "Voltando para a configuração padrão" #~ msgid "%s:%d: INTERNAL ERROR: node type out of range" #~ msgstr "%s:%d: ERRO INTERNO: tipo de nó fora do intervalo" #~ msgid "Transform: \"%s\" -> \"%s\"" #~ msgstr "Transformar: \"%s\" -> \"%s\"" #~ msgid "Command line: %s" #~ msgstr "Linha de comando: %s" #~ msgid "Setting command line" #~ msgstr "Definindo linha de comando" #~ msgid "%s:%d: internal error" #~ msgstr "%s:%d: erro interno" #~ msgid "%s: option '--%s' doesn't allow an argument\n" #~ msgstr "%s: a opção \"--%s\" não permite um argumento\n" #~ msgid "%s: unrecognized option '--%s'\n" #~ msgstr "%s: opção desconhecida \"--%s\"\n" #~ msgid "%s: option '-W %s' is ambiguous\n" #~ msgstr "%s: a opção \"-W %s\" é ambígua\n" #~ msgid "%s: option '-W %s' doesn't allow an argument\n" #~ msgstr "%s: a opção \"-W %s\" não permite um argumento\n" #~ msgid "%s: option '-W %s' requires an argument\n" #~ msgstr "%s: a opção \"-W %s\" exige um argumento\n" #~ msgid "argcv_string failed: %s" #~ msgstr "argcv_string falhou: %s" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/po/fr.po�����������������������������������������������������������������������������������0000644�0001750�0001750�00000053273�14655401313�013727� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# French translation of rush. # Copyright (C) 2013, 2014 Free Software Foundation, Inc. # This file is distributed under the same license as the rush package. # # Rémy Chevalier <remychevalier@laposte.net>, 2013, 2014. # Stéphane Aulery <lkppo@free.fr>, 2015-2022. # #: rwopt.opt:23 msgid "" msgstr "" "Project-Id-Version: rush 2.2\n" "Report-Msgid-Bugs-To: bug-rush@gnu.org\n" "POT-Creation-Date: 2024-08-09 14:51+0300\n" "PO-Revision-Date: 2022-07-05 00:04+0200\n" "Last-Translator: Stéphane Aulery <lkppo@free.fr>\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" #: src/config.c:163 #, c-format msgid "Finished parsing %s" msgstr "Analyse de %s terminée" #: src/config.c:169 #, c-format msgid "Resuming parsing %s from line %d" msgstr "Reprise de l'analyse syntaxique de %s depuis la ligne %d" #: src/config.c:262 #, c-format msgid "invalid number: %s" msgstr "nombre non valide : %s" #: src/config.c:275 msgid "invalid opcode" msgstr "opcode non valide" #: src/config.c:297 #, c-format msgid "invalid regexp: %s" msgstr "regex non valide : %s" #: src/config.c:336 #, c-format msgid "unknown regexp flag: %s" msgstr "drapeau de regex inconnu : %s" #: src/config.c:353 msgid "too few arguments" msgstr "pas assez d'arguments" #: src/config.c:357 src/rush.c:1381 msgid "too many arguments" msgstr "trop d'arguments" #: src/config.c:428 #, c-format msgid "no such user: %s" msgstr "aucun utilisateur : %s" #: src/config.c:453 src/config.c:1106 #, c-format msgid "no such group: %s" msgstr "aucun groupe : %s" #: src/config.c:543 #, c-format msgid "unknown limit: %s" msgstr "limite inconnue : %s" #: src/config.c:560 #, c-format msgid "expected ~ as the second argument, but found %s" msgstr "~ attendu comme deuxième argument, mais %s trouvé" #: src/config.c:718 #, c-format msgid "debug level set to %d" msgstr "niveau de débogage défini à %d" #: src/config.c:730 #, c-format msgid "invalid time: %s" msgstr "temps non valide : %s" #: src/config.c:786 msgid "invalid file descriptor" msgstr "descripteur de fichier non valide" #: src/config.c:800 msgid "Unknown message reference" msgstr "Référence de message inconnue" #: src/config.c:893 msgid "invalid include file name" msgstr "fichier d'inclusion non valide" #: src/config.c:900 #, c-format msgid "Ignoring non-existing include file %s" msgstr "fichier d'inclusion non existant %s ignoré" #: src/config.c:906 #, c-format msgid "cannot stat file %s: %s" msgstr "impossible d'obtenir le status du fichier %s : %s" #: src/config.c:934 rushopt.opt:90 #, c-format msgid "unknown keyword: %s" msgstr "Mot clé inconnu : %s" #: src/config.c:982 msgid "key field is not a number" msgstr "le champ clé n'est pas un nombre" #: src/config.c:988 msgid "value field is not a number" msgstr "le champ valeur n'est pas un nombre" #: src/config.c:1033 src/config.c:1038 src/rush.c:262 #, c-format msgid "%s: not a number" msgstr "%s : pas un nombre" #: src/config.c:1211 src/config.c:1340 #, c-format msgid "Parsing %s" msgstr "Analyse de %s" #: src/config.c:1245 #, c-format msgid "unknown statement: %s" msgstr "instruction inconnue : %s" #: src/config.c:1280 msgid "missing ]" msgstr "] manquant" #: src/config.c:1289 msgid "invalid statement: missing value" msgstr "instruction non valide : valeur manquante" #: src/config.c:1310 #, c-format msgid "failed to parse value: %s" msgstr "impossible d'analyser syntaxiquement la valeur : %s" #: src/config.c:1328 msgid "statement cannot be used outside a rule" msgstr "l'instruction ne peut pas être utilisée en dehors d'une règle" #: src/config.c:1366 msgid "parsing legacy built-in configuration" msgstr "analyse de l'ancienne configuration par défaut" #: src/config.c:1368 #, c-format msgid "parsing legacy configuration file %s" msgstr "analyse du fichier %s dans un ancien format de configuration" #: src/limits.c:53 #, c-format msgid "Setting limit %d to %lu" msgstr "Limitation à %d de %lu" #: src/limits.c:58 #, c-format msgid "error setting limit: %s" msgstr "erreur pendant la limitation : %s" #: src/limits.c:68 #, c-format msgid "Setting priority to %d" msgstr "Définition de la priorité à %d" #: src/limits.c:70 #, c-format msgid "error setting priority: %s" msgstr "erreur lors de la définition de la priorité : %s" #: src/limits.c:86 src/limits.c:87 #, c-format msgid "No logins allowed for `%s'" msgstr "Aucune connexion autorisée pour \"%s\"" #: src/limits.c:91 #, c-format msgid "counting logins for %s" msgstr "comptage des connexions pour %s" #: src/limits.c:97 msgid "acct database is empty" msgstr "La base de données acct est vide" #: src/limits.c:101 #, c-format msgid "Cannot open database %s: %s" msgstr "Impossible d'ouvrir la base de données %s : %s" #: src/limits.c:119 #, c-format msgid "counted %zu/%zu logins for %s" msgstr "%zu/%zu connexions pour %s" #: src/limits.c:126 src/limits.c:128 #, c-format msgid "Too many logins (max %zu) for %s" msgstr "Trop de connexions (max %zu) pour %s" #: src/limits.c:143 #, c-format msgid "Setting limits for %s" msgstr "Ajustement des limites pour %s" #: src/rush.c:43 msgid "" "You are not permitted to execute this command.\n" "Contact the systems administrator for further assistance.\n" msgstr "" "Vous n'avez l'autorisation d'exécuter cette commande.\n" "Contactez l'administrateur système pour assistance.\n" #: src/rush.c:47 msgid "" "You do not have interactive login access to this machine.\n" "Contact the systems administrator for further assistance.\n" msgstr "" "Vous n'avez pas un accès interactif de connexion à cette machineContactez " "l'administrateur système pour assistance.\n" #: src/rush.c:51 msgid "" "Local configuration error occurred.\n" "Contact the systems administrator for further assistance.\n" msgstr "" "Une erreur de configuration locale est survenue.\n" "Contactez l'administrateur système pour assistance.\n" #: src/rush.c:55 msgid "" "A system error occurred while attempting to execute command.\n" "Contact the systems administrator for further assistance.\n" msgstr "" "Un erreur système est survenue lors de l'exécution de la commande.\n" "Contactez l'administrateur système pour assistance.\n" #: src/rush.c:156 #, c-format msgid "failed to write message to stderr: %s" msgstr "impossible d'écrire le message sur la sortie d'erreur : %s" #: src/rush.c:160 #, c-format msgid "failed to write message to stdout: %s" msgstr "impossible d'écrire le message sur la sortie standard : %s" #: src/rush.c:172 #, c-format msgid "Debug: " msgstr "Débogage : " #: src/rush.c:176 #, c-format msgid "Info: " msgstr "Info : " #: src/rush.c:180 #, c-format msgid "Notice: " msgstr "Note : " #: src/rush.c:184 #, c-format msgid "Warning: " msgstr "Attention : " #: src/rush.c:191 #, c-format msgid "Error: " msgstr "Erreur : " #: src/rush.c:248 msgid "Not enough memory" msgstr "Mémoire insuffisante" #: src/rush.c:279 src/rush.c:324 #, c-format msgid "INTERNAL ERROR at %s:%d: unrecognized opcode %d" msgstr "ERREUR INTERNE à %s:%d : opcode %d inconnu" #: src/rush.c:408 #, c-format msgid "%s:%d: %s: can't stat '%s': %s" msgstr "%s:%d: %s : impossible d'exécuter stat '%s' : %s" #: src/rush.c:469 #, c-format msgid "INTERNAL ERROR at %s:%d: unrecognized operation %d" msgstr "ERREUR INTERNE à %s:%d : opération %d inconnue" #: src/rush.c:509 #, c-format msgid "INTERNAL ERROR at %s:%d: unrecognized node type %d" msgstr "ERREUR INTERNE à %s:%d : type de nÅ“ud %d inconnu" #: src/rush.c:718 #, c-format msgid "INTERNAL ERROR at %s:%d: invalid envar type %d" msgstr "ERREUR INTERNE à %s:%d : type envar %d invalide" #: src/rush.c:723 msgid "Final environment:" msgstr "Environnement final :" #: src/rush.c:737 #, c-format msgid "wordsplit(%s) failed: %s" msgstr "wordsplit(%s) a échoué : %s" #: src/rush.c:763 #, c-format msgid "no argument at index %d in command: %s" msgstr "aucun argument à l'indice %d dans la commande : %s" #: src/rush.c:906 #, c-format msgid "Removing option %s %s" msgstr "Suppression de l'option %s %s" #: src/rush.c:918 msgid "Transforming command line" msgstr "Transformation de la commande" #: src/rush.c:925 #, c-format msgid "Transforming program name (%s)" msgstr "Transformation du nom du programme (%s)" #: src/rush.c:943 #, c-format msgid "Transforming argv[%d]" msgstr "Transformation de argv[%d]" #: src/rush.c:950 #, c-format msgid "Transforming variable %s=%s" msgstr "Transformation de la variable %s=%s" #: src/rush.c:957 src/rush.c:1043 msgid "environment transformation is not yet implemented" msgstr "transformation de l'environnement non implémentée" #: src/rush.c:961 #, c-format msgid "INTERNAL ERROR at %s:%d: can't modify read-only target" msgstr "" "ERREUR INTERNE à %s:%d : impossible de modifier la cible en lecture seule" #: src/rush.c:980 #, c-format msgid "Transformation map: %s, %s, %s, %u, %u, %s" msgstr "Transformation de carte : %s, %s, %s, %u, %u, %s" #: src/rush.c:994 #, c-format msgid "INTERNAL ERROR at %s:%d: invalid node type %d" msgstr "ERREUR INTERNE à %s:%d : type de nÅ“ud %d invalide" #: src/rush.c:1001 #, c-format msgid "transformed value: %s" msgstr "valeur transformée : %s" #: src/rush.c:1022 #, c-format msgid "Deleting arguments %d-%d" msgstr "Suppression des arguments %d-%d" #: src/rush.c:1025 msgid "Deleting argv[0] is prohibited" msgstr "Supprimer argv[0] est interdit" #: src/rush.c:1047 #, c-format msgid "INTERNAL ERROR at %s:%d: invalid target type %d" msgstr "ERREUR INTERNE à %s:%d : type de cible %d invalide" #: src/rush.c:1065 #, c-format msgid "Program name: %s" msgstr "Nom du programme : %s" #: src/rush.c:1066 msgid "Final arguments:" msgstr "Arguments finaux :" #: src/rush.c:1084 #, c-format msgid "error writing to database %s: %s" msgstr "erreur lors de l'écriture dans la base de données %s : %s" #: src/rush.c:1093 #, c-format msgid "error writing stop to database file %s: %s" msgstr "erreur lors de l'écriture de stop dans la base de données %s : %s" #: src/rush.c:1114 #, c-format msgid "%s:%d: %s: cannot fork: %s" msgstr "%s:%d: %s: impossible de forker : %s" #: src/rush.c:1124 #, c-format msgid "Forked process %lu" msgstr "Fork du processus %lu" #: src/rush.c:1128 #, c-format msgid "%s: subprocess exited with code %d" msgstr "%s : le sous-processus s'est terminé avec le code %d" #: src/rush.c:1131 #, c-format msgid "%s: subprocess terminated on signal %d" msgstr "%s : le sous-processus s'est terminé au signal %d" #: src/rush.c:1134 #, c-format msgid "%s: subprocess terminated" msgstr "%s : le sous-processus est terminé" #: src/rush.c:1223 #, c-format msgid "cannot enforce gid %lu: %s" msgstr "impossible de forcer le gid %lu : %s" #: src/rush.c:1228 #, c-format msgid "cannot enforce uid %lu: %s" msgstr "impossible de forcer l'uid %lu : %s" #: src/rush.c:1233 msgid "seteuid(0) succeeded when it should not" msgstr "seteuid(0) a réussi alors qu'il n'aurait pas dû" #: src/rush.c:1239 #, c-format msgid "Rule %s at %s:%d matched" msgstr "La règle %s à %s:%d correspond" #: src/rush.c:1253 #, c-format msgid "Error message: %s" msgstr "Message d'erreur : %s" #: src/rush.c:1256 #, c-format msgid "Error sending diagnostic message to descriptor %d: %s" msgstr "" "Erreur lors de l'envoi du message de diagnostique au descripteur %d : %s" #: src/rush.c:1262 #, c-format msgid "cannot set limits for %s" msgstr "impossible de spécifier les limites pour %s" #: src/rush.c:1269 #, c-format msgid "Chroot dir: %s" msgstr "Chroot répertoire : %s" #: src/rush.c:1276 #, c-format msgid "Home dir: %s" msgstr "Répertoire d'accueil : %s" #: src/rush.c:1281 #, c-format msgid "GID: %lu" msgstr "GID : %lu" #: src/rush.c:1306 #, c-format msgid "cannot open database %s: %s" msgstr "impossible d'ouvrir la base de données %s : %s" #: src/rush.c:1315 #, c-format msgid "cannot chroot to %s: %s" msgstr "impossible d'appliquer chroot à %s : %s" #: src/rush.c:1322 src/rush.c:1414 #, c-format msgid "invalid uid %lu" msgstr "uid %lu non valide" #: src/rush.c:1327 #, c-format msgid "chdir %s" msgstr "chdir %s" #: src/rush.c:1330 #, c-format msgid "cannot change to dir %s: %s" msgstr "impossible de changer le répertoire vers %s : %s" #: src/rush.c:1334 #, c-format msgid "Executing %s, %s" msgstr "Exécution de %s, %s" #: src/rush.c:1349 #, c-format msgid "%s:%d: %s: cannot execute %s: %s" msgstr "%s:%d: %s : impossible d'exécuter %s : %s" #: src/rush.c:1392 src/rush.c:1394 msgid "invalid command line" msgstr "commande non valide " #: src/rush.c:1405 msgid "invalid user name" msgstr "nom d'utilisateur non valide" #: src/rush.c:1416 #, c-format msgid "user %s, uid %lu" msgstr "utilisateur %s, uid %lu" #: src/rush.c:1428 msgid "Command line:" msgstr "Commande :" #: src/rush.c:1431 msgid "Environment:" msgstr "Environnement :" #: src/rush.c:1462 #, c-format msgid "Serving interactive shell request for %s by rule %s" msgstr "" "Service de la requête à l’interpréteur de commande pour %s suivant la règle " "%s" #: src/rush.c:1466 #, c-format msgid "Serving request \"%s\" for %s by rule %s" msgstr "Service de la requête « %s » pour %s suivant la règle %s" #: src/rush.c:1472 #, c-format msgid "no matching rule for \"%s\", user %s" msgstr "aucune règle correspondante pour \"%s\", utilisateur %s" #: src/rushlast.c:31 src/rushwho.c:30 #, c-format msgid "not enough memory" msgstr "mémoire insuffisante" #: src/rushlast.c:78 src/rushwho.c:67 #, c-format msgid "invalid format: %s" msgstr "format non valide : %s" #: src/rushlast.c:88 src/rushwho.c:77 #, c-format msgid "cannot open database file %s" msgstr "impossible d'ouvrir le fichier de base de données %s" #: src/rushwho.c:61 #, c-format msgid "extra arguments" msgstr "arguments supplémentaires" #: src/socket.c:61 #, c-format msgid "%s: TCPMUX did not respond" msgstr "%s: TCPMUX ne répond pas" #: src/socket.c:65 #, c-format msgid "%s: TCPMUX returned %s" msgstr "%s: TCPMUX a retourné %s" #: src/transform.c:155 msgid "" "Transform expression must start with 's' followed by a punctuation character" msgstr "" "L'expression de transformation doit débutée par un \"s\" suivi d'un " "caractère de ponctuation" #: src/transform.c:166 #, c-format msgid "Missing 2nd delimiter in position %d of expression %s" msgstr "Deuxième délimiteur manquant à la position %d de l'expression %s" #: src/transform.c:176 #, c-format msgid "Missing trailing delimiter in position %d of expression %s" msgstr "Délimiteur manquant à la position %d de l'expression %s" #: src/transform.c:203 #, c-format msgid "Unknown flag in transform expression: %c" msgstr "Drapeau inconnu dans l'expression de transformation : %c" #: src/transform.c:220 #, c-format msgid "Invalid transform expression: %s" msgstr "Expression de transformation invalide : %s" #: src/transform.c:248 msgid "Invalid transform replacement: back reference out of range" msgstr "" "Remplacement de transformée non valide : référence arrière hors intervalle" #: rushopt.opt:27 rlopt.opt:56 msgid "NUMBER" msgstr "NOMBRE" #: rushopt.opt:27 msgid "Set debugging level." msgstr "Ajuster le niveau de débogage." #: rushopt.opt:35 msgid "Run in test mode." msgstr "Lancer en mode test." #: rushopt.opt:41 msgid "Scanner test." msgstr "Test du scanner." #: rushopt.opt:47 msgid "Print grammar and lexical analyzer traces" msgstr "Traces des analyses lexicale et grammaticale" #: rushopt.opt:53 msgid "NAME" msgstr "NOM" #: rushopt.opt:53 msgid "Supply user name in test mode." msgstr "Fournir le nom d'utilisateur en mode test." #: rushopt.opt:65 msgid "COMMAND" msgstr "COMMANDE" #: rushopt.opt:65 msgid "Execute COMMAND." msgstr "Exécuter COMMANDE." #: rushopt.opt:71 msgid "Force interactive shell." msgstr "Forcer l’interpréteur de commande." #: rushopt.opt:78 msgid "KEYWORDS" msgstr "KEYWORDS" #: rushopt.opt:78 msgid "Dump final request in test mode." msgstr "Afficher la requête finale en mode test" #: rushopt.opt:85 msgid "CHECK" msgstr "CHECK" #: rushopt.opt:85 msgid "Add or remove configuration security check." msgstr "Ajouter ou supprimer un configuration de vérification de sécurité." #: rushopt.opt:93 msgid "Show default configuration." msgstr "Montrer la configuration par défaut." #: rushopt.opt:102 rwopt.opt:40 rlopt.opt:82 msgid "Other options" msgstr "Autres options" #: rushopt.opt:102 rwopt.opt:40 rlopt.opt:82 msgid "Give this help list" msgstr "Afficher cette aide" #: rushopt.opt:102 rwopt.opt:40 rlopt.opt:82 msgid "Give a short usage message" msgstr "Donner une courte indication sur l'usage" #: rushopt.opt:102 rwopt.opt:40 rlopt.opt:82 msgid "Print program version" msgstr "Afficher la version du programme" #: rushopt.opt:23 msgid "rush - restricted user shell." msgstr "rush - shell utilisateur restreint." #: rushopt.opt:25 msgid "[FILE]" msgstr "[FICHIER]" #: rushopt.opt:125 rushopt.opt:359 rwopt.opt:123 rwopt.opt:357 rlopt.opt:126 #: rlopt.opt:360 msgid "Usage:" msgstr "Usage :" #: rushopt.opt:125 rwopt.opt:123 rlopt.opt:126 msgid "OPTION" msgstr "OPTION" #: rushopt.opt:243 rwopt.opt:241 rlopt.opt:244 msgid "" "Mandatory or optional arguments to long options are also mandatory or " "optional for any corresponding short options." msgstr "" "Les arguments optionnels ou obligatoires pour les options longues le sont " "également pour les options courtes." #: rushopt.opt:247 rwopt.opt:245 rlopt.opt:248 #, c-format msgid "Report bugs to %s.\n" msgstr "Signalez tout bogue à %s.\n" #: rushopt.opt:700 rwopt.opt:698 rlopt.opt:701 msgid "(C)" msgstr "(C)" #: rushopt.opt:718 rwopt.opt:716 rlopt.opt:719 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 et plus <http://gnu.org/licenses/gpl." "html>\n" "Ceci est un logiciel libre: vous êtres libre de le modifier et de le\n" "redistribuer. Il n'y'a AUCUNE GARANTIE, dans la limite permise par la loi.\n" "\n" #: rushopt.opt:60 msgid "the --user option is allowed for the superuser only" msgstr "l'option --user n'est autorisée que pour le super-utilisateur" #: rushopt.opt:100 #, c-format msgid "No default configuration" msgstr "Aucun configuration par défaut" #: rwopt.opt:24 rlopt.opt:28 msgid "STRING" msgstr "FORMAT" #: rwopt.opt:24 rlopt.opt:28 msgid "Use STRING instead of the default format." msgstr "Utiliser FORMAT au lieu du format par défaut." #: rwopt.opt:30 rlopt.opt:35 msgid "DIR" msgstr "REP" #: rwopt.opt:30 rlopt.opt:35 msgid "Look for database files in DIR." msgstr "Recherche des fichiers dans REP." #: rwopt.opt:36 rlopt.opt:49 msgid "Do not display header line." msgstr "Ne pas afficher l'en-tête." #: rwopt.opt:21 msgid "rushwho - show listing of online Rush users." msgstr "rushtwo - lister les utilisateurs de Rush en ligne." #: rlopt.opt:42 msgid "Show entries in chronological order." msgstr "Montrer les entrées dans l'ordre chronologique." #: rlopt.opt:56 msgid "Show at most NUM records." msgstr "Montrer au plus N enregistrements." #: rlopt.opt:24 msgid "rushlast - show listing of last Rush logins." msgstr "rushlast - lister les derniers logs Rush." #: rlopt.opt:26 msgid "[user [user...]]" msgstr "[utilisateur [utilisateur...]]" #: rlopt.opt:63 #, c-format msgid "invalid number (%s)" msgstr "nombre non valide (%s)" #: lib/readfmt.c:40 #, c-format msgid "cannot stat format file %s" msgstr "impossible d'obtenir le status du fichier de format %s" #: lib/readfmt.c:42 #, c-format msgid "%s is not a regular file" msgstr "%s n'est pas un fichier" #: lib/readfmt.c:46 #, c-format msgid "cannot open format file %s" msgstr "impossible d'ouvrir le fichier %s" #: lib/rushdb.c:79 #, c-format msgid "cannot create directory %s: %s" msgstr "impossible de créer le répertoire %s : %s" #: lib/rushdb.c:84 #, c-format msgid "cannot stat directory %s: %s" msgstr "impossible d'obtenir le status du répertoire %s : %s" #: lib/rushdb.c:89 #, c-format msgid "%s is not a directory" msgstr "%s n'est pas un répertoire" #: lib/rushdb.c:100 lib/rushdb.c:114 #, c-format msgid "cannot open file %s: %s" msgstr "impossible d'ouvrir le fichier %s : %s" #: lib/rushdb.c:586 #, c-format msgid "missing closing quote in string started near `%s'" msgstr "guillemets fermants manquants près de \"%s\"" #: lib/version.c:28 msgid "" "\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" msgstr "" "\n" "Licence GPLv3+: GNU GPL version 3 et plus <http://gnu.org/licenses/gpl." "html>\n" "Ceci est un logiciel libre: vous êtres libre de le modifier et de le\n" "redistribuer. Il n'y'a AUCUNE GARANTIE, dans la limite permise par la loi.\n" "\n" #: gnu/error.c:194 msgid "Unknown system error" msgstr "Erreur système inconnue" #: gnu/getopt.c:278 #, c-format msgid "%s: option '%s%s' is ambiguous\n" msgstr "%s: l'option « %s%s » est ambiguë\n" #: gnu/getopt.c:284 #, c-format msgid "%s: option '%s%s' is ambiguous; possibilities:" msgstr "%s : l'option « %s%s » est ambiguë ; possibilités :" #: gnu/getopt.c:319 #, c-format msgid "%s: unrecognized option '%s%s'\n" msgstr "%s: option inconnue « %s%s »\n" #: gnu/getopt.c:345 #, c-format msgid "%s: option '%s%s' doesn't allow an argument\n" msgstr "%s: l'option « %s%s » ne prend aucun argument\n" #: gnu/getopt.c:360 #, c-format msgid "%s: option '%s%s' requires an argument\n" msgstr "%s: l'option « %s%s » requiert un argument\n" #: gnu/getopt.c:621 #, c-format msgid "%s: invalid option -- '%c'\n" msgstr "%s: option non valide -- « %c »\n" #: gnu/getopt.c:636 gnu/getopt.c:682 #, c-format msgid "%s: option requires an argument -- '%c'\n" msgstr "%s: l'option requiert un argument -- « %c »\n" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/po/quot.sed��������������������������������������������������������������������������������0000644�0001750�0001750�00000000231�13456274525�014442� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������s/"\([^"]*\)"/“\1â€/g s/`\([^`']*\)'/‘\1’/g s/ '\([^`']*\)' / ‘\1’ /g s/ '\([^`']*\)'$/ ‘\1’/g s/^'\([^`']*\)' /‘\1’ /g s/“â€/""/g �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/po/sr.gmo����������������������������������������������������������������������������������0000644�0001750�0001750�00000050701�14655401314�014102� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Þ•����³������´��ï���L ��������É��� �����Ó�����é���������������4�����P��,���a�����Ž��.���®��'���Ý��(�����"���.�����Q��&���k�����’�����²�� ���Ñ�����ò����� ��w�����+���‰�����µ�����»�����Ã�����ß�� ���î�����ü����������������!�����@�� ���\�� ���}�����Š��5���œ�����Ò�����Ú�����ë�����ü����� ����� �����4�����M�����`�����i�����„�� ���˜��6���¥��.���Ü��-��� ��/���9��2���i��/���œ��2���Ì��%���ÿ�����%�� ���,��:���M�����ˆ��È���‘��^���Z�����¹��s���Ù��5���M��:���ƒ�����¾�����Ã�����Ê�����ã�����þ������������ ��� �� ���.��)���9�����c�����y�����Š����� �� ���´�����Õ�����î�������� �����3�����&���I�����p�����…����������³�����Ê�����ä��$���������%�� ���D��L���e��*���²�����Ý�����ó����� �����,��(���H�����q�����‹����� ��)���§�� ���Ñ��i���Û��t���E�����º�����Á�����Ò�����é���������������<�����W�����r�����Ž�����«�����Ã�����Þ�����÷����������,�����G�����P�����n�����…��1���›�����Í�����å��*���� �� ���+ ��/���L �����| �����Œ ��%���¦ ��%���Ì �����ò �����!�����!�����2!�����L!�����`!�����s!�����‚!�� ���•!�����¶!�����Ç!�����×!�����é!�� ���"��1��� "��&���?"��"���f"�����‰"�����›"�����¬"��%���¾"��$���ä"����� #��,���'#��,���T#��'���#��'���©#��3���Ñ#�����$�����$�����*$�����@$�����T$�����f$�����~$�����”$�����¥$�����Á$��ý��Ú$��^��Ø&��*���7(��/���b(��(���’(��'���»(��2���ã(�����)��E���,)��0���r)��F���£)��<���ê)��=���'*��=���e*��*���£*��A���Î*��/���+��M���@+��3���Ž+��2���Â+�����õ+��ç���ù+��V���á,�����8-�����G-��B���V-��&���™-�����À-�����Ð-��!���×-��%���ù-��4���.��0���T.��@���….�����Æ.�����Ø.��W���ö.�����N/�� ���]/�����~/�� ���˜/�����¹/��/���Ø/��;���0��!���D0�� ���f0��?���r0��5���²0�����è0��q���þ0��W���p1��Y���È1��W���"2��W���z2��J���Ò2��L���3��]���j3�����È3��:���×3��z���4�����4��]��£4��°���6��T���²6��Ù���7��Q���á7��]���38�����‘8�����˜8��.���¡8��B���Ð8��(���9�����<9�� ���O9�����\9�����v9��_���Œ9��.���ì9�����:��'���;:��)���c:��C���:��6���Ñ:��0���;�� ���9;�����D;��e���_;��F���Å;��>��� <��3���K<��/���<��-���¯<��<���Ý<��7���=��@���R=��T���“=��D���è=��w���->��7���¥>��'���Ý>��'���?��9���-?��9���g?��J���¡?��.���ì?��.���@�����J@��G���\@�����¤@��¿���¹@��â���yA�����\B��(���oB��4���˜B��F���ÍB��8���C��I���MC��2���—C��2���ÊC��B���ýC��O���@D��?���D��D���ÐD��>���E��R���TE��H���§E��S���ðE�����DF��@���cF��-���¤F��D���ÒF��N���G��:���fG��:���¡G��e���ÜG��=���BH��_���€H��!���àH��>���I��Q���AI��O���“I��#���ãI��4���J��%���<J��E���bJ��"���¨J��!���ËJ�����íJ��)��� K��F���7K��#���~K�����¢K��%���ÂK��%���èK�����L��i���#L��F���L��U���ÔL��"���*M��,���MM��(���zM��C���£M��L���çM��B���4N��b���wN��X���ÚN��C���3O��P���wO��X���ÈO��#���!P��#���EP��)���iP��*���“P��+���¾P��6���êP��#���!Q�����EQ��-���eQ��-���“Q�����5�����������_���£���¨���„������±������=���g���}������������� ���8�������]���m���Q���’�������”���S������Ÿ���!���K���C�������•���'���"�����������E���ƒ���0���›�������<������®���O������Š���r��������������6��� ������������������l������¡����������¦���\������¢���^�������1������k�����������²���u���{�������n���A�������‘��� ���v�������%���™�����������+�����������x���;���W�������&��� �������P�����������������†���w���o���ˆ���������������…���B���‰������|���©���s������������� �������—���$���ª�������U������i�������Z���Ž���ž���z������,���J���‹���������������`���¥���¬�������4���y���­���˜������������������d���(������ ����������7�������Y������N���*���X���.���“������[���H�������œ�����������R���T����������t���–���@����������>���q�������~���#���2���:������/���V���������������¤���D���9���F�������-���€������ ���M�������«�������3�������‡���)���L������a���š���G���I���‚���f���p���³���j���e���b�������Œ������°���?���§���c�������¯���h���� 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. �%s is not a directory�%s is not a regular file�%s: TCPMUX did not respond�%s: TCPMUX returned %s�%s: invalid option -- '%c' �%s: not a number�%s: option '%s%s' doesn't allow an argument �%s: option '%s%s' is ambiguous �%s: option '%s%s' is ambiguous; possibilities:�%s: option '%s%s' requires an argument �%s: option requires an argument -- '%c' �%s: subprocess exited with code %d�%s: subprocess terminated�%s: subprocess terminated on signal %d�%s: unrecognized option '%s%s' �%s:%d: %s: can't stat '%s': %s�%s:%d: %s: cannot execute %s: %s�%s:%d: %s: cannot fork: %s�(C)�A system error occurred while attempting to execute command. Contact the systems administrator for further assistance. �Add or remove configuration security check.�CHECK�COMMAND�Cannot open database %s: %s�Chroot dir: %s�Command line:�DIR�Debug: �Deleting arguments %d-%d�Deleting argv[0] is prohibited�Do not display header line.�Dump final request in test mode.�Environment:�Error message: %s�Error sending diagnostic message to descriptor %d: %s�Error: �Execute COMMAND.�Executing %s, %s�Final arguments:�Final environment:�Finished parsing %s�Force interactive shell.�Forked process %lu�GID: %lu�Give a short usage message�Give this help list�Home dir: %s�INTERNAL ERROR at %s:%d: can't modify read-only target�INTERNAL ERROR at %s:%d: invalid envar type %d�INTERNAL ERROR at %s:%d: invalid node type %d�INTERNAL ERROR at %s:%d: invalid target type %d�INTERNAL ERROR at %s:%d: unrecognized node type %d�INTERNAL ERROR at %s:%d: unrecognized opcode %d�INTERNAL ERROR at %s:%d: unrecognized operation %d�Ignoring non-existing include file %s�Info: �Invalid transform expression: %s�Invalid transform replacement: back reference out of range�KEYWORDS�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. �Local configuration error occurred. Contact the systems administrator for further assistance. �Look for database files in DIR.�Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options.�Missing 2nd delimiter in position %d of expression %s�Missing trailing delimiter in position %d of expression %s�NAME�NUMBER�No default configuration�No logins allowed for `%s'�Not enough memory�Notice: �OPTION�Other options�Parsing %s�Print grammar and lexical analyzer traces�Print program version�Program name: %s�Removing option %s %s�Report bugs to %s. �Resuming parsing %s from line %d�Rule %s at %s:%d matched�Run in test mode.�STRING�Scanner test.�Serving interactive shell request for %s by rule %s�Serving request "%s" for %s by rule %s�Set debugging level.�Setting limit %d to %lu�Setting limits for %s�Setting priority to %d�Show at most NUM records.�Show default configuration.�Show entries in chronological order.�Supply user name in test mode.�Too many logins (max %zu) for %s�Transform expression must start with 's' followed by a punctuation character�Transformation map: %s, %s, %s, %u, %u, %s�Transforming argv[%d]�Transforming command line�Transforming program name (%s)�Transforming variable %s=%s�Unknown flag in transform expression: %c�Unknown message reference�Unknown system error�Usage:�Use STRING instead of the default format.�Warning: �You are not permitted to execute this command. Contact the systems administrator for further assistance. �You do not have interactive login access to this machine. Contact the systems administrator for further assistance. �[FILE]�[user [user...]]�acct database is empty�cannot change to dir %s: %s�cannot chroot to %s: %s�cannot create directory %s: %s�cannot enforce gid %lu: %s�cannot enforce uid %lu: %s�cannot open database %s: %s�cannot open database file %s�cannot open file %s: %s�cannot open format file %s�cannot set limits for %s�cannot stat directory %s: %s�cannot stat file %s: %s�cannot stat format file %s�chdir %s�counted %zu/%zu logins for %s�counting logins for %s�debug level set to %d�environment transformation is not yet implemented�error setting limit: %s�error setting priority: %s�error writing stop to database file %s: %s�error writing to database %s: %s�expected ~ as the second argument, but found %s�extra arguments�failed to parse value: %s�failed to write message to stderr: %s�failed to write message to stdout: %s�invalid command line�invalid file descriptor�invalid format: %s�invalid include file name�invalid number (%s)�invalid number: %s�invalid opcode�invalid regexp: %s�invalid statement: missing value�invalid time: %s�invalid uid %lu�invalid user name�key field is not a number�missing ]�missing closing quote in string started near `%s'�no argument at index %d in command: %s�no matching rule for "%s", user %s�no such group: %s�no such user: %s�not enough memory�parsing legacy built-in configuration�parsing legacy configuration file %s�rush - restricted user shell.�rushlast - show listing of last Rush logins.�rushwho - show listing of online Rush users.�seteuid(0) succeeded when it should not�statement cannot be used outside a rule�the --user option is allowed for the superuser only�too few arguments�too many arguments�transformed value: %s�unknown keyword: %s�unknown limit: %s�unknown regexp flag: %s�unknown statement: %s�user %s, uid %lu�value field is not a number�wordsplit(%s) failed: %s�Project-Id-Version: rush-2.2 Report-Msgid-Bugs-To: bug-rush@gnu.org PO-Revision-Date: 2022-02-15 21:12+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 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-Bugs: Report translation errors to the Language-Team address. � Лиценца ОЈЛв3+: ГÐУ ОЈЛ издање 3 или каÑније <http://gnu.org/licenses/gpl.html> Ово је Ñлободан Ñофтвер: Ñлободни Ñте да га мењате и раÑподељујете. Ðе поÑтоји ÐИКÐКВРГÐРÐÐЦИЈÐ, у оквирима дозвољеним законом. �„%s“ није директоријум�„%s“ није обична датотека�%s: ТЦПМУКС не одговара�%s: ТЦПМУКС је вратио %s�%s: неиÑправна опција -- „%c“ �%s: није број�%s: опција „%s%s“ не дозвољава аргумент �%s: опција „%s%s“ је нејаÑна �%s: опција „%s%s“ је нејаÑна; могућноÑти:�%s: опција „%s%s“ захтева аргумент �%s: опција захтева аргумент -- „%c“ �%s: Ð¿Ð¾Ñ‚Ð¿Ñ€Ð¾Ñ†ÐµÑ Ñ˜Ðµ изашао Ñа шифром %d�%s: Ð¿Ð¾Ñ‚Ð¿Ñ€Ð¾Ñ†ÐµÑ Ñ˜Ðµ окончан�%s: Ð¿Ð¾Ñ‚Ð¿Ñ€Ð¾Ñ†ÐµÑ Ñ˜Ðµ окончан на Ñигналу %d�%s: непозната опција „%s%s“ �%s:%d: %s: не могу да добавим податке за „%s“: %s�%s:%d: %s: не могу да извршим %s: %s�%s:%d: %s: не могу да издвојим: %s�(C)�Дошло је до ÑиÑтемÑке грешке док Ñам покушавао да извршим наредбу. ПоÑаветујте Ñе Ñа админиÑтратором ÑиÑтема за даљу иÑпомоћ. �Додаје или уклања безбедну проверу подешавања.�ПРОВЕРÐ�ÐÐРЕДБÐ�Ðе могу да отворим базу података %s: %s�Корени дир промене: %s�Ðаредба:�ДИР�Уклањање грешака: �Бришем аргументе %d-%d�БриÑање „argv[0]“ је забрањено�Ðе приказује ред заглавља.�Даје крајњи захтец у режиму текÑта.�Окружење:�Порука грешке: %s�Грешка Ñлања диајгноÑтичке грешке опиÑнику %d: %s�Грешка: �Извршава ÐÐРЕДБУ.�Извршавам %s, %s�Крајњи аргументи:�Крајње окружење:�Завршио Ñам анализирање %s�Приморава међудејÑтвену шкољку.�Издвојен Ð¿Ñ€Ð¾Ñ†ÐµÑ %lu�ГИБ: %lu�Приказује кратку поруку коришћења�Приказује овај ÑпиÑак помоћи�Лични дир: %s�УÐУТРÐШЊРГРЕШКРна %s:%d: не могу да изменим мету Ñамо за читање�УÐУТРÐШЊРГРЕШКРна %s:%d: непозната врÑта енвар %d�УÐУТРÐШЊРГРЕШКРна %s:%d: неиÑправна врÑта чвора %d�УÐУТРÐШЊРГРЕШКРна %s:%d: неиÑправна врÑта мете %d�УÐУТРÐШЊРГРЕШКРна %s:%d: непозната врÑта чвора %d�УÐУТРÐШЊРГРЕШКРна %s:%d: непознат опкод %d�УÐУТРÐШЊРГРЕШКРна %s:%d: непозната радња %d�Занемарујем не-поÑтојећу датотеку укључивања „%s“�Подаци: �ÐеиÑправан израз преображаја: %s�ÐеиÑправна замена преображаја: повратна референца је изван опÑега�КЉУЧÐЕ_РЕЧИ�Лиценца ОЈЛв3+: ГÐУ ОЈЛ издање 3 или каÑније <http://gnu.org/licenses/gpl.html> Ово је Ñлободан Ñофтвер: Ñлободни Ñте да га мењате и раÑподељујете. Ðе поÑтоји ÐИКÐКВРГÐРÐÐЦИЈÐ, у оквирима дозвољеним законом. �Дошло је до меÑне грешке подешавања. ПоÑаветујте Ñе Ñа админиÑтратором ÑиÑтема за даљу иÑпомоћ. �Тражи датотеке базе података у ДИРЕКТОРИЈУМУ.�Обавезни или опционални аргументи за дуге опције Ñу такође обавезни или опционални за Ñве одговарајуће кратке опције.�ÐедоÑтаје 2. граничник на положају %d израза %s�ÐедоÑтаје пратећи граничник на положају %d израза %s�ИМЕ�БРОЈ�Ðема оÑновног подешавања�ÐиÑу допуштена пријављивања за „%s“�Ðема довољно меморије�Ðапомена: �ОПЦИЈÐ�ОÑтале опције�Обрађујем %s�Трагови граматике штампања и лекÑичког анализатора�ИÑпиÑује издање програма�Ðазив програма: %s�Уклањам опцију „%s %s“�Грешке пријавите на %s. �ÐаÑтављам анализирање „%s“ од реда %d�Правило %s на %s:%d је подударено�Ради у режиму иÑпробавања.�ÐИСКÐ�Проба Ñкенера.�ПоÑлужујем захтев међудејÑтвене шкољке за %s правилом %s�ПоÑлужујем захтев „%s“ за %s правилом %s�ПоÑтавља ниво иÑправљања грешака.�Подешавам ограничење %d на %lu�Подешавам ограничења за %s�Подешавам приоритет на %d�Приказује барем БРОЈЕВÐЕ запиÑе.�Приказује оÑновно подешавање.�Приказује уноÑе хронолошким редом.�ДоÑтавља кориÑничко име у режиму иÑпробавања.�Превише пријављивања (највише %zu) за %s�Израз преображавања мора почети Ñа „s“ за којим Ñледи знак тачке�Мапа преображаја: %s, %s, %s, %u, %u, %s�Преображавам „argv[%d]“�Преображавам наредбу�Преображавам назив програма (%s)�Преображавам променљиву „%s=%s“�Ðепозната опција у изразу преображаја: %c�Ðепознат указивач поруке�Ðепозната грешка ÑиÑтема�Употреба:�КориÑти ÐИСКУ умеÑто оÑновног формата.�Упозорење: �Вама није допуштено да извршите ову наредбу. ПоÑаветујте Ñе Ñа админиÑтратором ÑиÑтема за даљу иÑпомоћ. �Ви немате приÑтуп међудејÑтвеног пријављивања на овај рачунар. ПоÑаветујте Ñе Ñа админиÑтратором ÑиÑтема за даљу иÑпомоћ. �[ДÐТОТЕКÐ]�[кориÑник [кориÑник...]]�аццт база података је празна�не могу да променим у директоријум %s: %s�не могу да променим корен у %s: %s�не могу да направим директоријум „%s“: %s�не могу да приÑилим гиб %lu: %s�не могу да приÑилим уиб %lu: %s�не могу да отворим базу података %s: %s�не могу да отворим датотеку базе података %s�не могу да отворим датотеку „%s“: %s�не могу да отворим датотеку формата %s�не могу да подеÑим ограничења за %s�не могу да добавим податке директоријума %s: %s�не могу да добавим податке датотеке %s: %s�не могу да добавим податке датотеке формата %s�промени дир „%s“�избројао Ñам %zu/%zu пријављивања за %s�бројим пријављивања за %s�ниво уклањања грешака је подешен на %d�преображавање окружења још није примењиво�грешка подешавања ограничења: %s�грешка подешавања приоритета: %s�грешка пиÑања зауÑтављања у датотеку базе података %s: %s�грешка пиÑања у базу података %s: %s�очекивана је ~ као други аргумент, али је пронађено %s�додатни аргументи�ниÑам уÑпео да обрадим вредноÑÑ‚: %s�ниÑам уÑпео да упишем поруку у Ñтнд_грешку: %s�ниÑам уÑпео да упишем поруку у Ñтнд_излаз: %s�неиÑправна наредба�неиÑправан опиÑник датотеке�неиÑправан формат: %s�неиÑправан назив датотеке укључивања�неиÑправан број (%s)�неиÑправан број: %s�неиÑправан опкод�неиÑправан регизраз: %s�неиÑправна тврдња: недоÑтаје вредноÑÑ‚�неиÑправно време: %s�неиÑправан уиб %lu�неиÑправан кориÑник�поље кључа није број�недоÑтаје ]�недоÑтаје затворена заграда у ниÑци започетој близу „%s“�нема аргумента у индекÑу %d у наредби: %s�нема одговарајућег правила за „%s“, кориÑник %s�нема такве групе: %s�нема таквог кориÑника: %s�нема довољно меморије�обрађујем Ñтаро уграђено подешавање�обрађујем Ñтару датотеку подешавања „%s“�rush — ограничена кориÑничка конзола.�rushlast — приказује ÑпиÑак поÑледњих пријављивања Раша.�rushwho — приказује ÑпиÑак кориÑника Раша на мрежи.�„seteuid(0)“ је уÑпело када није требало�тврдња не може бити коришћена изван правила�опција „--user“ је дозвољена Ñамо Ñупер кориÑнику�премало аргумената�превише аргумената�реображена вредноÑÑ‚: %s�непозната кључна реч: %s�непознато ограничење: %s�непозната опција регизраза: %s�непозната тврдња: %s�кориÑник %s, уиб %lu�поље вредноÑти није број�„wordsplit(%s)“ није уÑпело: %s����������������������������������������������������������������rush-2.4/po/nl.po�����������������������������������������������������������������������������������0000644�0001750�0001750�00000060372�14655401313�013727� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Dutch translation of rush. # Copyright (C) 2016 Free Software Foundation, Inc. # This file is distributed under the same license as the rush package. # Koen Torfs <koen@drunkfelines.com>, 2010, 2016. # #: rwopt.opt:23 msgid "" msgstr "" "Project-Id-Version: GNU rush 1.8\n" "Report-Msgid-Bugs-To: bug-rush@gnu.org\n" "POT-Creation-Date: 2024-08-09 14:51+0300\n" "PO-Revision-Date: 2016-10-03 03:19+0100\n" "Last-Translator: Koen Torfs <koen@drunkfelines.com>\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: Poedit 1.6.10\n" #: src/config.c:163 #, c-format msgid "Finished parsing %s" msgstr "Ontleding van %s compleet" #: src/config.c:169 #, c-format msgid "Resuming parsing %s from line %d" msgstr "Ontleden van %s wordt hervat vanaf lijn %d" #: src/config.c:262 #, fuzzy, c-format msgid "invalid number: %s" msgstr "ongeldig nummer (%s)" #: src/config.c:275 #, fuzzy msgid "invalid opcode" msgstr "%s:%d: ongeldige opcode" #: src/config.c:297 #, fuzzy, c-format msgid "invalid regexp: %s" msgstr "%s:%d: ongeldige regexp: %s" #: src/config.c:336 #, fuzzy, c-format msgid "unknown regexp flag: %s" msgstr "%s:%d: onbekende regexp-vlag: %s" #: src/config.c:353 #, fuzzy msgid "too few arguments" msgstr "%s:%d: te weinig argumenten" #: src/config.c:357 src/rush.c:1381 #, fuzzy msgid "too many arguments" msgstr "%s:%d: te veel argumenten" #: src/config.c:428 #, fuzzy, c-format msgid "no such user: %s" msgstr "%s:%d: gebruiker bestaat niet: %s" #: src/config.c:453 src/config.c:1106 #, fuzzy, c-format msgid "no such group: %s" msgstr "%s:%d: groep bestaat niet: %s" #: src/config.c:543 #, fuzzy, c-format msgid "unknown limit: %s" msgstr "%s:%d: onbekende limiet: %s" #: src/config.c:560 #, fuzzy, c-format msgid "expected ~ as the second argument, but found %s" msgstr "%s:%d: ~ als tweede argument verwacht, maar %s gevonden" #: src/config.c:718 #, c-format msgid "debug level set to %d" msgstr "debugniveau op %d ingesteld" #: src/config.c:730 #, fuzzy, c-format msgid "invalid time: %s" msgstr "%s:%d: ongeldige tijd: %s" #: src/config.c:786 #, fuzzy msgid "invalid file descriptor" msgstr "%s:%d: ongeldige bestandsdescriptor" #: src/config.c:800 #, fuzzy msgid "Unknown message reference" msgstr "Onbekende boodschapsreferentie: %s\n" #: src/config.c:893 #, fuzzy msgid "invalid include file name" msgstr "%s:%d: ongeldige naam voor insluitingsbestand" #: src/config.c:900 #, c-format msgid "Ignoring non-existing include file %s" msgstr "Onbestaand insluitingsbestand %s wordt genegeerd" #: src/config.c:906 #, c-format msgid "cannot stat file %s: %s" msgstr "Kan status van bestand %s niet opvragen: %s" #: src/config.c:934 rushopt.opt:90 #, c-format msgid "unknown keyword: %s" msgstr "onbekend sleutelwoord: %s" #: src/config.c:982 #, fuzzy msgid "key field is not a number" msgstr "%s:%d: sleutelveld is geen nummer" #: src/config.c:988 #, fuzzy msgid "value field is not a number" msgstr "%s:%d: waardeveld is geen nummer" #: src/config.c:1033 src/config.c:1038 src/rush.c:262 #, fuzzy, c-format msgid "%s: not a number" msgstr "%s:%d: %s: geen nummer" #: src/config.c:1211 src/config.c:1340 #, c-format msgid "Parsing %s" msgstr "%s wordt ontleed" #: src/config.c:1245 #, fuzzy, c-format msgid "unknown statement: %s" msgstr "%s:%d: onbekende statement: %s" #: src/config.c:1280 #, fuzzy msgid "missing ]" msgstr "%s:%d: ontbrekende ]" #: src/config.c:1289 #, fuzzy msgid "invalid statement: missing value" msgstr "%s:%d: ongeldige statement: ontbrekende waarde" #: src/config.c:1310 #, fuzzy, c-format msgid "failed to parse value: %s" msgstr "%s:%d: waarde ontleden gefaald: %s" #: src/config.c:1328 #, fuzzy msgid "statement cannot be used outside a rule" msgstr "%s:%d: statement kan niet buiten een regel gebruikt worden" #: src/config.c:1366 #, fuzzy msgid "parsing legacy built-in configuration" msgstr "Geen standaardconfiguratie" #: src/config.c:1368 #, fuzzy, c-format msgid "parsing legacy configuration file %s" msgstr "fout bij ontleden configuratiebestand" #: src/limits.c:53 #, c-format msgid "Setting limit %d to %lu" msgstr "Limiet %d wordt op %lu ingesteld" #: src/limits.c:58 #, c-format msgid "error setting limit: %s" msgstr "fout bij instellen limiet: %s" #: src/limits.c:68 #, c-format msgid "Setting priority to %d" msgstr "Prioriteit wordt op %d ingesteld" #: src/limits.c:70 #, c-format msgid "error setting priority: %s" msgstr "fout bij instellen van prioriteit: %s" #: src/limits.c:86 src/limits.c:87 #, c-format msgid "No logins allowed for `%s'" msgstr "Geen logins toegestaan voor ‘%s’" #: src/limits.c:91 #, c-format msgid "counting logins for %s" msgstr "logins voor %s worden opgeteld" #: src/limits.c:97 msgid "acct database is empty" msgstr "accountingdatabase is leeg" #: src/limits.c:101 #, c-format msgid "Cannot open database %s: %s" msgstr "Kan database %s niet openen: %s" #: src/limits.c:119 #, c-format msgid "counted %zu/%zu logins for %s" msgstr "%zu/%zu logins geteld voor %s" #: src/limits.c:126 src/limits.c:128 #, c-format msgid "Too many logins (max %zu) for %s" msgstr "Te veel logins (maximum %zu) voor %s" #: src/limits.c:143 #, c-format msgid "Setting limits for %s" msgstr "Limieten voor %s worden ingesteld" #: src/rush.c:43 msgid "" "You are not permitted to execute this command.\n" "Contact the systems administrator for further assistance.\n" msgstr "" "Je hebt geen toestemming om deze opdracht uit te voeren.\n" "Neem contact op met de systeembeheerder voor hulp.\n" #: src/rush.c:47 msgid "" "You do not have interactive login access to this machine.\n" "Contact the systems administrator for further assistance.\n" msgstr "" "Je hebt geen interactieve logintoegang tot deze machine.\n" "Neem contact op met de systeembeheerder voor hulp.\n" #: src/rush.c:51 msgid "" "Local configuration error occurred.\n" "Contact the systems administrator for further assistance.\n" msgstr "" "Lokale configuratiefout opgetreden.\n" "Neem contact op met de systeembeheerder voor hulp.\n" #: src/rush.c:55 msgid "" "A system error occurred while attempting to execute command.\n" "Contact the systems administrator for further assistance.\n" msgstr "" "Er trad een systeemfout op bij het uitvoeren van de opdracht.\n" "Neem contact op met de systeembeheerder voor hulp.\n" #: src/rush.c:156 #, c-format msgid "failed to write message to stderr: %s" msgstr "" #: src/rush.c:160 #, c-format msgid "failed to write message to stdout: %s" msgstr "" #: src/rush.c:172 #, c-format msgid "Debug: " msgstr "Debug: " #: src/rush.c:176 #, c-format msgid "Info: " msgstr "Info: " #: src/rush.c:180 #, c-format msgid "Notice: " msgstr "" #: src/rush.c:184 #, c-format msgid "Warning: " msgstr "Waarschuwing: " #: src/rush.c:191 #, c-format msgid "Error: " msgstr "Fout: " #: src/rush.c:248 msgid "Not enough memory" msgstr "Onvoldoende geheugen" #: src/rush.c:279 src/rush.c:324 #, c-format msgid "INTERNAL ERROR at %s:%d: unrecognized opcode %d" msgstr "" #: src/rush.c:408 #, fuzzy, c-format msgid "%s:%d: %s: can't stat '%s': %s" msgstr "%s:%d: kan status van %s niet opvragen: %s" #: src/rush.c:469 #, fuzzy, c-format msgid "INTERNAL ERROR at %s:%d: unrecognized operation %d" msgstr "%s: onbekende optie ‘--%s’\n" #: src/rush.c:509 #, c-format msgid "INTERNAL ERROR at %s:%d: unrecognized node type %d" msgstr "" #: src/rush.c:718 #, c-format msgid "INTERNAL ERROR at %s:%d: invalid envar type %d" msgstr "" #: src/rush.c:723 msgid "Final environment:" msgstr "Uiteindelijke omgeving:" #: src/rush.c:737 #, c-format msgid "wordsplit(%s) failed: %s" msgstr "wordsplit(%s) gefaald: %s" #: src/rush.c:763 #, c-format msgid "no argument at index %d in command: %s" msgstr "geen argument bij index %d in opdracht: %s" #: src/rush.c:906 #, c-format msgid "Removing option %s %s" msgstr "" #: src/rush.c:918 msgid "Transforming command line" msgstr "Opdrachtregel wordt getransformeerd" #: src/rush.c:925 #, fuzzy, c-format msgid "Transforming program name (%s)" msgstr "Programmanaam wordt gewijzigd (%s)" #: src/rush.c:943 #, fuzzy, c-format msgid "Transforming argv[%d]" msgstr "argv[%d] wordt gewijzigd" #: src/rush.c:950 #, fuzzy, c-format msgid "Transforming variable %s=%s" msgstr "Opdrachtregel wordt getransformeerd" #: src/rush.c:957 src/rush.c:1043 msgid "environment transformation is not yet implemented" msgstr "" #: src/rush.c:961 #, c-format msgid "INTERNAL ERROR at %s:%d: can't modify read-only target" msgstr "" #: src/rush.c:980 #, c-format msgid "Transformation map: %s, %s, %s, %u, %u, %s" msgstr "Transformatietoewijzing: %s, %s, %s, %u, %u, %s" #: src/rush.c:994 #, c-format msgid "INTERNAL ERROR at %s:%d: invalid node type %d" msgstr "" #: src/rush.c:1001 #, c-format msgid "transformed value: %s" msgstr "" #: src/rush.c:1022 #, c-format msgid "Deleting arguments %d-%d" msgstr "Argumenten %d-%d worden verwijderd" #: src/rush.c:1025 msgid "Deleting argv[0] is prohibited" msgstr "Het verwijderen van argv[0] is niet toegestaan" #: src/rush.c:1047 #, c-format msgid "INTERNAL ERROR at %s:%d: invalid target type %d" msgstr "" #: src/rush.c:1065 #, c-format msgid "Program name: %s" msgstr "Programmanaam: %s" #: src/rush.c:1066 msgid "Final arguments:" msgstr "Uiteindelijke argumenten:" #: src/rush.c:1084 #, c-format msgid "error writing to database %s: %s" msgstr "fout bij schrijven naar database %s: %s" #: src/rush.c:1093 #, c-format msgid "error writing stop to database file %s: %s" msgstr "fout bij het schrijven van stop naar databasebestand %s: %s" #: src/rush.c:1114 #, c-format msgid "%s:%d: %s: cannot fork: %s" msgstr "%s:%d: %s: kan geen nieuw proces beginnen: %s" #: src/rush.c:1124 #, c-format msgid "Forked process %lu" msgstr "Nieuw proces %lu" #: src/rush.c:1128 #, c-format msgid "%s: subprocess exited with code %d" msgstr "%s: subproces beëindigd met code %d" #: src/rush.c:1131 #, c-format msgid "%s: subprocess terminated on signal %d" msgstr "%s: subproces afgesloten op signaal %d" #: src/rush.c:1134 #, c-format msgid "%s: subprocess terminated" msgstr "%s: subproces afgesloten" #: src/rush.c:1223 #, c-format msgid "cannot enforce gid %lu: %s" msgstr "kan gid %lu niet handhaven: %s" #: src/rush.c:1228 #, c-format msgid "cannot enforce uid %lu: %s" msgstr "kan uid %lu niet handhaven: %s" #: src/rush.c:1233 msgid "seteuid(0) succeeded when it should not" msgstr "seteuid(0) geslaagd wanneer het had moeten falen" #: src/rush.c:1239 #, c-format msgid "Rule %s at %s:%d matched" msgstr "Regel %s bij %s:%d overeengekomen" #: src/rush.c:1253 #, c-format msgid "Error message: %s" msgstr "Foutboodschap: %s" #: src/rush.c:1256 #, c-format msgid "Error sending diagnostic message to descriptor %d: %s" msgstr "" "Fout bij het sturen van een diagnostische boodschap aan descriptor %d: %s" #: src/rush.c:1262 #, c-format msgid "cannot set limits for %s" msgstr "kan limieten voor %s niet instellen" #: src/rush.c:1269 #, c-format msgid "Chroot dir: %s" msgstr "Chroot-map: %s" #: src/rush.c:1276 #, c-format msgid "Home dir: %s" msgstr "Persoonlijke map: %s" #: src/rush.c:1281 #, c-format msgid "GID: %lu" msgstr "GID: %lu" #: src/rush.c:1306 #, c-format msgid "cannot open database %s: %s" msgstr "kan database %s niet openen: %s" #: src/rush.c:1315 #, c-format msgid "cannot chroot to %s: %s" msgstr "kan chroot niet uitvoeren naar %s:%s" #: src/rush.c:1322 src/rush.c:1414 #, c-format msgid "invalid uid %lu" msgstr "ongeldig uid %lu" #: src/rush.c:1327 #, c-format msgid "chdir %s" msgstr "" #: src/rush.c:1330 #, c-format msgid "cannot change to dir %s: %s" msgstr "kan niet navigeren naar map %s: %s" #: src/rush.c:1334 #, c-format msgid "Executing %s, %s" msgstr "%s wordt uitgevoerd, %s" #: src/rush.c:1349 #, c-format msgid "%s:%d: %s: cannot execute %s: %s" msgstr "%s:%d: %s: kan %s niet uitvoeren: %s" #: src/rush.c:1392 src/rush.c:1394 msgid "invalid command line" msgstr "ongeldige opdrachtregel" #: src/rush.c:1405 msgid "invalid user name" msgstr "ongeldige gebruikersnaam" #: src/rush.c:1416 #, c-format msgid "user %s, uid %lu" msgstr "gebruiker %s, uid %lu" #: src/rush.c:1428 msgid "Command line:" msgstr "Opdrachtregel:" #: src/rush.c:1431 msgid "Environment:" msgstr "Omgeving:" #: src/rush.c:1462 #, c-format msgid "Serving interactive shell request for %s by rule %s" msgstr "Aanvraag van interactieve shell voor %s wordt bediend volgens regel %s" #: src/rush.c:1466 #, c-format msgid "Serving request \"%s\" for %s by rule %s" msgstr "Aanvraag “%s†voor %s wordt bediend volgens regel %s" #: src/rush.c:1472 #, c-format msgid "no matching rule for \"%s\", user %s" msgstr "geen overeenkomende regel voor “%sâ€, gebruiker %s" #: src/rushlast.c:31 src/rushwho.c:30 #, c-format msgid "not enough memory" msgstr "onvoldoende geheugen" #: src/rushlast.c:78 src/rushwho.c:67 #, c-format msgid "invalid format: %s" msgstr "ongeldig formaat: %s" #: src/rushlast.c:88 src/rushwho.c:77 #, c-format msgid "cannot open database file %s" msgstr "kan databasebestand %s niet openen" #: src/rushwho.c:61 #, c-format msgid "extra arguments" msgstr "bijkomende argumenten" #: src/socket.c:61 #, c-format msgid "%s: TCPMUX did not respond" msgstr "%s: geen antwoord van TCPMUX verkregen" #: src/socket.c:65 #, c-format msgid "%s: TCPMUX returned %s" msgstr "%s: TCPMUX kwam terug met waarde %s" #: src/transform.c:155 msgid "" "Transform expression must start with 's' followed by a punctuation character" msgstr "" #: src/transform.c:166 #, c-format msgid "Missing 2nd delimiter in position %d of expression %s" msgstr "Ontbrekend tweede scheidingsteken op positie %d van uitdrukking %s" #: src/transform.c:176 #, c-format msgid "Missing trailing delimiter in position %d of expression %s" msgstr "Ontbrekend afsluitend scheidingsteken op positie %d van uitdrukking %s" #: src/transform.c:203 #, c-format msgid "Unknown flag in transform expression: %c" msgstr "Onbekende vlag in transformatie-uitdrukking: %c" #: src/transform.c:220 #, c-format msgid "Invalid transform expression: %s" msgstr "Ongeldige transformatie-uitdrukking: %s" #: src/transform.c:248 msgid "Invalid transform replacement: back reference out of range" msgstr "Ongeldige transformatievervanging: terugverwijzing buiten bereik" #: rushopt.opt:27 rlopt.opt:56 msgid "NUMBER" msgstr "NUMMER" #: rushopt.opt:27 msgid "Set debugging level." msgstr "Debuggingniveau instellen." #: rushopt.opt:35 msgid "Run in test mode." msgstr "In testmodus uitvoeren." #: rushopt.opt:41 msgid "Scanner test." msgstr "" #: rushopt.opt:47 msgid "Print grammar and lexical analyzer traces" msgstr "" #: rushopt.opt:53 msgid "NAME" msgstr "NAAM" #: rushopt.opt:53 msgid "Supply user name in test mode." msgstr "Gebruikersnaam in testmodus opgeven." #: rushopt.opt:65 msgid "COMMAND" msgstr "OPDRACHT" #: rushopt.opt:65 msgid "Execute COMMAND." msgstr "OPDRACHT uitvoeren." #: rushopt.opt:71 msgid "Force interactive shell." msgstr "Interactieve shell afdwingen." #: rushopt.opt:78 msgid "KEYWORDS" msgstr "SLEUTELWOORDEN" #: rushopt.opt:78 msgid "Dump final request in test mode." msgstr "Laatste aanvraag in testmodus dumpen." #: rushopt.opt:85 msgid "CHECK" msgstr "CHECK" #: rushopt.opt:85 msgid "Add or remove configuration security check." msgstr "Veiligheidscontrole van configuratie toevoegen of verwijderen." #: rushopt.opt:93 msgid "Show default configuration." msgstr "Standaardconfiguratie tonen." #: rushopt.opt:102 rwopt.opt:40 rlopt.opt:82 msgid "Other options" msgstr "Meer opties" #: rushopt.opt:102 rwopt.opt:40 rlopt.opt:82 msgid "Give this help list" msgstr "Deze helplijst tonen" #: rushopt.opt:102 rwopt.opt:40 rlopt.opt:82 msgid "Give a short usage message" msgstr "Een korte gebruikssamenvatting tonen" #: rushopt.opt:102 rwopt.opt:40 rlopt.opt:82 msgid "Print program version" msgstr "Programmaversie tonen" #: rushopt.opt:23 #, fuzzy msgid "rush - restricted user shell." msgstr "rush - een shell met ingeperkte mogelijkheden voor gebruikers." #: rushopt.opt:25 msgid "[FILE]" msgstr "[BESTAND]" #: rushopt.opt:125 rushopt.opt:359 rwopt.opt:123 rwopt.opt:357 rlopt.opt:126 #: rlopt.opt:360 msgid "Usage:" msgstr "Gebruik:" #: rushopt.opt:125 rwopt.opt:123 rlopt.opt:126 msgid "OPTION" msgstr "OPTIE" #: rushopt.opt:243 rwopt.opt:241 rlopt.opt:244 msgid "" "Mandatory or optional arguments to long options are also mandatory or " "optional for any corresponding short options." msgstr "" "Vereiste of optionele argumenten bij lange opties zijn eveneens vereist of " "optioneel bij enige corresponderende korte opties." #: rushopt.opt:247 rwopt.opt:245 rlopt.opt:248 #, c-format msgid "Report bugs to %s.\n" msgstr "Meld bugs aan %s.\n" #: rushopt.opt:700 rwopt.opt:698 rlopt.opt:701 msgid "(C)" msgstr "©" #: rushopt.opt:718 rwopt.opt:716 rlopt.opt:719 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 "" "Licentie GPLv3+: GNU GPL versie 3 of later <http://gnu.org/licenses/gpl." "html>\n" "Dit is vrije software: je mag het vrijelijk wijzigen en verder verspreiden.\n" "Er is GEEN GARANTIE, voor zover de wet dit toestaat.\n" "\n" #: rushopt.opt:60 msgid "the --user option is allowed for the superuser only" msgstr "de optie --user is enkel toegestaan voor root" #: rushopt.opt:100 #, c-format msgid "No default configuration" msgstr "Geen standaardconfiguratie" #: rwopt.opt:24 rlopt.opt:28 msgid "STRING" msgstr "STRING" #: rwopt.opt:24 rlopt.opt:28 msgid "Use STRING instead of the default format." msgstr "Gebruik STRING in plaats van het standaardformaat." #: rwopt.opt:30 rlopt.opt:35 msgid "DIR" msgstr "MAP" #: rwopt.opt:30 rlopt.opt:35 msgid "Look for database files in DIR." msgstr "Databasebestanden in MAP opzoeken." #: rwopt.opt:36 rlopt.opt:49 msgid "Do not display header line." msgstr "Koptekstlijn niet tonen." #: rwopt.opt:21 msgid "rushwho - show listing of online Rush users." msgstr "rushwho – een lijst van online Rush-gebruikers tonen." #: rlopt.opt:42 msgid "Show entries in chronological order." msgstr "Items in chronologische orde tonen." #: rlopt.opt:56 msgid "Show at most NUM records." msgstr "Hoogstens NUM records tonen." #: rlopt.opt:24 msgid "rushlast - show listing of last Rush logins." msgstr "rushlast – een lijst van de meest recente Rush-logins tonen." #: rlopt.opt:26 msgid "[user [user...]]" msgstr "[gebruiker [gebruiker…]]" #: rlopt.opt:63 #, c-format msgid "invalid number (%s)" msgstr "ongeldig nummer (%s)" #: lib/readfmt.c:40 #, c-format msgid "cannot stat format file %s" msgstr "kan status van formaatbestand %s niet opvragen" #: lib/readfmt.c:42 #, c-format msgid "%s is not a regular file" msgstr "%s is geen regulier bestand" #: lib/readfmt.c:46 #, c-format msgid "cannot open format file %s" msgstr "kan formaatbestand %s niet openen" #: lib/rushdb.c:79 #, c-format msgid "cannot create directory %s: %s" msgstr "kan map %s niet aanmaken: %s" #: lib/rushdb.c:84 #, c-format msgid "cannot stat directory %s: %s" msgstr "kan status van map %s niet opvragen: %s" #: lib/rushdb.c:89 #, c-format msgid "%s is not a directory" msgstr "%s is geen map" #: lib/rushdb.c:100 lib/rushdb.c:114 #, c-format msgid "cannot open file %s: %s" msgstr "Kan bestand %s niet openen: %s" #: lib/rushdb.c:586 #, c-format msgid "missing closing quote in string started near `%s'" msgstr "ontbrekend sluitend aanhalingsteken in string begonnen nabij ‘%s’" #: lib/version.c:28 msgid "" "\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" msgstr "" "\n" "Licentie GPLv3+: GNU GPL versie 3 of later <http://gnu.org/licenses/gpl." "html>\n" "Dit is vrije software: je mag het vrijelijk wijzigen en verder verspreiden.\n" "Er is GEEN GARANTIE, voor zover de wet dit toestaat.\n" "\n" #: gnu/error.c:194 msgid "Unknown system error" msgstr "Onbekende systeemfout" #: gnu/getopt.c:278 #, fuzzy, c-format msgid "%s: option '%s%s' is ambiguous\n" msgstr "%s: optie '%s' is dubbelzinnig\n" #: gnu/getopt.c:284 #, fuzzy, c-format msgid "%s: option '%s%s' is ambiguous; possibilities:" msgstr "%s: optie ‘%s’ is dubbelzinnig; mogelijkheden zijn:" #: gnu/getopt.c:319 #, fuzzy, c-format msgid "%s: unrecognized option '%s%s'\n" msgstr "%s: onbekende optie ‘%c%s’\n" #: gnu/getopt.c:345 #, fuzzy, c-format msgid "%s: option '%s%s' doesn't allow an argument\n" msgstr "%s: optie ‘%c%s’ staat geen argument toe\n" #: gnu/getopt.c:360 #, fuzzy, c-format msgid "%s: option '%s%s' requires an argument\n" msgstr "%s: optie ‘--%s’ vereist een argument\n" #: gnu/getopt.c:621 #, c-format msgid "%s: invalid option -- '%c'\n" msgstr "%s: ongeldige optie --‘%c’\n" #: gnu/getopt.c:636 gnu/getopt.c:682 #, c-format msgid "%s: option requires an argument -- '%c'\n" msgstr "%s: optie vereist een argument -- ‘%c’\n" #, c-format #~ msgid "Ignoring non-existing file %s" #~ msgstr "Onbestaand bestand %s wordt genegeerd" #, c-format #~ msgid "%s: file is not safe" #~ msgstr "%s: bestand is niet veilig" #, c-format #~ msgid "error reading file %s: %s" #~ msgstr "Fout bij het lezen van bestand %s: %s" #, c-format #~ msgid "read 0 bytes from file %s" #~ msgstr "0 bytes uit bestand %s gelezen" #~ msgid "not an absolute directory name" #~ msgstr "geen absolute mapnaam" #, c-format #~ msgid "%s:%d: %s is not a directory" #~ msgstr "%s:%d: %s is geen map" #, c-format #~ msgid "%s:%d: invalid number: %s" #~ msgstr "%s:%d: ongeldig nummer: %s" #, c-format #~ msgid "%s:%d: invalid chroot directory" #~ msgstr "%s:%d: ongeldige chroot-map" #, c-format #~ msgid "%s:%d: invalid home directory" #~ msgstr "%s:%d: ongeldige persoonlijke map" #, c-format #~ msgid "%s:%d: Unknown message reference" #~ msgstr "%s:%d: Onbekende boodschapsreferentie" #, c-format #~ msgid "%s:%d: expected boolean value, but found `%s'" #~ msgstr "%s:%d: booleaanse waarde verwacht, maar ‘%s’ gevonden" #, c-format #~ msgid "%s:%d: unknown address family" #~ msgstr "%s:%d: onbekende adresfamilie" #, c-format #~ msgid "%s:%d: malformed URL" #~ msgstr "%s:%d: fout gevormde URL" #, c-format #~ msgid "%s:%d: port is meaningless for UNIX sockets" #~ msgstr "%s:%d: poort heeft geen betekenis voor UNIX-sockets" #, c-format #~ msgid "%s:%d: UNIX socket name too long" #~ msgstr "%s:%d: UNIX-socketnaam is te lang" #, c-format #~ msgid "%s:%d: bad port number" #~ msgstr "%s:%d: fout poortnummer" #, c-format #~ msgid "%s:%d: unknown service name" #~ msgstr "%s:%d: onbekende dienstnaam" #, c-format #~ msgid "%s:%d: unknown host name %s" #~ msgstr "%s:%d: onbekende hostname %s" #, c-format #~ msgid "%s:%d: unsupported address family" #~ msgstr "%s:%d: niet-ondersteunde adresfamilie" #, c-format #~ msgid "%s:%d: cannot stat file %s: %s" #~ msgstr "%s:%d: kan status van bestand %s niet opvragen: %s" #, c-format #~ msgid "%s:%d: unknown keyword: %s" #~ msgstr "%s:%d: onbekend sleutelwoord: %s" #~ msgid "Falling back to the default configuration" #~ msgstr "Er wordt op de standaardconfiguratie teruggevallen" #, c-format #~ msgid "%s:%d: INTERNAL ERROR: node type out of range" #~ msgstr "%s:%d: INTERNE FOUT: nodetype ligt buiten bereik" #, c-format #~ msgid "Transform: \"%s\" -> \"%s\"" #~ msgstr "Transformeer: “%s†-> “%sâ€" #, c-format #~ msgid "Command line: %s" #~ msgstr "Opdrachtregel: %s" #~ msgid "Setting command line" #~ msgstr "Opdrachtregel wordt ingesteld" #, c-format #~ msgid "%s:%d: internal error" #~ msgstr "%s:%d: interne fout" #, c-format #~ msgid "%s: option '--%s' doesn't allow an argument\n" #~ msgstr "%s: optie ‘--%s’ staat geen argument toe\n" #, c-format #~ msgid "%s: option '-W %s' is ambiguous\n" #~ msgstr "%s: optie ‘-W %s’ is dubbelzinnig\n" #, c-format #~ msgid "%s: option '-W %s' doesn't allow an argument\n" #~ msgstr "%s: optie ‘-W %s’ staat geen argument toe\n" #, c-format #~ msgid "%s: option '-W %s' requires an argument\n" #~ msgstr "%s: optie ‘-W %s’ vereist een argument\n" #~ msgid "argcv_string failed: %s" #~ msgstr "argcv_string gefaald: %s" #~ msgid "%s:%d: invalid umask: %s" #~ msgstr "%s:%d: ongeldig umask: %s" #~ msgid "unrecognized option `%s'" #~ msgstr "onbekende optie ‘%s’" #~ msgid "invalid option -- %c" #~ msgstr "ongeldige optie -- %c" #~ msgid "%s: illegal option -- %c\n" #~ msgstr "%s: niet toegestane optie -- %c\n" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/po/Makefile.in.in��������������������������������������������������������������������������0000644�0001750�0001750�00000041553�14436425501�015432� 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.19 GETTEXT_MACRO_VERSION = 0.19 PACKAGE = @PACKAGE@ VERSION = @VERSION@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ SED = @SED@ 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@ POFILESDEPS_ = $(srcdir)/$(DOMAIN).pot POFILESDEPS_yes = $(POFILESDEPS_) POFILESDEPS_no = POFILESDEPS = $(POFILESDEPS_$(PO_DEPENDS_ON_POT)) DISTFILESDEPS_ = update-po DISTFILESDEPS_yes = $(DISTFILESDEPS_) DISTFILESDEPS_no = DISTFILESDEPS = $(DISTFILESDEPS_$(DIST_DEPENDS_ON_UPDATE_PO)) # 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: 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 @$(CHECK_MACRO_VERSION) 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. # The determination of whether the package xyz is a GNU one is based on the # heuristic whether some file in the top level directory mentions "GNU xyz". # If GNU 'find' is available, we avoid grepping through monster files. $(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed package_gnu="$(PACKAGE_GNU)"; \ test -n "$$package_gnu" || { \ if { if (LC_ALL=C find --version) 2>/dev/null | grep GNU >/dev/null; then \ LC_ALL=C find -L $(top_srcdir) -maxdepth 1 -type f \ -size -10000000c -exec grep 'GNU @PACKAGE@' \ /dev/null '{}' ';' 2>/dev/null; \ else \ LC_ALL=C grep 'GNU @PACKAGE@' $(top_srcdir)/* 2>/dev/null; \ fi; \ } | grep -v 'libtool:' >/dev/null; then \ package_gnu=yes; \ else \ package_gnu=no; \ fi; \ }; \ if test "$$package_gnu" = "yes"; then \ package_prefix='GNU '; \ else \ package_prefix=''; \ 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_prefix}@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): $(POFILESDEPS) @lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \ if test -f "$(srcdir)/$${lang}.po"; then \ test -f $(srcdir)/$(DOMAIN).pot || $(MAKE) $(srcdir)/$(DOMAIN).pot; \ 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: test -z "$(DISTFILESDEPS)" || $(MAKE) $(DISTFILESDEPS) @$(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: �����������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/po/da.po�����������������������������������������������������������������������������������0000644�0001750�0001750�00000057511�14655401312�013702� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Danish translation rush. # Copyright (C) 2019 Free Software Foundation, Inc. # This file is distributed under the same license as the rush package. # Joe Hansen <joedalton2@yahoo.dk>, 2019, 2022 # # kiggede lidt i tysk og svensk oversættelse, og tilvalg mv. er oversat i disse, # sÃ¥ ogsÃ¥ gjort i den danske. # #: rwopt.opt:23 msgid "" msgstr "" "Project-Id-Version: GNU rush 2.2\n" "Report-Msgid-Bugs-To: bug-rush@gnu.org\n" "POT-Creation-Date: 2024-08-09 14:51+0300\n" "PO-Revision-Date: 2022-05-29 13:26+0200\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" #: src/config.c:163 #, c-format msgid "Finished parsing %s" msgstr "Afsluttede fortolkning af %s" #: src/config.c:169 #, c-format msgid "Resuming parsing %s from line %d" msgstr "Genoptager fortolkning af %s fra linje %d" #: src/config.c:262 #, c-format msgid "invalid number: %s" msgstr "ugyldigt nummer: %s" #: src/config.c:275 msgid "invalid opcode" msgstr "ugyldig opcode" #: src/config.c:297 #, c-format msgid "invalid regexp: %s" msgstr "ugyldigt regulært udtryk: %s" #: src/config.c:336 #, c-format msgid "unknown regexp flag: %s" msgstr "ukendt regulært udtryksflag: %s" #: src/config.c:353 msgid "too few arguments" msgstr "for fÃ¥ argumenter" #: src/config.c:357 src/rush.c:1381 msgid "too many arguments" msgstr "for mange argumenter" #: src/config.c:428 #, c-format msgid "no such user: %s" msgstr "ingen sÃ¥dan bruger: %s" #: src/config.c:453 src/config.c:1106 #, c-format msgid "no such group: %s" msgstr "ingen sÃ¥dan gruppe: %s" #: src/config.c:543 #, c-format msgid "unknown limit: %s" msgstr "ukendt begrænsning: %s" #: src/config.c:560 #, c-format msgid "expected ~ as the second argument, but found %s" msgstr "forventede ~ som det andet argument, men fandt %s" #: src/config.c:718 #, c-format msgid "debug level set to %d" msgstr "fejlsøgningsniveau angivet til %d" #: src/config.c:730 #, c-format msgid "invalid time: %s" msgstr "ugyldigt klokkeslæt: %s" #: src/config.c:786 msgid "invalid file descriptor" msgstr "ugyldig fildeskriptor" #: src/config.c:800 msgid "Unknown message reference" msgstr "Ukendt beskedreference" #: src/config.c:893 msgid "invalid include file name" msgstr "ugyldigt include-filnavn" #: src/config.c:900 #, c-format msgid "Ignoring non-existing include file %s" msgstr "Ignorerer ikkeeksisterende include-fil %s" #: src/config.c:906 #, c-format msgid "cannot stat file %s: %s" msgstr "kan ikke køre stat pÃ¥ filen %s: %s" #: src/config.c:934 rushopt.opt:90 #, c-format msgid "unknown keyword: %s" msgstr "ukendt nøgleord: %s" #: src/config.c:982 msgid "key field is not a number" msgstr "nøglefelt er ikke et tal" #: src/config.c:988 msgid "value field is not a number" msgstr "værdifelt er ikke et tal" #: src/config.c:1033 src/config.c:1038 src/rush.c:262 #, c-format msgid "%s: not a number" msgstr "%s: ikke et tal" #: src/config.c:1211 src/config.c:1340 #, c-format msgid "Parsing %s" msgstr "Fortolker %s" #: src/config.c:1245 #, c-format msgid "unknown statement: %s" msgstr "ukendt udtryk: %s" #: src/config.c:1280 msgid "missing ]" msgstr "manglende ]" #: src/config.c:1289 msgid "invalid statement: missing value" msgstr "ugyldigt udtryk: manglende værdi" #: src/config.c:1310 #, c-format msgid "failed to parse value: %s" msgstr "kunne ikke fortolke værdi: %s" #: src/config.c:1328 msgid "statement cannot be used outside a rule" msgstr "udtryk kan ikke bruges uden for en regel" #: src/config.c:1366 msgid "parsing legacy built-in configuration" msgstr "fortolker forældet indbygget konfiguration" #: src/config.c:1368 #, c-format msgid "parsing legacy configuration file %s" msgstr "fortolker forældet konfigurationsfil %s" #: src/limits.c:53 #, c-format msgid "Setting limit %d to %lu" msgstr "Angiver begrænsning %d til %lu" #: src/limits.c:58 #, c-format msgid "error setting limit: %s" msgstr "der opstod en fejl under angivelse af begrænsning: %s" #: src/limits.c:68 #, c-format msgid "Setting priority to %d" msgstr "Angiver prioritet til %d" #: src/limits.c:70 #, c-format msgid "error setting priority: %s" msgstr "der opstod en fejl under angivelse af prioritet: %s" #: src/limits.c:86 src/limits.c:87 #, c-format msgid "No logins allowed for `%s'" msgstr "Ingen logind tilladt for »%s«" #: src/limits.c:91 #, c-format msgid "counting logins for %s" msgstr "tæller logind for %s" #: src/limits.c:97 msgid "acct database is empty" msgstr "acct-databasen er tom" #: src/limits.c:101 #, c-format msgid "Cannot open database %s: %s" msgstr "Kan ikke Ã¥bne databasen %s: %s" #: src/limits.c:119 #, c-format msgid "counted %zu/%zu logins for %s" msgstr "talte %zu/%zu-logind for %s" #: src/limits.c:126 src/limits.c:128 #, c-format msgid "Too many logins (max %zu) for %s" msgstr "For mange logind (maks. %zu) for %s" #: src/limits.c:143 #, c-format msgid "Setting limits for %s" msgstr "Angiver begrænsninger for %s" #: src/rush.c:43 msgid "" "You are not permitted to execute this command.\n" "Contact the systems administrator for further assistance.\n" msgstr "" "Du har ikke tilladelse til at køre denne kommando.\n" "Kontakt systemadministratoren for yderligere assistance.\n" #: src/rush.c:47 msgid "" "You do not have interactive login access to this machine.\n" "Contact the systems administrator for further assistance.\n" msgstr "" "Du har ikke interaktiv logindadgang til denne maskine.\n" "Kontakt systemadministratoren for yderligere assistance.\n" #: src/rush.c:51 msgid "" "Local configuration error occurred.\n" "Contact the systems administrator for further assistance.\n" msgstr "" "Der opstod en lokal konfigurationsfejl.\n" "Kontakt systemadministratoren for yderligere assistance.\n" #: src/rush.c:55 msgid "" "A system error occurred while attempting to execute command.\n" "Contact the systems administrator for further assistance.\n" msgstr "" "Der opstod en systemfejl under forsøg pÃ¥ at køre kommandoen.\n" "Kontakt systemadministratoren for yderligere assistance.\n" #: src/rush.c:156 #, c-format msgid "failed to write message to stderr: %s" msgstr "kunne ikke skrive besked til standardfejl (stderr): %s" #: src/rush.c:160 #, c-format msgid "failed to write message to stdout: %s" msgstr "kunne ikke skrive besked til standardud (stdout): %s" #: src/rush.c:172 #, c-format msgid "Debug: " msgstr "Fejlsøg: " #: src/rush.c:176 #, c-format msgid "Info: " msgstr "Info: " #: src/rush.c:180 #, c-format msgid "Notice: " msgstr "Meddelelse: " #: src/rush.c:184 #, c-format msgid "Warning: " msgstr "Advarsel: " #: src/rush.c:191 #, c-format msgid "Error: " msgstr "Fejl: " #: src/rush.c:248 msgid "Not enough memory" msgstr "Ikke nok hukommelse" #: src/rush.c:279 src/rush.c:324 #, c-format msgid "INTERNAL ERROR at %s:%d: unrecognized opcode %d" msgstr "INTERN FEJL ved %s:%d: opkode blev ikke genkendt %d" #: src/rush.c:408 #, c-format msgid "%s:%d: %s: can't stat '%s': %s" msgstr "%s:%d: %s: kan ikke køre stat pÃ¥ »%s«: %s" #: src/rush.c:469 #, c-format msgid "INTERNAL ERROR at %s:%d: unrecognized operation %d" msgstr "INTERN FEJL ved %s:%d: operation blev ikke genkendt %d" #: src/rush.c:509 #, c-format msgid "INTERNAL ERROR at %s:%d: unrecognized node type %d" msgstr "INTERN FEJL ved %s:%d: knudetype blev ikke genkendt %d" #: src/rush.c:718 #, c-format msgid "INTERNAL ERROR at %s:%d: invalid envar type %d" msgstr "INTERN FEJL ved %s:%d: ugyldig envar-type %d" #: src/rush.c:723 msgid "Final environment:" msgstr "Endeligt miljø:" #: src/rush.c:737 #, c-format msgid "wordsplit(%s) failed: %s" msgstr "wordsplit(%s) mislykkedes: %s" #: src/rush.c:763 #, c-format msgid "no argument at index %d in command: %s" msgstr "intet argument ved indeks %d i kommando: %s" #: src/rush.c:906 #, c-format msgid "Removing option %s %s" msgstr "Fjerner tilvalget %s %s" #: src/rush.c:918 msgid "Transforming command line" msgstr "Transformerer kommandolinje" #: src/rush.c:925 #, c-format msgid "Transforming program name (%s)" msgstr "Transformering af programnavn (%s)" #: src/rush.c:943 #, c-format msgid "Transforming argv[%d]" msgstr "Transformering af argv[%d]" #: src/rush.c:950 #, c-format msgid "Transforming variable %s=%s" msgstr "Transformering af variabel %s=%s" #: src/rush.c:957 src/rush.c:1043 msgid "environment transformation is not yet implemented" msgstr "miljøtransformering er endnu ikke implementeret" #: src/rush.c:961 #, c-format msgid "INTERNAL ERROR at %s:%d: can't modify read-only target" msgstr "INTERN FEJL ved %s:%d: kan ikke ændre skrivebeskyttet mÃ¥l" #: src/rush.c:980 #, c-format msgid "Transformation map: %s, %s, %s, %u, %u, %s" msgstr "Transformeringskort: %s, %s, %s, %u, %u, %s" #: src/rush.c:994 #, c-format msgid "INTERNAL ERROR at %s:%d: invalid node type %d" msgstr "INTERN FEJL ved %s:%d: ugyldig knudetype %d" #: src/rush.c:1001 #, c-format msgid "transformed value: %s" msgstr "transformeret værdi: %s" #: src/rush.c:1022 #, c-format msgid "Deleting arguments %d-%d" msgstr "Sletter argumenter %d-%d" #: src/rush.c:1025 msgid "Deleting argv[0] is prohibited" msgstr "Sletning af argv[0] er forbudt" #: src/rush.c:1047 #, c-format msgid "INTERNAL ERROR at %s:%d: invalid target type %d" msgstr "INTERN FEJL ved %s:%d: ugyldig mÃ¥ltype %d" #: src/rush.c:1065 #, c-format msgid "Program name: %s" msgstr "Programnavn: %s" #: src/rush.c:1066 msgid "Final arguments:" msgstr "Endelige argumenter:" #: src/rush.c:1084 #, c-format msgid "error writing to database %s: %s" msgstr "der opstod en fejl under skrivning til database %s: %s" #: src/rush.c:1093 #, c-format msgid "error writing stop to database file %s: %s" msgstr "der opstod en fejl under skrivning af stop til databasefilen %s: %s" #: src/rush.c:1114 #, c-format msgid "%s:%d: %s: cannot fork: %s" msgstr "%s:%d: %s: kan ikke forgrene: %s" #: src/rush.c:1124 #, c-format msgid "Forked process %lu" msgstr "Forgrenet proces %lu" #: src/rush.c:1128 #, c-format msgid "%s: subprocess exited with code %d" msgstr "%s: underproces afsluttedes med koden %d" #: src/rush.c:1131 #, c-format msgid "%s: subprocess terminated on signal %d" msgstr "%s: underproces blev termineret pÃ¥ signalet %d" #: src/rush.c:1134 #, c-format msgid "%s: subprocess terminated" msgstr "%s: underproces blev termineret" #: src/rush.c:1223 #, c-format msgid "cannot enforce gid %lu: %s" msgstr "kan ikke fremtvinge gid %lu: %s" #: src/rush.c:1228 #, c-format msgid "cannot enforce uid %lu: %s" msgstr "kan ikke fremtvinge uid %lu: %s" #: src/rush.c:1233 msgid "seteuid(0) succeeded when it should not" msgstr "seteuid(0) lykkedes hvor den ikke burde" #: src/rush.c:1239 #, c-format msgid "Rule %s at %s:%d matched" msgstr "Regel %s pÃ¥ %s:%d matchede" #: src/rush.c:1253 #, c-format msgid "Error message: %s" msgstr "Fejlbesked: %s" #: src/rush.c:1256 #, c-format msgid "Error sending diagnostic message to descriptor %d: %s" msgstr "" "Der opstod en fejl, da en diagnostisk besked blev sendt til deskriptoren %d: " "%s" #: src/rush.c:1262 #, c-format msgid "cannot set limits for %s" msgstr "kan ikke angive begrænsninger for %s" #: src/rush.c:1269 #, c-format msgid "Chroot dir: %s" msgstr "Chroot-mappe: %s" #: src/rush.c:1276 #, c-format msgid "Home dir: %s" msgstr "Hjemmemappe: %s" #: src/rush.c:1281 #, c-format msgid "GID: %lu" msgstr "GID: %lu" #: src/rush.c:1306 #, c-format msgid "cannot open database %s: %s" msgstr "kan ikke Ã¥bne database %s: %s" #: src/rush.c:1315 #, c-format msgid "cannot chroot to %s: %s" msgstr "kan ikke chroot til %s: %s" #: src/rush.c:1322 src/rush.c:1414 #, c-format msgid "invalid uid %lu" msgstr "ugyldig uid %lu" #: src/rush.c:1327 #, c-format msgid "chdir %s" msgstr "chdir %s" #: src/rush.c:1330 #, c-format msgid "cannot change to dir %s: %s" msgstr "kan ikke ændre til mappen %s: %s" #: src/rush.c:1334 #, c-format msgid "Executing %s, %s" msgstr "Kører %s, %s" #: src/rush.c:1349 #, c-format msgid "%s:%d: %s: cannot execute %s: %s" msgstr "%s:%d: %s: kan ikke køre %s: %s" #: src/rush.c:1392 src/rush.c:1394 msgid "invalid command line" msgstr "ugyldig kommandolinje" #: src/rush.c:1405 msgid "invalid user name" msgstr "ugyldigt brugernavn" #: src/rush.c:1416 #, c-format msgid "user %s, uid %lu" msgstr "bruger %s, uid %lu" #: src/rush.c:1428 msgid "Command line:" msgstr "Kommandolinje:" #: src/rush.c:1431 msgid "Environment:" msgstr "Miljø:" #: src/rush.c:1462 #, c-format msgid "Serving interactive shell request for %s by rule %s" msgstr "Betjener interaktiv skalforespørgsel for %s efter regel %s" #: src/rush.c:1466 #, c-format msgid "Serving request \"%s\" for %s by rule %s" msgstr "Betjerner forespørgsel »%s« for %s efter regel %s" #: src/rush.c:1472 #, c-format msgid "no matching rule for \"%s\", user %s" msgstr "ingen matchende regel for »%s«, bruger %s" #: src/rushlast.c:31 src/rushwho.c:30 #, c-format msgid "not enough memory" msgstr "ikke nok hukommelse" #: src/rushlast.c:78 src/rushwho.c:67 #, c-format msgid "invalid format: %s" msgstr "ugyldigt format: %s" #: src/rushlast.c:88 src/rushwho.c:77 #, c-format msgid "cannot open database file %s" msgstr "kan ikke Ã¥bne databasefilen %s" #: src/rushwho.c:61 #, c-format msgid "extra arguments" msgstr "ekstra argumenter" #: src/socket.c:61 #, c-format msgid "%s: TCPMUX did not respond" msgstr "%s: TCPMUX svarede ikke" #: src/socket.c:65 #, c-format msgid "%s: TCPMUX returned %s" msgstr "%s: TCPMUX returnerede %s" #: src/transform.c:155 msgid "" "Transform expression must start with 's' followed by a punctuation character" msgstr "Transformeringsudtryk skal starte med »s« fulgt af et tegnsætningstegn" #: src/transform.c:166 #, c-format msgid "Missing 2nd delimiter in position %d of expression %s" msgstr "Manglende 2. skilletegn pÃ¥ position %d for udtryk %s" #: src/transform.c:176 #, c-format msgid "Missing trailing delimiter in position %d of expression %s" msgstr "Manglende efterfølgende skilletegn pÃ¥ position %d for udtryk %s" #: src/transform.c:203 #, c-format msgid "Unknown flag in transform expression: %c" msgstr "Ukendt flag i transformeringsudtryk: %c" #: src/transform.c:220 #, c-format msgid "Invalid transform expression: %s" msgstr "Ugyldigt transformeringsudtryk: %s" #: src/transform.c:248 msgid "Invalid transform replacement: back reference out of range" msgstr "Ugyldig transformeringserstatning: tilbagereference uden for interval" #: rushopt.opt:27 rlopt.opt:56 msgid "NUMBER" msgstr "NUMMER" #: rushopt.opt:27 msgid "Set debugging level." msgstr "Angiv fejlsøgningsniveau." #: rushopt.opt:35 msgid "Run in test mode." msgstr "Kør i testtilstand." #: rushopt.opt:41 msgid "Scanner test." msgstr "Skannertest." # Jeg er ikke helt klar over hvad rush gør, men trace bruges oftest til # at følge alle funktionskald i et program #: rushopt.opt:47 msgid "Print grammar and lexical analyzer traces" msgstr "Udskriv grammatik og funktionslog for leksikalsk analyse" #: rushopt.opt:53 msgid "NAME" msgstr "NAVN" #: rushopt.opt:53 msgid "Supply user name in test mode." msgstr "Angiv brugernavn i testtilstand." #: rushopt.opt:65 msgid "COMMAND" msgstr "KOMMANDO" #: rushopt.opt:65 msgid "Execute COMMAND." msgstr "Kør KOMMANDO." #: rushopt.opt:71 msgid "Force interactive shell." msgstr "Fremtving interaktiv skal." #: rushopt.opt:78 msgid "KEYWORDS" msgstr "NØGLEORD" #: rushopt.opt:78 msgid "Dump final request in test mode." msgstr "Dump endelig forespørgsel i testtilstand." #: rushopt.opt:85 msgid "CHECK" msgstr "KONTROL" #: rushopt.opt:85 msgid "Add or remove configuration security check." msgstr "Tilføj eller fjern sikkerhedskontrol af konfigurationen." #: rushopt.opt:93 msgid "Show default configuration." msgstr "Vis standardkonfiguration." #: rushopt.opt:102 rwopt.opt:40 rlopt.opt:82 msgid "Other options" msgstr "Andre tilvalg" #: rushopt.opt:102 rwopt.opt:40 rlopt.opt:82 msgid "Give this help list" msgstr "Angiv denne hjælpeliste" #: rushopt.opt:102 rwopt.opt:40 rlopt.opt:82 msgid "Give a short usage message" msgstr "Angiv en kort brugsbesked" #: rushopt.opt:102 rwopt.opt:40 rlopt.opt:82 msgid "Print program version" msgstr "Udskriv programversion" #: rushopt.opt:23 msgid "rush - restricted user shell." msgstr "rush - begrænset brugerskal." #: rushopt.opt:25 msgid "[FILE]" msgstr "[FIL]" #: rushopt.opt:125 rushopt.opt:359 rwopt.opt:123 rwopt.opt:357 rlopt.opt:126 #: rlopt.opt:360 msgid "Usage:" msgstr "Brug:" #: rushopt.opt:125 rwopt.opt:123 rlopt.opt:126 msgid "OPTION" msgstr "TILVALG" #: rushopt.opt:243 rwopt.opt:241 rlopt.opt:244 msgid "" "Mandatory or optional arguments to long options are also mandatory or " "optional for any corresponding short options." msgstr "" "Obligatoriske eller valgfrie argumenter til lange tilvalg er ogsÃ¥ " "obligatoriske eller valgfrie for tilsvarende korte tilvalg." #: rushopt.opt:247 rwopt.opt:245 rlopt.opt:248 #, c-format msgid "Report bugs to %s.\n" msgstr "Rapporter fejl til %s.\n" #: rushopt.opt:700 rwopt.opt:698 rlopt.opt:701 msgid "(C)" msgstr "(C)" #: rushopt.opt:718 rwopt.opt:716 rlopt.opt:719 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.\n" "Der er ingen GARANTI, indenfor lovens omfang.\n" "\n" #: rushopt.opt:60 msgid "the --user option is allowed for the superuser only" msgstr "tilvalget --user er kun tilladt for superbrugeren" #: rushopt.opt:100 #, c-format msgid "No default configuration" msgstr "Ingen standardkonfiguration" #: rwopt.opt:24 rlopt.opt:28 msgid "STRING" msgstr "STRENG" #: rwopt.opt:24 rlopt.opt:28 msgid "Use STRING instead of the default format." msgstr "Brug STRENG i stedet for standardformatet." #: rwopt.opt:30 rlopt.opt:35 msgid "DIR" msgstr "MAPPE" #: rwopt.opt:30 rlopt.opt:35 msgid "Look for database files in DIR." msgstr "Kig efter databasefiler i MAPPE." #: rwopt.opt:36 rlopt.opt:49 msgid "Do not display header line." msgstr "Vis ikke teksthovedlinje." #: rwopt.opt:21 msgid "rushwho - show listing of online Rush users." msgstr "rushwho - vis liste over tilkoblede Rushbrugere." #: rlopt.opt:42 msgid "Show entries in chronological order." msgstr "Vis elementer i kronologisk rækkefølge." #: rlopt.opt:56 msgid "Show at most NUM records." msgstr "Vis maks. NUM elementer." #: rlopt.opt:24 msgid "rushlast - show listing of last Rush logins." msgstr "rushlast - vis liste over de seneste Rush-logind." #: rlopt.opt:26 msgid "[user [user...]]" msgstr "[bruger [bruger...]]" #: rlopt.opt:63 #, c-format msgid "invalid number (%s)" msgstr "ugyldigt nummer (%s)" #: lib/readfmt.c:40 #, c-format msgid "cannot stat format file %s" msgstr "kan ikke køre stat pÃ¥ formatfilen %s" #: lib/readfmt.c:42 #, c-format msgid "%s is not a regular file" msgstr "%s er ikke en normal fil" #: lib/readfmt.c:46 #, c-format msgid "cannot open format file %s" msgstr "kan ikke Ã¥ben formatfilen %s" #: lib/rushdb.c:79 #, c-format msgid "cannot create directory %s: %s" msgstr "kan ikke oprette mappen %s: %s" #: lib/rushdb.c:84 #, c-format msgid "cannot stat directory %s: %s" msgstr "kan ikke køre stat pÃ¥ mappen %s: %s" #: lib/rushdb.c:89 #, c-format msgid "%s is not a directory" msgstr "%s er ikke en mappe" #: lib/rushdb.c:100 lib/rushdb.c:114 #, c-format msgid "cannot open file %s: %s" msgstr "kan ikke Ã¥bne filen %s: %s" #: lib/rushdb.c:586 #, c-format msgid "missing closing quote in string started near `%s'" msgstr "manglende afsluttende citationstegn i streng startede tæt pÃ¥ »%s«" #: lib/version.c:28 msgid "" "\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" msgstr "" "\n" "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.\n" "Der er ingen GARANTI, indenfor lovens omfang.\n" "\n" #: gnu/error.c:194 msgid "Unknown system error" msgstr "Ukendt systemfejl" #: gnu/getopt.c:278 #, c-format msgid "%s: option '%s%s' is ambiguous\n" msgstr "%s: tilvalget »%s%s« er tvetydigt\n" #: gnu/getopt.c:284 #, c-format msgid "%s: option '%s%s' is ambiguous; possibilities:" msgstr "%s: tilvalget »%s%s« er tvetydigt: muligheder:" #: gnu/getopt.c:319 #, c-format msgid "%s: unrecognized option '%s%s'\n" msgstr "%s: tilvalget »%s%s« blev ikke genkendt\n" #: gnu/getopt.c:345 #, c-format msgid "%s: option '%s%s' doesn't allow an argument\n" msgstr "%s: tilvalget »%s%s« tillader ikke et argument\n" #: gnu/getopt.c:360 #, c-format msgid "%s: option '%s%s' requires an argument\n" msgstr "%s: tilvalget »%s%s« kræver et argument\n" #: gnu/getopt.c:621 #, c-format msgid "%s: invalid option -- '%c'\n" msgstr "%s: ugyldigt tilvalg -- »%c«\n" #: gnu/getopt.c:636 gnu/getopt.c:682 #, c-format msgid "%s: option requires an argument -- '%c'\n" msgstr "%s: tilvalget kræver et argument -- »%c«\n" #~ msgid "Ignoring non-existing file %s" #~ msgstr "Ignorerer ikkeeksisterende fil %s" #~ msgid "%s: file is not safe" #~ msgstr "%s: filen er ikke sikker" #~ msgid "error reading file %s: %s" #~ msgstr "der opstod en fejl under læsning af filen %s: %s" #~ msgid "read 0 bytes from file %s" #~ msgstr "læst 0 byte fra filen %s" #~ msgid "not an absolute directory name" #~ msgstr "ikke et absolut mappenavn" #~ msgid "%s:%d: %s is not a directory" #~ msgstr "*%s:%d: %s er ikke en mappe" #~ msgid "%s:%d: invalid number: %s" #~ msgstr "%s:%d: ugyldigt nummer: %s" #~ msgid "%s:%d: invalid chroot directory" #~ msgstr "%s:%d: ugyldig chroot-mappe" #~ msgid "%s:%d: invalid home directory" #~ msgstr "%s:%d: ugyldig hjemmemappe" #~ msgid "%s:%d: Unknown message reference" #~ msgstr "%s:%d: Ukendt beskedreference" #~ msgid "%s:%d: expected boolean value, but found `%s'" #~ msgstr "%s:%d: forventede boolesk værdi, men fandt »%s«" #~ msgid "%s:%d: unknown address family" #~ msgstr "%s:%d: ukendt adressefamilie" #~ msgid "%s:%d: malformed URL" #~ msgstr "%s:%d: forkert udformet adresse" #~ msgid "%s:%d: port is meaningless for UNIX sockets" #~ msgstr "%s:%d: port er meningsløs for UNIX-sokler" #~ msgid "%s:%d: UNIX socket name too long" #~ msgstr "%s:%d. UNIX-sokkelnavnet er for langt" #~ msgid "%s:%d: bad port number" #~ msgstr "%s:%d: ugyldig portnummer" #~ msgid "%s:%d: unknown service name" #~ msgstr "%s:%d: ukendt tjenestenavn" #~ msgid "%s:%d: unknown host name %s" #~ msgstr "%s:%d: ukendt værtsnavn %s" #~ msgid "%s:%d: unsupported address family" #~ msgstr "%s:%d: adressefamilien er ikke understøttet" #~ msgid "%s:%d: cannot stat file %s: %s" #~ msgstr "%s:%d: kan ikke køre stat pÃ¥ filen %s: %s" #~ msgid "%s:%d: unknown keyword: %s" #~ msgstr "%s:%d: ukendt nøgleord: %s" #~ msgid "Falling back to the default configuration" #~ msgstr "Falder tilbage til standardkonfigurationen" #~ msgid "%s:%d: INTERNAL ERROR: node type out of range" #~ msgstr "%s:%d: INTERN FEJL: knudetype uden for interval" #~ msgid "Transform: \"%s\" -> \"%s\"" #~ msgstr "Transformer: »%s« -> »%s«" #~ msgid "Command line: %s" #~ msgstr "Kommandolinje: %s" #~ msgid "Setting command line" #~ msgstr "Angivelse af kommandolinje" #~ msgid "%s:%d: internal error" #~ msgstr "%s:%d: intern fejl" #~ msgid "%s: option '--%s' doesn't allow an argument\n" #~ msgstr "%s: tilvalget »--%s« tillader ikke et argument\n" #~ msgid "%s: unrecognized option '--%s'\n" #~ msgstr "%s: tilvalget »--%s« blev ikke genkendt\n" #~ msgid "%s: option '-W %s' is ambiguous\n" #~ msgstr "%s: tilvalget »-W %s« er tvetydigt\n" #~ msgid "%s: option '-W %s' doesn't allow an argument\n" #~ msgstr "%s: tilvalget »-W %s« tillader ikke et argument\n" #~ msgid "%s: option '-W %s' requires an argument\n" #~ msgstr "%s: tilvalget »-W %s« kræver et argument\n" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/���������������������������������������������������������������������������������������0000755�0001750�0001750�00000000000�14655401527�013130� 5����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/windows-once.h�������������������������������������������������������������������������0000644�0001750�0001750�00000002602�14436425347�015720� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Once-only control (native Windows implementation). Copyright (C) 2005-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2005. Based on GCC's gthr-win32.h. */ #ifndef _WINDOWS_ONCE_H #define _WINDOWS_ONCE_H #define WIN32_LEAN_AND_MEAN /* avoid including junk */ #include <windows.h> typedef struct { volatile int inited; volatile LONG started; CRITICAL_SECTION lock; } glwthread_once_t; #define GLWTHREAD_ONCE_INIT { -1, -1 } #ifdef __cplusplus extern "C" { #endif extern void glwthread_once (glwthread_once_t *once_control, void (*initfunction) (void)); #ifdef __cplusplus } #endif #endif /* _WINDOWS_ONCE_H */ ������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/errno.in.h�����������������������������������������������������������������������������0000644�0001750�0001750�00000016447�14436425345�015050� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A POSIX-like <errno.h>. Copyright (C) 2008-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _@GUARD_PREFIX@_ERRNO_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_ERRNO_H@ #ifndef _@GUARD_PREFIX@_ERRNO_H #define _@GUARD_PREFIX@_ERRNO_H /* On native Windows platforms, many macros are not defined. */ # if defined _WIN32 && ! defined __CYGWIN__ /* These are the same values as defined by MSVC 10, for interoperability. */ # ifndef ENOMSG # define ENOMSG 122 # define GNULIB_defined_ENOMSG 1 # endif # ifndef EIDRM # define EIDRM 111 # define GNULIB_defined_EIDRM 1 # endif # ifndef ENOLINK # define ENOLINK 121 # define GNULIB_defined_ENOLINK 1 # endif # ifndef EPROTO # define EPROTO 134 # define GNULIB_defined_EPROTO 1 # endif # ifndef EBADMSG # define EBADMSG 104 # define GNULIB_defined_EBADMSG 1 # endif # ifndef EOVERFLOW # define EOVERFLOW 132 # define GNULIB_defined_EOVERFLOW 1 # endif # ifndef ENOTSUP # define ENOTSUP 129 # define GNULIB_defined_ENOTSUP 1 # endif # ifndef ENETRESET # define ENETRESET 117 # define GNULIB_defined_ENETRESET 1 # endif # ifndef ECONNABORTED # define ECONNABORTED 106 # define GNULIB_defined_ECONNABORTED 1 # endif # ifndef ECANCELED # define ECANCELED 105 # define GNULIB_defined_ECANCELED 1 # endif # ifndef EOWNERDEAD # define EOWNERDEAD 133 # define GNULIB_defined_EOWNERDEAD 1 # endif # ifndef ENOTRECOVERABLE # define ENOTRECOVERABLE 127 # define GNULIB_defined_ENOTRECOVERABLE 1 # endif # ifndef EINPROGRESS # define EINPROGRESS 112 # define EALREADY 103 # define ENOTSOCK 128 # define EDESTADDRREQ 109 # define EMSGSIZE 115 # define EPROTOTYPE 136 # define ENOPROTOOPT 123 # define EPROTONOSUPPORT 135 # define EOPNOTSUPP 130 # define EAFNOSUPPORT 102 # define EADDRINUSE 100 # define EADDRNOTAVAIL 101 # define ENETDOWN 116 # define ENETUNREACH 118 # define ECONNRESET 108 # define ENOBUFS 119 # define EISCONN 113 # define ENOTCONN 126 # define ETIMEDOUT 138 # define ECONNREFUSED 107 # define ELOOP 114 # define EHOSTUNREACH 110 # define EWOULDBLOCK 140 # define GNULIB_defined_ESOCK 1 # endif # ifndef ETXTBSY # define ETXTBSY 139 # define ENODATA 120 /* not required by POSIX */ # define ENOSR 124 /* not required by POSIX */ # define ENOSTR 125 /* not required by POSIX */ # define ETIME 137 /* not required by POSIX */ # define EOTHER 131 /* not required by POSIX */ # define GNULIB_defined_ESTREAMS 1 # endif /* These are intentionally the same values as the WSA* error numbers, defined in <winsock2.h>. */ # define ESOCKTNOSUPPORT 10044 /* not required by POSIX */ # define EPFNOSUPPORT 10046 /* not required by POSIX */ # define ESHUTDOWN 10058 /* not required by POSIX */ # define ETOOMANYREFS 10059 /* not required by POSIX */ # define EHOSTDOWN 10064 /* not required by POSIX */ # define EPROCLIM 10067 /* not required by POSIX */ # define EUSERS 10068 /* not required by POSIX */ # define EDQUOT 10069 # define ESTALE 10070 # define EREMOTE 10071 /* not required by POSIX */ # define GNULIB_defined_EWINSOCK 1 # endif /* On OSF/1 5.1, when _XOPEN_SOURCE_EXTENDED is not defined, the macros EMULTIHOP, ENOLINK, EOVERFLOW are not defined. */ # if @EMULTIHOP_HIDDEN@ # define EMULTIHOP @EMULTIHOP_VALUE@ # define GNULIB_defined_EMULTIHOP 1 # endif # if @ENOLINK_HIDDEN@ # define ENOLINK @ENOLINK_VALUE@ # define GNULIB_defined_ENOLINK 1 # endif # if @EOVERFLOW_HIDDEN@ # define EOVERFLOW @EOVERFLOW_VALUE@ # define GNULIB_defined_EOVERFLOW 1 # endif /* On OpenBSD 4.0 and on native Windows, the macros ENOMSG, EIDRM, ENOLINK, EPROTO, EMULTIHOP, EBADMSG, EOVERFLOW, ENOTSUP, ECANCELED are not defined. Likewise, on NonStop Kernel, EDQUOT is not defined. Define them here. Values >= 2000 seem safe to use: Solaris ESTALE = 151, HP-UX EWOULDBLOCK = 246, IRIX EDQUOT = 1133. Note: When one of these systems defines some of these macros some day, binaries will have to be recompiled so that they recognizes the new errno values from the system. */ # ifndef ENOMSG # define ENOMSG 2000 # define GNULIB_defined_ENOMSG 1 # endif # ifndef EIDRM # define EIDRM 2001 # define GNULIB_defined_EIDRM 1 # endif # ifndef ENOLINK # define ENOLINK 2002 # define GNULIB_defined_ENOLINK 1 # endif # ifndef EPROTO # define EPROTO 2003 # define GNULIB_defined_EPROTO 1 # endif # ifndef EMULTIHOP # define EMULTIHOP 2004 # define GNULIB_defined_EMULTIHOP 1 # endif # ifndef EBADMSG # define EBADMSG 2005 # define GNULIB_defined_EBADMSG 1 # endif # ifndef EOVERFLOW # define EOVERFLOW 2006 # define GNULIB_defined_EOVERFLOW 1 # endif # ifndef ENOTSUP # define ENOTSUP 2007 # define GNULIB_defined_ENOTSUP 1 # endif # ifndef ENETRESET # define ENETRESET 2011 # define GNULIB_defined_ENETRESET 1 # endif # ifndef ECONNABORTED # define ECONNABORTED 2012 # define GNULIB_defined_ECONNABORTED 1 # endif # ifndef ESTALE # define ESTALE 2009 # define GNULIB_defined_ESTALE 1 # endif # ifndef EDQUOT # define EDQUOT 2010 # define GNULIB_defined_EDQUOT 1 # endif # ifndef ECANCELED # define ECANCELED 2008 # define GNULIB_defined_ECANCELED 1 # endif /* On many platforms, the macros EOWNERDEAD and ENOTRECOVERABLE are not defined. */ # ifndef EOWNERDEAD # if defined __sun /* Use the same values as defined for Solaris >= 8, for interoperability. */ # define EOWNERDEAD 58 # define ENOTRECOVERABLE 59 # elif defined _WIN32 && ! defined __CYGWIN__ /* We have a conflict here: pthreads-win32 defines these values differently than MSVC 10. It's hairy to decide which one to use. */ # if defined __MINGW32__ && !defined USE_WINDOWS_THREADS /* Use the same values as defined by pthreads-win32, for interoperability. */ # define EOWNERDEAD 43 # define ENOTRECOVERABLE 44 # else /* Use the same values as defined by MSVC 10, for interoperability. */ # define EOWNERDEAD 133 # define ENOTRECOVERABLE 127 # endif # else # define EOWNERDEAD 2013 # define ENOTRECOVERABLE 2014 # endif # define GNULIB_defined_EOWNERDEAD 1 # define GNULIB_defined_ENOTRECOVERABLE 1 # endif # ifndef EILSEQ # define EILSEQ 2015 # define GNULIB_defined_EILSEQ 1 # endif #endif /* _@GUARD_PREFIX@_ERRNO_H */ #endif /* _@GUARD_PREFIX@_ERRNO_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/windows-once.c�������������������������������������������������������������������������0000644�0001750�0001750�00000004416�14436425347�015720� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Once-only control (native Windows implementation). Copyright (C) 2005-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2005. Based on GCC's gthr-win32.h. */ #include <config.h> /* Specification. */ #include "windows-once.h" #include <stdlib.h> void glwthread_once (glwthread_once_t *once_control, void (*initfunction) (void)) { if (once_control->inited <= 0) { if (InterlockedIncrement (&once_control->started) == 0) { /* This thread is the first one to come to this once_control. */ InitializeCriticalSection (&once_control->lock); EnterCriticalSection (&once_control->lock); once_control->inited = 0; initfunction (); once_control->inited = 1; LeaveCriticalSection (&once_control->lock); } else { /* Don't let once_control->started grow and wrap around. */ InterlockedDecrement (&once_control->started); /* Some other thread has already started the initialization. Yield the CPU while waiting for the other thread to finish initializing and taking the lock. */ while (once_control->inited < 0) Sleep (0); if (once_control->inited <= 0) { /* Take the lock. This blocks until the other thread has finished calling the initfunction. */ EnterCriticalSection (&once_control->lock); LeaveCriticalSection (&once_control->lock); if (!(once_control->inited > 0)) abort (); } } } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/setlocale_null.c�����������������������������������������������������������������������0000644�0001750�0001750�00000025243�14436425346�016311� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Query the name of the current global locale. Copyright (C) 2019-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2019. */ #include <config.h> /* Specification. */ #include "setlocale_null.h" #include <errno.h> #include <locale.h> #include <stdlib.h> #include <string.h> #if defined _WIN32 && !defined __CYGWIN__ # include <wchar.h> #endif #if !(SETLOCALE_NULL_ALL_MTSAFE && SETLOCALE_NULL_ONE_MTSAFE) # if defined _WIN32 && !defined __CYGWIN__ # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> # elif HAVE_PTHREAD_API # include <pthread.h> # if HAVE_THREADS_H && HAVE_WEAK_SYMBOLS # include <threads.h> # pragma weak thrd_exit # define c11_threads_in_use() (thrd_exit != NULL) # else # define c11_threads_in_use() 0 # endif # elif HAVE_THREADS_H # include <threads.h> # endif #endif /* Use the system's setlocale() function, not the gnulib override, here. */ #undef setlocale static const char * setlocale_null_androidfix (int category) { const char *result = setlocale (category, NULL); #ifdef __ANDROID__ if (result == NULL) switch (category) { case LC_CTYPE: case LC_NUMERIC: case LC_TIME: case LC_COLLATE: case LC_MONETARY: case LC_MESSAGES: case LC_ALL: case LC_PAPER: case LC_NAME: case LC_ADDRESS: case LC_TELEPHONE: case LC_MEASUREMENT: result = "C"; break; default: break; } #endif return result; } static int setlocale_null_unlocked (int category, char *buf, size_t bufsize) { #if defined _WIN32 && !defined __CYGWIN__ && defined _MSC_VER /* On native Windows, nowadays, the setlocale() implementation is based on _wsetlocale() and uses malloc() for the result. We are better off using _wsetlocale() directly. */ const wchar_t *result = _wsetlocale (category, NULL); if (result == NULL) { /* CATEGORY is invalid. */ if (bufsize > 0) /* Return an empty string in BUF. This is a convenience for callers that don't want to write explicit code for handling EINVAL. */ buf[0] = '\0'; return EINVAL; } else { size_t length = wcslen (result); if (length < bufsize) { size_t i; /* Convert wchar_t[] -> char[], assuming plain ASCII. */ for (i = 0; i <= length; i++) buf[i] = result[i]; return 0; } else { if (bufsize > 0) { /* Return a truncated result in BUF. This is a convenience for callers that don't want to write explicit code for handling ERANGE. */ size_t i; /* Convert wchar_t[] -> char[], assuming plain ASCII. */ for (i = 0; i < bufsize; i++) buf[i] = result[i]; buf[bufsize - 1] = '\0'; } return ERANGE; } } #else const char *result = setlocale_null_androidfix (category); if (result == NULL) { /* CATEGORY is invalid. */ if (bufsize > 0) /* Return an empty string in BUF. This is a convenience for callers that don't want to write explicit code for handling EINVAL. */ buf[0] = '\0'; return EINVAL; } else { size_t length = strlen (result); if (length < bufsize) { memcpy (buf, result, length + 1); return 0; } else { if (bufsize > 0) { /* Return a truncated result in BUF. This is a convenience for callers that don't want to write explicit code for handling ERANGE. */ memcpy (buf, result, bufsize - 1); buf[bufsize - 1] = '\0'; } return ERANGE; } } #endif } #if !(SETLOCALE_NULL_ALL_MTSAFE && SETLOCALE_NULL_ONE_MTSAFE) /* musl libc, macOS, FreeBSD, NetBSD, OpenBSD, AIX, Haiku, Cygwin < 3.4.6 */ /* Use a lock, so that no two threads can invoke setlocale_null_unlocked at the same time. */ /* Prohibit renaming this symbol. */ # undef gl_get_setlocale_null_lock # if defined _WIN32 && !defined __CYGWIN__ extern __declspec(dllimport) CRITICAL_SECTION *gl_get_setlocale_null_lock (void); static int setlocale_null_with_lock (int category, char *buf, size_t bufsize) { CRITICAL_SECTION *lock = gl_get_setlocale_null_lock (); int ret; EnterCriticalSection (lock); ret = setlocale_null_unlocked (category, buf, bufsize); LeaveCriticalSection (lock); return ret; } # elif HAVE_PTHREAD_API /* musl libc, macOS, FreeBSD, NetBSD, OpenBSD, AIX, Haiku, Cygwin < 3.4.6 */ extern # if defined _WIN32 || defined __CYGWIN__ __declspec(dllimport) # endif pthread_mutex_t *gl_get_setlocale_null_lock (void); # if HAVE_WEAK_SYMBOLS /* musl libc, FreeBSD, NetBSD, OpenBSD, Haiku */ /* Avoid the need to link with '-lpthread'. */ # pragma weak pthread_mutex_lock # pragma weak pthread_mutex_unlock /* Determine whether libpthread is in use. */ # pragma weak pthread_mutexattr_gettype /* See the comments in lock.h. */ # define pthread_in_use() \ (pthread_mutexattr_gettype != NULL || c11_threads_in_use ()) # else # define pthread_in_use() 1 # endif static int setlocale_null_with_lock (int category, char *buf, size_t bufsize) { if (pthread_in_use()) { pthread_mutex_t *lock = gl_get_setlocale_null_lock (); int ret; if (pthread_mutex_lock (lock)) abort (); ret = setlocale_null_unlocked (category, buf, bufsize); if (pthread_mutex_unlock (lock)) abort (); return ret; } else return setlocale_null_unlocked (category, buf, bufsize); } # elif HAVE_THREADS_H extern mtx_t *gl_get_setlocale_null_lock (void); static int setlocale_null_with_lock (int category, char *buf, size_t bufsize) { mtx_t *lock = gl_get_setlocale_null_lock (); int ret; if (mtx_lock (lock) != thrd_success) abort (); ret = setlocale_null_unlocked (category, buf, bufsize); if (mtx_unlock (lock) != thrd_success) abort (); return ret; } # endif #endif int setlocale_null_r (int category, char *buf, size_t bufsize) { #if SETLOCALE_NULL_ALL_MTSAFE # if SETLOCALE_NULL_ONE_MTSAFE return setlocale_null_unlocked (category, buf, bufsize); # else if (category == LC_ALL) return setlocale_null_unlocked (category, buf, bufsize); else return setlocale_null_with_lock (category, buf, bufsize); # endif #else # if SETLOCALE_NULL_ONE_MTSAFE if (category == LC_ALL) return setlocale_null_with_lock (category, buf, bufsize); else return setlocale_null_unlocked (category, buf, bufsize); # else return setlocale_null_with_lock (category, buf, bufsize); # endif #endif } const char * setlocale_null (int category) { #if SETLOCALE_NULL_ALL_MTSAFE && SETLOCALE_NULL_ONE_MTSAFE return setlocale_null_androidfix (category); #else /* This call must be multithread-safe. To achieve this without using thread-local storage: 1. We use a specific static buffer for each possible CATEGORY argument. So that different threads can call setlocale_mtsafe with different CATEGORY arguments, without interfering. 2. We use a simple strcpy or memcpy to fill this static buffer. Filling it through, for example, strcpy + strcat would not be guaranteed to leave the buffer's contents intact if another thread is currently accessing it. If necessary, the contents is first assembled in a stack-allocated buffer. */ if (category == LC_ALL) { # if SETLOCALE_NULL_ALL_MTSAFE return setlocale_null_androidfix (LC_ALL); # else char buf[SETLOCALE_NULL_ALL_MAX]; static char resultbuf[SETLOCALE_NULL_ALL_MAX]; if (setlocale_null_r (LC_ALL, buf, sizeof (buf))) return "C"; strcpy (resultbuf, buf); return resultbuf; # endif } else { # if SETLOCALE_NULL_ONE_MTSAFE return setlocale_null_androidfix (category); # else enum { LC_CTYPE_INDEX, LC_NUMERIC_INDEX, LC_TIME_INDEX, LC_COLLATE_INDEX, LC_MONETARY_INDEX, LC_MESSAGES_INDEX, # ifdef LC_PAPER LC_PAPER_INDEX, # endif # ifdef LC_NAME LC_NAME_INDEX, # endif # ifdef LC_ADDRESS LC_ADDRESS_INDEX, # endif # ifdef LC_TELEPHONE LC_TELEPHONE_INDEX, # endif # ifdef LC_MEASUREMENT LC_MEASUREMENT_INDEX, # endif # ifdef LC_IDENTIFICATION LC_IDENTIFICATION_INDEX, # endif LC_INDICES_COUNT } i; char buf[SETLOCALE_NULL_MAX]; static char resultbuf[LC_INDICES_COUNT][SETLOCALE_NULL_MAX]; int err; err = setlocale_null_r (category, buf, sizeof (buf)); if (err == EINVAL) return NULL; if (err) return "C"; switch (category) { case LC_CTYPE: i = LC_CTYPE_INDEX; break; case LC_NUMERIC: i = LC_NUMERIC_INDEX; break; case LC_TIME: i = LC_TIME_INDEX; break; case LC_COLLATE: i = LC_COLLATE_INDEX; break; case LC_MONETARY: i = LC_MONETARY_INDEX; break; case LC_MESSAGES: i = LC_MESSAGES_INDEX; break; # ifdef LC_PAPER case LC_PAPER: i = LC_PAPER_INDEX; break; # endif # ifdef LC_NAME case LC_NAME: i = LC_NAME_INDEX; break; # endif # ifdef LC_ADDRESS case LC_ADDRESS: i = LC_ADDRESS_INDEX; break; # endif # ifdef LC_TELEPHONE case LC_TELEPHONE: i = LC_TELEPHONE_INDEX; break; # endif # ifdef LC_MEASUREMENT case LC_MEASUREMENT: i = LC_MEASUREMENT_INDEX; break; # endif # ifdef LC_IDENTIFICATION case LC_IDENTIFICATION: i = LC_IDENTIFICATION_INDEX; break; # endif default: /* If you get here, a #ifdef LC_xxx is missing. */ abort (); } strcpy (resultbuf[i], buf); return resultbuf[i]; # endif } #endif } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/getdelim.c�����������������������������������������������������������������������������0000644�0001750�0001750�00000007443�14436425345�015077� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* getdelim.c --- Implementation of replacement getdelim function. Copyright (C) 1994, 1996-1998, 2001, 2003, 2005-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Ported from glibc by Simon Josefsson. */ /* Don't use __attribute__ __nonnull__ in this compilation unit. Otherwise gcc optimizes away the lineptr == NULL || n == NULL || fp == NULL tests below. */ #define _GL_ARG_NONNULL(params) #include <config.h> #include <stdio.h> #include <limits.h> #include <stdint.h> #include <stdlib.h> #include <errno.h> #if USE_UNLOCKED_IO # include "unlocked-io.h" # define getc_maybe_unlocked(fp) getc(fp) #elif !HAVE_FLOCKFILE || !HAVE_FUNLOCKFILE || !HAVE_DECL_GETC_UNLOCKED # undef flockfile # undef funlockfile # define flockfile(x) ((void) 0) # define funlockfile(x) ((void) 0) # define getc_maybe_unlocked(fp) getc(fp) #else # define getc_maybe_unlocked(fp) getc_unlocked(fp) #endif static void alloc_failed (void) { #if defined _WIN32 && ! defined __CYGWIN__ /* Avoid errno problem without using the realloc module; see: https://lists.gnu.org/r/bug-gnulib/2016-08/msg00025.html */ errno = ENOMEM; #endif } /* Read up to (and including) a DELIMITER from FP into *LINEPTR (and NUL-terminate it). *LINEPTR is a pointer returned from malloc (or NULL), pointing to *N characters of space. It is realloc'ed as necessary. Returns the number of characters read (not including the null terminator), or -1 on error or EOF. */ ssize_t getdelim (char **lineptr, size_t *n, int delimiter, FILE *fp) { ssize_t result; size_t cur_len = 0; if (lineptr == NULL || n == NULL || fp == NULL) { errno = EINVAL; return -1; } flockfile (fp); if (*lineptr == NULL || *n == 0) { char *new_lineptr; *n = 120; new_lineptr = (char *) realloc (*lineptr, *n); if (new_lineptr == NULL) { alloc_failed (); result = -1; goto unlock_return; } *lineptr = new_lineptr; } for (;;) { int i; i = getc_maybe_unlocked (fp); if (i == EOF) { result = -1; break; } /* Make enough space for len+1 (for final NUL) bytes. */ if (cur_len + 1 >= *n) { size_t needed_max = SSIZE_MAX < SIZE_MAX ? (size_t) SSIZE_MAX + 1 : SIZE_MAX; size_t needed = 2 * *n + 1; /* Be generous. */ char *new_lineptr; if (needed_max < needed) needed = needed_max; if (cur_len + 1 >= needed) { result = -1; errno = EOVERFLOW; goto unlock_return; } new_lineptr = (char *) realloc (*lineptr, needed); if (new_lineptr == NULL) { alloc_failed (); result = -1; goto unlock_return; } *lineptr = new_lineptr; *n = needed; } (*lineptr)[cur_len] = i; cur_len++; if (i == delimiter) break; } (*lineptr)[cur_len] = '\0'; result = cur_len ? cur_len : result; unlock_return: funlockfile (fp); /* doesn't set errno */ return result; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/realloc.c������������������������������������������������������������������������������0000644�0001750�0001750�00000003131�14436425346�014715� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* realloc() function that is glibc compatible. Copyright (C) 1997, 2003-2004, 2006-2007, 2009-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* written by Jim Meyering and Bruno Haible */ #include <config.h> #include <stdlib.h> #include <errno.h> #include "xalloc-oversized.h" /* Call the system's realloc below. This file does not define _GL_USE_STDLIB_ALLOC because it needs Gnulib's malloc if present. */ #undef realloc /* Change the size of an allocated block of memory P to N bytes, with error checking. If P is NULL, use malloc. Otherwise if N is zero, free P and return NULL. */ void * rpl_realloc (void *p, size_t n) { if (p == NULL) return malloc (n); if (n == 0) { free (p); return NULL; } if (xalloc_oversized (n, 1)) { errno = ENOMEM; return NULL; } void *result = realloc (p, n); #if !HAVE_MALLOC_POSIX if (result == NULL) errno = ENOMEM; #endif return result; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/offtostr.c�����������������������������������������������������������������������������0000644�0001750�0001750�00000001513�14436425346�015144� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert 'off_t' integer to printable string. Copyright (C) 2004-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #define anytostr offtostr #define inttype off_t #include "anytostr.c" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/gettext.h������������������������������������������������������������������������������0000644�0001750�0001750�00000025015�14436425345�014771� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convenience header for conditional use of GNU <libintl.h>. Copyright (C) 1995-1998, 2000-2002, 2004-2006, 2009-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _LIBGETTEXT_H #define _LIBGETTEXT_H 1 /* NLS can be disabled through the configure --disable-nls option or through "#define ENABLE NLS 0" before including this file. */ #if defined ENABLE_NLS && 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 && !defined __UCLIBC__) || _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 /* Prefer gnulib's setlocale override over libintl's setlocale override. */ #ifdef GNULIB_defined_setlocale # undef setlocale # define setlocale rpl_setlocale #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) #if defined __GNUC__ || defined __clang__ __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; } #if defined __GNUC__ || defined __clang__ __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> /* GNULIB_NO_VLA can be defined to disable use of VLAs even if supported. This relates to the -Wvla and -Wvla-larger-than warnings, enabled in the default GCC many warnings set. This allows programs to disable use of VLAs, which may be unintended, or may be awkward to support portably, or may have security implications due to non-deterministic stack usage. */ #if (!defined GNULIB_NO_VLA \ && defined __STDC_VERSION__ && 199901L <= __STDC_VERSION__ \ && !defined __STDC_NO_VLA__) # define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS 1 #else # define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS 0 #endif #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) #if defined __GNUC__ || defined __clang__ __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 { int found_translation; 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); found_translation = (translation != msg_ctxt_id); #if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS if (msg_ctxt_id != buf) free (msg_ctxt_id); #endif if (found_translation) 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) #if defined __GNUC__ || defined __clang__ __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 { int found_translation; 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); found_translation = !(translation == msg_ctxt_id || translation == msgid_plural); #if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS if (msg_ctxt_id != buf) free (msg_ctxt_id); #endif if (found_translation) return translation; } return (n == 1 ? msgid : msgid_plural); } #endif /* _LIBGETTEXT_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/inttostr.c�����������������������������������������������������������������������������0000644�0001750�0001750�00000001507�14436425345�015166� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert 'int' integer to printable string. Copyright (C) 2004-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #define anytostr inttostr #define inttype int #include "anytostr.c" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/regex_internal.h�����������������������������������������������������������������������0000644�0001750�0001750�00000055536�14436425346�016327� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Extended regular expression matching and search library. Copyright (C) 2002-2023 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Isamu Hasegawa <isamu@yamato.ibm.com>. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ #ifndef _REGEX_INTERNAL_H #define _REGEX_INTERNAL_H 1 #include <ctype.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <langinfo.h> #include <locale.h> #include <wchar.h> #include <wctype.h> #include <stdckdint.h> #include <stdint.h> #ifndef _LIBC # include <dynarray.h> #endif #include <intprops.h> #include <verify.h> #if defined DEBUG && DEBUG != 0 # include <assert.h> # define DEBUG_ASSERT(x) assert (x) #else # define DEBUG_ASSERT(x) assume (x) #endif #ifdef _LIBC # include <libc-lock.h> # define lock_define(name) __libc_lock_define (, name) # define lock_init(lock) (__libc_lock_init (lock), 0) # define lock_fini(lock) ((void) 0) # define lock_lock(lock) __libc_lock_lock (lock) # define lock_unlock(lock) __libc_lock_unlock (lock) #elif defined GNULIB_LOCK && !defined GNULIB_REGEX_SINGLE_THREAD # include "glthread/lock.h" # define lock_define(name) gl_lock_define (, name) # define lock_init(lock) glthread_lock_init (&(lock)) # define lock_fini(lock) glthread_lock_destroy (&(lock)) # define lock_lock(lock) glthread_lock_lock (&(lock)) # define lock_unlock(lock) glthread_lock_unlock (&(lock)) #elif defined GNULIB_PTHREAD && !defined GNULIB_REGEX_SINGLE_THREAD # include <pthread.h> # define lock_define(name) pthread_mutex_t name; # define lock_init(lock) pthread_mutex_init (&(lock), 0) # define lock_fini(lock) pthread_mutex_destroy (&(lock)) # define lock_lock(lock) pthread_mutex_lock (&(lock)) # define lock_unlock(lock) pthread_mutex_unlock (&(lock)) #else # define lock_define(name) # define lock_init(lock) 0 # define lock_fini(lock) ((void) 0) /* The 'dfa' avoids an "unused variable 'dfa'" warning from GCC. */ # define lock_lock(lock) ((void) dfa) # define lock_unlock(lock) ((void) 0) #endif /* In case that the system doesn't have isblank(). */ #if !defined _LIBC && ! (defined isblank || (HAVE_ISBLANK && HAVE_DECL_ISBLANK)) # define isblank(ch) ((ch) == ' ' || (ch) == '\t') #endif /* regex code assumes isascii has its usual numeric meaning, even if the portable character set uses EBCDIC encoding, and even if wint_t is wider than int. */ #ifndef _LIBC # undef isascii # define isascii(c) (((c) & ~0x7f) == 0) #endif #ifdef _LIBC # ifndef _RE_DEFINE_LOCALE_FUNCTIONS # define _RE_DEFINE_LOCALE_FUNCTIONS 1 # include <locale/localeinfo.h> # include <locale/coll-lookup.h> # endif #endif /* This is for other GNU distributions with internationalized messages. */ #if (HAVE_LIBINTL_H && ENABLE_NLS) || defined _LIBC # include <libintl.h> # ifdef _LIBC # undef gettext # define gettext(msgid) \ __dcgettext (_libc_intl_domainname, msgid, LC_MESSAGES) # endif #else # undef gettext # define gettext(msgid) (msgid) #endif #ifndef gettext_noop /* This define is so xgettext can find the internationalizable strings. */ # define gettext_noop(String) String #endif /* Number of ASCII characters. */ #define ASCII_CHARS 0x80 /* Number of single byte characters. */ #define SBC_MAX (UCHAR_MAX + 1) #define COLL_ELEM_LEN_MAX 8 /* The character which represents newline. */ #define NEWLINE_CHAR '\n' #define WIDE_NEWLINE_CHAR L'\n' /* Rename to standard API for using out of glibc. */ #ifndef _LIBC # undef __wctype # undef __iswalnum # undef __iswctype # undef __towlower # undef __towupper # define __wctype wctype # define __iswalnum iswalnum # define __iswctype iswctype # define __towlower towlower # define __towupper towupper # define __btowc btowc # define __mbrtowc mbrtowc # define __wcrtomb wcrtomb # define __regfree regfree #endif /* not _LIBC */ /* Types related to integers. Unless protected by #ifdef _LIBC, the regex code should avoid exact-width types like int32_t and uint64_t as some non-GCC platforms lack them, an issue when this code is used in Gnulib. */ #ifndef ULONG_WIDTH # define ULONG_WIDTH REGEX_UINTEGER_WIDTH (ULONG_MAX) /* The number of usable bits in an unsigned integer type with maximum value MAX, as an int expression suitable in #if. Cover all known practical hosts. This implementation exploits the fact that MAX is 1 less than a power of 2, and merely counts the number of 1 bits in MAX; "COBn" means "count the number of 1 bits in the low-order n bits". */ # define REGEX_UINTEGER_WIDTH(max) REGEX_COB128 (max) # define REGEX_COB128(n) (REGEX_COB64 ((n) >> 31 >> 31 >> 2) + REGEX_COB64 (n)) # define REGEX_COB64(n) (REGEX_COB32 ((n) >> 31 >> 1) + REGEX_COB32 (n)) # define REGEX_COB32(n) (REGEX_COB16 ((n) >> 16) + REGEX_COB16 (n)) # define REGEX_COB16(n) (REGEX_COB8 ((n) >> 8) + REGEX_COB8 (n)) # define REGEX_COB8(n) (REGEX_COB4 ((n) >> 4) + REGEX_COB4 (n)) # define REGEX_COB4(n) (!!((n) & 8) + !!((n) & 4) + !!((n) & 2) + ((n) & 1)) # if ULONG_MAX / 2 + 1 != 1ul << (ULONG_WIDTH - 1) # error "ULONG_MAX out of range" # endif #endif /* The type of indexes into strings. This is signed, not size_t, since the API requires indexes to fit in regoff_t anyway, and using signed integers makes the code a bit smaller and presumably faster. The traditional GNU regex implementation uses int for indexes. The POSIX-compatible implementation uses a possibly-wider type. The name 'Idx' is three letters to minimize the hassle of reindenting a lot of regex code that formerly used 'int'. */ typedef regoff_t Idx; #ifdef _REGEX_LARGE_OFFSETS # define IDX_MAX SSIZE_MAX #else # define IDX_MAX INT_MAX #endif /* A hash value, suitable for computing hash tables. */ typedef __re_size_t re_hashval_t; /* An integer used to represent a set of bits. It must be unsigned, and must be at least as wide as unsigned int. */ typedef unsigned long int bitset_word_t; /* All bits set in a bitset_word_t. */ #define BITSET_WORD_MAX ULONG_MAX /* Number of bits in a bitset_word_t. */ #define BITSET_WORD_BITS ULONG_WIDTH /* Number of bitset_word_t values in a bitset_t. */ #define BITSET_WORDS ((SBC_MAX + BITSET_WORD_BITS - 1) / BITSET_WORD_BITS) typedef bitset_word_t bitset_t[BITSET_WORDS]; typedef bitset_word_t *re_bitset_ptr_t; typedef const bitset_word_t *re_const_bitset_ptr_t; #define PREV_WORD_CONSTRAINT 0x0001 #define PREV_NOTWORD_CONSTRAINT 0x0002 #define NEXT_WORD_CONSTRAINT 0x0004 #define NEXT_NOTWORD_CONSTRAINT 0x0008 #define PREV_NEWLINE_CONSTRAINT 0x0010 #define NEXT_NEWLINE_CONSTRAINT 0x0020 #define PREV_BEGBUF_CONSTRAINT 0x0040 #define NEXT_ENDBUF_CONSTRAINT 0x0080 #define WORD_DELIM_CONSTRAINT 0x0100 #define NOT_WORD_DELIM_CONSTRAINT 0x0200 typedef enum { INSIDE_WORD = PREV_WORD_CONSTRAINT | NEXT_WORD_CONSTRAINT, WORD_FIRST = PREV_NOTWORD_CONSTRAINT | NEXT_WORD_CONSTRAINT, WORD_LAST = PREV_WORD_CONSTRAINT | NEXT_NOTWORD_CONSTRAINT, INSIDE_NOTWORD = PREV_NOTWORD_CONSTRAINT | NEXT_NOTWORD_CONSTRAINT, LINE_FIRST = PREV_NEWLINE_CONSTRAINT, LINE_LAST = NEXT_NEWLINE_CONSTRAINT, BUF_FIRST = PREV_BEGBUF_CONSTRAINT, BUF_LAST = NEXT_ENDBUF_CONSTRAINT, WORD_DELIM = WORD_DELIM_CONSTRAINT, NOT_WORD_DELIM = NOT_WORD_DELIM_CONSTRAINT } re_context_type; typedef struct { Idx alloc; Idx nelem; Idx *elems; } re_node_set; typedef enum { NON_TYPE = 0, /* Node type, These are used by token, node, tree. */ CHARACTER = 1, END_OF_RE = 2, SIMPLE_BRACKET = 3, OP_BACK_REF = 4, OP_PERIOD = 5, COMPLEX_BRACKET = 6, OP_UTF8_PERIOD = 7, /* We define EPSILON_BIT as a macro so that OP_OPEN_SUBEXP is used when the debugger shows values of this enum type. */ #define EPSILON_BIT 8 OP_OPEN_SUBEXP = EPSILON_BIT | 0, OP_CLOSE_SUBEXP = EPSILON_BIT | 1, OP_ALT = EPSILON_BIT | 2, OP_DUP_ASTERISK = EPSILON_BIT | 3, ANCHOR = EPSILON_BIT | 4, /* Tree type, these are used only by tree. */ CONCAT = 16, SUBEXP = 17, /* Token type, these are used only by token. */ OP_DUP_PLUS = 18, OP_DUP_QUESTION, OP_OPEN_BRACKET, OP_CLOSE_BRACKET, OP_CHARSET_RANGE, OP_OPEN_DUP_NUM, OP_CLOSE_DUP_NUM, OP_NON_MATCH_LIST, OP_OPEN_COLL_ELEM, OP_CLOSE_COLL_ELEM, OP_OPEN_EQUIV_CLASS, OP_CLOSE_EQUIV_CLASS, OP_OPEN_CHAR_CLASS, OP_CLOSE_CHAR_CLASS, OP_WORD, OP_NOTWORD, OP_SPACE, OP_NOTSPACE, BACK_SLASH } re_token_type_t; typedef struct { /* Multibyte characters. */ wchar_t *mbchars; #ifdef _LIBC /* Collating symbols. */ int32_t *coll_syms; #endif #ifdef _LIBC /* Equivalence classes. */ int32_t *equiv_classes; #endif /* Range expressions. */ #ifdef _LIBC uint32_t *range_starts; uint32_t *range_ends; #else wchar_t *range_starts; wchar_t *range_ends; #endif /* Character classes. */ wctype_t *char_classes; /* If this character set is the non-matching list. */ unsigned int non_match : 1; /* # of multibyte characters. */ Idx nmbchars; /* # of collating symbols. */ Idx ncoll_syms; /* # of equivalence classes. */ Idx nequiv_classes; /* # of range expressions. */ Idx nranges; /* # of character classes. */ Idx nchar_classes; } re_charset_t; typedef struct { union { unsigned char c; /* for CHARACTER */ re_bitset_ptr_t sbcset; /* for SIMPLE_BRACKET */ re_charset_t *mbcset; /* for COMPLEX_BRACKET */ Idx idx; /* for BACK_REF */ re_context_type ctx_type; /* for ANCHOR */ } opr; #if (__GNUC__ >= 2 || defined __clang__) && !defined __STRICT_ANSI__ re_token_type_t type : 8; #else re_token_type_t type; #endif unsigned int constraint : 10; /* context constraint */ unsigned int duplicated : 1; unsigned int opt_subexp : 1; unsigned int accept_mb : 1; /* These 2 bits can be moved into the union if needed (e.g. if running out of bits; move opr.c to opr.c.c and move the flags to opr.c.flags). */ unsigned int mb_partial : 1; unsigned int word_char : 1; } re_token_t; #define IS_EPSILON_NODE(type) ((type) & EPSILON_BIT) struct re_string_t { /* Indicate the raw buffer which is the original string passed as an argument of regexec(), re_search(), etc.. */ const unsigned char *raw_mbs; /* Store the multibyte string. In case of "case insensitive mode" like REG_ICASE, upper cases of the string are stored, otherwise MBS points the same address that RAW_MBS points. */ unsigned char *mbs; /* Store the wide character string which is corresponding to MBS. */ wint_t *wcs; Idx *offsets; mbstate_t cur_state; /* Index in RAW_MBS. Each character mbs[i] corresponds to raw_mbs[raw_mbs_idx + i]. */ Idx raw_mbs_idx; /* The length of the valid characters in the buffers. */ Idx valid_len; /* The corresponding number of bytes in raw_mbs array. */ Idx valid_raw_len; /* The length of the buffers MBS and WCS. */ Idx bufs_len; /* The index in MBS, which is updated by re_string_fetch_byte. */ Idx cur_idx; /* length of RAW_MBS array. */ Idx raw_len; /* This is RAW_LEN - RAW_MBS_IDX + VALID_LEN - VALID_RAW_LEN. */ Idx len; /* End of the buffer may be shorter than its length in the cases such as re_match_2, re_search_2. Then, we use STOP for end of the buffer instead of LEN. */ Idx raw_stop; /* This is RAW_STOP - RAW_MBS_IDX adjusted through OFFSETS. */ Idx stop; /* The context of mbs[0]. We store the context independently, since the context of mbs[0] may be different from raw_mbs[0], which is the beginning of the input string. */ unsigned int tip_context; /* The translation passed as a part of an argument of re_compile_pattern. */ RE_TRANSLATE_TYPE trans; /* Copy of re_dfa_t's word_char. */ re_const_bitset_ptr_t word_char; /* true if REG_ICASE. */ unsigned char icase; unsigned char is_utf8; unsigned char map_notascii; unsigned char mbs_allocated; unsigned char offsets_needed; unsigned char newline_anchor; unsigned char word_ops_used; int mb_cur_max; }; typedef struct re_string_t re_string_t; struct re_dfa_t; typedef struct re_dfa_t re_dfa_t; #ifndef _LIBC # define IS_IN(libc) false #endif #define re_string_peek_byte(pstr, offset) \ ((pstr)->mbs[(pstr)->cur_idx + offset]) #define re_string_fetch_byte(pstr) \ ((pstr)->mbs[(pstr)->cur_idx++]) #define re_string_first_byte(pstr, idx) \ ((idx) == (pstr)->valid_len || (pstr)->wcs[idx] != WEOF) #define re_string_is_single_byte_char(pstr, idx) \ ((pstr)->wcs[idx] != WEOF && ((pstr)->valid_len == (idx) + 1 \ || (pstr)->wcs[(idx) + 1] != WEOF)) #define re_string_eoi(pstr) ((pstr)->stop <= (pstr)->cur_idx) #define re_string_cur_idx(pstr) ((pstr)->cur_idx) #define re_string_get_buffer(pstr) ((pstr)->mbs) #define re_string_length(pstr) ((pstr)->len) #define re_string_byte_at(pstr,idx) ((pstr)->mbs[idx]) #define re_string_skip_bytes(pstr,idx) ((pstr)->cur_idx += (idx)) #define re_string_set_index(pstr,idx) ((pstr)->cur_idx = (idx)) #ifdef _LIBC # define MALLOC_0_IS_NONNULL 1 #elif !defined MALLOC_0_IS_NONNULL # define MALLOC_0_IS_NONNULL 0 #endif #ifndef MAX # define MAX(a,b) ((a) < (b) ? (b) : (a)) #endif #ifndef MIN # define MIN(a,b) ((a) < (b) ? (a) : (b)) #endif #define re_malloc(t,n) ((t *) malloc ((n) * sizeof (t))) #define re_realloc(p,t,n) ((t *) realloc (p, (n) * sizeof (t))) #define re_free(p) free (p) struct bin_tree_t { struct bin_tree_t *parent; struct bin_tree_t *left; struct bin_tree_t *right; struct bin_tree_t *first; struct bin_tree_t *next; re_token_t token; /* 'node_idx' is the index in dfa->nodes, if 'type' == 0. Otherwise 'type' indicate the type of this node. */ Idx node_idx; }; typedef struct bin_tree_t bin_tree_t; #define BIN_TREE_STORAGE_SIZE \ ((1024 - sizeof (void *)) / sizeof (bin_tree_t)) struct bin_tree_storage_t { struct bin_tree_storage_t *next; bin_tree_t data[BIN_TREE_STORAGE_SIZE]; }; typedef struct bin_tree_storage_t bin_tree_storage_t; #define CONTEXT_WORD 1 #define CONTEXT_NEWLINE (CONTEXT_WORD << 1) #define CONTEXT_BEGBUF (CONTEXT_NEWLINE << 1) #define CONTEXT_ENDBUF (CONTEXT_BEGBUF << 1) #define IS_WORD_CONTEXT(c) ((c) & CONTEXT_WORD) #define IS_NEWLINE_CONTEXT(c) ((c) & CONTEXT_NEWLINE) #define IS_BEGBUF_CONTEXT(c) ((c) & CONTEXT_BEGBUF) #define IS_ENDBUF_CONTEXT(c) ((c) & CONTEXT_ENDBUF) #define IS_ORDINARY_CONTEXT(c) ((c) == 0) #define IS_WORD_CHAR(ch) (isalnum (ch) || (ch) == '_') #define IS_NEWLINE(ch) ((ch) == NEWLINE_CHAR) #define IS_WIDE_WORD_CHAR(ch) (__iswalnum (ch) || (ch) == L'_') #define IS_WIDE_NEWLINE(ch) ((ch) == WIDE_NEWLINE_CHAR) #define NOT_SATISFY_PREV_CONSTRAINT(constraint,context) \ ((((constraint) & PREV_WORD_CONSTRAINT) && !IS_WORD_CONTEXT (context)) \ || ((constraint & PREV_NOTWORD_CONSTRAINT) && IS_WORD_CONTEXT (context)) \ || ((constraint & PREV_NEWLINE_CONSTRAINT) && !IS_NEWLINE_CONTEXT (context))\ || ((constraint & PREV_BEGBUF_CONSTRAINT) && !IS_BEGBUF_CONTEXT (context))) #define NOT_SATISFY_NEXT_CONSTRAINT(constraint,context) \ ((((constraint) & NEXT_WORD_CONSTRAINT) && !IS_WORD_CONTEXT (context)) \ || (((constraint) & NEXT_NOTWORD_CONSTRAINT) && IS_WORD_CONTEXT (context)) \ || (((constraint) & NEXT_NEWLINE_CONSTRAINT) && !IS_NEWLINE_CONTEXT (context)) \ || (((constraint) & NEXT_ENDBUF_CONSTRAINT) && !IS_ENDBUF_CONTEXT (context))) struct re_dfastate_t { re_hashval_t hash; re_node_set nodes; re_node_set non_eps_nodes; re_node_set inveclosure; re_node_set *entrance_nodes; struct re_dfastate_t **trtable, **word_trtable; unsigned int context : 4; unsigned int halt : 1; /* If this state can accept "multi byte". Note that we refer to multibyte characters, and multi character collating elements as "multi byte". */ unsigned int accept_mb : 1; /* If this state has backreference node(s). */ unsigned int has_backref : 1; unsigned int has_constraint : 1; }; typedef struct re_dfastate_t re_dfastate_t; struct re_state_table_entry { Idx num; Idx alloc; re_dfastate_t **array; }; /* Array type used in re_sub_match_last_t and re_sub_match_top_t. */ typedef struct { Idx next_idx; Idx alloc; re_dfastate_t **array; } state_array_t; /* Store information about the node NODE whose type is OP_CLOSE_SUBEXP. */ typedef struct { Idx node; Idx str_idx; /* The position NODE match at. */ state_array_t path; } re_sub_match_last_t; /* Store information about the node NODE whose type is OP_OPEN_SUBEXP. And information about the node, whose type is OP_CLOSE_SUBEXP, corresponding to NODE is stored in LASTS. */ typedef struct { Idx str_idx; Idx node; state_array_t *path; Idx alasts; /* Allocation size of LASTS. */ Idx nlasts; /* The number of LASTS. */ re_sub_match_last_t **lasts; } re_sub_match_top_t; struct re_backref_cache_entry { Idx node; Idx str_idx; Idx subexp_from; Idx subexp_to; bitset_word_t eps_reachable_subexps_map; char more; }; typedef struct { /* The string object corresponding to the input string. */ re_string_t input; const re_dfa_t *const dfa; /* EFLAGS of the argument of regexec. */ int eflags; /* Where the matching ends. */ Idx match_last; Idx last_node; /* The state log used by the matcher. */ re_dfastate_t **state_log; Idx state_log_top; /* Back reference cache. */ Idx nbkref_ents; Idx abkref_ents; struct re_backref_cache_entry *bkref_ents; int max_mb_elem_len; Idx nsub_tops; Idx asub_tops; re_sub_match_top_t **sub_tops; } re_match_context_t; typedef struct { re_dfastate_t **sifted_states; re_dfastate_t **limited_states; Idx last_node; Idx last_str_idx; re_node_set limits; } re_sift_context_t; struct re_fail_stack_ent_t { Idx idx; Idx node; regmatch_t *regs; re_node_set eps_via_nodes; }; struct re_fail_stack_t { Idx num; Idx alloc; struct re_fail_stack_ent_t *stack; }; struct re_dfa_t { re_token_t *nodes; size_t nodes_alloc; size_t nodes_len; Idx *nexts; Idx *org_indices; re_node_set *edests; re_node_set *eclosures; re_node_set *inveclosures; struct re_state_table_entry *state_table; re_dfastate_t *init_state; re_dfastate_t *init_state_word; re_dfastate_t *init_state_nl; re_dfastate_t *init_state_begbuf; bin_tree_t *str_tree; bin_tree_storage_t *str_tree_storage; re_bitset_ptr_t sb_char; int str_tree_storage_idx; /* number of subexpressions 're_nsub' is in regex_t. */ re_hashval_t state_hash_mask; Idx init_node; Idx nbackref; /* The number of backreference in this dfa. */ /* Bitmap expressing which backreference is used. */ bitset_word_t used_bkref_map; bitset_word_t completed_bkref_map; unsigned int has_plural_match : 1; /* If this dfa has "multibyte node", which is a backreference or a node which can accept multibyte character or multi character collating element. */ unsigned int has_mb_node : 1; unsigned int is_utf8 : 1; unsigned int map_notascii : 1; unsigned int word_ops_used : 1; int mb_cur_max; bitset_t word_char; reg_syntax_t syntax; Idx *subexp_map; #ifdef DEBUG char* re_str; #endif lock_define (lock) }; #define re_node_set_init_empty(set) memset (set, '\0', sizeof (re_node_set)) #define re_node_set_remove(set,id) \ (re_node_set_remove_at (set, re_node_set_contains (set, id) - 1)) #define re_node_set_empty(p) ((p)->nelem = 0) #define re_node_set_free(set) re_free ((set)->elems) typedef enum { SB_CHAR, MB_CHAR, EQUIV_CLASS, COLL_SYM, CHAR_CLASS } bracket_elem_type; typedef struct { bracket_elem_type type; union { unsigned char ch; unsigned char *name; wchar_t wch; } opr; } bracket_elem_t; /* Functions for bitset_t operation. */ static inline void bitset_set (bitset_t set, Idx i) { set[i / BITSET_WORD_BITS] |= (bitset_word_t) 1 << i % BITSET_WORD_BITS; } static inline void bitset_clear (bitset_t set, Idx i) { set[i / BITSET_WORD_BITS] &= ~ ((bitset_word_t) 1 << i % BITSET_WORD_BITS); } static inline bool bitset_contain (const bitset_t set, Idx i) { return (set[i / BITSET_WORD_BITS] >> i % BITSET_WORD_BITS) & 1; } static inline void bitset_empty (bitset_t set) { memset (set, '\0', sizeof (bitset_t)); } static inline void bitset_set_all (bitset_t set) { memset (set, -1, sizeof (bitset_word_t) * (SBC_MAX / BITSET_WORD_BITS)); if (SBC_MAX % BITSET_WORD_BITS != 0) set[BITSET_WORDS - 1] = ((bitset_word_t) 1 << SBC_MAX % BITSET_WORD_BITS) - 1; } static inline void bitset_copy (bitset_t dest, const bitset_t src) { memcpy (dest, src, sizeof (bitset_t)); } static inline void bitset_not (bitset_t set) { int bitset_i; for (bitset_i = 0; bitset_i < SBC_MAX / BITSET_WORD_BITS; ++bitset_i) set[bitset_i] = ~set[bitset_i]; if (SBC_MAX % BITSET_WORD_BITS != 0) set[BITSET_WORDS - 1] = ((((bitset_word_t) 1 << SBC_MAX % BITSET_WORD_BITS) - 1) & ~set[BITSET_WORDS - 1]); } static inline void bitset_merge (bitset_t dest, const bitset_t src) { int bitset_i; for (bitset_i = 0; bitset_i < BITSET_WORDS; ++bitset_i) dest[bitset_i] |= src[bitset_i]; } static inline void bitset_mask (bitset_t dest, const bitset_t src) { int bitset_i; for (bitset_i = 0; bitset_i < BITSET_WORDS; ++bitset_i) dest[bitset_i] &= src[bitset_i]; } /* Functions for re_string. */ static int __attribute__ ((pure, unused)) re_string_char_size_at (const re_string_t *pstr, Idx idx) { int byte_idx; if (pstr->mb_cur_max == 1) return 1; for (byte_idx = 1; idx + byte_idx < pstr->valid_len; ++byte_idx) if (pstr->wcs[idx + byte_idx] != WEOF) break; return byte_idx; } static wint_t __attribute__ ((pure, unused)) re_string_wchar_at (const re_string_t *pstr, Idx idx) { if (pstr->mb_cur_max == 1) return (wint_t) pstr->mbs[idx]; return (wint_t) pstr->wcs[idx]; } #ifdef _LIBC # include <locale/weight.h> #endif static int __attribute__ ((pure, unused)) re_string_elem_size_at (const re_string_t *pstr, Idx idx) { #ifdef _LIBC const unsigned char *p, *extra; const int32_t *table, *indirect; uint_fast32_t nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); if (nrules != 0) { table = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEMB); extra = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_EXTRAMB); indirect = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_INDIRECTMB); p = pstr->mbs + idx; findidx (table, indirect, extra, &p, pstr->len - idx); return p - pstr->mbs - idx; } #endif /* _LIBC */ return 1; } #ifdef _LIBC # if __glibc_has_attribute (__fallthrough__) # define FALLTHROUGH __attribute__ ((__fallthrough__)) # else # define FALLTHROUGH ((void) 0) # endif #else # include "attribute.h" #endif #endif /* _REGEX_INTERNAL_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/free.c���������������������������������������������������������������������������������0000644�0001750�0001750�00000002772�14436425345�014226� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Make free() preserve errno. Copyright (C) 2003, 2006, 2009-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* written by Paul Eggert */ #include <config.h> /* Specification. */ #include <stdlib.h> /* A function definition is only needed if HAVE_FREE_POSIX is not defined. */ #if !HAVE_FREE_POSIX # include <errno.h> void rpl_free (void *p) # undef free { # if defined __GNUC__ && !defined __clang__ /* An invalid GCC optimization <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98396> would optimize away the assignments in the code below, when link-time optimization (LTO) is enabled. Make the code more complicated, so that GCC does not grok how to optimize it. */ int err[2]; err[0] = errno; err[1] = errno; errno = 0; free (p); errno = err[errno == 0]; # else int err = errno; free (p); errno = err; # endif } #endif ������rush-2.4/gnu/libc-config.h��������������������������������������������������������������������������0000644�0001750�0001750�00000014150�14436425346�015460� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* System definitions for code taken from the GNU C Library Copyright 2017-2023 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ /* Written by Paul Eggert. */ /* This is intended to be a good-enough substitute for glibc system macros like those defined in <sys/cdefs.h>, so that Gnulib code shared with glibc can do this as the first #include: #ifndef _LIBC # include <libc-config.h> #endif When compiled as part of glibc this is a no-op; when compiled as part of Gnulib this includes Gnulib's <config.h> and defines macros that glibc library code would normally assume. Note: This header file MUST NOT be included by public header files of Gnulib. */ #include <config.h> /* On glibc this includes <features.h> and <sys/cdefs.h> and #defines _FEATURES_H, __WORDSIZE, and __set_errno. On FreeBSD 11 and DragonFlyBSD 5.9 it includes <sys/cdefs.h> which defines __nonnull. Elsewhere it is harmless. */ #include <errno.h> /* From glibc <errno.h>. */ #ifndef __set_errno # define __set_errno(val) (errno = (val)) #endif /* From glibc <features.h>. */ #ifndef __GNUC_PREREQ # if defined __GNUC__ && defined __GNUC_MINOR__ # define __GNUC_PREREQ(maj, min) ((maj) < __GNUC__ + ((min) <= __GNUC_MINOR__)) # else # define __GNUC_PREREQ(maj, min) 0 # endif #endif #ifndef __glibc_clang_prereq # if defined __clang_major__ && defined __clang_minor__ # ifdef __apple_build_version__ /* Apple for some reason renumbers __clang_major__ and __clang_minor__. Gnulib code uses only __glibc_clang_prereq (3, 5); map it to 6000000 <= __apple_build_version__. Support for other calls to __glibc_clang_prereq can be added here as needed. */ # define __glibc_clang_prereq(maj, min) \ ((maj) == 3 && (min) == 5 ? 6000000 <= __apple_build_version__ : 0) # else # define __glibc_clang_prereq(maj, min) \ ((maj) < __clang_major__ + ((min) <= __clang_minor__)) # endif # else # define __glibc_clang_prereq(maj, min) 0 # endif #endif #ifndef __attribute_nonnull__ /* <sys/cdefs.h> either does not exist, or is too old for Gnulib. Prepare to include <cdefs.h>, which is Gnulib's version of a more-recent glibc <sys/cdefs.h>. */ /* Define _FEATURES_H so that <cdefs.h> does not include <features.h>. */ # ifndef _FEATURES_H # define _FEATURES_H 1 # endif /* Define __GNULIB_CDEFS so that <cdefs.h> does not attempt to include nonexistent files. */ # define __GNULIB_CDEFS /* Undef the macros unconditionally defined by our copy of glibc <sys/cdefs.h>, so that they do not clash with any system-defined versions. */ # undef _SYS_CDEFS_H # undef __ASMNAME # undef __ASMNAME2 # undef __BEGIN_DECLS # undef __CONCAT # undef __END_DECLS # undef __HAVE_GENERIC_SELECTION # undef __LDBL_COMPAT # undef __LDBL_REDIR # undef __LDBL_REDIR1 # undef __LDBL_REDIR1_DECL # undef __LDBL_REDIR1_NTH # undef __LDBL_REDIR2_DECL # undef __LDBL_REDIR_DECL # undef __LDBL_REDIR_NTH # undef __LEAF # undef __LEAF_ATTR # undef __NTH # undef __NTHNL # undef __REDIRECT # undef __REDIRECT_LDBL # undef __REDIRECT_NTH # undef __REDIRECT_NTHNL # undef __REDIRECT_NTH_LDBL # undef __STRING # undef __THROW # undef __THROWNL # undef __attr_access # undef __attr_access_none # undef __attr_dealloc # undef __attr_dealloc_free # undef __attribute__ # undef __attribute_alloc_align__ # undef __attribute_alloc_size__ # undef __attribute_artificial__ # undef __attribute_const__ # undef __attribute_deprecated__ # undef __attribute_deprecated_msg__ # undef __attribute_format_arg__ # undef __attribute_format_strfmon__ # undef __attribute_malloc__ # undef __attribute_maybe_unused__ # undef __attribute_noinline__ # undef __attribute_nonstring__ # undef __attribute_pure__ # undef __attribute_returns_twice__ # undef __attribute_used__ # undef __attribute_warn_unused_result__ # undef __errordecl # undef __extension__ # undef __extern_always_inline # undef __extern_inline # undef __flexarr # undef __fortified_attr_access # undef __fortify_function # undef __glibc_c99_flexarr_available # undef __glibc_has_attribute # undef __glibc_has_builtin # undef __glibc_has_extension # undef __glibc_likely # undef __glibc_macro_warning # undef __glibc_macro_warning1 # undef __glibc_unlikely # undef __inline # undef __ptr_t # undef __restrict # undef __restrict_arr # undef __va_arg_pack # undef __va_arg_pack_len # undef __warnattr # undef __wur # ifndef __GNULIB_CDEFS # undef __bos # undef __bos0 # undef __glibc_fortify # undef __glibc_fortify_n # undef __glibc_objsize # undef __glibc_objsize0 # undef __glibc_safe_len_cond # undef __glibc_safe_or_unknown_len # undef __glibc_unsafe_len # undef __glibc_unsigned_or_positive # endif /* Include our copy of glibc <sys/cdefs.h>. */ # include <cdefs.h> /* <cdefs.h> __inline is too pessimistic for non-GCC. */ # undef __inline # ifndef HAVE___INLINE # if 199901 <= __STDC_VERSION__ || defined inline # define __inline inline # else # define __inline # endif # endif #endif /* defined __glibc_likely */ /* A substitute for glibc <libc-symbols.h>, good enough for Gnulib. */ #define attribute_hidden #define libc_hidden_proto(name) #define libc_hidden_def(name) #define libc_hidden_weak(name) #define libc_hidden_ver(local, name) #define strong_alias(name, aliasname) #define weak_alias(name, aliasname) /* A substitute for glibc <shlib-compat.h>, good enough for Gnulib. */ #define SHLIB_COMPAT(lib, introduced, obsoleted) 0 #define compat_symbol(lib, local, symbol, version) extern int dummy #define versioned_symbol(lib, local, symbol, version) extern int dummy ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/windows-recmutex.c���������������������������������������������������������������������0000644�0001750�0001750�00000006542�14436425347�016632� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Plain recursive mutexes (native Windows implementation). Copyright (C) 2005-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2005. Based on GCC's gthr-win32.h. */ #include <config.h> /* Specification. */ #include "windows-recmutex.h" #include <errno.h> void glwthread_recmutex_init (glwthread_recmutex_t *mutex) { mutex->owner = 0; mutex->depth = 0; InitializeCriticalSection (&mutex->lock); mutex->guard.done = 1; } int glwthread_recmutex_lock (glwthread_recmutex_t *mutex) { if (!mutex->guard.done) { if (InterlockedIncrement (&mutex->guard.started) == 0) /* This thread is the first one to need this mutex. Initialize it. */ glwthread_recmutex_init (mutex); else { /* Don't let mutex->guard.started grow and wrap around. */ InterlockedDecrement (&mutex->guard.started); /* Yield the CPU while waiting for another thread to finish initializing this mutex. */ while (!mutex->guard.done) Sleep (0); } } { DWORD self = GetCurrentThreadId (); if (mutex->owner != self) { EnterCriticalSection (&mutex->lock); mutex->owner = self; } if (++(mutex->depth) == 0) /* wraparound? */ { mutex->depth--; return EAGAIN; } } return 0; } int glwthread_recmutex_trylock (glwthread_recmutex_t *mutex) { if (!mutex->guard.done) { if (InterlockedIncrement (&mutex->guard.started) == 0) /* This thread is the first one to need this mutex. Initialize it. */ glwthread_recmutex_init (mutex); else { /* Don't let mutex->guard.started grow and wrap around. */ InterlockedDecrement (&mutex->guard.started); /* Let another thread finish initializing this mutex, and let it also lock this mutex. */ return EBUSY; } } { DWORD self = GetCurrentThreadId (); if (mutex->owner != self) { if (!TryEnterCriticalSection (&mutex->lock)) return EBUSY; mutex->owner = self; } if (++(mutex->depth) == 0) /* wraparound? */ { mutex->depth--; return EAGAIN; } } return 0; } int glwthread_recmutex_unlock (glwthread_recmutex_t *mutex) { if (mutex->owner != GetCurrentThreadId ()) return EPERM; if (mutex->depth == 0) return EINVAL; if (--(mutex->depth) == 0) { mutex->owner = 0; LeaveCriticalSection (&mutex->lock); } return 0; } int glwthread_recmutex_destroy (glwthread_recmutex_t *mutex) { if (mutex->owner != 0) return EBUSY; DeleteCriticalSection (&mutex->lock); mutex->guard.done = 0; return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/unsetenv.c�����������������������������������������������������������������������������0000644�0001750�0001750�00000005514�14436425346�015152� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1992, 1995-2002, 2005-2023 Free Software Foundation, Inc. This file is part of the GNU C Library. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Don't use __attribute__ __nonnull__ in this compilation unit. Otherwise gcc optimizes away the name == NULL test below. */ #define _GL_ARG_NONNULL(params) #include <config.h> /* Specification. */ #include <stdlib.h> #include <errno.h> #if !_LIBC # define __set_errno(ev) ((errno) = (ev)) #endif #include <string.h> #include <unistd.h> #if !_LIBC # define __environ environ #endif #if _LIBC /* This lock protects against simultaneous modifications of 'environ'. */ # include <bits/libc-lock.h> __libc_lock_define_initialized (static, envlock) # define LOCK __libc_lock_lock (envlock) # define UNLOCK __libc_lock_unlock (envlock) #else # define LOCK # define UNLOCK #endif /* In the GNU C library we must keep the namespace clean. */ #ifdef _LIBC # define unsetenv __unsetenv #endif #if _LIBC || !HAVE_UNSETENV int unsetenv (const char *name) { size_t len; char **ep; if (name == NULL || *name == '\0' || strchr (name, '=') != NULL) { __set_errno (EINVAL); return -1; } len = strlen (name); LOCK; ep = __environ; while (*ep != NULL) if (!strncmp (*ep, name, len) && (*ep)[len] == '=') { /* Found it. Remove this pointer by moving later ones back. */ char **dp = ep; do dp[0] = dp[1]; while (*dp++); /* Continue the loop in case NAME appears again. */ } else ++ep; UNLOCK; return 0; } #ifdef _LIBC # undef unsetenv weak_alias (__unsetenv, unsetenv) #endif #else /* HAVE_UNSETENV */ # undef unsetenv # if !HAVE_DECL_UNSETENV # if VOID_UNSETENV extern void unsetenv (const char *); # else extern int unsetenv (const char *); # endif # endif /* Call the underlying unsetenv, in case there is hidden bookkeeping that needs updating beyond just modifying environ. */ int rpl_unsetenv (const char *name) { int result = 0; if (!name || !*name || strchr (name, '=')) { errno = EINVAL; return -1; } while (getenv (name)) # if !VOID_UNSETENV result = # endif unsetenv (name); return result; } #endif /* HAVE_UNSETENV */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/open.c���������������������������������������������������������������������������������0000644�0001750�0001750�00000015377�14436425346�014254� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Open a descriptor to a file. Copyright (C) 2007-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */ /* If the user's config.h happens to include <fcntl.h>, let it include only the system's <fcntl.h> here, so that orig_open doesn't recurse to rpl_open. */ #define __need_system_fcntl_h #include <config.h> /* Get the original definition of open. It might be defined as a macro. */ #include <fcntl.h> #include <sys/types.h> #undef __need_system_fcntl_h static int orig_open (const char *filename, int flags, mode_t mode) { #if defined _WIN32 && !defined __CYGWIN__ return _open (filename, flags, mode); #else return open (filename, flags, mode); #endif } /* Specification. */ /* Write "fcntl.h" here, not <fcntl.h>, otherwise OSF/1 5.1 DTK cc eliminates this include because of the preliminary #include <fcntl.h> above. */ #include "fcntl.h" #include "cloexec.h" #include <errno.h> #include <stdarg.h> #include <string.h> #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #ifndef REPLACE_OPEN_DIRECTORY # define REPLACE_OPEN_DIRECTORY 0 #endif int open (const char *filename, int flags, ...) { /* 0 = unknown, 1 = yes, -1 = no. */ #if GNULIB_defined_O_CLOEXEC int have_cloexec = -1; #else static int have_cloexec; #endif mode_t mode; int fd; mode = 0; if (flags & O_CREAT) { va_list arg; va_start (arg, flags); /* We have to use PROMOTED_MODE_T instead of mode_t, otherwise GCC 4 creates crashing code when 'mode_t' is smaller than 'int'. */ mode = va_arg (arg, PROMOTED_MODE_T); va_end (arg); } #if GNULIB_defined_O_NONBLOCK /* The only known platform that lacks O_NONBLOCK is mingw, but it also lacks named pipes and Unix sockets, which are the only two file types that require non-blocking handling in open(). Therefore, it is safe to ignore O_NONBLOCK here. It is handy that mingw also lacks openat(), so that is also covered here. */ flags &= ~O_NONBLOCK; #endif #if defined _WIN32 && ! defined __CYGWIN__ if (strcmp (filename, "/dev/null") == 0) filename = "NUL"; #endif #if OPEN_TRAILING_SLASH_BUG /* Fail if one of O_CREAT, O_WRONLY, O_RDWR is specified and the filename ends in a slash, as POSIX says such a filename must name a directory <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_13>: "A pathname that contains at least one non-<slash> character and that ends with one or more trailing <slash> characters shall not be resolved successfully unless the last pathname component before the trailing <slash> characters names an existing directory" If the named file already exists as a directory, then - if O_CREAT is specified, open() must fail because of the semantics of O_CREAT, - if O_WRONLY or O_RDWR is specified, open() must fail because POSIX <https://pubs.opengroup.org/onlinepubs/9699919799/functions/open.html> says that it fails with errno = EISDIR in this case. If the named file does not exist or does not name a directory, then - if O_CREAT is specified, open() must fail since open() cannot create directories, - if O_WRONLY or O_RDWR is specified, open() must fail because the file does not contain a '.' directory. */ if ((flags & O_CREAT) || (flags & O_ACCMODE) == O_RDWR || (flags & O_ACCMODE) == O_WRONLY) { size_t len = strlen (filename); if (len > 0 && filename[len - 1] == '/') { errno = EISDIR; return -1; } } #endif fd = orig_open (filename, flags & ~(have_cloexec < 0 ? O_CLOEXEC : 0), mode); if (flags & O_CLOEXEC) { if (! have_cloexec) { if (0 <= fd) have_cloexec = 1; else if (errno == EINVAL) { fd = orig_open (filename, flags & ~O_CLOEXEC, mode); have_cloexec = -1; } } if (have_cloexec < 0 && 0 <= fd) set_cloexec_flag (fd, true); } #if REPLACE_FCHDIR /* Implementing fchdir and fdopendir requires the ability to open a directory file descriptor. If open doesn't support that (as on mingw), we use a dummy file that behaves the same as directories on Linux (ie. always reports EOF on attempts to read()), and override fstat() in fchdir.c to hide the fact that we have a dummy. */ if (REPLACE_OPEN_DIRECTORY && fd < 0 && errno == EACCES && ((flags & O_ACCMODE) == O_RDONLY || (O_SEARCH != O_RDONLY && (flags & O_ACCMODE) == O_SEARCH))) { struct stat statbuf; if (stat (filename, &statbuf) == 0 && S_ISDIR (statbuf.st_mode)) { /* Maximum recursion depth of 1. */ fd = open ("/dev/null", flags, mode); if (0 <= fd) fd = _gl_register_fd (fd, filename); } else errno = EACCES; } #endif #if OPEN_TRAILING_SLASH_BUG /* If the filename ends in a slash and fd does not refer to a directory, then fail. Rationale: POSIX says such a filename must name a directory <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_13>: "A pathname that contains at least one non-<slash> character and that ends with one or more trailing <slash> characters shall not be resolved successfully unless the last pathname component before the trailing <slash> characters names an existing directory" If the named file without the slash is not a directory, open() must fail with ENOTDIR. */ if (fd >= 0) { /* We know len is positive, since open did not fail with ENOENT. */ size_t len = strlen (filename); if (filename[len - 1] == '/') { struct stat statbuf; if (fstat (fd, &statbuf) >= 0 && !S_ISDIR (statbuf.st_mode)) { close (fd); errno = ENOTDIR; return -1; } } } #endif #if REPLACE_FCHDIR if (!REPLACE_OPEN_DIRECTORY && 0 <= fd) fd = _gl_register_fd (fd, filename); #endif return fd; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/time.in.h������������������������������������������������������������������������������0000644�0001750�0001750�00000043473�14436425346�014661� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A more-standard <time.h>. Copyright (C) 2007-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* This file uses #include_next of a system file that defines time_t. For the 'year2038' module to work right, <config.h> needs to have been included before. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif /* Don't get in the way of glibc when it includes time.h merely to declare a few standard symbols, rather than to declare all the symbols. (However, skip this for MinGW as it treats __need_time_t incompatibly.) Also, Solaris 8 <time.h> eventually includes itself recursively; if that is happening, just include the system <time.h> without adding our own declarations. */ #if (((defined __need_time_t || defined __need_clock_t \ || defined __need_timespec) \ && !defined __MINGW32__) \ || defined _@GUARD_PREFIX@_TIME_H) # @INCLUDE_NEXT@ @NEXT_TIME_H@ #else # define _@GUARD_PREFIX@_TIME_H /* mingw's <time.h> provides the functions asctime_r, ctime_r, gmtime_r, localtime_r only if <unistd.h> or <pthread.h> has been included before. */ # if defined __MINGW32__ # include <unistd.h> # endif # @INCLUDE_NEXT@ @NEXT_TIME_H@ /* This file uses _GL_ATTRIBUTE_DEPRECATED, GNULIB_POSIXCHECK, HAVE_RAW_DECL_*. */ # if !_GL_CONFIG_H_INCLUDED # error "Please include config.h first." # endif /* NetBSD 5.0 mis-defines NULL. */ # include <stddef.h> /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* Some systems don't define struct timespec (e.g., AIX 4.1). Or they define it with the wrong member names or define it in <sys/time.h> (e.g., FreeBSD circa 1997). Stock Mingw prior to 3.0 does not define it, but the pthreads-win32 library defines it in <pthread.h>. */ # if ! @TIME_H_DEFINES_STRUCT_TIMESPEC@ # if @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ # include <sys/time.h> # elif @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ # include <pthread.h> # elif @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ # include <unistd.h> # else # ifdef __cplusplus extern "C" { # endif # if !GNULIB_defined_struct_timespec # undef timespec # define timespec rpl_timespec struct timespec { time_t tv_sec; long int tv_nsec; }; # define GNULIB_defined_struct_timespec 1 # endif # ifdef __cplusplus } # endif # endif # endif # if !GNULIB_defined_struct_time_t_must_be_integral /* https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_types.h.html requires time_t to be an integer type, even though C99 permits floating point. We don't know of any implementation that uses floating point, and it is much easier to write code that doesn't have to worry about that corner case, so we force the issue. */ struct __time_t_must_be_integral { unsigned int __floating_time_t_unsupported : (time_t) 1; }; # define GNULIB_defined_struct_time_t_must_be_integral 1 # endif /* Define TIME_UTC, a positive integer constant used for timespec_get(). */ # if ! @TIME_H_DEFINES_TIME_UTC@ # if !GNULIB_defined_TIME_UTC # define TIME_UTC 1 # define GNULIB_defined_TIME_UTC 1 # endif # endif /* Set *TS to the current time, and return BASE. Upon failure, return 0. */ # if @GNULIB_TIMESPEC_GET@ # if @REPLACE_TIMESPEC_GET@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef timespec_get # define timespec_get rpl_timespec_get # endif _GL_FUNCDECL_RPL (timespec_get, int, (struct timespec *ts, int base) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (timespec_get, int, (struct timespec *ts, int base)); # else # if !@HAVE_TIMESPEC_GET@ _GL_FUNCDECL_SYS (timespec_get, int, (struct timespec *ts, int base) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (timespec_get, int, (struct timespec *ts, int base)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (timespec_get); # endif # endif /* Set *TS to the current time resolution, and return BASE. Upon failure, return 0. */ # if @GNULIB_TIMESPEC_GETRES@ # if ! @HAVE_TIMESPEC_GETRES@ _GL_FUNCDECL_SYS (timespec_getres, int, (struct timespec *ts, int base) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (timespec_getres, int, (struct timespec *ts, int base)); _GL_CXXALIASWARN (timespec_getres); # endif /* Return the number of seconds that have elapsed since the Epoch. */ # if @GNULIB_TIME@ # if @REPLACE_TIME@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define time rpl_time # endif _GL_FUNCDECL_RPL (time, time_t, (time_t *__tp)); _GL_CXXALIAS_RPL (time, time_t, (time_t *__tp)); # else _GL_CXXALIAS_SYS (time, time_t, (time_t *__tp)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (time); # endif # endif /* Sleep for at least RQTP seconds unless interrupted, If interrupted, return -1 and store the remaining time into RMTP. See <https://pubs.opengroup.org/onlinepubs/9699919799/functions/nanosleep.html>. */ # if @GNULIB_NANOSLEEP@ # if @REPLACE_NANOSLEEP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define nanosleep rpl_nanosleep # endif _GL_FUNCDECL_RPL (nanosleep, int, (struct timespec const *__rqtp, struct timespec *__rmtp) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (nanosleep, int, (struct timespec const *__rqtp, struct timespec *__rmtp)); # else # if ! @HAVE_NANOSLEEP@ _GL_FUNCDECL_SYS (nanosleep, int, (struct timespec const *__rqtp, struct timespec *__rmtp) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (nanosleep, int, (struct timespec const *__rqtp, struct timespec *__rmtp)); # endif _GL_CXXALIASWARN (nanosleep); # endif /* Initialize time conversion information. */ # if @GNULIB_TZSET@ # if @REPLACE_TZSET@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef tzset # define tzset rpl_tzset # endif _GL_FUNCDECL_RPL (tzset, void, (void)); _GL_CXXALIAS_RPL (tzset, void, (void)); # elif defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef tzset # define tzset _tzset # endif _GL_CXXALIAS_MDA (tzset, void, (void)); # else _GL_CXXALIAS_SYS (tzset, void, (void)); # endif _GL_CXXALIASWARN (tzset); # elif @GNULIB_MDA_TZSET@ /* On native Windows, map 'tzset' to '_tzset', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::tzset always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef tzset # define tzset _tzset # endif _GL_CXXALIAS_MDA (tzset, void, (void)); # else _GL_CXXALIAS_SYS (tzset, void, (void)); # endif _GL_CXXALIASWARN (tzset); # endif /* Return the 'time_t' representation of TP and normalize TP. */ # if @GNULIB_MKTIME@ # if @REPLACE_MKTIME@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define mktime rpl_mktime # endif _GL_FUNCDECL_RPL (mktime, time_t, (struct tm *__tp) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (mktime, time_t, (struct tm *__tp)); # else _GL_CXXALIAS_SYS (mktime, time_t, (struct tm *__tp)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (mktime); # endif # endif /* Convert TIMER to RESULT, assuming local time and UTC respectively. See <https://pubs.opengroup.org/onlinepubs/9699919799/functions/localtime_r.html> and <https://pubs.opengroup.org/onlinepubs/9699919799/functions/gmtime_r.html>. */ # if @GNULIB_TIME_R@ # if @REPLACE_LOCALTIME_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef localtime_r # define localtime_r rpl_localtime_r # endif _GL_FUNCDECL_RPL (localtime_r, struct tm *, (time_t const *restrict __timer, struct tm *restrict __result) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (localtime_r, struct tm *, (time_t const *restrict __timer, struct tm *restrict __result)); # else # if ! @HAVE_DECL_LOCALTIME_R@ _GL_FUNCDECL_SYS (localtime_r, struct tm *, (time_t const *restrict __timer, struct tm *restrict __result) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (localtime_r, struct tm *, (time_t const *restrict __timer, struct tm *restrict __result)); # endif # if @HAVE_DECL_LOCALTIME_R@ _GL_CXXALIASWARN (localtime_r); # endif # if @REPLACE_LOCALTIME_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef gmtime_r # define gmtime_r rpl_gmtime_r # endif _GL_FUNCDECL_RPL (gmtime_r, struct tm *, (time_t const *restrict __timer, struct tm *restrict __result) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (gmtime_r, struct tm *, (time_t const *restrict __timer, struct tm *restrict __result)); # else # if ! @HAVE_DECL_LOCALTIME_R@ _GL_FUNCDECL_SYS (gmtime_r, struct tm *, (time_t const *restrict __timer, struct tm *restrict __result) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (gmtime_r, struct tm *, (time_t const *restrict __timer, struct tm *restrict __result)); # endif # if @HAVE_DECL_LOCALTIME_R@ _GL_CXXALIASWARN (gmtime_r); # endif # endif /* Convert TIMER to RESULT, assuming local time and UTC respectively. See <https://pubs.opengroup.org/onlinepubs/9699919799/functions/localtime.html> and <https://pubs.opengroup.org/onlinepubs/9699919799/functions/gmtime.html>. */ # if @GNULIB_LOCALTIME@ || @REPLACE_LOCALTIME@ # if @REPLACE_LOCALTIME@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef localtime # define localtime rpl_localtime # endif _GL_FUNCDECL_RPL (localtime, struct tm *, (time_t const *__timer) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (localtime, struct tm *, (time_t const *__timer)); # else _GL_CXXALIAS_SYS (localtime, struct tm *, (time_t const *__timer)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (localtime); # endif # endif # if 0 || @REPLACE_GMTIME@ # if @REPLACE_GMTIME@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef gmtime # define gmtime rpl_gmtime # endif _GL_FUNCDECL_RPL (gmtime, struct tm *, (time_t const *__timer) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (gmtime, struct tm *, (time_t const *__timer)); # else _GL_CXXALIAS_SYS (gmtime, struct tm *, (time_t const *__timer)); # endif _GL_CXXALIASWARN (gmtime); # endif /* Parse BUF as a timestamp, assuming FORMAT specifies its layout, and store the resulting broken-down time into TM. See <https://pubs.opengroup.org/onlinepubs/9699919799/functions/strptime.html>. */ # if @GNULIB_STRPTIME@ # if ! @HAVE_STRPTIME@ _GL_FUNCDECL_SYS (strptime, char *, (char const *restrict __buf, char const *restrict __format, struct tm *restrict __tm) _GL_ARG_NONNULL ((1, 2, 3))); # endif _GL_CXXALIAS_SYS (strptime, char *, (char const *restrict __buf, char const *restrict __format, struct tm *restrict __tm)); _GL_CXXALIASWARN (strptime); # endif /* Convert *TP to a date and time string. See <https://pubs.opengroup.org/onlinepubs/9699919799/functions/ctime.html>. */ # if @GNULIB_CTIME@ # if @REPLACE_CTIME@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define ctime rpl_ctime # endif # ifndef __cplusplus _GL_ATTRIBUTE_DEPRECATED # endif _GL_FUNCDECL_RPL (ctime, char *, (time_t const *__tp) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (ctime, char *, (time_t const *__tp)); # else _GL_CXXALIAS_SYS (ctime, char *, (time_t const *__tp)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (ctime); # endif # endif /* Convert *TP to a date and time string. See <https://pubs.opengroup.org/onlinepubs/9699919799/functions/strftime.html>. */ # if @GNULIB_STRFTIME@ # if @REPLACE_STRFTIME@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define strftime rpl_strftime # endif _GL_FUNCDECL_RPL (strftime, size_t, (char *restrict __buf, size_t __bufsize, const char *restrict __fmt, const struct tm *restrict __tp) _GL_ARG_NONNULL ((1, 3, 4))); _GL_CXXALIAS_RPL (strftime, size_t, (char *restrict __buf, size_t __bufsize, const char *restrict __fmt, const struct tm *restrict __tp)); # else _GL_CXXALIAS_SYS (strftime, size_t, (char *restrict __buf, size_t __bufsize, const char *restrict __fmt, const struct tm *restrict __tp)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (strftime); # endif # endif # if defined _GNU_SOURCE && @GNULIB_TIME_RZ@ && ! @HAVE_TIMEZONE_T@ /* Functions that use a first-class time zone data type, instead of relying on an implicit global time zone. Inspired by NetBSD. */ /* Represents a time zone. (timezone_t) NULL stands for UTC. */ typedef struct tm_zone *timezone_t; /* tzalloc (name) Returns a time zone object for the given time zone NAME. This object represents the time zone that other functions would use it the TZ environment variable was set to NAME. If NAME is NULL, the result represents the time zone that other functions would use it the TZ environment variable was unset. May return NULL if NAME is invalid (this is platform dependent) or upon memory allocation failure. */ _GL_FUNCDECL_SYS (tzalloc, timezone_t, (char const *__name)); _GL_CXXALIAS_SYS (tzalloc, timezone_t, (char const *__name)); /* tzfree (tz) Frees a time zone object. The argument must have been returned by tzalloc(). */ _GL_FUNCDECL_SYS (tzfree, void, (timezone_t __tz)); _GL_CXXALIAS_SYS (tzfree, void, (timezone_t __tz)); /* localtime_rz (tz, &t, &result) Converts an absolute time T to a broken-down time RESULT, assuming the time zone TZ. This function is like 'localtime_r', but relies on the argument TZ instead of an implicit global time zone. */ _GL_FUNCDECL_SYS (localtime_rz, struct tm *, (timezone_t __tz, time_t const *restrict __timer, struct tm *restrict __result) _GL_ARG_NONNULL ((2, 3))); _GL_CXXALIAS_SYS (localtime_rz, struct tm *, (timezone_t __tz, time_t const *restrict __timer, struct tm *restrict __result)); /* mktime_z (tz, &tm) Normalizes the broken-down time TM and converts it to an absolute time, assuming the time zone TZ. Returns the absolute time. This function is like 'mktime', but relies on the argument TZ instead of an implicit global time zone. */ _GL_FUNCDECL_SYS (mktime_z, time_t, (timezone_t __tz, struct tm *restrict __tm) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_SYS (mktime_z, time_t, (timezone_t __tz, struct tm *restrict __tm)); /* Time zone abbreviation strings (returned by 'localtime_rz' or 'mktime_z' in the 'tm_zone' member of 'struct tm') are valid as long as - the 'struct tm' argument is not destroyed or overwritten, and - the 'timezone_t' argument is not freed through tzfree(). */ # endif /* Convert TM to a time_t value, assuming UTC. */ # if @GNULIB_TIMEGM@ # if @REPLACE_TIMEGM@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef timegm # define timegm rpl_timegm # endif _GL_FUNCDECL_RPL (timegm, time_t, (struct tm *__tm) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (timegm, time_t, (struct tm *__tm)); # else # if ! @HAVE_TIMEGM@ _GL_FUNCDECL_SYS (timegm, time_t, (struct tm *__tm) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (timegm, time_t, (struct tm *__tm)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (timegm); # endif # endif /* Encourage applications to avoid unsafe functions that can overrun buffers when given outlandish struct tm values. Portable applications should use strftime (or even sprintf) instead. */ # if defined GNULIB_POSIXCHECK # undef asctime _GL_WARN_ON_USE (asctime, "asctime can overrun buffers in some cases - " "better use strftime (or even sprintf) instead"); # endif # if defined GNULIB_POSIXCHECK # undef asctime_r # if HAVE_RAW_DECL_ASCTIME_R _GL_WARN_ON_USE (asctime_r, "asctime_r can overrun buffers in some cases - " "better use strftime (or even sprintf) instead"); # endif # endif # if defined GNULIB_POSIXCHECK # undef ctime _GL_WARN_ON_USE (ctime, "ctime can overrun buffers in some cases - " "better use strftime (or even sprintf) instead"); # endif # if defined GNULIB_POSIXCHECK # undef ctime_r # if HAVE_RAW_DECL_CTIME_R _GL_WARN_ON_USE (ctime_r, "ctime_r can overrun buffers in some cases - " "better use strftime (or even sprintf) instead"); # endif # endif #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/getopt-core.h��������������������������������������������������������������������������0000644�0001750�0001750�00000007132�14436425345�015535� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Declarations for getopt (basic, portable features only). Copyright (C) 1989-2023 Free Software Foundation, Inc. This file is part of the GNU C Library and is also part of gnulib. Patches to this file should be submitted to both projects. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ #ifndef _GETOPT_CORE_H #define _GETOPT_CORE_H 1 /* This header should not be used directly; include getopt.h or unistd.h instead. Unlike most bits headers, it does not have a protective #error, because the guard macro for getopt.h in gnulib is not fixed. */ __BEGIN_DECLS /* For communication from 'getopt' to the caller. When 'getopt' finds an option that takes an argument, the argument value is returned here. Also, when 'ordering' is RETURN_IN_ORDER, each non-option ARGV-element is returned here. */ extern char *optarg; /* Index in ARGV of the next element to be scanned. This is used for communication to and from the caller and for communication between successive calls to 'getopt'. On entry to 'getopt', zero means this is the first call; initialize. When 'getopt' returns -1, this is the index of the first of the non-option elements that the caller should itself scan. Otherwise, 'optind' communicates from one call to the next how much of ARGV has been scanned so far. */ extern int optind; /* Callers store zero here to inhibit the error message 'getopt' prints for unrecognized options. */ extern int opterr; /* Set to an option character which was unrecognized. */ extern int optopt; /* Get definitions and prototypes for functions to process the arguments in ARGV (ARGC of them, minus the program name) for options given in OPTS. Return the option character from OPTS just read. Return -1 when there are no more options. For unrecognized options, or options missing arguments, 'optopt' is set to the option letter, and '?' is returned. The OPTS string is a list of characters which are recognized option letters, optionally followed by colons, specifying that that letter takes an argument, to be placed in 'optarg'. If a letter in OPTS is followed by two colons, its argument is optional. This behavior is specific to the GNU 'getopt'. The argument '--' causes premature termination of argument scanning, explicitly telling 'getopt' that there are no more options. If OPTS begins with '-', then non-option arguments are treated as arguments to the option '\1'. This behavior is specific to the GNU 'getopt'. If OPTS begins with '+', or POSIXLY_CORRECT is set in the environment, then do not permute arguments. For standards compliance, the 'argv' argument has the type char *const *, but this is inaccurate; if argument permutation is enabled, the argv array (not the strings it points to) must be writable. */ extern int getopt (int ___argc, char *const *___argv, const char *__shortopts) __THROW _GL_ARG_NONNULL ((2, 3)); __END_DECLS #endif /* _GETOPT_CORE_H */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/wcrtomb.c������������������������������������������������������������������������������0000644�0001750�0001750�00000004414�14436425346�014756� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert wide character to multibyte character. Copyright (C) 2008-2023 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2008. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #include <errno.h> #include <stdlib.h> size_t wcrtomb (char *s, wchar_t wc, mbstate_t *ps) #undef wcrtomb { /* This implementation of wcrtomb supports only stateless encodings. ps must be in the initial state. */ if (ps != NULL && !mbsinit (ps)) { errno = EINVAL; return (size_t)(-1); } #if !HAVE_WCRTOMB /* IRIX 6.5 */ \ || WCRTOMB_RETVAL_BUG /* Solaris 11.3, MSVC */ \ || WCRTOMB_C_LOCALE_BUG /* Android */ if (s == NULL) /* We know the NUL wide character corresponds to the NUL character. */ return 1; else #endif { #if HAVE_WCRTOMB # if WCRTOMB_C_LOCALE_BUG /* Android */ /* Implement consistently with mbrtowc(): through a 1:1 correspondence, as in ISO-8859-1. */ if (wc >= 0 && wc <= 0xff) { *s = (unsigned char) wc; return 1; } else { errno = EILSEQ; return (size_t)(-1); } # else return wcrtomb (s, wc, ps); # endif #else /* IRIX 6.5 */ /* Fallback for platforms that don't have wcrtomb(). Implement on top of wctomb(). This code is not multithread-safe. */ int ret = wctomb (s, wc); if (ret >= 0) return ret; else { errno = EILSEQ; return (size_t)(-1); } #endif } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/filename.h�����������������������������������������������������������������������������0000644�0001750�0001750�00000011106�14436425345�015061� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Basic filename support macros. Copyright (C) 2001-2023 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ /* From Paul Eggert and Jim Meyering. */ #ifndef _FILENAME_H #define _FILENAME_H #include <string.h> #ifdef __cplusplus extern "C" { #endif /* Filename support. ISSLASH(C) tests whether C is a directory separator character. HAS_DEVICE(Filename) tests whether Filename contains a device specification. FILE_SYSTEM_PREFIX_LEN(Filename) length of the device specification at the beginning of Filename, index of the part consisting of alternating components and slashes. FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 1 when a non-empty device specification can be followed by an empty or relative part, 0 when a non-empty device specification must be followed by a slash, 0 when device specification don't exist. IS_ABSOLUTE_FILE_NAME(Filename) tests whether Filename is independent of any notion of "current directory". IS_RELATIVE_FILE_NAME(Filename) tests whether Filename may be concatenated to a directory filename. Note: On native Windows, OS/2, DOS, "c:" is neither an absolute nor a relative file name! IS_FILE_NAME_WITH_DIR(Filename) tests whether Filename contains a device or directory specification. */ #if defined _WIN32 || defined __CYGWIN__ \ || defined __EMX__ || defined __MSDOS__ || defined __DJGPP__ /* Native Windows, Cygwin, OS/2, DOS */ # define ISSLASH(C) ((C) == '/' || (C) == '\\') /* Internal macro: Tests whether a character is a drive letter. */ # define _IS_DRIVE_LETTER(C) \ (((C) >= 'A' && (C) <= 'Z') || ((C) >= 'a' && (C) <= 'z')) /* Help the compiler optimizing it. This assumes ASCII. */ # undef _IS_DRIVE_LETTER # define _IS_DRIVE_LETTER(C) \ (((unsigned int) (C) | ('a' - 'A')) - 'a' <= 'z' - 'a') # define HAS_DEVICE(Filename) \ (_IS_DRIVE_LETTER ((Filename)[0]) && (Filename)[1] == ':') # define FILE_SYSTEM_PREFIX_LEN(Filename) (HAS_DEVICE (Filename) ? 2 : 0) # ifdef __CYGWIN__ # define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 0 # else /* On native Windows, OS/2, DOS, the system has the notion of a "current directory" on each drive. */ # define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 1 # endif # if FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE # define IS_ABSOLUTE_FILE_NAME(Filename) \ ISSLASH ((Filename)[FILE_SYSTEM_PREFIX_LEN (Filename)]) # else # define IS_ABSOLUTE_FILE_NAME(Filename) \ (ISSLASH ((Filename)[0]) || HAS_DEVICE (Filename)) # endif # define IS_RELATIVE_FILE_NAME(Filename) \ (! (ISSLASH ((Filename)[0]) || HAS_DEVICE (Filename))) # define IS_FILE_NAME_WITH_DIR(Filename) \ (strchr ((Filename), '/') != NULL || strchr ((Filename), '\\') != NULL \ || HAS_DEVICE (Filename)) #else /* Unix */ # define ISSLASH(C) ((C) == '/') # define HAS_DEVICE(Filename) ((void) (Filename), 0) # define FILE_SYSTEM_PREFIX_LEN(Filename) ((void) (Filename), 0) # define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 0 # define IS_ABSOLUTE_FILE_NAME(Filename) ISSLASH ((Filename)[0]) # define IS_RELATIVE_FILE_NAME(Filename) (! ISSLASH ((Filename)[0])) # define IS_FILE_NAME_WITH_DIR(Filename) (strchr ((Filename), '/') != NULL) #endif /* Deprecated macros. For backward compatibility with old users of the 'filename' module. */ #define IS_ABSOLUTE_PATH IS_ABSOLUTE_FILE_NAME #define IS_PATH_WITH_DIR IS_FILE_NAME_WITH_DIR #ifdef __cplusplus } #endif #endif /* _FILENAME_H */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/setenv.c�������������������������������������������������������������������������������0000644�0001750�0001750�00000025077�14436425346�014615� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1992, 1995-2003, 2005-2023 Free Software Foundation, Inc. This file is part of the GNU C Library. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #if !_LIBC /* Don't use __attribute__ __nonnull__ in this compilation unit. Otherwise gcc optimizes away the name == NULL test below. */ # define _GL_ARG_NONNULL(params) # define _GL_USE_STDLIB_ALLOC 1 # include <config.h> #endif #include <alloca.h> /* Specification. */ #include <stdlib.h> #include <errno.h> #ifndef __set_errno # define __set_errno(ev) ((errno) = (ev)) #endif #include <string.h> #if _LIBC || HAVE_UNISTD_H # include <unistd.h> #endif #if !_LIBC # include "malloca.h" #endif #if _LIBC || !HAVE_SETENV #if !_LIBC # define __environ environ #endif #if _LIBC /* This lock protects against simultaneous modifications of 'environ'. */ # include <bits/libc-lock.h> __libc_lock_define_initialized (static, envlock) # define LOCK __libc_lock_lock (envlock) # define UNLOCK __libc_lock_unlock (envlock) #else # define LOCK # define UNLOCK #endif /* In the GNU C library we must keep the namespace clean. */ #ifdef _LIBC # define setenv __setenv # define clearenv __clearenv # define tfind __tfind # define tsearch __tsearch #endif /* In the GNU C library implementation we try to be more clever and allow arbitrarily many changes of the environment given that the used values are from a small set. Outside glibc this will eat up all memory after a while. */ #if defined _LIBC || (defined HAVE_SEARCH_H && defined HAVE_TSEARCH \ && (defined __GNUC__ || defined __clang__)) # define USE_TSEARCH 1 # include <search.h> typedef int (*compar_fn_t) (const void *, const void *); /* This is a pointer to the root of the search tree with the known values. */ static void *known_values; # define KNOWN_VALUE(Str) \ ({ \ void *value = tfind (Str, &known_values, (compar_fn_t) strcmp); \ value != NULL ? *(char **) value : NULL; \ }) # define STORE_VALUE(Str) \ tsearch (Str, &known_values, (compar_fn_t) strcmp) #else # undef USE_TSEARCH # define KNOWN_VALUE(Str) NULL # define STORE_VALUE(Str) do { } while (0) #endif /* If this variable is not a null pointer we allocated the current environment. */ static char **last_environ; /* This function is used by 'setenv' and 'putenv'. The difference between the two functions is that for the former must create a new string which is then placed in the environment, while the argument of 'putenv' must be used directly. This is all complicated by the fact that we try to reuse values once generated for a 'setenv' call since we can never free the strings. */ int __add_to_environ (const char *name, const char *value, const char *combined, int replace) { char **ep; size_t size; const size_t namelen = strlen (name); const size_t vallen = value != NULL ? strlen (value) + 1 : 0; LOCK; /* We have to get the pointer now that we have the lock and not earlier since another thread might have created a new environment. */ ep = __environ; size = 0; if (ep != NULL) { for (; *ep != NULL; ++ep) if (!strncmp (*ep, name, namelen) && (*ep)[namelen] == '=') break; else ++size; } if (ep == NULL || *ep == NULL) { char **new_environ; #ifdef USE_TSEARCH char *new_value; #endif /* We allocated this space; we can extend it. */ new_environ = (char **) (last_environ == NULL ? malloc ((size + 2) * sizeof (char *)) : realloc (last_environ, (size + 2) * sizeof (char *))); if (new_environ == NULL) { /* It's easier to set errno to ENOMEM than to rely on the 'malloc-posix' and 'realloc-posix' gnulib modules. */ __set_errno (ENOMEM); UNLOCK; return -1; } /* If the whole entry is given add it. */ if (combined != NULL) /* We must not add the string to the search tree since it belongs to the user. */ new_environ[size] = (char *) combined; else { /* See whether the value is already known. */ #ifdef USE_TSEARCH # ifdef _LIBC new_value = (char *) alloca (namelen + 1 + vallen); __mempcpy (__mempcpy (__mempcpy (new_value, name, namelen), "=", 1), value, vallen); # else new_value = (char *) malloca (namelen + 1 + vallen); if (new_value == NULL) { __set_errno (ENOMEM); UNLOCK; return -1; } memcpy (new_value, name, namelen); new_value[namelen] = '='; memcpy (&new_value[namelen + 1], value, vallen); # endif new_environ[size] = KNOWN_VALUE (new_value); if (new_environ[size] == NULL) #endif { new_environ[size] = (char *) malloc (namelen + 1 + vallen); if (new_environ[size] == NULL) { #if defined USE_TSEARCH && !defined _LIBC freea (new_value); #endif __set_errno (ENOMEM); UNLOCK; return -1; } #ifdef USE_TSEARCH memcpy (new_environ[size], new_value, namelen + 1 + vallen); #else memcpy (new_environ[size], name, namelen); new_environ[size][namelen] = '='; memcpy (&new_environ[size][namelen + 1], value, vallen); #endif /* And save the value now. We cannot do this when we remove the string since then we cannot decide whether it is a user string or not. */ STORE_VALUE (new_environ[size]); } #if defined USE_TSEARCH && !defined _LIBC freea (new_value); #endif } if (__environ != last_environ) memcpy ((char *) new_environ, (char *) __environ, size * sizeof (char *)); new_environ[size + 1] = NULL; last_environ = __environ = new_environ; } else if (replace) { char *np; /* Use the user string if given. */ if (combined != NULL) np = (char *) combined; else { #ifdef USE_TSEARCH char *new_value; # ifdef _LIBC new_value = alloca (namelen + 1 + vallen); __mempcpy (__mempcpy (__mempcpy (new_value, name, namelen), "=", 1), value, vallen); # else new_value = malloca (namelen + 1 + vallen); if (new_value == NULL) { __set_errno (ENOMEM); UNLOCK; return -1; } memcpy (new_value, name, namelen); new_value[namelen] = '='; memcpy (&new_value[namelen + 1], value, vallen); # endif np = KNOWN_VALUE (new_value); if (np == NULL) #endif { np = (char *) malloc (namelen + 1 + vallen); if (np == NULL) { #if defined USE_TSEARCH && !defined _LIBC freea (new_value); #endif __set_errno (ENOMEM); UNLOCK; return -1; } #ifdef USE_TSEARCH memcpy (np, new_value, namelen + 1 + vallen); #else memcpy (np, name, namelen); np[namelen] = '='; memcpy (&np[namelen + 1], value, vallen); #endif /* And remember the value. */ STORE_VALUE (np); } #if defined USE_TSEARCH && !defined _LIBC freea (new_value); #endif } *ep = np; } UNLOCK; return 0; } int setenv (const char *name, const char *value, int replace) { if (name == NULL || *name == '\0' || strchr (name, '=') != NULL) { __set_errno (EINVAL); return -1; } return __add_to_environ (name, value, NULL, replace); } /* The 'clearenv' was planned to be added to POSIX.1 but probably never made it. Nevertheless the POSIX.9 standard (POSIX bindings for Fortran 77) requires this function. */ int clearenv (void) { LOCK; if (__environ == last_environ && __environ != NULL) { /* We allocated this environment so we can free it. */ free (__environ); last_environ = NULL; } /* Clear the environment pointer removes the whole environment. */ __environ = NULL; UNLOCK; return 0; } #ifdef _LIBC static void free_mem (void) { /* Remove all traces. */ clearenv (); /* Now remove the search tree. */ __tdestroy (known_values, free); known_values = NULL; } text_set_element (__libc_subfreeres, free_mem); # undef setenv # undef clearenv weak_alias (__setenv, setenv) weak_alias (__clearenv, clearenv) #endif #endif /* _LIBC || !HAVE_SETENV */ /* The rest of this file is called into use when replacing an existing but buggy setenv. Known bugs include failure to diagnose invalid name, and consuming a leading '=' from value. */ #if HAVE_SETENV # undef setenv # if !HAVE_DECL_SETENV extern int setenv (const char *, const char *, int); # endif # define STREQ(a, b) (strcmp (a, b) == 0) int rpl_setenv (const char *name, const char *value, int replace) { int result; if (!name || !*name || strchr (name, '=')) { errno = EINVAL; return -1; } /* Call the real setenv even if replace is 0, in case implementation has underlying data to update, such as when environ changes. */ result = setenv (name, value, replace); if (result == 0 && replace && *value == '=') { char *tmp = getenv (name); if (!STREQ (tmp, value)) { int saved_errno; size_t len = strlen (value); tmp = malloca (len + 2); /* Since leading '=' is eaten, double it up. */ *tmp = '='; memcpy (tmp + 1, value, len + 1); result = setenv (name, tmp, replace); saved_errno = errno; freea (tmp); errno = saved_errno; } } return result; } #endif /* HAVE_SETENV */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/localcharset.h�������������������������������������������������������������������������0000644�0001750�0001750�00000014316�14436425346�015754� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine a canonical name for the current locale's character encoding. Copyright (C) 2000-2003, 2009-2023 Free Software Foundation, Inc. This file is part of the GNU CHARSET Library. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _LOCALCHARSET_H #define _LOCALCHARSET_H #ifdef __cplusplus extern "C" { #endif /* Determine the current locale's character encoding, and canonicalize it into one of the canonical names listed below. The result must not be freed; it is statically allocated. The result becomes invalid when setlocale() is used to change the global locale, or when the value of one of the environment variables LC_ALL, LC_CTYPE, LANG is changed; threads in multithreaded programs should not do this. If the canonical name cannot be determined, the result is a non-canonical name. */ extern const char * locale_charset (void); /* About GNU canonical names for character encodings: Every canonical name must be supported by GNU libiconv. Support by GNU libc is also desirable. The name is case insensitive. Usually an upper case MIME charset name is preferred. The current list of these GNU canonical names is: name MIME? used by which systems (darwin = Mac OS X, windows = native Windows) ASCII, ANSI_X3.4-1968 glibc solaris freebsd netbsd darwin minix cygwin ISO-8859-1 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin zos ISO-8859-2 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin zos ISO-8859-3 Y glibc solaris cygwin ISO-8859-4 Y hpux osf solaris freebsd netbsd openbsd darwin ISO-8859-5 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin zos ISO-8859-6 Y glibc aix hpux solaris cygwin ISO-8859-7 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin zos ISO-8859-8 Y glibc aix hpux osf solaris cygwin zos ISO-8859-9 Y glibc aix hpux irix osf solaris freebsd darwin cygwin zos ISO-8859-13 glibc hpux solaris freebsd netbsd openbsd darwin cygwin ISO-8859-14 glibc cygwin ISO-8859-15 glibc aix irix osf solaris freebsd netbsd openbsd darwin cygwin KOI8-R Y glibc hpux solaris freebsd netbsd openbsd darwin KOI8-U Y glibc freebsd netbsd openbsd darwin cygwin KOI8-T glibc CP437 dos CP775 dos CP850 aix osf dos CP852 dos CP855 dos CP856 aix CP857 dos CP861 dos CP862 dos CP864 dos CP865 dos CP866 freebsd netbsd openbsd darwin dos CP869 dos CP874 windows dos CP922 aix CP932 aix cygwin windows dos CP943 aix zos CP949 osf darwin windows dos CP950 windows dos CP1046 aix CP1124 aix CP1125 dos CP1129 aix CP1131 freebsd darwin CP1250 windows CP1251 glibc hpux solaris freebsd netbsd openbsd darwin cygwin windows CP1252 aix windows CP1253 windows CP1254 windows CP1255 glibc windows CP1256 windows CP1257 windows GB2312 Y glibc aix hpux irix solaris freebsd netbsd darwin cygwin zos EUC-JP Y glibc aix hpux irix osf solaris freebsd netbsd darwin cygwin EUC-KR Y glibc aix hpux irix osf solaris freebsd netbsd darwin cygwin zos EUC-TW glibc aix hpux irix osf solaris netbsd BIG5 Y glibc aix hpux osf solaris freebsd netbsd darwin cygwin zos BIG5-HKSCS glibc hpux solaris netbsd darwin GBK glibc aix osf solaris freebsd darwin cygwin windows dos GB18030 glibc hpux solaris freebsd netbsd darwin SHIFT_JIS Y hpux osf solaris freebsd netbsd darwin JOHAB glibc solaris windows TIS-620 glibc aix hpux osf solaris cygwin zos VISCII Y glibc TCVN5712-1 glibc ARMSCII-8 glibc freebsd netbsd darwin GEORGIAN-PS glibc cygwin PT154 glibc netbsd cygwin HP-ROMAN8 hpux HP-ARABIC8 hpux HP-GREEK8 hpux HP-HEBREW8 hpux HP-TURKISH8 hpux HP-KANA8 hpux DEC-KANJI osf DEC-HANYU osf UTF-8 Y glibc aix hpux osf solaris netbsd darwin cygwin zos Note: Names which are not marked as being a MIME name should not be used in Internet protocols for information interchange (mail, news, etc.). Note: ASCII and ANSI_X3.4-1968 are synonymous canonical names. Applications must understand both names and treat them as equivalent. */ #ifdef __cplusplus } #endif #endif /* _LOCALCHARSET_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/getopt_int.h���������������������������������������������������������������������������0000644�0001750�0001750�00000010112�14436425345�015451� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Internal declarations for getopt. Copyright (C) 1989-2023 Free Software Foundation, Inc. This file is part of the GNU C Library and is also part of gnulib. Patches to this file should be submitted to both projects. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ #ifndef _GETOPT_INT_H #define _GETOPT_INT_H 1 #include <getopt.h> extern int _getopt_internal (int ___argc, char **___argv, const char *__shortopts, const struct option *__longopts, int *__longind, int __long_only, int __posixly_correct); /* Reentrant versions which can handle parsing multiple argument vectors at the same time. */ /* Describe how to deal with options that follow non-option ARGV-elements. REQUIRE_ORDER means don't recognize them as options; stop option processing when the first non-option is seen. This is what POSIX specifies should happen. PERMUTE means permute the contents of ARGV as we scan, so that eventually all the non-options are at the end. This allows options to be given in any order, even with programs that were not written to expect this. RETURN_IN_ORDER is an option available to programs that were written to expect options and other ARGV-elements in any order and that care about the ordering of the two. We describe each non-option ARGV-element as if it were the argument of an option with character code 1. The special argument '--' forces an end of option-scanning regardless of the value of 'ordering'. In the case of RETURN_IN_ORDER, only '--' can cause 'getopt' to return -1 with 'optind' != ARGC. */ enum __ord { REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER }; /* Data type for reentrant functions. */ struct _getopt_data { /* These have exactly the same meaning as the corresponding global variables, except that they are used for the reentrant versions of getopt. */ int optind; int opterr; int optopt; char *optarg; /* Internal members. */ /* True if the internal members have been initialized. */ int __initialized; /* The next char to be scanned in the option-element in which the last option character we returned was found. This allows us to pick up the scan where we left off. If this is zero, or a null string, it means resume the scan by advancing to the next ARGV-element. */ char *__nextchar; /* See __ord above. */ enum __ord __ordering; /* Handle permutation of arguments. */ /* Describe the part of ARGV that contains non-options that have been skipped. 'first_nonopt' is the index in ARGV of the first of them; 'last_nonopt' is the index after the last of them. */ int __first_nonopt; int __last_nonopt; }; /* The initializer is necessary to set OPTIND and OPTERR to their default values and to clear the initialization flag. */ #define _GETOPT_DATA_INITIALIZER { 1, 1 } extern int _getopt_internal_r (int ___argc, char **___argv, const char *__shortopts, const struct option *__longopts, int *__longind, int __long_only, struct _getopt_data *__data, int __posixly_correct); extern int _getopt_long_r (int ___argc, char **___argv, const char *__shortopts, const struct option *__longopts, int *__longind, struct _getopt_data *__data); extern int _getopt_long_only_r (int ___argc, char **___argv, const char *__shortopts, const struct option *__longopts, int *__longind, struct _getopt_data *__data); #endif /* getopt_int.h */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/flexmember.h���������������������������������������������������������������������������0000644�0001750�0001750�00000006133�14436425345�015433� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Sizes of structs with flexible array members. Copyright 2016-2023 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see <https://www.gnu.org/licenses/>. Written by Paul Eggert. */ /* This file uses _Alignof. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif #include <stddef.h> /* Nonzero multiple of alignment of TYPE, suitable for FLEXSIZEOF below. On older platforms without _Alignof, use a pessimistic bound that is safe in practice even if FLEXIBLE_ARRAY_MEMBER is 1. On newer platforms, use _Alignof to get a tighter bound. */ #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112 # define FLEXALIGNOF(type) (sizeof (type) & ~ (sizeof (type) - 1)) #else # define FLEXALIGNOF(type) _Alignof (type) #endif /* Yield a properly aligned upper bound on the size of a struct of type TYPE with a flexible array member named MEMBER that is followed by N bytes of other data. The result is suitable as an argument to malloc. For example: struct s { int a; char d[FLEXIBLE_ARRAY_MEMBER]; }; struct s *p = malloc (FLEXSIZEOF (struct s, d, n * sizeof (char))); FLEXSIZEOF (TYPE, MEMBER, N) is not simply (sizeof (TYPE) + N), since FLEXIBLE_ARRAY_MEMBER may be 1 on pre-C11 platforms. Nor is it simply (offsetof (TYPE, MEMBER) + N), as that might yield a size that causes malloc to yield a pointer that is not properly aligned for TYPE; for example, if sizeof (int) == alignof (int) == 4, malloc (offsetof (struct s, d) + 3 * sizeof (char)) is equivalent to malloc (7) and might yield a pointer that is not a multiple of 4 (which means the pointer is not properly aligned for struct s), whereas malloc (FLEXSIZEOF (struct s, d, 3 * sizeof (char))) is equivalent to malloc (8) and must yield a pointer that is a multiple of 4. Yield a value less than N if and only if arithmetic overflow occurs. */ #define FLEXSIZEOF(type, member, n) \ ((offsetof (type, member) + FLEXALIGNOF (type) - 1 + (n)) \ & ~ (FLEXALIGNOF (type) - 1)) /* Yield a properly aligned upper bound on the size of a struct of type TYPE with a flexible array member named MEMBER that has N elements. The result is suitable as an argument to malloc. For example: struct s { int a; double d[FLEXIBLE_ARRAY_MEMBER]; }; struct s *p = malloc (FLEXNSIZEOF (struct s, d, n)); */ #define FLEXNSIZEOF(type, member, n) \ FLEXSIZEOF (type, member, (n) * sizeof (((type *) 0)->member[0])) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/warn-on-use.h��������������������������������������������������������������������������0000644�0001750�0001750�00000015532�14436425346�015464� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A C macro for emitting warnings if a function is used. Copyright (C) 2010-2023 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* _GL_WARN_ON_USE (function, "literal string") issues a declaration for FUNCTION which will then trigger a compiler warning containing the text of "literal string" anywhere that function is called, if supported by the compiler. If the compiler does not support this feature, the macro expands to an unused extern declaration. _GL_WARN_ON_USE_ATTRIBUTE ("literal string") expands to the attribute used in _GL_WARN_ON_USE. If the compiler does not support this feature, it expands to empty. These macros are useful for marking a function as a potential portability trap, with the intent that "literal string" include instructions on the replacement function that should be used instead. _GL_WARN_ON_USE is for functions with 'extern' linkage. _GL_WARN_ON_USE_ATTRIBUTE is for functions with 'static' or 'inline' linkage. However, one of the reasons that a function is a portability trap is if it has the wrong signature. Declaring FUNCTION with a different signature in C is a compilation error, so this macro must use the same type as any existing declaration so that programs that avoid the problematic FUNCTION do not fail to compile merely because they included a header that poisoned the function. But this implies that _GL_WARN_ON_USE is only safe to use if FUNCTION is known to already have a declaration. Use of this macro implies that there must not be any other macro hiding the declaration of FUNCTION; but undefining FUNCTION first is part of the poisoning process anyway (although for symbols that are provided only via a macro, the result is a compilation error rather than a warning containing "literal string"). Also note that in C++, it is only safe to use if FUNCTION has no overloads. For an example, it is possible to poison 'getline' by: - adding a call to gl_WARN_ON_USE_PREPARE([[#include <stdio.h>]], [getline]) in configure.ac, which potentially defines HAVE_RAW_DECL_GETLINE - adding this code to a header that wraps the system <stdio.h>: #undef getline #if HAVE_RAW_DECL_GETLINE _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but" "not universally present; use the gnulib module getline"); #endif It is not possible to directly poison global variables. But it is possible to write a wrapper accessor function, and poison that (less common usage, like &environ, will cause a compilation error rather than issue the nice warning, but the end result of informing the developer about their portability problem is still achieved): #if HAVE_RAW_DECL_ENVIRON static char *** rpl_environ (void) { return &environ; } _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared"); # undef environ # define environ (*rpl_environ ()) #endif or better (avoiding contradictory use of 'static' and 'extern'): #if HAVE_RAW_DECL_ENVIRON static char *** _GL_WARN_ON_USE_ATTRIBUTE ("environ is not always properly declared") rpl_environ (void) { return &environ; } # undef environ # define environ (*rpl_environ ()) #endif */ #ifndef _GL_WARN_ON_USE # if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) /* A compiler attribute is available in gcc versions 4.3.0 and later. */ # define _GL_WARN_ON_USE(function, message) \ _GL_WARN_EXTERN_C __typeof__ (function) function __attribute__ ((__warning__ (message))) # define _GL_WARN_ON_USE_ATTRIBUTE(message) \ __attribute__ ((__warning__ (message))) # elif __clang_major__ >= 4 /* Another compiler attribute is available in clang. */ # define _GL_WARN_ON_USE(function, message) \ _GL_WARN_EXTERN_C __typeof__ (function) function \ __attribute__ ((__diagnose_if__ (1, message, "warning"))) # define _GL_WARN_ON_USE_ATTRIBUTE(message) \ __attribute__ ((__diagnose_if__ (1, message, "warning"))) # elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING /* Verify the existence of the function. */ # define _GL_WARN_ON_USE(function, message) \ _GL_WARN_EXTERN_C __typeof__ (function) function # define _GL_WARN_ON_USE_ATTRIBUTE(message) # else /* Unsupported. */ # define _GL_WARN_ON_USE(function, message) \ _GL_WARN_EXTERN_C int _gl_warn_on_use # define _GL_WARN_ON_USE_ATTRIBUTE(message) # endif #endif /* _GL_WARN_ON_USE_CXX (function, rettype_gcc, rettype_clang, parameters_and_attributes, "message") is like _GL_WARN_ON_USE (function, "message"), except that in C++ mode the function is declared with the given prototype, consisting of return type, parameters, and attributes. This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does not work in this case. */ #ifndef _GL_WARN_ON_USE_CXX # if !defined __cplusplus # define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ _GL_WARN_ON_USE (function, msg) # else # if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) /* A compiler attribute is available in gcc versions 4.3.0 and later. */ # define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ extern rettype_gcc function parameters_and_attributes \ __attribute__ ((__warning__ (msg))) # elif __clang_major__ >= 4 /* Another compiler attribute is available in clang. */ # define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ extern rettype_clang function parameters_and_attributes \ __attribute__ ((__diagnose_if__ (1, msg, "warning"))) # elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING /* Verify the existence of the function. */ # define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ extern rettype_gcc function parameters_and_attributes # else /* Unsupported. */ # define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ _GL_WARN_EXTERN_C int _gl_warn_on_use # endif # endif #endif /* _GL_WARN_EXTERN_C declaration; performs the declaration with C linkage. */ #ifndef _GL_WARN_EXTERN_C # if defined __cplusplus # define _GL_WARN_EXTERN_C extern "C" # else # define _GL_WARN_EXTERN_C extern # endif #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/getopt-pfx-ext.h�����������������������������������������������������������������������0000644�0001750�0001750�00000005365�14436425345�016206� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* getopt (GNU extensions) gnulib wrapper header. Copyright (C) 1989-2023 Free Software Foundation, Inc. This file is part of gnulib. Unlike most of the getopt implementation, it is NOT shared with the GNU C Library. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _GETOPT_PFX_EXT_H #define _GETOPT_PFX_EXT_H 1 /* This header should not be used directly; include getopt.h instead. It does not have a protective #error, because the guard macro for getopt.h in gnulib is not fixed. */ /* Standalone applications should #define __GETOPT_PREFIX to an identifier that prefixes the external functions and variables defined in getopt-core.h and getopt-ext.h. Systematically rename identifiers so that they do not collide with the system functions and variables. Renaming avoids problems with some compilers and linkers. */ #ifdef __GETOPT_PREFIX # ifndef __GETOPT_ID # define __GETOPT_CONCAT(x, y) x ## y # define __GETOPT_XCONCAT(x, y) __GETOPT_CONCAT (x, y) # define __GETOPT_ID(y) __GETOPT_XCONCAT (__GETOPT_PREFIX, y) # endif # undef getopt_long # undef getopt_long_only # undef option # undef _getopt_internal # define getopt_long __GETOPT_ID (getopt_long) # define getopt_long_only __GETOPT_ID (getopt_long_only) # define option __GETOPT_ID (option) # define _getopt_internal __GETOPT_ID (getopt_internal) /* The system's getopt.h may have already included getopt-ext.h to declare the unprefixed identifiers. Undef _GETOPT_EXT_H so that getopt-ext.h declares them with prefixes. */ # undef _GETOPT_EXT_H #endif /* Standalone applications get correct prototypes for getopt_long and getopt_long_only; they declare "char **argv". For backward compatibility with old applications, if __GETOPT_PREFIX is not defined, we supply GNU-libc-compatible, but incorrect, prototypes using "char *const *argv". (GNU libc is stuck with the incorrect prototypes, as they are baked into older versions of LSB.) */ #ifndef __getopt_argv_const # if defined __GETOPT_PREFIX # define __getopt_argv_const /* empty */ # else # define __getopt_argv_const const # endif #endif #include <getopt-ext.h> #endif /* _GETOPT_PFX_EXT_H */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/c-ctype.h������������������������������������������������������������������������������0000644�0001750�0001750�00000022530�14436425345�014650� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Character handling in C locale. These functions work like the corresponding functions in <ctype.h>, except that they have the C (POSIX) locale hardwired, whereas the <ctype.h> functions' behaviour depends on the current locale set via setlocale. Copyright (C) 2000-2003, 2006, 2008-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef C_CTYPE_H #define C_CTYPE_H /* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef C_CTYPE_INLINE # define C_CTYPE_INLINE _GL_INLINE #endif #ifdef __cplusplus extern "C" { #endif /* The functions defined in this file assume the "C" locale and a character set without diacritics (ASCII-US or EBCDIC-US or something like that). Even if the "C" locale on a particular system is an extension of the ASCII character set (like on BeOS, where it is UTF-8, or on AmigaOS, where it is ISO-8859-1), the functions in this file recognize only the ASCII characters. */ #if (' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \ && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \ && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \ && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \ && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \ && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \ && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \ && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \ && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \ && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \ && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \ && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \ && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \ && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \ && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \ && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \ && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \ && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \ && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \ && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \ && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \ && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \ && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126) /* The character set is ASCII or one of its variants or extensions, not EBCDIC. Testing the value of '\n' and '\r' is not relevant. */ # define C_CTYPE_ASCII 1 #elif ! (' ' == '\x40' && '0' == '\xf0' \ && 'A' == '\xc1' && 'J' == '\xd1' && 'S' == '\xe2' \ && 'a' == '\x81' && 'j' == '\x91' && 's' == '\xa2') # error "Only ASCII and EBCDIC are supported" #endif #if 'A' < 0 # error "EBCDIC and char is signed -- not supported" #endif /* Cases for control characters. */ #define _C_CTYPE_CNTRL \ case '\a': case '\b': case '\f': case '\n': \ case '\r': case '\t': case '\v': \ _C_CTYPE_OTHER_CNTRL /* ASCII control characters other than those with \-letter escapes. */ #if C_CTYPE_ASCII # define _C_CTYPE_OTHER_CNTRL \ case '\x00': case '\x01': case '\x02': case '\x03': \ case '\x04': case '\x05': case '\x06': case '\x0e': \ case '\x0f': case '\x10': case '\x11': case '\x12': \ case '\x13': case '\x14': case '\x15': case '\x16': \ case '\x17': case '\x18': case '\x19': case '\x1a': \ case '\x1b': case '\x1c': case '\x1d': case '\x1e': \ case '\x1f': case '\x7f' #else /* Use EBCDIC code page 1047's assignments for ASCII control chars; assume all EBCDIC code pages agree about these assignments. */ # define _C_CTYPE_OTHER_CNTRL \ case '\x00': case '\x01': case '\x02': case '\x03': \ case '\x07': case '\x0e': case '\x0f': case '\x10': \ case '\x11': case '\x12': case '\x13': case '\x18': \ case '\x19': case '\x1c': case '\x1d': case '\x1e': \ case '\x1f': case '\x26': case '\x27': case '\x2d': \ case '\x2e': case '\x32': case '\x37': case '\x3c': \ case '\x3d': case '\x3f' #endif /* Cases for lowercase hex letters, and lowercase letters, all offset by N. */ #define _C_CTYPE_LOWER_A_THRU_F_N(N) \ case 'a' + (N): case 'b' + (N): case 'c' + (N): case 'd' + (N): \ case 'e' + (N): case 'f' + (N) #define _C_CTYPE_LOWER_N(N) \ _C_CTYPE_LOWER_A_THRU_F_N(N): \ case 'g' + (N): case 'h' + (N): case 'i' + (N): case 'j' + (N): \ case 'k' + (N): case 'l' + (N): case 'm' + (N): case 'n' + (N): \ case 'o' + (N): case 'p' + (N): case 'q' + (N): case 'r' + (N): \ case 's' + (N): case 't' + (N): case 'u' + (N): case 'v' + (N): \ case 'w' + (N): case 'x' + (N): case 'y' + (N): case 'z' + (N) /* Cases for hex letters, digits, lower, punct, and upper. */ #define _C_CTYPE_A_THRU_F \ _C_CTYPE_LOWER_A_THRU_F_N (0): \ _C_CTYPE_LOWER_A_THRU_F_N ('A' - 'a') #define _C_CTYPE_DIGIT \ case '0': case '1': case '2': case '3': \ case '4': case '5': case '6': case '7': \ case '8': case '9' #define _C_CTYPE_LOWER _C_CTYPE_LOWER_N (0) #define _C_CTYPE_PUNCT \ case '!': case '"': case '#': case '$': \ case '%': case '&': case '\'': case '(': \ case ')': case '*': case '+': case ',': \ case '-': case '.': case '/': case ':': \ case ';': case '<': case '=': case '>': \ case '?': case '@': case '[': case '\\': \ case ']': case '^': case '_': case '`': \ case '{': case '|': case '}': case '~' #define _C_CTYPE_UPPER _C_CTYPE_LOWER_N ('A' - 'a') /* Function definitions. */ /* Unlike the functions in <ctype.h>, which require an argument in the range of the 'unsigned char' type, the functions here operate on values that are in the 'unsigned char' range or in the 'char' range. In other words, when you have a 'char' value, you need to cast it before using it as argument to a <ctype.h> function: const char *s = ...; if (isalpha ((unsigned char) *s)) ... but you don't need to cast it for the functions defined in this file: const char *s = ...; if (c_isalpha (*s)) ... */ C_CTYPE_INLINE bool c_isalnum (int c) { switch (c) { _C_CTYPE_DIGIT: _C_CTYPE_LOWER: _C_CTYPE_UPPER: return true; default: return false; } } C_CTYPE_INLINE bool c_isalpha (int c) { switch (c) { _C_CTYPE_LOWER: _C_CTYPE_UPPER: return true; default: return false; } } /* The function isascii is not locale dependent. Its use in EBCDIC is questionable. */ C_CTYPE_INLINE bool c_isascii (int c) { switch (c) { case ' ': _C_CTYPE_CNTRL: _C_CTYPE_DIGIT: _C_CTYPE_LOWER: _C_CTYPE_PUNCT: _C_CTYPE_UPPER: return true; default: return false; } } C_CTYPE_INLINE bool c_isblank (int c) { return c == ' ' || c == '\t'; } C_CTYPE_INLINE bool c_iscntrl (int c) { switch (c) { _C_CTYPE_CNTRL: return true; default: return false; } } C_CTYPE_INLINE bool c_isdigit (int c) { switch (c) { _C_CTYPE_DIGIT: return true; default: return false; } } C_CTYPE_INLINE bool c_isgraph (int c) { switch (c) { _C_CTYPE_DIGIT: _C_CTYPE_LOWER: _C_CTYPE_PUNCT: _C_CTYPE_UPPER: return true; default: return false; } } C_CTYPE_INLINE bool c_islower (int c) { switch (c) { _C_CTYPE_LOWER: return true; default: return false; } } C_CTYPE_INLINE bool c_isprint (int c) { switch (c) { case ' ': _C_CTYPE_DIGIT: _C_CTYPE_LOWER: _C_CTYPE_PUNCT: _C_CTYPE_UPPER: return true; default: return false; } } C_CTYPE_INLINE bool c_ispunct (int c) { switch (c) { _C_CTYPE_PUNCT: return true; default: return false; } } C_CTYPE_INLINE bool c_isspace (int c) { switch (c) { case ' ': case '\t': case '\n': case '\v': case '\f': case '\r': return true; default: return false; } } C_CTYPE_INLINE bool c_isupper (int c) { switch (c) { _C_CTYPE_UPPER: return true; default: return false; } } C_CTYPE_INLINE bool c_isxdigit (int c) { switch (c) { _C_CTYPE_DIGIT: _C_CTYPE_A_THRU_F: return true; default: return false; } } C_CTYPE_INLINE int c_tolower (int c) { switch (c) { _C_CTYPE_UPPER: return c - 'A' + 'a'; default: return c; } } C_CTYPE_INLINE int c_toupper (int c) { switch (c) { _C_CTYPE_LOWER: return c - 'a' + 'A'; default: return c; } } #ifdef __cplusplus } #endif _GL_INLINE_HEADER_END #endif /* C_CTYPE_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/getopt-cdefs.in.h����������������������������������������������������������������������0000644�0001750�0001750�00000004046�14436425345�016277� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* getopt-on-non-glibc compatibility macros. Copyright (C) 1989-2023 Free Software Foundation, Inc. This file is part of gnulib. Unlike most of the getopt implementation, it is NOT shared with the GNU C Library. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _GETOPT_CDEFS_H #define _GETOPT_CDEFS_H 1 /* This header should not be used directly; include getopt.h or unistd.h instead. It does not have a protective #error, because the guard macro for getopt.h in gnulib is not fixed. */ /* getopt-core.h and getopt-ext.h are shared with GNU libc, and expect a number of the internal macros supplied to GNU libc's headers by sys/cdefs.h. Provide fallback definitions for all of them. */ #if @HAVE_SYS_CDEFS_H@ # include <sys/cdefs.h> #endif #ifndef __BEGIN_DECLS # ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # else # define __BEGIN_DECLS /* nothing */ # endif #endif #ifndef __END_DECLS # ifdef __cplusplus # define __END_DECLS } # else # define __END_DECLS /* nothing */ # endif #endif #ifndef __GNUC_PREREQ # if defined __GNUC__ && defined __GNUC_VERSION__ # define __GNUC_PREREQ(maj, min) \ ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min)) # else # define __GNUC_PREREQ(maj, min) 0 # endif #endif #ifndef __THROW # if defined __cplusplus && (__GNUC_PREREQ (2,8) || __clang_major__ >= 4) # define __THROW throw () # else # define __THROW # endif #endif #endif /* _GETOPT_CDEFS_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/getprogname.h��������������������������������������������������������������������������0000644�0001750�0001750�00000001710�14436425345�015611� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Program name management. Copyright (C) 2016-2023 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _GL_GETPROGNAME_H #define _GL_GETPROGNAME_H #include <stdlib.h> #if __GNUC__ || (__clang_major__ >= 4) # warning "The include file getprogname.h is deprecated. Use <stdlib.h> instead." #endif #endif ��������������������������������������������������������rush-2.4/gnu/mbtowc-impl.h��������������������������������������������������������������������������0000644�0001750�0001750�00000002650�14436425346�015540� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert multibyte character to wide character. Copyright (C) 2011-2023 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* We don't need a static internal state, because the encoding is not state dependent, and when mbrtowc returns (size_t)(-2). we throw the result away. */ int mbtowc (wchar_t *pwc, const char *s, size_t n) { if (s == NULL) return 0; else { mbstate_t state; wchar_t wc; size_t result; memset (&state, 0, sizeof (mbstate_t)); result = mbrtowc (&wc, s, n, &state); if (result == (size_t)-1 || result == (size_t)-2) { errno = EILSEQ; return -1; } if (pwc != NULL) *pwc = wc; return (wc == 0 ? 0 : result); } } ����������������������������������������������������������������������������������������rush-2.4/gnu/c-ctype.c������������������������������������������������������������������������������0000644�0001750�0001750�00000001513�14436425345�014641� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Character handling in C locale. Copyright (C) 2003-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #define C_CTYPE_INLINE _GL_EXTERN_INLINE #include "c-ctype.h" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/Makefile.am����������������������������������������������������������������������������0000644�0001750�0001750�00000252440�14436424631�015171� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## DO NOT EDIT! GENERATED AUTOMATICALLY! ## Process this file with automake to produce Makefile.in. # Copyright (C) 2002-2023 Free Software Foundation, Inc. # # 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 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 file. If not, see <https://www.gnu.org/licenses/>. # # As a special exception to the GNU General Public License, # this file may be distributed as part of a program that # contains a configuration script generated by Autoconf, under # the same distribution terms as the rest of that program. # # Generated by gnulib-tool. # Reproduce by: # gnulib-tool --import --local-dir=gl \ # --lib=libgnu \ # --source-base=gnu \ # --m4-base=m4 \ # --doc-base=doc \ # --tests-base=tests \ # --aux-dir=build-aux \ # --no-conditional-dependencies \ # --no-libtool \ # --macro-prefix=gl \ # --avoid=xalloc-die \ # --avoid=openat-die \ # c-ctype \ # dirname \ # error \ # fprintftime \ # getline \ # getopt-gnu \ # gettext-h \ # gitlog-to-changelog \ # inttostr \ # regex \ # strerror \ # xalloc AUTOMAKE_OPTIONS = 1.14 gnits subdir-objects SUBDIRS = noinst_HEADERS = noinst_LIBRARIES = noinst_LTLIBRARIES = EXTRA_DIST = BUILT_SOURCES = SUFFIXES = MOSTLYCLEANFILES = core *.stackdump MOSTLYCLEANDIRS = CLEANFILES = DISTCLEANFILES = MAINTAINERCLEANFILES = # No GNU Make output. AM_CPPFLAGS = AM_CFLAGS = noinst_LIBRARIES += libgnu.a libgnu_a_SOURCES = libgnu_a_CFLAGS = $(AM_CFLAGS) $(GL_CFLAG_GNULIB_WARNINGS) libgnu_a_LIBADD = $(gl_LIBOBJS) libgnu_a_DEPENDENCIES = $(gl_LIBOBJS) EXTRA_libgnu_a_SOURCES = ## begin gnulib module absolute-header # Use this preprocessor expression to decide whether #include_next works. # Do not rely on a 'configure'-time test for this, since the expression # might appear in an installed header, which is used by some other compiler. HAVE_INCLUDE_NEXT = (__GNUC__ || __clang__ || 60000000 <= __DECC_VER) ## end gnulib module absolute-header ## begin gnulib module alloca-opt BUILT_SOURCES += $(ALLOCA_H) # We need the following in order to create <alloca.h> when the system # doesn't have one that works with the given compiler. if GL_GENERATE_ALLOCA_H alloca.h: alloca.in.h $(top_builddir)/config.status $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''HAVE_ALLOCA_H''@|$(HAVE_ALLOCA_H)|g' \ $(srcdir)/alloca.in.h > $@-t $(AM_V_at)mv $@-t $@ else alloca.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += alloca.h alloca.h-t EXTRA_DIST += alloca.in.h ## end gnulib module alloca-opt ## begin gnulib module assert-h BUILT_SOURCES += $(ASSERT_H) # We need the following in order to create <assert.h> when the system # doesn't have one that works with the given compiler. if GL_GENERATE_ASSERT_H assert.h: assert.in.h verify.h $(top_builddir)/config.status $(gl_V_at){ $(SED_HEADER_STDOUT) \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_ASSERT_H''@|$(NEXT_ASSERT_H)|g' \ < $(srcdir)/assert.in.h && \ sed -e '/@assert.h omit start@/,/@assert.h omit end@/d' \ -e 's|_gl_verify|_gl_static_assert|g' \ -e 's|_GL_VERIFY|_GL_STATIC_ASSERT|g' \ -e 's|_GL\(_STATIC_ASSERT_H\)|_GL\1|g' \ < $(srcdir)/verify.h; \ } > $@-t $(AM_V_at)mv $@-t $@ else assert.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += assert.h assert.h-t EXTRA_DIST += assert.in.h verify.h ## end gnulib module assert-h ## begin gnulib module attribute EXTRA_DIST += attribute.h ## end gnulib module attribute ## begin gnulib module basename-lgpl libgnu_a_SOURCES += basename-lgpl.c EXTRA_DIST += basename-lgpl.h ## end gnulib module basename-lgpl ## begin gnulib module btowc if GL_COND_OBJ_BTOWC libgnu_a_SOURCES += btowc.c endif ## end gnulib module btowc ## begin gnulib module c-ctype libgnu_a_SOURCES += c-ctype.h c-ctype.c ## end gnulib module c-ctype ## begin gnulib module calloc-gnu EXTRA_DIST += calloc.c EXTRA_libgnu_a_SOURCES += calloc.c ## end gnulib module calloc-gnu ## begin gnulib module calloc-posix EXTRA_DIST += calloc.c EXTRA_libgnu_a_SOURCES += calloc.c ## end gnulib module calloc-posix ## begin gnulib module cloexec libgnu_a_SOURCES += cloexec.c EXTRA_DIST += cloexec.h ## end gnulib module cloexec ## begin gnulib module close if GL_COND_OBJ_CLOSE libgnu_a_SOURCES += close.c endif ## end gnulib module close ## begin gnulib module dirname libgnu_a_SOURCES += dirname.c basename.c EXTRA_DIST += stripslash.c EXTRA_libgnu_a_SOURCES += stripslash.c ## end gnulib module dirname ## begin gnulib module dirname-lgpl libgnu_a_SOURCES += dirname-lgpl.c stripslash.c EXTRA_DIST += dirname.h ## end gnulib module dirname-lgpl ## begin gnulib module dup2 if GL_COND_OBJ_DUP2 libgnu_a_SOURCES += dup2.c endif ## end gnulib module dup2 ## begin gnulib module errno BUILT_SOURCES += $(ERRNO_H) # We need the following in order to create <errno.h> when the system # doesn't have one that is POSIX compliant. if GL_GENERATE_ERRNO_H errno.h: errno.in.h $(top_builddir)/config.status $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_ERRNO_H''@|$(NEXT_ERRNO_H)|g' \ -e 's|@''EMULTIHOP_HIDDEN''@|$(EMULTIHOP_HIDDEN)|g' \ -e 's|@''EMULTIHOP_VALUE''@|$(EMULTIHOP_VALUE)|g' \ -e 's|@''ENOLINK_HIDDEN''@|$(ENOLINK_HIDDEN)|g' \ -e 's|@''ENOLINK_VALUE''@|$(ENOLINK_VALUE)|g' \ -e 's|@''EOVERFLOW_HIDDEN''@|$(EOVERFLOW_HIDDEN)|g' \ -e 's|@''EOVERFLOW_VALUE''@|$(EOVERFLOW_VALUE)|g' \ $(srcdir)/errno.in.h > $@-t $(AM_V_at)mv $@-t $@ else errno.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += errno.h errno.h-t EXTRA_DIST += errno.in.h ## end gnulib module errno ## begin gnulib module error if GL_COND_OBJ_ERROR libgnu_a_SOURCES += error.c endif ## end gnulib module error ## begin gnulib module error-h BUILT_SOURCES += error.h # We need the following in order to override <error.h>. error.h: error.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''HAVE_ERROR_H''@|$(HAVE_ERROR_H)|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''NEXT_ERROR_H''@|$(NEXT_ERROR_H)|g' \ -e 's|@''HAVE_ERROR''@|$(HAVE_ERROR)|g' \ -e 's|@''HAVE_ERROR_AT_LINE''@|$(HAVE_ERROR_AT_LINE)|g' \ -e 's|@''REPLACE_ERROR''@|$(REPLACE_ERROR)|g' \ -e 's|@''REPLACE_ERROR_AT_LINE''@|$(REPLACE_ERROR_AT_LINE)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ $(srcdir)/error.in.h > $@-t $(AM_V_at)mv $@-t $@ MOSTLYCLEANFILES += error.h error.h-t EXTRA_DIST += error.in.h ## end gnulib module error-h ## begin gnulib module fcntl if GL_COND_OBJ_FCNTL libgnu_a_SOURCES += fcntl.c endif ## end gnulib module fcntl ## begin gnulib module fcntl-h BUILT_SOURCES += fcntl.h # We need the following in order to create <fcntl.h> when the system # doesn't have one that works with the given compiler. fcntl.h: fcntl.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_FCNTL_H''@|$(NEXT_FCNTL_H)|g' \ -e 's/@''GNULIB_CREAT''@/$(GL_GNULIB_CREAT)/g' \ -e 's/@''GNULIB_FCNTL''@/$(GL_GNULIB_FCNTL)/g' \ -e 's/@''GNULIB_NONBLOCKING''@/$(GL_GNULIB_NONBLOCKING)/g' \ -e 's/@''GNULIB_OPEN''@/$(GL_GNULIB_OPEN)/g' \ -e 's/@''GNULIB_OPENAT''@/$(GL_GNULIB_OPENAT)/g' \ -e 's/@''GNULIB_MDA_CREAT''@/$(GL_GNULIB_MDA_CREAT)/g' \ -e 's/@''GNULIB_MDA_OPEN''@/$(GL_GNULIB_MDA_OPEN)/g' \ -e 's|@''HAVE_FCNTL''@|$(HAVE_FCNTL)|g' \ -e 's|@''HAVE_OPENAT''@|$(HAVE_OPENAT)|g' \ -e 's|@''REPLACE_CREAT''@|$(REPLACE_CREAT)|g' \ -e 's|@''REPLACE_FCNTL''@|$(REPLACE_FCNTL)|g' \ -e 's|@''REPLACE_OPEN''@|$(REPLACE_OPEN)|g' \ -e 's|@''REPLACE_OPENAT''@|$(REPLACE_OPENAT)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/fcntl.in.h > $@-t $(AM_V_at)mv $@-t $@ MOSTLYCLEANFILES += fcntl.h fcntl.h-t EXTRA_DIST += fcntl.in.h ## end gnulib module fcntl-h ## begin gnulib module fd-hook libgnu_a_SOURCES += fd-hook.c EXTRA_DIST += fd-hook.h ## end gnulib module fd-hook ## begin gnulib module filename EXTRA_DIST += filename.h ## end gnulib module filename ## begin gnulib module flexmember EXTRA_DIST += flexmember.h ## end gnulib module flexmember ## begin gnulib module fprintftime libgnu_a_SOURCES += fprintftime.c EXTRA_DIST += fprintftime.h ## end gnulib module fprintftime ## begin gnulib module free-posix if GL_COND_OBJ_FREE libgnu_a_SOURCES += free.c endif ## end gnulib module free-posix ## begin gnulib module fstat if GL_COND_OBJ_FSTAT libgnu_a_SOURCES += fstat.c endif EXTRA_DIST += stat-w32.c stat-w32.h EXTRA_libgnu_a_SOURCES += stat-w32.c ## end gnulib module fstat ## begin gnulib module gen-header # In 'sed', replace the pattern space with a "DO NOT EDIT" comment. SED_HEADER_NOEDIT = s,.*,/* DO NOT EDIT! GENERATED AUTOMATICALLY! */, # '$(SED_HEADER_STDOUT) -e "..."' runs 'sed' but first outputs "DO NOT EDIT". SED_HEADER_STDOUT = sed -e 1h -e '1$(SED_HEADER_NOEDIT)' -e 1G # '$(SED_HEADER_TO_AT_t) FILE' copies FILE to $@-t, prepending a leading # "DO_NOT_EDIT". Although this could be done more simply via: # SED_HEADER_TO_AT_t = $(SED_HEADER_STDOUT) > $@-t # the -n and 'w' avoid a fork+exec, at least when GNU Make is used. SED_HEADER_TO_AT_t = $(SED_HEADER_STDOUT) -n -e 'w $@-t' # Use $(gl_V_at) instead of $(AM_V_GEN) or $(AM_V_at) on a line that gl_V_at = $(AM_V_GEN) ## end gnulib module gen-header ## begin gnulib module getdelim if GL_COND_OBJ_GETDELIM libgnu_a_SOURCES += getdelim.c endif ## end gnulib module getdelim ## begin gnulib module getdtablesize if GL_COND_OBJ_GETDTABLESIZE libgnu_a_SOURCES += getdtablesize.c endif ## end gnulib module getdtablesize ## begin gnulib module getline if GL_COND_OBJ_GETLINE libgnu_a_SOURCES += getline.c endif ## end gnulib module getline ## begin gnulib module getopt-posix BUILT_SOURCES += $(GETOPT_H) $(GETOPT_CDEFS_H) # We need the following in order to create <getopt.h> when the system # doesn't have one that works with the given compiler. if GL_GENERATE_GETOPT_H getopt.h: getopt.in.h $(top_builddir)/config.status $(ARG_NONNULL_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''HAVE_GETOPT_H''@|$(HAVE_GETOPT_H)|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_GETOPT_H''@|$(NEXT_GETOPT_H)|g' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ $(srcdir)/getopt.in.h > $@-t $(AM_V_at)mv $@-t $@ else getopt.h: $(top_builddir)/config.status rm -f $@ endif if GL_GENERATE_GETOPT_CDEFS_H getopt-cdefs.h: getopt-cdefs.in.h $(top_builddir)/config.status $(AM_V_GEN)$(SED_HEADER_STDOUT) \ -e 's|@''HAVE_SYS_CDEFS_H''@|$(HAVE_SYS_CDEFS_H)|g' \ $(srcdir)/getopt-cdefs.in.h > $@-t $(AM_V_at)mv $@-t $@ else getopt-cdefs.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += getopt.h getopt.h-t getopt-cdefs.h getopt-cdefs.h-t if GL_COND_OBJ_GETOPT libgnu_a_SOURCES += getopt.c getopt1.c endif EXTRA_DIST += getopt-cdefs.in.h getopt-core.h getopt-ext.h getopt-pfx-core.h getopt-pfx-ext.h getopt.in.h getopt_int.h ## end gnulib module getopt-posix ## begin gnulib module getprogname if GL_COND_OBJ_GETPROGNAME libgnu_a_SOURCES += getprogname.c endif EXTRA_DIST += getprogname.h ## end gnulib module getprogname ## begin gnulib module gettext-h libgnu_a_SOURCES += gettext.h ## end gnulib module gettext-h ## begin gnulib module gitlog-to-changelog EXTRA_DIST += $(top_srcdir)/build-aux/gitlog-to-changelog ## end gnulib module gitlog-to-changelog ## begin gnulib module glibc-internal/dynarray BUILT_SOURCES += malloc/dynarray.gl.h malloc/dynarray-skeleton.gl.h malloc/dynarray.gl.h: malloc/dynarray.h $(AM_V_GEN)$(MKDIR_P) '%reldir%/malloc' $(AM_V_at)$(SED_HEADER_STDOUT) \ -e '/libc_hidden_proto/d' \ $(srcdir)/malloc/dynarray.h > $@-t $(AM_V_at)mv $@-t $@ MOSTLYCLEANFILES += malloc/dynarray.gl.h malloc/dynarray.gl.h-t malloc/dynarray-skeleton.gl.h: malloc/dynarray-skeleton.c $(AM_V_GEN)$(MKDIR_P) '%reldir%/malloc' $(AM_V_at)$(SED_HEADER_STDOUT) \ -e 's|<malloc/dynarray\.h>|<malloc/dynarray.gl.h>|g' \ -e 's|__attribute_maybe_unused__|_GL_ATTRIBUTE_MAYBE_UNUSED|g' \ -e 's|__attribute_nonnull__|_GL_ATTRIBUTE_NONNULL|g' \ -e 's|__attribute_warn_unused_result__|_GL_ATTRIBUTE_NODISCARD|g' \ -e 's|__glibc_likely|_GL_LIKELY|g' \ -e 's|__glibc_unlikely|_GL_UNLIKELY|g' \ $(srcdir)/malloc/dynarray-skeleton.c > $@-t $(AM_V_at)mv $@-t $@ MOSTLYCLEANFILES += malloc/dynarray-skeleton.gl.h malloc/dynarray-skeleton.gl.h-t libgnu_a_SOURCES += malloc/dynarray_at_failure.c malloc/dynarray_emplace_enlarge.c malloc/dynarray_finalize.c malloc/dynarray_resize.c malloc/dynarray_resize_clear.c EXTRA_DIST += dynarray.h malloc/dynarray-skeleton.c malloc/dynarray.h EXTRA_libgnu_a_SOURCES += malloc/dynarray-skeleton.c ## end gnulib module glibc-internal/dynarray ## begin gnulib module hard-locale libgnu_a_SOURCES += hard-locale.c EXTRA_DIST += hard-locale.h ## end gnulib module hard-locale ## begin gnulib module ialloc libgnu_a_SOURCES += ialloc.c EXTRA_DIST += ialloc.h ## end gnulib module ialloc ## begin gnulib module idx libgnu_a_SOURCES += idx.h ## end gnulib module idx ## begin gnulib module intprops EXTRA_DIST += intprops-internal.h intprops.h ## end gnulib module intprops ## begin gnulib module inttostr libgnu_a_SOURCES += imaxtostr.c inttostr.c offtostr.c uinttostr.c umaxtostr.c EXTRA_DIST += anytostr.c inttostr.h EXTRA_libgnu_a_SOURCES += anytostr.c ## end gnulib module inttostr ## begin gnulib module inttypes-incomplete BUILT_SOURCES += inttypes.h # We need the following in order to create <inttypes.h> when the system # doesn't have one that works with the given compiler. inttypes.h: inttypes.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(ARG_NONNULL_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_INTTYPES_H''@|$(NEXT_INTTYPES_H)|g' \ -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \ -e 's/@''PRIPTR_PREFIX''@/$(PRIPTR_PREFIX)/g' \ -e 's/@''GNULIB_IMAXABS''@/$(GL_GNULIB_IMAXABS)/g' \ -e 's/@''GNULIB_IMAXDIV''@/$(GL_GNULIB_IMAXDIV)/g' \ -e 's/@''GNULIB_STRTOIMAX''@/$(GL_GNULIB_STRTOIMAX)/g' \ -e 's/@''GNULIB_STRTOUMAX''@/$(GL_GNULIB_STRTOUMAX)/g' \ -e 's/@''HAVE_DECL_IMAXABS''@/$(HAVE_DECL_IMAXABS)/g' \ -e 's/@''HAVE_DECL_IMAXDIV''@/$(HAVE_DECL_IMAXDIV)/g' \ -e 's/@''HAVE_DECL_STRTOIMAX''@/$(HAVE_DECL_STRTOIMAX)/g' \ -e 's/@''HAVE_DECL_STRTOUMAX''@/$(HAVE_DECL_STRTOUMAX)/g' \ -e 's/@''HAVE_IMAXDIV_T''@/$(HAVE_IMAXDIV_T)/g' \ -e 's/@''REPLACE_IMAXABS''@/$(REPLACE_IMAXABS)/g' \ -e 's/@''REPLACE_IMAXDIV''@/$(REPLACE_IMAXDIV)/g' \ -e 's/@''REPLACE_STRTOIMAX''@/$(REPLACE_STRTOIMAX)/g' \ -e 's/@''REPLACE_STRTOUMAX''@/$(REPLACE_STRTOUMAX)/g' \ -e 's/@''INT32_MAX_LT_INTMAX_MAX''@/$(INT32_MAX_LT_INTMAX_MAX)/g' \ -e 's/@''INT64_MAX_EQ_LONG_MAX''@/$(INT64_MAX_EQ_LONG_MAX)/g' \ -e 's/@''UINT32_MAX_LT_UINTMAX_MAX''@/$(UINT32_MAX_LT_UINTMAX_MAX)/g' \ -e 's/@''UINT64_MAX_EQ_ULONG_MAX''@/$(UINT64_MAX_EQ_ULONG_MAX)/g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/inttypes.in.h > $@-t $(AM_V_at)mv $@-t $@ MOSTLYCLEANFILES += inttypes.h inttypes.h-t EXTRA_DIST += inttypes.in.h ## end gnulib module inttypes-incomplete ## begin gnulib module langinfo BUILT_SOURCES += langinfo.h # We need the following in order to create an empty placeholder for # <langinfo.h> when the system doesn't have one. langinfo.h: langinfo.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''HAVE_LANGINFO_H''@|$(HAVE_LANGINFO_H)|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_LANGINFO_H''@|$(NEXT_LANGINFO_H)|g' \ -e 's/@''GNULIB_NL_LANGINFO''@/$(GL_GNULIB_NL_LANGINFO)/g' \ -e 's|@''HAVE_LANGINFO_CODESET''@|$(HAVE_LANGINFO_CODESET)|g' \ -e 's|@''HAVE_LANGINFO_T_FMT_AMPM''@|$(HAVE_LANGINFO_T_FMT_AMPM)|g' \ -e 's|@''HAVE_LANGINFO_ALTMON''@|$(HAVE_LANGINFO_ALTMON)|g' \ -e 's|@''HAVE_LANGINFO_ERA''@|$(HAVE_LANGINFO_ERA)|g' \ -e 's|@''HAVE_LANGINFO_YESEXPR''@|$(HAVE_LANGINFO_YESEXPR)|g' \ -e 's|@''HAVE_NL_LANGINFO''@|$(HAVE_NL_LANGINFO)|g' \ -e 's|@''REPLACE_NL_LANGINFO''@|$(REPLACE_NL_LANGINFO)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/langinfo.in.h > $@-t $(AM_V_at)mv $@-t $@ MOSTLYCLEANFILES += langinfo.h langinfo.h-t EXTRA_DIST += langinfo.in.h ## end gnulib module langinfo ## begin gnulib module libc-config EXTRA_DIST += cdefs.h libc-config.h ## end gnulib module libc-config ## begin gnulib module limits-h BUILT_SOURCES += $(LIMITS_H) # We need the following in order to create <limits.h> when the system # doesn't have one that is compatible with GNU. if GL_GENERATE_LIMITS_H limits.h: limits.in.h $(top_builddir)/config.status $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_LIMITS_H''@|$(NEXT_LIMITS_H)|g' \ $(srcdir)/limits.in.h > $@-t $(AM_V_at)mv $@-t $@ else limits.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += limits.h limits.h-t EXTRA_DIST += limits.in.h ## end gnulib module limits-h ## begin gnulib module localcharset libgnu_a_SOURCES += localcharset.c EXTRA_DIST += localcharset.h ## end gnulib module localcharset ## begin gnulib module locale BUILT_SOURCES += locale.h # We need the following in order to create <locale.h> when the system # doesn't have one that provides all definitions. locale.h: locale.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_LOCALE_H''@|$(NEXT_LOCALE_H)|g' \ -e 's/@''GNULIB_LOCALECONV''@/$(GL_GNULIB_LOCALECONV)/g' \ -e 's/@''GNULIB_SETLOCALE''@/$(GL_GNULIB_SETLOCALE)/g' \ -e 's/@''GNULIB_SETLOCALE_NULL''@/$(GL_GNULIB_SETLOCALE_NULL)/g' \ -e 's/@''GNULIB_DUPLOCALE''@/$(GL_GNULIB_DUPLOCALE)/g' \ -e 's/@''GNULIB_LOCALENAME''@/$(GL_GNULIB_LOCALENAME)/g' \ -e 's|@''HAVE_NEWLOCALE''@|$(HAVE_NEWLOCALE)|g' \ -e 's|@''HAVE_DUPLOCALE''@|$(HAVE_DUPLOCALE)|g' \ -e 's|@''HAVE_FREELOCALE''@|$(HAVE_FREELOCALE)|g' \ -e 's|@''HAVE_XLOCALE_H''@|$(HAVE_XLOCALE_H)|g' \ -e 's|@''REPLACE_LOCALECONV''@|$(REPLACE_LOCALECONV)|g' \ -e 's|@''REPLACE_SETLOCALE''@|$(REPLACE_SETLOCALE)|g' \ -e 's|@''REPLACE_NEWLOCALE''@|$(REPLACE_NEWLOCALE)|g' \ -e 's|@''REPLACE_DUPLOCALE''@|$(REPLACE_DUPLOCALE)|g' \ -e 's|@''REPLACE_FREELOCALE''@|$(REPLACE_FREELOCALE)|g' \ -e 's|@''REPLACE_STRUCT_LCONV''@|$(REPLACE_STRUCT_LCONV)|g' \ -e 's|@''LOCALENAME_ENHANCE_LOCALE_FUNCS''@|$(LOCALENAME_ENHANCE_LOCALE_FUNCS)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/locale.in.h > $@-t $(AM_V_at)mv $@-t $@ MOSTLYCLEANFILES += locale.h locale.h-t EXTRA_DIST += locale.in.h ## end gnulib module locale ## begin gnulib module localeconv if GL_COND_OBJ_LOCALECONV libgnu_a_SOURCES += localeconv.c endif ## end gnulib module localeconv ## begin gnulib module lock libgnu_a_SOURCES += glthread/lock.h glthread/lock.c ## end gnulib module lock ## begin gnulib module malloc-gnu EXTRA_DIST += malloc.c EXTRA_libgnu_a_SOURCES += malloc.c ## end gnulib module malloc-gnu ## begin gnulib module malloc-posix EXTRA_DIST += malloc.c EXTRA_libgnu_a_SOURCES += malloc.c ## end gnulib module malloc-posix ## begin gnulib module malloca libgnu_a_SOURCES += malloca.c EXTRA_DIST += malloca.h ## end gnulib module malloca ## begin gnulib module mbrtowc if GL_COND_OBJ_MBRTOWC libgnu_a_SOURCES += mbrtowc.c endif EXTRA_DIST += lc-charset-dispatch.c lc-charset-dispatch.h mbrtowc-impl-utf8.h mbrtowc-impl.h mbtowc-lock.c mbtowc-lock.h windows-initguard.h EXTRA_libgnu_a_SOURCES += lc-charset-dispatch.c mbtowc-lock.c ## end gnulib module mbrtowc ## begin gnulib module mbsinit if GL_COND_OBJ_MBSINIT libgnu_a_SOURCES += mbsinit.c endif ## end gnulib module mbsinit ## begin gnulib module mbtowc if GL_COND_OBJ_MBTOWC libgnu_a_SOURCES += mbtowc.c endif EXTRA_DIST += mbtowc-impl.h ## end gnulib module mbtowc ## begin gnulib module minmax libgnu_a_SOURCES += minmax.h ## end gnulib module minmax ## begin gnulib module mktime EXTRA_DIST += mktime-internal.h mktime.c EXTRA_libgnu_a_SOURCES += mktime.c ## end gnulib module mktime ## begin gnulib module mktime-internal EXTRA_DIST += mktime-internal.h mktime.c EXTRA_libgnu_a_SOURCES += mktime.c ## end gnulib module mktime-internal ## begin gnulib module msvc-inval if GL_COND_OBJ_MSVC_INVAL libgnu_a_SOURCES += msvc-inval.c endif EXTRA_DIST += msvc-inval.h ## end gnulib module msvc-inval ## begin gnulib module msvc-nothrow if GL_COND_OBJ_MSVC_NOTHROW libgnu_a_SOURCES += msvc-nothrow.c endif EXTRA_DIST += msvc-nothrow.h ## end gnulib module msvc-nothrow ## begin gnulib module nl_langinfo if GL_COND_OBJ_NL_LANGINFO libgnu_a_SOURCES += nl_langinfo.c endif if GL_COND_OBJ_NL_LANGINFO_LOCK libgnu_a_SOURCES += nl_langinfo-lock.c endif EXTRA_DIST += windows-initguard.h ## end gnulib module nl_langinfo ## begin gnulib module nstrftime libgnu_a_SOURCES += nstrftime.c EXTRA_DIST += strftime.h ## end gnulib module nstrftime ## begin gnulib module open if GL_COND_OBJ_OPEN libgnu_a_SOURCES += open.c endif ## end gnulib module open ## begin gnulib module pathmax EXTRA_DIST += pathmax.h ## end gnulib module pathmax ## begin gnulib module realloc-gnu EXTRA_DIST += realloc.c EXTRA_libgnu_a_SOURCES += realloc.c ## end gnulib module realloc-gnu ## begin gnulib module realloc-posix EXTRA_DIST += realloc.c EXTRA_libgnu_a_SOURCES += realloc.c ## end gnulib module realloc-posix ## begin gnulib module reallocarray if GL_COND_OBJ_REALLOCARRAY libgnu_a_SOURCES += reallocarray.c endif ## end gnulib module reallocarray ## begin gnulib module regex if GL_COND_OBJ_REGEX libgnu_a_SOURCES += regex.c endif EXTRA_DIST += regcomp.c regex.h regex_internal.c regex_internal.h regexec.c EXTRA_libgnu_a_SOURCES += regcomp.c regex_internal.c regexec.c ## end gnulib module regex ## begin gnulib module setenv if GL_COND_OBJ_SETENV libgnu_a_SOURCES += setenv.c endif ## end gnulib module setenv ## begin gnulib module setlocale-null libgnu_a_SOURCES += setlocale_null.c if GL_COND_OBJ_SETLOCALE_LOCK libgnu_a_SOURCES += setlocale-lock.c endif EXTRA_DIST += setlocale_null.h windows-initguard.h ## end gnulib module setlocale-null ## begin gnulib module snippet/_Noreturn # Because this Makefile snippet defines a variable used by other # gnulib Makefile snippets, it must be present in all makefiles that # need it. This is ensured by the applicability 'all' defined above. _NORETURN_H=$(srcdir)/_Noreturn.h EXTRA_DIST += _Noreturn.h ## end gnulib module snippet/_Noreturn ## begin gnulib module snippet/arg-nonnull # Because this Makefile snippet defines a variable used by other # gnulib Makefile snippets, it must be present in all makefiles that # need it. This is ensured by the applicability 'all' defined above. ARG_NONNULL_H=$(srcdir)/arg-nonnull.h EXTRA_DIST += arg-nonnull.h ## end gnulib module snippet/arg-nonnull ## begin gnulib module snippet/c++defs # Because this Makefile snippet defines a variable used by other # gnulib Makefile snippets, it must be present in all makefiles that # need it. This is ensured by the applicability 'all' defined above. CXXDEFS_H=$(srcdir)/c++defs.h EXTRA_DIST += c++defs.h ## end gnulib module snippet/c++defs ## begin gnulib module snippet/warn-on-use # Because this Makefile snippet defines a variable used by other # gnulib Makefile snippets, it must be present in all makefiles that # need it. This is ensured by the applicability 'all' defined above. WARN_ON_USE_H=$(srcdir)/warn-on-use.h EXTRA_DIST += warn-on-use.h ## end gnulib module snippet/warn-on-use ## begin gnulib module stat if GL_COND_OBJ_STAT libgnu_a_SOURCES += stat.c endif EXTRA_DIST += stat-w32.c stat-w32.h EXTRA_libgnu_a_SOURCES += stat-w32.c ## end gnulib module stat ## begin gnulib module stat-time libgnu_a_SOURCES += stat-time.c EXTRA_DIST += stat-time.h ## end gnulib module stat-time ## begin gnulib module stdckdint BUILT_SOURCES += $(STDCKDINT_H) # We need the following in order to create <stdckdint.h> when the system # doesn't have one that works with the given compiler. if GL_GENERATE_STDCKDINT_H stdckdint.h: stdckdint.in.h $(top_builddir)/config.status $(gl_V_at)$(SED_HEADER_STDOUT) \ $(srcdir)/stdckdint.in.h > $@-t $(AM_V_at)mv $@-t $@ else stdckdint.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += stdckdint.h stdckdint.h-t EXTRA_DIST += intprops-internal.h stdckdint.in.h ## end gnulib module stdckdint ## begin gnulib module stddef BUILT_SOURCES += $(STDDEF_H) # We need the following in order to create <stddef.h> when the system # doesn't have one that works with the given compiler. if GL_GENERATE_STDDEF_H stddef.h: stddef.in.h $(top_builddir)/config.status $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STDDEF_H''@|$(NEXT_STDDEF_H)|g' \ -e 's|@''HAVE_MAX_ALIGN_T''@|$(HAVE_MAX_ALIGN_T)|g' \ -e 's|@''HAVE_WCHAR_T''@|$(HAVE_WCHAR_T)|g' \ -e 's|@''REPLACE_NULL''@|$(REPLACE_NULL)|g' \ $(srcdir)/stddef.in.h > $@-t $(AM_V_at)mv $@-t $@ else stddef.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += stddef.h stddef.h-t EXTRA_DIST += stddef.in.h ## end gnulib module stddef ## begin gnulib module stdint BUILT_SOURCES += $(STDINT_H) # We need the following in order to create <stdint.h> when the system # doesn't have one that works with the given compiler. if GL_GENERATE_STDINT_H stdint.h: stdint.in.h $(top_builddir)/config.status $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's/@''HAVE_STDINT_H''@/$(HAVE_STDINT_H)/g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STDINT_H''@|$(NEXT_STDINT_H)|g' \ -e 's/@''HAVE_C99_STDINT_H''@/$(HAVE_C99_STDINT_H)/g' \ -e 's/@''HAVE_SYS_TYPES_H''@/$(HAVE_SYS_TYPES_H)/g' \ -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \ -e 's/@''HAVE_SYS_INTTYPES_H''@/$(HAVE_SYS_INTTYPES_H)/g' \ -e 's/@''HAVE_SYS_BITYPES_H''@/$(HAVE_SYS_BITYPES_H)/g' \ -e 's/@''HAVE_WCHAR_H''@/$(HAVE_WCHAR_H)/g' \ -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \ -e 's/@''BITSIZEOF_PTRDIFF_T''@/$(BITSIZEOF_PTRDIFF_T)/g' \ -e 's/@''PTRDIFF_T_SUFFIX''@/$(PTRDIFF_T_SUFFIX)/g' \ -e 's/@''BITSIZEOF_SIG_ATOMIC_T''@/$(BITSIZEOF_SIG_ATOMIC_T)/g' \ -e 's/@''HAVE_SIGNED_SIG_ATOMIC_T''@/$(HAVE_SIGNED_SIG_ATOMIC_T)/g' \ -e 's/@''SIG_ATOMIC_T_SUFFIX''@/$(SIG_ATOMIC_T_SUFFIX)/g' \ -e 's/@''BITSIZEOF_SIZE_T''@/$(BITSIZEOF_SIZE_T)/g' \ -e 's/@''SIZE_T_SUFFIX''@/$(SIZE_T_SUFFIX)/g' \ -e 's/@''BITSIZEOF_WCHAR_T''@/$(BITSIZEOF_WCHAR_T)/g' \ -e 's/@''HAVE_SIGNED_WCHAR_T''@/$(HAVE_SIGNED_WCHAR_T)/g' \ -e 's/@''WCHAR_T_SUFFIX''@/$(WCHAR_T_SUFFIX)/g' \ -e 's/@''BITSIZEOF_WINT_T''@/$(BITSIZEOF_WINT_T)/g' \ -e 's/@''HAVE_SIGNED_WINT_T''@/$(HAVE_SIGNED_WINT_T)/g' \ -e 's/@''WINT_T_SUFFIX''@/$(WINT_T_SUFFIX)/g' \ -e 's/@''GNULIBHEADERS_OVERRIDE_WINT_T''@/$(GNULIBHEADERS_OVERRIDE_WINT_T)/g' \ $(srcdir)/stdint.in.h > $@-t $(AM_V_at)mv $@-t $@ else stdint.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += stdint.h stdint.h-t EXTRA_DIST += stdint.in.h ## end gnulib module stdint ## begin gnulib module stdio BUILT_SOURCES += stdio.h # We need the following in order to create <stdio.h> when the system # doesn't have one that works with the given compiler. stdio.h: stdio.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STDIO_H''@|$(NEXT_STDIO_H)|g' \ -e 's/@''GNULIB_DPRINTF''@/$(GL_GNULIB_DPRINTF)/g' \ -e 's/@''GNULIB_FCLOSE''@/$(GL_GNULIB_FCLOSE)/g' \ -e 's/@''GNULIB_FDOPEN''@/$(GL_GNULIB_FDOPEN)/g' \ -e 's/@''GNULIB_FFLUSH''@/$(GL_GNULIB_FFLUSH)/g' \ -e 's/@''GNULIB_FGETC''@/$(GL_GNULIB_FGETC)/g' \ -e 's/@''GNULIB_FGETS''@/$(GL_GNULIB_FGETS)/g' \ -e 's/@''GNULIB_FOPEN''@/$(GL_GNULIB_FOPEN)/g' \ -e 's/@''GNULIB_FOPEN_GNU''@/$(GL_GNULIB_FOPEN_GNU)/g' \ -e 's/@''GNULIB_FPRINTF''@/$(GL_GNULIB_FPRINTF)/g' \ -e 's/@''GNULIB_FPRINTF_POSIX''@/$(GL_GNULIB_FPRINTF_POSIX)/g' \ -e 's/@''GNULIB_FPURGE''@/$(GL_GNULIB_FPURGE)/g' \ -e 's/@''GNULIB_FPUTC''@/$(GL_GNULIB_FPUTC)/g' \ -e 's/@''GNULIB_FPUTS''@/$(GL_GNULIB_FPUTS)/g' \ -e 's/@''GNULIB_FREAD''@/$(GL_GNULIB_FREAD)/g' \ -e 's/@''GNULIB_FREOPEN''@/$(GL_GNULIB_FREOPEN)/g' \ -e 's/@''GNULIB_FSCANF''@/$(GL_GNULIB_FSCANF)/g' \ -e 's/@''GNULIB_FSEEK''@/$(GL_GNULIB_FSEEK)/g' \ -e 's/@''GNULIB_FSEEKO''@/$(GL_GNULIB_FSEEKO)/g' \ -e 's/@''GNULIB_FTELL''@/$(GL_GNULIB_FTELL)/g' \ -e 's/@''GNULIB_FTELLO''@/$(GL_GNULIB_FTELLO)/g' \ -e 's/@''GNULIB_FWRITE''@/$(GL_GNULIB_FWRITE)/g' \ -e 's/@''GNULIB_GETC''@/$(GL_GNULIB_GETC)/g' \ -e 's/@''GNULIB_GETCHAR''@/$(GL_GNULIB_GETCHAR)/g' \ -e 's/@''GNULIB_GETDELIM''@/$(GL_GNULIB_GETDELIM)/g' \ -e 's/@''GNULIB_GETLINE''@/$(GL_GNULIB_GETLINE)/g' \ -e 's/@''GNULIB_OBSTACK_PRINTF''@/$(GL_GNULIB_OBSTACK_PRINTF)/g' \ -e 's/@''GNULIB_OBSTACK_PRINTF_POSIX''@/$(GL_GNULIB_OBSTACK_PRINTF_POSIX)/g' \ -e 's/@''GNULIB_PCLOSE''@/$(GL_GNULIB_PCLOSE)/g' \ -e 's/@''GNULIB_PERROR''@/$(GL_GNULIB_PERROR)/g' \ -e 's/@''GNULIB_POPEN''@/$(GL_GNULIB_POPEN)/g' \ -e 's/@''GNULIB_PRINTF''@/$(GL_GNULIB_PRINTF)/g' \ -e 's/@''GNULIB_PRINTF_POSIX''@/$(GL_GNULIB_PRINTF_POSIX)/g' \ -e 's/@''GNULIB_PUTC''@/$(GL_GNULIB_PUTC)/g' \ -e 's/@''GNULIB_PUTCHAR''@/$(GL_GNULIB_PUTCHAR)/g' \ -e 's/@''GNULIB_PUTS''@/$(GL_GNULIB_PUTS)/g' \ -e 's/@''GNULIB_REMOVE''@/$(GL_GNULIB_REMOVE)/g' \ -e 's/@''GNULIB_RENAME''@/$(GL_GNULIB_RENAME)/g' \ -e 's/@''GNULIB_RENAMEAT''@/$(GL_GNULIB_RENAMEAT)/g' \ -e 's/@''GNULIB_SCANF''@/$(GL_GNULIB_SCANF)/g' \ -e 's/@''GNULIB_SNPRINTF''@/$(GL_GNULIB_SNPRINTF)/g' \ -e 's/@''GNULIB_SPRINTF_POSIX''@/$(GL_GNULIB_SPRINTF_POSIX)/g' \ -e 's/@''GNULIB_STDIO_H_NONBLOCKING''@/$(GL_GNULIB_STDIO_H_NONBLOCKING)/g' \ -e 's/@''GNULIB_STDIO_H_SIGPIPE''@/$(GL_GNULIB_STDIO_H_SIGPIPE)/g' \ -e 's/@''GNULIB_TMPFILE''@/$(GL_GNULIB_TMPFILE)/g' \ -e 's/@''GNULIB_VASPRINTF''@/$(GL_GNULIB_VASPRINTF)/g' \ -e 's/@''GNULIB_VDPRINTF''@/$(GL_GNULIB_VDPRINTF)/g' \ -e 's/@''GNULIB_VFPRINTF''@/$(GL_GNULIB_VFPRINTF)/g' \ -e 's/@''GNULIB_VFPRINTF_POSIX''@/$(GL_GNULIB_VFPRINTF_POSIX)/g' \ -e 's/@''GNULIB_VFSCANF''@/$(GL_GNULIB_VFSCANF)/g' \ -e 's/@''GNULIB_VSCANF''@/$(GL_GNULIB_VSCANF)/g' \ -e 's/@''GNULIB_VPRINTF''@/$(GL_GNULIB_VPRINTF)/g' \ -e 's/@''GNULIB_VPRINTF_POSIX''@/$(GL_GNULIB_VPRINTF_POSIX)/g' \ -e 's/@''GNULIB_VSNPRINTF''@/$(GL_GNULIB_VSNPRINTF)/g' \ -e 's/@''GNULIB_VSPRINTF_POSIX''@/$(GL_GNULIB_VSPRINTF_POSIX)/g' \ -e 's/@''GNULIB_MDA_FCLOSEALL''@/$(GL_GNULIB_MDA_FCLOSEALL)/g' \ -e 's/@''GNULIB_MDA_FDOPEN''@/$(GL_GNULIB_MDA_FDOPEN)/g' \ -e 's/@''GNULIB_MDA_FILENO''@/$(GL_GNULIB_MDA_FILENO)/g' \ -e 's/@''GNULIB_MDA_GETW''@/$(GL_GNULIB_MDA_GETW)/g' \ -e 's/@''GNULIB_MDA_PUTW''@/$(GL_GNULIB_MDA_PUTW)/g' \ -e 's/@''GNULIB_MDA_TEMPNAM''@/$(GL_GNULIB_MDA_TEMPNAM)/g' \ < $(srcdir)/stdio.in.h | \ sed -e 's|@''HAVE_DECL_FCLOSEALL''@|$(HAVE_DECL_FCLOSEALL)|g' \ -e 's|@''HAVE_DECL_FPURGE''@|$(HAVE_DECL_FPURGE)|g' \ -e 's|@''HAVE_DECL_FSEEKO''@|$(HAVE_DECL_FSEEKO)|g' \ -e 's|@''HAVE_DECL_FTELLO''@|$(HAVE_DECL_FTELLO)|g' \ -e 's|@''HAVE_DECL_GETDELIM''@|$(HAVE_DECL_GETDELIM)|g' \ -e 's|@''HAVE_DECL_GETLINE''@|$(HAVE_DECL_GETLINE)|g' \ -e 's|@''HAVE_DECL_GETW''@|$(HAVE_DECL_GETW)|g' \ -e 's|@''HAVE_DECL_OBSTACK_PRINTF''@|$(HAVE_DECL_OBSTACK_PRINTF)|g' \ -e 's|@''HAVE_DECL_PUTW''@|$(HAVE_DECL_PUTW)|g' \ -e 's|@''HAVE_DECL_SNPRINTF''@|$(HAVE_DECL_SNPRINTF)|g' \ -e 's|@''HAVE_DECL_VSNPRINTF''@|$(HAVE_DECL_VSNPRINTF)|g' \ -e 's|@''HAVE_DPRINTF''@|$(HAVE_DPRINTF)|g' \ -e 's|@''HAVE_FSEEKO''@|$(HAVE_FSEEKO)|g' \ -e 's|@''HAVE_FTELLO''@|$(HAVE_FTELLO)|g' \ -e 's|@''HAVE_PCLOSE''@|$(HAVE_PCLOSE)|g' \ -e 's|@''HAVE_POPEN''@|$(HAVE_POPEN)|g' \ -e 's|@''HAVE_RENAMEAT''@|$(HAVE_RENAMEAT)|g' \ -e 's|@''HAVE_VASPRINTF''@|$(HAVE_VASPRINTF)|g' \ -e 's|@''HAVE_VDPRINTF''@|$(HAVE_VDPRINTF)|g' \ -e 's|@''REPLACE_DPRINTF''@|$(REPLACE_DPRINTF)|g' \ -e 's|@''REPLACE_FCLOSE''@|$(REPLACE_FCLOSE)|g' \ -e 's|@''REPLACE_FDOPEN''@|$(REPLACE_FDOPEN)|g' \ -e 's|@''REPLACE_FFLUSH''@|$(REPLACE_FFLUSH)|g' \ -e 's|@''REPLACE_FOPEN''@|$(REPLACE_FOPEN)|g' \ -e 's|@''REPLACE_FOPEN_FOR_FOPEN_GNU''@|$(REPLACE_FOPEN_FOR_FOPEN_GNU)|g' \ -e 's|@''REPLACE_FPRINTF''@|$(REPLACE_FPRINTF)|g' \ -e 's|@''REPLACE_FPURGE''@|$(REPLACE_FPURGE)|g' \ -e 's|@''REPLACE_FREOPEN''@|$(REPLACE_FREOPEN)|g' \ -e 's|@''REPLACE_FSEEK''@|$(REPLACE_FSEEK)|g' \ -e 's|@''REPLACE_FSEEKO''@|$(REPLACE_FSEEKO)|g' \ -e 's|@''REPLACE_FTELL''@|$(REPLACE_FTELL)|g' \ -e 's|@''REPLACE_FTELLO''@|$(REPLACE_FTELLO)|g' \ -e 's|@''REPLACE_GETDELIM''@|$(REPLACE_GETDELIM)|g' \ -e 's|@''REPLACE_GETLINE''@|$(REPLACE_GETLINE)|g' \ -e 's|@''REPLACE_OBSTACK_PRINTF''@|$(REPLACE_OBSTACK_PRINTF)|g' \ -e 's|@''REPLACE_PERROR''@|$(REPLACE_PERROR)|g' \ -e 's|@''REPLACE_POPEN''@|$(REPLACE_POPEN)|g' \ -e 's|@''REPLACE_PRINTF''@|$(REPLACE_PRINTF)|g' \ -e 's|@''REPLACE_REMOVE''@|$(REPLACE_REMOVE)|g' \ -e 's|@''REPLACE_RENAME''@|$(REPLACE_RENAME)|g' \ -e 's|@''REPLACE_RENAMEAT''@|$(REPLACE_RENAMEAT)|g' \ -e 's|@''REPLACE_SNPRINTF''@|$(REPLACE_SNPRINTF)|g' \ -e 's|@''REPLACE_SPRINTF''@|$(REPLACE_SPRINTF)|g' \ -e 's|@''REPLACE_STDIO_READ_FUNCS''@|$(REPLACE_STDIO_READ_FUNCS)|g' \ -e 's|@''REPLACE_STDIO_WRITE_FUNCS''@|$(REPLACE_STDIO_WRITE_FUNCS)|g' \ -e 's|@''REPLACE_TMPFILE''@|$(REPLACE_TMPFILE)|g' \ -e 's|@''REPLACE_VASPRINTF''@|$(REPLACE_VASPRINTF)|g' \ -e 's|@''REPLACE_VDPRINTF''@|$(REPLACE_VDPRINTF)|g' \ -e 's|@''REPLACE_VFPRINTF''@|$(REPLACE_VFPRINTF)|g' \ -e 's|@''REPLACE_VPRINTF''@|$(REPLACE_VPRINTF)|g' \ -e 's|@''REPLACE_VSNPRINTF''@|$(REPLACE_VSNPRINTF)|g' \ -e 's|@''REPLACE_VSPRINTF''@|$(REPLACE_VSPRINTF)|g' \ -e 's|@''ASM_SYMBOL_PREFIX''@|$(ASM_SYMBOL_PREFIX)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ > $@-t $(AM_V_at)mv $@-t $@ MOSTLYCLEANFILES += stdio.h stdio.h-t if GL_COND_OBJ_STDIO_READ libgnu_a_SOURCES += stdio-read.c endif if GL_COND_OBJ_STDIO_WRITE libgnu_a_SOURCES += stdio-write.c endif EXTRA_DIST += stdio.in.h ## end gnulib module stdio ## begin gnulib module stdlib BUILT_SOURCES += stdlib.h # We need the following in order to create <stdlib.h> when the system # doesn't have one that works with the given compiler. stdlib.h: stdlib.in.h $(top_builddir)/config.status $(CXXDEFS_H) \ $(_NORETURN_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STDLIB_H''@|$(NEXT_STDLIB_H)|g' \ -e 's/@''GNULIB__EXIT''@/$(GL_GNULIB__EXIT)/g' \ -e 's/@''GNULIB_ALIGNED_ALLOC''@/$(GL_GNULIB_ALIGNED_ALLOC)/g' \ -e 's/@''GNULIB_ATOLL''@/$(GL_GNULIB_ATOLL)/g' \ -e 's/@''GNULIB_CALLOC_GNU''@/$(GL_GNULIB_CALLOC_GNU)/g' \ -e 's/@''GNULIB_CALLOC_POSIX''@/$(GL_GNULIB_CALLOC_POSIX)/g' \ -e 's/@''GNULIB_CANONICALIZE_FILE_NAME''@/$(GL_GNULIB_CANONICALIZE_FILE_NAME)/g' \ -e 's/@''GNULIB_FREE_POSIX''@/$(GL_GNULIB_FREE_POSIX)/g' \ -e 's/@''GNULIB_GETLOADAVG''@/$(GL_GNULIB_GETLOADAVG)/g' \ -e 's/@''GNULIB_GETPROGNAME''@/$(GL_GNULIB_GETPROGNAME)/g' \ -e 's/@''GNULIB_GETSUBOPT''@/$(GL_GNULIB_GETSUBOPT)/g' \ -e 's/@''GNULIB_GRANTPT''@/$(GL_GNULIB_GRANTPT)/g' \ -e 's/@''GNULIB_MALLOC_GNU''@/$(GL_GNULIB_MALLOC_GNU)/g' \ -e 's/@''GNULIB_MALLOC_POSIX''@/$(GL_GNULIB_MALLOC_POSIX)/g' \ -e 's/@''GNULIB_MBSTOWCS''@/$(GL_GNULIB_MBSTOWCS)/g' \ -e 's/@''GNULIB_MBTOWC''@/$(GL_GNULIB_MBTOWC)/g' \ -e 's/@''GNULIB_MKDTEMP''@/$(GL_GNULIB_MKDTEMP)/g' \ -e 's/@''GNULIB_MKOSTEMP''@/$(GL_GNULIB_MKOSTEMP)/g' \ -e 's/@''GNULIB_MKOSTEMPS''@/$(GL_GNULIB_MKOSTEMPS)/g' \ -e 's/@''GNULIB_MKSTEMP''@/$(GL_GNULIB_MKSTEMP)/g' \ -e 's/@''GNULIB_MKSTEMPS''@/$(GL_GNULIB_MKSTEMPS)/g' \ -e 's/@''GNULIB_POSIX_MEMALIGN''@/$(GL_GNULIB_POSIX_MEMALIGN)/g' \ -e 's/@''GNULIB_POSIX_OPENPT''@/$(GL_GNULIB_POSIX_OPENPT)/g' \ -e 's/@''GNULIB_PTSNAME''@/$(GL_GNULIB_PTSNAME)/g' \ -e 's/@''GNULIB_PTSNAME_R''@/$(GL_GNULIB_PTSNAME_R)/g' \ -e 's/@''GNULIB_PUTENV''@/$(GL_GNULIB_PUTENV)/g' \ -e 's/@''GNULIB_QSORT_R''@/$(GL_GNULIB_QSORT_R)/g' \ -e 's/@''GNULIB_RANDOM''@/$(GL_GNULIB_RANDOM)/g' \ -e 's/@''GNULIB_RANDOM_R''@/$(GL_GNULIB_RANDOM_R)/g' \ -e 's/@''GNULIB_REALLOC_GNU''@/$(GL_GNULIB_REALLOC_GNU)/g' \ -e 's/@''GNULIB_REALLOC_POSIX''@/$(GL_GNULIB_REALLOC_POSIX)/g' \ -e 's/@''GNULIB_REALLOCARRAY''@/$(GL_GNULIB_REALLOCARRAY)/g' \ -e 's/@''GNULIB_REALPATH''@/$(GL_GNULIB_REALPATH)/g' \ -e 's/@''GNULIB_RPMATCH''@/$(GL_GNULIB_RPMATCH)/g' \ -e 's/@''GNULIB_SECURE_GETENV''@/$(GL_GNULIB_SECURE_GETENV)/g' \ -e 's/@''GNULIB_SETENV''@/$(GL_GNULIB_SETENV)/g' \ -e 's/@''GNULIB_STRTOD''@/$(GL_GNULIB_STRTOD)/g' \ -e 's/@''GNULIB_STRTOL''@/$(GL_GNULIB_STRTOL)/g' \ -e 's/@''GNULIB_STRTOLD''@/$(GL_GNULIB_STRTOLD)/g' \ -e 's/@''GNULIB_STRTOLL''@/$(GL_GNULIB_STRTOLL)/g' \ -e 's/@''GNULIB_STRTOUL''@/$(GL_GNULIB_STRTOUL)/g' \ -e 's/@''GNULIB_STRTOULL''@/$(GL_GNULIB_STRTOULL)/g' \ -e 's/@''GNULIB_SYSTEM_POSIX''@/$(GL_GNULIB_SYSTEM_POSIX)/g' \ -e 's/@''GNULIB_UNLOCKPT''@/$(GL_GNULIB_UNLOCKPT)/g' \ -e 's/@''GNULIB_UNSETENV''@/$(GL_GNULIB_UNSETENV)/g' \ -e 's/@''GNULIB_WCTOMB''@/$(GL_GNULIB_WCTOMB)/g' \ -e 's/@''GNULIB_MDA_ECVT''@/$(GL_GNULIB_MDA_ECVT)/g' \ -e 's/@''GNULIB_MDA_FCVT''@/$(GL_GNULIB_MDA_FCVT)/g' \ -e 's/@''GNULIB_MDA_GCVT''@/$(GL_GNULIB_MDA_GCVT)/g' \ -e 's/@''GNULIB_MDA_MKTEMP''@/$(GL_GNULIB_MDA_MKTEMP)/g' \ -e 's/@''GNULIB_MDA_PUTENV''@/$(GL_GNULIB_MDA_PUTENV)/g' \ < $(srcdir)/stdlib.in.h | \ sed -e 's|@''HAVE__EXIT''@|$(HAVE__EXIT)|g' \ -e 's|@''HAVE_ALIGNED_ALLOC''@|$(HAVE_ALIGNED_ALLOC)|g' \ -e 's|@''HAVE_ATOLL''@|$(HAVE_ATOLL)|g' \ -e 's|@''HAVE_CANONICALIZE_FILE_NAME''@|$(HAVE_CANONICALIZE_FILE_NAME)|g' \ -e 's|@''HAVE_DECL_ECVT''@|$(HAVE_DECL_ECVT)|g' \ -e 's|@''HAVE_DECL_FCVT''@|$(HAVE_DECL_FCVT)|g' \ -e 's|@''HAVE_DECL_GCVT''@|$(HAVE_DECL_GCVT)|g' \ -e 's|@''HAVE_DECL_GETLOADAVG''@|$(HAVE_DECL_GETLOADAVG)|g' \ -e 's|@''HAVE_DECL_PROGRAM_INVOCATION_NAME''@|$(HAVE_DECL_PROGRAM_INVOCATION_NAME)|g' \ -e 's|@''HAVE_GETPROGNAME''@|$(HAVE_GETPROGNAME)|g' \ -e 's|@''HAVE_GETSUBOPT''@|$(HAVE_GETSUBOPT)|g' \ -e 's|@''HAVE_GRANTPT''@|$(HAVE_GRANTPT)|g' \ -e 's|@''HAVE_INITSTATE''@|$(HAVE_INITSTATE)|g' \ -e 's|@''HAVE_DECL_INITSTATE''@|$(HAVE_DECL_INITSTATE)|g' \ -e 's|@''HAVE_MBTOWC''@|$(HAVE_MBTOWC)|g' \ -e 's|@''HAVE_MKDTEMP''@|$(HAVE_MKDTEMP)|g' \ -e 's|@''HAVE_MKOSTEMP''@|$(HAVE_MKOSTEMP)|g' \ -e 's|@''HAVE_MKOSTEMPS''@|$(HAVE_MKOSTEMPS)|g' \ -e 's|@''HAVE_MKSTEMP''@|$(HAVE_MKSTEMP)|g' \ -e 's|@''HAVE_MKSTEMPS''@|$(HAVE_MKSTEMPS)|g' \ -e 's|@''HAVE_POSIX_MEMALIGN''@|$(HAVE_POSIX_MEMALIGN)|g' \ -e 's|@''HAVE_POSIX_OPENPT''@|$(HAVE_POSIX_OPENPT)|g' \ -e 's|@''HAVE_PTSNAME''@|$(HAVE_PTSNAME)|g' \ -e 's|@''HAVE_PTSNAME_R''@|$(HAVE_PTSNAME_R)|g' \ -e 's|@''HAVE_QSORT_R''@|$(HAVE_QSORT_R)|g' \ -e 's|@''HAVE_RANDOM''@|$(HAVE_RANDOM)|g' \ -e 's|@''HAVE_RANDOM_H''@|$(HAVE_RANDOM_H)|g' \ -e 's|@''HAVE_RANDOM_R''@|$(HAVE_RANDOM_R)|g' \ -e 's|@''HAVE_REALLOCARRAY''@|$(HAVE_REALLOCARRAY)|g' \ -e 's|@''HAVE_REALPATH''@|$(HAVE_REALPATH)|g' \ -e 's|@''HAVE_RPMATCH''@|$(HAVE_RPMATCH)|g' \ -e 's|@''HAVE_SECURE_GETENV''@|$(HAVE_SECURE_GETENV)|g' \ -e 's|@''HAVE_DECL_SETENV''@|$(HAVE_DECL_SETENV)|g' \ -e 's|@''HAVE_SETSTATE''@|$(HAVE_SETSTATE)|g' \ -e 's|@''HAVE_DECL_SETSTATE''@|$(HAVE_DECL_SETSTATE)|g' \ -e 's|@''HAVE_STRTOD''@|$(HAVE_STRTOD)|g' \ -e 's|@''HAVE_STRTOL''@|$(HAVE_STRTOL)|g' \ -e 's|@''HAVE_STRTOLD''@|$(HAVE_STRTOLD)|g' \ -e 's|@''HAVE_STRTOLL''@|$(HAVE_STRTOLL)|g' \ -e 's|@''HAVE_STRTOUL''@|$(HAVE_STRTOUL)|g' \ -e 's|@''HAVE_STRTOULL''@|$(HAVE_STRTOULL)|g' \ -e 's|@''HAVE_STRUCT_RANDOM_DATA''@|$(HAVE_STRUCT_RANDOM_DATA)|g' \ -e 's|@''HAVE_SYS_LOADAVG_H''@|$(HAVE_SYS_LOADAVG_H)|g' \ -e 's|@''HAVE_UNLOCKPT''@|$(HAVE_UNLOCKPT)|g' \ -e 's|@''HAVE_DECL_UNSETENV''@|$(HAVE_DECL_UNSETENV)|g' \ -e 's|@''REPLACE__EXIT''@|$(REPLACE__EXIT)|g' \ -e 's|@''REPLACE_ALIGNED_ALLOC''@|$(REPLACE_ALIGNED_ALLOC)|g' \ -e 's|@''REPLACE_CALLOC_FOR_CALLOC_GNU''@|$(REPLACE_CALLOC_FOR_CALLOC_GNU)|g' \ -e 's|@''REPLACE_CALLOC_FOR_CALLOC_POSIX''@|$(REPLACE_CALLOC_FOR_CALLOC_POSIX)|g' \ -e 's|@''REPLACE_CANONICALIZE_FILE_NAME''@|$(REPLACE_CANONICALIZE_FILE_NAME)|g' \ -e 's|@''REPLACE_FREE''@|$(REPLACE_FREE)|g' \ -e 's|@''REPLACE_GETLOADAVG''@|$(REPLACE_GETLOADAVG)|g' \ -e 's|@''REPLACE_GETPROGNAME''@|$(REPLACE_GETPROGNAME)|g' \ -e 's|@''REPLACE_GETSUBOPT''@|$(REPLACE_GETSUBOPT)|g' \ -e 's|@''REPLACE_INITSTATE''@|$(REPLACE_INITSTATE)|g' \ -e 's|@''REPLACE_MALLOC_FOR_MALLOC_GNU''@|$(REPLACE_MALLOC_FOR_MALLOC_GNU)|g' \ -e 's|@''REPLACE_MALLOC_FOR_MALLOC_POSIX''@|$(REPLACE_MALLOC_FOR_MALLOC_POSIX)|g' \ -e 's|@''REPLACE_MB_CUR_MAX''@|$(REPLACE_MB_CUR_MAX)|g' \ -e 's|@''REPLACE_MBSTOWCS''@|$(REPLACE_MBSTOWCS)|g' \ -e 's|@''REPLACE_MBTOWC''@|$(REPLACE_MBTOWC)|g' \ -e 's|@''REPLACE_MKOSTEMP''@|$(REPLACE_MKOSTEMP)|g' \ -e 's|@''REPLACE_MKOSTEMPS''@|$(REPLACE_MKOSTEMPS)|g' \ -e 's|@''REPLACE_MKSTEMP''@|$(REPLACE_MKSTEMP)|g' \ -e 's|@''REPLACE_POSIX_MEMALIGN''@|$(REPLACE_POSIX_MEMALIGN)|g' \ -e 's|@''REPLACE_POSIX_OPENPT''@|$(REPLACE_POSIX_OPENPT)|g' \ -e 's|@''REPLACE_PTSNAME''@|$(REPLACE_PTSNAME)|g' \ -e 's|@''REPLACE_PTSNAME_R''@|$(REPLACE_PTSNAME_R)|g' \ -e 's|@''REPLACE_PUTENV''@|$(REPLACE_PUTENV)|g' \ -e 's|@''REPLACE_QSORT_R''@|$(REPLACE_QSORT_R)|g' \ -e 's|@''REPLACE_RANDOM''@|$(REPLACE_RANDOM)|g' \ -e 's|@''REPLACE_RANDOM_R''@|$(REPLACE_RANDOM_R)|g' \ -e 's|@''REPLACE_REALLOC_FOR_REALLOC_GNU''@|$(REPLACE_REALLOC_FOR_REALLOC_GNU)|g' \ -e 's|@''REPLACE_REALLOC_FOR_REALLOC_POSIX''@|$(REPLACE_REALLOC_FOR_REALLOC_POSIX)|g' \ -e 's|@''REPLACE_REALLOCARRAY''@|$(REPLACE_REALLOCARRAY)|g' \ -e 's|@''REPLACE_REALPATH''@|$(REPLACE_REALPATH)|g' \ -e 's|@''REPLACE_SETENV''@|$(REPLACE_SETENV)|g' \ -e 's|@''REPLACE_SETSTATE''@|$(REPLACE_SETSTATE)|g' \ -e 's|@''REPLACE_STRTOD''@|$(REPLACE_STRTOD)|g' \ -e 's|@''REPLACE_STRTOL''@|$(REPLACE_STRTOL)|g' \ -e 's|@''REPLACE_STRTOLD''@|$(REPLACE_STRTOLD)|g' \ -e 's|@''REPLACE_STRTOLL''@|$(REPLACE_STRTOLL)|g' \ -e 's|@''REPLACE_STRTOUL''@|$(REPLACE_STRTOUL)|g' \ -e 's|@''REPLACE_STRTOULL''@|$(REPLACE_STRTOULL)|g' \ -e 's|@''REPLACE_UNSETENV''@|$(REPLACE_UNSETENV)|g' \ -e 's|@''REPLACE_WCTOMB''@|$(REPLACE_WCTOMB)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _Noreturn/r $(_NORETURN_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ > $@-t $(AM_V_at)mv $@-t $@ MOSTLYCLEANFILES += stdlib.h stdlib.h-t EXTRA_DIST += stdlib.in.h ## end gnulib module stdlib ## begin gnulib module streq EXTRA_DIST += streq.h ## end gnulib module streq ## begin gnulib module strerror if GL_COND_OBJ_STRERROR libgnu_a_SOURCES += strerror.c endif ## end gnulib module strerror ## begin gnulib module strerror-override if GL_COND_OBJ_STRERROR_OVERRIDE libgnu_a_SOURCES += strerror-override.c endif EXTRA_DIST += strerror-override.h ## end gnulib module strerror-override ## begin gnulib module string BUILT_SOURCES += string.h # We need the following in order to create <string.h> when the system # doesn't have one that works with the given compiler. string.h: string.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STRING_H''@|$(NEXT_STRING_H)|g' \ -e 's/@''GNULIB_EXPLICIT_BZERO''@/$(GL_GNULIB_EXPLICIT_BZERO)/g' \ -e 's/@''GNULIB_FFSL''@/$(GL_GNULIB_FFSL)/g' \ -e 's/@''GNULIB_FFSLL''@/$(GL_GNULIB_FFSLL)/g' \ -e 's/@''GNULIB_MBSLEN''@/$(GL_GNULIB_MBSLEN)/g' \ -e 's/@''GNULIB_MBSNLEN''@/$(GL_GNULIB_MBSNLEN)/g' \ -e 's/@''GNULIB_MBSCHR''@/$(GL_GNULIB_MBSCHR)/g' \ -e 's/@''GNULIB_MBSRCHR''@/$(GL_GNULIB_MBSRCHR)/g' \ -e 's/@''GNULIB_MBSSTR''@/$(GL_GNULIB_MBSSTR)/g' \ -e 's/@''GNULIB_MBSCASECMP''@/$(GL_GNULIB_MBSCASECMP)/g' \ -e 's/@''GNULIB_MBSNCASECMP''@/$(GL_GNULIB_MBSNCASECMP)/g' \ -e 's/@''GNULIB_MBSPCASECMP''@/$(GL_GNULIB_MBSPCASECMP)/g' \ -e 's/@''GNULIB_MBSCASESTR''@/$(GL_GNULIB_MBSCASESTR)/g' \ -e 's/@''GNULIB_MBSCSPN''@/$(GL_GNULIB_MBSCSPN)/g' \ -e 's/@''GNULIB_MBSPBRK''@/$(GL_GNULIB_MBSPBRK)/g' \ -e 's/@''GNULIB_MBSSPN''@/$(GL_GNULIB_MBSSPN)/g' \ -e 's/@''GNULIB_MBSSEP''@/$(GL_GNULIB_MBSSEP)/g' \ -e 's/@''GNULIB_MBSTOK_R''@/$(GL_GNULIB_MBSTOK_R)/g' \ -e 's/@''GNULIB_MEMCHR''@/$(GL_GNULIB_MEMCHR)/g' \ -e 's/@''GNULIB_MEMMEM''@/$(GL_GNULIB_MEMMEM)/g' \ -e 's/@''GNULIB_MEMPCPY''@/$(GL_GNULIB_MEMPCPY)/g' \ -e 's/@''GNULIB_MEMRCHR''@/$(GL_GNULIB_MEMRCHR)/g' \ -e 's/@''GNULIB_MEMSET_EXPLICIT''@/$(GL_GNULIB_MEMSET_EXPLICIT)/g' \ -e 's/@''GNULIB_RAWMEMCHR''@/$(GL_GNULIB_RAWMEMCHR)/g' \ -e 's/@''GNULIB_STPCPY''@/$(GL_GNULIB_STPCPY)/g' \ -e 's/@''GNULIB_STPNCPY''@/$(GL_GNULIB_STPNCPY)/g' \ -e 's/@''GNULIB_STRCHRNUL''@/$(GL_GNULIB_STRCHRNUL)/g' \ -e 's/@''GNULIB_STRDUP''@/$(GL_GNULIB_STRDUP)/g' \ -e 's/@''GNULIB_STRNCAT''@/$(GL_GNULIB_STRNCAT)/g' \ -e 's/@''GNULIB_STRNDUP''@/$(GL_GNULIB_STRNDUP)/g' \ -e 's/@''GNULIB_STRNLEN''@/$(GL_GNULIB_STRNLEN)/g' \ -e 's/@''GNULIB_STRPBRK''@/$(GL_GNULIB_STRPBRK)/g' \ -e 's/@''GNULIB_STRSEP''@/$(GL_GNULIB_STRSEP)/g' \ -e 's/@''GNULIB_STRSTR''@/$(GL_GNULIB_STRSTR)/g' \ -e 's/@''GNULIB_STRCASESTR''@/$(GL_GNULIB_STRCASESTR)/g' \ -e 's/@''GNULIB_STRTOK_R''@/$(GL_GNULIB_STRTOK_R)/g' \ -e 's/@''GNULIB_STRERROR''@/$(GL_GNULIB_STRERROR)/g' \ -e 's/@''GNULIB_STRERROR_R''@/$(GL_GNULIB_STRERROR_R)/g' \ -e 's/@''GNULIB_STRERRORNAME_NP''@/$(GL_GNULIB_STRERRORNAME_NP)/g' \ -e 's/@''GNULIB_SIGABBREV_NP''@/$(GL_GNULIB_SIGABBREV_NP)/g' \ -e 's/@''GNULIB_SIGDESCR_NP''@/$(GL_GNULIB_SIGDESCR_NP)/g' \ -e 's/@''GNULIB_STRSIGNAL''@/$(GL_GNULIB_STRSIGNAL)/g' \ -e 's/@''GNULIB_STRVERSCMP''@/$(GL_GNULIB_STRVERSCMP)/g' \ -e 's/@''GNULIB_MDA_MEMCCPY''@/$(GL_GNULIB_MDA_MEMCCPY)/g' \ -e 's/@''GNULIB_MDA_STRDUP''@/$(GL_GNULIB_MDA_STRDUP)/g' \ -e 's/@''GNULIB_FREE_POSIX''@/$(GL_GNULIB_FREE_POSIX)/g' \ < $(srcdir)/string.in.h | \ sed -e 's|@''HAVE_EXPLICIT_BZERO''@|$(HAVE_EXPLICIT_BZERO)|g' \ -e 's|@''HAVE_FFSL''@|$(HAVE_FFSL)|g' \ -e 's|@''HAVE_FFSLL''@|$(HAVE_FFSLL)|g' \ -e 's|@''HAVE_MBSLEN''@|$(HAVE_MBSLEN)|g' \ -e 's|@''HAVE_DECL_MEMMEM''@|$(HAVE_DECL_MEMMEM)|g' \ -e 's|@''HAVE_MEMPCPY''@|$(HAVE_MEMPCPY)|g' \ -e 's|@''HAVE_DECL_MEMRCHR''@|$(HAVE_DECL_MEMRCHR)|g' \ -e 's|@''HAVE_MEMSET_EXPLICIT''@|$(HAVE_MEMSET_EXPLICIT)|g' \ -e 's|@''HAVE_RAWMEMCHR''@|$(HAVE_RAWMEMCHR)|g' \ -e 's|@''HAVE_STPCPY''@|$(HAVE_STPCPY)|g' \ -e 's|@''HAVE_STPNCPY''@|$(HAVE_STPNCPY)|g' \ -e 's|@''HAVE_STRCHRNUL''@|$(HAVE_STRCHRNUL)|g' \ -e 's|@''HAVE_DECL_STRDUP''@|$(HAVE_DECL_STRDUP)|g' \ -e 's|@''HAVE_DECL_STRNDUP''@|$(HAVE_DECL_STRNDUP)|g' \ -e 's|@''HAVE_DECL_STRNLEN''@|$(HAVE_DECL_STRNLEN)|g' \ -e 's|@''HAVE_STRPBRK''@|$(HAVE_STRPBRK)|g' \ -e 's|@''HAVE_STRSEP''@|$(HAVE_STRSEP)|g' \ -e 's|@''HAVE_STRCASESTR''@|$(HAVE_STRCASESTR)|g' \ -e 's|@''HAVE_DECL_STRTOK_R''@|$(HAVE_DECL_STRTOK_R)|g' \ -e 's|@''HAVE_DECL_STRERROR_R''@|$(HAVE_DECL_STRERROR_R)|g' \ -e 's|@''HAVE_STRERRORNAME_NP''@|$(HAVE_STRERRORNAME_NP)|g' \ -e 's|@''HAVE_SIGABBREV_NP''@|$(HAVE_SIGABBREV_NP)|g' \ -e 's|@''HAVE_SIGDESCR_NP''@|$(HAVE_SIGDESCR_NP)|g' \ -e 's|@''HAVE_DECL_STRSIGNAL''@|$(HAVE_DECL_STRSIGNAL)|g' \ -e 's|@''HAVE_STRVERSCMP''@|$(HAVE_STRVERSCMP)|g' \ -e 's|@''REPLACE_FFSLL''@|$(REPLACE_FFSLL)|g' \ -e 's|@''REPLACE_MEMCHR''@|$(REPLACE_MEMCHR)|g' \ -e 's|@''REPLACE_MEMMEM''@|$(REPLACE_MEMMEM)|g' \ -e 's|@''REPLACE_MEMPCPY''@|$(REPLACE_MEMPCPY)|g' \ -e 's|@''REPLACE_FREE''@|$(REPLACE_FREE)|g' \ -e 's|@''REPLACE_STPCPY''@|$(REPLACE_STPCPY)|g' \ -e 's|@''REPLACE_STPNCPY''@|$(REPLACE_STPNCPY)|g' \ -e 's|@''REPLACE_STRCHRNUL''@|$(REPLACE_STRCHRNUL)|g' \ -e 's|@''REPLACE_STRDUP''@|$(REPLACE_STRDUP)|g' \ -e 's|@''REPLACE_STRNCAT''@|$(REPLACE_STRNCAT)|g' \ -e 's|@''REPLACE_STRNDUP''@|$(REPLACE_STRNDUP)|g' \ -e 's|@''REPLACE_STRNLEN''@|$(REPLACE_STRNLEN)|g' \ -e 's|@''REPLACE_STRSTR''@|$(REPLACE_STRSTR)|g' \ -e 's|@''REPLACE_STRCASESTR''@|$(REPLACE_STRCASESTR)|g' \ -e 's|@''REPLACE_STRTOK_R''@|$(REPLACE_STRTOK_R)|g' \ -e 's|@''REPLACE_STRERROR''@|$(REPLACE_STRERROR)|g' \ -e 's|@''REPLACE_STRERROR_R''@|$(REPLACE_STRERROR_R)|g' \ -e 's|@''REPLACE_STRERRORNAME_NP''@|$(REPLACE_STRERRORNAME_NP)|g' \ -e 's|@''REPLACE_STRSIGNAL''@|$(REPLACE_STRSIGNAL)|g' \ -e 's|@''UNDEFINE_STRTOK_R''@|$(UNDEFINE_STRTOK_R)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ > $@-t $(AM_V_at)mv $@-t $@ MOSTLYCLEANFILES += string.h string.h-t EXTRA_DIST += string.in.h ## end gnulib module string ## begin gnulib module sys_stat BUILT_SOURCES += sys/stat.h # We need the following in order to create <sys/stat.h> when the system # has one that is incomplete. sys/stat.h: sys_stat.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)$(MKDIR_P) '%reldir%/sys' $(AM_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SYS_STAT_H''@|$(NEXT_SYS_STAT_H)|g' \ -e 's|@''WINDOWS_64_BIT_ST_SIZE''@|$(WINDOWS_64_BIT_ST_SIZE)|g' \ -e 's|@''WINDOWS_STAT_TIMESPEC''@|$(WINDOWS_STAT_TIMESPEC)|g' \ -e 's/@''GNULIB_CHMOD''@/$(GL_GNULIB_CHMOD)/g' \ -e 's/@''GNULIB_FCHMODAT''@/$(GL_GNULIB_FCHMODAT)/g' \ -e 's/@''GNULIB_FSTAT''@/$(GL_GNULIB_FSTAT)/g' \ -e 's/@''GNULIB_FSTATAT''@/$(GL_GNULIB_FSTATAT)/g' \ -e 's/@''GNULIB_FUTIMENS''@/$(GL_GNULIB_FUTIMENS)/g' \ -e 's/@''GNULIB_GETUMASK''@/$(GL_GNULIB_GETUMASK)/g' \ -e 's/@''GNULIB_LCHMOD''@/$(GL_GNULIB_LCHMOD)/g' \ -e 's/@''GNULIB_LSTAT''@/$(GL_GNULIB_LSTAT)/g' \ -e 's/@''GNULIB_MKDIR''@/$(GL_GNULIB_MKDIR)/g' \ -e 's/@''GNULIB_MKDIRAT''@/$(GL_GNULIB_MKDIRAT)/g' \ -e 's/@''GNULIB_MKFIFO''@/$(GL_GNULIB_MKFIFO)/g' \ -e 's/@''GNULIB_MKFIFOAT''@/$(GL_GNULIB_MKFIFOAT)/g' \ -e 's/@''GNULIB_MKNOD''@/$(GL_GNULIB_MKNOD)/g' \ -e 's/@''GNULIB_MKNODAT''@/$(GL_GNULIB_MKNODAT)/g' \ -e 's/@''GNULIB_STAT''@/$(GL_GNULIB_STAT)/g' \ -e 's/@''GNULIB_UTIMENSAT''@/$(GL_GNULIB_UTIMENSAT)/g' \ -e 's/@''GNULIB_OVERRIDES_STRUCT_STAT''@/$(GL_GNULIB_OVERRIDES_STRUCT_STAT)/g' \ -e 's/@''GNULIB_MDA_CHMOD''@/$(GL_GNULIB_MDA_CHMOD)/g' \ -e 's/@''GNULIB_MDA_MKDIR''@/$(GL_GNULIB_MDA_MKDIR)/g' \ -e 's/@''GNULIB_MDA_UMASK''@/$(GL_GNULIB_MDA_UMASK)/g' \ -e 's|@''HAVE_FCHMODAT''@|$(HAVE_FCHMODAT)|g' \ -e 's|@''HAVE_FSTATAT''@|$(HAVE_FSTATAT)|g' \ -e 's|@''HAVE_FUTIMENS''@|$(HAVE_FUTIMENS)|g' \ -e 's|@''HAVE_GETUMASK''@|$(HAVE_GETUMASK)|g' \ -e 's|@''HAVE_LCHMOD''@|$(HAVE_LCHMOD)|g' \ -e 's|@''HAVE_LSTAT''@|$(HAVE_LSTAT)|g' \ -e 's|@''HAVE_MKDIRAT''@|$(HAVE_MKDIRAT)|g' \ -e 's|@''HAVE_MKFIFO''@|$(HAVE_MKFIFO)|g' \ -e 's|@''HAVE_MKFIFOAT''@|$(HAVE_MKFIFOAT)|g' \ -e 's|@''HAVE_MKNOD''@|$(HAVE_MKNOD)|g' \ -e 's|@''HAVE_MKNODAT''@|$(HAVE_MKNODAT)|g' \ -e 's|@''HAVE_UTIMENSAT''@|$(HAVE_UTIMENSAT)|g' \ -e 's|@''REPLACE_CHMOD''@|$(REPLACE_CHMOD)|g' \ -e 's|@''REPLACE_FCHMODAT''@|$(REPLACE_FCHMODAT)|g' \ -e 's|@''REPLACE_FSTAT''@|$(REPLACE_FSTAT)|g' \ -e 's|@''REPLACE_FSTATAT''@|$(REPLACE_FSTATAT)|g' \ -e 's|@''REPLACE_FUTIMENS''@|$(REPLACE_FUTIMENS)|g' \ -e 's|@''REPLACE_LSTAT''@|$(REPLACE_LSTAT)|g' \ -e 's|@''REPLACE_MKDIR''@|$(REPLACE_MKDIR)|g' \ -e 's|@''REPLACE_MKFIFO''@|$(REPLACE_MKFIFO)|g' \ -e 's|@''REPLACE_MKFIFOAT''@|$(REPLACE_MKFIFOAT)|g' \ -e 's|@''REPLACE_MKNOD''@|$(REPLACE_MKNOD)|g' \ -e 's|@''REPLACE_MKNODAT''@|$(REPLACE_MKNODAT)|g' \ -e 's|@''REPLACE_STAT''@|$(REPLACE_STAT)|g' \ -e 's|@''REPLACE_UTIMENSAT''@|$(REPLACE_UTIMENSAT)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/sys_stat.in.h > $@-t $(AM_V_at)mv $@-t $@ MOSTLYCLEANFILES += sys/stat.h sys/stat.h-t MOSTLYCLEANDIRS += sys EXTRA_DIST += sys_stat.in.h ## end gnulib module sys_stat ## begin gnulib module sys_types BUILT_SOURCES += sys/types.h # We need the following in order to create <sys/types.h> when the system # doesn't have one that works with the given compiler. sys/types.h: sys_types.in.h $(top_builddir)/config.status $(AM_V_GEN)$(MKDIR_P) '%reldir%/sys' $(AM_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SYS_TYPES_H''@|$(NEXT_SYS_TYPES_H)|g' \ -e 's|@''WINDOWS_64_BIT_OFF_T''@|$(WINDOWS_64_BIT_OFF_T)|g' \ -e 's|@''WINDOWS_STAT_INODES''@|$(WINDOWS_STAT_INODES)|g' \ $(srcdir)/sys_types.in.h > $@-t $(AM_V_at)mv $@-t $@ MOSTLYCLEANFILES += sys/types.h sys/types.h-t EXTRA_DIST += sys_types.in.h ## end gnulib module sys_types ## begin gnulib module threadlib libgnu_a_SOURCES += glthread/threadlib.c ## end gnulib module threadlib ## begin gnulib module time-h BUILT_SOURCES += time.h # We need the following in order to create <time.h> when the system # doesn't have one that works with the given compiler. time.h: time.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_TIME_H''@|$(NEXT_TIME_H)|g' \ -e 's/@''GNULIB_CTIME''@/$(GL_GNULIB_CTIME)/g' \ -e 's/@''GNULIB_LOCALTIME''@/$(GL_GNULIB_LOCALTIME)/g' \ -e 's/@''GNULIB_MKTIME''@/$(GL_GNULIB_MKTIME)/g' \ -e 's/@''GNULIB_NANOSLEEP''@/$(GL_GNULIB_NANOSLEEP)/g' \ -e 's/@''GNULIB_STRFTIME''@/$(GL_GNULIB_STRFTIME)/g' \ -e 's/@''GNULIB_STRPTIME''@/$(GL_GNULIB_STRPTIME)/g' \ -e 's/@''GNULIB_TIME''@/$(GL_GNULIB_TIME)/g' \ -e 's/@''GNULIB_TIMEGM''@/$(GL_GNULIB_TIMEGM)/g' \ -e 's/@''GNULIB_TIMESPEC_GET''@/$(GL_GNULIB_TIMESPEC_GET)/g' \ -e 's/@''GNULIB_TIMESPEC_GETRES''@/$(GL_GNULIB_TIMESPEC_GETRES)/g' \ -e 's/@''GNULIB_TIME_R''@/$(GL_GNULIB_TIME_R)/g' \ -e 's/@''GNULIB_TIME_RZ''@/$(GL_GNULIB_TIME_RZ)/g' \ -e 's/@''GNULIB_TZSET''@/$(GL_GNULIB_TZSET)/g' \ -e 's/@''GNULIB_MDA_TZSET''@/$(GL_GNULIB_MDA_TZSET)/g' \ -e 's|@''HAVE_DECL_LOCALTIME_R''@|$(HAVE_DECL_LOCALTIME_R)|g' \ -e 's|@''HAVE_NANOSLEEP''@|$(HAVE_NANOSLEEP)|g' \ -e 's|@''HAVE_STRPTIME''@|$(HAVE_STRPTIME)|g' \ -e 's|@''HAVE_TIMEGM''@|$(HAVE_TIMEGM)|g' \ -e 's|@''HAVE_TIMESPEC_GET''@|$(HAVE_TIMESPEC_GET)|g' \ -e 's|@''HAVE_TIMESPEC_GETRES''@|$(HAVE_TIMESPEC_GETRES)|g' \ -e 's|@''HAVE_TIMEZONE_T''@|$(HAVE_TIMEZONE_T)|g' \ -e 's|@''REPLACE_CTIME''@|$(REPLACE_CTIME)|g' \ -e 's|@''REPLACE_GMTIME''@|$(REPLACE_GMTIME)|g' \ -e 's|@''REPLACE_LOCALTIME''@|$(REPLACE_LOCALTIME)|g' \ -e 's|@''REPLACE_LOCALTIME_R''@|$(REPLACE_LOCALTIME_R)|g' \ -e 's|@''REPLACE_MKTIME''@|$(REPLACE_MKTIME)|g' \ -e 's|@''REPLACE_NANOSLEEP''@|$(REPLACE_NANOSLEEP)|g' \ -e 's|@''REPLACE_STRFTIME''@|$(REPLACE_STRFTIME)|g' \ -e 's|@''REPLACE_TIME''@|$(REPLACE_TIME)|g' \ -e 's|@''REPLACE_TIMEGM''@|$(REPLACE_TIMEGM)|g' \ -e 's|@''REPLACE_TIMESPEC_GET''@|$(REPLACE_TIMESPEC_GET)|g' \ -e 's|@''REPLACE_TZSET''@|$(REPLACE_TZSET)|g' \ -e 's|@''PTHREAD_H_DEFINES_STRUCT_TIMESPEC''@|$(PTHREAD_H_DEFINES_STRUCT_TIMESPEC)|g' \ -e 's|@''SYS_TIME_H_DEFINES_STRUCT_TIMESPEC''@|$(SYS_TIME_H_DEFINES_STRUCT_TIMESPEC)|g' \ -e 's|@''TIME_H_DEFINES_STRUCT_TIMESPEC''@|$(TIME_H_DEFINES_STRUCT_TIMESPEC)|g' \ -e 's|@''UNISTD_H_DEFINES_STRUCT_TIMESPEC''@|$(UNISTD_H_DEFINES_STRUCT_TIMESPEC)|g' \ -e 's|@''TIME_H_DEFINES_TIME_UTC''@|$(TIME_H_DEFINES_TIME_UTC)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/time.in.h > $@-t $(AM_V_at)mv $@-t $@ MOSTLYCLEANFILES += time.h time.h-t EXTRA_DIST += time.in.h ## end gnulib module time-h ## begin gnulib module time_r if GL_COND_OBJ_TIME_R libgnu_a_SOURCES += time_r.c endif ## end gnulib module time_r ## begin gnulib module time_rz if GL_COND_OBJ_TIME_RZ libgnu_a_SOURCES += time_rz.c endif EXTRA_DIST += time-internal.h ## end gnulib module time_rz ## begin gnulib module timegm if GL_COND_OBJ_TIMEGM libgnu_a_SOURCES += timegm.c endif EXTRA_DIST += mktime-internal.h ## end gnulib module timegm ## begin gnulib module tzset if GL_COND_OBJ_TZSET libgnu_a_SOURCES += tzset.c endif ## end gnulib module tzset ## begin gnulib module unistd BUILT_SOURCES += unistd.h libgnu_a_SOURCES += unistd.c # We need the following in order to create an empty placeholder for # <unistd.h> when the system doesn't have one. unistd.h: unistd.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''HAVE_UNISTD_H''@|$(HAVE_UNISTD_H)|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_UNISTD_H''@|$(NEXT_UNISTD_H)|g' \ -e 's|@''WINDOWS_64_BIT_OFF_T''@|$(WINDOWS_64_BIT_OFF_T)|g' \ -e 's/@''GNULIB_ACCESS''@/$(GL_GNULIB_ACCESS)/g' \ -e 's/@''GNULIB_CHDIR''@/$(GL_GNULIB_CHDIR)/g' \ -e 's/@''GNULIB_CHOWN''@/$(GL_GNULIB_CHOWN)/g' \ -e 's/@''GNULIB_CLOSE''@/$(GL_GNULIB_CLOSE)/g' \ -e 's/@''GNULIB_COPY_FILE_RANGE''@/$(GL_GNULIB_COPY_FILE_RANGE)/g' \ -e 's/@''GNULIB_DUP''@/$(GL_GNULIB_DUP)/g' \ -e 's/@''GNULIB_DUP2''@/$(GL_GNULIB_DUP2)/g' \ -e 's/@''GNULIB_DUP3''@/$(GL_GNULIB_DUP3)/g' \ -e 's/@''GNULIB_ENVIRON''@/$(GL_GNULIB_ENVIRON)/g' \ -e 's/@''GNULIB_EUIDACCESS''@/$(GL_GNULIB_EUIDACCESS)/g' \ -e 's/@''GNULIB_EXECL''@/$(GL_GNULIB_EXECL)/g' \ -e 's/@''GNULIB_EXECLE''@/$(GL_GNULIB_EXECLE)/g' \ -e 's/@''GNULIB_EXECLP''@/$(GL_GNULIB_EXECLP)/g' \ -e 's/@''GNULIB_EXECV''@/$(GL_GNULIB_EXECV)/g' \ -e 's/@''GNULIB_EXECVE''@/$(GL_GNULIB_EXECVE)/g' \ -e 's/@''GNULIB_EXECVP''@/$(GL_GNULIB_EXECVP)/g' \ -e 's/@''GNULIB_EXECVPE''@/$(GL_GNULIB_EXECVPE)/g' \ -e 's/@''GNULIB_FACCESSAT''@/$(GL_GNULIB_FACCESSAT)/g' \ -e 's/@''GNULIB_FCHDIR''@/$(GL_GNULIB_FCHDIR)/g' \ -e 's/@''GNULIB_FCHOWNAT''@/$(GL_GNULIB_FCHOWNAT)/g' \ -e 's/@''GNULIB_FDATASYNC''@/$(GL_GNULIB_FDATASYNC)/g' \ -e 's/@''GNULIB_FSYNC''@/$(GL_GNULIB_FSYNC)/g' \ -e 's/@''GNULIB_FTRUNCATE''@/$(GL_GNULIB_FTRUNCATE)/g' \ -e 's/@''GNULIB_GETCWD''@/$(GL_GNULIB_GETCWD)/g' \ -e 's/@''GNULIB_GETDOMAINNAME''@/$(GL_GNULIB_GETDOMAINNAME)/g' \ -e 's/@''GNULIB_GETDTABLESIZE''@/$(GL_GNULIB_GETDTABLESIZE)/g' \ -e 's/@''GNULIB_GETENTROPY''@/$(GL_GNULIB_GETENTROPY)/g' \ -e 's/@''GNULIB_GETGROUPS''@/$(GL_GNULIB_GETGROUPS)/g' \ -e 's/@''GNULIB_GETHOSTNAME''@/$(GL_GNULIB_GETHOSTNAME)/g' \ -e 's/@''GNULIB_GETLOGIN''@/$(GL_GNULIB_GETLOGIN)/g' \ -e 's/@''GNULIB_GETLOGIN_R''@/$(GL_GNULIB_GETLOGIN_R)/g' \ -e 's/@''GNULIB_GETOPT_POSIX''@/$(GL_GNULIB_GETOPT_POSIX)/g' \ -e 's/@''GNULIB_GETPAGESIZE''@/$(GL_GNULIB_GETPAGESIZE)/g' \ -e 's/@''GNULIB_GETPASS''@/$(GL_GNULIB_GETPASS)/g' \ -e 's/@''GNULIB_GETPASS_GNU''@/$(GL_GNULIB_GETPASS_GNU)/g' \ -e 's/@''GNULIB_GETUSERSHELL''@/$(GL_GNULIB_GETUSERSHELL)/g' \ -e 's/@''GNULIB_GROUP_MEMBER''@/$(GL_GNULIB_GROUP_MEMBER)/g' \ -e 's/@''GNULIB_ISATTY''@/$(GL_GNULIB_ISATTY)/g' \ -e 's/@''GNULIB_LCHOWN''@/$(GL_GNULIB_LCHOWN)/g' \ -e 's/@''GNULIB_LINK''@/$(GL_GNULIB_LINK)/g' \ -e 's/@''GNULIB_LINKAT''@/$(GL_GNULIB_LINKAT)/g' \ -e 's/@''GNULIB_LSEEK''@/$(GL_GNULIB_LSEEK)/g' \ -e 's/@''GNULIB_PIPE''@/$(GL_GNULIB_PIPE)/g' \ -e 's/@''GNULIB_PIPE2''@/$(GL_GNULIB_PIPE2)/g' \ -e 's/@''GNULIB_PREAD''@/$(GL_GNULIB_PREAD)/g' \ -e 's/@''GNULIB_PWRITE''@/$(GL_GNULIB_PWRITE)/g' \ -e 's/@''GNULIB_READ''@/$(GL_GNULIB_READ)/g' \ -e 's/@''GNULIB_READLINK''@/$(GL_GNULIB_READLINK)/g' \ -e 's/@''GNULIB_READLINKAT''@/$(GL_GNULIB_READLINKAT)/g' \ -e 's/@''GNULIB_RMDIR''@/$(GL_GNULIB_RMDIR)/g' \ -e 's/@''GNULIB_SETHOSTNAME''@/$(GL_GNULIB_SETHOSTNAME)/g' \ -e 's/@''GNULIB_SLEEP''@/$(GL_GNULIB_SLEEP)/g' \ -e 's/@''GNULIB_SYMLINK''@/$(GL_GNULIB_SYMLINK)/g' \ -e 's/@''GNULIB_SYMLINKAT''@/$(GL_GNULIB_SYMLINKAT)/g' \ -e 's/@''GNULIB_TRUNCATE''@/$(GL_GNULIB_TRUNCATE)/g' \ -e 's/@''GNULIB_TTYNAME_R''@/$(GL_GNULIB_TTYNAME_R)/g' \ -e 's/@''GNULIB_UNISTD_H_GETOPT''@/0$(GL_GNULIB_UNISTD_H_GETOPT)/g' \ -e 's/@''GNULIB_UNISTD_H_NONBLOCKING''@/$(GL_GNULIB_UNISTD_H_NONBLOCKING)/g' \ -e 's/@''GNULIB_UNISTD_H_SIGPIPE''@/$(GL_GNULIB_UNISTD_H_SIGPIPE)/g' \ -e 's/@''GNULIB_UNLINK''@/$(GL_GNULIB_UNLINK)/g' \ -e 's/@''GNULIB_UNLINKAT''@/$(GL_GNULIB_UNLINKAT)/g' \ -e 's/@''GNULIB_USLEEP''@/$(GL_GNULIB_USLEEP)/g' \ -e 's/@''GNULIB_WRITE''@/$(GL_GNULIB_WRITE)/g' \ -e 's/@''GNULIB_MDA_ACCESS''@/$(GL_GNULIB_MDA_ACCESS)/g' \ -e 's/@''GNULIB_MDA_CHDIR''@/$(GL_GNULIB_MDA_CHDIR)/g' \ -e 's/@''GNULIB_MDA_CLOSE''@/$(GL_GNULIB_MDA_CLOSE)/g' \ -e 's/@''GNULIB_MDA_DUP''@/$(GL_GNULIB_MDA_DUP)/g' \ -e 's/@''GNULIB_MDA_DUP2''@/$(GL_GNULIB_MDA_DUP2)/g' \ -e 's/@''GNULIB_MDA_EXECL''@/$(GL_GNULIB_MDA_EXECL)/g' \ -e 's/@''GNULIB_MDA_EXECLE''@/$(GL_GNULIB_MDA_EXECLE)/g' \ -e 's/@''GNULIB_MDA_EXECLP''@/$(GL_GNULIB_MDA_EXECLP)/g' \ -e 's/@''GNULIB_MDA_EXECV''@/$(GL_GNULIB_MDA_EXECV)/g' \ -e 's/@''GNULIB_MDA_EXECVE''@/$(GL_GNULIB_MDA_EXECVE)/g' \ -e 's/@''GNULIB_MDA_EXECVP''@/$(GL_GNULIB_MDA_EXECVP)/g' \ -e 's/@''GNULIB_MDA_EXECVPE''@/$(GL_GNULIB_MDA_EXECVPE)/g' \ -e 's/@''GNULIB_MDA_GETCWD''@/$(GL_GNULIB_MDA_GETCWD)/g' \ -e 's/@''GNULIB_MDA_GETPID''@/$(GL_GNULIB_MDA_GETPID)/g' \ -e 's/@''GNULIB_MDA_ISATTY''@/$(GL_GNULIB_MDA_ISATTY)/g' \ -e 's/@''GNULIB_MDA_LSEEK''@/$(GL_GNULIB_MDA_LSEEK)/g' \ -e 's/@''GNULIB_MDA_READ''@/$(GL_GNULIB_MDA_READ)/g' \ -e 's/@''GNULIB_MDA_RMDIR''@/$(GL_GNULIB_MDA_RMDIR)/g' \ -e 's/@''GNULIB_MDA_SWAB''@/$(GL_GNULIB_MDA_SWAB)/g' \ -e 's/@''GNULIB_MDA_UNLINK''@/$(GL_GNULIB_MDA_UNLINK)/g' \ -e 's/@''GNULIB_MDA_WRITE''@/$(GL_GNULIB_MDA_WRITE)/g' \ < $(srcdir)/unistd.in.h | \ sed -e 's|@''HAVE_CHOWN''@|$(HAVE_CHOWN)|g' \ -e 's|@''HAVE_COPY_FILE_RANGE''@|$(HAVE_COPY_FILE_RANGE)|g' \ -e 's|@''HAVE_DUP3''@|$(HAVE_DUP3)|g' \ -e 's|@''HAVE_EUIDACCESS''@|$(HAVE_EUIDACCESS)|g' \ -e 's|@''HAVE_EXECVPE''@|$(HAVE_EXECVPE)|g' \ -e 's|@''HAVE_FACCESSAT''@|$(HAVE_FACCESSAT)|g' \ -e 's|@''HAVE_FCHDIR''@|$(HAVE_FCHDIR)|g' \ -e 's|@''HAVE_FCHOWNAT''@|$(HAVE_FCHOWNAT)|g' \ -e 's|@''HAVE_FDATASYNC''@|$(HAVE_FDATASYNC)|g' \ -e 's|@''HAVE_FSYNC''@|$(HAVE_FSYNC)|g' \ -e 's|@''HAVE_FTRUNCATE''@|$(HAVE_FTRUNCATE)|g' \ -e 's|@''HAVE_GETDTABLESIZE''@|$(HAVE_GETDTABLESIZE)|g' \ -e 's|@''HAVE_GETENTROPY''@|$(HAVE_GETENTROPY)|g' \ -e 's|@''HAVE_GETGROUPS''@|$(HAVE_GETGROUPS)|g' \ -e 's|@''HAVE_GETHOSTNAME''@|$(HAVE_GETHOSTNAME)|g' \ -e 's|@''HAVE_GETPAGESIZE''@|$(HAVE_GETPAGESIZE)|g' \ -e 's|@''HAVE_GETPASS''@|$(HAVE_GETPASS)|g' \ -e 's|@''HAVE_GROUP_MEMBER''@|$(HAVE_GROUP_MEMBER)|g' \ -e 's|@''HAVE_LCHOWN''@|$(HAVE_LCHOWN)|g' \ -e 's|@''HAVE_LINK''@|$(HAVE_LINK)|g' \ -e 's|@''HAVE_LINKAT''@|$(HAVE_LINKAT)|g' \ -e 's|@''HAVE_PIPE''@|$(HAVE_PIPE)|g' \ -e 's|@''HAVE_PIPE2''@|$(HAVE_PIPE2)|g' \ -e 's|@''HAVE_PREAD''@|$(HAVE_PREAD)|g' \ -e 's|@''HAVE_PWRITE''@|$(HAVE_PWRITE)|g' \ -e 's|@''HAVE_READLINK''@|$(HAVE_READLINK)|g' \ -e 's|@''HAVE_READLINKAT''@|$(HAVE_READLINKAT)|g' \ -e 's|@''HAVE_SETHOSTNAME''@|$(HAVE_SETHOSTNAME)|g' \ -e 's|@''HAVE_SLEEP''@|$(HAVE_SLEEP)|g' \ -e 's|@''HAVE_SYMLINK''@|$(HAVE_SYMLINK)|g' \ -e 's|@''HAVE_SYMLINKAT''@|$(HAVE_SYMLINKAT)|g' \ -e 's|@''HAVE_UNLINKAT''@|$(HAVE_UNLINKAT)|g' \ -e 's|@''HAVE_USLEEP''@|$(HAVE_USLEEP)|g' \ -e 's|@''HAVE_DECL_ENVIRON''@|$(HAVE_DECL_ENVIRON)|g' \ -e 's|@''HAVE_DECL_EXECVPE''@|$(HAVE_DECL_EXECVPE)|g' \ -e 's|@''HAVE_DECL_FCHDIR''@|$(HAVE_DECL_FCHDIR)|g' \ -e 's|@''HAVE_DECL_FDATASYNC''@|$(HAVE_DECL_FDATASYNC)|g' \ -e 's|@''HAVE_DECL_GETDOMAINNAME''@|$(HAVE_DECL_GETDOMAINNAME)|g' \ -e 's|@''HAVE_DECL_GETLOGIN''@|$(HAVE_DECL_GETLOGIN)|g' \ -e 's|@''HAVE_DECL_GETLOGIN_R''@|$(HAVE_DECL_GETLOGIN_R)|g' \ -e 's|@''HAVE_DECL_GETPAGESIZE''@|$(HAVE_DECL_GETPAGESIZE)|g' \ -e 's|@''HAVE_DECL_GETUSERSHELL''@|$(HAVE_DECL_GETUSERSHELL)|g' \ -e 's|@''HAVE_DECL_SETHOSTNAME''@|$(HAVE_DECL_SETHOSTNAME)|g' \ -e 's|@''HAVE_DECL_TRUNCATE''@|$(HAVE_DECL_TRUNCATE)|g' \ -e 's|@''HAVE_DECL_TTYNAME_R''@|$(HAVE_DECL_TTYNAME_R)|g' \ -e 's|@''HAVE_OS_H''@|$(HAVE_OS_H)|g' \ -e 's|@''HAVE_SYS_PARAM_H''@|$(HAVE_SYS_PARAM_H)|g' \ | \ sed -e 's|@''REPLACE_ACCESS''@|$(REPLACE_ACCESS)|g' \ -e 's|@''REPLACE_CHOWN''@|$(REPLACE_CHOWN)|g' \ -e 's|@''REPLACE_CLOSE''@|$(REPLACE_CLOSE)|g' \ -e 's|@''REPLACE_COPY_FILE_RANGE''@|$(REPLACE_COPY_FILE_RANGE)|g' \ -e 's|@''REPLACE_DUP''@|$(REPLACE_DUP)|g' \ -e 's|@''REPLACE_DUP2''@|$(REPLACE_DUP2)|g' \ -e 's|@''REPLACE_DUP3''@|$(REPLACE_DUP3)|g' \ -e 's|@''REPLACE_EXECL''@|$(REPLACE_EXECL)|g' \ -e 's|@''REPLACE_EXECLE''@|$(REPLACE_EXECLE)|g' \ -e 's|@''REPLACE_EXECLP''@|$(REPLACE_EXECLP)|g' \ -e 's|@''REPLACE_EXECV''@|$(REPLACE_EXECV)|g' \ -e 's|@''REPLACE_EXECVE''@|$(REPLACE_EXECVE)|g' \ -e 's|@''REPLACE_EXECVP''@|$(REPLACE_EXECVP)|g' \ -e 's|@''REPLACE_EXECVPE''@|$(REPLACE_EXECVPE)|g' \ -e 's|@''REPLACE_FACCESSAT''@|$(REPLACE_FACCESSAT)|g' \ -e 's|@''REPLACE_FCHOWNAT''@|$(REPLACE_FCHOWNAT)|g' \ -e 's|@''REPLACE_FDATASYNC''@|$(REPLACE_FDATASYNC)|g' \ -e 's|@''REPLACE_FTRUNCATE''@|$(REPLACE_FTRUNCATE)|g' \ -e 's|@''REPLACE_GETCWD''@|$(REPLACE_GETCWD)|g' \ -e 's|@''REPLACE_GETDOMAINNAME''@|$(REPLACE_GETDOMAINNAME)|g' \ -e 's|@''REPLACE_GETDTABLESIZE''@|$(REPLACE_GETDTABLESIZE)|g' \ -e 's|@''REPLACE_GETENTROPY''@|$(REPLACE_GETENTROPY)|g' \ -e 's|@''REPLACE_GETLOGIN_R''@|$(REPLACE_GETLOGIN_R)|g' \ -e 's|@''REPLACE_GETGROUPS''@|$(REPLACE_GETGROUPS)|g' \ -e 's|@''REPLACE_GETPAGESIZE''@|$(REPLACE_GETPAGESIZE)|g' \ -e 's|@''REPLACE_GETPASS''@|$(REPLACE_GETPASS)|g' \ -e 's|@''REPLACE_GETPASS_FOR_GETPASS_GNU''@|$(REPLACE_GETPASS_FOR_GETPASS_GNU)|g' \ -e 's|@''REPLACE_ISATTY''@|$(REPLACE_ISATTY)|g' \ -e 's|@''REPLACE_LCHOWN''@|$(REPLACE_LCHOWN)|g' \ -e 's|@''REPLACE_LINK''@|$(REPLACE_LINK)|g' \ -e 's|@''REPLACE_LINKAT''@|$(REPLACE_LINKAT)|g' \ -e 's|@''REPLACE_LSEEK''@|$(REPLACE_LSEEK)|g' \ -e 's|@''REPLACE_PIPE2''@|$(REPLACE_PIPE2)|g' \ -e 's|@''REPLACE_PREAD''@|$(REPLACE_PREAD)|g' \ -e 's|@''REPLACE_PWRITE''@|$(REPLACE_PWRITE)|g' \ -e 's|@''REPLACE_READ''@|$(REPLACE_READ)|g' \ -e 's|@''REPLACE_READLINK''@|$(REPLACE_READLINK)|g' \ -e 's|@''REPLACE_READLINKAT''@|$(REPLACE_READLINKAT)|g' \ -e 's|@''REPLACE_RMDIR''@|$(REPLACE_RMDIR)|g' \ -e 's|@''REPLACE_SETHOSTNAME''@|$(REPLACE_SETHOSTNAME)|g' \ -e 's|@''REPLACE_SLEEP''@|$(REPLACE_SLEEP)|g' \ -e 's|@''REPLACE_SYMLINK''@|$(REPLACE_SYMLINK)|g' \ -e 's|@''REPLACE_SYMLINKAT''@|$(REPLACE_SYMLINKAT)|g' \ -e 's|@''REPLACE_TRUNCATE''@|$(REPLACE_TRUNCATE)|g' \ -e 's|@''REPLACE_TTYNAME_R''@|$(REPLACE_TTYNAME_R)|g' \ -e 's|@''REPLACE_UNLINK''@|$(REPLACE_UNLINK)|g' \ -e 's|@''REPLACE_UNLINKAT''@|$(REPLACE_UNLINKAT)|g' \ -e 's|@''REPLACE_USLEEP''@|$(REPLACE_USLEEP)|g' \ -e 's|@''REPLACE_WRITE''@|$(REPLACE_WRITE)|g' \ -e 's|@''UNISTD_H_HAVE_SYS_RANDOM_H''@|$(UNISTD_H_HAVE_SYS_RANDOM_H)|g' \ -e 's|@''UNISTD_H_HAVE_WINSOCK2_H''@|$(UNISTD_H_HAVE_WINSOCK2_H)|g' \ -e 's|@''UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS''@|$(UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ > $@-t $(AM_V_at)mv $@-t $@ MOSTLYCLEANFILES += unistd.h unistd.h-t EXTRA_DIST += unistd.in.h ## end gnulib module unistd ## begin gnulib module unsetenv if GL_COND_OBJ_UNSETENV libgnu_a_SOURCES += unsetenv.c endif ## end gnulib module unsetenv ## begin gnulib module verify EXTRA_DIST += verify.h ## end gnulib module verify ## begin gnulib module wchar BUILT_SOURCES += wchar.h # We need the following in order to create <wchar.h> when the system # version does not work standalone. wchar.h: wchar.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''HAVE_FEATURES_H''@|$(HAVE_FEATURES_H)|g' \ -e 's|@''NEXT_WCHAR_H''@|$(NEXT_WCHAR_H)|g' \ -e 's|@''HAVE_WCHAR_H''@|$(HAVE_WCHAR_H)|g' \ -e 's/@''HAVE_CRTDEFS_H''@/$(HAVE_CRTDEFS_H)/g' \ -e 's/@''GNULIBHEADERS_OVERRIDE_WINT_T''@/$(GNULIBHEADERS_OVERRIDE_WINT_T)/g' \ -e 's/@''GNULIB_BTOWC''@/$(GL_GNULIB_BTOWC)/g' \ -e 's/@''GNULIB_WCTOB''@/$(GL_GNULIB_WCTOB)/g' \ -e 's/@''GNULIB_MBSINIT''@/$(GL_GNULIB_MBSINIT)/g' \ -e 's/@''GNULIB_MBRTOWC''@/$(GL_GNULIB_MBRTOWC)/g' \ -e 's/@''GNULIB_MBRLEN''@/$(GL_GNULIB_MBRLEN)/g' \ -e 's/@''GNULIB_MBSRTOWCS''@/$(GL_GNULIB_MBSRTOWCS)/g' \ -e 's/@''GNULIB_MBSNRTOWCS''@/$(GL_GNULIB_MBSNRTOWCS)/g' \ -e 's/@''GNULIB_WCRTOMB''@/$(GL_GNULIB_WCRTOMB)/g' \ -e 's/@''GNULIB_WCSRTOMBS''@/$(GL_GNULIB_WCSRTOMBS)/g' \ -e 's/@''GNULIB_WCSNRTOMBS''@/$(GL_GNULIB_WCSNRTOMBS)/g' \ -e 's/@''GNULIB_WCWIDTH''@/$(GL_GNULIB_WCWIDTH)/g' \ -e 's/@''GNULIB_WMEMCHR''@/$(GL_GNULIB_WMEMCHR)/g' \ -e 's/@''GNULIB_WMEMCMP''@/$(GL_GNULIB_WMEMCMP)/g' \ -e 's/@''GNULIB_WMEMCPY''@/$(GL_GNULIB_WMEMCPY)/g' \ -e 's/@''GNULIB_WMEMMOVE''@/$(GL_GNULIB_WMEMMOVE)/g' \ -e 's/@''GNULIB_WMEMPCPY''@/$(GL_GNULIB_WMEMPCPY)/g' \ -e 's/@''GNULIB_WMEMSET''@/$(GL_GNULIB_WMEMSET)/g' \ -e 's/@''GNULIB_WCSLEN''@/$(GL_GNULIB_WCSLEN)/g' \ -e 's/@''GNULIB_WCSNLEN''@/$(GL_GNULIB_WCSNLEN)/g' \ -e 's/@''GNULIB_WCSCPY''@/$(GL_GNULIB_WCSCPY)/g' \ -e 's/@''GNULIB_WCPCPY''@/$(GL_GNULIB_WCPCPY)/g' \ -e 's/@''GNULIB_WCSNCPY''@/$(GL_GNULIB_WCSNCPY)/g' \ -e 's/@''GNULIB_WCPNCPY''@/$(GL_GNULIB_WCPNCPY)/g' \ -e 's/@''GNULIB_WCSCAT''@/$(GL_GNULIB_WCSCAT)/g' \ -e 's/@''GNULIB_WCSNCAT''@/$(GL_GNULIB_WCSNCAT)/g' \ -e 's/@''GNULIB_WCSCMP''@/$(GL_GNULIB_WCSCMP)/g' \ -e 's/@''GNULIB_WCSNCMP''@/$(GL_GNULIB_WCSNCMP)/g' \ -e 's/@''GNULIB_WCSCASECMP''@/$(GL_GNULIB_WCSCASECMP)/g' \ -e 's/@''GNULIB_WCSNCASECMP''@/$(GL_GNULIB_WCSNCASECMP)/g' \ -e 's/@''GNULIB_WCSCOLL''@/$(GL_GNULIB_WCSCOLL)/g' \ -e 's/@''GNULIB_WCSXFRM''@/$(GL_GNULIB_WCSXFRM)/g' \ -e 's/@''GNULIB_WCSDUP''@/$(GL_GNULIB_WCSDUP)/g' \ -e 's/@''GNULIB_WCSCHR''@/$(GL_GNULIB_WCSCHR)/g' \ -e 's/@''GNULIB_WCSRCHR''@/$(GL_GNULIB_WCSRCHR)/g' \ -e 's/@''GNULIB_WCSCSPN''@/$(GL_GNULIB_WCSCSPN)/g' \ -e 's/@''GNULIB_WCSSPN''@/$(GL_GNULIB_WCSSPN)/g' \ -e 's/@''GNULIB_WCSPBRK''@/$(GL_GNULIB_WCSPBRK)/g' \ -e 's/@''GNULIB_WCSSTR''@/$(GL_GNULIB_WCSSTR)/g' \ -e 's/@''GNULIB_WCSTOK''@/$(GL_GNULIB_WCSTOK)/g' \ -e 's/@''GNULIB_WCSWIDTH''@/$(GL_GNULIB_WCSWIDTH)/g' \ -e 's/@''GNULIB_WCSFTIME''@/$(GL_GNULIB_WCSFTIME)/g' \ -e 's/@''GNULIB_MDA_WCSDUP''@/$(GL_GNULIB_MDA_WCSDUP)/g' \ -e 's/@''GNULIB_FREE_POSIX''@/$(GL_GNULIB_FREE_POSIX)/g' \ < $(srcdir)/wchar.in.h | \ sed -e 's|@''HAVE_WINT_T''@|$(HAVE_WINT_T)|g' \ -e 's|@''HAVE_BTOWC''@|$(HAVE_BTOWC)|g' \ -e 's|@''HAVE_MBSINIT''@|$(HAVE_MBSINIT)|g' \ -e 's|@''HAVE_MBRTOWC''@|$(HAVE_MBRTOWC)|g' \ -e 's|@''HAVE_MBRLEN''@|$(HAVE_MBRLEN)|g' \ -e 's|@''HAVE_MBSRTOWCS''@|$(HAVE_MBSRTOWCS)|g' \ -e 's|@''HAVE_MBSNRTOWCS''@|$(HAVE_MBSNRTOWCS)|g' \ -e 's|@''HAVE_WCRTOMB''@|$(HAVE_WCRTOMB)|g' \ -e 's|@''HAVE_WCSRTOMBS''@|$(HAVE_WCSRTOMBS)|g' \ -e 's|@''HAVE_WCSNRTOMBS''@|$(HAVE_WCSNRTOMBS)|g' \ -e 's|@''HAVE_WMEMCHR''@|$(HAVE_WMEMCHR)|g' \ -e 's|@''HAVE_WMEMCMP''@|$(HAVE_WMEMCMP)|g' \ -e 's|@''HAVE_WMEMCPY''@|$(HAVE_WMEMCPY)|g' \ -e 's|@''HAVE_WMEMMOVE''@|$(HAVE_WMEMMOVE)|g' \ -e 's|@''HAVE_WMEMPCPY''@|$(HAVE_WMEMPCPY)|g' \ -e 's|@''HAVE_WMEMSET''@|$(HAVE_WMEMSET)|g' \ -e 's|@''HAVE_WCSLEN''@|$(HAVE_WCSLEN)|g' \ -e 's|@''HAVE_WCSNLEN''@|$(HAVE_WCSNLEN)|g' \ -e 's|@''HAVE_WCSCPY''@|$(HAVE_WCSCPY)|g' \ -e 's|@''HAVE_WCPCPY''@|$(HAVE_WCPCPY)|g' \ -e 's|@''HAVE_WCSNCPY''@|$(HAVE_WCSNCPY)|g' \ -e 's|@''HAVE_WCPNCPY''@|$(HAVE_WCPNCPY)|g' \ -e 's|@''HAVE_WCSCAT''@|$(HAVE_WCSCAT)|g' \ -e 's|@''HAVE_WCSNCAT''@|$(HAVE_WCSNCAT)|g' \ -e 's|@''HAVE_WCSCMP''@|$(HAVE_WCSCMP)|g' \ -e 's|@''HAVE_WCSNCMP''@|$(HAVE_WCSNCMP)|g' \ -e 's|@''HAVE_WCSCASECMP''@|$(HAVE_WCSCASECMP)|g' \ -e 's|@''HAVE_WCSNCASECMP''@|$(HAVE_WCSNCASECMP)|g' \ -e 's|@''HAVE_WCSCOLL''@|$(HAVE_WCSCOLL)|g' \ -e 's|@''HAVE_WCSXFRM''@|$(HAVE_WCSXFRM)|g' \ -e 's|@''HAVE_WCSDUP''@|$(HAVE_WCSDUP)|g' \ -e 's|@''HAVE_WCSCHR''@|$(HAVE_WCSCHR)|g' \ -e 's|@''HAVE_WCSRCHR''@|$(HAVE_WCSRCHR)|g' \ -e 's|@''HAVE_WCSCSPN''@|$(HAVE_WCSCSPN)|g' \ -e 's|@''HAVE_WCSSPN''@|$(HAVE_WCSSPN)|g' \ -e 's|@''HAVE_WCSPBRK''@|$(HAVE_WCSPBRK)|g' \ -e 's|@''HAVE_WCSSTR''@|$(HAVE_WCSSTR)|g' \ -e 's|@''HAVE_WCSTOK''@|$(HAVE_WCSTOK)|g' \ -e 's|@''HAVE_WCSWIDTH''@|$(HAVE_WCSWIDTH)|g' \ -e 's|@''HAVE_WCSFTIME''@|$(HAVE_WCSFTIME)|g' \ -e 's|@''HAVE_DECL_WCTOB''@|$(HAVE_DECL_WCTOB)|g' \ -e 's|@''HAVE_DECL_WCSDUP''@|$(HAVE_DECL_WCSDUP)|g' \ -e 's|@''HAVE_DECL_WCWIDTH''@|$(HAVE_DECL_WCWIDTH)|g' \ | \ sed -e 's|@''REPLACE_MBSTATE_T''@|$(REPLACE_MBSTATE_T)|g' \ -e 's|@''REPLACE_BTOWC''@|$(REPLACE_BTOWC)|g' \ -e 's|@''REPLACE_WCTOB''@|$(REPLACE_WCTOB)|g' \ -e 's|@''REPLACE_FREE''@|$(REPLACE_FREE)|g' \ -e 's|@''REPLACE_MBSINIT''@|$(REPLACE_MBSINIT)|g' \ -e 's|@''REPLACE_MBRTOWC''@|$(REPLACE_MBRTOWC)|g' \ -e 's|@''REPLACE_MBRLEN''@|$(REPLACE_MBRLEN)|g' \ -e 's|@''REPLACE_MBSRTOWCS''@|$(REPLACE_MBSRTOWCS)|g' \ -e 's|@''REPLACE_MBSNRTOWCS''@|$(REPLACE_MBSNRTOWCS)|g' \ -e 's|@''REPLACE_WCRTOMB''@|$(REPLACE_WCRTOMB)|g' \ -e 's|@''REPLACE_WCSRTOMBS''@|$(REPLACE_WCSRTOMBS)|g' \ -e 's|@''REPLACE_WCSNRTOMBS''@|$(REPLACE_WCSNRTOMBS)|g' \ -e 's|@''REPLACE_WCWIDTH''@|$(REPLACE_WCWIDTH)|g' \ -e 's|@''REPLACE_WCSWIDTH''@|$(REPLACE_WCSWIDTH)|g' \ -e 's|@''REPLACE_WCSFTIME''@|$(REPLACE_WCSFTIME)|g' \ -e 's|@''REPLACE_WCSCMP''@|$(REPLACE_WCSCMP)|g' \ -e 's|@''REPLACE_WCSNCMP''@|$(REPLACE_WCSNCMP)|g' \ -e 's|@''REPLACE_WCSSTR''@|$(REPLACE_WCSSTR)|g' \ -e 's|@''REPLACE_WCSTOK''@|$(REPLACE_WCSTOK)|g' \ -e 's|@''REPLACE_WMEMCMP''@|$(REPLACE_WMEMCMP)|g' \ -e 's|@''REPLACE_WMEMPCPY''@|$(REPLACE_WMEMPCPY)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ > $@-t $(AM_V_at)mv $@-t $@ MOSTLYCLEANFILES += wchar.h wchar.h-t EXTRA_DIST += wchar.in.h ## end gnulib module wchar ## begin gnulib module wcrtomb if GL_COND_OBJ_WCRTOMB libgnu_a_SOURCES += wcrtomb.c endif ## end gnulib module wcrtomb ## begin gnulib module wctype-h BUILT_SOURCES += wctype.h libgnu_a_SOURCES += wctype-h.c # We need the following in order to create <wctype.h> when the system # doesn't have one that works with the given compiler. wctype.h: wctype.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's/@''HAVE_WCTYPE_H''@/$(HAVE_WCTYPE_H)/g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_WCTYPE_H''@|$(NEXT_WCTYPE_H)|g' \ -e 's/@''HAVE_CRTDEFS_H''@/$(HAVE_CRTDEFS_H)/g' \ -e 's/@''GNULIBHEADERS_OVERRIDE_WINT_T''@/$(GNULIBHEADERS_OVERRIDE_WINT_T)/g' \ -e 's/@''GNULIB_ISWBLANK''@/$(GL_GNULIB_ISWBLANK)/g' \ -e 's/@''GNULIB_ISWDIGIT''@/$(GL_GNULIB_ISWDIGIT)/g' \ -e 's/@''GNULIB_ISWXDIGIT''@/$(GL_GNULIB_ISWXDIGIT)/g' \ -e 's/@''GNULIB_WCTYPE''@/$(GL_GNULIB_WCTYPE)/g' \ -e 's/@''GNULIB_ISWCTYPE''@/$(GL_GNULIB_ISWCTYPE)/g' \ -e 's/@''GNULIB_WCTRANS''@/$(GL_GNULIB_WCTRANS)/g' \ -e 's/@''GNULIB_TOWCTRANS''@/$(GL_GNULIB_TOWCTRANS)/g' \ -e 's/@''HAVE_ISWBLANK''@/$(HAVE_ISWBLANK)/g' \ -e 's/@''HAVE_ISWCNTRL''@/$(HAVE_ISWCNTRL)/g' \ -e 's/@''HAVE_WCTYPE_T''@/$(HAVE_WCTYPE_T)/g' \ -e 's/@''HAVE_WCTRANS_T''@/$(HAVE_WCTRANS_T)/g' \ -e 's/@''HAVE_WINT_T''@/$(HAVE_WINT_T)/g' \ -e 's/@''REPLACE_ISWBLANK''@/$(REPLACE_ISWBLANK)/g' \ -e 's/@''REPLACE_ISWDIGIT''@/$(REPLACE_ISWDIGIT)/g' \ -e 's/@''REPLACE_ISWXDIGIT''@/$(REPLACE_ISWXDIGIT)/g' \ -e 's/@''REPLACE_ISWCNTRL''@/$(REPLACE_ISWCNTRL)/g' \ -e 's/@''REPLACE_TOWLOWER''@/$(REPLACE_TOWLOWER)/g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/wctype.in.h > $@-t $(AM_V_at)mv $@-t $@ MOSTLYCLEANFILES += wctype.h wctype.h-t EXTRA_DIST += wctype.in.h ## end gnulib module wctype-h ## begin gnulib module windows-mutex if GL_COND_OBJ_WINDOWS_MUTEX libgnu_a_SOURCES += windows-mutex.c endif EXTRA_DIST += windows-initguard.h windows-mutex.h ## end gnulib module windows-mutex ## begin gnulib module windows-once if GL_COND_OBJ_WINDOWS_ONCE libgnu_a_SOURCES += windows-once.c endif EXTRA_DIST += windows-once.h ## end gnulib module windows-once ## begin gnulib module windows-recmutex if GL_COND_OBJ_WINDOWS_RECMUTEX libgnu_a_SOURCES += windows-recmutex.c endif EXTRA_DIST += windows-initguard.h windows-recmutex.h ## end gnulib module windows-recmutex ## begin gnulib module windows-rwlock if GL_COND_OBJ_WINDOWS_RWLOCK libgnu_a_SOURCES += windows-rwlock.c endif EXTRA_DIST += windows-initguard.h windows-rwlock.h ## end gnulib module windows-rwlock ## begin gnulib module xalloc libgnu_a_SOURCES += xmalloc.c EXTRA_DIST += xalloc.h ## end gnulib module xalloc ## begin gnulib module xalloc-oversized EXTRA_DIST += xalloc-oversized.h ## end gnulib module xalloc-oversized mostlyclean-local: mostlyclean-generic @for dir in '' $(MOSTLYCLEANDIRS); do \ if test -n "$$dir" && test -d $$dir; then \ echo "rmdir $$dir"; rmdir $$dir; \ fi; \ done; \ : distclean-local: distclean-gnulib-libobjs distclean-gnulib-libobjs: -rm -f @gl_LIBOBJDEPS@ maintainer-clean-local: distclean-gnulib-libobjs ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/stat-w32.h�����������������������������������������������������������������������������0000644�0001750�0001750�00000003107�14436425346�014670� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Core of implementation of fstat and stat for native Windows. Copyright (C) 2017-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _STAT_W32_H #define _STAT_W32_H 1 /* Converts a FILETIME to GMT time since 1970-01-01 00:00:00. */ #if _GL_WINDOWS_STAT_TIMESPEC extern struct timespec _gl_convert_FILETIME_to_timespec (const FILETIME *ft); #else extern time_t _gl_convert_FILETIME_to_POSIX (const FILETIME *ft); #endif /* Fill *BUF with information about the file designated by H. PATH is the file name, if known, otherwise NULL. Return 0 if successful, or -1 with errno set upon failure. */ extern int _gl_fstat_by_handle (HANDLE h, const char *path, struct stat *buf); /* Bitmasks for st_mode. */ #define S_IREAD_UGO (_S_IREAD | (_S_IREAD >> 3) | (_S_IREAD >> 6)) #define S_IWRITE_UGO (_S_IWRITE | (_S_IWRITE >> 3) | (_S_IWRITE >> 6)) #define S_IEXEC_UGO (_S_IEXEC | (_S_IEXEC >> 3) | (_S_IEXEC >> 6)) #endif /* _STAT_W32_H */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/windows-rwlock.h�����������������������������������������������������������������������0000644�0001750�0001750�00000005134�14436425347�016300� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Read-write locks (native Windows implementation). Copyright (C) 2005-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2005. Based on GCC's gthr-win32.h. */ #ifndef _WINDOWS_RWLOCK_H #define _WINDOWS_RWLOCK_H #define WIN32_LEAN_AND_MEAN /* avoid including junk */ #include <windows.h> #include "windows-initguard.h" /* It is impossible to implement read-write locks using plain locks, without introducing an extra thread dedicated to managing read-write locks. Therefore here we need to use the low-level Event type. */ typedef struct { HANDLE *array; /* array of waiting threads, each represented by an event */ unsigned int count; /* number of waiting threads */ unsigned int alloc; /* length of allocated array */ unsigned int offset; /* index of first waiting thread in array */ } glwthread_carray_waitqueue_t; typedef struct { glwthread_initguard_t guard; /* protects the initialization */ CRITICAL_SECTION lock; /* protects the remaining fields */ glwthread_carray_waitqueue_t waiting_readers; /* waiting readers */ glwthread_carray_waitqueue_t waiting_writers; /* waiting writers */ int runcount; /* number of readers running, or -1 when a writer runs */ } glwthread_rwlock_t; #define GLWTHREAD_RWLOCK_INIT { GLWTHREAD_INITGUARD_INIT } #ifdef __cplusplus extern "C" { #endif extern void glwthread_rwlock_init (glwthread_rwlock_t *lock); extern int glwthread_rwlock_rdlock (glwthread_rwlock_t *lock); extern int glwthread_rwlock_wrlock (glwthread_rwlock_t *lock); extern int glwthread_rwlock_tryrdlock (glwthread_rwlock_t *lock); extern int glwthread_rwlock_trywrlock (glwthread_rwlock_t *lock); extern int glwthread_rwlock_unlock (glwthread_rwlock_t *lock); extern int glwthread_rwlock_destroy (glwthread_rwlock_t *lock); #ifdef __cplusplus } #endif #endif /* _WINDOWS_RWLOCK_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/mbtowc.c�������������������������������������������������������������������������������0000644�0001750�0001750�00000001670�14436425346�014575� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert multibyte character to wide character. Copyright (C) 2011-2023 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include <stdlib.h> #include <errno.h> #include <string.h> #include <wchar.h> #include "mbtowc-impl.h" ������������������������������������������������������������������������rush-2.4/gnu/cloexec.h������������������������������������������������������������������������������0000644�0001750�0001750�00000002727�14436425345�014734� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* cloexec.c - set or clear the close-on-exec descriptor flag Copyright (C) 2004, 2009-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Set the 'FD_CLOEXEC' flag of DESC if VALUE is true, or clear the flag if VALUE is false. Return 0 on success, or -1 on error with 'errno' set. Note that on MingW, this function does NOT protect DESC from being inherited into spawned children. Instead, either use dup_cloexec followed by closing the original DESC, or use interfaces such as open or pipe2 that accept flags like O_CLOEXEC to create DESC non-inheritable in the first place. */ int set_cloexec_flag (int desc, bool value); /* Duplicates a file handle FD, while marking the copy to be closed prior to exec or spawn. Returns -1 and sets errno if FD could not be duplicated. */ int dup_cloexec (int fd); �����������������������������������������rush-2.4/gnu/regex.h��������������������������������������������������������������������������������0000644�0001750�0001750�00000062460�14436425346�014425� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Definitions for data structures and routines for the regular expression library. Copyright (C) 1985, 1989-2023 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ #ifndef _REGEX_H #define _REGEX_H 1 #include <sys/types.h> /* Allow the use in C++ code. */ #ifdef __cplusplus extern "C" { #endif /* Define __USE_GNU to declare GNU extensions that violate the POSIX name space rules. */ #ifdef _GNU_SOURCE # define __USE_GNU 1 #endif #ifdef _REGEX_LARGE_OFFSETS /* Use types and values that are wide enough to represent signed and unsigned byte offsets in memory. This currently works only when the regex code is used outside of the GNU C library; it is not yet supported within glibc itself, and glibc users should not define _REGEX_LARGE_OFFSETS. */ /* The type of object sizes. */ typedef size_t __re_size_t; /* The type of object sizes, in places where the traditional code uses unsigned long int. */ typedef size_t __re_long_size_t; #else /* The traditional GNU regex implementation mishandles strings longer than INT_MAX. */ typedef unsigned int __re_size_t; typedef unsigned long int __re_long_size_t; #endif /* The following two types have to be signed and unsigned integer type wide enough to hold a value of a pointer. For most ANSI compilers ptrdiff_t and size_t should be likely OK. Still size of these two types is 2 for Microsoft C. Ugh... */ typedef long int s_reg_t; typedef unsigned long int active_reg_t; /* The following bits are used to determine the regexp syntax we recognize. The set/not-set meanings are chosen so that Emacs syntax remains the value 0. The bits are given in alphabetical order, and the definitions shifted by one from the previous bit; thus, when we add or remove a bit, only one other definition need change. */ typedef unsigned long int reg_syntax_t; #ifdef __USE_GNU /* If this bit is not set, then \ inside a bracket expression is literal. If set, then such a \ quotes the following character. */ # define RE_BACKSLASH_ESCAPE_IN_LISTS ((unsigned long int) 1) /* If this bit is not set, then + and ? are operators, and \+ and \? are literals. If set, then \+ and \? are operators and + and ? are literals. */ # define RE_BK_PLUS_QM (RE_BACKSLASH_ESCAPE_IN_LISTS << 1) /* If this bit is set, then character classes are supported. They are: [:alpha:], [:upper:], [:lower:], [:digit:], [:alnum:], [:xdigit:], [:space:], [:print:], [:punct:], [:graph:], and [:cntrl:]. If not set, then character classes are not supported. */ # define RE_CHAR_CLASSES (RE_BK_PLUS_QM << 1) /* If this bit is set, then ^ and $ are always anchors (outside bracket expressions, of course). If this bit is not set, then it depends: ^ is an anchor if it is at the beginning of a regular expression or after an open-group or an alternation operator; $ is an anchor if it is at the end of a regular expression, or before a close-group or an alternation operator. This bit could be (re)combined with RE_CONTEXT_INDEP_OPS, because POSIX draft 11.2 says that * etc. in leading positions is undefined. We already implemented a previous draft which made those constructs invalid, though, so we haven't changed the code back. */ # define RE_CONTEXT_INDEP_ANCHORS (RE_CHAR_CLASSES << 1) /* If this bit is set, then special characters are always special regardless of where they are in the pattern. If this bit is not set, then special characters are special only in some contexts; otherwise they are ordinary. Specifically, * + ? and intervals are only special when not after the beginning, open-group, or alternation operator. */ # define RE_CONTEXT_INDEP_OPS (RE_CONTEXT_INDEP_ANCHORS << 1) /* If this bit is set, then *, +, ?, and { cannot be first in an re or immediately after an alternation or begin-group operator. */ # define RE_CONTEXT_INVALID_OPS (RE_CONTEXT_INDEP_OPS << 1) /* If this bit is set, then . matches newline. If not set, then it doesn't. */ # define RE_DOT_NEWLINE (RE_CONTEXT_INVALID_OPS << 1) /* If this bit is set, then . doesn't match NUL. If not set, then it does. */ # define RE_DOT_NOT_NULL (RE_DOT_NEWLINE << 1) /* If this bit is set, nonmatching lists [^...] do not match newline. If not set, they do. */ # define RE_HAT_LISTS_NOT_NEWLINE (RE_DOT_NOT_NULL << 1) /* If this bit is set, either \{...\} or {...} defines an interval, depending on RE_NO_BK_BRACES. If not set, \{, \}, {, and } are literals. */ # define RE_INTERVALS (RE_HAT_LISTS_NOT_NEWLINE << 1) /* If this bit is set, +, ? and | aren't recognized as operators. If not set, they are. */ # define RE_LIMITED_OPS (RE_INTERVALS << 1) /* If this bit is set, newline is an alternation operator. If not set, newline is literal. */ # define RE_NEWLINE_ALT (RE_LIMITED_OPS << 1) /* If this bit is set, then '{...}' defines an interval, and \{ and \} are literals. If not set, then '\{...\}' defines an interval. */ # define RE_NO_BK_BRACES (RE_NEWLINE_ALT << 1) /* If this bit is set, (...) defines a group, and \( and \) are literals. If not set, \(...\) defines a group, and ( and ) are literals. */ # define RE_NO_BK_PARENS (RE_NO_BK_BRACES << 1) /* If this bit is set, then \<digit> matches <digit>. If not set, then \<digit> is a back-reference. */ # define RE_NO_BK_REFS (RE_NO_BK_PARENS << 1) /* If this bit is set, then | is an alternation operator, and \| is literal. If not set, then \| is an alternation operator, and | is literal. */ # define RE_NO_BK_VBAR (RE_NO_BK_REFS << 1) /* If this bit is set, then an ending range point collating higher than the starting range point, as in [z-a], is invalid. If not set, then when ending range point collates higher than the starting range point, the range is ignored. */ # define RE_NO_EMPTY_RANGES (RE_NO_BK_VBAR << 1) /* If this bit is set, then an unmatched ) is ordinary. If not set, then an unmatched ) is invalid. */ # define RE_UNMATCHED_RIGHT_PAREN_ORD (RE_NO_EMPTY_RANGES << 1) /* If this bit is set, succeed as soon as we match the whole pattern, without further backtracking. */ # define RE_NO_POSIX_BACKTRACKING (RE_UNMATCHED_RIGHT_PAREN_ORD << 1) /* If this bit is set, do not process the GNU regex operators. If not set, then the GNU regex operators are recognized. */ # define RE_NO_GNU_OPS (RE_NO_POSIX_BACKTRACKING << 1) /* If this bit is set, turn on internal regex debugging. If not set, and debugging was on, turn it off. This only works if regex.c is compiled -DDEBUG. We define this bit always, so that all that's needed to turn on debugging is to recompile regex.c; the calling code can always have this bit set, and it won't affect anything in the normal case. */ # define RE_DEBUG (RE_NO_GNU_OPS << 1) /* If this bit is set, a syntactically invalid interval is treated as a string of ordinary characters. For example, the ERE 'a{1' is treated as 'a\{1'. */ # define RE_INVALID_INTERVAL_ORD (RE_DEBUG << 1) /* If this bit is set, then ignore case when matching. If not set, then case is significant. */ # define RE_ICASE (RE_INVALID_INTERVAL_ORD << 1) /* This bit is used internally like RE_CONTEXT_INDEP_ANCHORS but only for ^, because it is difficult to scan the regex backwards to find whether ^ should be special. */ # define RE_CARET_ANCHORS_HERE (RE_ICASE << 1) /* If this bit is set, then \{ cannot be first in a regex or immediately after an alternation, open-group or \} operator. */ # define RE_CONTEXT_INVALID_DUP (RE_CARET_ANCHORS_HERE << 1) /* If this bit is set, then no_sub will be set to 1 during re_compile_pattern. */ # define RE_NO_SUB (RE_CONTEXT_INVALID_DUP << 1) #endif /* This global variable defines the particular regexp syntax to use (for some interfaces). When a regexp is compiled, the syntax used is stored in the pattern buffer, so changing this does not affect already-compiled regexps. */ extern reg_syntax_t re_syntax_options; #ifdef __USE_GNU /* Define combinations of the above bits for the standard possibilities. (The [[[ comments delimit what gets put into the Texinfo file, so don't delete them!) */ /* [[[begin syntaxes]]] */ # define RE_SYNTAX_EMACS 0 # define RE_SYNTAX_AWK \ (RE_BACKSLASH_ESCAPE_IN_LISTS | RE_DOT_NOT_NULL \ | RE_NO_BK_PARENS | RE_NO_BK_REFS \ | RE_NO_BK_VBAR | RE_NO_EMPTY_RANGES \ | RE_DOT_NEWLINE | RE_CONTEXT_INDEP_ANCHORS \ | RE_CHAR_CLASSES \ | RE_UNMATCHED_RIGHT_PAREN_ORD | RE_NO_GNU_OPS) # define RE_SYNTAX_GNU_AWK \ ((RE_SYNTAX_POSIX_EXTENDED | RE_BACKSLASH_ESCAPE_IN_LISTS \ | RE_INVALID_INTERVAL_ORD) \ & ~(RE_DOT_NOT_NULL | RE_CONTEXT_INDEP_OPS \ | RE_CONTEXT_INVALID_OPS )) # define RE_SYNTAX_POSIX_AWK \ (RE_SYNTAX_POSIX_EXTENDED | RE_BACKSLASH_ESCAPE_IN_LISTS \ | RE_INTERVALS | RE_NO_GNU_OPS \ | RE_INVALID_INTERVAL_ORD) # define RE_SYNTAX_GREP \ ((RE_SYNTAX_POSIX_BASIC | RE_NEWLINE_ALT) \ & ~(RE_CONTEXT_INVALID_DUP | RE_DOT_NOT_NULL)) # define RE_SYNTAX_EGREP \ ((RE_SYNTAX_POSIX_EXTENDED | RE_INVALID_INTERVAL_ORD | RE_NEWLINE_ALT) \ & ~(RE_CONTEXT_INVALID_OPS | RE_DOT_NOT_NULL)) /* POSIX grep -E behavior is no longer incompatible with GNU. */ # define RE_SYNTAX_POSIX_EGREP \ RE_SYNTAX_EGREP /* P1003.2/D11.2, section 4.20.7.1, lines 5078ff. */ # define RE_SYNTAX_ED RE_SYNTAX_POSIX_BASIC # define RE_SYNTAX_SED RE_SYNTAX_POSIX_BASIC /* Syntax bits common to both basic and extended POSIX regex syntax. */ # define _RE_SYNTAX_POSIX_COMMON \ (RE_CHAR_CLASSES | RE_DOT_NEWLINE | RE_DOT_NOT_NULL \ | RE_INTERVALS | RE_NO_EMPTY_RANGES) # define RE_SYNTAX_POSIX_BASIC \ (_RE_SYNTAX_POSIX_COMMON | RE_BK_PLUS_QM | RE_CONTEXT_INVALID_DUP) /* Differs from ..._POSIX_BASIC only in that RE_BK_PLUS_QM becomes RE_LIMITED_OPS, i.e., \? \+ \| are not recognized. Actually, this isn't minimal, since other operators, such as \`, aren't disabled. */ # define RE_SYNTAX_POSIX_MINIMAL_BASIC \ (_RE_SYNTAX_POSIX_COMMON | RE_LIMITED_OPS) # define RE_SYNTAX_POSIX_EXTENDED \ (_RE_SYNTAX_POSIX_COMMON | RE_CONTEXT_INDEP_ANCHORS \ | RE_CONTEXT_INDEP_OPS | RE_NO_BK_BRACES \ | RE_NO_BK_PARENS | RE_NO_BK_VBAR \ | RE_CONTEXT_INVALID_OPS | RE_UNMATCHED_RIGHT_PAREN_ORD) /* Differs from ..._POSIX_EXTENDED in that RE_CONTEXT_INDEP_OPS is removed and RE_NO_BK_REFS is added. */ # define RE_SYNTAX_POSIX_MINIMAL_EXTENDED \ (_RE_SYNTAX_POSIX_COMMON | RE_CONTEXT_INDEP_ANCHORS \ | RE_CONTEXT_INVALID_OPS | RE_NO_BK_BRACES \ | RE_NO_BK_PARENS | RE_NO_BK_REFS \ | RE_NO_BK_VBAR | RE_UNMATCHED_RIGHT_PAREN_ORD) /* [[[end syntaxes]]] */ /* Maximum number of duplicates an interval can allow. POSIX-conforming systems might define this in <limits.h>, but we want our value, so remove any previous define. */ # ifdef _REGEX_INCLUDE_LIMITS_H # include <limits.h> # endif # ifdef RE_DUP_MAX # undef RE_DUP_MAX # endif /* RE_DUP_MAX is 2**15 - 1 because an earlier implementation stored the counter as a 2-byte signed integer. This is no longer true, so RE_DUP_MAX could be increased to (INT_MAX / 10 - 1), or to ((SIZE_MAX - 9) / 10) if _REGEX_LARGE_OFFSETS is defined. However, there would be a huge performance problem if someone actually used a pattern like a\{214748363\}, so RE_DUP_MAX retains its historical value. */ # define RE_DUP_MAX (0x7fff) #endif /* POSIX 'cflags' bits (i.e., information for 'regcomp'). */ /* If this bit is set, then use extended regular expression syntax. If not set, then use basic regular expression syntax. */ #define REG_EXTENDED 1 /* If this bit is set, then ignore case when matching. If not set, then case is significant. */ #define REG_ICASE (1 << 1) /* If this bit is set, then anchors do not match at newline characters in the string. If not set, then anchors do match at newlines. */ #define REG_NEWLINE (1 << 2) /* If this bit is set, then report only success or fail in regexec. If not set, then returns differ between not matching and errors. */ #define REG_NOSUB (1 << 3) /* POSIX 'eflags' bits (i.e., information for regexec). */ /* If this bit is set, then the beginning-of-line operator doesn't match the beginning of the string (presumably because it's not the beginning of a line). If not set, then the beginning-of-line operator does match the beginning of the string. */ #define REG_NOTBOL 1 /* Like REG_NOTBOL, except for the end-of-line. */ #define REG_NOTEOL (1 << 1) /* Use PMATCH[0] to delimit the start and end of the search in the buffer. */ #define REG_STARTEND (1 << 2) /* If any error codes are removed, changed, or added, update the '__re_error_msgid' table in regcomp.c. */ typedef enum { _REG_ENOSYS = -1, /* This will never happen for this implementation. */ _REG_NOERROR = 0, /* Success. */ _REG_NOMATCH, /* Didn't find a match (for regexec). */ /* POSIX regcomp return error codes. (In the order listed in the standard.) */ _REG_BADPAT, /* Invalid pattern. */ _REG_ECOLLATE, /* Invalid collating element. */ _REG_ECTYPE, /* Invalid character class name. */ _REG_EESCAPE, /* Trailing backslash. */ _REG_ESUBREG, /* Invalid back reference. */ _REG_EBRACK, /* Unmatched left bracket. */ _REG_EPAREN, /* Parenthesis imbalance. */ _REG_EBRACE, /* Unmatched \{. */ _REG_BADBR, /* Invalid contents of \{\}. */ _REG_ERANGE, /* Invalid range end. */ _REG_ESPACE, /* Ran out of memory. */ _REG_BADRPT, /* No preceding re for repetition op. */ /* Error codes we've added. */ _REG_EEND, /* Premature end. */ _REG_ESIZE, /* Too large (e.g., repeat count too large). */ _REG_ERPAREN /* Unmatched ) or \); not returned from regcomp. */ } reg_errcode_t; #if defined _XOPEN_SOURCE || defined __USE_XOPEN2K # define REG_ENOSYS _REG_ENOSYS #endif #define REG_NOERROR _REG_NOERROR #define REG_NOMATCH _REG_NOMATCH #define REG_BADPAT _REG_BADPAT #define REG_ECOLLATE _REG_ECOLLATE #define REG_ECTYPE _REG_ECTYPE #define REG_EESCAPE _REG_EESCAPE #define REG_ESUBREG _REG_ESUBREG #define REG_EBRACK _REG_EBRACK #define REG_EPAREN _REG_EPAREN #define REG_EBRACE _REG_EBRACE #define REG_BADBR _REG_BADBR #define REG_ERANGE _REG_ERANGE #define REG_ESPACE _REG_ESPACE #define REG_BADRPT _REG_BADRPT #define REG_EEND _REG_EEND #define REG_ESIZE _REG_ESIZE #define REG_ERPAREN _REG_ERPAREN /* This data structure represents a compiled pattern. Before calling the pattern compiler, the fields 'buffer', 'allocated', 'fastmap', and 'translate' can be set. After the pattern has been compiled, the fields 're_nsub', 'not_bol' and 'not_eol' are available. All other fields are private to the regex routines. */ #ifndef RE_TRANSLATE_TYPE # define __RE_TRANSLATE_TYPE unsigned char * # ifdef __USE_GNU # define RE_TRANSLATE_TYPE __RE_TRANSLATE_TYPE # endif #endif #ifdef __USE_GNU # define __REPB_PREFIX(name) name #else # define __REPB_PREFIX(name) __##name #endif struct re_pattern_buffer { /* Space that holds the compiled pattern. The type 'struct re_dfa_t' is private and is not declared here. */ struct re_dfa_t *__REPB_PREFIX(buffer); /* Number of bytes to which 'buffer' points. */ __re_long_size_t __REPB_PREFIX(allocated); /* Number of bytes actually used in 'buffer'. */ __re_long_size_t __REPB_PREFIX(used); /* Syntax setting with which the pattern was compiled. */ reg_syntax_t __REPB_PREFIX(syntax); /* Pointer to a fastmap, if any, otherwise zero. re_search uses the fastmap, if there is one, to skip over impossible starting points for matches. */ char *__REPB_PREFIX(fastmap); /* Either a translate table to apply to all characters before comparing them, or zero for no translation. The translation is applied to a pattern when it is compiled and to a string when it is matched. */ __RE_TRANSLATE_TYPE __REPB_PREFIX(translate); /* Number of subexpressions found by the compiler. */ size_t re_nsub; /* Zero if this pattern cannot match the empty string, one else. Well, in truth it's used only in 're_search_2', to see whether or not we should use the fastmap, so we don't set this absolutely perfectly; see 're_compile_fastmap' (the "duplicate" case). */ unsigned __REPB_PREFIX(can_be_null) : 1; /* If REGS_UNALLOCATED, allocate space in the 'regs' structure for 'max (RE_NREGS, re_nsub + 1)' groups. If REGS_REALLOCATE, reallocate space if necessary. If REGS_FIXED, use what's there. */ #ifdef __USE_GNU # define REGS_UNALLOCATED 0 # define REGS_REALLOCATE 1 # define REGS_FIXED 2 #endif unsigned __REPB_PREFIX(regs_allocated) : 2; /* Set to zero when 're_compile_pattern' compiles a pattern; set to one by 're_compile_fastmap' if it updates the fastmap. */ unsigned __REPB_PREFIX(fastmap_accurate) : 1; /* If set, 're_match_2' does not return information about subexpressions. */ unsigned __REPB_PREFIX(no_sub) : 1; /* If set, a beginning-of-line anchor doesn't match at the beginning of the string. */ unsigned __REPB_PREFIX(not_bol) : 1; /* Similarly for an end-of-line anchor. */ unsigned __REPB_PREFIX(not_eol) : 1; /* If true, an anchor at a newline matches. */ unsigned __REPB_PREFIX(newline_anchor) : 1; }; typedef struct re_pattern_buffer regex_t; /* Type for byte offsets within the string. POSIX mandates this. */ #ifdef _REGEX_LARGE_OFFSETS /* POSIX 1003.1-2008 requires that regoff_t be at least as wide as ptrdiff_t and ssize_t. We don't know of any hosts where ptrdiff_t is wider than ssize_t, so ssize_t is safe. ptrdiff_t is not visible here, so use ssize_t. */ typedef ssize_t regoff_t; #else /* The traditional GNU regex implementation mishandles strings longer than INT_MAX. */ typedef int regoff_t; #endif #ifdef __USE_GNU /* This is the structure we store register match data in. See regex.texinfo for a full description of what registers match. */ struct re_registers { __re_size_t num_regs; regoff_t *start; regoff_t *end; }; /* If 'regs_allocated' is REGS_UNALLOCATED in the pattern buffer, 're_match_2' returns information about at least this many registers the first time a 'regs' structure is passed. */ # ifndef RE_NREGS # define RE_NREGS 30 # endif #endif /* POSIX specification for registers. Aside from the different names than 're_registers', POSIX uses an array of structures, instead of a structure of arrays. */ typedef struct { regoff_t rm_so; /* Byte offset from string's start to substring's start. */ regoff_t rm_eo; /* Byte offset from string's start to substring's end. */ } regmatch_t; /* Declarations for routines. */ #ifndef _REGEX_NELTS # if (defined __STDC_VERSION__ && 199901L <= __STDC_VERSION__ \ && !defined __STDC_NO_VLA__) # define _REGEX_NELTS(n) n # else # define _REGEX_NELTS(n) # endif #endif #if defined __GNUC__ && 4 < __GNUC__ + (6 <= __GNUC_MINOR__) # pragma GCC diagnostic push # pragma GCC diagnostic ignored "-Wvla" #endif #ifndef _Attr_access_ # ifdef __attr_access # define _Attr_access_(arg) __attr_access (arg) # elif defined __GNUC__ && 10 <= __GNUC__ # define _Attr_access_(x) __attribute__ ((__access__ x)) # else # define _Attr_access_(x) # endif #endif #ifdef __USE_GNU /* Sets the current default syntax to SYNTAX, and return the old syntax. You can also simply assign to the 're_syntax_options' variable. */ extern reg_syntax_t re_set_syntax (reg_syntax_t __syntax); /* Compile the regular expression PATTERN, with length LENGTH and syntax given by the global 're_syntax_options', into the buffer BUFFER. Return NULL if successful, and an error string if not. To free the allocated storage, you must call 'regfree' on BUFFER. Note that the translate table must either have been initialized by 'regcomp', with a malloc'ed value, or set to NULL before calling 'regfree'. */ extern const char *re_compile_pattern (const char *__pattern, size_t __length, struct re_pattern_buffer *__buffer) _Attr_access_ ((__read_only__, 1, 2)); /* Compile a fastmap for the compiled pattern in BUFFER; used to accelerate searches. Return 0 if successful and -2 if was an internal error. */ extern int re_compile_fastmap (struct re_pattern_buffer *__buffer); /* Search in the string STRING (with length LENGTH) for the pattern compiled into BUFFER. Start searching at position START, for RANGE characters. Return the starting position of the match, -1 for no match, or -2 for an internal error. Also return register information in REGS (if REGS and BUFFER->no_sub are nonzero). */ extern regoff_t re_search (struct re_pattern_buffer *__buffer, const char *__String, regoff_t __length, regoff_t __start, regoff_t __range, struct re_registers *__regs) _Attr_access_ ((__read_only__, 2, 3)); /* Like 're_search', but search in the concatenation of STRING1 and STRING2. Also, stop searching at index START + STOP. */ extern regoff_t re_search_2 (struct re_pattern_buffer *__buffer, const char *__string1, regoff_t __length1, const char *__string2, regoff_t __length2, regoff_t __start, regoff_t __range, struct re_registers *__regs, regoff_t __stop) _Attr_access_ ((__read_only__, 2, 3)) _Attr_access_ ((__read_only__, 4, 5)); /* Like 're_search', but return how many characters in STRING the regexp in BUFFER matched, starting at position START. */ extern regoff_t re_match (struct re_pattern_buffer *__buffer, const char *__String, regoff_t __length, regoff_t __start, struct re_registers *__regs) _Attr_access_ ((__read_only__, 2, 3)); /* Relates to 're_match' as 're_search_2' relates to 're_search'. */ extern regoff_t re_match_2 (struct re_pattern_buffer *__buffer, const char *__string1, regoff_t __length1, const char *__string2, regoff_t __length2, regoff_t __start, struct re_registers *__regs, regoff_t __stop) _Attr_access_ ((__read_only__, 2, 3)) _Attr_access_ ((__read_only__, 4, 5)); /* Set REGS to hold NUM_REGS registers, storing them in STARTS and ENDS. Subsequent matches using BUFFER and REGS will use this memory for recording register information. STARTS and ENDS must be allocated with malloc, and must each be at least 'NUM_REGS * sizeof (regoff_t)' bytes long. If NUM_REGS == 0, then subsequent matches should allocate their own register data. Unless this function is called, the first search or match using BUFFER will allocate its own register data, without freeing the old data. */ extern void re_set_registers (struct re_pattern_buffer *__buffer, struct re_registers *__regs, __re_size_t __num_regs, regoff_t *__starts, regoff_t *__ends); #endif /* Use GNU */ #if defined _REGEX_RE_COMP || (defined _LIBC && defined __USE_MISC) /* 4.2 bsd compatibility. */ extern char *re_comp (const char *); extern int re_exec (const char *); #endif /* For plain 'restrict', use glibc's __restrict if defined. Otherwise, GCC 2.95 and later have "__restrict"; C99 compilers have "restrict", and "configure" may have defined "restrict". Other compilers use __restrict, __restrict__, and _Restrict, and 'configure' might #define 'restrict' to those words, so pick a different name. */ #ifndef _Restrict_ # if defined __restrict \ || 2 < __GNUC__ + (95 <= __GNUC_MINOR__) \ || __clang_major__ >= 3 # define _Restrict_ __restrict # elif 199901L <= __STDC_VERSION__ || defined restrict # define _Restrict_ restrict # else # define _Restrict_ # endif #endif /* For the ISO C99 syntax array_name[restrict] use glibc's __restrict_arr if available. Otherwise, GCC 3.1 and clang support this syntax (but not in C++ mode). Other ISO C99 compilers support it as well. */ #ifndef _Restrict_arr_ # ifdef __restrict_arr # define _Restrict_arr_ __restrict_arr # elif ((199901L <= __STDC_VERSION__ \ || 3 < __GNUC__ + (1 <= __GNUC_MINOR__) \ || __clang_major__ >= 3) \ && !defined __cplusplus) # define _Restrict_arr_ _Restrict_ # else # define _Restrict_arr_ # endif #endif /* POSIX compatibility. */ extern int regcomp (regex_t *_Restrict_ __preg, const char *_Restrict_ __pattern, int __cflags); extern int regexec (const regex_t *_Restrict_ __preg, const char *_Restrict_ __String, size_t __nmatch, regmatch_t __pmatch[_Restrict_arr_ _REGEX_NELTS (__nmatch)], int __eflags); extern size_t regerror (int __errcode, const regex_t *_Restrict_ __preg, char *_Restrict_ __errbuf, size_t __errbuf_size) _Attr_access_ ((__write_only__, 3, 4)); extern void regfree (regex_t *__preg); #if defined __GNUC__ && 4 < __GNUC__ + (6 <= __GNUC_MINOR__) # pragma GCC diagnostic pop #endif #ifdef __cplusplus } #endif /* C++ */ #endif /* regex.h */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/mktime-internal.h����������������������������������������������������������������������0000644�0001750�0001750�00000006061�14436425346�016406� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Internals of mktime and related functions Copyright 2016-2023 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Paul Eggert <eggert@cs.ucla.edu>. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ #ifndef _LIBC # include <time.h> #endif /* mktime_offset_t is a signed type wide enough to hold a UTC offset in seconds, and used as part of the type of the offset-guess argument to mktime_internal. In Glibc, it is always long int. When in Gnulib, use time_t on platforms where time_t is signed, to be compatible with platforms like BeOS that export this implementation detail of mktime. On platforms where time_t is unsigned, GNU and POSIX code can assume 'int' is at least 32 bits which is wide enough for a UTC offset. */ #ifdef _LIBC typedef long int mktime_offset_t; #elif defined TIME_T_IS_SIGNED typedef time_t mktime_offset_t; #else typedef int mktime_offset_t; #endif /* The source code uses identifiers like __time64_t for glibc timestamps that can contain 64-bit values even when time_t is only 32 bits. These are just macros for the ordinary identifiers unless compiling within glibc when time_t is 32 bits. */ #if ! (defined _LIBC && __TIMESIZE != 64) # undef __time64_t # define __time64_t time_t # define __gmtime64_r __gmtime_r # define __localtime64_r __localtime_r # define __mktime64 mktime # define __timegm64 timegm #endif #ifndef _LIBC /* Although glibc source code uses leading underscores, Gnulib wants ordinary names. Portable standalone applications should supply a <time.h> that declares a POSIX-compliant localtime_r, for the benefit of older implementations that lack localtime_r or have a nonstandard one. Similarly for gmtime_r. See the gnulib time_r module for one way to implement this. */ # undef __gmtime_r # undef __localtime_r # define __gmtime_r gmtime_r # define __localtime_r localtime_r # define __mktime_internal mktime_internal #endif /* Subroutine of mktime. Return the time_t representation of TP and normalize TP, given that a struct tm * maps to a time_t as performed by FUNC. Record next guess for localtime-gmtime offset in *OFFSET. */ extern __time64_t __mktime_internal (struct tm *tp, struct tm *(*func) (__time64_t const *, struct tm *), mktime_offset_t *offset) attribute_hidden; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/regex_internal.c�����������������������������������������������������������������������0000644�0001750�0001750�00000136737�14436425346�016325� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Extended regular expression matching and search library. Copyright (C) 2002-2023 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Isamu Hasegawa <isamu@yamato.ibm.com>. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ static void re_string_construct_common (const char *str, Idx len, re_string_t *pstr, RE_TRANSLATE_TYPE trans, bool icase, const re_dfa_t *dfa); static re_dfastate_t *create_ci_newstate (const re_dfa_t *dfa, const re_node_set *nodes, re_hashval_t hash); static re_dfastate_t *create_cd_newstate (const re_dfa_t *dfa, const re_node_set *nodes, unsigned int context, re_hashval_t hash); static reg_errcode_t re_string_realloc_buffers (re_string_t *pstr, Idx new_buf_len); static void build_wcs_buffer (re_string_t *pstr); static reg_errcode_t build_wcs_upper_buffer (re_string_t *pstr); static void build_upper_buffer (re_string_t *pstr); static void re_string_translate_buffer (re_string_t *pstr); static unsigned int re_string_context_at (const re_string_t *input, Idx idx, int eflags) __attribute__ ((pure)); /* Functions for string operation. */ /* This function allocate the buffers. It is necessary to call re_string_reconstruct before using the object. */ static reg_errcode_t __attribute_warn_unused_result__ re_string_allocate (re_string_t *pstr, const char *str, Idx len, Idx init_len, RE_TRANSLATE_TYPE trans, bool icase, const re_dfa_t *dfa) { reg_errcode_t ret; Idx init_buf_len; /* Ensure at least one character fits into the buffers. */ if (init_len < dfa->mb_cur_max) init_len = dfa->mb_cur_max; init_buf_len = (len + 1 < init_len) ? len + 1: init_len; re_string_construct_common (str, len, pstr, trans, icase, dfa); ret = re_string_realloc_buffers (pstr, init_buf_len); if (__glibc_unlikely (ret != REG_NOERROR)) return ret; pstr->word_char = dfa->word_char; pstr->word_ops_used = dfa->word_ops_used; pstr->mbs = pstr->mbs_allocated ? pstr->mbs : (unsigned char *) str; pstr->valid_len = (pstr->mbs_allocated || dfa->mb_cur_max > 1) ? 0 : len; pstr->valid_raw_len = pstr->valid_len; return REG_NOERROR; } /* This function allocate the buffers, and initialize them. */ static reg_errcode_t __attribute_warn_unused_result__ re_string_construct (re_string_t *pstr, const char *str, Idx len, RE_TRANSLATE_TYPE trans, bool icase, const re_dfa_t *dfa) { reg_errcode_t ret; memset (pstr, '\0', sizeof (re_string_t)); re_string_construct_common (str, len, pstr, trans, icase, dfa); if (len > 0) { ret = re_string_realloc_buffers (pstr, len + 1); if (__glibc_unlikely (ret != REG_NOERROR)) return ret; } pstr->mbs = pstr->mbs_allocated ? pstr->mbs : (unsigned char *) str; if (icase) { if (dfa->mb_cur_max > 1) { while (1) { ret = build_wcs_upper_buffer (pstr); if (__glibc_unlikely (ret != REG_NOERROR)) return ret; if (pstr->valid_raw_len >= len) break; if (pstr->bufs_len > pstr->valid_len + dfa->mb_cur_max) break; ret = re_string_realloc_buffers (pstr, pstr->bufs_len * 2); if (__glibc_unlikely (ret != REG_NOERROR)) return ret; } } else build_upper_buffer (pstr); } else { if (dfa->mb_cur_max > 1) build_wcs_buffer (pstr); else { if (trans != NULL) re_string_translate_buffer (pstr); else { pstr->valid_len = pstr->bufs_len; pstr->valid_raw_len = pstr->bufs_len; } } } return REG_NOERROR; } /* Helper functions for re_string_allocate, and re_string_construct. */ static reg_errcode_t __attribute_warn_unused_result__ re_string_realloc_buffers (re_string_t *pstr, Idx new_buf_len) { if (pstr->mb_cur_max > 1) { wint_t *new_wcs; /* Avoid overflow in realloc. */ const size_t max_object_size = MAX (sizeof (wint_t), sizeof (Idx)); if (__glibc_unlikely (MIN (IDX_MAX, SIZE_MAX / max_object_size) < new_buf_len)) return REG_ESPACE; new_wcs = re_realloc (pstr->wcs, wint_t, new_buf_len); if (__glibc_unlikely (new_wcs == NULL)) return REG_ESPACE; pstr->wcs = new_wcs; if (pstr->offsets != NULL) { Idx *new_offsets = re_realloc (pstr->offsets, Idx, new_buf_len); if (__glibc_unlikely (new_offsets == NULL)) return REG_ESPACE; pstr->offsets = new_offsets; } } if (pstr->mbs_allocated) { unsigned char *new_mbs = re_realloc (pstr->mbs, unsigned char, new_buf_len); if (__glibc_unlikely (new_mbs == NULL)) return REG_ESPACE; pstr->mbs = new_mbs; } pstr->bufs_len = new_buf_len; return REG_NOERROR; } static void re_string_construct_common (const char *str, Idx len, re_string_t *pstr, RE_TRANSLATE_TYPE trans, bool icase, const re_dfa_t *dfa) { pstr->raw_mbs = (const unsigned char *) str; pstr->len = len; pstr->raw_len = len; pstr->trans = trans; pstr->icase = icase; pstr->mbs_allocated = (trans != NULL || icase); pstr->mb_cur_max = dfa->mb_cur_max; pstr->is_utf8 = dfa->is_utf8; pstr->map_notascii = dfa->map_notascii; pstr->stop = pstr->len; pstr->raw_stop = pstr->stop; } /* Build wide character buffer PSTR->WCS. If the byte sequence of the string are: <mb1>(0), <mb1>(1), <mb2>(0), <mb2>(1), <sb3> Then wide character buffer will be: <wc1> , WEOF , <wc2> , WEOF , <wc3> We use WEOF for padding, they indicate that the position isn't a first byte of a multibyte character. Note that this function assumes PSTR->VALID_LEN elements are already built and starts from PSTR->VALID_LEN. */ static void build_wcs_buffer (re_string_t *pstr) { #ifdef _LIBC unsigned char buf[MB_LEN_MAX]; DEBUG_ASSERT (MB_LEN_MAX >= pstr->mb_cur_max); #else unsigned char buf[64]; #endif mbstate_t prev_st; Idx byte_idx, end_idx, remain_len; size_t mbclen; /* Build the buffers from pstr->valid_len to either pstr->len or pstr->bufs_len. */ end_idx = (pstr->bufs_len > pstr->len) ? pstr->len : pstr->bufs_len; for (byte_idx = pstr->valid_len; byte_idx < end_idx;) { wchar_t wc; const char *p; remain_len = end_idx - byte_idx; prev_st = pstr->cur_state; /* Apply the translation if we need. */ if (__glibc_unlikely (pstr->trans != NULL)) { int i, ch; for (i = 0; i < pstr->mb_cur_max && i < remain_len; ++i) { ch = pstr->raw_mbs [pstr->raw_mbs_idx + byte_idx + i]; buf[i] = pstr->mbs[byte_idx + i] = pstr->trans[ch]; } p = (const char *) buf; } else p = (const char *) pstr->raw_mbs + pstr->raw_mbs_idx + byte_idx; mbclen = __mbrtowc (&wc, p, remain_len, &pstr->cur_state); if (__glibc_unlikely (mbclen == (size_t) -1 || mbclen == 0 || (mbclen == (size_t) -2 && pstr->bufs_len >= pstr->len))) { /* We treat these cases as a singlebyte character. */ mbclen = 1; wc = (wchar_t) pstr->raw_mbs[pstr->raw_mbs_idx + byte_idx]; if (__glibc_unlikely (pstr->trans != NULL)) wc = pstr->trans[wc]; pstr->cur_state = prev_st; } else if (__glibc_unlikely (mbclen == (size_t) -2)) { /* The buffer doesn't have enough space, finish to build. */ pstr->cur_state = prev_st; break; } /* Write wide character and padding. */ pstr->wcs[byte_idx++] = wc; /* Write paddings. */ for (remain_len = byte_idx + mbclen - 1; byte_idx < remain_len ;) pstr->wcs[byte_idx++] = WEOF; } pstr->valid_len = byte_idx; pstr->valid_raw_len = byte_idx; } /* Build wide character buffer PSTR->WCS like build_wcs_buffer, but for REG_ICASE. */ static reg_errcode_t __attribute_warn_unused_result__ build_wcs_upper_buffer (re_string_t *pstr) { mbstate_t prev_st; Idx src_idx, byte_idx, end_idx, remain_len; size_t mbclen; #ifdef _LIBC char buf[MB_LEN_MAX]; DEBUG_ASSERT (pstr->mb_cur_max <= MB_LEN_MAX); #else char buf[64]; #endif byte_idx = pstr->valid_len; end_idx = (pstr->bufs_len > pstr->len) ? pstr->len : pstr->bufs_len; /* The following optimization assumes that ASCII characters can be mapped to wide characters with a simple cast. */ if (! pstr->map_notascii && pstr->trans == NULL && !pstr->offsets_needed) { while (byte_idx < end_idx) { wchar_t wc; unsigned char ch = pstr->raw_mbs[pstr->raw_mbs_idx + byte_idx]; if (isascii (ch) && mbsinit (&pstr->cur_state)) { /* The next step uses the assumption that wchar_t is encoded ASCII-safe: all ASCII values can be converted like this. */ wchar_t wcu = __towupper (ch); if (isascii (wcu)) { pstr->mbs[byte_idx] = wcu; pstr->wcs[byte_idx] = wcu; byte_idx++; continue; } } remain_len = end_idx - byte_idx; prev_st = pstr->cur_state; mbclen = __mbrtowc (&wc, ((const char *) pstr->raw_mbs + pstr->raw_mbs_idx + byte_idx), remain_len, &pstr->cur_state); if (__glibc_likely (0 < mbclen && mbclen < (size_t) -2)) { wchar_t wcu = __towupper (wc); if (wcu != wc) { size_t mbcdlen; mbcdlen = __wcrtomb (buf, wcu, &prev_st); if (__glibc_likely (mbclen == mbcdlen)) memcpy (pstr->mbs + byte_idx, buf, mbclen); else { src_idx = byte_idx; goto offsets_needed; } } else memcpy (pstr->mbs + byte_idx, pstr->raw_mbs + pstr->raw_mbs_idx + byte_idx, mbclen); pstr->wcs[byte_idx++] = wcu; /* Write paddings. */ for (remain_len = byte_idx + mbclen - 1; byte_idx < remain_len ;) pstr->wcs[byte_idx++] = WEOF; } else if (mbclen == (size_t) -1 || mbclen == 0 || (mbclen == (size_t) -2 && pstr->bufs_len >= pstr->len)) { /* It is an invalid character, an incomplete character at the end of the string, or '\0'. Just use the byte. */ pstr->mbs[byte_idx] = ch; /* And also cast it to wide char. */ pstr->wcs[byte_idx++] = (wchar_t) ch; if (__glibc_unlikely (mbclen == (size_t) -1)) pstr->cur_state = prev_st; } else { /* The buffer doesn't have enough space, finish to build. */ pstr->cur_state = prev_st; break; } } pstr->valid_len = byte_idx; pstr->valid_raw_len = byte_idx; return REG_NOERROR; } else for (src_idx = pstr->valid_raw_len; byte_idx < end_idx;) { wchar_t wc; const char *p; offsets_needed: remain_len = end_idx - byte_idx; prev_st = pstr->cur_state; if (__glibc_unlikely (pstr->trans != NULL)) { int i, ch; for (i = 0; i < pstr->mb_cur_max && i < remain_len; ++i) { ch = pstr->raw_mbs [pstr->raw_mbs_idx + src_idx + i]; buf[i] = pstr->trans[ch]; } p = (const char *) buf; } else p = (const char *) pstr->raw_mbs + pstr->raw_mbs_idx + src_idx; mbclen = __mbrtowc (&wc, p, remain_len, &pstr->cur_state); if (__glibc_likely (0 < mbclen && mbclen < (size_t) -2)) { wchar_t wcu = __towupper (wc); if (wcu != wc) { size_t mbcdlen; mbcdlen = __wcrtomb ((char *) buf, wcu, &prev_st); if (__glibc_likely (mbclen == mbcdlen)) memcpy (pstr->mbs + byte_idx, buf, mbclen); else if (mbcdlen != (size_t) -1) { size_t i; if (byte_idx + mbcdlen > pstr->bufs_len) { pstr->cur_state = prev_st; break; } if (pstr->offsets == NULL) { pstr->offsets = re_malloc (Idx, pstr->bufs_len); if (pstr->offsets == NULL) return REG_ESPACE; } if (!pstr->offsets_needed) { for (i = 0; i < (size_t) byte_idx; ++i) pstr->offsets[i] = i; pstr->offsets_needed = 1; } memcpy (pstr->mbs + byte_idx, buf, mbcdlen); pstr->wcs[byte_idx] = wcu; pstr->offsets[byte_idx] = src_idx; for (i = 1; i < mbcdlen; ++i) { pstr->offsets[byte_idx + i] = src_idx + (i < mbclen ? i : mbclen - 1); pstr->wcs[byte_idx + i] = WEOF; } pstr->len += mbcdlen - mbclen; if (pstr->raw_stop > src_idx) pstr->stop += mbcdlen - mbclen; end_idx = (pstr->bufs_len > pstr->len) ? pstr->len : pstr->bufs_len; byte_idx += mbcdlen; src_idx += mbclen; continue; } else memcpy (pstr->mbs + byte_idx, p, mbclen); } else memcpy (pstr->mbs + byte_idx, p, mbclen); if (__glibc_unlikely (pstr->offsets_needed != 0)) { size_t i; for (i = 0; i < mbclen; ++i) pstr->offsets[byte_idx + i] = src_idx + i; } src_idx += mbclen; pstr->wcs[byte_idx++] = wcu; /* Write paddings. */ for (remain_len = byte_idx + mbclen - 1; byte_idx < remain_len ;) pstr->wcs[byte_idx++] = WEOF; } else if (mbclen == (size_t) -1 || mbclen == 0 || (mbclen == (size_t) -2 && pstr->bufs_len >= pstr->len)) { /* It is an invalid character or '\0'. Just use the byte. */ int ch = pstr->raw_mbs[pstr->raw_mbs_idx + src_idx]; if (__glibc_unlikely (pstr->trans != NULL)) ch = pstr->trans [ch]; pstr->mbs[byte_idx] = ch; if (__glibc_unlikely (pstr->offsets_needed != 0)) pstr->offsets[byte_idx] = src_idx; ++src_idx; /* And also cast it to wide char. */ pstr->wcs[byte_idx++] = (wchar_t) ch; if (__glibc_unlikely (mbclen == (size_t) -1)) pstr->cur_state = prev_st; } else { /* The buffer doesn't have enough space, finish to build. */ pstr->cur_state = prev_st; break; } } pstr->valid_len = byte_idx; pstr->valid_raw_len = src_idx; return REG_NOERROR; } /* Skip characters until the index becomes greater than NEW_RAW_IDX. Return the index. */ static Idx re_string_skip_chars (re_string_t *pstr, Idx new_raw_idx, wint_t *last_wc) { mbstate_t prev_st; Idx rawbuf_idx; size_t mbclen; wint_t wc = WEOF; /* Skip the characters which are not necessary to check. */ for (rawbuf_idx = pstr->raw_mbs_idx + pstr->valid_raw_len; rawbuf_idx < new_raw_idx;) { wchar_t wc2; Idx remain_len = pstr->raw_len - rawbuf_idx; prev_st = pstr->cur_state; mbclen = __mbrtowc (&wc2, (const char *) pstr->raw_mbs + rawbuf_idx, remain_len, &pstr->cur_state); if (__glibc_unlikely (mbclen == (size_t) -2 || mbclen == (size_t) -1 || mbclen == 0)) { /* We treat these cases as a single byte character. */ if (mbclen == 0 || remain_len == 0) wc = L'\0'; else wc = *(unsigned char *) (pstr->raw_mbs + rawbuf_idx); mbclen = 1; pstr->cur_state = prev_st; } else wc = wc2; /* Then proceed the next character. */ rawbuf_idx += mbclen; } *last_wc = wc; return rawbuf_idx; } /* Build the buffer PSTR->MBS, and apply the translation if we need. This function is used in case of REG_ICASE. */ static void build_upper_buffer (re_string_t *pstr) { Idx char_idx, end_idx; end_idx = (pstr->bufs_len > pstr->len) ? pstr->len : pstr->bufs_len; for (char_idx = pstr->valid_len; char_idx < end_idx; ++char_idx) { int ch = pstr->raw_mbs[pstr->raw_mbs_idx + char_idx]; if (__glibc_unlikely (pstr->trans != NULL)) ch = pstr->trans[ch]; pstr->mbs[char_idx] = toupper (ch); } pstr->valid_len = char_idx; pstr->valid_raw_len = char_idx; } /* Apply TRANS to the buffer in PSTR. */ static void re_string_translate_buffer (re_string_t *pstr) { Idx buf_idx, end_idx; end_idx = (pstr->bufs_len > pstr->len) ? pstr->len : pstr->bufs_len; for (buf_idx = pstr->valid_len; buf_idx < end_idx; ++buf_idx) { int ch = pstr->raw_mbs[pstr->raw_mbs_idx + buf_idx]; pstr->mbs[buf_idx] = pstr->trans[ch]; } pstr->valid_len = buf_idx; pstr->valid_raw_len = buf_idx; } /* This function re-construct the buffers. Concretely, convert to wide character in case of pstr->mb_cur_max > 1, convert to upper case in case of REG_ICASE, apply translation. */ static reg_errcode_t __attribute_warn_unused_result__ re_string_reconstruct (re_string_t *pstr, Idx idx, int eflags) { Idx offset; if (__glibc_unlikely (pstr->raw_mbs_idx <= idx)) offset = idx - pstr->raw_mbs_idx; else { /* Reset buffer. */ if (pstr->mb_cur_max > 1) memset (&pstr->cur_state, '\0', sizeof (mbstate_t)); pstr->len = pstr->raw_len; pstr->stop = pstr->raw_stop; pstr->valid_len = 0; pstr->raw_mbs_idx = 0; pstr->valid_raw_len = 0; pstr->offsets_needed = 0; pstr->tip_context = ((eflags & REG_NOTBOL) ? CONTEXT_BEGBUF : CONTEXT_NEWLINE | CONTEXT_BEGBUF); if (!pstr->mbs_allocated) pstr->mbs = (unsigned char *) pstr->raw_mbs; offset = idx; } if (__glibc_likely (offset != 0)) { /* Should the already checked characters be kept? */ if (__glibc_likely (offset < pstr->valid_raw_len)) { /* Yes, move them to the front of the buffer. */ if (__glibc_unlikely (pstr->offsets_needed)) { Idx low = 0, high = pstr->valid_len, mid; do { mid = (high + low) / 2; if (pstr->offsets[mid] > offset) high = mid; else if (pstr->offsets[mid] < offset) low = mid + 1; else break; } while (low < high); if (pstr->offsets[mid] < offset) ++mid; pstr->tip_context = re_string_context_at (pstr, mid - 1, eflags); /* This can be quite complicated, so handle specially only the common and easy case where the character with different length representation of lower and upper case is present at or after offset. */ if (pstr->valid_len > offset && mid == offset && pstr->offsets[mid] == offset) { memmove (pstr->wcs, pstr->wcs + offset, (pstr->valid_len - offset) * sizeof (wint_t)); memmove (pstr->mbs, pstr->mbs + offset, pstr->valid_len - offset); pstr->valid_len -= offset; pstr->valid_raw_len -= offset; for (low = 0; low < pstr->valid_len; low++) pstr->offsets[low] = pstr->offsets[low + offset] - offset; } else { /* Otherwise, just find out how long the partial multibyte character at offset is and fill it with WEOF/255. */ pstr->len = pstr->raw_len - idx + offset; pstr->stop = pstr->raw_stop - idx + offset; pstr->offsets_needed = 0; while (mid > 0 && pstr->offsets[mid - 1] == offset) --mid; while (mid < pstr->valid_len) if (pstr->wcs[mid] != WEOF) break; else ++mid; if (mid == pstr->valid_len) pstr->valid_len = 0; else { pstr->valid_len = pstr->offsets[mid] - offset; if (pstr->valid_len) { for (low = 0; low < pstr->valid_len; ++low) pstr->wcs[low] = WEOF; memset (pstr->mbs, 255, pstr->valid_len); } } pstr->valid_raw_len = pstr->valid_len; } } else { pstr->tip_context = re_string_context_at (pstr, offset - 1, eflags); if (pstr->mb_cur_max > 1) memmove (pstr->wcs, pstr->wcs + offset, (pstr->valid_len - offset) * sizeof (wint_t)); if (__glibc_unlikely (pstr->mbs_allocated)) memmove (pstr->mbs, pstr->mbs + offset, pstr->valid_len - offset); pstr->valid_len -= offset; pstr->valid_raw_len -= offset; DEBUG_ASSERT (pstr->valid_len > 0); } } else { /* No, skip all characters until IDX. */ Idx prev_valid_len = pstr->valid_len; if (__glibc_unlikely (pstr->offsets_needed)) { pstr->len = pstr->raw_len - idx + offset; pstr->stop = pstr->raw_stop - idx + offset; pstr->offsets_needed = 0; } pstr->valid_len = 0; if (pstr->mb_cur_max > 1) { Idx wcs_idx; wint_t wc = WEOF; if (pstr->is_utf8) { const unsigned char *raw, *p, *end; /* Special case UTF-8. Multi-byte chars start with any byte other than 0x80 - 0xbf. */ raw = pstr->raw_mbs + pstr->raw_mbs_idx; end = raw + (offset - pstr->mb_cur_max); if (end < pstr->raw_mbs) end = pstr->raw_mbs; p = raw + offset - 1; #ifdef _LIBC /* We know the wchar_t encoding is UCS4, so for the simple case, ASCII characters, skip the conversion step. */ if (isascii (*p) && __glibc_likely (pstr->trans == NULL)) { memset (&pstr->cur_state, '\0', sizeof (mbstate_t)); /* pstr->valid_len = 0; */ wc = (wchar_t) *p; } else #endif for (; p >= end; --p) if ((*p & 0xc0) != 0x80) { mbstate_t cur_state; wchar_t wc2; Idx mlen = raw + pstr->len - p; unsigned char buf[6]; size_t mbclen; const unsigned char *pp = p; if (__glibc_unlikely (pstr->trans != NULL)) { int i = mlen < 6 ? mlen : 6; while (--i >= 0) buf[i] = pstr->trans[p[i]]; pp = buf; } /* XXX Don't use mbrtowc, we know which conversion to use (UTF-8 -> UCS4). */ memset (&cur_state, 0, sizeof (cur_state)); mbclen = __mbrtowc (&wc2, (const char *) pp, mlen, &cur_state); if (raw + offset - p <= mbclen && mbclen < (size_t) -2) { memset (&pstr->cur_state, '\0', sizeof (mbstate_t)); pstr->valid_len = mbclen - (raw + offset - p); wc = wc2; } break; } } if (wc == WEOF) pstr->valid_len = re_string_skip_chars (pstr, idx, &wc) - idx; if (wc == WEOF) pstr->tip_context = re_string_context_at (pstr, prev_valid_len - 1, eflags); else pstr->tip_context = ((__glibc_unlikely (pstr->word_ops_used != 0) && IS_WIDE_WORD_CHAR (wc)) ? CONTEXT_WORD : ((IS_WIDE_NEWLINE (wc) && pstr->newline_anchor) ? CONTEXT_NEWLINE : 0)); if (__glibc_unlikely (pstr->valid_len)) { for (wcs_idx = 0; wcs_idx < pstr->valid_len; ++wcs_idx) pstr->wcs[wcs_idx] = WEOF; if (pstr->mbs_allocated) memset (pstr->mbs, 255, pstr->valid_len); } pstr->valid_raw_len = pstr->valid_len; } else { int c = pstr->raw_mbs[pstr->raw_mbs_idx + offset - 1]; pstr->valid_raw_len = 0; if (pstr->trans) c = pstr->trans[c]; pstr->tip_context = (bitset_contain (pstr->word_char, c) ? CONTEXT_WORD : ((IS_NEWLINE (c) && pstr->newline_anchor) ? CONTEXT_NEWLINE : 0)); } } if (!__glibc_unlikely (pstr->mbs_allocated)) pstr->mbs += offset; } pstr->raw_mbs_idx = idx; pstr->len -= offset; pstr->stop -= offset; /* Then build the buffers. */ if (pstr->mb_cur_max > 1) { if (pstr->icase) { reg_errcode_t ret = build_wcs_upper_buffer (pstr); if (__glibc_unlikely (ret != REG_NOERROR)) return ret; } else build_wcs_buffer (pstr); } else if (__glibc_unlikely (pstr->mbs_allocated)) { if (pstr->icase) build_upper_buffer (pstr); else if (pstr->trans != NULL) re_string_translate_buffer (pstr); } else pstr->valid_len = pstr->len; pstr->cur_idx = 0; return REG_NOERROR; } static unsigned char __attribute__ ((pure)) re_string_peek_byte_case (const re_string_t *pstr, Idx idx) { int ch; Idx off; /* Handle the common (easiest) cases first. */ if (__glibc_likely (!pstr->mbs_allocated)) return re_string_peek_byte (pstr, idx); if (pstr->mb_cur_max > 1 && ! re_string_is_single_byte_char (pstr, pstr->cur_idx + idx)) return re_string_peek_byte (pstr, idx); off = pstr->cur_idx + idx; if (pstr->offsets_needed) off = pstr->offsets[off]; ch = pstr->raw_mbs[pstr->raw_mbs_idx + off]; /* Ensure that e.g. for tr_TR.UTF-8 BACKSLASH DOTLESS SMALL LETTER I this function returns CAPITAL LETTER I instead of first byte of DOTLESS SMALL LETTER I. The latter would confuse the parser, since peek_byte_case doesn't advance cur_idx in any way. */ if (pstr->offsets_needed && !isascii (ch)) return re_string_peek_byte (pstr, idx); return ch; } static unsigned char re_string_fetch_byte_case (re_string_t *pstr) { if (__glibc_likely (!pstr->mbs_allocated)) return re_string_fetch_byte (pstr); if (pstr->offsets_needed) { Idx off; int ch; /* For tr_TR.UTF-8 [[:islower:]] there is [[: CAPITAL LETTER I WITH DOT lower:]] in mbs. Skip in that case the whole multi-byte character and return the original letter. On the other side, with [[: DOTLESS SMALL LETTER I return [[:I, as doing anything else would complicate things too much. */ if (!re_string_first_byte (pstr, pstr->cur_idx)) return re_string_fetch_byte (pstr); off = pstr->offsets[pstr->cur_idx]; ch = pstr->raw_mbs[pstr->raw_mbs_idx + off]; if (! isascii (ch)) return re_string_fetch_byte (pstr); re_string_skip_bytes (pstr, re_string_char_size_at (pstr, pstr->cur_idx)); return ch; } return pstr->raw_mbs[pstr->raw_mbs_idx + pstr->cur_idx++]; } static void re_string_destruct (re_string_t *pstr) { re_free (pstr->wcs); re_free (pstr->offsets); if (pstr->mbs_allocated) re_free (pstr->mbs); } /* Return the context at IDX in INPUT. */ static unsigned int re_string_context_at (const re_string_t *input, Idx idx, int eflags) { int c; if (__glibc_unlikely (idx < 0)) /* In this case, we use the value stored in input->tip_context, since we can't know the character in input->mbs[-1] here. */ return input->tip_context; if (__glibc_unlikely (idx == input->len)) return ((eflags & REG_NOTEOL) ? CONTEXT_ENDBUF : CONTEXT_NEWLINE | CONTEXT_ENDBUF); if (input->mb_cur_max > 1) { wint_t wc; Idx wc_idx = idx; while(input->wcs[wc_idx] == WEOF) { DEBUG_ASSERT (wc_idx >= 0); --wc_idx; if (wc_idx < 0) return input->tip_context; } wc = input->wcs[wc_idx]; if (__glibc_unlikely (input->word_ops_used != 0) && IS_WIDE_WORD_CHAR (wc)) return CONTEXT_WORD; return (IS_WIDE_NEWLINE (wc) && input->newline_anchor ? CONTEXT_NEWLINE : 0); } else { c = re_string_byte_at (input, idx); if (bitset_contain (input->word_char, c)) return CONTEXT_WORD; return IS_NEWLINE (c) && input->newline_anchor ? CONTEXT_NEWLINE : 0; } } /* Functions for set operation. */ static reg_errcode_t __attribute_warn_unused_result__ re_node_set_alloc (re_node_set *set, Idx size) { set->alloc = size; set->nelem = 0; set->elems = re_malloc (Idx, size); if (__glibc_unlikely (set->elems == NULL) && (MALLOC_0_IS_NONNULL || size != 0)) return REG_ESPACE; return REG_NOERROR; } static reg_errcode_t __attribute_warn_unused_result__ re_node_set_init_1 (re_node_set *set, Idx elem) { set->alloc = 1; set->nelem = 1; set->elems = re_malloc (Idx, 1); if (__glibc_unlikely (set->elems == NULL)) { set->alloc = set->nelem = 0; return REG_ESPACE; } set->elems[0] = elem; return REG_NOERROR; } static reg_errcode_t __attribute_warn_unused_result__ re_node_set_init_2 (re_node_set *set, Idx elem1, Idx elem2) { set->alloc = 2; set->elems = re_malloc (Idx, 2); if (__glibc_unlikely (set->elems == NULL)) return REG_ESPACE; if (elem1 == elem2) { set->nelem = 1; set->elems[0] = elem1; } else { set->nelem = 2; if (elem1 < elem2) { set->elems[0] = elem1; set->elems[1] = elem2; } else { set->elems[0] = elem2; set->elems[1] = elem1; } } return REG_NOERROR; } static reg_errcode_t __attribute_warn_unused_result__ re_node_set_init_copy (re_node_set *dest, const re_node_set *src) { dest->nelem = src->nelem; if (src->nelem > 0) { dest->alloc = dest->nelem; dest->elems = re_malloc (Idx, dest->alloc); if (__glibc_unlikely (dest->elems == NULL)) { dest->alloc = dest->nelem = 0; return REG_ESPACE; } memcpy (dest->elems, src->elems, src->nelem * sizeof (Idx)); } else re_node_set_init_empty (dest); return REG_NOERROR; } /* Calculate the intersection of the sets SRC1 and SRC2. And merge it to DEST. Return value indicate the error code or REG_NOERROR if succeeded. Note: We assume dest->elems is NULL, when dest->alloc is 0. */ static reg_errcode_t __attribute_warn_unused_result__ re_node_set_add_intersect (re_node_set *dest, const re_node_set *src1, const re_node_set *src2) { Idx i1, i2, is, id, delta, sbase; if (src1->nelem == 0 || src2->nelem == 0) return REG_NOERROR; /* We need dest->nelem + 2 * elems_in_intersection; this is a conservative estimate. */ if (src1->nelem + src2->nelem + dest->nelem > dest->alloc) { Idx new_alloc = src1->nelem + src2->nelem + dest->alloc; Idx *new_elems = re_realloc (dest->elems, Idx, new_alloc); if (__glibc_unlikely (new_elems == NULL)) return REG_ESPACE; dest->elems = new_elems; dest->alloc = new_alloc; } /* Find the items in the intersection of SRC1 and SRC2, and copy into the top of DEST those that are not already in DEST itself. */ sbase = dest->nelem + src1->nelem + src2->nelem; i1 = src1->nelem - 1; i2 = src2->nelem - 1; id = dest->nelem - 1; for (;;) { if (src1->elems[i1] == src2->elems[i2]) { /* Try to find the item in DEST. Maybe we could binary search? */ while (id >= 0 && dest->elems[id] > src1->elems[i1]) --id; if (id < 0 || dest->elems[id] != src1->elems[i1]) dest->elems[--sbase] = src1->elems[i1]; if (--i1 < 0 || --i2 < 0) break; } /* Lower the highest of the two items. */ else if (src1->elems[i1] < src2->elems[i2]) { if (--i2 < 0) break; } else { if (--i1 < 0) break; } } id = dest->nelem - 1; is = dest->nelem + src1->nelem + src2->nelem - 1; delta = is - sbase + 1; /* Now copy. When DELTA becomes zero, the remaining DEST elements are already in place; this is more or less the same loop that is in re_node_set_merge. */ dest->nelem += delta; if (delta > 0 && id >= 0) for (;;) { if (dest->elems[is] > dest->elems[id]) { /* Copy from the top. */ dest->elems[id + delta--] = dest->elems[is--]; if (delta == 0) break; } else { /* Slide from the bottom. */ dest->elems[id + delta] = dest->elems[id]; if (--id < 0) break; } } /* Copy remaining SRC elements. */ memcpy (dest->elems, dest->elems + sbase, delta * sizeof (Idx)); return REG_NOERROR; } /* Calculate the union set of the sets SRC1 and SRC2. And store it to DEST. Return value indicate the error code or REG_NOERROR if succeeded. */ static reg_errcode_t __attribute_warn_unused_result__ re_node_set_init_union (re_node_set *dest, const re_node_set *src1, const re_node_set *src2) { Idx i1, i2, id; if (src1 != NULL && src1->nelem > 0 && src2 != NULL && src2->nelem > 0) { dest->alloc = src1->nelem + src2->nelem; dest->elems = re_malloc (Idx, dest->alloc); if (__glibc_unlikely (dest->elems == NULL)) return REG_ESPACE; } else { if (src1 != NULL && src1->nelem > 0) return re_node_set_init_copy (dest, src1); else if (src2 != NULL && src2->nelem > 0) return re_node_set_init_copy (dest, src2); else re_node_set_init_empty (dest); return REG_NOERROR; } for (i1 = i2 = id = 0 ; i1 < src1->nelem && i2 < src2->nelem ;) { if (src1->elems[i1] > src2->elems[i2]) { dest->elems[id++] = src2->elems[i2++]; continue; } if (src1->elems[i1] == src2->elems[i2]) ++i2; dest->elems[id++] = src1->elems[i1++]; } if (i1 < src1->nelem) { memcpy (dest->elems + id, src1->elems + i1, (src1->nelem - i1) * sizeof (Idx)); id += src1->nelem - i1; } else if (i2 < src2->nelem) { memcpy (dest->elems + id, src2->elems + i2, (src2->nelem - i2) * sizeof (Idx)); id += src2->nelem - i2; } dest->nelem = id; return REG_NOERROR; } /* Calculate the union set of the sets DEST and SRC. And store it to DEST. Return value indicate the error code or REG_NOERROR if succeeded. */ static reg_errcode_t __attribute_warn_unused_result__ re_node_set_merge (re_node_set *dest, const re_node_set *src) { Idx is, id, sbase, delta; if (src == NULL || src->nelem == 0) return REG_NOERROR; if (dest->alloc < 2 * src->nelem + dest->nelem) { Idx new_alloc = 2 * (src->nelem + dest->alloc); Idx *new_buffer = re_realloc (dest->elems, Idx, new_alloc); if (__glibc_unlikely (new_buffer == NULL)) return REG_ESPACE; dest->elems = new_buffer; dest->alloc = new_alloc; } if (__glibc_unlikely (dest->nelem == 0)) { /* Although we already guaranteed above that dest->alloc != 0 and therefore dest->elems != NULL, add a debug assertion to pacify GCC 11.2.1's -fanalyzer. */ DEBUG_ASSERT (dest->elems); dest->nelem = src->nelem; memcpy (dest->elems, src->elems, src->nelem * sizeof (Idx)); return REG_NOERROR; } /* Copy into the top of DEST the items of SRC that are not found in DEST. Maybe we could binary search in DEST? */ for (sbase = dest->nelem + 2 * src->nelem, is = src->nelem - 1, id = dest->nelem - 1; is >= 0 && id >= 0; ) { if (dest->elems[id] == src->elems[is]) is--, id--; else if (dest->elems[id] < src->elems[is]) dest->elems[--sbase] = src->elems[is--]; else /* if (dest->elems[id] > src->elems[is]) */ --id; } if (is >= 0) { /* If DEST is exhausted, the remaining items of SRC must be unique. */ sbase -= is + 1; memcpy (dest->elems + sbase, src->elems, (is + 1) * sizeof (Idx)); } id = dest->nelem - 1; is = dest->nelem + 2 * src->nelem - 1; delta = is - sbase + 1; if (delta == 0) return REG_NOERROR; /* Now copy. When DELTA becomes zero, the remaining DEST elements are already in place. */ dest->nelem += delta; for (;;) { if (dest->elems[is] > dest->elems[id]) { /* Copy from the top. */ dest->elems[id + delta--] = dest->elems[is--]; if (delta == 0) break; } else { /* Slide from the bottom. */ dest->elems[id + delta] = dest->elems[id]; if (--id < 0) { /* Copy remaining SRC elements. */ memcpy (dest->elems, dest->elems + sbase, delta * sizeof (Idx)); break; } } } return REG_NOERROR; } /* Insert the new element ELEM to the re_node_set* SET. SET should not already have ELEM. Return true if successful. */ static bool __attribute_warn_unused_result__ re_node_set_insert (re_node_set *set, Idx elem) { Idx idx; /* In case the set is empty. */ if (set->alloc == 0) return __glibc_likely (re_node_set_init_1 (set, elem) == REG_NOERROR); if (__glibc_unlikely (set->nelem) == 0) { /* Although we already guaranteed above that set->alloc != 0 and therefore set->elems != NULL, add a debug assertion to pacify GCC 11.2 -fanalyzer. */ DEBUG_ASSERT (set->elems); set->elems[0] = elem; ++set->nelem; return true; } /* Realloc if we need. */ if (set->alloc == set->nelem) { Idx *new_elems; set->alloc = set->alloc * 2; new_elems = re_realloc (set->elems, Idx, set->alloc); if (__glibc_unlikely (new_elems == NULL)) return false; set->elems = new_elems; } /* Move the elements which follows the new element. Test the first element separately to skip a check in the inner loop. */ if (elem < set->elems[0]) { for (idx = set->nelem; idx > 0; idx--) set->elems[idx] = set->elems[idx - 1]; } else { for (idx = set->nelem; set->elems[idx - 1] > elem; idx--) set->elems[idx] = set->elems[idx - 1]; DEBUG_ASSERT (set->elems[idx - 1] < elem); } /* Insert the new element. */ set->elems[idx] = elem; ++set->nelem; return true; } /* Insert the new element ELEM to the re_node_set* SET. SET should not already have any element greater than or equal to ELEM. Return true if successful. */ static bool __attribute_warn_unused_result__ re_node_set_insert_last (re_node_set *set, Idx elem) { /* Realloc if we need. */ if (set->alloc == set->nelem) { Idx *new_elems; set->alloc = (set->alloc + 1) * 2; new_elems = re_realloc (set->elems, Idx, set->alloc); if (__glibc_unlikely (new_elems == NULL)) return false; set->elems = new_elems; } /* Insert the new element. */ set->elems[set->nelem++] = elem; return true; } /* Compare two node sets SET1 and SET2. Return true if SET1 and SET2 are equivalent. */ static bool __attribute__ ((pure)) re_node_set_compare (const re_node_set *set1, const re_node_set *set2) { Idx i; if (set1 == NULL || set2 == NULL || set1->nelem != set2->nelem) return false; for (i = set1->nelem ; --i >= 0 ; ) if (set1->elems[i] != set2->elems[i]) return false; return true; } /* Return (idx + 1) if SET contains the element ELEM, return 0 otherwise. */ static Idx __attribute__ ((pure)) re_node_set_contains (const re_node_set *set, Idx elem) { __re_size_t idx, right, mid; if (set->nelem <= 0) return 0; /* Binary search the element. */ idx = 0; right = set->nelem - 1; while (idx < right) { mid = (idx + right) / 2; if (set->elems[mid] < elem) idx = mid + 1; else right = mid; } return set->elems[idx] == elem ? idx + 1 : 0; } static void re_node_set_remove_at (re_node_set *set, Idx idx) { if (idx < 0 || idx >= set->nelem) return; --set->nelem; for (; idx < set->nelem; idx++) set->elems[idx] = set->elems[idx + 1]; } /* Add the token TOKEN to dfa->nodes, and return the index of the token. Or return -1 if an error occurred. */ static Idx re_dfa_add_node (re_dfa_t *dfa, re_token_t token) { if (__glibc_unlikely (dfa->nodes_len >= dfa->nodes_alloc)) { size_t new_nodes_alloc = dfa->nodes_alloc * 2; Idx *new_nexts, *new_indices; re_node_set *new_edests, *new_eclosures; re_token_t *new_nodes; /* Avoid overflows in realloc. */ const size_t max_object_size = MAX (sizeof (re_token_t), MAX (sizeof (re_node_set), sizeof (Idx))); if (__glibc_unlikely (MIN (IDX_MAX, SIZE_MAX / max_object_size) < new_nodes_alloc)) return -1; new_nodes = re_realloc (dfa->nodes, re_token_t, new_nodes_alloc); if (__glibc_unlikely (new_nodes == NULL)) return -1; dfa->nodes = new_nodes; dfa->nodes_alloc = new_nodes_alloc; new_nexts = re_realloc (dfa->nexts, Idx, new_nodes_alloc); if (new_nexts != NULL) dfa->nexts = new_nexts; new_indices = re_realloc (dfa->org_indices, Idx, new_nodes_alloc); if (new_indices != NULL) dfa->org_indices = new_indices; new_edests = re_realloc (dfa->edests, re_node_set, new_nodes_alloc); if (new_edests != NULL) dfa->edests = new_edests; new_eclosures = re_realloc (dfa->eclosures, re_node_set, new_nodes_alloc); if (new_eclosures != NULL) dfa->eclosures = new_eclosures; if (__glibc_unlikely (new_nexts == NULL || new_indices == NULL || new_edests == NULL || new_eclosures == NULL)) return -1; } dfa->nodes[dfa->nodes_len] = token; dfa->nodes[dfa->nodes_len].constraint = 0; dfa->nodes[dfa->nodes_len].accept_mb = ((token.type == OP_PERIOD && dfa->mb_cur_max > 1) || token.type == COMPLEX_BRACKET); dfa->nexts[dfa->nodes_len] = -1; re_node_set_init_empty (dfa->edests + dfa->nodes_len); re_node_set_init_empty (dfa->eclosures + dfa->nodes_len); return dfa->nodes_len++; } static re_hashval_t calc_state_hash (const re_node_set *nodes, unsigned int context) { re_hashval_t hash = nodes->nelem + context; Idx i; for (i = 0 ; i < nodes->nelem ; i++) hash += nodes->elems[i]; return hash; } /* Search for the state whose node_set is equivalent to NODES. Return the pointer to the state, if we found it in the DFA. Otherwise create the new one and return it. In case of an error return NULL and set the error code in ERR. Note: - We assume NULL as the invalid state, then it is possible that return value is NULL and ERR is REG_NOERROR. - We never return non-NULL value in case of any errors, it is for optimization. */ static re_dfastate_t * __attribute_warn_unused_result__ re_acquire_state (reg_errcode_t *err, const re_dfa_t *dfa, const re_node_set *nodes) { re_hashval_t hash; re_dfastate_t *new_state; struct re_state_table_entry *spot; Idx i; #if defined GCC_LINT || defined lint /* Suppress bogus uninitialized-variable warnings. */ *err = REG_NOERROR; #endif if (__glibc_unlikely (nodes->nelem == 0)) { *err = REG_NOERROR; return NULL; } hash = calc_state_hash (nodes, 0); spot = dfa->state_table + (hash & dfa->state_hash_mask); for (i = 0 ; i < spot->num ; i++) { re_dfastate_t *state = spot->array[i]; if (hash != state->hash) continue; if (re_node_set_compare (&state->nodes, nodes)) return state; } /* There are no appropriate state in the dfa, create the new one. */ new_state = create_ci_newstate (dfa, nodes, hash); if (__glibc_unlikely (new_state == NULL)) *err = REG_ESPACE; return new_state; } /* Search for the state whose node_set is equivalent to NODES and whose context is equivalent to CONTEXT. Return the pointer to the state, if we found it in the DFA. Otherwise create the new one and return it. In case of an error return NULL and set the error code in ERR. Note: - We assume NULL as the invalid state, then it is possible that return value is NULL and ERR is REG_NOERROR. - We never return non-NULL value in case of any errors, it is for optimization. */ static re_dfastate_t * __attribute_warn_unused_result__ re_acquire_state_context (reg_errcode_t *err, const re_dfa_t *dfa, const re_node_set *nodes, unsigned int context) { re_hashval_t hash; re_dfastate_t *new_state; struct re_state_table_entry *spot; Idx i; #if defined GCC_LINT || defined lint /* Suppress bogus uninitialized-variable warnings. */ *err = REG_NOERROR; #endif if (nodes->nelem == 0) { *err = REG_NOERROR; return NULL; } hash = calc_state_hash (nodes, context); spot = dfa->state_table + (hash & dfa->state_hash_mask); for (i = 0 ; i < spot->num ; i++) { re_dfastate_t *state = spot->array[i]; if (state->hash == hash && state->context == context && re_node_set_compare (state->entrance_nodes, nodes)) return state; } /* There are no appropriate state in 'dfa', create the new one. */ new_state = create_cd_newstate (dfa, nodes, context, hash); if (__glibc_unlikely (new_state == NULL)) *err = REG_ESPACE; return new_state; } /* Finish initialization of the new state NEWSTATE, and using its hash value HASH put in the appropriate bucket of DFA's state table. Return value indicates the error code if failed. */ static reg_errcode_t __attribute_warn_unused_result__ register_state (const re_dfa_t *dfa, re_dfastate_t *newstate, re_hashval_t hash) { struct re_state_table_entry *spot; reg_errcode_t err; Idx i; newstate->hash = hash; err = re_node_set_alloc (&newstate->non_eps_nodes, newstate->nodes.nelem); if (__glibc_unlikely (err != REG_NOERROR)) return REG_ESPACE; for (i = 0; i < newstate->nodes.nelem; i++) { Idx elem = newstate->nodes.elems[i]; if (!IS_EPSILON_NODE (dfa->nodes[elem].type)) if (! re_node_set_insert_last (&newstate->non_eps_nodes, elem)) return REG_ESPACE; } spot = dfa->state_table + (hash & dfa->state_hash_mask); if (__glibc_unlikely (spot->alloc <= spot->num)) { Idx new_alloc = 2 * spot->num + 2; re_dfastate_t **new_array = re_realloc (spot->array, re_dfastate_t *, new_alloc); if (__glibc_unlikely (new_array == NULL)) return REG_ESPACE; spot->array = new_array; spot->alloc = new_alloc; } spot->array[spot->num++] = newstate; return REG_NOERROR; } static void free_state (re_dfastate_t *state) { re_node_set_free (&state->non_eps_nodes); re_node_set_free (&state->inveclosure); if (state->entrance_nodes != &state->nodes) { re_node_set_free (state->entrance_nodes); re_free (state->entrance_nodes); } re_node_set_free (&state->nodes); re_free (state->word_trtable); re_free (state->trtable); re_free (state); } /* Create the new state which is independent of contexts. Return the new state if succeeded, otherwise return NULL. */ static re_dfastate_t * __attribute_warn_unused_result__ create_ci_newstate (const re_dfa_t *dfa, const re_node_set *nodes, re_hashval_t hash) { Idx i; reg_errcode_t err; re_dfastate_t *newstate; newstate = (re_dfastate_t *) calloc (sizeof (re_dfastate_t), 1); if (__glibc_unlikely (newstate == NULL)) return NULL; err = re_node_set_init_copy (&newstate->nodes, nodes); if (__glibc_unlikely (err != REG_NOERROR)) { re_free (newstate); return NULL; } newstate->entrance_nodes = &newstate->nodes; for (i = 0 ; i < nodes->nelem ; i++) { re_token_t *node = dfa->nodes + nodes->elems[i]; re_token_type_t type = node->type; if (type == CHARACTER && !node->constraint) continue; newstate->accept_mb |= node->accept_mb; /* If the state has the halt node, the state is a halt state. */ if (type == END_OF_RE) newstate->halt = 1; else if (type == OP_BACK_REF) newstate->has_backref = 1; else if (type == ANCHOR || node->constraint) newstate->has_constraint = 1; } err = register_state (dfa, newstate, hash); if (__glibc_unlikely (err != REG_NOERROR)) { free_state (newstate); newstate = NULL; } return newstate; } /* Create the new state which is depend on the context CONTEXT. Return the new state if succeeded, otherwise return NULL. */ static re_dfastate_t * __attribute_warn_unused_result__ create_cd_newstate (const re_dfa_t *dfa, const re_node_set *nodes, unsigned int context, re_hashval_t hash) { Idx i, nctx_nodes = 0; reg_errcode_t err; re_dfastate_t *newstate; newstate = (re_dfastate_t *) calloc (sizeof (re_dfastate_t), 1); if (__glibc_unlikely (newstate == NULL)) return NULL; err = re_node_set_init_copy (&newstate->nodes, nodes); if (__glibc_unlikely (err != REG_NOERROR)) { re_free (newstate); return NULL; } newstate->context = context; newstate->entrance_nodes = &newstate->nodes; for (i = 0 ; i < nodes->nelem ; i++) { re_token_t *node = dfa->nodes + nodes->elems[i]; re_token_type_t type = node->type; unsigned int constraint = node->constraint; if (type == CHARACTER && !constraint) continue; newstate->accept_mb |= node->accept_mb; /* If the state has the halt node, the state is a halt state. */ if (type == END_OF_RE) newstate->halt = 1; else if (type == OP_BACK_REF) newstate->has_backref = 1; if (constraint) { if (newstate->entrance_nodes == &newstate->nodes) { re_node_set *entrance_nodes = re_malloc (re_node_set, 1); if (__glibc_unlikely (entrance_nodes == NULL)) { free_state (newstate); return NULL; } newstate->entrance_nodes = entrance_nodes; if (re_node_set_init_copy (newstate->entrance_nodes, nodes) != REG_NOERROR) { free_state (newstate); return NULL; } nctx_nodes = 0; newstate->has_constraint = 1; } if (NOT_SATISFY_PREV_CONSTRAINT (constraint,context)) { re_node_set_remove_at (&newstate->nodes, i - nctx_nodes); ++nctx_nodes; } } } err = register_state (dfa, newstate, hash); if (__glibc_unlikely (err != REG_NOERROR)) { free_state (newstate); newstate = NULL; } return newstate; } ���������������������������������rush-2.4/gnu/msvc-inval.c���������������������������������������������������������������������������0000644�0001750�0001750�00000007553�14436425346�015367� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Invalid parameter handler for MSVC runtime libraries. Copyright (C) 2011-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "msvc-inval.h" #if HAVE_MSVC_INVALID_PARAMETER_HANDLER \ && !(MSVC_INVALID_PARAMETER_HANDLING == SANE_LIBRARY_HANDLING) /* Get _invalid_parameter_handler type and _set_invalid_parameter_handler declaration. */ # include <stdlib.h> # if MSVC_INVALID_PARAMETER_HANDLING == DEFAULT_HANDLING static void __cdecl gl_msvc_invalid_parameter_handler (const wchar_t *expression, const wchar_t *function, const wchar_t *file, unsigned int line, uintptr_t dummy) { } # else /* Get declarations of the native Windows API functions. */ # define WIN32_LEAN_AND_MEAN # include <windows.h> # if defined _MSC_VER static void __cdecl gl_msvc_invalid_parameter_handler (const wchar_t *expression, const wchar_t *function, const wchar_t *file, unsigned int line, uintptr_t dummy) { RaiseException (STATUS_GNULIB_INVALID_PARAMETER, 0, 0, NULL); } # else /* An index to thread-local storage. */ static DWORD tls_index; static int tls_initialized /* = 0 */; /* Used as a fallback only. */ static struct gl_msvc_inval_per_thread not_per_thread; struct gl_msvc_inval_per_thread * gl_msvc_inval_current (void) { if (!tls_initialized) { tls_index = TlsAlloc (); tls_initialized = 1; } if (tls_index == TLS_OUT_OF_INDEXES) /* TlsAlloc had failed. */ return ¬_per_thread; else { struct gl_msvc_inval_per_thread *pointer = (struct gl_msvc_inval_per_thread *) TlsGetValue (tls_index); if (pointer == NULL) { /* First call. Allocate a new 'struct gl_msvc_inval_per_thread'. */ pointer = (struct gl_msvc_inval_per_thread *) malloc (sizeof (struct gl_msvc_inval_per_thread)); if (pointer == NULL) /* Could not allocate memory. Use the global storage. */ pointer = ¬_per_thread; TlsSetValue (tls_index, pointer); } return pointer; } } static void __cdecl gl_msvc_invalid_parameter_handler (const wchar_t *expression, const wchar_t *function, const wchar_t *file, unsigned int line, uintptr_t dummy) { struct gl_msvc_inval_per_thread *current = gl_msvc_inval_current (); if (current->restart_valid) longjmp (current->restart, 1); else /* An invalid parameter notification from outside the gnulib code. Give the caller a chance to intervene. */ RaiseException (STATUS_GNULIB_INVALID_PARAMETER, 0, 0, NULL); } # endif # endif static int gl_msvc_inval_initialized /* = 0 */; void gl_msvc_inval_ensure_handler (void) { if (gl_msvc_inval_initialized == 0) { _set_invalid_parameter_handler (gl_msvc_invalid_parameter_handler); gl_msvc_inval_initialized = 1; } } #endif �����������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/dup2.c���������������������������������������������������������������������������������0000644�0001750�0001750�00000007742�14436425345�014161� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Duplicate an open file descriptor to a specified file descriptor. Copyright (C) 1999, 2004-2007, 2009-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* written by Paul Eggert */ #include <config.h> /* Specification. */ #include <unistd.h> #include <errno.h> #include <fcntl.h> #undef dup2 #if defined _WIN32 && ! defined __CYGWIN__ /* Get declarations of the native Windows API functions. */ # define WIN32_LEAN_AND_MEAN # include <windows.h> # if HAVE_MSVC_INVALID_PARAMETER_HANDLER # include "msvc-inval.h" # endif /* Get _get_osfhandle. */ # if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" # else # include <io.h> # endif # if HAVE_MSVC_INVALID_PARAMETER_HANDLER static int dup2_nothrow (int fd, int desired_fd) { int result; TRY_MSVC_INVAL { result = _dup2 (fd, desired_fd); } CATCH_MSVC_INVAL { errno = EBADF; result = -1; } DONE_MSVC_INVAL; return result; } # else # define dup2_nothrow _dup2 # endif static int ms_windows_dup2 (int fd, int desired_fd) { int result; /* If fd is closed, mingw hangs on dup2 (fd, fd). If fd is open, dup2 (fd, fd) returns 0, but all further attempts to use fd in future dup2 calls will hang. */ if (fd == desired_fd) { if ((HANDLE) _get_osfhandle (fd) == INVALID_HANDLE_VALUE) { errno = EBADF; return -1; } return fd; } /* Wine 1.0.1 return 0 when desired_fd is negative but not -1: https://bugs.winehq.org/show_bug.cgi?id=21289 */ if (desired_fd < 0) { errno = EBADF; return -1; } result = dup2_nothrow (fd, desired_fd); if (result == 0) result = desired_fd; return result; } # define dup2 ms_windows_dup2 #elif defined __KLIBC__ # include <InnoTekLIBC/backend.h> static int klibc_dup2dirfd (int fd, int desired_fd) { int tempfd; int dupfd; tempfd = open ("NUL", O_RDONLY); if (tempfd == -1) return -1; if (tempfd == desired_fd) { close (tempfd); char path[_MAX_PATH]; if (__libc_Back_ioFHToPath (fd, path, sizeof (path))) return -1; return open(path, O_RDONLY); } dupfd = klibc_dup2dirfd (fd, desired_fd); close (tempfd); return dupfd; } static int klibc_dup2 (int fd, int desired_fd) { int dupfd; struct stat sbuf; dupfd = dup2 (fd, desired_fd); if (dupfd == -1 && errno == ENOTSUP \ && !fstat (fd, &sbuf) && S_ISDIR (sbuf.st_mode)) { close (desired_fd); return klibc_dup2dirfd (fd, desired_fd); } return dupfd; } # define dup2 klibc_dup2 #endif int rpl_dup2 (int fd, int desired_fd) { int result; #ifdef F_GETFL /* On Linux kernels 2.6.26-2.6.29, dup2 (fd, fd) returns -EBADF. On Cygwin 1.5.x, dup2 (1, 1) returns 0. On Cygwin 1.7.17, dup2 (1, -1) dumps core. On Cygwin 1.7.25, dup2 (1, 256) can dump core. On Haiku, dup2 (fd, fd) mistakenly clears FD_CLOEXEC. */ # if HAVE_SETDTABLESIZE setdtablesize (desired_fd + 1); # endif if (desired_fd < 0) fd = desired_fd; if (fd == desired_fd) return fcntl (fd, F_GETFL) == -1 ? -1 : fd; #endif result = dup2 (fd, desired_fd); /* Correct an errno value on FreeBSD 6.1 and Cygwin 1.5.x. */ if (result == -1 && errno == EMFILE) errno = EBADF; #if REPLACE_FCHDIR if (fd != desired_fd && result != -1) result = _gl_register_dup (fd, result); #endif return result; } ������������������������������rush-2.4/gnu/regexec.c������������������������������������������������������������������������������0000644�0001750�0001750�00000372224�14436425346�014732� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Extended regular expression matching and search library. Copyright (C) 2002-2023 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Isamu Hasegawa <isamu@yamato.ibm.com>. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ static reg_errcode_t match_ctx_init (re_match_context_t *cache, int eflags, Idx n); static void match_ctx_clean (re_match_context_t *mctx); static void match_ctx_free (re_match_context_t *cache); static reg_errcode_t match_ctx_add_entry (re_match_context_t *cache, Idx node, Idx str_idx, Idx from, Idx to); static Idx search_cur_bkref_entry (const re_match_context_t *mctx, Idx str_idx); static reg_errcode_t match_ctx_add_subtop (re_match_context_t *mctx, Idx node, Idx str_idx); static re_sub_match_last_t * match_ctx_add_sublast (re_sub_match_top_t *subtop, Idx node, Idx str_idx); static void sift_ctx_init (re_sift_context_t *sctx, re_dfastate_t **sifted_sts, re_dfastate_t **limited_sts, Idx last_node, Idx last_str_idx); static reg_errcode_t re_search_internal (const regex_t *preg, const char *string, Idx length, Idx start, Idx last_start, Idx stop, size_t nmatch, regmatch_t pmatch[], int eflags); static regoff_t re_search_2_stub (struct re_pattern_buffer *bufp, const char *string1, Idx length1, const char *string2, Idx length2, Idx start, regoff_t range, struct re_registers *regs, Idx stop, bool ret_len); static regoff_t re_search_stub (struct re_pattern_buffer *bufp, const char *string, Idx length, Idx start, regoff_t range, Idx stop, struct re_registers *regs, bool ret_len); static unsigned re_copy_regs (struct re_registers *regs, regmatch_t *pmatch, Idx nregs, int regs_allocated); static reg_errcode_t prune_impossible_nodes (re_match_context_t *mctx); static Idx check_matching (re_match_context_t *mctx, bool fl_longest_match, Idx *p_match_first); static Idx check_halt_state_context (const re_match_context_t *mctx, const re_dfastate_t *state, Idx idx); static void update_regs (const re_dfa_t *dfa, regmatch_t *pmatch, regmatch_t *prev_idx_match, Idx cur_node, Idx cur_idx, Idx nmatch); static reg_errcode_t push_fail_stack (struct re_fail_stack_t *fs, Idx str_idx, Idx dest_node, Idx nregs, regmatch_t *regs, regmatch_t *prevregs, re_node_set *eps_via_nodes); static reg_errcode_t set_regs (const regex_t *preg, const re_match_context_t *mctx, size_t nmatch, regmatch_t *pmatch, bool fl_backtrack); static reg_errcode_t free_fail_stack_return (struct re_fail_stack_t *fs); static int sift_states_iter_mb (const re_match_context_t *mctx, re_sift_context_t *sctx, Idx node_idx, Idx str_idx, Idx max_str_idx); static reg_errcode_t sift_states_backward (const re_match_context_t *mctx, re_sift_context_t *sctx); static reg_errcode_t build_sifted_states (const re_match_context_t *mctx, re_sift_context_t *sctx, Idx str_idx, re_node_set *cur_dest); static reg_errcode_t update_cur_sifted_state (const re_match_context_t *mctx, re_sift_context_t *sctx, Idx str_idx, re_node_set *dest_nodes); static reg_errcode_t add_epsilon_src_nodes (const re_dfa_t *dfa, re_node_set *dest_nodes, const re_node_set *candidates); static bool check_dst_limits (const re_match_context_t *mctx, const re_node_set *limits, Idx dst_node, Idx dst_idx, Idx src_node, Idx src_idx); static int check_dst_limits_calc_pos_1 (const re_match_context_t *mctx, int boundaries, Idx subexp_idx, Idx from_node, Idx bkref_idx); static int check_dst_limits_calc_pos (const re_match_context_t *mctx, Idx limit, Idx subexp_idx, Idx node, Idx str_idx, Idx bkref_idx); static reg_errcode_t check_subexp_limits (const re_dfa_t *dfa, re_node_set *dest_nodes, const re_node_set *candidates, re_node_set *limits, struct re_backref_cache_entry *bkref_ents, Idx str_idx); static reg_errcode_t sift_states_bkref (const re_match_context_t *mctx, re_sift_context_t *sctx, Idx str_idx, const re_node_set *candidates); static reg_errcode_t merge_state_array (const re_dfa_t *dfa, re_dfastate_t **dst, re_dfastate_t **src, Idx num); static re_dfastate_t *find_recover_state (reg_errcode_t *err, re_match_context_t *mctx); static re_dfastate_t *transit_state (reg_errcode_t *err, re_match_context_t *mctx, re_dfastate_t *state); static re_dfastate_t *merge_state_with_log (reg_errcode_t *err, re_match_context_t *mctx, re_dfastate_t *next_state); static reg_errcode_t check_subexp_matching_top (re_match_context_t *mctx, re_node_set *cur_nodes, Idx str_idx); #if 0 static re_dfastate_t *transit_state_sb (reg_errcode_t *err, re_match_context_t *mctx, re_dfastate_t *pstate); #endif static reg_errcode_t transit_state_mb (re_match_context_t *mctx, re_dfastate_t *pstate); static reg_errcode_t transit_state_bkref (re_match_context_t *mctx, const re_node_set *nodes); static reg_errcode_t get_subexp (re_match_context_t *mctx, Idx bkref_node, Idx bkref_str_idx); static reg_errcode_t get_subexp_sub (re_match_context_t *mctx, const re_sub_match_top_t *sub_top, re_sub_match_last_t *sub_last, Idx bkref_node, Idx bkref_str); static Idx find_subexp_node (const re_dfa_t *dfa, const re_node_set *nodes, Idx subexp_idx, int type); static reg_errcode_t check_arrival (re_match_context_t *mctx, state_array_t *path, Idx top_node, Idx top_str, Idx last_node, Idx last_str, int type); static reg_errcode_t check_arrival_add_next_nodes (re_match_context_t *mctx, Idx str_idx, re_node_set *cur_nodes, re_node_set *next_nodes); static reg_errcode_t check_arrival_expand_ecl (const re_dfa_t *dfa, re_node_set *cur_nodes, Idx ex_subexp, int type); static reg_errcode_t check_arrival_expand_ecl_sub (const re_dfa_t *dfa, re_node_set *dst_nodes, Idx target, Idx ex_subexp, int type); static reg_errcode_t expand_bkref_cache (re_match_context_t *mctx, re_node_set *cur_nodes, Idx cur_str, Idx subexp_num, int type); static bool build_trtable (const re_dfa_t *dfa, re_dfastate_t *state); static int check_node_accept_bytes (const re_dfa_t *dfa, Idx node_idx, const re_string_t *input, Idx idx); #ifdef _LIBC static unsigned int find_collation_sequence_value (const unsigned char *mbs, size_t name_len); #endif static Idx group_nodes_into_DFAstates (const re_dfa_t *dfa, const re_dfastate_t *state, re_node_set *states_node, bitset_t *states_ch); static bool check_node_accept (const re_match_context_t *mctx, const re_token_t *node, Idx idx); static reg_errcode_t extend_buffers (re_match_context_t *mctx, int min_len); /* Entry point for POSIX code. */ /* regexec searches for a given pattern, specified by PREG, in the string STRING. If NMATCH is zero or REG_NOSUB was set in the cflags argument to 'regcomp', we ignore PMATCH. Otherwise, we assume PMATCH has at least NMATCH elements, and we set them to the offsets of the corresponding matched substrings. EFLAGS specifies "execution flags" which affect matching: if REG_NOTBOL is set, then ^ does not match at the beginning of the string; if REG_NOTEOL is set, then $ does not match at the end. Return 0 if a match is found, REG_NOMATCH if not, REG_BADPAT if EFLAGS is invalid. */ int regexec (const regex_t *__restrict preg, const char *__restrict string, size_t nmatch, regmatch_t pmatch[_REGEX_NELTS (nmatch)], int eflags) { reg_errcode_t err; Idx start, length; re_dfa_t *dfa = preg->buffer; if (eflags & ~(REG_NOTBOL | REG_NOTEOL | REG_STARTEND)) return REG_BADPAT; if (eflags & REG_STARTEND) { start = pmatch[0].rm_so; length = pmatch[0].rm_eo; } else { start = 0; length = strlen (string); } lock_lock (dfa->lock); if (preg->no_sub) err = re_search_internal (preg, string, length, start, length, length, 0, NULL, eflags); else err = re_search_internal (preg, string, length, start, length, length, nmatch, pmatch, eflags); lock_unlock (dfa->lock); return err != REG_NOERROR; } #ifdef _LIBC libc_hidden_def (__regexec) # include <shlib-compat.h> versioned_symbol (libc, __regexec, regexec, GLIBC_2_3_4); # if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3_4) __typeof__ (__regexec) __compat_regexec; int attribute_compat_text_section __compat_regexec (const regex_t *__restrict preg, const char *__restrict string, size_t nmatch, regmatch_t pmatch[_REGEX_NELTS (nmatch)], int eflags) { return regexec (preg, string, nmatch, pmatch, eflags & (REG_NOTBOL | REG_NOTEOL)); } compat_symbol (libc, __compat_regexec, regexec, GLIBC_2_0); # endif #endif /* Entry points for GNU code. */ /* re_match, re_search, re_match_2, re_search_2 The former two functions operate on STRING with length LENGTH, while the later two operate on concatenation of STRING1 and STRING2 with lengths LENGTH1 and LENGTH2, respectively. re_match() matches the compiled pattern in BUFP against the string, starting at index START. re_search() first tries matching at index START, then it tries to match starting from index START + 1, and so on. The last start position tried is START + RANGE. (Thus RANGE = 0 forces re_search to operate the same way as re_match().) The parameter STOP of re_{match,search}_2 specifies that no match exceeding the first STOP characters of the concatenation of the strings should be concerned. If REGS is not NULL, and BUFP->no_sub is not set, the offsets of the match and all groups is stored in REGS. (For the "_2" variants, the offsets are computed relative to the concatenation, not relative to the individual strings.) On success, re_match* functions return the length of the match, re_search* return the position of the start of the match. They return -1 on match failure, -2 on error. */ regoff_t re_match (struct re_pattern_buffer *bufp, const char *string, Idx length, Idx start, struct re_registers *regs) { return re_search_stub (bufp, string, length, start, 0, length, regs, true); } #ifdef _LIBC weak_alias (__re_match, re_match) #endif regoff_t re_search (struct re_pattern_buffer *bufp, const char *string, Idx length, Idx start, regoff_t range, struct re_registers *regs) { return re_search_stub (bufp, string, length, start, range, length, regs, false); } #ifdef _LIBC weak_alias (__re_search, re_search) #endif regoff_t re_match_2 (struct re_pattern_buffer *bufp, const char *string1, Idx length1, const char *string2, Idx length2, Idx start, struct re_registers *regs, Idx stop) { return re_search_2_stub (bufp, string1, length1, string2, length2, start, 0, regs, stop, true); } #ifdef _LIBC weak_alias (__re_match_2, re_match_2) #endif regoff_t re_search_2 (struct re_pattern_buffer *bufp, const char *string1, Idx length1, const char *string2, Idx length2, Idx start, regoff_t range, struct re_registers *regs, Idx stop) { return re_search_2_stub (bufp, string1, length1, string2, length2, start, range, regs, stop, false); } #ifdef _LIBC weak_alias (__re_search_2, re_search_2) #endif static regoff_t re_search_2_stub (struct re_pattern_buffer *bufp, const char *string1, Idx length1, const char *string2, Idx length2, Idx start, regoff_t range, struct re_registers *regs, Idx stop, bool ret_len) { const char *str; regoff_t rval; Idx len; char *s = NULL; if (__glibc_unlikely ((length1 < 0 || length2 < 0 || stop < 0 || ckd_add (&len, length1, length2)))) return -2; /* Concatenate the strings. */ if (length2 > 0) if (length1 > 0) { s = re_malloc (char, len); if (__glibc_unlikely (s == NULL)) return -2; #ifdef _LIBC memcpy (__mempcpy (s, string1, length1), string2, length2); #else memcpy (s, string1, length1); memcpy (s + length1, string2, length2); #endif str = s; } else str = string2; else str = string1; rval = re_search_stub (bufp, str, len, start, range, stop, regs, ret_len); re_free (s); return rval; } /* The parameters have the same meaning as those of re_search. Additional parameters: If RET_LEN is true the length of the match is returned (re_match style); otherwise the position of the match is returned. */ static regoff_t re_search_stub (struct re_pattern_buffer *bufp, const char *string, Idx length, Idx start, regoff_t range, Idx stop, struct re_registers *regs, bool ret_len) { reg_errcode_t result; regmatch_t *pmatch; Idx nregs; regoff_t rval; int eflags = 0; re_dfa_t *dfa = bufp->buffer; Idx last_start = start + range; /* Check for out-of-range. */ if (__glibc_unlikely (start < 0 || start > length)) return -1; if (__glibc_unlikely (length < last_start || (0 <= range && last_start < start))) last_start = length; else if (__glibc_unlikely (last_start < 0 || (range < 0 && start <= last_start))) last_start = 0; lock_lock (dfa->lock); eflags |= (bufp->not_bol) ? REG_NOTBOL : 0; eflags |= (bufp->not_eol) ? REG_NOTEOL : 0; /* Compile fastmap if we haven't yet. */ if (start < last_start && bufp->fastmap != NULL && !bufp->fastmap_accurate) re_compile_fastmap (bufp); if (__glibc_unlikely (bufp->no_sub)) regs = NULL; /* We need at least 1 register. */ if (regs == NULL) nregs = 1; else if (__glibc_unlikely (bufp->regs_allocated == REGS_FIXED && regs->num_regs <= bufp->re_nsub)) { nregs = regs->num_regs; if (__glibc_unlikely (nregs < 1)) { /* Nothing can be copied to regs. */ regs = NULL; nregs = 1; } } else nregs = bufp->re_nsub + 1; pmatch = re_malloc (regmatch_t, nregs); if (__glibc_unlikely (pmatch == NULL)) { rval = -2; goto out; } result = re_search_internal (bufp, string, length, start, last_start, stop, nregs, pmatch, eflags); rval = 0; /* I hope we needn't fill their regs with -1's when no match was found. */ if (result != REG_NOERROR) rval = result == REG_NOMATCH ? -1 : -2; else if (regs != NULL) { /* If caller wants register contents data back, copy them. */ bufp->regs_allocated = re_copy_regs (regs, pmatch, nregs, bufp->regs_allocated); if (__glibc_unlikely (bufp->regs_allocated == REGS_UNALLOCATED)) rval = -2; } if (__glibc_likely (rval == 0)) { if (ret_len) { DEBUG_ASSERT (pmatch[0].rm_so == start); rval = pmatch[0].rm_eo - start; } else rval = pmatch[0].rm_so; } re_free (pmatch); out: lock_unlock (dfa->lock); return rval; } static unsigned re_copy_regs (struct re_registers *regs, regmatch_t *pmatch, Idx nregs, int regs_allocated) { int rval = REGS_REALLOCATE; Idx i; Idx need_regs = nregs + 1; /* We need one extra element beyond 'num_regs' for the '-1' marker GNU code uses. */ /* Have the register data arrays been allocated? */ if (regs_allocated == REGS_UNALLOCATED) { /* No. So allocate them with malloc. */ regs->start = re_malloc (regoff_t, need_regs); if (__glibc_unlikely (regs->start == NULL)) return REGS_UNALLOCATED; regs->end = re_malloc (regoff_t, need_regs); if (__glibc_unlikely (regs->end == NULL)) { re_free (regs->start); return REGS_UNALLOCATED; } regs->num_regs = need_regs; } else if (regs_allocated == REGS_REALLOCATE) { /* Yes. If we need more elements than were already allocated, reallocate them. If we need fewer, just leave it alone. */ if (__glibc_unlikely (need_regs > regs->num_regs)) { regoff_t *new_start = re_realloc (regs->start, regoff_t, need_regs); regoff_t *new_end; if (__glibc_unlikely (new_start == NULL)) return REGS_UNALLOCATED; new_end = re_realloc (regs->end, regoff_t, need_regs); if (__glibc_unlikely (new_end == NULL)) { re_free (new_start); return REGS_UNALLOCATED; } regs->start = new_start; regs->end = new_end; regs->num_regs = need_regs; } } else { DEBUG_ASSERT (regs_allocated == REGS_FIXED); /* This function may not be called with REGS_FIXED and nregs too big. */ DEBUG_ASSERT (nregs <= regs->num_regs); rval = REGS_FIXED; } /* Copy the regs. */ for (i = 0; i < nregs; ++i) { regs->start[i] = pmatch[i].rm_so; regs->end[i] = pmatch[i].rm_eo; } for ( ; i < regs->num_regs; ++i) regs->start[i] = regs->end[i] = -1; return rval; } /* Set REGS to hold NUM_REGS registers, storing them in STARTS and ENDS. Subsequent matches using PATTERN_BUFFER and REGS will use this memory for recording register information. STARTS and ENDS must be allocated using the malloc library routine, and must each be at least NUM_REGS * sizeof (regoff_t) bytes long. If NUM_REGS == 0, then subsequent matches should allocate their own register data. Unless this function is called, the first search or match using PATTERN_BUFFER will allocate its own register data, without freeing the old data. */ void re_set_registers (struct re_pattern_buffer *bufp, struct re_registers *regs, __re_size_t num_regs, regoff_t *starts, regoff_t *ends) { if (num_regs) { bufp->regs_allocated = REGS_REALLOCATE; regs->num_regs = num_regs; regs->start = starts; regs->end = ends; } else { bufp->regs_allocated = REGS_UNALLOCATED; regs->num_regs = 0; regs->start = regs->end = NULL; } } #ifdef _LIBC weak_alias (__re_set_registers, re_set_registers) #endif /* Entry points compatible with 4.2 BSD regex library. We don't define them unless specifically requested. */ #if defined _REGEX_RE_COMP || defined _LIBC int # ifdef _LIBC weak_function # endif re_exec (const char *s) { return 0 == regexec (&re_comp_buf, s, 0, NULL, 0); } #endif /* _REGEX_RE_COMP */ /* Internal entry point. */ /* Searches for a compiled pattern PREG in the string STRING, whose length is LENGTH. NMATCH, PMATCH, and EFLAGS have the same meaning as with regexec. LAST_START is START + RANGE, where START and RANGE have the same meaning as with re_search. Return REG_NOERROR if we find a match, and REG_NOMATCH if not, otherwise return the error code. Note: We assume front end functions already check ranges. (0 <= LAST_START && LAST_START <= LENGTH) */ static reg_errcode_t __attribute_warn_unused_result__ re_search_internal (const regex_t *preg, const char *string, Idx length, Idx start, Idx last_start, Idx stop, size_t nmatch, regmatch_t pmatch[], int eflags) { reg_errcode_t err; const re_dfa_t *dfa = preg->buffer; Idx left_lim, right_lim; int incr; bool fl_longest_match; int match_kind; Idx match_first; Idx match_last = -1; Idx extra_nmatch; bool sb; int ch; re_match_context_t mctx = { .dfa = dfa }; char *fastmap = ((preg->fastmap != NULL && preg->fastmap_accurate && start != last_start && !preg->can_be_null) ? preg->fastmap : NULL); RE_TRANSLATE_TYPE t = preg->translate; extra_nmatch = (nmatch > preg->re_nsub) ? nmatch - (preg->re_nsub + 1) : 0; nmatch -= extra_nmatch; /* Check if the DFA haven't been compiled. */ if (__glibc_unlikely (preg->used == 0 || dfa->init_state == NULL || dfa->init_state_word == NULL || dfa->init_state_nl == NULL || dfa->init_state_begbuf == NULL)) return REG_NOMATCH; /* We assume front-end functions already check them. */ DEBUG_ASSERT (0 <= last_start && last_start <= length); /* If initial states with non-begbuf contexts have no elements, the regex must be anchored. If preg->newline_anchor is set, we'll never use init_state_nl, so do not check it. */ if (dfa->init_state->nodes.nelem == 0 && dfa->init_state_word->nodes.nelem == 0 && (dfa->init_state_nl->nodes.nelem == 0 || !preg->newline_anchor)) { if (start != 0 && last_start != 0) return REG_NOMATCH; start = last_start = 0; } /* We must check the longest matching, if nmatch > 0. */ fl_longest_match = (nmatch != 0 || dfa->nbackref); err = re_string_allocate (&mctx.input, string, length, dfa->nodes_len + 1, preg->translate, (preg->syntax & RE_ICASE) != 0, dfa); if (__glibc_unlikely (err != REG_NOERROR)) goto free_return; mctx.input.stop = stop; mctx.input.raw_stop = stop; mctx.input.newline_anchor = preg->newline_anchor; err = match_ctx_init (&mctx, eflags, dfa->nbackref * 2); if (__glibc_unlikely (err != REG_NOERROR)) goto free_return; /* We will log all the DFA states through which the dfa pass, if nmatch > 1, or this dfa has "multibyte node", which is a back-reference or a node which can accept multibyte character or multi character collating element. */ if (nmatch > 1 || dfa->has_mb_node) { /* Avoid overflow. */ if (__glibc_unlikely ((MIN (IDX_MAX, SIZE_MAX / sizeof (re_dfastate_t *)) <= mctx.input.bufs_len))) { err = REG_ESPACE; goto free_return; } mctx.state_log = re_malloc (re_dfastate_t *, mctx.input.bufs_len + 1); if (__glibc_unlikely (mctx.state_log == NULL)) { err = REG_ESPACE; goto free_return; } } match_first = start; mctx.input.tip_context = (eflags & REG_NOTBOL) ? CONTEXT_BEGBUF : CONTEXT_NEWLINE | CONTEXT_BEGBUF; /* Check incrementally whether the input string matches. */ incr = (last_start < start) ? -1 : 1; left_lim = (last_start < start) ? last_start : start; right_lim = (last_start < start) ? start : last_start; sb = dfa->mb_cur_max == 1; match_kind = (fastmap ? ((sb || !(preg->syntax & RE_ICASE || t) ? 4 : 0) | (start <= last_start ? 2 : 0) | (t != NULL ? 1 : 0)) : 8); for (;; match_first += incr) { err = REG_NOMATCH; if (match_first < left_lim || right_lim < match_first) goto free_return; /* Advance as rapidly as possible through the string, until we find a plausible place to start matching. This may be done with varying efficiency, so there are various possibilities: only the most common of them are specialized, in order to save on code size. We use a switch statement for speed. */ switch (match_kind) { case 8: /* No fastmap. */ break; case 7: /* Fastmap with single-byte translation, match forward. */ while (__glibc_likely (match_first < right_lim) && !fastmap[t[(unsigned char) string[match_first]]]) ++match_first; goto forward_match_found_start_or_reached_end; case 6: /* Fastmap without translation, match forward. */ while (__glibc_likely (match_first < right_lim) && !fastmap[(unsigned char) string[match_first]]) ++match_first; forward_match_found_start_or_reached_end: if (__glibc_unlikely (match_first == right_lim)) { ch = match_first >= length ? 0 : (unsigned char) string[match_first]; if (!fastmap[t ? t[ch] : ch]) goto free_return; } break; case 4: case 5: /* Fastmap without multi-byte translation, match backwards. */ while (match_first >= left_lim) { ch = match_first >= length ? 0 : (unsigned char) string[match_first]; if (fastmap[t ? t[ch] : ch]) break; --match_first; } if (match_first < left_lim) goto free_return; break; default: /* In this case, we can't determine easily the current byte, since it might be a component byte of a multibyte character. Then we use the constructed buffer instead. */ for (;;) { /* If MATCH_FIRST is out of the valid range, reconstruct the buffers. */ __re_size_t offset = match_first - mctx.input.raw_mbs_idx; if (__glibc_unlikely (offset >= (__re_size_t) mctx.input.valid_raw_len)) { err = re_string_reconstruct (&mctx.input, match_first, eflags); if (__glibc_unlikely (err != REG_NOERROR)) goto free_return; offset = match_first - mctx.input.raw_mbs_idx; } /* Use buffer byte if OFFSET is in buffer, otherwise '\0'. */ ch = (offset < mctx.input.valid_len ? re_string_byte_at (&mctx.input, offset) : 0); if (fastmap[ch]) break; match_first += incr; if (match_first < left_lim || match_first > right_lim) { err = REG_NOMATCH; goto free_return; } } break; } /* Reconstruct the buffers so that the matcher can assume that the matching starts from the beginning of the buffer. */ err = re_string_reconstruct (&mctx.input, match_first, eflags); if (__glibc_unlikely (err != REG_NOERROR)) goto free_return; /* Don't consider this char as a possible match start if it part, yet isn't the head, of a multibyte character. */ if (!sb && !re_string_first_byte (&mctx.input, 0)) continue; /* It seems to be appropriate one, then use the matcher. */ /* We assume that the matching starts from 0. */ mctx.state_log_top = mctx.nbkref_ents = mctx.max_mb_elem_len = 0; match_last = check_matching (&mctx, fl_longest_match, start <= last_start ? &match_first : NULL); if (match_last != -1) { if (__glibc_unlikely (match_last == -2)) { err = REG_ESPACE; goto free_return; } else { mctx.match_last = match_last; if ((!preg->no_sub && nmatch > 1) || dfa->nbackref) { re_dfastate_t *pstate = mctx.state_log[match_last]; mctx.last_node = check_halt_state_context (&mctx, pstate, match_last); } if ((!preg->no_sub && nmatch > 1 && dfa->has_plural_match) || dfa->nbackref) { err = prune_impossible_nodes (&mctx); if (err == REG_NOERROR) break; if (__glibc_unlikely (err != REG_NOMATCH)) goto free_return; match_last = -1; } else break; /* We found a match. */ } } match_ctx_clean (&mctx); } DEBUG_ASSERT (match_last != -1); DEBUG_ASSERT (err == REG_NOERROR); /* Set pmatch[] if we need. */ if (nmatch > 0) { Idx reg_idx; /* Initialize registers. */ for (reg_idx = 1; reg_idx < nmatch; ++reg_idx) pmatch[reg_idx].rm_so = pmatch[reg_idx].rm_eo = -1; /* Set the points where matching start/end. */ pmatch[0].rm_so = 0; pmatch[0].rm_eo = mctx.match_last; /* FIXME: This function should fail if mctx.match_last exceeds the maximum possible regoff_t value. We need a new error code REG_OVERFLOW. */ if (!preg->no_sub && nmatch > 1) { err = set_regs (preg, &mctx, nmatch, pmatch, dfa->has_plural_match && dfa->nbackref > 0); if (__glibc_unlikely (err != REG_NOERROR)) goto free_return; } /* At last, add the offset to each register, since we slid the buffers so that we could assume that the matching starts from 0. */ for (reg_idx = 0; reg_idx < nmatch; ++reg_idx) if (pmatch[reg_idx].rm_so != -1) { if (__glibc_unlikely (mctx.input.offsets_needed != 0)) { pmatch[reg_idx].rm_so = (pmatch[reg_idx].rm_so == mctx.input.valid_len ? mctx.input.valid_raw_len : mctx.input.offsets[pmatch[reg_idx].rm_so]); pmatch[reg_idx].rm_eo = (pmatch[reg_idx].rm_eo == mctx.input.valid_len ? mctx.input.valid_raw_len : mctx.input.offsets[pmatch[reg_idx].rm_eo]); } pmatch[reg_idx].rm_so += match_first; pmatch[reg_idx].rm_eo += match_first; } for (reg_idx = 0; reg_idx < extra_nmatch; ++reg_idx) { pmatch[nmatch + reg_idx].rm_so = -1; pmatch[nmatch + reg_idx].rm_eo = -1; } if (dfa->subexp_map) for (reg_idx = 0; reg_idx + 1 < nmatch; reg_idx++) if (dfa->subexp_map[reg_idx] != reg_idx) { pmatch[reg_idx + 1].rm_so = pmatch[dfa->subexp_map[reg_idx] + 1].rm_so; pmatch[reg_idx + 1].rm_eo = pmatch[dfa->subexp_map[reg_idx] + 1].rm_eo; } } free_return: re_free (mctx.state_log); if (dfa->nbackref) match_ctx_free (&mctx); re_string_destruct (&mctx.input); return err; } static reg_errcode_t __attribute_warn_unused_result__ prune_impossible_nodes (re_match_context_t *mctx) { const re_dfa_t *const dfa = mctx->dfa; Idx halt_node, match_last; reg_errcode_t ret; re_dfastate_t **sifted_states; re_dfastate_t **lim_states = NULL; re_sift_context_t sctx; DEBUG_ASSERT (mctx->state_log != NULL); match_last = mctx->match_last; halt_node = mctx->last_node; /* Avoid overflow. */ if (__glibc_unlikely (MIN (IDX_MAX, SIZE_MAX / sizeof (re_dfastate_t *)) <= match_last)) return REG_ESPACE; sifted_states = re_malloc (re_dfastate_t *, match_last + 1); if (__glibc_unlikely (sifted_states == NULL)) { ret = REG_ESPACE; goto free_return; } if (dfa->nbackref) { lim_states = re_malloc (re_dfastate_t *, match_last + 1); if (__glibc_unlikely (lim_states == NULL)) { ret = REG_ESPACE; goto free_return; } while (1) { memset (lim_states, '\0', sizeof (re_dfastate_t *) * (match_last + 1)); sift_ctx_init (&sctx, sifted_states, lim_states, halt_node, match_last); ret = sift_states_backward (mctx, &sctx); re_node_set_free (&sctx.limits); if (__glibc_unlikely (ret != REG_NOERROR)) goto free_return; if (sifted_states[0] != NULL || lim_states[0] != NULL) break; do { --match_last; if (match_last < 0) { ret = REG_NOMATCH; goto free_return; } } while (mctx->state_log[match_last] == NULL || !mctx->state_log[match_last]->halt); halt_node = check_halt_state_context (mctx, mctx->state_log[match_last], match_last); } ret = merge_state_array (dfa, sifted_states, lim_states, match_last + 1); re_free (lim_states); lim_states = NULL; if (__glibc_unlikely (ret != REG_NOERROR)) goto free_return; } else { sift_ctx_init (&sctx, sifted_states, lim_states, halt_node, match_last); ret = sift_states_backward (mctx, &sctx); re_node_set_free (&sctx.limits); if (__glibc_unlikely (ret != REG_NOERROR)) goto free_return; if (sifted_states[0] == NULL) { ret = REG_NOMATCH; goto free_return; } } re_free (mctx->state_log); mctx->state_log = sifted_states; sifted_states = NULL; mctx->last_node = halt_node; mctx->match_last = match_last; ret = REG_NOERROR; free_return: re_free (sifted_states); re_free (lim_states); return ret; } /* Acquire an initial state and return it. We must select appropriate initial state depending on the context, since initial states may have constraints like "\<", "^", etc.. */ static __always_inline re_dfastate_t * acquire_init_state_context (reg_errcode_t *err, const re_match_context_t *mctx, Idx idx) { const re_dfa_t *const dfa = mctx->dfa; if (dfa->init_state->has_constraint) { unsigned int context; context = re_string_context_at (&mctx->input, idx - 1, mctx->eflags); if (IS_WORD_CONTEXT (context)) return dfa->init_state_word; else if (IS_ORDINARY_CONTEXT (context)) return dfa->init_state; else if (IS_BEGBUF_CONTEXT (context) && IS_NEWLINE_CONTEXT (context)) return dfa->init_state_begbuf; else if (IS_NEWLINE_CONTEXT (context)) return dfa->init_state_nl; else if (IS_BEGBUF_CONTEXT (context)) { /* It is relatively rare case, then calculate on demand. */ return re_acquire_state_context (err, dfa, dfa->init_state->entrance_nodes, context); } else /* Must not happen? */ return dfa->init_state; } else return dfa->init_state; } /* Check whether the regular expression match input string INPUT or not, and return the index where the matching end. Return -1 if there is no match, and return -2 in case of an error. FL_LONGEST_MATCH means we want the POSIX longest matching. If P_MATCH_FIRST is not NULL, and the match fails, it is set to the next place where we may want to try matching. Note that the matcher assumes that the matching starts from the current index of the buffer. */ static Idx __attribute_warn_unused_result__ check_matching (re_match_context_t *mctx, bool fl_longest_match, Idx *p_match_first) { const re_dfa_t *const dfa = mctx->dfa; reg_errcode_t err; Idx match = 0; Idx match_last = -1; Idx cur_str_idx = re_string_cur_idx (&mctx->input); re_dfastate_t *cur_state; bool at_init_state = p_match_first != NULL; Idx next_start_idx = cur_str_idx; err = REG_NOERROR; cur_state = acquire_init_state_context (&err, mctx, cur_str_idx); /* An initial state must not be NULL (invalid). */ if (__glibc_unlikely (cur_state == NULL)) { DEBUG_ASSERT (err == REG_ESPACE); return -2; } if (mctx->state_log != NULL) { mctx->state_log[cur_str_idx] = cur_state; /* Check OP_OPEN_SUBEXP in the initial state in case that we use them later. E.g. Processing back references. */ if (__glibc_unlikely (dfa->nbackref)) { at_init_state = false; err = check_subexp_matching_top (mctx, &cur_state->nodes, 0); if (__glibc_unlikely (err != REG_NOERROR)) return err; if (cur_state->has_backref) { err = transit_state_bkref (mctx, &cur_state->nodes); if (__glibc_unlikely (err != REG_NOERROR)) return err; } } } /* If the RE accepts NULL string. */ if (__glibc_unlikely (cur_state->halt)) { if (!cur_state->has_constraint || check_halt_state_context (mctx, cur_state, cur_str_idx)) { if (!fl_longest_match) return cur_str_idx; else { match_last = cur_str_idx; match = 1; } } } while (!re_string_eoi (&mctx->input)) { re_dfastate_t *old_state = cur_state; Idx next_char_idx = re_string_cur_idx (&mctx->input) + 1; if ((__glibc_unlikely (next_char_idx >= mctx->input.bufs_len) && mctx->input.bufs_len < mctx->input.len) || (__glibc_unlikely (next_char_idx >= mctx->input.valid_len) && mctx->input.valid_len < mctx->input.len)) { err = extend_buffers (mctx, next_char_idx + 1); if (__glibc_unlikely (err != REG_NOERROR)) { DEBUG_ASSERT (err == REG_ESPACE); return -2; } } cur_state = transit_state (&err, mctx, cur_state); if (mctx->state_log != NULL) cur_state = merge_state_with_log (&err, mctx, cur_state); if (cur_state == NULL) { /* Reached the invalid state or an error. Try to recover a valid state using the state log, if available and if we have not already found a valid (even if not the longest) match. */ if (__glibc_unlikely (err != REG_NOERROR)) return -2; if (mctx->state_log == NULL || (match && !fl_longest_match) || (cur_state = find_recover_state (&err, mctx)) == NULL) break; } if (__glibc_unlikely (at_init_state)) { if (old_state == cur_state) next_start_idx = next_char_idx; else at_init_state = false; } if (cur_state->halt) { /* Reached a halt state. Check the halt state can satisfy the current context. */ if (!cur_state->has_constraint || check_halt_state_context (mctx, cur_state, re_string_cur_idx (&mctx->input))) { /* We found an appropriate halt state. */ match_last = re_string_cur_idx (&mctx->input); match = 1; /* We found a match, do not modify match_first below. */ p_match_first = NULL; if (!fl_longest_match) break; } } } if (p_match_first) *p_match_first += next_start_idx; return match_last; } /* Check NODE match the current context. */ static bool check_halt_node_context (const re_dfa_t *dfa, Idx node, unsigned int context) { re_token_type_t type = dfa->nodes[node].type; unsigned int constraint = dfa->nodes[node].constraint; if (type != END_OF_RE) return false; if (!constraint) return true; if (NOT_SATISFY_NEXT_CONSTRAINT (constraint, context)) return false; return true; } /* Check the halt state STATE match the current context. Return 0 if not match, if the node, STATE has, is a halt node and match the context, return the node. */ static Idx check_halt_state_context (const re_match_context_t *mctx, const re_dfastate_t *state, Idx idx) { Idx i; unsigned int context; DEBUG_ASSERT (state->halt); context = re_string_context_at (&mctx->input, idx, mctx->eflags); for (i = 0; i < state->nodes.nelem; ++i) if (check_halt_node_context (mctx->dfa, state->nodes.elems[i], context)) return state->nodes.elems[i]; return 0; } /* Compute the next node to which "NFA" transit from NODE("NFA" is a NFA corresponding to the DFA). Return the destination node, and update EPS_VIA_NODES; return -1 on match failure, -2 on error. */ static Idx proceed_next_node (const re_match_context_t *mctx, Idx nregs, regmatch_t *regs, regmatch_t *prevregs, Idx *pidx, Idx node, re_node_set *eps_via_nodes, struct re_fail_stack_t *fs) { const re_dfa_t *const dfa = mctx->dfa; if (IS_EPSILON_NODE (dfa->nodes[node].type)) { re_node_set *cur_nodes = &mctx->state_log[*pidx]->nodes; re_node_set *edests = &dfa->edests[node]; if (! re_node_set_contains (eps_via_nodes, node)) { bool ok = re_node_set_insert (eps_via_nodes, node); if (__glibc_unlikely (! ok)) return -2; } /* Pick a valid destination, or return -1 if none is found. */ Idx dest_node = -1; for (Idx i = 0; i < edests->nelem; i++) { Idx candidate = edests->elems[i]; if (!re_node_set_contains (cur_nodes, candidate)) continue; if (dest_node == -1) dest_node = candidate; else { /* In order to avoid infinite loop like "(a*)*", return the second epsilon-transition if the first was already considered. */ if (re_node_set_contains (eps_via_nodes, dest_node)) return candidate; /* Otherwise, push the second epsilon-transition on the fail stack. */ else if (fs != NULL && push_fail_stack (fs, *pidx, candidate, nregs, regs, prevregs, eps_via_nodes)) return -2; /* We know we are going to exit. */ break; } } return dest_node; } else { Idx naccepted = 0; re_token_type_t type = dfa->nodes[node].type; if (dfa->nodes[node].accept_mb) naccepted = check_node_accept_bytes (dfa, node, &mctx->input, *pidx); else if (type == OP_BACK_REF) { Idx subexp_idx = dfa->nodes[node].opr.idx + 1; if (subexp_idx < nregs) naccepted = regs[subexp_idx].rm_eo - regs[subexp_idx].rm_so; if (fs != NULL) { if (subexp_idx >= nregs || regs[subexp_idx].rm_so == -1 || regs[subexp_idx].rm_eo == -1) return -1; else if (naccepted) { char *buf = (char *) re_string_get_buffer (&mctx->input); if (mctx->input.valid_len - *pidx < naccepted || (memcmp (buf + regs[subexp_idx].rm_so, buf + *pidx, naccepted) != 0)) return -1; } } if (naccepted == 0) { Idx dest_node; bool ok = re_node_set_insert (eps_via_nodes, node); if (__glibc_unlikely (! ok)) return -2; dest_node = dfa->edests[node].elems[0]; if (re_node_set_contains (&mctx->state_log[*pidx]->nodes, dest_node)) return dest_node; } } if (naccepted != 0 || check_node_accept (mctx, dfa->nodes + node, *pidx)) { Idx dest_node = dfa->nexts[node]; *pidx = (naccepted == 0) ? *pidx + 1 : *pidx + naccepted; if (fs && (*pidx > mctx->match_last || mctx->state_log[*pidx] == NULL || !re_node_set_contains (&mctx->state_log[*pidx]->nodes, dest_node))) return -1; re_node_set_empty (eps_via_nodes); return dest_node; } } return -1; } static reg_errcode_t __attribute_warn_unused_result__ push_fail_stack (struct re_fail_stack_t *fs, Idx str_idx, Idx dest_node, Idx nregs, regmatch_t *regs, regmatch_t *prevregs, re_node_set *eps_via_nodes) { reg_errcode_t err; Idx num = fs->num; if (num == fs->alloc) { struct re_fail_stack_ent_t *new_array; new_array = re_realloc (fs->stack, struct re_fail_stack_ent_t, fs->alloc * 2); if (new_array == NULL) return REG_ESPACE; fs->alloc *= 2; fs->stack = new_array; } fs->stack[num].idx = str_idx; fs->stack[num].node = dest_node; fs->stack[num].regs = re_malloc (regmatch_t, 2 * nregs); if (fs->stack[num].regs == NULL) return REG_ESPACE; fs->num = num + 1; memcpy (fs->stack[num].regs, regs, sizeof (regmatch_t) * nregs); memcpy (fs->stack[num].regs + nregs, prevregs, sizeof (regmatch_t) * nregs); err = re_node_set_init_copy (&fs->stack[num].eps_via_nodes, eps_via_nodes); return err; } static Idx pop_fail_stack (struct re_fail_stack_t *fs, Idx *pidx, Idx nregs, regmatch_t *regs, regmatch_t *prevregs, re_node_set *eps_via_nodes) { if (fs == NULL || fs->num == 0) return -1; Idx num = --fs->num; *pidx = fs->stack[num].idx; memcpy (regs, fs->stack[num].regs, sizeof (regmatch_t) * nregs); memcpy (prevregs, fs->stack[num].regs + nregs, sizeof (regmatch_t) * nregs); re_node_set_free (eps_via_nodes); re_free (fs->stack[num].regs); *eps_via_nodes = fs->stack[num].eps_via_nodes; DEBUG_ASSERT (0 <= fs->stack[num].node); return fs->stack[num].node; } #define DYNARRAY_STRUCT regmatch_list #define DYNARRAY_ELEMENT regmatch_t #define DYNARRAY_PREFIX regmatch_list_ #include <malloc/dynarray-skeleton.c> /* Set the positions where the subexpressions are starts/ends to registers PMATCH. Note: We assume that pmatch[0] is already set, and pmatch[i].rm_so == pmatch[i].rm_eo == -1 for 0 < i < nmatch. */ static reg_errcode_t __attribute_warn_unused_result__ set_regs (const regex_t *preg, const re_match_context_t *mctx, size_t nmatch, regmatch_t *pmatch, bool fl_backtrack) { const re_dfa_t *dfa = preg->buffer; Idx idx, cur_node; re_node_set eps_via_nodes; struct re_fail_stack_t *fs; struct re_fail_stack_t fs_body = { 0, 2, NULL }; struct regmatch_list prev_match; regmatch_list_init (&prev_match); DEBUG_ASSERT (nmatch > 1); DEBUG_ASSERT (mctx->state_log != NULL); if (fl_backtrack) { fs = &fs_body; fs->stack = re_malloc (struct re_fail_stack_ent_t, fs->alloc); if (fs->stack == NULL) return REG_ESPACE; } else fs = NULL; cur_node = dfa->init_node; re_node_set_init_empty (&eps_via_nodes); if (!regmatch_list_resize (&prev_match, nmatch)) { regmatch_list_free (&prev_match); free_fail_stack_return (fs); return REG_ESPACE; } regmatch_t *prev_idx_match = regmatch_list_begin (&prev_match); memcpy (prev_idx_match, pmatch, sizeof (regmatch_t) * nmatch); for (idx = pmatch[0].rm_so; idx <= pmatch[0].rm_eo ;) { update_regs (dfa, pmatch, prev_idx_match, cur_node, idx, nmatch); if ((idx == pmatch[0].rm_eo && cur_node == mctx->last_node) || (fs && re_node_set_contains (&eps_via_nodes, cur_node))) { Idx reg_idx; cur_node = -1; if (fs) { for (reg_idx = 0; reg_idx < nmatch; ++reg_idx) if (pmatch[reg_idx].rm_so > -1 && pmatch[reg_idx].rm_eo == -1) { cur_node = pop_fail_stack (fs, &idx, nmatch, pmatch, prev_idx_match, &eps_via_nodes); break; } } if (cur_node < 0) { re_node_set_free (&eps_via_nodes); regmatch_list_free (&prev_match); return free_fail_stack_return (fs); } } /* Proceed to next node. */ cur_node = proceed_next_node (mctx, nmatch, pmatch, prev_idx_match, &idx, cur_node, &eps_via_nodes, fs); if (__glibc_unlikely (cur_node < 0)) { if (__glibc_unlikely (cur_node == -2)) { re_node_set_free (&eps_via_nodes); regmatch_list_free (&prev_match); free_fail_stack_return (fs); return REG_ESPACE; } cur_node = pop_fail_stack (fs, &idx, nmatch, pmatch, prev_idx_match, &eps_via_nodes); if (cur_node < 0) { re_node_set_free (&eps_via_nodes); regmatch_list_free (&prev_match); free_fail_stack_return (fs); return REG_NOMATCH; } } } re_node_set_free (&eps_via_nodes); regmatch_list_free (&prev_match); return free_fail_stack_return (fs); } static reg_errcode_t free_fail_stack_return (struct re_fail_stack_t *fs) { if (fs) { Idx fs_idx; for (fs_idx = 0; fs_idx < fs->num; ++fs_idx) { re_node_set_free (&fs->stack[fs_idx].eps_via_nodes); re_free (fs->stack[fs_idx].regs); } re_free (fs->stack); } return REG_NOERROR; } static void update_regs (const re_dfa_t *dfa, regmatch_t *pmatch, regmatch_t *prev_idx_match, Idx cur_node, Idx cur_idx, Idx nmatch) { int type = dfa->nodes[cur_node].type; if (type == OP_OPEN_SUBEXP) { Idx reg_num = dfa->nodes[cur_node].opr.idx + 1; /* We are at the first node of this sub expression. */ if (reg_num < nmatch) { pmatch[reg_num].rm_so = cur_idx; pmatch[reg_num].rm_eo = -1; } } else if (type == OP_CLOSE_SUBEXP) { /* We are at the last node of this sub expression. */ Idx reg_num = dfa->nodes[cur_node].opr.idx + 1; if (reg_num < nmatch) { if (pmatch[reg_num].rm_so < cur_idx) { pmatch[reg_num].rm_eo = cur_idx; /* This is a non-empty match or we are not inside an optional subexpression. Accept this right away. */ memcpy (prev_idx_match, pmatch, sizeof (regmatch_t) * nmatch); } else { if (dfa->nodes[cur_node].opt_subexp && prev_idx_match[reg_num].rm_so != -1) /* We transited through an empty match for an optional subexpression, like (a?)*, and this is not the subexp's first match. Copy back the old content of the registers so that matches of an inner subexpression are undone as well, like in ((a?))*. */ memcpy (pmatch, prev_idx_match, sizeof (regmatch_t) * nmatch); else /* We completed a subexpression, but it may be part of an optional one, so do not update PREV_IDX_MATCH. */ pmatch[reg_num].rm_eo = cur_idx; } } } } /* This function checks the STATE_LOG from the SCTX->last_str_idx to 0 and sift the nodes in each states according to the following rules. Updated state_log will be wrote to STATE_LOG. Rules: We throw away the Node 'a' in the STATE_LOG[STR_IDX] if... 1. When STR_IDX == MATCH_LAST(the last index in the state_log): If 'a' isn't the LAST_NODE and 'a' can't epsilon transit to the LAST_NODE, we throw away the node 'a'. 2. When 0 <= STR_IDX < MATCH_LAST and 'a' accepts string 's' and transit to 'b': i. If 'b' isn't in the STATE_LOG[STR_IDX+strlen('s')], we throw away the node 'a'. ii. If 'b' is in the STATE_LOG[STR_IDX+strlen('s')] but 'b' is thrown away, we throw away the node 'a'. 3. When 0 <= STR_IDX < MATCH_LAST and 'a' epsilon transit to 'b': i. If 'b' isn't in the STATE_LOG[STR_IDX], we throw away the node 'a'. ii. If 'b' is in the STATE_LOG[STR_IDX] but 'b' is thrown away, we throw away the node 'a'. */ #define STATE_NODE_CONTAINS(state,node) \ ((state) != NULL && re_node_set_contains (&(state)->nodes, node)) static reg_errcode_t sift_states_backward (const re_match_context_t *mctx, re_sift_context_t *sctx) { reg_errcode_t err; int null_cnt = 0; Idx str_idx = sctx->last_str_idx; re_node_set cur_dest; DEBUG_ASSERT (mctx->state_log != NULL && mctx->state_log[str_idx] != NULL); /* Build sifted state_log[str_idx]. It has the nodes which can epsilon transit to the last_node and the last_node itself. */ err = re_node_set_init_1 (&cur_dest, sctx->last_node); if (__glibc_unlikely (err != REG_NOERROR)) return err; err = update_cur_sifted_state (mctx, sctx, str_idx, &cur_dest); if (__glibc_unlikely (err != REG_NOERROR)) goto free_return; /* Then check each states in the state_log. */ while (str_idx > 0) { /* Update counters. */ null_cnt = (sctx->sifted_states[str_idx] == NULL) ? null_cnt + 1 : 0; if (null_cnt > mctx->max_mb_elem_len) { memset (sctx->sifted_states, '\0', sizeof (re_dfastate_t *) * str_idx); re_node_set_free (&cur_dest); return REG_NOERROR; } re_node_set_empty (&cur_dest); --str_idx; if (mctx->state_log[str_idx]) { err = build_sifted_states (mctx, sctx, str_idx, &cur_dest); if (__glibc_unlikely (err != REG_NOERROR)) goto free_return; } /* Add all the nodes which satisfy the following conditions: - It can epsilon transit to a node in CUR_DEST. - It is in CUR_SRC. And update state_log. */ err = update_cur_sifted_state (mctx, sctx, str_idx, &cur_dest); if (__glibc_unlikely (err != REG_NOERROR)) goto free_return; } err = REG_NOERROR; free_return: re_node_set_free (&cur_dest); return err; } static reg_errcode_t __attribute_warn_unused_result__ build_sifted_states (const re_match_context_t *mctx, re_sift_context_t *sctx, Idx str_idx, re_node_set *cur_dest) { const re_dfa_t *const dfa = mctx->dfa; const re_node_set *cur_src = &mctx->state_log[str_idx]->non_eps_nodes; Idx i; /* Then build the next sifted state. We build the next sifted state on 'cur_dest', and update 'sifted_states[str_idx]' with 'cur_dest'. Note: 'cur_dest' is the sifted state from 'state_log[str_idx + 1]'. 'cur_src' points the node_set of the old 'state_log[str_idx]' (with the epsilon nodes pre-filtered out). */ for (i = 0; i < cur_src->nelem; i++) { Idx prev_node = cur_src->elems[i]; int naccepted = 0; bool ok; DEBUG_ASSERT (!IS_EPSILON_NODE (dfa->nodes[prev_node].type)); /* If the node may accept "multi byte". */ if (dfa->nodes[prev_node].accept_mb) naccepted = sift_states_iter_mb (mctx, sctx, prev_node, str_idx, sctx->last_str_idx); /* We don't check backreferences here. See update_cur_sifted_state(). */ if (!naccepted && check_node_accept (mctx, dfa->nodes + prev_node, str_idx) && STATE_NODE_CONTAINS (sctx->sifted_states[str_idx + 1], dfa->nexts[prev_node])) naccepted = 1; if (naccepted == 0) continue; if (sctx->limits.nelem) { Idx to_idx = str_idx + naccepted; if (check_dst_limits (mctx, &sctx->limits, dfa->nexts[prev_node], to_idx, prev_node, str_idx)) continue; } ok = re_node_set_insert (cur_dest, prev_node); if (__glibc_unlikely (! ok)) return REG_ESPACE; } return REG_NOERROR; } /* Helper functions. */ static reg_errcode_t clean_state_log_if_needed (re_match_context_t *mctx, Idx next_state_log_idx) { Idx top = mctx->state_log_top; if ((next_state_log_idx >= mctx->input.bufs_len && mctx->input.bufs_len < mctx->input.len) || (next_state_log_idx >= mctx->input.valid_len && mctx->input.valid_len < mctx->input.len)) { reg_errcode_t err; err = extend_buffers (mctx, next_state_log_idx + 1); if (__glibc_unlikely (err != REG_NOERROR)) return err; } if (top < next_state_log_idx) { DEBUG_ASSERT (mctx->state_log != NULL); memset (mctx->state_log + top + 1, '\0', sizeof (re_dfastate_t *) * (next_state_log_idx - top)); mctx->state_log_top = next_state_log_idx; } return REG_NOERROR; } static reg_errcode_t merge_state_array (const re_dfa_t *dfa, re_dfastate_t **dst, re_dfastate_t **src, Idx num) { Idx st_idx; reg_errcode_t err; for (st_idx = 0; st_idx < num; ++st_idx) { if (dst[st_idx] == NULL) dst[st_idx] = src[st_idx]; else if (src[st_idx] != NULL) { re_node_set merged_set; err = re_node_set_init_union (&merged_set, &dst[st_idx]->nodes, &src[st_idx]->nodes); if (__glibc_unlikely (err != REG_NOERROR)) return err; dst[st_idx] = re_acquire_state (&err, dfa, &merged_set); re_node_set_free (&merged_set); if (__glibc_unlikely (err != REG_NOERROR)) return err; } } return REG_NOERROR; } static reg_errcode_t update_cur_sifted_state (const re_match_context_t *mctx, re_sift_context_t *sctx, Idx str_idx, re_node_set *dest_nodes) { const re_dfa_t *const dfa = mctx->dfa; reg_errcode_t err = REG_NOERROR; const re_node_set *candidates; candidates = ((mctx->state_log[str_idx] == NULL) ? NULL : &mctx->state_log[str_idx]->nodes); if (dest_nodes->nelem == 0) sctx->sifted_states[str_idx] = NULL; else { if (candidates) { /* At first, add the nodes which can epsilon transit to a node in DEST_NODE. */ err = add_epsilon_src_nodes (dfa, dest_nodes, candidates); if (__glibc_unlikely (err != REG_NOERROR)) return err; /* Then, check the limitations in the current sift_context. */ if (sctx->limits.nelem) { err = check_subexp_limits (dfa, dest_nodes, candidates, &sctx->limits, mctx->bkref_ents, str_idx); if (__glibc_unlikely (err != REG_NOERROR)) return err; } } sctx->sifted_states[str_idx] = re_acquire_state (&err, dfa, dest_nodes); if (__glibc_unlikely (err != REG_NOERROR)) return err; } if (candidates && mctx->state_log[str_idx]->has_backref) { err = sift_states_bkref (mctx, sctx, str_idx, candidates); if (__glibc_unlikely (err != REG_NOERROR)) return err; } return REG_NOERROR; } static reg_errcode_t __attribute_warn_unused_result__ add_epsilon_src_nodes (const re_dfa_t *dfa, re_node_set *dest_nodes, const re_node_set *candidates) { reg_errcode_t err = REG_NOERROR; Idx i; re_dfastate_t *state = re_acquire_state (&err, dfa, dest_nodes); if (__glibc_unlikely (err != REG_NOERROR)) return err; if (!state->inveclosure.alloc) { err = re_node_set_alloc (&state->inveclosure, dest_nodes->nelem); if (__glibc_unlikely (err != REG_NOERROR)) return REG_ESPACE; for (i = 0; i < dest_nodes->nelem; i++) { err = re_node_set_merge (&state->inveclosure, dfa->inveclosures + dest_nodes->elems[i]); if (__glibc_unlikely (err != REG_NOERROR)) return REG_ESPACE; } } return re_node_set_add_intersect (dest_nodes, candidates, &state->inveclosure); } static reg_errcode_t sub_epsilon_src_nodes (const re_dfa_t *dfa, Idx node, re_node_set *dest_nodes, const re_node_set *candidates) { Idx ecl_idx; reg_errcode_t err; re_node_set *inv_eclosure = dfa->inveclosures + node; re_node_set except_nodes; re_node_set_init_empty (&except_nodes); for (ecl_idx = 0; ecl_idx < inv_eclosure->nelem; ++ecl_idx) { Idx cur_node = inv_eclosure->elems[ecl_idx]; if (cur_node == node) continue; if (IS_EPSILON_NODE (dfa->nodes[cur_node].type)) { Idx edst1 = dfa->edests[cur_node].elems[0]; Idx edst2 = ((dfa->edests[cur_node].nelem > 1) ? dfa->edests[cur_node].elems[1] : -1); if ((!re_node_set_contains (inv_eclosure, edst1) && re_node_set_contains (dest_nodes, edst1)) || (edst2 > 0 && !re_node_set_contains (inv_eclosure, edst2) && re_node_set_contains (dest_nodes, edst2))) { err = re_node_set_add_intersect (&except_nodes, candidates, dfa->inveclosures + cur_node); if (__glibc_unlikely (err != REG_NOERROR)) { re_node_set_free (&except_nodes); return err; } } } } for (ecl_idx = 0; ecl_idx < inv_eclosure->nelem; ++ecl_idx) { Idx cur_node = inv_eclosure->elems[ecl_idx]; if (!re_node_set_contains (&except_nodes, cur_node)) { Idx idx = re_node_set_contains (dest_nodes, cur_node) - 1; re_node_set_remove_at (dest_nodes, idx); } } re_node_set_free (&except_nodes); return REG_NOERROR; } static bool check_dst_limits (const re_match_context_t *mctx, const re_node_set *limits, Idx dst_node, Idx dst_idx, Idx src_node, Idx src_idx) { const re_dfa_t *const dfa = mctx->dfa; Idx lim_idx, src_pos, dst_pos; Idx dst_bkref_idx = search_cur_bkref_entry (mctx, dst_idx); Idx src_bkref_idx = search_cur_bkref_entry (mctx, src_idx); for (lim_idx = 0; lim_idx < limits->nelem; ++lim_idx) { Idx subexp_idx; struct re_backref_cache_entry *ent; ent = mctx->bkref_ents + limits->elems[lim_idx]; subexp_idx = dfa->nodes[ent->node].opr.idx; dst_pos = check_dst_limits_calc_pos (mctx, limits->elems[lim_idx], subexp_idx, dst_node, dst_idx, dst_bkref_idx); src_pos = check_dst_limits_calc_pos (mctx, limits->elems[lim_idx], subexp_idx, src_node, src_idx, src_bkref_idx); /* In case of: <src> <dst> ( <subexp> ) ( <subexp> ) <src> <dst> ( <subexp1> <src> <subexp2> <dst> <subexp3> ) */ if (src_pos == dst_pos) continue; /* This is unrelated limitation. */ else return true; } return false; } static int check_dst_limits_calc_pos_1 (const re_match_context_t *mctx, int boundaries, Idx subexp_idx, Idx from_node, Idx bkref_idx) { const re_dfa_t *const dfa = mctx->dfa; const re_node_set *eclosures = dfa->eclosures + from_node; Idx node_idx; /* Else, we are on the boundary: examine the nodes on the epsilon closure. */ for (node_idx = 0; node_idx < eclosures->nelem; ++node_idx) { Idx node = eclosures->elems[node_idx]; switch (dfa->nodes[node].type) { case OP_BACK_REF: if (bkref_idx != -1) { struct re_backref_cache_entry *ent = mctx->bkref_ents + bkref_idx; do { Idx dst; int cpos; if (ent->node != node) continue; if (subexp_idx < BITSET_WORD_BITS && !(ent->eps_reachable_subexps_map & ((bitset_word_t) 1 << subexp_idx))) continue; /* Recurse trying to reach the OP_OPEN_SUBEXP and OP_CLOSE_SUBEXP cases below. But, if the destination node is the same node as the source node, don't recurse because it would cause an infinite loop: a regex that exhibits this behavior is ()\1*\1* */ dst = dfa->edests[node].elems[0]; if (dst == from_node) { if (boundaries & 1) return -1; else /* if (boundaries & 2) */ return 0; } cpos = check_dst_limits_calc_pos_1 (mctx, boundaries, subexp_idx, dst, bkref_idx); if (cpos == -1 /* && (boundaries & 1) */) return -1; if (cpos == 0 && (boundaries & 2)) return 0; if (subexp_idx < BITSET_WORD_BITS) ent->eps_reachable_subexps_map &= ~((bitset_word_t) 1 << subexp_idx); } while (ent++->more); } break; case OP_OPEN_SUBEXP: if ((boundaries & 1) && subexp_idx == dfa->nodes[node].opr.idx) return -1; break; case OP_CLOSE_SUBEXP: if ((boundaries & 2) && subexp_idx == dfa->nodes[node].opr.idx) return 0; break; default: break; } } return (boundaries & 2) ? 1 : 0; } static int check_dst_limits_calc_pos (const re_match_context_t *mctx, Idx limit, Idx subexp_idx, Idx from_node, Idx str_idx, Idx bkref_idx) { struct re_backref_cache_entry *lim = mctx->bkref_ents + limit; int boundaries; /* If we are outside the range of the subexpression, return -1 or 1. */ if (str_idx < lim->subexp_from) return -1; if (lim->subexp_to < str_idx) return 1; /* If we are within the subexpression, return 0. */ boundaries = (str_idx == lim->subexp_from); boundaries |= (str_idx == lim->subexp_to) << 1; if (boundaries == 0) return 0; /* Else, examine epsilon closure. */ return check_dst_limits_calc_pos_1 (mctx, boundaries, subexp_idx, from_node, bkref_idx); } /* Check the limitations of sub expressions LIMITS, and remove the nodes which are against limitations from DEST_NODES. */ static reg_errcode_t check_subexp_limits (const re_dfa_t *dfa, re_node_set *dest_nodes, const re_node_set *candidates, re_node_set *limits, struct re_backref_cache_entry *bkref_ents, Idx str_idx) { reg_errcode_t err; Idx node_idx, lim_idx; for (lim_idx = 0; lim_idx < limits->nelem; ++lim_idx) { Idx subexp_idx; struct re_backref_cache_entry *ent; ent = bkref_ents + limits->elems[lim_idx]; if (str_idx <= ent->subexp_from || ent->str_idx < str_idx) continue; /* This is unrelated limitation. */ subexp_idx = dfa->nodes[ent->node].opr.idx; if (ent->subexp_to == str_idx) { Idx ops_node = -1; Idx cls_node = -1; for (node_idx = 0; node_idx < dest_nodes->nelem; ++node_idx) { Idx node = dest_nodes->elems[node_idx]; re_token_type_t type = dfa->nodes[node].type; if (type == OP_OPEN_SUBEXP && subexp_idx == dfa->nodes[node].opr.idx) ops_node = node; else if (type == OP_CLOSE_SUBEXP && subexp_idx == dfa->nodes[node].opr.idx) cls_node = node; } /* Check the limitation of the open subexpression. */ /* Note that (ent->subexp_to = str_idx != ent->subexp_from). */ if (ops_node >= 0) { err = sub_epsilon_src_nodes (dfa, ops_node, dest_nodes, candidates); if (__glibc_unlikely (err != REG_NOERROR)) return err; } /* Check the limitation of the close subexpression. */ if (cls_node >= 0) for (node_idx = 0; node_idx < dest_nodes->nelem; ++node_idx) { Idx node = dest_nodes->elems[node_idx]; if (!re_node_set_contains (dfa->inveclosures + node, cls_node) && !re_node_set_contains (dfa->eclosures + node, cls_node)) { /* It is against this limitation. Remove it form the current sifted state. */ err = sub_epsilon_src_nodes (dfa, node, dest_nodes, candidates); if (__glibc_unlikely (err != REG_NOERROR)) return err; --node_idx; } } } else /* (ent->subexp_to != str_idx) */ { for (node_idx = 0; node_idx < dest_nodes->nelem; ++node_idx) { Idx node = dest_nodes->elems[node_idx]; re_token_type_t type = dfa->nodes[node].type; if (type == OP_CLOSE_SUBEXP || type == OP_OPEN_SUBEXP) { if (subexp_idx != dfa->nodes[node].opr.idx) continue; /* It is against this limitation. Remove it form the current sifted state. */ err = sub_epsilon_src_nodes (dfa, node, dest_nodes, candidates); if (__glibc_unlikely (err != REG_NOERROR)) return err; } } } } return REG_NOERROR; } static reg_errcode_t __attribute_warn_unused_result__ sift_states_bkref (const re_match_context_t *mctx, re_sift_context_t *sctx, Idx str_idx, const re_node_set *candidates) { const re_dfa_t *const dfa = mctx->dfa; reg_errcode_t err; Idx node_idx, node; re_sift_context_t local_sctx; Idx first_idx = search_cur_bkref_entry (mctx, str_idx); if (first_idx == -1) return REG_NOERROR; local_sctx.sifted_states = NULL; /* Mark that it hasn't been initialized. */ for (node_idx = 0; node_idx < candidates->nelem; ++node_idx) { Idx enabled_idx; re_token_type_t type; struct re_backref_cache_entry *entry; node = candidates->elems[node_idx]; type = dfa->nodes[node].type; /* Avoid infinite loop for the REs like "()\1+". */ if (node == sctx->last_node && str_idx == sctx->last_str_idx) continue; if (type != OP_BACK_REF) continue; entry = mctx->bkref_ents + first_idx; enabled_idx = first_idx; do { Idx subexp_len; Idx to_idx; Idx dst_node; bool ok; re_dfastate_t *cur_state; if (entry->node != node) continue; subexp_len = entry->subexp_to - entry->subexp_from; to_idx = str_idx + subexp_len; dst_node = (subexp_len ? dfa->nexts[node] : dfa->edests[node].elems[0]); if (to_idx > sctx->last_str_idx || sctx->sifted_states[to_idx] == NULL || !STATE_NODE_CONTAINS (sctx->sifted_states[to_idx], dst_node) || check_dst_limits (mctx, &sctx->limits, node, str_idx, dst_node, to_idx)) continue; if (local_sctx.sifted_states == NULL) { local_sctx = *sctx; err = re_node_set_init_copy (&local_sctx.limits, &sctx->limits); if (__glibc_unlikely (err != REG_NOERROR)) goto free_return; } local_sctx.last_node = node; local_sctx.last_str_idx = str_idx; ok = re_node_set_insert (&local_sctx.limits, enabled_idx); if (__glibc_unlikely (! ok)) { err = REG_ESPACE; goto free_return; } cur_state = local_sctx.sifted_states[str_idx]; err = sift_states_backward (mctx, &local_sctx); if (__glibc_unlikely (err != REG_NOERROR)) goto free_return; if (sctx->limited_states != NULL) { err = merge_state_array (dfa, sctx->limited_states, local_sctx.sifted_states, str_idx + 1); if (__glibc_unlikely (err != REG_NOERROR)) goto free_return; } local_sctx.sifted_states[str_idx] = cur_state; re_node_set_remove (&local_sctx.limits, enabled_idx); /* mctx->bkref_ents may have changed, reload the pointer. */ entry = mctx->bkref_ents + enabled_idx; } while (enabled_idx++, entry++->more); } err = REG_NOERROR; free_return: if (local_sctx.sifted_states != NULL) { re_node_set_free (&local_sctx.limits); } return err; } static int sift_states_iter_mb (const re_match_context_t *mctx, re_sift_context_t *sctx, Idx node_idx, Idx str_idx, Idx max_str_idx) { const re_dfa_t *const dfa = mctx->dfa; int naccepted; /* Check the node can accept "multi byte". */ naccepted = check_node_accept_bytes (dfa, node_idx, &mctx->input, str_idx); if (naccepted > 0 && str_idx + naccepted <= max_str_idx && !STATE_NODE_CONTAINS (sctx->sifted_states[str_idx + naccepted], dfa->nexts[node_idx])) /* The node can't accept the "multi byte", or the destination was already thrown away, then the node couldn't accept the current input "multi byte". */ naccepted = 0; /* Otherwise, it is sure that the node could accept 'naccepted' bytes input. */ return naccepted; } /* Functions for state transition. */ /* Return the next state to which the current state STATE will transit by accepting the current input byte, and update STATE_LOG if necessary. Return NULL on failure. If STATE can accept a multibyte char/collating element/back reference update the destination of STATE_LOG. */ static re_dfastate_t * __attribute_warn_unused_result__ transit_state (reg_errcode_t *err, re_match_context_t *mctx, re_dfastate_t *state) { re_dfastate_t **trtable; unsigned char ch; /* If the current state can accept multibyte. */ if (__glibc_unlikely (state->accept_mb)) { *err = transit_state_mb (mctx, state); if (__glibc_unlikely (*err != REG_NOERROR)) return NULL; } /* Then decide the next state with the single byte. */ #if 0 if (0) /* don't use transition table */ return transit_state_sb (err, mctx, state); #endif /* Use transition table */ ch = re_string_fetch_byte (&mctx->input); for (;;) { trtable = state->trtable; if (__glibc_likely (trtable != NULL)) return trtable[ch]; trtable = state->word_trtable; if (__glibc_likely (trtable != NULL)) { unsigned int context; context = re_string_context_at (&mctx->input, re_string_cur_idx (&mctx->input) - 1, mctx->eflags); if (IS_WORD_CONTEXT (context)) return trtable[ch + SBC_MAX]; else return trtable[ch]; } if (!build_trtable (mctx->dfa, state)) { *err = REG_ESPACE; return NULL; } /* Retry, we now have a transition table. */ } } /* Update the state_log if we need */ static re_dfastate_t * merge_state_with_log (reg_errcode_t *err, re_match_context_t *mctx, re_dfastate_t *next_state) { const re_dfa_t *const dfa = mctx->dfa; Idx cur_idx = re_string_cur_idx (&mctx->input); if (cur_idx > mctx->state_log_top) { mctx->state_log[cur_idx] = next_state; mctx->state_log_top = cur_idx; } else if (mctx->state_log[cur_idx] == 0) { mctx->state_log[cur_idx] = next_state; } else { re_dfastate_t *pstate; unsigned int context; re_node_set next_nodes, *log_nodes, *table_nodes = NULL; /* If (state_log[cur_idx] != 0), it implies that cur_idx is the destination of a multibyte char/collating element/ back reference. Then the next state is the union set of these destinations and the results of the transition table. */ pstate = mctx->state_log[cur_idx]; log_nodes = pstate->entrance_nodes; if (next_state != NULL) { table_nodes = next_state->entrance_nodes; *err = re_node_set_init_union (&next_nodes, table_nodes, log_nodes); if (__glibc_unlikely (*err != REG_NOERROR)) return NULL; } else next_nodes = *log_nodes; /* Note: We already add the nodes of the initial state, then we don't need to add them here. */ context = re_string_context_at (&mctx->input, re_string_cur_idx (&mctx->input) - 1, mctx->eflags); next_state = mctx->state_log[cur_idx] = re_acquire_state_context (err, dfa, &next_nodes, context); /* We don't need to check errors here, since the return value of this function is next_state and ERR is already set. */ if (table_nodes != NULL) re_node_set_free (&next_nodes); } if (__glibc_unlikely (dfa->nbackref) && next_state != NULL) { /* Check OP_OPEN_SUBEXP in the current state in case that we use them later. We must check them here, since the back references in the next state might use them. */ *err = check_subexp_matching_top (mctx, &next_state->nodes, cur_idx); if (__glibc_unlikely (*err != REG_NOERROR)) return NULL; /* If the next state has back references. */ if (next_state->has_backref) { *err = transit_state_bkref (mctx, &next_state->nodes); if (__glibc_unlikely (*err != REG_NOERROR)) return NULL; next_state = mctx->state_log[cur_idx]; } } return next_state; } /* Skip bytes in the input that correspond to part of a multi-byte match, then look in the log for a state from which to restart matching. */ static re_dfastate_t * find_recover_state (reg_errcode_t *err, re_match_context_t *mctx) { re_dfastate_t *cur_state; do { Idx max = mctx->state_log_top; Idx cur_str_idx = re_string_cur_idx (&mctx->input); do { if (++cur_str_idx > max) return NULL; re_string_skip_bytes (&mctx->input, 1); } while (mctx->state_log[cur_str_idx] == NULL); cur_state = merge_state_with_log (err, mctx, NULL); } while (*err == REG_NOERROR && cur_state == NULL); return cur_state; } /* Helper functions for transit_state. */ /* From the node set CUR_NODES, pick up the nodes whose types are OP_OPEN_SUBEXP and which have corresponding back references in the regular expression. And register them to use them later for evaluating the corresponding back references. */ static reg_errcode_t check_subexp_matching_top (re_match_context_t *mctx, re_node_set *cur_nodes, Idx str_idx) { const re_dfa_t *const dfa = mctx->dfa; Idx node_idx; reg_errcode_t err; /* TODO: This isn't efficient. Because there might be more than one nodes whose types are OP_OPEN_SUBEXP and whose index is SUBEXP_IDX, we must check all nodes. E.g. RE: (a){2} */ for (node_idx = 0; node_idx < cur_nodes->nelem; ++node_idx) { Idx node = cur_nodes->elems[node_idx]; if (dfa->nodes[node].type == OP_OPEN_SUBEXP && dfa->nodes[node].opr.idx < BITSET_WORD_BITS && (dfa->used_bkref_map & ((bitset_word_t) 1 << dfa->nodes[node].opr.idx))) { err = match_ctx_add_subtop (mctx, node, str_idx); if (__glibc_unlikely (err != REG_NOERROR)) return err; } } return REG_NOERROR; } #if 0 /* Return the next state to which the current state STATE will transit by accepting the current input byte. Return NULL on failure. */ static re_dfastate_t * transit_state_sb (reg_errcode_t *err, re_match_context_t *mctx, re_dfastate_t *state) { const re_dfa_t *const dfa = mctx->dfa; re_node_set next_nodes; re_dfastate_t *next_state; Idx node_cnt, cur_str_idx = re_string_cur_idx (&mctx->input); unsigned int context; *err = re_node_set_alloc (&next_nodes, state->nodes.nelem + 1); if (__glibc_unlikely (*err != REG_NOERROR)) return NULL; for (node_cnt = 0; node_cnt < state->nodes.nelem; ++node_cnt) { Idx cur_node = state->nodes.elems[node_cnt]; if (check_node_accept (mctx, dfa->nodes + cur_node, cur_str_idx)) { *err = re_node_set_merge (&next_nodes, dfa->eclosures + dfa->nexts[cur_node]); if (__glibc_unlikely (*err != REG_NOERROR)) { re_node_set_free (&next_nodes); return NULL; } } } context = re_string_context_at (&mctx->input, cur_str_idx, mctx->eflags); next_state = re_acquire_state_context (err, dfa, &next_nodes, context); /* We don't need to check errors here, since the return value of this function is next_state and ERR is already set. */ re_node_set_free (&next_nodes); re_string_skip_bytes (&mctx->input, 1); return next_state; } #endif static reg_errcode_t transit_state_mb (re_match_context_t *mctx, re_dfastate_t *pstate) { const re_dfa_t *const dfa = mctx->dfa; reg_errcode_t err; Idx i; for (i = 0; i < pstate->nodes.nelem; ++i) { re_node_set dest_nodes, *new_nodes; Idx cur_node_idx = pstate->nodes.elems[i]; int naccepted; Idx dest_idx; unsigned int context; re_dfastate_t *dest_state; if (!dfa->nodes[cur_node_idx].accept_mb) continue; if (dfa->nodes[cur_node_idx].constraint) { context = re_string_context_at (&mctx->input, re_string_cur_idx (&mctx->input), mctx->eflags); if (NOT_SATISFY_NEXT_CONSTRAINT (dfa->nodes[cur_node_idx].constraint, context)) continue; } /* How many bytes the node can accept? */ naccepted = check_node_accept_bytes (dfa, cur_node_idx, &mctx->input, re_string_cur_idx (&mctx->input)); if (naccepted == 0) continue; /* The node can accepts 'naccepted' bytes. */ dest_idx = re_string_cur_idx (&mctx->input) + naccepted; mctx->max_mb_elem_len = ((mctx->max_mb_elem_len < naccepted) ? naccepted : mctx->max_mb_elem_len); err = clean_state_log_if_needed (mctx, dest_idx); if (__glibc_unlikely (err != REG_NOERROR)) return err; DEBUG_ASSERT (dfa->nexts[cur_node_idx] != -1); new_nodes = dfa->eclosures + dfa->nexts[cur_node_idx]; dest_state = mctx->state_log[dest_idx]; if (dest_state == NULL) dest_nodes = *new_nodes; else { err = re_node_set_init_union (&dest_nodes, dest_state->entrance_nodes, new_nodes); if (__glibc_unlikely (err != REG_NOERROR)) return err; } context = re_string_context_at (&mctx->input, dest_idx - 1, mctx->eflags); mctx->state_log[dest_idx] = re_acquire_state_context (&err, dfa, &dest_nodes, context); if (dest_state != NULL) re_node_set_free (&dest_nodes); if (__glibc_unlikely (mctx->state_log[dest_idx] == NULL && err != REG_NOERROR)) return err; } return REG_NOERROR; } static reg_errcode_t transit_state_bkref (re_match_context_t *mctx, const re_node_set *nodes) { const re_dfa_t *const dfa = mctx->dfa; reg_errcode_t err; Idx i; Idx cur_str_idx = re_string_cur_idx (&mctx->input); for (i = 0; i < nodes->nelem; ++i) { Idx dest_str_idx, prev_nelem, bkc_idx; Idx node_idx = nodes->elems[i]; unsigned int context; const re_token_t *node = dfa->nodes + node_idx; re_node_set *new_dest_nodes; /* Check whether 'node' is a backreference or not. */ if (node->type != OP_BACK_REF) continue; if (node->constraint) { context = re_string_context_at (&mctx->input, cur_str_idx, mctx->eflags); if (NOT_SATISFY_NEXT_CONSTRAINT (node->constraint, context)) continue; } /* 'node' is a backreference. Check the substring which the substring matched. */ bkc_idx = mctx->nbkref_ents; err = get_subexp (mctx, node_idx, cur_str_idx); if (__glibc_unlikely (err != REG_NOERROR)) goto free_return; /* And add the epsilon closures (which is 'new_dest_nodes') of the backreference to appropriate state_log. */ DEBUG_ASSERT (dfa->nexts[node_idx] != -1); for (; bkc_idx < mctx->nbkref_ents; ++bkc_idx) { Idx subexp_len; re_dfastate_t *dest_state; struct re_backref_cache_entry *bkref_ent; bkref_ent = mctx->bkref_ents + bkc_idx; if (bkref_ent->node != node_idx || bkref_ent->str_idx != cur_str_idx) continue; subexp_len = bkref_ent->subexp_to - bkref_ent->subexp_from; new_dest_nodes = (subexp_len == 0 ? dfa->eclosures + dfa->edests[node_idx].elems[0] : dfa->eclosures + dfa->nexts[node_idx]); dest_str_idx = (cur_str_idx + bkref_ent->subexp_to - bkref_ent->subexp_from); context = re_string_context_at (&mctx->input, dest_str_idx - 1, mctx->eflags); dest_state = mctx->state_log[dest_str_idx]; prev_nelem = ((mctx->state_log[cur_str_idx] == NULL) ? 0 : mctx->state_log[cur_str_idx]->nodes.nelem); /* Add 'new_dest_node' to state_log. */ if (dest_state == NULL) { mctx->state_log[dest_str_idx] = re_acquire_state_context (&err, dfa, new_dest_nodes, context); if (__glibc_unlikely (mctx->state_log[dest_str_idx] == NULL && err != REG_NOERROR)) goto free_return; } else { re_node_set dest_nodes; err = re_node_set_init_union (&dest_nodes, dest_state->entrance_nodes, new_dest_nodes); if (__glibc_unlikely (err != REG_NOERROR)) { re_node_set_free (&dest_nodes); goto free_return; } mctx->state_log[dest_str_idx] = re_acquire_state_context (&err, dfa, &dest_nodes, context); re_node_set_free (&dest_nodes); if (__glibc_unlikely (mctx->state_log[dest_str_idx] == NULL && err != REG_NOERROR)) goto free_return; } /* We need to check recursively if the backreference can epsilon transit. */ if (subexp_len == 0 && mctx->state_log[cur_str_idx]->nodes.nelem > prev_nelem) { err = check_subexp_matching_top (mctx, new_dest_nodes, cur_str_idx); if (__glibc_unlikely (err != REG_NOERROR)) goto free_return; err = transit_state_bkref (mctx, new_dest_nodes); if (__glibc_unlikely (err != REG_NOERROR)) goto free_return; } } } err = REG_NOERROR; free_return: return err; } /* Enumerate all the candidates which the backreference BKREF_NODE can match at BKREF_STR_IDX, and register them by match_ctx_add_entry(). Note that we might collect inappropriate candidates here. However, the cost of checking them strictly here is too high, then we delay these checking for prune_impossible_nodes(). */ static reg_errcode_t __attribute_warn_unused_result__ get_subexp (re_match_context_t *mctx, Idx bkref_node, Idx bkref_str_idx) { const re_dfa_t *const dfa = mctx->dfa; Idx subexp_num, sub_top_idx; const char *buf = (const char *) re_string_get_buffer (&mctx->input); /* Return if we have already checked BKREF_NODE at BKREF_STR_IDX. */ Idx cache_idx = search_cur_bkref_entry (mctx, bkref_str_idx); if (cache_idx != -1) { const struct re_backref_cache_entry *entry = mctx->bkref_ents + cache_idx; do if (entry->node == bkref_node) return REG_NOERROR; /* We already checked it. */ while (entry++->more); } subexp_num = dfa->nodes[bkref_node].opr.idx; /* For each sub expression */ for (sub_top_idx = 0; sub_top_idx < mctx->nsub_tops; ++sub_top_idx) { reg_errcode_t err; re_sub_match_top_t *sub_top = mctx->sub_tops[sub_top_idx]; re_sub_match_last_t *sub_last; Idx sub_last_idx, sl_str, bkref_str_off; if (dfa->nodes[sub_top->node].opr.idx != subexp_num) continue; /* It isn't related. */ sl_str = sub_top->str_idx; bkref_str_off = bkref_str_idx; /* At first, check the last node of sub expressions we already evaluated. */ for (sub_last_idx = 0; sub_last_idx < sub_top->nlasts; ++sub_last_idx) { regoff_t sl_str_diff; sub_last = sub_top->lasts[sub_last_idx]; sl_str_diff = sub_last->str_idx - sl_str; /* The matched string by the sub expression match with the substring at the back reference? */ if (sl_str_diff > 0) { if (__glibc_unlikely (bkref_str_off + sl_str_diff > mctx->input.valid_len)) { /* Not enough chars for a successful match. */ if (bkref_str_off + sl_str_diff > mctx->input.len) break; err = clean_state_log_if_needed (mctx, bkref_str_off + sl_str_diff); if (__glibc_unlikely (err != REG_NOERROR)) return err; buf = (const char *) re_string_get_buffer (&mctx->input); } if (memcmp (buf + bkref_str_off, buf + sl_str, sl_str_diff) != 0) /* We don't need to search this sub expression any more. */ break; } bkref_str_off += sl_str_diff; sl_str += sl_str_diff; err = get_subexp_sub (mctx, sub_top, sub_last, bkref_node, bkref_str_idx); /* Reload buf, since the preceding call might have reallocated the buffer. */ buf = (const char *) re_string_get_buffer (&mctx->input); if (err == REG_NOMATCH) continue; if (__glibc_unlikely (err != REG_NOERROR)) return err; } if (sub_last_idx < sub_top->nlasts) continue; if (sub_last_idx > 0) ++sl_str; /* Then, search for the other last nodes of the sub expression. */ for (; sl_str <= bkref_str_idx; ++sl_str) { Idx cls_node; regoff_t sl_str_off; const re_node_set *nodes; sl_str_off = sl_str - sub_top->str_idx; /* The matched string by the sub expression match with the substring at the back reference? */ if (sl_str_off > 0) { if (__glibc_unlikely (bkref_str_off >= mctx->input.valid_len)) { /* If we are at the end of the input, we cannot match. */ if (bkref_str_off >= mctx->input.len) break; err = extend_buffers (mctx, bkref_str_off + 1); if (__glibc_unlikely (err != REG_NOERROR)) return err; buf = (const char *) re_string_get_buffer (&mctx->input); } if (buf [bkref_str_off++] != buf[sl_str - 1]) break; /* We don't need to search this sub expression any more. */ } if (mctx->state_log[sl_str] == NULL) continue; /* Does this state have a ')' of the sub expression? */ nodes = &mctx->state_log[sl_str]->nodes; cls_node = find_subexp_node (dfa, nodes, subexp_num, OP_CLOSE_SUBEXP); if (cls_node == -1) continue; /* No. */ if (sub_top->path == NULL) { sub_top->path = calloc (sizeof (state_array_t), sl_str - sub_top->str_idx + 1); if (sub_top->path == NULL) return REG_ESPACE; } /* Can the OP_OPEN_SUBEXP node arrive the OP_CLOSE_SUBEXP node in the current context? */ err = check_arrival (mctx, sub_top->path, sub_top->node, sub_top->str_idx, cls_node, sl_str, OP_CLOSE_SUBEXP); if (err == REG_NOMATCH) continue; if (__glibc_unlikely (err != REG_NOERROR)) return err; sub_last = match_ctx_add_sublast (sub_top, cls_node, sl_str); if (__glibc_unlikely (sub_last == NULL)) return REG_ESPACE; err = get_subexp_sub (mctx, sub_top, sub_last, bkref_node, bkref_str_idx); buf = (const char *) re_string_get_buffer (&mctx->input); if (err == REG_NOMATCH) continue; if (__glibc_unlikely (err != REG_NOERROR)) return err; } } return REG_NOERROR; } /* Helper functions for get_subexp(). */ /* Check SUB_LAST can arrive to the back reference BKREF_NODE at BKREF_STR. If it can arrive, register the sub expression expressed with SUB_TOP and SUB_LAST. */ static reg_errcode_t get_subexp_sub (re_match_context_t *mctx, const re_sub_match_top_t *sub_top, re_sub_match_last_t *sub_last, Idx bkref_node, Idx bkref_str) { reg_errcode_t err; Idx to_idx; /* Can the subexpression arrive the back reference? */ err = check_arrival (mctx, &sub_last->path, sub_last->node, sub_last->str_idx, bkref_node, bkref_str, OP_OPEN_SUBEXP); if (err != REG_NOERROR) return err; err = match_ctx_add_entry (mctx, bkref_node, bkref_str, sub_top->str_idx, sub_last->str_idx); if (__glibc_unlikely (err != REG_NOERROR)) return err; to_idx = bkref_str + sub_last->str_idx - sub_top->str_idx; return clean_state_log_if_needed (mctx, to_idx); } /* Find the first node which is '(' or ')' and whose index is SUBEXP_IDX. Search '(' if FL_OPEN, or search ')' otherwise. TODO: This function isn't efficient... Because there might be more than one nodes whose types are OP_OPEN_SUBEXP and whose index is SUBEXP_IDX, we must check all nodes. E.g. RE: (a){2} */ static Idx find_subexp_node (const re_dfa_t *dfa, const re_node_set *nodes, Idx subexp_idx, int type) { Idx cls_idx; for (cls_idx = 0; cls_idx < nodes->nelem; ++cls_idx) { Idx cls_node = nodes->elems[cls_idx]; const re_token_t *node = dfa->nodes + cls_node; if (node->type == type && node->opr.idx == subexp_idx) return cls_node; } return -1; } /* Check whether the node TOP_NODE at TOP_STR can arrive to the node LAST_NODE at LAST_STR. We record the path onto PATH since it will be heavily reused. Return REG_NOERROR if it can arrive, REG_NOMATCH if it cannot, REG_ESPACE if memory is exhausted. */ static reg_errcode_t __attribute_warn_unused_result__ check_arrival (re_match_context_t *mctx, state_array_t *path, Idx top_node, Idx top_str, Idx last_node, Idx last_str, int type) { const re_dfa_t *const dfa = mctx->dfa; reg_errcode_t err = REG_NOERROR; Idx subexp_num, backup_cur_idx, str_idx, null_cnt; re_dfastate_t *cur_state = NULL; re_node_set *cur_nodes, next_nodes; re_dfastate_t **backup_state_log; unsigned int context; subexp_num = dfa->nodes[top_node].opr.idx; /* Extend the buffer if we need. */ if (__glibc_unlikely (path->alloc < last_str + mctx->max_mb_elem_len + 1)) { re_dfastate_t **new_array; Idx old_alloc = path->alloc; Idx incr_alloc = last_str + mctx->max_mb_elem_len + 1; Idx new_alloc; if (__glibc_unlikely (IDX_MAX - old_alloc < incr_alloc)) return REG_ESPACE; new_alloc = old_alloc + incr_alloc; if (__glibc_unlikely (SIZE_MAX / sizeof (re_dfastate_t *) < new_alloc)) return REG_ESPACE; new_array = re_realloc (path->array, re_dfastate_t *, new_alloc); if (__glibc_unlikely (new_array == NULL)) return REG_ESPACE; path->array = new_array; path->alloc = new_alloc; memset (new_array + old_alloc, '\0', sizeof (re_dfastate_t *) * (path->alloc - old_alloc)); } str_idx = path->next_idx ? path->next_idx : top_str; /* Temporary modify MCTX. */ backup_state_log = mctx->state_log; backup_cur_idx = mctx->input.cur_idx; mctx->state_log = path->array; mctx->input.cur_idx = str_idx; /* Setup initial node set. */ context = re_string_context_at (&mctx->input, str_idx - 1, mctx->eflags); if (str_idx == top_str) { err = re_node_set_init_1 (&next_nodes, top_node); if (__glibc_unlikely (err != REG_NOERROR)) return err; err = check_arrival_expand_ecl (dfa, &next_nodes, subexp_num, type); if (__glibc_unlikely (err != REG_NOERROR)) { re_node_set_free (&next_nodes); return err; } } else { cur_state = mctx->state_log[str_idx]; if (cur_state && cur_state->has_backref) { err = re_node_set_init_copy (&next_nodes, &cur_state->nodes); if (__glibc_unlikely (err != REG_NOERROR)) return err; } else re_node_set_init_empty (&next_nodes); } if (str_idx == top_str || (cur_state && cur_state->has_backref)) { if (next_nodes.nelem) { err = expand_bkref_cache (mctx, &next_nodes, str_idx, subexp_num, type); if (__glibc_unlikely (err != REG_NOERROR)) { re_node_set_free (&next_nodes); return err; } } cur_state = re_acquire_state_context (&err, dfa, &next_nodes, context); if (__glibc_unlikely (cur_state == NULL && err != REG_NOERROR)) { re_node_set_free (&next_nodes); return err; } mctx->state_log[str_idx] = cur_state; } for (null_cnt = 0; str_idx < last_str && null_cnt <= mctx->max_mb_elem_len;) { re_node_set_empty (&next_nodes); if (mctx->state_log[str_idx + 1]) { err = re_node_set_merge (&next_nodes, &mctx->state_log[str_idx + 1]->nodes); if (__glibc_unlikely (err != REG_NOERROR)) { re_node_set_free (&next_nodes); return err; } } if (cur_state) { err = check_arrival_add_next_nodes (mctx, str_idx, &cur_state->non_eps_nodes, &next_nodes); if (__glibc_unlikely (err != REG_NOERROR)) { re_node_set_free (&next_nodes); return err; } } ++str_idx; if (next_nodes.nelem) { err = check_arrival_expand_ecl (dfa, &next_nodes, subexp_num, type); if (__glibc_unlikely (err != REG_NOERROR)) { re_node_set_free (&next_nodes); return err; } err = expand_bkref_cache (mctx, &next_nodes, str_idx, subexp_num, type); if (__glibc_unlikely (err != REG_NOERROR)) { re_node_set_free (&next_nodes); return err; } } context = re_string_context_at (&mctx->input, str_idx - 1, mctx->eflags); cur_state = re_acquire_state_context (&err, dfa, &next_nodes, context); if (__glibc_unlikely (cur_state == NULL && err != REG_NOERROR)) { re_node_set_free (&next_nodes); return err; } mctx->state_log[str_idx] = cur_state; null_cnt = cur_state == NULL ? null_cnt + 1 : 0; } re_node_set_free (&next_nodes); cur_nodes = (mctx->state_log[last_str] == NULL ? NULL : &mctx->state_log[last_str]->nodes); path->next_idx = str_idx; /* Fix MCTX. */ mctx->state_log = backup_state_log; mctx->input.cur_idx = backup_cur_idx; /* Then check the current node set has the node LAST_NODE. */ if (cur_nodes != NULL && re_node_set_contains (cur_nodes, last_node)) return REG_NOERROR; return REG_NOMATCH; } /* Helper functions for check_arrival. */ /* Calculate the destination nodes of CUR_NODES at STR_IDX, and append them to NEXT_NODES. TODO: This function is similar to the functions transit_state*(), however this function has many additional works. Can't we unify them? */ static reg_errcode_t __attribute_warn_unused_result__ check_arrival_add_next_nodes (re_match_context_t *mctx, Idx str_idx, re_node_set *cur_nodes, re_node_set *next_nodes) { const re_dfa_t *const dfa = mctx->dfa; bool ok; Idx cur_idx; reg_errcode_t err = REG_NOERROR; re_node_set union_set; re_node_set_init_empty (&union_set); for (cur_idx = 0; cur_idx < cur_nodes->nelem; ++cur_idx) { int naccepted = 0; Idx cur_node = cur_nodes->elems[cur_idx]; DEBUG_ASSERT (!IS_EPSILON_NODE (dfa->nodes[cur_node].type)); /* If the node may accept "multi byte". */ if (dfa->nodes[cur_node].accept_mb) { naccepted = check_node_accept_bytes (dfa, cur_node, &mctx->input, str_idx); if (naccepted > 1) { re_dfastate_t *dest_state; Idx next_node = dfa->nexts[cur_node]; Idx next_idx = str_idx + naccepted; dest_state = mctx->state_log[next_idx]; re_node_set_empty (&union_set); if (dest_state) { err = re_node_set_merge (&union_set, &dest_state->nodes); if (__glibc_unlikely (err != REG_NOERROR)) { re_node_set_free (&union_set); return err; } } ok = re_node_set_insert (&union_set, next_node); if (__glibc_unlikely (! ok)) { re_node_set_free (&union_set); return REG_ESPACE; } mctx->state_log[next_idx] = re_acquire_state (&err, dfa, &union_set); if (__glibc_unlikely (mctx->state_log[next_idx] == NULL && err != REG_NOERROR)) { re_node_set_free (&union_set); return err; } } } if (naccepted || check_node_accept (mctx, dfa->nodes + cur_node, str_idx)) { ok = re_node_set_insert (next_nodes, dfa->nexts[cur_node]); if (__glibc_unlikely (! ok)) { re_node_set_free (&union_set); return REG_ESPACE; } } } re_node_set_free (&union_set); return REG_NOERROR; } /* For all the nodes in CUR_NODES, add the epsilon closures of them to CUR_NODES, however exclude the nodes which are: - inside the sub expression whose number is EX_SUBEXP, if FL_OPEN. - out of the sub expression whose number is EX_SUBEXP, if !FL_OPEN. */ static reg_errcode_t check_arrival_expand_ecl (const re_dfa_t *dfa, re_node_set *cur_nodes, Idx ex_subexp, int type) { reg_errcode_t err; Idx idx, outside_node; re_node_set new_nodes; DEBUG_ASSERT (cur_nodes->nelem); err = re_node_set_alloc (&new_nodes, cur_nodes->nelem); if (__glibc_unlikely (err != REG_NOERROR)) return err; /* Create a new node set NEW_NODES with the nodes which are epsilon closures of the node in CUR_NODES. */ for (idx = 0; idx < cur_nodes->nelem; ++idx) { Idx cur_node = cur_nodes->elems[idx]; const re_node_set *eclosure = dfa->eclosures + cur_node; outside_node = find_subexp_node (dfa, eclosure, ex_subexp, type); if (outside_node == -1) { /* There are no problematic nodes, just merge them. */ err = re_node_set_merge (&new_nodes, eclosure); if (__glibc_unlikely (err != REG_NOERROR)) { re_node_set_free (&new_nodes); return err; } } else { /* There are problematic nodes, re-calculate incrementally. */ err = check_arrival_expand_ecl_sub (dfa, &new_nodes, cur_node, ex_subexp, type); if (__glibc_unlikely (err != REG_NOERROR)) { re_node_set_free (&new_nodes); return err; } } } re_node_set_free (cur_nodes); *cur_nodes = new_nodes; return REG_NOERROR; } /* Helper function for check_arrival_expand_ecl. Check incrementally the epsilon closure of TARGET, and if it isn't problematic append it to DST_NODES. */ static reg_errcode_t __attribute_warn_unused_result__ check_arrival_expand_ecl_sub (const re_dfa_t *dfa, re_node_set *dst_nodes, Idx target, Idx ex_subexp, int type) { Idx cur_node; for (cur_node = target; !re_node_set_contains (dst_nodes, cur_node);) { bool ok; if (dfa->nodes[cur_node].type == type && dfa->nodes[cur_node].opr.idx == ex_subexp) { if (type == OP_CLOSE_SUBEXP) { ok = re_node_set_insert (dst_nodes, cur_node); if (__glibc_unlikely (! ok)) return REG_ESPACE; } break; } ok = re_node_set_insert (dst_nodes, cur_node); if (__glibc_unlikely (! ok)) return REG_ESPACE; if (dfa->edests[cur_node].nelem == 0) break; if (dfa->edests[cur_node].nelem == 2) { reg_errcode_t err; err = check_arrival_expand_ecl_sub (dfa, dst_nodes, dfa->edests[cur_node].elems[1], ex_subexp, type); if (__glibc_unlikely (err != REG_NOERROR)) return err; } cur_node = dfa->edests[cur_node].elems[0]; } return REG_NOERROR; } /* For all the back references in the current state, calculate the destination of the back references by the appropriate entry in MCTX->BKREF_ENTS. */ static reg_errcode_t __attribute_warn_unused_result__ expand_bkref_cache (re_match_context_t *mctx, re_node_set *cur_nodes, Idx cur_str, Idx subexp_num, int type) { const re_dfa_t *const dfa = mctx->dfa; reg_errcode_t err; Idx cache_idx_start = search_cur_bkref_entry (mctx, cur_str); struct re_backref_cache_entry *ent; if (cache_idx_start == -1) return REG_NOERROR; restart: ent = mctx->bkref_ents + cache_idx_start; do { Idx to_idx, next_node; /* Is this entry ENT is appropriate? */ if (!re_node_set_contains (cur_nodes, ent->node)) continue; /* No. */ to_idx = cur_str + ent->subexp_to - ent->subexp_from; /* Calculate the destination of the back reference, and append it to MCTX->STATE_LOG. */ if (to_idx == cur_str) { /* The backreference did epsilon transit, we must re-check all the node in the current state. */ re_node_set new_dests; reg_errcode_t err2, err3; next_node = dfa->edests[ent->node].elems[0]; if (re_node_set_contains (cur_nodes, next_node)) continue; err = re_node_set_init_1 (&new_dests, next_node); err2 = check_arrival_expand_ecl (dfa, &new_dests, subexp_num, type); err3 = re_node_set_merge (cur_nodes, &new_dests); re_node_set_free (&new_dests); if (__glibc_unlikely (err != REG_NOERROR || err2 != REG_NOERROR || err3 != REG_NOERROR)) { err = (err != REG_NOERROR ? err : (err2 != REG_NOERROR ? err2 : err3)); return err; } /* TODO: It is still inefficient... */ goto restart; } else { re_node_set union_set; next_node = dfa->nexts[ent->node]; if (mctx->state_log[to_idx]) { bool ok; if (re_node_set_contains (&mctx->state_log[to_idx]->nodes, next_node)) continue; err = re_node_set_init_copy (&union_set, &mctx->state_log[to_idx]->nodes); ok = re_node_set_insert (&union_set, next_node); if (__glibc_unlikely (err != REG_NOERROR || ! ok)) { re_node_set_free (&union_set); err = err != REG_NOERROR ? err : REG_ESPACE; return err; } } else { err = re_node_set_init_1 (&union_set, next_node); if (__glibc_unlikely (err != REG_NOERROR)) return err; } mctx->state_log[to_idx] = re_acquire_state (&err, dfa, &union_set); re_node_set_free (&union_set); if (__glibc_unlikely (mctx->state_log[to_idx] == NULL && err != REG_NOERROR)) return err; } } while (ent++->more); return REG_NOERROR; } /* Build transition table for the state. Return true if successful. */ static bool __attribute_noinline__ build_trtable (const re_dfa_t *dfa, re_dfastate_t *state) { reg_errcode_t err; Idx i, j; int ch; bool need_word_trtable = false; bitset_word_t elem, mask; Idx ndests; /* Number of the destination states from 'state'. */ re_dfastate_t **trtable; re_dfastate_t *dest_states[SBC_MAX]; re_dfastate_t *dest_states_word[SBC_MAX]; re_dfastate_t *dest_states_nl[SBC_MAX]; re_node_set follows; bitset_t acceptable; /* We build DFA states which corresponds to the destination nodes from 'state'. 'dests_node[i]' represents the nodes which i-th destination state contains, and 'dests_ch[i]' represents the characters which i-th destination state accepts. */ re_node_set dests_node[SBC_MAX]; bitset_t dests_ch[SBC_MAX]; /* Initialize transition table. */ state->word_trtable = state->trtable = NULL; /* At first, group all nodes belonging to 'state' into several destinations. */ ndests = group_nodes_into_DFAstates (dfa, state, dests_node, dests_ch); if (__glibc_unlikely (ndests <= 0)) { /* Return false in case of an error, true otherwise. */ if (ndests == 0) { state->trtable = (re_dfastate_t **) calloc (sizeof (re_dfastate_t *), SBC_MAX); if (__glibc_unlikely (state->trtable == NULL)) return false; return true; } return false; } err = re_node_set_alloc (&follows, ndests + 1); if (__glibc_unlikely (err != REG_NOERROR)) { out_free: re_node_set_free (&follows); for (i = 0; i < ndests; ++i) re_node_set_free (dests_node + i); return false; } bitset_empty (acceptable); /* Then build the states for all destinations. */ for (i = 0; i < ndests; ++i) { Idx next_node; re_node_set_empty (&follows); /* Merge the follows of this destination states. */ for (j = 0; j < dests_node[i].nelem; ++j) { next_node = dfa->nexts[dests_node[i].elems[j]]; if (next_node != -1) { err = re_node_set_merge (&follows, dfa->eclosures + next_node); if (__glibc_unlikely (err != REG_NOERROR)) goto out_free; } } dest_states[i] = re_acquire_state_context (&err, dfa, &follows, 0); if (__glibc_unlikely (dest_states[i] == NULL && err != REG_NOERROR)) goto out_free; /* If the new state has context constraint, build appropriate states for these contexts. */ if (dest_states[i]->has_constraint) { dest_states_word[i] = re_acquire_state_context (&err, dfa, &follows, CONTEXT_WORD); if (__glibc_unlikely (dest_states_word[i] == NULL && err != REG_NOERROR)) goto out_free; if (dest_states[i] != dest_states_word[i] && dfa->mb_cur_max > 1) need_word_trtable = true; dest_states_nl[i] = re_acquire_state_context (&err, dfa, &follows, CONTEXT_NEWLINE); if (__glibc_unlikely (dest_states_nl[i] == NULL && err != REG_NOERROR)) goto out_free; } else { dest_states_word[i] = dest_states[i]; dest_states_nl[i] = dest_states[i]; } bitset_merge (acceptable, dests_ch[i]); } if (!__glibc_unlikely (need_word_trtable)) { /* We don't care about whether the following character is a word character, or we are in a single-byte character set so we can discern by looking at the character code: allocate a 256-entry transition table. */ trtable = state->trtable = (re_dfastate_t **) calloc (sizeof (re_dfastate_t *), SBC_MAX); if (__glibc_unlikely (trtable == NULL)) goto out_free; /* For all characters ch...: */ for (i = 0; i < BITSET_WORDS; ++i) for (ch = i * BITSET_WORD_BITS, elem = acceptable[i], mask = 1; elem; mask <<= 1, elem >>= 1, ++ch) if (__glibc_unlikely (elem & 1)) { /* There must be exactly one destination which accepts character ch. See group_nodes_into_DFAstates. */ for (j = 0; (dests_ch[j][i] & mask) == 0; ++j) ; /* j-th destination accepts the word character ch. */ if (dfa->word_char[i] & mask) trtable[ch] = dest_states_word[j]; else trtable[ch] = dest_states[j]; } } else { /* We care about whether the following character is a word character, and we are in a multi-byte character set: discern by looking at the character code: build two 256-entry transition tables, one starting at trtable[0] and one starting at trtable[SBC_MAX]. */ trtable = state->word_trtable = (re_dfastate_t **) calloc (sizeof (re_dfastate_t *), 2 * SBC_MAX); if (__glibc_unlikely (trtable == NULL)) goto out_free; /* For all characters ch...: */ for (i = 0; i < BITSET_WORDS; ++i) for (ch = i * BITSET_WORD_BITS, elem = acceptable[i], mask = 1; elem; mask <<= 1, elem >>= 1, ++ch) if (__glibc_unlikely (elem & 1)) { /* There must be exactly one destination which accepts character ch. See group_nodes_into_DFAstates. */ for (j = 0; (dests_ch[j][i] & mask) == 0; ++j) ; /* j-th destination accepts the word character ch. */ trtable[ch] = dest_states[j]; trtable[ch + SBC_MAX] = dest_states_word[j]; } } /* new line */ if (bitset_contain (acceptable, NEWLINE_CHAR)) { /* The current state accepts newline character. */ for (j = 0; j < ndests; ++j) if (bitset_contain (dests_ch[j], NEWLINE_CHAR)) { /* k-th destination accepts newline character. */ trtable[NEWLINE_CHAR] = dest_states_nl[j]; if (need_word_trtable) trtable[NEWLINE_CHAR + SBC_MAX] = dest_states_nl[j]; /* There must be only one destination which accepts newline. See group_nodes_into_DFAstates. */ break; } } re_node_set_free (&follows); for (i = 0; i < ndests; ++i) re_node_set_free (dests_node + i); return true; } /* Group all nodes belonging to STATE into several destinations. Then for all destinations, set the nodes belonging to the destination to DESTS_NODE[i] and set the characters accepted by the destination to DEST_CH[i]. Return the number of destinations if successful, -1 on internal error. */ static Idx group_nodes_into_DFAstates (const re_dfa_t *dfa, const re_dfastate_t *state, re_node_set *dests_node, bitset_t *dests_ch) { reg_errcode_t err; bool ok; Idx i, j, k; Idx ndests; /* Number of the destinations from 'state'. */ bitset_t accepts; /* Characters a node can accept. */ const re_node_set *cur_nodes = &state->nodes; bitset_empty (accepts); ndests = 0; /* For all the nodes belonging to 'state', */ for (i = 0; i < cur_nodes->nelem; ++i) { re_token_t *node = &dfa->nodes[cur_nodes->elems[i]]; re_token_type_t type = node->type; unsigned int constraint = node->constraint; /* Enumerate all single byte character this node can accept. */ if (type == CHARACTER) bitset_set (accepts, node->opr.c); else if (type == SIMPLE_BRACKET) { bitset_merge (accepts, node->opr.sbcset); } else if (type == OP_PERIOD) { if (dfa->mb_cur_max > 1) bitset_merge (accepts, dfa->sb_char); else bitset_set_all (accepts); if (!(dfa->syntax & RE_DOT_NEWLINE)) bitset_clear (accepts, '\n'); if (dfa->syntax & RE_DOT_NOT_NULL) bitset_clear (accepts, '\0'); } else if (type == OP_UTF8_PERIOD) { if (ASCII_CHARS % BITSET_WORD_BITS == 0) memset (accepts, -1, ASCII_CHARS / CHAR_BIT); else bitset_merge (accepts, utf8_sb_map); if (!(dfa->syntax & RE_DOT_NEWLINE)) bitset_clear (accepts, '\n'); if (dfa->syntax & RE_DOT_NOT_NULL) bitset_clear (accepts, '\0'); } else continue; /* Check the 'accepts' and sift the characters which are not match it the context. */ if (constraint) { if (constraint & NEXT_NEWLINE_CONSTRAINT) { bool accepts_newline = bitset_contain (accepts, NEWLINE_CHAR); bitset_empty (accepts); if (accepts_newline) bitset_set (accepts, NEWLINE_CHAR); else continue; } if (constraint & NEXT_ENDBUF_CONSTRAINT) { bitset_empty (accepts); continue; } if (constraint & NEXT_WORD_CONSTRAINT) { bitset_word_t any_set = 0; if (type == CHARACTER && !node->word_char) { bitset_empty (accepts); continue; } if (dfa->mb_cur_max > 1) for (j = 0; j < BITSET_WORDS; ++j) any_set |= (accepts[j] &= (dfa->word_char[j] | ~dfa->sb_char[j])); else for (j = 0; j < BITSET_WORDS; ++j) any_set |= (accepts[j] &= dfa->word_char[j]); if (!any_set) continue; } if (constraint & NEXT_NOTWORD_CONSTRAINT) { bitset_word_t any_set = 0; if (type == CHARACTER && node->word_char) { bitset_empty (accepts); continue; } if (dfa->mb_cur_max > 1) for (j = 0; j < BITSET_WORDS; ++j) any_set |= (accepts[j] &= ~(dfa->word_char[j] & dfa->sb_char[j])); else for (j = 0; j < BITSET_WORDS; ++j) any_set |= (accepts[j] &= ~dfa->word_char[j]); if (!any_set) continue; } } /* Then divide 'accepts' into DFA states, or create a new state. Above, we make sure that accepts is not empty. */ for (j = 0; j < ndests; ++j) { bitset_t intersec; /* Intersection sets, see below. */ bitset_t remains; /* Flags, see below. */ bitset_word_t has_intersec, not_subset, not_consumed; /* Optimization, skip if this state doesn't accept the character. */ if (type == CHARACTER && !bitset_contain (dests_ch[j], node->opr.c)) continue; /* Enumerate the intersection set of this state and 'accepts'. */ has_intersec = 0; for (k = 0; k < BITSET_WORDS; ++k) has_intersec |= intersec[k] = accepts[k] & dests_ch[j][k]; /* And skip if the intersection set is empty. */ if (!has_intersec) continue; /* Then check if this state is a subset of 'accepts'. */ not_subset = not_consumed = 0; for (k = 0; k < BITSET_WORDS; ++k) { not_subset |= remains[k] = ~accepts[k] & dests_ch[j][k]; not_consumed |= accepts[k] = accepts[k] & ~dests_ch[j][k]; } /* If this state isn't a subset of 'accepts', create a new group state, which has the 'remains'. */ if (not_subset) { bitset_copy (dests_ch[ndests], remains); bitset_copy (dests_ch[j], intersec); err = re_node_set_init_copy (dests_node + ndests, &dests_node[j]); if (__glibc_unlikely (err != REG_NOERROR)) goto error_return; ++ndests; } /* Put the position in the current group. */ ok = re_node_set_insert (&dests_node[j], cur_nodes->elems[i]); if (__glibc_unlikely (! ok)) goto error_return; /* If all characters are consumed, go to next node. */ if (!not_consumed) break; } /* Some characters remain, create a new group. */ if (j == ndests) { bitset_copy (dests_ch[ndests], accepts); err = re_node_set_init_1 (dests_node + ndests, cur_nodes->elems[i]); if (__glibc_unlikely (err != REG_NOERROR)) goto error_return; ++ndests; bitset_empty (accepts); } } assume (ndests <= SBC_MAX); return ndests; error_return: for (j = 0; j < ndests; ++j) re_node_set_free (dests_node + j); return -1; } /* Check how many bytes the node 'dfa->nodes[node_idx]' accepts. Return the number of the bytes the node accepts. STR_IDX is the current index of the input string. This function handles the nodes which can accept one character, or one collating element like '.', '[a-z]', opposite to the other nodes can only accept one byte. */ #ifdef _LIBC # include <locale/weight.h> #endif static int check_node_accept_bytes (const re_dfa_t *dfa, Idx node_idx, const re_string_t *input, Idx str_idx) { const re_token_t *node = dfa->nodes + node_idx; int char_len, elem_len; Idx i; if (__glibc_unlikely (node->type == OP_UTF8_PERIOD)) { unsigned char c = re_string_byte_at (input, str_idx), d; if (__glibc_likely (c < 0xc2)) return 0; if (str_idx + 2 > input->len) return 0; d = re_string_byte_at (input, str_idx + 1); if (c < 0xe0) return (d < 0x80 || d > 0xbf) ? 0 : 2; else if (c < 0xf0) { char_len = 3; if (c == 0xe0 && d < 0xa0) return 0; } else if (c < 0xf8) { char_len = 4; if (c == 0xf0 && d < 0x90) return 0; } else if (c < 0xfc) { char_len = 5; if (c == 0xf8 && d < 0x88) return 0; } else if (c < 0xfe) { char_len = 6; if (c == 0xfc && d < 0x84) return 0; } else return 0; if (str_idx + char_len > input->len) return 0; for (i = 1; i < char_len; ++i) { d = re_string_byte_at (input, str_idx + i); if (d < 0x80 || d > 0xbf) return 0; } return char_len; } char_len = re_string_char_size_at (input, str_idx); if (node->type == OP_PERIOD) { if (char_len <= 1) return 0; /* FIXME: I don't think this if is needed, as both '\n' and '\0' are char_len == 1. */ /* '.' accepts any one character except the following two cases. */ if ((!(dfa->syntax & RE_DOT_NEWLINE) && re_string_byte_at (input, str_idx) == '\n') || ((dfa->syntax & RE_DOT_NOT_NULL) && re_string_byte_at (input, str_idx) == '\0')) return 0; return char_len; } elem_len = re_string_elem_size_at (input, str_idx); if ((elem_len <= 1 && char_len <= 1) || char_len == 0) return 0; if (node->type == COMPLEX_BRACKET) { const re_charset_t *cset = node->opr.mbcset; #ifdef _LIBC const unsigned char *pin = ((const unsigned char *) re_string_get_buffer (input) + str_idx); Idx j; uint32_t nrules; #endif int match_len = 0; wchar_t wc = ((cset->nranges || cset->nchar_classes || cset->nmbchars) ? re_string_wchar_at (input, str_idx) : 0); /* match with multibyte character? */ for (i = 0; i < cset->nmbchars; ++i) if (wc == cset->mbchars[i]) { match_len = char_len; goto check_node_accept_bytes_match; } /* match with character_class? */ for (i = 0; i < cset->nchar_classes; ++i) { wctype_t wt = cset->char_classes[i]; if (__iswctype (wc, wt)) { match_len = char_len; goto check_node_accept_bytes_match; } } #ifdef _LIBC nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); if (nrules != 0) { unsigned int in_collseq = 0; const int32_t *table, *indirect; const unsigned char *weights, *extra; const char *collseqwc; /* match with collating_symbol? */ if (cset->ncoll_syms) extra = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_EXTRAMB); for (i = 0; i < cset->ncoll_syms; ++i) { const unsigned char *coll_sym = extra + cset->coll_syms[i]; /* Compare the length of input collating element and the length of current collating element. */ if (*coll_sym != elem_len) continue; /* Compare each bytes. */ for (j = 0; j < *coll_sym; j++) if (pin[j] != coll_sym[1 + j]) break; if (j == *coll_sym) { /* Match if every bytes is equal. */ match_len = j; goto check_node_accept_bytes_match; } } if (cset->nranges) { if (elem_len <= char_len) { collseqwc = _NL_CURRENT (LC_COLLATE, _NL_COLLATE_COLLSEQWC); in_collseq = __collseq_table_lookup (collseqwc, wc); } else in_collseq = find_collation_sequence_value (pin, elem_len); } /* match with range expression? */ /* FIXME: Implement rational ranges here, too. */ for (i = 0; i < cset->nranges; ++i) if (cset->range_starts[i] <= in_collseq && in_collseq <= cset->range_ends[i]) { match_len = elem_len; goto check_node_accept_bytes_match; } /* match with equivalence_class? */ if (cset->nequiv_classes) { const unsigned char *cp = pin; table = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEMB); weights = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_WEIGHTMB); extra = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_EXTRAMB); indirect = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_INDIRECTMB); int32_t idx = findidx (table, indirect, extra, &cp, elem_len); int32_t rule = idx >> 24; idx &= 0xffffff; if (idx > 0) { size_t weight_len = weights[idx]; for (i = 0; i < cset->nequiv_classes; ++i) { int32_t equiv_class_idx = cset->equiv_classes[i]; int32_t equiv_class_rule = equiv_class_idx >> 24; equiv_class_idx &= 0xffffff; if (weights[equiv_class_idx] == weight_len && equiv_class_rule == rule && memcmp (weights + idx + 1, weights + equiv_class_idx + 1, weight_len) == 0) { match_len = elem_len; goto check_node_accept_bytes_match; } } } } } else #endif /* _LIBC */ { /* match with range expression? */ for (i = 0; i < cset->nranges; ++i) { if (cset->range_starts[i] <= wc && wc <= cset->range_ends[i]) { match_len = char_len; goto check_node_accept_bytes_match; } } } check_node_accept_bytes_match: if (!cset->non_match) return match_len; else { if (match_len > 0) return 0; else return (elem_len > char_len) ? elem_len : char_len; } } return 0; } #ifdef _LIBC static unsigned int find_collation_sequence_value (const unsigned char *mbs, size_t mbs_len) { uint32_t nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); if (nrules == 0) { if (mbs_len == 1) { /* No valid character. Match it as a single byte character. */ const unsigned char *collseq = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_COLLSEQMB); return collseq[mbs[0]]; } return UINT_MAX; } else { int32_t idx; const unsigned char *extra = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_EXTRAMB); int32_t extrasize = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_EXTRAMB + 1) - extra; for (idx = 0; idx < extrasize;) { int mbs_cnt; bool found = false; int32_t elem_mbs_len; /* Skip the name of collating element name. */ idx = idx + extra[idx] + 1; elem_mbs_len = extra[idx++]; if (mbs_len == elem_mbs_len) { for (mbs_cnt = 0; mbs_cnt < elem_mbs_len; ++mbs_cnt) if (extra[idx + mbs_cnt] != mbs[mbs_cnt]) break; if (mbs_cnt == elem_mbs_len) /* Found the entry. */ found = true; } /* Skip the byte sequence of the collating element. */ idx += elem_mbs_len; /* Adjust for the alignment. */ idx = (idx + 3) & ~3; /* Skip the collation sequence value. */ idx += sizeof (uint32_t); /* Skip the wide char sequence of the collating element. */ idx = idx + sizeof (uint32_t) * (*(int32_t *) (extra + idx) + 1); /* If we found the entry, return the sequence value. */ if (found) return *(uint32_t *) (extra + idx); /* Skip the collation sequence value. */ idx += sizeof (uint32_t); } return UINT_MAX; } } #endif /* _LIBC */ /* Check whether the node accepts the byte which is IDX-th byte of the INPUT. */ static bool check_node_accept (const re_match_context_t *mctx, const re_token_t *node, Idx idx) { unsigned char ch; ch = re_string_byte_at (&mctx->input, idx); switch (node->type) { case CHARACTER: if (node->opr.c != ch) return false; break; case SIMPLE_BRACKET: if (!bitset_contain (node->opr.sbcset, ch)) return false; break; case OP_UTF8_PERIOD: if (ch >= ASCII_CHARS) return false; FALLTHROUGH; case OP_PERIOD: if ((ch == '\n' && !(mctx->dfa->syntax & RE_DOT_NEWLINE)) || (ch == '\0' && (mctx->dfa->syntax & RE_DOT_NOT_NULL))) return false; break; default: return false; } if (node->constraint) { /* The node has constraints. Check whether the current context satisfies the constraints. */ unsigned int context = re_string_context_at (&mctx->input, idx, mctx->eflags); if (NOT_SATISFY_NEXT_CONSTRAINT (node->constraint, context)) return false; } return true; } /* Extend the buffers, if the buffers have run out. */ static reg_errcode_t __attribute_warn_unused_result__ extend_buffers (re_match_context_t *mctx, int min_len) { reg_errcode_t ret; re_string_t *pstr = &mctx->input; /* Avoid overflow. */ if (__glibc_unlikely (MIN (IDX_MAX, SIZE_MAX / sizeof (re_dfastate_t *)) / 2 <= pstr->bufs_len)) return REG_ESPACE; /* Double the lengths of the buffers, but allocate at least MIN_LEN. */ ret = re_string_realloc_buffers (pstr, MAX (min_len, MIN (pstr->len, pstr->bufs_len * 2))); if (__glibc_unlikely (ret != REG_NOERROR)) return ret; if (mctx->state_log != NULL) { /* And double the length of state_log. */ /* XXX We have no indication of the size of this buffer. If this allocation fail we have no indication that the state_log array does not have the right size. */ re_dfastate_t **new_array = re_realloc (mctx->state_log, re_dfastate_t *, pstr->bufs_len + 1); if (__glibc_unlikely (new_array == NULL)) return REG_ESPACE; mctx->state_log = new_array; } /* Then reconstruct the buffers. */ if (pstr->icase) { if (pstr->mb_cur_max > 1) { ret = build_wcs_upper_buffer (pstr); if (__glibc_unlikely (ret != REG_NOERROR)) return ret; } else build_upper_buffer (pstr); } else { if (pstr->mb_cur_max > 1) build_wcs_buffer (pstr); else { if (pstr->trans != NULL) re_string_translate_buffer (pstr); } } return REG_NOERROR; } /* Functions for matching context. */ /* Initialize MCTX. */ static reg_errcode_t __attribute_warn_unused_result__ match_ctx_init (re_match_context_t *mctx, int eflags, Idx n) { mctx->eflags = eflags; mctx->match_last = -1; if (n > 0) { /* Avoid overflow. */ size_t max_object_size = MAX (sizeof (struct re_backref_cache_entry), sizeof (re_sub_match_top_t *)); if (__glibc_unlikely (MIN (IDX_MAX, SIZE_MAX / max_object_size) < n)) return REG_ESPACE; mctx->bkref_ents = re_malloc (struct re_backref_cache_entry, n); mctx->sub_tops = re_malloc (re_sub_match_top_t *, n); if (__glibc_unlikely (mctx->bkref_ents == NULL || mctx->sub_tops == NULL)) return REG_ESPACE; } /* Already zero-ed by the caller. else mctx->bkref_ents = NULL; mctx->nbkref_ents = 0; mctx->nsub_tops = 0; */ mctx->abkref_ents = n; mctx->max_mb_elem_len = 1; mctx->asub_tops = n; return REG_NOERROR; } /* Clean the entries which depend on the current input in MCTX. This function must be invoked when the matcher changes the start index of the input, or changes the input string. */ static void match_ctx_clean (re_match_context_t *mctx) { Idx st_idx; for (st_idx = 0; st_idx < mctx->nsub_tops; ++st_idx) { Idx sl_idx; re_sub_match_top_t *top = mctx->sub_tops[st_idx]; for (sl_idx = 0; sl_idx < top->nlasts; ++sl_idx) { re_sub_match_last_t *last = top->lasts[sl_idx]; re_free (last->path.array); re_free (last); } re_free (top->lasts); if (top->path) { re_free (top->path->array); re_free (top->path); } re_free (top); } mctx->nsub_tops = 0; mctx->nbkref_ents = 0; } /* Free all the memory associated with MCTX. */ static void match_ctx_free (re_match_context_t *mctx) { /* First, free all the memory associated with MCTX->SUB_TOPS. */ match_ctx_clean (mctx); re_free (mctx->sub_tops); re_free (mctx->bkref_ents); } /* Add a new backreference entry to MCTX. Note that we assume that caller never call this function with duplicate entry, and call with STR_IDX which isn't smaller than any existing entry. */ static reg_errcode_t __attribute_warn_unused_result__ match_ctx_add_entry (re_match_context_t *mctx, Idx node, Idx str_idx, Idx from, Idx to) { if (mctx->nbkref_ents >= mctx->abkref_ents) { struct re_backref_cache_entry* new_entry; new_entry = re_realloc (mctx->bkref_ents, struct re_backref_cache_entry, mctx->abkref_ents * 2); if (__glibc_unlikely (new_entry == NULL)) { re_free (mctx->bkref_ents); return REG_ESPACE; } mctx->bkref_ents = new_entry; memset (mctx->bkref_ents + mctx->nbkref_ents, '\0', sizeof (struct re_backref_cache_entry) * mctx->abkref_ents); mctx->abkref_ents *= 2; } if (mctx->nbkref_ents > 0 && mctx->bkref_ents[mctx->nbkref_ents - 1].str_idx == str_idx) mctx->bkref_ents[mctx->nbkref_ents - 1].more = 1; mctx->bkref_ents[mctx->nbkref_ents].node = node; mctx->bkref_ents[mctx->nbkref_ents].str_idx = str_idx; mctx->bkref_ents[mctx->nbkref_ents].subexp_from = from; mctx->bkref_ents[mctx->nbkref_ents].subexp_to = to; /* This is a cache that saves negative results of check_dst_limits_calc_pos. If bit N is clear, means that this entry won't epsilon-transition to an OP_OPEN_SUBEXP or OP_CLOSE_SUBEXP for the N+1-th subexpression. If it is set, check_dst_limits_calc_pos_1 will recurse and try to find one such node. A backreference does not epsilon-transition unless it is empty, so set to all zeros if FROM != TO. */ mctx->bkref_ents[mctx->nbkref_ents].eps_reachable_subexps_map = (from == to ? -1 : 0); mctx->bkref_ents[mctx->nbkref_ents++].more = 0; if (mctx->max_mb_elem_len < to - from) mctx->max_mb_elem_len = to - from; return REG_NOERROR; } /* Return the first entry with the same str_idx, or -1 if none is found. Note that MCTX->BKREF_ENTS is already sorted by MCTX->STR_IDX. */ static Idx search_cur_bkref_entry (const re_match_context_t *mctx, Idx str_idx) { Idx left, right, mid, last; last = right = mctx->nbkref_ents; for (left = 0; left < right;) { mid = (left + right) / 2; if (mctx->bkref_ents[mid].str_idx < str_idx) left = mid + 1; else right = mid; } if (left < last && mctx->bkref_ents[left].str_idx == str_idx) return left; else return -1; } /* Register the node NODE, whose type is OP_OPEN_SUBEXP, and which matches at STR_IDX. */ static reg_errcode_t __attribute_warn_unused_result__ match_ctx_add_subtop (re_match_context_t *mctx, Idx node, Idx str_idx) { DEBUG_ASSERT (mctx->sub_tops != NULL); DEBUG_ASSERT (mctx->asub_tops > 0); if (__glibc_unlikely (mctx->nsub_tops == mctx->asub_tops)) { Idx new_asub_tops = mctx->asub_tops * 2; re_sub_match_top_t **new_array = re_realloc (mctx->sub_tops, re_sub_match_top_t *, new_asub_tops); if (__glibc_unlikely (new_array == NULL)) return REG_ESPACE; mctx->sub_tops = new_array; mctx->asub_tops = new_asub_tops; } mctx->sub_tops[mctx->nsub_tops] = calloc (1, sizeof (re_sub_match_top_t)); if (__glibc_unlikely (mctx->sub_tops[mctx->nsub_tops] == NULL)) return REG_ESPACE; mctx->sub_tops[mctx->nsub_tops]->node = node; mctx->sub_tops[mctx->nsub_tops++]->str_idx = str_idx; return REG_NOERROR; } /* Register the node NODE, whose type is OP_CLOSE_SUBEXP, and which matches at STR_IDX, whose corresponding OP_OPEN_SUBEXP is SUB_TOP. Return the new entry if successful, NULL if memory is exhausted. */ static re_sub_match_last_t * match_ctx_add_sublast (re_sub_match_top_t *subtop, Idx node, Idx str_idx) { re_sub_match_last_t *new_entry; if (__glibc_unlikely (subtop->nlasts == subtop->alasts)) { Idx new_alasts = 2 * subtop->alasts + 1; re_sub_match_last_t **new_array = re_realloc (subtop->lasts, re_sub_match_last_t *, new_alasts); if (__glibc_unlikely (new_array == NULL)) return NULL; subtop->lasts = new_array; subtop->alasts = new_alasts; } new_entry = calloc (1, sizeof (re_sub_match_last_t)); if (__glibc_likely (new_entry != NULL)) { subtop->lasts[subtop->nlasts] = new_entry; new_entry->node = node; new_entry->str_idx = str_idx; ++subtop->nlasts; } return new_entry; } static void sift_ctx_init (re_sift_context_t *sctx, re_dfastate_t **sifted_sts, re_dfastate_t **limited_sts, Idx last_node, Idx last_str_idx) { sctx->sifted_states = sifted_sts; sctx->limited_states = limited_sts; sctx->last_node = last_node; sctx->last_str_idx = last_str_idx; re_node_set_init_empty (&sctx->limits); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/time_r.c�������������������������������������������������������������������������������0000644�0001750�0001750�00000002335�14436425346�014560� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Reentrant time functions like localtime_r. Copyright (C) 2003, 2006-2007, 2010-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paul Eggert. */ #include <config.h> #include <time.h> static struct tm * copy_tm_result (struct tm *dest, struct tm const *src) { if (! src) return 0; *dest = *src; return dest; } struct tm * gmtime_r (time_t const * restrict t, struct tm * restrict tp) { return copy_tm_result (tp, gmtime (t)); } struct tm * localtime_r (time_t const * restrict t, struct tm * restrict tp) { return copy_tm_result (tp, localtime (t)); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/time-internal.h������������������������������������������������������������������������0000644�0001750�0001750�00000003627�14436425346�016063� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Time internal interface Copyright 2015-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paul Eggert. */ /* A time zone rule. */ struct tm_zone { /* More abbreviations, should they be needed. Their TZ_IS_SET members are zero. */ struct tm_zone *next; #if HAVE_TZNAME && !HAVE_STRUCT_TM_TM_ZONE /* Copies of recent strings taken from tzname[0] and tzname[1]. The copies are in ABBRS, so that they survive tzset. Null if unknown. */ char *tzname_copy[2]; #endif /* If nonzero, the rule represents the TZ environment variable set to the first "abbreviation" (this may be the empty string). Otherwise, it represents an unset TZ. */ char tz_is_set; /* A sequence of null-terminated strings packed next to each other. The strings are followed by an extra null byte. If TZ_IS_SET, there must be at least one string and the first string (which is actually a TZ environment value) may be empty. Otherwise all strings must be nonempty. Abbreviations are stored here because otherwise the values of tm_zone and/or tzname would be dead after changing TZ and calling tzset. Abbreviations never move once allocated, and are live until tzfree is called. */ char abbrs[FLEXIBLE_ARRAY_MEMBER]; }; ���������������������������������������������������������������������������������������������������������rush-2.4/gnu/wctype.in.h����������������������������������������������������������������������������0000644�0001750�0001750�00000043432�14436425346�015231� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A substitute for ISO C99 <wctype.h>, for platforms that lack it. Copyright (C) 2006-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible and Paul Eggert. */ /* * ISO C 99 <wctype.h> for platforms that lack it. * <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/wctype.h.html> * * iswctype, towctrans, towlower, towupper, wctrans, wctype, * wctrans_t, and wctype_t are not yet implemented. */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if (defined __MINGW32__ && defined __CTYPE_H_SOURCED__) /* Special invocation convention: - With MinGW 3.22, when <ctype.h> includes <wctype.h>, only some part of <wctype.h> is being processed, which doesn't include the idempotency guard. */ #@INCLUDE_NEXT@ @NEXT_WCTYPE_H@ #else /* Normal invocation convention. */ #ifndef _@GUARD_PREFIX@_WCTYPE_H /* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, GNULIB_POSIXCHECK, HAVE_RAW_DECL_*. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif #if @HAVE_WINT_T@ /* Solaris 2.5 has a bug: <wchar.h> must be included before <wctype.h>. */ # include <wchar.h> #endif /* Native Windows (mingw, MSVC) have declarations of towupper, towlower, and isw* functions in <ctype.h>, <wchar.h> as well as in <wctype.h>. Include <ctype.h>, <wchar.h> in advance to avoid rpl_ prefix being added to the declarations. */ #if defined _WIN32 && ! defined __CYGWIN__ # include <ctype.h> # include <wchar.h> #endif /* Include the original <wctype.h> if it exists. BeOS 5 has the functions but no <wctype.h>. */ /* The include_next requires a split double-inclusion guard. */ #if @HAVE_WCTYPE_H@ # @INCLUDE_NEXT@ @NEXT_WCTYPE_H@ #endif #ifndef _@GUARD_PREFIX@_WCTYPE_H #define _@GUARD_PREFIX@_WCTYPE_H _GL_INLINE_HEADER_BEGIN #ifndef _GL_WCTYPE_INLINE # define _GL_WCTYPE_INLINE _GL_INLINE #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* Solaris 2.6 <wctype.h> includes <widec.h> which includes <euc.h> which #defines a number of identifiers in the application namespace. Revert these #defines. */ #ifdef __sun # undef multibyte # undef eucw1 # undef eucw2 # undef eucw3 # undef scrw1 # undef scrw2 # undef scrw3 #endif /* Define wint_t and WEOF. (Also done in wchar.in.h.) */ #if !@HAVE_WINT_T@ && !defined wint_t # define wint_t int # ifndef WEOF # define WEOF -1 # endif #else /* mingw and MSVC define wint_t as 'unsigned short' in <crtdefs.h> or <stddef.h>. This is too small: ISO C 99 section 7.24.1.(2) says that wint_t must be "unchanged by default argument promotions". Override it. */ # if @GNULIBHEADERS_OVERRIDE_WINT_T@ # if !GNULIB_defined_wint_t # if @HAVE_CRTDEFS_H@ # include <crtdefs.h> # else # include <stddef.h> # endif typedef unsigned int rpl_wint_t; # undef wint_t # define wint_t rpl_wint_t # define GNULIB_defined_wint_t 1 # endif # endif # ifndef WEOF # define WEOF ((wint_t) -1) # endif #endif #if !GNULIB_defined_wctype_functions /* FreeBSD 4.4 to 4.11 has <wctype.h> but lacks the functions. Linux libc5 has <wctype.h> and the functions but they are broken. mingw and MSVC have <wctype.h> and the functions but they take a wchar_t as argument, not an rpl_wint_t. Assume all 11 functions (all isw* except iswblank) are implemented the same way, or not at all. */ # if ! @HAVE_ISWCNTRL@ || @REPLACE_ISWCNTRL@ # if @GNULIBHEADERS_OVERRIDE_WINT_T@ /* implies @REPLACE_ISWCNTRL@ */ _GL_WCTYPE_INLINE int rpl_iswalnum (wint_t wc) { return ((wchar_t) wc == wc ? iswalnum ((wchar_t) wc) : 0); } _GL_WCTYPE_INLINE int rpl_iswalpha (wint_t wc) { return ((wchar_t) wc == wc ? iswalpha ((wchar_t) wc) : 0); } _GL_WCTYPE_INLINE int rpl_iswblank (wint_t wc) { return ((wchar_t) wc == wc ? iswblank ((wchar_t) wc) : 0); } _GL_WCTYPE_INLINE int rpl_iswcntrl (wint_t wc) { return ((wchar_t) wc == wc ? iswcntrl ((wchar_t) wc) : 0); } _GL_WCTYPE_INLINE int rpl_iswdigit (wint_t wc) { return ((wchar_t) wc == wc ? wc >= '0' && wc <= '9' : 0); } _GL_WCTYPE_INLINE int rpl_iswgraph (wint_t wc) { return ((wchar_t) wc == wc ? iswgraph ((wchar_t) wc) : 0); } _GL_WCTYPE_INLINE int rpl_iswlower (wint_t wc) { return ((wchar_t) wc == wc ? iswlower ((wchar_t) wc) : 0); } _GL_WCTYPE_INLINE int rpl_iswprint (wint_t wc) { return ((wchar_t) wc == wc ? iswprint ((wchar_t) wc) : 0); } _GL_WCTYPE_INLINE int rpl_iswpunct (wint_t wc) { return ((wchar_t) wc == wc ? iswpunct ((wchar_t) wc) : 0); } _GL_WCTYPE_INLINE int rpl_iswspace (wint_t wc) { return ((wchar_t) wc == wc ? iswspace ((wchar_t) wc) : 0); } _GL_WCTYPE_INLINE int rpl_iswupper (wint_t wc) { return ((wchar_t) wc == wc ? iswupper ((wchar_t) wc) : 0); } _GL_WCTYPE_INLINE int rpl_iswxdigit (wint_t wc) { return ((wchar_t) wc == wc ? (wc >= '0' && wc <= '9') || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'F') : 0); } _GL_WCTYPE_INLINE wint_t rpl_towlower (wint_t wc) { return ((wchar_t) wc == wc ? (wchar_t) towlower ((wchar_t) wc) : wc); } _GL_WCTYPE_INLINE wint_t rpl_towupper (wint_t wc) { return ((wchar_t) wc == wc ? (wchar_t) towupper ((wchar_t) wc) : wc); } # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef iswalnum # undef iswalpha # undef iswblank # undef iswcntrl # undef iswdigit # undef iswgraph # undef iswlower # undef iswprint # undef iswpunct # undef iswspace # undef iswupper # undef iswxdigit # undef towlower # undef towupper # define iswalnum rpl_iswalnum # define iswalpha rpl_iswalpha # define iswblank rpl_iswblank # define iswcntrl rpl_iswcntrl # define iswdigit rpl_iswdigit # define iswgraph rpl_iswgraph # define iswlower rpl_iswlower # define iswprint rpl_iswprint # define iswpunct rpl_iswpunct # define iswspace rpl_iswspace # define iswupper rpl_iswupper # define iswxdigit rpl_iswxdigit # define towlower rpl_towlower # define towupper rpl_towupper # endif # else /* IRIX 5.3 has macros but no functions, its isw* macros refer to an undefined variable _ctmp_ and to <ctype.h> macros like _P, and they refer to system functions like _iswctype that are not in the standard C library. Rather than try to get ancient buggy implementations like this to work, just disable them. */ # undef iswalnum # undef iswalpha # undef iswblank # undef iswcntrl # undef iswdigit # undef iswgraph # undef iswlower # undef iswprint # undef iswpunct # undef iswspace # undef iswupper # undef iswxdigit # undef towlower # undef towupper /* Linux libc5 has <wctype.h> and the functions but they are broken. */ # if @REPLACE_ISWCNTRL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define iswalnum rpl_iswalnum # define iswalpha rpl_iswalpha # define iswblank rpl_iswblank # define iswcntrl rpl_iswcntrl # define iswdigit rpl_iswdigit # define iswgraph rpl_iswgraph # define iswlower rpl_iswlower # define iswprint rpl_iswprint # define iswpunct rpl_iswpunct # define iswspace rpl_iswspace # define iswupper rpl_iswupper # define iswxdigit rpl_iswxdigit # endif # endif # if @REPLACE_TOWLOWER@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define towlower rpl_towlower # define towupper rpl_towupper # endif # endif _GL_WCTYPE_INLINE int # if @REPLACE_ISWCNTRL@ rpl_iswalnum # else iswalnum # endif (wint_t wc) { return ((wc >= '0' && wc <= '9') || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z')); } _GL_WCTYPE_INLINE int # if @REPLACE_ISWCNTRL@ rpl_iswalpha # else iswalpha # endif (wint_t wc) { return (wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z'; } _GL_WCTYPE_INLINE int # if @REPLACE_ISWCNTRL@ rpl_iswblank # else iswblank # endif (wint_t wc) { return wc == ' ' || wc == '\t'; } _GL_WCTYPE_INLINE int # if @REPLACE_ISWCNTRL@ rpl_iswcntrl # else iswcntrl # endif (wint_t wc) { return (wc & ~0x1f) == 0 || wc == 0x7f; } _GL_WCTYPE_INLINE int # if @REPLACE_ISWDIGIT@ rpl_iswdigit # else iswdigit # endif (wint_t wc) { return wc >= '0' && wc <= '9'; } _GL_WCTYPE_INLINE int # if @REPLACE_ISWCNTRL@ rpl_iswgraph # else iswgraph # endif (wint_t wc) { return wc >= '!' && wc <= '~'; } _GL_WCTYPE_INLINE int # if @REPLACE_ISWCNTRL@ rpl_iswlower # else iswlower # endif (wint_t wc) { return wc >= 'a' && wc <= 'z'; } _GL_WCTYPE_INLINE int # if @REPLACE_ISWCNTRL@ rpl_iswprint # else iswprint # endif (wint_t wc) { return wc >= ' ' && wc <= '~'; } _GL_WCTYPE_INLINE int # if @REPLACE_ISWCNTRL@ rpl_iswpunct # else iswpunct # endif (wint_t wc) { return (wc >= '!' && wc <= '~' && !((wc >= '0' && wc <= '9') || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z'))); } _GL_WCTYPE_INLINE int # if @REPLACE_ISWCNTRL@ rpl_iswspace # else iswspace # endif (wint_t wc) { return (wc == ' ' || wc == '\t' || wc == '\n' || wc == '\v' || wc == '\f' || wc == '\r'); } _GL_WCTYPE_INLINE int # if @REPLACE_ISWCNTRL@ rpl_iswupper # else iswupper # endif (wint_t wc) { return wc >= 'A' && wc <= 'Z'; } _GL_WCTYPE_INLINE int # if @REPLACE_ISWXDIGIT@ rpl_iswxdigit # else iswxdigit # endif (wint_t wc) { return ((wc >= '0' && wc <= '9') || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'F')); } _GL_WCTYPE_INLINE wint_t # if @REPLACE_TOWLOWER@ rpl_towlower # else towlower # endif (wint_t wc) { return (wc >= 'A' && wc <= 'Z' ? wc - 'A' + 'a' : wc); } _GL_WCTYPE_INLINE wint_t # if @REPLACE_TOWLOWER@ rpl_towupper # else towupper # endif (wint_t wc) { return (wc >= 'a' && wc <= 'z' ? wc - 'a' + 'A' : wc); } # endif # else /* Only some of the functions are missing or broken. */ # if @GNULIB_ISWBLANK@ && (! @HAVE_ISWBLANK@ || @REPLACE_ISWBLANK@) /* Only the iswblank function is missing. */ # if @REPLACE_ISWBLANK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define iswblank rpl_iswblank # endif _GL_FUNCDECL_RPL (iswblank, int, (wint_t wc)); # else _GL_FUNCDECL_SYS (iswblank, int, (wint_t wc)); # endif # endif # if @GNULIB_ISWDIGIT@ # if @REPLACE_ISWDIGIT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef iswdigit # define iswdigit rpl_iswdigit # endif _GL_FUNCDECL_RPL (iswdigit, int, (wint_t wc)); # endif # endif # if @GNULIB_ISWXDIGIT@ # if @REPLACE_ISWXDIGIT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef iswxdigit # define iswxdigit rpl_iswxdigit # endif _GL_FUNCDECL_RPL (iswxdigit, int, (wint_t wc)); # endif # endif # endif # if defined __MINGW32__ && !@GNULIBHEADERS_OVERRIDE_WINT_T@ /* On native Windows, wchar_t is uint16_t, and wint_t is uint32_t. The functions towlower and towupper are implemented in the MSVCRT library to take a wchar_t argument and return a wchar_t result. mingw declares these functions to take a wint_t argument and return a wint_t result. This means that: 1. When the user passes an argument outside the range 0x0000..0xFFFF, the function will look only at the lower 16 bits. This is allowed according to POSIX. 2. The return value is returned in the lower 16 bits of the result register. The upper 16 bits are random: whatever happened to be in that part of the result register. We need to fix this by adding a zero-extend from wchar_t to wint_t after the call. */ _GL_WCTYPE_INLINE wint_t rpl_towlower (wint_t wc) { return (wint_t) (wchar_t) towlower (wc); } # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define towlower rpl_towlower # endif _GL_WCTYPE_INLINE wint_t rpl_towupper (wint_t wc) { return (wint_t) (wchar_t) towupper (wc); } # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define towupper rpl_towupper # endif # endif /* __MINGW32__ && !@GNULIBHEADERS_OVERRIDE_WINT_T@ */ # define GNULIB_defined_wctype_functions 1 #endif #if @REPLACE_ISWCNTRL@ _GL_CXXALIAS_RPL (iswalnum, int, (wint_t wc)); #else _GL_CXXALIAS_SYS (iswalnum, int, (wint_t wc)); #endif #if @REPLACE_ISWCNTRL@ _GL_CXXALIAS_RPL (iswalpha, int, (wint_t wc)); #else _GL_CXXALIAS_SYS (iswalpha, int, (wint_t wc)); #endif #if @REPLACE_ISWCNTRL@ _GL_CXXALIAS_RPL (iswcntrl, int, (wint_t wc)); #else _GL_CXXALIAS_SYS (iswcntrl, int, (wint_t wc)); #endif #if @GNULIB_ISWDIGIT@ # if @REPLACE_ISWDIGIT@ _GL_CXXALIAS_RPL (iswdigit, int, (wint_t wc)); # else _GL_CXXALIAS_SYS (iswdigit, int, (wint_t wc)); # endif #endif #if @REPLACE_ISWCNTRL@ _GL_CXXALIAS_RPL (iswgraph, int, (wint_t wc)); #else _GL_CXXALIAS_SYS (iswgraph, int, (wint_t wc)); #endif #if @REPLACE_ISWCNTRL@ _GL_CXXALIAS_RPL (iswlower, int, (wint_t wc)); #else _GL_CXXALIAS_SYS (iswlower, int, (wint_t wc)); #endif #if @REPLACE_ISWCNTRL@ _GL_CXXALIAS_RPL (iswprint, int, (wint_t wc)); #else _GL_CXXALIAS_SYS (iswprint, int, (wint_t wc)); #endif #if @REPLACE_ISWCNTRL@ _GL_CXXALIAS_RPL (iswpunct, int, (wint_t wc)); #else _GL_CXXALIAS_SYS (iswpunct, int, (wint_t wc)); #endif #if @REPLACE_ISWCNTRL@ _GL_CXXALIAS_RPL (iswspace, int, (wint_t wc)); #else _GL_CXXALIAS_SYS (iswspace, int, (wint_t wc)); #endif #if @REPLACE_ISWCNTRL@ _GL_CXXALIAS_RPL (iswupper, int, (wint_t wc)); #else _GL_CXXALIAS_SYS (iswupper, int, (wint_t wc)); #endif #if @GNULIB_ISWXDIGIT@ # if @REPLACE_ISWXDIGIT@ _GL_CXXALIAS_RPL (iswxdigit, int, (wint_t wc)); # else _GL_CXXALIAS_SYS (iswxdigit, int, (wint_t wc)); # endif #endif #if __GLIBC__ >= 2 _GL_CXXALIASWARN (iswalnum); _GL_CXXALIASWARN (iswalpha); _GL_CXXALIASWARN (iswcntrl); _GL_CXXALIASWARN (iswdigit); _GL_CXXALIASWARN (iswgraph); _GL_CXXALIASWARN (iswlower); _GL_CXXALIASWARN (iswprint); _GL_CXXALIASWARN (iswpunct); _GL_CXXALIASWARN (iswspace); _GL_CXXALIASWARN (iswupper); _GL_CXXALIASWARN (iswxdigit); #endif #if @GNULIB_ISWBLANK@ # if @REPLACE_ISWCNTRL@ || @REPLACE_ISWBLANK@ _GL_CXXALIAS_RPL (iswblank, int, (wint_t wc)); # else _GL_CXXALIAS_SYS (iswblank, int, (wint_t wc)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (iswblank); # endif #endif #if !@HAVE_WCTYPE_T@ # if !GNULIB_defined_wctype_t typedef void * wctype_t; # define GNULIB_defined_wctype_t 1 # endif #endif /* Get a descriptor for a wide character property. */ #if @GNULIB_WCTYPE@ # if !@HAVE_WCTYPE_T@ _GL_FUNCDECL_SYS (wctype, wctype_t, (const char *name)); # endif _GL_CXXALIAS_SYS (wctype, wctype_t, (const char *name)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wctype); # endif #elif defined GNULIB_POSIXCHECK # undef wctype # if HAVE_RAW_DECL_WCTYPE _GL_WARN_ON_USE (wctype, "wctype is unportable - " "use gnulib module wctype for portability"); # endif #endif /* Test whether a wide character has a given property. The argument WC must be either a wchar_t value or WEOF. The argument DESC must have been returned by the wctype() function. */ #if @GNULIB_ISWCTYPE@ # if @GNULIBHEADERS_OVERRIDE_WINT_T@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef iswctype # define iswctype rpl_iswctype # endif _GL_FUNCDECL_RPL (iswctype, int, (wint_t wc, wctype_t desc)); _GL_CXXALIAS_RPL (iswctype, int, (wint_t wc, wctype_t desc)); # else # if !@HAVE_WCTYPE_T@ _GL_FUNCDECL_SYS (iswctype, int, (wint_t wc, wctype_t desc)); # endif _GL_CXXALIAS_SYS (iswctype, int, (wint_t wc, wctype_t desc)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (iswctype); # endif #elif defined GNULIB_POSIXCHECK # undef iswctype # if HAVE_RAW_DECL_ISWCTYPE _GL_WARN_ON_USE (iswctype, "iswctype is unportable - " "use gnulib module iswctype for portability"); # endif #endif #if @REPLACE_TOWLOWER@ || defined __MINGW32__ _GL_CXXALIAS_RPL (towlower, wint_t, (wint_t wc)); _GL_CXXALIAS_RPL (towupper, wint_t, (wint_t wc)); #else _GL_CXXALIAS_SYS (towlower, wint_t, (wint_t wc)); _GL_CXXALIAS_SYS (towupper, wint_t, (wint_t wc)); #endif #if __GLIBC__ >= 2 _GL_CXXALIASWARN (towlower); _GL_CXXALIASWARN (towupper); #endif #if !@HAVE_WCTRANS_T@ # if !GNULIB_defined_wctrans_t typedef void * wctrans_t; # define GNULIB_defined_wctrans_t 1 # endif #endif /* Get a descriptor for a wide character case conversion. */ #if @GNULIB_WCTRANS@ # if !@HAVE_WCTRANS_T@ _GL_FUNCDECL_SYS (wctrans, wctrans_t, (const char *name)); # endif _GL_CXXALIAS_SYS (wctrans, wctrans_t, (const char *name)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wctrans); # endif #elif defined GNULIB_POSIXCHECK # undef wctrans # if HAVE_RAW_DECL_WCTRANS _GL_WARN_ON_USE (wctrans, "wctrans is unportable - " "use gnulib module wctrans for portability"); # endif #endif /* Perform a given case conversion on a wide character. The argument WC must be either a wchar_t value or WEOF. The argument DESC must have been returned by the wctrans() function. */ #if @GNULIB_TOWCTRANS@ # if !@HAVE_WCTRANS_T@ _GL_FUNCDECL_SYS (towctrans, wint_t, (wint_t wc, wctrans_t desc)); # endif _GL_CXXALIAS_SYS (towctrans, wint_t, (wint_t wc, wctrans_t desc)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (towctrans); # endif #elif defined GNULIB_POSIXCHECK # undef towctrans # if HAVE_RAW_DECL_TOWCTRANS _GL_WARN_ON_USE (towctrans, "towctrans is unportable - " "use gnulib module towctrans for portability"); # endif #endif _GL_INLINE_HEADER_END #endif /* _@GUARD_PREFIX@_WCTYPE_H */ #endif /* _@GUARD_PREFIX@_WCTYPE_H */ #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/fd-hook.c������������������������������������������������������������������������������0000644�0001750�0001750�00000007025�14436425345�014630� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Hook for making file descriptor functions close(), ioctl() extensible. Copyright (C) 2009-2023 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "fd-hook.h" #include <stdlib.h> /* Currently, this entire code is only needed for the handling of sockets on native Windows platforms. */ #if WINDOWS_SOCKETS /* The first and last link in the doubly linked list. Initially the list is empty. */ static struct fd_hook anchor = { &anchor, &anchor, NULL, NULL }; int execute_close_hooks (const struct fd_hook *remaining_list, gl_close_fn primary, int fd) { if (remaining_list == &anchor) /* End of list reached. */ return primary (fd); else return remaining_list->private_close_fn (remaining_list->private_next, primary, fd); } int execute_all_close_hooks (gl_close_fn primary, int fd) { return execute_close_hooks (anchor.private_next, primary, fd); } int execute_ioctl_hooks (const struct fd_hook *remaining_list, gl_ioctl_fn primary, int fd, int request, void *arg) { if (remaining_list == &anchor) /* End of list reached. */ return primary (fd, request, arg); else return remaining_list->private_ioctl_fn (remaining_list->private_next, primary, fd, request, arg); } int execute_all_ioctl_hooks (gl_ioctl_fn primary, int fd, int request, void *arg) { return execute_ioctl_hooks (anchor.private_next, primary, fd, request, arg); } void register_fd_hook (close_hook_fn close_hook, ioctl_hook_fn ioctl_hook, struct fd_hook *link) { if (close_hook == NULL) close_hook = execute_close_hooks; if (ioctl_hook == NULL) ioctl_hook = execute_ioctl_hooks; if (link->private_next == NULL && link->private_prev == NULL) { /* Add the link to the doubly linked list. */ link->private_next = anchor.private_next; link->private_prev = &anchor; link->private_close_fn = close_hook; link->private_ioctl_fn = ioctl_hook; anchor.private_next->private_prev = link; anchor.private_next = link; } else { /* The link is already in use. */ if (link->private_close_fn != close_hook || link->private_ioctl_fn != ioctl_hook) abort (); } } void unregister_fd_hook (struct fd_hook *link) { struct fd_hook *next = link->private_next; struct fd_hook *prev = link->private_prev; if (next != NULL && prev != NULL) { /* The link is in use. Remove it from the doubly linked list. */ prev->private_next = next; next->private_prev = prev; /* Clear the link, to mark it unused. */ link->private_next = NULL; link->private_prev = NULL; link->private_close_fn = NULL; link->private_ioctl_fn = NULL; } } #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/setlocale-lock.c�����������������������������������������������������������������������0000644�0001750�0001750�00000010530�14436425346�016176� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Return the internal lock used by setlocale_null_r. Copyright (C) 2019-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2019. */ #include <config.h> /* When it is known that the gl_get_setlocale_null_lock function is defined by a dependency library, it should not be defined here. */ #if OMIT_SETLOCALE_LOCK /* This declaration is solely to ensure that after preprocessing this file is never empty. */ typedef int dummy; #else /* This file defines the internal lock used by setlocale_null_r. It is a separate compilation unit, so that only one copy of it is present when linking statically. */ /* Prohibit renaming this symbol. */ # undef gl_get_setlocale_null_lock /* Macro for exporting a symbol (function, not variable) defined in this file, when compiled into a shared library. */ # ifndef DLL_EXPORTED # if HAVE_VISIBILITY /* Override the effect of the compiler option '-fvisibility=hidden'. */ # define DLL_EXPORTED __attribute__((__visibility__("default"))) # elif defined _WIN32 || defined __CYGWIN__ # define DLL_EXPORTED __declspec(dllexport) # else # define DLL_EXPORTED # endif # endif # if defined _WIN32 && !defined __CYGWIN__ # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> # include "windows-initguard.h" /* The return type is a 'CRITICAL_SECTION *', not a 'glwthread_mutex_t *', because the latter is not guaranteed to be a stable ABI in the future. */ /* Make sure the function gets exported from DLLs. */ DLL_EXPORTED CRITICAL_SECTION *gl_get_setlocale_null_lock (void); static glwthread_initguard_t guard = GLWTHREAD_INITGUARD_INIT; static CRITICAL_SECTION lock; /* Returns the internal lock used by setlocale_null_r. */ CRITICAL_SECTION * gl_get_setlocale_null_lock (void) { if (!guard.done) { if (InterlockedIncrement (&guard.started) == 0) { /* This thread is the first one to need the lock. Initialize it. */ InitializeCriticalSection (&lock); guard.done = 1; } else { /* Don't let guard.started grow and wrap around. */ InterlockedDecrement (&guard.started); /* Yield the CPU while waiting for another thread to finish initializing this mutex. */ while (!guard.done) Sleep (0); } } return &lock; } # elif HAVE_PTHREAD_API # include <pthread.h> static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; /* Make sure the function gets exported from shared libraries. */ DLL_EXPORTED pthread_mutex_t *gl_get_setlocale_null_lock (void); /* Returns the internal lock used by setlocale_null_r. */ pthread_mutex_t * gl_get_setlocale_null_lock (void) { return &mutex; } # elif HAVE_THREADS_H # include <threads.h> # include <stdlib.h> static int volatile init_needed = 1; static once_flag init_once = ONCE_FLAG_INIT; static mtx_t mutex; static void atomic_init (void) { if (mtx_init (&mutex, mtx_plain) != thrd_success) abort (); init_needed = 0; } /* Make sure the function gets exported from shared libraries. */ DLL_EXPORTED mtx_t *gl_get_setlocale_null_lock (void); /* Returns the internal lock used by setlocale_null_r. */ mtx_t * gl_get_setlocale_null_lock (void) { if (init_needed) call_once (&init_once, atomic_init); return &mutex; } # endif # if (defined _WIN32 || defined __CYGWIN__) && !defined _MSC_VER /* Make sure the '__declspec(dllimport)' in setlocale_null.c does not cause a link failure when no DLLs are involved. */ # if defined _WIN64 || defined _LP64 # define IMP(x) __imp_##x # else # define IMP(x) _imp__##x # endif void * IMP(gl_get_setlocale_null_lock) = &gl_get_setlocale_null_lock; # endif #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/unistd.in.h����������������������������������������������������������������������������0000644�0001750�0001750�00000242266�14436425346�015232� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Substitute for and wrapper around <unistd.h>. Copyright (C) 2003-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _@GUARD_PREFIX@_UNISTD_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if @HAVE_UNISTD_H@ && defined _GL_INCLUDING_UNISTD_H /* Special invocation convention: - On Mac OS X 10.3.9 we have a sequence of nested includes <unistd.h> -> <signal.h> -> <pthread.h> -> <unistd.h> In this situation, the functions are not yet declared, therefore we cannot provide the C++ aliases. */ #@INCLUDE_NEXT@ @NEXT_UNISTD_H@ #else /* Normal invocation convention. */ /* The include_next requires a split double-inclusion guard. */ #if @HAVE_UNISTD_H@ # define _GL_INCLUDING_UNISTD_H # @INCLUDE_NEXT@ @NEXT_UNISTD_H@ # undef _GL_INCLUDING_UNISTD_H #endif /* Avoid lseek bugs in FreeBSD, macOS <https://bugs.gnu.org/61386>. This bug is fixed after FreeBSD 13; see <https://bugs.freebsd.org/256205>. Use macOS "9999" to stand for a future fixed macOS version. */ #if defined __FreeBSD__ && __FreeBSD__ < 14 # undef SEEK_DATA # undef SEEK_HOLE #elif defined __APPLE__ && defined __MACH__ && defined SEEK_DATA # ifdef __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ # include <AvailabilityMacros.h> # endif # if (!defined MAC_OS_X_VERSION_MIN_REQUIRED \ || MAC_OS_X_VERSION_MIN_REQUIRED < 99990000) # include <sys/fcntl.h> /* It also defines the two macros. */ # undef SEEK_DATA # undef SEEK_HOLE # endif #endif /* Get all possible declarations of gethostname(). */ #if @GNULIB_GETHOSTNAME@ && @UNISTD_H_HAVE_WINSOCK2_H@ \ && !defined _GL_INCLUDING_WINSOCK2_H # define _GL_INCLUDING_WINSOCK2_H # include <winsock2.h> # undef _GL_INCLUDING_WINSOCK2_H #endif #if !defined _@GUARD_PREFIX@_UNISTD_H && !defined _GL_INCLUDING_WINSOCK2_H #define _@GUARD_PREFIX@_UNISTD_H /* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, GNULIB_POSIXCHECK, HAVE_RAW_DECL_*. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif /* NetBSD 5.0 mis-defines NULL. Also get size_t. */ /* But avoid namespace pollution on glibc systems. */ #ifndef __GLIBC__ # include <stddef.h> #endif /* mingw doesn't define the SEEK_* or *_FILENO macros in <unistd.h>. */ /* MSVC declares 'unlink' in <stdio.h>, not in <unistd.h>. We must include it before we #define unlink rpl_unlink. */ /* Cygwin 1.7.1 declares symlinkat in <stdio.h>, not in <unistd.h>. */ /* But avoid namespace pollution on glibc systems. */ #if (!(defined SEEK_CUR && defined SEEK_END && defined SEEK_SET) \ || ((@GNULIB_UNLINK@ || defined GNULIB_POSIXCHECK) \ && (defined _WIN32 && ! defined __CYGWIN__)) \ || ((@GNULIB_SYMLINKAT@ || defined GNULIB_POSIXCHECK) \ && defined __CYGWIN__)) \ && ! defined __GLIBC__ # include <stdio.h> #endif /* Cygwin 1.7.1 and Android 4.3 declare unlinkat in <fcntl.h>, not in <unistd.h>. */ /* But avoid namespace pollution on glibc systems. */ #if (@GNULIB_UNLINKAT@ || defined GNULIB_POSIXCHECK) \ && (defined __CYGWIN__ || defined __ANDROID__) \ && ! defined __GLIBC__ # include <fcntl.h> #endif /* mingw fails to declare _exit in <unistd.h>. */ /* mingw, MSVC, BeOS, Haiku declare environ in <stdlib.h>, not in <unistd.h>. */ /* Solaris declares getcwd not only in <unistd.h> but also in <stdlib.h>. */ /* OSF Tru64 Unix cannot see gnulib rpl_strtod when system <stdlib.h> is included here. */ /* But avoid namespace pollution on glibc systems. */ #if !defined __GLIBC__ && !defined __osf__ # define __need_system_stdlib_h # include <stdlib.h> # undef __need_system_stdlib_h #endif /* Native Windows platforms declare _chdir, _getcwd, _rmdir in <io.h> and/or <direct.h>, not in <unistd.h>. They also declare _access(), _chmod(), _close(), _dup(), _dup2(), _isatty(), _lseek(), _read(), _unlink(), _write() in <io.h>. */ #if defined _WIN32 && !defined __CYGWIN__ # include <io.h> # include <direct.h> #endif /* Native Windows platforms declare _execl*, _execv* in <process.h>. */ #if defined _WIN32 && !defined __CYGWIN__ # include <process.h> #endif /* AIX and OSF/1 5.1 declare getdomainname in <netdb.h>, not in <unistd.h>. NonStop Kernel declares gethostname in <netdb.h>, not in <unistd.h>. */ /* But avoid namespace pollution on glibc systems. */ #if ((@GNULIB_GETDOMAINNAME@ && (defined _AIX || defined __osf__)) \ || (@GNULIB_GETHOSTNAME@ && defined __TANDEM)) \ && !defined __GLIBC__ # include <netdb.h> #endif /* Mac OS X 10.13, Solaris 11.4, and Android 9.0 declare getentropy in <sys/random.h>, not in <unistd.h>. */ /* But avoid namespace pollution on glibc systems. */ #if (@GNULIB_GETENTROPY@ || defined GNULIB_POSIXCHECK) \ && ((defined __APPLE__ && defined __MACH__) || defined __sun \ || defined __ANDROID__) \ && @UNISTD_H_HAVE_SYS_RANDOM_H@ \ && !defined __GLIBC__ # include <sys/random.h> #endif /* Android 4.3 declares fchownat in <sys/stat.h>, not in <unistd.h>. */ /* But avoid namespace pollution on glibc systems. */ #if (@GNULIB_FCHOWNAT@ || defined GNULIB_POSIXCHECK) && defined __ANDROID__ \ && !defined __GLIBC__ # include <sys/stat.h> #endif /* MSVC defines off_t in <sys/types.h>. May also define off_t to a 64-bit type on native Windows. */ /* Get off_t, ssize_t, mode_t. */ #include <sys/types.h> /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* Get getopt(), optarg, optind, opterr, optopt. */ #if @GNULIB_GETOPT_POSIX@ && @GNULIB_UNISTD_H_GETOPT@ && !defined _GL_SYSTEM_GETOPT # include <getopt-cdefs.h> # include <getopt-pfx-core.h> #endif _GL_INLINE_HEADER_BEGIN #ifndef _GL_UNISTD_INLINE # define _GL_UNISTD_INLINE _GL_INLINE #endif /* Hide some function declarations from <winsock2.h>. */ #if @GNULIB_GETHOSTNAME@ && @UNISTD_H_HAVE_WINSOCK2_H@ # if !defined _@GUARD_PREFIX@_SYS_SOCKET_H # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef socket # define socket socket_used_without_including_sys_socket_h # undef connect # define connect connect_used_without_including_sys_socket_h # undef accept # define accept accept_used_without_including_sys_socket_h # undef bind # define bind bind_used_without_including_sys_socket_h # undef getpeername # define getpeername getpeername_used_without_including_sys_socket_h # undef getsockname # define getsockname getsockname_used_without_including_sys_socket_h # undef getsockopt # define getsockopt getsockopt_used_without_including_sys_socket_h # undef listen # define listen listen_used_without_including_sys_socket_h # undef recv # define recv recv_used_without_including_sys_socket_h # undef send # define send send_used_without_including_sys_socket_h # undef recvfrom # define recvfrom recvfrom_used_without_including_sys_socket_h # undef sendto # define sendto sendto_used_without_including_sys_socket_h # undef setsockopt # define setsockopt setsockopt_used_without_including_sys_socket_h # undef shutdown # define shutdown shutdown_used_without_including_sys_socket_h # else _GL_WARN_ON_USE (socket, "socket() used without including <sys/socket.h>"); _GL_WARN_ON_USE (connect, "connect() used without including <sys/socket.h>"); _GL_WARN_ON_USE (accept, "accept() used without including <sys/socket.h>"); _GL_WARN_ON_USE (bind, "bind() used without including <sys/socket.h>"); _GL_WARN_ON_USE (getpeername, "getpeername() used without including <sys/socket.h>"); _GL_WARN_ON_USE (getsockname, "getsockname() used without including <sys/socket.h>"); _GL_WARN_ON_USE (getsockopt, "getsockopt() used without including <sys/socket.h>"); _GL_WARN_ON_USE (listen, "listen() used without including <sys/socket.h>"); _GL_WARN_ON_USE (recv, "recv() used without including <sys/socket.h>"); _GL_WARN_ON_USE (send, "send() used without including <sys/socket.h>"); _GL_WARN_ON_USE (recvfrom, "recvfrom() used without including <sys/socket.h>"); _GL_WARN_ON_USE (sendto, "sendto() used without including <sys/socket.h>"); _GL_WARN_ON_USE (setsockopt, "setsockopt() used without including <sys/socket.h>"); _GL_WARN_ON_USE (shutdown, "shutdown() used without including <sys/socket.h>"); # endif # endif # if !defined _@GUARD_PREFIX@_SYS_SELECT_H # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef select # define select select_used_without_including_sys_select_h # else _GL_WARN_ON_USE (select, "select() used without including <sys/select.h>"); # endif # endif #endif /* OS/2 EMX lacks these macros. */ #ifndef STDIN_FILENO # define STDIN_FILENO 0 #endif #ifndef STDOUT_FILENO # define STDOUT_FILENO 1 #endif #ifndef STDERR_FILENO # define STDERR_FILENO 2 #endif /* Ensure *_OK macros exist. */ #ifndef F_OK # define F_OK 0 # define X_OK 1 # define W_OK 2 # define R_OK 4 #endif /* Declare overridden functions. */ #if @GNULIB_ACCESS@ # if @REPLACE_ACCESS@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef access # define access rpl_access # endif _GL_FUNCDECL_RPL (access, int, (const char *file, int mode) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (access, int, (const char *file, int mode)); # elif defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef access # define access _access # endif _GL_CXXALIAS_MDA (access, int, (const char *file, int mode)); # else _GL_CXXALIAS_SYS (access, int, (const char *file, int mode)); # endif _GL_CXXALIASWARN (access); #elif defined GNULIB_POSIXCHECK # undef access # if HAVE_RAW_DECL_ACCESS /* The access() function is a security risk. */ _GL_WARN_ON_USE (access, "access does not always support X_OK - " "use gnulib module access for portability; " "also, this function is a security risk - " "use the gnulib module faccessat instead"); # endif #elif @GNULIB_MDA_ACCESS@ /* On native Windows, map 'access' to '_access', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::access always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef access # define access _access # endif _GL_CXXALIAS_MDA (access, int, (const char *file, int mode)); # else _GL_CXXALIAS_SYS (access, int, (const char *file, int mode)); # endif _GL_CXXALIASWARN (access); #endif #if @GNULIB_CHDIR@ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef chdir # define chdir _chdir # endif _GL_CXXALIAS_MDA (chdir, int, (const char *file)); # else _GL_CXXALIAS_SYS (chdir, int, (const char *file) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIASWARN (chdir); #elif defined GNULIB_POSIXCHECK # undef chdir # if HAVE_RAW_DECL_CHDIR _GL_WARN_ON_USE (chown, "chdir is not always in <unistd.h> - " "use gnulib module chdir for portability"); # endif #elif @GNULIB_MDA_CHDIR@ /* On native Windows, map 'chdir' to '_chdir', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::chdir always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef chdir # define chdir _chdir # endif _GL_CXXALIAS_MDA (chdir, int, (const char *file)); # else _GL_CXXALIAS_SYS (chdir, int, (const char *file) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIASWARN (chdir); #endif #if @GNULIB_CHOWN@ /* Change the owner of FILE to UID (if UID is not -1) and the group of FILE to GID (if GID is not -1). Follow symbolic links. Return 0 if successful, otherwise -1 and errno set. See the POSIX:2008 specification <https://pubs.opengroup.org/onlinepubs/9699919799/functions/chown.html. */ # if @REPLACE_CHOWN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef chown # define chown rpl_chown # endif _GL_FUNCDECL_RPL (chown, int, (const char *file, uid_t uid, gid_t gid) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (chown, int, (const char *file, uid_t uid, gid_t gid)); # else # if !@HAVE_CHOWN@ _GL_FUNCDECL_SYS (chown, int, (const char *file, uid_t uid, gid_t gid) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (chown, int, (const char *file, uid_t uid, gid_t gid)); # endif _GL_CXXALIASWARN (chown); #elif defined GNULIB_POSIXCHECK # undef chown # if HAVE_RAW_DECL_CHOWN _GL_WARN_ON_USE (chown, "chown fails to follow symlinks on some systems and " "doesn't treat a uid or gid of -1 on some systems - " "use gnulib module chown for portability"); # endif #endif #if @GNULIB_CLOSE@ # if @REPLACE_CLOSE@ /* Automatically included by modules that need a replacement for close. */ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef close # define close rpl_close # endif _GL_FUNCDECL_RPL (close, int, (int fd)); _GL_CXXALIAS_RPL (close, int, (int fd)); # elif defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef close # define close _close # endif _GL_CXXALIAS_MDA (close, int, (int fd)); # else _GL_CXXALIAS_SYS (close, int, (int fd)); # endif _GL_CXXALIASWARN (close); #elif @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ # undef close # define close close_used_without_requesting_gnulib_module_close #elif defined GNULIB_POSIXCHECK # undef close /* Assume close is always declared. */ _GL_WARN_ON_USE (close, "close does not portably work on sockets - " "use gnulib module close for portability"); #elif @GNULIB_MDA_CLOSE@ /* On native Windows, map 'close' to '_close', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::close always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef close # define close _close # endif _GL_CXXALIAS_MDA (close, int, (int fd)); # else _GL_CXXALIAS_SYS (close, int, (int fd)); # endif _GL_CXXALIASWARN (close); #endif #if @GNULIB_COPY_FILE_RANGE@ # if @REPLACE_COPY_FILE_RANGE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef copy_file_range # define copy_file_range rpl_copy_file_range # endif _GL_FUNCDECL_RPL (copy_file_range, ssize_t, (int ifd, off_t *ipos, int ofd, off_t *opos, size_t len, unsigned flags)); _GL_CXXALIAS_RPL (copy_file_range, ssize_t, (int ifd, off_t *ipos, int ofd, off_t *opos, size_t len, unsigned flags)); # else # if !@HAVE_COPY_FILE_RANGE@ _GL_FUNCDECL_SYS (copy_file_range, ssize_t, (int ifd, off_t *ipos, int ofd, off_t *opos, size_t len, unsigned flags)); # endif _GL_CXXALIAS_SYS (copy_file_range, ssize_t, (int ifd, off_t *ipos, int ofd, off_t *opos, size_t len, unsigned flags)); # endif _GL_CXXALIASWARN (copy_file_range); #elif defined GNULIB_POSIXCHECK # undef copy_file_range # if HAVE_RAW_DECL_COPY_FILE_RANGE _GL_WARN_ON_USE (copy_file_range, "copy_file_range is unportable - " "use gnulib module copy_file_range for portability"); # endif #endif #if @GNULIB_DUP@ # if @REPLACE_DUP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define dup rpl_dup # endif _GL_FUNCDECL_RPL (dup, int, (int oldfd)); _GL_CXXALIAS_RPL (dup, int, (int oldfd)); # elif defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef dup # define dup _dup # endif _GL_CXXALIAS_MDA (dup, int, (int oldfd)); # else _GL_CXXALIAS_SYS (dup, int, (int oldfd)); # endif _GL_CXXALIASWARN (dup); #elif defined GNULIB_POSIXCHECK # undef dup # if HAVE_RAW_DECL_DUP _GL_WARN_ON_USE (dup, "dup is unportable - " "use gnulib module dup for portability"); # endif #elif @GNULIB_MDA_DUP@ /* On native Windows, map 'dup' to '_dup', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::dup always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef dup # define dup _dup # endif _GL_CXXALIAS_MDA (dup, int, (int oldfd)); # else _GL_CXXALIAS_SYS (dup, int, (int oldfd)); # endif _GL_CXXALIASWARN (dup); #endif #if @GNULIB_DUP2@ /* Copy the file descriptor OLDFD into file descriptor NEWFD. Do nothing if NEWFD = OLDFD, otherwise close NEWFD first if it is open. Return newfd if successful, otherwise -1 and errno set. See the POSIX:2008 specification <https://pubs.opengroup.org/onlinepubs/9699919799/functions/dup2.html>. */ # if @REPLACE_DUP2@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define dup2 rpl_dup2 # endif _GL_FUNCDECL_RPL (dup2, int, (int oldfd, int newfd)); _GL_CXXALIAS_RPL (dup2, int, (int oldfd, int newfd)); # elif defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef dup2 # define dup2 _dup2 # endif _GL_CXXALIAS_MDA (dup2, int, (int oldfd, int newfd)); # else _GL_CXXALIAS_SYS (dup2, int, (int oldfd, int newfd)); # endif _GL_CXXALIASWARN (dup2); #elif defined GNULIB_POSIXCHECK # undef dup2 # if HAVE_RAW_DECL_DUP2 _GL_WARN_ON_USE (dup2, "dup2 is unportable - " "use gnulib module dup2 for portability"); # endif #elif @GNULIB_MDA_DUP2@ /* On native Windows, map 'dup2' to '_dup2', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::dup2 always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef dup2 # define dup2 _dup2 # endif _GL_CXXALIAS_MDA (dup2, int, (int oldfd, int newfd)); # else _GL_CXXALIAS_SYS (dup2, int, (int oldfd, int newfd)); # endif _GL_CXXALIASWARN (dup2); #endif #if @GNULIB_DUP3@ /* Copy the file descriptor OLDFD into file descriptor NEWFD, with the specified flags. The flags are a bitmask, possibly including O_CLOEXEC (defined in <fcntl.h>) and O_TEXT, O_BINARY (defined in "binary-io.h"). Close NEWFD first if it is open. Return newfd if successful, otherwise -1 and errno set. See the Linux man page at <https://www.kernel.org/doc/man-pages/online/pages/man2/dup3.2.html>. */ # if @REPLACE_DUP3@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef dup3 # define dup3 rpl_dup3 # endif _GL_FUNCDECL_RPL (dup3, int, (int oldfd, int newfd, int flags)); _GL_CXXALIAS_RPL (dup3, int, (int oldfd, int newfd, int flags)); # else # if !@HAVE_DUP3@ _GL_FUNCDECL_SYS (dup3, int, (int oldfd, int newfd, int flags)); # endif _GL_CXXALIAS_SYS (dup3, int, (int oldfd, int newfd, int flags)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (dup3); # endif #elif defined GNULIB_POSIXCHECK # undef dup3 # if HAVE_RAW_DECL_DUP3 _GL_WARN_ON_USE (dup3, "dup3 is unportable - " "use gnulib module dup3 for portability"); # endif #endif #if @GNULIB_ENVIRON@ # if defined __CYGWIN__ && !defined __i386__ /* The 'environ' variable is defined in a DLL. Therefore its declaration needs the '__declspec(dllimport)' attribute, but the system's <unistd.h> lacks it. This leads to a link error on 64-bit Cygwin when the option -Wl,--disable-auto-import is in use. */ _GL_EXTERN_C __declspec(dllimport) char **environ; # endif # if !@HAVE_DECL_ENVIRON@ /* Set of environment variables and values. An array of strings of the form "VARIABLE=VALUE", terminated with a NULL. */ # if defined __APPLE__ && defined __MACH__ # include <TargetConditionals.h> # if !TARGET_OS_IPHONE && !TARGET_IPHONE_SIMULATOR # define _GL_USE_CRT_EXTERNS # endif # endif # ifdef _GL_USE_CRT_EXTERNS # include <crt_externs.h> # define environ (*_NSGetEnviron ()) # else # ifdef __cplusplus extern "C" { # endif extern char **environ; # ifdef __cplusplus } # endif # endif # endif #elif defined GNULIB_POSIXCHECK # if HAVE_RAW_DECL_ENVIRON _GL_UNISTD_INLINE char *** _GL_WARN_ON_USE_ATTRIBUTE ("environ is unportable - " "use gnulib module environ for portability") rpl_environ (void) { return &environ; } # undef environ # define environ (*rpl_environ ()) # endif #endif #if @GNULIB_EUIDACCESS@ /* Like access(), except that it uses the effective user id and group id of the current process. */ # if !@HAVE_EUIDACCESS@ _GL_FUNCDECL_SYS (euidaccess, int, (const char *filename, int mode) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (euidaccess, int, (const char *filename, int mode)); _GL_CXXALIASWARN (euidaccess); # if defined GNULIB_POSIXCHECK /* Like access(), this function is a security risk. */ _GL_WARN_ON_USE (euidaccess, "the euidaccess function is a security risk - " "use the gnulib module faccessat instead"); # endif #elif defined GNULIB_POSIXCHECK # undef euidaccess # if HAVE_RAW_DECL_EUIDACCESS _GL_WARN_ON_USE (euidaccess, "euidaccess is unportable - " "use gnulib module euidaccess for portability"); # endif #endif #if @GNULIB_EXECL@ # if @REPLACE_EXECL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef execl # define execl rpl_execl # endif _GL_FUNCDECL_RPL (execl, int, (const char *program, const char *arg, ...) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (execl, int, (const char *program, const char *arg, ...)); # else _GL_CXXALIAS_SYS (execl, int, (const char *program, const char *arg, ...)); # endif _GL_CXXALIASWARN (execl); #elif defined GNULIB_POSIXCHECK # undef execl # if HAVE_RAW_DECL_EXECL _GL_WARN_ON_USE (execl, "execl behaves very differently on mingw - " "use gnulib module execl for portability"); # endif #elif @GNULIB_MDA_EXECL@ /* On native Windows, map 'execl' to '_execl', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::execl always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef execl # define execl _execl # endif _GL_CXXALIAS_MDA (execl, intptr_t, (const char *program, const char *arg, ...)); # else _GL_CXXALIAS_SYS (execl, int, (const char *program, const char *arg, ...)); # endif _GL_CXXALIASWARN (execl); #endif #if @GNULIB_EXECLE@ # if @REPLACE_EXECLE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef execle # define execle rpl_execle # endif _GL_FUNCDECL_RPL (execle, int, (const char *program, const char *arg, ...) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (execle, int, (const char *program, const char *arg, ...)); # else _GL_CXXALIAS_SYS (execle, int, (const char *program, const char *arg, ...)); # endif _GL_CXXALIASWARN (execle); #elif defined GNULIB_POSIXCHECK # undef execle # if HAVE_RAW_DECL_EXECLE _GL_WARN_ON_USE (execle, "execle behaves very differently on mingw - " "use gnulib module execle for portability"); # endif #elif @GNULIB_MDA_EXECLE@ /* On native Windows, map 'execle' to '_execle', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::execle always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef execle # define execle _execle # endif _GL_CXXALIAS_MDA (execle, intptr_t, (const char *program, const char *arg, ...)); # else _GL_CXXALIAS_SYS (execle, int, (const char *program, const char *arg, ...)); # endif _GL_CXXALIASWARN (execle); #endif #if @GNULIB_EXECLP@ # if @REPLACE_EXECLP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef execlp # define execlp rpl_execlp # endif _GL_FUNCDECL_RPL (execlp, int, (const char *program, const char *arg, ...) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (execlp, int, (const char *program, const char *arg, ...)); # else _GL_CXXALIAS_SYS (execlp, int, (const char *program, const char *arg, ...)); # endif _GL_CXXALIASWARN (execlp); #elif defined GNULIB_POSIXCHECK # undef execlp # if HAVE_RAW_DECL_EXECLP _GL_WARN_ON_USE (execlp, "execlp behaves very differently on mingw - " "use gnulib module execlp for portability"); # endif #elif @GNULIB_MDA_EXECLP@ /* On native Windows, map 'execlp' to '_execlp', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::execlp always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef execlp # define execlp _execlp # endif _GL_CXXALIAS_MDA (execlp, intptr_t, (const char *program, const char *arg, ...)); # else _GL_CXXALIAS_SYS (execlp, int, (const char *program, const char *arg, ...)); # endif _GL_CXXALIASWARN (execlp); #endif #if @GNULIB_EXECV@ # if @REPLACE_EXECV@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef execv # define execv rpl_execv # endif _GL_FUNCDECL_RPL (execv, int, (const char *program, char * const *argv) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (execv, int, (const char *program, char * const *argv)); # else _GL_CXXALIAS_SYS (execv, int, (const char *program, char * const *argv)); # endif _GL_CXXALIASWARN (execv); #elif defined GNULIB_POSIXCHECK # undef execv # if HAVE_RAW_DECL_EXECV _GL_WARN_ON_USE (execv, "execv behaves very differently on mingw - " "use gnulib module execv for portability"); # endif #elif @GNULIB_MDA_EXECV@ /* On native Windows, map 'execv' to '_execv', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::execv always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef execv # define execv _execv # endif _GL_CXXALIAS_MDA_CAST (execv, intptr_t, (const char *program, char * const *argv)); # else _GL_CXXALIAS_SYS (execv, int, (const char *program, char * const *argv)); # endif _GL_CXXALIASWARN (execv); #endif #if @GNULIB_EXECVE@ # if @REPLACE_EXECVE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef execve # define execve rpl_execve # endif _GL_FUNCDECL_RPL (execve, int, (const char *program, char * const *argv, char * const *env) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (execve, int, (const char *program, char * const *argv, char * const *env)); # else _GL_CXXALIAS_SYS (execve, int, (const char *program, char * const *argv, char * const *env)); # endif _GL_CXXALIASWARN (execve); #elif defined GNULIB_POSIXCHECK # undef execve # if HAVE_RAW_DECL_EXECVE _GL_WARN_ON_USE (execve, "execve behaves very differently on mingw - " "use gnulib module execve for portability"); # endif #elif @GNULIB_MDA_EXECVE@ /* On native Windows, map 'execve' to '_execve', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::execve always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef execve # define execve _execve # endif _GL_CXXALIAS_MDA_CAST (execve, intptr_t, (const char *program, char * const *argv, char * const *env)); # else _GL_CXXALIAS_SYS (execve, int, (const char *program, char * const *argv, char * const *env)); # endif _GL_CXXALIASWARN (execve); #endif #if @GNULIB_EXECVP@ # if @REPLACE_EXECVP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef execvp # define execvp rpl_execvp # endif _GL_FUNCDECL_RPL (execvp, int, (const char *program, char * const *argv) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (execvp, int, (const char *program, char * const *argv)); # else _GL_CXXALIAS_SYS (execvp, int, (const char *program, char * const *argv)); # endif _GL_CXXALIASWARN (execvp); #elif defined GNULIB_POSIXCHECK # undef execvp # if HAVE_RAW_DECL_EXECVP _GL_WARN_ON_USE (execvp, "execvp behaves very differently on mingw - " "use gnulib module execvp for portability"); # endif #elif @GNULIB_MDA_EXECVP@ /* On native Windows, map 'execvp' to '_execvp', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::execvp always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef execvp # define execvp _execvp # endif _GL_CXXALIAS_MDA_CAST (execvp, intptr_t, (const char *program, char * const *argv)); # else _GL_CXXALIAS_SYS (execvp, int, (const char *program, char * const *argv)); # endif _GL_CXXALIASWARN (execvp); #endif #if @GNULIB_EXECVPE@ # if @REPLACE_EXECVPE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef execvpe # define execvpe rpl_execvpe # endif _GL_FUNCDECL_RPL (execvpe, int, (const char *program, char * const *argv, char * const *env) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (execvpe, int, (const char *program, char * const *argv, char * const *env)); # else # if !@HAVE_DECL_EXECVPE@ _GL_FUNCDECL_SYS (execvpe, int, (const char *program, char * const *argv, char * const *env) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (execvpe, int, (const char *program, char * const *argv, char * const *env)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (execvpe); # endif #elif defined GNULIB_POSIXCHECK # undef execvpe # if HAVE_RAW_DECL_EXECVPE _GL_WARN_ON_USE (execvpe, "execvpe behaves very differently on mingw - " "use gnulib module execvpe for portability"); # endif #elif @GNULIB_MDA_EXECVPE@ /* On native Windows, map 'execvpe' to '_execvpe', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::execvpe on all platforms that have it. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef execvpe # define execvpe _execvpe # endif _GL_CXXALIAS_MDA_CAST (execvpe, intptr_t, (const char *program, char * const *argv, char * const *env)); # elif @HAVE_EXECVPE@ # if !@HAVE_DECL_EXECVPE@ _GL_FUNCDECL_SYS (execvpe, int, (const char *program, char * const *argv, char * const *env) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (execvpe, int, (const char *program, char * const *argv, char * const *env)); # endif # if (defined _WIN32 && !defined __CYGWIN__) || @HAVE_EXECVPE@ _GL_CXXALIASWARN (execvpe); # endif #endif #if @GNULIB_FACCESSAT@ # if @REPLACE_FACCESSAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef faccessat # define faccessat rpl_faccessat # endif _GL_FUNCDECL_RPL (faccessat, int, (int fd, char const *name, int mode, int flag) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (faccessat, int, (int fd, char const *name, int mode, int flag)); # else # if !@HAVE_FACCESSAT@ _GL_FUNCDECL_SYS (faccessat, int, (int fd, char const *file, int mode, int flag) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (faccessat, int, (int fd, char const *file, int mode, int flag)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (faccessat); # endif #elif defined GNULIB_POSIXCHECK # undef faccessat # if HAVE_RAW_DECL_FACCESSAT _GL_WARN_ON_USE (faccessat, "faccessat is not portable - " "use gnulib module faccessat for portability"); # endif #endif #if @GNULIB_FCHDIR@ /* Change the process' current working directory to the directory on which the given file descriptor is open. Return 0 if successful, otherwise -1 and errno set. See the POSIX:2008 specification <https://pubs.opengroup.org/onlinepubs/9699919799/functions/fchdir.html>. */ # if ! @HAVE_FCHDIR@ _GL_FUNCDECL_SYS (fchdir, int, (int /*fd*/)); /* Gnulib internal hooks needed to maintain the fchdir metadata. */ _GL_EXTERN_C int _gl_register_fd (int fd, const char *filename) _GL_ARG_NONNULL ((2)); _GL_EXTERN_C void _gl_unregister_fd (int fd); _GL_EXTERN_C int _gl_register_dup (int oldfd, int newfd); _GL_EXTERN_C const char *_gl_directory_name (int fd); # else # if !@HAVE_DECL_FCHDIR@ _GL_FUNCDECL_SYS (fchdir, int, (int /*fd*/)); # endif # endif _GL_CXXALIAS_SYS (fchdir, int, (int /*fd*/)); _GL_CXXALIASWARN (fchdir); #elif defined GNULIB_POSIXCHECK # undef fchdir # if HAVE_RAW_DECL_FCHDIR _GL_WARN_ON_USE (fchdir, "fchdir is unportable - " "use gnulib module fchdir for portability"); # endif #endif #if @GNULIB_FCHOWNAT@ # if @REPLACE_FCHOWNAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fchownat # define fchownat rpl_fchownat # endif _GL_FUNCDECL_RPL (fchownat, int, (int fd, char const *file, uid_t owner, gid_t group, int flag) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (fchownat, int, (int fd, char const *file, uid_t owner, gid_t group, int flag)); # else # if !@HAVE_FCHOWNAT@ _GL_FUNCDECL_SYS (fchownat, int, (int fd, char const *file, uid_t owner, gid_t group, int flag) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (fchownat, int, (int fd, char const *file, uid_t owner, gid_t group, int flag)); # endif _GL_CXXALIASWARN (fchownat); #elif defined GNULIB_POSIXCHECK # undef fchownat # if HAVE_RAW_DECL_FCHOWNAT _GL_WARN_ON_USE (fchownat, "fchownat is not portable - " "use gnulib module fchownat for portability"); # endif #endif #if @GNULIB_FDATASYNC@ /* Synchronize changes to a file. Return 0 if successful, otherwise -1 and errno set. See POSIX:2008 specification <https://pubs.opengroup.org/onlinepubs/9699919799/functions/fdatasync.html>. */ # if @REPLACE_FDATASYNC@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fdatasync # define fdatasync rpl_fdatasync # endif _GL_FUNCDECL_RPL (fdatasync, int, (int fd)); _GL_CXXALIAS_RPL (fdatasync, int, (int fd)); # else # if !@HAVE_FDATASYNC@|| !@HAVE_DECL_FDATASYNC@ _GL_FUNCDECL_SYS (fdatasync, int, (int fd)); # endif _GL_CXXALIAS_SYS (fdatasync, int, (int fd)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (fdatasync); # endif #elif defined GNULIB_POSIXCHECK # undef fdatasync # if HAVE_RAW_DECL_FDATASYNC _GL_WARN_ON_USE (fdatasync, "fdatasync is unportable - " "use gnulib module fdatasync for portability"); # endif #endif #if @GNULIB_FSYNC@ /* Synchronize changes, including metadata, to a file. Return 0 if successful, otherwise -1 and errno set. See POSIX:2008 specification <https://pubs.opengroup.org/onlinepubs/9699919799/functions/fsync.html>. */ # if !@HAVE_FSYNC@ _GL_FUNCDECL_SYS (fsync, int, (int fd)); # endif _GL_CXXALIAS_SYS (fsync, int, (int fd)); _GL_CXXALIASWARN (fsync); #elif defined GNULIB_POSIXCHECK # undef fsync # if HAVE_RAW_DECL_FSYNC _GL_WARN_ON_USE (fsync, "fsync is unportable - " "use gnulib module fsync for portability"); # endif #endif #if @GNULIB_FTRUNCATE@ /* Change the size of the file to which FD is opened to become equal to LENGTH. Return 0 if successful, otherwise -1 and errno set. See the POSIX:2008 specification <https://pubs.opengroup.org/onlinepubs/9699919799/functions/ftruncate.html>. */ # if @REPLACE_FTRUNCATE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ftruncate # define ftruncate rpl_ftruncate # endif _GL_FUNCDECL_RPL (ftruncate, int, (int fd, off_t length)); _GL_CXXALIAS_RPL (ftruncate, int, (int fd, off_t length)); # else # if !@HAVE_FTRUNCATE@ _GL_FUNCDECL_SYS (ftruncate, int, (int fd, off_t length)); # endif _GL_CXXALIAS_SYS (ftruncate, int, (int fd, off_t length)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (ftruncate); # endif #elif defined GNULIB_POSIXCHECK # undef ftruncate # if HAVE_RAW_DECL_FTRUNCATE _GL_WARN_ON_USE (ftruncate, "ftruncate is unportable - " "use gnulib module ftruncate for portability"); # endif #endif #if @GNULIB_GETCWD@ /* Get the name of the current working directory, and put it in SIZE bytes of BUF. Return BUF if successful, or NULL if the directory couldn't be determined or SIZE was too small. See the POSIX:2008 specification <https://pubs.opengroup.org/onlinepubs/9699919799/functions/getcwd.html>. Additionally, the gnulib module 'getcwd' guarantees the following GNU extension: If BUF is NULL, an array is allocated with 'malloc'; the array is SIZE bytes long, unless SIZE == 0, in which case it is as big as necessary. */ # if @REPLACE_GETCWD@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define getcwd rpl_getcwd # endif _GL_FUNCDECL_RPL (getcwd, char *, (char *buf, size_t size)); _GL_CXXALIAS_RPL (getcwd, char *, (char *buf, size_t size)); # elif defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getcwd # define getcwd _getcwd # endif _GL_CXXALIAS_MDA (getcwd, char *, (char *buf, size_t size)); # else /* Need to cast, because on mingw, the second parameter is int size. */ _GL_CXXALIAS_SYS_CAST (getcwd, char *, (char *buf, size_t size)); # endif _GL_CXXALIASWARN (getcwd); #elif defined GNULIB_POSIXCHECK # undef getcwd # if HAVE_RAW_DECL_GETCWD _GL_WARN_ON_USE (getcwd, "getcwd is unportable - " "use gnulib module getcwd for portability"); # endif #elif @GNULIB_MDA_GETCWD@ /* On native Windows, map 'getcwd' to '_getcwd', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::getcwd always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getcwd # define getcwd _getcwd # endif /* Need to cast, because on mingw, the second parameter is either 'int size' or 'size_t size'. */ _GL_CXXALIAS_MDA_CAST (getcwd, char *, (char *buf, size_t size)); # else _GL_CXXALIAS_SYS_CAST (getcwd, char *, (char *buf, size_t size)); # endif _GL_CXXALIASWARN (getcwd); #endif #if @GNULIB_GETDOMAINNAME@ /* Return the NIS domain name of the machine. WARNING! The NIS domain name is unrelated to the fully qualified host name of the machine. It is also unrelated to email addresses. WARNING! The NIS domain name is usually the empty string or "(none)" when not using NIS. Put up to LEN bytes of the NIS domain name into NAME. Null terminate it if the name is shorter than LEN. If the NIS domain name is longer than LEN, set errno = EINVAL and return -1. Return 0 if successful, otherwise set errno and return -1. */ # if @REPLACE_GETDOMAINNAME@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getdomainname # define getdomainname rpl_getdomainname # endif _GL_FUNCDECL_RPL (getdomainname, int, (char *name, size_t len) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (getdomainname, int, (char *name, size_t len)); # else # if !@HAVE_DECL_GETDOMAINNAME@ _GL_FUNCDECL_SYS (getdomainname, int, (char *name, size_t len) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (getdomainname, int, (char *name, size_t len)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (getdomainname); # endif #elif defined GNULIB_POSIXCHECK # undef getdomainname # if HAVE_RAW_DECL_GETDOMAINNAME _GL_WARN_ON_USE (getdomainname, "getdomainname is unportable - " "use gnulib module getdomainname for portability"); # endif #endif #if @GNULIB_GETDTABLESIZE@ /* Return the maximum number of file descriptors in the current process. In POSIX, this is same as sysconf (_SC_OPEN_MAX). */ # if @REPLACE_GETDTABLESIZE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getdtablesize # define getdtablesize rpl_getdtablesize # endif _GL_FUNCDECL_RPL (getdtablesize, int, (void)); _GL_CXXALIAS_RPL (getdtablesize, int, (void)); # else # if !@HAVE_GETDTABLESIZE@ _GL_FUNCDECL_SYS (getdtablesize, int, (void)); # endif /* Need to cast, because on AIX, the parameter list is (...). */ _GL_CXXALIAS_SYS_CAST (getdtablesize, int, (void)); # endif _GL_CXXALIASWARN (getdtablesize); #elif defined GNULIB_POSIXCHECK # undef getdtablesize # if HAVE_RAW_DECL_GETDTABLESIZE _GL_WARN_ON_USE (getdtablesize, "getdtablesize is unportable - " "use gnulib module getdtablesize for portability"); # endif #endif #if @GNULIB_GETENTROPY@ /* Fill a buffer with random bytes. */ # if @REPLACE_GETENTROPY@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getentropy # define getentropy rpl_getentropy # endif _GL_FUNCDECL_RPL (getentropy, int, (void *buffer, size_t length)); _GL_CXXALIAS_RPL (getentropy, int, (void *buffer, size_t length)); # else # if !@HAVE_GETENTROPY@ _GL_FUNCDECL_SYS (getentropy, int, (void *buffer, size_t length)); # endif _GL_CXXALIAS_SYS (getentropy, int, (void *buffer, size_t length)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (getentropy); # endif #elif defined GNULIB_POSIXCHECK # undef getentropy # if HAVE_RAW_DECL_GETENTROPY _GL_WARN_ON_USE (getentropy, "getentropy is unportable - " "use gnulib module getentropy for portability"); # endif #endif #if @GNULIB_GETGROUPS@ /* Return the supplemental groups that the current process belongs to. It is unspecified whether the effective group id is in the list. If N is 0, return the group count; otherwise, N describes how many entries are available in GROUPS. Return -1 and set errno if N is not 0 and not large enough. Fails with ENOSYS on some systems. */ # if @REPLACE_GETGROUPS@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getgroups # define getgroups rpl_getgroups # endif _GL_FUNCDECL_RPL (getgroups, int, (int n, gid_t *groups)); _GL_CXXALIAS_RPL (getgroups, int, (int n, gid_t *groups)); # else # if !@HAVE_GETGROUPS@ _GL_FUNCDECL_SYS (getgroups, int, (int n, gid_t *groups)); # endif _GL_CXXALIAS_SYS (getgroups, int, (int n, gid_t *groups)); # endif _GL_CXXALIASWARN (getgroups); #elif defined GNULIB_POSIXCHECK # undef getgroups # if HAVE_RAW_DECL_GETGROUPS _GL_WARN_ON_USE (getgroups, "getgroups is unportable - " "use gnulib module getgroups for portability"); # endif #endif #if @GNULIB_GETHOSTNAME@ /* Return the standard host name of the machine. WARNING! The host name may or may not be fully qualified. Put up to LEN bytes of the host name into NAME. Null terminate it if the name is shorter than LEN. If the host name is longer than LEN, set errno = EINVAL and return -1. Return 0 if successful, otherwise set errno and return -1. */ # if @UNISTD_H_HAVE_WINSOCK2_H@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef gethostname # define gethostname rpl_gethostname # endif _GL_FUNCDECL_RPL (gethostname, int, (char *name, size_t len) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (gethostname, int, (char *name, size_t len)); # else # if !@HAVE_GETHOSTNAME@ _GL_FUNCDECL_SYS (gethostname, int, (char *name, size_t len) _GL_ARG_NONNULL ((1))); # endif /* Need to cast, because on Solaris 10 and OSF/1 5.1 systems, the second parameter is int len. */ _GL_CXXALIAS_SYS_CAST (gethostname, int, (char *name, size_t len)); # endif _GL_CXXALIASWARN (gethostname); #elif @UNISTD_H_HAVE_WINSOCK2_H@ # undef gethostname # define gethostname gethostname_used_without_requesting_gnulib_module_gethostname #elif defined GNULIB_POSIXCHECK # undef gethostname # if HAVE_RAW_DECL_GETHOSTNAME _GL_WARN_ON_USE (gethostname, "gethostname is unportable - " "use gnulib module gethostname for portability"); # endif #endif #if @GNULIB_GETLOGIN@ /* Returns the user's login name, or NULL if it cannot be found. Upon error, returns NULL with errno set. See <https://pubs.opengroup.org/onlinepubs/9699919799/functions/getlogin.html>. Most programs don't need to use this function, because the information is available through environment variables: ${LOGNAME-$USER} on Unix platforms, $USERNAME on native Windows platforms. */ # if !@HAVE_DECL_GETLOGIN@ _GL_FUNCDECL_SYS (getlogin, char *, (void)); # endif _GL_CXXALIAS_SYS (getlogin, char *, (void)); _GL_CXXALIASWARN (getlogin); #elif defined GNULIB_POSIXCHECK # undef getlogin # if HAVE_RAW_DECL_GETLOGIN _GL_WARN_ON_USE (getlogin, "getlogin is unportable - " "use gnulib module getlogin for portability"); # endif #endif #if @GNULIB_GETLOGIN_R@ /* Copies the user's login name to NAME. The array pointed to by NAME has room for SIZE bytes. Returns 0 if successful. Upon error, an error number is returned, or -1 in the case that the login name cannot be found but no specific error is provided (this case is hopefully rare but is left open by the POSIX spec). See <https://pubs.opengroup.org/onlinepubs/9699919799/functions/getlogin.html>. Most programs don't need to use this function, because the information is available through environment variables: ${LOGNAME-$USER} on Unix platforms, $USERNAME on native Windows platforms. */ # if @REPLACE_GETLOGIN_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define getlogin_r rpl_getlogin_r # endif _GL_FUNCDECL_RPL (getlogin_r, int, (char *name, size_t size) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (getlogin_r, int, (char *name, size_t size)); # else # if !@HAVE_DECL_GETLOGIN_R@ _GL_FUNCDECL_SYS (getlogin_r, int, (char *name, size_t size) _GL_ARG_NONNULL ((1))); # endif /* Need to cast, because on Solaris 10 systems, the second argument is int size. */ _GL_CXXALIAS_SYS_CAST (getlogin_r, int, (char *name, size_t size)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (getlogin_r); # endif #elif defined GNULIB_POSIXCHECK # undef getlogin_r # if HAVE_RAW_DECL_GETLOGIN_R _GL_WARN_ON_USE (getlogin_r, "getlogin_r is unportable - " "use gnulib module getlogin_r for portability"); # endif #endif #if @GNULIB_GETPAGESIZE@ # if @REPLACE_GETPAGESIZE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define getpagesize rpl_getpagesize # endif _GL_FUNCDECL_RPL (getpagesize, int, (void)); _GL_CXXALIAS_RPL (getpagesize, int, (void)); # else /* On HP-UX, getpagesize exists, but it is not declared in <unistd.h> even if the compiler options -D_HPUX_SOURCE -D_XOPEN_SOURCE=600 are used. */ # if defined __hpux _GL_FUNCDECL_SYS (getpagesize, int, (void)); # endif # if !@HAVE_GETPAGESIZE@ # if !defined getpagesize /* This is for POSIX systems. */ # if !defined _gl_getpagesize && defined _SC_PAGESIZE # if ! (defined __VMS && __VMS_VER < 70000000) # define _gl_getpagesize() sysconf (_SC_PAGESIZE) # endif # endif /* This is for older VMS. */ # if !defined _gl_getpagesize && defined __VMS # ifdef __ALPHA # define _gl_getpagesize() 8192 # else # define _gl_getpagesize() 512 # endif # endif /* This is for BeOS. */ # if !defined _gl_getpagesize && @HAVE_OS_H@ # include <OS.h> # if defined B_PAGE_SIZE # define _gl_getpagesize() B_PAGE_SIZE # endif # endif /* This is for AmigaOS4.0. */ # if !defined _gl_getpagesize && defined __amigaos4__ # define _gl_getpagesize() 2048 # endif /* This is for older Unix systems. */ # if !defined _gl_getpagesize && @HAVE_SYS_PARAM_H@ # include <sys/param.h> # ifdef EXEC_PAGESIZE # define _gl_getpagesize() EXEC_PAGESIZE # else # ifdef NBPG # ifndef CLSIZE # define CLSIZE 1 # endif # define _gl_getpagesize() (NBPG * CLSIZE) # else # ifdef NBPC # define _gl_getpagesize() NBPC # endif # endif # endif # endif # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define getpagesize() _gl_getpagesize () # else # if !GNULIB_defined_getpagesize_function _GL_UNISTD_INLINE int getpagesize () { return _gl_getpagesize (); } # define GNULIB_defined_getpagesize_function 1 # endif # endif # endif # endif /* Need to cast, because on Cygwin 1.5.x systems, the return type is size_t. */ _GL_CXXALIAS_SYS_CAST (getpagesize, int, (void)); # endif # if @HAVE_DECL_GETPAGESIZE@ _GL_CXXALIASWARN (getpagesize); # endif #elif defined GNULIB_POSIXCHECK # undef getpagesize # if HAVE_RAW_DECL_GETPAGESIZE _GL_WARN_ON_USE (getpagesize, "getpagesize is unportable - " "use gnulib module getpagesize for portability"); # endif #endif #if @GNULIB_GETPASS@ /* Function getpass() from module 'getpass': Read a password from /dev/tty or stdin. Function getpass() from module 'getpass-gnu': Read a password of arbitrary length from /dev/tty or stdin. */ # if (@GNULIB_GETPASS@ && @REPLACE_GETPASS@) \ || (@GNULIB_GETPASS_GNU@ && @REPLACE_GETPASS_FOR_GETPASS_GNU@) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getpass # define getpass rpl_getpass # endif _GL_FUNCDECL_RPL (getpass, char *, (const char *prompt) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (getpass, char *, (const char *prompt)); # else # if !@HAVE_GETPASS@ _GL_FUNCDECL_SYS (getpass, char *, (const char *prompt) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (getpass, char *, (const char *prompt)); # endif _GL_CXXALIASWARN (getpass); #elif defined GNULIB_POSIXCHECK # undef getpass # if HAVE_RAW_DECL_GETPASS _GL_WARN_ON_USE (getpass, "getpass is unportable - " "use gnulib module getpass or getpass-gnu for portability"); # endif #endif #if @GNULIB_MDA_GETPID@ /* On native Windows, map 'getpid' to '_getpid', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::getpid always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getpid # define getpid _getpid # endif _GL_CXXALIAS_MDA (getpid, int, (void)); # else _GL_CXXALIAS_SYS (getpid, pid_t, (void)); # endif _GL_CXXALIASWARN (getpid); #endif #if @GNULIB_GETUSERSHELL@ /* Return the next valid login shell on the system, or NULL when the end of the list has been reached. */ # if !@HAVE_DECL_GETUSERSHELL@ _GL_FUNCDECL_SYS (getusershell, char *, (void)); # endif _GL_CXXALIAS_SYS (getusershell, char *, (void)); _GL_CXXALIASWARN (getusershell); #elif defined GNULIB_POSIXCHECK # undef getusershell # if HAVE_RAW_DECL_GETUSERSHELL _GL_WARN_ON_USE (getusershell, "getusershell is unportable - " "use gnulib module getusershell for portability"); # endif #endif #if @GNULIB_GETUSERSHELL@ /* Rewind to pointer that is advanced at each getusershell() call. */ # if !@HAVE_DECL_GETUSERSHELL@ _GL_FUNCDECL_SYS (setusershell, void, (void)); # endif _GL_CXXALIAS_SYS (setusershell, void, (void)); _GL_CXXALIASWARN (setusershell); #elif defined GNULIB_POSIXCHECK # undef setusershell # if HAVE_RAW_DECL_SETUSERSHELL _GL_WARN_ON_USE (setusershell, "setusershell is unportable - " "use gnulib module getusershell for portability"); # endif #endif #if @GNULIB_GETUSERSHELL@ /* Free the pointer that is advanced at each getusershell() call and associated resources. */ # if !@HAVE_DECL_GETUSERSHELL@ _GL_FUNCDECL_SYS (endusershell, void, (void)); # endif _GL_CXXALIAS_SYS (endusershell, void, (void)); _GL_CXXALIASWARN (endusershell); #elif defined GNULIB_POSIXCHECK # undef endusershell # if HAVE_RAW_DECL_ENDUSERSHELL _GL_WARN_ON_USE (endusershell, "endusershell is unportable - " "use gnulib module getusershell for portability"); # endif #endif #if @GNULIB_GROUP_MEMBER@ /* Determine whether group id is in calling user's group list. */ # if !@HAVE_GROUP_MEMBER@ _GL_FUNCDECL_SYS (group_member, int, (gid_t gid)); # endif _GL_CXXALIAS_SYS (group_member, int, (gid_t gid)); _GL_CXXALIASWARN (group_member); #elif defined GNULIB_POSIXCHECK # undef group_member # if HAVE_RAW_DECL_GROUP_MEMBER _GL_WARN_ON_USE (group_member, "group_member is unportable - " "use gnulib module group-member for portability"); # endif #endif #if @GNULIB_ISATTY@ # if @REPLACE_ISATTY@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef isatty # define isatty rpl_isatty # endif # define GNULIB_defined_isatty 1 _GL_FUNCDECL_RPL (isatty, int, (int fd)); _GL_CXXALIAS_RPL (isatty, int, (int fd)); # elif defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef isatty # define isatty _isatty # endif _GL_CXXALIAS_MDA (isatty, int, (int fd)); # else _GL_CXXALIAS_SYS (isatty, int, (int fd)); # endif _GL_CXXALIASWARN (isatty); #elif defined GNULIB_POSIXCHECK # undef isatty # if HAVE_RAW_DECL_ISATTY _GL_WARN_ON_USE (isatty, "isatty has portability problems on native Windows - " "use gnulib module isatty for portability"); # endif #elif @GNULIB_MDA_ISATTY@ /* On native Windows, map 'isatty' to '_isatty', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::isatty always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef isatty # define isatty _isatty # endif _GL_CXXALIAS_MDA (isatty, int, (int fd)); # else _GL_CXXALIAS_SYS (isatty, int, (int fd)); # endif _GL_CXXALIASWARN (isatty); #endif #if @GNULIB_LCHOWN@ /* Change the owner of FILE to UID (if UID is not -1) and the group of FILE to GID (if GID is not -1). Do not follow symbolic links. Return 0 if successful, otherwise -1 and errno set. See the POSIX:2008 specification <https://pubs.opengroup.org/onlinepubs/9699919799/functions/lchown.html>. */ # if @REPLACE_LCHOWN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef lchown # define lchown rpl_lchown # endif _GL_FUNCDECL_RPL (lchown, int, (char const *file, uid_t owner, gid_t group) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (lchown, int, (char const *file, uid_t owner, gid_t group)); # else # if !@HAVE_LCHOWN@ _GL_FUNCDECL_SYS (lchown, int, (char const *file, uid_t owner, gid_t group) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (lchown, int, (char const *file, uid_t owner, gid_t group)); # endif _GL_CXXALIASWARN (lchown); #elif defined GNULIB_POSIXCHECK # undef lchown # if HAVE_RAW_DECL_LCHOWN _GL_WARN_ON_USE (lchown, "lchown is unportable to pre-POSIX.1-2001 systems - " "use gnulib module lchown for portability"); # endif #endif #if @GNULIB_LINK@ /* Create a new hard link for an existing file. Return 0 if successful, otherwise -1 and errno set. See POSIX:2008 specification <https://pubs.opengroup.org/onlinepubs/9699919799/functions/link.html>. */ # if @REPLACE_LINK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define link rpl_link # endif _GL_FUNCDECL_RPL (link, int, (const char *path1, const char *path2) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (link, int, (const char *path1, const char *path2)); # else # if !@HAVE_LINK@ _GL_FUNCDECL_SYS (link, int, (const char *path1, const char *path2) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (link, int, (const char *path1, const char *path2)); # endif _GL_CXXALIASWARN (link); #elif defined GNULIB_POSIXCHECK # undef link # if HAVE_RAW_DECL_LINK _GL_WARN_ON_USE (link, "link is unportable - " "use gnulib module link for portability"); # endif #endif #if @GNULIB_LINKAT@ /* Create a new hard link for an existing file, relative to two directories. FLAG controls whether symlinks are followed. Return 0 if successful, otherwise -1 and errno set. */ # if @REPLACE_LINKAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef linkat # define linkat rpl_linkat # endif _GL_FUNCDECL_RPL (linkat, int, (int fd1, const char *path1, int fd2, const char *path2, int flag) _GL_ARG_NONNULL ((2, 4))); _GL_CXXALIAS_RPL (linkat, int, (int fd1, const char *path1, int fd2, const char *path2, int flag)); # else # if !@HAVE_LINKAT@ _GL_FUNCDECL_SYS (linkat, int, (int fd1, const char *path1, int fd2, const char *path2, int flag) _GL_ARG_NONNULL ((2, 4))); # endif _GL_CXXALIAS_SYS (linkat, int, (int fd1, const char *path1, int fd2, const char *path2, int flag)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (linkat); # endif #elif defined GNULIB_POSIXCHECK # undef linkat # if HAVE_RAW_DECL_LINKAT _GL_WARN_ON_USE (linkat, "linkat is unportable - " "use gnulib module linkat for portability"); # endif #endif #if @GNULIB_LSEEK@ /* Set the offset of FD relative to SEEK_SET, SEEK_CUR, or SEEK_END. Return the new offset if successful, otherwise -1 and errno set. See the POSIX:2008 specification <https://pubs.opengroup.org/onlinepubs/9699919799/functions/lseek.html>. */ # if @REPLACE_LSEEK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define lseek rpl_lseek # endif _GL_FUNCDECL_RPL (lseek, off_t, (int fd, off_t offset, int whence)); _GL_CXXALIAS_RPL (lseek, off_t, (int fd, off_t offset, int whence)); # elif defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef lseek # define lseek _lseek # endif _GL_CXXALIAS_MDA (lseek, off_t, (int fd, off_t offset, int whence)); # else _GL_CXXALIAS_SYS (lseek, off_t, (int fd, off_t offset, int whence)); # endif _GL_CXXALIASWARN (lseek); #elif defined GNULIB_POSIXCHECK # undef lseek # if HAVE_RAW_DECL_LSEEK _GL_WARN_ON_USE (lseek, "lseek does not fail with ESPIPE on pipes on some " "systems - use gnulib module lseek for portability"); # endif #elif @GNULIB_MDA_LSEEK@ /* On native Windows, map 'lseek' to '_lseek', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::lseek always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef lseek # define lseek _lseek # endif _GL_CXXALIAS_MDA (lseek, long, (int fd, long offset, int whence)); # else _GL_CXXALIAS_SYS (lseek, off_t, (int fd, off_t offset, int whence)); # endif _GL_CXXALIASWARN (lseek); #endif #if @GNULIB_PIPE@ /* Create a pipe, defaulting to O_BINARY mode. Store the read-end as fd[0] and the write-end as fd[1]. Return 0 upon success, or -1 with errno set upon failure. */ # if !@HAVE_PIPE@ _GL_FUNCDECL_SYS (pipe, int, (int fd[2]) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pipe, int, (int fd[2])); _GL_CXXALIASWARN (pipe); #elif defined GNULIB_POSIXCHECK # undef pipe # if HAVE_RAW_DECL_PIPE _GL_WARN_ON_USE (pipe, "pipe is unportable - " "use gnulib module pipe-posix for portability"); # endif #endif #if @GNULIB_PIPE2@ /* Create a pipe, applying the given flags when opening the read-end of the pipe and the write-end of the pipe. The flags are a bitmask, possibly including O_CLOEXEC (defined in <fcntl.h>) and O_TEXT, O_BINARY (defined in "binary-io.h"). Store the read-end as fd[0] and the write-end as fd[1]. Return 0 upon success, or -1 with errno set upon failure. See also the Linux man page at <https://www.kernel.org/doc/man-pages/online/pages/man2/pipe2.2.html>. */ # if @REPLACE_PIPE2@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pipe2 # define pipe2 rpl_pipe2 # endif _GL_FUNCDECL_RPL (pipe2, int, (int fd[2], int flags) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (pipe2, int, (int fd[2], int flags)); # else _GL_FUNCDECL_SYS (pipe2, int, (int fd[2], int flags) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_SYS (pipe2, int, (int fd[2], int flags)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pipe2); # endif #elif defined GNULIB_POSIXCHECK # undef pipe2 # if HAVE_RAW_DECL_PIPE2 _GL_WARN_ON_USE (pipe2, "pipe2 is unportable - " "use gnulib module pipe2 for portability"); # endif #endif #if @GNULIB_PREAD@ /* Read at most BUFSIZE bytes from FD into BUF, starting at OFFSET. Return the number of bytes placed into BUF if successful, otherwise set errno and return -1. 0 indicates EOF. See the POSIX:2008 specification <https://pubs.opengroup.org/onlinepubs/9699919799/functions/pread.html>. */ # if @REPLACE_PREAD@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pread # define pread rpl_pread # endif _GL_FUNCDECL_RPL (pread, ssize_t, (int fd, void *buf, size_t bufsize, off_t offset) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (pread, ssize_t, (int fd, void *buf, size_t bufsize, off_t offset)); # else # if !@HAVE_PREAD@ _GL_FUNCDECL_SYS (pread, ssize_t, (int fd, void *buf, size_t bufsize, off_t offset) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (pread, ssize_t, (int fd, void *buf, size_t bufsize, off_t offset)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pread); # endif #elif defined GNULIB_POSIXCHECK # undef pread # if HAVE_RAW_DECL_PREAD _GL_WARN_ON_USE (pread, "pread is unportable - " "use gnulib module pread for portability"); # endif #endif #if @GNULIB_PWRITE@ /* Write at most BUFSIZE bytes from BUF into FD, starting at OFFSET. Return the number of bytes written if successful, otherwise set errno and return -1. 0 indicates nothing written. See the POSIX:2008 specification <https://pubs.opengroup.org/onlinepubs/9699919799/functions/pwrite.html>. */ # if @REPLACE_PWRITE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pwrite # define pwrite rpl_pwrite # endif _GL_FUNCDECL_RPL (pwrite, ssize_t, (int fd, const void *buf, size_t bufsize, off_t offset) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (pwrite, ssize_t, (int fd, const void *buf, size_t bufsize, off_t offset)); # else # if !@HAVE_PWRITE@ _GL_FUNCDECL_SYS (pwrite, ssize_t, (int fd, const void *buf, size_t bufsize, off_t offset) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (pwrite, ssize_t, (int fd, const void *buf, size_t bufsize, off_t offset)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pwrite); # endif #elif defined GNULIB_POSIXCHECK # undef pwrite # if HAVE_RAW_DECL_PWRITE _GL_WARN_ON_USE (pwrite, "pwrite is unportable - " "use gnulib module pwrite for portability"); # endif #endif #if @GNULIB_READ@ /* Read up to COUNT bytes from file descriptor FD into the buffer starting at BUF. See the POSIX:2008 specification <https://pubs.opengroup.org/onlinepubs/9699919799/functions/read.html>. */ # if @REPLACE_READ@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef read # define read rpl_read # endif _GL_FUNCDECL_RPL (read, ssize_t, (int fd, void *buf, size_t count) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (read, ssize_t, (int fd, void *buf, size_t count)); # elif defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef read # define read _read # endif _GL_CXXALIAS_MDA (read, ssize_t, (int fd, void *buf, size_t count)); # else _GL_CXXALIAS_SYS (read, ssize_t, (int fd, void *buf, size_t count)); # endif _GL_CXXALIASWARN (read); #elif @GNULIB_MDA_READ@ /* On native Windows, map 'read' to '_read', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::read always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef read # define read _read # endif # ifdef __MINGW32__ _GL_CXXALIAS_MDA (read, int, (int fd, void *buf, unsigned int count)); # else _GL_CXXALIAS_MDA (read, ssize_t, (int fd, void *buf, unsigned int count)); # endif # else _GL_CXXALIAS_SYS (read, ssize_t, (int fd, void *buf, size_t count)); # endif _GL_CXXALIASWARN (read); #endif #if @GNULIB_READLINK@ /* Read the contents of the symbolic link FILE and place the first BUFSIZE bytes of it into BUF. Return the number of bytes placed into BUF if successful, otherwise -1 and errno set. See the POSIX:2008 specification <https://pubs.opengroup.org/onlinepubs/9699919799/functions/readlink.html>. */ # if @REPLACE_READLINK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define readlink rpl_readlink # endif _GL_FUNCDECL_RPL (readlink, ssize_t, (const char *restrict file, char *restrict buf, size_t bufsize) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (readlink, ssize_t, (const char *restrict file, char *restrict buf, size_t bufsize)); # else # if !@HAVE_READLINK@ _GL_FUNCDECL_SYS (readlink, ssize_t, (const char *restrict file, char *restrict buf, size_t bufsize) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (readlink, ssize_t, (const char *restrict file, char *restrict buf, size_t bufsize)); # endif _GL_CXXALIASWARN (readlink); #elif defined GNULIB_POSIXCHECK # undef readlink # if HAVE_RAW_DECL_READLINK _GL_WARN_ON_USE (readlink, "readlink is unportable - " "use gnulib module readlink for portability"); # endif #endif #if @GNULIB_READLINKAT@ # if @REPLACE_READLINKAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define readlinkat rpl_readlinkat # endif _GL_FUNCDECL_RPL (readlinkat, ssize_t, (int fd, char const *restrict file, char *restrict buf, size_t len) _GL_ARG_NONNULL ((2, 3))); _GL_CXXALIAS_RPL (readlinkat, ssize_t, (int fd, char const *restrict file, char *restrict buf, size_t len)); # else # if !@HAVE_READLINKAT@ _GL_FUNCDECL_SYS (readlinkat, ssize_t, (int fd, char const *restrict file, char *restrict buf, size_t len) _GL_ARG_NONNULL ((2, 3))); # endif _GL_CXXALIAS_SYS (readlinkat, ssize_t, (int fd, char const *restrict file, char *restrict buf, size_t len)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (readlinkat); # endif #elif defined GNULIB_POSIXCHECK # undef readlinkat # if HAVE_RAW_DECL_READLINKAT _GL_WARN_ON_USE (readlinkat, "readlinkat is not portable - " "use gnulib module readlinkat for portability"); # endif #endif #if @GNULIB_RMDIR@ /* Remove the directory DIR. */ # if @REPLACE_RMDIR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define rmdir rpl_rmdir # endif _GL_FUNCDECL_RPL (rmdir, int, (char const *name) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (rmdir, int, (char const *name)); # elif defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef rmdir # define rmdir _rmdir # endif _GL_CXXALIAS_MDA (rmdir, int, (char const *name)); # else _GL_CXXALIAS_SYS (rmdir, int, (char const *name)); # endif _GL_CXXALIASWARN (rmdir); #elif defined GNULIB_POSIXCHECK # undef rmdir # if HAVE_RAW_DECL_RMDIR _GL_WARN_ON_USE (rmdir, "rmdir is unportable - " "use gnulib module rmdir for portability"); # endif #elif @GNULIB_MDA_RMDIR@ /* On native Windows, map 'rmdir' to '_rmdir', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::rmdir always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef rmdir # define rmdir _rmdir # endif _GL_CXXALIAS_MDA (rmdir, int, (char const *name)); # else _GL_CXXALIAS_SYS (rmdir, int, (char const *name)); # endif _GL_CXXALIASWARN (rmdir); #endif #if @GNULIB_SETHOSTNAME@ /* Set the host name of the machine. The host name may or may not be fully qualified. Put LEN bytes of NAME into the host name. Return 0 if successful, otherwise, set errno and return -1. Platforms with no ability to set the hostname return -1 and set errno = ENOSYS. */ # if @REPLACE_SETHOSTNAME@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef sethostname # define sethostname rpl_sethostname # endif _GL_FUNCDECL_RPL (sethostname, int, (const char *name, size_t len) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (sethostname, int, (const char *name, size_t len)); # else # if !@HAVE_SETHOSTNAME@ || !@HAVE_DECL_SETHOSTNAME@ _GL_FUNCDECL_SYS (sethostname, int, (const char *name, size_t len) _GL_ARG_NONNULL ((1))); # endif /* Need to cast, because on Solaris 11 2011-10, Mac OS X 10.5, IRIX 6.5 and FreeBSD 6.4 the second parameter is int. On Solaris 11 2011-10, the first parameter is not const. */ _GL_CXXALIAS_SYS_CAST (sethostname, int, (const char *name, size_t len)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (sethostname); # endif #elif defined GNULIB_POSIXCHECK # undef sethostname # if HAVE_RAW_DECL_SETHOSTNAME _GL_WARN_ON_USE (sethostname, "sethostname is unportable - " "use gnulib module sethostname for portability"); # endif #endif #if @GNULIB_SLEEP@ /* Pause the execution of the current thread for N seconds. Returns the number of seconds left to sleep. See the POSIX:2008 specification <https://pubs.opengroup.org/onlinepubs/9699919799/functions/sleep.html>. */ # if @REPLACE_SLEEP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef sleep # define sleep rpl_sleep # endif _GL_FUNCDECL_RPL (sleep, unsigned int, (unsigned int n)); _GL_CXXALIAS_RPL (sleep, unsigned int, (unsigned int n)); # else # if !@HAVE_SLEEP@ _GL_FUNCDECL_SYS (sleep, unsigned int, (unsigned int n)); # endif _GL_CXXALIAS_SYS (sleep, unsigned int, (unsigned int n)); # endif _GL_CXXALIASWARN (sleep); #elif defined GNULIB_POSIXCHECK # undef sleep # if HAVE_RAW_DECL_SLEEP _GL_WARN_ON_USE (sleep, "sleep is unportable - " "use gnulib module sleep for portability"); # endif #endif #if @GNULIB_MDA_SWAB@ /* On native Windows, map 'swab' to '_swab', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::swab always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef swab # define swab _swab # endif /* Need to cast, because in old mingw the arguments are (const char *from, char *to, size_t n). */ _GL_CXXALIAS_MDA_CAST (swab, void, (char *from, char *to, int n)); # else # if defined __hpux /* HP-UX */ _GL_CXXALIAS_SYS (swab, void, (const char *from, char *to, int n)); # elif defined __sun && (defined __SunOS_5_10 || defined __XOPEN_OR_POSIX) && !defined _XPG4 /* Solaris */ _GL_CXXALIAS_SYS (swab, void, (const char *from, char *to, ssize_t n)); # else _GL_CXXALIAS_SYS (swab, void, (const void *from, void *to, ssize_t n)); # endif # endif _GL_CXXALIASWARN (swab); #endif #if @GNULIB_SYMLINK@ # if @REPLACE_SYMLINK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef symlink # define symlink rpl_symlink # endif _GL_FUNCDECL_RPL (symlink, int, (char const *contents, char const *file) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (symlink, int, (char const *contents, char const *file)); # else # if !@HAVE_SYMLINK@ _GL_FUNCDECL_SYS (symlink, int, (char const *contents, char const *file) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (symlink, int, (char const *contents, char const *file)); # endif _GL_CXXALIASWARN (symlink); #elif defined GNULIB_POSIXCHECK # undef symlink # if HAVE_RAW_DECL_SYMLINK _GL_WARN_ON_USE (symlink, "symlink is not portable - " "use gnulib module symlink for portability"); # endif #endif #if @GNULIB_SYMLINKAT@ # if @REPLACE_SYMLINKAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef symlinkat # define symlinkat rpl_symlinkat # endif _GL_FUNCDECL_RPL (symlinkat, int, (char const *contents, int fd, char const *file) _GL_ARG_NONNULL ((1, 3))); _GL_CXXALIAS_RPL (symlinkat, int, (char const *contents, int fd, char const *file)); # else # if !@HAVE_SYMLINKAT@ _GL_FUNCDECL_SYS (symlinkat, int, (char const *contents, int fd, char const *file) _GL_ARG_NONNULL ((1, 3))); # endif _GL_CXXALIAS_SYS (symlinkat, int, (char const *contents, int fd, char const *file)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (symlinkat); # endif #elif defined GNULIB_POSIXCHECK # undef symlinkat # if HAVE_RAW_DECL_SYMLINKAT _GL_WARN_ON_USE (symlinkat, "symlinkat is not portable - " "use gnulib module symlinkat for portability"); # endif #endif #if @GNULIB_TRUNCATE@ /* Change the size of the file designated by FILENAME to become equal to LENGTH. Return 0 if successful, otherwise -1 and errno set. See the POSIX:2008 specification <https://pubs.opengroup.org/onlinepubs/9699919799/functions/truncate.html>. */ # if @REPLACE_TRUNCATE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef truncate # define truncate rpl_truncate # endif _GL_FUNCDECL_RPL (truncate, int, (const char *filename, off_t length) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (truncate, int, (const char *filename, off_t length)); # else # if !@HAVE_DECL_TRUNCATE@ _GL_FUNCDECL_SYS (truncate, int, (const char *filename, off_t length) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (truncate, int, (const char *filename, off_t length)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (truncate); # endif #elif defined GNULIB_POSIXCHECK # undef truncate # if HAVE_RAW_DECL_TRUNCATE _GL_WARN_ON_USE (truncate, "truncate is unportable - " "use gnulib module truncate for portability"); # endif #endif #if @GNULIB_TTYNAME_R@ /* Store at most BUFLEN characters of the pathname of the terminal FD is open on in BUF. Return 0 on success, otherwise an error number. */ # if @REPLACE_TTYNAME_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ttyname_r # define ttyname_r rpl_ttyname_r # endif _GL_FUNCDECL_RPL (ttyname_r, int, (int fd, char *buf, size_t buflen) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (ttyname_r, int, (int fd, char *buf, size_t buflen)); # else # if !@HAVE_DECL_TTYNAME_R@ _GL_FUNCDECL_SYS (ttyname_r, int, (int fd, char *buf, size_t buflen) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (ttyname_r, int, (int fd, char *buf, size_t buflen)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (ttyname_r); # endif #elif defined GNULIB_POSIXCHECK # undef ttyname_r # if HAVE_RAW_DECL_TTYNAME_R _GL_WARN_ON_USE (ttyname_r, "ttyname_r is not portable - " "use gnulib module ttyname_r for portability"); # endif #endif #if @GNULIB_UNLINK@ # if @REPLACE_UNLINK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef unlink # define unlink rpl_unlink # endif _GL_FUNCDECL_RPL (unlink, int, (char const *file) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (unlink, int, (char const *file)); # elif defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef unlink # define unlink _unlink # endif _GL_CXXALIAS_MDA (unlink, int, (char const *file)); # else _GL_CXXALIAS_SYS (unlink, int, (char const *file)); # endif _GL_CXXALIASWARN (unlink); #elif defined GNULIB_POSIXCHECK # undef unlink # if HAVE_RAW_DECL_UNLINK _GL_WARN_ON_USE (unlink, "unlink is not portable - " "use gnulib module unlink for portability"); # endif #elif @GNULIB_MDA_UNLINK@ /* On native Windows, map 'unlink' to '_unlink', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::unlink always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef unlink # define unlink _unlink # endif _GL_CXXALIAS_MDA (unlink, int, (char const *file)); # else _GL_CXXALIAS_SYS (unlink, int, (char const *file)); # endif _GL_CXXALIASWARN (unlink); #endif #if @GNULIB_UNLINKAT@ # if @REPLACE_UNLINKAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef unlinkat # define unlinkat rpl_unlinkat # endif _GL_FUNCDECL_RPL (unlinkat, int, (int fd, char const *file, int flag) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (unlinkat, int, (int fd, char const *file, int flag)); # else # if !@HAVE_UNLINKAT@ _GL_FUNCDECL_SYS (unlinkat, int, (int fd, char const *file, int flag) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (unlinkat, int, (int fd, char const *file, int flag)); # endif _GL_CXXALIASWARN (unlinkat); #elif defined GNULIB_POSIXCHECK # undef unlinkat # if HAVE_RAW_DECL_UNLINKAT _GL_WARN_ON_USE (unlinkat, "unlinkat is not portable - " "use gnulib module unlinkat for portability"); # endif #endif #if @GNULIB_USLEEP@ /* Pause the execution of the current thread for N microseconds. Returns 0 on completion, or -1 on range error. See the POSIX:2001 specification <https://pubs.opengroup.org/onlinepubs/009695399/functions/usleep.html>. */ # if @REPLACE_USLEEP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef usleep # define usleep rpl_usleep # endif _GL_FUNCDECL_RPL (usleep, int, (useconds_t n)); _GL_CXXALIAS_RPL (usleep, int, (useconds_t n)); # else # if !@HAVE_USLEEP@ _GL_FUNCDECL_SYS (usleep, int, (useconds_t n)); # endif /* Need to cast, because on Haiku, the first parameter is unsigned int n. */ _GL_CXXALIAS_SYS_CAST (usleep, int, (useconds_t n)); # endif _GL_CXXALIASWARN (usleep); #elif defined GNULIB_POSIXCHECK # undef usleep # if HAVE_RAW_DECL_USLEEP _GL_WARN_ON_USE (usleep, "usleep is unportable - " "use gnulib module usleep for portability"); # endif #endif #if @GNULIB_WRITE@ /* Write up to COUNT bytes starting at BUF to file descriptor FD. See the POSIX:2008 specification <https://pubs.opengroup.org/onlinepubs/9699919799/functions/write.html>. */ # if @REPLACE_WRITE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef write # define write rpl_write # endif _GL_FUNCDECL_RPL (write, ssize_t, (int fd, const void *buf, size_t count) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (write, ssize_t, (int fd, const void *buf, size_t count)); # elif defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef write # define write _write # endif _GL_CXXALIAS_MDA (write, ssize_t, (int fd, const void *buf, size_t count)); # else _GL_CXXALIAS_SYS (write, ssize_t, (int fd, const void *buf, size_t count)); # endif _GL_CXXALIASWARN (write); #elif @GNULIB_MDA_WRITE@ /* On native Windows, map 'write' to '_write', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::write always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef write # define write _write # endif # ifdef __MINGW32__ _GL_CXXALIAS_MDA (write, int, (int fd, const void *buf, unsigned int count)); # else _GL_CXXALIAS_MDA (write, ssize_t, (int fd, const void *buf, unsigned int count)); # endif # else _GL_CXXALIAS_SYS (write, ssize_t, (int fd, const void *buf, size_t count)); # endif _GL_CXXALIASWARN (write); #endif _GL_INLINE_HEADER_END #endif /* _@GUARD_PREFIX@_UNISTD_H */ #endif /* _GL_INCLUDING_UNISTD_H */ #endif /* _@GUARD_PREFIX@_UNISTD_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/fd-hook.h������������������������������������������������������������������������������0000644�0001750�0001750�00000011364�14436425345�014636� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Hook for making file descriptor functions close(), ioctl() extensible. Copyright (C) 2009-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef FD_HOOK_H #define FD_HOOK_H #ifdef __cplusplus extern "C" { #endif /* Currently, this entire code is only needed for the handling of sockets on native Windows platforms. */ #if WINDOWS_SOCKETS /* Type of function that closes FD. */ typedef int (*gl_close_fn) (int fd); /* Type of function that applies a control request to FD. */ typedef int (*gl_ioctl_fn) (int fd, int request, void *arg); /* An element of the list of file descriptor hooks. In CLOS (Common Lisp Object System) speak, it consists of an "around" method for the close() function and an "around" method for the ioctl() function. The fields of this structure are considered private. */ struct fd_hook { /* Doubly linked list. */ struct fd_hook *private_next; struct fd_hook *private_prev; /* Function that treats the types of FD that it knows about and calls execute_close_hooks (REMAINING_LIST, PRIMARY, FD) as a fallback. */ int (*private_close_fn) (const struct fd_hook *remaining_list, gl_close_fn primary, int fd); /* Function that treats the types of FD that it knows about and calls execute_ioctl_hooks (REMAINING_LIST, PRIMARY, FD, REQUEST, ARG) as a fallback. */ int (*private_ioctl_fn) (const struct fd_hook *remaining_list, gl_ioctl_fn primary, int fd, int request, void *arg); }; /* This type of function closes FD, applying special knowledge for the FD types it knows about, and calls execute_close_hooks (REMAINING_LIST, PRIMARY, FD) for the other FD types. In CLOS speak, REMAINING_LIST is the remaining list of "around" methods, and PRIMARY is the "primary" method for close(). */ typedef int (*close_hook_fn) (const struct fd_hook *remaining_list, gl_close_fn primary, int fd); /* Execute the close hooks in REMAINING_LIST, with PRIMARY as "primary" method. Return 0 or -1, like close() would do. */ extern int execute_close_hooks (const struct fd_hook *remaining_list, gl_close_fn primary, int fd); /* Execute all close hooks, with PRIMARY as "primary" method. Return 0 or -1, like close() would do. */ extern int execute_all_close_hooks (gl_close_fn primary, int fd); /* This type of function applies a control request to FD, applying special knowledge for the FD types it knows about, and calls execute_ioctl_hooks (REMAINING_LIST, PRIMARY, FD, REQUEST, ARG) for the other FD types. In CLOS speak, REMAINING_LIST is the remaining list of "around" methods, and PRIMARY is the "primary" method for ioctl(). */ typedef int (*ioctl_hook_fn) (const struct fd_hook *remaining_list, gl_ioctl_fn primary, int fd, int request, void *arg); /* Execute the ioctl hooks in REMAINING_LIST, with PRIMARY as "primary" method. Return 0 or -1, like ioctl() would do. */ extern int execute_ioctl_hooks (const struct fd_hook *remaining_list, gl_ioctl_fn primary, int fd, int request, void *arg); /* Execute all ioctl hooks, with PRIMARY as "primary" method. Return 0 or -1, like ioctl() would do. */ extern int execute_all_ioctl_hooks (gl_ioctl_fn primary, int fd, int request, void *arg); /* Add a function pair to the list of file descriptor hooks. CLOSE_HOOK and IOCTL_HOOK may be NULL, indicating no change. The LINK variable points to a piece of memory which is guaranteed to be accessible until the corresponding call to unregister_fd_hook. */ extern void register_fd_hook (close_hook_fn close_hook, ioctl_hook_fn ioctl_hook, struct fd_hook *link); /* Removes a hook from the list of file descriptor hooks. */ extern void unregister_fd_hook (struct fd_hook *link); #endif #ifdef __cplusplus } #endif #endif /* FD_HOOK_H */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/windows-recmutex.h���������������������������������������������������������������������0000644�0001750�0001750�00000003675�14436425347�016643� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Plain recursive mutexes (native Windows implementation). Copyright (C) 2005-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2005. Based on GCC's gthr-win32.h. */ #ifndef _WINDOWS_RECMUTEX_H #define _WINDOWS_RECMUTEX_H #define WIN32_LEAN_AND_MEAN /* avoid including junk */ #include <windows.h> #include "windows-initguard.h" /* The native Windows documentation says that CRITICAL_SECTION already implements a recursive lock. But we need not rely on it: It's easy to implement a recursive lock without this assumption. */ typedef struct { glwthread_initguard_t guard; /* protects the initialization */ DWORD owner; unsigned long depth; CRITICAL_SECTION lock; } glwthread_recmutex_t; #define GLWTHREAD_RECMUTEX_INIT { GLWTHREAD_INITGUARD_INIT, 0, 0 } #ifdef __cplusplus extern "C" { #endif extern void glwthread_recmutex_init (glwthread_recmutex_t *mutex); extern int glwthread_recmutex_lock (glwthread_recmutex_t *mutex); extern int glwthread_recmutex_trylock (glwthread_recmutex_t *mutex); extern int glwthread_recmutex_unlock (glwthread_recmutex_t *mutex); extern int glwthread_recmutex_destroy (glwthread_recmutex_t *mutex); #ifdef __cplusplus } #endif #endif /* _WINDOWS_RECMUTEX_H */ �������������������������������������������������������������������rush-2.4/gnu/windows-initguard.h��������������������������������������������������������������������0000644�0001750�0001750�00000002316�14436425346�016763� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Init guards, somewhat like spinlocks (native Windows implementation). Copyright (C) 2005-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2005. Based on GCC's gthr-win32.h. */ #ifndef _WINDOWS_INITGUARD_H #define _WINDOWS_INITGUARD_H #define WIN32_LEAN_AND_MEAN /* avoid including junk */ #include <windows.h> typedef struct { volatile int done; volatile LONG started; } glwthread_initguard_t; #define GLWTHREAD_INITGUARD_INIT { 0, -1 } #endif /* _WINDOWS_INITGUARD_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/mktime.c�������������������������������������������������������������������������������0000644�0001750�0001750�00000045321�14436425346�014571� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert a 'struct tm' to a time_t value. Copyright (C) 1993-2023 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Paul Eggert <eggert@twinsun.com>. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ /* The following macros influence what gets defined when this file is compiled: Macro/expression Which gnulib module This compilation unit should define _LIBC (glibc proper) mktime NEED_MKTIME_WORKING mktime rpl_mktime || NEED_MKTIME_WINDOWS NEED_MKTIME_INTERNAL mktime-internal mktime_internal */ #ifndef _LIBC # include <libc-config.h> #endif /* Assume that leap seconds are possible, unless told otherwise. If the host has a 'zic' command with a '-L leapsecondfilename' option, then it supports leap seconds; otherwise it probably doesn't. */ #ifndef LEAP_SECONDS_POSSIBLE # define LEAP_SECONDS_POSSIBLE 1 #endif #include <time.h> #include <errno.h> #include <limits.h> #include <stdbool.h> #include <stdckdint.h> #include <stdlib.h> #include <string.h> #include <intprops.h> #include <verify.h> #ifndef NEED_MKTIME_INTERNAL # define NEED_MKTIME_INTERNAL 0 #endif #ifndef NEED_MKTIME_WINDOWS # define NEED_MKTIME_WINDOWS 0 #endif #ifndef NEED_MKTIME_WORKING # define NEED_MKTIME_WORKING 0 #endif #include "mktime-internal.h" #if !defined _LIBC && (NEED_MKTIME_WORKING || NEED_MKTIME_WINDOWS) static void my_tzset (void) { # if NEED_MKTIME_WINDOWS /* Rectify the value of the environment variable TZ. There are four possible kinds of such values: - Traditional US time zone names, e.g. "PST8PDT". Syntax: see <https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/tzset> - Time zone names based on geography, that contain one or more slashes, e.g. "Europe/Moscow". - Time zone names based on geography, without slashes, e.g. "Singapore". - Time zone names that contain explicit DST rules. Syntax: see <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html#tag_08_03> The Microsoft CRT understands only the first kind. It produces incorrect results if the value of TZ is of the other kinds. But in a Cygwin environment, /etc/profile.d/tzset.sh sets TZ to a value of the second kind for most geographies, or of the first kind in a few other geographies. If it is of the second kind, neutralize it. For the Microsoft CRT, an absent or empty TZ means the time zone that the user has set in the Windows Control Panel. If the value of TZ is of the third or fourth kind -- Cygwin programs understand these syntaxes as well --, it does not matter whether we neutralize it or not, since these values occur only when a Cygwin user has set TZ explicitly; this case is 1. rare and 2. under the user's responsibility. */ const char *tz = getenv ("TZ"); if (tz != NULL && strchr (tz, '/') != NULL) _putenv ("TZ="); # else tzset (); # endif } # undef __tzset # define __tzset() my_tzset () #endif #if defined _LIBC || NEED_MKTIME_WORKING || NEED_MKTIME_INTERNAL /* A signed type that can represent an integer number of years multiplied by four times the number of seconds in a year. It is needed when converting a tm_year value times the number of seconds in a year. The factor of four comes because these products need to be subtracted from each other, and sometimes with an offset added to them, and then with another timestamp added, without worrying about overflow. Much of the code uses long_int to represent __time64_t values, to lessen the hassle of dealing with platforms where __time64_t is unsigned, and because long_int should suffice to represent all __time64_t values that mktime can generate even on platforms where __time64_t is wider than the int components of struct tm. */ #if INT_MAX <= LONG_MAX / 4 / 366 / 24 / 60 / 60 typedef long int long_int; #else typedef long long int long_int; #endif verify (INT_MAX <= TYPE_MAXIMUM (long_int) / 4 / 366 / 24 / 60 / 60); /* Shift A right by B bits portably, by dividing A by 2**B and truncating towards minus infinity. B should be in the range 0 <= B <= LONG_INT_BITS - 2, where LONG_INT_BITS is the number of useful bits in a long_int. LONG_INT_BITS is at least 32. ISO C99 says that A >> B is implementation-defined if A < 0. Some implementations (e.g., UNICOS 9.0 on a Cray Y-MP EL) don't shift right in the usual way when A < 0, so SHR falls back on division if ordinary A >> B doesn't seem to be the usual signed shift. */ static long_int shr (long_int a, int b) { long_int one = 1; return (-one >> 1 == -1 ? a >> b : (a + (a < 0)) / (one << b) - (a < 0)); } /* Bounds for the intersection of __time64_t and long_int. */ static long_int const mktime_min = ((TYPE_SIGNED (__time64_t) && TYPE_MINIMUM (__time64_t) < TYPE_MINIMUM (long_int)) ? TYPE_MINIMUM (long_int) : TYPE_MINIMUM (__time64_t)); static long_int const mktime_max = (TYPE_MAXIMUM (long_int) < TYPE_MAXIMUM (__time64_t) ? TYPE_MAXIMUM (long_int) : TYPE_MAXIMUM (__time64_t)); #define EPOCH_YEAR 1970 #define TM_YEAR_BASE 1900 verify (TM_YEAR_BASE % 100 == 0); /* Is YEAR + TM_YEAR_BASE a leap year? */ static bool leapyear (long_int year) { /* Don't add YEAR to TM_YEAR_BASE, as that might overflow. Also, work even if YEAR is negative. */ return ((year & 3) == 0 && (year % 100 != 0 || ((year / 100) & 3) == (- (TM_YEAR_BASE / 100) & 3))); } /* How many days come before each month (0-12). */ #ifndef _LIBC static #endif const unsigned short int __mon_yday[2][13] = { /* Normal years. */ { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 }, /* Leap years. */ { 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366 } }; /* Do the values A and B differ according to the rules for tm_isdst? A and B differ if one is zero and the other positive. */ static bool isdst_differ (int a, int b) { return (!a != !b) && (0 <= a) && (0 <= b); } /* Return an integer value measuring (YEAR1-YDAY1 HOUR1:MIN1:SEC1) - (YEAR0-YDAY0 HOUR0:MIN0:SEC0) in seconds, assuming that the clocks were not adjusted between the timestamps. The YEAR values uses the same numbering as TP->tm_year. Values need not be in the usual range. However, YEAR1 - YEAR0 must not overflow even when multiplied by three times the number of seconds in a year, and likewise for YDAY1 - YDAY0 and three times the number of seconds in a day. */ static long_int ydhms_diff (long_int year1, long_int yday1, int hour1, int min1, int sec1, int year0, int yday0, int hour0, int min0, int sec0) { verify (-1 / 2 == 0); /* Compute intervening leap days correctly even if year is negative. Take care to avoid integer overflow here. */ int a4 = shr (year1, 2) + shr (TM_YEAR_BASE, 2) - ! (year1 & 3); int b4 = shr (year0, 2) + shr (TM_YEAR_BASE, 2) - ! (year0 & 3); int a100 = (a4 + (a4 < 0)) / 25 - (a4 < 0); int b100 = (b4 + (b4 < 0)) / 25 - (b4 < 0); int a400 = shr (a100, 2); int b400 = shr (b100, 2); int intervening_leap_days = (a4 - b4) - (a100 - b100) + (a400 - b400); /* Compute the desired time without overflowing. */ long_int years = year1 - year0; long_int days = 365 * years + yday1 - yday0 + intervening_leap_days; long_int hours = 24 * days + hour1 - hour0; long_int minutes = 60 * hours + min1 - min0; long_int seconds = 60 * minutes + sec1 - sec0; return seconds; } /* Return the average of A and B, even if A + B would overflow. Round toward positive infinity. */ static long_int long_int_avg (long_int a, long_int b) { return shr (a, 1) + shr (b, 1) + ((a | b) & 1); } /* Return a long_int value corresponding to (YEAR-YDAY HOUR:MIN:SEC) minus *TP seconds, assuming no clock adjustments occurred between the two timestamps. YEAR and YDAY must not be so large that multiplying them by three times the number of seconds in a year (or day, respectively) would overflow long_int. *TP should be in the usual range. */ static long_int tm_diff (long_int year, long_int yday, int hour, int min, int sec, struct tm const *tp) { return ydhms_diff (year, yday, hour, min, sec, tp->tm_year, tp->tm_yday, tp->tm_hour, tp->tm_min, tp->tm_sec); } /* Use CONVERT to convert T to a struct tm value in *TM. T must be in range for __time64_t. Return TM if successful, NULL (setting errno) on failure. */ static struct tm * convert_time (struct tm *(*convert) (const __time64_t *, struct tm *), long_int t, struct tm *tm) { __time64_t x = t; return convert (&x, tm); } /* Use CONVERT to convert *T to a broken down time in *TP. If *T is out of range for conversion, adjust it so that it is the nearest in-range value and then convert that. A value is in range if it fits in both __time64_t and long_int. Return TP on success, NULL (setting errno) on failure. */ static struct tm * ranged_convert (struct tm *(*convert) (const __time64_t *, struct tm *), long_int *t, struct tm *tp) { long_int t1 = (*t < mktime_min ? mktime_min : *t <= mktime_max ? *t : mktime_max); struct tm *r = convert_time (convert, t1, tp); if (r) { *t = t1; return r; } if (errno != EOVERFLOW) return NULL; long_int bad = t1; long_int ok = 0; struct tm oktm; oktm.tm_sec = -1; /* BAD is a known out-of-range value, and OK is a known in-range one. Use binary search to narrow the range between BAD and OK until they differ by 1. */ while (true) { long_int mid = long_int_avg (ok, bad); if (mid == ok || mid == bad) break; if (convert_time (convert, mid, tp)) ok = mid, oktm = *tp; else if (errno != EOVERFLOW) return NULL; else bad = mid; } if (oktm.tm_sec < 0) return NULL; *t = ok; *tp = oktm; return tp; } /* Convert *TP to a __time64_t value, inverting the monotonic and mostly-unit-linear conversion function CONVERT. Use *OFFSET to keep track of a guess at the offset of the result, compared to what the result would be for UTC without leap seconds. If *OFFSET's guess is correct, only one CONVERT call is needed. If successful, set *TP to the canonicalized struct tm; otherwise leave *TP alone, return ((time_t) -1) and set errno. This function is external because it is used also by timegm.c. */ __time64_t __mktime_internal (struct tm *tp, struct tm *(*convert) (const __time64_t *, struct tm *), mktime_offset_t *offset) { struct tm tm; /* The maximum number of probes (calls to CONVERT) should be enough to handle any combinations of time zone rule changes, solar time, leap seconds, and oscillations around a spring-forward gap. POSIX.1 prohibits leap seconds, but some hosts have them anyway. */ int remaining_probes = 6; /* Time requested. Copy it in case CONVERT modifies *TP; this can occur if TP is localtime's returned value and CONVERT is localtime. */ int sec = tp->tm_sec; int min = tp->tm_min; int hour = tp->tm_hour; int mday = tp->tm_mday; int mon = tp->tm_mon; int year_requested = tp->tm_year; int isdst = tp->tm_isdst; /* 1 if the previous probe was DST. */ int dst2 = 0; /* Ensure that mon is in range, and set year accordingly. */ int mon_remainder = mon % 12; int negative_mon_remainder = mon_remainder < 0; int mon_years = mon / 12 - negative_mon_remainder; long_int lyear_requested = year_requested; long_int year = lyear_requested + mon_years; /* The other values need not be in range: the remaining code handles overflows correctly. */ /* Calculate day of year from year, month, and day of month. The result need not be in range. */ int mon_yday = ((__mon_yday[leapyear (year)] [mon_remainder + 12 * negative_mon_remainder]) - 1); long_int lmday = mday; long_int yday = mon_yday + lmday; mktime_offset_t off = *offset; int negative_offset_guess; int sec_requested = sec; if (LEAP_SECONDS_POSSIBLE) { /* Handle out-of-range seconds specially, since ydhms_diff assumes every minute has 60 seconds. */ if (sec < 0) sec = 0; if (59 < sec) sec = 59; } /* Invert CONVERT by probing. First assume the same offset as last time. */ ckd_sub (&negative_offset_guess, 0, off); long_int t0 = ydhms_diff (year, yday, hour, min, sec, EPOCH_YEAR - TM_YEAR_BASE, 0, 0, 0, negative_offset_guess); long_int t = t0, t1 = t0, t2 = t0; /* Repeatedly use the error to improve the guess. */ while (true) { if (! ranged_convert (convert, &t, &tm)) return -1; long_int dt = tm_diff (year, yday, hour, min, sec, &tm); if (dt == 0) break; if (t == t1 && t != t2 && (tm.tm_isdst < 0 || (isdst < 0 ? dst2 <= (tm.tm_isdst != 0) : (isdst != 0) != (tm.tm_isdst != 0)))) /* We can't possibly find a match, as we are oscillating between two values. The requested time probably falls within a spring-forward gap of size DT. Follow the common practice in this case, which is to return a time that is DT away from the requested time, preferring a time whose tm_isdst differs from the requested value. (If no tm_isdst was requested and only one of the two values has a nonzero tm_isdst, prefer that value.) In practice, this is more useful than returning -1. */ goto offset_found; remaining_probes--; if (remaining_probes == 0) { __set_errno (EOVERFLOW); return -1; } t1 = t2, t2 = t, t += dt, dst2 = tm.tm_isdst != 0; } /* We have a match. Check whether tm.tm_isdst has the requested value, if any. */ if (isdst_differ (isdst, tm.tm_isdst)) { /* tm.tm_isdst has the wrong value. Look for a neighboring time with the right value, and use its UTC offset. Heuristic: probe the adjacent timestamps in both directions, looking for the desired isdst. If none is found within a reasonable duration bound, assume a one-hour DST difference. This should work for all real time zone histories in the tz database. */ /* +1 if we wanted standard time but got DST, -1 if the reverse. */ int dst_difference = (isdst == 0) - (tm.tm_isdst == 0); /* Distance between probes when looking for a DST boundary. In tzdata2003a, the shortest period of DST is 601200 seconds (e.g., America/Recife starting 2000-10-08 01:00), and the shortest period of non-DST surrounded by DST is 694800 seconds (Africa/Tunis starting 1943-04-17 01:00). Use the minimum of these two values, so we don't miss these short periods when probing. */ int stride = 601200; /* In TZDB 2021e, the longest period of DST (or of non-DST), in which the DST (or adjacent DST) difference is not one hour, is 457243209 seconds: e.g., America/Cambridge_Bay with leap seconds, starting 1965-10-31 00:00 in a switch from double-daylight time (-05) to standard time (-07), and continuing to 1980-04-27 02:00 in a switch from standard time (-07) to daylight time (-06). */ int duration_max = 457243209; /* Search in both directions, so the maximum distance is half the duration; add the stride to avoid off-by-1 problems. */ int delta_bound = duration_max / 2 + stride; int delta, direction; for (delta = stride; delta < delta_bound; delta += stride) for (direction = -1; direction <= 1; direction += 2) { long_int ot; if (! ckd_add (&ot, t, delta * direction)) { struct tm otm; if (! ranged_convert (convert, &ot, &otm)) return -1; if (! isdst_differ (isdst, otm.tm_isdst)) { /* We found the desired tm_isdst. Extrapolate back to the desired time. */ long_int gt = ot + tm_diff (year, yday, hour, min, sec, &otm); if (mktime_min <= gt && gt <= mktime_max) { if (convert_time (convert, gt, &tm)) { t = gt; goto offset_found; } if (errno != EOVERFLOW) return -1; } } } } /* No unusual DST offset was found nearby. Assume one-hour DST. */ t += 60 * 60 * dst_difference; if (mktime_min <= t && t <= mktime_max && convert_time (convert, t, &tm)) goto offset_found; __set_errno (EOVERFLOW); return -1; } offset_found: /* Set *OFFSET to the low-order bits of T - T0 - NEGATIVE_OFFSET_GUESS. This is just a heuristic to speed up the next mktime call, and correctness is unaffected if integer overflow occurs here. */ ckd_sub (offset, t, t0); ckd_sub (offset, *offset, negative_offset_guess); if (LEAP_SECONDS_POSSIBLE && sec_requested != tm.tm_sec) { /* Adjust time to reflect the tm_sec requested, not the normalized value. Also, repair any damage from a false match due to a leap second. */ long_int sec_adjustment = sec == 0 && tm.tm_sec == 60; sec_adjustment -= sec; sec_adjustment += sec_requested; if (ckd_add (&t, t, sec_adjustment) || ! (mktime_min <= t && t <= mktime_max)) { __set_errno (EOVERFLOW); return -1; } if (! convert_time (convert, t, &tm)) return -1; } *tp = tm; return t; } #endif /* _LIBC || NEED_MKTIME_WORKING || NEED_MKTIME_INTERNAL */ #if defined _LIBC || NEED_MKTIME_WORKING || NEED_MKTIME_WINDOWS /* Convert *TP to a __time64_t value. */ __time64_t __mktime64 (struct tm *tp) { /* POSIX.1 8.1.1 requires that whenever mktime() is called, the time zone names contained in the external variable 'tzname' shall be set as if the tzset() function had been called. */ __tzset (); # if defined _LIBC || NEED_MKTIME_WORKING static mktime_offset_t localtime_offset; return __mktime_internal (tp, __localtime64_r, &localtime_offset); # else # undef mktime return mktime (tp); # endif } #endif /* _LIBC || NEED_MKTIME_WORKING || NEED_MKTIME_WINDOWS */ #if defined _LIBC && __TIMESIZE != 64 libc_hidden_def (__mktime64) time_t mktime (struct tm *tp) { struct tm tm = *tp; __time64_t t = __mktime64 (&tm); if (in_time_t_range (t)) { *tp = tm; return t; } else { __set_errno (EOVERFLOW); return -1; } } #endif weak_alias (mktime, timelocal) libc_hidden_def (mktime) libc_hidden_weak (timelocal) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/getdtablesize.c������������������������������������������������������������������������0000644�0001750�0001750�00000006565�14436425345�016137� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* getdtablesize() function: Return maximum possible file descriptor value + 1. Copyright (C) 2008-2023 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2008. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <unistd.h> #if defined _WIN32 && ! defined __CYGWIN__ # include <stdio.h> # if HAVE_MSVC_INVALID_PARAMETER_HANDLER # include "msvc-inval.h" # endif # if HAVE_MSVC_INVALID_PARAMETER_HANDLER static int _setmaxstdio_nothrow (int newmax) { int result; TRY_MSVC_INVAL { result = _setmaxstdio (newmax); } CATCH_MSVC_INVAL { result = -1; } DONE_MSVC_INVAL; return result; } # else # define _setmaxstdio_nothrow _setmaxstdio # endif /* Cache for the previous getdtablesize () result. Safe to cache because Windows also lacks setrlimit. */ static int dtablesize; int getdtablesize (void) { if (dtablesize == 0) { /* We are looking for the number N such that the valid file descriptors are 0..N-1. It can be obtained through a loop as follows: { int fd; for (fd = 3; fd < 65536; fd++) if (dup2 (0, fd) == -1) break; return fd; } On Windows XP, the result is 2048. The drawback of this loop is that it allocates memory for a libc internal array that is never freed. The number N can also be obtained as the upper bound for _getmaxstdio (). _getmaxstdio () returns the maximum number of open FILE objects. The sanity check in _setmaxstdio reveals the maximum number of file descriptors. This too allocates memory, but it is freed when we call _setmaxstdio with the original value. */ int orig_max_stdio = _getmaxstdio (); unsigned int bound; for (bound = 0x10000; _setmaxstdio_nothrow (bound) < 0; bound = bound / 2) ; _setmaxstdio_nothrow (orig_max_stdio); dtablesize = bound; } return dtablesize; } #else # include <limits.h> # include <sys/resource.h> # ifndef RLIM_SAVED_CUR # define RLIM_SAVED_CUR RLIM_INFINITY # endif # ifndef RLIM_SAVED_MAX # define RLIM_SAVED_MAX RLIM_INFINITY # endif # ifdef __CYGWIN__ /* Cygwin 1.7.25 auto-increases the RLIMIT_NOFILE soft limit until it hits the compile-time constant hard limit of 3200. We might as well just report the hard limit. */ # define rlim_cur rlim_max # endif int getdtablesize (void) { struct rlimit lim; if (getrlimit (RLIMIT_NOFILE, &lim) == 0 && 0 <= lim.rlim_cur && lim.rlim_cur <= INT_MAX && lim.rlim_cur != RLIM_INFINITY && lim.rlim_cur != RLIM_SAVED_CUR && lim.rlim_cur != RLIM_SAVED_MAX) return lim.rlim_cur; return INT_MAX; } #endif �������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/attribute.h����������������������������������������������������������������������������0000644�0001750�0001750�00000022736�14436425345�015317� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ATTRIBUTE_* macros for using attributes in GCC and similar compilers Copyright 2020-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paul Eggert. */ /* Provide public ATTRIBUTE_* names for the private _GL_ATTRIBUTE_* macros used within Gnulib. */ /* These attributes can be placed in two ways: - At the start of a declaration (i.e. even before storage-class specifiers!); then they apply to all entities that are declared by the declaration. - Immediately after the name of an entity being declared by the declaration; then they apply to that entity only. */ #ifndef _GL_ATTRIBUTE_H #define _GL_ATTRIBUTE_H /* This file defines two types of attributes: * C23 standard attributes. These have macro names that do not begin with 'ATTRIBUTE_'. * Selected GCC attributes; see: https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html https://gcc.gnu.org/onlinedocs/gcc/Common-Variable-Attributes.html https://gcc.gnu.org/onlinedocs/gcc/Common-Type-Attributes.html These names begin with 'ATTRIBUTE_' to avoid name clashes. */ /* This file uses _GL_ATTRIBUTE_ALLOC_SIZE, _GL_ATTRIBUTE_ALWAYS_INLINE, _GL_ATTRIBUTE_ARTIFICIAL, _GL_ATTRIBUTE_COLD, _GL_ATTRIBUTE_CONST, _GL_ATTRIBUTE_DEALLOC, _GL_ATTRIBUTE_DEPRECATED, _GL_ATTRIBUTE_ERROR, _GL_ATTRIBUTE_WARNING, _GL_ATTRIBUTE_EXTERNALLY_VISIBLE, _GL_ATTRIBUTE_FALLTHROUGH, _GL_ATTRIBUTE_FORMAT, _GL_ATTRIBUTE_LEAF, _GL_ATTRIBUTE_MALLOC, _GL_ATTRIBUTE_MAY_ALIAS, _GL_ATTRIBUTE_MAYBE_UNUSED, _GL_ATTRIBUTE_NODISCARD, _GL_ATTRIBUTE_NOINLINE, _GL_ATTRIBUTE_NONNULL, _GL_ATTRIBUTE_NONSTRING, _GL_ATTRIBUTE_NOTHROW, _GL_ATTRIBUTE_PACKED, _GL_ATTRIBUTE_PURE, _GL_ATTRIBUTE_RETURNS_NONNULL, _GL_ATTRIBUTE_SENTINEL. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif /* =============== Attributes for specific kinds of functions =============== */ /* Attributes for functions that should not be used. */ /* Warn if the entity is used. */ /* Applies to: - function, variable, - struct, union, struct/union member, - enumeration, enumeration item, - typedef, in C++ also: namespace, class, template specialization. */ #define DEPRECATED _GL_ATTRIBUTE_DEPRECATED /* If a function call is not optimized way, warn with MSG. */ /* Applies to: functions. */ #define ATTRIBUTE_WARNING(msg) _GL_ATTRIBUTE_WARNING (msg) /* If a function call is not optimized way, report an error with MSG. */ /* Applies to: functions. */ #define ATTRIBUTE_ERROR(msg) _GL_ATTRIBUTE_ERROR (msg) /* Attributes for memory-allocating functions. */ /* The function returns a pointer to freshly allocated memory. */ /* Applies to: functions. */ #define ATTRIBUTE_MALLOC _GL_ATTRIBUTE_MALLOC /* ATTRIBUTE_ALLOC_SIZE ((N)) - The Nth argument of the function is the size of the returned memory block. ATTRIBUTE_ALLOC_SIZE ((M, N)) - Multiply the Mth and Nth arguments to determine the size of the returned memory block. */ /* Applies to: function, pointer to function, function types. */ #define ATTRIBUTE_ALLOC_SIZE(args) _GL_ATTRIBUTE_ALLOC_SIZE (args) /* ATTRIBUTE_DEALLOC (F, I) declares that the function returns pointers that can be freed by passing them as the Ith argument to the function F. ATTRIBUTE_DEALLOC_FREE declares that the function returns pointers that can be freed via 'free'; it can be used only after declaring 'free'. */ /* Applies to: functions. Cannot be used on inline functions. */ #define ATTRIBUTE_DEALLOC(f, i) _GL_ATTRIBUTE_DEALLOC(f, i) #define ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_DEALLOC_FREE /* Attributes for variadic functions. */ /* The variadic function expects a trailing NULL argument. ATTRIBUTE_SENTINEL () - The last argument is NULL (requires C99). ATTRIBUTE_SENTINEL ((N)) - The (N+1)st argument from the end is NULL. */ /* Applies to: functions. */ #define ATTRIBUTE_SENTINEL(pos) _GL_ATTRIBUTE_SENTINEL (pos) /* ================== Attributes for compiler diagnostics ================== */ /* Attributes that help the compiler diagnose programmer mistakes. Some of them may also help for some compiler optimizations. */ /* ATTRIBUTE_FORMAT ((ARCHETYPE, STRING-INDEX, FIRST-TO-CHECK)) - The STRING-INDEXth function argument is a format string of style ARCHETYPE, which is one of: printf, gnu_printf scanf, gnu_scanf, strftime, gnu_strftime, strfmon, or the same thing prefixed and suffixed with '__'. If FIRST-TO-CHECK is not 0, arguments starting at FIRST-TO_CHECK are suitable for the format string. */ /* Applies to: functions. */ #define ATTRIBUTE_FORMAT(spec) _GL_ATTRIBUTE_FORMAT (spec) /* ATTRIBUTE_NONNULL ((N1, N2,...)) - Arguments N1, N2,... must not be NULL. ATTRIBUTE_NONNULL () - All pointer arguments must not be null. */ /* Applies to: functions. */ #define ATTRIBUTE_NONNULL(args) _GL_ATTRIBUTE_NONNULL (args) /* The function's return value is a non-NULL pointer. */ /* Applies to: functions. */ #define ATTRIBUTE_RETURNS_NONNULL _GL_ATTRIBUTE_RETURNS_NONNULL /* Warn if the caller does not use the return value, unless the caller uses something like ignore_value. */ /* Applies to: function, enumeration, class. */ #define NODISCARD _GL_ATTRIBUTE_NODISCARD /* Attributes that disable false alarms when the compiler diagnoses programmer "mistakes". */ /* Do not warn if the entity is not used. */ /* Applies to: - function, variable, - struct, union, struct/union member, - enumeration, enumeration item, - typedef, in C++ also: class. */ #define MAYBE_UNUSED _GL_ATTRIBUTE_MAYBE_UNUSED /* The contents of a character array is not meant to be NUL-terminated. */ /* Applies to: struct/union members and variables that are arrays of element type '[[un]signed] char'. */ #define ATTRIBUTE_NONSTRING _GL_ATTRIBUTE_NONSTRING /* Do not warn if control flow falls through to the immediately following 'case' or 'default' label. */ /* Applies to: Empty statement (;), inside a 'switch' statement. */ #define FALLTHROUGH _GL_ATTRIBUTE_FALLTHROUGH /* ================== Attributes for debugging information ================== */ /* Attributes regarding debugging information emitted by the compiler. */ /* Omit the function from stack traces when debugging. */ /* Applies to: function. */ #define ATTRIBUTE_ARTIFICIAL _GL_ATTRIBUTE_ARTIFICIAL /* Make the entity visible to debuggers etc., even with '-fwhole-program'. */ /* Applies to: functions, variables. */ #define ATTRIBUTE_EXTERNALLY_VISIBLE _GL_ATTRIBUTE_EXTERNALLY_VISIBLE /* ========== Attributes that mainly direct compiler optimizations ========== */ /* The function does not throw exceptions. */ /* Applies to: functions. */ #define ATTRIBUTE_NOTHROW _GL_ATTRIBUTE_NOTHROW /* Do not inline the function. */ /* Applies to: functions. */ #define ATTRIBUTE_NOINLINE _GL_ATTRIBUTE_NOINLINE /* Always inline the function, and report an error if the compiler cannot inline. */ /* Applies to: function. */ #define ATTRIBUTE_ALWAYS_INLINE _GL_ATTRIBUTE_ALWAYS_INLINE /* It is OK for a compiler to omit duplicate calls with the same arguments. This attribute is safe for a function that neither depends on nor affects observable state, and always returns exactly once - e.g., does not loop forever, and does not call longjmp. (This attribute is stricter than ATTRIBUTE_PURE.) */ /* Applies to: functions. */ #define ATTRIBUTE_CONST _GL_ATTRIBUTE_CONST /* It is OK for a compiler to omit duplicate calls with the same arguments if observable state is not changed between calls. This attribute is safe for a function that does not affect observable state, and always returns exactly once. (This attribute is looser than ATTRIBUTE_CONST.) */ /* Applies to: functions. */ #define ATTRIBUTE_PURE _GL_ATTRIBUTE_PURE /* The function is rarely executed. */ /* Applies to: functions. */ #define ATTRIBUTE_COLD _GL_ATTRIBUTE_COLD /* If called from some other compilation unit, the function executes code from that unit only by return or by exception handling, letting the compiler optimize that unit more aggressively. */ /* Applies to: functions. */ #define ATTRIBUTE_LEAF _GL_ATTRIBUTE_LEAF /* For struct members: The member has the smallest possible alignment. For struct, union, class: All members have the smallest possible alignment, minimizing the memory required. */ /* Applies to: struct members, struct, union, in C++ also: class. */ #define ATTRIBUTE_PACKED _GL_ATTRIBUTE_PACKED /* ================ Attributes that make invalid code valid ================ */ /* Attributes that prevent fatal compiler optimizations for code that is not fully ISO C compliant. */ /* Pointers to the type may point to the same storage as pointers to other types, thus disabling strict aliasing optimization. */ /* Applies to: types. */ #define ATTRIBUTE_MAY_ALIAS _GL_ATTRIBUTE_MAY_ALIAS #endif /* _GL_ATTRIBUTE_H */ ����������������������������������rush-2.4/gnu/alloca.in.h����������������������������������������������������������������������������0000644�0001750�0001750�00000004674�14436425345�015155� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Memory allocation on the stack. Copyright (C) 1995, 1999, 2001-2004, 2006-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Avoid using the symbol _ALLOCA_H here, as Bison assumes _ALLOCA_H means there is a real alloca function. */ #ifndef _GL_ALLOCA_H #define _GL_ALLOCA_H /* alloca (N) returns a pointer to N bytes of memory allocated on the stack, which will last until the function returns. Use of alloca should be avoided: - inside arguments of function calls - undefined behaviour, - in inline functions - the allocation may actually last until the calling function returns, - for huge N (say, N >= 65536) - you never know how large (or small) the stack is, and when the stack cannot fulfill the memory allocation request, the program just crashes. */ #ifndef alloca /* Some version of mingw have an <alloca.h> that causes trouble when included after 'alloca' gets defined as a macro. As a workaround, include this <alloca.h> first and define 'alloca' as a macro afterwards if needed. */ # if defined __GNUC__ && (defined _WIN32 && ! defined __CYGWIN__) && @HAVE_ALLOCA_H@ # include_next <alloca.h> # endif #endif #ifndef alloca # if defined __GNUC__ || (__clang_major__ >= 4) # define alloca __builtin_alloca # elif defined _AIX # define alloca __alloca # elif defined _MSC_VER # include <malloc.h> # define alloca _alloca # elif defined __DECC && defined __VMS # define alloca __ALLOCA # elif defined __TANDEM && defined _TNS_E_TARGET # ifdef __cplusplus extern "C" # endif void *_alloca (unsigned short); # pragma intrinsic (_alloca) # define alloca _alloca # elif defined __MVS__ # include <stdlib.h> # else # include <stddef.h> # ifdef __cplusplus extern "C" # endif void *alloca (size_t); # endif #endif #endif /* _GL_ALLOCA_H */ ��������������������������������������������������������������������rush-2.4/gnu/imaxtostr.c����������������������������������������������������������������������������0000644�0001750�0001750�00000001522�14436425345�015327� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert 'intmax_t' integer to printable string. Copyright (C) 2004-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #define anytostr imaxtostr #define inttype intmax_t #include "anytostr.c" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/minmax.h�������������������������������������������������������������������������������0000644�0001750�0001750�00000004761�14436425346�014604� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* MIN, MAX macros. Copyright (C) 1995, 1998, 2001, 2003, 2005, 2009-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _MINMAX_H #define _MINMAX_H /* Note: MIN, MAX are also defined in <sys/param.h> on some systems (glibc, IRIX, HP-UX, OSF/1). Therefore you might get warnings about MIN, MAX macro redefinitions on some systems; the workaround is to #include this file as the last one among the #include list. */ /* This file uses HAVE_MINMAX_IN_LIMITS_H, HAVE_MINMAX_IN_SYS_PARAM_H. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif /* Before we define the following symbols we get the <limits.h> file since otherwise we get redefinitions on some systems if <limits.h> is included after this file. Likewise for <sys/param.h>. If more than one of these system headers define MIN and MAX, pick just one of the headers (because the definitions most likely are the same). */ #if HAVE_MINMAX_IN_LIMITS_H # include <limits.h> #elif HAVE_MINMAX_IN_SYS_PARAM_H # include <sys/param.h> #endif /* Note: MIN and MAX should be used with two arguments of the same type. They might not return the minimum and maximum of their two arguments, if the arguments have different types or have unusual floating-point values. For example, on a typical host with 32-bit 'int', 64-bit 'long long', and 64-bit IEEE 754 'double' types: MAX (-1, 2147483648) returns 4294967295. MAX (9007199254740992.0, 9007199254740993) returns 9007199254740992.0. MAX (NaN, 0.0) returns 0.0. MAX (+0.0, -0.0) returns -0.0. and in each case the answer is in some sense bogus. */ /* MAX(a,b) returns the maximum of A and B. */ #ifndef MAX # define MAX(a,b) ((a) > (b) ? (a) : (b)) #endif /* MIN(a,b) returns the minimum of A and B. */ #ifndef MIN # define MIN(a,b) ((a) < (b) ? (a) : (b)) #endif #endif /* _MINMAX_H */ ���������������rush-2.4/gnu/localcharset.c�������������������������������������������������������������������������0000644�0001750�0001750�00000115722�14436425346�015752� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine a canonical name for the current locale's character encoding. Copyright (C) 2000-2006, 2008-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>. */ #include <config.h> /* Specification. */ #include "localcharset.h" #include <stddef.h> #include <stdio.h> #include <string.h> #include <stdlib.h> #if defined __APPLE__ && defined __MACH__ && HAVE_LANGINFO_CODESET # define DARWIN7 /* Darwin 7 or newer, i.e. Mac OS X 10.3 or newer */ #endif #if defined _WIN32 && !defined __CYGWIN__ # define WINDOWS_NATIVE # include <locale.h> #endif #if defined __EMX__ /* Assume EMX program runs on OS/2, even if compiled under DOS. */ # ifndef OS2 # define OS2 # endif #endif #if !defined WINDOWS_NATIVE # if HAVE_LANGINFO_CODESET # include <langinfo.h> # else # if 0 /* see comment regarding use of setlocale(), below */ # include <locale.h> # endif # endif # ifdef __CYGWIN__ # define WIN32_LEAN_AND_MEAN # include <windows.h> # endif #elif defined WINDOWS_NATIVE # define WIN32_LEAN_AND_MEAN # include <windows.h> /* For the use of setlocale() below, the Gnulib override in setlocale.c is not needed; see the platform lists in setlocale_null.m4. */ # undef setlocale #endif #if defined OS2 # define INCL_DOS # include <os2.h> #endif /* For MB_CUR_MAX_L */ #if defined DARWIN7 # include <xlocale.h> #endif #if HAVE_LANGINFO_CODESET || defined WINDOWS_NATIVE || defined OS2 /* On these platforms, we use a mapping from non-canonical encoding name to GNU canonical encoding name. */ /* With glibc-2.1 or newer, we don't need any canonicalization, because glibc has iconv and both glibc and libiconv support all GNU canonical names directly. */ # if !((defined __GNU_LIBRARY__ && __GLIBC__ >= 2) || defined __UCLIBC__) struct table_entry { const char alias[11+1]; const char canonical[11+1]; }; /* Table of platform-dependent mappings, sorted in ascending order. */ static const struct table_entry alias_table[] = { # if defined __FreeBSD__ /* FreeBSD */ /*{ "ARMSCII-8", "ARMSCII-8" },*/ { "Big5", "BIG5" }, { "C", "ASCII" }, /*{ "CP1131", "CP1131" },*/ /*{ "CP1251", "CP1251" },*/ /*{ "CP866", "CP866" },*/ /*{ "GB18030", "GB18030" },*/ /*{ "GB2312", "GB2312" },*/ /*{ "GBK", "GBK" },*/ /*{ "ISCII-DEV", "?" },*/ { "ISO8859-1", "ISO-8859-1" }, { "ISO8859-13", "ISO-8859-13" }, { "ISO8859-15", "ISO-8859-15" }, { "ISO8859-2", "ISO-8859-2" }, { "ISO8859-5", "ISO-8859-5" }, { "ISO8859-7", "ISO-8859-7" }, { "ISO8859-9", "ISO-8859-9" }, /*{ "KOI8-R", "KOI8-R" },*/ /*{ "KOI8-U", "KOI8-U" },*/ { "SJIS", "SHIFT_JIS" }, { "US-ASCII", "ASCII" }, { "eucCN", "GB2312" }, { "eucJP", "EUC-JP" }, { "eucKR", "EUC-KR" } # define alias_table_defined # endif # if defined __NetBSD__ /* NetBSD */ { "646", "ASCII" }, /*{ "ARMSCII-8", "ARMSCII-8" },*/ /*{ "BIG5", "BIG5" },*/ { "Big5-HKSCS", "BIG5-HKSCS" }, /*{ "CP1251", "CP1251" },*/ /*{ "CP866", "CP866" },*/ /*{ "GB18030", "GB18030" },*/ /*{ "GB2312", "GB2312" },*/ { "ISO8859-1", "ISO-8859-1" }, { "ISO8859-13", "ISO-8859-13" }, { "ISO8859-15", "ISO-8859-15" }, { "ISO8859-2", "ISO-8859-2" }, { "ISO8859-4", "ISO-8859-4" }, { "ISO8859-5", "ISO-8859-5" }, { "ISO8859-7", "ISO-8859-7" }, /*{ "KOI8-R", "KOI8-R" },*/ /*{ "KOI8-U", "KOI8-U" },*/ /*{ "PT154", "PT154" },*/ { "SJIS", "SHIFT_JIS" }, { "eucCN", "GB2312" }, { "eucJP", "EUC-JP" }, { "eucKR", "EUC-KR" }, { "eucTW", "EUC-TW" } # define alias_table_defined # endif # if defined __OpenBSD__ /* OpenBSD */ { "646", "ASCII" }, { "ISO8859-1", "ISO-8859-1" }, { "ISO8859-13", "ISO-8859-13" }, { "ISO8859-15", "ISO-8859-15" }, { "ISO8859-2", "ISO-8859-2" }, { "ISO8859-4", "ISO-8859-4" }, { "ISO8859-5", "ISO-8859-5" }, { "ISO8859-7", "ISO-8859-7" }, { "US-ASCII", "ASCII" } # define alias_table_defined # endif # if defined __APPLE__ && defined __MACH__ /* Mac OS X */ /* Darwin 7.5 has nl_langinfo(CODESET), but sometimes its value is useless: - It returns the empty string when LANG is set to a locale of the form ll_CC, although ll_CC/LC_CTYPE is a symlink to an UTF-8 LC_CTYPE file. - The environment variables LANG, LC_CTYPE, LC_ALL are not set by the system; nl_langinfo(CODESET) returns "US-ASCII" in this case. - The documentation says: "... all code that calls BSD system routines should ensure that the const *char parameters of these routines are in UTF-8 encoding. All BSD system functions expect their string parameters to be in UTF-8 encoding and nothing else." It also says "An additional caveat is that string parameters for files, paths, and other file-system entities must be in canonical UTF-8. In a canonical UTF-8 Unicode string, all decomposable characters are decomposed ..." but this is not true: You can pass non-decomposed UTF-8 strings to file system functions, and it is the OS which will convert them to decomposed UTF-8 before accessing the file system. - The Apple Terminal application displays UTF-8 by default. - However, other applications are free to use different encodings: - xterm uses ISO-8859-1 by default. - TextEdit uses MacRoman by default. We prefer UTF-8 over decomposed UTF-8-MAC because one should minimize the use of decomposed Unicode. Unfortunately, through the Darwin file system, decomposed UTF-8 strings are leaked into user space nevertheless. Then there are also the locales with encodings other than US-ASCII and UTF-8. These locales can be occasionally useful to users (e.g. when grepping through ISO-8859-1 encoded text files), when all their file names are in US-ASCII. */ { "ARMSCII-8", "ARMSCII-8" }, { "Big5", "BIG5" }, { "Big5HKSCS", "BIG5-HKSCS" }, { "CP1131", "CP1131" }, { "CP1251", "CP1251" }, { "CP866", "CP866" }, { "CP949", "CP949" }, { "GB18030", "GB18030" }, { "GB2312", "GB2312" }, { "GBK", "GBK" }, /*{ "ISCII-DEV", "?" },*/ { "ISO8859-1", "ISO-8859-1" }, { "ISO8859-13", "ISO-8859-13" }, { "ISO8859-15", "ISO-8859-15" }, { "ISO8859-2", "ISO-8859-2" }, { "ISO8859-4", "ISO-8859-4" }, { "ISO8859-5", "ISO-8859-5" }, { "ISO8859-7", "ISO-8859-7" }, { "ISO8859-9", "ISO-8859-9" }, { "KOI8-R", "KOI8-R" }, { "KOI8-U", "KOI8-U" }, { "PT154", "PT154" }, { "SJIS", "SHIFT_JIS" }, { "eucCN", "GB2312" }, { "eucJP", "EUC-JP" }, { "eucKR", "EUC-KR" } # define alias_table_defined # endif # if defined _AIX /* AIX */ /*{ "GBK", "GBK" },*/ { "IBM-1046", "CP1046" }, { "IBM-1124", "CP1124" }, { "IBM-1129", "CP1129" }, { "IBM-1252", "CP1252" }, { "IBM-850", "CP850" }, { "IBM-856", "CP856" }, { "IBM-921", "ISO-8859-13" }, { "IBM-922", "CP922" }, { "IBM-932", "CP932" }, { "IBM-943", "CP943" }, { "IBM-eucCN", "GB2312" }, { "IBM-eucJP", "EUC-JP" }, { "IBM-eucKR", "EUC-KR" }, { "IBM-eucTW", "EUC-TW" }, { "ISO8859-1", "ISO-8859-1" }, { "ISO8859-15", "ISO-8859-15" }, { "ISO8859-2", "ISO-8859-2" }, { "ISO8859-5", "ISO-8859-5" }, { "ISO8859-6", "ISO-8859-6" }, { "ISO8859-7", "ISO-8859-7" }, { "ISO8859-8", "ISO-8859-8" }, { "ISO8859-9", "ISO-8859-9" }, { "TIS-620", "TIS-620" }, /*{ "UTF-8", "UTF-8" },*/ { "big5", "BIG5" } # define alias_table_defined # endif # if defined __hpux /* HP-UX */ { "SJIS", "SHIFT_JIS" }, { "arabic8", "HP-ARABIC8" }, { "big5", "BIG5" }, { "cp1251", "CP1251" }, { "eucJP", "EUC-JP" }, { "eucKR", "EUC-KR" }, { "eucTW", "EUC-TW" }, { "gb18030", "GB18030" }, { "greek8", "HP-GREEK8" }, { "hebrew8", "HP-HEBREW8" }, { "hkbig5", "BIG5-HKSCS" }, { "hp15CN", "GB2312" }, { "iso88591", "ISO-8859-1" }, { "iso885913", "ISO-8859-13" }, { "iso885915", "ISO-8859-15" }, { "iso88592", "ISO-8859-2" }, { "iso88594", "ISO-8859-4" }, { "iso88595", "ISO-8859-5" }, { "iso88596", "ISO-8859-6" }, { "iso88597", "ISO-8859-7" }, { "iso88598", "ISO-8859-8" }, { "iso88599", "ISO-8859-9" }, { "kana8", "HP-KANA8" }, { "koi8r", "KOI8-R" }, { "roman8", "HP-ROMAN8" }, { "tis620", "TIS-620" }, { "turkish8", "HP-TURKISH8" }, { "utf8", "UTF-8" } # define alias_table_defined # endif # if defined __sgi /* IRIX */ { "ISO8859-1", "ISO-8859-1" }, { "ISO8859-15", "ISO-8859-15" }, { "ISO8859-2", "ISO-8859-2" }, { "ISO8859-5", "ISO-8859-5" }, { "ISO8859-7", "ISO-8859-7" }, { "ISO8859-9", "ISO-8859-9" }, { "eucCN", "GB2312" }, { "eucJP", "EUC-JP" }, { "eucKR", "EUC-KR" }, { "eucTW", "EUC-TW" } # define alias_table_defined # endif # if defined __osf__ /* OSF/1 */ /*{ "GBK", "GBK" },*/ { "ISO8859-1", "ISO-8859-1" }, { "ISO8859-15", "ISO-8859-15" }, { "ISO8859-2", "ISO-8859-2" }, { "ISO8859-4", "ISO-8859-4" }, { "ISO8859-5", "ISO-8859-5" }, { "ISO8859-7", "ISO-8859-7" }, { "ISO8859-8", "ISO-8859-8" }, { "ISO8859-9", "ISO-8859-9" }, { "KSC5601", "CP949" }, { "SJIS", "SHIFT_JIS" }, { "TACTIS", "TIS-620" }, /*{ "UTF-8", "UTF-8" },*/ { "big5", "BIG5" }, { "cp850", "CP850" }, { "dechanyu", "DEC-HANYU" }, { "dechanzi", "GB2312" }, { "deckanji", "DEC-KANJI" }, { "deckorean", "EUC-KR" }, { "eucJP", "EUC-JP" }, { "eucKR", "EUC-KR" }, { "eucTW", "EUC-TW" }, { "sdeckanji", "EUC-JP" } # define alias_table_defined # endif # if defined __sun /* Solaris */ { "5601", "EUC-KR" }, { "646", "ASCII" }, /*{ "BIG5", "BIG5" },*/ { "Big5-HKSCS", "BIG5-HKSCS" }, { "GB18030", "GB18030" }, /*{ "GBK", "GBK" },*/ { "ISO8859-1", "ISO-8859-1" }, { "ISO8859-11", "TIS-620" }, { "ISO8859-13", "ISO-8859-13" }, { "ISO8859-15", "ISO-8859-15" }, { "ISO8859-2", "ISO-8859-2" }, { "ISO8859-3", "ISO-8859-3" }, { "ISO8859-4", "ISO-8859-4" }, { "ISO8859-5", "ISO-8859-5" }, { "ISO8859-6", "ISO-8859-6" }, { "ISO8859-7", "ISO-8859-7" }, { "ISO8859-8", "ISO-8859-8" }, { "ISO8859-9", "ISO-8859-9" }, { "PCK", "SHIFT_JIS" }, { "TIS620.2533", "TIS-620" }, /*{ "UTF-8", "UTF-8" },*/ { "ansi-1251", "CP1251" }, { "cns11643", "EUC-TW" }, { "eucJP", "EUC-JP" }, { "gb2312", "GB2312" }, { "koi8-r", "KOI8-R" } # define alias_table_defined # endif # if defined __minix /* Minix */ { "646", "ASCII" } # define alias_table_defined # endif # if defined WINDOWS_NATIVE || defined __CYGWIN__ /* Windows */ { "CP1361", "JOHAB" }, { "CP20127", "ASCII" }, { "CP20866", "KOI8-R" }, { "CP20936", "GB2312" }, { "CP21866", "KOI8-RU" }, { "CP28591", "ISO-8859-1" }, { "CP28592", "ISO-8859-2" }, { "CP28593", "ISO-8859-3" }, { "CP28594", "ISO-8859-4" }, { "CP28595", "ISO-8859-5" }, { "CP28596", "ISO-8859-6" }, { "CP28597", "ISO-8859-7" }, { "CP28598", "ISO-8859-8" }, { "CP28599", "ISO-8859-9" }, { "CP28605", "ISO-8859-15" }, { "CP38598", "ISO-8859-8" }, { "CP51932", "EUC-JP" }, { "CP51936", "GB2312" }, { "CP51949", "EUC-KR" }, { "CP51950", "EUC-TW" }, { "CP54936", "GB18030" }, { "CP65001", "UTF-8" }, { "CP936", "GBK" } # define alias_table_defined # endif # if defined OS2 /* OS/2 */ /* The list of encodings is taken from "List of OS/2 Codepages" by Alex Taylor: <http://altsan.org/os2/toolkits/uls/index.html#codepages>. See also "__convcp() of kLIBC": <https://github.com/bitwiseworks/libc/blob/master/src/emx/src/lib/locale/__convcp.c>. */ { "CP1004", "CP1252" }, /*{ "CP1041", "CP943" },*/ /*{ "CP1088", "CP949" },*/ { "CP1089", "ISO-8859-6" }, /*{ "CP1114", "CP950" },*/ /*{ "CP1115", "GB2312" },*/ { "CP1208", "UTF-8" }, /*{ "CP1380", "GB2312" },*/ { "CP1381", "GB2312" }, { "CP1383", "GB2312" }, { "CP1386", "GBK" }, /*{ "CP301", "CP943" },*/ { "CP3372", "EUC-JP" }, { "CP4946", "CP850" }, /*{ "CP5048", "JIS_X0208-1990" },*/ /*{ "CP5049", "JIS_X0212-1990" },*/ /*{ "CP5067", "KS_C_5601-1987" },*/ { "CP813", "ISO-8859-7" }, { "CP819", "ISO-8859-1" }, { "CP878", "KOI8-R" }, /*{ "CP897", "CP943" },*/ { "CP912", "ISO-8859-2" }, { "CP913", "ISO-8859-3" }, { "CP914", "ISO-8859-4" }, { "CP915", "ISO-8859-5" }, { "CP916", "ISO-8859-8" }, { "CP920", "ISO-8859-9" }, { "CP921", "ISO-8859-13" }, { "CP923", "ISO-8859-15" }, /*{ "CP941", "CP943" },*/ /*{ "CP947", "CP950" },*/ /*{ "CP951", "CP949" },*/ /*{ "CP952", "JIS_X0208-1990" },*/ /*{ "CP953", "JIS_X0212-1990" },*/ { "CP954", "EUC-JP" }, { "CP964", "EUC-TW" }, { "CP970", "EUC-KR" }, /*{ "CP971", "KS_C_5601-1987" },*/ { "IBM-1004", "CP1252" }, /*{ "IBM-1006", "?" },*/ /*{ "IBM-1008", "?" },*/ /*{ "IBM-1041", "CP943" },*/ /*{ "IBM-1051", "?" },*/ /*{ "IBM-1088", "CP949" },*/ { "IBM-1089", "ISO-8859-6" }, /*{ "IBM-1098", "?" },*/ /*{ "IBM-1114", "CP950" },*/ /*{ "IBM-1115", "GB2312" },*/ /*{ "IBM-1116", "?" },*/ /*{ "IBM-1117", "?" },*/ /*{ "IBM-1118", "?" },*/ /*{ "IBM-1119", "?" },*/ { "IBM-1124", "CP1124" }, { "IBM-1125", "CP1125" }, { "IBM-1131", "CP1131" }, { "IBM-1208", "UTF-8" }, { "IBM-1250", "CP1250" }, { "IBM-1251", "CP1251" }, { "IBM-1252", "CP1252" }, { "IBM-1253", "CP1253" }, { "IBM-1254", "CP1254" }, { "IBM-1255", "CP1255" }, { "IBM-1256", "CP1256" }, { "IBM-1257", "CP1257" }, /*{ "IBM-1275", "?" },*/ /*{ "IBM-1276", "?" },*/ /*{ "IBM-1277", "?" },*/ /*{ "IBM-1280", "?" },*/ /*{ "IBM-1281", "?" },*/ /*{ "IBM-1282", "?" },*/ /*{ "IBM-1283", "?" },*/ /*{ "IBM-1380", "GB2312" },*/ { "IBM-1381", "GB2312" }, { "IBM-1383", "GB2312" }, { "IBM-1386", "GBK" }, /*{ "IBM-301", "CP943" },*/ { "IBM-3372", "EUC-JP" }, { "IBM-367", "ASCII" }, { "IBM-437", "CP437" }, { "IBM-4946", "CP850" }, /*{ "IBM-5048", "JIS_X0208-1990" },*/ /*{ "IBM-5049", "JIS_X0212-1990" },*/ /*{ "IBM-5067", "KS_C_5601-1987" },*/ { "IBM-813", "ISO-8859-7" }, { "IBM-819", "ISO-8859-1" }, { "IBM-850", "CP850" }, /*{ "IBM-851", "?" },*/ { "IBM-852", "CP852" }, { "IBM-855", "CP855" }, { "IBM-856", "CP856" }, { "IBM-857", "CP857" }, /*{ "IBM-859", "?" },*/ { "IBM-860", "CP860" }, { "IBM-861", "CP861" }, { "IBM-862", "CP862" }, { "IBM-863", "CP863" }, { "IBM-864", "CP864" }, { "IBM-865", "CP865" }, { "IBM-866", "CP866" }, /*{ "IBM-868", "?" },*/ { "IBM-869", "CP869" }, { "IBM-874", "CP874" }, { "IBM-878", "KOI8-R" }, /*{ "IBM-895", "?" },*/ /*{ "IBM-897", "CP943" },*/ /*{ "IBM-907", "?" },*/ /*{ "IBM-909", "?" },*/ { "IBM-912", "ISO-8859-2" }, { "IBM-913", "ISO-8859-3" }, { "IBM-914", "ISO-8859-4" }, { "IBM-915", "ISO-8859-5" }, { "IBM-916", "ISO-8859-8" }, { "IBM-920", "ISO-8859-9" }, { "IBM-921", "ISO-8859-13" }, { "IBM-922", "CP922" }, { "IBM-923", "ISO-8859-15" }, { "IBM-932", "CP932" }, /*{ "IBM-941", "CP943" },*/ /*{ "IBM-942", "?" },*/ { "IBM-943", "CP943" }, /*{ "IBM-947", "CP950" },*/ { "IBM-949", "CP949" }, { "IBM-950", "CP950" }, /*{ "IBM-951", "CP949" },*/ /*{ "IBM-952", "JIS_X0208-1990" },*/ /*{ "IBM-953", "JIS_X0212-1990" },*/ { "IBM-954", "EUC-JP" }, /*{ "IBM-955", "?" },*/ { "IBM-964", "EUC-TW" }, { "IBM-970", "EUC-KR" }, /*{ "IBM-971", "KS_C_5601-1987" },*/ { "IBM-eucCN", "GB2312" }, { "IBM-eucJP", "EUC-JP" }, { "IBM-eucKR", "EUC-KR" }, { "IBM-eucTW", "EUC-TW" }, { "IBM33722", "EUC-JP" }, { "ISO8859-1", "ISO-8859-1" }, { "ISO8859-2", "ISO-8859-2" }, { "ISO8859-3", "ISO-8859-3" }, { "ISO8859-4", "ISO-8859-4" }, { "ISO8859-5", "ISO-8859-5" }, { "ISO8859-6", "ISO-8859-6" }, { "ISO8859-7", "ISO-8859-7" }, { "ISO8859-8", "ISO-8859-8" }, { "ISO8859-9", "ISO-8859-9" }, /*{ "JISX0201-1976", "JISX0201-1976" },*/ /*{ "JISX0208-1978", "?" },*/ /*{ "JISX0208-1983", "JIS_X0208-1983" },*/ /*{ "JISX0208-1990", "JIS_X0208-1990" },*/ /*{ "JISX0212-1990", "JIS_X0212-1990" },*/ /*{ "KSC5601-1987", "KS_C_5601-1987" },*/ { "SJIS-1", "CP943" }, { "SJIS-2", "CP943" }, { "eucJP", "EUC-JP" }, { "eucKR", "EUC-KR" }, { "eucTW-1993", "EUC-TW" } # define alias_table_defined # endif # if defined VMS /* OpenVMS */ /* The list of encodings is taken from the OpenVMS 7.3-1 documentation "Compaq C Run-Time Library Reference Manual for OpenVMS systems" section 10.7 "Handling Different Character Sets". */ { "DECHANYU", "DEC-HANYU" }, { "DECHANZI", "GB2312" }, { "DECKANJI", "DEC-KANJI" }, { "DECKOREAN", "EUC-KR" }, { "ISO8859-1", "ISO-8859-1" }, { "ISO8859-2", "ISO-8859-2" }, { "ISO8859-5", "ISO-8859-5" }, { "ISO8859-7", "ISO-8859-7" }, { "ISO8859-8", "ISO-8859-8" }, { "ISO8859-9", "ISO-8859-9" }, { "SDECKANJI", "EUC-JP" }, { "SJIS", "SHIFT_JIS" }, { "eucJP", "EUC-JP" }, { "eucTW", "EUC-TW" } # define alias_table_defined # endif # ifndef alias_table_defined /* Just a dummy entry, to avoid a C syntax error. */ { "", "" } # endif }; # endif #else /* On these platforms, we use a mapping from locale name to GNU canonical encoding name. */ struct table_entry { const char locale[17+1]; const char canonical[11+1]; }; /* Table of platform-dependent mappings, sorted in ascending order. */ static const struct table_entry locale_table[] = { # if defined __FreeBSD__ /* FreeBSD 4.2 */ { "cs_CZ.ISO_8859-2", "ISO-8859-2" }, { "da_DK.DIS_8859-15", "ISO-8859-15" }, { "da_DK.ISO_8859-1", "ISO-8859-1" }, { "de_AT.DIS_8859-15", "ISO-8859-15" }, { "de_AT.ISO_8859-1", "ISO-8859-1" }, { "de_CH.DIS_8859-15", "ISO-8859-15" }, { "de_CH.ISO_8859-1", "ISO-8859-1" }, { "de_DE.DIS_8859-15", "ISO-8859-15" }, { "de_DE.ISO_8859-1", "ISO-8859-1" }, { "en_AU.DIS_8859-15", "ISO-8859-15" }, { "en_AU.ISO_8859-1", "ISO-8859-1" }, { "en_CA.DIS_8859-15", "ISO-8859-15" }, { "en_CA.ISO_8859-1", "ISO-8859-1" }, { "en_GB.DIS_8859-15", "ISO-8859-15" }, { "en_GB.ISO_8859-1", "ISO-8859-1" }, { "en_US.DIS_8859-15", "ISO-8859-15" }, { "en_US.ISO_8859-1", "ISO-8859-1" }, { "es_ES.DIS_8859-15", "ISO-8859-15" }, { "es_ES.ISO_8859-1", "ISO-8859-1" }, { "fi_FI.DIS_8859-15", "ISO-8859-15" }, { "fi_FI.ISO_8859-1", "ISO-8859-1" }, { "fr_BE.DIS_8859-15", "ISO-8859-15" }, { "fr_BE.ISO_8859-1", "ISO-8859-1" }, { "fr_CA.DIS_8859-15", "ISO-8859-15" }, { "fr_CA.ISO_8859-1", "ISO-8859-1" }, { "fr_CH.DIS_8859-15", "ISO-8859-15" }, { "fr_CH.ISO_8859-1", "ISO-8859-1" }, { "fr_FR.DIS_8859-15", "ISO-8859-15" }, { "fr_FR.ISO_8859-1", "ISO-8859-1" }, { "hr_HR.ISO_8859-2", "ISO-8859-2" }, { "hu_HU.ISO_8859-2", "ISO-8859-2" }, { "is_IS.DIS_8859-15", "ISO-8859-15" }, { "is_IS.ISO_8859-1", "ISO-8859-1" }, { "it_CH.DIS_8859-15", "ISO-8859-15" }, { "it_CH.ISO_8859-1", "ISO-8859-1" }, { "it_IT.DIS_8859-15", "ISO-8859-15" }, { "it_IT.ISO_8859-1", "ISO-8859-1" }, { "ja_JP.EUC", "EUC-JP" }, { "ja_JP.SJIS", "SHIFT_JIS" }, { "ja_JP.Shift_JIS", "SHIFT_JIS" }, { "ko_KR.EUC", "EUC-KR" }, { "la_LN.ASCII", "ASCII" }, { "la_LN.DIS_8859-15", "ISO-8859-15" }, { "la_LN.ISO_8859-1", "ISO-8859-1" }, { "la_LN.ISO_8859-2", "ISO-8859-2" }, { "la_LN.ISO_8859-4", "ISO-8859-4" }, { "lt_LN.ASCII", "ASCII" }, { "lt_LN.DIS_8859-15", "ISO-8859-15" }, { "lt_LN.ISO_8859-1", "ISO-8859-1" }, { "lt_LN.ISO_8859-2", "ISO-8859-2" }, { "lt_LT.ISO_8859-4", "ISO-8859-4" }, { "nl_BE.DIS_8859-15", "ISO-8859-15" }, { "nl_BE.ISO_8859-1", "ISO-8859-1" }, { "nl_NL.DIS_8859-15", "ISO-8859-15" }, { "nl_NL.ISO_8859-1", "ISO-8859-1" }, { "no_NO.DIS_8859-15", "ISO-8859-15" }, { "no_NO.ISO_8859-1", "ISO-8859-1" }, { "pl_PL.ISO_8859-2", "ISO-8859-2" }, { "pt_PT.DIS_8859-15", "ISO-8859-15" }, { "pt_PT.ISO_8859-1", "ISO-8859-1" }, { "ru_RU.CP866", "CP866" }, { "ru_RU.ISO_8859-5", "ISO-8859-5" }, { "ru_RU.KOI8-R", "KOI8-R" }, { "ru_SU.CP866", "CP866" }, { "ru_SU.ISO_8859-5", "ISO-8859-5" }, { "ru_SU.KOI8-R", "KOI8-R" }, { "sl_SI.ISO_8859-2", "ISO-8859-2" }, { "sv_SE.DIS_8859-15", "ISO-8859-15" }, { "sv_SE.ISO_8859-1", "ISO-8859-1" }, { "uk_UA.KOI8-U", "KOI8-U" }, { "zh_CN.EUC", "GB2312" }, { "zh_TW.BIG5", "BIG5" }, { "zh_TW.Big5", "BIG5" } # define locale_table_defined # endif # if defined __DJGPP__ /* DOS / DJGPP 2.03 */ /* The encodings given here may not all be correct. If you find that the encoding given for your language and country is not the one your DOS machine actually uses, just correct it in this file, and send a mail to Juan Manuel Guerrero <juan.guerrero@gmx.de> and <bug-gnulib@gnu.org>. */ { "C", "ASCII" }, { "ar", "CP864" }, { "ar_AE", "CP864" }, { "ar_DZ", "CP864" }, { "ar_EG", "CP864" }, { "ar_IQ", "CP864" }, { "ar_IR", "CP864" }, { "ar_JO", "CP864" }, { "ar_KW", "CP864" }, { "ar_MA", "CP864" }, { "ar_OM", "CP864" }, { "ar_QA", "CP864" }, { "ar_SA", "CP864" }, { "ar_SY", "CP864" }, { "be", "CP866" }, { "be_BE", "CP866" }, { "bg", "CP866" }, /* not CP855 ?? */ { "bg_BG", "CP866" }, /* not CP855 ?? */ { "ca", "CP850" }, { "ca_ES", "CP850" }, { "cs", "CP852" }, { "cs_CZ", "CP852" }, { "da", "CP865" }, /* not CP850 ?? */ { "da_DK", "CP865" }, /* not CP850 ?? */ { "de", "CP850" }, { "de_AT", "CP850" }, { "de_CH", "CP850" }, { "de_DE", "CP850" }, { "el", "CP869" }, { "el_GR", "CP869" }, { "en", "CP850" }, { "en_AU", "CP850" }, /* not CP437 ?? */ { "en_CA", "CP850" }, { "en_GB", "CP850" }, { "en_NZ", "CP437" }, { "en_US", "CP437" }, { "en_ZA", "CP850" }, /* not CP437 ?? */ { "eo", "CP850" }, { "eo_EO", "CP850" }, { "es", "CP850" }, { "es_AR", "CP850" }, { "es_BO", "CP850" }, { "es_CL", "CP850" }, { "es_CO", "CP850" }, { "es_CR", "CP850" }, { "es_CU", "CP850" }, { "es_DO", "CP850" }, { "es_EC", "CP850" }, { "es_ES", "CP850" }, { "es_GT", "CP850" }, { "es_HN", "CP850" }, { "es_MX", "CP850" }, { "es_NI", "CP850" }, { "es_PA", "CP850" }, { "es_PE", "CP850" }, { "es_PY", "CP850" }, { "es_SV", "CP850" }, { "es_UY", "CP850" }, { "es_VE", "CP850" }, { "et", "CP850" }, { "et_EE", "CP850" }, { "eu", "CP850" }, { "eu_ES", "CP850" }, { "fi", "CP850" }, { "fi_FI", "CP850" }, { "fr", "CP850" }, { "fr_BE", "CP850" }, { "fr_CA", "CP850" }, { "fr_CH", "CP850" }, { "fr_FR", "CP850" }, { "ga", "CP850" }, { "ga_IE", "CP850" }, { "gd", "CP850" }, { "gd_GB", "CP850" }, { "gl", "CP850" }, { "gl_ES", "CP850" }, { "he", "CP862" }, { "he_IL", "CP862" }, { "hr", "CP852" }, { "hr_HR", "CP852" }, { "hu", "CP852" }, { "hu_HU", "CP852" }, { "id", "CP850" }, /* not CP437 ?? */ { "id_ID", "CP850" }, /* not CP437 ?? */ { "is", "CP861" }, /* not CP850 ?? */ { "is_IS", "CP861" }, /* not CP850 ?? */ { "it", "CP850" }, { "it_CH", "CP850" }, { "it_IT", "CP850" }, { "ja", "CP932" }, { "ja_JP", "CP932" }, { "kr", "CP949" }, /* not CP934 ?? */ { "kr_KR", "CP949" }, /* not CP934 ?? */ { "lt", "CP775" }, { "lt_LT", "CP775" }, { "lv", "CP775" }, { "lv_LV", "CP775" }, { "mk", "CP866" }, /* not CP855 ?? */ { "mk_MK", "CP866" }, /* not CP855 ?? */ { "mt", "CP850" }, { "mt_MT", "CP850" }, { "nb", "CP865" }, /* not CP850 ?? */ { "nb_NO", "CP865" }, /* not CP850 ?? */ { "nl", "CP850" }, { "nl_BE", "CP850" }, { "nl_NL", "CP850" }, { "nn", "CP865" }, /* not CP850 ?? */ { "nn_NO", "CP865" }, /* not CP850 ?? */ { "no", "CP865" }, /* not CP850 ?? */ { "no_NO", "CP865" }, /* not CP850 ?? */ { "pl", "CP852" }, { "pl_PL", "CP852" }, { "pt", "CP850" }, { "pt_BR", "CP850" }, { "pt_PT", "CP850" }, { "ro", "CP852" }, { "ro_RO", "CP852" }, { "ru", "CP866" }, { "ru_RU", "CP866" }, { "sk", "CP852" }, { "sk_SK", "CP852" }, { "sl", "CP852" }, { "sl_SI", "CP852" }, { "sq", "CP852" }, { "sq_AL", "CP852" }, { "sr", "CP852" }, /* CP852 or CP866 or CP855 ?? */ { "sr_CS", "CP852" }, /* CP852 or CP866 or CP855 ?? */ { "sr_YU", "CP852" }, /* CP852 or CP866 or CP855 ?? */ { "sv", "CP850" }, { "sv_SE", "CP850" }, { "th", "CP874" }, { "th_TH", "CP874" }, { "tr", "CP857" }, { "tr_TR", "CP857" }, { "uk", "CP1125" }, { "uk_UA", "CP1125" }, { "zh_CN", "GBK" }, { "zh_TW", "CP950" } /* not CP938 ?? */ # define locale_table_defined # endif # ifndef locale_table_defined /* Just a dummy entry, to avoid a C syntax error. */ { "", "" } # endif }; #endif /* Determine the current locale's character encoding, and canonicalize it into one of the canonical names listed below. The result must not be freed; it is statically allocated. The result becomes invalid when setlocale() is used to change the global locale, or when the value of one of the environment variables LC_ALL, LC_CTYPE, LANG is changed; threads in multithreaded programs should not do this. If the canonical name cannot be determined, the result is a non-canonical name. */ #ifdef STATIC STATIC #endif const char * locale_charset (void) { const char *codeset; /* This function must be multithread-safe. To achieve this without using thread-local storage, we use a simple strcpy or memcpy to fill this static buffer. Filling it through, for example, strcpy + strcat would not be guaranteed to leave the buffer's contents intact if another thread is currently accessing it. If necessary, the contents is first assembled in a stack-allocated buffer. */ #if HAVE_LANGINFO_CODESET || defined WINDOWS_NATIVE || defined OS2 # if HAVE_LANGINFO_CODESET /* Most systems support nl_langinfo (CODESET) nowadays. */ codeset = nl_langinfo (CODESET); # ifdef __CYGWIN__ /* Cygwin < 1.7 does not have locales. nl_langinfo (CODESET) always returns "US-ASCII". Return the suffix of the locale name from the environment variables (if present) or the codepage as a number. */ if (codeset != NULL && strcmp (codeset, "US-ASCII") == 0) { const char *locale; static char resultbuf[2 + 10 + 1]; locale = getenv ("LC_ALL"); if (locale == NULL || locale[0] == '\0') { locale = getenv ("LC_CTYPE"); if (locale == NULL || locale[0] == '\0') locale = getenv ("LANG"); } if (locale != NULL && locale[0] != '\0') { /* If the locale name contains an encoding after the dot, return it. */ const char *dot = strchr (locale, '.'); if (dot != NULL) { const char *modifier; dot++; /* Look for the possible @... trailer and remove it, if any. */ modifier = strchr (dot, '@'); if (modifier == NULL) return dot; if (modifier - dot < sizeof (resultbuf)) { /* This way of filling resultbuf is multithread-safe. */ memcpy (resultbuf, dot, modifier - dot); resultbuf [modifier - dot] = '\0'; return resultbuf; } } } /* The Windows API has a function returning the locale's codepage as a number: GetACP(). This encoding is used by Cygwin, unless the user has set the environment variable CYGWIN=codepage:oem (which very few people do). Output directed to console windows needs to be converted (to GetOEMCP() if the console is using a raster font, or to GetConsoleOutputCP() if it is using a TrueType font). Cygwin does this conversion transparently (see winsup/cygwin/fhandler_console.cc), converting to GetConsoleOutputCP(). This leads to correct results, except when SetConsoleOutputCP has been called and a raster font is in use. */ { char buf[2 + 10 + 1]; sprintf (buf, "CP%u", GetACP ()); strcpy (resultbuf, buf); codeset = resultbuf; } } # endif if (codeset == NULL) /* The canonical name cannot be determined. */ codeset = ""; # elif defined WINDOWS_NATIVE char buf[2 + 10 + 1]; static char resultbuf[2 + 10 + 1]; /* The Windows API has a function returning the locale's codepage as a number, but the value doesn't change according to what the 'setlocale' call specified. So we use it as a last resort, in case the string returned by 'setlocale' doesn't specify the codepage. */ char *current_locale = setlocale (LC_CTYPE, NULL); char *pdot = strrchr (current_locale, '.'); if (pdot && 2 + strlen (pdot + 1) + 1 <= sizeof (buf)) sprintf (buf, "CP%s", pdot + 1); else { /* The Windows API has a function returning the locale's codepage as a number: GetACP(). When the output goes to a console window, it needs to be provided in GetOEMCP() encoding if the console is using a raster font, or in GetConsoleOutputCP() encoding if it is using a TrueType font. But in GUI programs and for output sent to files and pipes, GetACP() encoding is the best bet. */ sprintf (buf, "CP%u", GetACP ()); } /* For a locale name such as "French_France.65001", in Windows 10, setlocale now returns "French_France.utf8" instead. */ if (strcmp (buf + 2, "65001") == 0 || strcmp (buf + 2, "utf8") == 0) codeset = "UTF-8"; else { strcpy (resultbuf, buf); codeset = resultbuf; } # elif defined OS2 const char *locale; static char resultbuf[2 + 10 + 1]; ULONG cp[3]; ULONG cplen; codeset = NULL; /* Allow user to override the codeset, as set in the operating system, with standard language environment variables. */ locale = getenv ("LC_ALL"); if (locale == NULL || locale[0] == '\0') { locale = getenv ("LC_CTYPE"); if (locale == NULL || locale[0] == '\0') locale = getenv ("LANG"); } if (locale != NULL && locale[0] != '\0') { /* If the locale name contains an encoding after the dot, return it. */ const char *dot = strchr (locale, '.'); if (dot != NULL) { const char *modifier; dot++; /* Look for the possible @... trailer and remove it, if any. */ modifier = strchr (dot, '@'); if (modifier == NULL) return dot; if (modifier - dot < sizeof (resultbuf)) { /* This way of filling resultbuf is multithread-safe. */ memcpy (resultbuf, dot, modifier - dot); resultbuf [modifier - dot] = '\0'; return resultbuf; } } /* For the POSIX locale, don't use the system's codepage. */ if (strcmp (locale, "C") == 0 || strcmp (locale, "POSIX") == 0) codeset = ""; } if (codeset == NULL) { /* OS/2 has a function returning the locale's codepage as a number. */ if (DosQueryCp (sizeof (cp), cp, &cplen)) codeset = ""; else { char buf[2 + 10 + 1]; sprintf (buf, "CP%u", cp[0]); strcpy (resultbuf, buf); codeset = resultbuf; } } # else # error "Add code for other platforms here." # endif /* Resolve alias. */ { # ifdef alias_table_defined /* On some platforms, UTF-8 locales are the most frequently used ones. Speed up the common case and slow down the less common cases by testing for this case first. */ # if defined __OpenBSD__ || (defined __APPLE__ && defined __MACH__) || defined __sun || defined __CYGWIN__ if (strcmp (codeset, "UTF-8") == 0) goto done_table_lookup; else # endif { const struct table_entry * const table = alias_table; size_t const table_size = sizeof (alias_table) / sizeof (struct table_entry); /* The table is sorted. Perform a binary search. */ size_t hi = table_size; size_t lo = 0; while (lo < hi) { /* Invariant: for i < lo, strcmp (table[i].alias, codeset) < 0, for i >= hi, strcmp (table[i].alias, codeset) > 0. */ size_t mid = (hi + lo) >> 1; /* >= lo, < hi */ int cmp = strcmp (table[mid].alias, codeset); if (cmp < 0) lo = mid + 1; else if (cmp > 0) hi = mid; else { /* Found an i with strcmp (table[i].alias, codeset) == 0. */ codeset = table[mid].canonical; goto done_table_lookup; } } } if (0) done_table_lookup: ; else # endif { /* Did not find it in the table. */ /* On Mac OS X, all modern locales use the UTF-8 encoding. BeOS and Haiku have a single locale, and it has UTF-8 encoding. */ # if (defined __APPLE__ && defined __MACH__) || defined __BEOS__ || defined __HAIKU__ codeset = "UTF-8"; # else /* Don't return an empty string. GNU libc and GNU libiconv interpret the empty string as denoting "the locale's character encoding", thus GNU libiconv would call this function a second time. */ if (codeset[0] == '\0') codeset = "ASCII"; # endif } } #else /* On old systems which lack it, use setlocale or getenv. */ const char *locale = NULL; /* But most old systems don't have a complete set of locales. Some (like DJGPP) have only the C locale. Therefore we don't use setlocale here; it would return "C" when it doesn't support the locale name the user has set. */ # if 0 locale = setlocale (LC_CTYPE, NULL); # endif if (locale == NULL || locale[0] == '\0') { locale = getenv ("LC_ALL"); if (locale == NULL || locale[0] == '\0') { locale = getenv ("LC_CTYPE"); if (locale == NULL || locale[0] == '\0') locale = getenv ("LANG"); if (locale == NULL) locale = ""; } } /* Map locale name to canonical encoding name. */ { # ifdef locale_table_defined const struct table_entry * const table = locale_table; size_t const table_size = sizeof (locale_table) / sizeof (struct table_entry); /* The table is sorted. Perform a binary search. */ size_t hi = table_size; size_t lo = 0; while (lo < hi) { /* Invariant: for i < lo, strcmp (table[i].locale, locale) < 0, for i >= hi, strcmp (table[i].locale, locale) > 0. */ size_t mid = (hi + lo) >> 1; /* >= lo, < hi */ int cmp = strcmp (table[mid].locale, locale); if (cmp < 0) lo = mid + 1; else if (cmp > 0) hi = mid; else { /* Found an i with strcmp (table[i].locale, locale) == 0. */ codeset = table[mid].canonical; goto done_table_lookup; } } if (0) done_table_lookup: ; else # endif { /* Did not find it in the table. */ /* On Mac OS X, all modern locales use the UTF-8 encoding. BeOS and Haiku have a single locale, and it has UTF-8 encoding. */ # if (defined __APPLE__ && defined __MACH__) || defined __BEOS__ || defined __HAIKU__ codeset = "UTF-8"; # else /* The canonical name cannot be determined. */ /* Don't return an empty string. GNU libc and GNU libiconv interpret the empty string as denoting "the locale's character encoding", thus GNU libiconv would call this function a second time. */ codeset = "ASCII"; # endif } } #endif #ifdef DARWIN7 /* Mac OS X sets MB_CUR_MAX to 1 when LC_ALL=C, and "UTF-8" (the default codeset) does not work when MB_CUR_MAX is 1. */ if (strcmp (codeset, "UTF-8") == 0 && MB_CUR_MAX_L (uselocale (NULL)) <= 1) codeset = "ASCII"; #endif return codeset; } ����������������������������������������������rush-2.4/gnu/ialloc.c�������������������������������������������������������������������������������0000644�0001750�0001750�00000001512�14436425345�014537� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* malloc with idx_t rather than size_t Copyright 2021-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #define IALLOC_INLINE _GL_EXTERN_INLINE #include "ialloc.h" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/lc-charset-dispatch.h������������������������������������������������������������������0000644�0001750�0001750�00000002572�14436425346�017133� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Dispatching based on the current locale's character encoding. Copyright (C) 2018-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2018. */ #include <wchar.h> #if GNULIB_defined_mbstate_t /* A classification of special values of the encoding of the current locale. */ typedef enum { enc_other, /* other */ enc_utf8, /* UTF-8 */ enc_eucjp, /* EUC-JP */ enc_94, /* EUC-KR, GB2312, BIG5 */ enc_euctw, /* EUC-TW */ enc_gb18030, /* GB18030 */ enc_sjis /* SJIS */ } enc_t; /* Returns a classification of special values of the encoding of the current locale. */ extern enc_t locale_encoding_classification (void); #endif ��������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/windows-mutex.c������������������������������������������������������������������������0000644�0001750�0001750�00000005240�14436425346�016131� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Plain mutexes (native Windows implementation). Copyright (C) 2005-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2005. Based on GCC's gthr-win32.h. */ #include <config.h> /* Specification. */ #include "windows-mutex.h" #include <errno.h> void glwthread_mutex_init (glwthread_mutex_t *mutex) { InitializeCriticalSection (&mutex->lock); mutex->guard.done = 1; } int glwthread_mutex_lock (glwthread_mutex_t *mutex) { if (!mutex->guard.done) { if (InterlockedIncrement (&mutex->guard.started) == 0) /* This thread is the first one to need this mutex. Initialize it. */ glwthread_mutex_init (mutex); else { /* Don't let mutex->guard.started grow and wrap around. */ InterlockedDecrement (&mutex->guard.started); /* Yield the CPU while waiting for another thread to finish initializing this mutex. */ while (!mutex->guard.done) Sleep (0); } } EnterCriticalSection (&mutex->lock); return 0; } int glwthread_mutex_trylock (glwthread_mutex_t *mutex) { if (!mutex->guard.done) { if (InterlockedIncrement (&mutex->guard.started) == 0) /* This thread is the first one to need this mutex. Initialize it. */ glwthread_mutex_init (mutex); else { /* Don't let mutex->guard.started grow and wrap around. */ InterlockedDecrement (&mutex->guard.started); /* Let another thread finish initializing this mutex, and let it also lock this mutex. */ return EBUSY; } } if (!TryEnterCriticalSection (&mutex->lock)) return EBUSY; return 0; } int glwthread_mutex_unlock (glwthread_mutex_t *mutex) { if (!mutex->guard.done) return EINVAL; LeaveCriticalSection (&mutex->lock); return 0; } int glwthread_mutex_destroy (glwthread_mutex_t *mutex) { if (!mutex->guard.done) return EINVAL; DeleteCriticalSection (&mutex->lock); mutex->guard.done = 0; return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/stat-time.c����������������������������������������������������������������������������0000644�0001750�0001750�00000001520�14436425346�015203� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* stat-related time functions. Copyright (C) 2012-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #define _GL_STAT_TIME_INLINE _GL_EXTERN_INLINE #include "stat-time.h" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/fprintftime.h��������������������������������������������������������������������������0000644�0001750�0001750�00000002357�14436425345�015640� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Generate time strings directly to the output. */ /* Copyright (C) 2005, 2009-2023 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 <https://www.gnu.org/licenses/>. */ #include <stdio.h> #include <time.h> /* A cross between fprintf and nstrftime, that prints directly to the output stream, without the need for the potentially large buffer that nstrftime would require. Output to stream FP the result of formatting (according to the nstrftime format string, FMT) the time data, *TM, and the ZONE and NANOSECONDS values. */ size_t fprintftime (FILE *fp, char const *fmt, struct tm const *tm, timezone_t zone, int nanoseconds); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/reallocarray.c�������������������������������������������������������������������������0000644�0001750�0001750�00000002166�14436425346�015763� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* reallocarray function that is glibc compatible. Copyright (C) 2017-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* written by Darshit Shah */ #include <config.h> #include <stdckdint.h> #include <stdlib.h> #include <errno.h> void * reallocarray (void *ptr, size_t nmemb, size_t size) { size_t nbytes; if (ckd_mul (&nbytes, nmemb, size)) { errno = ENOMEM; return NULL; } /* Rely on the semantics of GNU realloc. */ return realloc (ptr, nbytes); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/getopt.c�������������������������������������������������������������������������������0000644�0001750�0001750�00000057111�14436425345�014604� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Getopt for GNU. Copyright (C) 1987-2023 Free Software Foundation, Inc. This file is part of the GNU C Library and is also part of gnulib. Patches to this file should be submitted to both projects. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ #ifndef _LIBC # include <config.h> #endif #include "getopt.h" #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #ifdef _LIBC /* When used as part of glibc, error printing must be done differently for standards compliance. getopt is not a cancellation point, so it must not call functions that are, and it is specified by an older standard than stdio locking, so it must not refer to functions in the "user namespace" related to stdio locking. Finally, it must use glibc's internal message translation so that the messages are looked up in the proper text domain. */ # include <libintl.h> # define fprintf __fxprintf_nocancel # define flockfile(fp) _IO_flockfile (fp) # define funlockfile(fp) _IO_funlockfile (fp) #else # include "gettext.h" # define _(msgid) gettext (msgid) /* When used standalone, flockfile and funlockfile might not be available. */ # if (!defined _POSIX_THREAD_SAFE_FUNCTIONS \ || (defined _WIN32 && ! defined __CYGWIN__)) # define flockfile(fp) /* nop */ # define funlockfile(fp) /* nop */ # endif /* When used standalone, do not attempt to use alloca. */ # define __libc_use_alloca(size) 0 # undef alloca # define alloca(size) (abort (), (void *)0) #endif /* This implementation of 'getopt' has three modes for handling options interspersed with non-option arguments. It can stop scanning for options at the first non-option argument encountered, as POSIX specifies. It can continue scanning for options after the first non-option argument, but permute 'argv' as it goes so that, after 'getopt' is done, all the options precede all the non-option arguments and 'optind' points to the first non-option argument. Or, it can report non-option arguments as if they were arguments to the option character '\x01'. The default behavior of 'getopt_long' is to permute the argument list. When this implementation is used standalone, the default behavior of 'getopt' is to stop at the first non-option argument, but when it is used as part of GNU libc it also permutes the argument list. In both cases, setting the environment variable POSIXLY_CORRECT to any value disables permutation. If the first character of the OPTSTRING argument to 'getopt' or 'getopt_long' is '+', both functions will stop at the first non-option argument. If it is '-', both functions will report non-option arguments as arguments to the option character '\x01'. */ #include "getopt_int.h" /* For communication from 'getopt' to the caller. When 'getopt' finds an option that takes an argument, the argument value is returned here. Also, when 'ordering' is RETURN_IN_ORDER, each non-option ARGV-element is returned here. */ char *optarg; /* Index in ARGV of the next element to be scanned. This is used for communication to and from the caller and for communication between successive calls to 'getopt'. On entry to 'getopt', zero means this is the first call; initialize. When 'getopt' returns -1, this is the index of the first of the non-option elements that the caller should itself scan. Otherwise, 'optind' communicates from one call to the next how much of ARGV has been scanned so far. */ /* 1003.2 says this must be 1 before any call. */ int optind = 1; /* Callers store zero here to inhibit the error message for unrecognized options. */ int opterr = 1; /* Set to an option character which was unrecognized. This must be initialized on some systems to avoid linking in the system's own getopt implementation. */ int optopt = '?'; /* Keep a global copy of all internal members of getopt_data. */ static struct _getopt_data getopt_data; /* Exchange two adjacent subsequences of ARGV. One subsequence is elements [first_nonopt,last_nonopt) which contains all the non-options that have been skipped so far. The other is elements [last_nonopt,optind), which contains all the options processed since those non-options were skipped. 'first_nonopt' and 'last_nonopt' are relocated so that they describe the new indices of the non-options in ARGV after they are moved. */ static void exchange (char **argv, struct _getopt_data *d) { int bottom = d->__first_nonopt; int middle = d->__last_nonopt; int top = d->optind; char *tem; /* Exchange the shorter segment with the far end of the longer segment. That puts the shorter segment into the right place. It leaves the longer segment in the right place overall, but it consists of two parts that need to be swapped next. */ while (top > middle && middle > bottom) { if (top - middle > middle - bottom) { /* Bottom segment is the short one. */ int len = middle - bottom; int i; /* Swap it with the top part of the top segment. */ for (i = 0; i < len; i++) { tem = argv[bottom + i]; argv[bottom + i] = argv[top - (middle - bottom) + i]; argv[top - (middle - bottom) + i] = tem; } /* Exclude the moved bottom segment from further swapping. */ top -= len; } else { /* Top segment is the short one. */ int len = top - middle; int i; /* Swap it with the bottom part of the bottom segment. */ for (i = 0; i < len; i++) { tem = argv[bottom + i]; argv[bottom + i] = argv[middle + i]; argv[middle + i] = tem; } /* Exclude the moved top segment from further swapping. */ bottom += len; } } /* Update records for the slots the non-options now occupy. */ d->__first_nonopt += (d->optind - d->__last_nonopt); d->__last_nonopt = d->optind; } /* Process the argument starting with d->__nextchar as a long option. d->optind should *not* have been advanced over this argument. If the value returned is -1, it was not actually a long option, the state is unchanged, and the argument should be processed as a set of short options (this can only happen when long_only is true). Otherwise, the option (and its argument, if any) have been consumed and the return value is the value to return from _getopt_internal_r. */ static int process_long_option (int argc, char **argv, const char *optstring, const struct option *longopts, int *longind, int long_only, struct _getopt_data *d, int print_errors, const char *prefix) { char *nameend; size_t namelen; const struct option *p; const struct option *pfound = NULL; int n_options; int option_index; for (nameend = d->__nextchar; *nameend && *nameend != '='; nameend++) /* Do nothing. */ ; namelen = nameend - d->__nextchar; /* First look for an exact match, counting the options as a side effect. */ for (p = longopts, n_options = 0; p->name; p++, n_options++) if (!strncmp (p->name, d->__nextchar, namelen) && namelen == strlen (p->name)) { /* Exact match found. */ pfound = p; option_index = n_options; break; } if (pfound == NULL) { /* Didn't find an exact match, so look for abbreviations. */ unsigned char *ambig_set = NULL; int ambig_malloced = 0; int ambig_fallback = 0; int indfound = -1; for (p = longopts, option_index = 0; p->name; p++, option_index++) if (!strncmp (p->name, d->__nextchar, namelen)) { if (pfound == NULL) { /* First nonexact match found. */ pfound = p; indfound = option_index; } else if (long_only || pfound->has_arg != p->has_arg || pfound->flag != p->flag || pfound->val != p->val) { /* Second or later nonexact match found. */ if (!ambig_fallback) { if (!print_errors) /* Don't waste effort tracking the ambig set if we're not going to print it anyway. */ ambig_fallback = 1; else if (!ambig_set) { if (__libc_use_alloca (n_options)) ambig_set = alloca (n_options); else if ((ambig_set = malloc (n_options)) == NULL) /* Fall back to simpler error message. */ ambig_fallback = 1; else ambig_malloced = 1; if (ambig_set) { memset (ambig_set, 0, n_options); ambig_set[indfound] = 1; } } if (ambig_set) ambig_set[option_index] = 1; } } } if (ambig_set || ambig_fallback) { if (print_errors) { if (ambig_fallback) fprintf (stderr, _("%s: option '%s%s' is ambiguous\n"), argv[0], prefix, d->__nextchar); else { flockfile (stderr); fprintf (stderr, _("%s: option '%s%s' is ambiguous; possibilities:"), argv[0], prefix, d->__nextchar); for (option_index = 0; option_index < n_options; option_index++) if (ambig_set[option_index]) fprintf (stderr, " '%s%s'", prefix, longopts[option_index].name); /* This must use 'fprintf' even though it's only printing a single character, so that it goes through __fxprintf_nocancel when compiled as part of glibc. */ fprintf (stderr, "\n"); funlockfile (stderr); } } if (ambig_malloced) free (ambig_set); d->__nextchar += strlen (d->__nextchar); d->optind++; d->optopt = 0; return '?'; } option_index = indfound; } if (pfound == NULL) { /* Can't find it as a long option. If this is not getopt_long_only, or the option starts with '--' or is not a valid short option, then it's an error. */ if (!long_only || argv[d->optind][1] == '-' || strchr (optstring, *d->__nextchar) == NULL) { if (print_errors) fprintf (stderr, _("%s: unrecognized option '%s%s'\n"), argv[0], prefix, d->__nextchar); d->__nextchar = NULL; d->optind++; d->optopt = 0; return '?'; } /* Otherwise interpret it as a short option. */ return -1; } /* We have found a matching long option. Consume it. */ d->optind++; d->__nextchar = NULL; if (*nameend) { /* Don't test has_arg with >, because some C compilers don't allow it to be used on enums. */ if (pfound->has_arg) d->optarg = nameend + 1; else { if (print_errors) fprintf (stderr, _("%s: option '%s%s' doesn't allow an argument\n"), argv[0], prefix, pfound->name); d->optopt = pfound->val; return '?'; } } else if (pfound->has_arg == 1) { if (d->optind < argc) d->optarg = argv[d->optind++]; else { if (print_errors) fprintf (stderr, _("%s: option '%s%s' requires an argument\n"), argv[0], prefix, pfound->name); d->optopt = pfound->val; return optstring[0] == ':' ? ':' : '?'; } } if (longind != NULL) *longind = option_index; if (pfound->flag) { *(pfound->flag) = pfound->val; return 0; } return pfound->val; } /* Initialize internal data upon the first call to getopt. */ static const char * _getopt_initialize (_GL_UNUSED int argc, _GL_UNUSED char **argv, const char *optstring, struct _getopt_data *d, int posixly_correct) { /* Start processing options with ARGV-element 1 (since ARGV-element 0 is the program name); the sequence of previously skipped non-option ARGV-elements is empty. */ if (d->optind == 0) d->optind = 1; d->__first_nonopt = d->__last_nonopt = d->optind; d->__nextchar = NULL; /* Determine how to handle the ordering of options and nonoptions. */ if (optstring[0] == '-') { d->__ordering = RETURN_IN_ORDER; ++optstring; } else if (optstring[0] == '+') { d->__ordering = REQUIRE_ORDER; ++optstring; } else if (posixly_correct || !!getenv ("POSIXLY_CORRECT")) d->__ordering = REQUIRE_ORDER; else d->__ordering = PERMUTE; d->__initialized = 1; return optstring; } /* Scan elements of ARGV (whose length is ARGC) for option characters given in OPTSTRING. If an element of ARGV starts with '-', and is not exactly "-" or "--", then it is an option element. The characters of this element (aside from the initial '-') are option characters. If 'getopt' is called repeatedly, it returns successively each of the option characters from each of the option elements. If 'getopt' finds another option character, it returns that character, updating 'optind' and 'nextchar' so that the next call to 'getopt' can resume the scan with the following option character or ARGV-element. If there are no more option characters, 'getopt' returns -1. Then 'optind' is the index in ARGV of the first ARGV-element that is not an option. (The ARGV-elements have been permuted so that those that are not options now come last.) OPTSTRING is a string containing the legitimate option characters. If an option character is seen that is not listed in OPTSTRING, return '?' after printing an error message. If you set 'opterr' to zero, the error message is suppressed but we still return '?'. If a char in OPTSTRING is followed by a colon, that means it wants an arg, so the following text in the same ARGV-element, or the text of the following ARGV-element, is returned in 'optarg'. Two colons mean an option that wants an optional arg; if there is text in the current ARGV-element, it is returned in 'optarg', otherwise 'optarg' is set to zero. If OPTSTRING starts with '-' or '+', it requests different methods of handling the non-option ARGV-elements. See the comments about RETURN_IN_ORDER and REQUIRE_ORDER, above. Long-named options begin with '--' instead of '-'. Their names may be abbreviated as long as the abbreviation is unique or is an exact match for some defined option. If they have an argument, it follows the option name in the same ARGV-element, separated from the option name by a '=', or else the in next ARGV-element. When 'getopt' finds a long-named option, it returns 0 if that option's 'flag' field is nonzero, the value of the option's 'val' field if the 'flag' field is zero. The elements of ARGV aren't really const, because we permute them. But we pretend they're const in the prototype to be compatible with other systems. LONGOPTS is a vector of 'struct option' terminated by an element containing a name which is zero. LONGIND returns the index in LONGOPT of the long-named option found. It is only valid when a long-named option has been found by the most recent call. If LONG_ONLY is nonzero, '-' as well as '--' can introduce long-named options. */ int _getopt_internal_r (int argc, char **argv, const char *optstring, const struct option *longopts, int *longind, int long_only, struct _getopt_data *d, int posixly_correct) { int print_errors = d->opterr; if (argc < 1) return -1; d->optarg = NULL; if (d->optind == 0 || !d->__initialized) optstring = _getopt_initialize (argc, argv, optstring, d, posixly_correct); else if (optstring[0] == '-' || optstring[0] == '+') optstring++; if (optstring[0] == ':') print_errors = 0; /* Test whether ARGV[optind] points to a non-option argument. */ #define NONOPTION_P (argv[d->optind][0] != '-' || argv[d->optind][1] == '\0') if (d->__nextchar == NULL || *d->__nextchar == '\0') { /* Advance to the next ARGV-element. */ /* Give FIRST_NONOPT & LAST_NONOPT rational values if OPTIND has been moved back by the user (who may also have changed the arguments). */ if (d->__last_nonopt > d->optind) d->__last_nonopt = d->optind; if (d->__first_nonopt > d->optind) d->__first_nonopt = d->optind; if (d->__ordering == PERMUTE) { /* If we have just processed some options following some non-options, exchange them so that the options come first. */ if (d->__first_nonopt != d->__last_nonopt && d->__last_nonopt != d->optind) exchange (argv, d); else if (d->__last_nonopt != d->optind) d->__first_nonopt = d->optind; /* Skip any additional non-options and extend the range of non-options previously skipped. */ while (d->optind < argc && NONOPTION_P) d->optind++; d->__last_nonopt = d->optind; } /* The special ARGV-element '--' means premature end of options. Skip it like a null option, then exchange with previous non-options as if it were an option, then skip everything else like a non-option. */ if (d->optind != argc && !strcmp (argv[d->optind], "--")) { d->optind++; if (d->__first_nonopt != d->__last_nonopt && d->__last_nonopt != d->optind) exchange (argv, d); else if (d->__first_nonopt == d->__last_nonopt) d->__first_nonopt = d->optind; d->__last_nonopt = argc; d->optind = argc; } /* If we have done all the ARGV-elements, stop the scan and back over any non-options that we skipped and permuted. */ if (d->optind == argc) { /* Set the next-arg-index to point at the non-options that we previously skipped, so the caller will digest them. */ if (d->__first_nonopt != d->__last_nonopt) d->optind = d->__first_nonopt; return -1; } /* If we have come to a non-option and did not permute it, either stop the scan or describe it to the caller and pass it by. */ if (NONOPTION_P) { if (d->__ordering == REQUIRE_ORDER) return -1; d->optarg = argv[d->optind++]; return 1; } /* We have found another option-ARGV-element. Check whether it might be a long option. */ if (longopts) { if (argv[d->optind][1] == '-') { /* "--foo" is always a long option. The special option "--" was handled above. */ d->__nextchar = argv[d->optind] + 2; return process_long_option (argc, argv, optstring, longopts, longind, long_only, d, print_errors, "--"); } /* If long_only and the ARGV-element has the form "-f", where f is a valid short option, don't consider it an abbreviated form of a long option that starts with f. Otherwise there would be no way to give the -f short option. On the other hand, if there's a long option "fubar" and the ARGV-element is "-fu", do consider that an abbreviation of the long option, just like "--fu", and not "-f" with arg "u". This distinction seems to be the most useful approach. */ if (long_only && (argv[d->optind][2] || !strchr (optstring, argv[d->optind][1]))) { int code; d->__nextchar = argv[d->optind] + 1; code = process_long_option (argc, argv, optstring, longopts, longind, long_only, d, print_errors, "-"); if (code != -1) return code; } } /* It is not a long option. Skip the initial punctuation. */ d->__nextchar = argv[d->optind] + 1; } /* Look at and handle the next short option-character. */ { char c = *d->__nextchar++; const char *temp = strchr (optstring, c); /* Increment 'optind' when we start to process its last character. */ if (*d->__nextchar == '\0') ++d->optind; if (temp == NULL || c == ':' || c == ';') { if (print_errors) fprintf (stderr, _("%s: invalid option -- '%c'\n"), argv[0], c); d->optopt = c; return '?'; } /* Convenience. Treat POSIX -W foo same as long option --foo */ if (temp[0] == 'W' && temp[1] == ';' && longopts != NULL) { /* This is an option that requires an argument. */ if (*d->__nextchar != '\0') d->optarg = d->__nextchar; else if (d->optind == argc) { if (print_errors) fprintf (stderr, _("%s: option requires an argument -- '%c'\n"), argv[0], c); d->optopt = c; if (optstring[0] == ':') c = ':'; else c = '?'; return c; } else d->optarg = argv[d->optind]; d->__nextchar = d->optarg; d->optarg = NULL; return process_long_option (argc, argv, optstring, longopts, longind, 0 /* long_only */, d, print_errors, "-W "); } if (temp[1] == ':') { if (temp[2] == ':') { /* This is an option that accepts an argument optionally. */ if (*d->__nextchar != '\0') { d->optarg = d->__nextchar; d->optind++; } else d->optarg = NULL; d->__nextchar = NULL; } else { /* This is an option that requires an argument. */ if (*d->__nextchar != '\0') { d->optarg = d->__nextchar; /* If we end this ARGV-element by taking the rest as an arg, we must advance to the next element now. */ d->optind++; } else if (d->optind == argc) { if (print_errors) fprintf (stderr, _("%s: option requires an argument -- '%c'\n"), argv[0], c); d->optopt = c; if (optstring[0] == ':') c = ':'; else c = '?'; } else /* We already incremented 'optind' once; increment it again when taking next ARGV-elt as argument. */ d->optarg = argv[d->optind++]; d->__nextchar = NULL; } } return c; } } int _getopt_internal (int argc, char **argv, const char *optstring, const struct option *longopts, int *longind, int long_only, int posixly_correct) { int result; getopt_data.optind = optind; getopt_data.opterr = opterr; result = _getopt_internal_r (argc, argv, optstring, longopts, longind, long_only, &getopt_data, posixly_correct); optind = getopt_data.optind; optarg = getopt_data.optarg; optopt = getopt_data.optopt; return result; } /* glibc gets a LSB-compliant getopt and a POSIX-complaint __posix_getopt. Standalone applications just get a POSIX-compliant getopt. POSIX and LSB both require these functions to take 'char *const *argv' even though this is incorrect (because of the permutation). */ #define GETOPT_ENTRY(NAME, POSIXLY_CORRECT) \ int \ NAME (int argc, char *const *argv, const char *optstring) \ { \ return _getopt_internal (argc, (char **)argv, optstring, \ 0, 0, 0, POSIXLY_CORRECT); \ } #ifdef _LIBC GETOPT_ENTRY(getopt, 0) GETOPT_ENTRY(__posix_getopt, 1) #else GETOPT_ENTRY(getopt, 1) #endif #ifdef TEST /* Compile with -DTEST to make an executable for use in testing the above definition of 'getopt'. */ int main (int argc, char **argv) { int c; int digit_optind = 0; while (1) { int this_option_optind = optind ? optind : 1; c = getopt (argc, argv, "abc:d:0123456789"); if (c == -1) break; switch (c) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': if (digit_optind != 0 && digit_optind != this_option_optind) printf ("digits occur in two different argv-elements.\n"); digit_optind = this_option_optind; printf ("option %c\n", c); break; case 'a': printf ("option a\n"); break; case 'b': printf ("option b\n"); break; case 'c': printf ("option c with value '%s'\n", optarg); break; case '?': break; default: printf ("?? getopt returned character code 0%o ??\n", c); } } if (optind < argc) { printf ("non-option ARGV-elements: "); while (optind < argc) printf ("%s ", argv[optind++]); printf ("\n"); } exit (0); } #endif /* TEST */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/nstrftime.c����������������������������������������������������������������������������0000644�0001750�0001750�00000141415�14436425346�015317� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1991-2023 Free Software Foundation, Inc. This file is part of the GNU C Library. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifdef _LIBC # define USE_IN_EXTENDED_LOCALE_MODEL 1 # define HAVE_STRUCT_ERA_ENTRY 1 # define HAVE_TM_GMTOFF 1 # define HAVE_STRUCT_TM_TM_ZONE 1 # define HAVE_TZNAME 1 # include "../locale/localeinfo.h" #else # include <libc-config.h> # if FPRINTFTIME # include "fprintftime.h" # else # include "strftime.h" # endif # include "time-internal.h" #endif #include <ctype.h> #include <errno.h> #include <time.h> #if HAVE_TZNAME && !HAVE_DECL_TZNAME extern char *tzname[]; #endif /* Do multibyte processing if multibyte encodings are supported, unless multibyte sequences are safe in formats. Multibyte sequences are safe if they cannot contain byte sequences that look like format conversion specifications. The multibyte encodings used by the C library on the various platforms (UTF-8, GB2312, GBK, CP936, GB18030, EUC-TW, BIG5, BIG5-HKSCS, CP950, EUC-JP, EUC-KR, CP949, SHIFT_JIS, CP932, JOHAB) are safe for formats, because the byte '%' cannot occur in a multibyte character except in the first byte. The DEC-HANYU encoding used on OSF/1 is not safe for formats, but this encoding has never been seen in real-life use, so we ignore it. */ #if !(defined __osf__ && 0) # define MULTIBYTE_IS_FORMAT_SAFE 1 #endif #define DO_MULTIBYTE (! MULTIBYTE_IS_FORMAT_SAFE) #if DO_MULTIBYTE # include <wchar.h> static const mbstate_t mbstate_zero; #endif #include <limits.h> #include <stdckdint.h> #include <stddef.h> #include <stdlib.h> #include <string.h> #include "attribute.h" #include <intprops.h> #ifdef COMPILE_WIDE # include <endian.h> # define CHAR_T wchar_t # define UCHAR_T unsigned int # define L_(Str) L##Str # define NLW(Sym) _NL_W##Sym # define MEMCPY(d, s, n) __wmemcpy (d, s, n) # define STRLEN(s) __wcslen (s) #else # define CHAR_T char # define UCHAR_T unsigned char # define L_(Str) Str # define NLW(Sym) Sym # define ABALTMON_1 _NL_ABALTMON_1 # define MEMCPY(d, s, n) memcpy (d, s, n) # define STRLEN(s) strlen (s) #endif /* Shift A right by B bits portably, by dividing A by 2**B and truncating towards minus infinity. A and B should be free of side effects, and B should be in the range 0 <= B <= INT_BITS - 2, where INT_BITS is the number of useful bits in an int. GNU code can assume that INT_BITS is at least 32. ISO C99 says that A >> B is implementation-defined if A < 0. Some implementations (e.g., UNICOS 9.0 on a Cray Y-MP EL) don't shift right in the usual way when A < 0, so SHR falls back on division if ordinary A >> B doesn't seem to be the usual signed shift. */ #define SHR(a, b) \ (-1 >> 1 == -1 \ ? (a) >> (b) \ : ((a) + ((a) < 0)) / (1 << (b)) - ((a) < 0)) #define TM_YEAR_BASE 1900 #ifndef __isleap /* Nonzero if YEAR is a leap year (every 4 years, except every 100th isn't, and every 400th is). */ # define __isleap(year) \ ((year) % 4 == 0 && ((year) % 100 != 0 || (year) % 400 == 0)) #endif #ifdef _LIBC # define mktime_z(tz, tm) mktime (tm) # define tzname __tzname # define tzset __tzset #endif #ifndef FPRINTFTIME # define FPRINTFTIME 0 #endif #if FPRINTFTIME # define STREAM_OR_CHAR_T FILE # define STRFTIME_ARG(x) /* empty */ #else # define STREAM_OR_CHAR_T CHAR_T # define STRFTIME_ARG(x) x, #endif #if FPRINTFTIME # define memset_byte(P, Len, Byte) \ do { size_t _i; for (_i = 0; _i < Len; _i++) fputc (Byte, P); } while (0) # define memset_space(P, Len) memset_byte (P, Len, ' ') # define memset_zero(P, Len) memset_byte (P, Len, '0') #elif defined COMPILE_WIDE # define memset_space(P, Len) (wmemset (P, L' ', Len), (P) += (Len)) # define memset_zero(P, Len) (wmemset (P, L'0', Len), (P) += (Len)) #else # define memset_space(P, Len) (memset (P, ' ', Len), (P) += (Len)) # define memset_zero(P, Len) (memset (P, '0', Len), (P) += (Len)) #endif #if FPRINTFTIME # define advance(P, N) #else # define advance(P, N) ((P) += (N)) #endif #define add(n, f) width_add (width, n, f) #define width_add(width, n, f) \ do \ { \ size_t _n = (n); \ size_t _w = pad == L_('-') || width < 0 ? 0 : width; \ size_t _incr = _n < _w ? _w : _n; \ if (_incr >= maxsize - i) \ { \ errno = ERANGE; \ return 0; \ } \ if (p) \ { \ if (_n < _w) \ { \ size_t _delta = _w - _n; \ if (pad == L_('0') || pad == L_('+')) \ memset_zero (p, _delta); \ else \ memset_space (p, _delta); \ } \ f; \ advance (p, _n); \ } \ i += _incr; \ } while (0) #define add1(c) width_add1 (width, c) #if FPRINTFTIME # define width_add1(width, c) width_add (width, 1, fputc (c, p)) #else # define width_add1(width, c) width_add (width, 1, *p = c) #endif #define cpy(n, s) width_cpy (width, n, s) #if FPRINTFTIME # define width_cpy(width, n, s) \ width_add (width, n, \ do \ { \ if (to_lowcase) \ fwrite_lowcase (p, (s), _n); \ else if (to_uppcase) \ fwrite_uppcase (p, (s), _n); \ else \ { \ /* Ignore the value of fwrite. The caller can determine whether \ an error occurred by inspecting ferror (P). All known fwrite \ implementations set the stream's error indicator when they \ fail due to ENOMEM etc., even though C11 and POSIX.1-2008 do \ not require this. */ \ fwrite (s, _n, 1, p); \ } \ } \ while (0) \ ) #else # define width_cpy(width, n, s) \ width_add (width, n, \ if (to_lowcase) \ memcpy_lowcase (p, (s), _n LOCALE_ARG); \ else if (to_uppcase) \ memcpy_uppcase (p, (s), _n LOCALE_ARG); \ else \ MEMCPY ((void *) p, (void const *) (s), _n)) #endif #ifdef COMPILE_WIDE # ifndef USE_IN_EXTENDED_LOCALE_MODEL # undef __mbsrtowcs_l # define __mbsrtowcs_l(d, s, l, st, loc) __mbsrtowcs (d, s, l, st) # endif #endif #if defined _LIBC && defined USE_IN_EXTENDED_LOCALE_MODEL /* We use this code also for the extended locale handling where the function gets as an additional argument the locale which has to be used. To access the values we have to redefine the _NL_CURRENT macro. */ # define strftime __strftime_l # define wcsftime __wcsftime_l # undef _NL_CURRENT # define _NL_CURRENT(category, item) \ (current->values[_NL_ITEM_INDEX (item)].string) # define LOCALE_PARAM , locale_t loc # define LOCALE_ARG , loc # define HELPER_LOCALE_ARG , current #else # define LOCALE_PARAM # define LOCALE_ARG # ifdef _LIBC # define HELPER_LOCALE_ARG , _NL_CURRENT_DATA (LC_TIME) # else # define HELPER_LOCALE_ARG # endif #endif #ifdef COMPILE_WIDE # ifdef USE_IN_EXTENDED_LOCALE_MODEL # define TOUPPER(Ch, L) __towupper_l (Ch, L) # define TOLOWER(Ch, L) __towlower_l (Ch, L) # else # define TOUPPER(Ch, L) towupper (Ch) # define TOLOWER(Ch, L) towlower (Ch) # endif #else # ifdef USE_IN_EXTENDED_LOCALE_MODEL # define TOUPPER(Ch, L) __toupper_l (Ch, L) # define TOLOWER(Ch, L) __tolower_l (Ch, L) # else # define TOUPPER(Ch, L) toupper (Ch) # define TOLOWER(Ch, L) tolower (Ch) # endif #endif /* We don't use 'isdigit' here since the locale dependent interpretation is not what we want here. We only need to accept the arabic digits in the ASCII range. One day there is perhaps a more reliable way to accept other sets of digits. */ #define ISDIGIT(Ch) ((unsigned int) (Ch) - L_('0') <= 9) /* Avoid false GCC warning "'memset' specified size 18446744073709551615 exceeds maximum object size 9223372036854775807", caused by insufficient data flow analysis and value propagation of the 'width_add' expansion when GCC is not optimizing. Cf. <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88443>. */ #if __GNUC__ >= 7 && !__OPTIMIZE__ # pragma GCC diagnostic ignored "-Wstringop-overflow" #endif #if FPRINTFTIME static void fwrite_lowcase (FILE *fp, const CHAR_T *src, size_t len) { while (len-- > 0) { fputc (TOLOWER ((UCHAR_T) *src, loc), fp); ++src; } } static void fwrite_uppcase (FILE *fp, const CHAR_T *src, size_t len) { while (len-- > 0) { fputc (TOUPPER ((UCHAR_T) *src, loc), fp); ++src; } } #else static CHAR_T *memcpy_lowcase (CHAR_T *dest, const CHAR_T *src, size_t len LOCALE_PARAM); static CHAR_T * memcpy_lowcase (CHAR_T *dest, const CHAR_T *src, size_t len LOCALE_PARAM) { while (len-- > 0) dest[len] = TOLOWER ((UCHAR_T) src[len], loc); return dest; } static CHAR_T *memcpy_uppcase (CHAR_T *dest, const CHAR_T *src, size_t len LOCALE_PARAM); static CHAR_T * memcpy_uppcase (CHAR_T *dest, const CHAR_T *src, size_t len LOCALE_PARAM) { while (len-- > 0) dest[len] = TOUPPER ((UCHAR_T) src[len], loc); return dest; } #endif #if ! HAVE_TM_GMTOFF /* Yield the difference between *A and *B, measured in seconds, ignoring leap seconds. */ # define tm_diff ftime_tm_diff static int tm_diff (const struct tm *, const struct tm *); static int tm_diff (const struct tm *a, const struct tm *b) { /* Compute intervening leap days correctly even if year is negative. Take care to avoid int overflow in leap day calculations, but it's OK to assume that A and B are close to each other. */ int a4 = SHR (a->tm_year, 2) + SHR (TM_YEAR_BASE, 2) - ! (a->tm_year & 3); int b4 = SHR (b->tm_year, 2) + SHR (TM_YEAR_BASE, 2) - ! (b->tm_year & 3); int a100 = (a4 + (a4 < 0)) / 25 - (a4 < 0); int b100 = (b4 + (b4 < 0)) / 25 - (b4 < 0); int a400 = SHR (a100, 2); int b400 = SHR (b100, 2); int intervening_leap_days = (a4 - b4) - (a100 - b100) + (a400 - b400); int years = a->tm_year - b->tm_year; int days = (365 * years + intervening_leap_days + (a->tm_yday - b->tm_yday)); return (60 * (60 * (24 * days + (a->tm_hour - b->tm_hour)) + (a->tm_min - b->tm_min)) + (a->tm_sec - b->tm_sec)); } #endif /* ! HAVE_TM_GMTOFF */ /* The number of days from the first day of the first ISO week of this year to the year day YDAY with week day WDAY. ISO weeks start on Monday; the first ISO week has the year's first Thursday. YDAY may be as small as YDAY_MINIMUM. */ #define ISO_WEEK_START_WDAY 1 /* Monday */ #define ISO_WEEK1_WDAY 4 /* Thursday */ #define YDAY_MINIMUM (-366) static int iso_week_days (int, int); static __inline int iso_week_days (int yday, int wday) { /* Add enough to the first operand of % to make it nonnegative. */ int big_enough_multiple_of_7 = (-YDAY_MINIMUM / 7 + 2) * 7; return (yday - (yday - wday + ISO_WEEK1_WDAY + big_enough_multiple_of_7) % 7 + ISO_WEEK1_WDAY - ISO_WEEK_START_WDAY); } /* When compiling this file, GNU applications can #define my_strftime to a symbol (typically nstrftime) to get an extended strftime with extra arguments TZ and NS. */ #if FPRINTFTIME # undef my_strftime # define my_strftime fprintftime #endif #ifdef my_strftime # define extra_args , tz, ns # define extra_args_spec , timezone_t tz, int ns #else # if defined COMPILE_WIDE # define my_strftime wcsftime # define nl_get_alt_digit _nl_get_walt_digit # else # define my_strftime strftime # define nl_get_alt_digit _nl_get_alt_digit # endif # define extra_args # define extra_args_spec /* We don't have this information in general. */ # define tz 1 # define ns 0 #endif static size_t __strftime_internal (STREAM_OR_CHAR_T *, STRFTIME_ARG (size_t) const CHAR_T *, const struct tm *, bool, int, int, bool * extra_args_spec LOCALE_PARAM); /* Write information from TP into S according to the format string FORMAT, writing no more that MAXSIZE characters (including the terminating '\0') and returning number of characters written. If S is NULL, nothing will be written anywhere, so to determine how many characters would be written, use NULL for S and (size_t) -1 for MAXSIZE. */ size_t my_strftime (STREAM_OR_CHAR_T *s, STRFTIME_ARG (size_t maxsize) const CHAR_T *format, const struct tm *tp extra_args_spec LOCALE_PARAM) { bool tzset_called = false; return __strftime_internal (s, STRFTIME_ARG (maxsize) format, tp, false, 0, -1, &tzset_called extra_args LOCALE_ARG); } libc_hidden_def (my_strftime) /* Just like my_strftime, above, but with more parameters. UPCASE indicates that the result should be converted to upper case. YR_SPEC and WIDTH specify the padding and width for the year. *TZSET_CALLED indicates whether tzset has been called here. */ static size_t __strftime_internal (STREAM_OR_CHAR_T *s, STRFTIME_ARG (size_t maxsize) const CHAR_T *format, const struct tm *tp, bool upcase, int yr_spec, int width, bool *tzset_called extra_args_spec LOCALE_PARAM) { #if defined _LIBC && defined USE_IN_EXTENDED_LOCALE_MODEL struct __locale_data *const current = loc->__locales[LC_TIME]; #endif #if FPRINTFTIME size_t maxsize = (size_t) -1; #endif int saved_errno = errno; int hour12 = tp->tm_hour; #ifdef _NL_CURRENT /* We cannot make the following values variables since we must delay the evaluation of these values until really needed since some expressions might not be valid in every situation. The 'struct tm' might be generated by a strptime() call that initialized only a few elements. Dereference the pointers only if the format requires this. Then it is ok to fail if the pointers are invalid. */ # define a_wkday \ ((const CHAR_T *) (tp->tm_wday < 0 || tp->tm_wday > 6 \ ? "?" : _NL_CURRENT (LC_TIME, NLW(ABDAY_1) + tp->tm_wday))) # define f_wkday \ ((const CHAR_T *) (tp->tm_wday < 0 || tp->tm_wday > 6 \ ? "?" : _NL_CURRENT (LC_TIME, NLW(DAY_1) + tp->tm_wday))) # define a_month \ ((const CHAR_T *) (tp->tm_mon < 0 || tp->tm_mon > 11 \ ? "?" : _NL_CURRENT (LC_TIME, NLW(ABMON_1) + tp->tm_mon))) # define f_month \ ((const CHAR_T *) (tp->tm_mon < 0 || tp->tm_mon > 11 \ ? "?" : _NL_CURRENT (LC_TIME, NLW(MON_1) + tp->tm_mon))) # define a_altmonth \ ((const CHAR_T *) (tp->tm_mon < 0 || tp->tm_mon > 11 \ ? "?" : _NL_CURRENT (LC_TIME, NLW(ABALTMON_1) + tp->tm_mon))) # define f_altmonth \ ((const CHAR_T *) (tp->tm_mon < 0 || tp->tm_mon > 11 \ ? "?" : _NL_CURRENT (LC_TIME, NLW(ALTMON_1) + tp->tm_mon))) # define ampm \ ((const CHAR_T *) _NL_CURRENT (LC_TIME, tp->tm_hour > 11 \ ? NLW(PM_STR) : NLW(AM_STR))) # define aw_len STRLEN (a_wkday) # define am_len STRLEN (a_month) # define aam_len STRLEN (a_altmonth) # define ap_len STRLEN (ampm) #endif #if HAVE_TZNAME char **tzname_vec = tzname; #endif const char *zone; size_t i = 0; STREAM_OR_CHAR_T *p = s; const CHAR_T *f; #if DO_MULTIBYTE && !defined COMPILE_WIDE const char *format_end = NULL; #endif zone = NULL; #if HAVE_STRUCT_TM_TM_ZONE /* The POSIX test suite assumes that setting the environment variable TZ to a new value before calling strftime() will influence the result (the %Z format) even if the information in TP is computed with a totally different time zone. This is bogus: though POSIX allows bad behavior like this, POSIX does not require it. Do the right thing instead. */ zone = (const char *) tp->tm_zone; #endif #if HAVE_TZNAME if (!tz) { if (! (zone && *zone)) zone = "GMT"; } else { # if !HAVE_STRUCT_TM_TM_ZONE /* Infer the zone name from *TZ instead of from TZNAME. */ tzname_vec = tz->tzname_copy; # endif } /* The tzset() call might have changed the value. */ if (!(zone && *zone) && tp->tm_isdst >= 0) { /* POSIX.1 requires that local time zone information be used as though strftime called tzset. */ # ifndef my_strftime if (!*tzset_called) { tzset (); *tzset_called = true; } # endif zone = tzname_vec[tp->tm_isdst != 0]; } #endif if (! zone) zone = ""; if (hour12 > 12) hour12 -= 12; else if (hour12 == 0) hour12 = 12; for (f = format; *f != '\0'; width = -1, f++) { int pad = 0; /* Padding for number ('_', '-', '+', '0', or 0). */ int modifier; /* Field modifier ('E', 'O', or 0). */ int digits = 0; /* Max digits for numeric format. */ int number_value; /* Numeric value to be printed. */ unsigned int u_number_value; /* (unsigned int) number_value. */ bool negative_number; /* The number is negative. */ bool always_output_a_sign; /* +/- should always be output. */ int tz_colon_mask; /* Bitmask of where ':' should appear. */ const CHAR_T *subfmt; CHAR_T *bufp; CHAR_T buf[1 + 2 /* for the two colons in a %::z or %:::z time zone */ + (sizeof (int) < sizeof (time_t) ? INT_STRLEN_BOUND (time_t) : INT_STRLEN_BOUND (int))]; bool to_lowcase = false; bool to_uppcase = upcase; size_t colons; bool change_case = false; int format_char; int subwidth; #if DO_MULTIBYTE && !defined COMPILE_WIDE switch (*f) { case L_('%'): break; case L_('\b'): case L_('\t'): case L_('\n'): case L_('\v'): case L_('\f'): case L_('\r'): case L_(' '): case L_('!'): case L_('"'): case L_('#'): case L_('&'): case L_('\''): case L_('('): case L_(')'): case L_('*'): case L_('+'): case L_(','): case L_('-'): case L_('.'): case L_('/'): case L_('0'): case L_('1'): case L_('2'): case L_('3'): case L_('4'): case L_('5'): case L_('6'): case L_('7'): case L_('8'): case L_('9'): case L_(':'): case L_(';'): case L_('<'): case L_('='): case L_('>'): case L_('?'): case L_('A'): case L_('B'): case L_('C'): case L_('D'): case L_('E'): case L_('F'): case L_('G'): case L_('H'): case L_('I'): case L_('J'): case L_('K'): case L_('L'): case L_('M'): case L_('N'): case L_('O'): case L_('P'): case L_('Q'): case L_('R'): case L_('S'): case L_('T'): case L_('U'): case L_('V'): case L_('W'): case L_('X'): case L_('Y'): case L_('Z'): case L_('['): case L_('\\'): case L_(']'): case L_('^'): case L_('_'): case L_('a'): case L_('b'): case L_('c'): case L_('d'): case L_('e'): case L_('f'): case L_('g'): case L_('h'): case L_('i'): case L_('j'): case L_('k'): case L_('l'): case L_('m'): case L_('n'): case L_('o'): case L_('p'): case L_('q'): case L_('r'): case L_('s'): case L_('t'): case L_('u'): case L_('v'): case L_('w'): case L_('x'): case L_('y'): case L_('z'): case L_('{'): case L_('|'): case L_('}'): case L_('~'): /* The C Standard requires these 98 characters (plus '%') to be in the basic execution character set. None of these characters can start a multibyte sequence, so they need not be analyzed further. */ add1 (*f); continue; default: /* Copy this multibyte sequence until we reach its end, find an error, or come back to the initial shift state. */ { mbstate_t mbstate = mbstate_zero; size_t len = 0; size_t fsize; if (! format_end) format_end = f + strlen (f) + 1; fsize = format_end - f; do { size_t bytes = mbrlen (f + len, fsize - len, &mbstate); if (bytes == 0) break; if (bytes == (size_t) -2) { len += strlen (f + len); break; } if (bytes == (size_t) -1) { len++; break; } len += bytes; } while (! mbsinit (&mbstate)); cpy (len, f); f += len - 1; continue; } } #else /* ! DO_MULTIBYTE */ /* Either multibyte encodings are not supported, they are safe for formats, so any non-'%' byte can be copied through, or this is the wide character version. */ if (*f != L_('%')) { add1 (*f); continue; } #endif /* ! DO_MULTIBYTE */ char const *percent = f; /* Check for flags that can modify a format. */ while (1) { switch (*++f) { /* This influences the number formats. */ case L_('_'): case L_('-'): case L_('+'): case L_('0'): pad = *f; continue; /* This changes textual output. */ case L_('^'): to_uppcase = true; continue; case L_('#'): change_case = true; continue; default: break; } break; } if (ISDIGIT (*f)) { width = 0; do { if (ckd_mul (&width, width, 10) || ckd_add (&width, width, *f - L_('0'))) width = INT_MAX; ++f; } while (ISDIGIT (*f)); } /* Check for modifiers. */ switch (*f) { case L_('E'): case L_('O'): modifier = *f++; break; default: modifier = 0; break; } /* Now do the specified format. */ format_char = *f; switch (format_char) { #define DO_NUMBER(d, v) \ do \ { \ digits = d; \ number_value = v; \ goto do_number; \ } \ while (0) #define DO_SIGNED_NUMBER(d, negative, v) \ DO_MAYBE_SIGNED_NUMBER (d, negative, v, do_signed_number) #define DO_YEARISH(d, negative, v) \ DO_MAYBE_SIGNED_NUMBER (d, negative, v, do_yearish) #define DO_MAYBE_SIGNED_NUMBER(d, negative, v, label) \ do \ { \ digits = d; \ negative_number = negative; \ u_number_value = v; \ goto label; \ } \ while (0) /* The mask is not what you might think. When the ordinal i'th bit is set, insert a colon before the i'th digit of the time zone representation. */ #define DO_TZ_OFFSET(d, mask, v) \ do \ { \ digits = d; \ tz_colon_mask = mask; \ u_number_value = v; \ goto do_tz_offset; \ } \ while (0) #define DO_NUMBER_SPACEPAD(d, v) \ do \ { \ digits = d; \ number_value = v; \ goto do_number_spacepad; \ } \ while (0) case L_('%'): if (f - 1 != percent) goto bad_percent; add1 (*f); break; case L_('a'): if (modifier != 0) goto bad_format; if (change_case) { to_uppcase = true; to_lowcase = false; } #ifdef _NL_CURRENT cpy (aw_len, a_wkday); break; #else goto underlying_strftime; #endif case 'A': if (modifier != 0) goto bad_format; if (change_case) { to_uppcase = true; to_lowcase = false; } #ifdef _NL_CURRENT cpy (STRLEN (f_wkday), f_wkday); break; #else goto underlying_strftime; #endif case L_('b'): case L_('h'): if (change_case) { to_uppcase = true; to_lowcase = false; } if (modifier == L_('E')) goto bad_format; #ifdef _NL_CURRENT if (modifier == L_('O')) cpy (aam_len, a_altmonth); else cpy (am_len, a_month); break; #else goto underlying_strftime; #endif case L_('B'): if (modifier == L_('E')) goto bad_format; if (change_case) { to_uppcase = true; to_lowcase = false; } #ifdef _NL_CURRENT if (modifier == L_('O')) cpy (STRLEN (f_altmonth), f_altmonth); else cpy (STRLEN (f_month), f_month); break; #else goto underlying_strftime; #endif case L_('c'): if (modifier == L_('O')) goto bad_format; #ifdef _NL_CURRENT if (! (modifier == L_('E') && (*(subfmt = (const CHAR_T *) _NL_CURRENT (LC_TIME, NLW(ERA_D_T_FMT))) != '\0'))) subfmt = (const CHAR_T *) _NL_CURRENT (LC_TIME, NLW(D_T_FMT)); #else goto underlying_strftime; #endif subformat: subwidth = -1; subformat_width: { size_t len = __strftime_internal (NULL, STRFTIME_ARG ((size_t) -1) subfmt, tp, to_uppcase, pad, subwidth, tzset_called extra_args LOCALE_ARG); add (len, __strftime_internal (p, STRFTIME_ARG (maxsize - i) subfmt, tp, to_uppcase, pad, subwidth, tzset_called extra_args LOCALE_ARG)); } break; #if !(defined _NL_CURRENT && HAVE_STRUCT_ERA_ENTRY) underlying_strftime: { /* The relevant information is available only via the underlying strftime implementation, so use that. */ char ufmt[5]; char *u = ufmt; char ubuf[1024]; /* enough for any single format in practice */ size_t len; /* Make sure we're calling the actual underlying strftime. In some cases, config.h contains something like "#define strftime rpl_strftime". */ # ifdef strftime # undef strftime size_t strftime (); # endif /* The space helps distinguish strftime failure from empty output. */ *u++ = ' '; *u++ = '%'; if (modifier != 0) *u++ = modifier; *u++ = format_char; *u = '\0'; len = strftime (ubuf, sizeof ubuf, ufmt, tp); if (len != 0) cpy (len - 1, ubuf + 1); } break; #endif case L_('C'): if (modifier == L_('E')) { #if HAVE_STRUCT_ERA_ENTRY struct era_entry *era = _nl_get_era_entry (tp HELPER_LOCALE_ARG); if (era) { # ifdef COMPILE_WIDE size_t len = __wcslen (era->era_wname); cpy (len, era->era_wname); # else size_t len = strlen (era->era_name); cpy (len, era->era_name); # endif break; } #else goto underlying_strftime; #endif } { bool negative_year = tp->tm_year < - TM_YEAR_BASE; bool zero_thru_1899 = !negative_year & (tp->tm_year < 0); int century = ((tp->tm_year - 99 * zero_thru_1899) / 100 + TM_YEAR_BASE / 100); DO_YEARISH (2, negative_year, century); } case L_('x'): if (modifier == L_('O')) goto bad_format; #ifdef _NL_CURRENT if (! (modifier == L_('E') && (*(subfmt = (const CHAR_T *) _NL_CURRENT (LC_TIME, NLW(ERA_D_FMT))) != L_('\0')))) subfmt = (const CHAR_T *) _NL_CURRENT (LC_TIME, NLW(D_FMT)); goto subformat; #else goto underlying_strftime; #endif case L_('D'): if (modifier != 0) goto bad_format; subfmt = L_("%m/%d/%y"); goto subformat; case L_('d'): if (modifier == L_('E')) goto bad_format; DO_NUMBER (2, tp->tm_mday); case L_('e'): if (modifier == L_('E')) goto bad_format; DO_NUMBER_SPACEPAD (2, tp->tm_mday); /* All numeric formats set DIGITS and NUMBER_VALUE (or U_NUMBER_VALUE) and then jump to one of these labels. */ do_tz_offset: always_output_a_sign = true; goto do_number_body; do_yearish: if (pad == 0) pad = yr_spec; always_output_a_sign = (pad == L_('+') && ((digits == 2 ? 99 : 9999) < u_number_value || digits < width)); goto do_maybe_signed_number; do_number_spacepad: if (pad == 0) pad = L_('_'); do_number: /* Format NUMBER_VALUE according to the MODIFIER flag. */ negative_number = number_value < 0; u_number_value = number_value; do_signed_number: always_output_a_sign = false; do_maybe_signed_number: tz_colon_mask = 0; do_number_body: /* Format U_NUMBER_VALUE according to the MODIFIER flag. NEGATIVE_NUMBER is nonzero if the original number was negative; in this case it was converted directly to unsigned int (i.e., modulo (UINT_MAX + 1)) without negating it. */ if (modifier == L_('O') && !negative_number) { #ifdef _NL_CURRENT /* Get the locale specific alternate representation of the number. If none exist NULL is returned. */ const CHAR_T *cp = nl_get_alt_digit (u_number_value HELPER_LOCALE_ARG); if (cp != NULL) { size_t digitlen = STRLEN (cp); if (digitlen != 0) { cpy (digitlen, cp); break; } } #else goto underlying_strftime; #endif } bufp = buf + sizeof (buf) / sizeof (buf[0]); if (negative_number) u_number_value = - u_number_value; do { if (tz_colon_mask & 1) *--bufp = ':'; tz_colon_mask >>= 1; *--bufp = u_number_value % 10 + L_('0'); u_number_value /= 10; } while (u_number_value != 0 || tz_colon_mask != 0); do_number_sign_and_padding: if (pad == 0) pad = L_('0'); if (width < 0) width = digits; { CHAR_T sign_char = (negative_number ? L_('-') : always_output_a_sign ? L_('+') : 0); int numlen = buf + sizeof buf / sizeof buf[0] - bufp; int shortage = width - !!sign_char - numlen; int padding = pad == L_('-') || shortage <= 0 ? 0 : shortage; if (sign_char) { if (pad == L_('_')) { if (p) memset_space (p, padding); i += padding; width -= padding; } width_add1 (0, sign_char); width--; } cpy (numlen, bufp); } break; case L_('F'): if (modifier != 0) goto bad_format; if (pad == 0 && width < 0) { pad = L_('+'); subwidth = 4; } else { subwidth = width - 6; if (subwidth < 0) subwidth = 0; } subfmt = L_("%Y-%m-%d"); goto subformat_width; case L_('H'): if (modifier == L_('E')) goto bad_format; DO_NUMBER (2, tp->tm_hour); case L_('I'): if (modifier == L_('E')) goto bad_format; DO_NUMBER (2, hour12); case L_('k'): /* GNU extension. */ if (modifier == L_('E')) goto bad_format; DO_NUMBER_SPACEPAD (2, tp->tm_hour); case L_('l'): /* GNU extension. */ if (modifier == L_('E')) goto bad_format; DO_NUMBER_SPACEPAD (2, hour12); case L_('j'): if (modifier == L_('E')) goto bad_format; DO_SIGNED_NUMBER (3, tp->tm_yday < -1, tp->tm_yday + 1U); case L_('M'): if (modifier == L_('E')) goto bad_format; DO_NUMBER (2, tp->tm_min); case L_('m'): if (modifier == L_('E')) goto bad_format; DO_SIGNED_NUMBER (2, tp->tm_mon < -1, tp->tm_mon + 1U); #ifndef _LIBC case L_('N'): /* GNU extension. */ if (modifier == L_('E')) goto bad_format; { int n = ns, ns_digits = 9; if (width <= 0) width = ns_digits; int ndigs = ns_digits; while (width < ndigs || (1 < ndigs && n % 10 == 0)) ndigs--, n /= 10; for (int j = ndigs; 0 < j; j--) buf[j - 1] = n % 10 + L_('0'), n /= 10; if (!pad) pad = L_('0'); width_cpy (0, ndigs, buf); width_add (width - ndigs, 0, (void) 0); } break; #endif case L_('n'): add1 (L_('\n')); break; case L_('P'): to_lowcase = true; #ifndef _NL_CURRENT format_char = L_('p'); #endif FALLTHROUGH; case L_('p'): if (change_case) { to_uppcase = false; to_lowcase = true; } #ifdef _NL_CURRENT cpy (ap_len, ampm); break; #else goto underlying_strftime; #endif case L_('q'): /* GNU extension. */ DO_SIGNED_NUMBER (1, false, ((tp->tm_mon * 11) >> 5) + 1); case L_('R'): subfmt = L_("%H:%M"); goto subformat; case L_('r'): #ifdef _NL_CURRENT if (*(subfmt = (const CHAR_T *) _NL_CURRENT (LC_TIME, NLW(T_FMT_AMPM))) == L_('\0')) subfmt = L_("%I:%M:%S %p"); goto subformat; #else goto underlying_strftime; #endif case L_('S'): if (modifier == L_('E')) goto bad_format; DO_NUMBER (2, tp->tm_sec); case L_('s'): /* GNU extension. */ { struct tm ltm; time_t t; ltm = *tp; ltm.tm_yday = -1; t = mktime_z (tz, <m); if (ltm.tm_yday < 0) { errno = EOVERFLOW; return 0; } /* Generate string value for T using time_t arithmetic; this works even if sizeof (long) < sizeof (time_t). */ bufp = buf + sizeof (buf) / sizeof (buf[0]); negative_number = t < 0; do { int d = t % 10; t /= 10; *--bufp = (negative_number ? -d : d) + L_('0'); } while (t != 0); digits = 1; always_output_a_sign = false; goto do_number_sign_and_padding; } case L_('X'): if (modifier == L_('O')) goto bad_format; #ifdef _NL_CURRENT if (! (modifier == L_('E') && (*(subfmt = (const CHAR_T *) _NL_CURRENT (LC_TIME, NLW(ERA_T_FMT))) != L_('\0')))) subfmt = (const CHAR_T *) _NL_CURRENT (LC_TIME, NLW(T_FMT)); goto subformat; #else goto underlying_strftime; #endif case L_('T'): subfmt = L_("%H:%M:%S"); goto subformat; case L_('t'): add1 (L_('\t')); break; case L_('u'): DO_NUMBER (1, (tp->tm_wday - 1 + 7) % 7 + 1); case L_('U'): if (modifier == L_('E')) goto bad_format; DO_NUMBER (2, (tp->tm_yday - tp->tm_wday + 7) / 7); case L_('V'): case L_('g'): case L_('G'): if (modifier == L_('E')) goto bad_format; { /* YEAR is a leap year if and only if (tp->tm_year + TM_YEAR_BASE) is a leap year, except that YEAR and YEAR - 1 both work correctly even when (tp->tm_year + TM_YEAR_BASE) would overflow. */ int year = (tp->tm_year + (tp->tm_year < 0 ? TM_YEAR_BASE % 400 : TM_YEAR_BASE % 400 - 400)); int year_adjust = 0; int days = iso_week_days (tp->tm_yday, tp->tm_wday); if (days < 0) { /* This ISO week belongs to the previous year. */ year_adjust = -1; days = iso_week_days (tp->tm_yday + (365 + __isleap (year - 1)), tp->tm_wday); } else { int d = iso_week_days (tp->tm_yday - (365 + __isleap (year)), tp->tm_wday); if (0 <= d) { /* This ISO week belongs to the next year. */ year_adjust = 1; days = d; } } switch (*f) { case L_('g'): { int yy = (tp->tm_year % 100 + year_adjust) % 100; DO_YEARISH (2, false, (0 <= yy ? yy : tp->tm_year < -TM_YEAR_BASE - year_adjust ? -yy : yy + 100)); } case L_('G'): DO_YEARISH (4, tp->tm_year < -TM_YEAR_BASE - year_adjust, (tp->tm_year + (unsigned int) TM_YEAR_BASE + year_adjust)); default: DO_NUMBER (2, days / 7 + 1); } } case L_('W'): if (modifier == L_('E')) goto bad_format; DO_NUMBER (2, (tp->tm_yday - (tp->tm_wday - 1 + 7) % 7 + 7) / 7); case L_('w'): if (modifier == L_('E')) goto bad_format; DO_NUMBER (1, tp->tm_wday); case L_('Y'): if (modifier == L_('E')) { #if HAVE_STRUCT_ERA_ENTRY struct era_entry *era = _nl_get_era_entry (tp HELPER_LOCALE_ARG); if (era) { # ifdef COMPILE_WIDE subfmt = era->era_wformat; # else subfmt = era->era_format; # endif if (pad == 0) pad = yr_spec; goto subformat; } #else goto underlying_strftime; #endif } if (modifier == L_('O')) goto bad_format; DO_YEARISH (4, tp->tm_year < -TM_YEAR_BASE, tp->tm_year + (unsigned int) TM_YEAR_BASE); case L_('y'): if (modifier == L_('E')) { #if HAVE_STRUCT_ERA_ENTRY struct era_entry *era = _nl_get_era_entry (tp HELPER_LOCALE_ARG); if (era) { int delta = tp->tm_year - era->start_date[0]; if (pad == 0) pad = yr_spec; DO_NUMBER (2, (era->offset + delta * era->absolute_direction)); } #else goto underlying_strftime; #endif } { int yy = tp->tm_year % 100; if (yy < 0) yy = tp->tm_year < - TM_YEAR_BASE ? -yy : yy + 100; DO_YEARISH (2, false, yy); } case L_('Z'): if (change_case) { to_uppcase = false; to_lowcase = true; } #ifdef COMPILE_WIDE { /* The zone string is always given in multibyte form. We have to convert it to wide character. */ size_t w = pad == L_('-') || width < 0 ? 0 : width; char const *z = zone; mbstate_t st = {0}; size_t len = __mbsrtowcs_l (p, &z, maxsize - i, &st, loc); if (len == (size_t) -1) return 0; size_t incr = len < w ? w : len; if (incr >= maxsize - i) { errno = ERANGE; return 0; } if (p) { if (len < w) { size_t delta = w - len; __wmemmove (p + delta, p, len); wchar_t wc = pad == L_('0') || pad == L_('+') ? L'0' : L' '; wmemset (p, wc, delta); } p += incr; } i += incr; } #else cpy (strlen (zone), zone); #endif break; case L_(':'): /* :, ::, and ::: are valid only just before 'z'. :::: etc. are rejected later. */ for (colons = 1; f[colons] == L_(':'); colons++) continue; if (f[colons] != L_('z')) goto bad_format; f += colons; goto do_z_conversion; case L_('z'): colons = 0; do_z_conversion: if (tp->tm_isdst < 0) break; { int diff; int hour_diff; int min_diff; int sec_diff; #if HAVE_TM_GMTOFF diff = tp->tm_gmtoff; #else if (!tz) diff = 0; else { struct tm gtm; struct tm ltm; time_t lt; /* POSIX.1 requires that local time zone information be used as though strftime called tzset. */ # ifndef my_strftime if (!*tzset_called) { tzset (); *tzset_called = true; } # endif ltm = *tp; ltm.tm_wday = -1; lt = mktime_z (tz, <m); if (ltm.tm_wday < 0 || ! localtime_rz (0, <, >m)) break; diff = tm_diff (<m, >m); } #endif negative_number = diff < 0 || (diff == 0 && *zone == '-'); hour_diff = diff / 60 / 60; min_diff = diff / 60 % 60; sec_diff = diff % 60; switch (colons) { case 0: /* +hhmm */ DO_TZ_OFFSET (5, 0, hour_diff * 100 + min_diff); case 1: tz_hh_mm: /* +hh:mm */ DO_TZ_OFFSET (6, 04, hour_diff * 100 + min_diff); case 2: tz_hh_mm_ss: /* +hh:mm:ss */ DO_TZ_OFFSET (9, 024, hour_diff * 10000 + min_diff * 100 + sec_diff); case 3: /* +hh if possible, else +hh:mm, else +hh:mm:ss */ if (sec_diff != 0) goto tz_hh_mm_ss; if (min_diff != 0) goto tz_hh_mm; DO_TZ_OFFSET (3, 0, hour_diff); default: goto bad_format; } } case L_('\0'): /* GNU extension: % at end of format. */ bad_percent: --f; FALLTHROUGH; default: /* Unknown format; output the format, including the '%', since this is most likely the right thing to do if a multibyte string has been misparsed. */ bad_format: cpy (f - percent + 1, percent); break; } } #if ! FPRINTFTIME if (p && maxsize != 0) *p = L_('\0'); #endif errno = saved_errno; return i; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/regcomp.c������������������������������������������������������������������������������0000644�0001750�0001750�00000332677�14436425346�014754� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Extended regular expression matching and search library. Copyright (C) 2002-2023 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Isamu Hasegawa <isamu@yamato.ibm.com>. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ #ifdef _LIBC # include <locale/weight.h> #endif static reg_errcode_t re_compile_internal (regex_t *preg, const char * pattern, size_t length, reg_syntax_t syntax); static void re_compile_fastmap_iter (regex_t *bufp, const re_dfastate_t *init_state, char *fastmap); static reg_errcode_t init_dfa (re_dfa_t *dfa, size_t pat_len); static void free_charset (re_charset_t *cset); static void free_workarea_compile (regex_t *preg); static reg_errcode_t create_initial_state (re_dfa_t *dfa); static void optimize_utf8 (re_dfa_t *dfa); static reg_errcode_t analyze (regex_t *preg); static reg_errcode_t preorder (bin_tree_t *root, reg_errcode_t (fn (void *, bin_tree_t *)), void *extra); static reg_errcode_t postorder (bin_tree_t *root, reg_errcode_t (fn (void *, bin_tree_t *)), void *extra); static reg_errcode_t optimize_subexps (void *extra, bin_tree_t *node); static reg_errcode_t lower_subexps (void *extra, bin_tree_t *node); static bin_tree_t *lower_subexp (reg_errcode_t *err, regex_t *preg, bin_tree_t *node); static reg_errcode_t calc_first (void *extra, bin_tree_t *node); static reg_errcode_t calc_next (void *extra, bin_tree_t *node); static reg_errcode_t link_nfa_nodes (void *extra, bin_tree_t *node); static Idx duplicate_node (re_dfa_t *dfa, Idx org_idx, unsigned int constraint); static Idx search_duplicated_node (const re_dfa_t *dfa, Idx org_node, unsigned int constraint); static reg_errcode_t calc_eclosure (re_dfa_t *dfa); static reg_errcode_t calc_eclosure_iter (re_node_set *new_set, re_dfa_t *dfa, Idx node, bool root); static reg_errcode_t calc_inveclosure (re_dfa_t *dfa); static Idx fetch_number (re_string_t *input, re_token_t *token, reg_syntax_t syntax); static int peek_token (re_token_t *token, re_string_t *input, reg_syntax_t syntax); static bin_tree_t *parse (re_string_t *regexp, regex_t *preg, reg_syntax_t syntax, reg_errcode_t *err); static bin_tree_t *parse_reg_exp (re_string_t *regexp, regex_t *preg, re_token_t *token, reg_syntax_t syntax, Idx nest, reg_errcode_t *err); static bin_tree_t *parse_branch (re_string_t *regexp, regex_t *preg, re_token_t *token, reg_syntax_t syntax, Idx nest, reg_errcode_t *err); static bin_tree_t *parse_expression (re_string_t *regexp, regex_t *preg, re_token_t *token, reg_syntax_t syntax, Idx nest, reg_errcode_t *err); static bin_tree_t *parse_sub_exp (re_string_t *regexp, regex_t *preg, re_token_t *token, reg_syntax_t syntax, Idx nest, reg_errcode_t *err); static bin_tree_t *parse_dup_op (bin_tree_t *dup_elem, re_string_t *regexp, re_dfa_t *dfa, re_token_t *token, reg_syntax_t syntax, reg_errcode_t *err); static bin_tree_t *parse_bracket_exp (re_string_t *regexp, re_dfa_t *dfa, re_token_t *token, reg_syntax_t syntax, reg_errcode_t *err); static reg_errcode_t parse_bracket_element (bracket_elem_t *elem, re_string_t *regexp, re_token_t *token, int token_len, re_dfa_t *dfa, reg_syntax_t syntax, bool accept_hyphen); static reg_errcode_t parse_bracket_symbol (bracket_elem_t *elem, re_string_t *regexp, re_token_t *token); static reg_errcode_t build_equiv_class (bitset_t sbcset, re_charset_t *mbcset, Idx *equiv_class_alloc, const unsigned char *name); static reg_errcode_t build_charclass (RE_TRANSLATE_TYPE trans, bitset_t sbcset, re_charset_t *mbcset, Idx *char_class_alloc, const char *class_name, reg_syntax_t syntax); static bin_tree_t *build_charclass_op (re_dfa_t *dfa, RE_TRANSLATE_TYPE trans, const char *class_name, const char *extra, bool non_match, reg_errcode_t *err); static bin_tree_t *create_tree (re_dfa_t *dfa, bin_tree_t *left, bin_tree_t *right, re_token_type_t type); static bin_tree_t *create_token_tree (re_dfa_t *dfa, bin_tree_t *left, bin_tree_t *right, const re_token_t *token); static bin_tree_t *duplicate_tree (const bin_tree_t *src, re_dfa_t *dfa); static void free_token (re_token_t *node); static reg_errcode_t free_tree (void *extra, bin_tree_t *node); static reg_errcode_t mark_opt_subexp (void *extra, bin_tree_t *node); /* This table gives an error message for each of the error codes listed in regex.h. Obviously the order here has to be same as there. POSIX doesn't require that we do anything for REG_NOERROR, but why not be nice? */ static const char __re_error_msgid[] = { #define REG_NOERROR_IDX 0 gettext_noop ("Success") /* REG_NOERROR */ "\0" #define REG_NOMATCH_IDX (REG_NOERROR_IDX + sizeof "Success") gettext_noop ("No match") /* REG_NOMATCH */ "\0" #define REG_BADPAT_IDX (REG_NOMATCH_IDX + sizeof "No match") gettext_noop ("Invalid regular expression") /* REG_BADPAT */ "\0" #define REG_ECOLLATE_IDX (REG_BADPAT_IDX + sizeof "Invalid regular expression") gettext_noop ("Invalid collation character") /* REG_ECOLLATE */ "\0" #define REG_ECTYPE_IDX (REG_ECOLLATE_IDX + sizeof "Invalid collation character") gettext_noop ("Invalid character class name") /* REG_ECTYPE */ "\0" #define REG_EESCAPE_IDX (REG_ECTYPE_IDX + sizeof "Invalid character class name") gettext_noop ("Trailing backslash") /* REG_EESCAPE */ "\0" #define REG_ESUBREG_IDX (REG_EESCAPE_IDX + sizeof "Trailing backslash") gettext_noop ("Invalid back reference") /* REG_ESUBREG */ "\0" #define REG_EBRACK_IDX (REG_ESUBREG_IDX + sizeof "Invalid back reference") gettext_noop ("Unmatched [, [^, [:, [., or [=") /* REG_EBRACK */ "\0" #define REG_EPAREN_IDX (REG_EBRACK_IDX + sizeof "Unmatched [, [^, [:, [., or [=") gettext_noop ("Unmatched ( or \\(") /* REG_EPAREN */ "\0" #define REG_EBRACE_IDX (REG_EPAREN_IDX + sizeof "Unmatched ( or \\(") gettext_noop ("Unmatched \\{") /* REG_EBRACE */ "\0" #define REG_BADBR_IDX (REG_EBRACE_IDX + sizeof "Unmatched \\{") gettext_noop ("Invalid content of \\{\\}") /* REG_BADBR */ "\0" #define REG_ERANGE_IDX (REG_BADBR_IDX + sizeof "Invalid content of \\{\\}") gettext_noop ("Invalid range end") /* REG_ERANGE */ "\0" #define REG_ESPACE_IDX (REG_ERANGE_IDX + sizeof "Invalid range end") gettext_noop ("Memory exhausted") /* REG_ESPACE */ "\0" #define REG_BADRPT_IDX (REG_ESPACE_IDX + sizeof "Memory exhausted") gettext_noop ("Invalid preceding regular expression") /* REG_BADRPT */ "\0" #define REG_EEND_IDX (REG_BADRPT_IDX + sizeof "Invalid preceding regular expression") gettext_noop ("Premature end of regular expression") /* REG_EEND */ "\0" #define REG_ESIZE_IDX (REG_EEND_IDX + sizeof "Premature end of regular expression") gettext_noop ("Regular expression too big") /* REG_ESIZE */ "\0" #define REG_ERPAREN_IDX (REG_ESIZE_IDX + sizeof "Regular expression too big") gettext_noop ("Unmatched ) or \\)") /* REG_ERPAREN */ }; static const size_t __re_error_msgid_idx[] = { REG_NOERROR_IDX, REG_NOMATCH_IDX, REG_BADPAT_IDX, REG_ECOLLATE_IDX, REG_ECTYPE_IDX, REG_EESCAPE_IDX, REG_ESUBREG_IDX, REG_EBRACK_IDX, REG_EPAREN_IDX, REG_EBRACE_IDX, REG_BADBR_IDX, REG_ERANGE_IDX, REG_ESPACE_IDX, REG_BADRPT_IDX, REG_EEND_IDX, REG_ESIZE_IDX, REG_ERPAREN_IDX }; /* Entry points for GNU code. */ /* re_compile_pattern is the GNU regular expression compiler: it compiles PATTERN (of length LENGTH) and puts the result in BUFP. Returns 0 if the pattern was valid, otherwise an error string. Assumes the 'allocated' (and perhaps 'buffer') and 'translate' fields are set in BUFP on entry. */ const char * re_compile_pattern (const char *pattern, size_t length, struct re_pattern_buffer *bufp) { reg_errcode_t ret; /* And GNU code determines whether or not to get register information by passing null for the REGS argument to re_match, etc., not by setting no_sub, unless RE_NO_SUB is set. */ bufp->no_sub = !!(re_syntax_options & RE_NO_SUB); /* Match anchors at newline. */ bufp->newline_anchor = 1; ret = re_compile_internal (bufp, pattern, length, re_syntax_options); if (!ret) return NULL; return gettext (__re_error_msgid + __re_error_msgid_idx[(int) ret]); } weak_alias (__re_compile_pattern, re_compile_pattern) /* Set by 're_set_syntax' to the current regexp syntax to recognize. Can also be assigned to arbitrarily: each pattern buffer stores its own syntax, so it can be changed between regex compilations. */ /* This has no initializer because initialized variables in Emacs become read-only after dumping. */ reg_syntax_t re_syntax_options; /* Specify the precise syntax of regexps for compilation. This provides for compatibility for various utilities which historically have different, incompatible syntaxes. The argument SYNTAX is a bit mask comprised of the various bits defined in regex.h. We return the old syntax. */ reg_syntax_t re_set_syntax (reg_syntax_t syntax) { reg_syntax_t ret = re_syntax_options; re_syntax_options = syntax; return ret; } weak_alias (__re_set_syntax, re_set_syntax) int re_compile_fastmap (struct re_pattern_buffer *bufp) { re_dfa_t *dfa = bufp->buffer; char *fastmap = bufp->fastmap; memset (fastmap, '\0', sizeof (char) * SBC_MAX); re_compile_fastmap_iter (bufp, dfa->init_state, fastmap); if (dfa->init_state != dfa->init_state_word) re_compile_fastmap_iter (bufp, dfa->init_state_word, fastmap); if (dfa->init_state != dfa->init_state_nl) re_compile_fastmap_iter (bufp, dfa->init_state_nl, fastmap); if (dfa->init_state != dfa->init_state_begbuf) re_compile_fastmap_iter (bufp, dfa->init_state_begbuf, fastmap); bufp->fastmap_accurate = 1; return 0; } weak_alias (__re_compile_fastmap, re_compile_fastmap) static __always_inline void re_set_fastmap (char *fastmap, bool icase, int ch) { fastmap[ch] = 1; if (icase) fastmap[tolower (ch)] = 1; } /* Helper function for re_compile_fastmap. Compile fastmap for the initial_state INIT_STATE. */ static void re_compile_fastmap_iter (regex_t *bufp, const re_dfastate_t *init_state, char *fastmap) { re_dfa_t *dfa = bufp->buffer; Idx node_cnt; bool icase = (dfa->mb_cur_max == 1 && (bufp->syntax & RE_ICASE)); for (node_cnt = 0; node_cnt < init_state->nodes.nelem; ++node_cnt) { Idx node = init_state->nodes.elems[node_cnt]; re_token_type_t type = dfa->nodes[node].type; if (type == CHARACTER) { re_set_fastmap (fastmap, icase, dfa->nodes[node].opr.c); if ((bufp->syntax & RE_ICASE) && dfa->mb_cur_max > 1) { unsigned char buf[MB_LEN_MAX]; unsigned char *p; wchar_t wc; mbstate_t state; p = buf; *p++ = dfa->nodes[node].opr.c; while (++node < dfa->nodes_len && dfa->nodes[node].type == CHARACTER && dfa->nodes[node].mb_partial) *p++ = dfa->nodes[node].opr.c; memset (&state, '\0', sizeof (state)); if (__mbrtowc (&wc, (const char *) buf, p - buf, &state) == p - buf && (__wcrtomb ((char *) buf, __towlower (wc), &state) != (size_t) -1)) re_set_fastmap (fastmap, false, buf[0]); } } else if (type == SIMPLE_BRACKET) { int i, ch; for (i = 0, ch = 0; i < BITSET_WORDS; ++i) { int j; bitset_word_t w = dfa->nodes[node].opr.sbcset[i]; for (j = 0; j < BITSET_WORD_BITS; ++j, ++ch) if (w & ((bitset_word_t) 1 << j)) re_set_fastmap (fastmap, icase, ch); } } else if (type == COMPLEX_BRACKET) { re_charset_t *cset = dfa->nodes[node].opr.mbcset; Idx i; #ifdef _LIBC /* See if we have to try all bytes which start multiple collation elements. e.g. In da_DK, we want to catch 'a' since "aa" is a valid collation element, and don't catch 'b' since 'b' is the only collation element which starts from 'b' (and it is caught by SIMPLE_BRACKET). */ if (_NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES) != 0 && (cset->ncoll_syms || cset->nranges)) { const int32_t *table = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEMB); for (i = 0; i < SBC_MAX; ++i) if (table[i] < 0) re_set_fastmap (fastmap, icase, i); } #endif /* _LIBC */ /* See if we have to start the match at all multibyte characters, i.e. where we would not find an invalid sequence. This only applies to multibyte character sets; for single byte character sets, the SIMPLE_BRACKET again suffices. */ if (dfa->mb_cur_max > 1 && (cset->nchar_classes || cset->non_match || cset->nranges #ifdef _LIBC || cset->nequiv_classes #endif /* _LIBC */ )) { unsigned char c = 0; do { mbstate_t mbs; memset (&mbs, 0, sizeof (mbs)); if (__mbrtowc (NULL, (char *) &c, 1, &mbs) == (size_t) -2) re_set_fastmap (fastmap, false, (int) c); } while (++c != 0); } else { /* ... Else catch all bytes which can start the mbchars. */ for (i = 0; i < cset->nmbchars; ++i) { char buf[256]; mbstate_t state; memset (&state, '\0', sizeof (state)); if (__wcrtomb (buf, cset->mbchars[i], &state) != (size_t) -1) re_set_fastmap (fastmap, icase, *(unsigned char *) buf); if ((bufp->syntax & RE_ICASE) && dfa->mb_cur_max > 1) { if (__wcrtomb (buf, __towlower (cset->mbchars[i]), &state) != (size_t) -1) re_set_fastmap (fastmap, false, *(unsigned char *) buf); } } } } else if (type == OP_PERIOD || type == OP_UTF8_PERIOD || type == END_OF_RE) { memset (fastmap, '\1', sizeof (char) * SBC_MAX); if (type == END_OF_RE) bufp->can_be_null = 1; return; } } } /* Entry point for POSIX code. */ /* regcomp takes a regular expression as a string and compiles it. PREG is a regex_t *. We do not expect any fields to be initialized, since POSIX says we shouldn't. Thus, we set 'buffer' to the compiled pattern; 'used' to the length of the compiled pattern; 'syntax' to RE_SYNTAX_POSIX_EXTENDED if the REG_EXTENDED bit in CFLAGS is set; otherwise, to RE_SYNTAX_POSIX_BASIC; 'newline_anchor' to REG_NEWLINE being set in CFLAGS; 'fastmap' to an allocated space for the fastmap; 'fastmap_accurate' to zero; 're_nsub' to the number of subexpressions in PATTERN. PATTERN is the address of the pattern string. CFLAGS is a series of bits which affect compilation. If REG_EXTENDED is set, we use POSIX extended syntax; otherwise, we use POSIX basic syntax. If REG_NEWLINE is set, then . and [^...] don't match newline. Also, regexec will try a match beginning after every newline. If REG_ICASE is set, then we considers upper- and lowercase versions of letters to be equivalent when matching. If REG_NOSUB is set, then when PREG is passed to regexec, that routine will report only success or failure, and nothing about the registers. It returns 0 if it succeeds, nonzero if it doesn't. (See regex.h for the return codes and their meanings.) */ int regcomp (regex_t *__restrict preg, const char *__restrict pattern, int cflags) { reg_errcode_t ret; reg_syntax_t syntax = ((cflags & REG_EXTENDED) ? RE_SYNTAX_POSIX_EXTENDED : RE_SYNTAX_POSIX_BASIC); preg->buffer = NULL; preg->allocated = 0; preg->used = 0; /* Try to allocate space for the fastmap. */ preg->fastmap = re_malloc (char, SBC_MAX); if (__glibc_unlikely (preg->fastmap == NULL)) return REG_ESPACE; syntax |= (cflags & REG_ICASE) ? RE_ICASE : 0; /* If REG_NEWLINE is set, newlines are treated differently. */ if (cflags & REG_NEWLINE) { /* REG_NEWLINE implies neither . nor [^...] match newline. */ syntax &= ~RE_DOT_NEWLINE; syntax |= RE_HAT_LISTS_NOT_NEWLINE; /* It also changes the matching behavior. */ preg->newline_anchor = 1; } else preg->newline_anchor = 0; preg->no_sub = !!(cflags & REG_NOSUB); preg->translate = NULL; ret = re_compile_internal (preg, pattern, strlen (pattern), syntax); /* POSIX doesn't distinguish between an unmatched open-group and an unmatched close-group: both are REG_EPAREN. */ if (ret == REG_ERPAREN) ret = REG_EPAREN; /* We have already checked preg->fastmap != NULL. */ if (__glibc_likely (ret == REG_NOERROR)) /* Compute the fastmap now, since regexec cannot modify the pattern buffer. This function never fails in this implementation. */ (void) re_compile_fastmap (preg); else { /* Some error occurred while compiling the expression. */ re_free (preg->fastmap); preg->fastmap = NULL; } return (int) ret; } libc_hidden_def (__regcomp) weak_alias (__regcomp, regcomp) /* Returns a message corresponding to an error code, ERRCODE, returned from either regcomp or regexec. We don't use PREG here. */ size_t regerror (int errcode, const regex_t *__restrict preg, char *__restrict errbuf, size_t errbuf_size) { const char *msg; size_t msg_size; int nerrcodes = sizeof __re_error_msgid_idx / sizeof __re_error_msgid_idx[0]; if (__glibc_unlikely (errcode < 0 || errcode >= nerrcodes)) /* Only error codes returned by the rest of the code should be passed to this routine. If we are given anything else, or if other regex code generates an invalid error code, then the program has a bug. Dump core so we can fix it. */ abort (); msg = gettext (__re_error_msgid + __re_error_msgid_idx[errcode]); msg_size = strlen (msg) + 1; /* Includes the null. */ if (__glibc_likely (errbuf_size != 0)) { size_t cpy_size = msg_size; if (__glibc_unlikely (msg_size > errbuf_size)) { cpy_size = errbuf_size - 1; errbuf[cpy_size] = '\0'; } memcpy (errbuf, msg, cpy_size); } return msg_size; } weak_alias (__regerror, regerror) /* This static array is used for the map to single-byte characters when UTF-8 is used. Otherwise we would allocate memory just to initialize it the same all the time. UTF-8 is the preferred encoding so this is a worthwhile optimization. */ static const bitset_t utf8_sb_map = { /* Set the first 128 bits. */ #if (defined __GNUC__ || __clang_major__ >= 4) && !defined __STRICT_ANSI__ [0 ... 0x80 / BITSET_WORD_BITS - 1] = BITSET_WORD_MAX #else # if 4 * BITSET_WORD_BITS < ASCII_CHARS # error "bitset_word_t is narrower than 32 bits" # elif 3 * BITSET_WORD_BITS < ASCII_CHARS BITSET_WORD_MAX, BITSET_WORD_MAX, BITSET_WORD_MAX, # elif 2 * BITSET_WORD_BITS < ASCII_CHARS BITSET_WORD_MAX, BITSET_WORD_MAX, # elif 1 * BITSET_WORD_BITS < ASCII_CHARS BITSET_WORD_MAX, # endif (BITSET_WORD_MAX >> (SBC_MAX % BITSET_WORD_BITS == 0 ? 0 : BITSET_WORD_BITS - SBC_MAX % BITSET_WORD_BITS)) #endif }; static void free_dfa_content (re_dfa_t *dfa) { Idx i, j; if (dfa->nodes) for (i = 0; i < dfa->nodes_len; ++i) free_token (dfa->nodes + i); re_free (dfa->nexts); for (i = 0; i < dfa->nodes_len; ++i) { if (dfa->eclosures != NULL) re_node_set_free (dfa->eclosures + i); if (dfa->inveclosures != NULL) re_node_set_free (dfa->inveclosures + i); if (dfa->edests != NULL) re_node_set_free (dfa->edests + i); } re_free (dfa->edests); re_free (dfa->eclosures); re_free (dfa->inveclosures); re_free (dfa->nodes); if (dfa->state_table) for (i = 0; i <= dfa->state_hash_mask; ++i) { struct re_state_table_entry *entry = dfa->state_table + i; for (j = 0; j < entry->num; ++j) { re_dfastate_t *state = entry->array[j]; free_state (state); } re_free (entry->array); } re_free (dfa->state_table); if (dfa->sb_char != utf8_sb_map) re_free (dfa->sb_char); re_free (dfa->subexp_map); #ifdef DEBUG re_free (dfa->re_str); #endif re_free (dfa); } /* Free dynamically allocated space used by PREG. */ void regfree (regex_t *preg) { re_dfa_t *dfa = preg->buffer; if (__glibc_likely (dfa != NULL)) { lock_fini (dfa->lock); free_dfa_content (dfa); } preg->buffer = NULL; preg->allocated = 0; re_free (preg->fastmap); preg->fastmap = NULL; re_free (preg->translate); preg->translate = NULL; } libc_hidden_def (__regfree) weak_alias (__regfree, regfree) /* Entry points compatible with 4.2 BSD regex library. We don't define them unless specifically requested. */ #if defined _REGEX_RE_COMP || defined _LIBC /* BSD has one and only one pattern buffer. */ static struct re_pattern_buffer re_comp_buf; char * # ifdef _LIBC /* Make these definitions weak in libc, so POSIX programs can redefine these names if they don't use our functions, and still use regcomp/regexec above without link errors. */ weak_function # endif re_comp (const char *s) { reg_errcode_t ret; char *fastmap; if (!s) { if (!re_comp_buf.buffer) return gettext ("No previous regular expression"); return 0; } if (re_comp_buf.buffer) { fastmap = re_comp_buf.fastmap; re_comp_buf.fastmap = NULL; __regfree (&re_comp_buf); memset (&re_comp_buf, '\0', sizeof (re_comp_buf)); re_comp_buf.fastmap = fastmap; } if (re_comp_buf.fastmap == NULL) { re_comp_buf.fastmap = re_malloc (char, SBC_MAX); if (re_comp_buf.fastmap == NULL) return (char *) gettext (__re_error_msgid + __re_error_msgid_idx[(int) REG_ESPACE]); } /* Since 're_exec' always passes NULL for the 'regs' argument, we don't need to initialize the pattern buffer fields which affect it. */ /* Match anchors at newlines. */ re_comp_buf.newline_anchor = 1; ret = re_compile_internal (&re_comp_buf, s, strlen (s), re_syntax_options); if (!ret) return NULL; /* Yes, we're discarding 'const' here if !HAVE_LIBINTL. */ return (char *) gettext (__re_error_msgid + __re_error_msgid_idx[(int) ret]); } #ifdef _LIBC libc_freeres_fn (free_mem) { __regfree (&re_comp_buf); } #endif #endif /* _REGEX_RE_COMP */ /* Internal entry point. Compile the regular expression PATTERN, whose length is LENGTH. SYNTAX indicate regular expression's syntax. */ static reg_errcode_t re_compile_internal (regex_t *preg, const char * pattern, size_t length, reg_syntax_t syntax) { reg_errcode_t err = REG_NOERROR; re_dfa_t *dfa; re_string_t regexp; /* Initialize the pattern buffer. */ preg->fastmap_accurate = 0; preg->syntax = syntax; preg->not_bol = preg->not_eol = 0; preg->used = 0; preg->re_nsub = 0; preg->can_be_null = 0; preg->regs_allocated = REGS_UNALLOCATED; /* Initialize the dfa. */ dfa = preg->buffer; if (__glibc_unlikely (preg->allocated < sizeof (re_dfa_t))) { /* If zero allocated, but buffer is non-null, try to realloc enough space. This loses if buffer's address is bogus, but that is the user's responsibility. If ->buffer is NULL this is a simple allocation. */ dfa = re_realloc (preg->buffer, re_dfa_t, 1); if (dfa == NULL) return REG_ESPACE; preg->allocated = sizeof (re_dfa_t); preg->buffer = dfa; } preg->used = sizeof (re_dfa_t); err = init_dfa (dfa, length); if (__glibc_unlikely (err == REG_NOERROR && lock_init (dfa->lock) != 0)) err = REG_ESPACE; if (__glibc_unlikely (err != REG_NOERROR)) { free_dfa_content (dfa); preg->buffer = NULL; preg->allocated = 0; return err; } #ifdef DEBUG /* Note: length+1 will not overflow since it is checked in init_dfa. */ dfa->re_str = re_malloc (char, length + 1); strncpy (dfa->re_str, pattern, length + 1); #endif err = re_string_construct (®exp, pattern, length, preg->translate, (syntax & RE_ICASE) != 0, dfa); if (__glibc_unlikely (err != REG_NOERROR)) { re_compile_internal_free_return: free_workarea_compile (preg); re_string_destruct (®exp); lock_fini (dfa->lock); free_dfa_content (dfa); preg->buffer = NULL; preg->allocated = 0; return err; } /* Parse the regular expression, and build a structure tree. */ preg->re_nsub = 0; dfa->str_tree = parse (®exp, preg, syntax, &err); if (__glibc_unlikely (dfa->str_tree == NULL)) goto re_compile_internal_free_return; /* Analyze the tree and create the nfa. */ err = analyze (preg); if (__glibc_unlikely (err != REG_NOERROR)) goto re_compile_internal_free_return; /* If possible, do searching in single byte encoding to speed things up. */ if (dfa->is_utf8 && !(syntax & RE_ICASE) && preg->translate == NULL) optimize_utf8 (dfa); /* Then create the initial state of the dfa. */ err = create_initial_state (dfa); /* Release work areas. */ free_workarea_compile (preg); re_string_destruct (®exp); if (__glibc_unlikely (err != REG_NOERROR)) { lock_fini (dfa->lock); free_dfa_content (dfa); preg->buffer = NULL; preg->allocated = 0; } return err; } /* Initialize DFA. We use the length of the regular expression PAT_LEN as the initial length of some arrays. */ static reg_errcode_t init_dfa (re_dfa_t *dfa, size_t pat_len) { __re_size_t table_size; #ifndef _LIBC const char *codeset_name; #endif size_t max_i18n_object_size = MAX (sizeof (wchar_t), sizeof (wctype_t)); size_t max_object_size = MAX (sizeof (struct re_state_table_entry), MAX (sizeof (re_token_t), MAX (sizeof (re_node_set), MAX (sizeof (regmatch_t), max_i18n_object_size)))); memset (dfa, '\0', sizeof (re_dfa_t)); /* Force allocation of str_tree_storage the first time. */ dfa->str_tree_storage_idx = BIN_TREE_STORAGE_SIZE; /* Avoid overflows. The extra "/ 2" is for the table_size doubling calculation below, and for similar doubling calculations elsewhere. And it's <= rather than <, because some of the doubling calculations add 1 afterwards. */ if (__glibc_unlikely (MIN (IDX_MAX, SIZE_MAX / max_object_size) / 2 <= pat_len)) return REG_ESPACE; dfa->nodes_alloc = pat_len + 1; dfa->nodes = re_malloc (re_token_t, dfa->nodes_alloc); /* table_size = 2 ^ ceil(log pat_len) */ for (table_size = 1; ; table_size <<= 1) if (table_size > pat_len) break; dfa->state_table = calloc (sizeof (struct re_state_table_entry), table_size); dfa->state_hash_mask = table_size - 1; dfa->mb_cur_max = MB_CUR_MAX; #ifdef _LIBC if (dfa->mb_cur_max == 6 && strcmp (_NL_CURRENT (LC_CTYPE, _NL_CTYPE_CODESET_NAME), "UTF-8") == 0) dfa->is_utf8 = 1; dfa->map_notascii = (_NL_CURRENT_WORD (LC_CTYPE, _NL_CTYPE_MAP_TO_NONASCII) != 0); #else codeset_name = nl_langinfo (CODESET); if ((codeset_name[0] == 'U' || codeset_name[0] == 'u') && (codeset_name[1] == 'T' || codeset_name[1] == 't') && (codeset_name[2] == 'F' || codeset_name[2] == 'f') && strcmp (codeset_name + 3 + (codeset_name[3] == '-'), "8") == 0) dfa->is_utf8 = 1; /* We check exhaustively in the loop below if this charset is a superset of ASCII. */ dfa->map_notascii = 0; #endif if (dfa->mb_cur_max > 1) { if (dfa->is_utf8) dfa->sb_char = (re_bitset_ptr_t) utf8_sb_map; else { int i, j, ch; dfa->sb_char = (re_bitset_ptr_t) calloc (sizeof (bitset_t), 1); if (__glibc_unlikely (dfa->sb_char == NULL)) return REG_ESPACE; /* Set the bits corresponding to single byte chars. */ for (i = 0, ch = 0; i < BITSET_WORDS; ++i) for (j = 0; j < BITSET_WORD_BITS; ++j, ++ch) { wint_t wch = __btowc (ch); if (wch != WEOF) dfa->sb_char[i] |= (bitset_word_t) 1 << j; #ifndef _LIBC if (isascii (ch) && wch != ch) dfa->map_notascii = 1; #endif } } } if (__glibc_unlikely (dfa->nodes == NULL || dfa->state_table == NULL)) return REG_ESPACE; return REG_NOERROR; } /* Initialize WORD_CHAR table, which indicate which character is "word". In this case "word" means that it is the word construction character used by some operators like "\<", "\>", etc. */ static void init_word_char (re_dfa_t *dfa) { int i = 0; int j; int ch = 0; dfa->word_ops_used = 1; if (__glibc_likely (dfa->map_notascii == 0)) { bitset_word_t bits0 = 0x00000000; bitset_word_t bits1 = 0x03ff0000; bitset_word_t bits2 = 0x87fffffe; bitset_word_t bits3 = 0x07fffffe; if (BITSET_WORD_BITS == 64) { /* Pacify gcc -Woverflow on 32-bit platformns. */ dfa->word_char[0] = bits1 << 31 << 1 | bits0; dfa->word_char[1] = bits3 << 31 << 1 | bits2; i = 2; } else if (BITSET_WORD_BITS == 32) { dfa->word_char[0] = bits0; dfa->word_char[1] = bits1; dfa->word_char[2] = bits2; dfa->word_char[3] = bits3; i = 4; } else goto general_case; ch = 128; if (__glibc_likely (dfa->is_utf8)) { memset (&dfa->word_char[i], '\0', (SBC_MAX - ch) / 8); return; } } general_case: for (; i < BITSET_WORDS; ++i) for (j = 0; j < BITSET_WORD_BITS; ++j, ++ch) if (isalnum (ch) || ch == '_') dfa->word_char[i] |= (bitset_word_t) 1 << j; } /* Free the work area which are only used while compiling. */ static void free_workarea_compile (regex_t *preg) { re_dfa_t *dfa = preg->buffer; bin_tree_storage_t *storage, *next; for (storage = dfa->str_tree_storage; storage; storage = next) { next = storage->next; re_free (storage); } dfa->str_tree_storage = NULL; dfa->str_tree_storage_idx = BIN_TREE_STORAGE_SIZE; dfa->str_tree = NULL; re_free (dfa->org_indices); dfa->org_indices = NULL; } /* Create initial states for all contexts. */ static reg_errcode_t create_initial_state (re_dfa_t *dfa) { Idx first, i; reg_errcode_t err; re_node_set init_nodes; /* Initial states have the epsilon closure of the node which is the first node of the regular expression. */ first = dfa->str_tree->first->node_idx; dfa->init_node = first; err = re_node_set_init_copy (&init_nodes, dfa->eclosures + first); if (__glibc_unlikely (err != REG_NOERROR)) return err; /* The back-references which are in initial states can epsilon transit, since in this case all of the subexpressions can be null. Then we add epsilon closures of the nodes which are the next nodes of the back-references. */ if (dfa->nbackref > 0) for (i = 0; i < init_nodes.nelem; ++i) { Idx node_idx = init_nodes.elems[i]; re_token_type_t type = dfa->nodes[node_idx].type; Idx clexp_idx; if (type != OP_BACK_REF) continue; for (clexp_idx = 0; clexp_idx < init_nodes.nelem; ++clexp_idx) { re_token_t *clexp_node; clexp_node = dfa->nodes + init_nodes.elems[clexp_idx]; if (clexp_node->type == OP_CLOSE_SUBEXP && clexp_node->opr.idx == dfa->nodes[node_idx].opr.idx) break; } if (clexp_idx == init_nodes.nelem) continue; if (type == OP_BACK_REF) { Idx dest_idx = dfa->edests[node_idx].elems[0]; if (!re_node_set_contains (&init_nodes, dest_idx)) { reg_errcode_t merge_err = re_node_set_merge (&init_nodes, dfa->eclosures + dest_idx); if (merge_err != REG_NOERROR) return merge_err; i = 0; } } } /* It must be the first time to invoke acquire_state. */ dfa->init_state = re_acquire_state_context (&err, dfa, &init_nodes, 0); /* We don't check ERR here, since the initial state must not be NULL. */ if (__glibc_unlikely (dfa->init_state == NULL)) return err; if (dfa->init_state->has_constraint) { dfa->init_state_word = re_acquire_state_context (&err, dfa, &init_nodes, CONTEXT_WORD); dfa->init_state_nl = re_acquire_state_context (&err, dfa, &init_nodes, CONTEXT_NEWLINE); dfa->init_state_begbuf = re_acquire_state_context (&err, dfa, &init_nodes, CONTEXT_NEWLINE | CONTEXT_BEGBUF); if (__glibc_unlikely (dfa->init_state_word == NULL || dfa->init_state_nl == NULL || dfa->init_state_begbuf == NULL)) return err; } else dfa->init_state_word = dfa->init_state_nl = dfa->init_state_begbuf = dfa->init_state; re_node_set_free (&init_nodes); return REG_NOERROR; } /* If it is possible to do searching in single byte encoding instead of UTF-8 to speed things up, set dfa->mb_cur_max to 1, clear is_utf8 and change DFA nodes where needed. */ static void optimize_utf8 (re_dfa_t *dfa) { Idx node; int i; bool mb_chars = false; bool has_period = false; for (node = 0; node < dfa->nodes_len; ++node) switch (dfa->nodes[node].type) { case CHARACTER: if (dfa->nodes[node].opr.c >= ASCII_CHARS) mb_chars = true; break; case ANCHOR: switch (dfa->nodes[node].opr.ctx_type) { case LINE_FIRST: case LINE_LAST: case BUF_FIRST: case BUF_LAST: break; default: /* Word anchors etc. cannot be handled. It's okay to test opr.ctx_type since constraints (for all DFA nodes) are created by ORing one or more opr.ctx_type values. */ return; } break; case OP_PERIOD: has_period = true; break; case OP_BACK_REF: case OP_ALT: case END_OF_RE: case OP_DUP_ASTERISK: case OP_OPEN_SUBEXP: case OP_CLOSE_SUBEXP: break; case COMPLEX_BRACKET: return; case SIMPLE_BRACKET: /* Just double check. */ { int rshift = (ASCII_CHARS % BITSET_WORD_BITS == 0 ? 0 : BITSET_WORD_BITS - ASCII_CHARS % BITSET_WORD_BITS); for (i = ASCII_CHARS / BITSET_WORD_BITS; i < BITSET_WORDS; ++i) { if (dfa->nodes[node].opr.sbcset[i] >> rshift != 0) return; rshift = 0; } } break; default: abort (); } if (mb_chars || has_period) for (node = 0; node < dfa->nodes_len; ++node) { if (dfa->nodes[node].type == CHARACTER && dfa->nodes[node].opr.c >= ASCII_CHARS) dfa->nodes[node].mb_partial = 0; else if (dfa->nodes[node].type == OP_PERIOD) dfa->nodes[node].type = OP_UTF8_PERIOD; } /* The search can be in single byte locale. */ dfa->mb_cur_max = 1; dfa->is_utf8 = 0; dfa->has_mb_node = dfa->nbackref > 0 || has_period; } /* Analyze the structure tree, and calculate "first", "next", "edest", "eclosure", and "inveclosure". */ static reg_errcode_t analyze (regex_t *preg) { re_dfa_t *dfa = preg->buffer; reg_errcode_t ret; /* Allocate arrays. */ dfa->nexts = re_malloc (Idx, dfa->nodes_alloc); dfa->org_indices = re_malloc (Idx, dfa->nodes_alloc); dfa->edests = re_malloc (re_node_set, dfa->nodes_alloc); dfa->eclosures = re_malloc (re_node_set, dfa->nodes_alloc); if (__glibc_unlikely (dfa->nexts == NULL || dfa->org_indices == NULL || dfa->edests == NULL || dfa->eclosures == NULL)) return REG_ESPACE; dfa->subexp_map = re_malloc (Idx, preg->re_nsub); if (dfa->subexp_map != NULL) { Idx i; for (i = 0; i < preg->re_nsub; i++) dfa->subexp_map[i] = i; preorder (dfa->str_tree, optimize_subexps, dfa); for (i = 0; i < preg->re_nsub; i++) if (dfa->subexp_map[i] != i) break; if (i == preg->re_nsub) { re_free (dfa->subexp_map); dfa->subexp_map = NULL; } } ret = postorder (dfa->str_tree, lower_subexps, preg); if (__glibc_unlikely (ret != REG_NOERROR)) return ret; ret = postorder (dfa->str_tree, calc_first, dfa); if (__glibc_unlikely (ret != REG_NOERROR)) return ret; preorder (dfa->str_tree, calc_next, dfa); ret = preorder (dfa->str_tree, link_nfa_nodes, dfa); if (__glibc_unlikely (ret != REG_NOERROR)) return ret; ret = calc_eclosure (dfa); if (__glibc_unlikely (ret != REG_NOERROR)) return ret; /* We only need this during the prune_impossible_nodes pass in regexec.c; skip it if p_i_n will not run, as calc_inveclosure can be quadratic. */ if ((!preg->no_sub && preg->re_nsub > 0 && dfa->has_plural_match) || dfa->nbackref) { dfa->inveclosures = re_malloc (re_node_set, dfa->nodes_len); if (__glibc_unlikely (dfa->inveclosures == NULL)) return REG_ESPACE; ret = calc_inveclosure (dfa); } return ret; } /* Our parse trees are very unbalanced, so we cannot use a stack to implement parse tree visits. Instead, we use parent pointers and some hairy code in these two functions. */ static reg_errcode_t postorder (bin_tree_t *root, reg_errcode_t (fn (void *, bin_tree_t *)), void *extra) { bin_tree_t *node, *prev; for (node = root; ; ) { /* Descend down the tree, preferably to the left (or to the right if that's the only child). */ while (node->left || node->right) if (node->left) node = node->left; else node = node->right; do { reg_errcode_t err = fn (extra, node); if (__glibc_unlikely (err != REG_NOERROR)) return err; if (node->parent == NULL) return REG_NOERROR; prev = node; node = node->parent; } /* Go up while we have a node that is reached from the right. */ while (node->right == prev || node->right == NULL); node = node->right; } } static reg_errcode_t preorder (bin_tree_t *root, reg_errcode_t (fn (void *, bin_tree_t *)), void *extra) { bin_tree_t *node; for (node = root; ; ) { reg_errcode_t err = fn (extra, node); if (__glibc_unlikely (err != REG_NOERROR)) return err; /* Go to the left node, or up and to the right. */ if (node->left) node = node->left; else { bin_tree_t *prev = NULL; while (node->right == prev || node->right == NULL) { prev = node; node = node->parent; if (!node) return REG_NOERROR; } node = node->right; } } } /* Optimization pass: if a SUBEXP is entirely contained, strip it and tell re_search_internal to map the inner one's opr.idx to this one's. Adjust backreferences as well. Requires a preorder visit. */ static reg_errcode_t optimize_subexps (void *extra, bin_tree_t *node) { re_dfa_t *dfa = (re_dfa_t *) extra; if (node->token.type == OP_BACK_REF && dfa->subexp_map) { int idx = node->token.opr.idx; node->token.opr.idx = dfa->subexp_map[idx]; dfa->used_bkref_map |= 1 << node->token.opr.idx; } else if (node->token.type == SUBEXP && node->left && node->left->token.type == SUBEXP) { Idx other_idx = node->left->token.opr.idx; node->left = node->left->left; if (node->left) node->left->parent = node; dfa->subexp_map[other_idx] = dfa->subexp_map[node->token.opr.idx]; if (other_idx < BITSET_WORD_BITS) dfa->used_bkref_map &= ~((bitset_word_t) 1 << other_idx); } return REG_NOERROR; } /* Lowering pass: Turn each SUBEXP node into the appropriate concatenation of OP_OPEN_SUBEXP, the body of the SUBEXP (if any) and OP_CLOSE_SUBEXP. */ static reg_errcode_t lower_subexps (void *extra, bin_tree_t *node) { regex_t *preg = (regex_t *) extra; reg_errcode_t err = REG_NOERROR; if (node->left && node->left->token.type == SUBEXP) { node->left = lower_subexp (&err, preg, node->left); if (node->left) node->left->parent = node; } if (node->right && node->right->token.type == SUBEXP) { node->right = lower_subexp (&err, preg, node->right); if (node->right) node->right->parent = node; } return err; } static bin_tree_t * lower_subexp (reg_errcode_t *err, regex_t *preg, bin_tree_t *node) { re_dfa_t *dfa = preg->buffer; bin_tree_t *body = node->left; bin_tree_t *op, *cls, *tree1, *tree; if (preg->no_sub /* We do not optimize empty subexpressions, because otherwise we may have bad CONCAT nodes with NULL children. This is obviously not very common, so we do not lose much. An example that triggers this case is the sed "script" /\(\)/x. */ && node->left != NULL && (node->token.opr.idx >= BITSET_WORD_BITS || !(dfa->used_bkref_map & ((bitset_word_t) 1 << node->token.opr.idx)))) return node->left; /* Convert the SUBEXP node to the concatenation of an OP_OPEN_SUBEXP, the contents, and an OP_CLOSE_SUBEXP. */ op = create_tree (dfa, NULL, NULL, OP_OPEN_SUBEXP); cls = create_tree (dfa, NULL, NULL, OP_CLOSE_SUBEXP); tree1 = body ? create_tree (dfa, body, cls, CONCAT) : cls; tree = create_tree (dfa, op, tree1, CONCAT); if (__glibc_unlikely (tree == NULL || tree1 == NULL || op == NULL || cls == NULL)) { *err = REG_ESPACE; return NULL; } op->token.opr.idx = cls->token.opr.idx = node->token.opr.idx; op->token.opt_subexp = cls->token.opt_subexp = node->token.opt_subexp; return tree; } /* Pass 1 in building the NFA: compute FIRST and create unlinked automaton nodes. Requires a postorder visit. */ static reg_errcode_t calc_first (void *extra, bin_tree_t *node) { re_dfa_t *dfa = (re_dfa_t *) extra; if (node->token.type == CONCAT) { node->first = node->left->first; node->node_idx = node->left->node_idx; } else { node->first = node; node->node_idx = re_dfa_add_node (dfa, node->token); if (__glibc_unlikely (node->node_idx == -1)) return REG_ESPACE; if (node->token.type == ANCHOR) dfa->nodes[node->node_idx].constraint = node->token.opr.ctx_type; } return REG_NOERROR; } /* Pass 2: compute NEXT on the tree. Preorder visit. */ static reg_errcode_t calc_next (void *extra, bin_tree_t *node) { switch (node->token.type) { case OP_DUP_ASTERISK: node->left->next = node; break; case CONCAT: node->left->next = node->right->first; node->right->next = node->next; break; default: if (node->left) node->left->next = node->next; if (node->right) node->right->next = node->next; break; } return REG_NOERROR; } /* Pass 3: link all DFA nodes to their NEXT node (any order will do). */ static reg_errcode_t link_nfa_nodes (void *extra, bin_tree_t *node) { re_dfa_t *dfa = (re_dfa_t *) extra; Idx idx = node->node_idx; reg_errcode_t err = REG_NOERROR; switch (node->token.type) { case CONCAT: break; case END_OF_RE: DEBUG_ASSERT (node->next == NULL); break; case OP_DUP_ASTERISK: case OP_ALT: { Idx left, right; dfa->has_plural_match = 1; if (node->left != NULL) left = node->left->first->node_idx; else left = node->next->node_idx; if (node->right != NULL) right = node->right->first->node_idx; else right = node->next->node_idx; DEBUG_ASSERT (left > -1); DEBUG_ASSERT (right > -1); err = re_node_set_init_2 (dfa->edests + idx, left, right); } break; case ANCHOR: case OP_OPEN_SUBEXP: case OP_CLOSE_SUBEXP: err = re_node_set_init_1 (dfa->edests + idx, node->next->node_idx); break; case OP_BACK_REF: dfa->nexts[idx] = node->next->node_idx; if (node->token.type == OP_BACK_REF) err = re_node_set_init_1 (dfa->edests + idx, dfa->nexts[idx]); break; default: DEBUG_ASSERT (!IS_EPSILON_NODE (node->token.type)); dfa->nexts[idx] = node->next->node_idx; break; } return err; } /* Duplicate the epsilon closure of the node ROOT_NODE. Note that duplicated nodes have constraint INIT_CONSTRAINT in addition to their own constraint. */ static reg_errcode_t duplicate_node_closure (re_dfa_t *dfa, Idx top_org_node, Idx top_clone_node, Idx root_node, unsigned int init_constraint) { Idx org_node, clone_node; bool ok; unsigned int constraint = init_constraint; for (org_node = top_org_node, clone_node = top_clone_node;;) { Idx org_dest, clone_dest; if (dfa->nodes[org_node].type == OP_BACK_REF) { /* If the back reference epsilon-transit, its destination must also have the constraint. Then duplicate the epsilon closure of the destination of the back reference, and store it in edests of the back reference. */ org_dest = dfa->nexts[org_node]; re_node_set_empty (dfa->edests + clone_node); clone_dest = duplicate_node (dfa, org_dest, constraint); if (__glibc_unlikely (clone_dest == -1)) return REG_ESPACE; dfa->nexts[clone_node] = dfa->nexts[org_node]; ok = re_node_set_insert (dfa->edests + clone_node, clone_dest); if (__glibc_unlikely (! ok)) return REG_ESPACE; } else if (dfa->edests[org_node].nelem == 0) { /* In case of the node can't epsilon-transit, don't duplicate the destination and store the original destination as the destination of the node. */ dfa->nexts[clone_node] = dfa->nexts[org_node]; break; } else if (dfa->edests[org_node].nelem == 1) { /* In case of the node can epsilon-transit, and it has only one destination. */ org_dest = dfa->edests[org_node].elems[0]; re_node_set_empty (dfa->edests + clone_node); /* If the node is root_node itself, it means the epsilon closure has a loop. Then tie it to the destination of the root_node. */ if (org_node == root_node && clone_node != org_node) { ok = re_node_set_insert (dfa->edests + clone_node, org_dest); if (__glibc_unlikely (! ok)) return REG_ESPACE; break; } /* In case the node has another constraint, append it. */ constraint |= dfa->nodes[org_node].constraint; clone_dest = duplicate_node (dfa, org_dest, constraint); if (__glibc_unlikely (clone_dest == -1)) return REG_ESPACE; ok = re_node_set_insert (dfa->edests + clone_node, clone_dest); if (__glibc_unlikely (! ok)) return REG_ESPACE; } else /* dfa->edests[org_node].nelem == 2 */ { /* In case of the node can epsilon-transit, and it has two destinations. In the bin_tree_t and DFA, that's '|' and '*'. */ org_dest = dfa->edests[org_node].elems[0]; re_node_set_empty (dfa->edests + clone_node); /* Search for a duplicated node which satisfies the constraint. */ clone_dest = search_duplicated_node (dfa, org_dest, constraint); if (clone_dest == -1) { /* There is no such duplicated node, create a new one. */ reg_errcode_t err; clone_dest = duplicate_node (dfa, org_dest, constraint); if (__glibc_unlikely (clone_dest == -1)) return REG_ESPACE; ok = re_node_set_insert (dfa->edests + clone_node, clone_dest); if (__glibc_unlikely (! ok)) return REG_ESPACE; err = duplicate_node_closure (dfa, org_dest, clone_dest, root_node, constraint); if (__glibc_unlikely (err != REG_NOERROR)) return err; } else { /* There is a duplicated node which satisfies the constraint, use it to avoid infinite loop. */ ok = re_node_set_insert (dfa->edests + clone_node, clone_dest); if (__glibc_unlikely (! ok)) return REG_ESPACE; } org_dest = dfa->edests[org_node].elems[1]; clone_dest = duplicate_node (dfa, org_dest, constraint); if (__glibc_unlikely (clone_dest == -1)) return REG_ESPACE; ok = re_node_set_insert (dfa->edests + clone_node, clone_dest); if (__glibc_unlikely (! ok)) return REG_ESPACE; } org_node = org_dest; clone_node = clone_dest; } return REG_NOERROR; } /* Search for a node which is duplicated from the node ORG_NODE, and satisfies the constraint CONSTRAINT. */ static Idx search_duplicated_node (const re_dfa_t *dfa, Idx org_node, unsigned int constraint) { Idx idx; for (idx = dfa->nodes_len - 1; dfa->nodes[idx].duplicated && idx > 0; --idx) { if (org_node == dfa->org_indices[idx] && constraint == dfa->nodes[idx].constraint) return idx; /* Found. */ } return -1; /* Not found. */ } /* Duplicate the node whose index is ORG_IDX and set the constraint CONSTRAINT. Return the index of the new node, or -1 if insufficient storage is available. */ static Idx duplicate_node (re_dfa_t *dfa, Idx org_idx, unsigned int constraint) { Idx dup_idx = re_dfa_add_node (dfa, dfa->nodes[org_idx]); if (__glibc_likely (dup_idx != -1)) { dfa->nodes[dup_idx].constraint = constraint; dfa->nodes[dup_idx].constraint |= dfa->nodes[org_idx].constraint; dfa->nodes[dup_idx].duplicated = 1; /* Store the index of the original node. */ dfa->org_indices[dup_idx] = org_idx; } return dup_idx; } static reg_errcode_t calc_inveclosure (re_dfa_t *dfa) { Idx src, idx; bool ok; for (idx = 0; idx < dfa->nodes_len; ++idx) re_node_set_init_empty (dfa->inveclosures + idx); for (src = 0; src < dfa->nodes_len; ++src) { Idx *elems = dfa->eclosures[src].elems; for (idx = 0; idx < dfa->eclosures[src].nelem; ++idx) { ok = re_node_set_insert_last (dfa->inveclosures + elems[idx], src); if (__glibc_unlikely (! ok)) return REG_ESPACE; } } return REG_NOERROR; } /* Calculate "eclosure" for all the node in DFA. */ static reg_errcode_t calc_eclosure (re_dfa_t *dfa) { Idx node_idx; bool incomplete; DEBUG_ASSERT (dfa->nodes_len > 0); incomplete = false; /* For each nodes, calculate epsilon closure. */ for (node_idx = 0; ; ++node_idx) { reg_errcode_t err; re_node_set eclosure_elem; if (node_idx == dfa->nodes_len) { if (!incomplete) break; incomplete = false; node_idx = 0; } DEBUG_ASSERT (dfa->eclosures[node_idx].nelem != -1); /* If we have already calculated, skip it. */ if (dfa->eclosures[node_idx].nelem != 0) continue; /* Calculate epsilon closure of 'node_idx'. */ err = calc_eclosure_iter (&eclosure_elem, dfa, node_idx, true); if (__glibc_unlikely (err != REG_NOERROR)) return err; if (dfa->eclosures[node_idx].nelem == 0) { incomplete = true; re_node_set_free (&eclosure_elem); } } return REG_NOERROR; } /* Calculate epsilon closure of NODE. */ static reg_errcode_t calc_eclosure_iter (re_node_set *new_set, re_dfa_t *dfa, Idx node, bool root) { reg_errcode_t err; Idx i; re_node_set eclosure; bool incomplete = false; err = re_node_set_alloc (&eclosure, dfa->edests[node].nelem + 1); if (__glibc_unlikely (err != REG_NOERROR)) return err; /* An epsilon closure includes itself. */ eclosure.elems[eclosure.nelem++] = node; /* This indicates that we are calculating this node now. We reference this value to avoid infinite loop. */ dfa->eclosures[node].nelem = -1; /* If the current node has constraints, duplicate all nodes since they must inherit the constraints. */ if (dfa->nodes[node].constraint && dfa->edests[node].nelem && !dfa->nodes[dfa->edests[node].elems[0]].duplicated) { err = duplicate_node_closure (dfa, node, node, node, dfa->nodes[node].constraint); if (__glibc_unlikely (err != REG_NOERROR)) return err; } /* Expand each epsilon destination nodes. */ if (IS_EPSILON_NODE(dfa->nodes[node].type)) for (i = 0; i < dfa->edests[node].nelem; ++i) { re_node_set eclosure_elem; Idx edest = dfa->edests[node].elems[i]; /* If calculating the epsilon closure of 'edest' is in progress, return intermediate result. */ if (dfa->eclosures[edest].nelem == -1) { incomplete = true; continue; } /* If we haven't calculated the epsilon closure of 'edest' yet, calculate now. Otherwise use calculated epsilon closure. */ if (dfa->eclosures[edest].nelem == 0) { err = calc_eclosure_iter (&eclosure_elem, dfa, edest, false); if (__glibc_unlikely (err != REG_NOERROR)) return err; } else eclosure_elem = dfa->eclosures[edest]; /* Merge the epsilon closure of 'edest'. */ err = re_node_set_merge (&eclosure, &eclosure_elem); if (__glibc_unlikely (err != REG_NOERROR)) return err; /* If the epsilon closure of 'edest' is incomplete, the epsilon closure of this node is also incomplete. */ if (dfa->eclosures[edest].nelem == 0) { incomplete = true; re_node_set_free (&eclosure_elem); } } if (incomplete && !root) dfa->eclosures[node].nelem = 0; else dfa->eclosures[node] = eclosure; *new_set = eclosure; return REG_NOERROR; } /* Functions for token which are used in the parser. */ /* Fetch a token from INPUT. We must not use this function inside bracket expressions. */ static void fetch_token (re_token_t *result, re_string_t *input, reg_syntax_t syntax) { re_string_skip_bytes (input, peek_token (result, input, syntax)); } /* Peek a token from INPUT, and return the length of the token. We must not use this function inside bracket expressions. */ static int peek_token (re_token_t *token, re_string_t *input, reg_syntax_t syntax) { unsigned char c; if (re_string_eoi (input)) { token->type = END_OF_RE; return 0; } c = re_string_peek_byte (input, 0); token->opr.c = c; token->word_char = 0; token->mb_partial = 0; if (input->mb_cur_max > 1 && !re_string_first_byte (input, re_string_cur_idx (input))) { token->type = CHARACTER; token->mb_partial = 1; return 1; } if (c == '\\') { unsigned char c2; if (re_string_cur_idx (input) + 1 >= re_string_length (input)) { token->type = BACK_SLASH; return 1; } c2 = re_string_peek_byte_case (input, 1); token->opr.c = c2; token->type = CHARACTER; if (input->mb_cur_max > 1) { wint_t wc = re_string_wchar_at (input, re_string_cur_idx (input) + 1); token->word_char = IS_WIDE_WORD_CHAR (wc) != 0; } else token->word_char = IS_WORD_CHAR (c2) != 0; switch (c2) { case '|': if (!(syntax & RE_LIMITED_OPS) && !(syntax & RE_NO_BK_VBAR)) token->type = OP_ALT; break; case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': if (!(syntax & RE_NO_BK_REFS)) { token->type = OP_BACK_REF; token->opr.idx = c2 - '1'; } break; case '<': if (!(syntax & RE_NO_GNU_OPS)) { token->type = ANCHOR; token->opr.ctx_type = WORD_FIRST; } break; case '>': if (!(syntax & RE_NO_GNU_OPS)) { token->type = ANCHOR; token->opr.ctx_type = WORD_LAST; } break; case 'b': if (!(syntax & RE_NO_GNU_OPS)) { token->type = ANCHOR; token->opr.ctx_type = WORD_DELIM; } break; case 'B': if (!(syntax & RE_NO_GNU_OPS)) { token->type = ANCHOR; token->opr.ctx_type = NOT_WORD_DELIM; } break; case 'w': if (!(syntax & RE_NO_GNU_OPS)) token->type = OP_WORD; break; case 'W': if (!(syntax & RE_NO_GNU_OPS)) token->type = OP_NOTWORD; break; case 's': if (!(syntax & RE_NO_GNU_OPS)) token->type = OP_SPACE; break; case 'S': if (!(syntax & RE_NO_GNU_OPS)) token->type = OP_NOTSPACE; break; case '`': if (!(syntax & RE_NO_GNU_OPS)) { token->type = ANCHOR; token->opr.ctx_type = BUF_FIRST; } break; case '\'': if (!(syntax & RE_NO_GNU_OPS)) { token->type = ANCHOR; token->opr.ctx_type = BUF_LAST; } break; case '(': if (!(syntax & RE_NO_BK_PARENS)) token->type = OP_OPEN_SUBEXP; break; case ')': if (!(syntax & RE_NO_BK_PARENS)) token->type = OP_CLOSE_SUBEXP; break; case '+': if (!(syntax & RE_LIMITED_OPS) && (syntax & RE_BK_PLUS_QM)) token->type = OP_DUP_PLUS; break; case '?': if (!(syntax & RE_LIMITED_OPS) && (syntax & RE_BK_PLUS_QM)) token->type = OP_DUP_QUESTION; break; case '{': if ((syntax & RE_INTERVALS) && (!(syntax & RE_NO_BK_BRACES))) token->type = OP_OPEN_DUP_NUM; break; case '}': if ((syntax & RE_INTERVALS) && (!(syntax & RE_NO_BK_BRACES))) token->type = OP_CLOSE_DUP_NUM; break; default: break; } return 2; } token->type = CHARACTER; if (input->mb_cur_max > 1) { wint_t wc = re_string_wchar_at (input, re_string_cur_idx (input)); token->word_char = IS_WIDE_WORD_CHAR (wc) != 0; } else token->word_char = IS_WORD_CHAR (token->opr.c); switch (c) { case '\n': if (syntax & RE_NEWLINE_ALT) token->type = OP_ALT; break; case '|': if (!(syntax & RE_LIMITED_OPS) && (syntax & RE_NO_BK_VBAR)) token->type = OP_ALT; break; case '*': token->type = OP_DUP_ASTERISK; break; case '+': if (!(syntax & RE_LIMITED_OPS) && !(syntax & RE_BK_PLUS_QM)) token->type = OP_DUP_PLUS; break; case '?': if (!(syntax & RE_LIMITED_OPS) && !(syntax & RE_BK_PLUS_QM)) token->type = OP_DUP_QUESTION; break; case '{': if ((syntax & RE_INTERVALS) && (syntax & RE_NO_BK_BRACES)) token->type = OP_OPEN_DUP_NUM; break; case '}': if ((syntax & RE_INTERVALS) && (syntax & RE_NO_BK_BRACES)) token->type = OP_CLOSE_DUP_NUM; break; case '(': if (syntax & RE_NO_BK_PARENS) token->type = OP_OPEN_SUBEXP; break; case ')': if (syntax & RE_NO_BK_PARENS) token->type = OP_CLOSE_SUBEXP; break; case '[': token->type = OP_OPEN_BRACKET; break; case '.': token->type = OP_PERIOD; break; case '^': if (!(syntax & (RE_CONTEXT_INDEP_ANCHORS | RE_CARET_ANCHORS_HERE)) && re_string_cur_idx (input) != 0) { char prev = re_string_peek_byte (input, -1); if (!(syntax & RE_NEWLINE_ALT) || prev != '\n') break; } token->type = ANCHOR; token->opr.ctx_type = LINE_FIRST; break; case '$': if (!(syntax & RE_CONTEXT_INDEP_ANCHORS) && re_string_cur_idx (input) + 1 != re_string_length (input)) { re_token_t next; re_string_skip_bytes (input, 1); peek_token (&next, input, syntax); re_string_skip_bytes (input, -1); if (next.type != OP_ALT && next.type != OP_CLOSE_SUBEXP) break; } token->type = ANCHOR; token->opr.ctx_type = LINE_LAST; break; default: break; } return 1; } /* Peek a token from INPUT, and return the length of the token. We must not use this function out of bracket expressions. */ static int peek_token_bracket (re_token_t *token, re_string_t *input, reg_syntax_t syntax) { unsigned char c; if (re_string_eoi (input)) { token->type = END_OF_RE; return 0; } c = re_string_peek_byte (input, 0); token->opr.c = c; if (input->mb_cur_max > 1 && !re_string_first_byte (input, re_string_cur_idx (input))) { token->type = CHARACTER; return 1; } if (c == '\\' && (syntax & RE_BACKSLASH_ESCAPE_IN_LISTS) && re_string_cur_idx (input) + 1 < re_string_length (input)) { /* In this case, '\' escape a character. */ unsigned char c2; re_string_skip_bytes (input, 1); c2 = re_string_peek_byte (input, 0); token->opr.c = c2; token->type = CHARACTER; return 1; } if (c == '[') /* '[' is a special char in a bracket exps. */ { unsigned char c2; int token_len; if (re_string_cur_idx (input) + 1 < re_string_length (input)) c2 = re_string_peek_byte (input, 1); else c2 = 0; token->opr.c = c2; token_len = 2; switch (c2) { case '.': token->type = OP_OPEN_COLL_ELEM; break; case '=': token->type = OP_OPEN_EQUIV_CLASS; break; case ':': if (syntax & RE_CHAR_CLASSES) { token->type = OP_OPEN_CHAR_CLASS; break; } FALLTHROUGH; default: token->type = CHARACTER; token->opr.c = c; token_len = 1; break; } return token_len; } switch (c) { case ']': token->type = OP_CLOSE_BRACKET; break; case '^': token->type = OP_NON_MATCH_LIST; break; case '-': /* In V7 Unix grep and Unix awk and mawk, [...---...] (3 adjacent minus signs) stands for a single minus sign. Support that without breaking anything else. */ if (! (re_string_cur_idx (input) + 2 < re_string_length (input) && re_string_peek_byte (input, 1) == '-' && re_string_peek_byte (input, 2) == '-')) { token->type = OP_CHARSET_RANGE; break; } re_string_skip_bytes (input, 2); FALLTHROUGH; default: token->type = CHARACTER; } return 1; } /* Functions for parser. */ /* Entry point of the parser. Parse the regular expression REGEXP and return the structure tree. If an error occurs, ERR is set by error code, and return NULL. This function build the following tree, from regular expression <reg_exp>: CAT / \ / \ <reg_exp> EOR CAT means concatenation. EOR means end of regular expression. */ static bin_tree_t * parse (re_string_t *regexp, regex_t *preg, reg_syntax_t syntax, reg_errcode_t *err) { re_dfa_t *dfa = preg->buffer; bin_tree_t *tree, *eor, *root; re_token_t current_token; dfa->syntax = syntax; fetch_token (¤t_token, regexp, syntax | RE_CARET_ANCHORS_HERE); tree = parse_reg_exp (regexp, preg, ¤t_token, syntax, 0, err); if (__glibc_unlikely (*err != REG_NOERROR && tree == NULL)) return NULL; eor = create_tree (dfa, NULL, NULL, END_OF_RE); if (tree != NULL) root = create_tree (dfa, tree, eor, CONCAT); else root = eor; if (__glibc_unlikely (eor == NULL || root == NULL)) { *err = REG_ESPACE; return NULL; } return root; } /* This function build the following tree, from regular expression <branch1>|<branch2>: ALT / \ / \ <branch1> <branch2> ALT means alternative, which represents the operator '|'. */ static bin_tree_t * parse_reg_exp (re_string_t *regexp, regex_t *preg, re_token_t *token, reg_syntax_t syntax, Idx nest, reg_errcode_t *err) { re_dfa_t *dfa = preg->buffer; bin_tree_t *tree, *branch = NULL; bitset_word_t initial_bkref_map = dfa->completed_bkref_map; tree = parse_branch (regexp, preg, token, syntax, nest, err); if (__glibc_unlikely (*err != REG_NOERROR && tree == NULL)) return NULL; while (token->type == OP_ALT) { fetch_token (token, regexp, syntax | RE_CARET_ANCHORS_HERE); if (token->type != OP_ALT && token->type != END_OF_RE && (nest == 0 || token->type != OP_CLOSE_SUBEXP)) { bitset_word_t accumulated_bkref_map = dfa->completed_bkref_map; dfa->completed_bkref_map = initial_bkref_map; branch = parse_branch (regexp, preg, token, syntax, nest, err); if (__glibc_unlikely (*err != REG_NOERROR && branch == NULL)) { if (tree != NULL) postorder (tree, free_tree, NULL); return NULL; } dfa->completed_bkref_map |= accumulated_bkref_map; } else branch = NULL; tree = create_tree (dfa, tree, branch, OP_ALT); if (__glibc_unlikely (tree == NULL)) { *err = REG_ESPACE; return NULL; } } return tree; } /* This function build the following tree, from regular expression <exp1><exp2>: CAT / \ / \ <exp1> <exp2> CAT means concatenation. */ static bin_tree_t * parse_branch (re_string_t *regexp, regex_t *preg, re_token_t *token, reg_syntax_t syntax, Idx nest, reg_errcode_t *err) { bin_tree_t *tree, *expr; re_dfa_t *dfa = preg->buffer; tree = parse_expression (regexp, preg, token, syntax, nest, err); if (__glibc_unlikely (*err != REG_NOERROR && tree == NULL)) return NULL; while (token->type != OP_ALT && token->type != END_OF_RE && (nest == 0 || token->type != OP_CLOSE_SUBEXP)) { expr = parse_expression (regexp, preg, token, syntax, nest, err); if (__glibc_unlikely (*err != REG_NOERROR && expr == NULL)) { if (tree != NULL) postorder (tree, free_tree, NULL); return NULL; } if (tree != NULL && expr != NULL) { bin_tree_t *newtree = create_tree (dfa, tree, expr, CONCAT); if (newtree == NULL) { postorder (expr, free_tree, NULL); postorder (tree, free_tree, NULL); *err = REG_ESPACE; return NULL; } tree = newtree; } else if (tree == NULL) tree = expr; /* Otherwise expr == NULL, we don't need to create new tree. */ } return tree; } /* This function build the following tree, from regular expression a*: * | a */ static bin_tree_t * parse_expression (re_string_t *regexp, regex_t *preg, re_token_t *token, reg_syntax_t syntax, Idx nest, reg_errcode_t *err) { re_dfa_t *dfa = preg->buffer; bin_tree_t *tree; switch (token->type) { case CHARACTER: tree = create_token_tree (dfa, NULL, NULL, token); if (__glibc_unlikely (tree == NULL)) { *err = REG_ESPACE; return NULL; } if (dfa->mb_cur_max > 1) { while (!re_string_eoi (regexp) && !re_string_first_byte (regexp, re_string_cur_idx (regexp))) { bin_tree_t *mbc_remain; fetch_token (token, regexp, syntax); mbc_remain = create_token_tree (dfa, NULL, NULL, token); tree = create_tree (dfa, tree, mbc_remain, CONCAT); if (__glibc_unlikely (mbc_remain == NULL || tree == NULL)) { *err = REG_ESPACE; return NULL; } } } break; case OP_OPEN_SUBEXP: tree = parse_sub_exp (regexp, preg, token, syntax, nest + 1, err); if (__glibc_unlikely (*err != REG_NOERROR && tree == NULL)) return NULL; break; case OP_OPEN_BRACKET: tree = parse_bracket_exp (regexp, dfa, token, syntax, err); if (__glibc_unlikely (*err != REG_NOERROR && tree == NULL)) return NULL; break; case OP_BACK_REF: if (!__glibc_likely (dfa->completed_bkref_map & (1 << token->opr.idx))) { *err = REG_ESUBREG; return NULL; } dfa->used_bkref_map |= 1 << token->opr.idx; tree = create_token_tree (dfa, NULL, NULL, token); if (__glibc_unlikely (tree == NULL)) { *err = REG_ESPACE; return NULL; } ++dfa->nbackref; dfa->has_mb_node = 1; break; case OP_OPEN_DUP_NUM: if (syntax & RE_CONTEXT_INVALID_DUP) { *err = REG_BADRPT; return NULL; } FALLTHROUGH; case OP_DUP_ASTERISK: case OP_DUP_PLUS: case OP_DUP_QUESTION: if (syntax & RE_CONTEXT_INVALID_OPS) { *err = REG_BADRPT; return NULL; } else if (syntax & RE_CONTEXT_INDEP_OPS) { fetch_token (token, regexp, syntax); return parse_expression (regexp, preg, token, syntax, nest, err); } FALLTHROUGH; case OP_CLOSE_SUBEXP: if ((token->type == OP_CLOSE_SUBEXP) && !(syntax & RE_UNMATCHED_RIGHT_PAREN_ORD)) { *err = REG_ERPAREN; return NULL; } FALLTHROUGH; case OP_CLOSE_DUP_NUM: /* We treat it as a normal character. */ /* Then we can these characters as normal characters. */ token->type = CHARACTER; /* mb_partial and word_char bits should be initialized already by peek_token. */ tree = create_token_tree (dfa, NULL, NULL, token); if (__glibc_unlikely (tree == NULL)) { *err = REG_ESPACE; return NULL; } break; case ANCHOR: if ((token->opr.ctx_type & (WORD_DELIM | NOT_WORD_DELIM | WORD_FIRST | WORD_LAST)) && dfa->word_ops_used == 0) init_word_char (dfa); if (token->opr.ctx_type == WORD_DELIM || token->opr.ctx_type == NOT_WORD_DELIM) { bin_tree_t *tree_first, *tree_last; if (token->opr.ctx_type == WORD_DELIM) { token->opr.ctx_type = WORD_FIRST; tree_first = create_token_tree (dfa, NULL, NULL, token); token->opr.ctx_type = WORD_LAST; } else { token->opr.ctx_type = INSIDE_WORD; tree_first = create_token_tree (dfa, NULL, NULL, token); token->opr.ctx_type = INSIDE_NOTWORD; } tree_last = create_token_tree (dfa, NULL, NULL, token); tree = create_tree (dfa, tree_first, tree_last, OP_ALT); if (__glibc_unlikely (tree_first == NULL || tree_last == NULL || tree == NULL)) { *err = REG_ESPACE; return NULL; } } else { tree = create_token_tree (dfa, NULL, NULL, token); if (__glibc_unlikely (tree == NULL)) { *err = REG_ESPACE; return NULL; } } /* We must return here, since ANCHORs can't be followed by repetition operators. eg. RE"^*" is invalid or "<ANCHOR(^)><CHAR(*)>", it must not be "<ANCHOR(^)><REPEAT(*)>". */ fetch_token (token, regexp, syntax); return tree; case OP_PERIOD: tree = create_token_tree (dfa, NULL, NULL, token); if (__glibc_unlikely (tree == NULL)) { *err = REG_ESPACE; return NULL; } if (dfa->mb_cur_max > 1) dfa->has_mb_node = 1; break; case OP_WORD: case OP_NOTWORD: tree = build_charclass_op (dfa, regexp->trans, "alnum", "_", token->type == OP_NOTWORD, err); if (__glibc_unlikely (*err != REG_NOERROR && tree == NULL)) return NULL; break; case OP_SPACE: case OP_NOTSPACE: tree = build_charclass_op (dfa, regexp->trans, "space", "", token->type == OP_NOTSPACE, err); if (__glibc_unlikely (*err != REG_NOERROR && tree == NULL)) return NULL; break; case OP_ALT: case END_OF_RE: return NULL; case BACK_SLASH: *err = REG_EESCAPE; return NULL; default: /* Must not happen? */ DEBUG_ASSERT (false); return NULL; } fetch_token (token, regexp, syntax); while (token->type == OP_DUP_ASTERISK || token->type == OP_DUP_PLUS || token->type == OP_DUP_QUESTION || token->type == OP_OPEN_DUP_NUM) { bin_tree_t *dup_tree = parse_dup_op (tree, regexp, dfa, token, syntax, err); if (__glibc_unlikely (*err != REG_NOERROR && dup_tree == NULL)) { if (tree != NULL) postorder (tree, free_tree, NULL); return NULL; } tree = dup_tree; /* In BRE consecutive duplications are not allowed. */ if ((syntax & RE_CONTEXT_INVALID_DUP) && (token->type == OP_DUP_ASTERISK || token->type == OP_OPEN_DUP_NUM)) { if (tree != NULL) postorder (tree, free_tree, NULL); *err = REG_BADRPT; return NULL; } } return tree; } /* This function build the following tree, from regular expression (<reg_exp>): SUBEXP | <reg_exp> */ static bin_tree_t * parse_sub_exp (re_string_t *regexp, regex_t *preg, re_token_t *token, reg_syntax_t syntax, Idx nest, reg_errcode_t *err) { re_dfa_t *dfa = preg->buffer; bin_tree_t *tree; size_t cur_nsub; cur_nsub = preg->re_nsub++; fetch_token (token, regexp, syntax | RE_CARET_ANCHORS_HERE); /* The subexpression may be a null string. */ if (token->type == OP_CLOSE_SUBEXP) tree = NULL; else { tree = parse_reg_exp (regexp, preg, token, syntax, nest, err); if (__glibc_unlikely (*err == REG_NOERROR && token->type != OP_CLOSE_SUBEXP)) { if (tree != NULL) postorder (tree, free_tree, NULL); *err = REG_EPAREN; } if (__glibc_unlikely (*err != REG_NOERROR)) return NULL; } if (cur_nsub <= '9' - '1') dfa->completed_bkref_map |= 1 << cur_nsub; tree = create_tree (dfa, tree, NULL, SUBEXP); if (__glibc_unlikely (tree == NULL)) { *err = REG_ESPACE; return NULL; } tree->token.opr.idx = cur_nsub; return tree; } /* This function parse repetition operators like "*", "+", "{1,3}" etc. */ static bin_tree_t * parse_dup_op (bin_tree_t *elem, re_string_t *regexp, re_dfa_t *dfa, re_token_t *token, reg_syntax_t syntax, reg_errcode_t *err) { bin_tree_t *tree = NULL, *old_tree = NULL; Idx i, start, end, start_idx = re_string_cur_idx (regexp); re_token_t start_token = *token; if (token->type == OP_OPEN_DUP_NUM) { end = 0; start = fetch_number (regexp, token, syntax); if (start == -1) { if (token->type == CHARACTER && token->opr.c == ',') start = 0; /* We treat "{,m}" as "{0,m}". */ else { *err = REG_BADBR; /* <re>{} is invalid. */ return NULL; } } if (__glibc_likely (start != -2)) { /* We treat "{n}" as "{n,n}". */ end = ((token->type == OP_CLOSE_DUP_NUM) ? start : ((token->type == CHARACTER && token->opr.c == ',') ? fetch_number (regexp, token, syntax) : -2)); } if (__glibc_unlikely (start == -2 || end == -2)) { /* Invalid sequence. */ if (__glibc_unlikely (!(syntax & RE_INVALID_INTERVAL_ORD))) { if (token->type == END_OF_RE) *err = REG_EBRACE; else *err = REG_BADBR; return NULL; } /* If the syntax bit is set, rollback. */ re_string_set_index (regexp, start_idx); *token = start_token; token->type = CHARACTER; /* mb_partial and word_char bits should be already initialized by peek_token. */ return elem; } if (__glibc_unlikely ((end != -1 && start > end) || token->type != OP_CLOSE_DUP_NUM)) { /* First number greater than second. */ *err = REG_BADBR; return NULL; } if (__glibc_unlikely (RE_DUP_MAX < (end == -1 ? start : end))) { *err = REG_ESIZE; return NULL; } } else { start = (token->type == OP_DUP_PLUS) ? 1 : 0; end = (token->type == OP_DUP_QUESTION) ? 1 : -1; } fetch_token (token, regexp, syntax); if (__glibc_unlikely (elem == NULL)) return NULL; if (__glibc_unlikely (start == 0 && end == 0)) { postorder (elem, free_tree, NULL); return NULL; } /* Extract "<re>{n,m}" to "<re><re>...<re><re>{0,<m-n>}". */ if (__glibc_unlikely (start > 0)) { tree = elem; for (i = 2; i <= start; ++i) { elem = duplicate_tree (elem, dfa); tree = create_tree (dfa, tree, elem, CONCAT); if (__glibc_unlikely (elem == NULL || tree == NULL)) goto parse_dup_op_espace; } if (start == end) return tree; /* Duplicate ELEM before it is marked optional. */ elem = duplicate_tree (elem, dfa); if (__glibc_unlikely (elem == NULL)) goto parse_dup_op_espace; old_tree = tree; } else old_tree = NULL; if (elem->token.type == SUBEXP) { uintptr_t subidx = elem->token.opr.idx; postorder (elem, mark_opt_subexp, (void *) subidx); } tree = create_tree (dfa, elem, NULL, (end == -1 ? OP_DUP_ASTERISK : OP_ALT)); if (__glibc_unlikely (tree == NULL)) goto parse_dup_op_espace; /* This loop is actually executed only when end != -1, to rewrite <re>{0,n} as (<re>(<re>...<re>?)?)?... We have already created the start+1-th copy. */ if (TYPE_SIGNED (Idx) || end != -1) for (i = start + 2; i <= end; ++i) { elem = duplicate_tree (elem, dfa); tree = create_tree (dfa, tree, elem, CONCAT); if (__glibc_unlikely (elem == NULL || tree == NULL)) goto parse_dup_op_espace; tree = create_tree (dfa, tree, NULL, OP_ALT); if (__glibc_unlikely (tree == NULL)) goto parse_dup_op_espace; } if (old_tree) tree = create_tree (dfa, old_tree, tree, CONCAT); return tree; parse_dup_op_espace: *err = REG_ESPACE; return NULL; } /* Size of the names for collating symbol/equivalence_class/character_class. I'm not sure, but maybe enough. */ #define BRACKET_NAME_BUF_SIZE 32 #ifndef _LIBC /* Convert the byte B to the corresponding wide character. In a unibyte locale, treat B as itself. In a multibyte locale, return WEOF if B is an encoding error. */ static wint_t parse_byte (unsigned char b, re_dfa_t const *dfa) { return dfa->mb_cur_max > 1 ? __btowc (b) : b; } /* Local function for parse_bracket_exp used in _LIBC environment. Build the range expression which starts from START_ELEM, and ends at END_ELEM. The result are written to MBCSET and SBCSET. RANGE_ALLOC is the allocated size of mbcset->range_starts, and mbcset->range_ends, is a pointer argument since we may update it. */ static reg_errcode_t build_range_exp (bitset_t sbcset, re_charset_t *mbcset, Idx *range_alloc, bracket_elem_t *start_elem, bracket_elem_t *end_elem, re_dfa_t *dfa, reg_syntax_t syntax, uint_fast32_t nrules, const unsigned char *collseqmb, const char *collseqwc, int_fast32_t table_size, const void *symb_table, const unsigned char *extra) { /* Equivalence Classes and Character Classes can't be a range start/end. */ if (__glibc_unlikely (start_elem->type == EQUIV_CLASS || start_elem->type == CHAR_CLASS || end_elem->type == EQUIV_CLASS || end_elem->type == CHAR_CLASS)) return REG_ERANGE; /* We can handle no multi character collating elements without libc support. */ if (__glibc_unlikely ((start_elem->type == COLL_SYM && strlen ((char *) start_elem->opr.name) > 1) || (end_elem->type == COLL_SYM && strlen ((char *) end_elem->opr.name) > 1))) return REG_ECOLLATE; unsigned int start_ch = ((start_elem->type == SB_CHAR) ? start_elem->opr.ch : ((start_elem->type == COLL_SYM) ? start_elem->opr.name[0] : 0)), end_ch = ((end_elem->type == SB_CHAR) ? end_elem->opr.ch : ((end_elem->type == COLL_SYM) ? end_elem->opr.name[0] : 0)); wint_t start_wc = ((start_elem->type == SB_CHAR || start_elem->type == COLL_SYM) ? parse_byte (start_ch, dfa) : start_elem->opr.wch), end_wc = ((end_elem->type == SB_CHAR || end_elem->type == COLL_SYM) ? parse_byte (end_ch, dfa) : end_elem->opr.wch); if (start_wc == WEOF || end_wc == WEOF) return REG_ECOLLATE; else if (__glibc_unlikely ((syntax & RE_NO_EMPTY_RANGES) && start_wc > end_wc)) return REG_ERANGE; /* Got valid collation sequence values, add them as a new entry. However, for !_LIBC we have no collation elements: if the character set is single byte, the single byte character set that we build below suffices. parse_bracket_exp passes no MBCSET if dfa->mb_cur_max == 1. */ if (dfa->mb_cur_max > 1) { /* Check the space of the arrays. */ if (__glibc_unlikely (*range_alloc == mbcset->nranges)) { /* There is not enough space, need realloc. */ wchar_t *new_array_start, *new_array_end; Idx new_nranges; /* +1 in case of mbcset->nranges is 0. */ new_nranges = 2 * mbcset->nranges + 1; /* Use realloc since mbcset->range_starts and mbcset->range_ends are NULL if *range_alloc == 0. */ new_array_start = re_realloc (mbcset->range_starts, wchar_t, new_nranges); new_array_end = re_realloc (mbcset->range_ends, wchar_t, new_nranges); if (__glibc_unlikely (new_array_start == NULL || new_array_end == NULL)) { re_free (new_array_start); re_free (new_array_end); return REG_ESPACE; } mbcset->range_starts = new_array_start; mbcset->range_ends = new_array_end; *range_alloc = new_nranges; } mbcset->range_starts[mbcset->nranges] = start_wc; mbcset->range_ends[mbcset->nranges++] = end_wc; } /* Build the table for single byte characters. */ for (wchar_t wc = 0; wc < SBC_MAX; ++wc) { if (start_wc <= wc && wc <= end_wc) bitset_set (sbcset, wc); } return REG_NOERROR; } #endif /* not _LIBC */ #ifndef _LIBC /* Helper function for parse_bracket_exp only used in case of NOT _LIBC. Build the collating element which is represented by NAME. The result are written to MBCSET and SBCSET. COLL_SYM_ALLOC is the allocated size of mbcset->coll_sym, is a pointer argument since we may update it. */ static reg_errcode_t build_collating_symbol (bitset_t sbcset, re_charset_t *mbcset, Idx *coll_sym_alloc, const unsigned char *name, uint_fast32_t nrules, int_fast32_t table_size, const void *symb_table, const unsigned char *extra) { size_t name_len = strlen ((const char *) name); if (__glibc_unlikely (name_len != 1)) return REG_ECOLLATE; else { bitset_set (sbcset, name[0]); return REG_NOERROR; } } #endif /* not _LIBC */ #ifdef _LIBC /* Local function for parse_bracket_exp used in _LIBC environment. Seek the collating symbol entry corresponding to NAME. Return the index of the symbol in the SYMB_TABLE, or -1 if not found. */ static __always_inline int32_t seek_collating_symbol_entry (const unsigned char *name, size_t name_len, const int32_t *symb_table, int_fast32_t table_size, const unsigned char *extra) { int_fast32_t elem; for (elem = 0; elem < table_size; elem++) if (symb_table[2 * elem] != 0) { int32_t idx = symb_table[2 * elem + 1]; /* Skip the name of collating element name. */ idx += 1 + extra[idx]; if (/* Compare the length of the name. */ name_len == extra[idx] /* Compare the name. */ && memcmp (name, &extra[idx + 1], name_len) == 0) /* Yep, this is the entry. */ return elem; } return -1; } /* Local function for parse_bracket_exp used in _LIBC environment. Look up the collation sequence value of BR_ELEM. Return the value if succeeded, UINT_MAX otherwise. */ static __always_inline unsigned int lookup_collation_sequence_value (bracket_elem_t *br_elem, uint32_t nrules, const unsigned char *collseqmb, const char *collseqwc, int_fast32_t table_size, const int32_t *symb_table, const unsigned char *extra) { if (br_elem->type == SB_CHAR) { /* if (MB_CUR_MAX == 1) */ if (nrules == 0) return collseqmb[br_elem->opr.ch]; else { wint_t wc = __btowc (br_elem->opr.ch); return __collseq_table_lookup (collseqwc, wc); } } else if (br_elem->type == MB_CHAR) { if (nrules != 0) return __collseq_table_lookup (collseqwc, br_elem->opr.wch); } else if (br_elem->type == COLL_SYM) { size_t sym_name_len = strlen ((char *) br_elem->opr.name); if (nrules != 0) { int32_t elem, idx; elem = seek_collating_symbol_entry (br_elem->opr.name, sym_name_len, symb_table, table_size, extra); if (elem != -1) { /* We found the entry. */ idx = symb_table[2 * elem + 1]; /* Skip the name of collating element name. */ idx += 1 + extra[idx]; /* Skip the byte sequence of the collating element. */ idx += 1 + extra[idx]; /* Adjust for the alignment. */ idx = (idx + 3) & ~3; /* Skip the multibyte collation sequence value. */ idx += sizeof (unsigned int); /* Skip the wide char sequence of the collating element. */ idx += sizeof (unsigned int) * (1 + *(unsigned int *) (extra + idx)); /* Return the collation sequence value. */ return *(unsigned int *) (extra + idx); } else if (sym_name_len == 1) { /* No valid character. Match it as a single byte character. */ return collseqmb[br_elem->opr.name[0]]; } } else if (sym_name_len == 1) return collseqmb[br_elem->opr.name[0]]; } return UINT_MAX; } /* Local function for parse_bracket_exp used in _LIBC environment. Build the range expression which starts from START_ELEM, and ends at END_ELEM. The result are written to MBCSET and SBCSET. RANGE_ALLOC is the allocated size of mbcset->range_starts, and mbcset->range_ends, is a pointer argument since we may update it. */ static __always_inline reg_errcode_t build_range_exp (bitset_t sbcset, re_charset_t *mbcset, Idx *range_alloc, bracket_elem_t *start_elem, bracket_elem_t *end_elem, re_dfa_t *dfa, reg_syntax_t syntax, uint32_t nrules, const unsigned char *collseqmb, const char *collseqwc, int_fast32_t table_size, const int32_t *symb_table, const unsigned char *extra) { unsigned int ch; uint32_t start_collseq; uint32_t end_collseq; /* Equivalence Classes and Character Classes can't be a range start/end. */ if (__glibc_unlikely (start_elem->type == EQUIV_CLASS || start_elem->type == CHAR_CLASS || end_elem->type == EQUIV_CLASS || end_elem->type == CHAR_CLASS)) return REG_ERANGE; /* FIXME: Implement rational ranges here, too. */ start_collseq = lookup_collation_sequence_value (start_elem, nrules, collseqmb, collseqwc, table_size, symb_table, extra); end_collseq = lookup_collation_sequence_value (end_elem, nrules, collseqmb, collseqwc, table_size, symb_table, extra); /* Check start/end collation sequence values. */ if (__glibc_unlikely (start_collseq == UINT_MAX || end_collseq == UINT_MAX)) return REG_ECOLLATE; if (__glibc_unlikely ((syntax & RE_NO_EMPTY_RANGES) && start_collseq > end_collseq)) return REG_ERANGE; /* Got valid collation sequence values, add them as a new entry. However, if we have no collation elements, and the character set is single byte, the single byte character set that we build below suffices. */ if (nrules > 0 || dfa->mb_cur_max > 1) { /* Check the space of the arrays. */ if (__glibc_unlikely (*range_alloc == mbcset->nranges)) { /* There is not enough space, need realloc. */ uint32_t *new_array_start; uint32_t *new_array_end; int new_nranges; /* +1 in case of mbcset->nranges is 0. */ new_nranges = 2 * mbcset->nranges + 1; new_array_start = re_realloc (mbcset->range_starts, uint32_t, new_nranges); new_array_end = re_realloc (mbcset->range_ends, uint32_t, new_nranges); if (__glibc_unlikely (new_array_start == NULL || new_array_end == NULL)) return REG_ESPACE; mbcset->range_starts = new_array_start; mbcset->range_ends = new_array_end; *range_alloc = new_nranges; } mbcset->range_starts[mbcset->nranges] = start_collseq; mbcset->range_ends[mbcset->nranges++] = end_collseq; } /* Build the table for single byte characters. */ for (ch = 0; ch < SBC_MAX; ch++) { uint32_t ch_collseq; /* if (MB_CUR_MAX == 1) */ if (nrules == 0) ch_collseq = collseqmb[ch]; else ch_collseq = __collseq_table_lookup (collseqwc, __btowc (ch)); if (start_collseq <= ch_collseq && ch_collseq <= end_collseq) bitset_set (sbcset, ch); } return REG_NOERROR; } /* Local function for parse_bracket_exp used in _LIBC environment. Build the collating element which is represented by NAME. The result are written to MBCSET and SBCSET. COLL_SYM_ALLOC is the allocated size of mbcset->coll_sym, is a pointer argument since we may update it. */ static __always_inline reg_errcode_t build_collating_symbol (bitset_t sbcset, re_charset_t *mbcset, Idx *coll_sym_alloc, const unsigned char *name, uint_fast32_t nrules, int_fast32_t table_size, const int32_t *symb_table, const unsigned char *extra) { int32_t elem, idx; size_t name_len = strlen ((const char *) name); if (nrules != 0) { elem = seek_collating_symbol_entry (name, name_len, symb_table, table_size, extra); if (elem != -1) { /* We found the entry. */ idx = symb_table[2 * elem + 1]; /* Skip the name of collating element name. */ idx += 1 + extra[idx]; } else if (name_len == 1) { /* No valid character, treat it as a normal character. */ bitset_set (sbcset, name[0]); return REG_NOERROR; } else return REG_ECOLLATE; /* Got valid collation sequence, add it as a new entry. */ /* Check the space of the arrays. */ if (__glibc_unlikely (*coll_sym_alloc == mbcset->ncoll_syms)) { /* Not enough, realloc it. */ /* +1 in case of mbcset->ncoll_syms is 0. */ int new_coll_sym_alloc = 2 * mbcset->ncoll_syms + 1; /* Use realloc since mbcset->coll_syms is NULL if *alloc == 0. */ int32_t *new_coll_syms = re_realloc (mbcset->coll_syms, int32_t, new_coll_sym_alloc); if (__glibc_unlikely (new_coll_syms == NULL)) return REG_ESPACE; mbcset->coll_syms = new_coll_syms; *coll_sym_alloc = new_coll_sym_alloc; } mbcset->coll_syms[mbcset->ncoll_syms++] = idx; return REG_NOERROR; } else { if (__glibc_unlikely (name_len != 1)) return REG_ECOLLATE; else { bitset_set (sbcset, name[0]); return REG_NOERROR; } } } #endif /* _LIBC */ /* This function parse bracket expression like "[abc]", "[a-c]", "[[.a-a.]]" etc. */ static bin_tree_t * parse_bracket_exp (re_string_t *regexp, re_dfa_t *dfa, re_token_t *token, reg_syntax_t syntax, reg_errcode_t *err) { const unsigned char *collseqmb = NULL; const char *collseqwc = NULL; uint_fast32_t nrules = 0; int_fast32_t table_size = 0; const void *symb_table = NULL; const unsigned char *extra = NULL; re_token_t br_token; re_bitset_ptr_t sbcset; re_charset_t *mbcset; Idx coll_sym_alloc = 0, range_alloc = 0, mbchar_alloc = 0; Idx equiv_class_alloc = 0, char_class_alloc = 0; bool non_match = false; bin_tree_t *work_tree; int token_len; bool first_round = true; #ifdef _LIBC collseqmb = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_COLLSEQMB); nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); if (nrules) { /* if (MB_CUR_MAX > 1) */ collseqwc = _NL_CURRENT (LC_COLLATE, _NL_COLLATE_COLLSEQWC); table_size = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_SYMB_HASH_SIZEMB); symb_table = _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_TABLEMB); extra = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_EXTRAMB); } #endif sbcset = (re_bitset_ptr_t) calloc (sizeof (bitset_t), 1); mbcset = (re_charset_t *) calloc (sizeof (re_charset_t), 1); if (__glibc_unlikely (sbcset == NULL || mbcset == NULL)) { re_free (sbcset); re_free (mbcset); *err = REG_ESPACE; return NULL; } token_len = peek_token_bracket (token, regexp, syntax); if (__glibc_unlikely (token->type == END_OF_RE)) { *err = REG_BADPAT; goto parse_bracket_exp_free_return; } if (token->type == OP_NON_MATCH_LIST) { mbcset->non_match = 1; non_match = true; if (syntax & RE_HAT_LISTS_NOT_NEWLINE) bitset_set (sbcset, '\n'); re_string_skip_bytes (regexp, token_len); /* Skip a token. */ token_len = peek_token_bracket (token, regexp, syntax); if (__glibc_unlikely (token->type == END_OF_RE)) { *err = REG_BADPAT; goto parse_bracket_exp_free_return; } } /* We treat the first ']' as a normal character. */ if (token->type == OP_CLOSE_BRACKET) token->type = CHARACTER; while (1) { bracket_elem_t start_elem, end_elem; unsigned char start_name_buf[BRACKET_NAME_BUF_SIZE]; unsigned char end_name_buf[BRACKET_NAME_BUF_SIZE]; reg_errcode_t ret; int token_len2 = 0; bool is_range_exp = false; re_token_t token2; start_elem.opr.name = start_name_buf; start_elem.type = COLL_SYM; ret = parse_bracket_element (&start_elem, regexp, token, token_len, dfa, syntax, first_round); if (__glibc_unlikely (ret != REG_NOERROR)) { *err = ret; goto parse_bracket_exp_free_return; } first_round = false; /* Get information about the next token. We need it in any case. */ token_len = peek_token_bracket (token, regexp, syntax); /* Do not check for ranges if we know they are not allowed. */ if (start_elem.type != CHAR_CLASS && start_elem.type != EQUIV_CLASS) { if (__glibc_unlikely (token->type == END_OF_RE)) { *err = REG_EBRACK; goto parse_bracket_exp_free_return; } if (token->type == OP_CHARSET_RANGE) { re_string_skip_bytes (regexp, token_len); /* Skip '-'. */ token_len2 = peek_token_bracket (&token2, regexp, syntax); if (__glibc_unlikely (token2.type == END_OF_RE)) { *err = REG_EBRACK; goto parse_bracket_exp_free_return; } if (token2.type == OP_CLOSE_BRACKET) { /* We treat the last '-' as a normal character. */ re_string_skip_bytes (regexp, -token_len); token->type = CHARACTER; } else is_range_exp = true; } } if (is_range_exp == true) { end_elem.opr.name = end_name_buf; end_elem.type = COLL_SYM; ret = parse_bracket_element (&end_elem, regexp, &token2, token_len2, dfa, syntax, true); if (__glibc_unlikely (ret != REG_NOERROR)) { *err = ret; goto parse_bracket_exp_free_return; } token_len = peek_token_bracket (token, regexp, syntax); *err = build_range_exp (sbcset, mbcset, &range_alloc, &start_elem, &end_elem, dfa, syntax, nrules, collseqmb, collseqwc, table_size, symb_table, extra); if (__glibc_unlikely (*err != REG_NOERROR)) goto parse_bracket_exp_free_return; } else { switch (start_elem.type) { case SB_CHAR: bitset_set (sbcset, start_elem.opr.ch); break; case MB_CHAR: /* Check whether the array has enough space. */ if (__glibc_unlikely (mbchar_alloc == mbcset->nmbchars)) { wchar_t *new_mbchars; /* Not enough, realloc it. */ /* +1 in case of mbcset->nmbchars is 0. */ mbchar_alloc = 2 * mbcset->nmbchars + 1; /* Use realloc since array is NULL if *alloc == 0. */ new_mbchars = re_realloc (mbcset->mbchars, wchar_t, mbchar_alloc); if (__glibc_unlikely (new_mbchars == NULL)) goto parse_bracket_exp_espace; mbcset->mbchars = new_mbchars; } mbcset->mbchars[mbcset->nmbchars++] = start_elem.opr.wch; break; case EQUIV_CLASS: *err = build_equiv_class (sbcset, mbcset, &equiv_class_alloc, start_elem.opr.name); if (__glibc_unlikely (*err != REG_NOERROR)) goto parse_bracket_exp_free_return; break; case COLL_SYM: *err = build_collating_symbol (sbcset, mbcset, &coll_sym_alloc, start_elem.opr.name, nrules, table_size, symb_table, extra); if (__glibc_unlikely (*err != REG_NOERROR)) goto parse_bracket_exp_free_return; break; case CHAR_CLASS: *err = build_charclass (regexp->trans, sbcset, mbcset, &char_class_alloc, (const char *) start_elem.opr.name, syntax); if (__glibc_unlikely (*err != REG_NOERROR)) goto parse_bracket_exp_free_return; break; default: DEBUG_ASSERT (false); break; } } if (__glibc_unlikely (token->type == END_OF_RE)) { *err = REG_EBRACK; goto parse_bracket_exp_free_return; } if (token->type == OP_CLOSE_BRACKET) break; } re_string_skip_bytes (regexp, token_len); /* Skip a token. */ /* If it is non-matching list. */ if (non_match) bitset_not (sbcset); /* Ensure only single byte characters are set. */ if (dfa->mb_cur_max > 1) bitset_mask (sbcset, dfa->sb_char); if (mbcset->nmbchars || mbcset->ncoll_syms || mbcset->nequiv_classes || mbcset->nranges || (dfa->mb_cur_max > 1 && (mbcset->nchar_classes || mbcset->non_match))) { bin_tree_t *mbc_tree; int sbc_idx; /* Build a tree for complex bracket. */ dfa->has_mb_node = 1; br_token.type = COMPLEX_BRACKET; br_token.opr.mbcset = mbcset; mbc_tree = create_token_tree (dfa, NULL, NULL, &br_token); if (__glibc_unlikely (mbc_tree == NULL)) goto parse_bracket_exp_espace; for (sbc_idx = 0; sbc_idx < BITSET_WORDS; ++sbc_idx) if (sbcset[sbc_idx]) break; /* If there are no bits set in sbcset, there is no point of having both SIMPLE_BRACKET and COMPLEX_BRACKET. */ if (sbc_idx < BITSET_WORDS) { /* Build a tree for simple bracket. */ br_token.type = SIMPLE_BRACKET; br_token.opr.sbcset = sbcset; work_tree = create_token_tree (dfa, NULL, NULL, &br_token); if (__glibc_unlikely (work_tree == NULL)) goto parse_bracket_exp_espace; /* Then join them by ALT node. */ work_tree = create_tree (dfa, work_tree, mbc_tree, OP_ALT); if (__glibc_unlikely (work_tree == NULL)) goto parse_bracket_exp_espace; } else { re_free (sbcset); work_tree = mbc_tree; } } else { free_charset (mbcset); /* Build a tree for simple bracket. */ br_token.type = SIMPLE_BRACKET; br_token.opr.sbcset = sbcset; work_tree = create_token_tree (dfa, NULL, NULL, &br_token); if (__glibc_unlikely (work_tree == NULL)) goto parse_bracket_exp_espace; } return work_tree; parse_bracket_exp_espace: *err = REG_ESPACE; parse_bracket_exp_free_return: re_free (sbcset); free_charset (mbcset); return NULL; } /* Parse an element in the bracket expression. */ static reg_errcode_t parse_bracket_element (bracket_elem_t *elem, re_string_t *regexp, re_token_t *token, int token_len, re_dfa_t *dfa, reg_syntax_t syntax, bool accept_hyphen) { int cur_char_size; cur_char_size = re_string_char_size_at (regexp, re_string_cur_idx (regexp)); if (cur_char_size > 1) { elem->type = MB_CHAR; elem->opr.wch = re_string_wchar_at (regexp, re_string_cur_idx (regexp)); re_string_skip_bytes (regexp, cur_char_size); return REG_NOERROR; } re_string_skip_bytes (regexp, token_len); /* Skip a token. */ if (token->type == OP_OPEN_COLL_ELEM || token->type == OP_OPEN_CHAR_CLASS || token->type == OP_OPEN_EQUIV_CLASS) return parse_bracket_symbol (elem, regexp, token); if (__glibc_unlikely (token->type == OP_CHARSET_RANGE) && !accept_hyphen) { /* A '-' must only appear as anything but a range indicator before the closing bracket. Everything else is an error. */ re_token_t token2; (void) peek_token_bracket (&token2, regexp, syntax); if (token2.type != OP_CLOSE_BRACKET) /* The actual error value is not standardized since this whole case is undefined. But ERANGE makes good sense. */ return REG_ERANGE; } elem->type = SB_CHAR; elem->opr.ch = token->opr.c; return REG_NOERROR; } /* Parse a bracket symbol in the bracket expression. Bracket symbols are such as [:<character_class>:], [.<collating_element>.], and [=<equivalent_class>=]. */ static reg_errcode_t parse_bracket_symbol (bracket_elem_t *elem, re_string_t *regexp, re_token_t *token) { unsigned char ch, delim = token->opr.c; int i = 0; if (re_string_eoi(regexp)) return REG_EBRACK; for (;; ++i) { if (i >= BRACKET_NAME_BUF_SIZE) return REG_EBRACK; if (token->type == OP_OPEN_CHAR_CLASS) ch = re_string_fetch_byte_case (regexp); else ch = re_string_fetch_byte (regexp); if (re_string_eoi(regexp)) return REG_EBRACK; if (ch == delim && re_string_peek_byte (regexp, 0) == ']') break; elem->opr.name[i] = ch; } re_string_skip_bytes (regexp, 1); elem->opr.name[i] = '\0'; switch (token->type) { case OP_OPEN_COLL_ELEM: elem->type = COLL_SYM; break; case OP_OPEN_EQUIV_CLASS: elem->type = EQUIV_CLASS; break; case OP_OPEN_CHAR_CLASS: elem->type = CHAR_CLASS; break; default: break; } return REG_NOERROR; } /* Helper function for parse_bracket_exp. Build the equivalence class which is represented by NAME. The result are written to MBCSET and SBCSET. EQUIV_CLASS_ALLOC is the allocated size of mbcset->equiv_classes, is a pointer argument since we may update it. */ static reg_errcode_t build_equiv_class (bitset_t sbcset, re_charset_t *mbcset, Idx *equiv_class_alloc, const unsigned char *name) { #ifdef _LIBC uint32_t nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); if (nrules != 0) { const int32_t *table, *indirect; const unsigned char *weights, *extra, *cp; unsigned char char_buf[2]; int32_t idx1, idx2; unsigned int ch; size_t len; /* Calculate the index for equivalence class. */ cp = name; table = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEMB); weights = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_WEIGHTMB); extra = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_EXTRAMB); indirect = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_INDIRECTMB); idx1 = findidx (table, indirect, extra, &cp, -1); if (__glibc_unlikely (idx1 == 0 || *cp != '\0')) /* This isn't a valid character. */ return REG_ECOLLATE; /* Build single byte matching table for this equivalence class. */ len = weights[idx1 & 0xffffff]; for (ch = 0; ch < SBC_MAX; ++ch) { char_buf[0] = ch; cp = char_buf; idx2 = findidx (table, indirect, extra, &cp, 1); /* idx2 = table[ch]; */ if (idx2 == 0) /* This isn't a valid character. */ continue; /* Compare only if the length matches and the collation rule index is the same. */ if (len == weights[idx2 & 0xffffff] && (idx1 >> 24) == (idx2 >> 24) && memcmp (weights + (idx1 & 0xffffff) + 1, weights + (idx2 & 0xffffff) + 1, len) == 0) bitset_set (sbcset, ch); } /* Check whether the array has enough space. */ if (__glibc_unlikely (*equiv_class_alloc == mbcset->nequiv_classes)) { /* Not enough, realloc it. */ /* +1 in case of mbcset->nequiv_classes is 0. */ Idx new_equiv_class_alloc = 2 * mbcset->nequiv_classes + 1; /* Use realloc since the array is NULL if *alloc == 0. */ int32_t *new_equiv_classes = re_realloc (mbcset->equiv_classes, int32_t, new_equiv_class_alloc); if (__glibc_unlikely (new_equiv_classes == NULL)) return REG_ESPACE; mbcset->equiv_classes = new_equiv_classes; *equiv_class_alloc = new_equiv_class_alloc; } mbcset->equiv_classes[mbcset->nequiv_classes++] = idx1; } else #endif /* _LIBC */ { if (__glibc_unlikely (strlen ((const char *) name) != 1)) return REG_ECOLLATE; bitset_set (sbcset, *name); } return REG_NOERROR; } /* Helper function for parse_bracket_exp. Build the character class which is represented by NAME. The result are written to MBCSET and SBCSET. CHAR_CLASS_ALLOC is the allocated size of mbcset->char_classes, is a pointer argument since we may update it. */ static reg_errcode_t build_charclass (RE_TRANSLATE_TYPE trans, bitset_t sbcset, re_charset_t *mbcset, Idx *char_class_alloc, const char *class_name, reg_syntax_t syntax) { int i; const char *name = class_name; /* In case of REG_ICASE "upper" and "lower" match the both of upper and lower cases. */ if ((syntax & RE_ICASE) && (strcmp (name, "upper") == 0 || strcmp (name, "lower") == 0)) name = "alpha"; /* Check the space of the arrays. */ if (__glibc_unlikely (*char_class_alloc == mbcset->nchar_classes)) { /* Not enough, realloc it. */ /* +1 in case of mbcset->nchar_classes is 0. */ Idx new_char_class_alloc = 2 * mbcset->nchar_classes + 1; /* Use realloc since array is NULL if *alloc == 0. */ wctype_t *new_char_classes = re_realloc (mbcset->char_classes, wctype_t, new_char_class_alloc); if (__glibc_unlikely (new_char_classes == NULL)) return REG_ESPACE; mbcset->char_classes = new_char_classes; *char_class_alloc = new_char_class_alloc; } mbcset->char_classes[mbcset->nchar_classes++] = __wctype (name); #define BUILD_CHARCLASS_LOOP(ctype_func) \ do { \ if (__glibc_unlikely (trans != NULL)) \ { \ for (i = 0; i < SBC_MAX; ++i) \ if (ctype_func (i)) \ bitset_set (sbcset, trans[i]); \ } \ else \ { \ for (i = 0; i < SBC_MAX; ++i) \ if (ctype_func (i)) \ bitset_set (sbcset, i); \ } \ } while (0) if (strcmp (name, "alnum") == 0) BUILD_CHARCLASS_LOOP (isalnum); else if (strcmp (name, "cntrl") == 0) BUILD_CHARCLASS_LOOP (iscntrl); else if (strcmp (name, "lower") == 0) BUILD_CHARCLASS_LOOP (islower); else if (strcmp (name, "space") == 0) BUILD_CHARCLASS_LOOP (isspace); else if (strcmp (name, "alpha") == 0) BUILD_CHARCLASS_LOOP (isalpha); else if (strcmp (name, "digit") == 0) BUILD_CHARCLASS_LOOP (isdigit); else if (strcmp (name, "print") == 0) BUILD_CHARCLASS_LOOP (isprint); else if (strcmp (name, "upper") == 0) BUILD_CHARCLASS_LOOP (isupper); else if (strcmp (name, "blank") == 0) BUILD_CHARCLASS_LOOP (isblank); else if (strcmp (name, "graph") == 0) BUILD_CHARCLASS_LOOP (isgraph); else if (strcmp (name, "punct") == 0) BUILD_CHARCLASS_LOOP (ispunct); else if (strcmp (name, "xdigit") == 0) BUILD_CHARCLASS_LOOP (isxdigit); else return REG_ECTYPE; return REG_NOERROR; } static bin_tree_t * build_charclass_op (re_dfa_t *dfa, RE_TRANSLATE_TYPE trans, const char *class_name, const char *extra, bool non_match, reg_errcode_t *err) { re_bitset_ptr_t sbcset; re_charset_t *mbcset; Idx alloc = 0; reg_errcode_t ret; bin_tree_t *tree; sbcset = (re_bitset_ptr_t) calloc (sizeof (bitset_t), 1); if (__glibc_unlikely (sbcset == NULL)) { *err = REG_ESPACE; return NULL; } mbcset = (re_charset_t *) calloc (sizeof (re_charset_t), 1); if (__glibc_unlikely (mbcset == NULL)) { re_free (sbcset); *err = REG_ESPACE; return NULL; } mbcset->non_match = non_match; /* We don't care the syntax in this case. */ ret = build_charclass (trans, sbcset, mbcset, &alloc, class_name, 0); if (__glibc_unlikely (ret != REG_NOERROR)) { re_free (sbcset); free_charset (mbcset); *err = ret; return NULL; } /* \w match '_' also. */ for (; *extra; extra++) bitset_set (sbcset, *extra); /* If it is non-matching list. */ if (non_match) bitset_not (sbcset); /* Ensure only single byte characters are set. */ if (dfa->mb_cur_max > 1) bitset_mask (sbcset, dfa->sb_char); /* Build a tree for simple bracket. */ re_token_t br_token = { .type = SIMPLE_BRACKET, .opr.sbcset = sbcset }; tree = create_token_tree (dfa, NULL, NULL, &br_token); if (__glibc_unlikely (tree == NULL)) goto build_word_op_espace; if (dfa->mb_cur_max > 1) { bin_tree_t *mbc_tree; /* Build a tree for complex bracket. */ br_token.type = COMPLEX_BRACKET; br_token.opr.mbcset = mbcset; dfa->has_mb_node = 1; mbc_tree = create_token_tree (dfa, NULL, NULL, &br_token); if (__glibc_unlikely (mbc_tree == NULL)) goto build_word_op_espace; /* Then join them by ALT node. */ tree = create_tree (dfa, tree, mbc_tree, OP_ALT); if (__glibc_likely (mbc_tree != NULL)) return tree; } else { free_charset (mbcset); return tree; } build_word_op_espace: re_free (sbcset); free_charset (mbcset); *err = REG_ESPACE; return NULL; } /* This is intended for the expressions like "a{1,3}". Fetch a number from 'input', and return the number. Return -1 if the number field is empty like "{,1}". Return RE_DUP_MAX + 1 if the number field is too large. Return -2 if an error occurred. */ static Idx fetch_number (re_string_t *input, re_token_t *token, reg_syntax_t syntax) { Idx num = -1; unsigned char c; while (1) { fetch_token (token, input, syntax); c = token->opr.c; if (__glibc_unlikely (token->type == END_OF_RE)) return -2; if (token->type == OP_CLOSE_DUP_NUM || c == ',') break; num = ((token->type != CHARACTER || c < '0' || '9' < c || num == -2) ? -2 : num == -1 ? c - '0' : MIN (RE_DUP_MAX + 1, num * 10 + c - '0')); } return num; } static void free_charset (re_charset_t *cset) { re_free (cset->mbchars); #ifdef _LIBC re_free (cset->coll_syms); re_free (cset->equiv_classes); #endif re_free (cset->range_starts); re_free (cset->range_ends); re_free (cset->char_classes); re_free (cset); } /* Functions for binary tree operation. */ /* Create a tree node. */ static bin_tree_t * create_tree (re_dfa_t *dfa, bin_tree_t *left, bin_tree_t *right, re_token_type_t type) { re_token_t t = { .type = type }; return create_token_tree (dfa, left, right, &t); } static bin_tree_t * create_token_tree (re_dfa_t *dfa, bin_tree_t *left, bin_tree_t *right, const re_token_t *token) { bin_tree_t *tree; if (__glibc_unlikely (dfa->str_tree_storage_idx == BIN_TREE_STORAGE_SIZE)) { bin_tree_storage_t *storage = re_malloc (bin_tree_storage_t, 1); if (storage == NULL) return NULL; storage->next = dfa->str_tree_storage; dfa->str_tree_storage = storage; dfa->str_tree_storage_idx = 0; } tree = &dfa->str_tree_storage->data[dfa->str_tree_storage_idx++]; tree->parent = NULL; tree->left = left; tree->right = right; tree->token = *token; tree->token.duplicated = 0; tree->token.opt_subexp = 0; tree->first = NULL; tree->next = NULL; tree->node_idx = -1; if (left != NULL) left->parent = tree; if (right != NULL) right->parent = tree; return tree; } /* Mark the tree SRC as an optional subexpression. To be called from preorder or postorder. */ static reg_errcode_t mark_opt_subexp (void *extra, bin_tree_t *node) { Idx idx = (uintptr_t) extra; if (node->token.type == SUBEXP && node->token.opr.idx == idx) node->token.opt_subexp = 1; return REG_NOERROR; } /* Free the allocated memory inside NODE. */ static void free_token (re_token_t *node) { if (node->type == COMPLEX_BRACKET && node->duplicated == 0) free_charset (node->opr.mbcset); else if (node->type == SIMPLE_BRACKET && node->duplicated == 0) re_free (node->opr.sbcset); } /* Worker function for tree walking. Free the allocated memory inside NODE and its children. */ static reg_errcode_t free_tree (void *extra, bin_tree_t *node) { free_token (&node->token); return REG_NOERROR; } /* Duplicate the node SRC, and return new node. This is a preorder visit similar to the one implemented by the generic visitor, but we need more infrastructure to maintain two parallel trees --- so, it's easier to duplicate. */ static bin_tree_t * duplicate_tree (const bin_tree_t *root, re_dfa_t *dfa) { const bin_tree_t *node; bin_tree_t *dup_root; bin_tree_t **p_new = &dup_root, *dup_node = root->parent; for (node = root; ; ) { /* Create a new tree and link it back to the current parent. */ *p_new = create_token_tree (dfa, NULL, NULL, &node->token); if (*p_new == NULL) return NULL; (*p_new)->parent = dup_node; (*p_new)->token.duplicated = 1; dup_node = *p_new; /* Go to the left node, or up and to the right. */ if (node->left) { node = node->left; p_new = &dup_node->left; } else { const bin_tree_t *prev = NULL; while (node->right == prev || node->right == NULL) { prev = node; node = node->parent; dup_node = dup_node->parent; if (!node) return dup_root; } node = node->right; p_new = &dup_node->right; } } } �����������������������������������������������������������������rush-2.4/gnu/string.in.h����������������������������������������������������������������������������0000644�0001750�0001750�00000144753�14436425346�015234� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A GNU-like <string.h>. Copyright (C) 1995-1996, 2001-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if defined _GL_ALREADY_INCLUDING_STRING_H /* Special invocation convention: - On OS X/NetBSD we have a sequence of nested includes <string.h> -> <strings.h> -> "string.h" In this situation system _chk variants due to -D_FORTIFY_SOURCE might be used after any replacements defined here. */ #@INCLUDE_NEXT@ @NEXT_STRING_H@ #else /* Normal invocation convention. */ #ifndef _@GUARD_PREFIX@_STRING_H #define _GL_ALREADY_INCLUDING_STRING_H /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_STRING_H@ #undef _GL_ALREADY_INCLUDING_STRING_H #ifndef _@GUARD_PREFIX@_STRING_H #define _@GUARD_PREFIX@_STRING_H /* This file uses _GL_ATTRIBUTE_DEALLOC, _GL_ATTRIBUTE_MALLOC, _GL_ATTRIBUTE_PURE, GNULIB_POSIXCHECK, HAVE_RAW_DECL_*. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif /* NetBSD 5.0 mis-defines NULL. */ #include <stddef.h> /* MirBSD defines mbslen as a macro. */ #if @GNULIB_MBSLEN@ && defined __MirBSD__ # include <wchar.h> #endif /* NetBSD 5.0 declares strsignal in <unistd.h>, not in <string.h>. */ /* But in any case avoid namespace pollution on glibc systems. */ #if (@GNULIB_STRSIGNAL@ || defined GNULIB_POSIXCHECK) && defined __NetBSD__ \ && ! defined __GLIBC__ # include <unistd.h> #endif /* AIX 7.2 and Android 13 declare ffsl and ffsll in <strings.h>, not in <string.h>. */ /* But in any case avoid namespace pollution on glibc systems. */ #if ((@GNULIB_FFSL@ || @GNULIB_FFSLL@ || defined GNULIB_POSIXCHECK) \ && (defined _AIX || defined __ANDROID__)) \ && ! defined __GLIBC__ # include <strings.h> #endif /* _GL_ATTRIBUTE_DEALLOC (F, I) declares that the function returns pointers that can be freed by passing them as the Ith argument to the function F. */ #ifndef _GL_ATTRIBUTE_DEALLOC # if __GNUC__ >= 11 # define _GL_ATTRIBUTE_DEALLOC(f, i) __attribute__ ((__malloc__ (f, i))) # else # define _GL_ATTRIBUTE_DEALLOC(f, i) # endif #endif /* _GL_ATTRIBUTE_DEALLOC_FREE declares that the function returns pointers that can be freed via 'free'; it can be used only after declaring 'free'. */ /* Applies to: functions. Cannot be used on inline functions. */ #ifndef _GL_ATTRIBUTE_DEALLOC_FREE # if defined __cplusplus && defined __GNUC__ && !defined __clang__ /* Work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108231> */ # define _GL_ATTRIBUTE_DEALLOC_FREE \ _GL_ATTRIBUTE_DEALLOC ((void (*) (void *)) free, 1) # else # define _GL_ATTRIBUTE_DEALLOC_FREE \ _GL_ATTRIBUTE_DEALLOC (free, 1) # endif #endif /* _GL_ATTRIBUTE_MALLOC declares that the function returns a pointer to freshly allocated memory. */ /* Applies to: functions. */ #ifndef _GL_ATTRIBUTE_MALLOC # if __GNUC__ >= 3 || defined __clang__ # define _GL_ATTRIBUTE_MALLOC __attribute__ ((__malloc__)) # else # define _GL_ATTRIBUTE_MALLOC # endif #endif /* The __attribute__ feature is available in gcc versions 2.5 and later. The attribute __pure__ was added in gcc 2.96. */ #ifndef _GL_ATTRIBUTE_PURE # if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) || defined __clang__ # define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) # else # define _GL_ATTRIBUTE_PURE /* empty */ # endif #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* Make _GL_ATTRIBUTE_DEALLOC_FREE work, even though <stdlib.h> may not have been included yet. */ #if @GNULIB_FREE_POSIX@ # if (@REPLACE_FREE@ && !defined free \ && !(defined __cplusplus && defined GNULIB_NAMESPACE)) /* We can't do '#define free rpl_free' here. */ # if defined __cplusplus && (__GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2) _GL_EXTERN_C void rpl_free (void *) throw (); # else _GL_EXTERN_C void rpl_free (void *); # endif # undef _GL_ATTRIBUTE_DEALLOC_FREE # define _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_DEALLOC (rpl_free, 1) # else # if defined _MSC_VER && !defined free _GL_EXTERN_C # if defined _DLL __declspec (dllimport) # endif void __cdecl free (void *); # else # if defined __cplusplus && (__GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2) _GL_EXTERN_C void free (void *) throw (); # else _GL_EXTERN_C void free (void *); # endif # endif # endif #else # if defined _MSC_VER && !defined free _GL_EXTERN_C # if defined _DLL __declspec (dllimport) # endif void __cdecl free (void *); # else # if defined __cplusplus && (__GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2) _GL_EXTERN_C void free (void *) throw (); # else _GL_EXTERN_C void free (void *); # endif # endif #endif /* Clear a block of memory. The compiler will not delete a call to this function, even if the block is dead after the call. */ #if @GNULIB_EXPLICIT_BZERO@ # if ! @HAVE_EXPLICIT_BZERO@ _GL_FUNCDECL_SYS (explicit_bzero, void, (void *__dest, size_t __n) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (explicit_bzero, void, (void *__dest, size_t __n)); _GL_CXXALIASWARN (explicit_bzero); #elif defined GNULIB_POSIXCHECK # undef explicit_bzero # if HAVE_RAW_DECL_EXPLICIT_BZERO _GL_WARN_ON_USE (explicit_bzero, "explicit_bzero is unportable - " "use gnulib module explicit_bzero for portability"); # endif #endif /* Find the index of the least-significant set bit. */ #if @GNULIB_FFSL@ # if !@HAVE_FFSL@ _GL_FUNCDECL_SYS (ffsl, int, (long int i)); # endif _GL_CXXALIAS_SYS (ffsl, int, (long int i)); _GL_CXXALIASWARN (ffsl); #elif defined GNULIB_POSIXCHECK # undef ffsl # if HAVE_RAW_DECL_FFSL _GL_WARN_ON_USE (ffsl, "ffsl is not portable - use the ffsl module"); # endif #endif /* Find the index of the least-significant set bit. */ #if @GNULIB_FFSLL@ # if @REPLACE_FFSLL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define ffsll rpl_ffsll # endif _GL_FUNCDECL_RPL (ffsll, int, (long long int i)); _GL_CXXALIAS_RPL (ffsll, int, (long long int i)); # else # if !@HAVE_FFSLL@ _GL_FUNCDECL_SYS (ffsll, int, (long long int i)); # endif _GL_CXXALIAS_SYS (ffsll, int, (long long int i)); # endif _GL_CXXALIASWARN (ffsll); #elif defined GNULIB_POSIXCHECK # undef ffsll # if HAVE_RAW_DECL_FFSLL _GL_WARN_ON_USE (ffsll, "ffsll is not portable - use the ffsll module"); # endif #endif #if @GNULIB_MDA_MEMCCPY@ /* On native Windows, map 'memccpy' to '_memccpy', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::memccpy always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef memccpy # define memccpy _memccpy # endif _GL_CXXALIAS_MDA (memccpy, void *, (void *dest, const void *src, int c, size_t n)); # else _GL_CXXALIAS_SYS (memccpy, void *, (void *dest, const void *src, int c, size_t n)); # endif _GL_CXXALIASWARN (memccpy); #endif /* Return the first instance of C within N bytes of S, or NULL. */ #if @GNULIB_MEMCHR@ # if @REPLACE_MEMCHR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef memchr # define memchr rpl_memchr # endif _GL_FUNCDECL_RPL (memchr, void *, (void const *__s, int __c, size_t __n) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (memchr, void *, (void const *__s, int __c, size_t __n)); # else /* On some systems, this function is defined as an overloaded function: extern "C" { const void * std::memchr (const void *, int, size_t); } extern "C++" { void * std::memchr (void *, int, size_t); } */ _GL_CXXALIAS_SYS_CAST2 (memchr, void *, (void const *__s, int __c, size_t __n), void const *, (void const *__s, int __c, size_t __n)); # endif # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) \ || defined __clang__) _GL_CXXALIASWARN1 (memchr, void *, (void *__s, int __c, size_t __n) throw ()); _GL_CXXALIASWARN1 (memchr, void const *, (void const *__s, int __c, size_t __n) throw ()); # elif __GLIBC__ >= 2 _GL_CXXALIASWARN (memchr); # endif #elif defined GNULIB_POSIXCHECK # undef memchr /* Assume memchr is always declared. */ _GL_WARN_ON_USE (memchr, "memchr has platform-specific bugs - " "use gnulib module memchr for portability" ); #endif /* Return the first occurrence of NEEDLE in HAYSTACK. */ #if @GNULIB_MEMMEM@ # if @REPLACE_MEMMEM@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define memmem rpl_memmem # endif _GL_FUNCDECL_RPL (memmem, void *, (void const *__haystack, size_t __haystack_len, void const *__needle, size_t __needle_len) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 3))); _GL_CXXALIAS_RPL (memmem, void *, (void const *__haystack, size_t __haystack_len, void const *__needle, size_t __needle_len)); # else # if ! @HAVE_DECL_MEMMEM@ _GL_FUNCDECL_SYS (memmem, void *, (void const *__haystack, size_t __haystack_len, void const *__needle, size_t __needle_len) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 3))); # endif _GL_CXXALIAS_SYS (memmem, void *, (void const *__haystack, size_t __haystack_len, void const *__needle, size_t __needle_len)); # endif _GL_CXXALIASWARN (memmem); #elif defined GNULIB_POSIXCHECK # undef memmem # if HAVE_RAW_DECL_MEMMEM _GL_WARN_ON_USE (memmem, "memmem is unportable and often quadratic - " "use gnulib module memmem-simple for portability, " "and module memmem for speed" ); # endif #endif /* Copy N bytes of SRC to DEST, return pointer to bytes after the last written byte. */ #if @GNULIB_MEMPCPY@ # if @REPLACE_MEMPCPY@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mempcpy # define mempcpy rpl_mempcpy # endif _GL_FUNCDECL_RPL (mempcpy, void *, (void *restrict __dest, void const *restrict __src, size_t __n) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (mempcpy, void *, (void *restrict __dest, void const *restrict __src, size_t __n)); # else # if !@HAVE_MEMPCPY@ _GL_FUNCDECL_SYS (mempcpy, void *, (void *restrict __dest, void const *restrict __src, size_t __n) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (mempcpy, void *, (void *restrict __dest, void const *restrict __src, size_t __n)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (mempcpy); # endif #elif defined GNULIB_POSIXCHECK # undef mempcpy # if HAVE_RAW_DECL_MEMPCPY _GL_WARN_ON_USE (mempcpy, "mempcpy is unportable - " "use gnulib module mempcpy for portability"); # endif #endif /* Search backwards through a block for a byte (specified as an int). */ #if @GNULIB_MEMRCHR@ # if ! @HAVE_DECL_MEMRCHR@ _GL_FUNCDECL_SYS (memrchr, void *, (void const *, int, size_t) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); # endif /* On some systems, this function is defined as an overloaded function: extern "C++" { const void * std::memrchr (const void *, int, size_t); } extern "C++" { void * std::memrchr (void *, int, size_t); } */ _GL_CXXALIAS_SYS_CAST2 (memrchr, void *, (void const *, int, size_t), void const *, (void const *, int, size_t)); # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) \ || defined __clang__) _GL_CXXALIASWARN1 (memrchr, void *, (void *, int, size_t) throw ()); _GL_CXXALIASWARN1 (memrchr, void const *, (void const *, int, size_t) throw ()); # elif __GLIBC__ >= 2 _GL_CXXALIASWARN (memrchr); # endif #elif defined GNULIB_POSIXCHECK # undef memrchr # if HAVE_RAW_DECL_MEMRCHR _GL_WARN_ON_USE (memrchr, "memrchr is unportable - " "use gnulib module memrchr for portability"); # endif #endif /* Overwrite a block of memory. The compiler will not optimize effects away, even if the block is dead after the call. */ #if @GNULIB_MEMSET_EXPLICIT@ # if ! @HAVE_MEMSET_EXPLICIT@ _GL_FUNCDECL_SYS (memset_explicit, void *, (void *__dest, int __c, size_t __n) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (memset_explicit, void *, (void *__dest, int __c, size_t __n)); _GL_CXXALIASWARN (memset_explicit); #elif defined GNULIB_POSIXCHECK # undef memset_explicit # if HAVE_RAW_DECL_MEMSET_EXPLICIT _GL_WARN_ON_USE (memset_explicit, "memset_explicit is unportable - " "use gnulib module memset_explicit for portability"); # endif #endif /* Find the first occurrence of C in S. More efficient than memchr(S,C,N), at the expense of undefined behavior if C does not occur within N bytes. */ #if @GNULIB_RAWMEMCHR@ # if ! @HAVE_RAWMEMCHR@ _GL_FUNCDECL_SYS (rawmemchr, void *, (void const *__s, int __c_in) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); # endif /* On some systems, this function is defined as an overloaded function: extern "C++" { const void * std::rawmemchr (const void *, int); } extern "C++" { void * std::rawmemchr (void *, int); } */ _GL_CXXALIAS_SYS_CAST2 (rawmemchr, void *, (void const *__s, int __c_in), void const *, (void const *__s, int __c_in)); # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) \ || defined __clang__) _GL_CXXALIASWARN1 (rawmemchr, void *, (void *__s, int __c_in) throw ()); _GL_CXXALIASWARN1 (rawmemchr, void const *, (void const *__s, int __c_in) throw ()); # else _GL_CXXALIASWARN (rawmemchr); # endif #elif defined GNULIB_POSIXCHECK # undef rawmemchr # if HAVE_RAW_DECL_RAWMEMCHR _GL_WARN_ON_USE (rawmemchr, "rawmemchr is unportable - " "use gnulib module rawmemchr for portability"); # endif #endif /* Copy SRC to DST, returning the address of the terminating '\0' in DST. */ #if @GNULIB_STPCPY@ # if @REPLACE_STPCPY@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef stpcpy # define stpcpy rpl_stpcpy # endif _GL_FUNCDECL_RPL (stpcpy, char *, (char *restrict __dst, char const *restrict __src) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (stpcpy, char *, (char *restrict __dst, char const *restrict __src)); # else # if !@HAVE_STPCPY@ _GL_FUNCDECL_SYS (stpcpy, char *, (char *restrict __dst, char const *restrict __src) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (stpcpy, char *, (char *restrict __dst, char const *restrict __src)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (stpcpy); # endif #elif defined GNULIB_POSIXCHECK # undef stpcpy # if HAVE_RAW_DECL_STPCPY _GL_WARN_ON_USE (stpcpy, "stpcpy is unportable - " "use gnulib module stpcpy for portability"); # endif #endif /* Copy no more than N bytes of SRC to DST, returning a pointer past the last non-NUL byte written into DST. */ #if @GNULIB_STPNCPY@ # if @REPLACE_STPNCPY@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef stpncpy # define stpncpy rpl_stpncpy # endif _GL_FUNCDECL_RPL (stpncpy, char *, (char *restrict __dst, char const *restrict __src, size_t __n) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (stpncpy, char *, (char *restrict __dst, char const *restrict __src, size_t __n)); # else # if ! @HAVE_STPNCPY@ _GL_FUNCDECL_SYS (stpncpy, char *, (char *restrict __dst, char const *restrict __src, size_t __n) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (stpncpy, char *, (char *restrict __dst, char const *restrict __src, size_t __n)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (stpncpy); # endif #elif defined GNULIB_POSIXCHECK # undef stpncpy # if HAVE_RAW_DECL_STPNCPY _GL_WARN_ON_USE (stpncpy, "stpncpy is unportable - " "use gnulib module stpncpy for portability"); # endif #endif #if defined GNULIB_POSIXCHECK /* strchr() does not work with multibyte strings if the locale encoding is GB18030 and the character to be searched is a digit. */ # undef strchr /* Assume strchr is always declared. */ _GL_WARN_ON_USE_CXX (strchr, const char *, char *, (const char *, int), "strchr cannot work correctly on character strings " "in some multibyte locales - " "use mbschr if you care about internationalization"); #endif /* Find the first occurrence of C in S or the final NUL byte. */ #if @GNULIB_STRCHRNUL@ # if @REPLACE_STRCHRNUL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define strchrnul rpl_strchrnul # endif _GL_FUNCDECL_RPL (strchrnul, char *, (const char *__s, int __c_in) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (strchrnul, char *, (const char *str, int ch)); # else # if ! @HAVE_STRCHRNUL@ _GL_FUNCDECL_SYS (strchrnul, char *, (char const *__s, int __c_in) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); # endif /* On some systems, this function is defined as an overloaded function: extern "C++" { const char * std::strchrnul (const char *, int); } extern "C++" { char * std::strchrnul (char *, int); } */ _GL_CXXALIAS_SYS_CAST2 (strchrnul, char *, (char const *__s, int __c_in), char const *, (char const *__s, int __c_in)); # endif # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) \ || defined __clang__) _GL_CXXALIASWARN1 (strchrnul, char *, (char *__s, int __c_in) throw ()); _GL_CXXALIASWARN1 (strchrnul, char const *, (char const *__s, int __c_in) throw ()); # elif __GLIBC__ >= 2 _GL_CXXALIASWARN (strchrnul); # endif #elif defined GNULIB_POSIXCHECK # undef strchrnul # if HAVE_RAW_DECL_STRCHRNUL _GL_WARN_ON_USE (strchrnul, "strchrnul is unportable - " "use gnulib module strchrnul for portability"); # endif #endif /* Duplicate S, returning an identical malloc'd string. */ #if @GNULIB_STRDUP@ # if @REPLACE_STRDUP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strdup # define strdup rpl_strdup # endif _GL_FUNCDECL_RPL (strdup, char *, (char const *__s) _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); _GL_CXXALIAS_RPL (strdup, char *, (char const *__s)); # elif defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strdup # define strdup _strdup # endif _GL_CXXALIAS_MDA (strdup, char *, (char const *__s)); # else # if defined __cplusplus && defined GNULIB_NAMESPACE && defined strdup /* strdup exists as a function and as a macro. Get rid of the macro. */ # undef strdup # endif # if (!@HAVE_DECL_STRDUP@ || __GNUC__ >= 11) && !defined strdup _GL_FUNCDECL_SYS (strdup, char *, (char const *__s) _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); # endif _GL_CXXALIAS_SYS (strdup, char *, (char const *__s)); # endif _GL_CXXALIASWARN (strdup); #else # if __GNUC__ >= 11 && !defined strdup /* For -Wmismatched-dealloc: Associate strdup with free or rpl_free. */ _GL_FUNCDECL_SYS (strdup, char *, (char const *__s) _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); # endif # if defined GNULIB_POSIXCHECK # undef strdup # if HAVE_RAW_DECL_STRDUP _GL_WARN_ON_USE (strdup, "strdup is unportable - " "use gnulib module strdup for portability"); # endif # elif @GNULIB_MDA_STRDUP@ /* On native Windows, map 'creat' to '_creat', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::strdup always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strdup # define strdup _strdup # endif _GL_CXXALIAS_MDA (strdup, char *, (char const *__s)); # else # if defined __cplusplus && defined GNULIB_NAMESPACE && defined strdup # undef strdup # endif _GL_CXXALIAS_SYS (strdup, char *, (char const *__s)); # endif _GL_CXXALIASWARN (strdup); # endif #endif /* Append no more than N characters from SRC onto DEST. */ #if @GNULIB_STRNCAT@ # if @REPLACE_STRNCAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strncat # define strncat rpl_strncat # endif _GL_FUNCDECL_RPL (strncat, char *, (char *restrict dest, const char *restrict src, size_t n) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (strncat, char *, (char *restrict dest, const char *restrict src, size_t n)); # else _GL_CXXALIAS_SYS (strncat, char *, (char *restrict dest, const char *restrict src, size_t n)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (strncat); # endif #elif defined GNULIB_POSIXCHECK # undef strncat # if HAVE_RAW_DECL_STRNCAT _GL_WARN_ON_USE (strncat, "strncat is unportable - " "use gnulib module strncat for portability"); # endif #endif /* Return a newly allocated copy of at most N bytes of STRING. */ #if @GNULIB_STRNDUP@ # if @REPLACE_STRNDUP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strndup # define strndup rpl_strndup # endif _GL_FUNCDECL_RPL (strndup, char *, (char const *__s, size_t __n) _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); _GL_CXXALIAS_RPL (strndup, char *, (char const *__s, size_t __n)); # else # if !@HAVE_DECL_STRNDUP@ || (__GNUC__ >= 11 && !defined strndup) _GL_FUNCDECL_SYS (strndup, char *, (char const *__s, size_t __n) _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); # endif _GL_CXXALIAS_SYS (strndup, char *, (char const *__s, size_t __n)); # endif _GL_CXXALIASWARN (strndup); #else # if __GNUC__ >= 11 && !defined strndup /* For -Wmismatched-dealloc: Associate strndup with free or rpl_free. */ _GL_FUNCDECL_SYS (strndup, char *, (char const *__s, size_t __n) _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); # endif # if defined GNULIB_POSIXCHECK # undef strndup # if HAVE_RAW_DECL_STRNDUP _GL_WARN_ON_USE (strndup, "strndup is unportable - " "use gnulib module strndup for portability"); # endif # endif #endif /* Find the length (number of bytes) of STRING, but scan at most MAXLEN bytes. If no '\0' terminator is found in that many bytes, return MAXLEN. */ #if @GNULIB_STRNLEN@ # if @REPLACE_STRNLEN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strnlen # define strnlen rpl_strnlen # endif _GL_FUNCDECL_RPL (strnlen, size_t, (char const *__s, size_t __maxlen) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (strnlen, size_t, (char const *__s, size_t __maxlen)); # else # if ! @HAVE_DECL_STRNLEN@ _GL_FUNCDECL_SYS (strnlen, size_t, (char const *__s, size_t __maxlen) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (strnlen, size_t, (char const *__s, size_t __maxlen)); # endif _GL_CXXALIASWARN (strnlen); #elif defined GNULIB_POSIXCHECK # undef strnlen # if HAVE_RAW_DECL_STRNLEN _GL_WARN_ON_USE (strnlen, "strnlen is unportable - " "use gnulib module strnlen for portability"); # endif #endif #if defined GNULIB_POSIXCHECK /* strcspn() assumes the second argument is a list of single-byte characters. Even in this simple case, it does not work with multibyte strings if the locale encoding is GB18030 and one of the characters to be searched is a digit. */ # undef strcspn /* Assume strcspn is always declared. */ _GL_WARN_ON_USE (strcspn, "strcspn cannot work correctly on character strings " "in multibyte locales - " "use mbscspn if you care about internationalization"); #endif /* Find the first occurrence in S of any character in ACCEPT. */ #if @GNULIB_STRPBRK@ # if ! @HAVE_STRPBRK@ _GL_FUNCDECL_SYS (strpbrk, char *, (char const *__s, char const *__accept) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2))); # endif /* On some systems, this function is defined as an overloaded function: extern "C" { const char * strpbrk (const char *, const char *); } extern "C++" { char * strpbrk (char *, const char *); } */ _GL_CXXALIAS_SYS_CAST2 (strpbrk, char *, (char const *__s, char const *__accept), const char *, (char const *__s, char const *__accept)); # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) \ || defined __clang__) _GL_CXXALIASWARN1 (strpbrk, char *, (char *__s, char const *__accept) throw ()); _GL_CXXALIASWARN1 (strpbrk, char const *, (char const *__s, char const *__accept) throw ()); # elif __GLIBC__ >= 2 _GL_CXXALIASWARN (strpbrk); # endif # if defined GNULIB_POSIXCHECK /* strpbrk() assumes the second argument is a list of single-byte characters. Even in this simple case, it does not work with multibyte strings if the locale encoding is GB18030 and one of the characters to be searched is a digit. */ # undef strpbrk _GL_WARN_ON_USE_CXX (strpbrk, const char *, char *, (const char *, const char *), "strpbrk cannot work correctly on character strings " "in multibyte locales - " "use mbspbrk if you care about internationalization"); # endif #elif defined GNULIB_POSIXCHECK # undef strpbrk # if HAVE_RAW_DECL_STRPBRK _GL_WARN_ON_USE_CXX (strpbrk, const char *, char *, (const char *, const char *), "strpbrk is unportable - " "use gnulib module strpbrk for portability"); # endif #endif #if defined GNULIB_POSIXCHECK /* strspn() assumes the second argument is a list of single-byte characters. Even in this simple case, it cannot work with multibyte strings. */ # undef strspn /* Assume strspn is always declared. */ _GL_WARN_ON_USE (strspn, "strspn cannot work correctly on character strings " "in multibyte locales - " "use mbsspn if you care about internationalization"); #endif #if defined GNULIB_POSIXCHECK /* strrchr() does not work with multibyte strings if the locale encoding is GB18030 and the character to be searched is a digit. */ # undef strrchr /* Assume strrchr is always declared. */ _GL_WARN_ON_USE_CXX (strrchr, const char *, char *, (const char *, int), "strrchr cannot work correctly on character strings " "in some multibyte locales - " "use mbsrchr if you care about internationalization"); #endif /* Search the next delimiter (char listed in DELIM) starting at *STRINGP. If one is found, overwrite it with a NUL, and advance *STRINGP to point to the next char after it. Otherwise, set *STRINGP to NULL. If *STRINGP was already NULL, nothing happens. Return the old value of *STRINGP. This is a variant of strtok() that is multithread-safe and supports empty fields. Caveat: It modifies the original string. Caveat: These functions cannot be used on constant strings. Caveat: The identity of the delimiting character is lost. Caveat: It doesn't work with multibyte strings unless all of the delimiter characters are ASCII characters < 0x30. See also strtok_r(). */ #if @GNULIB_STRSEP@ # if ! @HAVE_STRSEP@ _GL_FUNCDECL_SYS (strsep, char *, (char **restrict __stringp, char const *restrict __delim) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (strsep, char *, (char **restrict __stringp, char const *restrict __delim)); _GL_CXXALIASWARN (strsep); # if defined GNULIB_POSIXCHECK # undef strsep _GL_WARN_ON_USE (strsep, "strsep cannot work correctly on character strings " "in multibyte locales - " "use mbssep if you care about internationalization"); # endif #elif defined GNULIB_POSIXCHECK # undef strsep # if HAVE_RAW_DECL_STRSEP _GL_WARN_ON_USE (strsep, "strsep is unportable - " "use gnulib module strsep for portability"); # endif #endif #if @GNULIB_STRSTR@ # if @REPLACE_STRSTR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define strstr rpl_strstr # endif _GL_FUNCDECL_RPL (strstr, char *, (const char *haystack, const char *needle) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (strstr, char *, (const char *haystack, const char *needle)); # else /* On some systems, this function is defined as an overloaded function: extern "C++" { const char * strstr (const char *, const char *); } extern "C++" { char * strstr (char *, const char *); } */ _GL_CXXALIAS_SYS_CAST2 (strstr, char *, (const char *haystack, const char *needle), const char *, (const char *haystack, const char *needle)); # endif # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) \ || defined __clang__) _GL_CXXALIASWARN1 (strstr, char *, (char *haystack, const char *needle) throw ()); _GL_CXXALIASWARN1 (strstr, const char *, (const char *haystack, const char *needle) throw ()); # elif __GLIBC__ >= 2 _GL_CXXALIASWARN (strstr); # endif #elif defined GNULIB_POSIXCHECK /* strstr() does not work with multibyte strings if the locale encoding is different from UTF-8: POSIX says that it operates on "strings", and "string" in POSIX is defined as a sequence of bytes, not of characters. */ # undef strstr /* Assume strstr is always declared. */ _GL_WARN_ON_USE (strstr, "strstr is quadratic on many systems, and cannot " "work correctly on character strings in most " "multibyte locales - " "use mbsstr if you care about internationalization, " "or use strstr if you care about speed"); #endif /* Find the first occurrence of NEEDLE in HAYSTACK, using case-insensitive comparison. */ #if @GNULIB_STRCASESTR@ # if @REPLACE_STRCASESTR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define strcasestr rpl_strcasestr # endif _GL_FUNCDECL_RPL (strcasestr, char *, (const char *haystack, const char *needle) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (strcasestr, char *, (const char *haystack, const char *needle)); # else # if ! @HAVE_STRCASESTR@ _GL_FUNCDECL_SYS (strcasestr, char *, (const char *haystack, const char *needle) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2))); # endif /* On some systems, this function is defined as an overloaded function: extern "C++" { const char * strcasestr (const char *, const char *); } extern "C++" { char * strcasestr (char *, const char *); } */ _GL_CXXALIAS_SYS_CAST2 (strcasestr, char *, (const char *haystack, const char *needle), const char *, (const char *haystack, const char *needle)); # endif # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) \ || defined __clang__) _GL_CXXALIASWARN1 (strcasestr, char *, (char *haystack, const char *needle) throw ()); _GL_CXXALIASWARN1 (strcasestr, const char *, (const char *haystack, const char *needle) throw ()); # elif __GLIBC__ >= 2 _GL_CXXALIASWARN (strcasestr); # endif #elif defined GNULIB_POSIXCHECK /* strcasestr() does not work with multibyte strings: It is a glibc extension, and glibc implements it only for unibyte locales. */ # undef strcasestr # if HAVE_RAW_DECL_STRCASESTR _GL_WARN_ON_USE (strcasestr, "strcasestr does work correctly on character " "strings in multibyte locales - " "use mbscasestr if you care about " "internationalization, or use c-strcasestr if you want " "a locale independent function"); # endif #endif /* Parse S into tokens separated by characters in DELIM. If S is NULL, the saved pointer in SAVE_PTR is used as the next starting point. For example: char s[] = "-abc-=-def"; char *sp; x = strtok_r(s, "-", &sp); // x = "abc", sp = "=-def" x = strtok_r(NULL, "-=", &sp); // x = "def", sp = NULL x = strtok_r(NULL, "=", &sp); // x = NULL // s = "abc\0-def\0" This is a variant of strtok() that is multithread-safe. For the POSIX documentation for this function, see: https://pubs.opengroup.org/onlinepubs/9699919799/functions/strtok.html Caveat: It modifies the original string. Caveat: These functions cannot be used on constant strings. Caveat: The identity of the delimiting character is lost. Caveat: It doesn't work with multibyte strings unless all of the delimiter characters are ASCII characters < 0x30. See also strsep(). */ #if @GNULIB_STRTOK_R@ # if @REPLACE_STRTOK_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strtok_r # define strtok_r rpl_strtok_r # endif _GL_FUNCDECL_RPL (strtok_r, char *, (char *restrict s, char const *restrict delim, char **restrict save_ptr) _GL_ARG_NONNULL ((2, 3))); _GL_CXXALIAS_RPL (strtok_r, char *, (char *restrict s, char const *restrict delim, char **restrict save_ptr)); # else # if @UNDEFINE_STRTOK_R@ || defined GNULIB_POSIXCHECK # undef strtok_r # endif # if ! @HAVE_DECL_STRTOK_R@ _GL_FUNCDECL_SYS (strtok_r, char *, (char *restrict s, char const *restrict delim, char **restrict save_ptr) _GL_ARG_NONNULL ((2, 3))); # endif _GL_CXXALIAS_SYS (strtok_r, char *, (char *restrict s, char const *restrict delim, char **restrict save_ptr)); # endif _GL_CXXALIASWARN (strtok_r); # if defined GNULIB_POSIXCHECK _GL_WARN_ON_USE (strtok_r, "strtok_r cannot work correctly on character " "strings in multibyte locales - " "use mbstok_r if you care about internationalization"); # endif #elif defined GNULIB_POSIXCHECK # undef strtok_r # if HAVE_RAW_DECL_STRTOK_R _GL_WARN_ON_USE (strtok_r, "strtok_r is unportable - " "use gnulib module strtok_r for portability"); # endif #endif /* The following functions are not specified by POSIX. They are gnulib extensions. */ #if @GNULIB_MBSLEN@ /* Return the number of multibyte characters in the character string STRING. This considers multibyte characters, unlike strlen, which counts bytes. */ # ifdef __MirBSD__ /* MirBSD defines mbslen as a macro. Override it. */ # undef mbslen # endif # if @HAVE_MBSLEN@ /* AIX, OSF/1, MirBSD define mbslen already in libc. */ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define mbslen rpl_mbslen # endif _GL_FUNCDECL_RPL (mbslen, size_t, (const char *string) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (mbslen, size_t, (const char *string)); # else _GL_FUNCDECL_SYS (mbslen, size_t, (const char *string) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_SYS (mbslen, size_t, (const char *string)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (mbslen); # endif #endif #if @GNULIB_MBSNLEN@ /* Return the number of multibyte characters in the character string starting at STRING and ending at STRING + LEN. */ _GL_EXTERN_C size_t mbsnlen (const char *string, size_t len) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1)); #endif #if @GNULIB_MBSCHR@ /* Locate the first single-byte character C in the character string STRING, and return a pointer to it. Return NULL if C is not found in STRING. Unlike strchr(), this function works correctly in multibyte locales with encodings such as GB18030. */ # if defined __hpux # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define mbschr rpl_mbschr /* avoid collision with HP-UX function */ # endif _GL_FUNCDECL_RPL (mbschr, char *, (const char *string, int c) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (mbschr, char *, (const char *string, int c)); # else _GL_FUNCDECL_SYS (mbschr, char *, (const char *string, int c) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_SYS (mbschr, char *, (const char *string, int c)); # endif _GL_CXXALIASWARN (mbschr); #endif #if @GNULIB_MBSRCHR@ /* Locate the last single-byte character C in the character string STRING, and return a pointer to it. Return NULL if C is not found in STRING. Unlike strrchr(), this function works correctly in multibyte locales with encodings such as GB18030. */ # if defined __hpux || defined __INTERIX # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define mbsrchr rpl_mbsrchr /* avoid collision with system function */ # endif _GL_FUNCDECL_RPL (mbsrchr, char *, (const char *string, int c) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (mbsrchr, char *, (const char *string, int c)); # else _GL_FUNCDECL_SYS (mbsrchr, char *, (const char *string, int c) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_SYS (mbsrchr, char *, (const char *string, int c)); # endif _GL_CXXALIASWARN (mbsrchr); #endif #if @GNULIB_MBSSTR@ /* Find the first occurrence of the character string NEEDLE in the character string HAYSTACK. Return NULL if NEEDLE is not found in HAYSTACK. Unlike strstr(), this function works correctly in multibyte locales with encodings different from UTF-8. */ _GL_EXTERN_C char * mbsstr (const char *haystack, const char *needle) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSCASECMP@ /* Compare the character strings S1 and S2, ignoring case, returning less than, equal to or greater than zero if S1 is lexicographically less than, equal to or greater than S2. Note: This function may, in multibyte locales, return 0 for strings of different lengths! Unlike strcasecmp(), this function works correctly in multibyte locales. */ _GL_EXTERN_C int mbscasecmp (const char *s1, const char *s2) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSNCASECMP@ /* Compare the initial segment of the character string S1 consisting of at most N characters with the initial segment of the character string S2 consisting of at most N characters, ignoring case, returning less than, equal to or greater than zero if the initial segment of S1 is lexicographically less than, equal to or greater than the initial segment of S2. Note: This function may, in multibyte locales, return 0 for initial segments of different lengths! Unlike strncasecmp(), this function works correctly in multibyte locales. But beware that N is not a byte count but a character count! */ _GL_EXTERN_C int mbsncasecmp (const char *s1, const char *s2, size_t n) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSPCASECMP@ /* Compare the initial segment of the character string STRING consisting of at most mbslen (PREFIX) characters with the character string PREFIX, ignoring case. If the two match, return a pointer to the first byte after this prefix in STRING. Otherwise, return NULL. Note: This function may, in multibyte locales, return non-NULL if STRING is of smaller length than PREFIX! Unlike strncasecmp(), this function works correctly in multibyte locales. */ _GL_EXTERN_C char * mbspcasecmp (const char *string, const char *prefix) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSCASESTR@ /* Find the first occurrence of the character string NEEDLE in the character string HAYSTACK, using case-insensitive comparison. Note: This function may, in multibyte locales, return success even if strlen (haystack) < strlen (needle) ! Unlike strcasestr(), this function works correctly in multibyte locales. */ _GL_EXTERN_C char * mbscasestr (const char *haystack, const char *needle) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSCSPN@ /* Find the first occurrence in the character string STRING of any character in the character string ACCEPT. Return the number of bytes from the beginning of the string to this occurrence, or to the end of the string if none exists. Unlike strcspn(), this function works correctly in multibyte locales. */ _GL_EXTERN_C size_t mbscspn (const char *string, const char *accept) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSPBRK@ /* Find the first occurrence in the character string STRING of any character in the character string ACCEPT. Return the pointer to it, or NULL if none exists. Unlike strpbrk(), this function works correctly in multibyte locales. */ # if defined __hpux # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define mbspbrk rpl_mbspbrk /* avoid collision with HP-UX function */ # endif _GL_FUNCDECL_RPL (mbspbrk, char *, (const char *string, const char *accept) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (mbspbrk, char *, (const char *string, const char *accept)); # else _GL_FUNCDECL_SYS (mbspbrk, char *, (const char *string, const char *accept) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_SYS (mbspbrk, char *, (const char *string, const char *accept)); # endif _GL_CXXALIASWARN (mbspbrk); #endif #if @GNULIB_MBSSPN@ /* Find the first occurrence in the character string STRING of any character not in the character string REJECT. Return the number of bytes from the beginning of the string to this occurrence, or to the end of the string if none exists. Unlike strspn(), this function works correctly in multibyte locales. */ _GL_EXTERN_C size_t mbsspn (const char *string, const char *reject) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSSEP@ /* Search the next delimiter (multibyte character listed in the character string DELIM) starting at the character string *STRINGP. If one is found, overwrite it with a NUL, and advance *STRINGP to point to the next multibyte character after it. Otherwise, set *STRINGP to NULL. If *STRINGP was already NULL, nothing happens. Return the old value of *STRINGP. This is a variant of mbstok_r() that supports empty fields. Caveat: It modifies the original string. Caveat: These functions cannot be used on constant strings. Caveat: The identity of the delimiting character is lost. See also mbstok_r(). */ _GL_EXTERN_C char * mbssep (char **stringp, const char *delim) _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSTOK_R@ /* Parse the character string STRING into tokens separated by characters in the character string DELIM. If STRING is NULL, the saved pointer in SAVE_PTR is used as the next starting point. For example: char s[] = "-abc-=-def"; char *sp; x = mbstok_r(s, "-", &sp); // x = "abc", sp = "=-def" x = mbstok_r(NULL, "-=", &sp); // x = "def", sp = NULL x = mbstok_r(NULL, "=", &sp); // x = NULL // s = "abc\0-def\0" Caveat: It modifies the original string. Caveat: These functions cannot be used on constant strings. Caveat: The identity of the delimiting character is lost. See also mbssep(). */ _GL_EXTERN_C char * mbstok_r (char *restrict string, const char *delim, char **save_ptr) _GL_ARG_NONNULL ((2, 3)); #endif /* Map any int, typically from errno, into an error message. */ #if @GNULIB_STRERROR@ # if @REPLACE_STRERROR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strerror # define strerror rpl_strerror # endif _GL_FUNCDECL_RPL (strerror, char *, (int)); _GL_CXXALIAS_RPL (strerror, char *, (int)); # else _GL_CXXALIAS_SYS (strerror, char *, (int)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (strerror); # endif #elif defined GNULIB_POSIXCHECK # undef strerror /* Assume strerror is always declared. */ _GL_WARN_ON_USE (strerror, "strerror is unportable - " "use gnulib module strerror to guarantee non-NULL result"); #endif /* Map any int, typically from errno, into an error message. Multithread-safe. Uses the POSIX declaration, not the glibc declaration. */ #if @GNULIB_STRERROR_R@ # if @REPLACE_STRERROR_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strerror_r # define strerror_r rpl_strerror_r # endif _GL_FUNCDECL_RPL (strerror_r, int, (int errnum, char *buf, size_t buflen) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (strerror_r, int, (int errnum, char *buf, size_t buflen)); # else # if !@HAVE_DECL_STRERROR_R@ _GL_FUNCDECL_SYS (strerror_r, int, (int errnum, char *buf, size_t buflen) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (strerror_r, int, (int errnum, char *buf, size_t buflen)); # endif # if __GLIBC__ >= 2 && @HAVE_DECL_STRERROR_R@ _GL_CXXALIASWARN (strerror_r); # endif #elif defined GNULIB_POSIXCHECK # undef strerror_r # if HAVE_RAW_DECL_STRERROR_R _GL_WARN_ON_USE (strerror_r, "strerror_r is unportable - " "use gnulib module strerror_r-posix for portability"); # endif #endif /* Return the name of the system error code ERRNUM. */ #if @GNULIB_STRERRORNAME_NP@ # if @REPLACE_STRERRORNAME_NP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strerrorname_np # define strerrorname_np rpl_strerrorname_np # endif _GL_FUNCDECL_RPL (strerrorname_np, const char *, (int errnum)); _GL_CXXALIAS_RPL (strerrorname_np, const char *, (int errnum)); # else # if !@HAVE_STRERRORNAME_NP@ _GL_FUNCDECL_SYS (strerrorname_np, const char *, (int errnum)); # endif _GL_CXXALIAS_SYS (strerrorname_np, const char *, (int errnum)); # endif _GL_CXXALIASWARN (strerrorname_np); #elif defined GNULIB_POSIXCHECK # undef strerrorname_np # if HAVE_RAW_DECL_STRERRORNAME_NP _GL_WARN_ON_USE (strerrorname_np, "strerrorname_np is unportable - " "use gnulib module strerrorname_np for portability"); # endif #endif /* Return an abbreviation string for the signal number SIG. */ #if @GNULIB_SIGABBREV_NP@ # if ! @HAVE_SIGABBREV_NP@ _GL_FUNCDECL_SYS (sigabbrev_np, const char *, (int sig)); # endif _GL_CXXALIAS_SYS (sigabbrev_np, const char *, (int sig)); _GL_CXXALIASWARN (sigabbrev_np); #elif defined GNULIB_POSIXCHECK # undef sigabbrev_np # if HAVE_RAW_DECL_SIGABBREV_NP _GL_WARN_ON_USE (sigabbrev_np, "sigabbrev_np is unportable - " "use gnulib module sigabbrev_np for portability"); # endif #endif /* Return an English description string for the signal number SIG. */ #if @GNULIB_SIGDESCR_NP@ # if ! @HAVE_SIGDESCR_NP@ _GL_FUNCDECL_SYS (sigdescr_np, const char *, (int sig)); # endif _GL_CXXALIAS_SYS (sigdescr_np, const char *, (int sig)); _GL_CXXALIASWARN (sigdescr_np); #elif defined GNULIB_POSIXCHECK # undef sigdescr_np # if HAVE_RAW_DECL_SIGDESCR_NP _GL_WARN_ON_USE (sigdescr_np, "sigdescr_np is unportable - " "use gnulib module sigdescr_np for portability"); # endif #endif #if @GNULIB_STRSIGNAL@ # if @REPLACE_STRSIGNAL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define strsignal rpl_strsignal # endif _GL_FUNCDECL_RPL (strsignal, char *, (int __sig)); _GL_CXXALIAS_RPL (strsignal, char *, (int __sig)); # else # if ! @HAVE_DECL_STRSIGNAL@ _GL_FUNCDECL_SYS (strsignal, char *, (int __sig)); # endif /* Need to cast, because on Cygwin 1.5.x systems, the return type is 'const char *'. */ _GL_CXXALIAS_SYS_CAST (strsignal, char *, (int __sig)); # endif _GL_CXXALIASWARN (strsignal); #elif defined GNULIB_POSIXCHECK # undef strsignal # if HAVE_RAW_DECL_STRSIGNAL _GL_WARN_ON_USE (strsignal, "strsignal is unportable - " "use gnulib module strsignal for portability"); # endif #endif #if @GNULIB_STRVERSCMP@ # if !@HAVE_STRVERSCMP@ _GL_FUNCDECL_SYS (strverscmp, int, (const char *, const char *) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (strverscmp, int, (const char *, const char *)); _GL_CXXALIASWARN (strverscmp); #elif defined GNULIB_POSIXCHECK # undef strverscmp # if HAVE_RAW_DECL_STRVERSCMP _GL_WARN_ON_USE (strverscmp, "strverscmp is unportable - " "use gnulib module strverscmp for portability"); # endif #endif #endif /* _@GUARD_PREFIX@_STRING_H */ #endif /* _@GUARD_PREFIX@_STRING_H */ #endif ���������������������rush-2.4/gnu/mbtowc-lock.c��������������������������������������������������������������������������0000644�0001750�0001750�00000010446�14436425346�015524� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Return the internal lock used by mbrtowc and mbrtoc32. Copyright (C) 2019-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2019-2020. */ #include <config.h> /* When it is known that the gl_get_mbtowc_lock function is defined by a dependency library, it should not be defined here. */ #if OMIT_MBTOWC_LOCK /* This declaration is solely to ensure that after preprocessing this file is never empty. */ typedef int dummy; #else /* This file defines the internal lock used by mbrtowc and mbrtoc32. It is a separate compilation unit, so that only one copy of it is present when linking statically. */ /* Prohibit renaming this symbol. */ # undef gl_get_mbtowc_lock /* Macro for exporting a symbol (function, not variable) defined in this file, when compiled into a shared library. */ # ifndef DLL_EXPORTED # if HAVE_VISIBILITY /* Override the effect of the compiler option '-fvisibility=hidden'. */ # define DLL_EXPORTED __attribute__((__visibility__("default"))) # elif defined _WIN32 || defined __CYGWIN__ # define DLL_EXPORTED __declspec(dllexport) # else # define DLL_EXPORTED # endif # endif # if defined _WIN32 && !defined __CYGWIN__ # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> # include "windows-initguard.h" /* The return type is a 'CRITICAL_SECTION *', not a 'glwthread_mutex_t *', because the latter is not guaranteed to be a stable ABI in the future. */ /* Make sure the function gets exported from DLLs. */ DLL_EXPORTED CRITICAL_SECTION *gl_get_mbtowc_lock (void); static glwthread_initguard_t guard = GLWTHREAD_INITGUARD_INIT; static CRITICAL_SECTION lock; /* Returns the internal lock used by mbrtowc and mbrtoc32. */ CRITICAL_SECTION * gl_get_mbtowc_lock (void) { if (!guard.done) { if (InterlockedIncrement (&guard.started) == 0) { /* This thread is the first one to need the lock. Initialize it. */ InitializeCriticalSection (&lock); guard.done = 1; } else { /* Don't let guard.started grow and wrap around. */ InterlockedDecrement (&guard.started); /* Yield the CPU while waiting for another thread to finish initializing this mutex. */ while (!guard.done) Sleep (0); } } return &lock; } # elif HAVE_PTHREAD_API # include <pthread.h> static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; /* Make sure the function gets exported from shared libraries. */ DLL_EXPORTED pthread_mutex_t *gl_get_mbtowc_lock (void); /* Returns the internal lock used by mbrtowc and mbrtoc32. */ pthread_mutex_t * gl_get_mbtowc_lock (void) { return &mutex; } # elif HAVE_THREADS_H # include <threads.h> # include <stdlib.h> static int volatile init_needed = 1; static once_flag init_once = ONCE_FLAG_INIT; static mtx_t mutex; static void atomic_init (void) { if (mtx_init (&mutex, mtx_plain) != thrd_success) abort (); init_needed = 0; } /* Make sure the function gets exported from shared libraries. */ DLL_EXPORTED mtx_t *gl_get_mbtowc_lock (void); /* Returns the internal lock used by mbrtowc and mbrtoc32. */ mtx_t * gl_get_mbtowc_lock (void) { if (init_needed) call_once (&init_once, atomic_init); return &mutex; } # endif # if (defined _WIN32 || defined __CYGWIN__) && !defined _MSC_VER /* Make sure the '__declspec(dllimport)' in mbrtowc.c and mbrtoc32.c does not cause a link failure when no DLLs are involved. */ # if defined _WIN64 || defined _LP64 # define IMP(x) __imp_##x # else # define IMP(x) _imp__##x # endif void * IMP(gl_get_mbtowc_lock) = &gl_get_mbtowc_lock; # endif #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/anytostr.c�����������������������������������������������������������������������������0000644�0001750�0001750�00000003162�14436425345�015162� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* anytostr.c -- convert integers to printable strings Copyright (C) 2001, 2006, 2008-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paul Eggert */ /* Tell gcc not to warn about the (i < 0) test, below. */ #if (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) || 4 < __GNUC__ # pragma GCC diagnostic ignored "-Wtype-limits" #elif defined __clang__ # pragma clang diagnostic ignored "-Wtautological-compare" #endif #include <config.h> #include "inttostr.h" /* Convert I to a printable string in BUF, which must be at least INT_BUFSIZE_BOUND (INTTYPE) bytes long. Return the address of the printable string, which need not start at BUF. */ _GL_ATTRIBUTE_NODISCARD char * anytostr (inttype i, char *buf) { char *p = buf + INT_STRLEN_BOUND (inttype); *p = 0; if (i < 0) { do *--p = '0' - i % 10; while ((i /= 10) != 0); *--p = '-'; } else { do *--p = '0' + i % 10; while ((i /= 10) != 0); } return p; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/malloca.h������������������������������������������������������������������������������0000644�0001750�0001750�00000011264�14436425346�014717� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Safe automatic memory allocation. Copyright (C) 2003-2007, 2009-2023 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2003. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _MALLOCA_H #define _MALLOCA_H /* This file uses _GL_ATTRIBUTE_ALLOC_SIZE, _GL_ATTRIBUTE_DEALLOC, _GL_ATTRIBUTE_MALLOC, HAVE_ALLOCA. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif #include <alloca.h> #include <stddef.h> #include <stdlib.h> #include <stdint.h> #include "xalloc-oversized.h" #ifdef __cplusplus extern "C" { #endif /* safe_alloca(N) is equivalent to alloca(N) when it is safe to call alloca(N); otherwise it returns NULL. It either returns N bytes of memory allocated on the stack, that lasts until the function returns, or NULL. Use of safe_alloca should be avoided: - inside arguments of function calls - undefined behaviour, - in inline functions - the allocation may actually last until the calling function returns. */ #if HAVE_ALLOCA /* The OS usually guarantees 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 allocate anything larger than 4096 bytes. Also care for the possibility of a few compiler-allocated temporary stack slots. This must be a macro, not a function. */ # define safe_alloca(N) ((N) < 4032 ? alloca (N) : NULL) #else # define safe_alloca(N) ((void) (N), NULL) #endif /* Free a block of memory allocated through malloca(). */ #if HAVE_ALLOCA extern void freea (void *p); #else # define freea free #endif /* malloca(N) is a safe variant of alloca(N). It allocates N bytes of memory allocated on the stack, that must be freed using freea() before the function returns. Upon failure, it returns NULL. */ #if HAVE_ALLOCA # define malloca(N) \ ((N) < 4032 - (2 * sa_alignment_max - 1) \ ? (void *) (((uintptr_t) (char *) alloca ((N) + 2 * sa_alignment_max - 1) \ + (2 * sa_alignment_max - 1)) \ & ~(uintptr_t)(2 * sa_alignment_max - 1)) \ : mmalloca (N)) #else # define malloca(N) \ mmalloca (N) #endif extern void *mmalloca (size_t n) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC (freea, 1) _GL_ATTRIBUTE_ALLOC_SIZE ((1)); /* nmalloca(N,S) is an overflow-safe variant of malloca (N * S). It allocates an array of N objects, each with S bytes of memory, on the stack. N and S should be nonnegative and free of side effects. The array must be freed using freea() before the function returns. */ #define nmalloca(n, s) \ (xalloc_oversized (n, s) ? NULL : malloca ((n) * (size_t) (s))) #ifdef __cplusplus } #endif /* ------------------- Auxiliary, non-public definitions ------------------- */ /* Determine the alignment of a type at compile time. */ #if defined __GNUC__ || defined __clang__ || defined __IBM__ALIGNOF__ # define sa_alignof __alignof__ #elif defined __cplusplus template <class type> struct sa_alignof_helper { char __slot1; type __slot2; }; # define sa_alignof(type) offsetof (sa_alignof_helper<type>, __slot2) #elif defined __hpux /* Work around a HP-UX 10.20 cc bug with enums constants defined as offsetof values. */ # define sa_alignof(type) (sizeof (type) <= 4 ? 4 : 8) #elif defined _AIX /* Work around an AIX 3.2.5 xlc bug with enums constants defined as offsetof values. */ # define sa_alignof(type) (sizeof (type) <= 4 ? 4 : 8) #else # define sa_alignof(type) offsetof (struct { char __slot1; type __slot2; }, __slot2) #endif enum { /* The desired alignment of memory allocations is the maximum alignment among all elementary types. */ sa_alignment_long = sa_alignof (long), sa_alignment_double = sa_alignof (double), sa_alignment_longlong = sa_alignof (long long), sa_alignment_longdouble = sa_alignof (long double), sa_alignment_max = ((sa_alignment_long - 1) | (sa_alignment_double - 1) | (sa_alignment_longlong - 1) | (sa_alignment_longdouble - 1) ) + 1 }; #endif /* _MALLOCA_H */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/msvc-nothrow.h�������������������������������������������������������������������������0000644�0001750�0001750�00000003232�14436425346�015751� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Wrappers that don't throw invalid parameter notifications with MSVC runtime libraries. Copyright (C) 2011-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _MSVC_NOTHROW_H #define _MSVC_NOTHROW_H /* With MSVC runtime libraries with the "invalid parameter handler" concept, functions like fprintf(), dup2(), or close() crash when the caller passes an invalid argument. But POSIX wants error codes (such as EINVAL or EBADF) instead. This file defines wrappers that turn such an invalid parameter notification into an error code. */ /* This file uses HAVE_MSVC_INVALID_PARAMETER_HANDLER. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif #if defined _WIN32 && ! defined __CYGWIN__ /* Get original declaration of _get_osfhandle. */ # include <io.h> # if HAVE_MSVC_INVALID_PARAMETER_HANDLER /* Override _get_osfhandle. */ extern intptr_t _gl_nothrow_get_osfhandle (int fd); # define _get_osfhandle _gl_nothrow_get_osfhandle # endif #endif #endif /* _MSVC_NOTHROW_H */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/langinfo.in.h��������������������������������������������������������������������������0000644�0001750�0001750�00000015366�14436425345�015517� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Substitute for and wrapper around <langinfo.h>. Copyright (C) 2009-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* * POSIX <langinfo.h> for platforms that lack it or have an incomplete one. * <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/langinfo.h.html> */ #ifndef _@GUARD_PREFIX@_LANGINFO_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* The include_next requires a split double-inclusion guard. */ #if @HAVE_LANGINFO_H@ # @INCLUDE_NEXT@ @NEXT_LANGINFO_H@ #endif #ifndef _@GUARD_PREFIX@_LANGINFO_H #define _@GUARD_PREFIX@_LANGINFO_H /* This file uses GNULIB_POSIXCHECK, HAVE_RAW_DECL_*. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif #if !@HAVE_LANGINFO_H@ /* A platform that lacks <langinfo.h>. */ /* Assume that it also lacks <nl_types.h> and the nl_item type. */ # if !GNULIB_defined_nl_item typedef int nl_item; # define GNULIB_defined_nl_item 1 # endif /* nl_langinfo items of the LC_CTYPE category */ # define CODESET 10000 /* nl_langinfo items of the LC_NUMERIC category */ # define RADIXCHAR 10001 # define DECIMAL_POINT RADIXCHAR # define THOUSEP 10002 # define THOUSANDS_SEP THOUSEP # define GROUPING 10114 /* nl_langinfo items of the LC_TIME category */ # define D_T_FMT 10003 # define D_FMT 10004 # define T_FMT 10005 # define T_FMT_AMPM 10006 # define AM_STR 10007 # define PM_STR 10008 # define DAY_1 10009 # define DAY_2 (DAY_1 + 1) # define DAY_3 (DAY_1 + 2) # define DAY_4 (DAY_1 + 3) # define DAY_5 (DAY_1 + 4) # define DAY_6 (DAY_1 + 5) # define DAY_7 (DAY_1 + 6) # define ABDAY_1 10016 # define ABDAY_2 (ABDAY_1 + 1) # define ABDAY_3 (ABDAY_1 + 2) # define ABDAY_4 (ABDAY_1 + 3) # define ABDAY_5 (ABDAY_1 + 4) # define ABDAY_6 (ABDAY_1 + 5) # define ABDAY_7 (ABDAY_1 + 6) # define MON_1 10023 # define MON_2 (MON_1 + 1) # define MON_3 (MON_1 + 2) # define MON_4 (MON_1 + 3) # define MON_5 (MON_1 + 4) # define MON_6 (MON_1 + 5) # define MON_7 (MON_1 + 6) # define MON_8 (MON_1 + 7) # define MON_9 (MON_1 + 8) # define MON_10 (MON_1 + 9) # define MON_11 (MON_1 + 10) # define MON_12 (MON_1 + 11) # define ALTMON_1 10200 # define ALTMON_2 (ALTMON_1 + 1) # define ALTMON_3 (ALTMON_1 + 2) # define ALTMON_4 (ALTMON_1 + 3) # define ALTMON_5 (ALTMON_1 + 4) # define ALTMON_6 (ALTMON_1 + 5) # define ALTMON_7 (ALTMON_1 + 6) # define ALTMON_8 (ALTMON_1 + 7) # define ALTMON_9 (ALTMON_1 + 8) # define ALTMON_10 (ALTMON_1 + 9) # define ALTMON_11 (ALTMON_1 + 10) # define ALTMON_12 (ALTMON_1 + 11) # define ABMON_1 10035 # define ABMON_2 (ABMON_1 + 1) # define ABMON_3 (ABMON_1 + 2) # define ABMON_4 (ABMON_1 + 3) # define ABMON_5 (ABMON_1 + 4) # define ABMON_6 (ABMON_1 + 5) # define ABMON_7 (ABMON_1 + 6) # define ABMON_8 (ABMON_1 + 7) # define ABMON_9 (ABMON_1 + 8) # define ABMON_10 (ABMON_1 + 9) # define ABMON_11 (ABMON_1 + 10) # define ABMON_12 (ABMON_1 + 11) # define ERA 10047 # define ERA_D_FMT 10048 # define ERA_D_T_FMT 10049 # define ERA_T_FMT 10050 # define ALT_DIGITS 10051 /* nl_langinfo items of the LC_MONETARY category */ # define CRNCYSTR 10052 # define CURRENCY_SYMBOL CRNCYSTR # define INT_CURR_SYMBOL 10100 # define MON_DECIMAL_POINT 10101 # define MON_THOUSANDS_SEP 10102 # define MON_GROUPING 10103 # define POSITIVE_SIGN 10104 # define NEGATIVE_SIGN 10105 # define FRAC_DIGITS 10106 # define INT_FRAC_DIGITS 10107 # define P_CS_PRECEDES 10108 # define N_CS_PRECEDES 10109 # define P_SEP_BY_SPACE 10110 # define N_SEP_BY_SPACE 10111 # define P_SIGN_POSN 10112 # define N_SIGN_POSN 10113 /* nl_langinfo items of the LC_MESSAGES category */ # define YESEXPR 10053 # define NOEXPR 10054 #else /* A platform that has <langinfo.h>. */ # if !@HAVE_LANGINFO_CODESET@ # define CODESET 10000 # define GNULIB_defined_CODESET 1 # endif # if !@HAVE_LANGINFO_T_FMT_AMPM@ # define T_FMT_AMPM 10006 # define GNULIB_defined_T_FMT_AMPM 1 # endif # if !@HAVE_LANGINFO_ALTMON@ # define ALTMON_1 10200 # define ALTMON_2 (ALTMON_1 + 1) # define ALTMON_3 (ALTMON_1 + 2) # define ALTMON_4 (ALTMON_1 + 3) # define ALTMON_5 (ALTMON_1 + 4) # define ALTMON_6 (ALTMON_1 + 5) # define ALTMON_7 (ALTMON_1 + 6) # define ALTMON_8 (ALTMON_1 + 7) # define ALTMON_9 (ALTMON_1 + 8) # define ALTMON_10 (ALTMON_1 + 9) # define ALTMON_11 (ALTMON_1 + 10) # define ALTMON_12 (ALTMON_1 + 11) # define GNULIB_defined_ALTMON 1 # endif # if !@HAVE_LANGINFO_ERA@ # define ERA 10047 # define ERA_D_FMT 10048 # define ERA_D_T_FMT 10049 # define ERA_T_FMT 10050 # define ALT_DIGITS 10051 # define GNULIB_defined_ERA 1 # endif # if !@HAVE_LANGINFO_YESEXPR@ # define YESEXPR 10053 # define NOEXPR 10054 # define GNULIB_defined_YESEXPR 1 # endif #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* Declare overridden functions. */ /* Return a piece of locale dependent information. Note: The difference between nl_langinfo (CODESET) and locale_charset () is that the latter normalizes the encoding names to GNU conventions. */ #if @GNULIB_NL_LANGINFO@ # if @REPLACE_NL_LANGINFO@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef nl_langinfo # define nl_langinfo rpl_nl_langinfo # endif _GL_FUNCDECL_RPL (nl_langinfo, char *, (nl_item item)); _GL_CXXALIAS_RPL (nl_langinfo, char *, (nl_item item)); # else # if !@HAVE_NL_LANGINFO@ _GL_FUNCDECL_SYS (nl_langinfo, char *, (nl_item item)); # endif _GL_CXXALIAS_SYS (nl_langinfo, char *, (nl_item item)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (nl_langinfo); # endif #elif defined GNULIB_POSIXCHECK # undef nl_langinfo # if HAVE_RAW_DECL_NL_LANGINFO _GL_WARN_ON_USE (nl_langinfo, "nl_langinfo is not portable - " "use gnulib module nl_langinfo for portability"); # endif #endif #endif /* _@GUARD_PREFIX@_LANGINFO_H */ #endif /* _@GUARD_PREFIX@_LANGINFO_H */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/getopt.in.h����������������������������������������������������������������������������0000644�0001750�0001750�00000004121�14436425345�015207� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Declarations for getopt. Copyright (C) 1989-2023 Free Software Foundation, Inc. This file is part of gnulib. Unlike most of the getopt implementation, it is NOT shared with the GNU C Library, which supplies a different version of this file. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _@GUARD_PREFIX@_GETOPT_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* The include_next requires a split double-inclusion guard. We must also inform the replacement unistd.h to not recursively use <getopt.h>; our definitions will be present soon enough. */ #if @HAVE_GETOPT_H@ # define _GL_SYSTEM_GETOPT # @INCLUDE_NEXT@ @NEXT_GETOPT_H@ # undef _GL_SYSTEM_GETOPT #endif #define _@GUARD_PREFIX@_GETOPT_H 1 /* Standalone applications should #define __GETOPT_PREFIX to an identifier that prefixes the external functions and variables defined in getopt-core.h and getopt-ext.h. When this happens, include the headers that might declare getopt so that they will not cause confusion if included after this file (if the system had <getopt.h>, we have already included it). */ #if defined __GETOPT_PREFIX # if !@HAVE_GETOPT_H@ # define __need_system_stdlib_h # include <stdlib.h> # undef __need_system_stdlib_h # include <stdio.h> # include <unistd.h> # endif #endif /* The definition of _GL_ARG_NONNULL is copied here. */ #include <getopt-cdefs.h> #include <getopt-pfx-core.h> #include <getopt-pfx-ext.h> #endif /* _@GUARD_PREFIX@_GETOPT_H */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/getline.c������������������������������������������������������������������������������0000644�0001750�0001750�00000001730�14436425345�014725� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* getline.c --- Implementation of replacement getline function. Copyright (C) 2005-2007, 2009-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Simon Josefsson. */ #include <config.h> #include <stdio.h> ssize_t getline (char **lineptr, size_t *n, FILE *stream) { return getdelim (lineptr, n, '\n', stream); } ����������������������������������������rush-2.4/gnu/stdckdint.in.h�������������������������������������������������������������������������0000644�0001750�0001750�00000002641�14436425346�015702� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* stdckdint.h -- checked integer arithmetic Copyright 2022-2023 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _GL_STDCKDINT_H #define _GL_STDCKDINT_H #include "intprops-internal.h" /* Store into *R the low-order bits of A + B, A - B, A * B, respectively. Return 1 if the result overflows, 0 otherwise. A, B, and *R can have any integer type other than char, bool, a bit-precise integer type, or an enumeration type. These are like the standard macros introduced in C23, except that arguments should not have side effects. */ #define ckd_add(r, a, b) ((bool) _GL_INT_ADD_WRAPV (a, b, r)) #define ckd_sub(r, a, b) ((bool) _GL_INT_SUBTRACT_WRAPV (a, b, r)) #define ckd_mul(r, a, b) ((bool) _GL_INT_MULTIPLY_WRAPV (a, b, r)) #endif /* _GL_STDCKDINT_H */ �����������������������������������������������������������������������������������������������rush-2.4/gnu/getopt-ext.h���������������������������������������������������������������������������0000644�0001750�0001750�00000005753�14436425345�015414� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Declarations for getopt (GNU extensions). Copyright (C) 1989-2023 Free Software Foundation, Inc. This file is part of the GNU C Library and is also part of gnulib. Patches to this file should be submitted to both projects. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ #ifndef _GETOPT_EXT_H #define _GETOPT_EXT_H 1 /* This header should not be used directly; include getopt.h instead. Unlike most bits headers, it does not have a protective #error, because the guard macro for getopt.h in gnulib is not fixed. */ __BEGIN_DECLS /* Describe the long-named options requested by the application. The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector of 'struct option' terminated by an element containing a name which is zero. The field 'has_arg' is: no_argument (or 0) if the option does not take an argument, required_argument (or 1) if the option requires an argument, optional_argument (or 2) if the option takes an optional argument. If the field 'flag' is not NULL, it points to a variable that is set to the value given in the field 'val' when the option is found, but left unchanged if the option is not found. To have a long-named option do something other than set an 'int' to a compiled-in constant, such as set a value from 'optarg', set the option's 'flag' field to zero and its 'val' field to a nonzero value (the equivalent single-letter option character, if there is one). For long options that have a zero 'flag' field, 'getopt' returns the contents of the 'val' field. */ struct option { const char *name; /* has_arg can't be an enum because some compilers complain about type mismatches in all the code that assumes it is an int. */ int has_arg; int *flag; int val; }; /* Names for the values of the 'has_arg' field of 'struct option'. */ #define no_argument 0 #define required_argument 1 #define optional_argument 2 extern int getopt_long (int ___argc, char *__getopt_argv_const *___argv, const char *__shortopts, const struct option *__longopts, int *__longind) __THROW _GL_ARG_NONNULL ((2, 3)); extern int getopt_long_only (int ___argc, char *__getopt_argv_const *___argv, const char *__shortopts, const struct option *__longopts, int *__longind) __THROW _GL_ARG_NONNULL ((2, 3)); __END_DECLS #endif /* _GETOPT_EXT_H */ ���������������������rush-2.4/gnu/sys_stat.in.h��������������������������������������������������������������������������0000644�0001750�0001750�00000065461�14436425346�015575� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Provide a more complete sys/stat.h header file. Copyright (C) 2005-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Eric Blake, Paul Eggert, and Jim Meyering. */ /* This file is supposed to be used on platforms where <sys/stat.h> is incomplete. It is intended to provide definitions and prototypes needed by an application. Start with what the system provides. */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* This file uses #include_next of a system file that defines time_t. For the 'year2038' module to work right, <config.h> needs to have been included before. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif #if defined __need_system_sys_stat_h /* Special invocation convention. */ #@INCLUDE_NEXT@ @NEXT_SYS_STAT_H@ #else /* Normal invocation convention. */ #ifndef _@GUARD_PREFIX@_SYS_STAT_H /* Get nlink_t. May also define off_t to a 64-bit type on native Windows. */ #include <sys/types.h> /* Get struct timespec. */ #include <time.h> /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_SYS_STAT_H@ #ifndef _@GUARD_PREFIX@_SYS_STAT_H #define _@GUARD_PREFIX@_SYS_STAT_H /* This file uses GNULIB_POSIXCHECK, HAVE_RAW_DECL_*. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* Before doing "#define mknod rpl_mknod" below, we need to include all headers that may declare mknod(). OS/2 kLIBC declares mknod() in <unistd.h>, not in <sys/stat.h>. */ #ifdef __KLIBC__ # include <unistd.h> #endif /* Before doing "#define mkdir rpl_mkdir" below, we need to include all headers that may declare mkdir(). Native Windows platforms declare mkdir in <io.h> and/or <direct.h>, not in <sys/stat.h>. */ #if defined _WIN32 && ! defined __CYGWIN__ # include <io.h> /* mingw32, mingw64 */ # include <direct.h> /* mingw64, MSVC 9 */ #endif /* Native Windows platforms declare umask() in <io.h>. */ #if 0 && (defined _WIN32 && ! defined __CYGWIN__) # include <io.h> #endif /* Large File Support on native Windows. */ #if @WINDOWS_64_BIT_ST_SIZE@ # define stat _stati64 #endif /* Optionally, override 'struct stat' on native Windows. */ #if @GNULIB_OVERRIDES_STRUCT_STAT@ # undef stat # if @GNULIB_STAT@ # define stat rpl_stat # else /* Provoke a clear link error if stat() is used as a function and module 'stat' is not in use. */ # define stat stat_used_without_requesting_gnulib_module_stat # endif # if !GNULIB_defined_struct_stat struct stat { dev_t st_dev; ino_t st_ino; mode_t st_mode; nlink_t st_nlink; # if 0 uid_t st_uid; # else /* uid_t is not defined by default on native Windows. */ short st_uid; # endif # if 0 gid_t st_gid; # else /* gid_t is not defined by default on native Windows. */ short st_gid; # endif dev_t st_rdev; off_t st_size; # if 0 blksize_t st_blksize; blkcnt_t st_blocks; # endif # if @WINDOWS_STAT_TIMESPEC@ struct timespec st_atim; struct timespec st_mtim; struct timespec st_ctim; # else time_t st_atime; time_t st_mtime; time_t st_ctime; # endif }; # if @WINDOWS_STAT_TIMESPEC@ # define st_atime st_atim.tv_sec # define st_mtime st_mtim.tv_sec # define st_ctime st_ctim.tv_sec /* Indicator, for gnulib internal purposes. */ # define _GL_WINDOWS_STAT_TIMESPEC 1 # endif # define GNULIB_defined_struct_stat 1 # endif /* Other possible values of st_mode. */ # if 0 # define _S_IFBLK 0x6000 # endif # if 0 # define _S_IFLNK 0xA000 # endif # if 0 # define _S_IFSOCK 0xC000 # endif #endif #ifndef S_IFIFO # ifdef _S_IFIFO # define S_IFIFO _S_IFIFO # endif #endif #ifndef S_IFMT # define S_IFMT 0170000 #endif #if STAT_MACROS_BROKEN # undef S_ISBLK # undef S_ISCHR # undef S_ISDIR # undef S_ISFIFO # undef S_ISLNK # undef S_ISNAM # undef S_ISMPB # undef S_ISMPC # undef S_ISNWK # undef S_ISREG # undef S_ISSOCK #endif #ifndef S_ISBLK # ifdef S_IFBLK # define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK) # else # define S_ISBLK(m) 0 # endif #endif #ifndef S_ISCHR # ifdef S_IFCHR # define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR) # else # define S_ISCHR(m) 0 # endif #endif #ifndef S_ISDIR # ifdef S_IFDIR # define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) # else # define S_ISDIR(m) 0 # endif #endif #ifndef S_ISDOOR /* Solaris 2.5 and up */ # define S_ISDOOR(m) 0 #endif #ifndef S_ISFIFO # ifdef S_IFIFO # define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO) # else # define S_ISFIFO(m) 0 # endif #endif #ifndef S_ISLNK # ifdef S_IFLNK # define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK) # else # define S_ISLNK(m) 0 # endif #endif #ifndef S_ISMPB /* V7 */ # ifdef S_IFMPB # define S_ISMPB(m) (((m) & S_IFMT) == S_IFMPB) # define S_ISMPC(m) (((m) & S_IFMT) == S_IFMPC) # else # define S_ISMPB(m) 0 # define S_ISMPC(m) 0 # endif #endif #ifndef S_ISMPX /* AIX */ # define S_ISMPX(m) 0 #endif #ifndef S_ISNAM /* Xenix */ # ifdef S_IFNAM # define S_ISNAM(m) (((m) & S_IFMT) == S_IFNAM) # else # define S_ISNAM(m) 0 # endif #endif #ifndef S_ISNWK /* HP/UX */ # ifdef S_IFNWK # define S_ISNWK(m) (((m) & S_IFMT) == S_IFNWK) # else # define S_ISNWK(m) 0 # endif #endif #ifndef S_ISPORT /* Solaris 10 and up */ # define S_ISPORT(m) 0 #endif #ifndef S_ISREG # ifdef S_IFREG # define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) # else # define S_ISREG(m) 0 # endif #endif #ifndef S_ISSOCK # ifdef S_IFSOCK # define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK) # else # define S_ISSOCK(m) 0 # endif #endif #ifndef S_TYPEISMQ # define S_TYPEISMQ(p) 0 #endif #ifndef S_TYPEISTMO # define S_TYPEISTMO(p) 0 #endif #ifndef S_TYPEISSEM # ifdef S_INSEM # define S_TYPEISSEM(p) (S_ISNAM ((p)->st_mode) && (p)->st_rdev == S_INSEM) # else # define S_TYPEISSEM(p) 0 # endif #endif #ifndef S_TYPEISSHM # ifdef S_INSHD # define S_TYPEISSHM(p) (S_ISNAM ((p)->st_mode) && (p)->st_rdev == S_INSHD) # else # define S_TYPEISSHM(p) 0 # endif #endif /* high performance ("contiguous data") */ #ifndef S_ISCTG # define S_ISCTG(p) 0 #endif /* Cray DMF (data migration facility): off line, with data */ #ifndef S_ISOFD # define S_ISOFD(p) 0 #endif /* Cray DMF (data migration facility): off line, with no data */ #ifndef S_ISOFL # define S_ISOFL(p) 0 #endif /* 4.4BSD whiteout */ #ifndef S_ISWHT # define S_ISWHT(m) 0 #endif /* If any of the following are undefined, define them to their de facto standard values. */ #if !S_ISUID # define S_ISUID 04000 #endif #if !S_ISGID # define S_ISGID 02000 #endif /* S_ISVTX is a common extension to POSIX. */ #ifndef S_ISVTX # define S_ISVTX 01000 #endif #if !S_IRUSR && S_IREAD # define S_IRUSR S_IREAD #endif #if !S_IRUSR # define S_IRUSR 00400 #endif #if !S_IRGRP # define S_IRGRP (S_IRUSR >> 3) #endif #if !S_IROTH # define S_IROTH (S_IRUSR >> 6) #endif #if !S_IWUSR && S_IWRITE # define S_IWUSR S_IWRITE #endif #if !S_IWUSR # define S_IWUSR 00200 #endif #if !S_IWGRP # define S_IWGRP (S_IWUSR >> 3) #endif #if !S_IWOTH # define S_IWOTH (S_IWUSR >> 6) #endif #if !S_IXUSR && S_IEXEC # define S_IXUSR S_IEXEC #endif #if !S_IXUSR # define S_IXUSR 00100 #endif #if !S_IXGRP # define S_IXGRP (S_IXUSR >> 3) #endif #if !S_IXOTH # define S_IXOTH (S_IXUSR >> 6) #endif #if !S_IRWXU # define S_IRWXU (S_IRUSR | S_IWUSR | S_IXUSR) #endif #if !S_IRWXG # define S_IRWXG (S_IRGRP | S_IWGRP | S_IXGRP) #endif #if !S_IRWXO # define S_IRWXO (S_IROTH | S_IWOTH | S_IXOTH) #endif /* Although S_IXUGO and S_IRWXUGO are not specified by POSIX and are not implemented in GNU/Linux, some Gnulib-using apps use the macros. */ #if !S_IXUGO # define S_IXUGO (S_IXUSR | S_IXGRP | S_IXOTH) #endif #ifndef S_IRWXUGO # define S_IRWXUGO (S_IRWXU | S_IRWXG | S_IRWXO) #endif /* Macros for futimens and utimensat. */ #ifndef UTIME_NOW # define UTIME_NOW (-1) # define UTIME_OMIT (-2) #endif #if @GNULIB_CHMOD@ # if @REPLACE_CHMOD@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef chmod # define chmod rpl_chmod # endif _GL_FUNCDECL_RPL (chmod, int, (const char *filename, mode_t mode) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (chmod, int, (const char *filename, mode_t mode)); # elif defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef chmod # define chmod _chmod # endif /* Need to cast, because in mingw the last argument is 'int mode'. */ _GL_CXXALIAS_MDA_CAST (chmod, int, (const char *filename, mode_t mode)); # else _GL_CXXALIAS_SYS (chmod, int, (const char *filename, mode_t mode)); # endif _GL_CXXALIASWARN (chmod); #elif defined GNULIB_POSIXCHECK # undef chmod # if HAVE_RAW_DECL_CHMOD _GL_WARN_ON_USE (chmod, "chmod has portability problems - " "use gnulib module chmod for portability"); # endif #elif @GNULIB_MDA_CHMOD@ /* On native Windows, map 'chmod' to '_chmod', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::chmod always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef chmod # define chmod _chmod # endif /* Need to cast, because in mingw the last argument is 'int mode'. */ _GL_CXXALIAS_MDA_CAST (chmod, int, (const char *filename, mode_t mode)); # else _GL_CXXALIAS_SYS (chmod, int, (const char *filename, mode_t mode)); # endif _GL_CXXALIASWARN (chmod); #endif #if @GNULIB_FCHMODAT@ # if @REPLACE_FCHMODAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fchmodat # define fchmodat rpl_fchmodat # endif _GL_FUNCDECL_RPL (fchmodat, int, (int fd, char const *file, mode_t mode, int flag) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (fchmodat, int, (int fd, char const *file, mode_t mode, int flag)); # else # if !@HAVE_FCHMODAT@ _GL_FUNCDECL_SYS (fchmodat, int, (int fd, char const *file, mode_t mode, int flag) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (fchmodat, int, (int fd, char const *file, mode_t mode, int flag)); # endif _GL_CXXALIASWARN (fchmodat); #elif defined GNULIB_POSIXCHECK # undef fchmodat # if HAVE_RAW_DECL_FCHMODAT _GL_WARN_ON_USE (fchmodat, "fchmodat is not portable - " "use gnulib module openat for portability"); # endif #endif #if @GNULIB_FSTAT@ # if @REPLACE_FSTAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fstat # define fstat rpl_fstat # endif _GL_FUNCDECL_RPL (fstat, int, (int fd, struct stat *buf) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (fstat, int, (int fd, struct stat *buf)); # else _GL_CXXALIAS_SYS (fstat, int, (int fd, struct stat *buf)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (fstat); # endif #elif @GNULIB_OVERRIDES_STRUCT_STAT@ # undef fstat # define fstat fstat_used_without_requesting_gnulib_module_fstat #elif @WINDOWS_64_BIT_ST_SIZE@ /* Above, we define stat to _stati64. */ # define fstat _fstati64 #elif defined GNULIB_POSIXCHECK # undef fstat # if HAVE_RAW_DECL_FSTAT _GL_WARN_ON_USE (fstat, "fstat has portability problems - " "use gnulib module fstat for portability"); # endif #endif #if @GNULIB_FSTATAT@ # if @REPLACE_FSTATAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fstatat # define fstatat rpl_fstatat # endif _GL_FUNCDECL_RPL (fstatat, int, (int fd, char const *restrict name, struct stat *restrict st, int flags) _GL_ARG_NONNULL ((2, 3))); _GL_CXXALIAS_RPL (fstatat, int, (int fd, char const *restrict name, struct stat *restrict st, int flags)); # else # if !@HAVE_FSTATAT@ _GL_FUNCDECL_SYS (fstatat, int, (int fd, char const *restrict name, struct stat *restrict st, int flags) _GL_ARG_NONNULL ((2, 3))); # endif _GL_CXXALIAS_SYS (fstatat, int, (int fd, char const *restrict name, struct stat *restrict st, int flags)); # endif _GL_CXXALIASWARN (fstatat); #elif @GNULIB_OVERRIDES_STRUCT_STAT@ # undef fstatat # define fstatat fstatat_used_without_requesting_gnulib_module_fstatat #elif defined GNULIB_POSIXCHECK # undef fstatat # if HAVE_RAW_DECL_FSTATAT _GL_WARN_ON_USE (fstatat, "fstatat is not portable - " "use gnulib module openat for portability"); # endif #endif #if @GNULIB_FUTIMENS@ /* Use the rpl_ prefix also on Solaris <= 9, because on Solaris 9 our futimens implementation relies on futimesat, which on Solaris 10 makes an invocation to futimens that is meant to invoke the libc's futimens(), not gnulib's futimens(). */ # if @REPLACE_FUTIMENS@ || (!@HAVE_FUTIMENS@ && defined __sun) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef futimens # define futimens rpl_futimens # endif _GL_FUNCDECL_RPL (futimens, int, (int fd, struct timespec const times[2])); _GL_CXXALIAS_RPL (futimens, int, (int fd, struct timespec const times[2])); # else # if !@HAVE_FUTIMENS@ _GL_FUNCDECL_SYS (futimens, int, (int fd, struct timespec const times[2])); # endif _GL_CXXALIAS_SYS (futimens, int, (int fd, struct timespec const times[2])); # endif # if __GLIBC__ >= 2 && @HAVE_FUTIMENS@ _GL_CXXALIASWARN (futimens); # endif #elif defined GNULIB_POSIXCHECK # undef futimens # if HAVE_RAW_DECL_FUTIMENS _GL_WARN_ON_USE (futimens, "futimens is not portable - " "use gnulib module futimens for portability"); # endif #endif #if @GNULIB_GETUMASK@ # if !@HAVE_GETUMASK@ _GL_FUNCDECL_SYS (getumask, mode_t, (void)); # endif _GL_CXXALIAS_SYS (getumask, mode_t, (void)); # if @HAVE_GETUMASK@ _GL_CXXALIASWARN (getumask); # endif #elif defined GNULIB_POSIXCHECK # undef getumask # if HAVE_RAW_DECL_GETUMASK _GL_WARN_ON_USE (getumask, "getumask is not portable - " "use gnulib module getumask for portability"); # endif #endif #if @GNULIB_LCHMOD@ /* Change the mode of FILENAME to MODE, without dereferencing it if FILENAME denotes a symbolic link. */ # if !@HAVE_LCHMOD@ || defined __hpux _GL_FUNCDECL_SYS (lchmod, int, (const char *filename, mode_t mode) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (lchmod, int, (const char *filename, mode_t mode)); _GL_CXXALIASWARN (lchmod); #elif defined GNULIB_POSIXCHECK # undef lchmod # if HAVE_RAW_DECL_LCHMOD _GL_WARN_ON_USE (lchmod, "lchmod is unportable - " "use gnulib module lchmod for portability"); # endif #endif #if @GNULIB_MKDIR@ # if @REPLACE_MKDIR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mkdir # define mkdir rpl_mkdir # endif _GL_FUNCDECL_RPL (mkdir, int, (char const *name, mode_t mode) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (mkdir, int, (char const *name, mode_t mode)); # elif defined _WIN32 && !defined __CYGWIN__ /* mingw's _mkdir() function has 1 argument, but we pass 2 arguments. Additionally, it declares _mkdir (and depending on compile flags, an alias mkdir), only in the nonstandard includes <direct.h> and <io.h>, which are included above. */ # if !GNULIB_defined_rpl_mkdir static int rpl_mkdir (char const *name, mode_t mode) { return _mkdir (name); } # define GNULIB_defined_rpl_mkdir 1 # endif # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mkdir # define mkdir rpl_mkdir # endif _GL_CXXALIAS_RPL (mkdir, int, (char const *name, mode_t mode)); # else _GL_CXXALIAS_SYS (mkdir, int, (char const *name, mode_t mode)); # endif _GL_CXXALIASWARN (mkdir); #elif defined GNULIB_POSIXCHECK # undef mkdir # if HAVE_RAW_DECL_MKDIR _GL_WARN_ON_USE (mkdir, "mkdir does not always support two parameters - " "use gnulib module mkdir for portability"); # endif #elif @GNULIB_MDA_MKDIR@ /* On native Windows, map 'mkdir' to '_mkdir', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::mkdir always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !GNULIB_defined_rpl_mkdir static int rpl_mkdir (char const *name, mode_t mode) { return _mkdir (name); } # define GNULIB_defined_rpl_mkdir 1 # endif # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mkdir # define mkdir rpl_mkdir # endif _GL_CXXALIAS_RPL (mkdir, int, (char const *name, mode_t mode)); # else _GL_CXXALIAS_SYS (mkdir, int, (char const *name, mode_t mode)); # endif _GL_CXXALIASWARN (mkdir); #endif #if @GNULIB_MKDIRAT@ # if !@HAVE_MKDIRAT@ _GL_FUNCDECL_SYS (mkdirat, int, (int fd, char const *file, mode_t mode) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (mkdirat, int, (int fd, char const *file, mode_t mode)); _GL_CXXALIASWARN (mkdirat); #elif defined GNULIB_POSIXCHECK # undef mkdirat # if HAVE_RAW_DECL_MKDIRAT _GL_WARN_ON_USE (mkdirat, "mkdirat is not portable - " "use gnulib module openat for portability"); # endif #endif #if @GNULIB_MKFIFO@ # if @REPLACE_MKFIFO@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mkfifo # define mkfifo rpl_mkfifo # endif _GL_FUNCDECL_RPL (mkfifo, int, (char const *file, mode_t mode) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (mkfifo, int, (char const *file, mode_t mode)); # else # if !@HAVE_MKFIFO@ _GL_FUNCDECL_SYS (mkfifo, int, (char const *file, mode_t mode) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (mkfifo, int, (char const *file, mode_t mode)); # endif _GL_CXXALIASWARN (mkfifo); #elif defined GNULIB_POSIXCHECK # undef mkfifo # if HAVE_RAW_DECL_MKFIFO _GL_WARN_ON_USE (mkfifo, "mkfifo is not portable - " "use gnulib module mkfifo for portability"); # endif #endif #if @GNULIB_MKFIFOAT@ # if @REPLACE_MKFIFOAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mkfifoat # define mkfifoat rpl_mkfifoat # endif _GL_FUNCDECL_RPL (mkfifoat, int, (int fd, char const *file, mode_t mode) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (mkfifoat, int, (int fd, char const *file, mode_t mode)); # else # if !@HAVE_MKFIFOAT@ _GL_FUNCDECL_SYS (mkfifoat, int, (int fd, char const *file, mode_t mode) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (mkfifoat, int, (int fd, char const *file, mode_t mode)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (mkfifoat); # endif #elif defined GNULIB_POSIXCHECK # undef mkfifoat # if HAVE_RAW_DECL_MKFIFOAT _GL_WARN_ON_USE (mkfifoat, "mkfifoat is not portable - " "use gnulib module mkfifoat for portability"); # endif #endif #if @GNULIB_MKNOD@ # if @REPLACE_MKNOD@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mknod # define mknod rpl_mknod # endif _GL_FUNCDECL_RPL (mknod, int, (char const *file, mode_t mode, dev_t dev) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (mknod, int, (char const *file, mode_t mode, dev_t dev)); # else # if !@HAVE_MKNOD@ _GL_FUNCDECL_SYS (mknod, int, (char const *file, mode_t mode, dev_t dev) _GL_ARG_NONNULL ((1))); # endif /* Need to cast, because on OSF/1 5.1, the third parameter is '...'. */ _GL_CXXALIAS_SYS_CAST (mknod, int, (char const *file, mode_t mode, dev_t dev)); # endif _GL_CXXALIASWARN (mknod); #elif defined GNULIB_POSIXCHECK # undef mknod # if HAVE_RAW_DECL_MKNOD _GL_WARN_ON_USE (mknod, "mknod is not portable - " "use gnulib module mknod for portability"); # endif #endif #if @GNULIB_MKNODAT@ # if @REPLACE_MKNODAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mknodat # define mknodat rpl_mknodat # endif _GL_FUNCDECL_RPL (mknodat, int, (int fd, char const *file, mode_t mode, dev_t dev) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (mknodat, int, (int fd, char const *file, mode_t mode, dev_t dev)); # else # if !@HAVE_MKNODAT@ _GL_FUNCDECL_SYS (mknodat, int, (int fd, char const *file, mode_t mode, dev_t dev) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (mknodat, int, (int fd, char const *file, mode_t mode, dev_t dev)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (mknodat); # endif #elif defined GNULIB_POSIXCHECK # undef mknodat # if HAVE_RAW_DECL_MKNODAT _GL_WARN_ON_USE (mknodat, "mknodat is not portable - " "use gnulib module mkfifoat for portability"); # endif #endif #if @GNULIB_STAT@ # if @REPLACE_STAT@ # if !@GNULIB_OVERRIDES_STRUCT_STAT@ /* We can't use the object-like #define stat rpl_stat, because of struct stat. This means that rpl_stat will not be used if the user does (stat)(a,b). Oh well. */ # if defined _AIX && defined stat && defined _LARGE_FILES /* With _LARGE_FILES defined, AIX (only) defines stat to stat64, so we have to replace stat64() instead of stat(). */ # undef stat64 # define stat64(name, st) rpl_stat (name, st) # elif @WINDOWS_64_BIT_ST_SIZE@ /* Above, we define stat to _stati64. */ # if defined __MINGW32__ && defined _stati64 # ifndef _USE_32BIT_TIME_T /* The system headers define _stati64 to _stat64. */ # undef _stat64 # define _stat64(name, st) rpl_stat (name, st) # endif # elif defined _MSC_VER && defined _stati64 # ifdef _USE_32BIT_TIME_T /* The system headers define _stati64 to _stat32i64. */ # undef _stat32i64 # define _stat32i64(name, st) rpl_stat (name, st) # else /* The system headers define _stati64 to _stat64. */ # undef _stat64 # define _stat64(name, st) rpl_stat (name, st) # endif # else # undef _stati64 # define _stati64(name, st) rpl_stat (name, st) # endif # elif defined __MINGW32__ && defined stat # ifdef _USE_32BIT_TIME_T /* The system headers define stat to _stat32i64. */ # undef _stat32i64 # define _stat32i64(name, st) rpl_stat (name, st) # else /* The system headers define stat to _stat64. */ # undef _stat64 # define _stat64(name, st) rpl_stat (name, st) # endif # elif defined _MSC_VER && defined stat # ifdef _USE_32BIT_TIME_T /* The system headers define stat to _stat32. */ # undef _stat32 # define _stat32(name, st) rpl_stat (name, st) # else /* The system headers define stat to _stat64i32. */ # undef _stat64i32 # define _stat64i32(name, st) rpl_stat (name, st) # endif # else /* !(_AIX || __MINGW32__ || _MSC_VER) */ # undef stat # define stat(name, st) rpl_stat (name, st) # endif /* !_LARGE_FILES */ # endif /* !@GNULIB_OVERRIDES_STRUCT_STAT@ */ _GL_EXTERN_C int stat (const char *restrict name, struct stat *restrict buf) _GL_ARG_NONNULL ((1, 2)); # endif #elif @GNULIB_OVERRIDES_STRUCT_STAT@ /* see above: #define stat stat_used_without_requesting_gnulib_module_stat */ #elif defined GNULIB_POSIXCHECK # undef stat # if HAVE_RAW_DECL_STAT _GL_WARN_ON_USE (stat, "stat is unportable - " "use gnulib module stat for portability"); # endif #endif #if @GNULIB_LSTAT@ # if ! @HAVE_LSTAT@ /* mingw does not support symlinks, therefore it does not have lstat. But without links, stat does just fine. */ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define lstat stat # endif _GL_CXXALIAS_RPL_1 (lstat, stat, int, (const char *restrict name, struct stat *restrict buf)); # elif @REPLACE_LSTAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef lstat # define lstat rpl_lstat # endif _GL_FUNCDECL_RPL (lstat, int, (const char *restrict name, struct stat *restrict buf) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (lstat, int, (const char *restrict name, struct stat *restrict buf)); # else _GL_CXXALIAS_SYS (lstat, int, (const char *restrict name, struct stat *restrict buf)); # endif # if @HAVE_LSTAT@ _GL_CXXALIASWARN (lstat); # endif #elif @GNULIB_OVERRIDES_STRUCT_STAT@ # undef lstat # define lstat lstat_used_without_requesting_gnulib_module_lstat #elif defined GNULIB_POSIXCHECK # undef lstat # if HAVE_RAW_DECL_LSTAT _GL_WARN_ON_USE (lstat, "lstat is unportable - " "use gnulib module lstat for portability"); # endif #endif #if @GNULIB_MDA_UMASK@ /* On native Windows, map 'umask' to '_umask', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::umask always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef umask # define umask _umask # endif /* Need to cast, because in mingw the last argument is 'int mode'. */ _GL_CXXALIAS_MDA_CAST (umask, mode_t, (mode_t mask)); # else _GL_CXXALIAS_SYS (umask, mode_t, (mode_t mask)); # endif _GL_CXXALIASWARN (umask); #endif #if @GNULIB_UTIMENSAT@ /* Use the rpl_ prefix also on Solaris <= 9, because on Solaris 9 our utimensat implementation relies on futimesat, which on Solaris 10 makes an invocation to utimensat that is meant to invoke the libc's utimensat(), not gnulib's utimensat(). */ # if @REPLACE_UTIMENSAT@ || (!@HAVE_UTIMENSAT@ && defined __sun) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef utimensat # define utimensat rpl_utimensat # endif _GL_FUNCDECL_RPL (utimensat, int, (int fd, char const *name, struct timespec const times[2], int flag) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (utimensat, int, (int fd, char const *name, struct timespec const times[2], int flag)); # else # if !@HAVE_UTIMENSAT@ _GL_FUNCDECL_SYS (utimensat, int, (int fd, char const *name, struct timespec const times[2], int flag) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (utimensat, int, (int fd, char const *name, struct timespec const times[2], int flag)); # endif # if __GLIBC__ >= 2 && @HAVE_UTIMENSAT@ _GL_CXXALIASWARN (utimensat); # endif #elif defined GNULIB_POSIXCHECK # undef utimensat # if HAVE_RAW_DECL_UTIMENSAT _GL_WARN_ON_USE (utimensat, "utimensat is not portable - " "use gnulib module utimensat for portability"); # endif #endif #endif /* _@GUARD_PREFIX@_SYS_STAT_H */ #endif /* _@GUARD_PREFIX@_SYS_STAT_H */ #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/mbrtowc-impl.h�������������������������������������������������������������������������0000644�0001750�0001750�00000016240�14436425346�015722� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert multibyte character to wide character. Copyright (C) 1999-2002, 2005-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2008. */ /* This file contains the body of the mbrtowc and mbrtoc32 functions, when GNULIB_defined_mbstate_t is defined. */ char *pstate = (char *)ps; if (s == NULL) { pwc = NULL; s = ""; n = 1; } if (n == 0) return (size_t)(-2); /* Here n > 0. */ if (pstate == NULL) pstate = internal_state; { size_t nstate = pstate[0]; char buf[4]; const char *p; size_t m; enc_t enc; int res; switch (nstate) { case 0: p = s; m = n; break; case 3: buf[2] = pstate[3]; FALLTHROUGH; case 2: buf[1] = pstate[2]; FALLTHROUGH; case 1: buf[0] = pstate[1]; p = buf; m = nstate; buf[m++] = s[0]; if (n >= 2 && m < 4) { buf[m++] = s[1]; if (n >= 3 && m < 4) buf[m++] = s[2]; } break; default: errno = EINVAL; return (size_t)(-1); } /* Here m > 0. */ enc = locale_encoding_classification (); if (enc == enc_utf8) /* UTF-8 */ { /* Achieve - multi-thread safety and - the ability to produce wide character values > WCHAR_MAX by not calling mbtowc() at all. */ #include "mbrtowc-impl-utf8.h" } else { /* The hidden internal state of mbtowc would make this function not multi-thread safe. Achieve multi-thread safety through a lock. */ wchar_t wc; res = mbtowc_with_lock (&wc, p, m); if (res >= 0) { if ((wc == 0) != (res == 0)) abort (); if (pwc != NULL) *pwc = wc; goto success; } /* mbtowc does not distinguish between invalid and incomplete multibyte sequences. But mbrtowc needs to make this distinction. There are two possible approaches: - Use iconv() and its return value. - Use built-in knowledge about the possible encodings. Given the low quality of implementation of iconv() on the systems that lack mbrtowc(), we use the second approach. The possible encodings are: - 8-bit encodings, - EUC-JP, EUC-KR, GB2312, EUC-TW, BIG5, GB18030, SJIS, - UTF-8 (already handled above). Use specialized code for each. */ if (m >= 4 || m >= MB_CUR_MAX) goto invalid; /* Here MB_CUR_MAX > 1 and 0 < m < 4. */ switch (enc) { /* As a reference for this code, you can use the GNU libiconv implementation. Look for uses of the RET_TOOFEW macro. */ case enc_eucjp: /* EUC-JP */ { if (m == 1) { unsigned char c = (unsigned char) p[0]; if ((c >= 0xa1 && c < 0xff) || c == 0x8e || c == 0x8f) goto incomplete; } if (m == 2) { unsigned char c = (unsigned char) p[0]; if (c == 0x8f) { unsigned char c2 = (unsigned char) p[1]; if (c2 >= 0xa1 && c2 < 0xff) goto incomplete; } } goto invalid; } case enc_94: /* EUC-KR, GB2312, BIG5 */ { if (m == 1) { unsigned char c = (unsigned char) p[0]; if (c >= 0xa1 && c < 0xff) goto incomplete; } goto invalid; } case enc_euctw: /* EUC-TW */ { if (m == 1) { unsigned char c = (unsigned char) p[0]; if ((c >= 0xa1 && c < 0xff) || c == 0x8e) goto incomplete; } else /* m == 2 || m == 3 */ { unsigned char c = (unsigned char) p[0]; if (c == 0x8e) goto incomplete; } goto invalid; } case enc_gb18030: /* GB18030 */ { if (m == 1) { unsigned char c = (unsigned char) p[0]; if ((c >= 0x90 && c <= 0xe3) || (c >= 0xf8 && c <= 0xfe)) goto incomplete; } else /* m == 2 || m == 3 */ { unsigned char c = (unsigned char) p[0]; if (c >= 0x90 && c <= 0xe3) { unsigned char c2 = (unsigned char) p[1]; if (c2 >= 0x30 && c2 <= 0x39) { if (m == 2) goto incomplete; else /* m == 3 */ { unsigned char c3 = (unsigned char) p[2]; if (c3 >= 0x81 && c3 <= 0xfe) goto incomplete; } } } } goto invalid; } case enc_sjis: /* SJIS */ { if (m == 1) { unsigned char c = (unsigned char) p[0]; if ((c >= 0x81 && c <= 0x9f) || (c >= 0xe0 && c <= 0xea) || (c >= 0xf0 && c <= 0xf9)) goto incomplete; } goto invalid; } default: /* An unknown multibyte encoding. */ goto incomplete; } } success: /* res >= 0 is the corrected return value of mbtowc_with_lock (&wc, p, m). */ if (nstate >= (res > 0 ? res : 1)) abort (); res -= nstate; pstate[0] = 0; return res; incomplete: { size_t k = nstate; /* Here 0 <= k < m < 4. */ pstate[++k] = s[0]; if (k < m) { pstate[++k] = s[1]; if (k < m) pstate[++k] = s[2]; } if (k != m) abort (); } pstate[0] = m; return (size_t)(-2); invalid: errno = EILSEQ; /* The conversion state is undefined, says POSIX. */ return (size_t)(-1); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/fprintftime.c��������������������������������������������������������������������������0000644�0001750�0001750�00000001434�14436425345�015626� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Generate time strings directly to the output. Copyright (C) 2005-2023 Free Software Foundation, Inc. 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 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 <https://www.gnu.org/licenses/>. */ #define FPRINTFTIME 1 #include "nstrftime.c" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/limits.in.h����������������������������������������������������������������������������0000644�0001750�0001750�00000011701�14436425346�015211� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A GNU-like <limits.h>. Copyright 2016-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if defined _GL_ALREADY_INCLUDING_LIMITS_H /* Special invocation convention: On Haiku/x86_64, we have a sequence of nested includes <limits.h> -> <syslimits.h> -> <limits.h>. In this situation, LONG_MAX and INT_MAX are not yet defined, therefore we should not attempt to define LONG_BIT. */ #@INCLUDE_NEXT@ @NEXT_LIMITS_H@ #else /* Normal invocation convention. */ #ifndef _@GUARD_PREFIX@_LIMITS_H # define _GL_ALREADY_INCLUDING_LIMITS_H /* The include_next requires a split double-inclusion guard. */ # @INCLUDE_NEXT@ @NEXT_LIMITS_H@ # undef _GL_ALREADY_INCLUDING_LIMITS_H #ifndef _@GUARD_PREFIX@_LIMITS_H #define _@GUARD_PREFIX@_LIMITS_H #ifndef LLONG_MIN # if defined LONG_LONG_MIN /* HP-UX 11.31 */ # define LLONG_MIN LONG_LONG_MIN # elif defined LONGLONG_MIN /* IRIX 6.5 */ # define LLONG_MIN LONGLONG_MIN # elif defined __GNUC__ # define LLONG_MIN (- __LONG_LONG_MAX__ - 1LL) # endif #endif #ifndef LLONG_MAX # if defined LONG_LONG_MAX /* HP-UX 11.31 */ # define LLONG_MAX LONG_LONG_MAX # elif defined LONGLONG_MAX /* IRIX 6.5 */ # define LLONG_MAX LONGLONG_MAX # elif defined __GNUC__ # define LLONG_MAX __LONG_LONG_MAX__ # endif #endif #ifndef ULLONG_MAX # if defined ULONG_LONG_MAX /* HP-UX 11.31 */ # define ULLONG_MAX ULONG_LONG_MAX # elif defined ULONGLONG_MAX /* IRIX 6.5 */ # define ULLONG_MAX ULONGLONG_MAX # elif defined __GNUC__ # define ULLONG_MAX (__LONG_LONG_MAX__ * 2ULL + 1ULL) # endif #endif /* The number of usable bits in an unsigned or signed integer type with minimum value MIN and maximum value MAX, as an int expression suitable in #if. Cover all known practical hosts. This implementation exploits the fact that MAX is 1 less than a power of 2, and merely counts the number of 1 bits in MAX; "COBn" means "count the number of 1 bits in the low-order n bits"). */ #define _GL_INTEGER_WIDTH(min, max) (((min) < 0) + _GL_COB128 (max)) #define _GL_COB128(n) (_GL_COB64 ((n) >> 31 >> 31 >> 2) + _GL_COB64 (n)) #define _GL_COB64(n) (_GL_COB32 ((n) >> 31 >> 1) + _GL_COB32 (n)) #define _GL_COB32(n) (_GL_COB16 ((n) >> 16) + _GL_COB16 (n)) #define _GL_COB16(n) (_GL_COB8 ((n) >> 8) + _GL_COB8 (n)) #define _GL_COB8(n) (_GL_COB4 ((n) >> 4) + _GL_COB4 (n)) #define _GL_COB4(n) (!!((n) & 8) + !!((n) & 4) + !!((n) & 2) + !!((n) & 1)) #ifndef WORD_BIT /* Assume 'int' is 32 bits wide. */ # define WORD_BIT 32 #endif #ifndef LONG_BIT /* Assume 'long' is 32 or 64 bits wide. */ # if LONG_MAX == INT_MAX # define LONG_BIT 32 # else # define LONG_BIT 64 # endif #endif /* Assume no multibyte character is longer than 16 bytes. */ #ifndef MB_LEN_MAX # define MB_LEN_MAX 16 #endif /* Macros specified by C23 and by ISO/IEC TS 18661-1:2014. */ #if (! defined ULLONG_WIDTH \ && (defined _GNU_SOURCE || defined __STDC_WANT_IEC_60559_BFP_EXT__ \ || (defined __STDC_VERSION__ && 201710 < __STDC_VERSION__))) # define CHAR_WIDTH _GL_INTEGER_WIDTH (CHAR_MIN, CHAR_MAX) # define SCHAR_WIDTH _GL_INTEGER_WIDTH (SCHAR_MIN, SCHAR_MAX) # define UCHAR_WIDTH _GL_INTEGER_WIDTH (0, UCHAR_MAX) # define SHRT_WIDTH _GL_INTEGER_WIDTH (SHRT_MIN, SHRT_MAX) # define USHRT_WIDTH _GL_INTEGER_WIDTH (0, USHRT_MAX) # define INT_WIDTH _GL_INTEGER_WIDTH (INT_MIN, INT_MAX) # define UINT_WIDTH _GL_INTEGER_WIDTH (0, UINT_MAX) # define LONG_WIDTH _GL_INTEGER_WIDTH (LONG_MIN, LONG_MAX) # define ULONG_WIDTH _GL_INTEGER_WIDTH (0, ULONG_MAX) # define LLONG_WIDTH _GL_INTEGER_WIDTH (LLONG_MIN, LLONG_MAX) # define ULLONG_WIDTH _GL_INTEGER_WIDTH (0, ULLONG_MAX) #endif /* Macros specified by C23. */ #if (defined _GNU_SOURCE \ || (defined __STDC_VERSION__ && 201710 < __STDC_VERSION__)) # if ! defined BOOL_WIDTH # define BOOL_WIDTH 1 # define BOOL_MAX 1 # elif ! defined BOOL_MAX # define BOOL_MAX ((((1U << (BOOL_WIDTH - 1)) - 1) << 1) + 1) # endif #endif /* Macro specified by POSIX. */ /* The maximal size_t value. Although it might not be of ssize_t type as it should be, it's too much trouble to fix this minor detail. */ #ifndef SSIZE_MAX # ifdef _WIN64 # define SSIZE_MAX LLONG_MAX # else # define SSIZE_MAX LONG_MAX # endif #endif #endif /* _@GUARD_PREFIX@_LIMITS_H */ #endif /* _@GUARD_PREFIX@_LIMITS_H */ #endif ���������������������������������������������������������������rush-2.4/gnu/intprops-internal.h��������������������������������������������������������������������0000644�0001750�0001750�00000042555�14436425345�017005� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* intprops-internal.h -- properties of integer types not visible to users Copyright (C) 2001-2023 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _GL_INTPROPS_INTERNAL_H #define _GL_INTPROPS_INTERNAL_H #include <limits.h> /* Return a value with the common real type of E and V and the value of V. Do not evaluate E. */ #define _GL_INT_CONVERT(e, v) ((1 ? 0 : (e)) + (v)) /* Act like _GL_INT_CONVERT (E, -V) but work around a bug in IRIX 6.5 cc; see <https://lists.gnu.org/r/bug-gnulib/2011-05/msg00406.html>. */ #define _GL_INT_NEGATE_CONVERT(e, v) ((1 ? 0 : (e)) - (v)) /* The extra casts in the following macros work around compiler bugs, e.g., in Cray C 5.0.3.0. */ /* True if the real type T is signed. */ #define _GL_TYPE_SIGNED(t) (! ((t) 0 < (t) -1)) /* Return 1 if the real expression E, after promotion, has a signed or floating type. Do not evaluate E. */ #define _GL_EXPR_SIGNED(e) (_GL_INT_NEGATE_CONVERT (e, 1) < 0) /* Minimum and maximum values for integer types and expressions. */ /* The width in bits of the integer type or expression T. Do not evaluate T. T must not be a bit-field expression. Padding bits are not supported; this is checked at compile-time below. */ #define _GL_TYPE_WIDTH(t) (sizeof (t) * CHAR_BIT) /* The maximum and minimum values for the type of the expression E, after integer promotion. E is not evaluated. */ #define _GL_INT_MINIMUM(e) \ (_GL_EXPR_SIGNED (e) \ ? ~ _GL_SIGNED_INT_MAXIMUM (e) \ : _GL_INT_CONVERT (e, 0)) #define _GL_INT_MAXIMUM(e) \ (_GL_EXPR_SIGNED (e) \ ? _GL_SIGNED_INT_MAXIMUM (e) \ : _GL_INT_NEGATE_CONVERT (e, 1)) #define _GL_SIGNED_INT_MAXIMUM(e) \ (((_GL_INT_CONVERT (e, 1) << (_GL_TYPE_WIDTH (+ (e)) - 2)) - 1) * 2 + 1) /* Work around OpenVMS incompatibility with C99. */ #if !defined LLONG_MAX && defined __INT64_MAX # define LLONG_MAX __INT64_MAX # define LLONG_MIN __INT64_MIN #endif /* This include file assumes that signed types are two's complement without padding bits; the above macros have undefined behavior otherwise. If this is a problem for you, please let us know how to fix it for your host. This assumption is tested by the intprops-tests module. */ /* Does the __typeof__ keyword work? This could be done by 'configure', but for now it's easier to do it by hand. */ #if (2 <= __GNUC__ \ || (4 <= __clang_major__) \ || (1210 <= __IBMC__ && defined __IBM__TYPEOF__) \ || (0x5110 <= __SUNPRO_C && !__STDC__)) # define _GL_HAVE___TYPEOF__ 1 #else # define _GL_HAVE___TYPEOF__ 0 #endif /* Return 1 if the integer type or expression T might be signed. Return 0 if it is definitely unsigned. T must not be a bit-field expression. This macro does not evaluate its argument, and expands to an integer constant expression. */ #if _GL_HAVE___TYPEOF__ # define _GL_SIGNED_TYPE_OR_EXPR(t) _GL_TYPE_SIGNED (__typeof__ (t)) #else # define _GL_SIGNED_TYPE_OR_EXPR(t) 1 #endif /* Return 1 if - A would overflow in [MIN,MAX] arithmetic. A should not have side effects, and A's type should be an integer with minimum value MIN and maximum MAX. */ #define _GL_INT_NEGATE_RANGE_OVERFLOW(a, min, max) \ ((min) < 0 ? (a) < - (max) : 0 < (a)) /* True if __builtin_add_overflow (A, B, P) and __builtin_sub_overflow (A, B, P) work when P is non-null. */ #ifdef __EDG__ /* EDG-based compilers like nvc 22.1 cannot add 64-bit signed to unsigned <https://bugs.gnu.org/53256>. */ # define _GL_HAS_BUILTIN_ADD_OVERFLOW 0 #elif defined __has_builtin # define _GL_HAS_BUILTIN_ADD_OVERFLOW __has_builtin (__builtin_add_overflow) /* __builtin_{add,sub}_overflow exists but is not reliable in GCC 5.x and 6.x, see <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98269>. */ #elif 7 <= __GNUC__ # define _GL_HAS_BUILTIN_ADD_OVERFLOW 1 #else # define _GL_HAS_BUILTIN_ADD_OVERFLOW 0 #endif /* True if __builtin_mul_overflow (A, B, P) works when P is non-null. */ #if defined __clang_major__ && __clang_major__ < 14 /* Work around Clang bug <https://bugs.llvm.org/show_bug.cgi?id=16404>. */ # define _GL_HAS_BUILTIN_MUL_OVERFLOW 0 #else # define _GL_HAS_BUILTIN_MUL_OVERFLOW _GL_HAS_BUILTIN_ADD_OVERFLOW #endif /* True if __builtin_add_overflow_p (A, B, C) works, and similarly for __builtin_sub_overflow_p and __builtin_mul_overflow_p. */ #ifdef __EDG__ /* In EDG-based compilers like ICC 2021.3 and earlier, __builtin_add_overflow_p etc. are not treated as integral constant expressions even when all arguments are. */ # define _GL_HAS_BUILTIN_OVERFLOW_P 0 #elif defined __has_builtin # define _GL_HAS_BUILTIN_OVERFLOW_P __has_builtin (__builtin_mul_overflow_p) #else # define _GL_HAS_BUILTIN_OVERFLOW_P (7 <= __GNUC__) #endif #if (!defined _GL_STDCKDINT_H && 202311 <= __STDC_VERSION__ \ && ! (_GL_HAS_BUILTIN_ADD_OVERFLOW && _GL_HAS_BUILTIN_MUL_OVERFLOW)) # include <stdckdint.h> #endif /* Store the low-order bits of A + B, A - B, A * B, respectively, into *R. Return 1 if the result overflows. Arguments should not have side effects and A, B and *R can be of any integer type other than char, bool, a bit-precise integer type, or an enumeration type. */ #if _GL_HAS_BUILTIN_ADD_OVERFLOW # define _GL_INT_ADD_WRAPV(a, b, r) __builtin_add_overflow (a, b, r) # define _GL_INT_SUBTRACT_WRAPV(a, b, r) __builtin_sub_overflow (a, b, r) #elif defined ckd_add && defined ckd_sub && !defined _GL_STDCKDINT_H # define _GL_INT_ADD_WRAPV(a, b, r) ckd_add (r, + (a), + (b)) # define _GL_INT_SUBTRACT_WRAPV(a, b, r) ckd_sub (r, + (a), + (b)) #else # define _GL_INT_ADD_WRAPV(a, b, r) \ _GL_INT_OP_WRAPV (a, b, r, +, _GL_INT_ADD_RANGE_OVERFLOW) # define _GL_INT_SUBTRACT_WRAPV(a, b, r) \ _GL_INT_OP_WRAPV (a, b, r, -, _GL_INT_SUBTRACT_RANGE_OVERFLOW) #endif #if _GL_HAS_BUILTIN_MUL_OVERFLOW # if ((9 < __GNUC__ + (3 <= __GNUC_MINOR__) \ || (__GNUC__ == 8 && 4 <= __GNUC_MINOR__)) \ && !defined __EDG__) # define _GL_INT_MULTIPLY_WRAPV(a, b, r) __builtin_mul_overflow (a, b, r) # else /* Work around GCC bug 91450. */ # define _GL_INT_MULTIPLY_WRAPV(a, b, r) \ ((!_GL_SIGNED_TYPE_OR_EXPR (*(r)) && _GL_EXPR_SIGNED (a) && _GL_EXPR_SIGNED (b) \ && _GL_INT_MULTIPLY_RANGE_OVERFLOW (a, b, 0, (__typeof__ (*(r))) -1)) \ ? ((void) __builtin_mul_overflow (a, b, r), 1) \ : __builtin_mul_overflow (a, b, r)) # endif #elif defined ckd_mul && !defined _GL_STDCKDINT_H # define _GL_INT_MULTIPLY_WRAPV(a, b, r) ckd_mul (r, + (a), + (b)) #else # define _GL_INT_MULTIPLY_WRAPV(a, b, r) \ _GL_INT_OP_WRAPV (a, b, r, *, _GL_INT_MULTIPLY_RANGE_OVERFLOW) #endif /* Nonzero if this compiler has GCC bug 68193 or Clang bug 25390. See: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68193 https://llvm.org/bugs/show_bug.cgi?id=25390 For now, assume all versions of GCC-like compilers generate bogus warnings for _Generic. This matters only for compilers that lack relevant builtins. */ #if __GNUC__ || defined __clang__ # define _GL__GENERIC_BOGUS 1 #else # define _GL__GENERIC_BOGUS 0 #endif /* Store the low-order bits of A <op> B into *R, where OP specifies the operation and OVERFLOW the overflow predicate. Return 1 if the result overflows. Arguments should not have side effects, and A, B and *R can be of any integer type other than char, bool, a bit-precise integer type, or an enumeration type. */ #if 201112 <= __STDC_VERSION__ && !_GL__GENERIC_BOGUS # define _GL_INT_OP_WRAPV(a, b, r, op, overflow) \ (_Generic \ (*(r), \ signed char: \ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ signed char, SCHAR_MIN, SCHAR_MAX), \ unsigned char: \ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ unsigned char, 0, UCHAR_MAX), \ short int: \ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ short int, SHRT_MIN, SHRT_MAX), \ unsigned short int: \ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ unsigned short int, 0, USHRT_MAX), \ int: \ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ int, INT_MIN, INT_MAX), \ unsigned int: \ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ unsigned int, 0, UINT_MAX), \ long int: \ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \ long int, LONG_MIN, LONG_MAX), \ unsigned long int: \ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \ unsigned long int, 0, ULONG_MAX), \ long long int: \ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long long int, \ long long int, LLONG_MIN, LLONG_MAX), \ unsigned long long int: \ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long long int, \ unsigned long long int, 0, ULLONG_MAX))) #else /* Store the low-order bits of A <op> B into *R, where OP specifies the operation and OVERFLOW the overflow predicate. If *R is signed, its type is ST with bounds SMIN..SMAX; otherwise its type is UT with bounds U..UMAX. ST and UT are narrower than int. Return 1 if the result overflows. Arguments should not have side effects, and A, B and *R can be of any integer type other than char, bool, a bit-precise integer type, or an enumeration type. */ # if _GL_HAVE___TYPEOF__ # define _GL_INT_OP_WRAPV_SMALLISH(a,b,r,op,overflow,st,smin,smax,ut,umax) \ (_GL_TYPE_SIGNED (__typeof__ (*(r))) \ ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, st, smin, smax) \ : _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, ut, 0, umax)) # else # define _GL_INT_OP_WRAPV_SMALLISH(a,b,r,op,overflow,st,smin,smax,ut,umax) \ (overflow (a, b, smin, smax) \ ? (overflow (a, b, 0, umax) \ ? (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a,b,op,unsigned,st), 1) \ : (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a,b,op,unsigned,st)) < 0) \ : (overflow (a, b, 0, umax) \ ? (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a,b,op,unsigned,st)) >= 0 \ : (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a,b,op,unsigned,st), 0))) # endif # define _GL_INT_OP_WRAPV(a, b, r, op, overflow) \ (sizeof *(r) == sizeof (signed char) \ ? _GL_INT_OP_WRAPV_SMALLISH (a, b, r, op, overflow, \ signed char, SCHAR_MIN, SCHAR_MAX, \ unsigned char, UCHAR_MAX) \ : sizeof *(r) == sizeof (short int) \ ? _GL_INT_OP_WRAPV_SMALLISH (a, b, r, op, overflow, \ short int, SHRT_MIN, SHRT_MAX, \ unsigned short int, USHRT_MAX) \ : sizeof *(r) == sizeof (int) \ ? (_GL_EXPR_SIGNED (*(r)) \ ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ int, INT_MIN, INT_MAX) \ : _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ unsigned int, 0, UINT_MAX)) \ : _GL_INT_OP_WRAPV_LONGISH(a, b, r, op, overflow)) # ifdef LLONG_MAX # define _GL_INT_OP_WRAPV_LONGISH(a, b, r, op, overflow) \ (sizeof *(r) == sizeof (long int) \ ? (_GL_EXPR_SIGNED (*(r)) \ ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \ long int, LONG_MIN, LONG_MAX) \ : _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \ unsigned long int, 0, ULONG_MAX)) \ : (_GL_EXPR_SIGNED (*(r)) \ ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long long int, \ long long int, LLONG_MIN, LLONG_MAX) \ : _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long long int, \ unsigned long long int, 0, ULLONG_MAX))) # else # define _GL_INT_OP_WRAPV_LONGISH(a, b, r, op, overflow) \ (_GL_EXPR_SIGNED (*(r)) \ ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \ long int, LONG_MIN, LONG_MAX) \ : _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \ unsigned long int, 0, ULONG_MAX)) # endif #endif /* Store the low-order bits of A <op> B into *R, where the operation is given by OP. Use the unsigned type UT for calculation to avoid overflow problems. *R's type is T, with extrema TMIN and TMAX. T can be any signed integer type other than char, bool, a bit-precise integer type, or an enumeration type. Return 1 if the result overflows. */ #define _GL_INT_OP_CALC(a, b, r, op, overflow, ut, t, tmin, tmax) \ (overflow (a, b, tmin, tmax) \ ? (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a, b, op, ut, t), 1) \ : (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a, b, op, ut, t), 0)) /* Return 1 if the integer expressions A - B and -A would overflow, respectively. Arguments should not have side effects, and can be any signed integer type other than char, bool, a bit-precise integer type, or an enumeration type. These macros are tuned for their last input argument being a constant. */ #if _GL_HAS_BUILTIN_OVERFLOW_P # define _GL_INT_NEGATE_OVERFLOW(a) \ __builtin_sub_overflow_p (0, a, (__typeof__ (- (a))) 0) #else # define _GL_INT_NEGATE_OVERFLOW(a) \ _GL_INT_NEGATE_RANGE_OVERFLOW (a, _GL_INT_MINIMUM (a), _GL_INT_MAXIMUM (a)) #endif /* Return the low-order bits of A <op> B, where the operation is given by OP. Use the unsigned type UT for calculation to avoid undefined behavior on signed integer overflow, and convert the result to type T. UT is at least as wide as T and is no narrower than unsigned int, T is two's complement, and there is no padding or trap representations. Assume that converting UT to T yields the low-order bits, as is done in all known two's-complement C compilers. E.g., see: https://gcc.gnu.org/onlinedocs/gcc/Integers-implementation.html According to the C standard, converting UT to T yields an implementation-defined result or signal for values outside T's range. However, code that works around this theoretical problem runs afoul of a compiler bug in Oracle Studio 12.3 x86. See: https://lists.gnu.org/r/bug-gnulib/2017-04/msg00049.html As the compiler bug is real, don't try to work around the theoretical problem. */ #define _GL_INT_OP_WRAPV_VIA_UNSIGNED(a, b, op, ut, t) \ ((t) ((ut) (a) op (ut) (b))) /* Return true if the numeric values A + B, A - B, A * B fall outside the range TMIN..TMAX. Arguments should not have side effects and can be any integer type other than char, bool, a bit-precise integer type, or an enumeration type. TMIN should be signed and nonpositive. TMAX should be positive, and should be signed unless TMIN is zero. */ #define _GL_INT_ADD_RANGE_OVERFLOW(a, b, tmin, tmax) \ ((b) < 0 \ ? (((tmin) \ ? ((_GL_EXPR_SIGNED (_GL_INT_CONVERT (a, (tmin) - (b))) || (b) < (tmin)) \ && (a) < (tmin) - (b)) \ : (a) <= -1 - (b)) \ || ((_GL_EXPR_SIGNED (a) ? 0 <= (a) : (tmax) < (a)) && (tmax) < (a) + (b))) \ : (a) < 0 \ ? (((tmin) \ ? ((_GL_EXPR_SIGNED (_GL_INT_CONVERT (b, (tmin) - (a))) || (a) < (tmin)) \ && (b) < (tmin) - (a)) \ : (b) <= -1 - (a)) \ || ((_GL_EXPR_SIGNED (_GL_INT_CONVERT (a, b)) || (tmax) < (b)) \ && (tmax) < (a) + (b))) \ : (tmax) < (b) || (tmax) - (b) < (a)) #define _GL_INT_SUBTRACT_RANGE_OVERFLOW(a, b, tmin, tmax) \ (((a) < 0) == ((b) < 0) \ ? ((a) < (b) \ ? !(tmin) || -1 - (tmin) < (b) - (a) - 1 \ : (tmax) < (a) - (b)) \ : (a) < 0 \ ? ((!_GL_EXPR_SIGNED (_GL_INT_CONVERT ((a) - (tmin), b)) && (a) - (tmin) < 0) \ || (a) - (tmin) < (b)) \ : ((! (_GL_EXPR_SIGNED (_GL_INT_CONVERT (tmax, b)) \ && _GL_EXPR_SIGNED (_GL_INT_CONVERT ((tmax) + (b), a))) \ && (tmax) <= -1 - (b)) \ || (tmax) + (b) < (a))) #define _GL_INT_MULTIPLY_RANGE_OVERFLOW(a, b, tmin, tmax) \ ((b) < 0 \ ? ((a) < 0 \ ? (_GL_EXPR_SIGNED (_GL_INT_CONVERT (tmax, b)) \ ? (a) < (tmax) / (b) \ : ((_GL_INT_NEGATE_OVERFLOW (b) \ ? _GL_INT_CONVERT (b, tmax) >> (_GL_TYPE_WIDTH (+ (b)) - 1) \ : (tmax) / -(b)) \ <= -1 - (a))) \ : _GL_INT_NEGATE_OVERFLOW (_GL_INT_CONVERT (b, tmin)) && (b) == -1 \ ? (_GL_EXPR_SIGNED (a) \ ? 0 < (a) + (tmin) \ : 0 < (a) && -1 - (tmin) < (a) - 1) \ : (tmin) / (b) < (a)) \ : (b) == 0 \ ? 0 \ : ((a) < 0 \ ? (_GL_INT_NEGATE_OVERFLOW (_GL_INT_CONVERT (a, tmin)) && (a) == -1 \ ? (_GL_EXPR_SIGNED (b) ? 0 < (b) + (tmin) : -1 - (tmin) < (b) - 1) \ : (tmin) / (a) < (b)) \ : (tmax) / (b) < (a))) #endif /* _GL_INTPROPS_INTERNAL_H */ ���������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/stdlib.in.h����������������������������������������������������������������������������0000644�0001750�0001750�00000165046�14436425346�015205� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A GNU-like <stdlib.h>. Copyright (C) 1995, 2001-2004, 2006-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if defined __need_system_stdlib_h || defined __need_malloc_and_calloc /* Special invocation conventions inside some gnulib header files, and inside some glibc header files, respectively. */ #@INCLUDE_NEXT@ @NEXT_STDLIB_H@ #else /* Normal invocation convention. */ #ifndef _@GUARD_PREFIX@_STDLIB_H /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_STDLIB_H@ #ifndef _@GUARD_PREFIX@_STDLIB_H #define _@GUARD_PREFIX@_STDLIB_H /* This file uses _Noreturn, _GL_ATTRIBUTE_DEALLOC, _GL_ATTRIBUTE_MALLOC, _GL_ATTRIBUTE_PURE, GNULIB_POSIXCHECK, HAVE_RAW_DECL_*. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif /* NetBSD 5.0 mis-defines NULL. */ #include <stddef.h> /* MirBSD 10 defines WEXITSTATUS in <sys/wait.h>, not in <stdlib.h>. */ #if @GNULIB_SYSTEM_POSIX@ && !defined WEXITSTATUS # include <sys/wait.h> #endif /* Solaris declares getloadavg() in <sys/loadavg.h>. */ #if (@GNULIB_GETLOADAVG@ || defined GNULIB_POSIXCHECK) && @HAVE_SYS_LOADAVG_H@ /* OpenIndiana has a bug: <sys/time.h> must be included before <sys/loadavg.h>. */ # include <sys/time.h> # include <sys/loadavg.h> #endif /* Native Windows platforms declare _mktemp() in <io.h>. */ #if defined _WIN32 && !defined __CYGWIN__ # include <io.h> #endif #if @GNULIB_RANDOM_R@ /* OSF/1 5.1 declares 'struct random_data' in <random.h>, which is included from <stdlib.h> if _REENTRANT is defined. Include it whenever we need 'struct random_data'. */ # if @HAVE_RANDOM_H@ # include <random.h> # endif # include <stdint.h> # if !@HAVE_STRUCT_RANDOM_DATA@ /* Define 'struct random_data'. But allow multiple gnulib generated <stdlib.h> replacements to coexist. */ # if !GNULIB_defined_struct_random_data struct random_data { int32_t *fptr; /* Front pointer. */ int32_t *rptr; /* Rear pointer. */ int32_t *state; /* Array of state values. */ int rand_type; /* Type of random number generator. */ int rand_deg; /* Degree of random number generator. */ int rand_sep; /* Distance between front and rear. */ int32_t *end_ptr; /* Pointer behind state table. */ }; # define GNULIB_defined_struct_random_data 1 # endif # endif #endif #if (@GNULIB_MKSTEMP@ || @GNULIB_MKSTEMPS@ || @GNULIB_MKOSTEMP@ || @GNULIB_MKOSTEMPS@ || @GNULIB_GETSUBOPT@ || defined GNULIB_POSIXCHECK) && ! defined __GLIBC__ && !(defined _WIN32 && ! defined __CYGWIN__) /* On Mac OS X 10.3, only <unistd.h> declares mkstemp. */ /* On Mac OS X 10.5, only <unistd.h> declares mkstemps. */ /* On Mac OS X 10.13, only <unistd.h> declares mkostemp and mkostemps. */ /* On Cygwin 1.7.1, only <unistd.h> declares getsubopt. */ /* But avoid namespace pollution on glibc systems and native Windows. */ # include <unistd.h> #endif /* _GL_ATTRIBUTE_DEALLOC (F, I) declares that the function returns pointers that can be freed by passing them as the Ith argument to the function F. */ #ifndef _GL_ATTRIBUTE_DEALLOC # if __GNUC__ >= 11 # define _GL_ATTRIBUTE_DEALLOC(f, i) __attribute__ ((__malloc__ (f, i))) # else # define _GL_ATTRIBUTE_DEALLOC(f, i) # endif #endif /* _GL_ATTRIBUTE_DEALLOC_FREE declares that the function returns pointers that can be freed via 'free'; it can be used only after declaring 'free'. */ /* Applies to: functions. Cannot be used on inline functions. */ #ifndef _GL_ATTRIBUTE_DEALLOC_FREE # define _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_DEALLOC (free, 1) #endif /* _GL_ATTRIBUTE_MALLOC declares that the function returns a pointer to freshly allocated memory. */ /* Applies to: functions. */ #ifndef _GL_ATTRIBUTE_MALLOC # if __GNUC__ >= 3 || defined __clang__ # define _GL_ATTRIBUTE_MALLOC __attribute__ ((__malloc__)) # else # define _GL_ATTRIBUTE_MALLOC # endif #endif /* The __attribute__ feature is available in gcc versions 2.5 and later. The attribute __pure__ was added in gcc 2.96. */ #ifndef _GL_ATTRIBUTE_PURE # if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) || defined __clang__ # define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) # else # define _GL_ATTRIBUTE_PURE /* empty */ # endif #endif /* The definition of _Noreturn is copied here. */ /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* Some systems do not define EXIT_*, despite otherwise supporting C89. */ #ifndef EXIT_SUCCESS # define EXIT_SUCCESS 0 #endif /* Tandem/NSK and other platforms that define EXIT_FAILURE as -1 interfere with proper operation of xargs. */ #ifndef EXIT_FAILURE # define EXIT_FAILURE 1 #elif EXIT_FAILURE != 1 # undef EXIT_FAILURE # define EXIT_FAILURE 1 #endif #if @GNULIB__EXIT@ /* Terminate the current process with the given return code, without running the 'atexit' handlers. */ # if @REPLACE__EXIT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef _Exit # define _Exit rpl__Exit # endif _GL_FUNCDECL_RPL (_Exit, _Noreturn void, (int status)); _GL_CXXALIAS_RPL (_Exit, void, (int status)); # else # if !@HAVE__EXIT@ _GL_FUNCDECL_SYS (_Exit, _Noreturn void, (int status)); # endif _GL_CXXALIAS_SYS (_Exit, void, (int status)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (_Exit); # endif #elif defined GNULIB_POSIXCHECK # undef _Exit # if HAVE_RAW_DECL__EXIT _GL_WARN_ON_USE (_Exit, "_Exit is unportable - " "use gnulib module _Exit for portability"); # endif #endif #if @GNULIB_FREE_POSIX@ # if @REPLACE_FREE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef free # define free rpl_free # endif # if defined __cplusplus && (__GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2) _GL_FUNCDECL_RPL (free, void, (void *ptr) throw ()); # else _GL_FUNCDECL_RPL (free, void, (void *ptr)); # endif _GL_CXXALIAS_RPL (free, void, (void *ptr)); # else _GL_CXXALIAS_SYS (free, void, (void *ptr)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (free); # endif #elif defined GNULIB_POSIXCHECK # undef free /* Assume free is always declared. */ _GL_WARN_ON_USE (free, "free is not future POSIX compliant everywhere - " "use gnulib module free for portability"); #endif /* Allocate memory with indefinite extent and specified alignment. */ #if @GNULIB_ALIGNED_ALLOC@ # if @REPLACE_ALIGNED_ALLOC@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef aligned_alloc # define aligned_alloc rpl_aligned_alloc # endif _GL_FUNCDECL_RPL (aligned_alloc, void *, (size_t alignment, size_t size) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); _GL_CXXALIAS_RPL (aligned_alloc, void *, (size_t alignment, size_t size)); # else # if @HAVE_ALIGNED_ALLOC@ # if __GNUC__ >= 11 /* For -Wmismatched-dealloc: Associate aligned_alloc with free or rpl_free. */ _GL_FUNCDECL_SYS (aligned_alloc, void *, (size_t alignment, size_t size) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); # endif _GL_CXXALIAS_SYS (aligned_alloc, void *, (size_t alignment, size_t size)); # endif # endif # if (__GLIBC__ >= 2) && @HAVE_ALIGNED_ALLOC@ _GL_CXXALIASWARN (aligned_alloc); # endif #else # if @GNULIB_FREE_POSIX@ && __GNUC__ >= 11 && !defined aligned_alloc /* For -Wmismatched-dealloc: Associate aligned_alloc with free or rpl_free. */ _GL_FUNCDECL_SYS (aligned_alloc, void *, (size_t alignment, size_t size) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); # endif # if defined GNULIB_POSIXCHECK # undef aligned_alloc # if HAVE_RAW_DECL_ALIGNED_ALLOC _GL_WARN_ON_USE (aligned_alloc, "aligned_alloc is not portable - " "use gnulib module aligned_alloc for portability"); # endif # endif #endif #if @GNULIB_ATOLL@ /* Parse a signed decimal integer. Returns the value of the integer. Errors are not detected. */ # if !@HAVE_ATOLL@ _GL_FUNCDECL_SYS (atoll, long long, (const char *string) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (atoll, long long, (const char *string)); _GL_CXXALIASWARN (atoll); #elif defined GNULIB_POSIXCHECK # undef atoll # if HAVE_RAW_DECL_ATOLL _GL_WARN_ON_USE (atoll, "atoll is unportable - " "use gnulib module atoll for portability"); # endif #endif #if @GNULIB_CALLOC_POSIX@ # if (@GNULIB_CALLOC_POSIX@ && @REPLACE_CALLOC_FOR_CALLOC_POSIX@) \ || (@GNULIB_CALLOC_GNU@ && @REPLACE_CALLOC_FOR_CALLOC_GNU@) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef calloc # define calloc rpl_calloc # endif _GL_FUNCDECL_RPL (calloc, void *, (size_t nmemb, size_t size) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); _GL_CXXALIAS_RPL (calloc, void *, (size_t nmemb, size_t size)); # else # if __GNUC__ >= 11 /* For -Wmismatched-dealloc: Associate calloc with free or rpl_free. */ _GL_FUNCDECL_SYS (calloc, void *, (size_t nmemb, size_t size) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); # endif _GL_CXXALIAS_SYS (calloc, void *, (size_t nmemb, size_t size)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (calloc); # endif #else # if @GNULIB_FREE_POSIX@ && __GNUC__ >= 11 && !defined calloc /* For -Wmismatched-dealloc: Associate calloc with free or rpl_free. */ _GL_FUNCDECL_SYS (calloc, void *, (size_t nmemb, size_t size) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); # endif # if defined GNULIB_POSIXCHECK # undef calloc /* Assume calloc is always declared. */ _GL_WARN_ON_USE (calloc, "calloc is not POSIX compliant everywhere - " "use gnulib module calloc-posix for portability"); # endif #endif #if @GNULIB_CANONICALIZE_FILE_NAME@ # if @REPLACE_CANONICALIZE_FILE_NAME@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define canonicalize_file_name rpl_canonicalize_file_name # endif _GL_FUNCDECL_RPL (canonicalize_file_name, char *, (const char *name) _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); _GL_CXXALIAS_RPL (canonicalize_file_name, char *, (const char *name)); # else # if !@HAVE_CANONICALIZE_FILE_NAME@ || __GNUC__ >= 11 _GL_FUNCDECL_SYS (canonicalize_file_name, char *, (const char *name) _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); # endif _GL_CXXALIAS_SYS (canonicalize_file_name, char *, (const char *name)); # endif # ifndef GNULIB_defined_canonicalize_file_name # define GNULIB_defined_canonicalize_file_name \ (!@HAVE_CANONICALIZE_FILE_NAME@ || @REPLACE_CANONICALIZE_FILE_NAME@) # endif _GL_CXXALIASWARN (canonicalize_file_name); #else # if @GNULIB_FREE_POSIX@ && __GNUC__ >= 11 && !defined canonicalize_file_name /* For -Wmismatched-dealloc: Associate canonicalize_file_name with free or rpl_free. */ _GL_FUNCDECL_SYS (canonicalize_file_name, char *, (const char *name) _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); # endif # if defined GNULIB_POSIXCHECK # undef canonicalize_file_name # if HAVE_RAW_DECL_CANONICALIZE_FILE_NAME _GL_WARN_ON_USE (canonicalize_file_name, "canonicalize_file_name is unportable - " "use gnulib module canonicalize-lgpl for portability"); # endif # endif #endif #if @GNULIB_MDA_ECVT@ /* On native Windows, map 'ecvt' to '_ecvt', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::ecvt on all platforms that have it. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ecvt # define ecvt _ecvt # endif _GL_CXXALIAS_MDA (ecvt, char *, (double number, int ndigits, int *decptp, int *signp)); # else # if @HAVE_DECL_ECVT@ _GL_CXXALIAS_SYS (ecvt, char *, (double number, int ndigits, int *decptp, int *signp)); # endif # endif # if (defined _WIN32 && !defined __CYGWIN__) || @HAVE_DECL_ECVT@ _GL_CXXALIASWARN (ecvt); # endif #endif #if @GNULIB_MDA_FCVT@ /* On native Windows, map 'fcvt' to '_fcvt', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::fcvt on all platforms that have it. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fcvt # define fcvt _fcvt # endif _GL_CXXALIAS_MDA (fcvt, char *, (double number, int ndigits, int *decptp, int *signp)); # else # if @HAVE_DECL_FCVT@ _GL_CXXALIAS_SYS (fcvt, char *, (double number, int ndigits, int *decptp, int *signp)); # endif # endif # if (defined _WIN32 && !defined __CYGWIN__) || @HAVE_DECL_FCVT@ _GL_CXXALIASWARN (fcvt); # endif #endif #if @GNULIB_MDA_GCVT@ /* On native Windows, map 'gcvt' to '_gcvt', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::gcvt on all platforms that have it. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef gcvt # define gcvt _gcvt # endif _GL_CXXALIAS_MDA (gcvt, char *, (double number, int ndigits, char *buf)); # else # if @HAVE_DECL_GCVT@ _GL_CXXALIAS_SYS (gcvt, char *, (double number, int ndigits, char *buf)); # endif # endif # if (defined _WIN32 && !defined __CYGWIN__) || @HAVE_DECL_GCVT@ _GL_CXXALIASWARN (gcvt); # endif #endif #if @GNULIB_GETLOADAVG@ /* Store max(NELEM,3) load average numbers in LOADAVG[]. The three numbers are the load average of the last 1 minute, the last 5 minutes, and the last 15 minutes, respectively. LOADAVG is an array of NELEM numbers. */ # if @REPLACE_GETLOADAVG@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getloadavg # define getloadavg rpl_getloadavg # endif _GL_FUNCDECL_RPL (getloadavg, int, (double loadavg[], int nelem) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (getloadavg, int, (double loadavg[], int nelem)); # else # if !@HAVE_DECL_GETLOADAVG@ _GL_FUNCDECL_SYS (getloadavg, int, (double loadavg[], int nelem) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (getloadavg, int, (double loadavg[], int nelem)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (getloadavg); # endif #elif defined GNULIB_POSIXCHECK # undef getloadavg # if HAVE_RAW_DECL_GETLOADAVG _GL_WARN_ON_USE (getloadavg, "getloadavg is not portable - " "use gnulib module getloadavg for portability"); # endif #endif #if @GNULIB_GETPROGNAME@ /* Return the base name of the executing program. On native Windows this will usually end in ".exe" or ".EXE". */ # if @REPLACE_GETPROGNAME@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getprogname # define getprogname rpl_getprogname # endif # if @HAVE_DECL_PROGRAM_INVOCATION_NAME@ _GL_FUNCDECL_RPL (getprogname, const char *, (void) _GL_ATTRIBUTE_PURE); # else _GL_FUNCDECL_RPL (getprogname, const char *, (void)); # endif _GL_CXXALIAS_RPL (getprogname, const char *, (void)); # else # if !@HAVE_GETPROGNAME@ # if @HAVE_DECL_PROGRAM_INVOCATION_NAME@ _GL_FUNCDECL_SYS (getprogname, const char *, (void) _GL_ATTRIBUTE_PURE); # else _GL_FUNCDECL_SYS (getprogname, const char *, (void)); # endif # endif _GL_CXXALIAS_SYS (getprogname, const char *, (void)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (getprogname); # endif #elif defined GNULIB_POSIXCHECK # undef getprogname # if HAVE_RAW_DECL_GETPROGNAME _GL_WARN_ON_USE (getprogname, "getprogname is unportable - " "use gnulib module getprogname for portability"); # endif #endif #if @GNULIB_GETSUBOPT@ /* Assuming *OPTIONP is a comma separated list of elements of the form "token" or "token=value", getsubopt parses the first of these elements. If the first element refers to a "token" that is member of the given NULL-terminated array of tokens: - It replaces the comma with a NUL byte, updates *OPTIONP to point past the first option and the comma, sets *VALUEP to the value of the element (or NULL if it doesn't contain an "=" sign), - It returns the index of the "token" in the given array of tokens. Otherwise it returns -1, and *OPTIONP and *VALUEP are undefined. For more details see the POSIX specification. https://pubs.opengroup.org/onlinepubs/9699919799/functions/getsubopt.html */ # if @REPLACE_GETSUBOPT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getsubopt # define getsubopt rpl_getsubopt # endif _GL_FUNCDECL_RPL (getsubopt, int, (char **optionp, char *const *tokens, char **valuep) _GL_ARG_NONNULL ((1, 2, 3))); _GL_CXXALIAS_RPL (getsubopt, int, (char **optionp, char *const *tokens, char **valuep)); # else # if !@HAVE_GETSUBOPT@ _GL_FUNCDECL_SYS (getsubopt, int, (char **optionp, char *const *tokens, char **valuep) _GL_ARG_NONNULL ((1, 2, 3))); # endif _GL_CXXALIAS_SYS (getsubopt, int, (char **optionp, char *const *tokens, char **valuep)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (getsubopt); # endif #elif defined GNULIB_POSIXCHECK # undef getsubopt # if HAVE_RAW_DECL_GETSUBOPT _GL_WARN_ON_USE (getsubopt, "getsubopt is unportable - " "use gnulib module getsubopt for portability"); # endif #endif #if @GNULIB_GRANTPT@ /* Change the ownership and access permission of the slave side of the pseudo-terminal whose master side is specified by FD. */ # if !@HAVE_GRANTPT@ _GL_FUNCDECL_SYS (grantpt, int, (int fd)); # endif _GL_CXXALIAS_SYS (grantpt, int, (int fd)); _GL_CXXALIASWARN (grantpt); #elif defined GNULIB_POSIXCHECK # undef grantpt # if HAVE_RAW_DECL_GRANTPT _GL_WARN_ON_USE (grantpt, "grantpt is not portable - " "use gnulib module grantpt for portability"); # endif #endif /* If _GL_USE_STDLIB_ALLOC is nonzero, the including module does not rely on GNU or POSIX semantics for malloc and realloc (for example, by never specifying a zero size), so it does not need malloc or realloc to be redefined. */ #if @GNULIB_MALLOC_POSIX@ # if (@GNULIB_MALLOC_POSIX@ && @REPLACE_MALLOC_FOR_MALLOC_POSIX@) \ || (@GNULIB_MALLOC_GNU@ && @REPLACE_MALLOC_FOR_MALLOC_GNU@) # if !((defined __cplusplus && defined GNULIB_NAMESPACE) \ || _GL_USE_STDLIB_ALLOC) # undef malloc # define malloc rpl_malloc # endif _GL_FUNCDECL_RPL (malloc, void *, (size_t size) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); _GL_CXXALIAS_RPL (malloc, void *, (size_t size)); # else # if __GNUC__ >= 11 /* For -Wmismatched-dealloc: Associate malloc with free or rpl_free. */ _GL_FUNCDECL_SYS (malloc, void *, (size_t size) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); # endif _GL_CXXALIAS_SYS (malloc, void *, (size_t size)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (malloc); # endif #else # if @GNULIB_FREE_POSIX@ && __GNUC__ >= 11 && !defined malloc /* For -Wmismatched-dealloc: Associate malloc with free or rpl_free. */ _GL_FUNCDECL_SYS (malloc, void *, (size_t size) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); # endif # if defined GNULIB_POSIXCHECK && !_GL_USE_STDLIB_ALLOC # undef malloc /* Assume malloc is always declared. */ _GL_WARN_ON_USE (malloc, "malloc is not POSIX compliant everywhere - " "use gnulib module malloc-posix for portability"); # endif #endif /* Return maximum number of bytes of a multibyte character. */ #if @REPLACE_MB_CUR_MAX@ # if !GNULIB_defined_MB_CUR_MAX static inline int gl_MB_CUR_MAX (void) { /* Turn the value 3 to the value 4, as needed for the UTF-8 encoding. */ return MB_CUR_MAX + (MB_CUR_MAX == 3); } # undef MB_CUR_MAX # define MB_CUR_MAX gl_MB_CUR_MAX () # define GNULIB_defined_MB_CUR_MAX 1 # endif #endif /* Convert a string to a wide string. */ #if @GNULIB_MBSTOWCS@ # if @REPLACE_MBSTOWCS@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mbstowcs # define mbstowcs rpl_mbstowcs # endif _GL_FUNCDECL_RPL (mbstowcs, size_t, (wchar_t *restrict dest, const char *restrict src, size_t len) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (mbstowcs, size_t, (wchar_t *restrict dest, const char *restrict src, size_t len)); # else _GL_CXXALIAS_SYS (mbstowcs, size_t, (wchar_t *restrict dest, const char *restrict src, size_t len)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (mbstowcs); # endif #elif defined GNULIB_POSIXCHECK # undef mbstowcs # if HAVE_RAW_DECL_MBSTOWCS _GL_WARN_ON_USE (mbstowcs, "mbstowcs is unportable - " "use gnulib module mbstowcs for portability"); # endif #endif /* Convert a multibyte character to a wide character. */ #if @GNULIB_MBTOWC@ # if @REPLACE_MBTOWC@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mbtowc # define mbtowc rpl_mbtowc # endif _GL_FUNCDECL_RPL (mbtowc, int, (wchar_t *restrict pwc, const char *restrict s, size_t n)); _GL_CXXALIAS_RPL (mbtowc, int, (wchar_t *restrict pwc, const char *restrict s, size_t n)); # else # if !@HAVE_MBTOWC@ _GL_FUNCDECL_SYS (mbtowc, int, (wchar_t *restrict pwc, const char *restrict s, size_t n)); # endif _GL_CXXALIAS_SYS (mbtowc, int, (wchar_t *restrict pwc, const char *restrict s, size_t n)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (mbtowc); # endif #elif defined GNULIB_POSIXCHECK # undef mbtowc # if HAVE_RAW_DECL_MBTOWC _GL_WARN_ON_USE (mbtowc, "mbtowc is not portable - " "use gnulib module mbtowc for portability"); # endif #endif #if @GNULIB_MKDTEMP@ /* Create a unique temporary directory from TEMPLATE. The last six characters of TEMPLATE must be "XXXXXX"; they are replaced with a string that makes the directory name unique. Returns TEMPLATE, or a null pointer if it cannot get a unique name. The directory is created mode 700. */ # if !@HAVE_MKDTEMP@ _GL_FUNCDECL_SYS (mkdtemp, char *, (char * /*template*/) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (mkdtemp, char *, (char * /*template*/)); _GL_CXXALIASWARN (mkdtemp); #elif defined GNULIB_POSIXCHECK # undef mkdtemp # if HAVE_RAW_DECL_MKDTEMP _GL_WARN_ON_USE (mkdtemp, "mkdtemp is unportable - " "use gnulib module mkdtemp for portability"); # endif #endif #if @GNULIB_MKOSTEMP@ /* Create a unique temporary file from TEMPLATE. The last six characters of TEMPLATE must be "XXXXXX"; they are replaced with a string that makes the file name unique. The flags are a bitmask, possibly including O_CLOEXEC (defined in <fcntl.h>) and O_TEXT, O_BINARY (defined in "binary-io.h"). The file is then created, with the specified flags, ensuring it didn't exist before. The file is created read-write (mask at least 0600 & ~umask), but it may be world-readable and world-writable (mask 0666 & ~umask), depending on the implementation. Returns the open file descriptor if successful, otherwise -1 and errno set. */ # if @REPLACE_MKOSTEMP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mkostemp # define mkostemp rpl_mkostemp # endif _GL_FUNCDECL_RPL (mkostemp, int, (char * /*template*/, int /*flags*/) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (mkostemp, int, (char * /*template*/, int /*flags*/)); # else # if !@HAVE_MKOSTEMP@ _GL_FUNCDECL_SYS (mkostemp, int, (char * /*template*/, int /*flags*/) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (mkostemp, int, (char * /*template*/, int /*flags*/)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (mkostemp); # endif #elif defined GNULIB_POSIXCHECK # undef mkostemp # if HAVE_RAW_DECL_MKOSTEMP _GL_WARN_ON_USE (mkostemp, "mkostemp is unportable - " "use gnulib module mkostemp for portability"); # endif #endif #if @GNULIB_MKOSTEMPS@ /* Create a unique temporary file from TEMPLATE. The last six characters of TEMPLATE before a suffix of length SUFFIXLEN must be "XXXXXX"; they are replaced with a string that makes the file name unique. The flags are a bitmask, possibly including O_CLOEXEC (defined in <fcntl.h>) and O_TEXT, O_BINARY (defined in "binary-io.h"). The file is then created, with the specified flags, ensuring it didn't exist before. The file is created read-write (mask at least 0600 & ~umask), but it may be world-readable and world-writable (mask 0666 & ~umask), depending on the implementation. Returns the open file descriptor if successful, otherwise -1 and errno set. */ # if @REPLACE_MKOSTEMPS@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mkostemps # define mkostemps rpl_mkostemps # endif _GL_FUNCDECL_RPL (mkostemps, int, (char * /*template*/, int /*suffixlen*/, int /*flags*/) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (mkostemps, int, (char * /*template*/, int /*suffixlen*/, int /*flags*/)); # else # if !@HAVE_MKOSTEMPS@ _GL_FUNCDECL_SYS (mkostemps, int, (char * /*template*/, int /*suffixlen*/, int /*flags*/) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (mkostemps, int, (char * /*template*/, int /*suffixlen*/, int /*flags*/)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (mkostemps); # endif #elif defined GNULIB_POSIXCHECK # undef mkostemps # if HAVE_RAW_DECL_MKOSTEMPS _GL_WARN_ON_USE (mkostemps, "mkostemps is unportable - " "use gnulib module mkostemps for portability"); # endif #endif #if @GNULIB_MKSTEMP@ /* Create a unique temporary file from TEMPLATE. The last six characters of TEMPLATE must be "XXXXXX"; they are replaced with a string that makes the file name unique. The file is then created, ensuring it didn't exist before. The file is created read-write (mask at least 0600 & ~umask), but it may be world-readable and world-writable (mask 0666 & ~umask), depending on the implementation. Returns the open file descriptor if successful, otherwise -1 and errno set. */ # if @REPLACE_MKSTEMP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define mkstemp rpl_mkstemp # endif _GL_FUNCDECL_RPL (mkstemp, int, (char * /*template*/) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (mkstemp, int, (char * /*template*/)); # else # if ! @HAVE_MKSTEMP@ _GL_FUNCDECL_SYS (mkstemp, int, (char * /*template*/) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (mkstemp, int, (char * /*template*/)); # endif _GL_CXXALIASWARN (mkstemp); #elif defined GNULIB_POSIXCHECK # undef mkstemp # if HAVE_RAW_DECL_MKSTEMP _GL_WARN_ON_USE (mkstemp, "mkstemp is unportable - " "use gnulib module mkstemp for portability"); # endif #endif #if @GNULIB_MKSTEMPS@ /* Create a unique temporary file from TEMPLATE. The last six characters of TEMPLATE prior to a suffix of length SUFFIXLEN must be "XXXXXX"; they are replaced with a string that makes the file name unique. The file is then created, ensuring it didn't exist before. The file is created read-write (mask at least 0600 & ~umask), but it may be world-readable and world-writable (mask 0666 & ~umask), depending on the implementation. Returns the open file descriptor if successful, otherwise -1 and errno set. */ # if !@HAVE_MKSTEMPS@ _GL_FUNCDECL_SYS (mkstemps, int, (char * /*template*/, int /*suffixlen*/) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (mkstemps, int, (char * /*template*/, int /*suffixlen*/)); _GL_CXXALIASWARN (mkstemps); #elif defined GNULIB_POSIXCHECK # undef mkstemps # if HAVE_RAW_DECL_MKSTEMPS _GL_WARN_ON_USE (mkstemps, "mkstemps is unportable - " "use gnulib module mkstemps for portability"); # endif #endif #if @GNULIB_MDA_MKTEMP@ /* On native Windows, map 'mktemp' to '_mktemp', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::mktemp always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mktemp # define mktemp _mktemp # endif _GL_CXXALIAS_MDA (mktemp, char *, (char * /*template*/)); # else _GL_CXXALIAS_SYS (mktemp, char *, (char * /*template*/)); # endif _GL_CXXALIASWARN (mktemp); #endif /* Allocate memory with indefinite extent and specified alignment. */ #if @GNULIB_POSIX_MEMALIGN@ # if @REPLACE_POSIX_MEMALIGN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef posix_memalign # define posix_memalign rpl_posix_memalign # endif _GL_FUNCDECL_RPL (posix_memalign, int, (void **memptr, size_t alignment, size_t size) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (posix_memalign, int, (void **memptr, size_t alignment, size_t size)); # else # if @HAVE_POSIX_MEMALIGN@ _GL_CXXALIAS_SYS (posix_memalign, int, (void **memptr, size_t alignment, size_t size)); # endif # endif # if __GLIBC__ >= 2 && @HAVE_POSIX_MEMALIGN@ _GL_CXXALIASWARN (posix_memalign); # endif #elif defined GNULIB_POSIXCHECK # undef posix_memalign # if HAVE_RAW_DECL_POSIX_MEMALIGN _GL_WARN_ON_USE (posix_memalign, "posix_memalign is not portable - " "use gnulib module posix_memalign for portability"); # endif #endif #if @GNULIB_POSIX_OPENPT@ /* Return an FD open to the master side of a pseudo-terminal. Flags should include O_RDWR, and may also include O_NOCTTY. */ # if @REPLACE_POSIX_OPENPT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef posix_openpt # define posix_openpt rpl_posix_openpt # endif _GL_FUNCDECL_RPL (posix_openpt, int, (int flags)); _GL_CXXALIAS_RPL (posix_openpt, int, (int flags)); # else # if !@HAVE_POSIX_OPENPT@ _GL_FUNCDECL_SYS (posix_openpt, int, (int flags)); # endif _GL_CXXALIAS_SYS (posix_openpt, int, (int flags)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (posix_openpt); # endif #elif defined GNULIB_POSIXCHECK # undef posix_openpt # if HAVE_RAW_DECL_POSIX_OPENPT _GL_WARN_ON_USE (posix_openpt, "posix_openpt is not portable - " "use gnulib module posix_openpt for portability"); # endif #endif #if @GNULIB_PTSNAME@ /* Return the pathname of the pseudo-terminal slave associated with the master FD is open on, or NULL on errors. */ # if @REPLACE_PTSNAME@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ptsname # define ptsname rpl_ptsname # endif _GL_FUNCDECL_RPL (ptsname, char *, (int fd)); _GL_CXXALIAS_RPL (ptsname, char *, (int fd)); # else # if !@HAVE_PTSNAME@ _GL_FUNCDECL_SYS (ptsname, char *, (int fd)); # endif _GL_CXXALIAS_SYS (ptsname, char *, (int fd)); # endif _GL_CXXALIASWARN (ptsname); #elif defined GNULIB_POSIXCHECK # undef ptsname # if HAVE_RAW_DECL_PTSNAME _GL_WARN_ON_USE (ptsname, "ptsname is not portable - " "use gnulib module ptsname for portability"); # endif #endif #if @GNULIB_PTSNAME_R@ /* Set the pathname of the pseudo-terminal slave associated with the master FD is open on and return 0, or set errno and return non-zero on errors. */ # if @REPLACE_PTSNAME_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ptsname_r # define ptsname_r rpl_ptsname_r # endif _GL_FUNCDECL_RPL (ptsname_r, int, (int fd, char *buf, size_t len)); _GL_CXXALIAS_RPL (ptsname_r, int, (int fd, char *buf, size_t len)); # else # if !@HAVE_PTSNAME_R@ _GL_FUNCDECL_SYS (ptsname_r, int, (int fd, char *buf, size_t len)); # endif _GL_CXXALIAS_SYS (ptsname_r, int, (int fd, char *buf, size_t len)); # endif # ifndef GNULIB_defined_ptsname_r # define GNULIB_defined_ptsname_r (!@HAVE_PTSNAME_R@ || @REPLACE_PTSNAME_R@) # endif _GL_CXXALIASWARN (ptsname_r); #elif defined GNULIB_POSIXCHECK # undef ptsname_r # if HAVE_RAW_DECL_PTSNAME_R _GL_WARN_ON_USE (ptsname_r, "ptsname_r is not portable - " "use gnulib module ptsname_r for portability"); # endif #endif #if @GNULIB_PUTENV@ # if @REPLACE_PUTENV@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef putenv # define putenv rpl_putenv # endif _GL_FUNCDECL_RPL (putenv, int, (char *string) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (putenv, int, (char *string)); # elif defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef putenv # define putenv _putenv # endif _GL_CXXALIAS_MDA (putenv, int, (char *string)); # else _GL_CXXALIAS_SYS (putenv, int, (char *string)); # endif _GL_CXXALIASWARN (putenv); #elif @GNULIB_MDA_PUTENV@ /* On native Windows, map 'putenv' to '_putenv', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::putenv always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef putenv # define putenv _putenv # endif /* Need to cast, because on mingw, the parameter is either 'const char *string' or 'char *string'. */ _GL_CXXALIAS_MDA_CAST (putenv, int, (char *string)); # else _GL_CXXALIAS_SYS (putenv, int, (char *string)); # endif _GL_CXXALIASWARN (putenv); #endif #if @GNULIB_QSORT_R@ /* Sort an array of NMEMB elements, starting at address BASE, each element occupying SIZE bytes, in ascending order according to the comparison function COMPARE. */ # ifdef __cplusplus extern "C" { # endif # if !GNULIB_defined_qsort_r_fn_types typedef int (*_gl_qsort_r_compar_fn) (void const *, void const *, void *); # define GNULIB_defined_qsort_r_fn_types 1 # endif # ifdef __cplusplus } # endif # if @REPLACE_QSORT_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef qsort_r # define qsort_r rpl_qsort_r # endif _GL_FUNCDECL_RPL (qsort_r, void, (void *base, size_t nmemb, size_t size, _gl_qsort_r_compar_fn compare, void *arg) _GL_ARG_NONNULL ((1, 4))); _GL_CXXALIAS_RPL (qsort_r, void, (void *base, size_t nmemb, size_t size, _gl_qsort_r_compar_fn compare, void *arg)); # else # if !@HAVE_QSORT_R@ _GL_FUNCDECL_SYS (qsort_r, void, (void *base, size_t nmemb, size_t size, _gl_qsort_r_compar_fn compare, void *arg) _GL_ARG_NONNULL ((1, 4))); # endif _GL_CXXALIAS_SYS (qsort_r, void, (void *base, size_t nmemb, size_t size, _gl_qsort_r_compar_fn compare, void *arg)); # endif _GL_CXXALIASWARN (qsort_r); #elif defined GNULIB_POSIXCHECK # undef qsort_r # if HAVE_RAW_DECL_QSORT_R _GL_WARN_ON_USE (qsort_r, "qsort_r is not portable - " "use gnulib module qsort_r for portability"); # endif #endif #if @GNULIB_RANDOM_R@ # if !@HAVE_RANDOM_R@ # ifndef RAND_MAX # define RAND_MAX 2147483647 # endif # endif #endif #if @GNULIB_RANDOM@ # if @REPLACE_RANDOM@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef random # define random rpl_random # endif _GL_FUNCDECL_RPL (random, long, (void)); _GL_CXXALIAS_RPL (random, long, (void)); # else # if !@HAVE_RANDOM@ _GL_FUNCDECL_SYS (random, long, (void)); # endif /* Need to cast, because on Haiku, the return type is int. */ _GL_CXXALIAS_SYS_CAST (random, long, (void)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (random); # endif #elif defined GNULIB_POSIXCHECK # undef random # if HAVE_RAW_DECL_RANDOM _GL_WARN_ON_USE (random, "random is unportable - " "use gnulib module random for portability"); # endif #endif #if @GNULIB_RANDOM@ # if @REPLACE_RANDOM@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef srandom # define srandom rpl_srandom # endif _GL_FUNCDECL_RPL (srandom, void, (unsigned int seed)); _GL_CXXALIAS_RPL (srandom, void, (unsigned int seed)); # else # if !@HAVE_RANDOM@ _GL_FUNCDECL_SYS (srandom, void, (unsigned int seed)); # endif /* Need to cast, because on FreeBSD, the first parameter is unsigned long seed. */ _GL_CXXALIAS_SYS_CAST (srandom, void, (unsigned int seed)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (srandom); # endif #elif defined GNULIB_POSIXCHECK # undef srandom # if HAVE_RAW_DECL_SRANDOM _GL_WARN_ON_USE (srandom, "srandom is unportable - " "use gnulib module random for portability"); # endif #endif #if @GNULIB_RANDOM@ # if @REPLACE_INITSTATE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef initstate # define initstate rpl_initstate # endif _GL_FUNCDECL_RPL (initstate, char *, (unsigned int seed, char *buf, size_t buf_size) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (initstate, char *, (unsigned int seed, char *buf, size_t buf_size)); # else # if !@HAVE_INITSTATE@ || !@HAVE_DECL_INITSTATE@ _GL_FUNCDECL_SYS (initstate, char *, (unsigned int seed, char *buf, size_t buf_size) _GL_ARG_NONNULL ((2))); # endif /* Need to cast, because on FreeBSD, the first parameter is unsigned long seed. */ _GL_CXXALIAS_SYS_CAST (initstate, char *, (unsigned int seed, char *buf, size_t buf_size)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (initstate); # endif #elif defined GNULIB_POSIXCHECK # undef initstate # if HAVE_RAW_DECL_INITSTATE _GL_WARN_ON_USE (initstate, "initstate is unportable - " "use gnulib module random for portability"); # endif #endif #if @GNULIB_RANDOM@ # if @REPLACE_SETSTATE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef setstate # define setstate rpl_setstate # endif _GL_FUNCDECL_RPL (setstate, char *, (char *arg_state) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (setstate, char *, (char *arg_state)); # else # if !@HAVE_SETSTATE@ || !@HAVE_DECL_SETSTATE@ _GL_FUNCDECL_SYS (setstate, char *, (char *arg_state) _GL_ARG_NONNULL ((1))); # endif /* Need to cast, because on Mac OS X 10.13, HP-UX, Solaris the first parameter is const char *arg_state. */ _GL_CXXALIAS_SYS_CAST (setstate, char *, (char *arg_state)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (setstate); # endif #elif defined GNULIB_POSIXCHECK # undef setstate # if HAVE_RAW_DECL_SETSTATE _GL_WARN_ON_USE (setstate, "setstate is unportable - " "use gnulib module random for portability"); # endif #endif #if @GNULIB_RANDOM_R@ # if @REPLACE_RANDOM_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef random_r # define random_r rpl_random_r # endif _GL_FUNCDECL_RPL (random_r, int, (struct random_data *buf, int32_t *result) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (random_r, int, (struct random_data *buf, int32_t *result)); # else # if !@HAVE_RANDOM_R@ _GL_FUNCDECL_SYS (random_r, int, (struct random_data *buf, int32_t *result) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (random_r, int, (struct random_data *buf, int32_t *result)); # endif _GL_CXXALIASWARN (random_r); #elif defined GNULIB_POSIXCHECK # undef random_r # if HAVE_RAW_DECL_RANDOM_R _GL_WARN_ON_USE (random_r, "random_r is unportable - " "use gnulib module random_r for portability"); # endif #endif #if @GNULIB_RANDOM_R@ # if @REPLACE_RANDOM_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef srandom_r # define srandom_r rpl_srandom_r # endif _GL_FUNCDECL_RPL (srandom_r, int, (unsigned int seed, struct random_data *rand_state) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (srandom_r, int, (unsigned int seed, struct random_data *rand_state)); # else # if !@HAVE_RANDOM_R@ _GL_FUNCDECL_SYS (srandom_r, int, (unsigned int seed, struct random_data *rand_state) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (srandom_r, int, (unsigned int seed, struct random_data *rand_state)); # endif _GL_CXXALIASWARN (srandom_r); #elif defined GNULIB_POSIXCHECK # undef srandom_r # if HAVE_RAW_DECL_SRANDOM_R _GL_WARN_ON_USE (srandom_r, "srandom_r is unportable - " "use gnulib module random_r for portability"); # endif #endif #if @GNULIB_RANDOM_R@ # if @REPLACE_RANDOM_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef initstate_r # define initstate_r rpl_initstate_r # endif _GL_FUNCDECL_RPL (initstate_r, int, (unsigned int seed, char *buf, size_t buf_size, struct random_data *rand_state) _GL_ARG_NONNULL ((2, 4))); _GL_CXXALIAS_RPL (initstate_r, int, (unsigned int seed, char *buf, size_t buf_size, struct random_data *rand_state)); # else # if !@HAVE_RANDOM_R@ _GL_FUNCDECL_SYS (initstate_r, int, (unsigned int seed, char *buf, size_t buf_size, struct random_data *rand_state) _GL_ARG_NONNULL ((2, 4))); # endif /* Need to cast, because on Haiku, the third parameter is unsigned long buf_size. */ _GL_CXXALIAS_SYS_CAST (initstate_r, int, (unsigned int seed, char *buf, size_t buf_size, struct random_data *rand_state)); # endif _GL_CXXALIASWARN (initstate_r); #elif defined GNULIB_POSIXCHECK # undef initstate_r # if HAVE_RAW_DECL_INITSTATE_R _GL_WARN_ON_USE (initstate_r, "initstate_r is unportable - " "use gnulib module random_r for portability"); # endif #endif #if @GNULIB_RANDOM_R@ # if @REPLACE_RANDOM_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef setstate_r # define setstate_r rpl_setstate_r # endif _GL_FUNCDECL_RPL (setstate_r, int, (char *arg_state, struct random_data *rand_state) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (setstate_r, int, (char *arg_state, struct random_data *rand_state)); # else # if !@HAVE_RANDOM_R@ _GL_FUNCDECL_SYS (setstate_r, int, (char *arg_state, struct random_data *rand_state) _GL_ARG_NONNULL ((1, 2))); # endif /* Need to cast, because on Haiku, the first parameter is void *arg_state. */ _GL_CXXALIAS_SYS_CAST (setstate_r, int, (char *arg_state, struct random_data *rand_state)); # endif _GL_CXXALIASWARN (setstate_r); #elif defined GNULIB_POSIXCHECK # undef setstate_r # if HAVE_RAW_DECL_SETSTATE_R _GL_WARN_ON_USE (setstate_r, "setstate_r is unportable - " "use gnulib module random_r for portability"); # endif #endif #if @GNULIB_REALLOC_POSIX@ # if (@GNULIB_REALLOC_POSIX@ && @REPLACE_REALLOC_FOR_REALLOC_POSIX@) \ || (@GNULIB_REALLOC_GNU@ && @REPLACE_REALLOC_FOR_REALLOC_GNU@) # if !((defined __cplusplus && defined GNULIB_NAMESPACE) \ || _GL_USE_STDLIB_ALLOC) # undef realloc # define realloc rpl_realloc # endif _GL_FUNCDECL_RPL (realloc, void *, (void *ptr, size_t size) _GL_ATTRIBUTE_DEALLOC_FREE); _GL_CXXALIAS_RPL (realloc, void *, (void *ptr, size_t size)); # else # if __GNUC__ >= 11 /* For -Wmismatched-dealloc: Associate realloc with free or rpl_free. */ _GL_FUNCDECL_SYS (realloc, void *, (void *ptr, size_t size) _GL_ATTRIBUTE_DEALLOC_FREE); # endif _GL_CXXALIAS_SYS (realloc, void *, (void *ptr, size_t size)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (realloc); # endif #else # if @GNULIB_FREE_POSIX@ && __GNUC__ >= 11 && !defined realloc /* For -Wmismatched-dealloc: Associate realloc with free or rpl_free. */ _GL_FUNCDECL_SYS (realloc, void *, (void *ptr, size_t size) _GL_ATTRIBUTE_DEALLOC_FREE); # endif # if defined GNULIB_POSIXCHECK && !_GL_USE_STDLIB_ALLOC # undef realloc /* Assume realloc is always declared. */ _GL_WARN_ON_USE (realloc, "realloc is not POSIX compliant everywhere - " "use gnulib module realloc-posix for portability"); # endif #endif #if @GNULIB_REALLOCARRAY@ # if @REPLACE_REALLOCARRAY@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef reallocarray # define reallocarray rpl_reallocarray # endif _GL_FUNCDECL_RPL (reallocarray, void *, (void *ptr, size_t nmemb, size_t size)); _GL_CXXALIAS_RPL (reallocarray, void *, (void *ptr, size_t nmemb, size_t size)); # else # if ! @HAVE_REALLOCARRAY@ _GL_FUNCDECL_SYS (reallocarray, void *, (void *ptr, size_t nmemb, size_t size)); # endif _GL_CXXALIAS_SYS (reallocarray, void *, (void *ptr, size_t nmemb, size_t size)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (reallocarray); # endif #elif defined GNULIB_POSIXCHECK # undef reallocarray # if HAVE_RAW_DECL_REALLOCARRAY _GL_WARN_ON_USE (reallocarray, "reallocarray is not portable - " "use gnulib module reallocarray for portability"); # endif #endif #if @GNULIB_REALPATH@ # if @REPLACE_REALPATH@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define realpath rpl_realpath # endif _GL_FUNCDECL_RPL (realpath, char *, (const char *restrict name, char *restrict resolved) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (realpath, char *, (const char *restrict name, char *restrict resolved)); # else # if !@HAVE_REALPATH@ _GL_FUNCDECL_SYS (realpath, char *, (const char *restrict name, char *restrict resolved) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (realpath, char *, (const char *restrict name, char *restrict resolved)); # endif _GL_CXXALIASWARN (realpath); #elif defined GNULIB_POSIXCHECK # undef realpath # if HAVE_RAW_DECL_REALPATH _GL_WARN_ON_USE (realpath, "realpath is unportable - use gnulib module " "canonicalize or canonicalize-lgpl for portability"); # endif #endif #if @GNULIB_RPMATCH@ /* Test a user response to a question. Return 1 if it is affirmative, 0 if it is negative, or -1 if not clear. */ # if !@HAVE_RPMATCH@ _GL_FUNCDECL_SYS (rpmatch, int, (const char *response) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (rpmatch, int, (const char *response)); _GL_CXXALIASWARN (rpmatch); #elif defined GNULIB_POSIXCHECK # undef rpmatch # if HAVE_RAW_DECL_RPMATCH _GL_WARN_ON_USE (rpmatch, "rpmatch is unportable - " "use gnulib module rpmatch for portability"); # endif #endif #if @GNULIB_SECURE_GETENV@ /* Look up NAME in the environment, returning 0 in insecure situations. */ # if !@HAVE_SECURE_GETENV@ _GL_FUNCDECL_SYS (secure_getenv, char *, (char const *name) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (secure_getenv, char *, (char const *name)); _GL_CXXALIASWARN (secure_getenv); #elif defined GNULIB_POSIXCHECK # undef secure_getenv # if HAVE_RAW_DECL_SECURE_GETENV _GL_WARN_ON_USE (secure_getenv, "secure_getenv is unportable - " "use gnulib module secure_getenv for portability"); # endif #endif #if @GNULIB_SETENV@ /* Set NAME to VALUE in the environment. If REPLACE is nonzero, overwrite an existing value. */ # if @REPLACE_SETENV@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef setenv # define setenv rpl_setenv # endif _GL_FUNCDECL_RPL (setenv, int, (const char *name, const char *value, int replace) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (setenv, int, (const char *name, const char *value, int replace)); # else # if !@HAVE_DECL_SETENV@ _GL_FUNCDECL_SYS (setenv, int, (const char *name, const char *value, int replace) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (setenv, int, (const char *name, const char *value, int replace)); # endif # if !(@REPLACE_SETENV@ && !@HAVE_DECL_SETENV@) _GL_CXXALIASWARN (setenv); # endif #elif defined GNULIB_POSIXCHECK # undef setenv # if HAVE_RAW_DECL_SETENV _GL_WARN_ON_USE (setenv, "setenv is unportable - " "use gnulib module setenv for portability"); # endif #endif #if @GNULIB_STRTOD@ /* Parse a double from STRING, updating ENDP if appropriate. */ # if @REPLACE_STRTOD@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define strtod rpl_strtod # endif # define GNULIB_defined_strtod_function 1 _GL_FUNCDECL_RPL (strtod, double, (const char *restrict str, char **restrict endp) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (strtod, double, (const char *restrict str, char **restrict endp)); # else # if !@HAVE_STRTOD@ _GL_FUNCDECL_SYS (strtod, double, (const char *restrict str, char **restrict endp) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (strtod, double, (const char *restrict str, char **restrict endp)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (strtod); # endif #elif defined GNULIB_POSIXCHECK # undef strtod # if HAVE_RAW_DECL_STRTOD _GL_WARN_ON_USE (strtod, "strtod is unportable - " "use gnulib module strtod for portability"); # endif #endif #if @GNULIB_STRTOLD@ /* Parse a 'long double' from STRING, updating ENDP if appropriate. */ # if @REPLACE_STRTOLD@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define strtold rpl_strtold # endif # define GNULIB_defined_strtold_function 1 _GL_FUNCDECL_RPL (strtold, long double, (const char *restrict str, char **restrict endp) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (strtold, long double, (const char *restrict str, char **restrict endp)); # else # if !@HAVE_STRTOLD@ _GL_FUNCDECL_SYS (strtold, long double, (const char *restrict str, char **restrict endp) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (strtold, long double, (const char *restrict str, char **restrict endp)); # endif _GL_CXXALIASWARN (strtold); #elif defined GNULIB_POSIXCHECK # undef strtold # if HAVE_RAW_DECL_STRTOLD _GL_WARN_ON_USE (strtold, "strtold is unportable - " "use gnulib module strtold for portability"); # endif #endif #if @GNULIB_STRTOL@ /* Parse a signed integer whose textual representation starts at STRING. The integer is expected to be in base BASE (2 <= BASE <= 36); if BASE == 0, it may be decimal or octal (with prefix "0") or hexadecimal (with prefix "0x"). If ENDPTR is not NULL, the address of the first byte after the integer is stored in *ENDPTR. Upon overflow, the return value is LONG_MAX or LONG_MIN, and errno is set to ERANGE. */ # if @REPLACE_STRTOL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define strtol rpl_strtol # endif # define GNULIB_defined_strtol_function 1 _GL_FUNCDECL_RPL (strtol, long, (const char *restrict string, char **restrict endptr, int base) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (strtol, long, (const char *restrict string, char **restrict endptr, int base)); # else # if !@HAVE_STRTOL@ _GL_FUNCDECL_SYS (strtol, long, (const char *restrict string, char **restrict endptr, int base) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (strtol, long, (const char *restrict string, char **restrict endptr, int base)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (strtol); # endif #elif defined GNULIB_POSIXCHECK # undef strtol # if HAVE_RAW_DECL_STRTOL _GL_WARN_ON_USE (strtol, "strtol is unportable - " "use gnulib module strtol for portability"); # endif #endif #if @GNULIB_STRTOLL@ /* Parse a signed integer whose textual representation starts at STRING. The integer is expected to be in base BASE (2 <= BASE <= 36); if BASE == 0, it may be decimal or octal (with prefix "0") or hexadecimal (with prefix "0x"). If ENDPTR is not NULL, the address of the first byte after the integer is stored in *ENDPTR. Upon overflow, the return value is LLONG_MAX or LLONG_MIN, and errno is set to ERANGE. */ # if @REPLACE_STRTOLL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define strtoll rpl_strtoll # endif # define GNULIB_defined_strtoll_function 1 _GL_FUNCDECL_RPL (strtoll, long long, (const char *restrict string, char **restrict endptr, int base) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (strtoll, long long, (const char *restrict string, char **restrict endptr, int base)); # else # if !@HAVE_STRTOLL@ _GL_FUNCDECL_SYS (strtoll, long long, (const char *restrict string, char **restrict endptr, int base) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (strtoll, long long, (const char *restrict string, char **restrict endptr, int base)); # endif _GL_CXXALIASWARN (strtoll); #elif defined GNULIB_POSIXCHECK # undef strtoll # if HAVE_RAW_DECL_STRTOLL _GL_WARN_ON_USE (strtoll, "strtoll is unportable - " "use gnulib module strtoll for portability"); # endif #endif #if @GNULIB_STRTOUL@ /* Parse an unsigned integer whose textual representation starts at STRING. The integer is expected to be in base BASE (2 <= BASE <= 36); if BASE == 0, it may be decimal or octal (with prefix "0") or hexadecimal (with prefix "0x"). If ENDPTR is not NULL, the address of the first byte after the integer is stored in *ENDPTR. Upon overflow, the return value is ULONG_MAX, and errno is set to ERANGE. */ # if @REPLACE_STRTOUL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define strtoul rpl_strtoul # endif # define GNULIB_defined_strtoul_function 1 _GL_FUNCDECL_RPL (strtoul, unsigned long, (const char *restrict string, char **restrict endptr, int base) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (strtoul, unsigned long, (const char *restrict string, char **restrict endptr, int base)); # else # if !@HAVE_STRTOUL@ _GL_FUNCDECL_SYS (strtoul, unsigned long, (const char *restrict string, char **restrict endptr, int base) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (strtoul, unsigned long, (const char *restrict string, char **restrict endptr, int base)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (strtoul); # endif #elif defined GNULIB_POSIXCHECK # undef strtoul # if HAVE_RAW_DECL_STRTOUL _GL_WARN_ON_USE (strtoul, "strtoul is unportable - " "use gnulib module strtoul for portability"); # endif #endif #if @GNULIB_STRTOULL@ /* Parse an unsigned integer whose textual representation starts at STRING. The integer is expected to be in base BASE (2 <= BASE <= 36); if BASE == 0, it may be decimal or octal (with prefix "0") or hexadecimal (with prefix "0x"). If ENDPTR is not NULL, the address of the first byte after the integer is stored in *ENDPTR. Upon overflow, the return value is ULLONG_MAX, and errno is set to ERANGE. */ # if @REPLACE_STRTOULL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define strtoull rpl_strtoull # endif # define GNULIB_defined_strtoull_function 1 _GL_FUNCDECL_RPL (strtoull, unsigned long long, (const char *restrict string, char **restrict endptr, int base) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (strtoull, unsigned long long, (const char *restrict string, char **restrict endptr, int base)); # else # if !@HAVE_STRTOULL@ _GL_FUNCDECL_SYS (strtoull, unsigned long long, (const char *restrict string, char **restrict endptr, int base) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (strtoull, unsigned long long, (const char *restrict string, char **restrict endptr, int base)); # endif _GL_CXXALIASWARN (strtoull); #elif defined GNULIB_POSIXCHECK # undef strtoull # if HAVE_RAW_DECL_STRTOULL _GL_WARN_ON_USE (strtoull, "strtoull is unportable - " "use gnulib module strtoull for portability"); # endif #endif #if @GNULIB_UNLOCKPT@ /* Unlock the slave side of the pseudo-terminal whose master side is specified by FD, so that it can be opened. */ # if !@HAVE_UNLOCKPT@ _GL_FUNCDECL_SYS (unlockpt, int, (int fd)); # endif _GL_CXXALIAS_SYS (unlockpt, int, (int fd)); _GL_CXXALIASWARN (unlockpt); #elif defined GNULIB_POSIXCHECK # undef unlockpt # if HAVE_RAW_DECL_UNLOCKPT _GL_WARN_ON_USE (unlockpt, "unlockpt is not portable - " "use gnulib module unlockpt for portability"); # endif #endif #if @GNULIB_UNSETENV@ /* Remove the variable NAME from the environment. */ # if @REPLACE_UNSETENV@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef unsetenv # define unsetenv rpl_unsetenv # endif _GL_FUNCDECL_RPL (unsetenv, int, (const char *name) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (unsetenv, int, (const char *name)); # else # if !@HAVE_DECL_UNSETENV@ _GL_FUNCDECL_SYS (unsetenv, int, (const char *name) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (unsetenv, int, (const char *name)); # endif # if !(@REPLACE_UNSETENV@ && !@HAVE_DECL_UNSETENV@) _GL_CXXALIASWARN (unsetenv); # endif #elif defined GNULIB_POSIXCHECK # undef unsetenv # if HAVE_RAW_DECL_UNSETENV _GL_WARN_ON_USE (unsetenv, "unsetenv is unportable - " "use gnulib module unsetenv for portability"); # endif #endif /* Convert a wide character to a multibyte character. */ #if @GNULIB_WCTOMB@ # if @REPLACE_WCTOMB@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef wctomb # define wctomb rpl_wctomb # endif _GL_FUNCDECL_RPL (wctomb, int, (char *s, wchar_t wc)); _GL_CXXALIAS_RPL (wctomb, int, (char *s, wchar_t wc)); # else _GL_CXXALIAS_SYS (wctomb, int, (char *s, wchar_t wc)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wctomb); # endif #endif #endif /* _@GUARD_PREFIX@_STDLIB_H */ #endif /* _@GUARD_PREFIX@_STDLIB_H */ #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/intprops.h�����������������������������������������������������������������������������0000644�0001750�0001750�00000036250�14436425345�015166� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* intprops.h -- properties of integer types Copyright (C) 2001-2023 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _GL_INTPROPS_H #define _GL_INTPROPS_H #include "intprops-internal.h" /* The extra casts in the following macros work around compiler bugs, e.g., in Cray C 5.0.3.0. */ /* True if the arithmetic type T is an integer type. bool counts as an integer. */ #define TYPE_IS_INTEGER(t) ((t) 1.5 == 1) /* True if the real type T is signed. */ #define TYPE_SIGNED(t) _GL_TYPE_SIGNED (t) /* Return 1 if the real expression E, after promotion, has a signed or floating type. Do not evaluate E. */ #define EXPR_SIGNED(e) _GL_EXPR_SIGNED (e) /* Minimum and maximum values for integer types and expressions. */ /* The width in bits of the integer type or expression T. Do not evaluate T. T must not be a bit-field expression. Padding bits are not supported; this is checked at compile-time below. */ #define TYPE_WIDTH(t) _GL_TYPE_WIDTH (t) /* The maximum and minimum values for the integer type T. */ #define TYPE_MINIMUM(t) ((t) ~ TYPE_MAXIMUM (t)) #define TYPE_MAXIMUM(t) \ ((t) (! TYPE_SIGNED (t) \ ? (t) -1 \ : ((((t) 1 << (TYPE_WIDTH (t) - 2)) - 1) * 2 + 1))) /* Bound on length of the string representing an unsigned integer value representable in B bits. log10 (2.0) < 146/485. The smallest value of B where this bound is not tight is 2621. */ #define INT_BITS_STRLEN_BOUND(b) (((b) * 146 + 484) / 485) /* Bound on length of the string representing an integer type or expression T. T must not be a bit-field expression. Subtract 1 for the sign bit if T is signed, and then add 1 more for a minus sign if needed. Because _GL_SIGNED_TYPE_OR_EXPR sometimes returns 1 when its argument is unsigned, this macro may overestimate the true bound by one byte when applied to unsigned types of size 2, 4, 16, ... bytes. */ #define INT_STRLEN_BOUND(t) \ (INT_BITS_STRLEN_BOUND (TYPE_WIDTH (t) - _GL_SIGNED_TYPE_OR_EXPR (t)) \ + _GL_SIGNED_TYPE_OR_EXPR (t)) /* Bound on buffer size needed to represent an integer type or expression T, including the terminating null. T must not be a bit-field expression. */ #define INT_BUFSIZE_BOUND(t) (INT_STRLEN_BOUND (t) + 1) /* Range overflow checks. The INT_<op>_RANGE_OVERFLOW macros return 1 if the corresponding C operators overflow arithmetically when given the same arguments. These macros do not rely on undefined or implementation-defined behavior. Although their implementations are simple and straightforward, they are harder to use and may be less efficient than the INT_<op>_WRAPV, INT_<op>_OK, and INT_<op>_OVERFLOW macros described below. Example usage: long int i = ...; long int j = ...; if (INT_MULTIPLY_RANGE_OVERFLOW (i, j, LONG_MIN, LONG_MAX)) printf ("multiply would overflow"); else printf ("product is %ld", i * j); Restrictions on *_RANGE_OVERFLOW macros: These macros do not check for all possible numerical problems or undefined or unspecified behavior: they do not check for division by zero, for bad shift counts, or for shifting negative numbers. These macros may evaluate their arguments zero or multiple times, so the arguments should not have side effects. The arithmetic arguments (including the MIN and MAX arguments) must be of the same integer type after the usual arithmetic conversions, and the type must have minimum value MIN and maximum MAX. Unsigned types should use a zero MIN of the proper type. Because all arguments are subject to integer promotions, these macros typically do not work on types narrower than 'int'. These macros are tuned for constant MIN and MAX. For commutative operations such as A + B, they are also tuned for constant B. */ /* Return 1 if A + B would overflow in [MIN,MAX] arithmetic. See above for restrictions. */ #define INT_ADD_RANGE_OVERFLOW(a, b, min, max) \ ((b) < 0 \ ? (a) < (min) - (b) \ : (max) - (b) < (a)) /* Return 1 if A - B would overflow in [MIN,MAX] arithmetic. See above for restrictions. */ #define INT_SUBTRACT_RANGE_OVERFLOW(a, b, min, max) \ ((b) < 0 \ ? (max) + (b) < (a) \ : (a) < (min) + (b)) /* Return 1 if - A would overflow in [MIN,MAX] arithmetic. See above for restrictions. */ #define INT_NEGATE_RANGE_OVERFLOW(a, min, max) \ _GL_INT_NEGATE_RANGE_OVERFLOW (a, min, max) /* Return 1 if A * B would overflow in [MIN,MAX] arithmetic. See above for restrictions. Avoid && and || as they tickle bugs in Sun C 5.11 2010/08/13 and other compilers; see <https://lists.gnu.org/r/bug-gnulib/2011-05/msg00401.html>. */ #define INT_MULTIPLY_RANGE_OVERFLOW(a, b, min, max) \ ((b) < 0 \ ? ((a) < 0 \ ? (a) < (max) / (b) \ : (b) == -1 \ ? 0 \ : (min) / (b) < (a)) \ : (b) == 0 \ ? 0 \ : ((a) < 0 \ ? (a) < (min) / (b) \ : (max) / (b) < (a))) /* Return 1 if A / B would overflow in [MIN,MAX] arithmetic. See above for restrictions. Do not check for division by zero. */ #define INT_DIVIDE_RANGE_OVERFLOW(a, b, min, max) \ ((min) < 0 && (b) == -1 && (a) < - (max)) /* Return 1 if A % B would overflow in [MIN,MAX] arithmetic. See above for restrictions. Do not check for division by zero. Mathematically, % should never overflow, but on x86-like hosts INT_MIN % -1 traps, and the C standard permits this, so treat this as an overflow too. */ #define INT_REMAINDER_RANGE_OVERFLOW(a, b, min, max) \ INT_DIVIDE_RANGE_OVERFLOW (a, b, min, max) /* Return 1 if A << B would overflow in [MIN,MAX] arithmetic. See above for restrictions. Here, MIN and MAX are for A only, and B need not be of the same type as the other arguments. The C standard says that behavior is undefined for shifts unless 0 <= B < wordwidth, and that when A is negative then A << B has undefined behavior and A >> B has implementation-defined behavior, but do not check these other restrictions. */ #define INT_LEFT_SHIFT_RANGE_OVERFLOW(a, b, min, max) \ ((a) < 0 \ ? (a) < (min) >> (b) \ : (max) >> (b) < (a)) /* The _GL*_OVERFLOW macros have the same restrictions as the *_RANGE_OVERFLOW macros, except that they do not assume that operands (e.g., A and B) have the same type as MIN and MAX. Instead, they assume that the result (e.g., A + B) has that type. */ #if _GL_HAS_BUILTIN_OVERFLOW_P # define _GL_ADD_OVERFLOW(a, b, min, max) \ __builtin_add_overflow_p (a, b, (__typeof__ ((a) + (b))) 0) # define _GL_SUBTRACT_OVERFLOW(a, b, min, max) \ __builtin_sub_overflow_p (a, b, (__typeof__ ((a) - (b))) 0) # define _GL_MULTIPLY_OVERFLOW(a, b, min, max) \ __builtin_mul_overflow_p (a, b, (__typeof__ ((a) * (b))) 0) #else # define _GL_ADD_OVERFLOW(a, b, min, max) \ ((min) < 0 ? INT_ADD_RANGE_OVERFLOW (a, b, min, max) \ : (a) < 0 ? (b) <= (a) + (b) \ : (b) < 0 ? (a) <= (a) + (b) \ : (a) + (b) < (b)) # define _GL_SUBTRACT_OVERFLOW(a, b, min, max) \ ((min) < 0 ? INT_SUBTRACT_RANGE_OVERFLOW (a, b, min, max) \ : (a) < 0 ? 1 \ : (b) < 0 ? (a) - (b) <= (a) \ : (a) < (b)) # define _GL_MULTIPLY_OVERFLOW(a, b, min, max) \ (((min) == 0 && (((a) < 0 && 0 < (b)) || ((b) < 0 && 0 < (a)))) \ || INT_MULTIPLY_RANGE_OVERFLOW (a, b, min, max)) #endif #define _GL_DIVIDE_OVERFLOW(a, b, min, max) \ ((min) < 0 ? (b) == _GL_INT_NEGATE_CONVERT (min, 1) && (a) < - (max) \ : (a) < 0 ? (b) <= (a) + (b) - 1 \ : (b) < 0 && (a) + (b) <= (a)) #define _GL_REMAINDER_OVERFLOW(a, b, min, max) \ ((min) < 0 ? (b) == _GL_INT_NEGATE_CONVERT (min, 1) && (a) < - (max) \ : (a) < 0 ? (a) % (b) != ((max) - (b) + 1) % (b) \ : (b) < 0 && ! _GL_UNSIGNED_NEG_MULTIPLE (a, b, max)) /* Return a nonzero value if A is a mathematical multiple of B, where A is unsigned, B is negative, and MAX is the maximum value of A's type. A's type must be the same as (A % B)'s type. Normally (A % -B == 0) suffices, but things get tricky if -B would overflow. */ #define _GL_UNSIGNED_NEG_MULTIPLE(a, b, max) \ (((b) < -_GL_SIGNED_INT_MAXIMUM (b) \ ? (_GL_SIGNED_INT_MAXIMUM (b) == (max) \ ? (a) \ : (a) % (_GL_INT_CONVERT (a, _GL_SIGNED_INT_MAXIMUM (b)) + 1)) \ : (a) % - (b)) \ == 0) /* Check for integer overflow, and report low order bits of answer. The INT_<op>_OVERFLOW macros return 1 if the corresponding C operators might not yield numerically correct answers due to arithmetic overflow. The INT_<op>_WRAPV macros compute the low-order bits of the sum, difference, and product of two C integers, and return 1 if these low-order bits are not numerically correct. These macros work correctly on all known practical hosts, and do not rely on undefined behavior due to signed arithmetic overflow. Example usage, assuming A and B are long int: if (INT_MULTIPLY_OVERFLOW (a, b)) printf ("result would overflow\n"); else printf ("result is %ld (no overflow)\n", a * b); Example usage with WRAPV flavor: long int result; bool overflow = INT_MULTIPLY_WRAPV (a, b, &result); printf ("result is %ld (%s)\n", result, overflow ? "after overflow" : "no overflow"); Restrictions on these macros: These macros do not check for all possible numerical problems or undefined or unspecified behavior: they do not check for division by zero, for bad shift counts, or for shifting negative numbers. These macros may evaluate their arguments zero or multiple times, so the arguments should not have side effects. The WRAPV macros are not constant expressions. They support only +, binary -, and *. Because the WRAPV macros convert the result, they report overflow in different circumstances than the OVERFLOW macros do. For example, in the typical case with 16-bit 'short' and 32-bit 'int', if A, B and *R are all of type 'short' then INT_ADD_OVERFLOW (A, B) returns false because the addition cannot overflow after A and B are converted to 'int', whereas INT_ADD_WRAPV (A, B, R) returns true or false depending on whether the sum fits into 'short'. These macros are tuned for their last input argument being a constant. A, B, and *R should be integers; they need not be the same type, and they need not be all signed or all unsigned. However, none of the integer types should be bit-precise, and *R's type should not be char, bool, or an enumeration type. Return 1 if the integer expressions A * B, A - B, -A, A * B, A / B, A % B, and A << B would overflow, respectively. */ #define INT_ADD_OVERFLOW(a, b) \ _GL_BINARY_OP_OVERFLOW (a, b, _GL_ADD_OVERFLOW) #define INT_SUBTRACT_OVERFLOW(a, b) \ _GL_BINARY_OP_OVERFLOW (a, b, _GL_SUBTRACT_OVERFLOW) #define INT_NEGATE_OVERFLOW(a) _GL_INT_NEGATE_OVERFLOW (a) #define INT_MULTIPLY_OVERFLOW(a, b) \ _GL_BINARY_OP_OVERFLOW (a, b, _GL_MULTIPLY_OVERFLOW) #define INT_DIVIDE_OVERFLOW(a, b) \ _GL_BINARY_OP_OVERFLOW (a, b, _GL_DIVIDE_OVERFLOW) #define INT_REMAINDER_OVERFLOW(a, b) \ _GL_BINARY_OP_OVERFLOW (a, b, _GL_REMAINDER_OVERFLOW) #define INT_LEFT_SHIFT_OVERFLOW(a, b) \ INT_LEFT_SHIFT_RANGE_OVERFLOW (a, b, \ _GL_INT_MINIMUM (a), _GL_INT_MAXIMUM (a)) /* Return 1 if the expression A <op> B would overflow, where OP_RESULT_OVERFLOW (A, B, MIN, MAX) does the actual test, assuming MIN and MAX are the minimum and maximum for the result type. Arguments should be free of side effects. */ #define _GL_BINARY_OP_OVERFLOW(a, b, op_result_overflow) \ op_result_overflow (a, b, \ _GL_INT_MINIMUM (_GL_INT_CONVERT (a, b)), \ _GL_INT_MAXIMUM (_GL_INT_CONVERT (a, b))) /* Store the low-order bits of A + B, A - B, A * B, respectively, into *R. Return 1 if the result overflows. See above for restrictions. */ #define INT_ADD_WRAPV(a, b, r) _GL_INT_ADD_WRAPV (a, b, r) #define INT_SUBTRACT_WRAPV(a, b, r) _GL_INT_SUBTRACT_WRAPV (a, b, r) #define INT_MULTIPLY_WRAPV(a, b, r) _GL_INT_MULTIPLY_WRAPV (a, b, r) /* The following macros compute A + B, A - B, and A * B, respectively. If no overflow occurs, they set *R to the result and return 1; otherwise, they return 0 and may modify *R. Example usage: long int result; if (INT_ADD_OK (a, b, &result)) printf ("result is %ld\n", result); else printf ("overflow\n"); A, B, and *R should be integers; they need not be the same type, and they need not be all signed or all unsigned. However, none of the integer types should be bit-precise, and *R's type should not be char, bool, or an enumeration type. These macros work correctly on all known practical hosts, and do not rely on undefined behavior due to signed arithmetic overflow. These macros are not constant expressions. These macros may evaluate their arguments zero or multiple times, so the arguments should not have side effects. These macros are tuned for B being a constant. */ #define INT_ADD_OK(a, b, r) (! INT_ADD_WRAPV (a, b, r)) #define INT_SUBTRACT_OK(a, b, r) (! INT_SUBTRACT_WRAPV (a, b, r)) #define INT_MULTIPLY_OK(a, b, r) (! INT_MULTIPLY_WRAPV (a, b, r)) #endif /* _GL_INTPROPS_H */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/xmalloc.c������������������������������������������������������������������������������0000644�0001750�0001750�00000020272�14436425347�014741� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* xmalloc.c -- malloc with out of memory checking Copyright (C) 1990-2000, 2002-2006, 2008-2023 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 <https://www.gnu.org/licenses/>. */ #include <config.h> #define XALLOC_INLINE _GL_EXTERN_INLINE #include "xalloc.h" #include "ialloc.h" #include "minmax.h" #include <stdckdint.h> #include <stdlib.h> #include <stdint.h> #include <string.h> static void * _GL_ATTRIBUTE_PURE nonnull (void *p) { if (!p) xalloc_die (); return p; } /* Allocate S bytes of memory dynamically, with error checking. */ void * xmalloc (size_t s) { return nonnull (malloc (s)); } void * ximalloc (idx_t s) { return nonnull (imalloc (s)); } char * xcharalloc (size_t n) { return XNMALLOC (n, char); } /* Change the size of an allocated block of memory P to S bytes, with error checking. */ void * xrealloc (void *p, size_t s) { void *r = realloc (p, s); if (!r && (!p || s)) xalloc_die (); return r; } void * xirealloc (void *p, idx_t s) { return nonnull (irealloc (p, s)); } /* Change the size of an allocated block of memory P to an array of N objects each of S bytes, with error checking. */ void * xreallocarray (void *p, size_t n, size_t s) { void *r = reallocarray (p, n, s); if (!r && (!p || (n && s))) xalloc_die (); return r; } void * xireallocarray (void *p, idx_t n, idx_t s) { return nonnull (ireallocarray (p, n, s)); } /* Allocate an array of N objects, each with S bytes of memory, dynamically, with error checking. S must be nonzero. */ void * xnmalloc (size_t n, size_t s) { return xreallocarray (NULL, n, s); } void * xinmalloc (idx_t n, idx_t s) { return xireallocarray (NULL, n, s); } /* If P is null, allocate a block of at least *PS bytes; otherwise, reallocate P so that it contains more than *PS bytes. *PS must be nonzero unless P is null. Set *PS to the new block's size, and return the pointer to the new block. *PS is never set to zero, and the returned pointer is never null. */ void * x2realloc (void *p, size_t *ps) { return x2nrealloc (p, ps, 1); } /* If P is null, allocate a block of at least *PN such objects; otherwise, reallocate P so that it contains more than *PN objects each of S bytes. S must be nonzero. Set *PN to the new number of objects, and return the pointer to the new block. *PN is never set to zero, and the returned pointer is never null. Repeated reallocations are guaranteed to make progress, either by allocating an initial block with a nonzero size, or by allocating a larger block. In the following implementation, nonzero sizes are increased by a factor of approximately 1.5 so that repeated reallocations have O(N) overall cost rather than O(N**2) cost, but the specification for this function does not guarantee that rate. Here is an example of use: int *p = NULL; size_t used = 0; size_t allocated = 0; void append_int (int value) { if (used == allocated) p = x2nrealloc (p, &allocated, sizeof *p); p[used++] = value; } This causes x2nrealloc to allocate a block of some nonzero size the first time it is called. To have finer-grained control over the initial size, set *PN to a nonzero value before calling this function with P == NULL. For example: int *p = NULL; size_t used = 0; size_t allocated = 0; size_t allocated1 = 1000; void append_int (int value) { if (used == allocated) { p = x2nrealloc (p, &allocated1, sizeof *p); allocated = allocated1; } p[used++] = value; } */ void * x2nrealloc (void *p, size_t *pn, size_t s) { size_t n = *pn; if (! p) { if (! n) { /* The approximate size to use for initial small allocation requests, when the invoking code specifies an old size of zero. This is the largest "small" request for the GNU C library malloc. */ enum { DEFAULT_MXFAST = 64 * sizeof (size_t) / 4 }; n = DEFAULT_MXFAST / s; n += !n; } } else { /* Set N = floor (1.5 * N) + 1 to make progress even if N == 0. */ if (ckd_add (&n, n, (n >> 1) + 1)) xalloc_die (); } p = xreallocarray (p, n, s); *pn = n; return p; } /* Grow PA, which points to an array of *PN items, and return the location of the reallocated array, updating *PN to reflect its new size. The new array will contain at least N_INCR_MIN more items, but will not contain more than N_MAX items total. S is the size of each item, in bytes. S and N_INCR_MIN must be positive. *PN must be nonnegative. If N_MAX is -1, it is treated as if it were infinity. If PA is null, then allocate a new array instead of reallocating the old one. Thus, to grow an array A without saving its old contents, do { free (A); A = xpalloc (NULL, &AITEMS, ...); }. */ void * xpalloc (void *pa, idx_t *pn, idx_t n_incr_min, ptrdiff_t n_max, idx_t s) { idx_t n0 = *pn; /* The approximate size to use for initial small allocation requests. This is the largest "small" request for the GNU C library malloc. */ enum { DEFAULT_MXFAST = 64 * sizeof (size_t) / 4 }; /* If the array is tiny, grow it to about (but no greater than) DEFAULT_MXFAST bytes. Otherwise, grow it by about 50%. Adjust the growth according to three constraints: N_INCR_MIN, N_MAX, and what the C language can represent safely. */ idx_t n; if (ckd_add (&n, n0, n0 >> 1)) n = IDX_MAX; if (0 <= n_max && n_max < n) n = n_max; /* NBYTES is of a type suitable for holding the count of bytes in an object. This is typically idx_t, but it should be size_t on (theoretical?) platforms where SIZE_MAX < IDX_MAX so xpalloc does not pass values greater than SIZE_MAX to xrealloc. */ #if IDX_MAX <= SIZE_MAX idx_t nbytes; #else size_t nbytes; #endif idx_t adjusted_nbytes = (ckd_mul (&nbytes, n, s) ? MIN (IDX_MAX, SIZE_MAX) : nbytes < DEFAULT_MXFAST ? DEFAULT_MXFAST : 0); if (adjusted_nbytes) { n = adjusted_nbytes / s; nbytes = adjusted_nbytes - adjusted_nbytes % s; } if (! pa) *pn = 0; if (n - n0 < n_incr_min && (ckd_add (&n, n0, n_incr_min) || (0 <= n_max && n_max < n) || ckd_mul (&nbytes, n, s))) xalloc_die (); pa = xrealloc (pa, nbytes); *pn = n; return pa; } /* Allocate S bytes of zeroed memory dynamically, with error checking. There's no need for xnzalloc (N, S), since it would be equivalent to xcalloc (N, S). */ void * xzalloc (size_t s) { return xcalloc (s, 1); } void * xizalloc (idx_t s) { return xicalloc (s, 1); } /* Allocate zeroed memory for N elements of S bytes, with error checking. S must be nonzero. */ void * xcalloc (size_t n, size_t s) { return nonnull (calloc (n, s)); } void * xicalloc (idx_t n, idx_t s) { return nonnull (icalloc (n, s)); } /* Clone an object P of size S, with error checking. There's no need for xnmemdup (P, N, S), since xmemdup (P, N * S) works without any need for an arithmetic overflow check. */ void * xmemdup (void const *p, size_t s) { return memcpy (xmalloc (s), p, s); } void * ximemdup (void const *p, idx_t s) { return memcpy (ximalloc (s), p, s); } /* Clone an object P of size S, with error checking. Append a terminating NUL byte. */ char * ximemdup0 (void const *p, idx_t s) { char *result = ximalloc (s + 1); result[s] = 0; return memcpy (result, p, s); } /* Clone STRING. */ char * xstrdup (char const *string) { return xmemdup (string, strlen (string) + 1); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/Makefile.in����������������������������������������������������������������������������0000644�0001750�0001750�00001200405�14655401222�015167� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # Copyright (C) 2002-2023 Free Software Foundation, Inc. # # 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 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 file. If not, see <https://www.gnu.org/licenses/>. # # As a special exception to the GNU General Public License, # this file may be distributed as part of a program that # contains a configuration script generated by Autoconf, under # the same distribution terms as the rest of that program. # # Generated by gnulib-tool. # Reproduce by: # gnulib-tool --import --local-dir=gl \ # --lib=libgnu \ # --source-base=gnu \ # --m4-base=m4 \ # --doc-base=doc \ # --tests-base=tests \ # --aux-dir=build-aux \ # --no-conditional-dependencies \ # --no-libtool \ # --macro-prefix=gl \ # --avoid=xalloc-die \ # --avoid=openat-die \ # c-ctype \ # dirname \ # error \ # fprintftime \ # getline \ # getopt-gnu \ # gettext-h \ # gitlog-to-changelog \ # inttostr \ # regex \ # strerror \ # xalloc 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@ @GL_COND_OBJ_BTOWC_TRUE@am__append_1 = btowc.c @GL_COND_OBJ_CLOSE_TRUE@am__append_2 = close.c @GL_COND_OBJ_DUP2_TRUE@am__append_3 = dup2.c @GL_COND_OBJ_ERROR_TRUE@am__append_4 = error.c @GL_COND_OBJ_FCNTL_TRUE@am__append_5 = fcntl.c @GL_COND_OBJ_FREE_TRUE@am__append_6 = free.c @GL_COND_OBJ_FSTAT_TRUE@am__append_7 = fstat.c @GL_COND_OBJ_GETDELIM_TRUE@am__append_8 = getdelim.c @GL_COND_OBJ_GETDTABLESIZE_TRUE@am__append_9 = getdtablesize.c @GL_COND_OBJ_GETLINE_TRUE@am__append_10 = getline.c @GL_COND_OBJ_GETOPT_TRUE@am__append_11 = getopt.c getopt1.c @GL_COND_OBJ_GETPROGNAME_TRUE@am__append_12 = getprogname.c @GL_COND_OBJ_LOCALECONV_TRUE@am__append_13 = localeconv.c @GL_COND_OBJ_MBRTOWC_TRUE@am__append_14 = mbrtowc.c @GL_COND_OBJ_MBSINIT_TRUE@am__append_15 = mbsinit.c @GL_COND_OBJ_MBTOWC_TRUE@am__append_16 = mbtowc.c @GL_COND_OBJ_MSVC_INVAL_TRUE@am__append_17 = msvc-inval.c @GL_COND_OBJ_MSVC_NOTHROW_TRUE@am__append_18 = msvc-nothrow.c @GL_COND_OBJ_NL_LANGINFO_TRUE@am__append_19 = nl_langinfo.c @GL_COND_OBJ_NL_LANGINFO_LOCK_TRUE@am__append_20 = nl_langinfo-lock.c @GL_COND_OBJ_OPEN_TRUE@am__append_21 = open.c @GL_COND_OBJ_REALLOCARRAY_TRUE@am__append_22 = reallocarray.c @GL_COND_OBJ_REGEX_TRUE@am__append_23 = regex.c @GL_COND_OBJ_SETENV_TRUE@am__append_24 = setenv.c @GL_COND_OBJ_SETLOCALE_LOCK_TRUE@am__append_25 = setlocale-lock.c @GL_COND_OBJ_STAT_TRUE@am__append_26 = stat.c @GL_COND_OBJ_STDIO_READ_TRUE@am__append_27 = stdio-read.c @GL_COND_OBJ_STDIO_WRITE_TRUE@am__append_28 = stdio-write.c @GL_COND_OBJ_STRERROR_TRUE@am__append_29 = strerror.c @GL_COND_OBJ_STRERROR_OVERRIDE_TRUE@am__append_30 = strerror-override.c @GL_COND_OBJ_TIME_R_TRUE@am__append_31 = time_r.c @GL_COND_OBJ_TIME_RZ_TRUE@am__append_32 = time_rz.c @GL_COND_OBJ_TIMEGM_TRUE@am__append_33 = timegm.c @GL_COND_OBJ_TZSET_TRUE@am__append_34 = tzset.c @GL_COND_OBJ_UNSETENV_TRUE@am__append_35 = unsetenv.c @GL_COND_OBJ_WCRTOMB_TRUE@am__append_36 = wcrtomb.c @GL_COND_OBJ_WINDOWS_MUTEX_TRUE@am__append_37 = windows-mutex.c @GL_COND_OBJ_WINDOWS_ONCE_TRUE@am__append_38 = windows-once.c @GL_COND_OBJ_WINDOWS_RECMUTEX_TRUE@am__append_39 = windows-recmutex.c @GL_COND_OBJ_WINDOWS_RWLOCK_TRUE@am__append_40 = windows-rwlock.c subdir = gnu ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/doc/imprimatur/imprimatur.m4 \ $(top_srcdir)/m4/00gnulib.m4 $(top_srcdir)/m4/__inline.m4 \ $(top_srcdir)/m4/absolute-header.m4 $(top_srcdir)/m4/alloca.m4 \ $(top_srcdir)/m4/assert_h.m4 $(top_srcdir)/m4/btowc.m4 \ $(top_srcdir)/m4/builtin-expect.m4 $(top_srcdir)/m4/c-bool.m4 \ $(top_srcdir)/m4/calloc.m4 $(top_srcdir)/m4/close.m4 \ $(top_srcdir)/m4/codeset.m4 \ $(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup2.m4 \ $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \ $(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \ $(top_srcdir)/m4/error_h.m4 $(top_srcdir)/m4/extensions.m4 \ $(top_srcdir)/m4/extern-inline.m4 $(top_srcdir)/m4/fcntl-o.m4 \ $(top_srcdir)/m4/fcntl.m4 $(top_srcdir)/m4/fcntl_h.m4 \ $(top_srcdir)/m4/flexmember.m4 $(top_srcdir)/m4/free.m4 \ $(top_srcdir)/m4/fstat.m4 $(top_srcdir)/m4/getdelim.m4 \ $(top_srcdir)/m4/getdtablesize.m4 $(top_srcdir)/m4/getline.m4 \ $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/getprogname.m4 \ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gnulib-common.m4 \ $(top_srcdir)/m4/gnulib-comp.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/include_next.m4 \ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/inttostr.m4 \ $(top_srcdir)/m4/inttypes.m4 $(top_srcdir)/m4/langinfo_h.m4 \ $(top_srcdir)/m4/largefile.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/limits-h.m4 $(top_srcdir)/m4/localcharset.m4 \ $(top_srcdir)/m4/locale-fr.m4 $(top_srcdir)/m4/locale-ja.m4 \ $(top_srcdir)/m4/locale-zh.m4 $(top_srcdir)/m4/locale_h.m4 \ $(top_srcdir)/m4/localeconv.m4 $(top_srcdir)/m4/lock.m4 \ $(top_srcdir)/m4/malloc.m4 $(top_srcdir)/m4/malloca.m4 \ $(top_srcdir)/m4/mbrtowc.m4 $(top_srcdir)/m4/mbsinit.m4 \ $(top_srcdir)/m4/mbstate_t.m4 $(top_srcdir)/m4/mbtowc.m4 \ $(top_srcdir)/m4/minmax.m4 $(top_srcdir)/m4/mktime.m4 \ $(top_srcdir)/m4/mode_t.m4 $(top_srcdir)/m4/msvc-inval.m4 \ $(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \ $(top_srcdir)/m4/musl.m4 $(top_srcdir)/m4/nl_langinfo.m4 \ $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/nocrash.m4 \ $(top_srcdir)/m4/nstrftime.m4 $(top_srcdir)/m4/off_t.m4 \ $(top_srcdir)/m4/open-cloexec.m4 \ $(top_srcdir)/m4/open-slash.m4 $(top_srcdir)/m4/open.m4 \ $(top_srcdir)/m4/pathmax.m4 $(top_srcdir)/m4/po.m4 \ $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/m4/pthread_rwlock_rdlock.m4 \ $(top_srcdir)/m4/realloc.m4 $(top_srcdir)/m4/reallocarray.m4 \ $(top_srcdir)/m4/regex.m4 $(top_srcdir)/m4/setenv.m4 \ $(top_srcdir)/m4/setlocale_null.m4 $(top_srcdir)/m4/ssize_t.m4 \ $(top_srcdir)/m4/stat-time.m4 $(top_srcdir)/m4/stat.m4 \ $(top_srcdir)/m4/stddef_h.m4 $(top_srcdir)/m4/stdint.m4 \ $(top_srcdir)/m4/stdio_h.m4 $(top_srcdir)/m4/stdlib_h.m4 \ $(top_srcdir)/m4/strerror.m4 $(top_srcdir)/m4/string_h.m4 \ $(top_srcdir)/m4/sys_socket_h.m4 \ $(top_srcdir)/m4/sys_stat_h.m4 $(top_srcdir)/m4/sys_types_h.m4 \ $(top_srcdir)/m4/threadlib.m4 $(top_srcdir)/m4/time_h.m4 \ $(top_srcdir)/m4/time_r.m4 $(top_srcdir)/m4/time_rz.m4 \ $(top_srcdir)/m4/timegm.m4 $(top_srcdir)/m4/tm_gmtoff.m4 \ $(top_srcdir)/m4/tzset.m4 $(top_srcdir)/m4/unistd_h.m4 \ $(top_srcdir)/m4/visibility.m4 $(top_srcdir)/m4/warn-on-use.m4 \ $(top_srcdir)/m4/wchar_h.m4 $(top_srcdir)/m4/wchar_t.m4 \ $(top_srcdir)/m4/wcrtomb.m4 $(top_srcdir)/m4/wctype_h.m4 \ $(top_srcdir)/m4/wint_t.m4 $(top_srcdir)/m4/xalloc.m4 \ $(top_srcdir)/m4/zzgnulib.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 = LIBRARIES = $(noinst_LIBRARIES) LTLIBRARIES = $(noinst_LTLIBRARIES) 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 = libgnu_a_AR = $(AR) $(ARFLAGS) am__DEPENDENCIES_1 = am__libgnu_a_SOURCES_DIST = basename-lgpl.c btowc.c c-ctype.h \ c-ctype.c cloexec.c close.c dirname.c basename.c \ dirname-lgpl.c stripslash.c dup2.c error.c fcntl.c fd-hook.c \ fprintftime.c free.c fstat.c getdelim.c getdtablesize.c \ getline.c getopt.c getopt1.c getprogname.c gettext.h \ malloc/dynarray_at_failure.c malloc/dynarray_emplace_enlarge.c \ malloc/dynarray_finalize.c malloc/dynarray_resize.c \ malloc/dynarray_resize_clear.c hard-locale.c ialloc.c idx.h \ imaxtostr.c inttostr.c offtostr.c uinttostr.c umaxtostr.c \ localcharset.c localeconv.c glthread/lock.h glthread/lock.c \ malloca.c mbrtowc.c mbsinit.c mbtowc.c minmax.h msvc-inval.c \ msvc-nothrow.c nl_langinfo.c nl_langinfo-lock.c nstrftime.c \ open.c reallocarray.c regex.c setenv.c setlocale_null.c \ setlocale-lock.c stat.c stat-time.c stdio-read.c stdio-write.c \ strerror.c strerror-override.c glthread/threadlib.c time_r.c \ time_rz.c timegm.c tzset.c unistd.c unsetenv.c wcrtomb.c \ wctype-h.c windows-mutex.c windows-once.c windows-recmutex.c \ windows-rwlock.c xmalloc.c @GL_COND_OBJ_BTOWC_TRUE@am__objects_1 = libgnu_a-btowc.$(OBJEXT) @GL_COND_OBJ_CLOSE_TRUE@am__objects_2 = libgnu_a-close.$(OBJEXT) @GL_COND_OBJ_DUP2_TRUE@am__objects_3 = libgnu_a-dup2.$(OBJEXT) @GL_COND_OBJ_ERROR_TRUE@am__objects_4 = libgnu_a-error.$(OBJEXT) @GL_COND_OBJ_FCNTL_TRUE@am__objects_5 = libgnu_a-fcntl.$(OBJEXT) @GL_COND_OBJ_FREE_TRUE@am__objects_6 = libgnu_a-free.$(OBJEXT) @GL_COND_OBJ_FSTAT_TRUE@am__objects_7 = libgnu_a-fstat.$(OBJEXT) @GL_COND_OBJ_GETDELIM_TRUE@am__objects_8 = \ @GL_COND_OBJ_GETDELIM_TRUE@ libgnu_a-getdelim.$(OBJEXT) @GL_COND_OBJ_GETDTABLESIZE_TRUE@am__objects_9 = libgnu_a-getdtablesize.$(OBJEXT) @GL_COND_OBJ_GETLINE_TRUE@am__objects_10 = libgnu_a-getline.$(OBJEXT) @GL_COND_OBJ_GETOPT_TRUE@am__objects_11 = libgnu_a-getopt.$(OBJEXT) \ @GL_COND_OBJ_GETOPT_TRUE@ libgnu_a-getopt1.$(OBJEXT) @GL_COND_OBJ_GETPROGNAME_TRUE@am__objects_12 = \ @GL_COND_OBJ_GETPROGNAME_TRUE@ libgnu_a-getprogname.$(OBJEXT) am__dirstamp = $(am__leading_dot)dirstamp @GL_COND_OBJ_LOCALECONV_TRUE@am__objects_13 = \ @GL_COND_OBJ_LOCALECONV_TRUE@ libgnu_a-localeconv.$(OBJEXT) @GL_COND_OBJ_MBRTOWC_TRUE@am__objects_14 = libgnu_a-mbrtowc.$(OBJEXT) @GL_COND_OBJ_MBSINIT_TRUE@am__objects_15 = libgnu_a-mbsinit.$(OBJEXT) @GL_COND_OBJ_MBTOWC_TRUE@am__objects_16 = libgnu_a-mbtowc.$(OBJEXT) @GL_COND_OBJ_MSVC_INVAL_TRUE@am__objects_17 = \ @GL_COND_OBJ_MSVC_INVAL_TRUE@ libgnu_a-msvc-inval.$(OBJEXT) @GL_COND_OBJ_MSVC_NOTHROW_TRUE@am__objects_18 = libgnu_a-msvc-nothrow.$(OBJEXT) @GL_COND_OBJ_NL_LANGINFO_TRUE@am__objects_19 = \ @GL_COND_OBJ_NL_LANGINFO_TRUE@ libgnu_a-nl_langinfo.$(OBJEXT) @GL_COND_OBJ_NL_LANGINFO_LOCK_TRUE@am__objects_20 = libgnu_a-nl_langinfo-lock.$(OBJEXT) @GL_COND_OBJ_OPEN_TRUE@am__objects_21 = libgnu_a-open.$(OBJEXT) @GL_COND_OBJ_REALLOCARRAY_TRUE@am__objects_22 = libgnu_a-reallocarray.$(OBJEXT) @GL_COND_OBJ_REGEX_TRUE@am__objects_23 = libgnu_a-regex.$(OBJEXT) @GL_COND_OBJ_SETENV_TRUE@am__objects_24 = libgnu_a-setenv.$(OBJEXT) @GL_COND_OBJ_SETLOCALE_LOCK_TRUE@am__objects_25 = libgnu_a-setlocale-lock.$(OBJEXT) @GL_COND_OBJ_STAT_TRUE@am__objects_26 = libgnu_a-stat.$(OBJEXT) @GL_COND_OBJ_STDIO_READ_TRUE@am__objects_27 = \ @GL_COND_OBJ_STDIO_READ_TRUE@ libgnu_a-stdio-read.$(OBJEXT) @GL_COND_OBJ_STDIO_WRITE_TRUE@am__objects_28 = \ @GL_COND_OBJ_STDIO_WRITE_TRUE@ libgnu_a-stdio-write.$(OBJEXT) @GL_COND_OBJ_STRERROR_TRUE@am__objects_29 = \ @GL_COND_OBJ_STRERROR_TRUE@ libgnu_a-strerror.$(OBJEXT) @GL_COND_OBJ_STRERROR_OVERRIDE_TRUE@am__objects_30 = libgnu_a-strerror-override.$(OBJEXT) @GL_COND_OBJ_TIME_R_TRUE@am__objects_31 = libgnu_a-time_r.$(OBJEXT) @GL_COND_OBJ_TIME_RZ_TRUE@am__objects_32 = libgnu_a-time_rz.$(OBJEXT) @GL_COND_OBJ_TIMEGM_TRUE@am__objects_33 = libgnu_a-timegm.$(OBJEXT) @GL_COND_OBJ_TZSET_TRUE@am__objects_34 = libgnu_a-tzset.$(OBJEXT) @GL_COND_OBJ_UNSETENV_TRUE@am__objects_35 = \ @GL_COND_OBJ_UNSETENV_TRUE@ libgnu_a-unsetenv.$(OBJEXT) @GL_COND_OBJ_WCRTOMB_TRUE@am__objects_36 = libgnu_a-wcrtomb.$(OBJEXT) @GL_COND_OBJ_WINDOWS_MUTEX_TRUE@am__objects_37 = libgnu_a-windows-mutex.$(OBJEXT) @GL_COND_OBJ_WINDOWS_ONCE_TRUE@am__objects_38 = libgnu_a-windows-once.$(OBJEXT) @GL_COND_OBJ_WINDOWS_RECMUTEX_TRUE@am__objects_39 = libgnu_a-windows-recmutex.$(OBJEXT) @GL_COND_OBJ_WINDOWS_RWLOCK_TRUE@am__objects_40 = libgnu_a-windows-rwlock.$(OBJEXT) am_libgnu_a_OBJECTS = libgnu_a-basename-lgpl.$(OBJEXT) \ $(am__objects_1) libgnu_a-c-ctype.$(OBJEXT) \ libgnu_a-cloexec.$(OBJEXT) $(am__objects_2) \ libgnu_a-dirname.$(OBJEXT) libgnu_a-basename.$(OBJEXT) \ libgnu_a-dirname-lgpl.$(OBJEXT) libgnu_a-stripslash.$(OBJEXT) \ $(am__objects_3) $(am__objects_4) $(am__objects_5) \ libgnu_a-fd-hook.$(OBJEXT) libgnu_a-fprintftime.$(OBJEXT) \ $(am__objects_6) $(am__objects_7) $(am__objects_8) \ $(am__objects_9) $(am__objects_10) $(am__objects_11) \ $(am__objects_12) \ malloc/libgnu_a-dynarray_at_failure.$(OBJEXT) \ malloc/libgnu_a-dynarray_emplace_enlarge.$(OBJEXT) \ malloc/libgnu_a-dynarray_finalize.$(OBJEXT) \ malloc/libgnu_a-dynarray_resize.$(OBJEXT) \ malloc/libgnu_a-dynarray_resize_clear.$(OBJEXT) \ libgnu_a-hard-locale.$(OBJEXT) libgnu_a-ialloc.$(OBJEXT) \ libgnu_a-imaxtostr.$(OBJEXT) libgnu_a-inttostr.$(OBJEXT) \ libgnu_a-offtostr.$(OBJEXT) libgnu_a-uinttostr.$(OBJEXT) \ libgnu_a-umaxtostr.$(OBJEXT) libgnu_a-localcharset.$(OBJEXT) \ $(am__objects_13) glthread/libgnu_a-lock.$(OBJEXT) \ libgnu_a-malloca.$(OBJEXT) $(am__objects_14) $(am__objects_15) \ $(am__objects_16) $(am__objects_17) $(am__objects_18) \ $(am__objects_19) $(am__objects_20) \ libgnu_a-nstrftime.$(OBJEXT) $(am__objects_21) \ $(am__objects_22) $(am__objects_23) $(am__objects_24) \ libgnu_a-setlocale_null.$(OBJEXT) $(am__objects_25) \ $(am__objects_26) libgnu_a-stat-time.$(OBJEXT) \ $(am__objects_27) $(am__objects_28) $(am__objects_29) \ $(am__objects_30) glthread/libgnu_a-threadlib.$(OBJEXT) \ $(am__objects_31) $(am__objects_32) $(am__objects_33) \ $(am__objects_34) libgnu_a-unistd.$(OBJEXT) $(am__objects_35) \ $(am__objects_36) libgnu_a-wctype-h.$(OBJEXT) \ $(am__objects_37) $(am__objects_38) $(am__objects_39) \ $(am__objects_40) libgnu_a-xmalloc.$(OBJEXT) libgnu_a_OBJECTS = $(am_libgnu_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__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/libgnu_a-anytostr.Po \ ./$(DEPDIR)/libgnu_a-basename-lgpl.Po \ ./$(DEPDIR)/libgnu_a-basename.Po ./$(DEPDIR)/libgnu_a-btowc.Po \ ./$(DEPDIR)/libgnu_a-c-ctype.Po ./$(DEPDIR)/libgnu_a-calloc.Po \ ./$(DEPDIR)/libgnu_a-cloexec.Po ./$(DEPDIR)/libgnu_a-close.Po \ ./$(DEPDIR)/libgnu_a-dirname-lgpl.Po \ ./$(DEPDIR)/libgnu_a-dirname.Po ./$(DEPDIR)/libgnu_a-dup2.Po \ ./$(DEPDIR)/libgnu_a-error.Po ./$(DEPDIR)/libgnu_a-fcntl.Po \ ./$(DEPDIR)/libgnu_a-fd-hook.Po \ ./$(DEPDIR)/libgnu_a-fprintftime.Po \ ./$(DEPDIR)/libgnu_a-free.Po ./$(DEPDIR)/libgnu_a-fstat.Po \ ./$(DEPDIR)/libgnu_a-getdelim.Po \ ./$(DEPDIR)/libgnu_a-getdtablesize.Po \ ./$(DEPDIR)/libgnu_a-getline.Po ./$(DEPDIR)/libgnu_a-getopt.Po \ ./$(DEPDIR)/libgnu_a-getopt1.Po \ ./$(DEPDIR)/libgnu_a-getprogname.Po \ ./$(DEPDIR)/libgnu_a-hard-locale.Po \ ./$(DEPDIR)/libgnu_a-ialloc.Po \ ./$(DEPDIR)/libgnu_a-imaxtostr.Po \ ./$(DEPDIR)/libgnu_a-inttostr.Po \ ./$(DEPDIR)/libgnu_a-lc-charset-dispatch.Po \ ./$(DEPDIR)/libgnu_a-localcharset.Po \ ./$(DEPDIR)/libgnu_a-localeconv.Po \ ./$(DEPDIR)/libgnu_a-malloc.Po ./$(DEPDIR)/libgnu_a-malloca.Po \ ./$(DEPDIR)/libgnu_a-mbrtowc.Po \ ./$(DEPDIR)/libgnu_a-mbsinit.Po \ ./$(DEPDIR)/libgnu_a-mbtowc-lock.Po \ ./$(DEPDIR)/libgnu_a-mbtowc.Po ./$(DEPDIR)/libgnu_a-mktime.Po \ ./$(DEPDIR)/libgnu_a-msvc-inval.Po \ ./$(DEPDIR)/libgnu_a-msvc-nothrow.Po \ ./$(DEPDIR)/libgnu_a-nl_langinfo-lock.Po \ ./$(DEPDIR)/libgnu_a-nl_langinfo.Po \ ./$(DEPDIR)/libgnu_a-nstrftime.Po \ ./$(DEPDIR)/libgnu_a-offtostr.Po ./$(DEPDIR)/libgnu_a-open.Po \ ./$(DEPDIR)/libgnu_a-realloc.Po \ ./$(DEPDIR)/libgnu_a-reallocarray.Po \ ./$(DEPDIR)/libgnu_a-regcomp.Po ./$(DEPDIR)/libgnu_a-regex.Po \ ./$(DEPDIR)/libgnu_a-regex_internal.Po \ ./$(DEPDIR)/libgnu_a-regexec.Po ./$(DEPDIR)/libgnu_a-setenv.Po \ ./$(DEPDIR)/libgnu_a-setlocale-lock.Po \ ./$(DEPDIR)/libgnu_a-setlocale_null.Po \ ./$(DEPDIR)/libgnu_a-stat-time.Po \ ./$(DEPDIR)/libgnu_a-stat-w32.Po ./$(DEPDIR)/libgnu_a-stat.Po \ ./$(DEPDIR)/libgnu_a-stdio-read.Po \ ./$(DEPDIR)/libgnu_a-stdio-write.Po \ ./$(DEPDIR)/libgnu_a-strerror-override.Po \ ./$(DEPDIR)/libgnu_a-strerror.Po \ ./$(DEPDIR)/libgnu_a-stripslash.Po \ ./$(DEPDIR)/libgnu_a-time_r.Po ./$(DEPDIR)/libgnu_a-time_rz.Po \ ./$(DEPDIR)/libgnu_a-timegm.Po ./$(DEPDIR)/libgnu_a-tzset.Po \ ./$(DEPDIR)/libgnu_a-uinttostr.Po \ ./$(DEPDIR)/libgnu_a-umaxtostr.Po \ ./$(DEPDIR)/libgnu_a-unistd.Po \ ./$(DEPDIR)/libgnu_a-unsetenv.Po \ ./$(DEPDIR)/libgnu_a-wcrtomb.Po \ ./$(DEPDIR)/libgnu_a-wctype-h.Po \ ./$(DEPDIR)/libgnu_a-windows-mutex.Po \ ./$(DEPDIR)/libgnu_a-windows-once.Po \ ./$(DEPDIR)/libgnu_a-windows-recmutex.Po \ ./$(DEPDIR)/libgnu_a-windows-rwlock.Po \ ./$(DEPDIR)/libgnu_a-xmalloc.Po \ glthread/$(DEPDIR)/libgnu_a-lock.Po \ glthread/$(DEPDIR)/libgnu_a-threadlib.Po \ malloc/$(DEPDIR)/libgnu_a-dynarray-skeleton.Po \ malloc/$(DEPDIR)/libgnu_a-dynarray_at_failure.Po \ malloc/$(DEPDIR)/libgnu_a-dynarray_emplace_enlarge.Po \ malloc/$(DEPDIR)/libgnu_a-dynarray_finalize.Po \ malloc/$(DEPDIR)/libgnu_a-dynarray_resize.Po \ malloc/$(DEPDIR)/libgnu_a-dynarray_resize_clear.Po am__mv = mv -f AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = 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 = $(libgnu_a_SOURCES) $(EXTRA_libgnu_a_SOURCES) DIST_SOURCES = $(am__libgnu_a_SOURCES_DIST) $(EXTRA_libgnu_a_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 distdir-am 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)` DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/build-aux/depcomp 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@ ALLOCA = @ALLOCA@ ALLOCA_H = @ALLOCA_H@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ ASSERT_H = @ASSERT_H@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOM4TE = @AUTOM4TE@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ GETOPT_H = @GETOPT_H@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GL_CFLAG_ALLOW_WARNINGS = @GL_CFLAG_ALLOW_WARNINGS@ GL_CFLAG_GNULIB_WARNINGS = @GL_CFLAG_GNULIB_WARNINGS@ GL_GNULIB_ACCESS = @GL_GNULIB_ACCESS@ GL_GNULIB_ALIGNED_ALLOC = @GL_GNULIB_ALIGNED_ALLOC@ GL_GNULIB_ATOLL = @GL_GNULIB_ATOLL@ GL_GNULIB_BTOWC = @GL_GNULIB_BTOWC@ GL_GNULIB_CALLOC_GNU = @GL_GNULIB_CALLOC_GNU@ GL_GNULIB_CALLOC_POSIX = @GL_GNULIB_CALLOC_POSIX@ GL_GNULIB_CANONICALIZE_FILE_NAME = @GL_GNULIB_CANONICALIZE_FILE_NAME@ GL_GNULIB_CHDIR = @GL_GNULIB_CHDIR@ GL_GNULIB_CHMOD = @GL_GNULIB_CHMOD@ GL_GNULIB_CHOWN = @GL_GNULIB_CHOWN@ GL_GNULIB_CLOSE = @GL_GNULIB_CLOSE@ GL_GNULIB_COPY_FILE_RANGE = @GL_GNULIB_COPY_FILE_RANGE@ GL_GNULIB_CREAT = @GL_GNULIB_CREAT@ GL_GNULIB_CTIME = @GL_GNULIB_CTIME@ GL_GNULIB_DPRINTF = @GL_GNULIB_DPRINTF@ GL_GNULIB_DUP = @GL_GNULIB_DUP@ GL_GNULIB_DUP2 = @GL_GNULIB_DUP2@ GL_GNULIB_DUP3 = @GL_GNULIB_DUP3@ GL_GNULIB_DUPLOCALE = @GL_GNULIB_DUPLOCALE@ GL_GNULIB_ENVIRON = @GL_GNULIB_ENVIRON@ GL_GNULIB_EUIDACCESS = @GL_GNULIB_EUIDACCESS@ GL_GNULIB_EXECL = @GL_GNULIB_EXECL@ GL_GNULIB_EXECLE = @GL_GNULIB_EXECLE@ GL_GNULIB_EXECLP = @GL_GNULIB_EXECLP@ GL_GNULIB_EXECV = @GL_GNULIB_EXECV@ GL_GNULIB_EXECVE = @GL_GNULIB_EXECVE@ GL_GNULIB_EXECVP = @GL_GNULIB_EXECVP@ GL_GNULIB_EXECVPE = @GL_GNULIB_EXECVPE@ GL_GNULIB_EXPLICIT_BZERO = @GL_GNULIB_EXPLICIT_BZERO@ GL_GNULIB_FACCESSAT = @GL_GNULIB_FACCESSAT@ GL_GNULIB_FCHDIR = @GL_GNULIB_FCHDIR@ GL_GNULIB_FCHMODAT = @GL_GNULIB_FCHMODAT@ GL_GNULIB_FCHOWNAT = @GL_GNULIB_FCHOWNAT@ GL_GNULIB_FCLOSE = @GL_GNULIB_FCLOSE@ GL_GNULIB_FCNTL = @GL_GNULIB_FCNTL@ GL_GNULIB_FDATASYNC = @GL_GNULIB_FDATASYNC@ GL_GNULIB_FDOPEN = @GL_GNULIB_FDOPEN@ GL_GNULIB_FFLUSH = @GL_GNULIB_FFLUSH@ GL_GNULIB_FFSL = @GL_GNULIB_FFSL@ GL_GNULIB_FFSLL = @GL_GNULIB_FFSLL@ GL_GNULIB_FGETC = @GL_GNULIB_FGETC@ GL_GNULIB_FGETS = @GL_GNULIB_FGETS@ GL_GNULIB_FOPEN = @GL_GNULIB_FOPEN@ GL_GNULIB_FOPEN_GNU = @GL_GNULIB_FOPEN_GNU@ GL_GNULIB_FPRINTF = @GL_GNULIB_FPRINTF@ GL_GNULIB_FPRINTF_POSIX = @GL_GNULIB_FPRINTF_POSIX@ GL_GNULIB_FPURGE = @GL_GNULIB_FPURGE@ GL_GNULIB_FPUTC = @GL_GNULIB_FPUTC@ GL_GNULIB_FPUTS = @GL_GNULIB_FPUTS@ GL_GNULIB_FREAD = @GL_GNULIB_FREAD@ GL_GNULIB_FREE_POSIX = @GL_GNULIB_FREE_POSIX@ GL_GNULIB_FREOPEN = @GL_GNULIB_FREOPEN@ GL_GNULIB_FSCANF = @GL_GNULIB_FSCANF@ GL_GNULIB_FSEEK = @GL_GNULIB_FSEEK@ GL_GNULIB_FSEEKO = @GL_GNULIB_FSEEKO@ GL_GNULIB_FSTAT = @GL_GNULIB_FSTAT@ GL_GNULIB_FSTATAT = @GL_GNULIB_FSTATAT@ GL_GNULIB_FSYNC = @GL_GNULIB_FSYNC@ GL_GNULIB_FTELL = @GL_GNULIB_FTELL@ GL_GNULIB_FTELLO = @GL_GNULIB_FTELLO@ GL_GNULIB_FTRUNCATE = @GL_GNULIB_FTRUNCATE@ GL_GNULIB_FUTIMENS = @GL_GNULIB_FUTIMENS@ GL_GNULIB_FWRITE = @GL_GNULIB_FWRITE@ GL_GNULIB_GETC = @GL_GNULIB_GETC@ GL_GNULIB_GETCHAR = @GL_GNULIB_GETCHAR@ GL_GNULIB_GETCWD = @GL_GNULIB_GETCWD@ GL_GNULIB_GETDELIM = @GL_GNULIB_GETDELIM@ GL_GNULIB_GETDOMAINNAME = @GL_GNULIB_GETDOMAINNAME@ GL_GNULIB_GETDTABLESIZE = @GL_GNULIB_GETDTABLESIZE@ GL_GNULIB_GETENTROPY = @GL_GNULIB_GETENTROPY@ GL_GNULIB_GETGROUPS = @GL_GNULIB_GETGROUPS@ GL_GNULIB_GETHOSTNAME = @GL_GNULIB_GETHOSTNAME@ GL_GNULIB_GETLINE = @GL_GNULIB_GETLINE@ GL_GNULIB_GETLOADAVG = @GL_GNULIB_GETLOADAVG@ GL_GNULIB_GETLOGIN = @GL_GNULIB_GETLOGIN@ GL_GNULIB_GETLOGIN_R = @GL_GNULIB_GETLOGIN_R@ GL_GNULIB_GETOPT_POSIX = @GL_GNULIB_GETOPT_POSIX@ GL_GNULIB_GETPAGESIZE = @GL_GNULIB_GETPAGESIZE@ GL_GNULIB_GETPASS = @GL_GNULIB_GETPASS@ GL_GNULIB_GETPASS_GNU = @GL_GNULIB_GETPASS_GNU@ GL_GNULIB_GETPROGNAME = @GL_GNULIB_GETPROGNAME@ GL_GNULIB_GETSUBOPT = @GL_GNULIB_GETSUBOPT@ GL_GNULIB_GETUMASK = @GL_GNULIB_GETUMASK@ GL_GNULIB_GETUSERSHELL = @GL_GNULIB_GETUSERSHELL@ GL_GNULIB_GRANTPT = @GL_GNULIB_GRANTPT@ GL_GNULIB_GROUP_MEMBER = @GL_GNULIB_GROUP_MEMBER@ GL_GNULIB_IMAXABS = @GL_GNULIB_IMAXABS@ GL_GNULIB_IMAXDIV = @GL_GNULIB_IMAXDIV@ GL_GNULIB_ISATTY = @GL_GNULIB_ISATTY@ GL_GNULIB_ISWBLANK = @GL_GNULIB_ISWBLANK@ GL_GNULIB_ISWCTYPE = @GL_GNULIB_ISWCTYPE@ GL_GNULIB_ISWDIGIT = @GL_GNULIB_ISWDIGIT@ GL_GNULIB_ISWXDIGIT = @GL_GNULIB_ISWXDIGIT@ GL_GNULIB_LCHMOD = @GL_GNULIB_LCHMOD@ GL_GNULIB_LCHOWN = @GL_GNULIB_LCHOWN@ GL_GNULIB_LINK = @GL_GNULIB_LINK@ GL_GNULIB_LINKAT = @GL_GNULIB_LINKAT@ GL_GNULIB_LOCALECONV = @GL_GNULIB_LOCALECONV@ GL_GNULIB_LOCALENAME = @GL_GNULIB_LOCALENAME@ GL_GNULIB_LOCALTIME = @GL_GNULIB_LOCALTIME@ GL_GNULIB_LSEEK = @GL_GNULIB_LSEEK@ GL_GNULIB_LSTAT = @GL_GNULIB_LSTAT@ GL_GNULIB_MALLOC_GNU = @GL_GNULIB_MALLOC_GNU@ GL_GNULIB_MALLOC_POSIX = @GL_GNULIB_MALLOC_POSIX@ GL_GNULIB_MBRLEN = @GL_GNULIB_MBRLEN@ GL_GNULIB_MBRTOWC = @GL_GNULIB_MBRTOWC@ GL_GNULIB_MBSCASECMP = @GL_GNULIB_MBSCASECMP@ GL_GNULIB_MBSCASESTR = @GL_GNULIB_MBSCASESTR@ GL_GNULIB_MBSCHR = @GL_GNULIB_MBSCHR@ GL_GNULIB_MBSCSPN = @GL_GNULIB_MBSCSPN@ GL_GNULIB_MBSINIT = @GL_GNULIB_MBSINIT@ GL_GNULIB_MBSLEN = @GL_GNULIB_MBSLEN@ GL_GNULIB_MBSNCASECMP = @GL_GNULIB_MBSNCASECMP@ GL_GNULIB_MBSNLEN = @GL_GNULIB_MBSNLEN@ GL_GNULIB_MBSNRTOWCS = @GL_GNULIB_MBSNRTOWCS@ GL_GNULIB_MBSPBRK = @GL_GNULIB_MBSPBRK@ GL_GNULIB_MBSPCASECMP = @GL_GNULIB_MBSPCASECMP@ GL_GNULIB_MBSRCHR = @GL_GNULIB_MBSRCHR@ GL_GNULIB_MBSRTOWCS = @GL_GNULIB_MBSRTOWCS@ GL_GNULIB_MBSSEP = @GL_GNULIB_MBSSEP@ GL_GNULIB_MBSSPN = @GL_GNULIB_MBSSPN@ GL_GNULIB_MBSSTR = @GL_GNULIB_MBSSTR@ GL_GNULIB_MBSTOK_R = @GL_GNULIB_MBSTOK_R@ GL_GNULIB_MBSTOWCS = @GL_GNULIB_MBSTOWCS@ GL_GNULIB_MBTOWC = @GL_GNULIB_MBTOWC@ GL_GNULIB_MDA_ACCESS = @GL_GNULIB_MDA_ACCESS@ GL_GNULIB_MDA_CHDIR = @GL_GNULIB_MDA_CHDIR@ GL_GNULIB_MDA_CHMOD = @GL_GNULIB_MDA_CHMOD@ GL_GNULIB_MDA_CLOSE = @GL_GNULIB_MDA_CLOSE@ GL_GNULIB_MDA_CREAT = @GL_GNULIB_MDA_CREAT@ GL_GNULIB_MDA_DUP = @GL_GNULIB_MDA_DUP@ GL_GNULIB_MDA_DUP2 = @GL_GNULIB_MDA_DUP2@ GL_GNULIB_MDA_ECVT = @GL_GNULIB_MDA_ECVT@ GL_GNULIB_MDA_EXECL = @GL_GNULIB_MDA_EXECL@ GL_GNULIB_MDA_EXECLE = @GL_GNULIB_MDA_EXECLE@ GL_GNULIB_MDA_EXECLP = @GL_GNULIB_MDA_EXECLP@ GL_GNULIB_MDA_EXECV = @GL_GNULIB_MDA_EXECV@ GL_GNULIB_MDA_EXECVE = @GL_GNULIB_MDA_EXECVE@ GL_GNULIB_MDA_EXECVP = @GL_GNULIB_MDA_EXECVP@ GL_GNULIB_MDA_EXECVPE = @GL_GNULIB_MDA_EXECVPE@ GL_GNULIB_MDA_FCLOSEALL = @GL_GNULIB_MDA_FCLOSEALL@ GL_GNULIB_MDA_FCVT = @GL_GNULIB_MDA_FCVT@ GL_GNULIB_MDA_FDOPEN = @GL_GNULIB_MDA_FDOPEN@ GL_GNULIB_MDA_FILENO = @GL_GNULIB_MDA_FILENO@ GL_GNULIB_MDA_GCVT = @GL_GNULIB_MDA_GCVT@ GL_GNULIB_MDA_GETCWD = @GL_GNULIB_MDA_GETCWD@ GL_GNULIB_MDA_GETPID = @GL_GNULIB_MDA_GETPID@ GL_GNULIB_MDA_GETW = @GL_GNULIB_MDA_GETW@ GL_GNULIB_MDA_ISATTY = @GL_GNULIB_MDA_ISATTY@ GL_GNULIB_MDA_LSEEK = @GL_GNULIB_MDA_LSEEK@ GL_GNULIB_MDA_MEMCCPY = @GL_GNULIB_MDA_MEMCCPY@ GL_GNULIB_MDA_MKDIR = @GL_GNULIB_MDA_MKDIR@ GL_GNULIB_MDA_MKTEMP = @GL_GNULIB_MDA_MKTEMP@ GL_GNULIB_MDA_OPEN = @GL_GNULIB_MDA_OPEN@ GL_GNULIB_MDA_PUTENV = @GL_GNULIB_MDA_PUTENV@ GL_GNULIB_MDA_PUTW = @GL_GNULIB_MDA_PUTW@ GL_GNULIB_MDA_READ = @GL_GNULIB_MDA_READ@ GL_GNULIB_MDA_RMDIR = @GL_GNULIB_MDA_RMDIR@ GL_GNULIB_MDA_STRDUP = @GL_GNULIB_MDA_STRDUP@ GL_GNULIB_MDA_SWAB = @GL_GNULIB_MDA_SWAB@ GL_GNULIB_MDA_TEMPNAM = @GL_GNULIB_MDA_TEMPNAM@ GL_GNULIB_MDA_TZSET = @GL_GNULIB_MDA_TZSET@ GL_GNULIB_MDA_UMASK = @GL_GNULIB_MDA_UMASK@ GL_GNULIB_MDA_UNLINK = @GL_GNULIB_MDA_UNLINK@ GL_GNULIB_MDA_WCSDUP = @GL_GNULIB_MDA_WCSDUP@ GL_GNULIB_MDA_WRITE = @GL_GNULIB_MDA_WRITE@ GL_GNULIB_MEMCHR = @GL_GNULIB_MEMCHR@ GL_GNULIB_MEMMEM = @GL_GNULIB_MEMMEM@ GL_GNULIB_MEMPCPY = @GL_GNULIB_MEMPCPY@ GL_GNULIB_MEMRCHR = @GL_GNULIB_MEMRCHR@ GL_GNULIB_MEMSET_EXPLICIT = @GL_GNULIB_MEMSET_EXPLICIT@ GL_GNULIB_MKDIR = @GL_GNULIB_MKDIR@ GL_GNULIB_MKDIRAT = @GL_GNULIB_MKDIRAT@ GL_GNULIB_MKDTEMP = @GL_GNULIB_MKDTEMP@ GL_GNULIB_MKFIFO = @GL_GNULIB_MKFIFO@ GL_GNULIB_MKFIFOAT = @GL_GNULIB_MKFIFOAT@ GL_GNULIB_MKNOD = @GL_GNULIB_MKNOD@ GL_GNULIB_MKNODAT = @GL_GNULIB_MKNODAT@ GL_GNULIB_MKOSTEMP = @GL_GNULIB_MKOSTEMP@ GL_GNULIB_MKOSTEMPS = @GL_GNULIB_MKOSTEMPS@ GL_GNULIB_MKSTEMP = @GL_GNULIB_MKSTEMP@ GL_GNULIB_MKSTEMPS = @GL_GNULIB_MKSTEMPS@ GL_GNULIB_MKTIME = @GL_GNULIB_MKTIME@ GL_GNULIB_NANOSLEEP = @GL_GNULIB_NANOSLEEP@ GL_GNULIB_NL_LANGINFO = @GL_GNULIB_NL_LANGINFO@ GL_GNULIB_NONBLOCKING = @GL_GNULIB_NONBLOCKING@ GL_GNULIB_OBSTACK_PRINTF = @GL_GNULIB_OBSTACK_PRINTF@ GL_GNULIB_OBSTACK_PRINTF_POSIX = @GL_GNULIB_OBSTACK_PRINTF_POSIX@ GL_GNULIB_OPEN = @GL_GNULIB_OPEN@ GL_GNULIB_OPENAT = @GL_GNULIB_OPENAT@ GL_GNULIB_OVERRIDES_STRUCT_STAT = @GL_GNULIB_OVERRIDES_STRUCT_STAT@ GL_GNULIB_PCLOSE = @GL_GNULIB_PCLOSE@ GL_GNULIB_PERROR = @GL_GNULIB_PERROR@ GL_GNULIB_PIPE = @GL_GNULIB_PIPE@ GL_GNULIB_PIPE2 = @GL_GNULIB_PIPE2@ GL_GNULIB_POPEN = @GL_GNULIB_POPEN@ GL_GNULIB_POSIX_MEMALIGN = @GL_GNULIB_POSIX_MEMALIGN@ GL_GNULIB_POSIX_OPENPT = @GL_GNULIB_POSIX_OPENPT@ GL_GNULIB_PREAD = @GL_GNULIB_PREAD@ GL_GNULIB_PRINTF = @GL_GNULIB_PRINTF@ GL_GNULIB_PRINTF_POSIX = @GL_GNULIB_PRINTF_POSIX@ GL_GNULIB_PTSNAME = @GL_GNULIB_PTSNAME@ GL_GNULIB_PTSNAME_R = @GL_GNULIB_PTSNAME_R@ GL_GNULIB_PUTC = @GL_GNULIB_PUTC@ GL_GNULIB_PUTCHAR = @GL_GNULIB_PUTCHAR@ GL_GNULIB_PUTENV = @GL_GNULIB_PUTENV@ GL_GNULIB_PUTS = @GL_GNULIB_PUTS@ GL_GNULIB_PWRITE = @GL_GNULIB_PWRITE@ GL_GNULIB_QSORT_R = @GL_GNULIB_QSORT_R@ GL_GNULIB_RANDOM = @GL_GNULIB_RANDOM@ GL_GNULIB_RANDOM_R = @GL_GNULIB_RANDOM_R@ GL_GNULIB_RAWMEMCHR = @GL_GNULIB_RAWMEMCHR@ GL_GNULIB_READ = @GL_GNULIB_READ@ GL_GNULIB_READLINK = @GL_GNULIB_READLINK@ GL_GNULIB_READLINKAT = @GL_GNULIB_READLINKAT@ GL_GNULIB_REALLOCARRAY = @GL_GNULIB_REALLOCARRAY@ GL_GNULIB_REALLOC_GNU = @GL_GNULIB_REALLOC_GNU@ GL_GNULIB_REALLOC_POSIX = @GL_GNULIB_REALLOC_POSIX@ GL_GNULIB_REALPATH = @GL_GNULIB_REALPATH@ GL_GNULIB_REMOVE = @GL_GNULIB_REMOVE@ GL_GNULIB_RENAME = @GL_GNULIB_RENAME@ GL_GNULIB_RENAMEAT = @GL_GNULIB_RENAMEAT@ GL_GNULIB_RMDIR = @GL_GNULIB_RMDIR@ GL_GNULIB_RPMATCH = @GL_GNULIB_RPMATCH@ GL_GNULIB_SCANF = @GL_GNULIB_SCANF@ GL_GNULIB_SECURE_GETENV = @GL_GNULIB_SECURE_GETENV@ GL_GNULIB_SETENV = @GL_GNULIB_SETENV@ GL_GNULIB_SETHOSTNAME = @GL_GNULIB_SETHOSTNAME@ GL_GNULIB_SETLOCALE = @GL_GNULIB_SETLOCALE@ GL_GNULIB_SETLOCALE_NULL = @GL_GNULIB_SETLOCALE_NULL@ GL_GNULIB_SIGABBREV_NP = @GL_GNULIB_SIGABBREV_NP@ GL_GNULIB_SIGDESCR_NP = @GL_GNULIB_SIGDESCR_NP@ GL_GNULIB_SLEEP = @GL_GNULIB_SLEEP@ GL_GNULIB_SNPRINTF = @GL_GNULIB_SNPRINTF@ GL_GNULIB_SPRINTF_POSIX = @GL_GNULIB_SPRINTF_POSIX@ GL_GNULIB_STAT = @GL_GNULIB_STAT@ GL_GNULIB_STDIO_H_NONBLOCKING = @GL_GNULIB_STDIO_H_NONBLOCKING@ GL_GNULIB_STDIO_H_SIGPIPE = @GL_GNULIB_STDIO_H_SIGPIPE@ GL_GNULIB_STPCPY = @GL_GNULIB_STPCPY@ GL_GNULIB_STPNCPY = @GL_GNULIB_STPNCPY@ GL_GNULIB_STRCASESTR = @GL_GNULIB_STRCASESTR@ GL_GNULIB_STRCHRNUL = @GL_GNULIB_STRCHRNUL@ GL_GNULIB_STRDUP = @GL_GNULIB_STRDUP@ GL_GNULIB_STRERROR = @GL_GNULIB_STRERROR@ GL_GNULIB_STRERRORNAME_NP = @GL_GNULIB_STRERRORNAME_NP@ GL_GNULIB_STRERROR_R = @GL_GNULIB_STRERROR_R@ GL_GNULIB_STRFTIME = @GL_GNULIB_STRFTIME@ GL_GNULIB_STRNCAT = @GL_GNULIB_STRNCAT@ GL_GNULIB_STRNDUP = @GL_GNULIB_STRNDUP@ GL_GNULIB_STRNLEN = @GL_GNULIB_STRNLEN@ GL_GNULIB_STRPBRK = @GL_GNULIB_STRPBRK@ GL_GNULIB_STRPTIME = @GL_GNULIB_STRPTIME@ GL_GNULIB_STRSEP = @GL_GNULIB_STRSEP@ GL_GNULIB_STRSIGNAL = @GL_GNULIB_STRSIGNAL@ GL_GNULIB_STRSTR = @GL_GNULIB_STRSTR@ GL_GNULIB_STRTOD = @GL_GNULIB_STRTOD@ GL_GNULIB_STRTOIMAX = @GL_GNULIB_STRTOIMAX@ GL_GNULIB_STRTOK_R = @GL_GNULIB_STRTOK_R@ GL_GNULIB_STRTOL = @GL_GNULIB_STRTOL@ GL_GNULIB_STRTOLD = @GL_GNULIB_STRTOLD@ GL_GNULIB_STRTOLL = @GL_GNULIB_STRTOLL@ GL_GNULIB_STRTOUL = @GL_GNULIB_STRTOUL@ GL_GNULIB_STRTOULL = @GL_GNULIB_STRTOULL@ GL_GNULIB_STRTOUMAX = @GL_GNULIB_STRTOUMAX@ GL_GNULIB_STRVERSCMP = @GL_GNULIB_STRVERSCMP@ GL_GNULIB_SYMLINK = @GL_GNULIB_SYMLINK@ GL_GNULIB_SYMLINKAT = @GL_GNULIB_SYMLINKAT@ GL_GNULIB_SYSTEM_POSIX = @GL_GNULIB_SYSTEM_POSIX@ GL_GNULIB_TIME = @GL_GNULIB_TIME@ GL_GNULIB_TIMEGM = @GL_GNULIB_TIMEGM@ GL_GNULIB_TIMESPEC_GET = @GL_GNULIB_TIMESPEC_GET@ GL_GNULIB_TIMESPEC_GETRES = @GL_GNULIB_TIMESPEC_GETRES@ GL_GNULIB_TIME_R = @GL_GNULIB_TIME_R@ GL_GNULIB_TIME_RZ = @GL_GNULIB_TIME_RZ@ GL_GNULIB_TMPFILE = @GL_GNULIB_TMPFILE@ GL_GNULIB_TOWCTRANS = @GL_GNULIB_TOWCTRANS@ GL_GNULIB_TRUNCATE = @GL_GNULIB_TRUNCATE@ GL_GNULIB_TTYNAME_R = @GL_GNULIB_TTYNAME_R@ GL_GNULIB_TZSET = @GL_GNULIB_TZSET@ GL_GNULIB_UNISTD_H_GETOPT = @GL_GNULIB_UNISTD_H_GETOPT@ GL_GNULIB_UNISTD_H_NONBLOCKING = @GL_GNULIB_UNISTD_H_NONBLOCKING@ GL_GNULIB_UNISTD_H_SIGPIPE = @GL_GNULIB_UNISTD_H_SIGPIPE@ GL_GNULIB_UNLINK = @GL_GNULIB_UNLINK@ GL_GNULIB_UNLINKAT = @GL_GNULIB_UNLINKAT@ GL_GNULIB_UNLOCKPT = @GL_GNULIB_UNLOCKPT@ GL_GNULIB_UNSETENV = @GL_GNULIB_UNSETENV@ GL_GNULIB_USLEEP = @GL_GNULIB_USLEEP@ GL_GNULIB_UTIMENSAT = @GL_GNULIB_UTIMENSAT@ GL_GNULIB_VASPRINTF = @GL_GNULIB_VASPRINTF@ GL_GNULIB_VDPRINTF = @GL_GNULIB_VDPRINTF@ GL_GNULIB_VFPRINTF = @GL_GNULIB_VFPRINTF@ GL_GNULIB_VFPRINTF_POSIX = @GL_GNULIB_VFPRINTF_POSIX@ GL_GNULIB_VFSCANF = @GL_GNULIB_VFSCANF@ GL_GNULIB_VPRINTF = @GL_GNULIB_VPRINTF@ GL_GNULIB_VPRINTF_POSIX = @GL_GNULIB_VPRINTF_POSIX@ GL_GNULIB_VSCANF = @GL_GNULIB_VSCANF@ GL_GNULIB_VSNPRINTF = @GL_GNULIB_VSNPRINTF@ GL_GNULIB_VSPRINTF_POSIX = @GL_GNULIB_VSPRINTF_POSIX@ GL_GNULIB_WCPCPY = @GL_GNULIB_WCPCPY@ GL_GNULIB_WCPNCPY = @GL_GNULIB_WCPNCPY@ GL_GNULIB_WCRTOMB = @GL_GNULIB_WCRTOMB@ GL_GNULIB_WCSCASECMP = @GL_GNULIB_WCSCASECMP@ GL_GNULIB_WCSCAT = @GL_GNULIB_WCSCAT@ GL_GNULIB_WCSCHR = @GL_GNULIB_WCSCHR@ GL_GNULIB_WCSCMP = @GL_GNULIB_WCSCMP@ GL_GNULIB_WCSCOLL = @GL_GNULIB_WCSCOLL@ GL_GNULIB_WCSCPY = @GL_GNULIB_WCSCPY@ GL_GNULIB_WCSCSPN = @GL_GNULIB_WCSCSPN@ GL_GNULIB_WCSDUP = @GL_GNULIB_WCSDUP@ GL_GNULIB_WCSFTIME = @GL_GNULIB_WCSFTIME@ GL_GNULIB_WCSLEN = @GL_GNULIB_WCSLEN@ GL_GNULIB_WCSNCASECMP = @GL_GNULIB_WCSNCASECMP@ GL_GNULIB_WCSNCAT = @GL_GNULIB_WCSNCAT@ GL_GNULIB_WCSNCMP = @GL_GNULIB_WCSNCMP@ GL_GNULIB_WCSNCPY = @GL_GNULIB_WCSNCPY@ GL_GNULIB_WCSNLEN = @GL_GNULIB_WCSNLEN@ GL_GNULIB_WCSNRTOMBS = @GL_GNULIB_WCSNRTOMBS@ GL_GNULIB_WCSPBRK = @GL_GNULIB_WCSPBRK@ GL_GNULIB_WCSRCHR = @GL_GNULIB_WCSRCHR@ GL_GNULIB_WCSRTOMBS = @GL_GNULIB_WCSRTOMBS@ GL_GNULIB_WCSSPN = @GL_GNULIB_WCSSPN@ GL_GNULIB_WCSSTR = @GL_GNULIB_WCSSTR@ GL_GNULIB_WCSTOK = @GL_GNULIB_WCSTOK@ GL_GNULIB_WCSWIDTH = @GL_GNULIB_WCSWIDTH@ GL_GNULIB_WCSXFRM = @GL_GNULIB_WCSXFRM@ GL_GNULIB_WCTOB = @GL_GNULIB_WCTOB@ GL_GNULIB_WCTOMB = @GL_GNULIB_WCTOMB@ GL_GNULIB_WCTRANS = @GL_GNULIB_WCTRANS@ GL_GNULIB_WCTYPE = @GL_GNULIB_WCTYPE@ GL_GNULIB_WCWIDTH = @GL_GNULIB_WCWIDTH@ GL_GNULIB_WMEMCHR = @GL_GNULIB_WMEMCHR@ GL_GNULIB_WMEMCMP = @GL_GNULIB_WMEMCMP@ GL_GNULIB_WMEMCPY = @GL_GNULIB_WMEMCPY@ GL_GNULIB_WMEMMOVE = @GL_GNULIB_WMEMMOVE@ GL_GNULIB_WMEMPCPY = @GL_GNULIB_WMEMPCPY@ GL_GNULIB_WMEMSET = @GL_GNULIB_WMEMSET@ GL_GNULIB_WRITE = @GL_GNULIB_WRITE@ GL_GNULIB__EXIT = @GL_GNULIB__EXIT@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GNULIBHEADERS_OVERRIDE_WINT_T = @GNULIBHEADERS_OVERRIDE_WINT_T@ GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@ GREP = @GREP@ HARD_LOCALE_LIB = @HARD_LOCALE_LIB@ HAVE_ALIGNED_ALLOC = @HAVE_ALIGNED_ALLOC@ HAVE_ALLOCA_H = @HAVE_ALLOCA_H@ HAVE_ATOLL = @HAVE_ATOLL@ HAVE_BTOWC = @HAVE_BTOWC@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_COPY_FILE_RANGE = @HAVE_COPY_FILE_RANGE@ HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ HAVE_DECL_ECVT = @HAVE_DECL_ECVT@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_EXECVPE = @HAVE_DECL_EXECVPE@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FCLOSEALL = @HAVE_DECL_FCLOSEALL@ HAVE_DECL_FCVT = @HAVE_DECL_FCVT@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GCVT = @HAVE_DECL_GCVT@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_GETW = @HAVE_DECL_GETW@ HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@ HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_PROGRAM_INVOCATION_NAME = @HAVE_DECL_PROGRAM_INVOCATION_NAME@ HAVE_DECL_PUTW = @HAVE_DECL_PUTW@ HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DECL_WCSDUP = @HAVE_DECL_WCSDUP@ HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ HAVE_ERROR = @HAVE_ERROR@ HAVE_ERROR_AT_LINE = @HAVE_ERROR_AT_LINE@ HAVE_ERROR_H = @HAVE_ERROR_H@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_EXECVPE = @HAVE_EXECVPE@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHMODAT = @HAVE_FCHMODAT@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FCNTL = @HAVE_FCNTL@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FEATURES_H = @HAVE_FEATURES_H@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FREELOCALE = @HAVE_FREELOCALE@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSTATAT = @HAVE_FSTATAT@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_FUTIMENS = @HAVE_FUTIMENS@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETENTROPY = @HAVE_GETENTROPY@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GETPASS = @HAVE_GETPASS@ HAVE_GETPROGNAME = @HAVE_GETPROGNAME@ HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ HAVE_GETUMASK = @HAVE_GETUMASK@ HAVE_GRANTPT = @HAVE_GRANTPT@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_IMAXABS = @HAVE_IMAXABS@ HAVE_IMAXDIV = @HAVE_IMAXDIV@ HAVE_IMAXDIV_T = @HAVE_IMAXDIV_T@ HAVE_INITSTATE = @HAVE_INITSTATE@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_ISWBLANK = @HAVE_ISWBLANK@ HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ HAVE_LANGINFO_ALTMON = @HAVE_LANGINFO_ALTMON@ HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ HAVE_LCHMOD = @HAVE_LCHMOD@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_LSTAT = @HAVE_LSTAT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBRLEN = @HAVE_MBRLEN@ HAVE_MBRTOWC = @HAVE_MBRTOWC@ HAVE_MBSINIT = @HAVE_MBSINIT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ HAVE_MBTOWC = @HAVE_MBTOWC@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MEMSET_EXPLICIT = @HAVE_MEMSET_EXPLICIT@ HAVE_MKDIRAT = @HAVE_MKDIRAT@ HAVE_MKDTEMP = @HAVE_MKDTEMP@ HAVE_MKFIFO = @HAVE_MKFIFO@ HAVE_MKFIFOAT = @HAVE_MKFIFOAT@ HAVE_MKNOD = @HAVE_MKNOD@ HAVE_MKNODAT = @HAVE_MKNODAT@ HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ HAVE_MKSTEMP = @HAVE_MKSTEMP@ HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ HAVE_NEWLOCALE = @HAVE_NEWLOCALE@ HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ HAVE_OPENAT = @HAVE_OPENAT@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_POSIX_MEMALIGN = @HAVE_POSIX_MEMALIGN@ HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PTSNAME = @HAVE_PTSNAME@ HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_QSORT_R = @HAVE_QSORT_R@ HAVE_RANDOM = @HAVE_RANDOM@ HAVE_RANDOM_H = @HAVE_RANDOM_H@ HAVE_RANDOM_R = @HAVE_RANDOM_R@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ HAVE_REALPATH = @HAVE_REALPATH@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_RPMATCH = @HAVE_RPMATCH@ HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ HAVE_SETENV = @HAVE_SETENV@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SETSTATE = @HAVE_SETSTATE@ HAVE_SIGABBREV_NP = @HAVE_SIGABBREV_NP@ HAVE_SIGDESCR_NP = @HAVE_SIGDESCR_NP@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRERRORNAME_NP = @HAVE_STRERRORNAME_NP@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRPTIME = @HAVE_STRPTIME@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRTOD = @HAVE_STRTOD@ HAVE_STRTOL = @HAVE_STRTOL@ HAVE_STRTOLD = @HAVE_STRTOLD@ HAVE_STRTOLL = @HAVE_STRTOLL@ HAVE_STRTOUL = @HAVE_STRTOUL@ HAVE_STRTOULL = @HAVE_STRTOULL@ HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_TIMEGM = @HAVE_TIMEGM@ HAVE_TIMESPEC_GET = @HAVE_TIMESPEC_GET@ HAVE_TIMESPEC_GETRES = @HAVE_TIMESPEC_GETRES@ HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WCPCPY = @HAVE_WCPCPY@ HAVE_WCPNCPY = @HAVE_WCPNCPY@ HAVE_WCRTOMB = @HAVE_WCRTOMB@ HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ HAVE_WCSCAT = @HAVE_WCSCAT@ HAVE_WCSCHR = @HAVE_WCSCHR@ HAVE_WCSCMP = @HAVE_WCSCMP@ HAVE_WCSCOLL = @HAVE_WCSCOLL@ HAVE_WCSCPY = @HAVE_WCSCPY@ HAVE_WCSCSPN = @HAVE_WCSCSPN@ HAVE_WCSDUP = @HAVE_WCSDUP@ HAVE_WCSFTIME = @HAVE_WCSFTIME@ HAVE_WCSLEN = @HAVE_WCSLEN@ HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ HAVE_WCSNCAT = @HAVE_WCSNCAT@ HAVE_WCSNCMP = @HAVE_WCSNCMP@ HAVE_WCSNCPY = @HAVE_WCSNCPY@ HAVE_WCSNLEN = @HAVE_WCSNLEN@ HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ HAVE_WCSPBRK = @HAVE_WCSPBRK@ HAVE_WCSRCHR = @HAVE_WCSRCHR@ HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ HAVE_WCSSPN = @HAVE_WCSSPN@ HAVE_WCSSTR = @HAVE_WCSSTR@ HAVE_WCSTOK = @HAVE_WCSTOK@ HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ HAVE_WCSXFRM = @HAVE_WCSXFRM@ HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE_WINT_T = @HAVE_WINT_T@ HAVE_WMEMCHR = @HAVE_WMEMCHR@ HAVE_WMEMCMP = @HAVE_WMEMCMP@ HAVE_WMEMCPY = @HAVE_WMEMCPY@ HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ HAVE_WMEMPCPY = @HAVE_WMEMPCPY@ HAVE_WMEMSET = @HAVE_WMEMSET@ HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ HAVE__EXIT = @HAVE__EXIT@ IMPRIMATUR_MAKEINFOFLAGS = @IMPRIMATUR_MAKEINFOFLAGS@ IMPRIMATUR_MODULE_DIR = @IMPRIMATUR_MODULE_DIR@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@ INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBGNU_LIBDEPS = @LIBGNU_LIBDEPS@ LIBGNU_LTLIBDEPS = @LIBGNU_LTLIBDEPS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPMULTITHREAD = @LIBPMULTITHREAD@ LIBPTHREAD = @LIBPTHREAD@ LIBS = @LIBS@ LIBSTDTHREAD = @LIBSTDTHREAD@ LIBTHREAD = @LIBTHREAD@ LIB_HARD_LOCALE = @LIB_HARD_LOCALE@ LIB_MBRTOWC = @LIB_MBRTOWC@ LIB_NL_LANGINFO = @LIB_NL_LANGINFO@ LIB_SCHED_YIELD = @LIB_SCHED_YIELD@ LIB_SETLOCALE_NULL = @LIB_SETLOCALE_NULL@ LIMITS_H = @LIMITS_H@ LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ LOCALENAME_ENHANCE_LOCALE_FUNCS = @LOCALENAME_ENHANCE_LOCALE_FUNCS@ LOCALE_FR = @LOCALE_FR@ LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ LOCALE_JA = @LOCALE_JA@ LOCALE_ZH_CN = @LOCALE_ZH_CN@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBTHREAD = @LTLIBTHREAD@ MAKEINFO = @MAKEINFO@ MBRTOWC_LIB = @MBRTOWC_LIB@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NEXT_ASSERT_H = @NEXT_ASSERT_H@ NEXT_AS_FIRST_DIRECTIVE_ASSERT_H = @NEXT_AS_FIRST_DIRECTIVE_ASSERT_H@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_ERROR_H = @NEXT_AS_FIRST_DIRECTIVE_ERROR_H@ NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@ NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_ERROR_H = @NEXT_ERROR_H@ NEXT_FCNTL_H = @NEXT_FCNTL_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_LOCALE_H = @NEXT_LOCALE_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STDLIB_H = @NEXT_STDLIB_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_TIME_H = @NEXT_TIME_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NEXT_WCHAR_H = @NEXT_WCHAR_H@ NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ 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@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PRIPTR_PREFIX = @PRIPTR_PREFIX@ PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ RANLIB = @RANLIB@ RENDITION = @RENDITION@ REPLACE_ACCESS = @REPLACE_ACCESS@ REPLACE_ALIGNED_ALLOC = @REPLACE_ALIGNED_ALLOC@ REPLACE_BTOWC = @REPLACE_BTOWC@ REPLACE_CALLOC_FOR_CALLOC_GNU = @REPLACE_CALLOC_FOR_CALLOC_GNU@ REPLACE_CALLOC_FOR_CALLOC_POSIX = @REPLACE_CALLOC_FOR_CALLOC_POSIX@ REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ REPLACE_CHMOD = @REPLACE_CHMOD@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_COPY_FILE_RANGE = @REPLACE_COPY_FILE_RANGE@ REPLACE_CREAT = @REPLACE_CREAT@ REPLACE_CTIME = @REPLACE_CTIME@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_DUP3 = @REPLACE_DUP3@ REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ REPLACE_ERROR = @REPLACE_ERROR@ REPLACE_ERROR_AT_LINE = @REPLACE_ERROR_AT_LINE@ REPLACE_EXECL = @REPLACE_EXECL@ REPLACE_EXECLE = @REPLACE_EXECLE@ REPLACE_EXECLP = @REPLACE_EXECLP@ REPLACE_EXECV = @REPLACE_EXECV@ REPLACE_EXECVE = @REPLACE_EXECVE@ REPLACE_EXECVP = @REPLACE_EXECVP@ REPLACE_EXECVPE = @REPLACE_EXECVPE@ REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ REPLACE_FCHMODAT = @REPLACE_FCHMODAT@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FCNTL = @REPLACE_FCNTL@ REPLACE_FDATASYNC = @REPLACE_FDATASYNC@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FFSLL = @REPLACE_FFSLL@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FOPEN_FOR_FOPEN_GNU = @REPLACE_FOPEN_FOR_FOPEN_GNU@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREE = @REPLACE_FREE@ REPLACE_FREELOCALE = @REPLACE_FREELOCALE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FSTAT = @REPLACE_FSTAT@ REPLACE_FSTATAT = @REPLACE_FSTATAT@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETENTROPY = @REPLACE_GETENTROPY@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOADAVG = @REPLACE_GETLOADAVG@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_GETPASS = @REPLACE_GETPASS@ REPLACE_GETPASS_FOR_GETPASS_GNU = @REPLACE_GETPASS_FOR_GETPASS_GNU@ REPLACE_GETPROGNAME = @REPLACE_GETPROGNAME@ REPLACE_GETSUBOPT = @REPLACE_GETSUBOPT@ REPLACE_GMTIME = @REPLACE_GMTIME@ REPLACE_IMAXABS = @REPLACE_IMAXABS@ REPLACE_IMAXDIV = @REPLACE_IMAXDIV@ REPLACE_INITSTATE = @REPLACE_INITSTATE@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ REPLACE_ISWDIGIT = @REPLACE_ISWDIGIT@ REPLACE_ISWXDIGIT = @REPLACE_ISWXDIGIT@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_LSTAT = @REPLACE_LSTAT@ REPLACE_MALLOC_FOR_MALLOC_GNU = @REPLACE_MALLOC_FOR_MALLOC_GNU@ REPLACE_MALLOC_FOR_MALLOC_POSIX = @REPLACE_MALLOC_FOR_MALLOC_POSIX@ REPLACE_MBRLEN = @REPLACE_MBRLEN@ REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ REPLACE_MBSINIT = @REPLACE_MBSINIT@ REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ REPLACE_MBSTOWCS = @REPLACE_MBSTOWCS@ REPLACE_MBTOWC = @REPLACE_MBTOWC@ REPLACE_MB_CUR_MAX = @REPLACE_MB_CUR_MAX@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_MEMPCPY = @REPLACE_MEMPCPY@ REPLACE_MKDIR = @REPLACE_MKDIR@ REPLACE_MKFIFO = @REPLACE_MKFIFO@ REPLACE_MKFIFOAT = @REPLACE_MKFIFOAT@ REPLACE_MKNOD = @REPLACE_MKNOD@ REPLACE_MKNODAT = @REPLACE_MKNODAT@ REPLACE_MKOSTEMP = @REPLACE_MKOSTEMP@ REPLACE_MKOSTEMPS = @REPLACE_MKOSTEMPS@ REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ REPLACE_MKTIME = @REPLACE_MKTIME@ REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ REPLACE_NEWLOCALE = @REPLACE_NEWLOCALE@ REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_OPEN = @REPLACE_OPEN@ REPLACE_OPENAT = @REPLACE_OPENAT@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_PIPE2 = @REPLACE_PIPE2@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_POSIX_MEMALIGN = @REPLACE_POSIX_MEMALIGN@ REPLACE_POSIX_OPENPT = @REPLACE_POSIX_OPENPT@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PTSNAME = @REPLACE_PTSNAME@ REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ REPLACE_PUTENV = @REPLACE_PUTENV@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_QSORT_R = @REPLACE_QSORT_R@ REPLACE_RANDOM = @REPLACE_RANDOM@ REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ REPLACE_READ = @REPLACE_READ@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_READLINKAT = @REPLACE_READLINKAT@ REPLACE_REALLOCARRAY = @REPLACE_REALLOCARRAY@ REPLACE_REALLOC_FOR_REALLOC_GNU = @REPLACE_REALLOC_FOR_REALLOC_GNU@ REPLACE_REALLOC_FOR_REALLOC_POSIX = @REPLACE_REALLOC_FOR_REALLOC_POSIX@ REPLACE_REALPATH = @REPLACE_REALPATH@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_SETENV = @REPLACE_SETENV@ REPLACE_SETHOSTNAME = @REPLACE_SETHOSTNAME@ REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ REPLACE_SETSTATE = @REPLACE_SETSTATE@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_STAT = @REPLACE_STAT@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPCPY = @REPLACE_STPCPY@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERRORNAME_NP = @REPLACE_STRERRORNAME_NP@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRFTIME = @REPLACE_STRFTIME@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOD = @REPLACE_STRTOD@ REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_STRTOL = @REPLACE_STRTOL@ REPLACE_STRTOLD = @REPLACE_STRTOLD@ REPLACE_STRTOLL = @REPLACE_STRTOLL@ REPLACE_STRTOUL = @REPLACE_STRTOUL@ REPLACE_STRTOULL = @REPLACE_STRTOULL@ REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ REPLACE_TIME = @REPLACE_TIME@ REPLACE_TIMEGM = @REPLACE_TIMEGM@ REPLACE_TIMESPEC_GET = @REPLACE_TIMESPEC_GET@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_TZSET = @REPLACE_TZSET@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_UNSETENV = @REPLACE_UNSETENV@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ REPLACE_WCSCMP = @REPLACE_WCSCMP@ REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ REPLACE_WCSNCMP = @REPLACE_WCSNCMP@ REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ REPLACE_WCSSTR = @REPLACE_WCSSTR@ REPLACE_WCSTOK = @REPLACE_WCSTOK@ REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ REPLACE_WCTOB = @REPLACE_WCTOB@ REPLACE_WCTOMB = @REPLACE_WCTOMB@ REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ REPLACE_WMEMCMP = @REPLACE_WMEMCMP@ REPLACE_WMEMPCPY = @REPLACE_WMEMPCPY@ REPLACE_WRITE = @REPLACE_WRITE@ REPLACE__EXIT = @REPLACE__EXIT@ RUSH_DEFAULT_CONFIG = @RUSH_DEFAULT_CONFIG@ SCHED_YIELD_LIB = @SCHED_YIELD_LIB@ SED = @SED@ SETLOCALE_NULL_LIB = @SETLOCALE_NULL_LIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ STDCKDINT_H = @STDCKDINT_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_TIME_UTC = @TIME_H_DEFINES_TIME_UTC@ UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@ UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ UNISTD_H_HAVE_SYS_RANDOM_H = @UNISTD_H_HAVE_SYS_RANDOM_H@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ 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@ gl_LIBOBJDEPS = @gl_LIBOBJDEPS@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJDEPS = @gltests_LIBOBJDEPS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = 1.14 gnits subdir-objects SUBDIRS = noinst_HEADERS = noinst_LIBRARIES = libgnu.a noinst_LTLIBRARIES = EXTRA_DIST = alloca.in.h assert.in.h verify.h attribute.h \ basename-lgpl.h calloc.c calloc.c cloexec.h stripslash.c \ dirname.h errno.in.h error.in.h fcntl.in.h fd-hook.h \ filename.h flexmember.h fprintftime.h stat-w32.c stat-w32.h \ getopt-cdefs.in.h getopt-core.h getopt-ext.h getopt-pfx-core.h \ getopt-pfx-ext.h getopt.in.h getopt_int.h getprogname.h \ $(top_srcdir)/build-aux/gitlog-to-changelog dynarray.h \ malloc/dynarray-skeleton.c malloc/dynarray.h hard-locale.h \ ialloc.h intprops-internal.h intprops.h anytostr.c inttostr.h \ inttypes.in.h langinfo.in.h cdefs.h libc-config.h limits.in.h \ localcharset.h locale.in.h malloc.c malloc.c malloca.h \ lc-charset-dispatch.c lc-charset-dispatch.h \ mbrtowc-impl-utf8.h mbrtowc-impl.h mbtowc-lock.c mbtowc-lock.h \ windows-initguard.h mbtowc-impl.h mktime-internal.h mktime.c \ mktime-internal.h mktime.c msvc-inval.h msvc-nothrow.h \ windows-initguard.h strftime.h pathmax.h realloc.c realloc.c \ regcomp.c regex.h regex_internal.c regex_internal.h regexec.c \ setlocale_null.h windows-initguard.h _Noreturn.h arg-nonnull.h \ c++defs.h warn-on-use.h stat-w32.c stat-w32.h stat-time.h \ intprops-internal.h stdckdint.in.h stddef.in.h stdint.in.h \ stdio.in.h stdlib.in.h streq.h strerror-override.h string.in.h \ sys_stat.in.h sys_types.in.h time.in.h time-internal.h \ mktime-internal.h unistd.in.h verify.h wchar.in.h wctype.in.h \ windows-initguard.h windows-mutex.h windows-once.h \ windows-initguard.h windows-recmutex.h windows-initguard.h \ windows-rwlock.h xalloc.h xalloc-oversized.h BUILT_SOURCES = $(ALLOCA_H) $(ASSERT_H) $(ERRNO_H) error.h fcntl.h \ $(GETOPT_H) $(GETOPT_CDEFS_H) malloc/dynarray.gl.h \ malloc/dynarray-skeleton.gl.h inttypes.h langinfo.h \ $(LIMITS_H) locale.h $(STDCKDINT_H) $(STDDEF_H) $(STDINT_H) \ stdio.h stdlib.h string.h sys/stat.h sys/types.h time.h \ unistd.h wchar.h wctype.h SUFFIXES = MOSTLYCLEANFILES = core *.stackdump alloca.h alloca.h-t assert.h \ assert.h-t errno.h errno.h-t error.h error.h-t fcntl.h \ fcntl.h-t getopt.h getopt.h-t getopt-cdefs.h getopt-cdefs.h-t \ malloc/dynarray.gl.h malloc/dynarray.gl.h-t \ malloc/dynarray-skeleton.gl.h malloc/dynarray-skeleton.gl.h-t \ inttypes.h inttypes.h-t langinfo.h langinfo.h-t limits.h \ limits.h-t locale.h locale.h-t stdckdint.h stdckdint.h-t \ stddef.h stddef.h-t stdint.h stdint.h-t stdio.h stdio.h-t \ stdlib.h stdlib.h-t string.h string.h-t sys/stat.h \ sys/stat.h-t sys/types.h sys/types.h-t time.h time.h-t \ unistd.h unistd.h-t wchar.h wchar.h-t wctype.h wctype.h-t MOSTLYCLEANDIRS = sys CLEANFILES = DISTCLEANFILES = MAINTAINERCLEANFILES = # No GNU Make output. AM_CPPFLAGS = AM_CFLAGS = libgnu_a_SOURCES = basename-lgpl.c $(am__append_1) c-ctype.h c-ctype.c \ cloexec.c $(am__append_2) dirname.c basename.c dirname-lgpl.c \ stripslash.c $(am__append_3) $(am__append_4) $(am__append_5) \ fd-hook.c fprintftime.c $(am__append_6) $(am__append_7) \ $(am__append_8) $(am__append_9) $(am__append_10) \ $(am__append_11) $(am__append_12) gettext.h \ malloc/dynarray_at_failure.c malloc/dynarray_emplace_enlarge.c \ malloc/dynarray_finalize.c malloc/dynarray_resize.c \ malloc/dynarray_resize_clear.c hard-locale.c ialloc.c idx.h \ imaxtostr.c inttostr.c offtostr.c uinttostr.c umaxtostr.c \ localcharset.c $(am__append_13) glthread/lock.h \ glthread/lock.c malloca.c $(am__append_14) $(am__append_15) \ $(am__append_16) minmax.h $(am__append_17) $(am__append_18) \ $(am__append_19) $(am__append_20) nstrftime.c $(am__append_21) \ $(am__append_22) $(am__append_23) $(am__append_24) \ setlocale_null.c $(am__append_25) $(am__append_26) stat-time.c \ $(am__append_27) $(am__append_28) $(am__append_29) \ $(am__append_30) glthread/threadlib.c $(am__append_31) \ $(am__append_32) $(am__append_33) $(am__append_34) unistd.c \ $(am__append_35) $(am__append_36) wctype-h.c $(am__append_37) \ $(am__append_38) $(am__append_39) $(am__append_40) xmalloc.c libgnu_a_CFLAGS = $(AM_CFLAGS) $(GL_CFLAG_GNULIB_WARNINGS) libgnu_a_LIBADD = $(gl_LIBOBJS) libgnu_a_DEPENDENCIES = $(gl_LIBOBJS) EXTRA_libgnu_a_SOURCES = calloc.c calloc.c stripslash.c stat-w32.c \ malloc/dynarray-skeleton.c anytostr.c malloc.c malloc.c \ lc-charset-dispatch.c mbtowc-lock.c mktime.c mktime.c \ realloc.c realloc.c regcomp.c regex_internal.c regexec.c \ stat-w32.c # Use this preprocessor expression to decide whether #include_next works. # Do not rely on a 'configure'-time test for this, since the expression # might appear in an installed header, which is used by some other compiler. HAVE_INCLUDE_NEXT = (__GNUC__ || __clang__ || 60000000 <= __DECC_VER) # In 'sed', replace the pattern space with a "DO NOT EDIT" comment. SED_HEADER_NOEDIT = s,.*,/* DO NOT EDIT! GENERATED AUTOMATICALLY! */, # '$(SED_HEADER_STDOUT) -e "..."' runs 'sed' but first outputs "DO NOT EDIT". SED_HEADER_STDOUT = sed -e 1h -e '1$(SED_HEADER_NOEDIT)' -e 1G # '$(SED_HEADER_TO_AT_t) FILE' copies FILE to $@-t, prepending a leading # "DO_NOT_EDIT". Although this could be done more simply via: # SED_HEADER_TO_AT_t = $(SED_HEADER_STDOUT) > $@-t # the -n and 'w' avoid a fork+exec, at least when GNU Make is used. SED_HEADER_TO_AT_t = $(SED_HEADER_STDOUT) -n -e 'w $@-t' # Use $(gl_V_at) instead of $(AM_V_GEN) or $(AM_V_at) on a line that gl_V_at = $(AM_V_GEN) # Because this Makefile snippet defines a variable used by other # gnulib Makefile snippets, it must be present in all makefiles that # need it. This is ensured by the applicability 'all' defined above. _NORETURN_H = $(srcdir)/_Noreturn.h # Because this Makefile snippet defines a variable used by other # gnulib Makefile snippets, it must be present in all makefiles that # need it. This is ensured by the applicability 'all' defined above. ARG_NONNULL_H = $(srcdir)/arg-nonnull.h # Because this Makefile snippet defines a variable used by other # gnulib Makefile snippets, it must be present in all makefiles that # need it. This is ensured by the applicability 'all' defined above. CXXDEFS_H = $(srcdir)/c++defs.h # Because this Makefile snippet defines a variable used by other # gnulib Makefile snippets, it must be present in all makefiles that # need it. This is ensured by the applicability 'all' defined above. WARN_ON_USE_H = $(srcdir)/warn-on-use.h all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-recursive .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 gnu/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnits gnu/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } malloc/$(am__dirstamp): @$(MKDIR_P) malloc @: > malloc/$(am__dirstamp) malloc/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) malloc/$(DEPDIR) @: > malloc/$(DEPDIR)/$(am__dirstamp) malloc/libgnu_a-dynarray_at_failure.$(OBJEXT): malloc/$(am__dirstamp) \ malloc/$(DEPDIR)/$(am__dirstamp) malloc/libgnu_a-dynarray_emplace_enlarge.$(OBJEXT): \ malloc/$(am__dirstamp) malloc/$(DEPDIR)/$(am__dirstamp) malloc/libgnu_a-dynarray_finalize.$(OBJEXT): malloc/$(am__dirstamp) \ malloc/$(DEPDIR)/$(am__dirstamp) malloc/libgnu_a-dynarray_resize.$(OBJEXT): malloc/$(am__dirstamp) \ malloc/$(DEPDIR)/$(am__dirstamp) malloc/libgnu_a-dynarray_resize_clear.$(OBJEXT): \ malloc/$(am__dirstamp) malloc/$(DEPDIR)/$(am__dirstamp) glthread/$(am__dirstamp): @$(MKDIR_P) glthread @: > glthread/$(am__dirstamp) glthread/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) glthread/$(DEPDIR) @: > glthread/$(DEPDIR)/$(am__dirstamp) glthread/libgnu_a-lock.$(OBJEXT): glthread/$(am__dirstamp) \ glthread/$(DEPDIR)/$(am__dirstamp) glthread/libgnu_a-threadlib.$(OBJEXT): glthread/$(am__dirstamp) \ glthread/$(DEPDIR)/$(am__dirstamp) malloc/libgnu_a-dynarray-skeleton.$(OBJEXT): malloc/$(am__dirstamp) \ malloc/$(DEPDIR)/$(am__dirstamp) libgnu.a: $(libgnu_a_OBJECTS) $(libgnu_a_DEPENDENCIES) $(EXTRA_libgnu_a_DEPENDENCIES) $(AM_V_at)-rm -f libgnu.a $(AM_V_AR)$(libgnu_a_AR) libgnu.a $(libgnu_a_OBJECTS) $(libgnu_a_LIBADD) $(AM_V_at)$(RANLIB) libgnu.a mostlyclean-compile: -rm -f *.$(OBJEXT) -rm -f glthread/*.$(OBJEXT) -rm -f malloc/*.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-anytostr.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-basename-lgpl.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-basename.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-btowc.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-c-ctype.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-calloc.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-cloexec.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-close.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-dirname-lgpl.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-dirname.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-dup2.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-error.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-fcntl.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-fd-hook.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-fprintftime.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-free.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-fstat.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-getdelim.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-getdtablesize.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-getline.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-getopt.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-getopt1.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-getprogname.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-hard-locale.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-ialloc.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-imaxtostr.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-inttostr.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-lc-charset-dispatch.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-localcharset.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-localeconv.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-malloc.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-malloca.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-mbrtowc.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-mbsinit.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-mbtowc-lock.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-mbtowc.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-mktime.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-msvc-inval.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-msvc-nothrow.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-nl_langinfo-lock.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-nl_langinfo.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-nstrftime.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-offtostr.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-open.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-realloc.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-reallocarray.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-regcomp.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-regex.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-regex_internal.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-regexec.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-setenv.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-setlocale-lock.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-setlocale_null.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-stat-time.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-stat-w32.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-stat.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-stdio-read.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-stdio-write.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-strerror-override.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-strerror.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-stripslash.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-time_r.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-time_rz.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-timegm.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-tzset.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-uinttostr.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-umaxtostr.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-unistd.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-unsetenv.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-wcrtomb.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-wctype-h.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-windows-mutex.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-windows-once.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-windows-recmutex.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-windows-rwlock.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-xmalloc.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@glthread/$(DEPDIR)/libgnu_a-lock.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@glthread/$(DEPDIR)/libgnu_a-threadlib.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@malloc/$(DEPDIR)/libgnu_a-dynarray-skeleton.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@malloc/$(DEPDIR)/libgnu_a-dynarray_at_failure.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@malloc/$(DEPDIR)/libgnu_a-dynarray_emplace_enlarge.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@malloc/$(DEPDIR)/libgnu_a-dynarray_finalize.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@malloc/$(DEPDIR)/libgnu_a-dynarray_resize.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@malloc/$(DEPDIR)/libgnu_a-dynarray_resize_clear.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.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)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.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) '$<'` libgnu_a-basename-lgpl.o: basename-lgpl.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-basename-lgpl.o -MD -MP -MF $(DEPDIR)/libgnu_a-basename-lgpl.Tpo -c -o libgnu_a-basename-lgpl.o `test -f 'basename-lgpl.c' || echo '$(srcdir)/'`basename-lgpl.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-basename-lgpl.Tpo $(DEPDIR)/libgnu_a-basename-lgpl.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='basename-lgpl.c' object='libgnu_a-basename-lgpl.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-basename-lgpl.o `test -f 'basename-lgpl.c' || echo '$(srcdir)/'`basename-lgpl.c libgnu_a-basename-lgpl.obj: basename-lgpl.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-basename-lgpl.obj -MD -MP -MF $(DEPDIR)/libgnu_a-basename-lgpl.Tpo -c -o libgnu_a-basename-lgpl.obj `if test -f 'basename-lgpl.c'; then $(CYGPATH_W) 'basename-lgpl.c'; else $(CYGPATH_W) '$(srcdir)/basename-lgpl.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-basename-lgpl.Tpo $(DEPDIR)/libgnu_a-basename-lgpl.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='basename-lgpl.c' object='libgnu_a-basename-lgpl.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-basename-lgpl.obj `if test -f 'basename-lgpl.c'; then $(CYGPATH_W) 'basename-lgpl.c'; else $(CYGPATH_W) '$(srcdir)/basename-lgpl.c'; fi` libgnu_a-btowc.o: btowc.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-btowc.o -MD -MP -MF $(DEPDIR)/libgnu_a-btowc.Tpo -c -o libgnu_a-btowc.o `test -f 'btowc.c' || echo '$(srcdir)/'`btowc.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-btowc.Tpo $(DEPDIR)/libgnu_a-btowc.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='btowc.c' object='libgnu_a-btowc.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-btowc.o `test -f 'btowc.c' || echo '$(srcdir)/'`btowc.c libgnu_a-btowc.obj: btowc.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-btowc.obj -MD -MP -MF $(DEPDIR)/libgnu_a-btowc.Tpo -c -o libgnu_a-btowc.obj `if test -f 'btowc.c'; then $(CYGPATH_W) 'btowc.c'; else $(CYGPATH_W) '$(srcdir)/btowc.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-btowc.Tpo $(DEPDIR)/libgnu_a-btowc.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='btowc.c' object='libgnu_a-btowc.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-btowc.obj `if test -f 'btowc.c'; then $(CYGPATH_W) 'btowc.c'; else $(CYGPATH_W) '$(srcdir)/btowc.c'; fi` libgnu_a-c-ctype.o: c-ctype.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-c-ctype.o -MD -MP -MF $(DEPDIR)/libgnu_a-c-ctype.Tpo -c -o libgnu_a-c-ctype.o `test -f 'c-ctype.c' || echo '$(srcdir)/'`c-ctype.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-c-ctype.Tpo $(DEPDIR)/libgnu_a-c-ctype.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='c-ctype.c' object='libgnu_a-c-ctype.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-c-ctype.o `test -f 'c-ctype.c' || echo '$(srcdir)/'`c-ctype.c libgnu_a-c-ctype.obj: c-ctype.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-c-ctype.obj -MD -MP -MF $(DEPDIR)/libgnu_a-c-ctype.Tpo -c -o libgnu_a-c-ctype.obj `if test -f 'c-ctype.c'; then $(CYGPATH_W) 'c-ctype.c'; else $(CYGPATH_W) '$(srcdir)/c-ctype.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-c-ctype.Tpo $(DEPDIR)/libgnu_a-c-ctype.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='c-ctype.c' object='libgnu_a-c-ctype.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-c-ctype.obj `if test -f 'c-ctype.c'; then $(CYGPATH_W) 'c-ctype.c'; else $(CYGPATH_W) '$(srcdir)/c-ctype.c'; fi` libgnu_a-cloexec.o: cloexec.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-cloexec.o -MD -MP -MF $(DEPDIR)/libgnu_a-cloexec.Tpo -c -o libgnu_a-cloexec.o `test -f 'cloexec.c' || echo '$(srcdir)/'`cloexec.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-cloexec.Tpo $(DEPDIR)/libgnu_a-cloexec.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cloexec.c' object='libgnu_a-cloexec.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-cloexec.o `test -f 'cloexec.c' || echo '$(srcdir)/'`cloexec.c libgnu_a-cloexec.obj: cloexec.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-cloexec.obj -MD -MP -MF $(DEPDIR)/libgnu_a-cloexec.Tpo -c -o libgnu_a-cloexec.obj `if test -f 'cloexec.c'; then $(CYGPATH_W) 'cloexec.c'; else $(CYGPATH_W) '$(srcdir)/cloexec.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-cloexec.Tpo $(DEPDIR)/libgnu_a-cloexec.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cloexec.c' object='libgnu_a-cloexec.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-cloexec.obj `if test -f 'cloexec.c'; then $(CYGPATH_W) 'cloexec.c'; else $(CYGPATH_W) '$(srcdir)/cloexec.c'; fi` libgnu_a-close.o: close.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-close.o -MD -MP -MF $(DEPDIR)/libgnu_a-close.Tpo -c -o libgnu_a-close.o `test -f 'close.c' || echo '$(srcdir)/'`close.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-close.Tpo $(DEPDIR)/libgnu_a-close.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='close.c' object='libgnu_a-close.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-close.o `test -f 'close.c' || echo '$(srcdir)/'`close.c libgnu_a-close.obj: close.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-close.obj -MD -MP -MF $(DEPDIR)/libgnu_a-close.Tpo -c -o libgnu_a-close.obj `if test -f 'close.c'; then $(CYGPATH_W) 'close.c'; else $(CYGPATH_W) '$(srcdir)/close.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-close.Tpo $(DEPDIR)/libgnu_a-close.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='close.c' object='libgnu_a-close.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-close.obj `if test -f 'close.c'; then $(CYGPATH_W) 'close.c'; else $(CYGPATH_W) '$(srcdir)/close.c'; fi` libgnu_a-dirname.o: dirname.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-dirname.o -MD -MP -MF $(DEPDIR)/libgnu_a-dirname.Tpo -c -o libgnu_a-dirname.o `test -f 'dirname.c' || echo '$(srcdir)/'`dirname.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-dirname.Tpo $(DEPDIR)/libgnu_a-dirname.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dirname.c' object='libgnu_a-dirname.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-dirname.o `test -f 'dirname.c' || echo '$(srcdir)/'`dirname.c libgnu_a-dirname.obj: dirname.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-dirname.obj -MD -MP -MF $(DEPDIR)/libgnu_a-dirname.Tpo -c -o libgnu_a-dirname.obj `if test -f 'dirname.c'; then $(CYGPATH_W) 'dirname.c'; else $(CYGPATH_W) '$(srcdir)/dirname.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-dirname.Tpo $(DEPDIR)/libgnu_a-dirname.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dirname.c' object='libgnu_a-dirname.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-dirname.obj `if test -f 'dirname.c'; then $(CYGPATH_W) 'dirname.c'; else $(CYGPATH_W) '$(srcdir)/dirname.c'; fi` libgnu_a-basename.o: basename.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-basename.o -MD -MP -MF $(DEPDIR)/libgnu_a-basename.Tpo -c -o libgnu_a-basename.o `test -f 'basename.c' || echo '$(srcdir)/'`basename.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-basename.Tpo $(DEPDIR)/libgnu_a-basename.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='basename.c' object='libgnu_a-basename.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-basename.o `test -f 'basename.c' || echo '$(srcdir)/'`basename.c libgnu_a-basename.obj: basename.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-basename.obj -MD -MP -MF $(DEPDIR)/libgnu_a-basename.Tpo -c -o libgnu_a-basename.obj `if test -f 'basename.c'; then $(CYGPATH_W) 'basename.c'; else $(CYGPATH_W) '$(srcdir)/basename.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-basename.Tpo $(DEPDIR)/libgnu_a-basename.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='basename.c' object='libgnu_a-basename.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-basename.obj `if test -f 'basename.c'; then $(CYGPATH_W) 'basename.c'; else $(CYGPATH_W) '$(srcdir)/basename.c'; fi` libgnu_a-dirname-lgpl.o: dirname-lgpl.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-dirname-lgpl.o -MD -MP -MF $(DEPDIR)/libgnu_a-dirname-lgpl.Tpo -c -o libgnu_a-dirname-lgpl.o `test -f 'dirname-lgpl.c' || echo '$(srcdir)/'`dirname-lgpl.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-dirname-lgpl.Tpo $(DEPDIR)/libgnu_a-dirname-lgpl.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dirname-lgpl.c' object='libgnu_a-dirname-lgpl.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-dirname-lgpl.o `test -f 'dirname-lgpl.c' || echo '$(srcdir)/'`dirname-lgpl.c libgnu_a-dirname-lgpl.obj: dirname-lgpl.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-dirname-lgpl.obj -MD -MP -MF $(DEPDIR)/libgnu_a-dirname-lgpl.Tpo -c -o libgnu_a-dirname-lgpl.obj `if test -f 'dirname-lgpl.c'; then $(CYGPATH_W) 'dirname-lgpl.c'; else $(CYGPATH_W) '$(srcdir)/dirname-lgpl.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-dirname-lgpl.Tpo $(DEPDIR)/libgnu_a-dirname-lgpl.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dirname-lgpl.c' object='libgnu_a-dirname-lgpl.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-dirname-lgpl.obj `if test -f 'dirname-lgpl.c'; then $(CYGPATH_W) 'dirname-lgpl.c'; else $(CYGPATH_W) '$(srcdir)/dirname-lgpl.c'; fi` libgnu_a-stripslash.o: stripslash.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-stripslash.o -MD -MP -MF $(DEPDIR)/libgnu_a-stripslash.Tpo -c -o libgnu_a-stripslash.o `test -f 'stripslash.c' || echo '$(srcdir)/'`stripslash.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-stripslash.Tpo $(DEPDIR)/libgnu_a-stripslash.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='stripslash.c' object='libgnu_a-stripslash.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-stripslash.o `test -f 'stripslash.c' || echo '$(srcdir)/'`stripslash.c libgnu_a-stripslash.obj: stripslash.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-stripslash.obj -MD -MP -MF $(DEPDIR)/libgnu_a-stripslash.Tpo -c -o libgnu_a-stripslash.obj `if test -f 'stripslash.c'; then $(CYGPATH_W) 'stripslash.c'; else $(CYGPATH_W) '$(srcdir)/stripslash.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-stripslash.Tpo $(DEPDIR)/libgnu_a-stripslash.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='stripslash.c' object='libgnu_a-stripslash.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-stripslash.obj `if test -f 'stripslash.c'; then $(CYGPATH_W) 'stripslash.c'; else $(CYGPATH_W) '$(srcdir)/stripslash.c'; fi` libgnu_a-dup2.o: dup2.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-dup2.o -MD -MP -MF $(DEPDIR)/libgnu_a-dup2.Tpo -c -o libgnu_a-dup2.o `test -f 'dup2.c' || echo '$(srcdir)/'`dup2.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-dup2.Tpo $(DEPDIR)/libgnu_a-dup2.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dup2.c' object='libgnu_a-dup2.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-dup2.o `test -f 'dup2.c' || echo '$(srcdir)/'`dup2.c libgnu_a-dup2.obj: dup2.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-dup2.obj -MD -MP -MF $(DEPDIR)/libgnu_a-dup2.Tpo -c -o libgnu_a-dup2.obj `if test -f 'dup2.c'; then $(CYGPATH_W) 'dup2.c'; else $(CYGPATH_W) '$(srcdir)/dup2.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-dup2.Tpo $(DEPDIR)/libgnu_a-dup2.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dup2.c' object='libgnu_a-dup2.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-dup2.obj `if test -f 'dup2.c'; then $(CYGPATH_W) 'dup2.c'; else $(CYGPATH_W) '$(srcdir)/dup2.c'; fi` libgnu_a-error.o: error.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-error.o -MD -MP -MF $(DEPDIR)/libgnu_a-error.Tpo -c -o libgnu_a-error.o `test -f 'error.c' || echo '$(srcdir)/'`error.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-error.Tpo $(DEPDIR)/libgnu_a-error.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='error.c' object='libgnu_a-error.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-error.o `test -f 'error.c' || echo '$(srcdir)/'`error.c libgnu_a-error.obj: error.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-error.obj -MD -MP -MF $(DEPDIR)/libgnu_a-error.Tpo -c -o libgnu_a-error.obj `if test -f 'error.c'; then $(CYGPATH_W) 'error.c'; else $(CYGPATH_W) '$(srcdir)/error.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-error.Tpo $(DEPDIR)/libgnu_a-error.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='error.c' object='libgnu_a-error.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-error.obj `if test -f 'error.c'; then $(CYGPATH_W) 'error.c'; else $(CYGPATH_W) '$(srcdir)/error.c'; fi` libgnu_a-fcntl.o: fcntl.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-fcntl.o -MD -MP -MF $(DEPDIR)/libgnu_a-fcntl.Tpo -c -o libgnu_a-fcntl.o `test -f 'fcntl.c' || echo '$(srcdir)/'`fcntl.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-fcntl.Tpo $(DEPDIR)/libgnu_a-fcntl.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fcntl.c' object='libgnu_a-fcntl.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-fcntl.o `test -f 'fcntl.c' || echo '$(srcdir)/'`fcntl.c libgnu_a-fcntl.obj: fcntl.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-fcntl.obj -MD -MP -MF $(DEPDIR)/libgnu_a-fcntl.Tpo -c -o libgnu_a-fcntl.obj `if test -f 'fcntl.c'; then $(CYGPATH_W) 'fcntl.c'; else $(CYGPATH_W) '$(srcdir)/fcntl.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-fcntl.Tpo $(DEPDIR)/libgnu_a-fcntl.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fcntl.c' object='libgnu_a-fcntl.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-fcntl.obj `if test -f 'fcntl.c'; then $(CYGPATH_W) 'fcntl.c'; else $(CYGPATH_W) '$(srcdir)/fcntl.c'; fi` libgnu_a-fd-hook.o: fd-hook.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-fd-hook.o -MD -MP -MF $(DEPDIR)/libgnu_a-fd-hook.Tpo -c -o libgnu_a-fd-hook.o `test -f 'fd-hook.c' || echo '$(srcdir)/'`fd-hook.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-fd-hook.Tpo $(DEPDIR)/libgnu_a-fd-hook.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fd-hook.c' object='libgnu_a-fd-hook.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-fd-hook.o `test -f 'fd-hook.c' || echo '$(srcdir)/'`fd-hook.c libgnu_a-fd-hook.obj: fd-hook.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-fd-hook.obj -MD -MP -MF $(DEPDIR)/libgnu_a-fd-hook.Tpo -c -o libgnu_a-fd-hook.obj `if test -f 'fd-hook.c'; then $(CYGPATH_W) 'fd-hook.c'; else $(CYGPATH_W) '$(srcdir)/fd-hook.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-fd-hook.Tpo $(DEPDIR)/libgnu_a-fd-hook.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fd-hook.c' object='libgnu_a-fd-hook.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-fd-hook.obj `if test -f 'fd-hook.c'; then $(CYGPATH_W) 'fd-hook.c'; else $(CYGPATH_W) '$(srcdir)/fd-hook.c'; fi` libgnu_a-fprintftime.o: fprintftime.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-fprintftime.o -MD -MP -MF $(DEPDIR)/libgnu_a-fprintftime.Tpo -c -o libgnu_a-fprintftime.o `test -f 'fprintftime.c' || echo '$(srcdir)/'`fprintftime.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-fprintftime.Tpo $(DEPDIR)/libgnu_a-fprintftime.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fprintftime.c' object='libgnu_a-fprintftime.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-fprintftime.o `test -f 'fprintftime.c' || echo '$(srcdir)/'`fprintftime.c libgnu_a-fprintftime.obj: fprintftime.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-fprintftime.obj -MD -MP -MF $(DEPDIR)/libgnu_a-fprintftime.Tpo -c -o libgnu_a-fprintftime.obj `if test -f 'fprintftime.c'; then $(CYGPATH_W) 'fprintftime.c'; else $(CYGPATH_W) '$(srcdir)/fprintftime.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-fprintftime.Tpo $(DEPDIR)/libgnu_a-fprintftime.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fprintftime.c' object='libgnu_a-fprintftime.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-fprintftime.obj `if test -f 'fprintftime.c'; then $(CYGPATH_W) 'fprintftime.c'; else $(CYGPATH_W) '$(srcdir)/fprintftime.c'; fi` libgnu_a-free.o: free.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-free.o -MD -MP -MF $(DEPDIR)/libgnu_a-free.Tpo -c -o libgnu_a-free.o `test -f 'free.c' || echo '$(srcdir)/'`free.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-free.Tpo $(DEPDIR)/libgnu_a-free.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='free.c' object='libgnu_a-free.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-free.o `test -f 'free.c' || echo '$(srcdir)/'`free.c libgnu_a-free.obj: free.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-free.obj -MD -MP -MF $(DEPDIR)/libgnu_a-free.Tpo -c -o libgnu_a-free.obj `if test -f 'free.c'; then $(CYGPATH_W) 'free.c'; else $(CYGPATH_W) '$(srcdir)/free.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-free.Tpo $(DEPDIR)/libgnu_a-free.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='free.c' object='libgnu_a-free.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-free.obj `if test -f 'free.c'; then $(CYGPATH_W) 'free.c'; else $(CYGPATH_W) '$(srcdir)/free.c'; fi` libgnu_a-fstat.o: fstat.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-fstat.o -MD -MP -MF $(DEPDIR)/libgnu_a-fstat.Tpo -c -o libgnu_a-fstat.o `test -f 'fstat.c' || echo '$(srcdir)/'`fstat.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-fstat.Tpo $(DEPDIR)/libgnu_a-fstat.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fstat.c' object='libgnu_a-fstat.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-fstat.o `test -f 'fstat.c' || echo '$(srcdir)/'`fstat.c libgnu_a-fstat.obj: fstat.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-fstat.obj -MD -MP -MF $(DEPDIR)/libgnu_a-fstat.Tpo -c -o libgnu_a-fstat.obj `if test -f 'fstat.c'; then $(CYGPATH_W) 'fstat.c'; else $(CYGPATH_W) '$(srcdir)/fstat.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-fstat.Tpo $(DEPDIR)/libgnu_a-fstat.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fstat.c' object='libgnu_a-fstat.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-fstat.obj `if test -f 'fstat.c'; then $(CYGPATH_W) 'fstat.c'; else $(CYGPATH_W) '$(srcdir)/fstat.c'; fi` libgnu_a-getdelim.o: getdelim.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-getdelim.o -MD -MP -MF $(DEPDIR)/libgnu_a-getdelim.Tpo -c -o libgnu_a-getdelim.o `test -f 'getdelim.c' || echo '$(srcdir)/'`getdelim.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-getdelim.Tpo $(DEPDIR)/libgnu_a-getdelim.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='getdelim.c' object='libgnu_a-getdelim.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-getdelim.o `test -f 'getdelim.c' || echo '$(srcdir)/'`getdelim.c libgnu_a-getdelim.obj: getdelim.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-getdelim.obj -MD -MP -MF $(DEPDIR)/libgnu_a-getdelim.Tpo -c -o libgnu_a-getdelim.obj `if test -f 'getdelim.c'; then $(CYGPATH_W) 'getdelim.c'; else $(CYGPATH_W) '$(srcdir)/getdelim.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-getdelim.Tpo $(DEPDIR)/libgnu_a-getdelim.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='getdelim.c' object='libgnu_a-getdelim.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-getdelim.obj `if test -f 'getdelim.c'; then $(CYGPATH_W) 'getdelim.c'; else $(CYGPATH_W) '$(srcdir)/getdelim.c'; fi` libgnu_a-getdtablesize.o: getdtablesize.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-getdtablesize.o -MD -MP -MF $(DEPDIR)/libgnu_a-getdtablesize.Tpo -c -o libgnu_a-getdtablesize.o `test -f 'getdtablesize.c' || echo '$(srcdir)/'`getdtablesize.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-getdtablesize.Tpo $(DEPDIR)/libgnu_a-getdtablesize.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='getdtablesize.c' object='libgnu_a-getdtablesize.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-getdtablesize.o `test -f 'getdtablesize.c' || echo '$(srcdir)/'`getdtablesize.c libgnu_a-getdtablesize.obj: getdtablesize.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-getdtablesize.obj -MD -MP -MF $(DEPDIR)/libgnu_a-getdtablesize.Tpo -c -o libgnu_a-getdtablesize.obj `if test -f 'getdtablesize.c'; then $(CYGPATH_W) 'getdtablesize.c'; else $(CYGPATH_W) '$(srcdir)/getdtablesize.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-getdtablesize.Tpo $(DEPDIR)/libgnu_a-getdtablesize.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='getdtablesize.c' object='libgnu_a-getdtablesize.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-getdtablesize.obj `if test -f 'getdtablesize.c'; then $(CYGPATH_W) 'getdtablesize.c'; else $(CYGPATH_W) '$(srcdir)/getdtablesize.c'; fi` libgnu_a-getline.o: getline.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-getline.o -MD -MP -MF $(DEPDIR)/libgnu_a-getline.Tpo -c -o libgnu_a-getline.o `test -f 'getline.c' || echo '$(srcdir)/'`getline.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-getline.Tpo $(DEPDIR)/libgnu_a-getline.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='getline.c' object='libgnu_a-getline.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-getline.o `test -f 'getline.c' || echo '$(srcdir)/'`getline.c libgnu_a-getline.obj: getline.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-getline.obj -MD -MP -MF $(DEPDIR)/libgnu_a-getline.Tpo -c -o libgnu_a-getline.obj `if test -f 'getline.c'; then $(CYGPATH_W) 'getline.c'; else $(CYGPATH_W) '$(srcdir)/getline.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-getline.Tpo $(DEPDIR)/libgnu_a-getline.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='getline.c' object='libgnu_a-getline.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-getline.obj `if test -f 'getline.c'; then $(CYGPATH_W) 'getline.c'; else $(CYGPATH_W) '$(srcdir)/getline.c'; fi` libgnu_a-getopt.o: getopt.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-getopt.o -MD -MP -MF $(DEPDIR)/libgnu_a-getopt.Tpo -c -o libgnu_a-getopt.o `test -f 'getopt.c' || echo '$(srcdir)/'`getopt.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-getopt.Tpo $(DEPDIR)/libgnu_a-getopt.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='getopt.c' object='libgnu_a-getopt.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-getopt.o `test -f 'getopt.c' || echo '$(srcdir)/'`getopt.c libgnu_a-getopt.obj: getopt.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-getopt.obj -MD -MP -MF $(DEPDIR)/libgnu_a-getopt.Tpo -c -o libgnu_a-getopt.obj `if test -f 'getopt.c'; then $(CYGPATH_W) 'getopt.c'; else $(CYGPATH_W) '$(srcdir)/getopt.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-getopt.Tpo $(DEPDIR)/libgnu_a-getopt.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='getopt.c' object='libgnu_a-getopt.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-getopt.obj `if test -f 'getopt.c'; then $(CYGPATH_W) 'getopt.c'; else $(CYGPATH_W) '$(srcdir)/getopt.c'; fi` libgnu_a-getopt1.o: getopt1.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-getopt1.o -MD -MP -MF $(DEPDIR)/libgnu_a-getopt1.Tpo -c -o libgnu_a-getopt1.o `test -f 'getopt1.c' || echo '$(srcdir)/'`getopt1.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-getopt1.Tpo $(DEPDIR)/libgnu_a-getopt1.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='getopt1.c' object='libgnu_a-getopt1.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-getopt1.o `test -f 'getopt1.c' || echo '$(srcdir)/'`getopt1.c libgnu_a-getopt1.obj: getopt1.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-getopt1.obj -MD -MP -MF $(DEPDIR)/libgnu_a-getopt1.Tpo -c -o libgnu_a-getopt1.obj `if test -f 'getopt1.c'; then $(CYGPATH_W) 'getopt1.c'; else $(CYGPATH_W) '$(srcdir)/getopt1.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-getopt1.Tpo $(DEPDIR)/libgnu_a-getopt1.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='getopt1.c' object='libgnu_a-getopt1.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-getopt1.obj `if test -f 'getopt1.c'; then $(CYGPATH_W) 'getopt1.c'; else $(CYGPATH_W) '$(srcdir)/getopt1.c'; fi` libgnu_a-getprogname.o: getprogname.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-getprogname.o -MD -MP -MF $(DEPDIR)/libgnu_a-getprogname.Tpo -c -o libgnu_a-getprogname.o `test -f 'getprogname.c' || echo '$(srcdir)/'`getprogname.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-getprogname.Tpo $(DEPDIR)/libgnu_a-getprogname.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='getprogname.c' object='libgnu_a-getprogname.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-getprogname.o `test -f 'getprogname.c' || echo '$(srcdir)/'`getprogname.c libgnu_a-getprogname.obj: getprogname.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-getprogname.obj -MD -MP -MF $(DEPDIR)/libgnu_a-getprogname.Tpo -c -o libgnu_a-getprogname.obj `if test -f 'getprogname.c'; then $(CYGPATH_W) 'getprogname.c'; else $(CYGPATH_W) '$(srcdir)/getprogname.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-getprogname.Tpo $(DEPDIR)/libgnu_a-getprogname.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='getprogname.c' object='libgnu_a-getprogname.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-getprogname.obj `if test -f 'getprogname.c'; then $(CYGPATH_W) 'getprogname.c'; else $(CYGPATH_W) '$(srcdir)/getprogname.c'; fi` malloc/libgnu_a-dynarray_at_failure.o: malloc/dynarray_at_failure.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT malloc/libgnu_a-dynarray_at_failure.o -MD -MP -MF malloc/$(DEPDIR)/libgnu_a-dynarray_at_failure.Tpo -c -o malloc/libgnu_a-dynarray_at_failure.o `test -f 'malloc/dynarray_at_failure.c' || echo '$(srcdir)/'`malloc/dynarray_at_failure.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) malloc/$(DEPDIR)/libgnu_a-dynarray_at_failure.Tpo malloc/$(DEPDIR)/libgnu_a-dynarray_at_failure.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='malloc/dynarray_at_failure.c' object='malloc/libgnu_a-dynarray_at_failure.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o malloc/libgnu_a-dynarray_at_failure.o `test -f 'malloc/dynarray_at_failure.c' || echo '$(srcdir)/'`malloc/dynarray_at_failure.c malloc/libgnu_a-dynarray_at_failure.obj: malloc/dynarray_at_failure.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT malloc/libgnu_a-dynarray_at_failure.obj -MD -MP -MF malloc/$(DEPDIR)/libgnu_a-dynarray_at_failure.Tpo -c -o malloc/libgnu_a-dynarray_at_failure.obj `if test -f 'malloc/dynarray_at_failure.c'; then $(CYGPATH_W) 'malloc/dynarray_at_failure.c'; else $(CYGPATH_W) '$(srcdir)/malloc/dynarray_at_failure.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) malloc/$(DEPDIR)/libgnu_a-dynarray_at_failure.Tpo malloc/$(DEPDIR)/libgnu_a-dynarray_at_failure.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='malloc/dynarray_at_failure.c' object='malloc/libgnu_a-dynarray_at_failure.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o malloc/libgnu_a-dynarray_at_failure.obj `if test -f 'malloc/dynarray_at_failure.c'; then $(CYGPATH_W) 'malloc/dynarray_at_failure.c'; else $(CYGPATH_W) '$(srcdir)/malloc/dynarray_at_failure.c'; fi` malloc/libgnu_a-dynarray_emplace_enlarge.o: malloc/dynarray_emplace_enlarge.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT malloc/libgnu_a-dynarray_emplace_enlarge.o -MD -MP -MF malloc/$(DEPDIR)/libgnu_a-dynarray_emplace_enlarge.Tpo -c -o malloc/libgnu_a-dynarray_emplace_enlarge.o `test -f 'malloc/dynarray_emplace_enlarge.c' || echo '$(srcdir)/'`malloc/dynarray_emplace_enlarge.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) malloc/$(DEPDIR)/libgnu_a-dynarray_emplace_enlarge.Tpo malloc/$(DEPDIR)/libgnu_a-dynarray_emplace_enlarge.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='malloc/dynarray_emplace_enlarge.c' object='malloc/libgnu_a-dynarray_emplace_enlarge.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o malloc/libgnu_a-dynarray_emplace_enlarge.o `test -f 'malloc/dynarray_emplace_enlarge.c' || echo '$(srcdir)/'`malloc/dynarray_emplace_enlarge.c malloc/libgnu_a-dynarray_emplace_enlarge.obj: malloc/dynarray_emplace_enlarge.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT malloc/libgnu_a-dynarray_emplace_enlarge.obj -MD -MP -MF malloc/$(DEPDIR)/libgnu_a-dynarray_emplace_enlarge.Tpo -c -o malloc/libgnu_a-dynarray_emplace_enlarge.obj `if test -f 'malloc/dynarray_emplace_enlarge.c'; then $(CYGPATH_W) 'malloc/dynarray_emplace_enlarge.c'; else $(CYGPATH_W) '$(srcdir)/malloc/dynarray_emplace_enlarge.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) malloc/$(DEPDIR)/libgnu_a-dynarray_emplace_enlarge.Tpo malloc/$(DEPDIR)/libgnu_a-dynarray_emplace_enlarge.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='malloc/dynarray_emplace_enlarge.c' object='malloc/libgnu_a-dynarray_emplace_enlarge.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o malloc/libgnu_a-dynarray_emplace_enlarge.obj `if test -f 'malloc/dynarray_emplace_enlarge.c'; then $(CYGPATH_W) 'malloc/dynarray_emplace_enlarge.c'; else $(CYGPATH_W) '$(srcdir)/malloc/dynarray_emplace_enlarge.c'; fi` malloc/libgnu_a-dynarray_finalize.o: malloc/dynarray_finalize.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT malloc/libgnu_a-dynarray_finalize.o -MD -MP -MF malloc/$(DEPDIR)/libgnu_a-dynarray_finalize.Tpo -c -o malloc/libgnu_a-dynarray_finalize.o `test -f 'malloc/dynarray_finalize.c' || echo '$(srcdir)/'`malloc/dynarray_finalize.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) malloc/$(DEPDIR)/libgnu_a-dynarray_finalize.Tpo malloc/$(DEPDIR)/libgnu_a-dynarray_finalize.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='malloc/dynarray_finalize.c' object='malloc/libgnu_a-dynarray_finalize.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o malloc/libgnu_a-dynarray_finalize.o `test -f 'malloc/dynarray_finalize.c' || echo '$(srcdir)/'`malloc/dynarray_finalize.c malloc/libgnu_a-dynarray_finalize.obj: malloc/dynarray_finalize.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT malloc/libgnu_a-dynarray_finalize.obj -MD -MP -MF malloc/$(DEPDIR)/libgnu_a-dynarray_finalize.Tpo -c -o malloc/libgnu_a-dynarray_finalize.obj `if test -f 'malloc/dynarray_finalize.c'; then $(CYGPATH_W) 'malloc/dynarray_finalize.c'; else $(CYGPATH_W) '$(srcdir)/malloc/dynarray_finalize.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) malloc/$(DEPDIR)/libgnu_a-dynarray_finalize.Tpo malloc/$(DEPDIR)/libgnu_a-dynarray_finalize.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='malloc/dynarray_finalize.c' object='malloc/libgnu_a-dynarray_finalize.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o malloc/libgnu_a-dynarray_finalize.obj `if test -f 'malloc/dynarray_finalize.c'; then $(CYGPATH_W) 'malloc/dynarray_finalize.c'; else $(CYGPATH_W) '$(srcdir)/malloc/dynarray_finalize.c'; fi` malloc/libgnu_a-dynarray_resize.o: malloc/dynarray_resize.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT malloc/libgnu_a-dynarray_resize.o -MD -MP -MF malloc/$(DEPDIR)/libgnu_a-dynarray_resize.Tpo -c -o malloc/libgnu_a-dynarray_resize.o `test -f 'malloc/dynarray_resize.c' || echo '$(srcdir)/'`malloc/dynarray_resize.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) malloc/$(DEPDIR)/libgnu_a-dynarray_resize.Tpo malloc/$(DEPDIR)/libgnu_a-dynarray_resize.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='malloc/dynarray_resize.c' object='malloc/libgnu_a-dynarray_resize.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o malloc/libgnu_a-dynarray_resize.o `test -f 'malloc/dynarray_resize.c' || echo '$(srcdir)/'`malloc/dynarray_resize.c malloc/libgnu_a-dynarray_resize.obj: malloc/dynarray_resize.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT malloc/libgnu_a-dynarray_resize.obj -MD -MP -MF malloc/$(DEPDIR)/libgnu_a-dynarray_resize.Tpo -c -o malloc/libgnu_a-dynarray_resize.obj `if test -f 'malloc/dynarray_resize.c'; then $(CYGPATH_W) 'malloc/dynarray_resize.c'; else $(CYGPATH_W) '$(srcdir)/malloc/dynarray_resize.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) malloc/$(DEPDIR)/libgnu_a-dynarray_resize.Tpo malloc/$(DEPDIR)/libgnu_a-dynarray_resize.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='malloc/dynarray_resize.c' object='malloc/libgnu_a-dynarray_resize.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o malloc/libgnu_a-dynarray_resize.obj `if test -f 'malloc/dynarray_resize.c'; then $(CYGPATH_W) 'malloc/dynarray_resize.c'; else $(CYGPATH_W) '$(srcdir)/malloc/dynarray_resize.c'; fi` malloc/libgnu_a-dynarray_resize_clear.o: malloc/dynarray_resize_clear.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT malloc/libgnu_a-dynarray_resize_clear.o -MD -MP -MF malloc/$(DEPDIR)/libgnu_a-dynarray_resize_clear.Tpo -c -o malloc/libgnu_a-dynarray_resize_clear.o `test -f 'malloc/dynarray_resize_clear.c' || echo '$(srcdir)/'`malloc/dynarray_resize_clear.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) malloc/$(DEPDIR)/libgnu_a-dynarray_resize_clear.Tpo malloc/$(DEPDIR)/libgnu_a-dynarray_resize_clear.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='malloc/dynarray_resize_clear.c' object='malloc/libgnu_a-dynarray_resize_clear.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o malloc/libgnu_a-dynarray_resize_clear.o `test -f 'malloc/dynarray_resize_clear.c' || echo '$(srcdir)/'`malloc/dynarray_resize_clear.c malloc/libgnu_a-dynarray_resize_clear.obj: malloc/dynarray_resize_clear.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT malloc/libgnu_a-dynarray_resize_clear.obj -MD -MP -MF malloc/$(DEPDIR)/libgnu_a-dynarray_resize_clear.Tpo -c -o malloc/libgnu_a-dynarray_resize_clear.obj `if test -f 'malloc/dynarray_resize_clear.c'; then $(CYGPATH_W) 'malloc/dynarray_resize_clear.c'; else $(CYGPATH_W) '$(srcdir)/malloc/dynarray_resize_clear.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) malloc/$(DEPDIR)/libgnu_a-dynarray_resize_clear.Tpo malloc/$(DEPDIR)/libgnu_a-dynarray_resize_clear.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='malloc/dynarray_resize_clear.c' object='malloc/libgnu_a-dynarray_resize_clear.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o malloc/libgnu_a-dynarray_resize_clear.obj `if test -f 'malloc/dynarray_resize_clear.c'; then $(CYGPATH_W) 'malloc/dynarray_resize_clear.c'; else $(CYGPATH_W) '$(srcdir)/malloc/dynarray_resize_clear.c'; fi` libgnu_a-hard-locale.o: hard-locale.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-hard-locale.o -MD -MP -MF $(DEPDIR)/libgnu_a-hard-locale.Tpo -c -o libgnu_a-hard-locale.o `test -f 'hard-locale.c' || echo '$(srcdir)/'`hard-locale.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-hard-locale.Tpo $(DEPDIR)/libgnu_a-hard-locale.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='hard-locale.c' object='libgnu_a-hard-locale.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-hard-locale.o `test -f 'hard-locale.c' || echo '$(srcdir)/'`hard-locale.c libgnu_a-hard-locale.obj: hard-locale.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-hard-locale.obj -MD -MP -MF $(DEPDIR)/libgnu_a-hard-locale.Tpo -c -o libgnu_a-hard-locale.obj `if test -f 'hard-locale.c'; then $(CYGPATH_W) 'hard-locale.c'; else $(CYGPATH_W) '$(srcdir)/hard-locale.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-hard-locale.Tpo $(DEPDIR)/libgnu_a-hard-locale.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='hard-locale.c' object='libgnu_a-hard-locale.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-hard-locale.obj `if test -f 'hard-locale.c'; then $(CYGPATH_W) 'hard-locale.c'; else $(CYGPATH_W) '$(srcdir)/hard-locale.c'; fi` libgnu_a-ialloc.o: ialloc.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-ialloc.o -MD -MP -MF $(DEPDIR)/libgnu_a-ialloc.Tpo -c -o libgnu_a-ialloc.o `test -f 'ialloc.c' || echo '$(srcdir)/'`ialloc.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-ialloc.Tpo $(DEPDIR)/libgnu_a-ialloc.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ialloc.c' object='libgnu_a-ialloc.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-ialloc.o `test -f 'ialloc.c' || echo '$(srcdir)/'`ialloc.c libgnu_a-ialloc.obj: ialloc.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-ialloc.obj -MD -MP -MF $(DEPDIR)/libgnu_a-ialloc.Tpo -c -o libgnu_a-ialloc.obj `if test -f 'ialloc.c'; then $(CYGPATH_W) 'ialloc.c'; else $(CYGPATH_W) '$(srcdir)/ialloc.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-ialloc.Tpo $(DEPDIR)/libgnu_a-ialloc.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ialloc.c' object='libgnu_a-ialloc.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-ialloc.obj `if test -f 'ialloc.c'; then $(CYGPATH_W) 'ialloc.c'; else $(CYGPATH_W) '$(srcdir)/ialloc.c'; fi` libgnu_a-imaxtostr.o: imaxtostr.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-imaxtostr.o -MD -MP -MF $(DEPDIR)/libgnu_a-imaxtostr.Tpo -c -o libgnu_a-imaxtostr.o `test -f 'imaxtostr.c' || echo '$(srcdir)/'`imaxtostr.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-imaxtostr.Tpo $(DEPDIR)/libgnu_a-imaxtostr.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='imaxtostr.c' object='libgnu_a-imaxtostr.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-imaxtostr.o `test -f 'imaxtostr.c' || echo '$(srcdir)/'`imaxtostr.c libgnu_a-imaxtostr.obj: imaxtostr.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-imaxtostr.obj -MD -MP -MF $(DEPDIR)/libgnu_a-imaxtostr.Tpo -c -o libgnu_a-imaxtostr.obj `if test -f 'imaxtostr.c'; then $(CYGPATH_W) 'imaxtostr.c'; else $(CYGPATH_W) '$(srcdir)/imaxtostr.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-imaxtostr.Tpo $(DEPDIR)/libgnu_a-imaxtostr.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='imaxtostr.c' object='libgnu_a-imaxtostr.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-imaxtostr.obj `if test -f 'imaxtostr.c'; then $(CYGPATH_W) 'imaxtostr.c'; else $(CYGPATH_W) '$(srcdir)/imaxtostr.c'; fi` libgnu_a-inttostr.o: inttostr.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-inttostr.o -MD -MP -MF $(DEPDIR)/libgnu_a-inttostr.Tpo -c -o libgnu_a-inttostr.o `test -f 'inttostr.c' || echo '$(srcdir)/'`inttostr.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-inttostr.Tpo $(DEPDIR)/libgnu_a-inttostr.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='inttostr.c' object='libgnu_a-inttostr.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-inttostr.o `test -f 'inttostr.c' || echo '$(srcdir)/'`inttostr.c libgnu_a-inttostr.obj: inttostr.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-inttostr.obj -MD -MP -MF $(DEPDIR)/libgnu_a-inttostr.Tpo -c -o libgnu_a-inttostr.obj `if test -f 'inttostr.c'; then $(CYGPATH_W) 'inttostr.c'; else $(CYGPATH_W) '$(srcdir)/inttostr.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-inttostr.Tpo $(DEPDIR)/libgnu_a-inttostr.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='inttostr.c' object='libgnu_a-inttostr.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-inttostr.obj `if test -f 'inttostr.c'; then $(CYGPATH_W) 'inttostr.c'; else $(CYGPATH_W) '$(srcdir)/inttostr.c'; fi` libgnu_a-offtostr.o: offtostr.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-offtostr.o -MD -MP -MF $(DEPDIR)/libgnu_a-offtostr.Tpo -c -o libgnu_a-offtostr.o `test -f 'offtostr.c' || echo '$(srcdir)/'`offtostr.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-offtostr.Tpo $(DEPDIR)/libgnu_a-offtostr.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='offtostr.c' object='libgnu_a-offtostr.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-offtostr.o `test -f 'offtostr.c' || echo '$(srcdir)/'`offtostr.c libgnu_a-offtostr.obj: offtostr.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-offtostr.obj -MD -MP -MF $(DEPDIR)/libgnu_a-offtostr.Tpo -c -o libgnu_a-offtostr.obj `if test -f 'offtostr.c'; then $(CYGPATH_W) 'offtostr.c'; else $(CYGPATH_W) '$(srcdir)/offtostr.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-offtostr.Tpo $(DEPDIR)/libgnu_a-offtostr.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='offtostr.c' object='libgnu_a-offtostr.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-offtostr.obj `if test -f 'offtostr.c'; then $(CYGPATH_W) 'offtostr.c'; else $(CYGPATH_W) '$(srcdir)/offtostr.c'; fi` libgnu_a-uinttostr.o: uinttostr.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-uinttostr.o -MD -MP -MF $(DEPDIR)/libgnu_a-uinttostr.Tpo -c -o libgnu_a-uinttostr.o `test -f 'uinttostr.c' || echo '$(srcdir)/'`uinttostr.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-uinttostr.Tpo $(DEPDIR)/libgnu_a-uinttostr.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='uinttostr.c' object='libgnu_a-uinttostr.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-uinttostr.o `test -f 'uinttostr.c' || echo '$(srcdir)/'`uinttostr.c libgnu_a-uinttostr.obj: uinttostr.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-uinttostr.obj -MD -MP -MF $(DEPDIR)/libgnu_a-uinttostr.Tpo -c -o libgnu_a-uinttostr.obj `if test -f 'uinttostr.c'; then $(CYGPATH_W) 'uinttostr.c'; else $(CYGPATH_W) '$(srcdir)/uinttostr.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-uinttostr.Tpo $(DEPDIR)/libgnu_a-uinttostr.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='uinttostr.c' object='libgnu_a-uinttostr.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-uinttostr.obj `if test -f 'uinttostr.c'; then $(CYGPATH_W) 'uinttostr.c'; else $(CYGPATH_W) '$(srcdir)/uinttostr.c'; fi` libgnu_a-umaxtostr.o: umaxtostr.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-umaxtostr.o -MD -MP -MF $(DEPDIR)/libgnu_a-umaxtostr.Tpo -c -o libgnu_a-umaxtostr.o `test -f 'umaxtostr.c' || echo '$(srcdir)/'`umaxtostr.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-umaxtostr.Tpo $(DEPDIR)/libgnu_a-umaxtostr.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='umaxtostr.c' object='libgnu_a-umaxtostr.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-umaxtostr.o `test -f 'umaxtostr.c' || echo '$(srcdir)/'`umaxtostr.c libgnu_a-umaxtostr.obj: umaxtostr.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-umaxtostr.obj -MD -MP -MF $(DEPDIR)/libgnu_a-umaxtostr.Tpo -c -o libgnu_a-umaxtostr.obj `if test -f 'umaxtostr.c'; then $(CYGPATH_W) 'umaxtostr.c'; else $(CYGPATH_W) '$(srcdir)/umaxtostr.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-umaxtostr.Tpo $(DEPDIR)/libgnu_a-umaxtostr.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='umaxtostr.c' object='libgnu_a-umaxtostr.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-umaxtostr.obj `if test -f 'umaxtostr.c'; then $(CYGPATH_W) 'umaxtostr.c'; else $(CYGPATH_W) '$(srcdir)/umaxtostr.c'; fi` libgnu_a-localcharset.o: localcharset.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-localcharset.o -MD -MP -MF $(DEPDIR)/libgnu_a-localcharset.Tpo -c -o libgnu_a-localcharset.o `test -f 'localcharset.c' || echo '$(srcdir)/'`localcharset.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-localcharset.Tpo $(DEPDIR)/libgnu_a-localcharset.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='localcharset.c' object='libgnu_a-localcharset.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-localcharset.o `test -f 'localcharset.c' || echo '$(srcdir)/'`localcharset.c libgnu_a-localcharset.obj: localcharset.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-localcharset.obj -MD -MP -MF $(DEPDIR)/libgnu_a-localcharset.Tpo -c -o libgnu_a-localcharset.obj `if test -f 'localcharset.c'; then $(CYGPATH_W) 'localcharset.c'; else $(CYGPATH_W) '$(srcdir)/localcharset.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-localcharset.Tpo $(DEPDIR)/libgnu_a-localcharset.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='localcharset.c' object='libgnu_a-localcharset.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-localcharset.obj `if test -f 'localcharset.c'; then $(CYGPATH_W) 'localcharset.c'; else $(CYGPATH_W) '$(srcdir)/localcharset.c'; fi` libgnu_a-localeconv.o: localeconv.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-localeconv.o -MD -MP -MF $(DEPDIR)/libgnu_a-localeconv.Tpo -c -o libgnu_a-localeconv.o `test -f 'localeconv.c' || echo '$(srcdir)/'`localeconv.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-localeconv.Tpo $(DEPDIR)/libgnu_a-localeconv.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='localeconv.c' object='libgnu_a-localeconv.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-localeconv.o `test -f 'localeconv.c' || echo '$(srcdir)/'`localeconv.c libgnu_a-localeconv.obj: localeconv.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-localeconv.obj -MD -MP -MF $(DEPDIR)/libgnu_a-localeconv.Tpo -c -o libgnu_a-localeconv.obj `if test -f 'localeconv.c'; then $(CYGPATH_W) 'localeconv.c'; else $(CYGPATH_W) '$(srcdir)/localeconv.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-localeconv.Tpo $(DEPDIR)/libgnu_a-localeconv.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='localeconv.c' object='libgnu_a-localeconv.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-localeconv.obj `if test -f 'localeconv.c'; then $(CYGPATH_W) 'localeconv.c'; else $(CYGPATH_W) '$(srcdir)/localeconv.c'; fi` glthread/libgnu_a-lock.o: glthread/lock.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT glthread/libgnu_a-lock.o -MD -MP -MF glthread/$(DEPDIR)/libgnu_a-lock.Tpo -c -o glthread/libgnu_a-lock.o `test -f 'glthread/lock.c' || echo '$(srcdir)/'`glthread/lock.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) glthread/$(DEPDIR)/libgnu_a-lock.Tpo glthread/$(DEPDIR)/libgnu_a-lock.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='glthread/lock.c' object='glthread/libgnu_a-lock.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o glthread/libgnu_a-lock.o `test -f 'glthread/lock.c' || echo '$(srcdir)/'`glthread/lock.c glthread/libgnu_a-lock.obj: glthread/lock.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT glthread/libgnu_a-lock.obj -MD -MP -MF glthread/$(DEPDIR)/libgnu_a-lock.Tpo -c -o glthread/libgnu_a-lock.obj `if test -f 'glthread/lock.c'; then $(CYGPATH_W) 'glthread/lock.c'; else $(CYGPATH_W) '$(srcdir)/glthread/lock.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) glthread/$(DEPDIR)/libgnu_a-lock.Tpo glthread/$(DEPDIR)/libgnu_a-lock.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='glthread/lock.c' object='glthread/libgnu_a-lock.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o glthread/libgnu_a-lock.obj `if test -f 'glthread/lock.c'; then $(CYGPATH_W) 'glthread/lock.c'; else $(CYGPATH_W) '$(srcdir)/glthread/lock.c'; fi` libgnu_a-malloca.o: malloca.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-malloca.o -MD -MP -MF $(DEPDIR)/libgnu_a-malloca.Tpo -c -o libgnu_a-malloca.o `test -f 'malloca.c' || echo '$(srcdir)/'`malloca.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-malloca.Tpo $(DEPDIR)/libgnu_a-malloca.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='malloca.c' object='libgnu_a-malloca.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-malloca.o `test -f 'malloca.c' || echo '$(srcdir)/'`malloca.c libgnu_a-malloca.obj: malloca.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-malloca.obj -MD -MP -MF $(DEPDIR)/libgnu_a-malloca.Tpo -c -o libgnu_a-malloca.obj `if test -f 'malloca.c'; then $(CYGPATH_W) 'malloca.c'; else $(CYGPATH_W) '$(srcdir)/malloca.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-malloca.Tpo $(DEPDIR)/libgnu_a-malloca.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='malloca.c' object='libgnu_a-malloca.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-malloca.obj `if test -f 'malloca.c'; then $(CYGPATH_W) 'malloca.c'; else $(CYGPATH_W) '$(srcdir)/malloca.c'; fi` libgnu_a-mbrtowc.o: mbrtowc.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-mbrtowc.o -MD -MP -MF $(DEPDIR)/libgnu_a-mbrtowc.Tpo -c -o libgnu_a-mbrtowc.o `test -f 'mbrtowc.c' || echo '$(srcdir)/'`mbrtowc.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-mbrtowc.Tpo $(DEPDIR)/libgnu_a-mbrtowc.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mbrtowc.c' object='libgnu_a-mbrtowc.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-mbrtowc.o `test -f 'mbrtowc.c' || echo '$(srcdir)/'`mbrtowc.c libgnu_a-mbrtowc.obj: mbrtowc.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-mbrtowc.obj -MD -MP -MF $(DEPDIR)/libgnu_a-mbrtowc.Tpo -c -o libgnu_a-mbrtowc.obj `if test -f 'mbrtowc.c'; then $(CYGPATH_W) 'mbrtowc.c'; else $(CYGPATH_W) '$(srcdir)/mbrtowc.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-mbrtowc.Tpo $(DEPDIR)/libgnu_a-mbrtowc.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mbrtowc.c' object='libgnu_a-mbrtowc.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-mbrtowc.obj `if test -f 'mbrtowc.c'; then $(CYGPATH_W) 'mbrtowc.c'; else $(CYGPATH_W) '$(srcdir)/mbrtowc.c'; fi` libgnu_a-mbsinit.o: mbsinit.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-mbsinit.o -MD -MP -MF $(DEPDIR)/libgnu_a-mbsinit.Tpo -c -o libgnu_a-mbsinit.o `test -f 'mbsinit.c' || echo '$(srcdir)/'`mbsinit.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-mbsinit.Tpo $(DEPDIR)/libgnu_a-mbsinit.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mbsinit.c' object='libgnu_a-mbsinit.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-mbsinit.o `test -f 'mbsinit.c' || echo '$(srcdir)/'`mbsinit.c libgnu_a-mbsinit.obj: mbsinit.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-mbsinit.obj -MD -MP -MF $(DEPDIR)/libgnu_a-mbsinit.Tpo -c -o libgnu_a-mbsinit.obj `if test -f 'mbsinit.c'; then $(CYGPATH_W) 'mbsinit.c'; else $(CYGPATH_W) '$(srcdir)/mbsinit.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-mbsinit.Tpo $(DEPDIR)/libgnu_a-mbsinit.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mbsinit.c' object='libgnu_a-mbsinit.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-mbsinit.obj `if test -f 'mbsinit.c'; then $(CYGPATH_W) 'mbsinit.c'; else $(CYGPATH_W) '$(srcdir)/mbsinit.c'; fi` libgnu_a-mbtowc.o: mbtowc.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-mbtowc.o -MD -MP -MF $(DEPDIR)/libgnu_a-mbtowc.Tpo -c -o libgnu_a-mbtowc.o `test -f 'mbtowc.c' || echo '$(srcdir)/'`mbtowc.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-mbtowc.Tpo $(DEPDIR)/libgnu_a-mbtowc.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mbtowc.c' object='libgnu_a-mbtowc.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-mbtowc.o `test -f 'mbtowc.c' || echo '$(srcdir)/'`mbtowc.c libgnu_a-mbtowc.obj: mbtowc.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-mbtowc.obj -MD -MP -MF $(DEPDIR)/libgnu_a-mbtowc.Tpo -c -o libgnu_a-mbtowc.obj `if test -f 'mbtowc.c'; then $(CYGPATH_W) 'mbtowc.c'; else $(CYGPATH_W) '$(srcdir)/mbtowc.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-mbtowc.Tpo $(DEPDIR)/libgnu_a-mbtowc.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mbtowc.c' object='libgnu_a-mbtowc.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-mbtowc.obj `if test -f 'mbtowc.c'; then $(CYGPATH_W) 'mbtowc.c'; else $(CYGPATH_W) '$(srcdir)/mbtowc.c'; fi` libgnu_a-msvc-inval.o: msvc-inval.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-msvc-inval.o -MD -MP -MF $(DEPDIR)/libgnu_a-msvc-inval.Tpo -c -o libgnu_a-msvc-inval.o `test -f 'msvc-inval.c' || echo '$(srcdir)/'`msvc-inval.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-msvc-inval.Tpo $(DEPDIR)/libgnu_a-msvc-inval.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='msvc-inval.c' object='libgnu_a-msvc-inval.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-msvc-inval.o `test -f 'msvc-inval.c' || echo '$(srcdir)/'`msvc-inval.c libgnu_a-msvc-inval.obj: msvc-inval.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-msvc-inval.obj -MD -MP -MF $(DEPDIR)/libgnu_a-msvc-inval.Tpo -c -o libgnu_a-msvc-inval.obj `if test -f 'msvc-inval.c'; then $(CYGPATH_W) 'msvc-inval.c'; else $(CYGPATH_W) '$(srcdir)/msvc-inval.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-msvc-inval.Tpo $(DEPDIR)/libgnu_a-msvc-inval.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='msvc-inval.c' object='libgnu_a-msvc-inval.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-msvc-inval.obj `if test -f 'msvc-inval.c'; then $(CYGPATH_W) 'msvc-inval.c'; else $(CYGPATH_W) '$(srcdir)/msvc-inval.c'; fi` libgnu_a-msvc-nothrow.o: msvc-nothrow.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-msvc-nothrow.o -MD -MP -MF $(DEPDIR)/libgnu_a-msvc-nothrow.Tpo -c -o libgnu_a-msvc-nothrow.o `test -f 'msvc-nothrow.c' || echo '$(srcdir)/'`msvc-nothrow.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-msvc-nothrow.Tpo $(DEPDIR)/libgnu_a-msvc-nothrow.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='msvc-nothrow.c' object='libgnu_a-msvc-nothrow.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-msvc-nothrow.o `test -f 'msvc-nothrow.c' || echo '$(srcdir)/'`msvc-nothrow.c libgnu_a-msvc-nothrow.obj: msvc-nothrow.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-msvc-nothrow.obj -MD -MP -MF $(DEPDIR)/libgnu_a-msvc-nothrow.Tpo -c -o libgnu_a-msvc-nothrow.obj `if test -f 'msvc-nothrow.c'; then $(CYGPATH_W) 'msvc-nothrow.c'; else $(CYGPATH_W) '$(srcdir)/msvc-nothrow.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-msvc-nothrow.Tpo $(DEPDIR)/libgnu_a-msvc-nothrow.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='msvc-nothrow.c' object='libgnu_a-msvc-nothrow.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-msvc-nothrow.obj `if test -f 'msvc-nothrow.c'; then $(CYGPATH_W) 'msvc-nothrow.c'; else $(CYGPATH_W) '$(srcdir)/msvc-nothrow.c'; fi` libgnu_a-nl_langinfo.o: nl_langinfo.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-nl_langinfo.o -MD -MP -MF $(DEPDIR)/libgnu_a-nl_langinfo.Tpo -c -o libgnu_a-nl_langinfo.o `test -f 'nl_langinfo.c' || echo '$(srcdir)/'`nl_langinfo.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-nl_langinfo.Tpo $(DEPDIR)/libgnu_a-nl_langinfo.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nl_langinfo.c' object='libgnu_a-nl_langinfo.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-nl_langinfo.o `test -f 'nl_langinfo.c' || echo '$(srcdir)/'`nl_langinfo.c libgnu_a-nl_langinfo.obj: nl_langinfo.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-nl_langinfo.obj -MD -MP -MF $(DEPDIR)/libgnu_a-nl_langinfo.Tpo -c -o libgnu_a-nl_langinfo.obj `if test -f 'nl_langinfo.c'; then $(CYGPATH_W) 'nl_langinfo.c'; else $(CYGPATH_W) '$(srcdir)/nl_langinfo.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-nl_langinfo.Tpo $(DEPDIR)/libgnu_a-nl_langinfo.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nl_langinfo.c' object='libgnu_a-nl_langinfo.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-nl_langinfo.obj `if test -f 'nl_langinfo.c'; then $(CYGPATH_W) 'nl_langinfo.c'; else $(CYGPATH_W) '$(srcdir)/nl_langinfo.c'; fi` libgnu_a-nl_langinfo-lock.o: nl_langinfo-lock.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-nl_langinfo-lock.o -MD -MP -MF $(DEPDIR)/libgnu_a-nl_langinfo-lock.Tpo -c -o libgnu_a-nl_langinfo-lock.o `test -f 'nl_langinfo-lock.c' || echo '$(srcdir)/'`nl_langinfo-lock.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-nl_langinfo-lock.Tpo $(DEPDIR)/libgnu_a-nl_langinfo-lock.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nl_langinfo-lock.c' object='libgnu_a-nl_langinfo-lock.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-nl_langinfo-lock.o `test -f 'nl_langinfo-lock.c' || echo '$(srcdir)/'`nl_langinfo-lock.c libgnu_a-nl_langinfo-lock.obj: nl_langinfo-lock.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-nl_langinfo-lock.obj -MD -MP -MF $(DEPDIR)/libgnu_a-nl_langinfo-lock.Tpo -c -o libgnu_a-nl_langinfo-lock.obj `if test -f 'nl_langinfo-lock.c'; then $(CYGPATH_W) 'nl_langinfo-lock.c'; else $(CYGPATH_W) '$(srcdir)/nl_langinfo-lock.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-nl_langinfo-lock.Tpo $(DEPDIR)/libgnu_a-nl_langinfo-lock.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nl_langinfo-lock.c' object='libgnu_a-nl_langinfo-lock.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-nl_langinfo-lock.obj `if test -f 'nl_langinfo-lock.c'; then $(CYGPATH_W) 'nl_langinfo-lock.c'; else $(CYGPATH_W) '$(srcdir)/nl_langinfo-lock.c'; fi` libgnu_a-nstrftime.o: nstrftime.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-nstrftime.o -MD -MP -MF $(DEPDIR)/libgnu_a-nstrftime.Tpo -c -o libgnu_a-nstrftime.o `test -f 'nstrftime.c' || echo '$(srcdir)/'`nstrftime.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-nstrftime.Tpo $(DEPDIR)/libgnu_a-nstrftime.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nstrftime.c' object='libgnu_a-nstrftime.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-nstrftime.o `test -f 'nstrftime.c' || echo '$(srcdir)/'`nstrftime.c libgnu_a-nstrftime.obj: nstrftime.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-nstrftime.obj -MD -MP -MF $(DEPDIR)/libgnu_a-nstrftime.Tpo -c -o libgnu_a-nstrftime.obj `if test -f 'nstrftime.c'; then $(CYGPATH_W) 'nstrftime.c'; else $(CYGPATH_W) '$(srcdir)/nstrftime.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-nstrftime.Tpo $(DEPDIR)/libgnu_a-nstrftime.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nstrftime.c' object='libgnu_a-nstrftime.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-nstrftime.obj `if test -f 'nstrftime.c'; then $(CYGPATH_W) 'nstrftime.c'; else $(CYGPATH_W) '$(srcdir)/nstrftime.c'; fi` libgnu_a-open.o: open.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-open.o -MD -MP -MF $(DEPDIR)/libgnu_a-open.Tpo -c -o libgnu_a-open.o `test -f 'open.c' || echo '$(srcdir)/'`open.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-open.Tpo $(DEPDIR)/libgnu_a-open.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='open.c' object='libgnu_a-open.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-open.o `test -f 'open.c' || echo '$(srcdir)/'`open.c libgnu_a-open.obj: open.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-open.obj -MD -MP -MF $(DEPDIR)/libgnu_a-open.Tpo -c -o libgnu_a-open.obj `if test -f 'open.c'; then $(CYGPATH_W) 'open.c'; else $(CYGPATH_W) '$(srcdir)/open.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-open.Tpo $(DEPDIR)/libgnu_a-open.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='open.c' object='libgnu_a-open.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-open.obj `if test -f 'open.c'; then $(CYGPATH_W) 'open.c'; else $(CYGPATH_W) '$(srcdir)/open.c'; fi` libgnu_a-reallocarray.o: reallocarray.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-reallocarray.o -MD -MP -MF $(DEPDIR)/libgnu_a-reallocarray.Tpo -c -o libgnu_a-reallocarray.o `test -f 'reallocarray.c' || echo '$(srcdir)/'`reallocarray.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-reallocarray.Tpo $(DEPDIR)/libgnu_a-reallocarray.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='reallocarray.c' object='libgnu_a-reallocarray.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-reallocarray.o `test -f 'reallocarray.c' || echo '$(srcdir)/'`reallocarray.c libgnu_a-reallocarray.obj: reallocarray.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-reallocarray.obj -MD -MP -MF $(DEPDIR)/libgnu_a-reallocarray.Tpo -c -o libgnu_a-reallocarray.obj `if test -f 'reallocarray.c'; then $(CYGPATH_W) 'reallocarray.c'; else $(CYGPATH_W) '$(srcdir)/reallocarray.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-reallocarray.Tpo $(DEPDIR)/libgnu_a-reallocarray.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='reallocarray.c' object='libgnu_a-reallocarray.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-reallocarray.obj `if test -f 'reallocarray.c'; then $(CYGPATH_W) 'reallocarray.c'; else $(CYGPATH_W) '$(srcdir)/reallocarray.c'; fi` libgnu_a-regex.o: regex.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-regex.o -MD -MP -MF $(DEPDIR)/libgnu_a-regex.Tpo -c -o libgnu_a-regex.o `test -f 'regex.c' || echo '$(srcdir)/'`regex.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-regex.Tpo $(DEPDIR)/libgnu_a-regex.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='regex.c' object='libgnu_a-regex.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-regex.o `test -f 'regex.c' || echo '$(srcdir)/'`regex.c libgnu_a-regex.obj: regex.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-regex.obj -MD -MP -MF $(DEPDIR)/libgnu_a-regex.Tpo -c -o libgnu_a-regex.obj `if test -f 'regex.c'; then $(CYGPATH_W) 'regex.c'; else $(CYGPATH_W) '$(srcdir)/regex.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-regex.Tpo $(DEPDIR)/libgnu_a-regex.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='regex.c' object='libgnu_a-regex.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-regex.obj `if test -f 'regex.c'; then $(CYGPATH_W) 'regex.c'; else $(CYGPATH_W) '$(srcdir)/regex.c'; fi` libgnu_a-setenv.o: setenv.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-setenv.o -MD -MP -MF $(DEPDIR)/libgnu_a-setenv.Tpo -c -o libgnu_a-setenv.o `test -f 'setenv.c' || echo '$(srcdir)/'`setenv.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-setenv.Tpo $(DEPDIR)/libgnu_a-setenv.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='setenv.c' object='libgnu_a-setenv.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-setenv.o `test -f 'setenv.c' || echo '$(srcdir)/'`setenv.c libgnu_a-setenv.obj: setenv.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-setenv.obj -MD -MP -MF $(DEPDIR)/libgnu_a-setenv.Tpo -c -o libgnu_a-setenv.obj `if test -f 'setenv.c'; then $(CYGPATH_W) 'setenv.c'; else $(CYGPATH_W) '$(srcdir)/setenv.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-setenv.Tpo $(DEPDIR)/libgnu_a-setenv.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='setenv.c' object='libgnu_a-setenv.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-setenv.obj `if test -f 'setenv.c'; then $(CYGPATH_W) 'setenv.c'; else $(CYGPATH_W) '$(srcdir)/setenv.c'; fi` libgnu_a-setlocale_null.o: setlocale_null.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-setlocale_null.o -MD -MP -MF $(DEPDIR)/libgnu_a-setlocale_null.Tpo -c -o libgnu_a-setlocale_null.o `test -f 'setlocale_null.c' || echo '$(srcdir)/'`setlocale_null.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-setlocale_null.Tpo $(DEPDIR)/libgnu_a-setlocale_null.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='setlocale_null.c' object='libgnu_a-setlocale_null.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-setlocale_null.o `test -f 'setlocale_null.c' || echo '$(srcdir)/'`setlocale_null.c libgnu_a-setlocale_null.obj: setlocale_null.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-setlocale_null.obj -MD -MP -MF $(DEPDIR)/libgnu_a-setlocale_null.Tpo -c -o libgnu_a-setlocale_null.obj `if test -f 'setlocale_null.c'; then $(CYGPATH_W) 'setlocale_null.c'; else $(CYGPATH_W) '$(srcdir)/setlocale_null.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-setlocale_null.Tpo $(DEPDIR)/libgnu_a-setlocale_null.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='setlocale_null.c' object='libgnu_a-setlocale_null.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-setlocale_null.obj `if test -f 'setlocale_null.c'; then $(CYGPATH_W) 'setlocale_null.c'; else $(CYGPATH_W) '$(srcdir)/setlocale_null.c'; fi` libgnu_a-setlocale-lock.o: setlocale-lock.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-setlocale-lock.o -MD -MP -MF $(DEPDIR)/libgnu_a-setlocale-lock.Tpo -c -o libgnu_a-setlocale-lock.o `test -f 'setlocale-lock.c' || echo '$(srcdir)/'`setlocale-lock.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-setlocale-lock.Tpo $(DEPDIR)/libgnu_a-setlocale-lock.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='setlocale-lock.c' object='libgnu_a-setlocale-lock.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-setlocale-lock.o `test -f 'setlocale-lock.c' || echo '$(srcdir)/'`setlocale-lock.c libgnu_a-setlocale-lock.obj: setlocale-lock.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-setlocale-lock.obj -MD -MP -MF $(DEPDIR)/libgnu_a-setlocale-lock.Tpo -c -o libgnu_a-setlocale-lock.obj `if test -f 'setlocale-lock.c'; then $(CYGPATH_W) 'setlocale-lock.c'; else $(CYGPATH_W) '$(srcdir)/setlocale-lock.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-setlocale-lock.Tpo $(DEPDIR)/libgnu_a-setlocale-lock.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='setlocale-lock.c' object='libgnu_a-setlocale-lock.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-setlocale-lock.obj `if test -f 'setlocale-lock.c'; then $(CYGPATH_W) 'setlocale-lock.c'; else $(CYGPATH_W) '$(srcdir)/setlocale-lock.c'; fi` libgnu_a-stat.o: stat.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-stat.o -MD -MP -MF $(DEPDIR)/libgnu_a-stat.Tpo -c -o libgnu_a-stat.o `test -f 'stat.c' || echo '$(srcdir)/'`stat.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-stat.Tpo $(DEPDIR)/libgnu_a-stat.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='stat.c' object='libgnu_a-stat.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-stat.o `test -f 'stat.c' || echo '$(srcdir)/'`stat.c libgnu_a-stat.obj: stat.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-stat.obj -MD -MP -MF $(DEPDIR)/libgnu_a-stat.Tpo -c -o libgnu_a-stat.obj `if test -f 'stat.c'; then $(CYGPATH_W) 'stat.c'; else $(CYGPATH_W) '$(srcdir)/stat.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-stat.Tpo $(DEPDIR)/libgnu_a-stat.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='stat.c' object='libgnu_a-stat.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-stat.obj `if test -f 'stat.c'; then $(CYGPATH_W) 'stat.c'; else $(CYGPATH_W) '$(srcdir)/stat.c'; fi` libgnu_a-stat-time.o: stat-time.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-stat-time.o -MD -MP -MF $(DEPDIR)/libgnu_a-stat-time.Tpo -c -o libgnu_a-stat-time.o `test -f 'stat-time.c' || echo '$(srcdir)/'`stat-time.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-stat-time.Tpo $(DEPDIR)/libgnu_a-stat-time.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='stat-time.c' object='libgnu_a-stat-time.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-stat-time.o `test -f 'stat-time.c' || echo '$(srcdir)/'`stat-time.c libgnu_a-stat-time.obj: stat-time.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-stat-time.obj -MD -MP -MF $(DEPDIR)/libgnu_a-stat-time.Tpo -c -o libgnu_a-stat-time.obj `if test -f 'stat-time.c'; then $(CYGPATH_W) 'stat-time.c'; else $(CYGPATH_W) '$(srcdir)/stat-time.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-stat-time.Tpo $(DEPDIR)/libgnu_a-stat-time.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='stat-time.c' object='libgnu_a-stat-time.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-stat-time.obj `if test -f 'stat-time.c'; then $(CYGPATH_W) 'stat-time.c'; else $(CYGPATH_W) '$(srcdir)/stat-time.c'; fi` libgnu_a-stdio-read.o: stdio-read.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-stdio-read.o -MD -MP -MF $(DEPDIR)/libgnu_a-stdio-read.Tpo -c -o libgnu_a-stdio-read.o `test -f 'stdio-read.c' || echo '$(srcdir)/'`stdio-read.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-stdio-read.Tpo $(DEPDIR)/libgnu_a-stdio-read.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='stdio-read.c' object='libgnu_a-stdio-read.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-stdio-read.o `test -f 'stdio-read.c' || echo '$(srcdir)/'`stdio-read.c libgnu_a-stdio-read.obj: stdio-read.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-stdio-read.obj -MD -MP -MF $(DEPDIR)/libgnu_a-stdio-read.Tpo -c -o libgnu_a-stdio-read.obj `if test -f 'stdio-read.c'; then $(CYGPATH_W) 'stdio-read.c'; else $(CYGPATH_W) '$(srcdir)/stdio-read.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-stdio-read.Tpo $(DEPDIR)/libgnu_a-stdio-read.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='stdio-read.c' object='libgnu_a-stdio-read.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-stdio-read.obj `if test -f 'stdio-read.c'; then $(CYGPATH_W) 'stdio-read.c'; else $(CYGPATH_W) '$(srcdir)/stdio-read.c'; fi` libgnu_a-stdio-write.o: stdio-write.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-stdio-write.o -MD -MP -MF $(DEPDIR)/libgnu_a-stdio-write.Tpo -c -o libgnu_a-stdio-write.o `test -f 'stdio-write.c' || echo '$(srcdir)/'`stdio-write.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-stdio-write.Tpo $(DEPDIR)/libgnu_a-stdio-write.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='stdio-write.c' object='libgnu_a-stdio-write.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-stdio-write.o `test -f 'stdio-write.c' || echo '$(srcdir)/'`stdio-write.c libgnu_a-stdio-write.obj: stdio-write.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-stdio-write.obj -MD -MP -MF $(DEPDIR)/libgnu_a-stdio-write.Tpo -c -o libgnu_a-stdio-write.obj `if test -f 'stdio-write.c'; then $(CYGPATH_W) 'stdio-write.c'; else $(CYGPATH_W) '$(srcdir)/stdio-write.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-stdio-write.Tpo $(DEPDIR)/libgnu_a-stdio-write.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='stdio-write.c' object='libgnu_a-stdio-write.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-stdio-write.obj `if test -f 'stdio-write.c'; then $(CYGPATH_W) 'stdio-write.c'; else $(CYGPATH_W) '$(srcdir)/stdio-write.c'; fi` libgnu_a-strerror.o: strerror.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-strerror.o -MD -MP -MF $(DEPDIR)/libgnu_a-strerror.Tpo -c -o libgnu_a-strerror.o `test -f 'strerror.c' || echo '$(srcdir)/'`strerror.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-strerror.Tpo $(DEPDIR)/libgnu_a-strerror.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='strerror.c' object='libgnu_a-strerror.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-strerror.o `test -f 'strerror.c' || echo '$(srcdir)/'`strerror.c libgnu_a-strerror.obj: strerror.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-strerror.obj -MD -MP -MF $(DEPDIR)/libgnu_a-strerror.Tpo -c -o libgnu_a-strerror.obj `if test -f 'strerror.c'; then $(CYGPATH_W) 'strerror.c'; else $(CYGPATH_W) '$(srcdir)/strerror.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-strerror.Tpo $(DEPDIR)/libgnu_a-strerror.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='strerror.c' object='libgnu_a-strerror.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-strerror.obj `if test -f 'strerror.c'; then $(CYGPATH_W) 'strerror.c'; else $(CYGPATH_W) '$(srcdir)/strerror.c'; fi` libgnu_a-strerror-override.o: strerror-override.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-strerror-override.o -MD -MP -MF $(DEPDIR)/libgnu_a-strerror-override.Tpo -c -o libgnu_a-strerror-override.o `test -f 'strerror-override.c' || echo '$(srcdir)/'`strerror-override.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-strerror-override.Tpo $(DEPDIR)/libgnu_a-strerror-override.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='strerror-override.c' object='libgnu_a-strerror-override.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-strerror-override.o `test -f 'strerror-override.c' || echo '$(srcdir)/'`strerror-override.c libgnu_a-strerror-override.obj: strerror-override.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-strerror-override.obj -MD -MP -MF $(DEPDIR)/libgnu_a-strerror-override.Tpo -c -o libgnu_a-strerror-override.obj `if test -f 'strerror-override.c'; then $(CYGPATH_W) 'strerror-override.c'; else $(CYGPATH_W) '$(srcdir)/strerror-override.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-strerror-override.Tpo $(DEPDIR)/libgnu_a-strerror-override.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='strerror-override.c' object='libgnu_a-strerror-override.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-strerror-override.obj `if test -f 'strerror-override.c'; then $(CYGPATH_W) 'strerror-override.c'; else $(CYGPATH_W) '$(srcdir)/strerror-override.c'; fi` glthread/libgnu_a-threadlib.o: glthread/threadlib.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT glthread/libgnu_a-threadlib.o -MD -MP -MF glthread/$(DEPDIR)/libgnu_a-threadlib.Tpo -c -o glthread/libgnu_a-threadlib.o `test -f 'glthread/threadlib.c' || echo '$(srcdir)/'`glthread/threadlib.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) glthread/$(DEPDIR)/libgnu_a-threadlib.Tpo glthread/$(DEPDIR)/libgnu_a-threadlib.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='glthread/threadlib.c' object='glthread/libgnu_a-threadlib.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o glthread/libgnu_a-threadlib.o `test -f 'glthread/threadlib.c' || echo '$(srcdir)/'`glthread/threadlib.c glthread/libgnu_a-threadlib.obj: glthread/threadlib.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT glthread/libgnu_a-threadlib.obj -MD -MP -MF glthread/$(DEPDIR)/libgnu_a-threadlib.Tpo -c -o glthread/libgnu_a-threadlib.obj `if test -f 'glthread/threadlib.c'; then $(CYGPATH_W) 'glthread/threadlib.c'; else $(CYGPATH_W) '$(srcdir)/glthread/threadlib.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) glthread/$(DEPDIR)/libgnu_a-threadlib.Tpo glthread/$(DEPDIR)/libgnu_a-threadlib.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='glthread/threadlib.c' object='glthread/libgnu_a-threadlib.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o glthread/libgnu_a-threadlib.obj `if test -f 'glthread/threadlib.c'; then $(CYGPATH_W) 'glthread/threadlib.c'; else $(CYGPATH_W) '$(srcdir)/glthread/threadlib.c'; fi` libgnu_a-time_r.o: time_r.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-time_r.o -MD -MP -MF $(DEPDIR)/libgnu_a-time_r.Tpo -c -o libgnu_a-time_r.o `test -f 'time_r.c' || echo '$(srcdir)/'`time_r.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-time_r.Tpo $(DEPDIR)/libgnu_a-time_r.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='time_r.c' object='libgnu_a-time_r.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-time_r.o `test -f 'time_r.c' || echo '$(srcdir)/'`time_r.c libgnu_a-time_r.obj: time_r.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-time_r.obj -MD -MP -MF $(DEPDIR)/libgnu_a-time_r.Tpo -c -o libgnu_a-time_r.obj `if test -f 'time_r.c'; then $(CYGPATH_W) 'time_r.c'; else $(CYGPATH_W) '$(srcdir)/time_r.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-time_r.Tpo $(DEPDIR)/libgnu_a-time_r.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='time_r.c' object='libgnu_a-time_r.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-time_r.obj `if test -f 'time_r.c'; then $(CYGPATH_W) 'time_r.c'; else $(CYGPATH_W) '$(srcdir)/time_r.c'; fi` libgnu_a-time_rz.o: time_rz.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-time_rz.o -MD -MP -MF $(DEPDIR)/libgnu_a-time_rz.Tpo -c -o libgnu_a-time_rz.o `test -f 'time_rz.c' || echo '$(srcdir)/'`time_rz.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-time_rz.Tpo $(DEPDIR)/libgnu_a-time_rz.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='time_rz.c' object='libgnu_a-time_rz.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-time_rz.o `test -f 'time_rz.c' || echo '$(srcdir)/'`time_rz.c libgnu_a-time_rz.obj: time_rz.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-time_rz.obj -MD -MP -MF $(DEPDIR)/libgnu_a-time_rz.Tpo -c -o libgnu_a-time_rz.obj `if test -f 'time_rz.c'; then $(CYGPATH_W) 'time_rz.c'; else $(CYGPATH_W) '$(srcdir)/time_rz.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-time_rz.Tpo $(DEPDIR)/libgnu_a-time_rz.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='time_rz.c' object='libgnu_a-time_rz.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-time_rz.obj `if test -f 'time_rz.c'; then $(CYGPATH_W) 'time_rz.c'; else $(CYGPATH_W) '$(srcdir)/time_rz.c'; fi` libgnu_a-timegm.o: timegm.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-timegm.o -MD -MP -MF $(DEPDIR)/libgnu_a-timegm.Tpo -c -o libgnu_a-timegm.o `test -f 'timegm.c' || echo '$(srcdir)/'`timegm.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-timegm.Tpo $(DEPDIR)/libgnu_a-timegm.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='timegm.c' object='libgnu_a-timegm.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-timegm.o `test -f 'timegm.c' || echo '$(srcdir)/'`timegm.c libgnu_a-timegm.obj: timegm.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-timegm.obj -MD -MP -MF $(DEPDIR)/libgnu_a-timegm.Tpo -c -o libgnu_a-timegm.obj `if test -f 'timegm.c'; then $(CYGPATH_W) 'timegm.c'; else $(CYGPATH_W) '$(srcdir)/timegm.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-timegm.Tpo $(DEPDIR)/libgnu_a-timegm.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='timegm.c' object='libgnu_a-timegm.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-timegm.obj `if test -f 'timegm.c'; then $(CYGPATH_W) 'timegm.c'; else $(CYGPATH_W) '$(srcdir)/timegm.c'; fi` libgnu_a-tzset.o: tzset.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-tzset.o -MD -MP -MF $(DEPDIR)/libgnu_a-tzset.Tpo -c -o libgnu_a-tzset.o `test -f 'tzset.c' || echo '$(srcdir)/'`tzset.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-tzset.Tpo $(DEPDIR)/libgnu_a-tzset.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tzset.c' object='libgnu_a-tzset.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-tzset.o `test -f 'tzset.c' || echo '$(srcdir)/'`tzset.c libgnu_a-tzset.obj: tzset.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-tzset.obj -MD -MP -MF $(DEPDIR)/libgnu_a-tzset.Tpo -c -o libgnu_a-tzset.obj `if test -f 'tzset.c'; then $(CYGPATH_W) 'tzset.c'; else $(CYGPATH_W) '$(srcdir)/tzset.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-tzset.Tpo $(DEPDIR)/libgnu_a-tzset.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tzset.c' object='libgnu_a-tzset.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-tzset.obj `if test -f 'tzset.c'; then $(CYGPATH_W) 'tzset.c'; else $(CYGPATH_W) '$(srcdir)/tzset.c'; fi` libgnu_a-unistd.o: unistd.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-unistd.o -MD -MP -MF $(DEPDIR)/libgnu_a-unistd.Tpo -c -o libgnu_a-unistd.o `test -f 'unistd.c' || echo '$(srcdir)/'`unistd.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-unistd.Tpo $(DEPDIR)/libgnu_a-unistd.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unistd.c' object='libgnu_a-unistd.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-unistd.o `test -f 'unistd.c' || echo '$(srcdir)/'`unistd.c libgnu_a-unistd.obj: unistd.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-unistd.obj -MD -MP -MF $(DEPDIR)/libgnu_a-unistd.Tpo -c -o libgnu_a-unistd.obj `if test -f 'unistd.c'; then $(CYGPATH_W) 'unistd.c'; else $(CYGPATH_W) '$(srcdir)/unistd.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-unistd.Tpo $(DEPDIR)/libgnu_a-unistd.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unistd.c' object='libgnu_a-unistd.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-unistd.obj `if test -f 'unistd.c'; then $(CYGPATH_W) 'unistd.c'; else $(CYGPATH_W) '$(srcdir)/unistd.c'; fi` libgnu_a-unsetenv.o: unsetenv.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-unsetenv.o -MD -MP -MF $(DEPDIR)/libgnu_a-unsetenv.Tpo -c -o libgnu_a-unsetenv.o `test -f 'unsetenv.c' || echo '$(srcdir)/'`unsetenv.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-unsetenv.Tpo $(DEPDIR)/libgnu_a-unsetenv.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unsetenv.c' object='libgnu_a-unsetenv.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-unsetenv.o `test -f 'unsetenv.c' || echo '$(srcdir)/'`unsetenv.c libgnu_a-unsetenv.obj: unsetenv.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-unsetenv.obj -MD -MP -MF $(DEPDIR)/libgnu_a-unsetenv.Tpo -c -o libgnu_a-unsetenv.obj `if test -f 'unsetenv.c'; then $(CYGPATH_W) 'unsetenv.c'; else $(CYGPATH_W) '$(srcdir)/unsetenv.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-unsetenv.Tpo $(DEPDIR)/libgnu_a-unsetenv.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unsetenv.c' object='libgnu_a-unsetenv.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-unsetenv.obj `if test -f 'unsetenv.c'; then $(CYGPATH_W) 'unsetenv.c'; else $(CYGPATH_W) '$(srcdir)/unsetenv.c'; fi` libgnu_a-wcrtomb.o: wcrtomb.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-wcrtomb.o -MD -MP -MF $(DEPDIR)/libgnu_a-wcrtomb.Tpo -c -o libgnu_a-wcrtomb.o `test -f 'wcrtomb.c' || echo '$(srcdir)/'`wcrtomb.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-wcrtomb.Tpo $(DEPDIR)/libgnu_a-wcrtomb.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='wcrtomb.c' object='libgnu_a-wcrtomb.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-wcrtomb.o `test -f 'wcrtomb.c' || echo '$(srcdir)/'`wcrtomb.c libgnu_a-wcrtomb.obj: wcrtomb.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-wcrtomb.obj -MD -MP -MF $(DEPDIR)/libgnu_a-wcrtomb.Tpo -c -o libgnu_a-wcrtomb.obj `if test -f 'wcrtomb.c'; then $(CYGPATH_W) 'wcrtomb.c'; else $(CYGPATH_W) '$(srcdir)/wcrtomb.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-wcrtomb.Tpo $(DEPDIR)/libgnu_a-wcrtomb.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='wcrtomb.c' object='libgnu_a-wcrtomb.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-wcrtomb.obj `if test -f 'wcrtomb.c'; then $(CYGPATH_W) 'wcrtomb.c'; else $(CYGPATH_W) '$(srcdir)/wcrtomb.c'; fi` libgnu_a-wctype-h.o: wctype-h.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-wctype-h.o -MD -MP -MF $(DEPDIR)/libgnu_a-wctype-h.Tpo -c -o libgnu_a-wctype-h.o `test -f 'wctype-h.c' || echo '$(srcdir)/'`wctype-h.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-wctype-h.Tpo $(DEPDIR)/libgnu_a-wctype-h.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='wctype-h.c' object='libgnu_a-wctype-h.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-wctype-h.o `test -f 'wctype-h.c' || echo '$(srcdir)/'`wctype-h.c libgnu_a-wctype-h.obj: wctype-h.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-wctype-h.obj -MD -MP -MF $(DEPDIR)/libgnu_a-wctype-h.Tpo -c -o libgnu_a-wctype-h.obj `if test -f 'wctype-h.c'; then $(CYGPATH_W) 'wctype-h.c'; else $(CYGPATH_W) '$(srcdir)/wctype-h.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-wctype-h.Tpo $(DEPDIR)/libgnu_a-wctype-h.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='wctype-h.c' object='libgnu_a-wctype-h.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-wctype-h.obj `if test -f 'wctype-h.c'; then $(CYGPATH_W) 'wctype-h.c'; else $(CYGPATH_W) '$(srcdir)/wctype-h.c'; fi` libgnu_a-windows-mutex.o: windows-mutex.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-windows-mutex.o -MD -MP -MF $(DEPDIR)/libgnu_a-windows-mutex.Tpo -c -o libgnu_a-windows-mutex.o `test -f 'windows-mutex.c' || echo '$(srcdir)/'`windows-mutex.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-windows-mutex.Tpo $(DEPDIR)/libgnu_a-windows-mutex.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='windows-mutex.c' object='libgnu_a-windows-mutex.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-windows-mutex.o `test -f 'windows-mutex.c' || echo '$(srcdir)/'`windows-mutex.c libgnu_a-windows-mutex.obj: windows-mutex.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-windows-mutex.obj -MD -MP -MF $(DEPDIR)/libgnu_a-windows-mutex.Tpo -c -o libgnu_a-windows-mutex.obj `if test -f 'windows-mutex.c'; then $(CYGPATH_W) 'windows-mutex.c'; else $(CYGPATH_W) '$(srcdir)/windows-mutex.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-windows-mutex.Tpo $(DEPDIR)/libgnu_a-windows-mutex.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='windows-mutex.c' object='libgnu_a-windows-mutex.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-windows-mutex.obj `if test -f 'windows-mutex.c'; then $(CYGPATH_W) 'windows-mutex.c'; else $(CYGPATH_W) '$(srcdir)/windows-mutex.c'; fi` libgnu_a-windows-once.o: windows-once.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-windows-once.o -MD -MP -MF $(DEPDIR)/libgnu_a-windows-once.Tpo -c -o libgnu_a-windows-once.o `test -f 'windows-once.c' || echo '$(srcdir)/'`windows-once.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-windows-once.Tpo $(DEPDIR)/libgnu_a-windows-once.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='windows-once.c' object='libgnu_a-windows-once.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-windows-once.o `test -f 'windows-once.c' || echo '$(srcdir)/'`windows-once.c libgnu_a-windows-once.obj: windows-once.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-windows-once.obj -MD -MP -MF $(DEPDIR)/libgnu_a-windows-once.Tpo -c -o libgnu_a-windows-once.obj `if test -f 'windows-once.c'; then $(CYGPATH_W) 'windows-once.c'; else $(CYGPATH_W) '$(srcdir)/windows-once.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-windows-once.Tpo $(DEPDIR)/libgnu_a-windows-once.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='windows-once.c' object='libgnu_a-windows-once.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-windows-once.obj `if test -f 'windows-once.c'; then $(CYGPATH_W) 'windows-once.c'; else $(CYGPATH_W) '$(srcdir)/windows-once.c'; fi` libgnu_a-windows-recmutex.o: windows-recmutex.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-windows-recmutex.o -MD -MP -MF $(DEPDIR)/libgnu_a-windows-recmutex.Tpo -c -o libgnu_a-windows-recmutex.o `test -f 'windows-recmutex.c' || echo '$(srcdir)/'`windows-recmutex.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-windows-recmutex.Tpo $(DEPDIR)/libgnu_a-windows-recmutex.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='windows-recmutex.c' object='libgnu_a-windows-recmutex.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-windows-recmutex.o `test -f 'windows-recmutex.c' || echo '$(srcdir)/'`windows-recmutex.c libgnu_a-windows-recmutex.obj: windows-recmutex.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-windows-recmutex.obj -MD -MP -MF $(DEPDIR)/libgnu_a-windows-recmutex.Tpo -c -o libgnu_a-windows-recmutex.obj `if test -f 'windows-recmutex.c'; then $(CYGPATH_W) 'windows-recmutex.c'; else $(CYGPATH_W) '$(srcdir)/windows-recmutex.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-windows-recmutex.Tpo $(DEPDIR)/libgnu_a-windows-recmutex.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='windows-recmutex.c' object='libgnu_a-windows-recmutex.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-windows-recmutex.obj `if test -f 'windows-recmutex.c'; then $(CYGPATH_W) 'windows-recmutex.c'; else $(CYGPATH_W) '$(srcdir)/windows-recmutex.c'; fi` libgnu_a-windows-rwlock.o: windows-rwlock.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-windows-rwlock.o -MD -MP -MF $(DEPDIR)/libgnu_a-windows-rwlock.Tpo -c -o libgnu_a-windows-rwlock.o `test -f 'windows-rwlock.c' || echo '$(srcdir)/'`windows-rwlock.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-windows-rwlock.Tpo $(DEPDIR)/libgnu_a-windows-rwlock.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='windows-rwlock.c' object='libgnu_a-windows-rwlock.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-windows-rwlock.o `test -f 'windows-rwlock.c' || echo '$(srcdir)/'`windows-rwlock.c libgnu_a-windows-rwlock.obj: windows-rwlock.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-windows-rwlock.obj -MD -MP -MF $(DEPDIR)/libgnu_a-windows-rwlock.Tpo -c -o libgnu_a-windows-rwlock.obj `if test -f 'windows-rwlock.c'; then $(CYGPATH_W) 'windows-rwlock.c'; else $(CYGPATH_W) '$(srcdir)/windows-rwlock.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-windows-rwlock.Tpo $(DEPDIR)/libgnu_a-windows-rwlock.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='windows-rwlock.c' object='libgnu_a-windows-rwlock.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-windows-rwlock.obj `if test -f 'windows-rwlock.c'; then $(CYGPATH_W) 'windows-rwlock.c'; else $(CYGPATH_W) '$(srcdir)/windows-rwlock.c'; fi` libgnu_a-xmalloc.o: xmalloc.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-xmalloc.o -MD -MP -MF $(DEPDIR)/libgnu_a-xmalloc.Tpo -c -o libgnu_a-xmalloc.o `test -f 'xmalloc.c' || echo '$(srcdir)/'`xmalloc.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-xmalloc.Tpo $(DEPDIR)/libgnu_a-xmalloc.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xmalloc.c' object='libgnu_a-xmalloc.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-xmalloc.o `test -f 'xmalloc.c' || echo '$(srcdir)/'`xmalloc.c libgnu_a-xmalloc.obj: xmalloc.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-xmalloc.obj -MD -MP -MF $(DEPDIR)/libgnu_a-xmalloc.Tpo -c -o libgnu_a-xmalloc.obj `if test -f 'xmalloc.c'; then $(CYGPATH_W) 'xmalloc.c'; else $(CYGPATH_W) '$(srcdir)/xmalloc.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-xmalloc.Tpo $(DEPDIR)/libgnu_a-xmalloc.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xmalloc.c' object='libgnu_a-xmalloc.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-xmalloc.obj `if test -f 'xmalloc.c'; then $(CYGPATH_W) 'xmalloc.c'; else $(CYGPATH_W) '$(srcdir)/xmalloc.c'; fi` libgnu_a-calloc.o: calloc.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-calloc.o -MD -MP -MF $(DEPDIR)/libgnu_a-calloc.Tpo -c -o libgnu_a-calloc.o `test -f 'calloc.c' || echo '$(srcdir)/'`calloc.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-calloc.Tpo $(DEPDIR)/libgnu_a-calloc.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='calloc.c' object='libgnu_a-calloc.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-calloc.o `test -f 'calloc.c' || echo '$(srcdir)/'`calloc.c libgnu_a-calloc.obj: calloc.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-calloc.obj -MD -MP -MF $(DEPDIR)/libgnu_a-calloc.Tpo -c -o libgnu_a-calloc.obj `if test -f 'calloc.c'; then $(CYGPATH_W) 'calloc.c'; else $(CYGPATH_W) '$(srcdir)/calloc.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-calloc.Tpo $(DEPDIR)/libgnu_a-calloc.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='calloc.c' object='libgnu_a-calloc.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-calloc.obj `if test -f 'calloc.c'; then $(CYGPATH_W) 'calloc.c'; else $(CYGPATH_W) '$(srcdir)/calloc.c'; fi` libgnu_a-stat-w32.o: stat-w32.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-stat-w32.o -MD -MP -MF $(DEPDIR)/libgnu_a-stat-w32.Tpo -c -o libgnu_a-stat-w32.o `test -f 'stat-w32.c' || echo '$(srcdir)/'`stat-w32.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-stat-w32.Tpo $(DEPDIR)/libgnu_a-stat-w32.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='stat-w32.c' object='libgnu_a-stat-w32.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-stat-w32.o `test -f 'stat-w32.c' || echo '$(srcdir)/'`stat-w32.c libgnu_a-stat-w32.obj: stat-w32.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-stat-w32.obj -MD -MP -MF $(DEPDIR)/libgnu_a-stat-w32.Tpo -c -o libgnu_a-stat-w32.obj `if test -f 'stat-w32.c'; then $(CYGPATH_W) 'stat-w32.c'; else $(CYGPATH_W) '$(srcdir)/stat-w32.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-stat-w32.Tpo $(DEPDIR)/libgnu_a-stat-w32.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='stat-w32.c' object='libgnu_a-stat-w32.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-stat-w32.obj `if test -f 'stat-w32.c'; then $(CYGPATH_W) 'stat-w32.c'; else $(CYGPATH_W) '$(srcdir)/stat-w32.c'; fi` malloc/libgnu_a-dynarray-skeleton.o: malloc/dynarray-skeleton.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT malloc/libgnu_a-dynarray-skeleton.o -MD -MP -MF malloc/$(DEPDIR)/libgnu_a-dynarray-skeleton.Tpo -c -o malloc/libgnu_a-dynarray-skeleton.o `test -f 'malloc/dynarray-skeleton.c' || echo '$(srcdir)/'`malloc/dynarray-skeleton.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) malloc/$(DEPDIR)/libgnu_a-dynarray-skeleton.Tpo malloc/$(DEPDIR)/libgnu_a-dynarray-skeleton.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='malloc/dynarray-skeleton.c' object='malloc/libgnu_a-dynarray-skeleton.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o malloc/libgnu_a-dynarray-skeleton.o `test -f 'malloc/dynarray-skeleton.c' || echo '$(srcdir)/'`malloc/dynarray-skeleton.c malloc/libgnu_a-dynarray-skeleton.obj: malloc/dynarray-skeleton.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT malloc/libgnu_a-dynarray-skeleton.obj -MD -MP -MF malloc/$(DEPDIR)/libgnu_a-dynarray-skeleton.Tpo -c -o malloc/libgnu_a-dynarray-skeleton.obj `if test -f 'malloc/dynarray-skeleton.c'; then $(CYGPATH_W) 'malloc/dynarray-skeleton.c'; else $(CYGPATH_W) '$(srcdir)/malloc/dynarray-skeleton.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) malloc/$(DEPDIR)/libgnu_a-dynarray-skeleton.Tpo malloc/$(DEPDIR)/libgnu_a-dynarray-skeleton.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='malloc/dynarray-skeleton.c' object='malloc/libgnu_a-dynarray-skeleton.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o malloc/libgnu_a-dynarray-skeleton.obj `if test -f 'malloc/dynarray-skeleton.c'; then $(CYGPATH_W) 'malloc/dynarray-skeleton.c'; else $(CYGPATH_W) '$(srcdir)/malloc/dynarray-skeleton.c'; fi` libgnu_a-anytostr.o: anytostr.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-anytostr.o -MD -MP -MF $(DEPDIR)/libgnu_a-anytostr.Tpo -c -o libgnu_a-anytostr.o `test -f 'anytostr.c' || echo '$(srcdir)/'`anytostr.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-anytostr.Tpo $(DEPDIR)/libgnu_a-anytostr.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='anytostr.c' object='libgnu_a-anytostr.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-anytostr.o `test -f 'anytostr.c' || echo '$(srcdir)/'`anytostr.c libgnu_a-anytostr.obj: anytostr.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-anytostr.obj -MD -MP -MF $(DEPDIR)/libgnu_a-anytostr.Tpo -c -o libgnu_a-anytostr.obj `if test -f 'anytostr.c'; then $(CYGPATH_W) 'anytostr.c'; else $(CYGPATH_W) '$(srcdir)/anytostr.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-anytostr.Tpo $(DEPDIR)/libgnu_a-anytostr.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='anytostr.c' object='libgnu_a-anytostr.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-anytostr.obj `if test -f 'anytostr.c'; then $(CYGPATH_W) 'anytostr.c'; else $(CYGPATH_W) '$(srcdir)/anytostr.c'; fi` libgnu_a-malloc.o: malloc.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-malloc.o -MD -MP -MF $(DEPDIR)/libgnu_a-malloc.Tpo -c -o libgnu_a-malloc.o `test -f 'malloc.c' || echo '$(srcdir)/'`malloc.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-malloc.Tpo $(DEPDIR)/libgnu_a-malloc.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='malloc.c' object='libgnu_a-malloc.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-malloc.o `test -f 'malloc.c' || echo '$(srcdir)/'`malloc.c libgnu_a-malloc.obj: malloc.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-malloc.obj -MD -MP -MF $(DEPDIR)/libgnu_a-malloc.Tpo -c -o libgnu_a-malloc.obj `if test -f 'malloc.c'; then $(CYGPATH_W) 'malloc.c'; else $(CYGPATH_W) '$(srcdir)/malloc.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-malloc.Tpo $(DEPDIR)/libgnu_a-malloc.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='malloc.c' object='libgnu_a-malloc.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-malloc.obj `if test -f 'malloc.c'; then $(CYGPATH_W) 'malloc.c'; else $(CYGPATH_W) '$(srcdir)/malloc.c'; fi` libgnu_a-lc-charset-dispatch.o: lc-charset-dispatch.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-lc-charset-dispatch.o -MD -MP -MF $(DEPDIR)/libgnu_a-lc-charset-dispatch.Tpo -c -o libgnu_a-lc-charset-dispatch.o `test -f 'lc-charset-dispatch.c' || echo '$(srcdir)/'`lc-charset-dispatch.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-lc-charset-dispatch.Tpo $(DEPDIR)/libgnu_a-lc-charset-dispatch.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lc-charset-dispatch.c' object='libgnu_a-lc-charset-dispatch.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-lc-charset-dispatch.o `test -f 'lc-charset-dispatch.c' || echo '$(srcdir)/'`lc-charset-dispatch.c libgnu_a-lc-charset-dispatch.obj: lc-charset-dispatch.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-lc-charset-dispatch.obj -MD -MP -MF $(DEPDIR)/libgnu_a-lc-charset-dispatch.Tpo -c -o libgnu_a-lc-charset-dispatch.obj `if test -f 'lc-charset-dispatch.c'; then $(CYGPATH_W) 'lc-charset-dispatch.c'; else $(CYGPATH_W) '$(srcdir)/lc-charset-dispatch.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-lc-charset-dispatch.Tpo $(DEPDIR)/libgnu_a-lc-charset-dispatch.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lc-charset-dispatch.c' object='libgnu_a-lc-charset-dispatch.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-lc-charset-dispatch.obj `if test -f 'lc-charset-dispatch.c'; then $(CYGPATH_W) 'lc-charset-dispatch.c'; else $(CYGPATH_W) '$(srcdir)/lc-charset-dispatch.c'; fi` libgnu_a-mbtowc-lock.o: mbtowc-lock.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-mbtowc-lock.o -MD -MP -MF $(DEPDIR)/libgnu_a-mbtowc-lock.Tpo -c -o libgnu_a-mbtowc-lock.o `test -f 'mbtowc-lock.c' || echo '$(srcdir)/'`mbtowc-lock.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-mbtowc-lock.Tpo $(DEPDIR)/libgnu_a-mbtowc-lock.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mbtowc-lock.c' object='libgnu_a-mbtowc-lock.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-mbtowc-lock.o `test -f 'mbtowc-lock.c' || echo '$(srcdir)/'`mbtowc-lock.c libgnu_a-mbtowc-lock.obj: mbtowc-lock.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-mbtowc-lock.obj -MD -MP -MF $(DEPDIR)/libgnu_a-mbtowc-lock.Tpo -c -o libgnu_a-mbtowc-lock.obj `if test -f 'mbtowc-lock.c'; then $(CYGPATH_W) 'mbtowc-lock.c'; else $(CYGPATH_W) '$(srcdir)/mbtowc-lock.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-mbtowc-lock.Tpo $(DEPDIR)/libgnu_a-mbtowc-lock.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mbtowc-lock.c' object='libgnu_a-mbtowc-lock.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-mbtowc-lock.obj `if test -f 'mbtowc-lock.c'; then $(CYGPATH_W) 'mbtowc-lock.c'; else $(CYGPATH_W) '$(srcdir)/mbtowc-lock.c'; fi` libgnu_a-mktime.o: mktime.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-mktime.o -MD -MP -MF $(DEPDIR)/libgnu_a-mktime.Tpo -c -o libgnu_a-mktime.o `test -f 'mktime.c' || echo '$(srcdir)/'`mktime.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-mktime.Tpo $(DEPDIR)/libgnu_a-mktime.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mktime.c' object='libgnu_a-mktime.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-mktime.o `test -f 'mktime.c' || echo '$(srcdir)/'`mktime.c libgnu_a-mktime.obj: mktime.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-mktime.obj -MD -MP -MF $(DEPDIR)/libgnu_a-mktime.Tpo -c -o libgnu_a-mktime.obj `if test -f 'mktime.c'; then $(CYGPATH_W) 'mktime.c'; else $(CYGPATH_W) '$(srcdir)/mktime.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-mktime.Tpo $(DEPDIR)/libgnu_a-mktime.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mktime.c' object='libgnu_a-mktime.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-mktime.obj `if test -f 'mktime.c'; then $(CYGPATH_W) 'mktime.c'; else $(CYGPATH_W) '$(srcdir)/mktime.c'; fi` libgnu_a-realloc.o: realloc.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-realloc.o -MD -MP -MF $(DEPDIR)/libgnu_a-realloc.Tpo -c -o libgnu_a-realloc.o `test -f 'realloc.c' || echo '$(srcdir)/'`realloc.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-realloc.Tpo $(DEPDIR)/libgnu_a-realloc.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='realloc.c' object='libgnu_a-realloc.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-realloc.o `test -f 'realloc.c' || echo '$(srcdir)/'`realloc.c libgnu_a-realloc.obj: realloc.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-realloc.obj -MD -MP -MF $(DEPDIR)/libgnu_a-realloc.Tpo -c -o libgnu_a-realloc.obj `if test -f 'realloc.c'; then $(CYGPATH_W) 'realloc.c'; else $(CYGPATH_W) '$(srcdir)/realloc.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-realloc.Tpo $(DEPDIR)/libgnu_a-realloc.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='realloc.c' object='libgnu_a-realloc.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-realloc.obj `if test -f 'realloc.c'; then $(CYGPATH_W) 'realloc.c'; else $(CYGPATH_W) '$(srcdir)/realloc.c'; fi` libgnu_a-regcomp.o: regcomp.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-regcomp.o -MD -MP -MF $(DEPDIR)/libgnu_a-regcomp.Tpo -c -o libgnu_a-regcomp.o `test -f 'regcomp.c' || echo '$(srcdir)/'`regcomp.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-regcomp.Tpo $(DEPDIR)/libgnu_a-regcomp.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='regcomp.c' object='libgnu_a-regcomp.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-regcomp.o `test -f 'regcomp.c' || echo '$(srcdir)/'`regcomp.c libgnu_a-regcomp.obj: regcomp.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-regcomp.obj -MD -MP -MF $(DEPDIR)/libgnu_a-regcomp.Tpo -c -o libgnu_a-regcomp.obj `if test -f 'regcomp.c'; then $(CYGPATH_W) 'regcomp.c'; else $(CYGPATH_W) '$(srcdir)/regcomp.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-regcomp.Tpo $(DEPDIR)/libgnu_a-regcomp.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='regcomp.c' object='libgnu_a-regcomp.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-regcomp.obj `if test -f 'regcomp.c'; then $(CYGPATH_W) 'regcomp.c'; else $(CYGPATH_W) '$(srcdir)/regcomp.c'; fi` libgnu_a-regex_internal.o: regex_internal.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-regex_internal.o -MD -MP -MF $(DEPDIR)/libgnu_a-regex_internal.Tpo -c -o libgnu_a-regex_internal.o `test -f 'regex_internal.c' || echo '$(srcdir)/'`regex_internal.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-regex_internal.Tpo $(DEPDIR)/libgnu_a-regex_internal.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='regex_internal.c' object='libgnu_a-regex_internal.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-regex_internal.o `test -f 'regex_internal.c' || echo '$(srcdir)/'`regex_internal.c libgnu_a-regex_internal.obj: regex_internal.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-regex_internal.obj -MD -MP -MF $(DEPDIR)/libgnu_a-regex_internal.Tpo -c -o libgnu_a-regex_internal.obj `if test -f 'regex_internal.c'; then $(CYGPATH_W) 'regex_internal.c'; else $(CYGPATH_W) '$(srcdir)/regex_internal.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-regex_internal.Tpo $(DEPDIR)/libgnu_a-regex_internal.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='regex_internal.c' object='libgnu_a-regex_internal.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-regex_internal.obj `if test -f 'regex_internal.c'; then $(CYGPATH_W) 'regex_internal.c'; else $(CYGPATH_W) '$(srcdir)/regex_internal.c'; fi` libgnu_a-regexec.o: regexec.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-regexec.o -MD -MP -MF $(DEPDIR)/libgnu_a-regexec.Tpo -c -o libgnu_a-regexec.o `test -f 'regexec.c' || echo '$(srcdir)/'`regexec.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-regexec.Tpo $(DEPDIR)/libgnu_a-regexec.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='regexec.c' object='libgnu_a-regexec.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-regexec.o `test -f 'regexec.c' || echo '$(srcdir)/'`regexec.c libgnu_a-regexec.obj: regexec.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-regexec.obj -MD -MP -MF $(DEPDIR)/libgnu_a-regexec.Tpo -c -o libgnu_a-regexec.obj `if test -f 'regexec.c'; then $(CYGPATH_W) 'regexec.c'; else $(CYGPATH_W) '$(srcdir)/regexec.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-regexec.Tpo $(DEPDIR)/libgnu_a-regexec.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='regexec.c' object='libgnu_a-regexec.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-regexec.obj `if test -f 'regexec.c'; then $(CYGPATH_W) 'regexec.c'; else $(CYGPATH_W) '$(srcdir)/regexec.c'; fi` # 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: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @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 $(LIBRARIES) $(LTLIBRARIES) $(HEADERS) installdirs: installdirs-recursive installdirs-am: install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-recursive install-exec: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) 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: -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) 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) -rm -f glthread/$(DEPDIR)/$(am__dirstamp) -rm -f glthread/$(am__dirstamp) -rm -f malloc/$(DEPDIR)/$(am__dirstamp) -rm -f malloc/$(am__dirstamp) -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 "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-recursive clean-am: clean-generic clean-noinstLIBRARIES clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-recursive -rm -f ./$(DEPDIR)/libgnu_a-anytostr.Po -rm -f ./$(DEPDIR)/libgnu_a-basename-lgpl.Po -rm -f ./$(DEPDIR)/libgnu_a-basename.Po -rm -f ./$(DEPDIR)/libgnu_a-btowc.Po -rm -f ./$(DEPDIR)/libgnu_a-c-ctype.Po -rm -f ./$(DEPDIR)/libgnu_a-calloc.Po -rm -f ./$(DEPDIR)/libgnu_a-cloexec.Po -rm -f ./$(DEPDIR)/libgnu_a-close.Po -rm -f ./$(DEPDIR)/libgnu_a-dirname-lgpl.Po -rm -f ./$(DEPDIR)/libgnu_a-dirname.Po -rm -f ./$(DEPDIR)/libgnu_a-dup2.Po -rm -f ./$(DEPDIR)/libgnu_a-error.Po -rm -f ./$(DEPDIR)/libgnu_a-fcntl.Po -rm -f ./$(DEPDIR)/libgnu_a-fd-hook.Po -rm -f ./$(DEPDIR)/libgnu_a-fprintftime.Po -rm -f ./$(DEPDIR)/libgnu_a-free.Po -rm -f ./$(DEPDIR)/libgnu_a-fstat.Po -rm -f ./$(DEPDIR)/libgnu_a-getdelim.Po -rm -f ./$(DEPDIR)/libgnu_a-getdtablesize.Po -rm -f ./$(DEPDIR)/libgnu_a-getline.Po -rm -f ./$(DEPDIR)/libgnu_a-getopt.Po -rm -f ./$(DEPDIR)/libgnu_a-getopt1.Po -rm -f ./$(DEPDIR)/libgnu_a-getprogname.Po -rm -f ./$(DEPDIR)/libgnu_a-hard-locale.Po -rm -f ./$(DEPDIR)/libgnu_a-ialloc.Po -rm -f ./$(DEPDIR)/libgnu_a-imaxtostr.Po -rm -f ./$(DEPDIR)/libgnu_a-inttostr.Po -rm -f ./$(DEPDIR)/libgnu_a-lc-charset-dispatch.Po -rm -f ./$(DEPDIR)/libgnu_a-localcharset.Po -rm -f ./$(DEPDIR)/libgnu_a-localeconv.Po -rm -f ./$(DEPDIR)/libgnu_a-malloc.Po -rm -f ./$(DEPDIR)/libgnu_a-malloca.Po -rm -f ./$(DEPDIR)/libgnu_a-mbrtowc.Po -rm -f ./$(DEPDIR)/libgnu_a-mbsinit.Po -rm -f ./$(DEPDIR)/libgnu_a-mbtowc-lock.Po -rm -f ./$(DEPDIR)/libgnu_a-mbtowc.Po -rm -f ./$(DEPDIR)/libgnu_a-mktime.Po -rm -f ./$(DEPDIR)/libgnu_a-msvc-inval.Po -rm -f ./$(DEPDIR)/libgnu_a-msvc-nothrow.Po -rm -f ./$(DEPDIR)/libgnu_a-nl_langinfo-lock.Po -rm -f ./$(DEPDIR)/libgnu_a-nl_langinfo.Po -rm -f ./$(DEPDIR)/libgnu_a-nstrftime.Po -rm -f ./$(DEPDIR)/libgnu_a-offtostr.Po -rm -f ./$(DEPDIR)/libgnu_a-open.Po -rm -f ./$(DEPDIR)/libgnu_a-realloc.Po -rm -f ./$(DEPDIR)/libgnu_a-reallocarray.Po -rm -f ./$(DEPDIR)/libgnu_a-regcomp.Po -rm -f ./$(DEPDIR)/libgnu_a-regex.Po -rm -f ./$(DEPDIR)/libgnu_a-regex_internal.Po -rm -f ./$(DEPDIR)/libgnu_a-regexec.Po -rm -f ./$(DEPDIR)/libgnu_a-setenv.Po -rm -f ./$(DEPDIR)/libgnu_a-setlocale-lock.Po -rm -f ./$(DEPDIR)/libgnu_a-setlocale_null.Po -rm -f ./$(DEPDIR)/libgnu_a-stat-time.Po -rm -f ./$(DEPDIR)/libgnu_a-stat-w32.Po -rm -f ./$(DEPDIR)/libgnu_a-stat.Po -rm -f ./$(DEPDIR)/libgnu_a-stdio-read.Po -rm -f ./$(DEPDIR)/libgnu_a-stdio-write.Po -rm -f ./$(DEPDIR)/libgnu_a-strerror-override.Po -rm -f ./$(DEPDIR)/libgnu_a-strerror.Po -rm -f ./$(DEPDIR)/libgnu_a-stripslash.Po -rm -f ./$(DEPDIR)/libgnu_a-time_r.Po -rm -f ./$(DEPDIR)/libgnu_a-time_rz.Po -rm -f ./$(DEPDIR)/libgnu_a-timegm.Po -rm -f ./$(DEPDIR)/libgnu_a-tzset.Po -rm -f ./$(DEPDIR)/libgnu_a-uinttostr.Po -rm -f ./$(DEPDIR)/libgnu_a-umaxtostr.Po -rm -f ./$(DEPDIR)/libgnu_a-unistd.Po -rm -f ./$(DEPDIR)/libgnu_a-unsetenv.Po -rm -f ./$(DEPDIR)/libgnu_a-wcrtomb.Po -rm -f ./$(DEPDIR)/libgnu_a-wctype-h.Po -rm -f ./$(DEPDIR)/libgnu_a-windows-mutex.Po -rm -f ./$(DEPDIR)/libgnu_a-windows-once.Po -rm -f ./$(DEPDIR)/libgnu_a-windows-recmutex.Po -rm -f ./$(DEPDIR)/libgnu_a-windows-rwlock.Po -rm -f ./$(DEPDIR)/libgnu_a-xmalloc.Po -rm -f glthread/$(DEPDIR)/libgnu_a-lock.Po -rm -f glthread/$(DEPDIR)/libgnu_a-threadlib.Po -rm -f malloc/$(DEPDIR)/libgnu_a-dynarray-skeleton.Po -rm -f malloc/$(DEPDIR)/libgnu_a-dynarray_at_failure.Po -rm -f malloc/$(DEPDIR)/libgnu_a-dynarray_emplace_enlarge.Po -rm -f malloc/$(DEPDIR)/libgnu_a-dynarray_finalize.Po -rm -f malloc/$(DEPDIR)/libgnu_a-dynarray_resize.Po -rm -f malloc/$(DEPDIR)/libgnu_a-dynarray_resize_clear.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-local 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 ./$(DEPDIR)/libgnu_a-anytostr.Po -rm -f ./$(DEPDIR)/libgnu_a-basename-lgpl.Po -rm -f ./$(DEPDIR)/libgnu_a-basename.Po -rm -f ./$(DEPDIR)/libgnu_a-btowc.Po -rm -f ./$(DEPDIR)/libgnu_a-c-ctype.Po -rm -f ./$(DEPDIR)/libgnu_a-calloc.Po -rm -f ./$(DEPDIR)/libgnu_a-cloexec.Po -rm -f ./$(DEPDIR)/libgnu_a-close.Po -rm -f ./$(DEPDIR)/libgnu_a-dirname-lgpl.Po -rm -f ./$(DEPDIR)/libgnu_a-dirname.Po -rm -f ./$(DEPDIR)/libgnu_a-dup2.Po -rm -f ./$(DEPDIR)/libgnu_a-error.Po -rm -f ./$(DEPDIR)/libgnu_a-fcntl.Po -rm -f ./$(DEPDIR)/libgnu_a-fd-hook.Po -rm -f ./$(DEPDIR)/libgnu_a-fprintftime.Po -rm -f ./$(DEPDIR)/libgnu_a-free.Po -rm -f ./$(DEPDIR)/libgnu_a-fstat.Po -rm -f ./$(DEPDIR)/libgnu_a-getdelim.Po -rm -f ./$(DEPDIR)/libgnu_a-getdtablesize.Po -rm -f ./$(DEPDIR)/libgnu_a-getline.Po -rm -f ./$(DEPDIR)/libgnu_a-getopt.Po -rm -f ./$(DEPDIR)/libgnu_a-getopt1.Po -rm -f ./$(DEPDIR)/libgnu_a-getprogname.Po -rm -f ./$(DEPDIR)/libgnu_a-hard-locale.Po -rm -f ./$(DEPDIR)/libgnu_a-ialloc.Po -rm -f ./$(DEPDIR)/libgnu_a-imaxtostr.Po -rm -f ./$(DEPDIR)/libgnu_a-inttostr.Po -rm -f ./$(DEPDIR)/libgnu_a-lc-charset-dispatch.Po -rm -f ./$(DEPDIR)/libgnu_a-localcharset.Po -rm -f ./$(DEPDIR)/libgnu_a-localeconv.Po -rm -f ./$(DEPDIR)/libgnu_a-malloc.Po -rm -f ./$(DEPDIR)/libgnu_a-malloca.Po -rm -f ./$(DEPDIR)/libgnu_a-mbrtowc.Po -rm -f ./$(DEPDIR)/libgnu_a-mbsinit.Po -rm -f ./$(DEPDIR)/libgnu_a-mbtowc-lock.Po -rm -f ./$(DEPDIR)/libgnu_a-mbtowc.Po -rm -f ./$(DEPDIR)/libgnu_a-mktime.Po -rm -f ./$(DEPDIR)/libgnu_a-msvc-inval.Po -rm -f ./$(DEPDIR)/libgnu_a-msvc-nothrow.Po -rm -f ./$(DEPDIR)/libgnu_a-nl_langinfo-lock.Po -rm -f ./$(DEPDIR)/libgnu_a-nl_langinfo.Po -rm -f ./$(DEPDIR)/libgnu_a-nstrftime.Po -rm -f ./$(DEPDIR)/libgnu_a-offtostr.Po -rm -f ./$(DEPDIR)/libgnu_a-open.Po -rm -f ./$(DEPDIR)/libgnu_a-realloc.Po -rm -f ./$(DEPDIR)/libgnu_a-reallocarray.Po -rm -f ./$(DEPDIR)/libgnu_a-regcomp.Po -rm -f ./$(DEPDIR)/libgnu_a-regex.Po -rm -f ./$(DEPDIR)/libgnu_a-regex_internal.Po -rm -f ./$(DEPDIR)/libgnu_a-regexec.Po -rm -f ./$(DEPDIR)/libgnu_a-setenv.Po -rm -f ./$(DEPDIR)/libgnu_a-setlocale-lock.Po -rm -f ./$(DEPDIR)/libgnu_a-setlocale_null.Po -rm -f ./$(DEPDIR)/libgnu_a-stat-time.Po -rm -f ./$(DEPDIR)/libgnu_a-stat-w32.Po -rm -f ./$(DEPDIR)/libgnu_a-stat.Po -rm -f ./$(DEPDIR)/libgnu_a-stdio-read.Po -rm -f ./$(DEPDIR)/libgnu_a-stdio-write.Po -rm -f ./$(DEPDIR)/libgnu_a-strerror-override.Po -rm -f ./$(DEPDIR)/libgnu_a-strerror.Po -rm -f ./$(DEPDIR)/libgnu_a-stripslash.Po -rm -f ./$(DEPDIR)/libgnu_a-time_r.Po -rm -f ./$(DEPDIR)/libgnu_a-time_rz.Po -rm -f ./$(DEPDIR)/libgnu_a-timegm.Po -rm -f ./$(DEPDIR)/libgnu_a-tzset.Po -rm -f ./$(DEPDIR)/libgnu_a-uinttostr.Po -rm -f ./$(DEPDIR)/libgnu_a-umaxtostr.Po -rm -f ./$(DEPDIR)/libgnu_a-unistd.Po -rm -f ./$(DEPDIR)/libgnu_a-unsetenv.Po -rm -f ./$(DEPDIR)/libgnu_a-wcrtomb.Po -rm -f ./$(DEPDIR)/libgnu_a-wctype-h.Po -rm -f ./$(DEPDIR)/libgnu_a-windows-mutex.Po -rm -f ./$(DEPDIR)/libgnu_a-windows-once.Po -rm -f ./$(DEPDIR)/libgnu_a-windows-recmutex.Po -rm -f ./$(DEPDIR)/libgnu_a-windows-rwlock.Po -rm -f ./$(DEPDIR)/libgnu_a-xmalloc.Po -rm -f glthread/$(DEPDIR)/libgnu_a-lock.Po -rm -f glthread/$(DEPDIR)/libgnu_a-threadlib.Po -rm -f malloc/$(DEPDIR)/libgnu_a-dynarray-skeleton.Po -rm -f malloc/$(DEPDIR)/libgnu_a-dynarray_at_failure.Po -rm -f malloc/$(DEPDIR)/libgnu_a-dynarray_emplace_enlarge.Po -rm -f malloc/$(DEPDIR)/libgnu_a-dynarray_finalize.Po -rm -f malloc/$(DEPDIR)/libgnu_a-dynarray_resize.Po -rm -f malloc/$(DEPDIR)/libgnu_a-dynarray_resize_clear.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic \ maintainer-clean-local mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-local pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) all check install install-am \ install-exec install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--depfiles check check-am clean clean-generic \ clean-noinstLIBRARIES clean-noinstLTLIBRARIES cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-local 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 maintainer-clean-local mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-local pdf \ pdf-am ps ps-am tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # We need the following in order to create <alloca.h> when the system # doesn't have one that works with the given compiler. @GL_GENERATE_ALLOCA_H_TRUE@alloca.h: alloca.in.h $(top_builddir)/config.status @GL_GENERATE_ALLOCA_H_TRUE@ $(gl_V_at)$(SED_HEADER_STDOUT) \ @GL_GENERATE_ALLOCA_H_TRUE@ -e 's|@''HAVE_ALLOCA_H''@|$(HAVE_ALLOCA_H)|g' \ @GL_GENERATE_ALLOCA_H_TRUE@ $(srcdir)/alloca.in.h > $@-t @GL_GENERATE_ALLOCA_H_TRUE@ $(AM_V_at)mv $@-t $@ @GL_GENERATE_ALLOCA_H_FALSE@alloca.h: $(top_builddir)/config.status @GL_GENERATE_ALLOCA_H_FALSE@ rm -f $@ # We need the following in order to create <assert.h> when the system # doesn't have one that works with the given compiler. @GL_GENERATE_ASSERT_H_TRUE@assert.h: assert.in.h verify.h $(top_builddir)/config.status @GL_GENERATE_ASSERT_H_TRUE@ $(gl_V_at){ $(SED_HEADER_STDOUT) \ @GL_GENERATE_ASSERT_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ @GL_GENERATE_ASSERT_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ @GL_GENERATE_ASSERT_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ @GL_GENERATE_ASSERT_H_TRUE@ -e 's|@''NEXT_ASSERT_H''@|$(NEXT_ASSERT_H)|g' \ @GL_GENERATE_ASSERT_H_TRUE@ < $(srcdir)/assert.in.h && \ @GL_GENERATE_ASSERT_H_TRUE@ sed -e '/@assert.h omit start@/,/@assert.h omit end@/d' \ @GL_GENERATE_ASSERT_H_TRUE@ -e 's|_gl_verify|_gl_static_assert|g' \ @GL_GENERATE_ASSERT_H_TRUE@ -e 's|_GL_VERIFY|_GL_STATIC_ASSERT|g' \ @GL_GENERATE_ASSERT_H_TRUE@ -e 's|_GL\(_STATIC_ASSERT_H\)|_GL\1|g' \ @GL_GENERATE_ASSERT_H_TRUE@ < $(srcdir)/verify.h; \ @GL_GENERATE_ASSERT_H_TRUE@ } > $@-t @GL_GENERATE_ASSERT_H_TRUE@ $(AM_V_at)mv $@-t $@ @GL_GENERATE_ASSERT_H_FALSE@assert.h: $(top_builddir)/config.status @GL_GENERATE_ASSERT_H_FALSE@ rm -f $@ # We need the following in order to create <errno.h> when the system # doesn't have one that is POSIX compliant. @GL_GENERATE_ERRNO_H_TRUE@errno.h: errno.in.h $(top_builddir)/config.status @GL_GENERATE_ERRNO_H_TRUE@ $(gl_V_at)$(SED_HEADER_STDOUT) \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''GUARD_PREFIX''@|GL|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''NEXT_ERRNO_H''@|$(NEXT_ERRNO_H)|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''EMULTIHOP_HIDDEN''@|$(EMULTIHOP_HIDDEN)|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''EMULTIHOP_VALUE''@|$(EMULTIHOP_VALUE)|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''ENOLINK_HIDDEN''@|$(ENOLINK_HIDDEN)|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''ENOLINK_VALUE''@|$(ENOLINK_VALUE)|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''EOVERFLOW_HIDDEN''@|$(EOVERFLOW_HIDDEN)|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''EOVERFLOW_VALUE''@|$(EOVERFLOW_VALUE)|g' \ @GL_GENERATE_ERRNO_H_TRUE@ $(srcdir)/errno.in.h > $@-t @GL_GENERATE_ERRNO_H_TRUE@ $(AM_V_at)mv $@-t $@ @GL_GENERATE_ERRNO_H_FALSE@errno.h: $(top_builddir)/config.status @GL_GENERATE_ERRNO_H_FALSE@ rm -f $@ # We need the following in order to override <error.h>. error.h: error.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''HAVE_ERROR_H''@|$(HAVE_ERROR_H)|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''NEXT_ERROR_H''@|$(NEXT_ERROR_H)|g' \ -e 's|@''HAVE_ERROR''@|$(HAVE_ERROR)|g' \ -e 's|@''HAVE_ERROR_AT_LINE''@|$(HAVE_ERROR_AT_LINE)|g' \ -e 's|@''REPLACE_ERROR''@|$(REPLACE_ERROR)|g' \ -e 's|@''REPLACE_ERROR_AT_LINE''@|$(REPLACE_ERROR_AT_LINE)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ $(srcdir)/error.in.h > $@-t $(AM_V_at)mv $@-t $@ # We need the following in order to create <fcntl.h> when the system # doesn't have one that works with the given compiler. fcntl.h: fcntl.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_FCNTL_H''@|$(NEXT_FCNTL_H)|g' \ -e 's/@''GNULIB_CREAT''@/$(GL_GNULIB_CREAT)/g' \ -e 's/@''GNULIB_FCNTL''@/$(GL_GNULIB_FCNTL)/g' \ -e 's/@''GNULIB_NONBLOCKING''@/$(GL_GNULIB_NONBLOCKING)/g' \ -e 's/@''GNULIB_OPEN''@/$(GL_GNULIB_OPEN)/g' \ -e 's/@''GNULIB_OPENAT''@/$(GL_GNULIB_OPENAT)/g' \ -e 's/@''GNULIB_MDA_CREAT''@/$(GL_GNULIB_MDA_CREAT)/g' \ -e 's/@''GNULIB_MDA_OPEN''@/$(GL_GNULIB_MDA_OPEN)/g' \ -e 's|@''HAVE_FCNTL''@|$(HAVE_FCNTL)|g' \ -e 's|@''HAVE_OPENAT''@|$(HAVE_OPENAT)|g' \ -e 's|@''REPLACE_CREAT''@|$(REPLACE_CREAT)|g' \ -e 's|@''REPLACE_FCNTL''@|$(REPLACE_FCNTL)|g' \ -e 's|@''REPLACE_OPEN''@|$(REPLACE_OPEN)|g' \ -e 's|@''REPLACE_OPENAT''@|$(REPLACE_OPENAT)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/fcntl.in.h > $@-t $(AM_V_at)mv $@-t $@ # We need the following in order to create <getopt.h> when the system # doesn't have one that works with the given compiler. @GL_GENERATE_GETOPT_H_TRUE@getopt.h: getopt.in.h $(top_builddir)/config.status $(ARG_NONNULL_H) @GL_GENERATE_GETOPT_H_TRUE@ $(gl_V_at)$(SED_HEADER_STDOUT) \ @GL_GENERATE_GETOPT_H_TRUE@ -e 's|@''GUARD_PREFIX''@|GL|g' \ @GL_GENERATE_GETOPT_H_TRUE@ -e 's|@''HAVE_GETOPT_H''@|$(HAVE_GETOPT_H)|g' \ @GL_GENERATE_GETOPT_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ @GL_GENERATE_GETOPT_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ @GL_GENERATE_GETOPT_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ @GL_GENERATE_GETOPT_H_TRUE@ -e 's|@''NEXT_GETOPT_H''@|$(NEXT_GETOPT_H)|g' \ @GL_GENERATE_GETOPT_H_TRUE@ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ @GL_GENERATE_GETOPT_H_TRUE@ $(srcdir)/getopt.in.h > $@-t @GL_GENERATE_GETOPT_H_TRUE@ $(AM_V_at)mv $@-t $@ @GL_GENERATE_GETOPT_H_FALSE@getopt.h: $(top_builddir)/config.status @GL_GENERATE_GETOPT_H_FALSE@ rm -f $@ @GL_GENERATE_GETOPT_CDEFS_H_TRUE@getopt-cdefs.h: getopt-cdefs.in.h $(top_builddir)/config.status @GL_GENERATE_GETOPT_CDEFS_H_TRUE@ $(AM_V_GEN)$(SED_HEADER_STDOUT) \ @GL_GENERATE_GETOPT_CDEFS_H_TRUE@ -e 's|@''HAVE_SYS_CDEFS_H''@|$(HAVE_SYS_CDEFS_H)|g' \ @GL_GENERATE_GETOPT_CDEFS_H_TRUE@ $(srcdir)/getopt-cdefs.in.h > $@-t @GL_GENERATE_GETOPT_CDEFS_H_TRUE@ $(AM_V_at)mv $@-t $@ @GL_GENERATE_GETOPT_CDEFS_H_FALSE@getopt-cdefs.h: $(top_builddir)/config.status @GL_GENERATE_GETOPT_CDEFS_H_FALSE@ rm -f $@ malloc/dynarray.gl.h: malloc/dynarray.h $(AM_V_GEN)$(MKDIR_P) 'malloc' $(AM_V_at)$(SED_HEADER_STDOUT) \ -e '/libc_hidden_proto/d' \ $(srcdir)/malloc/dynarray.h > $@-t $(AM_V_at)mv $@-t $@ malloc/dynarray-skeleton.gl.h: malloc/dynarray-skeleton.c $(AM_V_GEN)$(MKDIR_P) 'malloc' $(AM_V_at)$(SED_HEADER_STDOUT) \ -e 's|<malloc/dynarray\.h>|<malloc/dynarray.gl.h>|g' \ -e 's|__attribute_maybe_unused__|_GL_ATTRIBUTE_MAYBE_UNUSED|g' \ -e 's|__attribute_nonnull__|_GL_ATTRIBUTE_NONNULL|g' \ -e 's|__attribute_warn_unused_result__|_GL_ATTRIBUTE_NODISCARD|g' \ -e 's|__glibc_likely|_GL_LIKELY|g' \ -e 's|__glibc_unlikely|_GL_UNLIKELY|g' \ $(srcdir)/malloc/dynarray-skeleton.c > $@-t $(AM_V_at)mv $@-t $@ # We need the following in order to create <inttypes.h> when the system # doesn't have one that works with the given compiler. inttypes.h: inttypes.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(ARG_NONNULL_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_INTTYPES_H''@|$(NEXT_INTTYPES_H)|g' \ -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \ -e 's/@''PRIPTR_PREFIX''@/$(PRIPTR_PREFIX)/g' \ -e 's/@''GNULIB_IMAXABS''@/$(GL_GNULIB_IMAXABS)/g' \ -e 's/@''GNULIB_IMAXDIV''@/$(GL_GNULIB_IMAXDIV)/g' \ -e 's/@''GNULIB_STRTOIMAX''@/$(GL_GNULIB_STRTOIMAX)/g' \ -e 's/@''GNULIB_STRTOUMAX''@/$(GL_GNULIB_STRTOUMAX)/g' \ -e 's/@''HAVE_DECL_IMAXABS''@/$(HAVE_DECL_IMAXABS)/g' \ -e 's/@''HAVE_DECL_IMAXDIV''@/$(HAVE_DECL_IMAXDIV)/g' \ -e 's/@''HAVE_DECL_STRTOIMAX''@/$(HAVE_DECL_STRTOIMAX)/g' \ -e 's/@''HAVE_DECL_STRTOUMAX''@/$(HAVE_DECL_STRTOUMAX)/g' \ -e 's/@''HAVE_IMAXDIV_T''@/$(HAVE_IMAXDIV_T)/g' \ -e 's/@''REPLACE_IMAXABS''@/$(REPLACE_IMAXABS)/g' \ -e 's/@''REPLACE_IMAXDIV''@/$(REPLACE_IMAXDIV)/g' \ -e 's/@''REPLACE_STRTOIMAX''@/$(REPLACE_STRTOIMAX)/g' \ -e 's/@''REPLACE_STRTOUMAX''@/$(REPLACE_STRTOUMAX)/g' \ -e 's/@''INT32_MAX_LT_INTMAX_MAX''@/$(INT32_MAX_LT_INTMAX_MAX)/g' \ -e 's/@''INT64_MAX_EQ_LONG_MAX''@/$(INT64_MAX_EQ_LONG_MAX)/g' \ -e 's/@''UINT32_MAX_LT_UINTMAX_MAX''@/$(UINT32_MAX_LT_UINTMAX_MAX)/g' \ -e 's/@''UINT64_MAX_EQ_ULONG_MAX''@/$(UINT64_MAX_EQ_ULONG_MAX)/g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/inttypes.in.h > $@-t $(AM_V_at)mv $@-t $@ # We need the following in order to create an empty placeholder for # <langinfo.h> when the system doesn't have one. langinfo.h: langinfo.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''HAVE_LANGINFO_H''@|$(HAVE_LANGINFO_H)|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_LANGINFO_H''@|$(NEXT_LANGINFO_H)|g' \ -e 's/@''GNULIB_NL_LANGINFO''@/$(GL_GNULIB_NL_LANGINFO)/g' \ -e 's|@''HAVE_LANGINFO_CODESET''@|$(HAVE_LANGINFO_CODESET)|g' \ -e 's|@''HAVE_LANGINFO_T_FMT_AMPM''@|$(HAVE_LANGINFO_T_FMT_AMPM)|g' \ -e 's|@''HAVE_LANGINFO_ALTMON''@|$(HAVE_LANGINFO_ALTMON)|g' \ -e 's|@''HAVE_LANGINFO_ERA''@|$(HAVE_LANGINFO_ERA)|g' \ -e 's|@''HAVE_LANGINFO_YESEXPR''@|$(HAVE_LANGINFO_YESEXPR)|g' \ -e 's|@''HAVE_NL_LANGINFO''@|$(HAVE_NL_LANGINFO)|g' \ -e 's|@''REPLACE_NL_LANGINFO''@|$(REPLACE_NL_LANGINFO)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/langinfo.in.h > $@-t $(AM_V_at)mv $@-t $@ # We need the following in order to create <limits.h> when the system # doesn't have one that is compatible with GNU. @GL_GENERATE_LIMITS_H_TRUE@limits.h: limits.in.h $(top_builddir)/config.status @GL_GENERATE_LIMITS_H_TRUE@ $(gl_V_at)$(SED_HEADER_STDOUT) \ @GL_GENERATE_LIMITS_H_TRUE@ -e 's|@''GUARD_PREFIX''@|GL|g' \ @GL_GENERATE_LIMITS_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ @GL_GENERATE_LIMITS_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ @GL_GENERATE_LIMITS_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ @GL_GENERATE_LIMITS_H_TRUE@ -e 's|@''NEXT_LIMITS_H''@|$(NEXT_LIMITS_H)|g' \ @GL_GENERATE_LIMITS_H_TRUE@ $(srcdir)/limits.in.h > $@-t @GL_GENERATE_LIMITS_H_TRUE@ $(AM_V_at)mv $@-t $@ @GL_GENERATE_LIMITS_H_FALSE@limits.h: $(top_builddir)/config.status @GL_GENERATE_LIMITS_H_FALSE@ rm -f $@ # We need the following in order to create <locale.h> when the system # doesn't have one that provides all definitions. locale.h: locale.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_LOCALE_H''@|$(NEXT_LOCALE_H)|g' \ -e 's/@''GNULIB_LOCALECONV''@/$(GL_GNULIB_LOCALECONV)/g' \ -e 's/@''GNULIB_SETLOCALE''@/$(GL_GNULIB_SETLOCALE)/g' \ -e 's/@''GNULIB_SETLOCALE_NULL''@/$(GL_GNULIB_SETLOCALE_NULL)/g' \ -e 's/@''GNULIB_DUPLOCALE''@/$(GL_GNULIB_DUPLOCALE)/g' \ -e 's/@''GNULIB_LOCALENAME''@/$(GL_GNULIB_LOCALENAME)/g' \ -e 's|@''HAVE_NEWLOCALE''@|$(HAVE_NEWLOCALE)|g' \ -e 's|@''HAVE_DUPLOCALE''@|$(HAVE_DUPLOCALE)|g' \ -e 's|@''HAVE_FREELOCALE''@|$(HAVE_FREELOCALE)|g' \ -e 's|@''HAVE_XLOCALE_H''@|$(HAVE_XLOCALE_H)|g' \ -e 's|@''REPLACE_LOCALECONV''@|$(REPLACE_LOCALECONV)|g' \ -e 's|@''REPLACE_SETLOCALE''@|$(REPLACE_SETLOCALE)|g' \ -e 's|@''REPLACE_NEWLOCALE''@|$(REPLACE_NEWLOCALE)|g' \ -e 's|@''REPLACE_DUPLOCALE''@|$(REPLACE_DUPLOCALE)|g' \ -e 's|@''REPLACE_FREELOCALE''@|$(REPLACE_FREELOCALE)|g' \ -e 's|@''REPLACE_STRUCT_LCONV''@|$(REPLACE_STRUCT_LCONV)|g' \ -e 's|@''LOCALENAME_ENHANCE_LOCALE_FUNCS''@|$(LOCALENAME_ENHANCE_LOCALE_FUNCS)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/locale.in.h > $@-t $(AM_V_at)mv $@-t $@ # We need the following in order to create <stdckdint.h> when the system # doesn't have one that works with the given compiler. @GL_GENERATE_STDCKDINT_H_TRUE@stdckdint.h: stdckdint.in.h $(top_builddir)/config.status @GL_GENERATE_STDCKDINT_H_TRUE@ $(gl_V_at)$(SED_HEADER_STDOUT) \ @GL_GENERATE_STDCKDINT_H_TRUE@ $(srcdir)/stdckdint.in.h > $@-t @GL_GENERATE_STDCKDINT_H_TRUE@ $(AM_V_at)mv $@-t $@ @GL_GENERATE_STDCKDINT_H_FALSE@stdckdint.h: $(top_builddir)/config.status @GL_GENERATE_STDCKDINT_H_FALSE@ rm -f $@ # We need the following in order to create <stddef.h> when the system # doesn't have one that works with the given compiler. @GL_GENERATE_STDDEF_H_TRUE@stddef.h: stddef.in.h $(top_builddir)/config.status @GL_GENERATE_STDDEF_H_TRUE@ $(gl_V_at)$(SED_HEADER_STDOUT) \ @GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''GUARD_PREFIX''@|GL|g' \ @GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ @GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ @GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ @GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''NEXT_STDDEF_H''@|$(NEXT_STDDEF_H)|g' \ @GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''HAVE_MAX_ALIGN_T''@|$(HAVE_MAX_ALIGN_T)|g' \ @GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''HAVE_WCHAR_T''@|$(HAVE_WCHAR_T)|g' \ @GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''REPLACE_NULL''@|$(REPLACE_NULL)|g' \ @GL_GENERATE_STDDEF_H_TRUE@ $(srcdir)/stddef.in.h > $@-t @GL_GENERATE_STDDEF_H_TRUE@ $(AM_V_at)mv $@-t $@ @GL_GENERATE_STDDEF_H_FALSE@stddef.h: $(top_builddir)/config.status @GL_GENERATE_STDDEF_H_FALSE@ rm -f $@ # We need the following in order to create <stdint.h> when the system # doesn't have one that works with the given compiler. @GL_GENERATE_STDINT_H_TRUE@stdint.h: stdint.in.h $(top_builddir)/config.status @GL_GENERATE_STDINT_H_TRUE@ $(gl_V_at)$(SED_HEADER_STDOUT) \ @GL_GENERATE_STDINT_H_TRUE@ -e 's|@''GUARD_PREFIX''@|GL|g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_STDINT_H''@/$(HAVE_STDINT_H)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's|@''NEXT_STDINT_H''@|$(NEXT_STDINT_H)|g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_C99_STDINT_H''@/$(HAVE_C99_STDINT_H)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_SYS_TYPES_H''@/$(HAVE_SYS_TYPES_H)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_SYS_INTTYPES_H''@/$(HAVE_SYS_INTTYPES_H)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_SYS_BITYPES_H''@/$(HAVE_SYS_BITYPES_H)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_WCHAR_H''@/$(HAVE_WCHAR_H)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''BITSIZEOF_PTRDIFF_T''@/$(BITSIZEOF_PTRDIFF_T)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''PTRDIFF_T_SUFFIX''@/$(PTRDIFF_T_SUFFIX)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''BITSIZEOF_SIG_ATOMIC_T''@/$(BITSIZEOF_SIG_ATOMIC_T)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_SIGNED_SIG_ATOMIC_T''@/$(HAVE_SIGNED_SIG_ATOMIC_T)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''SIG_ATOMIC_T_SUFFIX''@/$(SIG_ATOMIC_T_SUFFIX)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''BITSIZEOF_SIZE_T''@/$(BITSIZEOF_SIZE_T)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''SIZE_T_SUFFIX''@/$(SIZE_T_SUFFIX)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''BITSIZEOF_WCHAR_T''@/$(BITSIZEOF_WCHAR_T)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_SIGNED_WCHAR_T''@/$(HAVE_SIGNED_WCHAR_T)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''WCHAR_T_SUFFIX''@/$(WCHAR_T_SUFFIX)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''BITSIZEOF_WINT_T''@/$(BITSIZEOF_WINT_T)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_SIGNED_WINT_T''@/$(HAVE_SIGNED_WINT_T)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''WINT_T_SUFFIX''@/$(WINT_T_SUFFIX)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''GNULIBHEADERS_OVERRIDE_WINT_T''@/$(GNULIBHEADERS_OVERRIDE_WINT_T)/g' \ @GL_GENERATE_STDINT_H_TRUE@ $(srcdir)/stdint.in.h > $@-t @GL_GENERATE_STDINT_H_TRUE@ $(AM_V_at)mv $@-t $@ @GL_GENERATE_STDINT_H_FALSE@stdint.h: $(top_builddir)/config.status @GL_GENERATE_STDINT_H_FALSE@ rm -f $@ # We need the following in order to create <stdio.h> when the system # doesn't have one that works with the given compiler. stdio.h: stdio.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STDIO_H''@|$(NEXT_STDIO_H)|g' \ -e 's/@''GNULIB_DPRINTF''@/$(GL_GNULIB_DPRINTF)/g' \ -e 's/@''GNULIB_FCLOSE''@/$(GL_GNULIB_FCLOSE)/g' \ -e 's/@''GNULIB_FDOPEN''@/$(GL_GNULIB_FDOPEN)/g' \ -e 's/@''GNULIB_FFLUSH''@/$(GL_GNULIB_FFLUSH)/g' \ -e 's/@''GNULIB_FGETC''@/$(GL_GNULIB_FGETC)/g' \ -e 's/@''GNULIB_FGETS''@/$(GL_GNULIB_FGETS)/g' \ -e 's/@''GNULIB_FOPEN''@/$(GL_GNULIB_FOPEN)/g' \ -e 's/@''GNULIB_FOPEN_GNU''@/$(GL_GNULIB_FOPEN_GNU)/g' \ -e 's/@''GNULIB_FPRINTF''@/$(GL_GNULIB_FPRINTF)/g' \ -e 's/@''GNULIB_FPRINTF_POSIX''@/$(GL_GNULIB_FPRINTF_POSIX)/g' \ -e 's/@''GNULIB_FPURGE''@/$(GL_GNULIB_FPURGE)/g' \ -e 's/@''GNULIB_FPUTC''@/$(GL_GNULIB_FPUTC)/g' \ -e 's/@''GNULIB_FPUTS''@/$(GL_GNULIB_FPUTS)/g' \ -e 's/@''GNULIB_FREAD''@/$(GL_GNULIB_FREAD)/g' \ -e 's/@''GNULIB_FREOPEN''@/$(GL_GNULIB_FREOPEN)/g' \ -e 's/@''GNULIB_FSCANF''@/$(GL_GNULIB_FSCANF)/g' \ -e 's/@''GNULIB_FSEEK''@/$(GL_GNULIB_FSEEK)/g' \ -e 's/@''GNULIB_FSEEKO''@/$(GL_GNULIB_FSEEKO)/g' \ -e 's/@''GNULIB_FTELL''@/$(GL_GNULIB_FTELL)/g' \ -e 's/@''GNULIB_FTELLO''@/$(GL_GNULIB_FTELLO)/g' \ -e 's/@''GNULIB_FWRITE''@/$(GL_GNULIB_FWRITE)/g' \ -e 's/@''GNULIB_GETC''@/$(GL_GNULIB_GETC)/g' \ -e 's/@''GNULIB_GETCHAR''@/$(GL_GNULIB_GETCHAR)/g' \ -e 's/@''GNULIB_GETDELIM''@/$(GL_GNULIB_GETDELIM)/g' \ -e 's/@''GNULIB_GETLINE''@/$(GL_GNULIB_GETLINE)/g' \ -e 's/@''GNULIB_OBSTACK_PRINTF''@/$(GL_GNULIB_OBSTACK_PRINTF)/g' \ -e 's/@''GNULIB_OBSTACK_PRINTF_POSIX''@/$(GL_GNULIB_OBSTACK_PRINTF_POSIX)/g' \ -e 's/@''GNULIB_PCLOSE''@/$(GL_GNULIB_PCLOSE)/g' \ -e 's/@''GNULIB_PERROR''@/$(GL_GNULIB_PERROR)/g' \ -e 's/@''GNULIB_POPEN''@/$(GL_GNULIB_POPEN)/g' \ -e 's/@''GNULIB_PRINTF''@/$(GL_GNULIB_PRINTF)/g' \ -e 's/@''GNULIB_PRINTF_POSIX''@/$(GL_GNULIB_PRINTF_POSIX)/g' \ -e 's/@''GNULIB_PUTC''@/$(GL_GNULIB_PUTC)/g' \ -e 's/@''GNULIB_PUTCHAR''@/$(GL_GNULIB_PUTCHAR)/g' \ -e 's/@''GNULIB_PUTS''@/$(GL_GNULIB_PUTS)/g' \ -e 's/@''GNULIB_REMOVE''@/$(GL_GNULIB_REMOVE)/g' \ -e 's/@''GNULIB_RENAME''@/$(GL_GNULIB_RENAME)/g' \ -e 's/@''GNULIB_RENAMEAT''@/$(GL_GNULIB_RENAMEAT)/g' \ -e 's/@''GNULIB_SCANF''@/$(GL_GNULIB_SCANF)/g' \ -e 's/@''GNULIB_SNPRINTF''@/$(GL_GNULIB_SNPRINTF)/g' \ -e 's/@''GNULIB_SPRINTF_POSIX''@/$(GL_GNULIB_SPRINTF_POSIX)/g' \ -e 's/@''GNULIB_STDIO_H_NONBLOCKING''@/$(GL_GNULIB_STDIO_H_NONBLOCKING)/g' \ -e 's/@''GNULIB_STDIO_H_SIGPIPE''@/$(GL_GNULIB_STDIO_H_SIGPIPE)/g' \ -e 's/@''GNULIB_TMPFILE''@/$(GL_GNULIB_TMPFILE)/g' \ -e 's/@''GNULIB_VASPRINTF''@/$(GL_GNULIB_VASPRINTF)/g' \ -e 's/@''GNULIB_VDPRINTF''@/$(GL_GNULIB_VDPRINTF)/g' \ -e 's/@''GNULIB_VFPRINTF''@/$(GL_GNULIB_VFPRINTF)/g' \ -e 's/@''GNULIB_VFPRINTF_POSIX''@/$(GL_GNULIB_VFPRINTF_POSIX)/g' \ -e 's/@''GNULIB_VFSCANF''@/$(GL_GNULIB_VFSCANF)/g' \ -e 's/@''GNULIB_VSCANF''@/$(GL_GNULIB_VSCANF)/g' \ -e 's/@''GNULIB_VPRINTF''@/$(GL_GNULIB_VPRINTF)/g' \ -e 's/@''GNULIB_VPRINTF_POSIX''@/$(GL_GNULIB_VPRINTF_POSIX)/g' \ -e 's/@''GNULIB_VSNPRINTF''@/$(GL_GNULIB_VSNPRINTF)/g' \ -e 's/@''GNULIB_VSPRINTF_POSIX''@/$(GL_GNULIB_VSPRINTF_POSIX)/g' \ -e 's/@''GNULIB_MDA_FCLOSEALL''@/$(GL_GNULIB_MDA_FCLOSEALL)/g' \ -e 's/@''GNULIB_MDA_FDOPEN''@/$(GL_GNULIB_MDA_FDOPEN)/g' \ -e 's/@''GNULIB_MDA_FILENO''@/$(GL_GNULIB_MDA_FILENO)/g' \ -e 's/@''GNULIB_MDA_GETW''@/$(GL_GNULIB_MDA_GETW)/g' \ -e 's/@''GNULIB_MDA_PUTW''@/$(GL_GNULIB_MDA_PUTW)/g' \ -e 's/@''GNULIB_MDA_TEMPNAM''@/$(GL_GNULIB_MDA_TEMPNAM)/g' \ < $(srcdir)/stdio.in.h | \ sed -e 's|@''HAVE_DECL_FCLOSEALL''@|$(HAVE_DECL_FCLOSEALL)|g' \ -e 's|@''HAVE_DECL_FPURGE''@|$(HAVE_DECL_FPURGE)|g' \ -e 's|@''HAVE_DECL_FSEEKO''@|$(HAVE_DECL_FSEEKO)|g' \ -e 's|@''HAVE_DECL_FTELLO''@|$(HAVE_DECL_FTELLO)|g' \ -e 's|@''HAVE_DECL_GETDELIM''@|$(HAVE_DECL_GETDELIM)|g' \ -e 's|@''HAVE_DECL_GETLINE''@|$(HAVE_DECL_GETLINE)|g' \ -e 's|@''HAVE_DECL_GETW''@|$(HAVE_DECL_GETW)|g' \ -e 's|@''HAVE_DECL_OBSTACK_PRINTF''@|$(HAVE_DECL_OBSTACK_PRINTF)|g' \ -e 's|@''HAVE_DECL_PUTW''@|$(HAVE_DECL_PUTW)|g' \ -e 's|@''HAVE_DECL_SNPRINTF''@|$(HAVE_DECL_SNPRINTF)|g' \ -e 's|@''HAVE_DECL_VSNPRINTF''@|$(HAVE_DECL_VSNPRINTF)|g' \ -e 's|@''HAVE_DPRINTF''@|$(HAVE_DPRINTF)|g' \ -e 's|@''HAVE_FSEEKO''@|$(HAVE_FSEEKO)|g' \ -e 's|@''HAVE_FTELLO''@|$(HAVE_FTELLO)|g' \ -e 's|@''HAVE_PCLOSE''@|$(HAVE_PCLOSE)|g' \ -e 's|@''HAVE_POPEN''@|$(HAVE_POPEN)|g' \ -e 's|@''HAVE_RENAMEAT''@|$(HAVE_RENAMEAT)|g' \ -e 's|@''HAVE_VASPRINTF''@|$(HAVE_VASPRINTF)|g' \ -e 's|@''HAVE_VDPRINTF''@|$(HAVE_VDPRINTF)|g' \ -e 's|@''REPLACE_DPRINTF''@|$(REPLACE_DPRINTF)|g' \ -e 's|@''REPLACE_FCLOSE''@|$(REPLACE_FCLOSE)|g' \ -e 's|@''REPLACE_FDOPEN''@|$(REPLACE_FDOPEN)|g' \ -e 's|@''REPLACE_FFLUSH''@|$(REPLACE_FFLUSH)|g' \ -e 's|@''REPLACE_FOPEN''@|$(REPLACE_FOPEN)|g' \ -e 's|@''REPLACE_FOPEN_FOR_FOPEN_GNU''@|$(REPLACE_FOPEN_FOR_FOPEN_GNU)|g' \ -e 's|@''REPLACE_FPRINTF''@|$(REPLACE_FPRINTF)|g' \ -e 's|@''REPLACE_FPURGE''@|$(REPLACE_FPURGE)|g' \ -e 's|@''REPLACE_FREOPEN''@|$(REPLACE_FREOPEN)|g' \ -e 's|@''REPLACE_FSEEK''@|$(REPLACE_FSEEK)|g' \ -e 's|@''REPLACE_FSEEKO''@|$(REPLACE_FSEEKO)|g' \ -e 's|@''REPLACE_FTELL''@|$(REPLACE_FTELL)|g' \ -e 's|@''REPLACE_FTELLO''@|$(REPLACE_FTELLO)|g' \ -e 's|@''REPLACE_GETDELIM''@|$(REPLACE_GETDELIM)|g' \ -e 's|@''REPLACE_GETLINE''@|$(REPLACE_GETLINE)|g' \ -e 's|@''REPLACE_OBSTACK_PRINTF''@|$(REPLACE_OBSTACK_PRINTF)|g' \ -e 's|@''REPLACE_PERROR''@|$(REPLACE_PERROR)|g' \ -e 's|@''REPLACE_POPEN''@|$(REPLACE_POPEN)|g' \ -e 's|@''REPLACE_PRINTF''@|$(REPLACE_PRINTF)|g' \ -e 's|@''REPLACE_REMOVE''@|$(REPLACE_REMOVE)|g' \ -e 's|@''REPLACE_RENAME''@|$(REPLACE_RENAME)|g' \ -e 's|@''REPLACE_RENAMEAT''@|$(REPLACE_RENAMEAT)|g' \ -e 's|@''REPLACE_SNPRINTF''@|$(REPLACE_SNPRINTF)|g' \ -e 's|@''REPLACE_SPRINTF''@|$(REPLACE_SPRINTF)|g' \ -e 's|@''REPLACE_STDIO_READ_FUNCS''@|$(REPLACE_STDIO_READ_FUNCS)|g' \ -e 's|@''REPLACE_STDIO_WRITE_FUNCS''@|$(REPLACE_STDIO_WRITE_FUNCS)|g' \ -e 's|@''REPLACE_TMPFILE''@|$(REPLACE_TMPFILE)|g' \ -e 's|@''REPLACE_VASPRINTF''@|$(REPLACE_VASPRINTF)|g' \ -e 's|@''REPLACE_VDPRINTF''@|$(REPLACE_VDPRINTF)|g' \ -e 's|@''REPLACE_VFPRINTF''@|$(REPLACE_VFPRINTF)|g' \ -e 's|@''REPLACE_VPRINTF''@|$(REPLACE_VPRINTF)|g' \ -e 's|@''REPLACE_VSNPRINTF''@|$(REPLACE_VSNPRINTF)|g' \ -e 's|@''REPLACE_VSPRINTF''@|$(REPLACE_VSPRINTF)|g' \ -e 's|@''ASM_SYMBOL_PREFIX''@|$(ASM_SYMBOL_PREFIX)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ > $@-t $(AM_V_at)mv $@-t $@ # We need the following in order to create <stdlib.h> when the system # doesn't have one that works with the given compiler. stdlib.h: stdlib.in.h $(top_builddir)/config.status $(CXXDEFS_H) \ $(_NORETURN_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STDLIB_H''@|$(NEXT_STDLIB_H)|g' \ -e 's/@''GNULIB__EXIT''@/$(GL_GNULIB__EXIT)/g' \ -e 's/@''GNULIB_ALIGNED_ALLOC''@/$(GL_GNULIB_ALIGNED_ALLOC)/g' \ -e 's/@''GNULIB_ATOLL''@/$(GL_GNULIB_ATOLL)/g' \ -e 's/@''GNULIB_CALLOC_GNU''@/$(GL_GNULIB_CALLOC_GNU)/g' \ -e 's/@''GNULIB_CALLOC_POSIX''@/$(GL_GNULIB_CALLOC_POSIX)/g' \ -e 's/@''GNULIB_CANONICALIZE_FILE_NAME''@/$(GL_GNULIB_CANONICALIZE_FILE_NAME)/g' \ -e 's/@''GNULIB_FREE_POSIX''@/$(GL_GNULIB_FREE_POSIX)/g' \ -e 's/@''GNULIB_GETLOADAVG''@/$(GL_GNULIB_GETLOADAVG)/g' \ -e 's/@''GNULIB_GETPROGNAME''@/$(GL_GNULIB_GETPROGNAME)/g' \ -e 's/@''GNULIB_GETSUBOPT''@/$(GL_GNULIB_GETSUBOPT)/g' \ -e 's/@''GNULIB_GRANTPT''@/$(GL_GNULIB_GRANTPT)/g' \ -e 's/@''GNULIB_MALLOC_GNU''@/$(GL_GNULIB_MALLOC_GNU)/g' \ -e 's/@''GNULIB_MALLOC_POSIX''@/$(GL_GNULIB_MALLOC_POSIX)/g' \ -e 's/@''GNULIB_MBSTOWCS''@/$(GL_GNULIB_MBSTOWCS)/g' \ -e 's/@''GNULIB_MBTOWC''@/$(GL_GNULIB_MBTOWC)/g' \ -e 's/@''GNULIB_MKDTEMP''@/$(GL_GNULIB_MKDTEMP)/g' \ -e 's/@''GNULIB_MKOSTEMP''@/$(GL_GNULIB_MKOSTEMP)/g' \ -e 's/@''GNULIB_MKOSTEMPS''@/$(GL_GNULIB_MKOSTEMPS)/g' \ -e 's/@''GNULIB_MKSTEMP''@/$(GL_GNULIB_MKSTEMP)/g' \ -e 's/@''GNULIB_MKSTEMPS''@/$(GL_GNULIB_MKSTEMPS)/g' \ -e 's/@''GNULIB_POSIX_MEMALIGN''@/$(GL_GNULIB_POSIX_MEMALIGN)/g' \ -e 's/@''GNULIB_POSIX_OPENPT''@/$(GL_GNULIB_POSIX_OPENPT)/g' \ -e 's/@''GNULIB_PTSNAME''@/$(GL_GNULIB_PTSNAME)/g' \ -e 's/@''GNULIB_PTSNAME_R''@/$(GL_GNULIB_PTSNAME_R)/g' \ -e 's/@''GNULIB_PUTENV''@/$(GL_GNULIB_PUTENV)/g' \ -e 's/@''GNULIB_QSORT_R''@/$(GL_GNULIB_QSORT_R)/g' \ -e 's/@''GNULIB_RANDOM''@/$(GL_GNULIB_RANDOM)/g' \ -e 's/@''GNULIB_RANDOM_R''@/$(GL_GNULIB_RANDOM_R)/g' \ -e 's/@''GNULIB_REALLOC_GNU''@/$(GL_GNULIB_REALLOC_GNU)/g' \ -e 's/@''GNULIB_REALLOC_POSIX''@/$(GL_GNULIB_REALLOC_POSIX)/g' \ -e 's/@''GNULIB_REALLOCARRAY''@/$(GL_GNULIB_REALLOCARRAY)/g' \ -e 's/@''GNULIB_REALPATH''@/$(GL_GNULIB_REALPATH)/g' \ -e 's/@''GNULIB_RPMATCH''@/$(GL_GNULIB_RPMATCH)/g' \ -e 's/@''GNULIB_SECURE_GETENV''@/$(GL_GNULIB_SECURE_GETENV)/g' \ -e 's/@''GNULIB_SETENV''@/$(GL_GNULIB_SETENV)/g' \ -e 's/@''GNULIB_STRTOD''@/$(GL_GNULIB_STRTOD)/g' \ -e 's/@''GNULIB_STRTOL''@/$(GL_GNULIB_STRTOL)/g' \ -e 's/@''GNULIB_STRTOLD''@/$(GL_GNULIB_STRTOLD)/g' \ -e 's/@''GNULIB_STRTOLL''@/$(GL_GNULIB_STRTOLL)/g' \ -e 's/@''GNULIB_STRTOUL''@/$(GL_GNULIB_STRTOUL)/g' \ -e 's/@''GNULIB_STRTOULL''@/$(GL_GNULIB_STRTOULL)/g' \ -e 's/@''GNULIB_SYSTEM_POSIX''@/$(GL_GNULIB_SYSTEM_POSIX)/g' \ -e 's/@''GNULIB_UNLOCKPT''@/$(GL_GNULIB_UNLOCKPT)/g' \ -e 's/@''GNULIB_UNSETENV''@/$(GL_GNULIB_UNSETENV)/g' \ -e 's/@''GNULIB_WCTOMB''@/$(GL_GNULIB_WCTOMB)/g' \ -e 's/@''GNULIB_MDA_ECVT''@/$(GL_GNULIB_MDA_ECVT)/g' \ -e 's/@''GNULIB_MDA_FCVT''@/$(GL_GNULIB_MDA_FCVT)/g' \ -e 's/@''GNULIB_MDA_GCVT''@/$(GL_GNULIB_MDA_GCVT)/g' \ -e 's/@''GNULIB_MDA_MKTEMP''@/$(GL_GNULIB_MDA_MKTEMP)/g' \ -e 's/@''GNULIB_MDA_PUTENV''@/$(GL_GNULIB_MDA_PUTENV)/g' \ < $(srcdir)/stdlib.in.h | \ sed -e 's|@''HAVE__EXIT''@|$(HAVE__EXIT)|g' \ -e 's|@''HAVE_ALIGNED_ALLOC''@|$(HAVE_ALIGNED_ALLOC)|g' \ -e 's|@''HAVE_ATOLL''@|$(HAVE_ATOLL)|g' \ -e 's|@''HAVE_CANONICALIZE_FILE_NAME''@|$(HAVE_CANONICALIZE_FILE_NAME)|g' \ -e 's|@''HAVE_DECL_ECVT''@|$(HAVE_DECL_ECVT)|g' \ -e 's|@''HAVE_DECL_FCVT''@|$(HAVE_DECL_FCVT)|g' \ -e 's|@''HAVE_DECL_GCVT''@|$(HAVE_DECL_GCVT)|g' \ -e 's|@''HAVE_DECL_GETLOADAVG''@|$(HAVE_DECL_GETLOADAVG)|g' \ -e 's|@''HAVE_DECL_PROGRAM_INVOCATION_NAME''@|$(HAVE_DECL_PROGRAM_INVOCATION_NAME)|g' \ -e 's|@''HAVE_GETPROGNAME''@|$(HAVE_GETPROGNAME)|g' \ -e 's|@''HAVE_GETSUBOPT''@|$(HAVE_GETSUBOPT)|g' \ -e 's|@''HAVE_GRANTPT''@|$(HAVE_GRANTPT)|g' \ -e 's|@''HAVE_INITSTATE''@|$(HAVE_INITSTATE)|g' \ -e 's|@''HAVE_DECL_INITSTATE''@|$(HAVE_DECL_INITSTATE)|g' \ -e 's|@''HAVE_MBTOWC''@|$(HAVE_MBTOWC)|g' \ -e 's|@''HAVE_MKDTEMP''@|$(HAVE_MKDTEMP)|g' \ -e 's|@''HAVE_MKOSTEMP''@|$(HAVE_MKOSTEMP)|g' \ -e 's|@''HAVE_MKOSTEMPS''@|$(HAVE_MKOSTEMPS)|g' \ -e 's|@''HAVE_MKSTEMP''@|$(HAVE_MKSTEMP)|g' \ -e 's|@''HAVE_MKSTEMPS''@|$(HAVE_MKSTEMPS)|g' \ -e 's|@''HAVE_POSIX_MEMALIGN''@|$(HAVE_POSIX_MEMALIGN)|g' \ -e 's|@''HAVE_POSIX_OPENPT''@|$(HAVE_POSIX_OPENPT)|g' \ -e 's|@''HAVE_PTSNAME''@|$(HAVE_PTSNAME)|g' \ -e 's|@''HAVE_PTSNAME_R''@|$(HAVE_PTSNAME_R)|g' \ -e 's|@''HAVE_QSORT_R''@|$(HAVE_QSORT_R)|g' \ -e 's|@''HAVE_RANDOM''@|$(HAVE_RANDOM)|g' \ -e 's|@''HAVE_RANDOM_H''@|$(HAVE_RANDOM_H)|g' \ -e 's|@''HAVE_RANDOM_R''@|$(HAVE_RANDOM_R)|g' \ -e 's|@''HAVE_REALLOCARRAY''@|$(HAVE_REALLOCARRAY)|g' \ -e 's|@''HAVE_REALPATH''@|$(HAVE_REALPATH)|g' \ -e 's|@''HAVE_RPMATCH''@|$(HAVE_RPMATCH)|g' \ -e 's|@''HAVE_SECURE_GETENV''@|$(HAVE_SECURE_GETENV)|g' \ -e 's|@''HAVE_DECL_SETENV''@|$(HAVE_DECL_SETENV)|g' \ -e 's|@''HAVE_SETSTATE''@|$(HAVE_SETSTATE)|g' \ -e 's|@''HAVE_DECL_SETSTATE''@|$(HAVE_DECL_SETSTATE)|g' \ -e 's|@''HAVE_STRTOD''@|$(HAVE_STRTOD)|g' \ -e 's|@''HAVE_STRTOL''@|$(HAVE_STRTOL)|g' \ -e 's|@''HAVE_STRTOLD''@|$(HAVE_STRTOLD)|g' \ -e 's|@''HAVE_STRTOLL''@|$(HAVE_STRTOLL)|g' \ -e 's|@''HAVE_STRTOUL''@|$(HAVE_STRTOUL)|g' \ -e 's|@''HAVE_STRTOULL''@|$(HAVE_STRTOULL)|g' \ -e 's|@''HAVE_STRUCT_RANDOM_DATA''@|$(HAVE_STRUCT_RANDOM_DATA)|g' \ -e 's|@''HAVE_SYS_LOADAVG_H''@|$(HAVE_SYS_LOADAVG_H)|g' \ -e 's|@''HAVE_UNLOCKPT''@|$(HAVE_UNLOCKPT)|g' \ -e 's|@''HAVE_DECL_UNSETENV''@|$(HAVE_DECL_UNSETENV)|g' \ -e 's|@''REPLACE__EXIT''@|$(REPLACE__EXIT)|g' \ -e 's|@''REPLACE_ALIGNED_ALLOC''@|$(REPLACE_ALIGNED_ALLOC)|g' \ -e 's|@''REPLACE_CALLOC_FOR_CALLOC_GNU''@|$(REPLACE_CALLOC_FOR_CALLOC_GNU)|g' \ -e 's|@''REPLACE_CALLOC_FOR_CALLOC_POSIX''@|$(REPLACE_CALLOC_FOR_CALLOC_POSIX)|g' \ -e 's|@''REPLACE_CANONICALIZE_FILE_NAME''@|$(REPLACE_CANONICALIZE_FILE_NAME)|g' \ -e 's|@''REPLACE_FREE''@|$(REPLACE_FREE)|g' \ -e 's|@''REPLACE_GETLOADAVG''@|$(REPLACE_GETLOADAVG)|g' \ -e 's|@''REPLACE_GETPROGNAME''@|$(REPLACE_GETPROGNAME)|g' \ -e 's|@''REPLACE_GETSUBOPT''@|$(REPLACE_GETSUBOPT)|g' \ -e 's|@''REPLACE_INITSTATE''@|$(REPLACE_INITSTATE)|g' \ -e 's|@''REPLACE_MALLOC_FOR_MALLOC_GNU''@|$(REPLACE_MALLOC_FOR_MALLOC_GNU)|g' \ -e 's|@''REPLACE_MALLOC_FOR_MALLOC_POSIX''@|$(REPLACE_MALLOC_FOR_MALLOC_POSIX)|g' \ -e 's|@''REPLACE_MB_CUR_MAX''@|$(REPLACE_MB_CUR_MAX)|g' \ -e 's|@''REPLACE_MBSTOWCS''@|$(REPLACE_MBSTOWCS)|g' \ -e 's|@''REPLACE_MBTOWC''@|$(REPLACE_MBTOWC)|g' \ -e 's|@''REPLACE_MKOSTEMP''@|$(REPLACE_MKOSTEMP)|g' \ -e 's|@''REPLACE_MKOSTEMPS''@|$(REPLACE_MKOSTEMPS)|g' \ -e 's|@''REPLACE_MKSTEMP''@|$(REPLACE_MKSTEMP)|g' \ -e 's|@''REPLACE_POSIX_MEMALIGN''@|$(REPLACE_POSIX_MEMALIGN)|g' \ -e 's|@''REPLACE_POSIX_OPENPT''@|$(REPLACE_POSIX_OPENPT)|g' \ -e 's|@''REPLACE_PTSNAME''@|$(REPLACE_PTSNAME)|g' \ -e 's|@''REPLACE_PTSNAME_R''@|$(REPLACE_PTSNAME_R)|g' \ -e 's|@''REPLACE_PUTENV''@|$(REPLACE_PUTENV)|g' \ -e 's|@''REPLACE_QSORT_R''@|$(REPLACE_QSORT_R)|g' \ -e 's|@''REPLACE_RANDOM''@|$(REPLACE_RANDOM)|g' \ -e 's|@''REPLACE_RANDOM_R''@|$(REPLACE_RANDOM_R)|g' \ -e 's|@''REPLACE_REALLOC_FOR_REALLOC_GNU''@|$(REPLACE_REALLOC_FOR_REALLOC_GNU)|g' \ -e 's|@''REPLACE_REALLOC_FOR_REALLOC_POSIX''@|$(REPLACE_REALLOC_FOR_REALLOC_POSIX)|g' \ -e 's|@''REPLACE_REALLOCARRAY''@|$(REPLACE_REALLOCARRAY)|g' \ -e 's|@''REPLACE_REALPATH''@|$(REPLACE_REALPATH)|g' \ -e 's|@''REPLACE_SETENV''@|$(REPLACE_SETENV)|g' \ -e 's|@''REPLACE_SETSTATE''@|$(REPLACE_SETSTATE)|g' \ -e 's|@''REPLACE_STRTOD''@|$(REPLACE_STRTOD)|g' \ -e 's|@''REPLACE_STRTOL''@|$(REPLACE_STRTOL)|g' \ -e 's|@''REPLACE_STRTOLD''@|$(REPLACE_STRTOLD)|g' \ -e 's|@''REPLACE_STRTOLL''@|$(REPLACE_STRTOLL)|g' \ -e 's|@''REPLACE_STRTOUL''@|$(REPLACE_STRTOUL)|g' \ -e 's|@''REPLACE_STRTOULL''@|$(REPLACE_STRTOULL)|g' \ -e 's|@''REPLACE_UNSETENV''@|$(REPLACE_UNSETENV)|g' \ -e 's|@''REPLACE_WCTOMB''@|$(REPLACE_WCTOMB)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _Noreturn/r $(_NORETURN_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ > $@-t $(AM_V_at)mv $@-t $@ # We need the following in order to create <string.h> when the system # doesn't have one that works with the given compiler. string.h: string.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STRING_H''@|$(NEXT_STRING_H)|g' \ -e 's/@''GNULIB_EXPLICIT_BZERO''@/$(GL_GNULIB_EXPLICIT_BZERO)/g' \ -e 's/@''GNULIB_FFSL''@/$(GL_GNULIB_FFSL)/g' \ -e 's/@''GNULIB_FFSLL''@/$(GL_GNULIB_FFSLL)/g' \ -e 's/@''GNULIB_MBSLEN''@/$(GL_GNULIB_MBSLEN)/g' \ -e 's/@''GNULIB_MBSNLEN''@/$(GL_GNULIB_MBSNLEN)/g' \ -e 's/@''GNULIB_MBSCHR''@/$(GL_GNULIB_MBSCHR)/g' \ -e 's/@''GNULIB_MBSRCHR''@/$(GL_GNULIB_MBSRCHR)/g' \ -e 's/@''GNULIB_MBSSTR''@/$(GL_GNULIB_MBSSTR)/g' \ -e 's/@''GNULIB_MBSCASECMP''@/$(GL_GNULIB_MBSCASECMP)/g' \ -e 's/@''GNULIB_MBSNCASECMP''@/$(GL_GNULIB_MBSNCASECMP)/g' \ -e 's/@''GNULIB_MBSPCASECMP''@/$(GL_GNULIB_MBSPCASECMP)/g' \ -e 's/@''GNULIB_MBSCASESTR''@/$(GL_GNULIB_MBSCASESTR)/g' \ -e 's/@''GNULIB_MBSCSPN''@/$(GL_GNULIB_MBSCSPN)/g' \ -e 's/@''GNULIB_MBSPBRK''@/$(GL_GNULIB_MBSPBRK)/g' \ -e 's/@''GNULIB_MBSSPN''@/$(GL_GNULIB_MBSSPN)/g' \ -e 's/@''GNULIB_MBSSEP''@/$(GL_GNULIB_MBSSEP)/g' \ -e 's/@''GNULIB_MBSTOK_R''@/$(GL_GNULIB_MBSTOK_R)/g' \ -e 's/@''GNULIB_MEMCHR''@/$(GL_GNULIB_MEMCHR)/g' \ -e 's/@''GNULIB_MEMMEM''@/$(GL_GNULIB_MEMMEM)/g' \ -e 's/@''GNULIB_MEMPCPY''@/$(GL_GNULIB_MEMPCPY)/g' \ -e 's/@''GNULIB_MEMRCHR''@/$(GL_GNULIB_MEMRCHR)/g' \ -e 's/@''GNULIB_MEMSET_EXPLICIT''@/$(GL_GNULIB_MEMSET_EXPLICIT)/g' \ -e 's/@''GNULIB_RAWMEMCHR''@/$(GL_GNULIB_RAWMEMCHR)/g' \ -e 's/@''GNULIB_STPCPY''@/$(GL_GNULIB_STPCPY)/g' \ -e 's/@''GNULIB_STPNCPY''@/$(GL_GNULIB_STPNCPY)/g' \ -e 's/@''GNULIB_STRCHRNUL''@/$(GL_GNULIB_STRCHRNUL)/g' \ -e 's/@''GNULIB_STRDUP''@/$(GL_GNULIB_STRDUP)/g' \ -e 's/@''GNULIB_STRNCAT''@/$(GL_GNULIB_STRNCAT)/g' \ -e 's/@''GNULIB_STRNDUP''@/$(GL_GNULIB_STRNDUP)/g' \ -e 's/@''GNULIB_STRNLEN''@/$(GL_GNULIB_STRNLEN)/g' \ -e 's/@''GNULIB_STRPBRK''@/$(GL_GNULIB_STRPBRK)/g' \ -e 's/@''GNULIB_STRSEP''@/$(GL_GNULIB_STRSEP)/g' \ -e 's/@''GNULIB_STRSTR''@/$(GL_GNULIB_STRSTR)/g' \ -e 's/@''GNULIB_STRCASESTR''@/$(GL_GNULIB_STRCASESTR)/g' \ -e 's/@''GNULIB_STRTOK_R''@/$(GL_GNULIB_STRTOK_R)/g' \ -e 's/@''GNULIB_STRERROR''@/$(GL_GNULIB_STRERROR)/g' \ -e 's/@''GNULIB_STRERROR_R''@/$(GL_GNULIB_STRERROR_R)/g' \ -e 's/@''GNULIB_STRERRORNAME_NP''@/$(GL_GNULIB_STRERRORNAME_NP)/g' \ -e 's/@''GNULIB_SIGABBREV_NP''@/$(GL_GNULIB_SIGABBREV_NP)/g' \ -e 's/@''GNULIB_SIGDESCR_NP''@/$(GL_GNULIB_SIGDESCR_NP)/g' \ -e 's/@''GNULIB_STRSIGNAL''@/$(GL_GNULIB_STRSIGNAL)/g' \ -e 's/@''GNULIB_STRVERSCMP''@/$(GL_GNULIB_STRVERSCMP)/g' \ -e 's/@''GNULIB_MDA_MEMCCPY''@/$(GL_GNULIB_MDA_MEMCCPY)/g' \ -e 's/@''GNULIB_MDA_STRDUP''@/$(GL_GNULIB_MDA_STRDUP)/g' \ -e 's/@''GNULIB_FREE_POSIX''@/$(GL_GNULIB_FREE_POSIX)/g' \ < $(srcdir)/string.in.h | \ sed -e 's|@''HAVE_EXPLICIT_BZERO''@|$(HAVE_EXPLICIT_BZERO)|g' \ -e 's|@''HAVE_FFSL''@|$(HAVE_FFSL)|g' \ -e 's|@''HAVE_FFSLL''@|$(HAVE_FFSLL)|g' \ -e 's|@''HAVE_MBSLEN''@|$(HAVE_MBSLEN)|g' \ -e 's|@''HAVE_DECL_MEMMEM''@|$(HAVE_DECL_MEMMEM)|g' \ -e 's|@''HAVE_MEMPCPY''@|$(HAVE_MEMPCPY)|g' \ -e 's|@''HAVE_DECL_MEMRCHR''@|$(HAVE_DECL_MEMRCHR)|g' \ -e 's|@''HAVE_MEMSET_EXPLICIT''@|$(HAVE_MEMSET_EXPLICIT)|g' \ -e 's|@''HAVE_RAWMEMCHR''@|$(HAVE_RAWMEMCHR)|g' \ -e 's|@''HAVE_STPCPY''@|$(HAVE_STPCPY)|g' \ -e 's|@''HAVE_STPNCPY''@|$(HAVE_STPNCPY)|g' \ -e 's|@''HAVE_STRCHRNUL''@|$(HAVE_STRCHRNUL)|g' \ -e 's|@''HAVE_DECL_STRDUP''@|$(HAVE_DECL_STRDUP)|g' \ -e 's|@''HAVE_DECL_STRNDUP''@|$(HAVE_DECL_STRNDUP)|g' \ -e 's|@''HAVE_DECL_STRNLEN''@|$(HAVE_DECL_STRNLEN)|g' \ -e 's|@''HAVE_STRPBRK''@|$(HAVE_STRPBRK)|g' \ -e 's|@''HAVE_STRSEP''@|$(HAVE_STRSEP)|g' \ -e 's|@''HAVE_STRCASESTR''@|$(HAVE_STRCASESTR)|g' \ -e 's|@''HAVE_DECL_STRTOK_R''@|$(HAVE_DECL_STRTOK_R)|g' \ -e 's|@''HAVE_DECL_STRERROR_R''@|$(HAVE_DECL_STRERROR_R)|g' \ -e 's|@''HAVE_STRERRORNAME_NP''@|$(HAVE_STRERRORNAME_NP)|g' \ -e 's|@''HAVE_SIGABBREV_NP''@|$(HAVE_SIGABBREV_NP)|g' \ -e 's|@''HAVE_SIGDESCR_NP''@|$(HAVE_SIGDESCR_NP)|g' \ -e 's|@''HAVE_DECL_STRSIGNAL''@|$(HAVE_DECL_STRSIGNAL)|g' \ -e 's|@''HAVE_STRVERSCMP''@|$(HAVE_STRVERSCMP)|g' \ -e 's|@''REPLACE_FFSLL''@|$(REPLACE_FFSLL)|g' \ -e 's|@''REPLACE_MEMCHR''@|$(REPLACE_MEMCHR)|g' \ -e 's|@''REPLACE_MEMMEM''@|$(REPLACE_MEMMEM)|g' \ -e 's|@''REPLACE_MEMPCPY''@|$(REPLACE_MEMPCPY)|g' \ -e 's|@''REPLACE_FREE''@|$(REPLACE_FREE)|g' \ -e 's|@''REPLACE_STPCPY''@|$(REPLACE_STPCPY)|g' \ -e 's|@''REPLACE_STPNCPY''@|$(REPLACE_STPNCPY)|g' \ -e 's|@''REPLACE_STRCHRNUL''@|$(REPLACE_STRCHRNUL)|g' \ -e 's|@''REPLACE_STRDUP''@|$(REPLACE_STRDUP)|g' \ -e 's|@''REPLACE_STRNCAT''@|$(REPLACE_STRNCAT)|g' \ -e 's|@''REPLACE_STRNDUP''@|$(REPLACE_STRNDUP)|g' \ -e 's|@''REPLACE_STRNLEN''@|$(REPLACE_STRNLEN)|g' \ -e 's|@''REPLACE_STRSTR''@|$(REPLACE_STRSTR)|g' \ -e 's|@''REPLACE_STRCASESTR''@|$(REPLACE_STRCASESTR)|g' \ -e 's|@''REPLACE_STRTOK_R''@|$(REPLACE_STRTOK_R)|g' \ -e 's|@''REPLACE_STRERROR''@|$(REPLACE_STRERROR)|g' \ -e 's|@''REPLACE_STRERROR_R''@|$(REPLACE_STRERROR_R)|g' \ -e 's|@''REPLACE_STRERRORNAME_NP''@|$(REPLACE_STRERRORNAME_NP)|g' \ -e 's|@''REPLACE_STRSIGNAL''@|$(REPLACE_STRSIGNAL)|g' \ -e 's|@''UNDEFINE_STRTOK_R''@|$(UNDEFINE_STRTOK_R)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ > $@-t $(AM_V_at)mv $@-t $@ # We need the following in order to create <sys/stat.h> when the system # has one that is incomplete. sys/stat.h: sys_stat.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)$(MKDIR_P) 'sys' $(AM_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SYS_STAT_H''@|$(NEXT_SYS_STAT_H)|g' \ -e 's|@''WINDOWS_64_BIT_ST_SIZE''@|$(WINDOWS_64_BIT_ST_SIZE)|g' \ -e 's|@''WINDOWS_STAT_TIMESPEC''@|$(WINDOWS_STAT_TIMESPEC)|g' \ -e 's/@''GNULIB_CHMOD''@/$(GL_GNULIB_CHMOD)/g' \ -e 's/@''GNULIB_FCHMODAT''@/$(GL_GNULIB_FCHMODAT)/g' \ -e 's/@''GNULIB_FSTAT''@/$(GL_GNULIB_FSTAT)/g' \ -e 's/@''GNULIB_FSTATAT''@/$(GL_GNULIB_FSTATAT)/g' \ -e 's/@''GNULIB_FUTIMENS''@/$(GL_GNULIB_FUTIMENS)/g' \ -e 's/@''GNULIB_GETUMASK''@/$(GL_GNULIB_GETUMASK)/g' \ -e 's/@''GNULIB_LCHMOD''@/$(GL_GNULIB_LCHMOD)/g' \ -e 's/@''GNULIB_LSTAT''@/$(GL_GNULIB_LSTAT)/g' \ -e 's/@''GNULIB_MKDIR''@/$(GL_GNULIB_MKDIR)/g' \ -e 's/@''GNULIB_MKDIRAT''@/$(GL_GNULIB_MKDIRAT)/g' \ -e 's/@''GNULIB_MKFIFO''@/$(GL_GNULIB_MKFIFO)/g' \ -e 's/@''GNULIB_MKFIFOAT''@/$(GL_GNULIB_MKFIFOAT)/g' \ -e 's/@''GNULIB_MKNOD''@/$(GL_GNULIB_MKNOD)/g' \ -e 's/@''GNULIB_MKNODAT''@/$(GL_GNULIB_MKNODAT)/g' \ -e 's/@''GNULIB_STAT''@/$(GL_GNULIB_STAT)/g' \ -e 's/@''GNULIB_UTIMENSAT''@/$(GL_GNULIB_UTIMENSAT)/g' \ -e 's/@''GNULIB_OVERRIDES_STRUCT_STAT''@/$(GL_GNULIB_OVERRIDES_STRUCT_STAT)/g' \ -e 's/@''GNULIB_MDA_CHMOD''@/$(GL_GNULIB_MDA_CHMOD)/g' \ -e 's/@''GNULIB_MDA_MKDIR''@/$(GL_GNULIB_MDA_MKDIR)/g' \ -e 's/@''GNULIB_MDA_UMASK''@/$(GL_GNULIB_MDA_UMASK)/g' \ -e 's|@''HAVE_FCHMODAT''@|$(HAVE_FCHMODAT)|g' \ -e 's|@''HAVE_FSTATAT''@|$(HAVE_FSTATAT)|g' \ -e 's|@''HAVE_FUTIMENS''@|$(HAVE_FUTIMENS)|g' \ -e 's|@''HAVE_GETUMASK''@|$(HAVE_GETUMASK)|g' \ -e 's|@''HAVE_LCHMOD''@|$(HAVE_LCHMOD)|g' \ -e 's|@''HAVE_LSTAT''@|$(HAVE_LSTAT)|g' \ -e 's|@''HAVE_MKDIRAT''@|$(HAVE_MKDIRAT)|g' \ -e 's|@''HAVE_MKFIFO''@|$(HAVE_MKFIFO)|g' \ -e 's|@''HAVE_MKFIFOAT''@|$(HAVE_MKFIFOAT)|g' \ -e 's|@''HAVE_MKNOD''@|$(HAVE_MKNOD)|g' \ -e 's|@''HAVE_MKNODAT''@|$(HAVE_MKNODAT)|g' \ -e 's|@''HAVE_UTIMENSAT''@|$(HAVE_UTIMENSAT)|g' \ -e 's|@''REPLACE_CHMOD''@|$(REPLACE_CHMOD)|g' \ -e 's|@''REPLACE_FCHMODAT''@|$(REPLACE_FCHMODAT)|g' \ -e 's|@''REPLACE_FSTAT''@|$(REPLACE_FSTAT)|g' \ -e 's|@''REPLACE_FSTATAT''@|$(REPLACE_FSTATAT)|g' \ -e 's|@''REPLACE_FUTIMENS''@|$(REPLACE_FUTIMENS)|g' \ -e 's|@''REPLACE_LSTAT''@|$(REPLACE_LSTAT)|g' \ -e 's|@''REPLACE_MKDIR''@|$(REPLACE_MKDIR)|g' \ -e 's|@''REPLACE_MKFIFO''@|$(REPLACE_MKFIFO)|g' \ -e 's|@''REPLACE_MKFIFOAT''@|$(REPLACE_MKFIFOAT)|g' \ -e 's|@''REPLACE_MKNOD''@|$(REPLACE_MKNOD)|g' \ -e 's|@''REPLACE_MKNODAT''@|$(REPLACE_MKNODAT)|g' \ -e 's|@''REPLACE_STAT''@|$(REPLACE_STAT)|g' \ -e 's|@''REPLACE_UTIMENSAT''@|$(REPLACE_UTIMENSAT)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/sys_stat.in.h > $@-t $(AM_V_at)mv $@-t $@ # We need the following in order to create <sys/types.h> when the system # doesn't have one that works with the given compiler. sys/types.h: sys_types.in.h $(top_builddir)/config.status $(AM_V_GEN)$(MKDIR_P) 'sys' $(AM_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SYS_TYPES_H''@|$(NEXT_SYS_TYPES_H)|g' \ -e 's|@''WINDOWS_64_BIT_OFF_T''@|$(WINDOWS_64_BIT_OFF_T)|g' \ -e 's|@''WINDOWS_STAT_INODES''@|$(WINDOWS_STAT_INODES)|g' \ $(srcdir)/sys_types.in.h > $@-t $(AM_V_at)mv $@-t $@ # We need the following in order to create <time.h> when the system # doesn't have one that works with the given compiler. time.h: time.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_TIME_H''@|$(NEXT_TIME_H)|g' \ -e 's/@''GNULIB_CTIME''@/$(GL_GNULIB_CTIME)/g' \ -e 's/@''GNULIB_LOCALTIME''@/$(GL_GNULIB_LOCALTIME)/g' \ -e 's/@''GNULIB_MKTIME''@/$(GL_GNULIB_MKTIME)/g' \ -e 's/@''GNULIB_NANOSLEEP''@/$(GL_GNULIB_NANOSLEEP)/g' \ -e 's/@''GNULIB_STRFTIME''@/$(GL_GNULIB_STRFTIME)/g' \ -e 's/@''GNULIB_STRPTIME''@/$(GL_GNULIB_STRPTIME)/g' \ -e 's/@''GNULIB_TIME''@/$(GL_GNULIB_TIME)/g' \ -e 's/@''GNULIB_TIMEGM''@/$(GL_GNULIB_TIMEGM)/g' \ -e 's/@''GNULIB_TIMESPEC_GET''@/$(GL_GNULIB_TIMESPEC_GET)/g' \ -e 's/@''GNULIB_TIMESPEC_GETRES''@/$(GL_GNULIB_TIMESPEC_GETRES)/g' \ -e 's/@''GNULIB_TIME_R''@/$(GL_GNULIB_TIME_R)/g' \ -e 's/@''GNULIB_TIME_RZ''@/$(GL_GNULIB_TIME_RZ)/g' \ -e 's/@''GNULIB_TZSET''@/$(GL_GNULIB_TZSET)/g' \ -e 's/@''GNULIB_MDA_TZSET''@/$(GL_GNULIB_MDA_TZSET)/g' \ -e 's|@''HAVE_DECL_LOCALTIME_R''@|$(HAVE_DECL_LOCALTIME_R)|g' \ -e 's|@''HAVE_NANOSLEEP''@|$(HAVE_NANOSLEEP)|g' \ -e 's|@''HAVE_STRPTIME''@|$(HAVE_STRPTIME)|g' \ -e 's|@''HAVE_TIMEGM''@|$(HAVE_TIMEGM)|g' \ -e 's|@''HAVE_TIMESPEC_GET''@|$(HAVE_TIMESPEC_GET)|g' \ -e 's|@''HAVE_TIMESPEC_GETRES''@|$(HAVE_TIMESPEC_GETRES)|g' \ -e 's|@''HAVE_TIMEZONE_T''@|$(HAVE_TIMEZONE_T)|g' \ -e 's|@''REPLACE_CTIME''@|$(REPLACE_CTIME)|g' \ -e 's|@''REPLACE_GMTIME''@|$(REPLACE_GMTIME)|g' \ -e 's|@''REPLACE_LOCALTIME''@|$(REPLACE_LOCALTIME)|g' \ -e 's|@''REPLACE_LOCALTIME_R''@|$(REPLACE_LOCALTIME_R)|g' \ -e 's|@''REPLACE_MKTIME''@|$(REPLACE_MKTIME)|g' \ -e 's|@''REPLACE_NANOSLEEP''@|$(REPLACE_NANOSLEEP)|g' \ -e 's|@''REPLACE_STRFTIME''@|$(REPLACE_STRFTIME)|g' \ -e 's|@''REPLACE_TIME''@|$(REPLACE_TIME)|g' \ -e 's|@''REPLACE_TIMEGM''@|$(REPLACE_TIMEGM)|g' \ -e 's|@''REPLACE_TIMESPEC_GET''@|$(REPLACE_TIMESPEC_GET)|g' \ -e 's|@''REPLACE_TZSET''@|$(REPLACE_TZSET)|g' \ -e 's|@''PTHREAD_H_DEFINES_STRUCT_TIMESPEC''@|$(PTHREAD_H_DEFINES_STRUCT_TIMESPEC)|g' \ -e 's|@''SYS_TIME_H_DEFINES_STRUCT_TIMESPEC''@|$(SYS_TIME_H_DEFINES_STRUCT_TIMESPEC)|g' \ -e 's|@''TIME_H_DEFINES_STRUCT_TIMESPEC''@|$(TIME_H_DEFINES_STRUCT_TIMESPEC)|g' \ -e 's|@''UNISTD_H_DEFINES_STRUCT_TIMESPEC''@|$(UNISTD_H_DEFINES_STRUCT_TIMESPEC)|g' \ -e 's|@''TIME_H_DEFINES_TIME_UTC''@|$(TIME_H_DEFINES_TIME_UTC)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/time.in.h > $@-t $(AM_V_at)mv $@-t $@ # We need the following in order to create an empty placeholder for # <unistd.h> when the system doesn't have one. unistd.h: unistd.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''HAVE_UNISTD_H''@|$(HAVE_UNISTD_H)|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_UNISTD_H''@|$(NEXT_UNISTD_H)|g' \ -e 's|@''WINDOWS_64_BIT_OFF_T''@|$(WINDOWS_64_BIT_OFF_T)|g' \ -e 's/@''GNULIB_ACCESS''@/$(GL_GNULIB_ACCESS)/g' \ -e 's/@''GNULIB_CHDIR''@/$(GL_GNULIB_CHDIR)/g' \ -e 's/@''GNULIB_CHOWN''@/$(GL_GNULIB_CHOWN)/g' \ -e 's/@''GNULIB_CLOSE''@/$(GL_GNULIB_CLOSE)/g' \ -e 's/@''GNULIB_COPY_FILE_RANGE''@/$(GL_GNULIB_COPY_FILE_RANGE)/g' \ -e 's/@''GNULIB_DUP''@/$(GL_GNULIB_DUP)/g' \ -e 's/@''GNULIB_DUP2''@/$(GL_GNULIB_DUP2)/g' \ -e 's/@''GNULIB_DUP3''@/$(GL_GNULIB_DUP3)/g' \ -e 's/@''GNULIB_ENVIRON''@/$(GL_GNULIB_ENVIRON)/g' \ -e 's/@''GNULIB_EUIDACCESS''@/$(GL_GNULIB_EUIDACCESS)/g' \ -e 's/@''GNULIB_EXECL''@/$(GL_GNULIB_EXECL)/g' \ -e 's/@''GNULIB_EXECLE''@/$(GL_GNULIB_EXECLE)/g' \ -e 's/@''GNULIB_EXECLP''@/$(GL_GNULIB_EXECLP)/g' \ -e 's/@''GNULIB_EXECV''@/$(GL_GNULIB_EXECV)/g' \ -e 's/@''GNULIB_EXECVE''@/$(GL_GNULIB_EXECVE)/g' \ -e 's/@''GNULIB_EXECVP''@/$(GL_GNULIB_EXECVP)/g' \ -e 's/@''GNULIB_EXECVPE''@/$(GL_GNULIB_EXECVPE)/g' \ -e 's/@''GNULIB_FACCESSAT''@/$(GL_GNULIB_FACCESSAT)/g' \ -e 's/@''GNULIB_FCHDIR''@/$(GL_GNULIB_FCHDIR)/g' \ -e 's/@''GNULIB_FCHOWNAT''@/$(GL_GNULIB_FCHOWNAT)/g' \ -e 's/@''GNULIB_FDATASYNC''@/$(GL_GNULIB_FDATASYNC)/g' \ -e 's/@''GNULIB_FSYNC''@/$(GL_GNULIB_FSYNC)/g' \ -e 's/@''GNULIB_FTRUNCATE''@/$(GL_GNULIB_FTRUNCATE)/g' \ -e 's/@''GNULIB_GETCWD''@/$(GL_GNULIB_GETCWD)/g' \ -e 's/@''GNULIB_GETDOMAINNAME''@/$(GL_GNULIB_GETDOMAINNAME)/g' \ -e 's/@''GNULIB_GETDTABLESIZE''@/$(GL_GNULIB_GETDTABLESIZE)/g' \ -e 's/@''GNULIB_GETENTROPY''@/$(GL_GNULIB_GETENTROPY)/g' \ -e 's/@''GNULIB_GETGROUPS''@/$(GL_GNULIB_GETGROUPS)/g' \ -e 's/@''GNULIB_GETHOSTNAME''@/$(GL_GNULIB_GETHOSTNAME)/g' \ -e 's/@''GNULIB_GETLOGIN''@/$(GL_GNULIB_GETLOGIN)/g' \ -e 's/@''GNULIB_GETLOGIN_R''@/$(GL_GNULIB_GETLOGIN_R)/g' \ -e 's/@''GNULIB_GETOPT_POSIX''@/$(GL_GNULIB_GETOPT_POSIX)/g' \ -e 's/@''GNULIB_GETPAGESIZE''@/$(GL_GNULIB_GETPAGESIZE)/g' \ -e 's/@''GNULIB_GETPASS''@/$(GL_GNULIB_GETPASS)/g' \ -e 's/@''GNULIB_GETPASS_GNU''@/$(GL_GNULIB_GETPASS_GNU)/g' \ -e 's/@''GNULIB_GETUSERSHELL''@/$(GL_GNULIB_GETUSERSHELL)/g' \ -e 's/@''GNULIB_GROUP_MEMBER''@/$(GL_GNULIB_GROUP_MEMBER)/g' \ -e 's/@''GNULIB_ISATTY''@/$(GL_GNULIB_ISATTY)/g' \ -e 's/@''GNULIB_LCHOWN''@/$(GL_GNULIB_LCHOWN)/g' \ -e 's/@''GNULIB_LINK''@/$(GL_GNULIB_LINK)/g' \ -e 's/@''GNULIB_LINKAT''@/$(GL_GNULIB_LINKAT)/g' \ -e 's/@''GNULIB_LSEEK''@/$(GL_GNULIB_LSEEK)/g' \ -e 's/@''GNULIB_PIPE''@/$(GL_GNULIB_PIPE)/g' \ -e 's/@''GNULIB_PIPE2''@/$(GL_GNULIB_PIPE2)/g' \ -e 's/@''GNULIB_PREAD''@/$(GL_GNULIB_PREAD)/g' \ -e 's/@''GNULIB_PWRITE''@/$(GL_GNULIB_PWRITE)/g' \ -e 's/@''GNULIB_READ''@/$(GL_GNULIB_READ)/g' \ -e 's/@''GNULIB_READLINK''@/$(GL_GNULIB_READLINK)/g' \ -e 's/@''GNULIB_READLINKAT''@/$(GL_GNULIB_READLINKAT)/g' \ -e 's/@''GNULIB_RMDIR''@/$(GL_GNULIB_RMDIR)/g' \ -e 's/@''GNULIB_SETHOSTNAME''@/$(GL_GNULIB_SETHOSTNAME)/g' \ -e 's/@''GNULIB_SLEEP''@/$(GL_GNULIB_SLEEP)/g' \ -e 's/@''GNULIB_SYMLINK''@/$(GL_GNULIB_SYMLINK)/g' \ -e 's/@''GNULIB_SYMLINKAT''@/$(GL_GNULIB_SYMLINKAT)/g' \ -e 's/@''GNULIB_TRUNCATE''@/$(GL_GNULIB_TRUNCATE)/g' \ -e 's/@''GNULIB_TTYNAME_R''@/$(GL_GNULIB_TTYNAME_R)/g' \ -e 's/@''GNULIB_UNISTD_H_GETOPT''@/0$(GL_GNULIB_UNISTD_H_GETOPT)/g' \ -e 's/@''GNULIB_UNISTD_H_NONBLOCKING''@/$(GL_GNULIB_UNISTD_H_NONBLOCKING)/g' \ -e 's/@''GNULIB_UNISTD_H_SIGPIPE''@/$(GL_GNULIB_UNISTD_H_SIGPIPE)/g' \ -e 's/@''GNULIB_UNLINK''@/$(GL_GNULIB_UNLINK)/g' \ -e 's/@''GNULIB_UNLINKAT''@/$(GL_GNULIB_UNLINKAT)/g' \ -e 's/@''GNULIB_USLEEP''@/$(GL_GNULIB_USLEEP)/g' \ -e 's/@''GNULIB_WRITE''@/$(GL_GNULIB_WRITE)/g' \ -e 's/@''GNULIB_MDA_ACCESS''@/$(GL_GNULIB_MDA_ACCESS)/g' \ -e 's/@''GNULIB_MDA_CHDIR''@/$(GL_GNULIB_MDA_CHDIR)/g' \ -e 's/@''GNULIB_MDA_CLOSE''@/$(GL_GNULIB_MDA_CLOSE)/g' \ -e 's/@''GNULIB_MDA_DUP''@/$(GL_GNULIB_MDA_DUP)/g' \ -e 's/@''GNULIB_MDA_DUP2''@/$(GL_GNULIB_MDA_DUP2)/g' \ -e 's/@''GNULIB_MDA_EXECL''@/$(GL_GNULIB_MDA_EXECL)/g' \ -e 's/@''GNULIB_MDA_EXECLE''@/$(GL_GNULIB_MDA_EXECLE)/g' \ -e 's/@''GNULIB_MDA_EXECLP''@/$(GL_GNULIB_MDA_EXECLP)/g' \ -e 's/@''GNULIB_MDA_EXECV''@/$(GL_GNULIB_MDA_EXECV)/g' \ -e 's/@''GNULIB_MDA_EXECVE''@/$(GL_GNULIB_MDA_EXECVE)/g' \ -e 's/@''GNULIB_MDA_EXECVP''@/$(GL_GNULIB_MDA_EXECVP)/g' \ -e 's/@''GNULIB_MDA_EXECVPE''@/$(GL_GNULIB_MDA_EXECVPE)/g' \ -e 's/@''GNULIB_MDA_GETCWD''@/$(GL_GNULIB_MDA_GETCWD)/g' \ -e 's/@''GNULIB_MDA_GETPID''@/$(GL_GNULIB_MDA_GETPID)/g' \ -e 's/@''GNULIB_MDA_ISATTY''@/$(GL_GNULIB_MDA_ISATTY)/g' \ -e 's/@''GNULIB_MDA_LSEEK''@/$(GL_GNULIB_MDA_LSEEK)/g' \ -e 's/@''GNULIB_MDA_READ''@/$(GL_GNULIB_MDA_READ)/g' \ -e 's/@''GNULIB_MDA_RMDIR''@/$(GL_GNULIB_MDA_RMDIR)/g' \ -e 's/@''GNULIB_MDA_SWAB''@/$(GL_GNULIB_MDA_SWAB)/g' \ -e 's/@''GNULIB_MDA_UNLINK''@/$(GL_GNULIB_MDA_UNLINK)/g' \ -e 's/@''GNULIB_MDA_WRITE''@/$(GL_GNULIB_MDA_WRITE)/g' \ < $(srcdir)/unistd.in.h | \ sed -e 's|@''HAVE_CHOWN''@|$(HAVE_CHOWN)|g' \ -e 's|@''HAVE_COPY_FILE_RANGE''@|$(HAVE_COPY_FILE_RANGE)|g' \ -e 's|@''HAVE_DUP3''@|$(HAVE_DUP3)|g' \ -e 's|@''HAVE_EUIDACCESS''@|$(HAVE_EUIDACCESS)|g' \ -e 's|@''HAVE_EXECVPE''@|$(HAVE_EXECVPE)|g' \ -e 's|@''HAVE_FACCESSAT''@|$(HAVE_FACCESSAT)|g' \ -e 's|@''HAVE_FCHDIR''@|$(HAVE_FCHDIR)|g' \ -e 's|@''HAVE_FCHOWNAT''@|$(HAVE_FCHOWNAT)|g' \ -e 's|@''HAVE_FDATASYNC''@|$(HAVE_FDATASYNC)|g' \ -e 's|@''HAVE_FSYNC''@|$(HAVE_FSYNC)|g' \ -e 's|@''HAVE_FTRUNCATE''@|$(HAVE_FTRUNCATE)|g' \ -e 's|@''HAVE_GETDTABLESIZE''@|$(HAVE_GETDTABLESIZE)|g' \ -e 's|@''HAVE_GETENTROPY''@|$(HAVE_GETENTROPY)|g' \ -e 's|@''HAVE_GETGROUPS''@|$(HAVE_GETGROUPS)|g' \ -e 's|@''HAVE_GETHOSTNAME''@|$(HAVE_GETHOSTNAME)|g' \ -e 's|@''HAVE_GETPAGESIZE''@|$(HAVE_GETPAGESIZE)|g' \ -e 's|@''HAVE_GETPASS''@|$(HAVE_GETPASS)|g' \ -e 's|@''HAVE_GROUP_MEMBER''@|$(HAVE_GROUP_MEMBER)|g' \ -e 's|@''HAVE_LCHOWN''@|$(HAVE_LCHOWN)|g' \ -e 's|@''HAVE_LINK''@|$(HAVE_LINK)|g' \ -e 's|@''HAVE_LINKAT''@|$(HAVE_LINKAT)|g' \ -e 's|@''HAVE_PIPE''@|$(HAVE_PIPE)|g' \ -e 's|@''HAVE_PIPE2''@|$(HAVE_PIPE2)|g' \ -e 's|@''HAVE_PREAD''@|$(HAVE_PREAD)|g' \ -e 's|@''HAVE_PWRITE''@|$(HAVE_PWRITE)|g' \ -e 's|@''HAVE_READLINK''@|$(HAVE_READLINK)|g' \ -e 's|@''HAVE_READLINKAT''@|$(HAVE_READLINKAT)|g' \ -e 's|@''HAVE_SETHOSTNAME''@|$(HAVE_SETHOSTNAME)|g' \ -e 's|@''HAVE_SLEEP''@|$(HAVE_SLEEP)|g' \ -e 's|@''HAVE_SYMLINK''@|$(HAVE_SYMLINK)|g' \ -e 's|@''HAVE_SYMLINKAT''@|$(HAVE_SYMLINKAT)|g' \ -e 's|@''HAVE_UNLINKAT''@|$(HAVE_UNLINKAT)|g' \ -e 's|@''HAVE_USLEEP''@|$(HAVE_USLEEP)|g' \ -e 's|@''HAVE_DECL_ENVIRON''@|$(HAVE_DECL_ENVIRON)|g' \ -e 's|@''HAVE_DECL_EXECVPE''@|$(HAVE_DECL_EXECVPE)|g' \ -e 's|@''HAVE_DECL_FCHDIR''@|$(HAVE_DECL_FCHDIR)|g' \ -e 's|@''HAVE_DECL_FDATASYNC''@|$(HAVE_DECL_FDATASYNC)|g' \ -e 's|@''HAVE_DECL_GETDOMAINNAME''@|$(HAVE_DECL_GETDOMAINNAME)|g' \ -e 's|@''HAVE_DECL_GETLOGIN''@|$(HAVE_DECL_GETLOGIN)|g' \ -e 's|@''HAVE_DECL_GETLOGIN_R''@|$(HAVE_DECL_GETLOGIN_R)|g' \ -e 's|@''HAVE_DECL_GETPAGESIZE''@|$(HAVE_DECL_GETPAGESIZE)|g' \ -e 's|@''HAVE_DECL_GETUSERSHELL''@|$(HAVE_DECL_GETUSERSHELL)|g' \ -e 's|@''HAVE_DECL_SETHOSTNAME''@|$(HAVE_DECL_SETHOSTNAME)|g' \ -e 's|@''HAVE_DECL_TRUNCATE''@|$(HAVE_DECL_TRUNCATE)|g' \ -e 's|@''HAVE_DECL_TTYNAME_R''@|$(HAVE_DECL_TTYNAME_R)|g' \ -e 's|@''HAVE_OS_H''@|$(HAVE_OS_H)|g' \ -e 's|@''HAVE_SYS_PARAM_H''@|$(HAVE_SYS_PARAM_H)|g' \ | \ sed -e 's|@''REPLACE_ACCESS''@|$(REPLACE_ACCESS)|g' \ -e 's|@''REPLACE_CHOWN''@|$(REPLACE_CHOWN)|g' \ -e 's|@''REPLACE_CLOSE''@|$(REPLACE_CLOSE)|g' \ -e 's|@''REPLACE_COPY_FILE_RANGE''@|$(REPLACE_COPY_FILE_RANGE)|g' \ -e 's|@''REPLACE_DUP''@|$(REPLACE_DUP)|g' \ -e 's|@''REPLACE_DUP2''@|$(REPLACE_DUP2)|g' \ -e 's|@''REPLACE_DUP3''@|$(REPLACE_DUP3)|g' \ -e 's|@''REPLACE_EXECL''@|$(REPLACE_EXECL)|g' \ -e 's|@''REPLACE_EXECLE''@|$(REPLACE_EXECLE)|g' \ -e 's|@''REPLACE_EXECLP''@|$(REPLACE_EXECLP)|g' \ -e 's|@''REPLACE_EXECV''@|$(REPLACE_EXECV)|g' \ -e 's|@''REPLACE_EXECVE''@|$(REPLACE_EXECVE)|g' \ -e 's|@''REPLACE_EXECVP''@|$(REPLACE_EXECVP)|g' \ -e 's|@''REPLACE_EXECVPE''@|$(REPLACE_EXECVPE)|g' \ -e 's|@''REPLACE_FACCESSAT''@|$(REPLACE_FACCESSAT)|g' \ -e 's|@''REPLACE_FCHOWNAT''@|$(REPLACE_FCHOWNAT)|g' \ -e 's|@''REPLACE_FDATASYNC''@|$(REPLACE_FDATASYNC)|g' \ -e 's|@''REPLACE_FTRUNCATE''@|$(REPLACE_FTRUNCATE)|g' \ -e 's|@''REPLACE_GETCWD''@|$(REPLACE_GETCWD)|g' \ -e 's|@''REPLACE_GETDOMAINNAME''@|$(REPLACE_GETDOMAINNAME)|g' \ -e 's|@''REPLACE_GETDTABLESIZE''@|$(REPLACE_GETDTABLESIZE)|g' \ -e 's|@''REPLACE_GETENTROPY''@|$(REPLACE_GETENTROPY)|g' \ -e 's|@''REPLACE_GETLOGIN_R''@|$(REPLACE_GETLOGIN_R)|g' \ -e 's|@''REPLACE_GETGROUPS''@|$(REPLACE_GETGROUPS)|g' \ -e 's|@''REPLACE_GETPAGESIZE''@|$(REPLACE_GETPAGESIZE)|g' \ -e 's|@''REPLACE_GETPASS''@|$(REPLACE_GETPASS)|g' \ -e 's|@''REPLACE_GETPASS_FOR_GETPASS_GNU''@|$(REPLACE_GETPASS_FOR_GETPASS_GNU)|g' \ -e 's|@''REPLACE_ISATTY''@|$(REPLACE_ISATTY)|g' \ -e 's|@''REPLACE_LCHOWN''@|$(REPLACE_LCHOWN)|g' \ -e 's|@''REPLACE_LINK''@|$(REPLACE_LINK)|g' \ -e 's|@''REPLACE_LINKAT''@|$(REPLACE_LINKAT)|g' \ -e 's|@''REPLACE_LSEEK''@|$(REPLACE_LSEEK)|g' \ -e 's|@''REPLACE_PIPE2''@|$(REPLACE_PIPE2)|g' \ -e 's|@''REPLACE_PREAD''@|$(REPLACE_PREAD)|g' \ -e 's|@''REPLACE_PWRITE''@|$(REPLACE_PWRITE)|g' \ -e 's|@''REPLACE_READ''@|$(REPLACE_READ)|g' \ -e 's|@''REPLACE_READLINK''@|$(REPLACE_READLINK)|g' \ -e 's|@''REPLACE_READLINKAT''@|$(REPLACE_READLINKAT)|g' \ -e 's|@''REPLACE_RMDIR''@|$(REPLACE_RMDIR)|g' \ -e 's|@''REPLACE_SETHOSTNAME''@|$(REPLACE_SETHOSTNAME)|g' \ -e 's|@''REPLACE_SLEEP''@|$(REPLACE_SLEEP)|g' \ -e 's|@''REPLACE_SYMLINK''@|$(REPLACE_SYMLINK)|g' \ -e 's|@''REPLACE_SYMLINKAT''@|$(REPLACE_SYMLINKAT)|g' \ -e 's|@''REPLACE_TRUNCATE''@|$(REPLACE_TRUNCATE)|g' \ -e 's|@''REPLACE_TTYNAME_R''@|$(REPLACE_TTYNAME_R)|g' \ -e 's|@''REPLACE_UNLINK''@|$(REPLACE_UNLINK)|g' \ -e 's|@''REPLACE_UNLINKAT''@|$(REPLACE_UNLINKAT)|g' \ -e 's|@''REPLACE_USLEEP''@|$(REPLACE_USLEEP)|g' \ -e 's|@''REPLACE_WRITE''@|$(REPLACE_WRITE)|g' \ -e 's|@''UNISTD_H_HAVE_SYS_RANDOM_H''@|$(UNISTD_H_HAVE_SYS_RANDOM_H)|g' \ -e 's|@''UNISTD_H_HAVE_WINSOCK2_H''@|$(UNISTD_H_HAVE_WINSOCK2_H)|g' \ -e 's|@''UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS''@|$(UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ > $@-t $(AM_V_at)mv $@-t $@ # We need the following in order to create <wchar.h> when the system # version does not work standalone. wchar.h: wchar.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''HAVE_FEATURES_H''@|$(HAVE_FEATURES_H)|g' \ -e 's|@''NEXT_WCHAR_H''@|$(NEXT_WCHAR_H)|g' \ -e 's|@''HAVE_WCHAR_H''@|$(HAVE_WCHAR_H)|g' \ -e 's/@''HAVE_CRTDEFS_H''@/$(HAVE_CRTDEFS_H)/g' \ -e 's/@''GNULIBHEADERS_OVERRIDE_WINT_T''@/$(GNULIBHEADERS_OVERRIDE_WINT_T)/g' \ -e 's/@''GNULIB_BTOWC''@/$(GL_GNULIB_BTOWC)/g' \ -e 's/@''GNULIB_WCTOB''@/$(GL_GNULIB_WCTOB)/g' \ -e 's/@''GNULIB_MBSINIT''@/$(GL_GNULIB_MBSINIT)/g' \ -e 's/@''GNULIB_MBRTOWC''@/$(GL_GNULIB_MBRTOWC)/g' \ -e 's/@''GNULIB_MBRLEN''@/$(GL_GNULIB_MBRLEN)/g' \ -e 's/@''GNULIB_MBSRTOWCS''@/$(GL_GNULIB_MBSRTOWCS)/g' \ -e 's/@''GNULIB_MBSNRTOWCS''@/$(GL_GNULIB_MBSNRTOWCS)/g' \ -e 's/@''GNULIB_WCRTOMB''@/$(GL_GNULIB_WCRTOMB)/g' \ -e 's/@''GNULIB_WCSRTOMBS''@/$(GL_GNULIB_WCSRTOMBS)/g' \ -e 's/@''GNULIB_WCSNRTOMBS''@/$(GL_GNULIB_WCSNRTOMBS)/g' \ -e 's/@''GNULIB_WCWIDTH''@/$(GL_GNULIB_WCWIDTH)/g' \ -e 's/@''GNULIB_WMEMCHR''@/$(GL_GNULIB_WMEMCHR)/g' \ -e 's/@''GNULIB_WMEMCMP''@/$(GL_GNULIB_WMEMCMP)/g' \ -e 's/@''GNULIB_WMEMCPY''@/$(GL_GNULIB_WMEMCPY)/g' \ -e 's/@''GNULIB_WMEMMOVE''@/$(GL_GNULIB_WMEMMOVE)/g' \ -e 's/@''GNULIB_WMEMPCPY''@/$(GL_GNULIB_WMEMPCPY)/g' \ -e 's/@''GNULIB_WMEMSET''@/$(GL_GNULIB_WMEMSET)/g' \ -e 's/@''GNULIB_WCSLEN''@/$(GL_GNULIB_WCSLEN)/g' \ -e 's/@''GNULIB_WCSNLEN''@/$(GL_GNULIB_WCSNLEN)/g' \ -e 's/@''GNULIB_WCSCPY''@/$(GL_GNULIB_WCSCPY)/g' \ -e 's/@''GNULIB_WCPCPY''@/$(GL_GNULIB_WCPCPY)/g' \ -e 's/@''GNULIB_WCSNCPY''@/$(GL_GNULIB_WCSNCPY)/g' \ -e 's/@''GNULIB_WCPNCPY''@/$(GL_GNULIB_WCPNCPY)/g' \ -e 's/@''GNULIB_WCSCAT''@/$(GL_GNULIB_WCSCAT)/g' \ -e 's/@''GNULIB_WCSNCAT''@/$(GL_GNULIB_WCSNCAT)/g' \ -e 's/@''GNULIB_WCSCMP''@/$(GL_GNULIB_WCSCMP)/g' \ -e 's/@''GNULIB_WCSNCMP''@/$(GL_GNULIB_WCSNCMP)/g' \ -e 's/@''GNULIB_WCSCASECMP''@/$(GL_GNULIB_WCSCASECMP)/g' \ -e 's/@''GNULIB_WCSNCASECMP''@/$(GL_GNULIB_WCSNCASECMP)/g' \ -e 's/@''GNULIB_WCSCOLL''@/$(GL_GNULIB_WCSCOLL)/g' \ -e 's/@''GNULIB_WCSXFRM''@/$(GL_GNULIB_WCSXFRM)/g' \ -e 's/@''GNULIB_WCSDUP''@/$(GL_GNULIB_WCSDUP)/g' \ -e 's/@''GNULIB_WCSCHR''@/$(GL_GNULIB_WCSCHR)/g' \ -e 's/@''GNULIB_WCSRCHR''@/$(GL_GNULIB_WCSRCHR)/g' \ -e 's/@''GNULIB_WCSCSPN''@/$(GL_GNULIB_WCSCSPN)/g' \ -e 's/@''GNULIB_WCSSPN''@/$(GL_GNULIB_WCSSPN)/g' \ -e 's/@''GNULIB_WCSPBRK''@/$(GL_GNULIB_WCSPBRK)/g' \ -e 's/@''GNULIB_WCSSTR''@/$(GL_GNULIB_WCSSTR)/g' \ -e 's/@''GNULIB_WCSTOK''@/$(GL_GNULIB_WCSTOK)/g' \ -e 's/@''GNULIB_WCSWIDTH''@/$(GL_GNULIB_WCSWIDTH)/g' \ -e 's/@''GNULIB_WCSFTIME''@/$(GL_GNULIB_WCSFTIME)/g' \ -e 's/@''GNULIB_MDA_WCSDUP''@/$(GL_GNULIB_MDA_WCSDUP)/g' \ -e 's/@''GNULIB_FREE_POSIX''@/$(GL_GNULIB_FREE_POSIX)/g' \ < $(srcdir)/wchar.in.h | \ sed -e 's|@''HAVE_WINT_T''@|$(HAVE_WINT_T)|g' \ -e 's|@''HAVE_BTOWC''@|$(HAVE_BTOWC)|g' \ -e 's|@''HAVE_MBSINIT''@|$(HAVE_MBSINIT)|g' \ -e 's|@''HAVE_MBRTOWC''@|$(HAVE_MBRTOWC)|g' \ -e 's|@''HAVE_MBRLEN''@|$(HAVE_MBRLEN)|g' \ -e 's|@''HAVE_MBSRTOWCS''@|$(HAVE_MBSRTOWCS)|g' \ -e 's|@''HAVE_MBSNRTOWCS''@|$(HAVE_MBSNRTOWCS)|g' \ -e 's|@''HAVE_WCRTOMB''@|$(HAVE_WCRTOMB)|g' \ -e 's|@''HAVE_WCSRTOMBS''@|$(HAVE_WCSRTOMBS)|g' \ -e 's|@''HAVE_WCSNRTOMBS''@|$(HAVE_WCSNRTOMBS)|g' \ -e 's|@''HAVE_WMEMCHR''@|$(HAVE_WMEMCHR)|g' \ -e 's|@''HAVE_WMEMCMP''@|$(HAVE_WMEMCMP)|g' \ -e 's|@''HAVE_WMEMCPY''@|$(HAVE_WMEMCPY)|g' \ -e 's|@''HAVE_WMEMMOVE''@|$(HAVE_WMEMMOVE)|g' \ -e 's|@''HAVE_WMEMPCPY''@|$(HAVE_WMEMPCPY)|g' \ -e 's|@''HAVE_WMEMSET''@|$(HAVE_WMEMSET)|g' \ -e 's|@''HAVE_WCSLEN''@|$(HAVE_WCSLEN)|g' \ -e 's|@''HAVE_WCSNLEN''@|$(HAVE_WCSNLEN)|g' \ -e 's|@''HAVE_WCSCPY''@|$(HAVE_WCSCPY)|g' \ -e 's|@''HAVE_WCPCPY''@|$(HAVE_WCPCPY)|g' \ -e 's|@''HAVE_WCSNCPY''@|$(HAVE_WCSNCPY)|g' \ -e 's|@''HAVE_WCPNCPY''@|$(HAVE_WCPNCPY)|g' \ -e 's|@''HAVE_WCSCAT''@|$(HAVE_WCSCAT)|g' \ -e 's|@''HAVE_WCSNCAT''@|$(HAVE_WCSNCAT)|g' \ -e 's|@''HAVE_WCSCMP''@|$(HAVE_WCSCMP)|g' \ -e 's|@''HAVE_WCSNCMP''@|$(HAVE_WCSNCMP)|g' \ -e 's|@''HAVE_WCSCASECMP''@|$(HAVE_WCSCASECMP)|g' \ -e 's|@''HAVE_WCSNCASECMP''@|$(HAVE_WCSNCASECMP)|g' \ -e 's|@''HAVE_WCSCOLL''@|$(HAVE_WCSCOLL)|g' \ -e 's|@''HAVE_WCSXFRM''@|$(HAVE_WCSXFRM)|g' \ -e 's|@''HAVE_WCSDUP''@|$(HAVE_WCSDUP)|g' \ -e 's|@''HAVE_WCSCHR''@|$(HAVE_WCSCHR)|g' \ -e 's|@''HAVE_WCSRCHR''@|$(HAVE_WCSRCHR)|g' \ -e 's|@''HAVE_WCSCSPN''@|$(HAVE_WCSCSPN)|g' \ -e 's|@''HAVE_WCSSPN''@|$(HAVE_WCSSPN)|g' \ -e 's|@''HAVE_WCSPBRK''@|$(HAVE_WCSPBRK)|g' \ -e 's|@''HAVE_WCSSTR''@|$(HAVE_WCSSTR)|g' \ -e 's|@''HAVE_WCSTOK''@|$(HAVE_WCSTOK)|g' \ -e 's|@''HAVE_WCSWIDTH''@|$(HAVE_WCSWIDTH)|g' \ -e 's|@''HAVE_WCSFTIME''@|$(HAVE_WCSFTIME)|g' \ -e 's|@''HAVE_DECL_WCTOB''@|$(HAVE_DECL_WCTOB)|g' \ -e 's|@''HAVE_DECL_WCSDUP''@|$(HAVE_DECL_WCSDUP)|g' \ -e 's|@''HAVE_DECL_WCWIDTH''@|$(HAVE_DECL_WCWIDTH)|g' \ | \ sed -e 's|@''REPLACE_MBSTATE_T''@|$(REPLACE_MBSTATE_T)|g' \ -e 's|@''REPLACE_BTOWC''@|$(REPLACE_BTOWC)|g' \ -e 's|@''REPLACE_WCTOB''@|$(REPLACE_WCTOB)|g' \ -e 's|@''REPLACE_FREE''@|$(REPLACE_FREE)|g' \ -e 's|@''REPLACE_MBSINIT''@|$(REPLACE_MBSINIT)|g' \ -e 's|@''REPLACE_MBRTOWC''@|$(REPLACE_MBRTOWC)|g' \ -e 's|@''REPLACE_MBRLEN''@|$(REPLACE_MBRLEN)|g' \ -e 's|@''REPLACE_MBSRTOWCS''@|$(REPLACE_MBSRTOWCS)|g' \ -e 's|@''REPLACE_MBSNRTOWCS''@|$(REPLACE_MBSNRTOWCS)|g' \ -e 's|@''REPLACE_WCRTOMB''@|$(REPLACE_WCRTOMB)|g' \ -e 's|@''REPLACE_WCSRTOMBS''@|$(REPLACE_WCSRTOMBS)|g' \ -e 's|@''REPLACE_WCSNRTOMBS''@|$(REPLACE_WCSNRTOMBS)|g' \ -e 's|@''REPLACE_WCWIDTH''@|$(REPLACE_WCWIDTH)|g' \ -e 's|@''REPLACE_WCSWIDTH''@|$(REPLACE_WCSWIDTH)|g' \ -e 's|@''REPLACE_WCSFTIME''@|$(REPLACE_WCSFTIME)|g' \ -e 's|@''REPLACE_WCSCMP''@|$(REPLACE_WCSCMP)|g' \ -e 's|@''REPLACE_WCSNCMP''@|$(REPLACE_WCSNCMP)|g' \ -e 's|@''REPLACE_WCSSTR''@|$(REPLACE_WCSSTR)|g' \ -e 's|@''REPLACE_WCSTOK''@|$(REPLACE_WCSTOK)|g' \ -e 's|@''REPLACE_WMEMCMP''@|$(REPLACE_WMEMCMP)|g' \ -e 's|@''REPLACE_WMEMPCPY''@|$(REPLACE_WMEMPCPY)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ > $@-t $(AM_V_at)mv $@-t $@ # We need the following in order to create <wctype.h> when the system # doesn't have one that works with the given compiler. wctype.h: wctype.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's/@''HAVE_WCTYPE_H''@/$(HAVE_WCTYPE_H)/g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_WCTYPE_H''@|$(NEXT_WCTYPE_H)|g' \ -e 's/@''HAVE_CRTDEFS_H''@/$(HAVE_CRTDEFS_H)/g' \ -e 's/@''GNULIBHEADERS_OVERRIDE_WINT_T''@/$(GNULIBHEADERS_OVERRIDE_WINT_T)/g' \ -e 's/@''GNULIB_ISWBLANK''@/$(GL_GNULIB_ISWBLANK)/g' \ -e 's/@''GNULIB_ISWDIGIT''@/$(GL_GNULIB_ISWDIGIT)/g' \ -e 's/@''GNULIB_ISWXDIGIT''@/$(GL_GNULIB_ISWXDIGIT)/g' \ -e 's/@''GNULIB_WCTYPE''@/$(GL_GNULIB_WCTYPE)/g' \ -e 's/@''GNULIB_ISWCTYPE''@/$(GL_GNULIB_ISWCTYPE)/g' \ -e 's/@''GNULIB_WCTRANS''@/$(GL_GNULIB_WCTRANS)/g' \ -e 's/@''GNULIB_TOWCTRANS''@/$(GL_GNULIB_TOWCTRANS)/g' \ -e 's/@''HAVE_ISWBLANK''@/$(HAVE_ISWBLANK)/g' \ -e 's/@''HAVE_ISWCNTRL''@/$(HAVE_ISWCNTRL)/g' \ -e 's/@''HAVE_WCTYPE_T''@/$(HAVE_WCTYPE_T)/g' \ -e 's/@''HAVE_WCTRANS_T''@/$(HAVE_WCTRANS_T)/g' \ -e 's/@''HAVE_WINT_T''@/$(HAVE_WINT_T)/g' \ -e 's/@''REPLACE_ISWBLANK''@/$(REPLACE_ISWBLANK)/g' \ -e 's/@''REPLACE_ISWDIGIT''@/$(REPLACE_ISWDIGIT)/g' \ -e 's/@''REPLACE_ISWXDIGIT''@/$(REPLACE_ISWXDIGIT)/g' \ -e 's/@''REPLACE_ISWCNTRL''@/$(REPLACE_ISWCNTRL)/g' \ -e 's/@''REPLACE_TOWLOWER''@/$(REPLACE_TOWLOWER)/g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/wctype.in.h > $@-t $(AM_V_at)mv $@-t $@ mostlyclean-local: mostlyclean-generic @for dir in '' $(MOSTLYCLEANDIRS); do \ if test -n "$$dir" && test -d $$dir; then \ echo "rmdir $$dir"; rmdir $$dir; \ fi; \ done; \ : distclean-local: distclean-gnulib-libobjs distclean-gnulib-libobjs: -rm -f @gl_LIBOBJDEPS@ maintainer-clean-local: distclean-gnulib-libobjs # 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: �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/stripslash.c���������������������������������������������������������������������������0000644�0001750�0001750�00000003063�14436425346�015474� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* stripslash.c -- remove redundant trailing slashes from a file name Copyright (C) 1990, 2001, 2003-2006, 2009-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include "dirname.h" /* Remove trailing slashes from FILE. Return true if a trailing slash was removed. This is useful when using file name completion from a shell that adds a "/" after directory names (such as tcsh and bash), because on symlinks to directories, several system calls have different semantics according to whether a trailing slash is present. */ bool strip_trailing_slashes (char *file) { char *base = last_component (file); char *base_lim; bool had_slash; /* last_component returns "" for file system roots, but we need to turn "///" into "/". */ if (! *base) base = file; base_lim = base + base_len (base); had_slash = (*base_lim != '\0'); *base_lim = '\0'; return had_slash; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/nl_langinfo.c��������������������������������������������������������������������������0000644�0001750�0001750�00000036776�14436425346�015607� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* nl_langinfo() replacement: query locale dependent information. Copyright (C) 2007-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <langinfo.h> #include <locale.h> #include <stdlib.h> #include <string.h> #if defined _WIN32 && ! defined __CYGWIN__ # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> # include <stdio.h> #endif #if REPLACE_NL_LANGINFO && !NL_LANGINFO_MTSAFE # if defined _WIN32 && !defined __CYGWIN__ # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> # elif HAVE_PTHREAD_API # include <pthread.h> # if HAVE_THREADS_H && HAVE_WEAK_SYMBOLS # include <threads.h> # pragma weak thrd_exit # define c11_threads_in_use() (thrd_exit != NULL) # else # define c11_threads_in_use() 0 # endif # elif HAVE_THREADS_H # include <threads.h> # endif #endif /* nl_langinfo() must be multithread-safe. To achieve this without using thread-local storage: 1. We use a specific static buffer for each possible argument. So that different threads can call nl_langinfo with different arguments, without interfering. 2. We use a simple strcpy or memcpy to fill this static buffer. Filling it through, for example, strcpy + strcat would not be guaranteed to leave the buffer's contents intact if another thread is currently accessing it. If necessary, the contents is first assembled in a stack-allocated buffer. */ #if !REPLACE_NL_LANGINFO || GNULIB_defined_CODESET /* Return the codeset of the current locale, if this is easily deducible. Otherwise, return "". */ static char * ctype_codeset (void) { /* This function is only used on platforms which don't have uselocale(). Therefore we don't need to look at the per-thread locale first, here. */ static char result[2 + 10 + 1]; char buf[2 + 10 + 1]; char locale[SETLOCALE_NULL_MAX]; char *codeset; size_t codesetlen; if (setlocale_null_r (LC_CTYPE, locale, sizeof (locale))) locale[0] = '\0'; codeset = buf; codeset[0] = '\0'; if (locale[0]) { /* If the locale name contains an encoding after the dot, return it. */ char *dot = strchr (locale, '.'); if (dot) { /* Look for the possible @... trailer and remove it, if any. */ char *codeset_start = dot + 1; char const *modifier = strchr (codeset_start, '@'); if (! modifier) codeset = codeset_start; else { codesetlen = modifier - codeset_start; if (codesetlen < sizeof buf) { codeset = memcpy (buf, codeset_start, codesetlen); codeset[codesetlen] = '\0'; } } } } # if defined _WIN32 && ! defined __CYGWIN__ /* If setlocale is successful, it returns the number of the codepage, as a string. Otherwise, fall back on Windows API GetACP, which returns the locale's codepage as a number (although this doesn't change according to what the 'setlocale' call specified). Either way, prepend "CP" to make it a valid codeset name. */ codesetlen = strlen (codeset); if (0 < codesetlen && codesetlen < sizeof buf - 2) memmove (buf + 2, codeset, codesetlen + 1); else sprintf (buf + 2, "%u", GetACP ()); /* For a locale name such as "French_France.65001", in Windows 10, setlocale now returns "French_France.utf8" instead. */ if (strcmp (buf + 2, "65001") == 0 || strcmp (buf + 2, "utf8") == 0) return (char *) "UTF-8"; else { memcpy (buf, "CP", 2); strcpy (result, buf); return result; } # else strcpy (result, codeset); return result; #endif } #endif #if REPLACE_NL_LANGINFO /* Override nl_langinfo with support for added nl_item values. */ # undef nl_langinfo /* Without locking, on Solaris 11.3, test-nl_langinfo-mt fails, with message "thread5 disturbed by threadN!", even when threadN invokes only nl_langinfo (CODESET); nl_langinfo (CRNCYSTR); Similarly on Solaris 10. */ # if !NL_LANGINFO_MTSAFE /* Solaris */ # define ITEMS (MAXSTRMSG + 1) # define MAX_RESULT_LEN 80 static char * nl_langinfo_unlocked (nl_item item) { static char result[ITEMS][MAX_RESULT_LEN]; /* The result of nl_langinfo is in storage that can be overwritten by other calls to nl_langinfo. */ char *tmp = nl_langinfo (item); if (item >= 0 && item < ITEMS && tmp != NULL) { size_t tmp_len = strlen (tmp); if (tmp_len < MAX_RESULT_LEN) strcpy (result[item], tmp); else { /* Produce a truncated result. Oh well... */ result[item][MAX_RESULT_LEN - 1] = '\0'; memcpy (result[item], tmp, MAX_RESULT_LEN - 1); } return result[item]; } else return tmp; } /* Use a lock, so that no two threads can invoke nl_langinfo_unlocked at the same time. */ /* Prohibit renaming this symbol. */ # undef gl_get_nl_langinfo_lock # if defined _WIN32 && !defined __CYGWIN__ extern __declspec(dllimport) CRITICAL_SECTION *gl_get_nl_langinfo_lock (void); static char * nl_langinfo_with_lock (nl_item item) { CRITICAL_SECTION *lock = gl_get_nl_langinfo_lock (); char *ret; EnterCriticalSection (lock); ret = nl_langinfo_unlocked (item); LeaveCriticalSection (lock); return ret; } # elif HAVE_PTHREAD_API extern # if defined _WIN32 || defined __CYGWIN__ __declspec(dllimport) # endif pthread_mutex_t *gl_get_nl_langinfo_lock (void); # if HAVE_WEAK_SYMBOLS /* musl libc, FreeBSD, NetBSD, OpenBSD, Haiku */ /* Avoid the need to link with '-lpthread'. */ # pragma weak pthread_mutex_lock # pragma weak pthread_mutex_unlock /* Determine whether libpthread is in use. */ # pragma weak pthread_mutexattr_gettype /* See the comments in lock.h. */ # define pthread_in_use() \ (pthread_mutexattr_gettype != NULL || c11_threads_in_use ()) # else # define pthread_in_use() 1 # endif static char * nl_langinfo_with_lock (nl_item item) { if (pthread_in_use()) { pthread_mutex_t *lock = gl_get_nl_langinfo_lock (); char *ret; if (pthread_mutex_lock (lock)) abort (); ret = nl_langinfo_unlocked (item); if (pthread_mutex_unlock (lock)) abort (); return ret; } else return nl_langinfo_unlocked (item); } # elif HAVE_THREADS_H extern mtx_t *gl_get_nl_langinfo_lock (void); static char * nl_langinfo_with_lock (nl_item item) { mtx_t *lock = gl_get_nl_langinfo_lock (); char *ret; if (mtx_lock (lock) != thrd_success) abort (); ret = nl_langinfo_unlocked (item); if (mtx_unlock (lock) != thrd_success) abort (); return ret; } # endif # else /* On other platforms, no lock is needed. */ # define nl_langinfo_with_lock nl_langinfo # endif char * rpl_nl_langinfo (nl_item item) { switch (item) { # if GNULIB_defined_CODESET case CODESET: return ctype_codeset (); # endif # if GNULIB_defined_T_FMT_AMPM case T_FMT_AMPM: return (char *) "%I:%M:%S %p"; # endif # if GNULIB_defined_ALTMON case ALTMON_1: case ALTMON_2: case ALTMON_3: case ALTMON_4: case ALTMON_5: case ALTMON_6: case ALTMON_7: case ALTMON_8: case ALTMON_9: case ALTMON_10: case ALTMON_11: case ALTMON_12: /* We don't ship the appropriate localizations with gnulib. Therefore, treat ALTMON_i like MON_i. */ item = item - ALTMON_1 + MON_1; break; # endif # if GNULIB_defined_ERA case ERA: /* The format is not standardized. In glibc it is a sequence of strings of the form "direction:offset:start_date:end_date:era_name:era_format" with an empty string at the end. */ return (char *) ""; case ERA_D_FMT: /* The %Ex conversion in strftime behaves like %x if the locale does not have an alternative time format. */ item = D_FMT; break; case ERA_D_T_FMT: /* The %Ec conversion in strftime behaves like %c if the locale does not have an alternative time format. */ item = D_T_FMT; break; case ERA_T_FMT: /* The %EX conversion in strftime behaves like %X if the locale does not have an alternative time format. */ item = T_FMT; break; case ALT_DIGITS: /* The format is not standardized. In glibc it is a sequence of 10 strings, appended in memory. */ return (char *) "\0\0\0\0\0\0\0\0\0\0"; # endif # if GNULIB_defined_YESEXPR || !FUNC_NL_LANGINFO_YESEXPR_WORKS case YESEXPR: return (char *) "^[yY]"; case NOEXPR: return (char *) "^[nN]"; # endif default: break; } return nl_langinfo_with_lock (item); } #else /* Provide nl_langinfo from scratch, either for native MS-Windows, or for old Unix platforms without locales, such as Linux libc5 or BeOS. */ # include <time.h> char * nl_langinfo (nl_item item) { char buf[100]; struct tm tmm = { 0 }; switch (item) { /* nl_langinfo items of the LC_CTYPE category */ case CODESET: { char *codeset = ctype_codeset (); if (*codeset) return codeset; } # ifdef __BEOS__ return (char *) "UTF-8"; # else return (char *) "ISO-8859-1"; # endif /* nl_langinfo items of the LC_NUMERIC category */ case RADIXCHAR: return localeconv () ->decimal_point; case THOUSEP: return localeconv () ->thousands_sep; # ifdef GROUPING case GROUPING: return localeconv () ->grouping; # endif /* nl_langinfo items of the LC_TIME category. TODO: Really use the locale. */ case D_T_FMT: case ERA_D_T_FMT: return (char *) "%a %b %e %H:%M:%S %Y"; case D_FMT: case ERA_D_FMT: return (char *) "%m/%d/%y"; case T_FMT: case ERA_T_FMT: return (char *) "%H:%M:%S"; case T_FMT_AMPM: return (char *) "%I:%M:%S %p"; case AM_STR: { static char result[80]; if (!strftime (buf, sizeof result, "%p", &tmm)) return (char *) "AM"; strcpy (result, buf); return result; } case PM_STR: { static char result[80]; tmm.tm_hour = 12; if (!strftime (buf, sizeof result, "%p", &tmm)) return (char *) "PM"; strcpy (result, buf); return result; } case DAY_1: case DAY_2: case DAY_3: case DAY_4: case DAY_5: case DAY_6: case DAY_7: { static char result[7][50]; static char const days[][sizeof "Wednesday"] = { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" }; tmm.tm_wday = item - DAY_1; if (!strftime (buf, sizeof result[0], "%A", &tmm)) return (char *) days[item - DAY_1]; strcpy (result[item - DAY_1], buf); return result[item - DAY_1]; } case ABDAY_1: case ABDAY_2: case ABDAY_3: case ABDAY_4: case ABDAY_5: case ABDAY_6: case ABDAY_7: { static char result[7][30]; static char const abdays[][sizeof "Sun"] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" }; tmm.tm_wday = item - ABDAY_1; if (!strftime (buf, sizeof result[0], "%a", &tmm)) return (char *) abdays[item - ABDAY_1]; strcpy (result[item - ABDAY_1], buf); return result[item - ABDAY_1]; } { static char const months[][sizeof "September"] = { "January", "February", "March", "April", "May", "June", "July", "September", "October", "November", "December" }; case MON_1: case MON_2: case MON_3: case MON_4: case MON_5: case MON_6: case MON_7: case MON_8: case MON_9: case MON_10: case MON_11: case MON_12: { static char result[12][50]; tmm.tm_mon = item - MON_1; if (!strftime (buf, sizeof result[0], "%B", &tmm)) return (char *) months[item - MON_1]; strcpy (result[item - MON_1], buf); return result[item - MON_1]; } case ALTMON_1: case ALTMON_2: case ALTMON_3: case ALTMON_4: case ALTMON_5: case ALTMON_6: case ALTMON_7: case ALTMON_8: case ALTMON_9: case ALTMON_10: case ALTMON_11: case ALTMON_12: { static char result[12][50]; tmm.tm_mon = item - ALTMON_1; /* The platforms without nl_langinfo() don't support strftime with %OB. We don't even need to try. */ #if 0 if (!strftime (buf, sizeof result[0], "%OB", &tmm)) #endif if (!strftime (buf, sizeof result[0], "%B", &tmm)) return (char *) months[item - ALTMON_1]; strcpy (result[item - ALTMON_1], buf); return result[item - ALTMON_1]; } } case ABMON_1: case ABMON_2: case ABMON_3: case ABMON_4: case ABMON_5: case ABMON_6: case ABMON_7: case ABMON_8: case ABMON_9: case ABMON_10: case ABMON_11: case ABMON_12: { static char result[12][30]; static char const abmonths[][sizeof "Jan"] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Sep", "Oct", "Nov", "Dec" }; tmm.tm_mon = item - ABMON_1; if (!strftime (buf, sizeof result[0], "%b", &tmm)) return (char *) abmonths[item - ABMON_1]; strcpy (result[item - ABMON_1], buf); return result[item - ABMON_1]; } case ERA: return (char *) ""; case ALT_DIGITS: return (char *) "\0\0\0\0\0\0\0\0\0\0"; /* nl_langinfo items of the LC_MONETARY category. */ case CRNCYSTR: return localeconv () ->currency_symbol; # ifdef INT_CURR_SYMBOL case INT_CURR_SYMBOL: return localeconv () ->int_curr_symbol; case MON_DECIMAL_POINT: return localeconv () ->mon_decimal_point; case MON_THOUSANDS_SEP: return localeconv () ->mon_thousands_sep; case MON_GROUPING: return localeconv () ->mon_grouping; case POSITIVE_SIGN: return localeconv () ->positive_sign; case NEGATIVE_SIGN: return localeconv () ->negative_sign; case FRAC_DIGITS: return & localeconv () ->frac_digits; case INT_FRAC_DIGITS: return & localeconv () ->int_frac_digits; case P_CS_PRECEDES: return & localeconv () ->p_cs_precedes; case N_CS_PRECEDES: return & localeconv () ->n_cs_precedes; case P_SEP_BY_SPACE: return & localeconv () ->p_sep_by_space; case N_SEP_BY_SPACE: return & localeconv () ->n_sep_by_space; case P_SIGN_POSN: return & localeconv () ->p_sign_posn; case N_SIGN_POSN: return & localeconv () ->n_sign_posn; # endif /* nl_langinfo items of the LC_MESSAGES category TODO: Really use the locale. */ case YESEXPR: return (char *) "^[yY]"; case NOEXPR: return (char *) "^[nN]"; default: return (char *) ""; } } #endif ��rush-2.4/gnu/_Noreturn.h����������������������������������������������������������������������������0000644�0001750�0001750�00000004560�14436425345�015262� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A C macro for declaring that a function does not return. Copyright (C) 2011-2023 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _Noreturn # if (defined __cplusplus \ && ((201103 <= __cplusplus && !(__GNUC__ == 4 && __GNUC_MINOR__ == 7)) \ || (defined _MSC_VER && 1900 <= _MSC_VER)) \ && 0) /* [[noreturn]] is not practically usable, because with it the syntax extern _Noreturn void func (...); would not be valid; such a declaration would only be valid with 'extern' and '_Noreturn' swapped, or without the 'extern' keyword. However, some AIX system header files and several gnulib header files use precisely this syntax with 'extern'. */ # define _Noreturn [[noreturn]] # elif (defined __clang__ && __clang_major__ < 16 \ && defined _GL_WORK_AROUND_LLVM_BUG_59792) /* Compile with -D_GL_WORK_AROUND_LLVM_BUG_59792 to work around that rare LLVM bug, though you may get many false-alarm warnings. */ # define _Noreturn # elif ((!defined __cplusplus || defined __clang__) \ && (201112 <= (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) \ || (!defined __STRICT_ANSI__ \ && (4 < __GNUC__ + (7 <= __GNUC_MINOR__) \ || (defined __apple_build_version__ \ ? 6000000 <= __apple_build_version__ \ : 3 < __clang_major__ + (5 <= __clang_minor__)))))) /* _Noreturn works as-is. */ # elif (2 < __GNUC__ + (8 <= __GNUC_MINOR__) || defined __clang__ \ || 0x5110 <= __SUNPRO_C) # define _Noreturn __attribute__ ((__noreturn__)) # elif 1200 <= (defined _MSC_VER ? _MSC_VER : 0) # define _Noreturn __declspec (noreturn) # else # define _Noreturn # endif #endif ������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/malloc/��������������������������������������������������������������������������������0000755�0001750�0001750�00000000000�14655401527�014377� 5����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/malloc/dynarray_emplace_enlarge.c������������������������������������������������������0000644�0001750�0001750�00000004507�14436425346�021567� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Increase the size of a dynamic array in preparation of an emplace operation. Copyright (C) 2017-2023 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ #ifndef _LIBC # include <libc-config.h> #endif #include <dynarray.h> #include <errno.h> #include <stdckdint.h> #include <stdlib.h> #include <string.h> bool __libc_dynarray_emplace_enlarge (struct dynarray_header *list, void *scratch, size_t element_size) { size_t new_allocated; if (list->allocated == 0) { /* No scratch buffer provided. Choose a reasonable default size. */ if (element_size < 4) new_allocated = 16; else if (element_size < 8) new_allocated = 8; else new_allocated = 4; } else /* Increase the allocated size, using an exponential growth policy. */ { new_allocated = list->allocated + list->allocated / 2 + 1; if (new_allocated <= list->allocated) { /* Overflow. */ __set_errno (ENOMEM); return false; } } size_t new_size; if (ckd_mul (&new_size, new_allocated, element_size)) return false; void *new_array; if (list->array == scratch) { /* The previous array was not heap-allocated. */ new_array = malloc (new_size); if (new_array != NULL && list->array != NULL) memcpy (new_array, list->array, list->used * element_size); } else new_array = realloc (list->array, new_size); if (new_array == NULL) return false; list->array = new_array; list->allocated = new_allocated; return true; } libc_hidden_def (__libc_dynarray_emplace_enlarge) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/malloc/dynarray_at_failure.c�����������������������������������������������������������0000644�0001750�0001750�00000002415�14436425346�020573� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Report an dynamic array index out of bounds condition. Copyright (C) 2017-2023 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ #ifndef _LIBC # include <libc-config.h> # include <stdlib.h> #endif #include <dynarray.h> #include <stdio.h> void __libc_dynarray_at_failure (size_t size, size_t index) { #ifdef _LIBC char buf[200]; __snprintf (buf, sizeof (buf), "Fatal glibc error: " "array index %zu not less than array length %zu\n", index, size); __libc_fatal (buf); #else abort (); #endif } libc_hidden_def (__libc_dynarray_at_failure) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/malloc/dynarray-skeleton.c�������������������������������������������������������������0000644�0001750�0001750�00000043551�14436425346�020230� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Type-safe arrays which grow dynamically. Copyright (C) 2017-2023 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ /* Pre-processor macros which act as parameters: DYNARRAY_STRUCT The struct tag of dynamic array to be defined. DYNARRAY_ELEMENT The type name of the element type. Elements are copied as if by memcpy, and can change address as the dynamic array grows. DYNARRAY_PREFIX The prefix of the functions which are defined. The following parameters are optional: DYNARRAY_ELEMENT_FREE DYNARRAY_ELEMENT_FREE (E) is evaluated to deallocate the contents of elements. E is of type DYNARRAY_ELEMENT *. DYNARRAY_ELEMENT_INIT DYNARRAY_ELEMENT_INIT (E) is evaluated to initialize a new element. E is of type DYNARRAY_ELEMENT *. If DYNARRAY_ELEMENT_FREE but not DYNARRAY_ELEMENT_INIT is defined, new elements are automatically zero-initialized. Otherwise, new elements have undefined contents. DYNARRAY_INITIAL_SIZE The size of the statically allocated array (default: at least 2, more elements if they fit into 128 bytes). Must be a preprocessor constant. If DYNARRAY_INITIAL_SIZE is 0, there is no statically allocated array at, and all non-empty arrays are heap-allocated. DYNARRAY_FINAL_TYPE The name of the type which holds the final array. If not defined, is PREFIX##finalize not provided. DYNARRAY_FINAL_TYPE must be a struct type, with members of type DYNARRAY_ELEMENT and size_t at the start (in this order). These macros are undefined after this header file has been included. The following types are provided (their members are private to the dynarray implementation): struct DYNARRAY_STRUCT The following functions are provided: void DYNARRAY_PREFIX##init (struct DYNARRAY_STRUCT *); void DYNARRAY_PREFIX##free (struct DYNARRAY_STRUCT *); bool DYNARRAY_PREFIX##has_failed (const struct DYNARRAY_STRUCT *); void DYNARRAY_PREFIX##mark_failed (struct DYNARRAY_STRUCT *); size_t DYNARRAY_PREFIX##size (const struct DYNARRAY_STRUCT *); DYNARRAY_ELEMENT *DYNARRAY_PREFIX##begin (const struct DYNARRAY_STRUCT *); DYNARRAY_ELEMENT *DYNARRAY_PREFIX##end (const struct DYNARRAY_STRUCT *); DYNARRAY_ELEMENT *DYNARRAY_PREFIX##at (struct DYNARRAY_STRUCT *, size_t); void DYNARRAY_PREFIX##add (struct DYNARRAY_STRUCT *, DYNARRAY_ELEMENT); DYNARRAY_ELEMENT *DYNARRAY_PREFIX##emplace (struct DYNARRAY_STRUCT *); bool DYNARRAY_PREFIX##resize (struct DYNARRAY_STRUCT *, size_t); void DYNARRAY_PREFIX##remove_last (struct DYNARRAY_STRUCT *); void DYNARRAY_PREFIX##clear (struct DYNARRAY_STRUCT *); The following functions are provided are provided if the prerequisites are met: bool DYNARRAY_PREFIX##finalize (struct DYNARRAY_STRUCT *, DYNARRAY_FINAL_TYPE *); (if DYNARRAY_FINAL_TYPE is defined) DYNARRAY_ELEMENT *DYNARRAY_PREFIX##finalize (struct DYNARRAY_STRUCT *, size_t *); (if DYNARRAY_FINAL_TYPE is not defined) */ #include <malloc/dynarray.h> #include <errno.h> #include <stdlib.h> #include <string.h> #ifndef DYNARRAY_STRUCT # error "DYNARRAY_STRUCT must be defined" #endif #ifndef DYNARRAY_ELEMENT # error "DYNARRAY_ELEMENT must be defined" #endif #ifndef DYNARRAY_PREFIX # error "DYNARRAY_PREFIX must be defined" #endif #ifdef DYNARRAY_INITIAL_SIZE # if DYNARRAY_INITIAL_SIZE < 0 # error "DYNARRAY_INITIAL_SIZE must be non-negative" # endif # if DYNARRAY_INITIAL_SIZE > 0 # define DYNARRAY_HAVE_SCRATCH 1 # else # define DYNARRAY_HAVE_SCRATCH 0 # endif #else /* Provide a reasonable default which limits the size of DYNARRAY_STRUCT. */ # define DYNARRAY_INITIAL_SIZE \ (sizeof (DYNARRAY_ELEMENT) > 64 ? 2 : 128 / sizeof (DYNARRAY_ELEMENT)) # define DYNARRAY_HAVE_SCRATCH 1 #endif /* Public type definitions. */ /* All fields of this struct are private to the implementation. */ struct DYNARRAY_STRUCT { union { struct dynarray_header dynarray_abstract; struct { /* These fields must match struct dynarray_header. */ size_t used; size_t allocated; DYNARRAY_ELEMENT *array; } dynarray_header; } u; #if DYNARRAY_HAVE_SCRATCH /* Initial inline allocation. */ DYNARRAY_ELEMENT scratch[DYNARRAY_INITIAL_SIZE]; #endif }; /* Internal use only: Helper macros. */ /* Ensure macro-expansion of DYNARRAY_PREFIX. */ #define DYNARRAY_CONCAT0(prefix, name) prefix##name #define DYNARRAY_CONCAT1(prefix, name) DYNARRAY_CONCAT0(prefix, name) #define DYNARRAY_NAME(name) DYNARRAY_CONCAT1(DYNARRAY_PREFIX, name) /* Use DYNARRAY_FREE instead of DYNARRAY_NAME (free), so that Gnulib does not change 'free' to 'rpl_free'. */ #define DYNARRAY_FREE DYNARRAY_CONCAT1 (DYNARRAY_NAME (f), ree) /* Address of the scratch buffer if any. */ #if DYNARRAY_HAVE_SCRATCH # define DYNARRAY_SCRATCH(list) (list)->scratch #else # define DYNARRAY_SCRATCH(list) NULL #endif /* Internal use only: Helper functions. */ /* Internal function. Call DYNARRAY_ELEMENT_FREE with the array elements. Name mangling needed due to the DYNARRAY_ELEMENT_FREE macro expansion. */ static inline void DYNARRAY_NAME (free__elements__) (DYNARRAY_ELEMENT *__dynarray_array, size_t __dynarray_used) { #ifdef DYNARRAY_ELEMENT_FREE for (size_t __dynarray_i = 0; __dynarray_i < __dynarray_used; ++__dynarray_i) DYNARRAY_ELEMENT_FREE (&__dynarray_array[__dynarray_i]); #endif /* DYNARRAY_ELEMENT_FREE */ } /* Internal function. Free the non-scratch array allocation. */ static inline void DYNARRAY_NAME (free__array__) (struct DYNARRAY_STRUCT *list) { #if DYNARRAY_HAVE_SCRATCH if (list->u.dynarray_header.array != list->scratch) free (list->u.dynarray_header.array); #else free (list->u.dynarray_header.array); #endif } /* Public functions. */ /* Initialize a dynamic array object. This must be called before any use of the object. */ __attribute_nonnull__ ((1)) static void DYNARRAY_NAME (init) (struct DYNARRAY_STRUCT *list) { list->u.dynarray_header.used = 0; list->u.dynarray_header.allocated = DYNARRAY_INITIAL_SIZE; list->u.dynarray_header.array = DYNARRAY_SCRATCH (list); } /* Deallocate the dynamic array and its elements. */ __attribute_maybe_unused__ __attribute_nonnull__ ((1)) static void DYNARRAY_FREE (struct DYNARRAY_STRUCT *list) { DYNARRAY_NAME (free__elements__) (list->u.dynarray_header.array, list->u.dynarray_header.used); DYNARRAY_NAME (free__array__) (list); DYNARRAY_NAME (init) (list); } /* Return true if the dynamic array is in an error state. */ __attribute_nonnull__ ((1)) static inline bool DYNARRAY_NAME (has_failed) (const struct DYNARRAY_STRUCT *list) { return list->u.dynarray_header.allocated == __dynarray_error_marker (); } /* Mark the dynamic array as failed. All elements are deallocated as a side effect. */ __attribute_nonnull__ ((1)) static void DYNARRAY_NAME (mark_failed) (struct DYNARRAY_STRUCT *list) { DYNARRAY_NAME (free__elements__) (list->u.dynarray_header.array, list->u.dynarray_header.used); DYNARRAY_NAME (free__array__) (list); list->u.dynarray_header.array = DYNARRAY_SCRATCH (list); list->u.dynarray_header.used = 0; list->u.dynarray_header.allocated = __dynarray_error_marker (); } /* Return the number of elements which have been added to the dynamic array. */ __attribute_nonnull__ ((1)) static inline size_t DYNARRAY_NAME (size) (const struct DYNARRAY_STRUCT *list) { return list->u.dynarray_header.used; } /* Return a pointer to the array element at INDEX. Terminate the process if INDEX is out of bounds. */ __attribute_nonnull__ ((1)) static inline DYNARRAY_ELEMENT * DYNARRAY_NAME (at) (struct DYNARRAY_STRUCT *list, size_t index) { if (__glibc_unlikely (index >= DYNARRAY_NAME (size) (list))) __libc_dynarray_at_failure (DYNARRAY_NAME (size) (list), index); return list->u.dynarray_header.array + index; } /* Return a pointer to the first array element, if any. For a zero-length array, the pointer can be NULL even though the dynamic array has not entered the failure state. */ __attribute_nonnull__ ((1)) static inline DYNARRAY_ELEMENT * DYNARRAY_NAME (begin) (struct DYNARRAY_STRUCT *list) { return list->u.dynarray_header.array; } /* Return a pointer one element past the last array element. For a zero-length array, the pointer can be NULL even though the dynamic array has not entered the failure state. */ __attribute_nonnull__ ((1)) static inline DYNARRAY_ELEMENT * DYNARRAY_NAME (end) (struct DYNARRAY_STRUCT *list) { return list->u.dynarray_header.array + list->u.dynarray_header.used; } /* Internal function. Slow path for the add function below. */ static void DYNARRAY_NAME (add__) (struct DYNARRAY_STRUCT *list, DYNARRAY_ELEMENT item) { if (__glibc_unlikely (!__libc_dynarray_emplace_enlarge (&list->u.dynarray_abstract, DYNARRAY_SCRATCH (list), sizeof (DYNARRAY_ELEMENT)))) { DYNARRAY_NAME (mark_failed) (list); return; } /* Copy the new element and increase the array length. */ list->u.dynarray_header.array[list->u.dynarray_header.used++] = item; } /* Add ITEM at the end of the array, enlarging it by one element. Mark *LIST as failed if the dynamic array allocation size cannot be increased. */ __attribute_nonnull__ ((1)) static inline void DYNARRAY_NAME (add) (struct DYNARRAY_STRUCT *list, DYNARRAY_ELEMENT item) { /* Do nothing in case of previous error. */ if (DYNARRAY_NAME (has_failed) (list)) return; /* Enlarge the array if necessary. */ if (__glibc_unlikely (list->u.dynarray_header.used == list->u.dynarray_header.allocated)) { DYNARRAY_NAME (add__) (list, item); return; } /* Copy the new element and increase the array length. */ list->u.dynarray_header.array[list->u.dynarray_header.used++] = item; } /* Internal function. Building block for the emplace functions below. Assumes space for one more element in *LIST. */ static inline DYNARRAY_ELEMENT * DYNARRAY_NAME (emplace__tail__) (struct DYNARRAY_STRUCT *list) { DYNARRAY_ELEMENT *result = &list->u.dynarray_header.array[list->u.dynarray_header.used]; ++list->u.dynarray_header.used; #if defined (DYNARRAY_ELEMENT_INIT) DYNARRAY_ELEMENT_INIT (result); #elif defined (DYNARRAY_ELEMENT_FREE) memset (result, 0, sizeof (*result)); #endif return result; } /* Internal function. Slow path for the emplace function below. */ static DYNARRAY_ELEMENT * DYNARRAY_NAME (emplace__) (struct DYNARRAY_STRUCT *list) { if (__glibc_unlikely (!__libc_dynarray_emplace_enlarge (&list->u.dynarray_abstract, DYNARRAY_SCRATCH (list), sizeof (DYNARRAY_ELEMENT)))) { DYNARRAY_NAME (mark_failed) (list); return NULL; } return DYNARRAY_NAME (emplace__tail__) (list); } /* Allocate a place for a new element in *LIST and return a pointer to it. The pointer can be NULL if the dynamic array cannot be enlarged due to a memory allocation failure. */ __attribute_maybe_unused__ __attribute_warn_unused_result__ __attribute_nonnull__ ((1)) static /* Avoid inlining with the larger initialization code. */ #if !(defined (DYNARRAY_ELEMENT_INIT) || defined (DYNARRAY_ELEMENT_FREE)) inline #endif DYNARRAY_ELEMENT * DYNARRAY_NAME (emplace) (struct DYNARRAY_STRUCT *list) { /* Do nothing in case of previous error. */ if (DYNARRAY_NAME (has_failed) (list)) return NULL; /* Enlarge the array if necessary. */ if (__glibc_unlikely (list->u.dynarray_header.used == list->u.dynarray_header.allocated)) return (DYNARRAY_NAME (emplace__) (list)); return DYNARRAY_NAME (emplace__tail__) (list); } /* Change the size of *LIST to SIZE. If SIZE is larger than the existing size, new elements are added (which can be initialized). Otherwise, the list is truncated, and elements are freed. Return false on memory allocation failure (and mark *LIST as failed). */ __attribute_maybe_unused__ __attribute_nonnull__ ((1)) static bool DYNARRAY_NAME (resize) (struct DYNARRAY_STRUCT *list, size_t size) { if (size > list->u.dynarray_header.used) { bool ok; #if defined (DYNARRAY_ELEMENT_INIT) /* The new elements have to be initialized. */ size_t old_size = list->u.dynarray_header.used; ok = __libc_dynarray_resize (&list->u.dynarray_abstract, size, DYNARRAY_SCRATCH (list), sizeof (DYNARRAY_ELEMENT)); if (ok) for (size_t i = old_size; i < size; ++i) { DYNARRAY_ELEMENT_INIT (&list->u.dynarray_header.array[i]); } #elif defined (DYNARRAY_ELEMENT_FREE) /* Zero initialization is needed so that the elements can be safely freed. */ ok = __libc_dynarray_resize_clear (&list->u.dynarray_abstract, size, DYNARRAY_SCRATCH (list), sizeof (DYNARRAY_ELEMENT)); #else ok = __libc_dynarray_resize (&list->u.dynarray_abstract, size, DYNARRAY_SCRATCH (list), sizeof (DYNARRAY_ELEMENT)); #endif if (__glibc_unlikely (!ok)) DYNARRAY_NAME (mark_failed) (list); return ok; } else { /* The list has shrunk in size. Free the removed elements. */ DYNARRAY_NAME (free__elements__) (list->u.dynarray_header.array + size, list->u.dynarray_header.used - size); list->u.dynarray_header.used = size; return true; } } /* Remove the last element of LIST if it is present. */ __attribute_maybe_unused__ __attribute_nonnull__ ((1)) static void DYNARRAY_NAME (remove_last) (struct DYNARRAY_STRUCT *list) { /* used > 0 implies that the array is the non-failed state. */ if (list->u.dynarray_header.used > 0) { size_t new_length = list->u.dynarray_header.used - 1; #ifdef DYNARRAY_ELEMENT_FREE DYNARRAY_ELEMENT_FREE (&list->u.dynarray_header.array[new_length]); #endif list->u.dynarray_header.used = new_length; } } /* Remove all elements from the list. The elements are freed, but the list itself is not. */ __attribute_maybe_unused__ __attribute_nonnull__ ((1)) static void DYNARRAY_NAME (clear) (struct DYNARRAY_STRUCT *list) { /* free__elements__ does nothing if the list is in the failed state. */ DYNARRAY_NAME (free__elements__) (list->u.dynarray_header.array, list->u.dynarray_header.used); list->u.dynarray_header.used = 0; } #ifdef DYNARRAY_FINAL_TYPE /* Transfer the dynamic array to a permanent location at *RESULT. Returns true on success on false on allocation failure. In either case, *LIST is re-initialized and can be reused. A NULL pointer is stored in *RESULT if LIST refers to an empty list. On success, the pointer in *RESULT is heap-allocated and must be deallocated using free. */ __attribute_maybe_unused__ __attribute_warn_unused_result__ __attribute_nonnull__ ((1, 2)) static bool DYNARRAY_NAME (finalize) (struct DYNARRAY_STRUCT *list, DYNARRAY_FINAL_TYPE *result) { struct dynarray_finalize_result res; if (__libc_dynarray_finalize (&list->u.dynarray_abstract, DYNARRAY_SCRATCH (list), sizeof (DYNARRAY_ELEMENT), &res)) { /* On success, the result owns all the data. */ DYNARRAY_NAME (init) (list); *result = (DYNARRAY_FINAL_TYPE) { res.array, res.length }; return true; } else { /* On error, we need to free all data. */ DYNARRAY_FREE (list); errno = ENOMEM; return false; } } #else /* !DYNARRAY_FINAL_TYPE */ /* Transfer the dynamic array to a heap-allocated array and return a pointer to it. The pointer is NULL if memory allocation fails, or if the array is empty, so this function should be used only for arrays which are known not be empty (usually because they always have a sentinel at the end). If LENGTHP is not NULL, the array length is written to *LENGTHP. *LIST is re-initialized and can be reused. */ __attribute_maybe_unused__ __attribute_warn_unused_result__ __attribute_nonnull__ ((1)) static DYNARRAY_ELEMENT * DYNARRAY_NAME (finalize) (struct DYNARRAY_STRUCT *list, size_t *lengthp) { struct dynarray_finalize_result res; if (__libc_dynarray_finalize (&list->u.dynarray_abstract, DYNARRAY_SCRATCH (list), sizeof (DYNARRAY_ELEMENT), &res)) { /* On success, the result owns all the data. */ DYNARRAY_NAME (init) (list); if (lengthp != NULL) *lengthp = res.length; return res.array; } else { /* On error, we need to free all data. */ DYNARRAY_FREE (list); errno = ENOMEM; return NULL; } } #endif /* !DYNARRAY_FINAL_TYPE */ /* Undo macro definitions. */ #undef DYNARRAY_CONCAT0 #undef DYNARRAY_CONCAT1 #undef DYNARRAY_NAME #undef DYNARRAY_SCRATCH #undef DYNARRAY_HAVE_SCRATCH #undef DYNARRAY_STRUCT #undef DYNARRAY_ELEMENT #undef DYNARRAY_PREFIX #undef DYNARRAY_ELEMENT_FREE #undef DYNARRAY_ELEMENT_INIT #undef DYNARRAY_INITIAL_SIZE #undef DYNARRAY_FINAL_TYPE �������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/malloc/dynarray_resize_clear.c���������������������������������������������������������0000644�0001750�0001750�00000002660�14436425346�021131� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Increase the size of a dynamic array and clear the new part. Copyright (C) 2017-2023 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ #ifndef _LIBC # include <libc-config.h> #endif #include <dynarray.h> #include <string.h> bool __libc_dynarray_resize_clear (struct dynarray_header *list, size_t size, void *scratch, size_t element_size) { size_t old_size = list->used; if (!__libc_dynarray_resize (list, size, scratch, element_size)) return false; /* __libc_dynarray_resize already checked for overflow. */ char *array = list->array; memset (array + (old_size * element_size), 0, (size - old_size) * element_size); return true; } libc_hidden_def (__libc_dynarray_resize_clear) ��������������������������������������������������������������������������������rush-2.4/gnu/malloc/dynarray_finalize.c�������������������������������������������������������������0000644�0001750�0001750�00000004230�14436425346�020256� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy the dynamically-allocated area to an explicitly-sized heap allocation. Copyright (C) 2017-2023 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ #ifndef _LIBC # include <libc-config.h> #endif #include <dynarray.h> #include <stdlib.h> #include <string.h> bool __libc_dynarray_finalize (struct dynarray_header *list, void *scratch, size_t element_size, struct dynarray_finalize_result *result) { if (__dynarray_error (list)) /* The caller will reported the deferred error. */ return false; size_t used = list->used; /* Empty list. */ if (used == 0) { /* An empty list could still be backed by a heap-allocated array. Free it if necessary. */ if (list->array != scratch) free (list->array); *result = (struct dynarray_finalize_result) { NULL, 0 }; return true; } size_t allocation_size = used * element_size; void *heap_array = malloc (allocation_size); if (heap_array != NULL) { /* The new array takes ownership of the strings. */ if (list->array != NULL) memcpy (heap_array, list->array, allocation_size); if (list->array != scratch) free (list->array); *result = (struct dynarray_finalize_result) { .array = heap_array, .length = used }; return true; } else /* The caller will perform the freeing operation. */ return false; } libc_hidden_def (__libc_dynarray_finalize) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/malloc/dynarray_resize.c���������������������������������������������������������������0000644�0001750�0001750�00000004100�14436425346�017752� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Increase the size of a dynamic array. Copyright (C) 2017-2023 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ #ifndef _LIBC # include <libc-config.h> #endif #include <dynarray.h> #include <errno.h> #include <stdckdint.h> #include <stdlib.h> #include <string.h> bool __libc_dynarray_resize (struct dynarray_header *list, size_t size, void *scratch, size_t element_size) { /* The existing allocation provides sufficient room. */ if (size <= list->allocated) { list->used = size; return true; } /* Otherwise, use size as the new allocation size. The caller is expected to provide the final size of the array, so there is no over-allocation here. */ size_t new_size_bytes; if (ckd_mul (&new_size_bytes, size, element_size)) { /* Overflow. */ __set_errno (ENOMEM); return false; } void *new_array; if (list->array == scratch) { /* The previous array was not heap-allocated. */ new_array = malloc (new_size_bytes); if (new_array != NULL && list->array != NULL) memcpy (new_array, list->array, list->used * element_size); } else new_array = realloc (list->array, new_size_bytes); if (new_array == NULL) return false; list->array = new_array; list->allocated = size; list->used = size; return true; } libc_hidden_def (__libc_dynarray_resize) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/malloc/dynarray.h����������������������������������������������������������������������0000644�0001750�0001750�00000014217�14436425346�016410� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Type-safe arrays which grow dynamically. Shared definitions. Copyright (C) 2017-2023 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ /* To use the dynarray facility, you need to include <malloc/dynarray-skeleton.c> and define the parameter macros documented in that file. A minimal example which provides a growing list of integers can be defined like this: struct int_array { // Pointer to result array followed by its length, // as required by DYNARRAY_FINAL_TYPE. int *array; size_t length; }; #define DYNARRAY_STRUCT dynarray_int #define DYNARRAY_ELEMENT int #define DYNARRAY_PREFIX dynarray_int_ #define DYNARRAY_FINAL_TYPE struct int_array #include <malloc/dynarray-skeleton.c> To create a three-element array with elements 1, 2, 3, use this code: struct dynarray_int dyn; dynarray_int_init (&dyn); for (int i = 1; i <= 3; ++i) { int *place = dynarray_int_emplace (&dyn); assert (place != NULL); *place = i; } struct int_array result; bool ok = dynarray_int_finalize (&dyn, &result); assert (ok); assert (result.length == 3); assert (result.array[0] == 1); assert (result.array[1] == 2); assert (result.array[2] == 3); free (result.array); If the elements contain resources which must be freed, define DYNARRAY_ELEMENT_FREE appropriately, like this: struct str_array { char **array; size_t length; }; #define DYNARRAY_STRUCT dynarray_str #define DYNARRAY_ELEMENT char * #define DYNARRAY_ELEMENT_FREE(ptr) free (*ptr) #define DYNARRAY_PREFIX dynarray_str_ #define DYNARRAY_FINAL_TYPE struct str_array #include <malloc/dynarray-skeleton.c> Compared to scratch buffers, dynamic arrays have the following features: - They have an element type, and are not just an untyped buffer of bytes. - When growing, previously stored elements are preserved. (It is expected that scratch_buffer_grow_preserve and scratch_buffer_set_array_size eventually go away because all current users are moved to dynamic arrays.) - Scratch buffers have a more aggressive growth policy because growing them typically means a retry of an operation (across an NSS service module boundary), which is expensive. - For the same reason, scratch buffers have a much larger initial stack allocation. */ #ifndef _DYNARRAY_H #define _DYNARRAY_H #include <stddef.h> #include <string.h> struct dynarray_header { size_t used; size_t allocated; void *array; }; /* Marker used in the allocated member to indicate that an error was encountered. */ static inline size_t __dynarray_error_marker (void) { return -1; } /* Internal function. See the has_failed function in dynarray-skeleton.c. */ static inline bool __dynarray_error (struct dynarray_header *list) { return list->allocated == __dynarray_error_marker (); } /* Internal function. Enlarge the dynamically allocated area of the array to make room for one more element. SCRATCH is a pointer to the scratch area (which is not heap-allocated and must not be freed). ELEMENT_SIZE is the size, in bytes, of one element. Return false on failure, true on success. */ bool __libc_dynarray_emplace_enlarge (struct dynarray_header *, void *scratch, size_t element_size); /* Internal function. Enlarge the dynamically allocated area of the array to make room for at least SIZE elements (which must be larger than the existing used part of the dynamic array). SCRATCH is a pointer to the scratch area (which is not heap-allocated and must not be freed). ELEMENT_SIZE is the size, in bytes, of one element. Return false on failure, true on success. */ bool __libc_dynarray_resize (struct dynarray_header *, size_t size, void *scratch, size_t element_size); /* Internal function. Like __libc_dynarray_resize, but clear the new part of the dynamic array. */ bool __libc_dynarray_resize_clear (struct dynarray_header *, size_t size, void *scratch, size_t element_size); /* Internal type. */ struct dynarray_finalize_result { void *array; size_t length; }; /* Internal function. Copy the dynamically-allocated area to an explicitly-sized heap allocation. SCRATCH is a pointer to the embedded scratch space. ELEMENT_SIZE is the size, in bytes, of the element type. On success, true is returned, and pointer and length are written to *RESULT. On failure, false is returned. The caller has to take care of some of the memory management; this function is expected to be called from dynarray-skeleton.c. */ bool __libc_dynarray_finalize (struct dynarray_header *list, void *scratch, size_t element_size, struct dynarray_finalize_result *result); /* Internal function. Terminate the process after an index error. SIZE is the number of elements of the dynamic array. INDEX is the lookup index which triggered the failure. */ _Noreturn void __libc_dynarray_at_failure (size_t size, size_t index); #ifndef _ISOMAC libc_hidden_proto (__libc_dynarray_emplace_enlarge) libc_hidden_proto (__libc_dynarray_resize) libc_hidden_proto (__libc_dynarray_resize_clear) libc_hidden_proto (__libc_dynarray_finalize) libc_hidden_proto (__libc_dynarray_at_failure) #endif #endif /* _DYNARRAY_H */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/unistd.c�������������������������������������������������������������������������������0000644�0001750�0001750�00000001541�14436425346�014605� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Inline functions for <unistd.h>. Copyright (C) 2012-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #define _GL_UNISTD_INLINE _GL_EXTERN_INLINE #include "unistd.h" typedef int dummy; ���������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/cloexec.c������������������������������������������������������������������������������0000644�0001750�0001750�00000004454�14436425345�014726� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* cloexec.c - set or clear the close-on-exec descriptor flag Copyright (C) 1991, 2004-2006, 2009-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* The code is taken from glibc/manual/llio.texi */ #include <config.h> #include "cloexec.h" #include <errno.h> #include <fcntl.h> #include <unistd.h> /* Set the 'FD_CLOEXEC' flag of DESC if VALUE is true, or clear the flag if VALUE is false. Return 0 on success, or -1 on error with 'errno' set. Note that on MingW, this function does NOT protect DESC from being inherited into spawned children. Instead, either use dup_cloexec followed by closing the original DESC, or use interfaces such as open or pipe2 that accept flags like O_CLOEXEC to create DESC non-inheritable in the first place. */ int set_cloexec_flag (int desc, bool value) { #ifdef F_SETFD int flags = fcntl (desc, F_GETFD, 0); if (0 <= flags) { int newflags = (value ? flags | FD_CLOEXEC : flags & ~FD_CLOEXEC); if (flags == newflags || fcntl (desc, F_SETFD, newflags) != -1) return 0; } return -1; #else /* !F_SETFD */ /* Use dup2 to reject invalid file descriptors; the cloexec flag will be unaffected. */ if (desc < 0) { errno = EBADF; return -1; } if (dup2 (desc, desc) < 0) /* errno is EBADF here. */ return -1; /* There is nothing we can do on this kind of platform. Punt. */ return 0; #endif /* !F_SETFD */ } /* Duplicates a file handle FD, while marking the copy to be closed prior to exec or spawn. Returns -1 and sets errno if FD could not be duplicated. */ int dup_cloexec (int fd) { return fcntl (fd, F_DUPFD_CLOEXEC, 0); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/error.in.h�����������������������������������������������������������������������������0000644�0001750�0001750�00000012565�14436425345�015051� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Declarations for error-reporting functions. Copyright (C) 1995-1997, 2003, 2006, 2008-2023 Free Software Foundation, Inc. This file is part of the GNU C Library. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _@GUARD_PREFIX@_ERROR_H /* No @PRAGMA_SYSTEM_HEADER@ here, because it would prevent -Wimplicit-fallthrough warnings for missing FALLTHROUGH after error(...) or error_at_line(...) invocations. */ /* The include_next requires a split double-inclusion guard. */ #if @HAVE_ERROR_H@ # @INCLUDE_NEXT@ @NEXT_ERROR_H@ #endif #ifndef _@GUARD_PREFIX@_ERROR_H #define _@GUARD_PREFIX@_ERROR_H /* This file uses _GL_ATTRIBUTE_FORMAT. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif /* Get 'unreachable'. */ #include <stddef.h> /* Get _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, _GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM. */ #include <stdio.h> /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ #if GNULIB_VFPRINTF_POSIX # define _GL_ATTRIBUTE_SPEC_PRINTF_ERROR _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD #else # define _GL_ATTRIBUTE_SPEC_PRINTF_ERROR _GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM #endif #ifdef __GNUC__ # define __gl_error_call(function, status, ...) \ ({ \ int const __errstatus = status; \ (function) (__errstatus, __VA_ARGS__); \ __errstatus != 0 ? unreachable () : (void) 0; \ }) #else # define __gl_error_call(function, status, ...) \ (function) (status, __VA_ARGS__) #endif #ifdef __cplusplus extern "C" { #endif /* Print a message with 'fprintf (stderr, FORMAT, ...)'; if ERRNUM is nonzero, follow it with ": " and strerror (ERRNUM). If STATUS is nonzero, terminate the program with 'exit (STATUS)'. */ #if @REPLACE_ERROR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef error # define error rpl_error # endif _GL_FUNCDECL_RPL (error, void, (int __status, int __errnum, const char *__format, ...) _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_ERROR, 3, 4))); _GL_CXXALIAS_RPL (error, void, (int __status, int __errnum, const char *__format, ...)); # ifndef _GL_NO_INLINE_ERROR # undef error # define error(status, ...) \ __gl_error_call (rpl_error, status, __VA_ARGS__) # endif #else # if ! @HAVE_ERROR@ _GL_FUNCDECL_SYS (error, void, (int __status, int __errnum, const char *__format, ...) _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_ERROR, 3, 4))); # endif _GL_CXXALIAS_SYS (error, void, (int __status, int __errnum, const char *__format, ...)); # ifndef _GL_NO_INLINE_ERROR # define error(status, ...) \ __gl_error_call (error, status, __VA_ARGS__) # endif #endif #if __GLIBC__ >= 2 _GL_CXXALIASWARN (error); #endif /* Likewise. If FILENAME is non-NULL, include FILENAME:LINENO: in the message. */ #if @REPLACE_ERROR_AT_LINE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef error_at_line # define error_at_line rpl_error_at_line # endif _GL_FUNCDECL_RPL (error_at_line, void, (int __status, int __errnum, const char *__filename, unsigned int __lineno, const char *__format, ...) _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_ERROR, 5, 6))); _GL_CXXALIAS_RPL (error_at_line, void, (int __status, int __errnum, const char *__filename, unsigned int __lineno, const char *__format, ...)); # ifndef _GL_NO_INLINE_ERROR # undef error_at_line # define error_at_line(status, ...) \ __gl_error_call (rpl_error_at_line, status, __VA_ARGS__) # endif #else # if ! @HAVE_ERROR_AT_LINE@ _GL_FUNCDECL_SYS (error_at_line, void, (int __status, int __errnum, const char *__filename, unsigned int __lineno, const char *__format, ...) _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_ERROR, 5, 6))); # endif _GL_CXXALIAS_SYS (error_at_line, void, (int __status, int __errnum, const char *__filename, unsigned int __lineno, const char *__format, ...)); # ifndef _GL_NO_INLINE_ERROR # define error_at_line(status, ...) \ __gl_error_call (error_at_line, status, __VA_ARGS__) # endif #endif _GL_CXXALIASWARN (error_at_line); /* If NULL, error will flush stdout, then print on stderr the program name, a colon and a space. Otherwise, error will call this function without parameters instead. */ extern void (*error_print_progname) (void); /* This variable is incremented each time 'error' is called. */ extern unsigned int error_message_count; /* Sometimes we want to have at most one error per line. This variable controls whether this mode is selected or not. */ extern int error_one_per_line; #ifdef __cplusplus } #endif #endif /* _@GUARD_PREFIX@_ERROR_H */ #endif /* _@GUARD_PREFIX@_ERROR_H */ �������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/mbsinit.c������������������������������������������������������������������������������0000644�0001750�0001750�00000004532�14436425346�014747� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test for initial conversion state. Copyright (C) 2008-2023 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2008. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #if GNULIB_defined_mbstate_t /* Platforms that lack mbsinit() also lack mbrlen(), mbrtowc(), mbsrtowcs() and wcrtomb(), wcsrtombs(). We assume that - sizeof (mbstate_t) >= 4, - only stateless encodings are supported (such as UTF-8 and EUC-JP, but not ISO-2022 variants), - for each encoding, the number of bytes for a wide character is <= 4. (This maximum is attained for UTF-8, GB18030, EUC-TW.) We define the meaning of mbstate_t as follows: - In mb -> wc direction, mbstate_t's first byte contains the number of buffered bytes (in the range 0..3), followed by up to 3 buffered bytes. See mbrtowc.c. - In wc -> mb direction, mbstate_t contains no information. In other words, it is always in the initial state. */ static_assert (sizeof (mbstate_t) >= 4); int mbsinit (const mbstate_t *ps) { const char *pstate = (const char *)ps; return pstate == NULL || pstate[0] == 0; } #else int mbsinit (const mbstate_t *ps) { # if defined _WIN32 && !defined __CYGWIN__ /* Native Windows. */ /* MSVC defines 'mbstate_t' as an 8-byte struct; the first 4 bytes matter. On mingw, 'mbstate_t' is sometimes defined as 'int', sometimes defined as an 8-byte struct, of which the first 4 bytes matter. */ return ps == NULL || *(const unsigned int *)ps == 0; # else /* Minix, HP-UX 11.00, Solaris 2.6, Interix, ... */ /* Maybe this definition works, maybe not... */ return ps == NULL || *(const char *)ps == 0; # endif } #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/stdio-write.c��������������������������������������������������������������������������0000644�0001750�0001750�00000016706�14436425346�015562� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* POSIX compatible FILE stream write function. Copyright (C) 2008-2023 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2008. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <stdio.h> /* Replace these functions only if module 'nonblocking' or module 'sigpipe' is requested. */ #if GNULIB_NONBLOCKING || GNULIB_SIGPIPE /* On native Windows platforms, SIGPIPE does not exist. When write() is called on a pipe with no readers, WriteFile() fails with error GetLastError() = ERROR_NO_DATA, and write() in consequence fails with error EINVAL. This write() function is at the basis of the function which flushes the buffer of a FILE stream. */ # if defined _WIN32 && ! defined __CYGWIN__ # include <errno.h> # include <signal.h> # include <io.h> # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> # if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" # else # include <io.h> # endif /* Don't assume that UNICODE is not defined. */ # undef GetNamedPipeHandleState # define GetNamedPipeHandleState GetNamedPipeHandleStateA # if GNULIB_NONBLOCKING # define CLEAR_ERRNO \ errno = 0; # define HANDLE_ENOSPC \ if (errno == ENOSPC && ferror (stream)) \ { \ int fd = fileno (stream); \ if (fd >= 0) \ { \ HANDLE h = (HANDLE) _get_osfhandle (fd); \ if (GetFileType (h) == FILE_TYPE_PIPE) \ { \ /* h is a pipe or socket. */ \ DWORD state; \ if (GetNamedPipeHandleState (h, &state, NULL, NULL, \ NULL, NULL, 0) \ && (state & PIPE_NOWAIT) != 0) \ /* h is a pipe in non-blocking mode. \ Change errno from ENOSPC to EAGAIN. */ \ errno = EAGAIN; \ } \ } \ } \ else # else # define CLEAR_ERRNO # define HANDLE_ENOSPC # endif # if GNULIB_SIGPIPE # define CLEAR_LastError \ SetLastError (0); # define HANDLE_ERROR_NO_DATA \ if (GetLastError () == ERROR_NO_DATA && ferror (stream)) \ { \ int fd = fileno (stream); \ if (fd >= 0 \ && GetFileType ((HANDLE) _get_osfhandle (fd)) \ == FILE_TYPE_PIPE) \ { \ /* Try to raise signal SIGPIPE. */ \ raise (SIGPIPE); \ /* If it is currently blocked or ignored, change errno from \ EINVAL to EPIPE. */ \ errno = EPIPE; \ } \ } \ else # else # define CLEAR_LastError # define HANDLE_ERROR_NO_DATA # endif # define CALL_WITH_SIGPIPE_EMULATION(RETTYPE, EXPRESSION, FAILED) \ if (ferror (stream)) \ return (EXPRESSION); \ else \ { \ RETTYPE ret; \ CLEAR_ERRNO \ CLEAR_LastError \ ret = (EXPRESSION); \ if (FAILED) \ { \ HANDLE_ENOSPC \ HANDLE_ERROR_NO_DATA \ ; \ } \ return ret; \ } # if !REPLACE_PRINTF_POSIX /* avoid collision with printf.c */ int printf (const char *format, ...) { int retval; va_list args; va_start (args, format); retval = vfprintf (stdout, format, args); va_end (args); return retval; } # endif # if !REPLACE_FPRINTF_POSIX /* avoid collision with fprintf.c */ int fprintf (FILE *stream, const char *format, ...) { int retval; va_list args; va_start (args, format); retval = vfprintf (stream, format, args); va_end (args); return retval; } # endif # if !REPLACE_VPRINTF_POSIX /* avoid collision with vprintf.c */ int vprintf (const char *format, va_list args) { return vfprintf (stdout, format, args); } # endif # if !REPLACE_VFPRINTF_POSIX /* avoid collision with vfprintf.c */ int vfprintf (FILE *stream, const char *format, va_list args) #undef vfprintf { CALL_WITH_SIGPIPE_EMULATION (int, vfprintf (stream, format, args), ret == EOF) } # endif int putchar (int c) { return fputc (c, stdout); } int fputc (int c, FILE *stream) #undef fputc { CALL_WITH_SIGPIPE_EMULATION (int, fputc (c, stream), ret == EOF) } int fputs (const char *string, FILE *stream) #undef fputs { CALL_WITH_SIGPIPE_EMULATION (int, fputs (string, stream), ret == EOF) } int puts (const char *string) #undef puts { FILE *stream = stdout; CALL_WITH_SIGPIPE_EMULATION (int, puts (string), ret == EOF) } size_t fwrite (const void *ptr, size_t s, size_t n, FILE *stream) #undef fwrite { CALL_WITH_SIGPIPE_EMULATION (size_t, fwrite (ptr, s, n, stream), ret < n) } # endif #endif ����������������������������������������������������������rush-2.4/gnu/dirname.h������������������������������������������������������������������������������0000644�0001750�0001750�00000003302�14436425345�014717� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Take file names apart into directory and base names. Copyright (C) 1998, 2001, 2003-2006, 2009-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef DIRNAME_H_ # define DIRNAME_H_ 1 /* This file uses _GL_ATTRIBUTE_MALLOC, _GL_ATTRIBUTE_PURE, _GL_ATTRIBUTE_RETURNS_NONNULL. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif # include <stdlib.h> # include "filename.h" # include "basename-lgpl.h" # ifndef DIRECTORY_SEPARATOR # define DIRECTORY_SEPARATOR '/' # endif #ifdef __cplusplus extern "C" { #endif # if GNULIB_DIRNAME char *base_name (char const *file) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_RETURNS_NONNULL; char *dir_name (char const *file) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_RETURNS_NONNULL; # endif char *mdir_name (char const *file) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; size_t dir_len (char const *file) _GL_ATTRIBUTE_PURE; bool strip_trailing_slashes (char *file); #ifdef __cplusplus } /* extern "C" */ #endif #endif /* not DIRNAME_H_ */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/strerror.c�����������������������������������������������������������������������������0000644�0001750�0001750�00000004057�14436425346�015166� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* strerror.c --- POSIX compatible system error routine Copyright (C) 2007-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <string.h> #include <errno.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include "intprops.h" #include "strerror-override.h" /* Use the system functions, not the gnulib overrides in this file. */ #undef sprintf char * strerror (int n) #undef strerror { static char buf[STACKBUF_LEN]; size_t len; /* Cast away const, due to the historical signature of strerror; callers should not be modifying the string. */ const char *msg = strerror_override (n); if (msg) return (char *) msg; msg = strerror (n); /* Our strerror_r implementation might use the system's strerror buffer, so all other clients of strerror have to see the error copied into a buffer that we manage. This is not thread-safe, even if the system strerror is, but portable programs shouldn't be using strerror if they care about thread-safety. */ if (!msg || !*msg) { static char const fmt[] = "Unknown error %d"; static_assert (sizeof buf >= sizeof (fmt) + INT_STRLEN_BOUND (n)); sprintf (buf, fmt, n); errno = EINVAL; return buf; } /* Fix STACKBUF_LEN if this ever aborts. */ len = strlen (msg); if (sizeof buf <= len) abort (); memcpy (buf, msg, len + 1); return buf; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/stddef.in.h����������������������������������������������������������������������������0000644�0001750�0001750�00000014203�14436425346�015161� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A substitute for POSIX 2008 <stddef.h>, for platforms that have issues. Copyright (C) 2009-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Eric Blake. */ /* * POSIX 2008 and ISO C 23 <stddef.h> for platforms that have issues. * <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/stddef.h.html> */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if defined __need_wchar_t || defined __need_size_t \ || defined __need_ptrdiff_t || defined __need_NULL \ || defined __need_wint_t /* Special invocation convention inside gcc header files. In particular, gcc provides a version of <stddef.h> that blindly redefines NULL even when __need_wint_t was defined, even though wint_t is not normally provided by <stddef.h>. Hence, we must remember if special invocation has ever been used to obtain wint_t, in which case we need to clean up NULL yet again. */ # if !(defined _@GUARD_PREFIX@_STDDEF_H && defined _@GUARD_PREFIX@_STDDEF_WINT_T) # ifdef __need_wint_t # define _@GUARD_PREFIX@_STDDEF_WINT_T # endif # @INCLUDE_NEXT@ @NEXT_STDDEF_H@ /* On TinyCC, make sure that the macros that indicate the special invocation convention get undefined. */ # undef __need_wchar_t # undef __need_size_t # undef __need_ptrdiff_t # undef __need_NULL # undef __need_wint_t # endif #else /* Normal invocation convention. */ # ifndef _@GUARD_PREFIX@_STDDEF_H /* On AIX 7.2, with xlc in 64-bit mode, <stddef.h> defines max_align_t to a type with alignment 4, but 'long' has alignment 8. */ # if defined _AIX && defined __LP64__ # if !GNULIB_defined_max_align_t # ifdef _MAX_ALIGN_T /* /usr/include/stddef.h has already defined max_align_t. Override it. */ typedef long rpl_max_align_t; # define max_align_t rpl_max_align_t # else /* Prevent /usr/include/stddef.h from defining max_align_t. */ typedef long max_align_t; # define _MAX_ALIGN_T # endif # define __CLANG_MAX_ALIGN_T_DEFINED # define GNULIB_defined_max_align_t 1 # endif # endif /* The include_next requires a split double-inclusion guard. */ # @INCLUDE_NEXT@ @NEXT_STDDEF_H@ /* On NetBSD 5.0, the definition of NULL lacks proper parentheses. */ # if (@REPLACE_NULL@ \ && (!defined _@GUARD_PREFIX@_STDDEF_H || defined _@GUARD_PREFIX@_STDDEF_WINT_T)) # undef NULL # ifdef __cplusplus /* ISO C++ says that the macro NULL must expand to an integer constant expression, hence '((void *) 0)' is not allowed in C++. */ # if __GNUG__ >= 3 /* GNU C++ has a __null macro that behaves like an integer ('int' or 'long') but has the same size as a pointer. Use that, to avoid warnings. */ # define NULL __null # else # define NULL 0L # endif # else # define NULL ((void *) 0) # endif # endif # ifndef _@GUARD_PREFIX@_STDDEF_H # define _@GUARD_PREFIX@_STDDEF_H /* This file uses _Noreturn. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif /* Some platforms lack wchar_t. */ #if !@HAVE_WCHAR_T@ # define wchar_t int #endif /* Some platforms lack max_align_t. The check for _GCC_MAX_ALIGN_T is a hack in case the configure-time test was done with g++ even though we are currently compiling with gcc. On MSVC, max_align_t is defined only in C++ mode, after <cstddef> was included. Its definition is good since it has an alignment of 8 (on x86 and x86_64). Similarly on OS/2 kLIBC. */ #if (defined _MSC_VER || (defined __KLIBC__ && !defined __LIBCN__)) \ && defined __cplusplus # include <cstddef> #else # if ! (@HAVE_MAX_ALIGN_T@ || (defined _GCC_MAX_ALIGN_T && !defined __clang__)) # if !GNULIB_defined_max_align_t /* On the x86, the maximum storage alignment of double, long, etc. is 4, but GCC's C11 ABI for x86 says that max_align_t has an alignment of 8, and the C11 standard allows this. Work around this problem by using __alignof__ (which returns 8 for double) rather than _Alignof (which returns 4), and align each union member accordingly. */ # if defined __GNUC__ || (__clang_major__ >= 4) # define _GL_STDDEF_ALIGNAS(type) \ __attribute__ ((__aligned__ (__alignof__ (type)))) # else # define _GL_STDDEF_ALIGNAS(type) /* */ # endif typedef union { char *__p _GL_STDDEF_ALIGNAS (char *); double __d _GL_STDDEF_ALIGNAS (double); long double __ld _GL_STDDEF_ALIGNAS (long double); long int __i _GL_STDDEF_ALIGNAS (long int); } rpl_max_align_t; # define max_align_t rpl_max_align_t # define __CLANG_MAX_ALIGN_T_DEFINED # define GNULIB_defined_max_align_t 1 # endif # endif #endif /* ISO C 23 § 7.21.1 The unreachable macro */ #ifndef unreachable /* Code borrowed from verify.h. */ # ifndef _GL_HAS_BUILTIN_UNREACHABLE # if defined __clang_major__ && __clang_major__ < 5 # define _GL_HAS_BUILTIN_UNREACHABLE 0 # elif 4 < __GNUC__ + (5 <= __GNUC_MINOR__) # define _GL_HAS_BUILTIN_UNREACHABLE 1 # elif defined __has_builtin # define _GL_HAS_BUILTIN_UNREACHABLE __has_builtin (__builtin_unreachable) # else # define _GL_HAS_BUILTIN_UNREACHABLE 0 # endif # endif # if _GL_HAS_BUILTIN_UNREACHABLE # define unreachable() __builtin_unreachable () # elif 1200 <= _MSC_VER # define unreachable() __assume (0) # else /* Declare abort(), without including <stdlib.h>. */ extern # if defined __cplusplus "C" # endif _Noreturn void abort (void) # if defined __cplusplus && (__GLIBC__ >= 2) throw () # endif ; # define unreachable() abort () # endif #endif # endif /* _@GUARD_PREFIX@_STDDEF_H */ # endif /* _@GUARD_PREFIX@_STDDEF_H */ #endif /* __need_XXX */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/getprogname.c��������������������������������������������������������������������������0000644�0001750�0001750�00000023610�14436425345�015607� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Program name management. Copyright (C) 2016-2023 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. Also get __argv declaration. */ #include <stdlib.h> #include <errno.h> /* get program_invocation_name declaration */ #ifdef _AIX # include <unistd.h> # include <procinfo.h> # include <string.h> #endif #ifdef __MVS__ # ifndef _OPEN_SYS # define _OPEN_SYS # endif # include <string.h> # include <sys/ps.h> #endif #ifdef __hpux # include <unistd.h> # include <sys/param.h> # include <sys/pstat.h> # include <string.h> #endif #if defined __sgi || defined __osf__ # include <string.h> # include <unistd.h> # include <stdio.h> # include <fcntl.h> # include <sys/procfs.h> #endif #if defined __SCO_VERSION__ || defined __sysv5__ # include <fcntl.h> # include <string.h> #endif #include "basename-lgpl.h" #ifndef HAVE_GETPROGNAME /* not Mac OS X, FreeBSD, NetBSD, OpenBSD >= 5.4, Solaris >= 11, Cygwin, Android API level >= 21 */ char const * getprogname (void) { # if HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME /* glibc, BeOS */ /* https://www.gnu.org/software/libc/manual/html_node/Error-Messages.html */ return program_invocation_short_name; # elif HAVE_DECL_PROGRAM_INVOCATION_NAME /* glibc, BeOS */ /* https://www.gnu.org/software/libc/manual/html_node/Error-Messages.html */ return last_component (program_invocation_name); # elif HAVE_GETEXECNAME /* Solaris */ /* https://docs.oracle.com/cd/E19253-01/816-5168/6mbb3hrb1/index.html */ const char *p = getexecname (); if (!p) p = "?"; return last_component (p); # elif HAVE_DECL___ARGV /* mingw, MSVC */ /* https://docs.microsoft.com/en-us/cpp/c-runtime-library/argc-argv-wargv */ const char *p = __argv && __argv[0] ? __argv[0] : "?"; return last_component (p); # elif HAVE_VAR___PROGNAME /* OpenBSD, Android, QNX */ /* https://man.openbsd.org/style.9 */ /* http://www.qnx.de/developers/docs/6.5.0/index.jsp?topic=%2Fcom.qnx.doc.neutrino_lib_ref%2Fp%2F__progname.html */ /* Be careful to declare this only when we absolutely need it (OpenBSD 5.1), rather than when it's available. Otherwise, its mere declaration makes program_invocation_short_name malfunction (have zero length) with Fedora 25's glibc. */ extern char *__progname; const char *p = __progname; # if defined __ANDROID__ return last_component (p); # else return p && p[0] ? p : "?"; # endif # elif _AIX /* AIX */ /* Idea by Bastien ROUCARIÈS, https://lists.gnu.org/r/bug-gnulib/2010-12/msg00095.html Reference: https://www.ibm.com/support/knowledgecenter/en/ssw_aix_61/com.ibm.aix.basetrf1/getprocs.htm */ static char *p; static int first = 1; if (first) { first = 0; pid_t pid = getpid (); struct procentry64 procs; p = (0 < getprocs64 (&procs, sizeof procs, NULL, 0, &pid, 1) ? strdup (procs.pi_comm) : NULL); if (!p) p = "?"; } return p; # elif defined __hpux static char *p; static int first = 1; if (first) { first = 0; pid_t pid = getpid (); struct pst_status status; if (pstat_getproc (&status, sizeof status, 0, pid) > 0) { char *ucomm = status.pst_ucomm; char *cmd = status.pst_cmd; if (strlen (ucomm) < PST_UCOMMLEN - 1) p = ucomm; else { /* ucomm is truncated to length PST_UCOMMLEN - 1. Look at cmd instead. */ char *space = strchr (cmd, ' '); if (space != NULL) *space = '\0'; p = strrchr (cmd, '/'); if (p != NULL) p++; else p = cmd; if (strlen (p) > PST_UCOMMLEN - 1 && memcmp (p, ucomm, PST_UCOMMLEN - 1) == 0) /* p is less truncated than ucomm. */ ; else p = ucomm; } p = strdup (p); } else { # if !defined __LP64__ /* Support for 32-bit programs running in 64-bit HP-UX. The documented way to do this is to use the same source code as above, but in a compilation unit where '#define _PSTAT64 1' is in effect. I prefer a single compilation unit; the struct size and the offsets are not going to change. */ char status64[1216]; if (__pstat_getproc64 (status64, sizeof status64, 0, pid) > 0) { char *ucomm = status64 + 288; char *cmd = status64 + 168; if (strlen (ucomm) < PST_UCOMMLEN - 1) p = ucomm; else { /* ucomm is truncated to length PST_UCOMMLEN - 1. Look at cmd instead. */ char *space = strchr (cmd, ' '); if (space != NULL) *space = '\0'; p = strrchr (cmd, '/'); if (p != NULL) p++; else p = cmd; if (strlen (p) > PST_UCOMMLEN - 1 && memcmp (p, ucomm, PST_UCOMMLEN - 1) == 0) /* p is less truncated than ucomm. */ ; else p = ucomm; } p = strdup (p); } else # endif p = NULL; } if (!p) p = "?"; } return p; # elif __MVS__ /* z/OS */ /* https://www.ibm.com/support/knowledgecenter/SSLTBW_2.1.0/com.ibm.zos.v2r1.bpxbd00/rtwgetp.htm */ static char *p = "?"; static int first = 1; if (first) { pid_t pid = getpid (); int token; W_PSPROC buf; first = 0; memset (&buf, 0, sizeof(buf)); buf.ps_cmdptr = (char *) malloc (buf.ps_cmdlen = PS_CMDBLEN_LONG); buf.ps_conttyptr = (char *) malloc (buf.ps_conttylen = PS_CONTTYBLEN); buf.ps_pathptr = (char *) malloc (buf.ps_pathlen = PS_PATHBLEN); if (buf.ps_cmdptr && buf.ps_conttyptr && buf.ps_pathptr) { for (token = 0; token >= 0; token = w_getpsent (token, &buf, sizeof(buf))) { if (token > 0 && buf.ps_pid == pid) { char *s = strdup (last_component (buf.ps_pathptr)); if (s) { # if defined __XPLINK__ && __CHARSET_LIB == 1 /* The compiler option -qascii is in use. https://makingdeveloperslivesbetter.wordpress.com/2022/01/07/is-z-os-ascii-or-ebcdic-yes/ https://www.ibm.com/docs/en/zos/2.5.0?topic=features-macros-related-compiler-option-settings So, convert the result from EBCDIC to ASCII. https://www.ibm.com/docs/en/zos/2.5.0?topic=functions-e2a-s-convert-string-from-ebcdic-ascii */ if (__e2a_s (s) == (size_t)-1) free (s); else # endif p = s; } break; } } } free (buf.ps_cmdptr); free (buf.ps_conttyptr); free (buf.ps_pathptr); } return p; # elif defined __sgi || defined __osf__ /* IRIX or Tru64 */ char filename[50]; int fd; # if defined __sgi sprintf (filename, "/proc/pinfo/%d", (int) getpid ()); # else sprintf (filename, "/proc/%d", (int) getpid ()); # endif fd = open (filename, O_RDONLY | O_CLOEXEC); if (0 <= fd) { prpsinfo_t buf; int ioctl_ok = 0 <= ioctl (fd, PIOCPSINFO, &buf); close (fd); if (ioctl_ok) { char *name = buf.pr_fname; size_t namesize = sizeof buf.pr_fname; /* It may not be NUL-terminated. */ char *namenul = memchr (name, '\0', namesize); size_t namelen = namenul ? namenul - name : namesize; char *namecopy = malloc (namelen + 1); if (namecopy) { namecopy[namelen] = '\0'; return memcpy (namecopy, name, namelen); } } } return NULL; # elif defined __SCO_VERSION__ || defined __sysv5__ /* SCO OpenServer6/UnixWare */ char buf[80]; int fd; sprintf (buf, "/proc/%d/cmdline", getpid()); fd = open (buf, O_RDONLY); if (0 <= fd) { size_t n = read (fd, buf, 79); if (n > 0) { buf[n] = '\0'; /* Guarantee null-termination */ char *progname; progname = strrchr (buf, '/'); if (progname) { progname = progname + 1; /* Skip the '/' */ } else { progname = buf; } char *ret; ret = malloc (strlen (progname) + 1); if (ret) { strcpy (ret, progname); return ret; } } close (fd); } return "?"; # else # error "getprogname module not ported to this OS" # endif } #endif /* * Hey Emacs! * Local Variables: * coding: utf-8 * End: */ ������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/locale.in.h����������������������������������������������������������������������������0000644�0001750�0001750�00000024245�14436425346�015156� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A POSIX <locale.h>. Copyright (C) 2007-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if (defined _WIN32 && !defined __CYGWIN__ && defined __need_locale_t) \ || defined _GL_ALREADY_INCLUDING_LOCALE_H /* Special invocation convention: - Inside mingw header files, - To handle Solaris header files (through Solaris 10) when combined with gettext's libintl.h. */ #@INCLUDE_NEXT@ @NEXT_LOCALE_H@ #else /* Normal invocation convention. */ #ifndef _@GUARD_PREFIX@_LOCALE_H #define _GL_ALREADY_INCLUDING_LOCALE_H /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_LOCALE_H@ #undef _GL_ALREADY_INCLUDING_LOCALE_H #ifndef _@GUARD_PREFIX@_LOCALE_H #define _@GUARD_PREFIX@_LOCALE_H /* This file uses GNULIB_POSIXCHECK, HAVE_RAW_DECL_*. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif /* NetBSD 5.0 mis-defines NULL. */ #include <stddef.h> /* Mac OS X 10.5 defines the locale_t type in <xlocale.h>. */ #if @HAVE_XLOCALE_H@ # include <xlocale.h> #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* The LC_MESSAGES locale category is specified in POSIX, but not in ISO C. On systems that don't define it, use the same value as GNU libintl. */ #if !defined LC_MESSAGES # define LC_MESSAGES 1729 #endif /* On native Windows with MSVC, 'struct lconv' lacks the members int_p_* and int_n_*. Instead of overriding 'struct lconv', merely define these member names as macros. This avoids trouble in C++ mode. */ #if defined _MSC_VER # define int_p_cs_precedes p_cs_precedes # define int_p_sign_posn p_sign_posn # define int_p_sep_by_space p_sep_by_space # define int_n_cs_precedes n_cs_precedes # define int_n_sign_posn n_sign_posn # define int_n_sep_by_space n_sep_by_space #endif /* Bionic libc's 'struct lconv' is just a dummy. */ #if @REPLACE_STRUCT_LCONV@ # define lconv rpl_lconv struct lconv { /* All 'char *' are actually 'const char *'. */ /* Members that depend on the LC_NUMERIC category of the locale. See <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap07.html#tag_07_03_04> */ /* Symbol used as decimal point. */ char *decimal_point; /* Symbol used to separate groups of digits to the left of the decimal point. */ char *thousands_sep; /* Definition of the size of groups of digits to the left of the decimal point. */ char *grouping; /* Members that depend on the LC_MONETARY category of the locale. See <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap07.html#tag_07_03_03> */ /* Symbol used as decimal point. */ char *mon_decimal_point; /* Symbol used to separate groups of digits to the left of the decimal point. */ char *mon_thousands_sep; /* Definition of the size of groups of digits to the left of the decimal point. */ char *mon_grouping; /* Sign used to indicate a value >= 0. */ char *positive_sign; /* Sign used to indicate a value < 0. */ char *negative_sign; /* For formatting local currency. */ /* Currency symbol (3 characters) followed by separator (1 character). */ char *currency_symbol; /* Number of digits after the decimal point. */ char frac_digits; /* For values >= 0: 1 if the currency symbol precedes the number, 0 if it comes after the number. */ char p_cs_precedes; /* For values >= 0: Position of the sign. */ char p_sign_posn; /* For values >= 0: Placement of spaces between currency symbol, sign, and number. */ char p_sep_by_space; /* For values < 0: 1 if the currency symbol precedes the number, 0 if it comes after the number. */ char n_cs_precedes; /* For values < 0: Position of the sign. */ char n_sign_posn; /* For values < 0: Placement of spaces between currency symbol, sign, and number. */ char n_sep_by_space; /* For formatting international currency. */ /* Currency symbol (3 characters) followed by separator (1 character). */ char *int_curr_symbol; /* Number of digits after the decimal point. */ char int_frac_digits; /* For values >= 0: 1 if the currency symbol precedes the number, 0 if it comes after the number. */ char int_p_cs_precedes; /* For values >= 0: Position of the sign. */ char int_p_sign_posn; /* For values >= 0: Placement of spaces between currency symbol, sign, and number. */ char int_p_sep_by_space; /* For values < 0: 1 if the currency symbol precedes the number, 0 if it comes after the number. */ char int_n_cs_precedes; /* For values < 0: Position of the sign. */ char int_n_sign_posn; /* For values < 0: Placement of spaces between currency symbol, sign, and number. */ char int_n_sep_by_space; }; #endif #if @GNULIB_LOCALECONV@ # if @REPLACE_LOCALECONV@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef localeconv # define localeconv rpl_localeconv # endif _GL_FUNCDECL_RPL (localeconv, struct lconv *, (void)); _GL_CXXALIAS_RPL (localeconv, struct lconv *, (void)); # else _GL_CXXALIAS_SYS (localeconv, struct lconv *, (void)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (localeconv); # endif #elif @REPLACE_STRUCT_LCONV@ # undef localeconv # define localeconv localeconv_used_without_requesting_gnulib_module_localeconv #elif defined GNULIB_POSIXCHECK # undef localeconv # if HAVE_RAW_DECL_LOCALECONV _GL_WARN_ON_USE (localeconv, "localeconv returns too few information on some platforms - " "use gnulib module localeconv for portability"); # endif #endif #if @GNULIB_SETLOCALE@ # if @REPLACE_SETLOCALE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef setlocale # define setlocale rpl_setlocale # define GNULIB_defined_setlocale 1 # endif _GL_FUNCDECL_RPL (setlocale, char *, (int category, const char *locale)); _GL_CXXALIAS_RPL (setlocale, char *, (int category, const char *locale)); # else _GL_CXXALIAS_SYS (setlocale, char *, (int category, const char *locale)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (setlocale); # endif #elif defined GNULIB_POSIXCHECK # undef setlocale # if HAVE_RAW_DECL_SETLOCALE _GL_WARN_ON_USE (setlocale, "setlocale works differently on native Windows - " "use gnulib module setlocale for portability"); # endif #endif #if @GNULIB_SETLOCALE_NULL@ /* Included here for convenience. */ # include "setlocale_null.h" #endif #if /*@GNULIB_NEWLOCALE@ ||*/ (@GNULIB_LOCALENAME@ && @LOCALENAME_ENHANCE_LOCALE_FUNCS@ && @HAVE_NEWLOCALE@) # if @REPLACE_NEWLOCALE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef newlocale # define newlocale rpl_newlocale # define GNULIB_defined_newlocale 1 # endif _GL_FUNCDECL_RPL (newlocale, locale_t, (int category_mask, const char *name, locale_t base) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (newlocale, locale_t, (int category_mask, const char *name, locale_t base)); # else # if @HAVE_NEWLOCALE@ _GL_CXXALIAS_SYS (newlocale, locale_t, (int category_mask, const char *name, locale_t base)); # endif # endif # if __GLIBC__ >= 2 && @HAVE_NEWLOCALE@ _GL_CXXALIASWARN (newlocale); # endif # if @HAVE_NEWLOCALE@ || @REPLACE_NEWLOCALE@ # ifndef HAVE_WORKING_NEWLOCALE # define HAVE_WORKING_NEWLOCALE 1 # endif # endif #elif defined GNULIB_POSIXCHECK # undef newlocale # if HAVE_RAW_DECL_NEWLOCALE _GL_WARN_ON_USE (newlocale, "newlocale is not portable"); # endif #endif #if @GNULIB_DUPLOCALE@ || (@GNULIB_LOCALENAME@ && @LOCALENAME_ENHANCE_LOCALE_FUNCS@ && @HAVE_DUPLOCALE@) # if @HAVE_DUPLOCALE@ /* locale_t may be undefined if !@HAVE_DUPLOCALE@. */ # if @REPLACE_DUPLOCALE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef duplocale # define duplocale rpl_duplocale # define GNULIB_defined_duplocale 1 # endif _GL_FUNCDECL_RPL (duplocale, locale_t, (locale_t locale) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (duplocale, locale_t, (locale_t locale)); # else _GL_CXXALIAS_SYS (duplocale, locale_t, (locale_t locale)); # endif # endif # if __GLIBC__ >= 2 && @HAVE_DUPLOCALE@ _GL_CXXALIASWARN (duplocale); # endif # if @HAVE_DUPLOCALE@ # ifndef HAVE_WORKING_DUPLOCALE # define HAVE_WORKING_DUPLOCALE 1 # endif # endif #elif defined GNULIB_POSIXCHECK # undef duplocale # if HAVE_RAW_DECL_DUPLOCALE _GL_WARN_ON_USE (duplocale, "duplocale is buggy on some glibc systems - " "use gnulib module duplocale for portability"); # endif #endif #if /*@GNULIB_FREELOCALE@ ||*/ (@GNULIB_LOCALENAME@ && @LOCALENAME_ENHANCE_LOCALE_FUNCS@ && @HAVE_FREELOCALE@) # if @REPLACE_FREELOCALE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef freelocale # define freelocale rpl_freelocale # define GNULIB_defined_freelocale 1 # endif _GL_FUNCDECL_RPL (freelocale, void, (locale_t locale) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (freelocale, void, (locale_t locale)); # else # if @HAVE_FREELOCALE@ /* Need to cast, because on FreeBSD and Mac OS X 10.13, the return type is int. */ _GL_CXXALIAS_SYS_CAST (freelocale, void, (locale_t locale)); # endif # endif # if __GLIBC__ >= 2 && @HAVE_FREELOCALE@ _GL_CXXALIASWARN (freelocale); # endif #elif defined GNULIB_POSIXCHECK # undef freelocale # if HAVE_RAW_DECL_FREELOCALE _GL_WARN_ON_USE (freelocale, "freelocale is not portable"); # endif #endif #endif /* _@GUARD_PREFIX@_LOCALE_H */ #endif /* _@GUARD_PREFIX@_LOCALE_H */ #endif /* !(__need_locale_t || _GL_ALREADY_INCLUDING_LOCALE_H) */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/getopt-pfx-core.h����������������������������������������������������������������������0000644�0001750�0001750�00000005022�14436425345�016324� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* getopt (basic, portable features) gnulib wrapper header. Copyright (C) 1989-2023 Free Software Foundation, Inc. This file is part of gnulib. Unlike most of the getopt implementation, it is NOT shared with the GNU C Library. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _GETOPT_PFX_CORE_H #define _GETOPT_PFX_CORE_H 1 /* This header should not be used directly; include getopt.h or unistd.h instead. It does not have a protective #error, because the guard macro for getopt.h in gnulib is not fixed. */ /* Standalone applications should #define __GETOPT_PREFIX to an identifier that prefixes the external functions and variables defined in getopt-core.h and getopt-ext.h. Systematically rename identifiers so that they do not collide with the system functions and variables. Renaming avoids problems with some compilers and linkers. */ #ifdef __GETOPT_PREFIX # ifndef __GETOPT_ID # define __GETOPT_CONCAT(x, y) x ## y # define __GETOPT_XCONCAT(x, y) __GETOPT_CONCAT (x, y) # define __GETOPT_ID(y) __GETOPT_XCONCAT (__GETOPT_PREFIX, y) # endif # undef getopt # undef optarg # undef opterr # undef optind # undef optopt # define getopt __GETOPT_ID (getopt) # define optarg __GETOPT_ID (optarg) # define opterr __GETOPT_ID (opterr) # define optind __GETOPT_ID (optind) # define optopt __GETOPT_ID (optopt) /* Work around a problem on macOS, which declares getopt with a trailing __DARWIN_ALIAS(getopt) that would expand to something like __asm("_" "rpl_getopt" "$UNIX2003") were it not for the following hack to suppress the macOS declaration <https://bugs.gnu.org/40205>. */ # ifdef __APPLE__ # define _GETOPT # endif /* The system's getopt.h may have already included getopt-core.h to declare the unprefixed identifiers. Undef _GETOPT_CORE_H so that getopt-core.h declares them with prefixes. */ # undef _GETOPT_CORE_H #endif #include <getopt-core.h> #endif /* _GETOPT_PFX_CORE_H */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/uinttostr.c����������������������������������������������������������������������������0000644�0001750�0001750�00000001532�14436425346�015352� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert 'unsigned int' integer to printable string. Copyright (C) 2006-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #define anytostr uinttostr #define inttype unsigned int #include "anytostr.c" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/idx.h����������������������������������������������������������������������������������0000644�0001750�0001750�00000012062�14436425345�014067� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A type for indices and sizes. Copyright (C) 2020-2023 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ #ifndef _IDX_H #define _IDX_H /* Get ptrdiff_t. */ #include <stddef.h> /* Get PTRDIFF_MAX. */ #include <stdint.h> /* The type 'idx_t' holds an (array) index or an (object) size. Its implementation promotes to a signed integer type, which can hold the values 0..2^63-1 (on 64-bit platforms) or 0..2^31-1 (on 32-bit platforms). Why a signed integer type? * Security: Signed types can be checked for overflow via '-fsanitize=undefined', but unsigned types cannot. * Comparisons without surprises: ISO C99 § 6.3.1.8 specifies a few surprising results for comparisons, such as (int) -3 < (unsigned long) 7 => false (int) -3 < (unsigned int) 7 => false and on 32-bit machines: (long) -3 < (unsigned int) 7 => false This is surprising because the natural comparison order is by value in the realm of infinite-precision signed integers (ℤ). The best way to get rid of such surprises is to use signed types for numerical integer values, and use unsigned types only for bit masks and enums. Why not use 'size_t' directly? * Because 'size_t' is an unsigned type, and a signed type is better. See above. Why not use 'ssize_t'? * 'ptrdiff_t' is more portable; it is standardized by ISO C whereas 'ssize_t' is standardized only by POSIX. * 'ssize_t' is not required to be as wide as 'size_t', and some now-obsolete POSIX platforms had 'size_t' wider than 'ssize_t'. * Conversely, some now-obsolete platforms had 'ptrdiff_t' wider than 'size_t', which can be a win and conforms to POSIX. Won't this cause a problem with objects larger than PTRDIFF_MAX? * Typical modern or large platforms do not allocate such objects, so this is not much of a problem in practice; for example, you can safely write 'idx_t len = strlen (s);'. To port to older small platforms where allocations larger than PTRDIFF_MAX could in theory be a problem, you can use Gnulib's ialloc module, or functions like ximalloc in Gnulib's xalloc module. Why not use 'ptrdiff_t' directly? * Maintainability: When reading and modifying code, it helps to know that a certain variable cannot have negative values. For example, when you have a loop int n = ...; for (int i = 0; i < n; i++) ... or ptrdiff_t n = ...; for (ptrdiff_t i = 0; i < n; i++) ... you have to ask yourself "what if n < 0?". Whereas in idx_t n = ...; for (idx_t i = 0; i < n; i++) ... you know that this case cannot happen. Similarly, when a programmer writes idx_t = ptr2 - ptr1; there is an implied assertion that ptr1 and ptr2 point into the same object and that ptr1 <= ptr2. * Being future-proof: In the future, range types (integers which are constrained to a certain range of values) may be added to C compilers or to the C standard. Several programming languages (Ada, Haskell, Common Lisp, Pascal) already have range types. Such range types may help producing good code and good warnings. The type 'idx_t' could then be typedef'ed to a range type that is signed after promotion. */ /* In the future, idx_t could be typedef'ed to a signed range type. The clang "extended integer types", supported in Clang 11 or newer <https://clang.llvm.org/docs/LanguageExtensions.html#extended-integer-types>, are a special case of range types. However, these types don't support binary operators with plain integer types (e.g. expressions such as x > 1). Therefore, they don't behave like signed types (and not like unsigned types either). So, we cannot use them here. */ /* Use the signed type 'ptrdiff_t'. */ /* Note: ISO C does not mandate that 'size_t' and 'ptrdiff_t' have the same size, but it is so on all platforms we have seen since 1990. */ typedef ptrdiff_t idx_t; /* IDX_MAX is the maximum value of an idx_t. */ #define IDX_MAX PTRDIFF_MAX /* So far no need has been found for an IDX_WIDTH macro. Perhaps there should be another macro IDX_VALUE_BITS that does not count the sign bit and is therefore one less than PTRDIFF_WIDTH. */ #endif /* _IDX_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/hard-locale.h��������������������������������������������������������������������������0000644�0001750�0001750�00000002260�14436425345�015455� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine whether a locale is hard. Copyright (C) 1999, 2003-2004, 2009-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef HARD_LOCALE_H_ # define HARD_LOCALE_H_ 1 /* Return true if the specified CATEGORY of the current locale is hard, i.e. different from the C or POSIX locale that has a fixed behavior. CATEGORY must be one of the LC_* values, but not LC_ALL. Note: This function uses the current global locale; it ignores the per-thread locale. */ extern bool hard_locale (int category); #endif /* HARD_LOCALE_H_ */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/c++defs.h������������������������������������������������������������������������������0000644�0001750�0001750�00000036154�14436425345�014525� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* C++ compatible function declaration macros. Copyright (C) 2010-2023 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _GL_CXXDEFS_H #define _GL_CXXDEFS_H /* Begin/end the GNULIB_NAMESPACE namespace. */ #if defined __cplusplus && defined GNULIB_NAMESPACE # define _GL_BEGIN_NAMESPACE namespace GNULIB_NAMESPACE { # define _GL_END_NAMESPACE } #else # define _GL_BEGIN_NAMESPACE # define _GL_END_NAMESPACE #endif /* The three most frequent use cases of these macros are: * For providing a substitute for a function that is missing on some platforms, but is declared and works fine on the platforms on which it exists: #if @GNULIB_FOO@ # if !@HAVE_FOO@ _GL_FUNCDECL_SYS (foo, ...); # endif _GL_CXXALIAS_SYS (foo, ...); _GL_CXXALIASWARN (foo); #elif defined GNULIB_POSIXCHECK ... #endif * For providing a replacement for a function that exists on all platforms, but is broken/insufficient and needs to be replaced on some platforms: #if @GNULIB_FOO@ # if @REPLACE_FOO@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef foo # define foo rpl_foo # endif _GL_FUNCDECL_RPL (foo, ...); _GL_CXXALIAS_RPL (foo, ...); # else _GL_CXXALIAS_SYS (foo, ...); # endif _GL_CXXALIASWARN (foo); #elif defined GNULIB_POSIXCHECK ... #endif * For providing a replacement for a function that exists on some platforms but is broken/insufficient and needs to be replaced on some of them and is additionally either missing or undeclared on some other platforms: #if @GNULIB_FOO@ # if @REPLACE_FOO@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef foo # define foo rpl_foo # endif _GL_FUNCDECL_RPL (foo, ...); _GL_CXXALIAS_RPL (foo, ...); # else # if !@HAVE_FOO@ or if !@HAVE_DECL_FOO@ _GL_FUNCDECL_SYS (foo, ...); # endif _GL_CXXALIAS_SYS (foo, ...); # endif _GL_CXXALIASWARN (foo); #elif defined GNULIB_POSIXCHECK ... #endif */ /* _GL_EXTERN_C declaration; performs the declaration with C linkage. */ #if defined __cplusplus # define _GL_EXTERN_C extern "C" #else # define _GL_EXTERN_C extern #endif /* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes); declares a replacement function, named rpl_func, with the given prototype, consisting of return type, parameters, and attributes. Example: _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...) _GL_ARG_NONNULL ((1))); Note: Attributes, such as _GL_ATTRIBUTE_DEPRECATED, are supported in front of a _GL_FUNCDECL_RPL invocation only in C mode, not in C++ mode. (That's because [[...]] extern "C" <declaration>; is invalid syntax in C++.) */ #define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \ _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes) #define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \ _GL_EXTERN_C rettype rpl_func parameters_and_attributes /* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes); declares the system function, named func, with the given prototype, consisting of return type, parameters, and attributes. Example: _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...) _GL_ARG_NONNULL ((1))); */ #define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \ _GL_EXTERN_C rettype func parameters_and_attributes /* _GL_CXXALIAS_RPL (func, rettype, parameters); declares a C++ alias called GNULIB_NAMESPACE::func that redirects to rpl_func, if GNULIB_NAMESPACE is defined. Example: _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); Wrapping rpl_func in an object with an inline conversion operator avoids a reference to rpl_func unless GNULIB_NAMESPACE::func is actually used in the program. */ #define _GL_CXXALIAS_RPL(func,rettype,parameters) \ _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters) #if defined __cplusplus && defined GNULIB_NAMESPACE # define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ namespace GNULIB_NAMESPACE \ { \ static const struct _gl_ ## func ## _wrapper \ { \ typedef rettype (*type) parameters; \ \ inline operator type () const \ { \ return ::rpl_func; \ } \ } func = {}; \ } \ _GL_EXTERN_C int _gl_cxxalias_dummy #else # define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ _GL_EXTERN_C int _gl_cxxalias_dummy #endif /* _GL_CXXALIAS_MDA (func, rettype, parameters); is to be used when func is a Microsoft deprecated alias, on native Windows. It declares a C++ alias called GNULIB_NAMESPACE::func that redirects to _func, if GNULIB_NAMESPACE is defined. Example: _GL_CXXALIAS_MDA (open, int, (const char *filename, int flags, ...)); */ #define _GL_CXXALIAS_MDA(func,rettype,parameters) \ _GL_CXXALIAS_RPL_1 (func, _##func, rettype, parameters) /* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters); is like _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters); except that the C function rpl_func may have a slightly different declaration. A cast is used to silence the "invalid conversion" error that would otherwise occur. */ #if defined __cplusplus && defined GNULIB_NAMESPACE # define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ namespace GNULIB_NAMESPACE \ { \ static const struct _gl_ ## func ## _wrapper \ { \ typedef rettype (*type) parameters; \ \ inline operator type () const \ { \ return reinterpret_cast<type>(::rpl_func); \ } \ } func = {}; \ } \ _GL_EXTERN_C int _gl_cxxalias_dummy #else # define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ _GL_EXTERN_C int _gl_cxxalias_dummy #endif /* _GL_CXXALIAS_MDA_CAST (func, rettype, parameters); is like _GL_CXXALIAS_MDA (func, rettype, parameters); except that the C function func may have a slightly different declaration. A cast is used to silence the "invalid conversion" error that would otherwise occur. */ #define _GL_CXXALIAS_MDA_CAST(func,rettype,parameters) \ _GL_CXXALIAS_RPL_CAST_1 (func, _##func, rettype, parameters) /* _GL_CXXALIAS_SYS (func, rettype, parameters); declares a C++ alias called GNULIB_NAMESPACE::func that redirects to the system provided function func, if GNULIB_NAMESPACE is defined. Example: _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); Wrapping func in an object with an inline conversion operator avoids a reference to func unless GNULIB_NAMESPACE::func is actually used in the program. */ #if defined __cplusplus && defined GNULIB_NAMESPACE # define _GL_CXXALIAS_SYS(func,rettype,parameters) \ namespace GNULIB_NAMESPACE \ { \ static const struct _gl_ ## func ## _wrapper \ { \ typedef rettype (*type) parameters; \ \ inline operator type () const \ { \ return ::func; \ } \ } func = {}; \ } \ _GL_EXTERN_C int _gl_cxxalias_dummy #else # define _GL_CXXALIAS_SYS(func,rettype,parameters) \ _GL_EXTERN_C int _gl_cxxalias_dummy #endif /* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters); is like _GL_CXXALIAS_SYS (func, rettype, parameters); except that the C function func may have a slightly different declaration. A cast is used to silence the "invalid conversion" error that would otherwise occur. */ #if defined __cplusplus && defined GNULIB_NAMESPACE # define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ namespace GNULIB_NAMESPACE \ { \ static const struct _gl_ ## func ## _wrapper \ { \ typedef rettype (*type) parameters; \ \ inline operator type () const \ { \ return reinterpret_cast<type>(::func); \ } \ } func = {}; \ } \ _GL_EXTERN_C int _gl_cxxalias_dummy #else # define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ _GL_EXTERN_C int _gl_cxxalias_dummy #endif /* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2); is like _GL_CXXALIAS_SYS (func, rettype, parameters); except that the C function is picked among a set of overloaded functions, namely the one with rettype2 and parameters2. Two consecutive casts are used to silence the "cannot find a match" and "invalid conversion" errors that would otherwise occur. */ #if defined __cplusplus && defined GNULIB_NAMESPACE /* The outer cast must be a reinterpret_cast. The inner cast: When the function is defined as a set of overloaded functions, it works as a static_cast<>, choosing the designated variant. When the function is defined as a single variant, it works as a reinterpret_cast<>. The parenthesized cast syntax works both ways. */ # define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ namespace GNULIB_NAMESPACE \ { \ static const struct _gl_ ## func ## _wrapper \ { \ typedef rettype (*type) parameters; \ \ inline operator type () const \ { \ return reinterpret_cast<type>((rettype2 (*) parameters2)(::func)); \ } \ } func = {}; \ } \ _GL_EXTERN_C int _gl_cxxalias_dummy #else # define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ _GL_EXTERN_C int _gl_cxxalias_dummy #endif /* _GL_CXXALIASWARN (func); causes a warning to be emitted when ::func is used but not when GNULIB_NAMESPACE::func is used. func must be defined without overloaded variants. */ #if defined __cplusplus && defined GNULIB_NAMESPACE # define _GL_CXXALIASWARN(func) \ _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE) # define _GL_CXXALIASWARN_1(func,namespace) \ _GL_CXXALIASWARN_2 (func, namespace) /* To work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>, we enable the warning only when not optimizing. */ # if !(defined __GNUC__ && !defined __clang__ && __OPTIMIZE__) # define _GL_CXXALIASWARN_2(func,namespace) \ _GL_WARN_ON_USE (func, \ "The symbol ::" #func " refers to the system function. " \ "Use " #namespace "::" #func " instead.") # elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING # define _GL_CXXALIASWARN_2(func,namespace) \ extern __typeof__ (func) func # else # define _GL_CXXALIASWARN_2(func,namespace) \ _GL_EXTERN_C int _gl_cxxalias_dummy # endif #else # define _GL_CXXALIASWARN(func) \ _GL_EXTERN_C int _gl_cxxalias_dummy #endif /* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes); causes a warning to be emitted when the given overloaded variant of ::func is used but not when GNULIB_NAMESPACE::func is used. */ #if defined __cplusplus && defined GNULIB_NAMESPACE # define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \ GNULIB_NAMESPACE) # define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \ _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace) /* To work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>, we enable the warning only when not optimizing. */ # if !(defined __GNUC__ && !defined __clang__ && __OPTIMIZE__) # define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ _GL_WARN_ON_USE_CXX (func, rettype, rettype, parameters_and_attributes, \ "The symbol ::" #func " refers to the system function. " \ "Use " #namespace "::" #func " instead.") # else # define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ _GL_EXTERN_C int _gl_cxxalias_dummy # endif #else # define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ _GL_EXTERN_C int _gl_cxxalias_dummy #endif #endif /* _GL_CXXDEFS_H */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/btowc.c��������������������������������������������������������������������������������0000644�0001750�0001750�00000002473�14436425345�014421� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert unibyte character to wide character. Copyright (C) 2008, 2010-2023 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2008. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #include <stdio.h> #include <stdlib.h> #include <string.h> wint_t btowc (int c) { if (c != EOF) { char buf[1]; wchar_t wc; buf[0] = c; #if HAVE_MBRTOWC mbstate_t state; memset (&state, 0, sizeof (mbstate_t)); size_t ret = mbrtowc (&wc, buf, 1, &state); if (!(ret == (size_t)(-1) || ret == (size_t)(-2))) #else if (mbtowc (&wc, buf, 1) >= 0) #endif return wc; } return WEOF; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/inttypes.in.h��������������������������������������������������������������������������0000644�0001750�0001750�00000053147�14436425345�015600� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2006-2023 Free Software Foundation, Inc. Written by Paul Eggert, Bruno Haible, Derek Price. This file is part of gnulib. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* * ISO C 99 <inttypes.h> for platforms that lack it. * <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/inttypes.h.html> */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* Include the original <inttypes.h> if it exists, and if this file has not been included yet or if this file includes gnulib stdint.h which in turn includes this file. The include_next requires a split double-inclusion guard. */ #if ! defined INTTYPES_H || defined _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H # if @HAVE_INTTYPES_H@ /* Some pre-C++11 <stdint.h> implementations need this. */ # if defined __cplusplus && ! defined __STDC_FORMAT_MACROS # define __STDC_FORMAT_MACROS 1 # endif # @INCLUDE_NEXT@ @NEXT_INTTYPES_H@ # define _GL_FINISHED_INCLUDING_SYSTEM_INTTYPES_H # endif #endif #if ! defined INTTYPES_H && ! defined _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H #define INTTYPES_H /* This file uses GNULIB_POSIXCHECK, HAVE_RAW_DECL_*. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif /* Include <stdint.h> or the gnulib replacement. But avoid namespace pollution on glibc systems. */ #ifndef __GLIBC__ # include <stdint.h> #endif /* Get CHAR_BIT, INT_MAX, LONG_MAX, etc. */ #include <limits.h> /* On mingw, __USE_MINGW_ANSI_STDIO only works if <stdio.h> is also included */ #if defined _WIN32 && ! defined __CYGWIN__ # include <stdio.h> #endif #if !(INT_MAX == 0x7fffffff && INT_MIN + INT_MAX == -1) # error "This file assumes that 'int' is 32-bit two's complement. Please report your platform and compiler to <bug-gnulib@gnu.org>." #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* 7.8.1 Macros for format specifiers */ #if defined _TNS_R_TARGET /* Tandem NonStop R series and compatible platforms released before July 2005 support %Ld but not %lld. */ # define _LONG_LONG_FORMAT_PREFIX "L" #else # define _LONG_LONG_FORMAT_PREFIX "ll" #endif #if !defined PRId8 # ifdef INT8_MAX # define PRId8 "d" # endif #endif #if !defined PRIi8 # ifdef INT8_MAX # define PRIi8 "i" # endif #endif #if !defined PRIo8 # ifdef UINT8_MAX # define PRIo8 "o" # endif #endif #if !defined PRIu8 # ifdef UINT8_MAX # define PRIu8 "u" # endif #endif #if !defined PRIx8 # ifdef UINT8_MAX # define PRIx8 "x" # endif #endif #if !defined PRIX8 # ifdef UINT8_MAX # define PRIX8 "X" # endif #endif #if !defined PRId16 # ifdef INT16_MAX # define PRId16 "d" # endif #endif #if !defined PRIi16 # ifdef INT16_MAX # define PRIi16 "i" # endif #endif #if !defined PRIo16 # ifdef UINT16_MAX # define PRIo16 "o" # endif #endif #if !defined PRIu16 # ifdef UINT16_MAX # define PRIu16 "u" # endif #endif #if !defined PRIx16 # ifdef UINT16_MAX # define PRIx16 "x" # endif #endif #if !defined PRIX16 # ifdef UINT16_MAX # define PRIX16 "X" # endif #endif #if !defined PRId32 # ifdef INT32_MAX # define PRId32 "d" # endif #endif #if !defined PRIi32 # ifdef INT32_MAX # define PRIi32 "i" # endif #endif #if !defined PRIo32 # ifdef UINT32_MAX # define PRIo32 "o" # endif #endif #if !defined PRIu32 # ifdef UINT32_MAX # define PRIu32 "u" # endif #endif #if !defined PRIx32 # ifdef UINT32_MAX # define PRIx32 "x" # endif #endif #if !defined PRIX32 # ifdef UINT32_MAX # define PRIX32 "X" # endif #endif #ifdef INT64_MAX # if (@APPLE_UNIVERSAL_BUILD@ ? defined _LP64 : @INT64_MAX_EQ_LONG_MAX@) # define _PRI64_PREFIX "l" # elif defined _MSC_VER || defined __MINGW32__ # define _PRI64_PREFIX "I64" # elif LONG_MAX >> 30 == 1 # define _PRI64_PREFIX _LONG_LONG_FORMAT_PREFIX # endif # if !defined PRId64 # define PRId64 _PRI64_PREFIX "d" # endif # if !defined PRIi64 # define PRIi64 _PRI64_PREFIX "i" # endif #endif #ifdef UINT64_MAX # if (@APPLE_UNIVERSAL_BUILD@ ? defined _LP64 : @UINT64_MAX_EQ_ULONG_MAX@) # define _PRIu64_PREFIX "l" # elif defined _MSC_VER || defined __MINGW32__ # define _PRIu64_PREFIX "I64" # elif ULONG_MAX >> 31 == 1 # define _PRIu64_PREFIX _LONG_LONG_FORMAT_PREFIX # endif # if !defined PRIo64 # define PRIo64 _PRIu64_PREFIX "o" # endif # if !defined PRIu64 # define PRIu64 _PRIu64_PREFIX "u" # endif # if !defined PRIx64 # define PRIx64 _PRIu64_PREFIX "x" # endif # if !defined PRIX64 # define PRIX64 _PRIu64_PREFIX "X" # endif #endif #if !defined PRIdLEAST8 # define PRIdLEAST8 "d" #endif #if !defined PRIiLEAST8 # define PRIiLEAST8 "i" #endif #if !defined PRIoLEAST8 # define PRIoLEAST8 "o" #endif #if !defined PRIuLEAST8 # define PRIuLEAST8 "u" #endif #if !defined PRIxLEAST8 # define PRIxLEAST8 "x" #endif #if !defined PRIXLEAST8 # define PRIXLEAST8 "X" #endif #if !defined PRIdLEAST16 # define PRIdLEAST16 "d" #endif #if !defined PRIiLEAST16 # define PRIiLEAST16 "i" #endif #if !defined PRIoLEAST16 # define PRIoLEAST16 "o" #endif #if !defined PRIuLEAST16 # define PRIuLEAST16 "u" #endif #if !defined PRIxLEAST16 # define PRIxLEAST16 "x" #endif #if !defined PRIXLEAST16 # define PRIXLEAST16 "X" #endif #if !defined PRIdLEAST32 # define PRIdLEAST32 "d" #endif #if !defined PRIiLEAST32 # define PRIiLEAST32 "i" #endif #if !defined PRIoLEAST32 # define PRIoLEAST32 "o" #endif #if !defined PRIuLEAST32 # define PRIuLEAST32 "u" #endif #if !defined PRIxLEAST32 # define PRIxLEAST32 "x" #endif #if !defined PRIXLEAST32 # define PRIXLEAST32 "X" #endif #ifdef INT64_MAX # if !defined PRIdLEAST64 # define PRIdLEAST64 PRId64 # endif # if !defined PRIiLEAST64 # define PRIiLEAST64 PRIi64 # endif #endif #ifdef UINT64_MAX # if !defined PRIoLEAST64 # define PRIoLEAST64 PRIo64 # endif # if !defined PRIuLEAST64 # define PRIuLEAST64 PRIu64 # endif # if !defined PRIxLEAST64 # define PRIxLEAST64 PRIx64 # endif # if !defined PRIXLEAST64 # define PRIXLEAST64 PRIX64 # endif #endif #if !defined PRIdFAST8 # if INT_FAST8_MAX > INT32_MAX # define PRIdFAST8 PRId64 # else # define PRIdFAST8 "d" # endif #endif #if !defined PRIiFAST8 # if INT_FAST8_MAX > INT32_MAX # define PRIiFAST8 PRIi64 # else # define PRIiFAST8 "i" # endif #endif #if !defined PRIoFAST8 # if UINT_FAST8_MAX > UINT32_MAX # define PRIoFAST8 PRIo64 # else # define PRIoFAST8 "o" # endif #endif #if !defined PRIuFAST8 # if UINT_FAST8_MAX > UINT32_MAX # define PRIuFAST8 PRIu64 # else # define PRIuFAST8 "u" # endif #endif #if !defined PRIxFAST8 # if UINT_FAST8_MAX > UINT32_MAX # define PRIxFAST8 PRIx64 # else # define PRIxFAST8 "x" # endif #endif #if !defined PRIXFAST8 # if UINT_FAST8_MAX > UINT32_MAX # define PRIXFAST8 PRIX64 # else # define PRIXFAST8 "X" # endif #endif #if !defined PRIdFAST16 # if INT_FAST16_MAX > INT32_MAX # define PRIdFAST16 PRId64 # else # define PRIdFAST16 "d" # endif #endif #if !defined PRIiFAST16 # if INT_FAST16_MAX > INT32_MAX # define PRIiFAST16 PRIi64 # else # define PRIiFAST16 "i" # endif #endif #if !defined PRIoFAST16 # if UINT_FAST16_MAX > UINT32_MAX # define PRIoFAST16 PRIo64 # else # define PRIoFAST16 "o" # endif #endif #if !defined PRIuFAST16 # if UINT_FAST16_MAX > UINT32_MAX # define PRIuFAST16 PRIu64 # else # define PRIuFAST16 "u" # endif #endif #if !defined PRIxFAST16 # if UINT_FAST16_MAX > UINT32_MAX # define PRIxFAST16 PRIx64 # else # define PRIxFAST16 "x" # endif #endif #if !defined PRIXFAST16 # if UINT_FAST16_MAX > UINT32_MAX # define PRIXFAST16 PRIX64 # else # define PRIXFAST16 "X" # endif #endif #if !defined PRIdFAST32 # if INT_FAST32_MAX > INT32_MAX # define PRIdFAST32 PRId64 # else # define PRIdFAST32 "d" # endif #endif #if !defined PRIiFAST32 # if INT_FAST32_MAX > INT32_MAX # define PRIiFAST32 PRIi64 # else # define PRIiFAST32 "i" # endif #endif #if !defined PRIoFAST32 # if UINT_FAST32_MAX > UINT32_MAX # define PRIoFAST32 PRIo64 # else # define PRIoFAST32 "o" # endif #endif #if !defined PRIuFAST32 # if UINT_FAST32_MAX > UINT32_MAX # define PRIuFAST32 PRIu64 # else # define PRIuFAST32 "u" # endif #endif #if !defined PRIxFAST32 # if UINT_FAST32_MAX > UINT32_MAX # define PRIxFAST32 PRIx64 # else # define PRIxFAST32 "x" # endif #endif #if !defined PRIXFAST32 # if UINT_FAST32_MAX > UINT32_MAX # define PRIXFAST32 PRIX64 # else # define PRIXFAST32 "X" # endif #endif #ifdef INT64_MAX # if !defined PRIdFAST64 # define PRIdFAST64 PRId64 # endif # if !defined PRIiFAST64 # define PRIiFAST64 PRIi64 # endif #endif #ifdef UINT64_MAX # if !defined PRIoFAST64 # define PRIoFAST64 PRIo64 # endif # if !defined PRIuFAST64 # define PRIuFAST64 PRIu64 # endif # if !defined PRIxFAST64 # define PRIxFAST64 PRIx64 # endif # if !defined PRIXFAST64 # define PRIXFAST64 PRIX64 # endif #endif #if !defined PRIdMAX # if @INT32_MAX_LT_INTMAX_MAX@ # define PRIdMAX PRId64 # else # define PRIdMAX "ld" # endif #endif #if !defined PRIiMAX # if @INT32_MAX_LT_INTMAX_MAX@ # define PRIiMAX PRIi64 # else # define PRIiMAX "li" # endif #endif #if !defined PRIoMAX # if @UINT32_MAX_LT_UINTMAX_MAX@ # define PRIoMAX PRIo64 # else # define PRIoMAX "lo" # endif #endif #if !defined PRIuMAX # if @UINT32_MAX_LT_UINTMAX_MAX@ # define PRIuMAX PRIu64 # else # define PRIuMAX "lu" # endif #endif #if !defined PRIxMAX # if @UINT32_MAX_LT_UINTMAX_MAX@ # define PRIxMAX PRIx64 # else # define PRIxMAX "lx" # endif #endif #if !defined PRIXMAX # if @UINT32_MAX_LT_UINTMAX_MAX@ # define PRIXMAX PRIX64 # else # define PRIXMAX "lX" # endif #endif #if !defined PRIdPTR # ifdef INTPTR_MAX # define PRIdPTR @PRIPTR_PREFIX@ "d" # endif #endif #if !defined PRIiPTR # ifdef INTPTR_MAX # define PRIiPTR @PRIPTR_PREFIX@ "i" # endif #endif #if !defined PRIoPTR # ifdef UINTPTR_MAX # define PRIoPTR @PRIPTR_PREFIX@ "o" # endif #endif #if !defined PRIuPTR # ifdef UINTPTR_MAX # define PRIuPTR @PRIPTR_PREFIX@ "u" # endif #endif #if !defined PRIxPTR # ifdef UINTPTR_MAX # define PRIxPTR @PRIPTR_PREFIX@ "x" # endif #endif #if !defined PRIXPTR # ifdef UINTPTR_MAX # define PRIXPTR @PRIPTR_PREFIX@ "X" # endif #endif #if !defined SCNd8 # ifdef INT8_MAX # define SCNd8 "hhd" # endif #endif #if !defined SCNi8 # ifdef INT8_MAX # define SCNi8 "hhi" # endif #endif #if !defined SCNo8 # ifdef UINT8_MAX # define SCNo8 "hho" # endif #endif #if !defined SCNu8 # ifdef UINT8_MAX # define SCNu8 "hhu" # endif #endif #if !defined SCNx8 # ifdef UINT8_MAX # define SCNx8 "hhx" # endif #endif #if !defined SCNd16 # ifdef INT16_MAX # define SCNd16 "hd" # endif #endif #if !defined SCNi16 # ifdef INT16_MAX # define SCNi16 "hi" # endif #endif #if !defined SCNo16 # ifdef UINT16_MAX # define SCNo16 "ho" # endif #endif #if !defined SCNu16 # ifdef UINT16_MAX # define SCNu16 "hu" # endif #endif #if !defined SCNx16 # ifdef UINT16_MAX # define SCNx16 "hx" # endif #endif #if !defined SCNd32 # ifdef INT32_MAX # define SCNd32 "d" # endif #endif #if !defined SCNi32 # ifdef INT32_MAX # define SCNi32 "i" # endif #endif #if !defined SCNo32 # ifdef UINT32_MAX # define SCNo32 "o" # endif #endif #if !defined SCNu32 # ifdef UINT32_MAX # define SCNu32 "u" # endif #endif #if !defined SCNx32 # ifdef UINT32_MAX # define SCNx32 "x" # endif #endif #ifdef INT64_MAX # if (@APPLE_UNIVERSAL_BUILD@ ? defined _LP64 : @INT64_MAX_EQ_LONG_MAX@) # define _SCN64_PREFIX "l" # elif defined _MSC_VER || defined __MINGW32__ # define _SCN64_PREFIX "I64" # elif LONG_MAX >> 30 == 1 # define _SCN64_PREFIX _LONG_LONG_FORMAT_PREFIX # endif # if !defined SCNd64 # define SCNd64 _SCN64_PREFIX "d" # endif # if !defined SCNi64 # define SCNi64 _SCN64_PREFIX "i" # endif #endif #ifdef UINT64_MAX # if (@APPLE_UNIVERSAL_BUILD@ ? defined _LP64 : @UINT64_MAX_EQ_ULONG_MAX@) # define _SCNu64_PREFIX "l" # elif defined _MSC_VER || defined __MINGW32__ # define _SCNu64_PREFIX "I64" # elif ULONG_MAX >> 31 == 1 # define _SCNu64_PREFIX _LONG_LONG_FORMAT_PREFIX # endif # if !defined SCNo64 # define SCNo64 _SCNu64_PREFIX "o" # endif # if !defined SCNu64 # define SCNu64 _SCNu64_PREFIX "u" # endif # if !defined SCNx64 # define SCNx64 _SCNu64_PREFIX "x" # endif #endif #if !defined SCNdLEAST8 # define SCNdLEAST8 "hhd" #endif #if !defined SCNiLEAST8 # define SCNiLEAST8 "hhi" #endif #if !defined SCNoLEAST8 # define SCNoLEAST8 "hho" #endif #if !defined SCNuLEAST8 # define SCNuLEAST8 "hhu" #endif #if !defined SCNxLEAST8 # define SCNxLEAST8 "hhx" #endif #if !defined SCNdLEAST16 # define SCNdLEAST16 "hd" #endif #if !defined SCNiLEAST16 # define SCNiLEAST16 "hi" #endif #if !defined SCNoLEAST16 # define SCNoLEAST16 "ho" #endif #if !defined SCNuLEAST16 # define SCNuLEAST16 "hu" #endif #if !defined SCNxLEAST16 # define SCNxLEAST16 "hx" #endif #if !defined SCNdLEAST32 # define SCNdLEAST32 "d" #endif #if !defined SCNiLEAST32 # define SCNiLEAST32 "i" #endif #if !defined SCNoLEAST32 # define SCNoLEAST32 "o" #endif #if !defined SCNuLEAST32 # define SCNuLEAST32 "u" #endif #if !defined SCNxLEAST32 # define SCNxLEAST32 "x" #endif #ifdef INT64_MAX # if !defined SCNdLEAST64 # define SCNdLEAST64 SCNd64 # endif # if !defined SCNiLEAST64 # define SCNiLEAST64 SCNi64 # endif #endif #ifdef UINT64_MAX # if !defined SCNoLEAST64 # define SCNoLEAST64 SCNo64 # endif # if !defined SCNuLEAST64 # define SCNuLEAST64 SCNu64 # endif # if !defined SCNxLEAST64 # define SCNxLEAST64 SCNx64 # endif #endif #if !defined SCNdFAST8 # if INT_FAST8_MAX > INT32_MAX # define SCNdFAST8 SCNd64 # elif INT_FAST8_MAX == 0x7fff # define SCNdFAST8 "hd" # elif INT_FAST8_MAX == 0x7f # define SCNdFAST8 "hhd" # else # define SCNdFAST8 "d" # endif #endif #if !defined SCNiFAST8 # if INT_FAST8_MAX > INT32_MAX # define SCNiFAST8 SCNi64 # elif INT_FAST8_MAX == 0x7fff # define SCNiFAST8 "hi" # elif INT_FAST8_MAX == 0x7f # define SCNiFAST8 "hhi" # else # define SCNiFAST8 "i" # endif #endif #if !defined SCNoFAST8 # if UINT_FAST8_MAX > UINT32_MAX # define SCNoFAST8 SCNo64 # elif UINT_FAST8_MAX == 0xffff # define SCNoFAST8 "ho" # elif UINT_FAST8_MAX == 0xff # define SCNoFAST8 "hho" # else # define SCNoFAST8 "o" # endif #endif #if !defined SCNuFAST8 # if UINT_FAST8_MAX > UINT32_MAX # define SCNuFAST8 SCNu64 # elif UINT_FAST8_MAX == 0xffff # define SCNuFAST8 "hu" # elif UINT_FAST8_MAX == 0xff # define SCNuFAST8 "hhu" # else # define SCNuFAST8 "u" # endif #endif #if !defined SCNxFAST8 # if UINT_FAST8_MAX > UINT32_MAX # define SCNxFAST8 SCNx64 # elif UINT_FAST8_MAX == 0xffff # define SCNxFAST8 "hx" # elif UINT_FAST8_MAX == 0xff # define SCNxFAST8 "hhx" # else # define SCNxFAST8 "x" # endif #endif #if !defined SCNdFAST16 # if INT_FAST16_MAX > INT32_MAX # define SCNdFAST16 SCNd64 # elif INT_FAST16_MAX == 0x7fff # define SCNdFAST16 "hd" # else # define SCNdFAST16 "d" # endif #endif #if !defined SCNiFAST16 # if INT_FAST16_MAX > INT32_MAX # define SCNiFAST16 SCNi64 # elif INT_FAST16_MAX == 0x7fff # define SCNiFAST16 "hi" # else # define SCNiFAST16 "i" # endif #endif #if !defined SCNoFAST16 # if UINT_FAST16_MAX > UINT32_MAX # define SCNoFAST16 SCNo64 # elif UINT_FAST16_MAX == 0xffff # define SCNoFAST16 "ho" # else # define SCNoFAST16 "o" # endif #endif #if !defined SCNuFAST16 # if UINT_FAST16_MAX > UINT32_MAX # define SCNuFAST16 SCNu64 # elif UINT_FAST16_MAX == 0xffff # define SCNuFAST16 "hu" # else # define SCNuFAST16 "u" # endif #endif #if !defined SCNxFAST16 # if UINT_FAST16_MAX > UINT32_MAX # define SCNxFAST16 SCNx64 # elif UINT_FAST16_MAX == 0xffff # define SCNxFAST16 "hx" # else # define SCNxFAST16 "x" # endif #endif #if !defined SCNdFAST32 # if INT_FAST32_MAX > INT32_MAX # define SCNdFAST32 SCNd64 # else # define SCNdFAST32 "d" # endif #endif #if !defined SCNiFAST32 # if INT_FAST32_MAX > INT32_MAX # define SCNiFAST32 SCNi64 # else # define SCNiFAST32 "i" # endif #endif #if !defined SCNoFAST32 # if UINT_FAST32_MAX > UINT32_MAX # define SCNoFAST32 SCNo64 # else # define SCNoFAST32 "o" # endif #endif #if !defined SCNuFAST32 # if UINT_FAST32_MAX > UINT32_MAX # define SCNuFAST32 SCNu64 # else # define SCNuFAST32 "u" # endif #endif #if !defined SCNxFAST32 # if UINT_FAST32_MAX > UINT32_MAX # define SCNxFAST32 SCNx64 # else # define SCNxFAST32 "x" # endif #endif #ifdef INT64_MAX # if !defined SCNdFAST64 # define SCNdFAST64 SCNd64 # endif # if !defined SCNiFAST64 # define SCNiFAST64 SCNi64 # endif #endif #ifdef UINT64_MAX # if !defined SCNoFAST64 # define SCNoFAST64 SCNo64 # endif # if !defined SCNuFAST64 # define SCNuFAST64 SCNu64 # endif # if !defined SCNxFAST64 # define SCNxFAST64 SCNx64 # endif #endif #if !defined SCNdMAX # if @INT32_MAX_LT_INTMAX_MAX@ # define SCNdMAX SCNd64 # else # define SCNdMAX "ld" # endif #endif #if !defined SCNiMAX # if @INT32_MAX_LT_INTMAX_MAX@ # define SCNiMAX SCNi64 # else # define SCNiMAX "li" # endif #endif #if !defined SCNoMAX # if @UINT32_MAX_LT_UINTMAX_MAX@ # define SCNoMAX SCNo64 # else # define SCNoMAX "lo" # endif #endif #if !defined SCNuMAX # if @UINT32_MAX_LT_UINTMAX_MAX@ # define SCNuMAX SCNu64 # else # define SCNuMAX "lu" # endif #endif #if !defined SCNxMAX # if @UINT32_MAX_LT_UINTMAX_MAX@ # define SCNxMAX SCNx64 # else # define SCNxMAX "lx" # endif #endif #if !defined SCNdPTR # ifdef INTPTR_MAX # define SCNdPTR @PRIPTR_PREFIX@ "d" # endif #endif #if !defined SCNiPTR # ifdef INTPTR_MAX # define SCNiPTR @PRIPTR_PREFIX@ "i" # endif #endif #if !defined SCNoPTR # ifdef UINTPTR_MAX # define SCNoPTR @PRIPTR_PREFIX@ "o" # endif #endif #if !defined SCNuPTR # ifdef UINTPTR_MAX # define SCNuPTR @PRIPTR_PREFIX@ "u" # endif #endif #if !defined SCNxPTR # ifdef UINTPTR_MAX # define SCNxPTR @PRIPTR_PREFIX@ "x" # endif #endif /* 7.8.2 Functions for greatest-width integer types */ #ifdef __cplusplus extern "C" { #endif #if @GNULIB_IMAXABS@ # if @REPLACE_IMAXABS@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef imaxabs # define imaxabs rpl_imaxabs # endif _GL_FUNCDECL_RPL (imaxabs, intmax_t, (intmax_t x)); _GL_CXXALIAS_RPL (imaxabs, intmax_t, (intmax_t x)); # else # if !@HAVE_DECL_IMAXABS@ _GL_FUNCDECL_SYS (imaxabs, intmax_t, (intmax_t x)); # endif _GL_CXXALIAS_SYS (imaxabs, intmax_t, (intmax_t x)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (imaxabs); # endif #elif defined GNULIB_POSIXCHECK # undef imaxabs # if HAVE_RAW_DECL_IMAXABS _GL_WARN_ON_USE (imaxabs, "imaxabs is unportable - " "use gnulib module imaxabs for portability"); # endif #endif #if @GNULIB_IMAXDIV@ # if !@HAVE_IMAXDIV_T@ # if !GNULIB_defined_imaxdiv_t typedef struct { intmax_t quot; intmax_t rem; } imaxdiv_t; # define GNULIB_defined_imaxdiv_t 1 # endif # endif # if @REPLACE_IMAXDIV@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef imaxdiv # define imaxdiv rpl_imaxdiv # endif _GL_FUNCDECL_RPL (imaxdiv, imaxdiv_t, (intmax_t numer, intmax_t denom)); _GL_CXXALIAS_RPL (imaxdiv, imaxdiv_t, (intmax_t numer, intmax_t denom)); # else # if !@HAVE_DECL_IMAXDIV@ _GL_FUNCDECL_SYS (imaxdiv, imaxdiv_t, (intmax_t numer, intmax_t denom)); # endif _GL_CXXALIAS_SYS (imaxdiv, imaxdiv_t, (intmax_t numer, intmax_t denom)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (imaxdiv); # endif #elif defined GNULIB_POSIXCHECK # undef imaxdiv # if HAVE_RAW_DECL_IMAXDIV _GL_WARN_ON_USE (imaxdiv, "imaxdiv is unportable - " "use gnulib module imaxdiv for portability"); # endif #endif #if @GNULIB_STRTOIMAX@ # if @REPLACE_STRTOIMAX@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strtoimax # define strtoimax rpl_strtoimax # endif _GL_FUNCDECL_RPL (strtoimax, intmax_t, (const char *restrict, char **restrict, int) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (strtoimax, intmax_t, (const char *restrict, char **restrict, int)); # else # if !@HAVE_DECL_STRTOIMAX@ # undef strtoimax _GL_FUNCDECL_SYS (strtoimax, intmax_t, (const char *restrict, char **restrict, int) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (strtoimax, intmax_t, (const char *restrict, char **restrict, int)); # endif _GL_CXXALIASWARN (strtoimax); #elif defined GNULIB_POSIXCHECK # undef strtoimax # if HAVE_RAW_DECL_STRTOIMAX _GL_WARN_ON_USE (strtoimax, "strtoimax is unportable - " "use gnulib module strtoimax for portability"); # endif #endif #if @GNULIB_STRTOUMAX@ # if @REPLACE_STRTOUMAX@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strtoumax # define strtoumax rpl_strtoumax # endif _GL_FUNCDECL_RPL (strtoumax, uintmax_t, (const char *restrict, char **restrict, int) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (strtoumax, uintmax_t, (const char *restrict, char **restrict, int)); # else # if !@HAVE_DECL_STRTOUMAX@ # undef strtoumax _GL_FUNCDECL_SYS (strtoumax, uintmax_t, (const char *restrict, char **restrict, int) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (strtoumax, uintmax_t, (const char *restrict, char **restrict, int)); # endif _GL_CXXALIASWARN (strtoumax); #elif defined GNULIB_POSIXCHECK # undef strtoumax # if HAVE_RAW_DECL_STRTOUMAX _GL_WARN_ON_USE (strtoumax, "strtoumax is unportable - " "use gnulib module strtoumax for portability"); # endif #endif /* Don't bother defining or declaring wcstoimax and wcstoumax, since wide-character functions like this are hardly ever useful. */ #ifdef __cplusplus } #endif #endif /* !defined INTTYPES_H && !defined _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/cdefs.h��������������������������������������������������������������������������������0000644�0001750�0001750�00000064427�14436425345�014403� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1992-2023 Free Software Foundation, Inc. Copyright The GNU Toolchain Authors. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ #ifndef _SYS_CDEFS_H #define _SYS_CDEFS_H 1 /* We are almost always included from features.h. */ #ifndef _FEATURES_H # include <features.h> #endif /* The GNU libc does not support any K&R compilers or the traditional mode of ISO C compilers anymore. Check for some of the combinations not supported anymore. */ #if defined __GNUC__ && !defined __STDC__ # error "You need a ISO C conforming compiler to use the glibc headers" #endif /* Some user header file might have defined this before. */ #undef __P #undef __PMT /* Compilers that lack __has_attribute may object to #if defined __has_attribute && __has_attribute (...) even though they do not need to evaluate the right-hand side of the &&. Similarly for __has_builtin, etc. */ #if (defined __has_attribute \ && (!defined __clang_minor__ \ || (defined __apple_build_version__ \ ? 6000000 <= __apple_build_version__ \ : 3 < __clang_major__ + (5 <= __clang_minor__)))) # define __glibc_has_attribute(attr) __has_attribute (attr) #else # define __glibc_has_attribute(attr) 0 #endif #ifdef __has_builtin # define __glibc_has_builtin(name) __has_builtin (name) #else # define __glibc_has_builtin(name) 0 #endif #ifdef __has_extension # define __glibc_has_extension(ext) __has_extension (ext) #else # define __glibc_has_extension(ext) 0 #endif #if defined __GNUC__ || defined __clang__ /* All functions, except those with callbacks or those that synchronize memory, are leaf functions. */ # if __GNUC_PREREQ (4, 6) && !defined _LIBC # define __LEAF , __leaf__ # define __LEAF_ATTR __attribute__ ((__leaf__)) # else # define __LEAF # define __LEAF_ATTR # endif /* GCC can always grok prototypes. For C++ programs we add throw() to help it optimize the function calls. But this only works with gcc 2.8.x and egcs. For gcc 3.4 and up we even mark C functions as non-throwing using a function attribute since programs can use the -fexceptions options for C code as well. */ # if !defined __cplusplus \ && (__GNUC_PREREQ (3, 4) || __glibc_has_attribute (__nothrow__)) # define __THROW __attribute__ ((__nothrow__ __LEAF)) # define __THROWNL __attribute__ ((__nothrow__)) # define __NTH(fct) __attribute__ ((__nothrow__ __LEAF)) fct # define __NTHNL(fct) __attribute__ ((__nothrow__)) fct # else # if defined __cplusplus && (__GNUC_PREREQ (2,8) || __clang_major >= 4) # if __cplusplus >= 201103L # define __THROW noexcept (true) # else # define __THROW throw () # endif # define __THROWNL __THROW # define __NTH(fct) __LEAF_ATTR fct __THROW # define __NTHNL(fct) fct __THROW # else # define __THROW # define __THROWNL # define __NTH(fct) fct # define __NTHNL(fct) fct # endif # endif #else /* Not GCC or clang. */ # if (defined __cplusplus \ || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L)) # define __inline inline # else # define __inline /* No inline functions. */ # endif # define __THROW # define __THROWNL # define __NTH(fct) fct #endif /* GCC || clang. */ /* These two macros are not used in glibc anymore. They are kept here only because some other projects expect the macros to be defined. */ #define __P(args) args #define __PMT(args) args /* For these things, GCC behaves the ANSI way normally, and the non-ANSI way under -traditional. */ #define __CONCAT(x,y) x ## y #define __STRING(x) #x /* This is not a typedef so `const __ptr_t' does the right thing. */ #define __ptr_t void * /* C++ needs to know that types and declarations are C, not C++. */ #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS # define __END_DECLS #endif /* Gnulib avoids these definitions, as they don't work on non-glibc platforms. In particular, __bos and __bos0 are defined differently in the Android libc. */ #ifndef __GNULIB_CDEFS /* Fortify support. */ # define __bos(ptr) __builtin_object_size (ptr, __USE_FORTIFY_LEVEL > 1) # define __bos0(ptr) __builtin_object_size (ptr, 0) /* Use __builtin_dynamic_object_size at _FORTIFY_SOURCE=3 when available. */ # if __USE_FORTIFY_LEVEL == 3 && (__glibc_clang_prereq (9, 0) \ || __GNUC_PREREQ (12, 0)) # define __glibc_objsize0(__o) __builtin_dynamic_object_size (__o, 0) # define __glibc_objsize(__o) __builtin_dynamic_object_size (__o, 1) # else # define __glibc_objsize0(__o) __bos0 (__o) # define __glibc_objsize(__o) __bos (__o) # endif /* Compile time conditions to choose between the regular, _chk and _chk_warn variants. These conditions should get evaluated to constant and optimized away. */ # define __glibc_safe_len_cond(__l, __s, __osz) ((__l) <= (__osz) / (__s)) # define __glibc_unsigned_or_positive(__l) \ ((__typeof (__l)) 0 < (__typeof (__l)) -1 \ || (__builtin_constant_p (__l) && (__l) > 0)) /* Length is known to be safe at compile time if the __L * __S <= __OBJSZ condition can be folded to a constant and if it is true, or unknown (-1) */ # define __glibc_safe_or_unknown_len(__l, __s, __osz) \ ((__osz) == (__SIZE_TYPE__) -1 \ || (__glibc_unsigned_or_positive (__l) \ && __builtin_constant_p (__glibc_safe_len_cond ((__SIZE_TYPE__) (__l), \ (__s), (__osz))) \ && __glibc_safe_len_cond ((__SIZE_TYPE__) (__l), (__s), (__osz)))) /* Conversely, we know at compile time that the length is unsafe if the __L * __S <= __OBJSZ condition can be folded to a constant and if it is false. */ # define __glibc_unsafe_len(__l, __s, __osz) \ (__glibc_unsigned_or_positive (__l) \ && __builtin_constant_p (__glibc_safe_len_cond ((__SIZE_TYPE__) (__l), \ __s, __osz)) \ && !__glibc_safe_len_cond ((__SIZE_TYPE__) (__l), __s, __osz)) /* Fortify function f. __f_alias, __f_chk and __f_chk_warn must be declared. */ # define __glibc_fortify(f, __l, __s, __osz, ...) \ (__glibc_safe_or_unknown_len (__l, __s, __osz) \ ? __ ## f ## _alias (__VA_ARGS__) \ : (__glibc_unsafe_len (__l, __s, __osz) \ ? __ ## f ## _chk_warn (__VA_ARGS__, __osz) \ : __ ## f ## _chk (__VA_ARGS__, __osz))) \ /* Fortify function f, where object size argument passed to f is the number of elements and not total size. */ # define __glibc_fortify_n(f, __l, __s, __osz, ...) \ (__glibc_safe_or_unknown_len (__l, __s, __osz) \ ? __ ## f ## _alias (__VA_ARGS__) \ : (__glibc_unsafe_len (__l, __s, __osz) \ ? __ ## f ## _chk_warn (__VA_ARGS__, (__osz) / (__s)) \ : __ ## f ## _chk (__VA_ARGS__, (__osz) / (__s)))) \ #endif #if __GNUC_PREREQ (4,3) # define __warnattr(msg) __attribute__((__warning__ (msg))) # define __errordecl(name, msg) \ extern void name (void) __attribute__((__error__ (msg))) #else # define __warnattr(msg) # define __errordecl(name, msg) extern void name (void) #endif /* Support for flexible arrays. Headers that should use flexible arrays only if they're "real" (e.g. only if they won't affect sizeof()) should test #if __glibc_c99_flexarr_available. */ #if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L && !defined __HP_cc # define __flexarr [] # define __glibc_c99_flexarr_available 1 #elif __GNUC_PREREQ (2,97) || defined __clang__ /* GCC 2.97 and clang support C99 flexible array members as an extension, even when in C89 mode or compiling C++ (any version). */ # define __flexarr [] # define __glibc_c99_flexarr_available 1 #elif defined __GNUC__ /* Pre-2.97 GCC did not support C99 flexible arrays but did have an equivalent extension with slightly different notation. */ # define __flexarr [0] # define __glibc_c99_flexarr_available 1 #else /* Some other non-C99 compiler. Approximate with [1]. */ # define __flexarr [1] # define __glibc_c99_flexarr_available 0 #endif /* __asm__ ("xyz") is used throughout the headers to rename functions at the assembly language level. This is wrapped by the __REDIRECT macro, in order to support compilers that can do this some other way. When compilers don't support asm-names at all, we have to do preprocessor tricks instead (which don't have exactly the right semantics, but it's the best we can do). Example: int __REDIRECT(setpgrp, (__pid_t pid, __pid_t pgrp), setpgid); */ #if (defined __GNUC__ && __GNUC__ >= 2) || (__clang_major__ >= 4) # define __REDIRECT(name, proto, alias) name proto __asm__ (__ASMNAME (#alias)) # ifdef __cplusplus # define __REDIRECT_NTH(name, proto, alias) \ name proto __THROW __asm__ (__ASMNAME (#alias)) # define __REDIRECT_NTHNL(name, proto, alias) \ name proto __THROWNL __asm__ (__ASMNAME (#alias)) # else # define __REDIRECT_NTH(name, proto, alias) \ name proto __asm__ (__ASMNAME (#alias)) __THROW # define __REDIRECT_NTHNL(name, proto, alias) \ name proto __asm__ (__ASMNAME (#alias)) __THROWNL # endif # define __ASMNAME(cname) __ASMNAME2 (__USER_LABEL_PREFIX__, cname) # define __ASMNAME2(prefix, cname) __STRING (prefix) cname /* #elif __SOME_OTHER_COMPILER__ # define __REDIRECT(name, proto, alias) name proto; \ _Pragma("let " #name " = " #alias) */ #endif /* GCC and clang have various useful declarations that can be made with the '__attribute__' syntax. All of the ways we use this do fine if they are omitted for compilers that don't understand it. */ #if !(defined __GNUC__ || defined __clang__) # define __attribute__(xyz) /* Ignore */ #endif /* At some point during the gcc 2.96 development the `malloc' attribute for functions was introduced. We don't want to use it unconditionally (although this would be possible) since it generates warnings. */ #if __GNUC_PREREQ (2,96) || __glibc_has_attribute (__malloc__) # define __attribute_malloc__ __attribute__ ((__malloc__)) #else # define __attribute_malloc__ /* Ignore */ #endif /* Tell the compiler which arguments to an allocation function indicate the size of the allocation. */ #if __GNUC_PREREQ (4, 3) # define __attribute_alloc_size__(params) \ __attribute__ ((__alloc_size__ params)) #else # define __attribute_alloc_size__(params) /* Ignore. */ #endif /* Tell the compiler which argument to an allocation function indicates the alignment of the allocation. */ #if __GNUC_PREREQ (4, 9) || __glibc_has_attribute (__alloc_align__) # define __attribute_alloc_align__(param) \ __attribute__ ((__alloc_align__ param)) #else # define __attribute_alloc_align__(param) /* Ignore. */ #endif /* At some point during the gcc 2.96 development the `pure' attribute for functions was introduced. We don't want to use it unconditionally (although this would be possible) since it generates warnings. */ #if __GNUC_PREREQ (2,96) || __glibc_has_attribute (__pure__) # define __attribute_pure__ __attribute__ ((__pure__)) #else # define __attribute_pure__ /* Ignore */ #endif /* This declaration tells the compiler that the value is constant. */ #if __GNUC_PREREQ (2,5) || __glibc_has_attribute (__const__) # define __attribute_const__ __attribute__ ((__const__)) #else # define __attribute_const__ /* Ignore */ #endif #if __GNUC_PREREQ (2,7) || __glibc_has_attribute (__unused__) # define __attribute_maybe_unused__ __attribute__ ((__unused__)) #else # define __attribute_maybe_unused__ /* Ignore */ #endif /* At some point during the gcc 3.1 development the `used' attribute for functions was introduced. We don't want to use it unconditionally (although this would be possible) since it generates warnings. */ #if __GNUC_PREREQ (3,1) || __glibc_has_attribute (__used__) # define __attribute_used__ __attribute__ ((__used__)) # define __attribute_noinline__ __attribute__ ((__noinline__)) #else # define __attribute_used__ __attribute__ ((__unused__)) # define __attribute_noinline__ /* Ignore */ #endif /* Since version 3.2, gcc allows marking deprecated functions. */ #if __GNUC_PREREQ (3,2) || __glibc_has_attribute (__deprecated__) # define __attribute_deprecated__ __attribute__ ((__deprecated__)) #else # define __attribute_deprecated__ /* Ignore */ #endif /* Since version 4.5, gcc also allows one to specify the message printed when a deprecated function is used. clang claims to be gcc 4.2, but may also support this feature. */ #if __GNUC_PREREQ (4,5) \ || __glibc_has_extension (__attribute_deprecated_with_message__) # define __attribute_deprecated_msg__(msg) \ __attribute__ ((__deprecated__ (msg))) #else # define __attribute_deprecated_msg__(msg) __attribute_deprecated__ #endif /* At some point during the gcc 2.8 development the `format_arg' attribute for functions was introduced. We don't want to use it unconditionally (although this would be possible) since it generates warnings. If several `format_arg' attributes are given for the same function, in gcc-3.0 and older, all but the last one are ignored. In newer gccs, all designated arguments are considered. */ #if __GNUC_PREREQ (2,8) || __glibc_has_attribute (__format_arg__) # define __attribute_format_arg__(x) __attribute__ ((__format_arg__ (x))) #else # define __attribute_format_arg__(x) /* Ignore */ #endif /* At some point during the gcc 2.97 development the `strfmon' format attribute for functions was introduced. We don't want to use it unconditionally (although this would be possible) since it generates warnings. */ #if __GNUC_PREREQ (2,97) || __glibc_has_attribute (__format__) # define __attribute_format_strfmon__(a,b) \ __attribute__ ((__format__ (__strfmon__, a, b))) #else # define __attribute_format_strfmon__(a,b) /* Ignore */ #endif /* The nonnull function attribute marks pointer parameters that must not be NULL. This has the name __nonnull in glibc, and __attribute_nonnull__ in files shared with Gnulib to avoid collision with a different __nonnull in DragonFlyBSD 5.9. */ #ifndef __attribute_nonnull__ # if __GNUC_PREREQ (3,3) || __glibc_has_attribute (__nonnull__) # define __attribute_nonnull__(params) __attribute__ ((__nonnull__ params)) # else # define __attribute_nonnull__(params) # endif #endif #ifndef __nonnull # define __nonnull(params) __attribute_nonnull__ (params) #endif /* The returns_nonnull function attribute marks the return type of the function as always being non-null. */ #ifndef __returns_nonnull # if __GNUC_PREREQ (4, 9) || __glibc_has_attribute (__returns_nonnull__) # define __returns_nonnull __attribute__ ((__returns_nonnull__)) # else # define __returns_nonnull # endif #endif /* If fortification mode, we warn about unused results of certain function calls which can lead to problems. */ #if __GNUC_PREREQ (3,4) || __glibc_has_attribute (__warn_unused_result__) # define __attribute_warn_unused_result__ \ __attribute__ ((__warn_unused_result__)) # if defined __USE_FORTIFY_LEVEL && __USE_FORTIFY_LEVEL > 0 # define __wur __attribute_warn_unused_result__ # endif #else # define __attribute_warn_unused_result__ /* empty */ #endif #ifndef __wur # define __wur /* Ignore */ #endif /* Forces a function to be always inlined. */ #if __GNUC_PREREQ (3,2) || __glibc_has_attribute (__always_inline__) /* The Linux kernel defines __always_inline in stddef.h (283d7573), and it conflicts with this definition. Therefore undefine it first to allow either header to be included first. */ # undef __always_inline # define __always_inline __inline __attribute__ ((__always_inline__)) #else # undef __always_inline # define __always_inline __inline #endif /* Associate error messages with the source location of the call site rather than with the source location inside the function. */ #if __GNUC_PREREQ (4,3) || __glibc_has_attribute (__artificial__) # define __attribute_artificial__ __attribute__ ((__artificial__)) #else # define __attribute_artificial__ /* Ignore */ #endif /* GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99 inline semantics, unless -fgnu89-inline is used. Using __GNUC_STDC_INLINE__ or __GNUC_GNU_INLINE is not a good enough check for gcc because gcc versions older than 4.3 may define these macros and still not guarantee GNU inlining semantics. clang++ identifies itself as gcc-4.2, but has support for GNU inlining semantics, that can be checked for by using the __GNUC_STDC_INLINE_ and __GNUC_GNU_INLINE__ macro definitions. */ #if (!defined __cplusplus || __GNUC_PREREQ (4,3) \ || (defined __clang__ && (defined __GNUC_STDC_INLINE__ \ || defined __GNUC_GNU_INLINE__))) # if defined __GNUC_STDC_INLINE__ || defined __cplusplus # define __extern_inline extern __inline __attribute__ ((__gnu_inline__)) # define __extern_always_inline \ extern __always_inline __attribute__ ((__gnu_inline__)) # else # define __extern_inline extern __inline # define __extern_always_inline extern __always_inline # endif #endif #ifdef __extern_always_inline # define __fortify_function __extern_always_inline __attribute_artificial__ #endif /* GCC 4.3 and above allow passing all anonymous arguments of an __extern_always_inline function to some other vararg function. */ #if __GNUC_PREREQ (4,3) # define __va_arg_pack() __builtin_va_arg_pack () # define __va_arg_pack_len() __builtin_va_arg_pack_len () #endif /* It is possible to compile containing GCC extensions even if GCC is run in pedantic mode if the uses are carefully marked using the `__extension__' keyword. But this is not generally available before version 2.8. */ #if !(__GNUC_PREREQ (2,8) || defined __clang__) # define __extension__ /* Ignore */ #endif /* __restrict is known in EGCS 1.2 and above, and in clang. It works also in C++ mode (outside of arrays), but only when spelled as '__restrict', not 'restrict'. */ #if !(__GNUC_PREREQ (2,92) || __clang_major__ >= 3) # if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L # define __restrict restrict # else # define __restrict /* Ignore */ # endif #endif /* ISO C99 also allows to declare arrays as non-overlapping. The syntax is array_name[restrict] GCC 3.1 and clang support this. This syntax is not usable in C++ mode. */ #if (__GNUC_PREREQ (3,1) || __clang_major__ >= 3) && !defined __cplusplus # define __restrict_arr __restrict #else # ifdef __GNUC__ # define __restrict_arr /* Not supported in old GCC. */ # else # if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L # define __restrict_arr restrict # else /* Some other non-C99 compiler. */ # define __restrict_arr /* Not supported. */ # endif # endif #endif #if (__GNUC__ >= 3) || __glibc_has_builtin (__builtin_expect) # define __glibc_unlikely(cond) __builtin_expect ((cond), 0) # define __glibc_likely(cond) __builtin_expect ((cond), 1) #else # define __glibc_unlikely(cond) (cond) # define __glibc_likely(cond) (cond) #endif #if (!defined _Noreturn \ && (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) < 201112 \ && !(__GNUC_PREREQ (4,7) \ || (3 < __clang_major__ + (5 <= __clang_minor__)))) # if __GNUC_PREREQ (2,8) # define _Noreturn __attribute__ ((__noreturn__)) # else # define _Noreturn # endif #endif #if __GNUC_PREREQ (8, 0) /* Describes a char array whose address can safely be passed as the first argument to strncpy and strncat, as the char array is not necessarily a NUL-terminated string. */ # define __attribute_nonstring__ __attribute__ ((__nonstring__)) #else # define __attribute_nonstring__ #endif /* Undefine (also defined in libc-symbols.h). */ #undef __attribute_copy__ #if __GNUC_PREREQ (9, 0) /* Copies attributes from the declaration or type referenced by the argument. */ # define __attribute_copy__(arg) __attribute__ ((__copy__ (arg))) #else # define __attribute_copy__(arg) #endif #if (!defined _Static_assert && !defined __cplusplus \ && (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) < 201112 \ && (!(__GNUC_PREREQ (4, 6) || __clang_major__ >= 4) \ || defined __STRICT_ANSI__)) # define _Static_assert(expr, diagnostic) \ extern int (*__Static_assert_function (void)) \ [!!sizeof (struct { int __error_if_negative: (expr) ? 2 : -1; })] #endif /* Gnulib avoids including these, as they don't work on non-glibc or older glibc platforms. */ #ifndef __GNULIB_CDEFS # include <bits/wordsize.h> # include <bits/long-double.h> #endif #if __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 1 # ifdef __REDIRECT /* Alias name defined automatically. */ # define __LDBL_REDIR(name, proto) ... unused__ldbl_redir # define __LDBL_REDIR_DECL(name) \ extern __typeof (name) name __asm (__ASMNAME ("__" #name "ieee128")); /* Alias name defined automatically, with leading underscores. */ # define __LDBL_REDIR2_DECL(name) \ extern __typeof (__##name) __##name \ __asm (__ASMNAME ("__" #name "ieee128")); /* Alias name defined manually. */ # define __LDBL_REDIR1(name, proto, alias) ... unused__ldbl_redir1 # define __LDBL_REDIR1_DECL(name, alias) \ extern __typeof (name) name __asm (__ASMNAME (#alias)); # define __LDBL_REDIR1_NTH(name, proto, alias) \ __REDIRECT_NTH (name, proto, alias) # define __REDIRECT_NTH_LDBL(name, proto, alias) \ __LDBL_REDIR1_NTH (name, proto, __##alias##ieee128) /* Unused. */ # define __REDIRECT_LDBL(name, proto, alias) ... unused__redirect_ldbl # define __LDBL_REDIR_NTH(name, proto) ... unused__ldbl_redir_nth # else _Static_assert (0, "IEEE 128-bits long double requires redirection on this platform"); # endif #elif defined __LONG_DOUBLE_MATH_OPTIONAL && defined __NO_LONG_DOUBLE_MATH # define __LDBL_COMPAT 1 # ifdef __REDIRECT # define __LDBL_REDIR1(name, proto, alias) __REDIRECT (name, proto, alias) # define __LDBL_REDIR(name, proto) \ __LDBL_REDIR1 (name, proto, __nldbl_##name) # define __LDBL_REDIR1_NTH(name, proto, alias) __REDIRECT_NTH (name, proto, alias) # define __LDBL_REDIR_NTH(name, proto) \ __LDBL_REDIR1_NTH (name, proto, __nldbl_##name) # define __LDBL_REDIR2_DECL(name) \ extern __typeof (__##name) __##name __asm (__ASMNAME ("__nldbl___" #name)); # define __LDBL_REDIR1_DECL(name, alias) \ extern __typeof (name) name __asm (__ASMNAME (#alias)); # define __LDBL_REDIR_DECL(name) \ extern __typeof (name) name __asm (__ASMNAME ("__nldbl_" #name)); # define __REDIRECT_LDBL(name, proto, alias) \ __LDBL_REDIR1 (name, proto, __nldbl_##alias) # define __REDIRECT_NTH_LDBL(name, proto, alias) \ __LDBL_REDIR1_NTH (name, proto, __nldbl_##alias) # endif #endif #if (!defined __LDBL_COMPAT && __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 0) \ || !defined __REDIRECT # define __LDBL_REDIR1(name, proto, alias) name proto # define __LDBL_REDIR(name, proto) name proto # define __LDBL_REDIR1_NTH(name, proto, alias) name proto __THROW # define __LDBL_REDIR_NTH(name, proto) name proto __THROW # define __LDBL_REDIR2_DECL(name) # define __LDBL_REDIR_DECL(name) # ifdef __REDIRECT # define __REDIRECT_LDBL(name, proto, alias) __REDIRECT (name, proto, alias) # define __REDIRECT_NTH_LDBL(name, proto, alias) \ __REDIRECT_NTH (name, proto, alias) # endif #endif /* __glibc_macro_warning (MESSAGE) issues warning MESSAGE. This is intended for use in preprocessor macros. Note: MESSAGE must be a _single_ string; concatenation of string literals is not supported. */ #if __GNUC_PREREQ (4,8) || __glibc_clang_prereq (3,5) # define __glibc_macro_warning1(message) _Pragma (#message) # define __glibc_macro_warning(message) \ __glibc_macro_warning1 (GCC warning message) #else # define __glibc_macro_warning(msg) #endif /* Generic selection (ISO C11) is a C-only feature, available in GCC since version 4.9. Previous versions do not provide generic selection, even though they might set __STDC_VERSION__ to 201112L, when in -std=c11 mode. Thus, we must check for !defined __GNUC__ when testing __STDC_VERSION__ for generic selection support. On the other hand, Clang also defines __GNUC__, so a clang-specific check is required to enable the use of generic selection. */ #if !defined __cplusplus \ && (__GNUC_PREREQ (4, 9) \ || __glibc_has_extension (c_generic_selections) \ || (!defined __GNUC__ && defined __STDC_VERSION__ \ && __STDC_VERSION__ >= 201112L)) # define __HAVE_GENERIC_SELECTION 1 #else # define __HAVE_GENERIC_SELECTION 0 #endif #if __GNUC_PREREQ (10, 0) /* Designates a 1-based positional argument ref-index of pointer type that can be used to access size-index elements of the pointed-to array according to access mode, or at least one element when size-index is not provided: access (access-mode, <ref-index> [, <size-index>]) */ # define __attr_access(x) __attribute__ ((__access__ x)) /* For _FORTIFY_SOURCE == 3 we use __builtin_dynamic_object_size, which may use the access attribute to get object sizes from function definition arguments, so we can't use them on functions we fortify. Drop the object size hints for such functions. */ # if __USE_FORTIFY_LEVEL == 3 # define __fortified_attr_access(a, o, s) __attribute__ ((__access__ (a, o))) # else # define __fortified_attr_access(a, o, s) __attr_access ((a, o, s)) # endif # if __GNUC_PREREQ (11, 0) # define __attr_access_none(argno) __attribute__ ((__access__ (__none__, argno))) # else # define __attr_access_none(argno) # endif #else # define __fortified_attr_access(a, o, s) # define __attr_access(x) # define __attr_access_none(argno) #endif #if __GNUC_PREREQ (11, 0) /* Designates dealloc as a function to call to deallocate objects allocated by the declared function. */ # define __attr_dealloc(dealloc, argno) \ __attribute__ ((__malloc__ (dealloc, argno))) # define __attr_dealloc_free __attr_dealloc (__builtin_free, 1) #else # define __attr_dealloc(dealloc, argno) # define __attr_dealloc_free #endif /* Specify that a function such as setjmp or vfork may return twice. */ #if __GNUC_PREREQ (4, 1) # define __attribute_returns_twice__ __attribute__ ((__returns_twice__)) #else # define __attribute_returns_twice__ /* Ignore. */ #endif #endif /* sys/cdefs.h */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/hard-locale.c��������������������������������������������������������������������������0000644�0001750�0001750�00000002722�14436425345�015453� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* hard-locale.c -- Determine whether a locale is hard. Copyright (C) 1997-1999, 2002-2004, 2006-2007, 2009-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include "hard-locale.h" #include <locale.h> #include <stdlib.h> #include <string.h> bool hard_locale (int category) { char locale[SETLOCALE_NULL_MAX]; if (setlocale_null_r (category, locale, sizeof (locale))) return false; if (!(strcmp (locale, "C") == 0 || strcmp (locale, "POSIX") == 0)) return true; #if defined __ANDROID__ /* On Android 5.0 or newer, it is possible to set a locale that has the same name as the "C" locale but in fact uses UTF-8 encoding. Cf. test case 2 in <https://lists.gnu.org/archive/html/bug-gnulib/2023-01/msg00141.html>. */ if (MB_CUR_MAX > 1) return true; #endif return false; } ����������������������������������������������rush-2.4/gnu/getopt1.c������������������������������������������������������������������������������0000644�0001750�0001750�00000007360�14436425345�014666� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* getopt_long and getopt_long_only entry points for GNU getopt. Copyright (C) 1987-2023 Free Software Foundation, Inc. This file is part of the GNU C Library and is also part of gnulib. Patches to this file should be submitted to both projects. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ #ifndef _LIBC # include <config.h> #endif #include "getopt.h" #include "getopt_int.h" int getopt_long (int argc, char *__getopt_argv_const *argv, const char *options, const struct option *long_options, int *opt_index) { return _getopt_internal (argc, (char **) argv, options, long_options, opt_index, 0, 0); } int _getopt_long_r (int argc, char **argv, const char *options, const struct option *long_options, int *opt_index, struct _getopt_data *d) { return _getopt_internal_r (argc, argv, options, long_options, opt_index, 0, d, 0); } /* Like getopt_long, but '-' as well as '--' can indicate a long option. If an option that starts with '-' (not '--') doesn't match a long option, but does match a short option, it is parsed as a short option instead. */ int getopt_long_only (int argc, char *__getopt_argv_const *argv, const char *options, const struct option *long_options, int *opt_index) { return _getopt_internal (argc, (char **) argv, options, long_options, opt_index, 1, 0); } int _getopt_long_only_r (int argc, char **argv, const char *options, const struct option *long_options, int *opt_index, struct _getopt_data *d) { return _getopt_internal_r (argc, argv, options, long_options, opt_index, 1, d, 0); } #ifdef TEST #include <stdio.h> #include <stdlib.h> int main (int argc, char **argv) { int c; int digit_optind = 0; while (1) { int this_option_optind = optind ? optind : 1; int option_index = 0; static const struct option long_options[] = { {"add", 1, 0, 0}, {"append", 0, 0, 0}, {"delete", 1, 0, 0}, {"verbose", 0, 0, 0}, {"create", 0, 0, 0}, {"file", 1, 0, 0}, {0, 0, 0, 0} }; c = getopt_long (argc, argv, "abc:d:0123456789", long_options, &option_index); if (c == -1) break; switch (c) { case 0: printf ("option %s", long_options[option_index].name); if (optarg) printf (" with arg %s", optarg); printf ("\n"); break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': if (digit_optind != 0 && digit_optind != this_option_optind) printf ("digits occur in two different argv-elements.\n"); digit_optind = this_option_optind; printf ("option %c\n", c); break; case 'a': printf ("option a\n"); break; case 'b': printf ("option b\n"); break; case 'c': printf ("option c with value '%s'\n", optarg); break; case 'd': printf ("option d with value '%s'\n", optarg); break; case '?': break; default: printf ("?? getopt returned character code 0%o ??\n", c); } } if (optind < argc) { printf ("non-option ARGV-elements: "); while (optind < argc) printf ("%s ", argv[optind++]); printf ("\n"); } exit (0); } #endif /* TEST */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/basename-lgpl.h������������������������������������������������������������������������0000644�0001750�0001750�00000005512�14436425345�016014� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Extract the last component (base name) of a file name. Copyright (C) 1998, 2001, 2003-2006, 2009-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _BASENAME_LGPL_H #define _BASENAME_LGPL_H /* This file uses _GL_ATTRIBUTE_PURE. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif #include <stddef.h> #ifndef DOUBLE_SLASH_IS_DISTINCT_ROOT # define DOUBLE_SLASH_IS_DISTINCT_ROOT 0 #endif #ifdef __cplusplus extern "C" { #endif /* Return the address of the last file name component of FILENAME. If FILENAME has some trailing slash(es), they are considered to be part of the last component. If FILENAME has no relative file name components because it is a file system root, return the empty string. Examples: FILENAME RESULT "foo.c" "foo.c" "foo/bar.c" "bar.c" "/foo/bar.c" "bar.c" "foo/bar/" "bar/" "foo/bar//" "bar//" "/" "" "//" "" "" "" The return value is a tail of the given FILENAME; do NOT free() it! */ /* This function was traditionally called 'basename', but we avoid this function name because * Various platforms have different functions in their libc. In particular, the glibc basename(), defined in <string.h>, does not consider trailing slashes to be part of the component: FILENAME RESULT "foo/bar/" "" "foo/bar//" "" * The 'basename' command eliminates trailing slashes and for a root produces a non-empty result: FILENAME RESULT "foo/bar/" "bar" "foo/bar//" "bar" "/" "/" "//" "/" */ extern char *last_component (char const *filename) _GL_ATTRIBUTE_PURE; /* Return the length of the basename FILENAME. Typically FILENAME is the value returned by base_name or last_component. Act like strlen (FILENAME), except omit all trailing slashes. */ extern size_t base_len (char const *filename) _GL_ATTRIBUTE_PURE; #ifdef __cplusplus } /* extern "C" */ #endif #endif /* _BASENAME_LGPL_H */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/msvc-nothrow.c�������������������������������������������������������������������������0000644�0001750�0001750�00000002556�14436425346�015754� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Wrappers that don't throw invalid parameter notifications with MSVC runtime libraries. Copyright (C) 2011-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "msvc-nothrow.h" /* Get declarations of the native Windows API functions. */ #define WIN32_LEAN_AND_MEAN #include <windows.h> #if HAVE_MSVC_INVALID_PARAMETER_HANDLER # include "msvc-inval.h" #endif #undef _get_osfhandle #if HAVE_MSVC_INVALID_PARAMETER_HANDLER intptr_t _gl_nothrow_get_osfhandle (int fd) { intptr_t result; TRY_MSVC_INVAL { result = _get_osfhandle (fd); } CATCH_MSVC_INVAL { result = (intptr_t) INVALID_HANDLE_VALUE; } DONE_MSVC_INVAL; return result; } #endif ��������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/basename-lgpl.c������������������������������������������������������������������������0000644�0001750�0001750�00000003440�14436425345�016005� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* basename.c -- return the last element in a file name Copyright (C) 1990, 1998-2001, 2003-2006, 2009-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "basename-lgpl.h" #include <string.h> #include "filename.h" char * last_component (char const *name) { char const *base = name + FILE_SYSTEM_PREFIX_LEN (name); char const *p; bool last_was_slash = false; while (ISSLASH (*base)) base++; for (p = base; *p; p++) { if (ISSLASH (*p)) last_was_slash = true; else if (last_was_slash) { base = p; last_was_slash = false; } } return (char *) base; } size_t base_len (char const *name) { size_t len; size_t prefix_len = FILE_SYSTEM_PREFIX_LEN (name); for (len = strlen (name); 1 < len && ISSLASH (name[len - 1]); len--) continue; if (DOUBLE_SLASH_IS_DISTINCT_ROOT && len == 1 && ISSLASH (name[0]) && ISSLASH (name[1]) && ! name[2]) return 2; if (FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE && prefix_len && len == prefix_len && ISSLASH (name[prefix_len])) return prefix_len + 1; return len; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/dynarray.h�����������������������������������������������������������������������������0000644�0001750�0001750�00000022307�14436425345�015137� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Type-safe arrays which grow dynamically. Copyright 2021-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paul Eggert and Bruno Haible, 2021. */ #ifndef _GL_DYNARRAY_H #define _GL_DYNARRAY_H /* Before including this file, you need to define: DYNARRAY_STRUCT The struct tag of dynamic array to be defined. DYNARRAY_ELEMENT The type name of the element type. Elements are copied as if by memcpy, and can change address as the dynamic array grows. DYNARRAY_PREFIX The prefix of the functions which are defined. The following parameters are optional: DYNARRAY_ELEMENT_FREE DYNARRAY_ELEMENT_FREE (E) is evaluated to deallocate the contents of elements. E is of type DYNARRAY_ELEMENT *. DYNARRAY_ELEMENT_INIT DYNARRAY_ELEMENT_INIT (E) is evaluated to initialize a new element. E is of type DYNARRAY_ELEMENT *. If DYNARRAY_ELEMENT_FREE but not DYNARRAY_ELEMENT_INIT is defined, new elements are automatically zero-initialized. Otherwise, new elements have undefined contents. DYNARRAY_INITIAL_SIZE The size of the statically allocated array (default: at least 2, more elements if they fit into 128 bytes). Must be a preprocessor constant. If DYNARRAY_INITIAL_SIZE is 0, there is no statically allocated array at, and all non-empty arrays are heap-allocated. DYNARRAY_FINAL_TYPE The name of the type which holds the final array. If not defined, is PREFIX##finalize not provided. DYNARRAY_FINAL_TYPE must be a struct type, with members of type DYNARRAY_ELEMENT and size_t at the start (in this order). These macros are undefined after this header file has been included. The following types are provided (their members are private to the dynarray implementation): struct DYNARRAY_STRUCT The following functions are provided: */ /* Initialize a dynamic array object. This must be called before any use of the object. */ #if 0 static void DYNARRAY_PREFIX##init (struct DYNARRAY_STRUCT *list); #endif /* Deallocate the dynamic array and its elements. */ #if 0 static void DYNARRAY_PREFIX##free (struct DYNARRAY_STRUCT *list); #endif /* Return true if the dynamic array is in an error state. */ #if 0 static bool DYNARRAY_PREFIX##has_failed (const struct DYNARRAY_STRUCT *list); #endif /* Mark the dynamic array as failed. All elements are deallocated as a side effect. */ #if 0 static void DYNARRAY_PREFIX##mark_failed (struct DYNARRAY_STRUCT *list); #endif /* Return the number of elements which have been added to the dynamic array. */ #if 0 static size_t DYNARRAY_PREFIX##size (const struct DYNARRAY_STRUCT *list); #endif /* Return a pointer to the first array element, if any. For a zero-length array, the pointer can be NULL even though the dynamic array has not entered the failure state. */ #if 0 static DYNARRAY_ELEMENT * DYNARRAY_PREFIX##begin (const struct DYNARRAY_STRUCT *list); #endif /* Return a pointer one element past the last array element. For a zero-length array, the pointer can be NULL even though the dynamic array has not entered the failure state. */ #if 0 static DYNARRAY_ELEMENT * DYNARRAY_PREFIX##end (const struct DYNARRAY_STRUCT *list); #endif /* Return a pointer to the array element at INDEX. Terminate the process if INDEX is out of bounds. */ #if 0 static DYNARRAY_ELEMENT * DYNARRAY_PREFIX##at (struct DYNARRAY_STRUCT *list, size_t index); #endif /* Add ITEM at the end of the array, enlarging it by one element. Mark *LIST as failed if the dynamic array allocation size cannot be increased. */ #if 0 static void DYNARRAY_PREFIX##add (struct DYNARRAY_STRUCT *list, DYNARRAY_ELEMENT item); #endif /* Allocate a place for a new element in *LIST and return a pointer to it. The pointer can be NULL if the dynamic array cannot be enlarged due to a memory allocation failure. */ #if 0 static DYNARRAY_ELEMENT * DYNARRAY_PREFIX##emplace (struct DYNARRAY_STRUCT *list); #endif /* Change the size of *LIST to SIZE. If SIZE is larger than the existing size, new elements are added (which can be initialized). Otherwise, the list is truncated, and elements are freed. Return false on memory allocation failure (and mark *LIST as failed). */ #if 0 static bool DYNARRAY_PREFIX##resize (struct DYNARRAY_STRUCT *list, size_t size); #endif /* Remove the last element of LIST if it is present. */ #if 0 static void DYNARRAY_PREFIX##remove_last (struct DYNARRAY_STRUCT *list); #endif /* Remove all elements from the list. The elements are freed, but the list itself is not. */ #if 0 static void DYNARRAY_PREFIX##clear (struct DYNARRAY_STRUCT *list); #endif #if defined DYNARRAY_FINAL_TYPE /* Transfer the dynamic array to a permanent location at *RESULT. Returns true on success on false on allocation failure. In either case, *LIST is re-initialized and can be reused. A NULL pointer is stored in *RESULT if LIST refers to an empty list. On success, the pointer in *RESULT is heap-allocated and must be deallocated using free. */ #if 0 static bool DYNARRAY_PREFIX##finalize (struct DYNARRAY_STRUCT *list, DYNARRAY_FINAL_TYPE *result); #endif #else /* !defined DYNARRAY_FINAL_TYPE */ /* Transfer the dynamic array to a heap-allocated array and return a pointer to it. The pointer is NULL if memory allocation fails, or if the array is empty, so this function should be used only for arrays which are known not be empty (usually because they always have a sentinel at the end). If LENGTHP is not NULL, the array length is written to *LENGTHP. *LIST is re-initialized and can be reused. */ #if 0 static DYNARRAY_ELEMENT * DYNARRAY_PREFIX##finalize (struct DYNARRAY_STRUCT *list, size_t *lengthp); #endif #endif /* A minimal example which provides a growing list of integers can be defined like this: struct int_array { // Pointer to result array followed by its length, // as required by DYNARRAY_FINAL_TYPE. int *array; size_t length; }; #define DYNARRAY_STRUCT dynarray_int #define DYNARRAY_ELEMENT int #define DYNARRAY_PREFIX dynarray_int_ #define DYNARRAY_FINAL_TYPE struct int_array #include <malloc/dynarray-skeleton.c> To create a three-element array with elements 1, 2, 3, use this code: struct dynarray_int dyn; dynarray_int_init (&dyn); for (int i = 1; i <= 3; ++i) { int *place = dynarray_int_emplace (&dyn); assert (place != NULL); *place = i; } struct int_array result; bool ok = dynarray_int_finalize (&dyn, &result); assert (ok); assert (result.length == 3); assert (result.array[0] == 1); assert (result.array[1] == 2); assert (result.array[2] == 3); free (result.array); If the elements contain resources which must be freed, define DYNARRAY_ELEMENT_FREE appropriately, like this: struct str_array { char **array; size_t length; }; #define DYNARRAY_STRUCT dynarray_str #define DYNARRAY_ELEMENT char * #define DYNARRAY_ELEMENT_FREE(ptr) free (*ptr) #define DYNARRAY_PREFIX dynarray_str_ #define DYNARRAY_FINAL_TYPE struct str_array #include <malloc/dynarray-skeleton.c> */ /* The implementation is imported from glibc. */ /* Avoid possible conflicts with symbols exported by the GNU libc. */ #define __libc_dynarray_at_failure gl_dynarray_at_failure #define __libc_dynarray_emplace_enlarge gl_dynarray_emplace_enlarge #define __libc_dynarray_finalize gl_dynarray_finalize #define __libc_dynarray_resize_clear gl_dynarray_resize_clear #define __libc_dynarray_resize gl_dynarray_resize #if defined DYNARRAY_STRUCT || defined DYNARRAY_ELEMENT || defined DYNARRAY_PREFIX # ifndef _GL_LIKELY /* Rely on __builtin_expect, as provided by the module 'builtin-expect'. */ # define _GL_LIKELY(cond) __builtin_expect ((cond), 1) # define _GL_UNLIKELY(cond) __builtin_expect ((cond), 0) # endif /* Define auxiliary structs and declare auxiliary functions, common to all instantiations of dynarray. */ # include <malloc/dynarray.gl.h> /* Define the instantiation, specified through DYNARRAY_STRUCT DYNARRAY_ELEMENT DYNARRAY_PREFIX etc. */ # include <malloc/dynarray-skeleton.gl.h> #else /* This file is being included from one of the malloc/dynarray_*.c files. */ # include <malloc/dynarray.h> #endif #endif /* _GL_DYNARRAY_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/inttostr.h�����������������������������������������������������������������������������0000644�0001750�0001750�00000002432�14436425345�015171� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* inttostr.h -- convert integers to printable strings Copyright (C) 2001-2006, 2009-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paul Eggert */ /* This file uses _GL_ATTRIBUTE_NODISCARD. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif #include <stdint.h> #include <sys/types.h> #include "intprops.h" _GL_ATTRIBUTE_NODISCARD char *imaxtostr (intmax_t, char *); _GL_ATTRIBUTE_NODISCARD char *inttostr (int, char *); _GL_ATTRIBUTE_NODISCARD char *offtostr (off_t, char *); _GL_ATTRIBUTE_NODISCARD char *uinttostr (unsigned int, char *); _GL_ATTRIBUTE_NODISCARD char *umaxtostr (uintmax_t, char *); ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/fcntl.c��������������������������������������������������������������������������������0000644�0001750�0001750�00000044621�14436425345�014412� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Provide file descriptor control. Copyright (C) 2009-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Eric Blake <ebb9@byu.net>. */ #include <config.h> /* Specification. */ #include <fcntl.h> #include <errno.h> #include <limits.h> #include <stdarg.h> #include <stdlib.h> #include <unistd.h> #ifdef __KLIBC__ # define INCL_DOS # include <os2.h> #endif #if defined _WIN32 && ! defined __CYGWIN__ /* Get declarations of the native Windows API functions. */ # define WIN32_LEAN_AND_MEAN # include <windows.h> /* Get _get_osfhandle. */ # if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" # else # include <io.h> # endif /* Upper bound on getdtablesize(). See lib/getdtablesize.c. */ # define OPEN_MAX_MAX 0x10000 /* Duplicate OLDFD into the first available slot of at least NEWFD, which must be positive, with FLAGS determining whether the duplicate will be inheritable. */ static int dupfd (int oldfd, int newfd, int flags) { /* Mingw has no way to create an arbitrary fd. Iterate until all file descriptors less than newfd are filled up. */ HANDLE curr_process = GetCurrentProcess (); HANDLE old_handle = (HANDLE) _get_osfhandle (oldfd); unsigned char fds_to_close[OPEN_MAX_MAX / CHAR_BIT]; unsigned int fds_to_close_bound = 0; int result; BOOL inherit = flags & O_CLOEXEC ? FALSE : TRUE; int mode; if (newfd < 0 || getdtablesize () <= newfd) { errno = EINVAL; return -1; } if (old_handle == INVALID_HANDLE_VALUE || (mode = _setmode (oldfd, O_BINARY)) == -1) { /* oldfd is not open, or is an unassigned standard file descriptor. */ errno = EBADF; return -1; } _setmode (oldfd, mode); flags |= mode; for (;;) { HANDLE new_handle; int duplicated_fd; unsigned int index; if (!DuplicateHandle (curr_process, /* SourceProcessHandle */ old_handle, /* SourceHandle */ curr_process, /* TargetProcessHandle */ (PHANDLE) &new_handle, /* TargetHandle */ (DWORD) 0, /* DesiredAccess */ inherit, /* InheritHandle */ DUPLICATE_SAME_ACCESS)) /* Options */ { switch (GetLastError ()) { case ERROR_TOO_MANY_OPEN_FILES: errno = EMFILE; break; case ERROR_INVALID_HANDLE: case ERROR_INVALID_TARGET_HANDLE: case ERROR_DIRECT_ACCESS_HANDLE: errno = EBADF; break; case ERROR_INVALID_PARAMETER: case ERROR_INVALID_FUNCTION: case ERROR_INVALID_ACCESS: errno = EINVAL; break; default: errno = EACCES; break; } result = -1; break; } duplicated_fd = _open_osfhandle ((intptr_t) new_handle, flags); if (duplicated_fd < 0) { CloseHandle (new_handle); result = -1; break; } if (newfd <= duplicated_fd) { result = duplicated_fd; break; } /* Set the bit duplicated_fd in fds_to_close[]. */ index = (unsigned int) duplicated_fd / CHAR_BIT; if (fds_to_close_bound <= index) { if (sizeof fds_to_close <= index) /* Need to increase OPEN_MAX_MAX. */ abort (); memset (fds_to_close + fds_to_close_bound, '\0', index + 1 - fds_to_close_bound); fds_to_close_bound = index + 1; } fds_to_close[index] |= 1 << ((unsigned int) duplicated_fd % CHAR_BIT); } /* Close the previous fds that turned out to be too small. */ { int saved_errno = errno; unsigned int duplicated_fd; for (duplicated_fd = 0; duplicated_fd < fds_to_close_bound * CHAR_BIT; duplicated_fd++) if ((fds_to_close[duplicated_fd / CHAR_BIT] >> (duplicated_fd % CHAR_BIT)) & 1) close (duplicated_fd); errno = saved_errno; } # if REPLACE_FCHDIR if (0 <= result) result = _gl_register_dup (oldfd, result); # endif return result; } #endif /* W32 */ /* Forward declarations, because we '#undef fcntl' in the middle of this compilation unit. */ /* Our implementation of fcntl (fd, F_DUPFD, target). */ static int rpl_fcntl_DUPFD (int fd, int target); /* Our implementation of fcntl (fd, F_DUPFD_CLOEXEC, target). */ static int rpl_fcntl_DUPFD_CLOEXEC (int fd, int target); #ifdef __KLIBC__ /* Adds support for fcntl on directories. */ static int klibc_fcntl (int fd, int action, /* arg */...); #endif /* Perform the specified ACTION on the file descriptor FD, possibly using the argument ARG further described below. This replacement handles the following actions, and forwards all others on to the native fcntl. An unrecognized ACTION returns -1 with errno set to EINVAL. F_DUPFD - duplicate FD, with int ARG being the minimum target fd. If successful, return the duplicate, which will be inheritable; otherwise return -1 and set errno. F_DUPFD_CLOEXEC - duplicate FD, with int ARG being the minimum target fd. If successful, return the duplicate, which will not be inheritable; otherwise return -1 and set errno. F_GETFD - ARG need not be present. If successful, return a non-negative value containing the descriptor flags of FD (only FD_CLOEXEC is portable, but other flags may be present); otherwise return -1 and set errno. */ int fcntl (int fd, int action, /* arg */...) #undef fcntl #ifdef __KLIBC__ # define fcntl klibc_fcntl #endif { va_list arg; int result = -1; va_start (arg, action); switch (action) { case F_DUPFD: { int target = va_arg (arg, int); result = rpl_fcntl_DUPFD (fd, target); break; } case F_DUPFD_CLOEXEC: { int target = va_arg (arg, int); result = rpl_fcntl_DUPFD_CLOEXEC (fd, target); break; } #if !HAVE_FCNTL case F_GETFD: { # if defined _WIN32 && ! defined __CYGWIN__ HANDLE handle = (HANDLE) _get_osfhandle (fd); DWORD flags; if (handle == INVALID_HANDLE_VALUE || GetHandleInformation (handle, &flags) == 0) errno = EBADF; else result = (flags & HANDLE_FLAG_INHERIT) ? 0 : FD_CLOEXEC; # else /* !W32 */ /* Use dup2 to reject invalid file descriptors. No way to access this information, so punt. */ if (0 <= dup2 (fd, fd)) result = 0; # endif /* !W32 */ break; } /* F_GETFD */ #endif /* !HAVE_FCNTL */ /* Implementing F_SETFD on mingw is not trivial - there is no API for changing the O_NOINHERIT bit on an fd, and merely changing the HANDLE_FLAG_INHERIT bit on the underlying handle can lead to odd state. It may be possible by duplicating the handle, using _open_osfhandle with the right flags, then using dup2 to move the duplicate onto the original, but that is not supported for now. */ default: { #if HAVE_FCNTL switch (action) { #ifdef F_BARRIERFSYNC /* macOS */ case F_BARRIERFSYNC: #endif #ifdef F_CHKCLEAN /* macOS */ case F_CHKCLEAN: #endif #ifdef F_CLOSEM /* NetBSD, HP-UX */ case F_CLOSEM: #endif #ifdef F_FLUSH_DATA /* macOS */ case F_FLUSH_DATA: #endif #ifdef F_FREEZE_FS /* macOS */ case F_FREEZE_FS: #endif #ifdef F_FULLFSYNC /* macOS */ case F_FULLFSYNC: #endif #ifdef F_GETCONFINED /* macOS */ case F_GETCONFINED: #endif #ifdef F_GETDEFAULTPROTLEVEL /* macOS */ case F_GETDEFAULTPROTLEVEL: #endif #ifdef F_GETFD /* POSIX */ case F_GETFD: #endif #ifdef F_GETFL /* POSIX */ case F_GETFL: #endif #ifdef F_GETLEASE /* Linux */ case F_GETLEASE: #endif #ifdef F_GETNOSIGPIPE /* macOS */ case F_GETNOSIGPIPE: #endif #ifdef F_GETOWN /* POSIX */ case F_GETOWN: #endif #ifdef F_GETPIPE_SZ /* Linux */ case F_GETPIPE_SZ: #endif #ifdef F_GETPROTECTIONCLASS /* macOS */ case F_GETPROTECTIONCLASS: #endif #ifdef F_GETPROTECTIONLEVEL /* macOS */ case F_GETPROTECTIONLEVEL: #endif #ifdef F_GET_SEALS /* Linux */ case F_GET_SEALS: #endif #ifdef F_GETSIG /* Linux */ case F_GETSIG: #endif #ifdef F_MAXFD /* NetBSD */ case F_MAXFD: #endif #ifdef F_RECYCLE /* macOS */ case F_RECYCLE: #endif #ifdef F_SETFIFOENH /* HP-UX */ case F_SETFIFOENH: #endif #ifdef F_THAW_FS /* macOS */ case F_THAW_FS: #endif /* These actions take no argument. */ result = fcntl (fd, action); break; #ifdef F_ADD_SEALS /* Linux */ case F_ADD_SEALS: #endif #ifdef F_BADFD /* Solaris */ case F_BADFD: #endif #ifdef F_CHECK_OPENEVT /* macOS */ case F_CHECK_OPENEVT: #endif #ifdef F_DUP2FD /* FreeBSD, AIX, Solaris */ case F_DUP2FD: #endif #ifdef F_DUP2FD_CLOEXEC /* FreeBSD, Solaris */ case F_DUP2FD_CLOEXEC: #endif #ifdef F_DUP2FD_CLOFORK /* Solaris */ case F_DUP2FD_CLOFORK: #endif #ifdef F_DUPFD /* POSIX */ case F_DUPFD: #endif #ifdef F_DUPFD_CLOEXEC /* POSIX */ case F_DUPFD_CLOEXEC: #endif #ifdef F_DUPFD_CLOFORK /* Solaris */ case F_DUPFD_CLOFORK: #endif #ifdef F_GETXFL /* Solaris */ case F_GETXFL: #endif #ifdef F_GLOBAL_NOCACHE /* macOS */ case F_GLOBAL_NOCACHE: #endif #ifdef F_MAKECOMPRESSED /* macOS */ case F_MAKECOMPRESSED: #endif #ifdef F_MOVEDATAEXTENTS /* macOS */ case F_MOVEDATAEXTENTS: #endif #ifdef F_NOCACHE /* macOS */ case F_NOCACHE: #endif #ifdef F_NODIRECT /* macOS */ case F_NODIRECT: #endif #ifdef F_NOTIFY /* Linux */ case F_NOTIFY: #endif #ifdef F_OPLKACK /* IRIX */ case F_OPLKACK: #endif #ifdef F_OPLKREG /* IRIX */ case F_OPLKREG: #endif #ifdef F_RDAHEAD /* macOS */ case F_RDAHEAD: #endif #ifdef F_SETBACKINGSTORE /* macOS */ case F_SETBACKINGSTORE: #endif #ifdef F_SETCONFINED /* macOS */ case F_SETCONFINED: #endif #ifdef F_SETFD /* POSIX */ case F_SETFD: #endif #ifdef F_SETFL /* POSIX */ case F_SETFL: #endif #ifdef F_SETLEASE /* Linux */ case F_SETLEASE: #endif #ifdef F_SETNOSIGPIPE /* macOS */ case F_SETNOSIGPIPE: #endif #ifdef F_SETOWN /* POSIX */ case F_SETOWN: #endif #ifdef F_SETPIPE_SZ /* Linux */ case F_SETPIPE_SZ: #endif #ifdef F_SETPROTECTIONCLASS /* macOS */ case F_SETPROTECTIONCLASS: #endif #ifdef F_SETSIG /* Linux */ case F_SETSIG: #endif #ifdef F_SINGLE_WRITER /* macOS */ case F_SINGLE_WRITER: #endif /* These actions take an 'int' argument. */ { int x = va_arg (arg, int); result = fcntl (fd, action, x); } break; default: /* Other actions take a pointer argument. */ { void *p = va_arg (arg, void *); result = fcntl (fd, action, p); } break; } #else errno = EINVAL; #endif break; } } va_end (arg); return result; } static int rpl_fcntl_DUPFD (int fd, int target) { int result; #if !HAVE_FCNTL result = dupfd (fd, target, 0); #elif FCNTL_DUPFD_BUGGY || REPLACE_FCHDIR /* Detect invalid target; needed for cygwin 1.5.x. */ if (target < 0 || getdtablesize () <= target) { result = -1; errno = EINVAL; } else { /* Haiku alpha 2 loses fd flags on original. */ int flags = fcntl (fd, F_GETFD); if (flags < 0) result = -1; else { result = fcntl (fd, F_DUPFD, target); if (0 <= result && fcntl (fd, F_SETFD, flags) == -1) { int saved_errno = errno; close (result); result = -1; errno = saved_errno; } # if REPLACE_FCHDIR if (0 <= result) result = _gl_register_dup (fd, result); # endif } } #else result = fcntl (fd, F_DUPFD, target); #endif return result; } static int rpl_fcntl_DUPFD_CLOEXEC (int fd, int target) { int result; #if !HAVE_FCNTL result = dupfd (fd, target, O_CLOEXEC); #else /* HAVE_FCNTL */ # if defined __NetBSD__ || defined __HAIKU__ /* On NetBSD 9.0, the system fcntl (fd, F_DUPFD_CLOEXEC, target) has only the same effect as fcntl (fd, F_DUPFD, target). */ /* On Haiku, the system fcntl (fd, F_DUPFD_CLOEXEC, target) sets the FD_CLOEXEC flag on fd, not on target. Therefore avoid the system fcntl in this case. */ # define have_dupfd_cloexec -1 # else /* Try the system call first, if the headers claim it exists (that is, if GNULIB_defined_F_DUPFD_CLOEXEC is 0), since we may be running with a glibc that has the macro but with an older kernel that does not support it. Cache the information on whether the system call really works, but avoid caching failure if the corresponding F_DUPFD fails for any reason. 0 = unknown, 1 = yes, -1 = no. */ static int have_dupfd_cloexec = GNULIB_defined_F_DUPFD_CLOEXEC ? -1 : 0; if (0 <= have_dupfd_cloexec) { result = fcntl (fd, F_DUPFD_CLOEXEC, target); if (0 <= result || errno != EINVAL) { have_dupfd_cloexec = 1; # if REPLACE_FCHDIR if (0 <= result) result = _gl_register_dup (fd, result); # endif } else { result = rpl_fcntl_DUPFD (fd, target); if (result >= 0) have_dupfd_cloexec = -1; } } else # endif result = rpl_fcntl_DUPFD (fd, target); if (0 <= result && have_dupfd_cloexec == -1) { int flags = fcntl (result, F_GETFD); if (flags < 0 || fcntl (result, F_SETFD, flags | FD_CLOEXEC) == -1) { int saved_errno = errno; close (result); errno = saved_errno; result = -1; } } #endif /* HAVE_FCNTL */ return result; } #undef fcntl #ifdef __KLIBC__ static int klibc_fcntl (int fd, int action, /* arg */...) { va_list arg_ptr; int arg; struct stat sbuf; int result; va_start (arg_ptr, action); arg = va_arg (arg_ptr, int); result = fcntl (fd, action, arg); /* EPERM for F_DUPFD, ENOTSUP for others */ if (result == -1 && (errno == EPERM || errno == ENOTSUP) && !fstat (fd, &sbuf) && S_ISDIR (sbuf.st_mode)) { ULONG ulMode; switch (action) { case F_DUPFD: /* Find available fd */ while (fcntl (arg, F_GETFL) != -1 || errno != EBADF) arg++; result = dup2 (fd, arg); break; /* Using underlying APIs is right ? */ case F_GETFD: if (DosQueryFHState (fd, &ulMode)) break; result = (ulMode & OPEN_FLAGS_NOINHERIT) ? FD_CLOEXEC : 0; break; case F_SETFD: if (arg & ~FD_CLOEXEC) break; if (DosQueryFHState (fd, &ulMode)) break; if (arg & FD_CLOEXEC) ulMode |= OPEN_FLAGS_NOINHERIT; else ulMode &= ~OPEN_FLAGS_NOINHERIT; /* Filter supported flags. */ ulMode &= (OPEN_FLAGS_WRITE_THROUGH | OPEN_FLAGS_FAIL_ON_ERROR | OPEN_FLAGS_NO_CACHE | OPEN_FLAGS_NOINHERIT); if (DosSetFHState (fd, ulMode)) break; result = 0; break; case F_GETFL: result = 0; break; case F_SETFL: if (arg != 0) break; result = 0; break; default: errno = EINVAL; break; } } va_end (arg_ptr); return result; } #endif ���������������������������������������������������������������������������������������������������������������rush-2.4/gnu/stdint.in.h����������������������������������������������������������������������������0000644�0001750�0001750�00000054754�14436425346�015234� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2001-2002, 2004-2023 Free Software Foundation, Inc. Written by Paul Eggert, Bruno Haible, Sam Steingold, Peter Burwood. This file is part of gnulib. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* * ISO C 99 <stdint.h> for platforms that lack it. * <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/stdint.h.html> */ #ifndef _@GUARD_PREFIX@_STDINT_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* When including a system file that in turn includes <inttypes.h>, use the system <inttypes.h>, not our substitute. This avoids problems with (for example) VMS, whose <sys/bitypes.h> includes <inttypes.h>. */ #define _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H /* On Android (Bionic libc), <sys/types.h> includes this file before having defined 'time_t'. Therefore in this case avoid including other system header files; just include the system's <stdint.h>. Ideally we should test __BIONIC__ here, but it is only defined after <sys/cdefs.h> has been included; hence test __ANDROID__ instead. */ #if defined __ANDROID__ && defined _GL_INCLUDING_SYS_TYPES_H # @INCLUDE_NEXT@ @NEXT_STDINT_H@ #else /* Get those types that are already defined in other system include files, so that we can "#define int8_t signed char" below without worrying about a later system include file containing a "typedef signed char int8_t;" that will get messed up by our macro. Our macros should all be consistent with the system versions, except for the "fast" types and macros, which we recommend against using in public interfaces due to compiler differences. */ #if @HAVE_STDINT_H@ # if defined __sgi && ! defined __c99 /* Bypass IRIX's <stdint.h> if in C89 mode, since it merely annoys users with "This header file is to be used only for c99 mode compilations" diagnostics. */ # define __STDINT_H__ # endif /* Some pre-C++11 <stdint.h> implementations need this. */ # ifdef __cplusplus # ifndef __STDC_CONSTANT_MACROS # define __STDC_CONSTANT_MACROS 1 # endif # ifndef __STDC_LIMIT_MACROS # define __STDC_LIMIT_MACROS 1 # endif # endif /* Other systems may have an incomplete or buggy <stdint.h>. Include it before <inttypes.h>, since any "#include <stdint.h>" in <inttypes.h> would reinclude us, skipping our contents because _@GUARD_PREFIX@_STDINT_H is defined. The include_next requires a split double-inclusion guard. */ # @INCLUDE_NEXT@ @NEXT_STDINT_H@ #endif #if ! defined _@GUARD_PREFIX@_STDINT_H && ! defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H #define _@GUARD_PREFIX@_STDINT_H /* Get SCHAR_MIN, SCHAR_MAX, UCHAR_MAX, INT_MIN, INT_MAX, LONG_MIN, LONG_MAX, ULONG_MAX, _GL_INTEGER_WIDTH. */ #include <limits.h> /* Override WINT_MIN and WINT_MAX if gnulib's <wchar.h> or <wctype.h> overrides wint_t. */ #if @GNULIBHEADERS_OVERRIDE_WINT_T@ # undef WINT_MIN # undef WINT_MAX # define WINT_MIN 0x0U # define WINT_MAX 0xffffffffU #endif #if ! @HAVE_C99_STDINT_H@ /* <sys/types.h> defines some of the stdint.h types as well, on glibc, IRIX 6.5, and OpenBSD 3.8 (via <machine/types.h>). AIX 5.2 <sys/types.h> isn't needed and causes troubles. Mac OS X 10.4.6 <sys/types.h> includes <stdint.h> (which is us), but relies on the system <stdint.h> definitions, so include <sys/types.h> after @NEXT_STDINT_H@. */ # if @HAVE_SYS_TYPES_H@ && ! defined _AIX # include <sys/types.h> # endif # if @HAVE_INTTYPES_H@ /* In OpenBSD 3.8, <inttypes.h> includes <machine/types.h>, which defines int{8,16,32,64}_t, uint{8,16,32,64}_t and __BIT_TYPES_DEFINED__. <inttypes.h> also defines intptr_t and uintptr_t. */ # include <inttypes.h> # elif @HAVE_SYS_INTTYPES_H@ /* Solaris 7 <sys/inttypes.h> has the types except the *_fast*_t types, and the macros except for *_FAST*_*, INTPTR_MIN, PTRDIFF_MIN, PTRDIFF_MAX. */ # include <sys/inttypes.h> # endif # if @HAVE_SYS_BITYPES_H@ && ! defined __BIT_TYPES_DEFINED__ /* Linux libc4 >= 4.6.7 and libc5 have a <sys/bitypes.h> that defines int{8,16,32,64}_t and __BIT_TYPES_DEFINED__. In libc5 >= 5.2.2 it is included by <sys/types.h>. */ # include <sys/bitypes.h> # endif # undef _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H /* Minimum and maximum values for an integer type under the usual assumption. Return an unspecified value if BITS == 0, adding a check to pacify picky compilers. */ /* These are separate macros, because if you try to merge these macros into a single one, HP-UX cc rejects the resulting expression in constant expressions. */ # define _STDINT_UNSIGNED_MIN(bits, zero) \ (zero) # define _STDINT_SIGNED_MIN(bits, zero) \ (~ _STDINT_MAX (1, bits, zero)) # define _STDINT_MAX(signed, bits, zero) \ (((((zero) + 1) << ((bits) ? (bits) - 1 - (signed) : 0)) - 1) * 2 + 1) #if !GNULIB_defined_stdint_types /* 7.18.1.1. Exact-width integer types */ /* Here we assume a standard architecture where the hardware integer types have 8, 16, 32, optionally 64 bits. */ # undef int8_t # undef uint8_t typedef signed char gl_int8_t; typedef unsigned char gl_uint8_t; # define int8_t gl_int8_t # define uint8_t gl_uint8_t # undef int16_t # undef uint16_t typedef short int gl_int16_t; typedef unsigned short int gl_uint16_t; # define int16_t gl_int16_t # define uint16_t gl_uint16_t # undef int32_t # undef uint32_t typedef int gl_int32_t; typedef unsigned int gl_uint32_t; # define int32_t gl_int32_t # define uint32_t gl_uint32_t /* If the system defines INT64_MAX, assume int64_t works. That way, if the underlying platform defines int64_t to be a 64-bit long long int, the code below won't mistakenly define it to be a 64-bit long int, which would mess up C++ name mangling. We must use #ifdef rather than #if, to avoid an error with HP-UX 10.20 cc. */ # ifdef INT64_MAX # define GL_INT64_T # else /* Do not undefine int64_t if gnulib is not being used with 64-bit types, since otherwise it breaks platforms like Tandem/NSK. */ # if LONG_MAX >> 31 >> 31 == 1 # undef int64_t typedef long int gl_int64_t; # define int64_t gl_int64_t # define GL_INT64_T # elif defined _MSC_VER # undef int64_t typedef __int64 gl_int64_t; # define int64_t gl_int64_t # define GL_INT64_T # else # undef int64_t typedef long long int gl_int64_t; # define int64_t gl_int64_t # define GL_INT64_T # endif # endif # ifdef UINT64_MAX # define GL_UINT64_T # else # if ULONG_MAX >> 31 >> 31 >> 1 == 1 # undef uint64_t typedef unsigned long int gl_uint64_t; # define uint64_t gl_uint64_t # define GL_UINT64_T # elif defined _MSC_VER # undef uint64_t typedef unsigned __int64 gl_uint64_t; # define uint64_t gl_uint64_t # define GL_UINT64_T # else # undef uint64_t typedef unsigned long long int gl_uint64_t; # define uint64_t gl_uint64_t # define GL_UINT64_T # endif # endif /* Avoid collision with Solaris 2.5.1 <pthread.h> etc. */ # define _UINT8_T # define _UINT32_T # define _UINT64_T /* 7.18.1.2. Minimum-width integer types */ /* Here we assume a standard architecture where the hardware integer types have 8, 16, 32, optionally 64 bits. Therefore the leastN_t types are the same as the corresponding N_t types. */ # undef int_least8_t # undef uint_least8_t # undef int_least16_t # undef uint_least16_t # undef int_least32_t # undef uint_least32_t # undef int_least64_t # undef uint_least64_t # define int_least8_t int8_t # define uint_least8_t uint8_t # define int_least16_t int16_t # define uint_least16_t uint16_t # define int_least32_t int32_t # define uint_least32_t uint32_t # ifdef GL_INT64_T # define int_least64_t int64_t # endif # ifdef GL_UINT64_T # define uint_least64_t uint64_t # endif /* 7.18.1.3. Fastest minimum-width integer types */ /* Note: Other <stdint.h> substitutes may define these types differently. It is not recommended to use these types in public header files. */ /* Here we assume a standard architecture where the hardware integer types have 8, 16, 32, optionally 64 bits. Therefore the fastN_t types are taken from the same list of types. The following code normally uses types consistent with glibc, as that lessens the chance of incompatibility with older GNU hosts. */ # undef int_fast8_t # undef uint_fast8_t # undef int_fast16_t # undef uint_fast16_t # undef int_fast32_t # undef uint_fast32_t # undef int_fast64_t # undef uint_fast64_t typedef signed char gl_int_fast8_t; typedef unsigned char gl_uint_fast8_t; # ifdef __sun /* Define types compatible with SunOS 5.10, so that code compiled under earlier SunOS versions works with code compiled under SunOS 5.10. */ typedef int gl_int_fast32_t; typedef unsigned int gl_uint_fast32_t; # else typedef long int gl_int_fast32_t; typedef unsigned long int gl_uint_fast32_t; # endif typedef gl_int_fast32_t gl_int_fast16_t; typedef gl_uint_fast32_t gl_uint_fast16_t; # define int_fast8_t gl_int_fast8_t # define uint_fast8_t gl_uint_fast8_t # define int_fast16_t gl_int_fast16_t # define uint_fast16_t gl_uint_fast16_t # define int_fast32_t gl_int_fast32_t # define uint_fast32_t gl_uint_fast32_t # ifdef GL_INT64_T # define int_fast64_t int64_t # endif # ifdef GL_UINT64_T # define uint_fast64_t uint64_t # endif /* 7.18.1.4. Integer types capable of holding object pointers */ /* kLIBC's <stdint.h> defines _INTPTR_T_DECLARED and needs its own definitions of intptr_t and uintptr_t (which use int and unsigned) to avoid clashes with declarations of system functions like sbrk. Similarly, MinGW WSL-5.4.1 <stdint.h> needs its own intptr_t and uintptr_t to avoid conflicting declarations of system functions like _findclose in <io.h>. */ # if !((defined __KLIBC__ && defined _INTPTR_T_DECLARED) \ || defined __MINGW32__) # undef intptr_t # undef uintptr_t # ifdef _WIN64 typedef long long int gl_intptr_t; typedef unsigned long long int gl_uintptr_t; # else typedef long int gl_intptr_t; typedef unsigned long int gl_uintptr_t; # endif # define intptr_t gl_intptr_t # define uintptr_t gl_uintptr_t # endif /* 7.18.1.5. Greatest-width integer types */ /* Note: These types are compiler dependent. It may be unwise to use them in public header files. */ /* If the system defines INTMAX_MAX, assume that intmax_t works, and similarly for UINTMAX_MAX and uintmax_t. This avoids problems with assuming one type where another is used by the system. */ # ifndef INTMAX_MAX # undef INTMAX_C # undef intmax_t # if LONG_MAX >> 30 == 1 typedef long long int gl_intmax_t; # define intmax_t gl_intmax_t # elif defined GL_INT64_T # define intmax_t int64_t # else typedef long int gl_intmax_t; # define intmax_t gl_intmax_t # endif # endif # ifndef UINTMAX_MAX # undef UINTMAX_C # undef uintmax_t # if ULONG_MAX >> 31 == 1 typedef unsigned long long int gl_uintmax_t; # define uintmax_t gl_uintmax_t # elif defined GL_UINT64_T # define uintmax_t uint64_t # else typedef unsigned long int gl_uintmax_t; # define uintmax_t gl_uintmax_t # endif # endif /* Verify that intmax_t and uintmax_t have the same size. Too much code breaks if this is not the case. If this check fails, the reason is likely to be found in the autoconf macros. */ typedef int _verify_intmax_size[sizeof (intmax_t) == sizeof (uintmax_t) ? 1 : -1]; # define GNULIB_defined_stdint_types 1 # endif /* !GNULIB_defined_stdint_types */ /* 7.18.2. Limits of specified-width integer types */ /* 7.18.2.1. Limits of exact-width integer types */ /* Here we assume a standard architecture where the hardware integer types have 8, 16, 32, optionally 64 bits. */ # undef INT8_MIN # undef INT8_MAX # undef UINT8_MAX # define INT8_MIN (~ INT8_MAX) # define INT8_MAX 127 # define UINT8_MAX 255 # undef INT16_MIN # undef INT16_MAX # undef UINT16_MAX # define INT16_MIN (~ INT16_MAX) # define INT16_MAX 32767 # define UINT16_MAX 65535 # undef INT32_MIN # undef INT32_MAX # undef UINT32_MAX # define INT32_MIN (~ INT32_MAX) # define INT32_MAX 2147483647 # define UINT32_MAX 4294967295U # if defined GL_INT64_T && ! defined INT64_MAX /* Prefer (- INTMAX_C (1) << 63) over (~ INT64_MAX) because SunPRO C 5.0 evaluates the latter incorrectly in preprocessor expressions. */ # define INT64_MIN (- INTMAX_C (1) << 63) # define INT64_MAX INTMAX_C (9223372036854775807) # endif # if defined GL_UINT64_T && ! defined UINT64_MAX # define UINT64_MAX UINTMAX_C (18446744073709551615) # endif /* 7.18.2.2. Limits of minimum-width integer types */ /* Here we assume a standard architecture where the hardware integer types have 8, 16, 32, optionally 64 bits. Therefore the leastN_t types are the same as the corresponding N_t types. */ # undef INT_LEAST8_MIN # undef INT_LEAST8_MAX # undef UINT_LEAST8_MAX # define INT_LEAST8_MIN INT8_MIN # define INT_LEAST8_MAX INT8_MAX # define UINT_LEAST8_MAX UINT8_MAX # undef INT_LEAST16_MIN # undef INT_LEAST16_MAX # undef UINT_LEAST16_MAX # define INT_LEAST16_MIN INT16_MIN # define INT_LEAST16_MAX INT16_MAX # define UINT_LEAST16_MAX UINT16_MAX # undef INT_LEAST32_MIN # undef INT_LEAST32_MAX # undef UINT_LEAST32_MAX # define INT_LEAST32_MIN INT32_MIN # define INT_LEAST32_MAX INT32_MAX # define UINT_LEAST32_MAX UINT32_MAX # undef INT_LEAST64_MIN # undef INT_LEAST64_MAX # ifdef GL_INT64_T # define INT_LEAST64_MIN INT64_MIN # define INT_LEAST64_MAX INT64_MAX # endif # undef UINT_LEAST64_MAX # ifdef GL_UINT64_T # define UINT_LEAST64_MAX UINT64_MAX # endif /* 7.18.2.3. Limits of fastest minimum-width integer types */ /* Here we assume a standard architecture where the hardware integer types have 8, 16, 32, optionally 64 bits. Therefore the fastN_t types are taken from the same list of types. */ # undef INT_FAST8_MIN # undef INT_FAST8_MAX # undef UINT_FAST8_MAX # define INT_FAST8_MIN SCHAR_MIN # define INT_FAST8_MAX SCHAR_MAX # define UINT_FAST8_MAX UCHAR_MAX # undef INT_FAST16_MIN # undef INT_FAST16_MAX # undef UINT_FAST16_MAX # define INT_FAST16_MIN INT_FAST32_MIN # define INT_FAST16_MAX INT_FAST32_MAX # define UINT_FAST16_MAX UINT_FAST32_MAX # undef INT_FAST32_MIN # undef INT_FAST32_MAX # undef UINT_FAST32_MAX # ifdef __sun # define INT_FAST32_MIN INT_MIN # define INT_FAST32_MAX INT_MAX # define UINT_FAST32_MAX UINT_MAX # else # define INT_FAST32_MIN LONG_MIN # define INT_FAST32_MAX LONG_MAX # define UINT_FAST32_MAX ULONG_MAX # endif # undef INT_FAST64_MIN # undef INT_FAST64_MAX # ifdef GL_INT64_T # define INT_FAST64_MIN INT64_MIN # define INT_FAST64_MAX INT64_MAX # endif # undef UINT_FAST64_MAX # ifdef GL_UINT64_T # define UINT_FAST64_MAX UINT64_MAX # endif /* 7.18.2.4. Limits of integer types capable of holding object pointers */ # undef INTPTR_MIN # undef INTPTR_MAX # undef UINTPTR_MAX # ifdef _WIN64 # define INTPTR_MIN LLONG_MIN # define INTPTR_MAX LLONG_MAX # define UINTPTR_MAX ULLONG_MAX # else # define INTPTR_MIN LONG_MIN # define INTPTR_MAX LONG_MAX # define UINTPTR_MAX ULONG_MAX # endif /* 7.18.2.5. Limits of greatest-width integer types */ # ifndef INTMAX_MAX # undef INTMAX_MIN # ifdef INT64_MAX # define INTMAX_MIN INT64_MIN # define INTMAX_MAX INT64_MAX # else # define INTMAX_MIN INT32_MIN # define INTMAX_MAX INT32_MAX # endif # endif # ifndef UINTMAX_MAX # ifdef UINT64_MAX # define UINTMAX_MAX UINT64_MAX # else # define UINTMAX_MAX UINT32_MAX # endif # endif /* 7.18.3. Limits of other integer types */ /* ptrdiff_t limits */ # undef PTRDIFF_MIN # undef PTRDIFF_MAX # if @APPLE_UNIVERSAL_BUILD@ # ifdef _LP64 # define PTRDIFF_MIN _STDINT_SIGNED_MIN (64, 0l) # define PTRDIFF_MAX _STDINT_MAX (1, 64, 0l) # else # define PTRDIFF_MIN _STDINT_SIGNED_MIN (32, 0) # define PTRDIFF_MAX _STDINT_MAX (1, 32, 0) # endif # else # define PTRDIFF_MIN \ _STDINT_SIGNED_MIN (@BITSIZEOF_PTRDIFF_T@, 0@PTRDIFF_T_SUFFIX@) # define PTRDIFF_MAX \ _STDINT_MAX (1, @BITSIZEOF_PTRDIFF_T@, 0@PTRDIFF_T_SUFFIX@) # endif /* sig_atomic_t limits */ # undef SIG_ATOMIC_MIN # undef SIG_ATOMIC_MAX # if @HAVE_SIGNED_SIG_ATOMIC_T@ # define SIG_ATOMIC_MIN \ _STDINT_SIGNED_MIN (@BITSIZEOF_SIG_ATOMIC_T@, 0@SIG_ATOMIC_T_SUFFIX@) # else # define SIG_ATOMIC_MIN \ _STDINT_UNSIGNED_MIN (@BITSIZEOF_SIG_ATOMIC_T@, 0@SIG_ATOMIC_T_SUFFIX@) # endif # define SIG_ATOMIC_MAX \ _STDINT_MAX (@HAVE_SIGNED_SIG_ATOMIC_T@, @BITSIZEOF_SIG_ATOMIC_T@, \ 0@SIG_ATOMIC_T_SUFFIX@) /* size_t limit */ # undef SIZE_MAX # if @APPLE_UNIVERSAL_BUILD@ # ifdef _LP64 # define SIZE_MAX _STDINT_MAX (0, 64, 0ul) # else # define SIZE_MAX _STDINT_MAX (0, 32, 0ul) # endif # else # define SIZE_MAX _STDINT_MAX (0, @BITSIZEOF_SIZE_T@, 0@SIZE_T_SUFFIX@) # endif /* wchar_t limits */ /* Get WCHAR_MIN, WCHAR_MAX. This include is not on the top, above, because on OSF/1 4.0 we have a sequence of nested includes <wchar.h> -> <stdio.h> -> <getopt.h> -> <stdlib.h>, and the latter includes <stdint.h> and assumes its types are already defined. */ # if @HAVE_WCHAR_H@ && ! (defined WCHAR_MIN && defined WCHAR_MAX) # define _GL_JUST_INCLUDE_SYSTEM_WCHAR_H # include <wchar.h> # undef _GL_JUST_INCLUDE_SYSTEM_WCHAR_H # endif # undef WCHAR_MIN # undef WCHAR_MAX # if @HAVE_SIGNED_WCHAR_T@ # define WCHAR_MIN \ _STDINT_SIGNED_MIN (@BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@) # else # define WCHAR_MIN \ _STDINT_UNSIGNED_MIN (@BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@) # endif # define WCHAR_MAX \ _STDINT_MAX (@HAVE_SIGNED_WCHAR_T@, @BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@) /* wint_t limits */ /* If gnulib's <wchar.h> or <wctype.h> overrides wint_t, @WINT_T_SUFFIX@ is not accurate, therefore use the definitions from above. */ # if !@GNULIBHEADERS_OVERRIDE_WINT_T@ # undef WINT_MIN # undef WINT_MAX # if @HAVE_SIGNED_WINT_T@ # define WINT_MIN \ _STDINT_SIGNED_MIN (@BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@) # else # define WINT_MIN \ _STDINT_UNSIGNED_MIN (@BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@) # endif # define WINT_MAX \ _STDINT_MAX (@HAVE_SIGNED_WINT_T@, @BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@) # endif /* 7.18.4. Macros for integer constants */ /* 7.18.4.1. Macros for minimum-width integer constants */ /* According to ISO C 99 Technical Corrigendum 1 */ /* Here we assume a standard architecture where the hardware integer types have 8, 16, 32, optionally 64 bits, and int is 32 bits. */ # undef INT8_C # undef UINT8_C # define INT8_C(x) x # define UINT8_C(x) x # undef INT16_C # undef UINT16_C # define INT16_C(x) x # define UINT16_C(x) x # undef INT32_C # undef UINT32_C # define INT32_C(x) x # define UINT32_C(x) x ## U # undef INT64_C # undef UINT64_C # if LONG_MAX >> 31 >> 31 == 1 # define INT64_C(x) x##L # elif defined _MSC_VER # define INT64_C(x) x##i64 # else # define INT64_C(x) x##LL # endif # if ULONG_MAX >> 31 >> 31 >> 1 == 1 # define UINT64_C(x) x##UL # elif defined _MSC_VER # define UINT64_C(x) x##ui64 # else # define UINT64_C(x) x##ULL # endif /* 7.18.4.2. Macros for greatest-width integer constants */ # ifndef INTMAX_C # if LONG_MAX >> 30 == 1 # define INTMAX_C(x) x##LL # elif defined GL_INT64_T # define INTMAX_C(x) INT64_C(x) # else # define INTMAX_C(x) x##L # endif # endif # ifndef UINTMAX_C # if ULONG_MAX >> 31 == 1 # define UINTMAX_C(x) x##ULL # elif defined GL_UINT64_T # define UINTMAX_C(x) UINT64_C(x) # else # define UINTMAX_C(x) x##UL # endif # endif #endif /* !@HAVE_C99_STDINT_H@ */ /* Macros specified by ISO/IEC TS 18661-1:2014. */ #if (!defined UINTMAX_WIDTH \ && (defined _GNU_SOURCE || defined __STDC_WANT_IEC_60559_BFP_EXT__)) # ifdef INT8_MAX # define INT8_WIDTH _GL_INTEGER_WIDTH (INT8_MIN, INT8_MAX) # endif # ifdef UINT8_MAX # define UINT8_WIDTH _GL_INTEGER_WIDTH (0, UINT8_MAX) # endif # ifdef INT16_MAX # define INT16_WIDTH _GL_INTEGER_WIDTH (INT16_MIN, INT16_MAX) # endif # ifdef UINT16_MAX # define UINT16_WIDTH _GL_INTEGER_WIDTH (0, UINT16_MAX) # endif # ifdef INT32_MAX # define INT32_WIDTH _GL_INTEGER_WIDTH (INT32_MIN, INT32_MAX) # endif # ifdef UINT32_MAX # define UINT32_WIDTH _GL_INTEGER_WIDTH (0, UINT32_MAX) # endif # ifdef INT64_MAX # define INT64_WIDTH _GL_INTEGER_WIDTH (INT64_MIN, INT64_MAX) # endif # ifdef UINT64_MAX # define UINT64_WIDTH _GL_INTEGER_WIDTH (0, UINT64_MAX) # endif # define INT_LEAST8_WIDTH _GL_INTEGER_WIDTH (INT_LEAST8_MIN, INT_LEAST8_MAX) # define UINT_LEAST8_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST8_MAX) # define INT_LEAST16_WIDTH _GL_INTEGER_WIDTH (INT_LEAST16_MIN, INT_LEAST16_MAX) # define UINT_LEAST16_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST16_MAX) # define INT_LEAST32_WIDTH _GL_INTEGER_WIDTH (INT_LEAST32_MIN, INT_LEAST32_MAX) # define UINT_LEAST32_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST32_MAX) # define INT_LEAST64_WIDTH _GL_INTEGER_WIDTH (INT_LEAST64_MIN, INT_LEAST64_MAX) # define UINT_LEAST64_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST64_MAX) # define INT_FAST8_WIDTH _GL_INTEGER_WIDTH (INT_FAST8_MIN, INT_FAST8_MAX) # define UINT_FAST8_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST8_MAX) # define INT_FAST16_WIDTH _GL_INTEGER_WIDTH (INT_FAST16_MIN, INT_FAST16_MAX) # define UINT_FAST16_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST16_MAX) # define INT_FAST32_WIDTH _GL_INTEGER_WIDTH (INT_FAST32_MIN, INT_FAST32_MAX) # define UINT_FAST32_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST32_MAX) # define INT_FAST64_WIDTH _GL_INTEGER_WIDTH (INT_FAST64_MIN, INT_FAST64_MAX) # define UINT_FAST64_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST64_MAX) # define INTPTR_WIDTH _GL_INTEGER_WIDTH (INTPTR_MIN, INTPTR_MAX) # define UINTPTR_WIDTH _GL_INTEGER_WIDTH (0, UINTPTR_MAX) # define INTMAX_WIDTH _GL_INTEGER_WIDTH (INTMAX_MIN, INTMAX_MAX) # define UINTMAX_WIDTH _GL_INTEGER_WIDTH (0, UINTMAX_MAX) # define PTRDIFF_WIDTH _GL_INTEGER_WIDTH (PTRDIFF_MIN, PTRDIFF_MAX) # define SIZE_WIDTH _GL_INTEGER_WIDTH (0, SIZE_MAX) # define WCHAR_WIDTH _GL_INTEGER_WIDTH (WCHAR_MIN, WCHAR_MAX) # ifdef WINT_MAX # define WINT_WIDTH _GL_INTEGER_WIDTH (WINT_MIN, WINT_MAX) # endif # ifdef SIG_ATOMIC_MAX # define SIG_ATOMIC_WIDTH _GL_INTEGER_WIDTH (SIG_ATOMIC_MIN, SIG_ATOMIC_MAX) # endif #endif /* !WINT_WIDTH && (_GNU_SOURCE || __STDC_WANT_IEC_60559_BFP_EXT__) */ #endif /* _@GUARD_PREFIX@_STDINT_H */ #endif /* !(defined __ANDROID__ && ...) */ #endif /* !defined _@GUARD_PREFIX@_STDINT_H && !defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H */ ��������������������rush-2.4/gnu/strerror-override.c��������������������������������������������������������������������0000644�0001750�0001750�00000021646�14436425346�017006� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* strerror-override.c --- POSIX compatible system error routine Copyright (C) 2010-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2010. */ #include <config.h> #include "strerror-override.h" #include <errno.h> #if GNULIB_defined_EWINSOCK /* native Windows platforms */ # if HAVE_WINSOCK2_H # include <winsock2.h> # endif #endif #if !GNULIB_defined_strerror_override_macro /* If ERRNUM maps to an errno value defined by gnulib, return a string describing the error. Otherwise return NULL. */ const char * strerror_override (int errnum) { /* These error messages are taken from glibc/sysdeps/gnu/errlist.c. */ switch (errnum) { # if REPLACE_STRERROR_0 case 0: return "Success"; # endif # if GNULIB_defined_ESOCK /* native Windows platforms with older <errno.h> */ case EINPROGRESS: return "Operation now in progress"; case EALREADY: return "Operation already in progress"; case ENOTSOCK: return "Socket operation on non-socket"; case EDESTADDRREQ: return "Destination address required"; case EMSGSIZE: return "Message too long"; case EPROTOTYPE: return "Protocol wrong type for socket"; case ENOPROTOOPT: return "Protocol not available"; case EPROTONOSUPPORT: return "Protocol not supported"; case EOPNOTSUPP: return "Operation not supported"; case EAFNOSUPPORT: return "Address family not supported by protocol"; case EADDRINUSE: return "Address already in use"; case EADDRNOTAVAIL: return "Cannot assign requested address"; case ENETDOWN: return "Network is down"; case ENETUNREACH: return "Network is unreachable"; case ECONNRESET: return "Connection reset by peer"; case ENOBUFS: return "No buffer space available"; case EISCONN: return "Transport endpoint is already connected"; case ENOTCONN: return "Transport endpoint is not connected"; case ETIMEDOUT: return "Connection timed out"; case ECONNREFUSED: return "Connection refused"; case ELOOP: return "Too many levels of symbolic links"; case EHOSTUNREACH: return "No route to host"; case EWOULDBLOCK: return "Operation would block"; # endif # if GNULIB_defined_ESTREAMS /* native Windows platforms with older <errno.h> */ case ETXTBSY: return "Text file busy"; case ENODATA: return "No data available"; case ENOSR: return "Out of streams resources"; case ENOSTR: return "Device not a stream"; case ETIME: return "Timer expired"; case EOTHER: return "Other error"; # endif # if GNULIB_defined_EWINSOCK /* native Windows platforms */ case ESOCKTNOSUPPORT: return "Socket type not supported"; case EPFNOSUPPORT: return "Protocol family not supported"; case ESHUTDOWN: return "Cannot send after transport endpoint shutdown"; case ETOOMANYREFS: return "Too many references: cannot splice"; case EHOSTDOWN: return "Host is down"; case EPROCLIM: return "Too many processes"; case EUSERS: return "Too many users"; case EDQUOT: return "Disk quota exceeded"; case ESTALE: return "Stale NFS file handle"; case EREMOTE: return "Object is remote"; # if HAVE_WINSOCK2_H /* WSA_INVALID_HANDLE maps to EBADF */ /* WSA_NOT_ENOUGH_MEMORY maps to ENOMEM */ /* WSA_INVALID_PARAMETER maps to EINVAL */ case WSA_OPERATION_ABORTED: return "Overlapped operation aborted"; case WSA_IO_INCOMPLETE: return "Overlapped I/O event object not in signaled state"; case WSA_IO_PENDING: return "Overlapped operations will complete later"; /* WSAEINTR maps to EINTR */ /* WSAEBADF maps to EBADF */ /* WSAEACCES maps to EACCES */ /* WSAEFAULT maps to EFAULT */ /* WSAEINVAL maps to EINVAL */ /* WSAEMFILE maps to EMFILE */ /* WSAEWOULDBLOCK maps to EWOULDBLOCK */ /* WSAEINPROGRESS maps to EINPROGRESS */ /* WSAEALREADY maps to EALREADY */ /* WSAENOTSOCK maps to ENOTSOCK */ /* WSAEDESTADDRREQ maps to EDESTADDRREQ */ /* WSAEMSGSIZE maps to EMSGSIZE */ /* WSAEPROTOTYPE maps to EPROTOTYPE */ /* WSAENOPROTOOPT maps to ENOPROTOOPT */ /* WSAEPROTONOSUPPORT maps to EPROTONOSUPPORT */ /* WSAESOCKTNOSUPPORT is ESOCKTNOSUPPORT */ /* WSAEOPNOTSUPP maps to EOPNOTSUPP */ /* WSAEPFNOSUPPORT is EPFNOSUPPORT */ /* WSAEAFNOSUPPORT maps to EAFNOSUPPORT */ /* WSAEADDRINUSE maps to EADDRINUSE */ /* WSAEADDRNOTAVAIL maps to EADDRNOTAVAIL */ /* WSAENETDOWN maps to ENETDOWN */ /* WSAENETUNREACH maps to ENETUNREACH */ /* WSAENETRESET maps to ENETRESET */ /* WSAECONNABORTED maps to ECONNABORTED */ /* WSAECONNRESET maps to ECONNRESET */ /* WSAENOBUFS maps to ENOBUFS */ /* WSAEISCONN maps to EISCONN */ /* WSAENOTCONN maps to ENOTCONN */ /* WSAESHUTDOWN is ESHUTDOWN */ /* WSAETOOMANYREFS is ETOOMANYREFS */ /* WSAETIMEDOUT maps to ETIMEDOUT */ /* WSAECONNREFUSED maps to ECONNREFUSED */ /* WSAELOOP maps to ELOOP */ /* WSAENAMETOOLONG maps to ENAMETOOLONG */ /* WSAEHOSTDOWN is EHOSTDOWN */ /* WSAEHOSTUNREACH maps to EHOSTUNREACH */ /* WSAENOTEMPTY maps to ENOTEMPTY */ /* WSAEPROCLIM is EPROCLIM */ /* WSAEUSERS is EUSERS */ /* WSAEDQUOT is EDQUOT */ /* WSAESTALE is ESTALE */ /* WSAEREMOTE is EREMOTE */ case WSASYSNOTREADY: return "Network subsystem is unavailable"; case WSAVERNOTSUPPORTED: return "Winsock.dll version out of range"; case WSANOTINITIALISED: return "Successful WSAStartup not yet performed"; case WSAEDISCON: return "Graceful shutdown in progress"; case WSAENOMORE: case WSA_E_NO_MORE: return "No more results"; case WSAECANCELLED: case WSA_E_CANCELLED: return "Call was canceled"; case WSAEINVALIDPROCTABLE: return "Procedure call table is invalid"; case WSAEINVALIDPROVIDER: return "Service provider is invalid"; case WSAEPROVIDERFAILEDINIT: return "Service provider failed to initialize"; case WSASYSCALLFAILURE: return "System call failure"; case WSASERVICE_NOT_FOUND: return "Service not found"; case WSATYPE_NOT_FOUND: return "Class type not found"; case WSAEREFUSED: return "Database query was refused"; case WSAHOST_NOT_FOUND: return "Host not found"; case WSATRY_AGAIN: return "Nonauthoritative host not found"; case WSANO_RECOVERY: return "Nonrecoverable error"; case WSANO_DATA: return "Valid name, no data record of requested type"; /* WSA_QOS_* omitted */ # endif # endif # if GNULIB_defined_ENOMSG case ENOMSG: return "No message of desired type"; # endif # if GNULIB_defined_EIDRM case EIDRM: return "Identifier removed"; # endif # if GNULIB_defined_ENOLINK case ENOLINK: return "Link has been severed"; # endif # if GNULIB_defined_EPROTO case EPROTO: return "Protocol error"; # endif # if GNULIB_defined_EMULTIHOP case EMULTIHOP: return "Multihop attempted"; # endif # if GNULIB_defined_EBADMSG case EBADMSG: return "Bad message"; # endif # if GNULIB_defined_EOVERFLOW case EOVERFLOW: return "Value too large for defined data type"; # endif # if GNULIB_defined_ENOTSUP case ENOTSUP: return "Not supported"; # endif # if GNULIB_defined_ENETRESET case ENETRESET: return "Network dropped connection on reset"; # endif # if GNULIB_defined_ECONNABORTED case ECONNABORTED: return "Software caused connection abort"; # endif # if GNULIB_defined_ESTALE case ESTALE: return "Stale NFS file handle"; # endif # if GNULIB_defined_EDQUOT case EDQUOT: return "Disk quota exceeded"; # endif # if GNULIB_defined_ECANCELED case ECANCELED: return "Operation canceled"; # endif # if GNULIB_defined_EOWNERDEAD case EOWNERDEAD: return "Owner died"; # endif # if GNULIB_defined_ENOTRECOVERABLE case ENOTRECOVERABLE: return "State not recoverable"; # endif # if GNULIB_defined_EILSEQ case EILSEQ: return "Invalid or incomplete multibyte or wide character"; # endif default: return NULL; } } #endif ������������������������������������������������������������������������������������������rush-2.4/gnu/close.c��������������������������������������������������������������������������������0000644�0001750�0001750�00000003143�14436425345�014403� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* close replacement. Copyright (C) 2008-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <unistd.h> #include <errno.h> #include "fd-hook.h" #if HAVE_MSVC_INVALID_PARAMETER_HANDLER # include "msvc-inval.h" #endif #undef close #if defined _WIN32 && !defined __CYGWIN__ # if HAVE_MSVC_INVALID_PARAMETER_HANDLER static int close_nothrow (int fd) { int result; TRY_MSVC_INVAL { result = _close (fd); } CATCH_MSVC_INVAL { result = -1; errno = EBADF; } DONE_MSVC_INVAL; return result; } # else # define close_nothrow _close # endif #else # define close_nothrow close #endif /* Override close() to call into other gnulib modules. */ int rpl_close (int fd) { #if WINDOWS_SOCKETS int retval = execute_all_close_hooks (close_nothrow, fd); #else int retval = close_nothrow (fd); #endif #if REPLACE_FCHDIR if (retval >= 0) _gl_unregister_fd (fd); #endif return retval; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/ialloc.h�������������������������������������������������������������������������������0000644�0001750�0001750�00000006120�14436425345�014544� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ialloc.h -- malloc with idx_t rather than size_t Copyright 2021-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef IALLOC_H_ #define IALLOC_H_ /* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, _GL_ATTRIBUTE_COLD, _GL_ATTRIBUTE_MALLOC. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif #include "idx.h" #include <errno.h> #include <stdint.h> #include <stdlib.h> _GL_INLINE_HEADER_BEGIN #ifndef IALLOC_INLINE # define IALLOC_INLINE _GL_INLINE #endif #ifdef __cplusplus extern "C" { #endif IALLOC_INLINE void * _GL_ATTRIBUTE_COLD _gl_alloc_nomem (void) { errno = ENOMEM; return NULL; } /* imalloc (size) is like malloc (size). It returns a non-NULL pointer to size bytes of memory. Upon failure, it returns NULL with errno set. */ IALLOC_INLINE _GL_ATTRIBUTE_MALLOC /*_GL_ATTRIBUTE_DEALLOC_FREE*/ void * imalloc (idx_t s) { return s <= SIZE_MAX ? malloc (s) : _gl_alloc_nomem (); } /* irealloc (ptr, size) is like realloc (ptr, size). It returns a non-NULL pointer to size bytes of memory. Upon failure, it returns NULL with errno set. */ IALLOC_INLINE /*_GL_ATTRIBUTE_DEALLOC_FREE*/ void * irealloc (void *p, idx_t s) { /* Work around GNU realloc glitch by treating a zero size as if it were 1, so that returning NULL is equivalent to failing. */ return s <= SIZE_MAX ? realloc (p, s | !s) : _gl_alloc_nomem (); } /* icalloc (num, size) is like calloc (num, size). It returns a non-NULL pointer to num * size bytes of memory. Upon failure, it returns NULL with errno set. */ IALLOC_INLINE _GL_ATTRIBUTE_MALLOC /*_GL_ATTRIBUTE_DEALLOC_FREE*/ void * icalloc (idx_t n, idx_t s) { if (SIZE_MAX < n) { if (s != 0) return _gl_alloc_nomem (); n = 0; } if (SIZE_MAX < s) { if (n != 0) return _gl_alloc_nomem (); s = 0; } return calloc (n, s); } /* ireallocarray (ptr, num, size) is like reallocarray (ptr, num, size). It returns a non-NULL pointer to num * size bytes of memory. Upon failure, it returns NULL with errno set. */ IALLOC_INLINE void * ireallocarray (void *p, idx_t n, idx_t s) { /* Work around GNU reallocarray glitch by treating a zero size as if it were 1, so that returning NULL is equivalent to failing. */ if (n == 0 || s == 0) n = s = 1; return (n <= SIZE_MAX && s <= SIZE_MAX ? reallocarray (p, n, s) : _gl_alloc_nomem ()); } #ifdef __cplusplus } #endif _GL_INLINE_HEADER_END #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/umaxtostr.c����������������������������������������������������������������������������0000644�0001750�0001750�00000001524�14436425346�015346� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert 'uintmax_t' integer to printable string. Copyright (C) 2004-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #define anytostr umaxtostr #define inttype uintmax_t #include "anytostr.c" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/xalloc-oversized.h���������������������������������������������������������������������0000644�0001750�0001750�00000005120�14436425347�016574� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* xalloc-oversized.h -- memory allocation size checking Copyright (C) 1990-2000, 2003-2004, 2006-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef XALLOC_OVERSIZED_H_ #define XALLOC_OVERSIZED_H_ #include <stddef.h> #include <stdint.h> /* True if N * S does not fit into both ptrdiff_t and size_t. N and S should be nonnegative and free of side effects. This expands to a constant expression if N and S are both constants. By gnulib convention, SIZE_MAX represents overflow in size_t calculations, so the conservative size_t-based dividend to use here is SIZE_MAX - 1. */ #define __xalloc_oversized(n, s) \ ((s) != 0 \ && ((size_t) (PTRDIFF_MAX < SIZE_MAX ? PTRDIFF_MAX : SIZE_MAX - 1) / (s) \ < (n))) /* Return 1 if and only if an array of N objects, each of size S, cannot exist reliably because its total size in bytes would exceed MIN (PTRDIFF_MAX, SIZE_MAX - 1). N and S should be nonnegative and free of side effects. Warning: (xalloc_oversized (N, S) ? NULL : malloc (N * S)) can misbehave if N and S are both narrower than ptrdiff_t and size_t, and can be rewritten as (xalloc_oversized (N, S) ? NULL : malloc (N * (size_t) S)). This is a macro, not a function, so that it works even if an argument exceeds MAX (PTRDIFF_MAX, SIZE_MAX). */ #if 7 <= __GNUC__ && !defined __clang__ && PTRDIFF_MAX < SIZE_MAX # define xalloc_oversized(n, s) \ __builtin_mul_overflow_p (n, s, (ptrdiff_t) 1) #elif (5 <= __GNUC__ && !defined __ICC && !__STRICT_ANSI__ \ && PTRDIFF_MAX < SIZE_MAX) # define xalloc_oversized(n, s) \ (__builtin_constant_p (n) && __builtin_constant_p (s) \ ? __xalloc_oversized (n, s) \ : ({ ptrdiff_t __xalloc_count; \ __builtin_mul_overflow (n, s, &__xalloc_count); })) /* Other compilers use integer division; this may be slower but is more portable. */ #else # define xalloc_oversized(n, s) __xalloc_oversized (n, s) #endif #endif /* !XALLOC_OVERSIZED_H_ */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/localeconv.c���������������������������������������������������������������������������0000644�0001750�0001750�00000010354�14436425346�015426� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Query locale dependent information for formatting numbers. Copyright (C) 2012-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <locale.h> #include <limits.h> #if HAVE_STRUCT_LCONV_DECIMAL_POINT # define FIX_CHAR_VALUE(x) ((x) >= 0 ? (x) : CHAR_MAX) /* Override for platforms where 'struct lconv' lacks the int_p_*, int_n_* members or where fields of type 'char' are set to -1 instead of CHAR_MAX. */ struct lconv * localeconv (void) { static struct lconv result; # undef lconv # undef localeconv struct lconv *sys_result = localeconv (); result.decimal_point = sys_result->decimal_point; result.thousands_sep = sys_result->thousands_sep; result.grouping = sys_result->grouping; result.mon_decimal_point = sys_result->mon_decimal_point; result.mon_thousands_sep = sys_result->mon_thousands_sep; result.mon_grouping = sys_result->mon_grouping; result.positive_sign = sys_result->positive_sign; result.negative_sign = sys_result->negative_sign; result.currency_symbol = sys_result->currency_symbol; result.frac_digits = FIX_CHAR_VALUE (sys_result->frac_digits); result.p_cs_precedes = FIX_CHAR_VALUE (sys_result->p_cs_precedes); result.p_sign_posn = FIX_CHAR_VALUE (sys_result->p_sign_posn); result.p_sep_by_space = FIX_CHAR_VALUE (sys_result->p_sep_by_space); result.n_cs_precedes = FIX_CHAR_VALUE (sys_result->n_cs_precedes); result.n_sign_posn = FIX_CHAR_VALUE (sys_result->n_sign_posn); result.n_sep_by_space = FIX_CHAR_VALUE (sys_result->n_sep_by_space); result.int_curr_symbol = sys_result->int_curr_symbol; result.int_frac_digits = FIX_CHAR_VALUE (sys_result->int_frac_digits); # if HAVE_STRUCT_LCONV_INT_P_CS_PRECEDES result.int_p_cs_precedes = FIX_CHAR_VALUE (sys_result->int_p_cs_precedes); result.int_p_sign_posn = FIX_CHAR_VALUE (sys_result->int_p_sign_posn); result.int_p_sep_by_space = FIX_CHAR_VALUE (sys_result->int_p_sep_by_space); result.int_n_cs_precedes = FIX_CHAR_VALUE (sys_result->int_n_cs_precedes); result.int_n_sign_posn = FIX_CHAR_VALUE (sys_result->int_n_sign_posn); result.int_n_sep_by_space = FIX_CHAR_VALUE (sys_result->int_n_sep_by_space); # else result.int_p_cs_precedes = FIX_CHAR_VALUE (sys_result->p_cs_precedes); result.int_p_sign_posn = FIX_CHAR_VALUE (sys_result->p_sign_posn); result.int_p_sep_by_space = FIX_CHAR_VALUE (sys_result->p_sep_by_space); result.int_n_cs_precedes = FIX_CHAR_VALUE (sys_result->n_cs_precedes); result.int_n_sign_posn = FIX_CHAR_VALUE (sys_result->n_sign_posn); result.int_n_sep_by_space = FIX_CHAR_VALUE (sys_result->n_sep_by_space); # endif return &result; } #else /* Override for platforms where 'struct lconv' is a dummy. */ struct lconv * localeconv (void) { static /*const*/ struct lconv result = { /* decimal_point */ ".", /* thousands_sep */ "", /* grouping */ "", /* mon_decimal_point */ "", /* mon_thousands_sep */ "", /* mon_grouping */ "", /* positive_sign */ "", /* negative_sign */ "", /* currency_symbol */ "", /* frac_digits */ CHAR_MAX, /* p_cs_precedes */ CHAR_MAX, /* p_sign_posn */ CHAR_MAX, /* p_sep_by_space */ CHAR_MAX, /* n_cs_precedes */ CHAR_MAX, /* n_sign_posn */ CHAR_MAX, /* n_sep_by_space */ CHAR_MAX, /* int_curr_symbol */ "", /* int_frac_digits */ CHAR_MAX, /* int_p_cs_precedes */ CHAR_MAX, /* int_p_sign_posn */ CHAR_MAX, /* int_p_sep_by_space */ CHAR_MAX, /* int_n_cs_precedes */ CHAR_MAX, /* int_n_sign_posn */ CHAR_MAX, /* int_n_sep_by_space */ CHAR_MAX }; return &result; } #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/stat.c���������������������������������������������������������������������������������0000644�0001750�0001750�00000032714�14436425346�014260� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Work around platform bugs in stat. Copyright (C) 2009-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Eric Blake and Bruno Haible. */ /* If the user's config.h happens to include <sys/stat.h>, let it include only the system's <sys/stat.h> here, so that orig_stat doesn't recurse to rpl_stat. */ #define __need_system_sys_stat_h #include <config.h> /* Get the original definition of stat. It might be defined as a macro. */ #include <sys/types.h> #include <sys/stat.h> #undef __need_system_sys_stat_h #if defined _WIN32 && ! defined __CYGWIN__ # define WINDOWS_NATIVE #endif #if !defined WINDOWS_NATIVE static int orig_stat (const char *filename, struct stat *buf) { return stat (filename, buf); } #endif /* Specification. */ #ifdef __osf__ /* Write "sys/stat.h" here, not <sys/stat.h>, otherwise OSF/1 5.1 DTK cc eliminates this include because of the preliminary #include <sys/stat.h> above. */ # include "sys/stat.h" #else # include <sys/stat.h> #endif #include "stat-time.h" #include <errno.h> #include <limits.h> #include <string.h> #include "filename.h" #include "malloca.h" #ifdef WINDOWS_NATIVE # define WIN32_LEAN_AND_MEAN # include <windows.h> # include "stat-w32.h" /* Don't assume that UNICODE is not defined. */ # undef WIN32_FIND_DATA # define WIN32_FIND_DATA WIN32_FIND_DATAA # undef CreateFile # define CreateFile CreateFileA # undef FindFirstFile # define FindFirstFile FindFirstFileA #endif #ifdef WINDOWS_NATIVE /* Return TRUE if the given file name denotes an UNC root. */ static BOOL is_unc_root (const char *rname) { /* Test whether it has the syntax '\\server\share'. */ if (ISSLASH (rname[0]) && ISSLASH (rname[1])) { /* It starts with two slashes. Find the next slash. */ const char *p = rname + 2; const char *q = p; while (*q != '\0' && !ISSLASH (*q)) q++; if (q > p && *q != '\0') { /* Found the next slash at q. */ q++; const char *r = q; while (*r != '\0' && !ISSLASH (*r)) r++; if (r > q && *r == '\0') return TRUE; } } return FALSE; } #endif /* Store information about NAME into ST. Work around bugs with trailing slashes. Mingw has other bugs (such as st_ino always being 0 on success) which this wrapper does not work around. But at least this implementation provides the ability to emulate fchdir correctly. */ int rpl_stat (char const *name, struct stat *buf) { #ifdef WINDOWS_NATIVE /* Fill the fields ourselves, because the original stat function returns values for st_atime, st_mtime, st_ctime that depend on the current time zone. See <https://lists.gnu.org/r/bug-gnulib/2017-04/msg00134.html> */ /* XXX Should we convert to wchar_t* and prepend '\\?\', in order to work around length limitations <https://docs.microsoft.com/en-us/windows/desktop/FileIO/naming-a-file> ? */ /* POSIX <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_13> specifies: "More than two leading <slash> characters shall be treated as a single <slash> character." */ if (ISSLASH (name[0]) && ISSLASH (name[1]) && ISSLASH (name[2])) { name += 2; while (ISSLASH (name[1])) name++; } size_t len = strlen (name); size_t drive_prefix_len = (HAS_DEVICE (name) ? 2 : 0); /* Remove trailing slashes (except the very first one, at position drive_prefix_len), but remember their presence. */ size_t rlen; bool check_dir = false; rlen = len; while (rlen > drive_prefix_len && ISSLASH (name[rlen-1])) { check_dir = true; if (rlen == drive_prefix_len + 1) break; rlen--; } /* Handle '' and 'C:'. */ if (!check_dir && rlen == drive_prefix_len) { errno = ENOENT; return -1; } /* Handle '\\'. */ if (rlen == 1 && ISSLASH (name[0]) && len >= 2) { errno = ENOENT; return -1; } const char *rname; char *malloca_rname; if (rlen == len) { rname = name; malloca_rname = NULL; } else { malloca_rname = malloca (rlen + 1); if (malloca_rname == NULL) { errno = ENOMEM; return -1; } memcpy (malloca_rname, name, rlen); malloca_rname[rlen] = '\0'; rname = malloca_rname; } /* There are two ways to get at the requested information: - by scanning the parent directory and examining the relevant directory entry, - by opening the file directly. The first approach fails for root directories (e.g. 'C:\') and UNC root directories (e.g. '\\server\share'). The second approach fails for some system files (e.g. 'C:\pagefile.sys' and 'C:\hiberfil.sys'): ERROR_SHARING_VIOLATION. The second approach gives more information (in particular, correct st_dev, st_ino, st_nlink fields). So we use the second approach and, as a fallback except for root and UNC root directories, also the first approach. */ { int ret; { /* Approach based on the file. */ /* Open a handle to the file. CreateFile <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-createfilea> <https://docs.microsoft.com/en-us/windows/desktop/FileIO/creating-and-opening-files> */ HANDLE h = CreateFile (rname, FILE_READ_ATTRIBUTES, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, NULL, OPEN_EXISTING, /* FILE_FLAG_POSIX_SEMANTICS (treat file names that differ only in case as different) makes sense only when applied to *all* filesystem operations. */ FILE_FLAG_BACKUP_SEMANTICS /* | FILE_FLAG_POSIX_SEMANTICS */, NULL); if (h != INVALID_HANDLE_VALUE) { ret = _gl_fstat_by_handle (h, rname, buf); CloseHandle (h); goto done; } } /* Test for root and UNC root directories. */ if ((rlen == drive_prefix_len + 1 && ISSLASH (rname[drive_prefix_len])) || is_unc_root (rname)) goto failed; /* Fallback. */ { /* Approach based on the directory entry. */ if (strchr (rname, '?') != NULL || strchr (rname, '*') != NULL) { /* Other Windows API functions would fail with error ERROR_INVALID_NAME. */ if (malloca_rname != NULL) freea (malloca_rname); errno = ENOENT; return -1; } /* Get the details about the directory entry. This can be done through FindFirstFile <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-findfirstfilea> <https://docs.microsoft.com/en-us/windows/desktop/api/minwinbase/ns-minwinbase-_win32_find_dataa> or through FindFirstFileEx with argument FindExInfoBasic <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-findfirstfileexa> <https://docs.microsoft.com/en-us/windows/desktop/api/minwinbase/ne-minwinbase-findex_info_levels> <https://docs.microsoft.com/en-us/windows/desktop/api/minwinbase/ns-minwinbase-_win32_find_dataa> */ WIN32_FIND_DATA info; HANDLE h = FindFirstFile (rname, &info); if (h == INVALID_HANDLE_VALUE) goto failed; /* Test for error conditions before starting to fill *buf. */ if (sizeof (buf->st_size) <= 4 && info.nFileSizeHigh > 0) { FindClose (h); if (malloca_rname != NULL) freea (malloca_rname); errno = EOVERFLOW; return -1; } # if _GL_WINDOWS_STAT_INODES buf->st_dev = 0; # if _GL_WINDOWS_STAT_INODES == 2 buf->st_ino._gl_ino[0] = buf->st_ino._gl_ino[1] = 0; # else /* _GL_WINDOWS_STAT_INODES == 1 */ buf->st_ino = 0; # endif # else /* st_ino is not wide enough for identifying a file on a device. Without st_ino, st_dev is pointless. */ buf->st_dev = 0; buf->st_ino = 0; # endif /* st_mode. */ unsigned int mode = /* XXX How to handle FILE_ATTRIBUTE_REPARSE_POINT ? */ ((info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ? _S_IFDIR | S_IEXEC_UGO : _S_IFREG) | S_IREAD_UGO | ((info.dwFileAttributes & FILE_ATTRIBUTE_READONLY) ? 0 : S_IWRITE_UGO); if (!(info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) { /* Determine whether the file is executable by looking at the file name suffix. */ if (info.nFileSizeHigh > 0 || info.nFileSizeLow > 0) { const char *last_dot = NULL; const char *p; for (p = info.cFileName; *p != '\0'; p++) if (*p == '.') last_dot = p; if (last_dot != NULL) { const char *suffix = last_dot + 1; if (_stricmp (suffix, "exe") == 0 || _stricmp (suffix, "bat") == 0 || _stricmp (suffix, "cmd") == 0 || _stricmp (suffix, "com") == 0) mode |= S_IEXEC_UGO; } } } buf->st_mode = mode; /* st_nlink. Ignore hard links here. */ buf->st_nlink = 1; /* There's no easy way to map the Windows SID concept to an integer. */ buf->st_uid = 0; buf->st_gid = 0; /* st_rdev is irrelevant for normal files and directories. */ buf->st_rdev = 0; /* st_size. */ if (sizeof (buf->st_size) <= 4) /* Range check already done above. */ buf->st_size = info.nFileSizeLow; else buf->st_size = ((long long) info.nFileSizeHigh << 32) | (long long) info.nFileSizeLow; /* st_atime, st_mtime, st_ctime. */ # if _GL_WINDOWS_STAT_TIMESPEC buf->st_atim = _gl_convert_FILETIME_to_timespec (&info.ftLastAccessTime); buf->st_mtim = _gl_convert_FILETIME_to_timespec (&info.ftLastWriteTime); buf->st_ctim = _gl_convert_FILETIME_to_timespec (&info.ftCreationTime); # else buf->st_atime = _gl_convert_FILETIME_to_POSIX (&info.ftLastAccessTime); buf->st_mtime = _gl_convert_FILETIME_to_POSIX (&info.ftLastWriteTime); buf->st_ctime = _gl_convert_FILETIME_to_POSIX (&info.ftCreationTime); # endif FindClose (h); ret = 0; } done: if (ret >= 0 && check_dir && !S_ISDIR (buf->st_mode)) { errno = ENOTDIR; ret = -1; } if (malloca_rname != NULL) { int saved_errno = errno; freea (malloca_rname); errno = saved_errno; } return ret; } failed: { DWORD error = GetLastError (); #if 0 fprintf (stderr, "rpl_stat error 0x%x\n", (unsigned int) error); #endif if (malloca_rname != NULL) freea (malloca_rname); switch (error) { /* Some of these errors probably cannot happen with the specific flags that we pass to CreateFile. But who knows... */ case ERROR_FILE_NOT_FOUND: /* The last component of rname does not exist. */ case ERROR_PATH_NOT_FOUND: /* Some directory component in rname does not exist. */ case ERROR_BAD_PATHNAME: /* rname is such as '\\server'. */ case ERROR_BAD_NET_NAME: /* rname is such as '\\server\nonexistentshare'. */ case ERROR_INVALID_NAME: /* rname contains wildcards, misplaced colon, etc. */ case ERROR_DIRECTORY: errno = ENOENT; break; case ERROR_ACCESS_DENIED: /* rname is such as 'C:\System Volume Information\foo'. */ case ERROR_SHARING_VIOLATION: /* rname is such as 'C:\pagefile.sys' (second approach only). */ /* XXX map to EACCES or EPERM? */ errno = EACCES; break; case ERROR_OUTOFMEMORY: errno = ENOMEM; break; case ERROR_WRITE_PROTECT: errno = EROFS; break; case ERROR_WRITE_FAULT: case ERROR_READ_FAULT: case ERROR_GEN_FAILURE: errno = EIO; break; case ERROR_BUFFER_OVERFLOW: case ERROR_FILENAME_EXCED_RANGE: errno = ENAMETOOLONG; break; case ERROR_DELETE_PENDING: /* XXX map to EACCES or EPERM? */ errno = EPERM; break; default: errno = EINVAL; break; } return -1; } #else int result = orig_stat (name, buf); if (result == 0) { # if REPLACE_FUNC_STAT_FILE /* Solaris 9 mistakenly succeeds when given a non-directory with a trailing slash. */ if (!S_ISDIR (buf->st_mode)) { size_t len = strlen (name); if (ISSLASH (name[len - 1])) { errno = ENOTDIR; return -1; } } # endif /* REPLACE_FUNC_STAT_FILE */ result = stat_time_normalize (result, buf); } return result; #endif } ����������������������������������������������������rush-2.4/gnu/verify.h�������������������������������������������������������������������������������0000644�0001750�0001750�00000036137�14436425346�014621� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compile-time assert-like macros. Copyright (C) 2005-2006, 2009-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paul Eggert, Bruno Haible, and Jim Meyering. */ #ifndef _GL_VERIFY_H #define _GL_VERIFY_H /* Define _GL_HAVE__STATIC_ASSERT to 1 if _Static_assert (R, DIAGNOSTIC) works as per C11. This is supported by GCC 4.6.0+ and by clang 4+. Define _GL_HAVE__STATIC_ASSERT1 to 1 if _Static_assert (R) works as per C23. This is supported by GCC 9.1+. Support compilers claiming conformance to the relevant standard, and also support GCC when not pedantic. If we were willing to slow 'configure' down we could also use it with other compilers, but since this affects only the quality of diagnostics, why bother? */ #ifndef __cplusplus # if (201112 <= __STDC_VERSION__ \ || (!defined __STRICT_ANSI__ \ && (4 < __GNUC__ + (6 <= __GNUC_MINOR__) || 5 <= __clang_major__))) # define _GL_HAVE__STATIC_ASSERT 1 # endif # if (202311 <= __STDC_VERSION__ \ || (!defined __STRICT_ANSI__ && 9 <= __GNUC__)) # define _GL_HAVE__STATIC_ASSERT1 1 # endif #endif /* FreeBSD 9.1 <sys/cdefs.h>, included by <stddef.h> and lots of other system headers, defines a conflicting _Static_assert that is no better than ours; override it. */ #ifndef _GL_HAVE__STATIC_ASSERT # include <stddef.h> # undef _Static_assert #endif /* Each of these macros verifies that its argument R is nonzero. To be portable, R should be an integer constant expression. Unlike assert (R), there is no run-time overhead. If _Static_assert works, verify (R) uses it directly. Similarly, _GL_VERIFY_TRUE works by packaging a _Static_assert inside a struct that is an operand of sizeof. The code below uses several ideas for C++ compilers, and for C compilers that do not support _Static_assert: * The first step is ((R) ? 1 : -1). Given an expression R, of integral or boolean or floating-point type, this yields an expression of integral type, whose value is later verified to be constant and nonnegative. * Next this expression W is wrapped in a type struct _gl_verify_type { unsigned int _gl_verify_error_if_negative: W; }. If W is negative, this yields a compile-time error. No compiler can deal with a bit-field of negative size. One might think that an array size check would have the same effect, that is, that the type struct { unsigned int dummy[W]; } would work as well. However, inside a function, some compilers (such as C++ compilers and GNU C) allow local parameters and variables inside array size expressions. With these compilers, an array size check would not properly diagnose this misuse of the verify macro: void function (int n) { verify (n < 0); } * For the verify macro, the struct _gl_verify_type will need to somehow be embedded into a declaration. To be portable, this declaration must declare an object, a constant, a function, or a typedef name. If the declared entity uses the type directly, such as in struct dummy {...}; typedef struct {...} dummy; extern struct {...} *dummy; extern void dummy (struct {...} *); extern struct {...} *dummy (void); two uses of the verify macro would yield colliding declarations if the entity names are not disambiguated. A workaround is to attach the current line number to the entity name: #define _GL_CONCAT0(x, y) x##y #define _GL_CONCAT(x, y) _GL_CONCAT0 (x, y) extern struct {...} * _GL_CONCAT (dummy, __LINE__); But this has the problem that two invocations of verify from within the same macro would collide, since the __LINE__ value would be the same for both invocations. (The GCC __COUNTER__ macro solves this problem, but is not portable.) A solution is to use the sizeof operator. It yields a number, getting rid of the identity of the type. Declarations like extern int dummy [sizeof (struct {...})]; extern void dummy (int [sizeof (struct {...})]); extern int (*dummy (void)) [sizeof (struct {...})]; can be repeated. * Should the implementation use a named struct or an unnamed struct? Which of the following alternatives can be used? extern int dummy [sizeof (struct {...})]; extern int dummy [sizeof (struct _gl_verify_type {...})]; extern void dummy (int [sizeof (struct {...})]); extern void dummy (int [sizeof (struct _gl_verify_type {...})]); extern int (*dummy (void)) [sizeof (struct {...})]; extern int (*dummy (void)) [sizeof (struct _gl_verify_type {...})]; In the second and sixth case, the struct type is exported to the outer scope; two such declarations therefore collide. GCC warns about the first, third, and fourth cases. So the only remaining possibility is the fifth case: extern int (*dummy (void)) [sizeof (struct {...})]; * GCC warns about duplicate declarations of the dummy function if -Wredundant-decls is used. GCC 4.3 and later have a builtin __COUNTER__ macro that can let us generate unique identifiers for each dummy function, to suppress this warning. * This implementation exploits the fact that older versions of GCC, which do not support _Static_assert, also do not warn about the last declaration mentioned above. * GCC warns if -Wnested-externs is enabled and 'verify' is used within a function body; but inside a function, you can always arrange to use verify_expr instead. * In C++, any struct definition inside sizeof is invalid. Use a template type to work around the problem. */ /* Concatenate two preprocessor tokens. */ #define _GL_CONCAT(x, y) _GL_CONCAT0 (x, y) #define _GL_CONCAT0(x, y) x##y /* _GL_COUNTER is an integer, preferably one that changes each time we use it. Use __COUNTER__ if it works, falling back on __LINE__ otherwise. __LINE__ isn't perfect, but it's better than a constant. */ #if defined __COUNTER__ && __COUNTER__ != __COUNTER__ # define _GL_COUNTER __COUNTER__ #else # define _GL_COUNTER __LINE__ #endif /* Generate a symbol with the given prefix, making it unique if possible. */ #define _GL_GENSYM(prefix) _GL_CONCAT (prefix, _GL_COUNTER) /* Verify requirement R at compile-time, as an integer constant expression that returns 1. If R is false, fail at compile-time, preferably with a diagnostic that includes the string-literal DIAGNOSTIC. */ #define _GL_VERIFY_TRUE(R, DIAGNOSTIC) \ (!!sizeof (_GL_VERIFY_TYPE (R, DIAGNOSTIC))) #ifdef __cplusplus # if !GNULIB_defined_struct__gl_verify_type template <int w> struct _gl_verify_type { unsigned int _gl_verify_error_if_negative: w; }; # define GNULIB_defined_struct__gl_verify_type 1 # endif # define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \ _gl_verify_type<(R) ? 1 : -1> #elif defined _GL_HAVE__STATIC_ASSERT # define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \ struct { \ _Static_assert (R, DIAGNOSTIC); \ int _gl_dummy; \ } #else # define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \ struct { unsigned int _gl_verify_error_if_negative: (R) ? 1 : -1; } #endif /* Verify requirement R at compile-time, as a declaration without a trailing ';'. If R is false, fail at compile-time. This macro requires three or more arguments but uses at most the first two, so that the _Static_assert macro optionally defined below supports both the C11 two-argument syntax and the C23 one-argument syntax. Unfortunately, unlike C11, this implementation must appear as an ordinary declaration, and cannot appear inside struct { ... }. */ #if 202311 <= __STDC_VERSION__ || 200410 <= __cpp_static_assert # define _GL_VERIFY(R, DIAGNOSTIC, ...) static_assert (R, DIAGNOSTIC) #elif defined _GL_HAVE__STATIC_ASSERT # define _GL_VERIFY(R, DIAGNOSTIC, ...) _Static_assert (R, DIAGNOSTIC) #else # define _GL_VERIFY(R, DIAGNOSTIC, ...) \ extern int (*_GL_GENSYM (_gl_verify_function) (void)) \ [_GL_VERIFY_TRUE (R, DIAGNOSTIC)] # if 4 < __GNUC__ + (6 <= __GNUC_MINOR__) # pragma GCC diagnostic ignored "-Wnested-externs" # endif #endif /* _GL_STATIC_ASSERT_H is defined if this code is copied into assert.h. */ #ifdef _GL_STATIC_ASSERT_H /* Define _Static_assert if needed. */ /* With clang ≥ 3.8.0 in C++ mode, _Static_assert already works and accepts 1 or 2 arguments. We better don't override it, because clang's standard C++ library uses static_assert inside classes in several places, and our replacement via _GL_VERIFY does not work in these contexts. */ # if (defined __cplusplus && defined __clang__ \ && (4 <= __clang_major__ + (8 <= __clang_minor__))) # if 5 <= __clang_major__ /* Avoid "warning: 'static_assert' with no message is a C++17 extension". */ # pragma clang diagnostic ignored "-Wc++17-extensions" # else /* Avoid "warning: static_assert with no message is a C++1z extension". */ # pragma clang diagnostic ignored "-Wc++1z-extensions" # endif # elif !defined _GL_HAVE__STATIC_ASSERT1 && !defined _Static_assert # if !defined _MSC_VER || defined __clang__ # define _Static_assert(...) \ _GL_VERIFY (__VA_ARGS__, "static assertion failed", -) # else # if defined __cplusplus && _MSC_VER >= 1910 /* In MSVC 14.1 or newer, static_assert accepts one or two arguments, but _Static_assert is not defined. */ # define _Static_assert static_assert # else /* Work around MSVC preprocessor incompatibility with ISO C; see <https://stackoverflow.com/questions/5134523/>. */ # define _Static_assert(R, ...) \ _GL_VERIFY ((R), "static assertion failed", -) # endif # endif # endif /* Define static_assert if needed. */ # if (!defined static_assert \ && __STDC_VERSION__ < 202311 \ && (!defined __cplusplus \ || (__cpp_static_assert < 201411 \ && __GNUG__ < 6 && __clang_major__ < 6 && _MSC_VER < 1910))) # if defined __cplusplus && _MSC_VER >= 1900 && !defined __clang__ /* MSVC 14 in C++ mode supports the two-arguments static_assert but not the one-argument static_assert, and it does not support _Static_assert. We have to play preprocessor tricks to distinguish the two cases. Since the MSVC preprocessor is not ISO C compliant (see above),. the solution is specific to MSVC. */ # define _GL_EXPAND(x) x # define _GL_SA1(a1) static_assert ((a1), "static assertion failed") # define _GL_SA2 static_assert # define _GL_SA3 static_assert # define _GL_SA_PICK(x1,x2,x3,x4,...) x4 # define static_assert(...) _GL_EXPAND(_GL_SA_PICK(__VA_ARGS__,_GL_SA3,_GL_SA2,_GL_SA1)) (__VA_ARGS__) /* Avoid "fatal error C1189: #error: The C++ Standard Library forbids macroizing keywords." */ # define _ALLOW_KEYWORD_MACROS 1 # else # define static_assert _Static_assert /* C11 requires this #define. */ # endif # endif #endif /* @assert.h omit start@ */ #if defined __clang_major__ && __clang_major__ < 5 # define _GL_HAS_BUILTIN_TRAP 0 #elif 3 < __GNUC__ + (3 < __GNUC_MINOR__ + (4 <= __GNUC_PATCHLEVEL__)) # define _GL_HAS_BUILTIN_TRAP 1 #elif defined __has_builtin # define _GL_HAS_BUILTIN_TRAP __has_builtin (__builtin_trap) #else # define _GL_HAS_BUILTIN_TRAP 0 #endif #ifndef _GL_HAS_BUILTIN_UNREACHABLE # if defined __clang_major__ && __clang_major__ < 5 # define _GL_HAS_BUILTIN_UNREACHABLE 0 # elif 4 < __GNUC__ + (5 <= __GNUC_MINOR__) # define _GL_HAS_BUILTIN_UNREACHABLE 1 # elif defined __has_builtin # define _GL_HAS_BUILTIN_UNREACHABLE __has_builtin (__builtin_unreachable) # else # define _GL_HAS_BUILTIN_UNREACHABLE 0 # endif #endif /* Each of these macros verifies that its argument R is nonzero. To be portable, R should be an integer constant expression. Unlike assert (R), there is no run-time overhead. There are two macros, since no single macro can be used in all contexts in C. verify_expr (R, E) is for scalar contexts, including integer constant expression contexts. verify (R) is for declaration contexts, e.g., the top level. */ /* Verify requirement R at compile-time. Return the value of the expression E. */ #define verify_expr(R, E) \ (_GL_VERIFY_TRUE (R, "verify_expr (" #R ", " #E ")") ? (E) : (E)) /* Verify requirement R at compile-time, as a declaration without a trailing ';'. verify (R) acts like static_assert (R) except that it is portable to C11/C++14 and earlier, it can issue better diagnostics, and its name is shorter and may be more convenient. */ #ifdef __PGI /* PGI barfs if R is long. */ # define verify(R) _GL_VERIFY (R, "verify (...)", -) #else # define verify(R) _GL_VERIFY (R, "verify (" #R ")", -) #endif /* Assume that R always holds. Behavior is undefined if R is false, fails to evaluate, or has side effects. 'assume (R)' is a directive from the programmer telling the compiler that R is true so the compiler needn't generate code to test R. This is why 'assume' is in verify.h: it's related to static checking (in this case, static checking done by the programmer), not dynamic checking. 'assume (R)' can affect compilation of all the code, not just code that happens to be executed after the assume (R) is "executed". For example, if the code mistakenly does 'assert (R); assume (R);' the compiler is entitled to optimize away the 'assert (R)'. Although assuming R can help a compiler generate better code or diagnostics, performance can suffer if R uses hard-to-optimize features such as function calls not inlined by the compiler. Avoid Clang's __builtin_assume, as it breaks GNU Emacs master as of 2020-08-23T21:09:49Z!eggert@cs.ucla.edu; see <https://bugs.gnu.org/43152#71>. It's not known whether this breakage is a Clang bug or an Emacs bug; play it safe for now. */ #if _GL_HAS_BUILTIN_UNREACHABLE # define assume(R) ((R) ? (void) 0 : __builtin_unreachable ()) #elif 1200 <= _MSC_VER # define assume(R) __assume (R) #elif 202311 <= __STDC_VERSION__ # include <stddef.h> # define assume(R) ((R) ? (void) 0 : unreachable ()) #elif (defined GCC_LINT || defined lint) && _GL_HAS_BUILTIN_TRAP /* Doing it this way helps various packages when configured with --enable-gcc-warnings, which compiles with -Dlint. It's nicer if 'assume' silences warnings with GCC 3.4 through GCC 4.4.7 (2012). */ # define assume(R) ((R) ? (void) 0 : __builtin_trap ()) #else /* Some older tools grok NOTREACHED, e.g., Oracle Studio 12.6 (2017). */ # define assume(R) ((R) ? (void) 0 : /*NOTREACHED*/ (void) 0) #endif /* @assert.h omit end@ */ #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/malloc.c�������������������������������������������������������������������������������0000644�0001750�0001750�00000002430�14436425346�014544� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* malloc() function that is glibc compatible. Copyright (C) 1997-1998, 2006-2007, 2009-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* written by Jim Meyering and Bruno Haible */ #define _GL_USE_STDLIB_ALLOC 1 #include <config.h> #include <stdlib.h> #include <errno.h> #include "xalloc-oversized.h" /* Allocate an N-byte block of memory from the heap, even if N is 0. */ void * rpl_malloc (size_t n) { if (n == 0) n = 1; if (xalloc_oversized (n, 1)) { errno = ENOMEM; return NULL; } void *result = malloc (n); #if !HAVE_MALLOC_POSIX if (result == NULL) errno = ENOMEM; #endif return result; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/stdio.in.h�����������������������������������������������������������������������������0000644�0001750�0001750�00000200046�14436425346�015034� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A GNU-like <stdio.h>. Copyright (C) 2004, 2007-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if defined __need_FILE || defined __need___FILE || defined _GL_ALREADY_INCLUDING_STDIO_H /* Special invocation convention: - Inside glibc header files. - On OSF/1 5.1 we have a sequence of nested includes <stdio.h> -> <getopt.h> -> <ctype.h> -> <sys/localedef.h> -> <sys/lc_core.h> -> <nl_types.h> -> <mesg.h> -> <stdio.h>. In this situation, the functions are not yet declared, therefore we cannot provide the C++ aliases. */ #@INCLUDE_NEXT@ @NEXT_STDIO_H@ #else /* Normal invocation convention. */ #ifndef _@GUARD_PREFIX@_STDIO_H /* Suppress macOS deprecation warnings for sprintf and vsprintf. */ #if (defined __APPLE__ && defined __MACH__) && !defined _POSIX_C_SOURCE # define _POSIX_C_SOURCE 200809L # define _GL_DEFINED__POSIX_C_SOURCE #endif #define _GL_ALREADY_INCLUDING_STDIO_H /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_STDIO_H@ #undef _GL_ALREADY_INCLUDING_STDIO_H #ifdef _GL_DEFINED__POSIX_C_SOURCE # undef _GL_DEFINED__POSIX_C_SOURCE # undef _POSIX_C_SOURCE #endif #ifndef _@GUARD_PREFIX@_STDIO_H #define _@GUARD_PREFIX@_STDIO_H /* This file uses _GL_ATTRIBUTE_DEALLOC, _GL_ATTRIBUTE_FORMAT, _GL_ATTRIBUTE_MALLOC, GNULIB_POSIXCHECK, HAVE_RAW_DECL_*. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif /* Get va_list. Needed on many systems, including glibc 2.8. */ #include <stdarg.h> #include <stddef.h> /* Get off_t and ssize_t. Needed on many systems, including glibc 2.8 and eglibc 2.11.2. May also define off_t to a 64-bit type on native Windows. */ #include <sys/types.h> /* Solaris 10 and NetBSD 7.0 declare renameat in <unistd.h>, not in <stdio.h>. */ /* But in any case avoid namespace pollution on glibc systems. */ #if (@GNULIB_RENAMEAT@ || defined GNULIB_POSIXCHECK) && (defined __sun || defined __NetBSD__) \ && ! defined __GLIBC__ # include <unistd.h> #endif /* Android 4.3 declares renameat in <sys/stat.h>, not in <stdio.h>. */ /* But in any case avoid namespace pollution on glibc systems. */ #if (@GNULIB_RENAMEAT@ || defined GNULIB_POSIXCHECK) && defined __ANDROID__ \ && ! defined __GLIBC__ # include <sys/stat.h> #endif /* MSVC declares 'perror' in <stdlib.h>, not in <stdio.h>. We must include it before we #define perror rpl_perror. */ /* But in any case avoid namespace pollution on glibc systems. */ #if (@GNULIB_PERROR@ || defined GNULIB_POSIXCHECK) \ && (defined _WIN32 && ! defined __CYGWIN__) \ && ! defined __GLIBC__ # include <stdlib.h> #endif /* MSVC declares 'remove' in <io.h>, not in <stdio.h>. We must include it before we #define remove rpl_remove. */ /* MSVC declares 'rename' in <io.h>, not in <stdio.h>. We must include it before we #define rename rpl_rename. */ /* But in any case avoid namespace pollution on glibc systems. */ #if (@GNULIB_REMOVE@ || @GNULIB_RENAME@ || defined GNULIB_POSIXCHECK) \ && (defined _WIN32 && ! defined __CYGWIN__) \ && ! defined __GLIBC__ # include <io.h> #endif /* _GL_ATTRIBUTE_DEALLOC (F, I) declares that the function returns pointers that can be freed by passing them as the Ith argument to the function F. */ #ifndef _GL_ATTRIBUTE_DEALLOC # if __GNUC__ >= 11 # define _GL_ATTRIBUTE_DEALLOC(f, i) __attribute__ ((__malloc__ (f, i))) # else # define _GL_ATTRIBUTE_DEALLOC(f, i) # endif #endif /* The __attribute__ feature is available in gcc versions 2.5 and later. The __-protected variants of the attributes 'format' and 'printf' are accepted by gcc versions 2.6.4 (effectively 2.7) and later. We enable _GL_ATTRIBUTE_FORMAT only if these are supported too, because gnulib and libintl do '#define printf __printf__' when they override the 'printf' function. */ #ifndef _GL_ATTRIBUTE_FORMAT # if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) || defined __clang__ # define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec)) # else # define _GL_ATTRIBUTE_FORMAT(spec) /* empty */ # endif #endif /* _GL_ATTRIBUTE_MALLOC declares that the function returns a pointer to freshly allocated memory. */ #ifndef _GL_ATTRIBUTE_MALLOC # if __GNUC__ >= 3 || defined __clang__ # define _GL_ATTRIBUTE_MALLOC __attribute__ ((__malloc__)) # else # define _GL_ATTRIBUTE_MALLOC # endif #endif /* An __attribute__ __format__ specifier for a function that takes a format string and arguments, where the format string directives are the ones standardized by ISO C99 and POSIX. _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD */ /* __gnu_printf__ is supported in GCC >= 4.4. */ #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) # define _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD __gnu_printf__ #else # define _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD __printf__ #endif /* An __attribute__ __format__ specifier for a function that takes a format string and arguments, where the format string directives are the ones of the system printf(), rather than the ones standardized by ISO C99 and POSIX. _GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM */ /* On mingw, Gnulib sets __USE_MINGW_ANSI_STDIO in order to get closer to the standards. The macro GNULIB_PRINTF_ATTRIBUTE_FLAVOR_GNU indicates whether this change is effective. On older mingw, it is not. */ #if GNULIB_PRINTF_ATTRIBUTE_FLAVOR_GNU # define _GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD #else # define _GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM __printf__ #endif /* _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD indicates to GCC that the function takes a format string and arguments, where the format string directives are the ones standardized by ISO C99 and POSIX. */ #define _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD(formatstring_parameter, first_argument) \ _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, formatstring_parameter, first_argument)) /* _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM is like _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD, except that it indicates to GCC that the supported format string directives are the ones of the system printf(), rather than the ones standardized by ISO C99 and POSIX. */ #define _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM(formatstring_parameter, first_argument) \ _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM, formatstring_parameter, first_argument)) /* _GL_ATTRIBUTE_FORMAT_SCANF indicates to GCC that the function takes a format string and arguments, where the format string directives are the ones standardized by ISO C99 and POSIX. */ #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) # define _GL_ATTRIBUTE_FORMAT_SCANF(formatstring_parameter, first_argument) \ _GL_ATTRIBUTE_FORMAT ((__gnu_scanf__, formatstring_parameter, first_argument)) #else # define _GL_ATTRIBUTE_FORMAT_SCANF(formatstring_parameter, first_argument) \ _GL_ATTRIBUTE_FORMAT ((__scanf__, formatstring_parameter, first_argument)) #endif /* _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM is like _GL_ATTRIBUTE_FORMAT_SCANF, except that it indicates to GCC that the supported format string directives are the ones of the system scanf(), rather than the ones standardized by ISO C99 and POSIX. */ #define _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM(formatstring_parameter, first_argument) \ _GL_ATTRIBUTE_FORMAT ((__scanf__, formatstring_parameter, first_argument)) /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* Macros for stringification. */ #define _GL_STDIO_STRINGIZE(token) #token #define _GL_STDIO_MACROEXPAND_AND_STRINGIZE(token) _GL_STDIO_STRINGIZE(token) /* When also using extern inline, suppress the use of static inline in standard headers of problematic Apple configurations, as Libc at least through Libc-825.26 (2013-04-09) mishandles it; see, e.g., <https://lists.gnu.org/r/bug-gnulib/2012-12/msg00023.html>. Perhaps Apple will fix this some day. */ #if (defined _GL_EXTERN_INLINE_IN_USE && defined __APPLE__ \ && defined __GNUC__ && defined __STDC__) # undef putc_unlocked #endif /* Maximum number of characters produced by printing a NaN value. */ #ifndef _PRINTF_NAN_LEN_MAX # if defined __FreeBSD__ || defined __DragonFly__ \ || defined __NetBSD__ \ || (defined __APPLE__ && defined __MACH__) /* On BSD systems, a NaN value prints as just "nan", without a sign. */ # define _PRINTF_NAN_LEN_MAX 3 # elif (__GLIBC__ >= 2) || MUSL_LIBC || defined __OpenBSD__ || defined __sun || defined __CYGWIN__ /* glibc, musl libc, OpenBSD, Solaris libc, and Cygwin produce "[-]nan". */ # define _PRINTF_NAN_LEN_MAX 4 # elif defined _AIX /* AIX produces "[-]NaNQ". */ # define _PRINTF_NAN_LEN_MAX 5 # elif defined _WIN32 && !defined __CYGWIN__ /* On native Windows, the output can be: - with MSVC ucrt: "[-]nan" or "[-]nan(ind)" or "[-]nan(snan)", - with mingw: "[-]1.#IND" or "[-]1.#QNAN". */ # define _PRINTF_NAN_LEN_MAX 10 # elif defined __sgi /* On IRIX, the output typically is "[-]nan0xNNNNNNNN" with 8 hexadecimal digits. */ # define _PRINTF_NAN_LEN_MAX 14 # else /* We don't know, but 32 should be a safe maximum. */ # define _PRINTF_NAN_LEN_MAX 32 # endif #endif #if @GNULIB_DPRINTF@ # if @REPLACE_DPRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define dprintf rpl_dprintf # endif _GL_FUNCDECL_RPL (dprintf, int, (int fd, const char *restrict format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 3) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (dprintf, int, (int fd, const char *restrict format, ...)); # else # if !@HAVE_DPRINTF@ _GL_FUNCDECL_SYS (dprintf, int, (int fd, const char *restrict format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 3) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (dprintf, int, (int fd, const char *restrict format, ...)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (dprintf); # endif #elif defined GNULIB_POSIXCHECK # undef dprintf # if HAVE_RAW_DECL_DPRINTF _GL_WARN_ON_USE (dprintf, "dprintf is unportable - " "use gnulib module dprintf for portability"); # endif #endif #if @GNULIB_FCLOSE@ /* Close STREAM and its underlying file descriptor. */ # if @REPLACE_FCLOSE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define fclose rpl_fclose # endif _GL_FUNCDECL_RPL (fclose, int, (FILE *stream) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (fclose, int, (FILE *stream)); # else _GL_CXXALIAS_SYS (fclose, int, (FILE *stream)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (fclose); # endif #elif defined GNULIB_POSIXCHECK # undef fclose /* Assume fclose is always declared. */ _GL_WARN_ON_USE (fclose, "fclose is not always POSIX compliant - " "use gnulib module fclose for portable POSIX compliance"); #endif #if @GNULIB_MDA_FCLOSEALL@ /* On native Windows, map 'fcloseall' to '_fcloseall', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::fcloseall on all platforms that have it. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fcloseall # define fcloseall _fcloseall # endif _GL_CXXALIAS_MDA (fcloseall, int, (void)); # else # if @HAVE_DECL_FCLOSEALL@ # if defined __FreeBSD__ || defined __DragonFly__ _GL_CXXALIAS_SYS (fcloseall, void, (void)); # else _GL_CXXALIAS_SYS (fcloseall, int, (void)); # endif # endif # endif # if (defined _WIN32 && !defined __CYGWIN__) || @HAVE_DECL_FCLOSEALL@ _GL_CXXALIASWARN (fcloseall); # endif #endif #if @GNULIB_FDOPEN@ # if @REPLACE_FDOPEN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fdopen # define fdopen rpl_fdopen # endif _GL_FUNCDECL_RPL (fdopen, FILE *, (int fd, const char *mode) _GL_ARG_NONNULL ((2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1) _GL_ATTRIBUTE_MALLOC); _GL_CXXALIAS_RPL (fdopen, FILE *, (int fd, const char *mode)); # elif defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fdopen # define fdopen _fdopen # endif _GL_CXXALIAS_MDA (fdopen, FILE *, (int fd, const char *mode)); # else # if __GNUC__ >= 11 /* For -Wmismatched-dealloc: Associate fdopen with fclose or rpl_fclose. */ _GL_FUNCDECL_SYS (fdopen, FILE *, (int fd, const char *mode) _GL_ARG_NONNULL ((2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1) _GL_ATTRIBUTE_MALLOC); # endif _GL_CXXALIAS_SYS (fdopen, FILE *, (int fd, const char *mode)); # endif _GL_CXXALIASWARN (fdopen); #else # if @GNULIB_FCLOSE@ && __GNUC__ >= 11 && !defined fdopen /* For -Wmismatched-dealloc: Associate fdopen with fclose or rpl_fclose. */ _GL_FUNCDECL_SYS (fdopen, FILE *, (int fd, const char *mode) _GL_ARG_NONNULL ((2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1) _GL_ATTRIBUTE_MALLOC); # endif # if defined GNULIB_POSIXCHECK # undef fdopen /* Assume fdopen is always declared. */ _GL_WARN_ON_USE (fdopen, "fdopen on native Windows platforms is not POSIX compliant - " "use gnulib module fdopen for portability"); # elif @GNULIB_MDA_FDOPEN@ /* On native Windows, map 'fdopen' to '_fdopen', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::fdopen always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fdopen # define fdopen _fdopen # endif _GL_CXXALIAS_MDA (fdopen, FILE *, (int fd, const char *mode)); # else _GL_CXXALIAS_SYS (fdopen, FILE *, (int fd, const char *mode)); # endif _GL_CXXALIASWARN (fdopen); # endif #endif #if @GNULIB_FFLUSH@ /* Flush all pending data on STREAM according to POSIX rules. Both output and seekable input streams are supported. Note! LOSS OF DATA can occur if fflush is applied on an input stream that is _not_seekable_ or on an update stream that is _not_seekable_ and in which the most recent operation was input. Seekability can be tested with lseek(fileno(fp),0,SEEK_CUR). */ # if @REPLACE_FFLUSH@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define fflush rpl_fflush # endif _GL_FUNCDECL_RPL (fflush, int, (FILE *gl_stream)); _GL_CXXALIAS_RPL (fflush, int, (FILE *gl_stream)); # else _GL_CXXALIAS_SYS (fflush, int, (FILE *gl_stream)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (fflush); # endif #elif defined GNULIB_POSIXCHECK # undef fflush /* Assume fflush is always declared. */ _GL_WARN_ON_USE (fflush, "fflush is not always POSIX compliant - " "use gnulib module fflush for portable POSIX compliance"); #endif #if @GNULIB_FGETC@ # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fgetc # define fgetc rpl_fgetc # endif _GL_FUNCDECL_RPL (fgetc, int, (FILE *stream) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (fgetc, int, (FILE *stream)); # else _GL_CXXALIAS_SYS (fgetc, int, (FILE *stream)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (fgetc); # endif #endif #if @GNULIB_FGETS@ # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fgets # define fgets rpl_fgets # endif _GL_FUNCDECL_RPL (fgets, char *, (char *restrict s, int n, FILE *restrict stream) _GL_ARG_NONNULL ((1, 3))); _GL_CXXALIAS_RPL (fgets, char *, (char *restrict s, int n, FILE *restrict stream)); # else _GL_CXXALIAS_SYS (fgets, char *, (char *restrict s, int n, FILE *restrict stream)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (fgets); # endif #endif #if @GNULIB_MDA_FILENO@ /* On native Windows, map 'fileno' to '_fileno', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::fileno always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fileno # define fileno _fileno # endif _GL_CXXALIAS_MDA (fileno, int, (FILE *restrict stream)); # else _GL_CXXALIAS_SYS (fileno, int, (FILE *restrict stream)); # endif _GL_CXXALIASWARN (fileno); #endif #if @GNULIB_FOPEN@ # if (@GNULIB_FOPEN@ && @REPLACE_FOPEN@) \ || (@GNULIB_FOPEN_GNU@ && @REPLACE_FOPEN_FOR_FOPEN_GNU@) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fopen # define fopen rpl_fopen # endif _GL_FUNCDECL_RPL (fopen, FILE *, (const char *restrict filename, const char *restrict mode) _GL_ARG_NONNULL ((1, 2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1) _GL_ATTRIBUTE_MALLOC); _GL_CXXALIAS_RPL (fopen, FILE *, (const char *restrict filename, const char *restrict mode)); # else # if __GNUC__ >= 11 /* For -Wmismatched-dealloc: Associate fopen with fclose or rpl_fclose. */ _GL_FUNCDECL_SYS (fopen, FILE *, (const char *restrict filename, const char *restrict mode) _GL_ARG_NONNULL ((1, 2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1)); # endif _GL_CXXALIAS_SYS (fopen, FILE *, (const char *restrict filename, const char *restrict mode)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (fopen); # endif #else # if @GNULIB_FCLOSE@ && __GNUC__ >= 11 && !defined fopen /* For -Wmismatched-dealloc: Associate fopen with fclose or rpl_fclose. */ _GL_FUNCDECL_SYS (fopen, FILE *, (const char *restrict filename, const char *restrict mode) _GL_ARG_NONNULL ((1, 2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1)); # endif # if defined GNULIB_POSIXCHECK # undef fopen /* Assume fopen is always declared. */ _GL_WARN_ON_USE (fopen, "fopen on native Windows platforms is not POSIX compliant - " "use gnulib module fopen for portability"); # endif #endif #if @GNULIB_FPRINTF_POSIX@ || @GNULIB_FPRINTF@ # if (@GNULIB_FPRINTF_POSIX@ && @REPLACE_FPRINTF@) \ || (@GNULIB_FPRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@)) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define fprintf rpl_fprintf # endif # define GNULIB_overrides_fprintf 1 # if @GNULIB_FPRINTF_POSIX@ || @GNULIB_VFPRINTF_POSIX@ _GL_FUNCDECL_RPL (fprintf, int, (FILE *restrict fp, const char *restrict format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 3) _GL_ARG_NONNULL ((1, 2))); # else _GL_FUNCDECL_RPL (fprintf, int, (FILE *restrict fp, const char *restrict format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (2, 3) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_RPL (fprintf, int, (FILE *restrict fp, const char *restrict format, ...)); # else _GL_CXXALIAS_SYS (fprintf, int, (FILE *restrict fp, const char *restrict format, ...)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (fprintf); # endif #endif #if !@GNULIB_FPRINTF_POSIX@ && defined GNULIB_POSIXCHECK # if !GNULIB_overrides_fprintf # undef fprintf # endif /* Assume fprintf is always declared. */ _GL_WARN_ON_USE (fprintf, "fprintf is not always POSIX compliant - " "use gnulib module fprintf-posix for portable " "POSIX compliance"); #endif #if @GNULIB_FPURGE@ /* Discard all pending buffered I/O data on STREAM. STREAM must not be wide-character oriented. When discarding pending output, the file position is set back to where it was before the write calls. When discarding pending input, the file position is advanced to match the end of the previously read input. Return 0 if successful. Upon error, return -1 and set errno. */ # if @REPLACE_FPURGE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define fpurge rpl_fpurge # endif _GL_FUNCDECL_RPL (fpurge, int, (FILE *gl_stream) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (fpurge, int, (FILE *gl_stream)); # else # if !@HAVE_DECL_FPURGE@ _GL_FUNCDECL_SYS (fpurge, int, (FILE *gl_stream) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (fpurge, int, (FILE *gl_stream)); # endif _GL_CXXALIASWARN (fpurge); #elif defined GNULIB_POSIXCHECK # undef fpurge # if HAVE_RAW_DECL_FPURGE _GL_WARN_ON_USE (fpurge, "fpurge is not always present - " "use gnulib module fpurge for portability"); # endif #endif #if @GNULIB_FPUTC@ # if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fputc # define fputc rpl_fputc # endif _GL_FUNCDECL_RPL (fputc, int, (int c, FILE *stream) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (fputc, int, (int c, FILE *stream)); # else _GL_CXXALIAS_SYS (fputc, int, (int c, FILE *stream)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (fputc); # endif #endif #if @GNULIB_FPUTS@ # if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fputs # define fputs rpl_fputs # endif _GL_FUNCDECL_RPL (fputs, int, (const char *restrict string, FILE *restrict stream) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (fputs, int, (const char *restrict string, FILE *restrict stream)); # else _GL_CXXALIAS_SYS (fputs, int, (const char *restrict string, FILE *restrict stream)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (fputs); # endif #endif #if @GNULIB_FREAD@ # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fread # define fread rpl_fread # endif _GL_FUNCDECL_RPL (fread, size_t, (void *restrict ptr, size_t s, size_t n, FILE *restrict stream) _GL_ARG_NONNULL ((4))); _GL_CXXALIAS_RPL (fread, size_t, (void *restrict ptr, size_t s, size_t n, FILE *restrict stream)); # else _GL_CXXALIAS_SYS (fread, size_t, (void *restrict ptr, size_t s, size_t n, FILE *restrict stream)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (fread); # endif #endif #if @GNULIB_FREOPEN@ # if @REPLACE_FREOPEN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef freopen # define freopen rpl_freopen # endif _GL_FUNCDECL_RPL (freopen, FILE *, (const char *restrict filename, const char *restrict mode, FILE *restrict stream) _GL_ARG_NONNULL ((2, 3))); _GL_CXXALIAS_RPL (freopen, FILE *, (const char *restrict filename, const char *restrict mode, FILE *restrict stream)); # else _GL_CXXALIAS_SYS (freopen, FILE *, (const char *restrict filename, const char *restrict mode, FILE *restrict stream)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (freopen); # endif #elif defined GNULIB_POSIXCHECK # undef freopen /* Assume freopen is always declared. */ _GL_WARN_ON_USE (freopen, "freopen on native Windows platforms is not POSIX compliant - " "use gnulib module freopen for portability"); #endif #if @GNULIB_FSCANF@ # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fscanf # define fscanf rpl_fscanf # endif _GL_FUNCDECL_RPL (fscanf, int, (FILE *restrict stream, const char *restrict format, ...) _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (2, 3) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (fscanf, int, (FILE *restrict stream, const char *restrict format, ...)); # else _GL_CXXALIAS_SYS (fscanf, int, (FILE *restrict stream, const char *restrict format, ...)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (fscanf); # endif #endif /* Set up the following warnings, based on which modules are in use. GNU Coding Standards discourage the use of fseek, since it imposes an arbitrary limitation on some 32-bit hosts. Remember that the fseek module depends on the fseeko module, so we only have three cases to consider: 1. The developer is not using either module. Issue a warning under GNULIB_POSIXCHECK for both functions, to remind them that both functions have bugs on some systems. _GL_NO_LARGE_FILES has no impact on this warning. 2. The developer is using both modules. They may be unaware of the arbitrary limitations of fseek, so issue a warning under GNULIB_POSIXCHECK. On the other hand, they may be using both modules intentionally, so the developer can define _GL_NO_LARGE_FILES in the compilation units where the use of fseek is safe, to silence the warning. 3. The developer is using the fseeko module, but not fseek. Gnulib guarantees that fseek will still work around platform bugs in that case, but we presume that the developer is aware of the pitfalls of fseek and was trying to avoid it, so issue a warning even when GNULIB_POSIXCHECK is undefined. Again, _GL_NO_LARGE_FILES can be defined to silence the warning in particular compilation units. In C++ compilations with GNULIB_NAMESPACE, in order to avoid that fseek gets defined as a macro, it is recommended that the developer uses the fseek module, even if he is not calling the fseek function. Most gnulib clients that perform stream operations should fall into category 3. */ #if @GNULIB_FSEEK@ # if defined GNULIB_POSIXCHECK && !defined _GL_NO_LARGE_FILES # define _GL_FSEEK_WARN /* Category 2, above. */ # undef fseek # endif # if @REPLACE_FSEEK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fseek # define fseek rpl_fseek # endif _GL_FUNCDECL_RPL (fseek, int, (FILE *fp, long offset, int whence) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (fseek, int, (FILE *fp, long offset, int whence)); # else _GL_CXXALIAS_SYS (fseek, int, (FILE *fp, long offset, int whence)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (fseek); # endif #endif #if @GNULIB_FSEEKO@ # if !@GNULIB_FSEEK@ && !defined _GL_NO_LARGE_FILES # define _GL_FSEEK_WARN /* Category 3, above. */ # undef fseek # endif # if @REPLACE_FSEEKO@ /* Provide an fseeko function that is aware of a preceding fflush(), and which detects pipes. */ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fseeko # define fseeko rpl_fseeko # endif _GL_FUNCDECL_RPL (fseeko, int, (FILE *fp, off_t offset, int whence) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (fseeko, int, (FILE *fp, off_t offset, int whence)); # else # if ! @HAVE_DECL_FSEEKO@ _GL_FUNCDECL_SYS (fseeko, int, (FILE *fp, off_t offset, int whence) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (fseeko, int, (FILE *fp, off_t offset, int whence)); # endif _GL_CXXALIASWARN (fseeko); #elif defined GNULIB_POSIXCHECK # define _GL_FSEEK_WARN /* Category 1, above. */ # undef fseek # undef fseeko # if HAVE_RAW_DECL_FSEEKO _GL_WARN_ON_USE (fseeko, "fseeko is unportable - " "use gnulib module fseeko for portability"); # endif #endif #ifdef _GL_FSEEK_WARN # undef _GL_FSEEK_WARN /* Here, either fseek is undefined (but C89 guarantees that it is declared), or it is defined as rpl_fseek (declared above). */ _GL_WARN_ON_USE (fseek, "fseek cannot handle files larger than 4 GB " "on 32-bit platforms - " "use fseeko function for handling of large files"); #endif /* ftell, ftello. See the comments on fseek/fseeko. */ #if @GNULIB_FTELL@ # if defined GNULIB_POSIXCHECK && !defined _GL_NO_LARGE_FILES # define _GL_FTELL_WARN /* Category 2, above. */ # undef ftell # endif # if @REPLACE_FTELL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ftell # define ftell rpl_ftell # endif _GL_FUNCDECL_RPL (ftell, long, (FILE *fp) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (ftell, long, (FILE *fp)); # else _GL_CXXALIAS_SYS (ftell, long, (FILE *fp)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (ftell); # endif #endif #if @GNULIB_FTELLO@ # if !@GNULIB_FTELL@ && !defined _GL_NO_LARGE_FILES # define _GL_FTELL_WARN /* Category 3, above. */ # undef ftell # endif # if @REPLACE_FTELLO@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ftello # define ftello rpl_ftello # endif _GL_FUNCDECL_RPL (ftello, off_t, (FILE *fp) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (ftello, off_t, (FILE *fp)); # else # if ! @HAVE_DECL_FTELLO@ _GL_FUNCDECL_SYS (ftello, off_t, (FILE *fp) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (ftello, off_t, (FILE *fp)); # endif _GL_CXXALIASWARN (ftello); #elif defined GNULIB_POSIXCHECK # define _GL_FTELL_WARN /* Category 1, above. */ # undef ftell # undef ftello # if HAVE_RAW_DECL_FTELLO _GL_WARN_ON_USE (ftello, "ftello is unportable - " "use gnulib module ftello for portability"); # endif #endif #ifdef _GL_FTELL_WARN # undef _GL_FTELL_WARN /* Here, either ftell is undefined (but C89 guarantees that it is declared), or it is defined as rpl_ftell (declared above). */ _GL_WARN_ON_USE (ftell, "ftell cannot handle files larger than 4 GB " "on 32-bit platforms - " "use ftello function for handling of large files"); #endif #if @GNULIB_FWRITE@ # if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fwrite # define fwrite rpl_fwrite # endif _GL_FUNCDECL_RPL (fwrite, size_t, (const void *restrict ptr, size_t s, size_t n, FILE *restrict stream) _GL_ARG_NONNULL ((1, 4))); _GL_CXXALIAS_RPL (fwrite, size_t, (const void *restrict ptr, size_t s, size_t n, FILE *restrict stream)); # else _GL_CXXALIAS_SYS (fwrite, size_t, (const void *restrict ptr, size_t s, size_t n, FILE *restrict stream)); /* Work around bug 11959 when fortifying glibc 2.4 through 2.15 <https://sourceware.org/bugzilla/show_bug.cgi?id=11959>, which sometimes causes an unwanted diagnostic for fwrite calls. This affects only function declaration attributes under certain versions of gcc and clang, and is not needed for C++. */ # if (0 < __USE_FORTIFY_LEVEL \ && __GLIBC__ == 2 && 4 <= __GLIBC_MINOR__ && __GLIBC_MINOR__ <= 15 \ && 3 < __GNUC__ + (4 <= __GNUC_MINOR__) \ && !defined __cplusplus) # undef fwrite # undef fwrite_unlocked extern size_t __REDIRECT (rpl_fwrite, (const void *__restrict, size_t, size_t, FILE *__restrict), fwrite); extern size_t __REDIRECT (rpl_fwrite_unlocked, (const void *__restrict, size_t, size_t, FILE *__restrict), fwrite_unlocked); # define fwrite rpl_fwrite # define fwrite_unlocked rpl_fwrite_unlocked # endif # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (fwrite); # endif #endif #if @GNULIB_GETC@ # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getc # define getc rpl_fgetc # endif _GL_FUNCDECL_RPL (fgetc, int, (FILE *stream) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL_1 (getc, rpl_fgetc, int, (FILE *stream)); # else _GL_CXXALIAS_SYS (getc, int, (FILE *stream)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (getc); # endif #endif #if @GNULIB_GETCHAR@ # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getchar # define getchar rpl_getchar # endif _GL_FUNCDECL_RPL (getchar, int, (void)); _GL_CXXALIAS_RPL (getchar, int, (void)); # else _GL_CXXALIAS_SYS (getchar, int, (void)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (getchar); # endif #endif #if @GNULIB_GETDELIM@ /* Read input, up to (and including) the next occurrence of DELIMITER, from STREAM, store it in *LINEPTR (and NUL-terminate it). *LINEPTR is a pointer returned from malloc (or NULL), pointing to *LINESIZE bytes of space. It is realloc'd as necessary. Return the number of bytes read and stored at *LINEPTR (not including the NUL terminator), or -1 on error or EOF. */ # if @REPLACE_GETDELIM@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getdelim # define getdelim rpl_getdelim # endif _GL_FUNCDECL_RPL (getdelim, ssize_t, (char **restrict lineptr, size_t *restrict linesize, int delimiter, FILE *restrict stream) _GL_ARG_NONNULL ((1, 2, 4))); _GL_CXXALIAS_RPL (getdelim, ssize_t, (char **restrict lineptr, size_t *restrict linesize, int delimiter, FILE *restrict stream)); # else # if !@HAVE_DECL_GETDELIM@ _GL_FUNCDECL_SYS (getdelim, ssize_t, (char **restrict lineptr, size_t *restrict linesize, int delimiter, FILE *restrict stream) _GL_ARG_NONNULL ((1, 2, 4))); # endif _GL_CXXALIAS_SYS (getdelim, ssize_t, (char **restrict lineptr, size_t *restrict linesize, int delimiter, FILE *restrict stream)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (getdelim); # endif #elif defined GNULIB_POSIXCHECK # undef getdelim # if HAVE_RAW_DECL_GETDELIM _GL_WARN_ON_USE (getdelim, "getdelim is unportable - " "use gnulib module getdelim for portability"); # endif #endif #if @GNULIB_GETLINE@ /* Read a line, up to (and including) the next newline, from STREAM, store it in *LINEPTR (and NUL-terminate it). *LINEPTR is a pointer returned from malloc (or NULL), pointing to *LINESIZE bytes of space. It is realloc'd as necessary. Return the number of bytes read and stored at *LINEPTR (not including the NUL terminator), or -1 on error or EOF. */ # if @REPLACE_GETLINE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getline # define getline rpl_getline # endif _GL_FUNCDECL_RPL (getline, ssize_t, (char **restrict lineptr, size_t *restrict linesize, FILE *restrict stream) _GL_ARG_NONNULL ((1, 2, 3))); _GL_CXXALIAS_RPL (getline, ssize_t, (char **restrict lineptr, size_t *restrict linesize, FILE *restrict stream)); # else # if !@HAVE_DECL_GETLINE@ _GL_FUNCDECL_SYS (getline, ssize_t, (char **restrict lineptr, size_t *restrict linesize, FILE *restrict stream) _GL_ARG_NONNULL ((1, 2, 3))); # endif _GL_CXXALIAS_SYS (getline, ssize_t, (char **restrict lineptr, size_t *restrict linesize, FILE *restrict stream)); # endif # if __GLIBC__ >= 2 && @HAVE_DECL_GETLINE@ _GL_CXXALIASWARN (getline); # endif #elif defined GNULIB_POSIXCHECK # undef getline # if HAVE_RAW_DECL_GETLINE _GL_WARN_ON_USE (getline, "getline is unportable - " "use gnulib module getline for portability"); # endif #endif /* It is very rare that the developer ever has full control of stdin, so any use of gets warrants an unconditional warning; besides, C11 removed it. */ #undef gets #if HAVE_RAW_DECL_GETS && !defined __cplusplus _GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead"); #endif #if @GNULIB_MDA_GETW@ /* On native Windows, map 'getw' to '_getw', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::getw always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getw # define getw _getw # endif _GL_CXXALIAS_MDA (getw, int, (FILE *restrict stream)); # else # if @HAVE_DECL_GETW@ # if defined __APPLE__ && defined __MACH__ /* The presence of the declaration depends on _POSIX_C_SOURCE. */ _GL_FUNCDECL_SYS (getw, int, (FILE *restrict stream)); # endif _GL_CXXALIAS_SYS (getw, int, (FILE *restrict stream)); # endif # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (getw); # endif #endif #if @GNULIB_OBSTACK_PRINTF@ || @GNULIB_OBSTACK_PRINTF_POSIX@ struct obstack; /* Grow an obstack with formatted output. Return the number of bytes added to OBS. No trailing nul byte is added, and the object should be closed with obstack_finish before use. Upon memory allocation error, call obstack_alloc_failed_handler. Upon other error, return -1. */ # if @REPLACE_OBSTACK_PRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define obstack_printf rpl_obstack_printf # endif _GL_FUNCDECL_RPL (obstack_printf, int, (struct obstack *obs, const char *format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 3) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (obstack_printf, int, (struct obstack *obs, const char *format, ...)); # else # if !@HAVE_DECL_OBSTACK_PRINTF@ _GL_FUNCDECL_SYS (obstack_printf, int, (struct obstack *obs, const char *format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 3) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (obstack_printf, int, (struct obstack *obs, const char *format, ...)); # endif _GL_CXXALIASWARN (obstack_printf); # if @REPLACE_OBSTACK_PRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define obstack_vprintf rpl_obstack_vprintf # endif _GL_FUNCDECL_RPL (obstack_vprintf, int, (struct obstack *obs, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 0) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (obstack_vprintf, int, (struct obstack *obs, const char *format, va_list args)); # else # if !@HAVE_DECL_OBSTACK_PRINTF@ _GL_FUNCDECL_SYS (obstack_vprintf, int, (struct obstack *obs, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 0) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (obstack_vprintf, int, (struct obstack *obs, const char *format, va_list args)); # endif _GL_CXXALIASWARN (obstack_vprintf); #endif #if @GNULIB_PCLOSE@ # if !@HAVE_PCLOSE@ _GL_FUNCDECL_SYS (pclose, int, (FILE *stream) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pclose, int, (FILE *stream)); _GL_CXXALIASWARN (pclose); #elif defined GNULIB_POSIXCHECK # undef pclose # if HAVE_RAW_DECL_PCLOSE _GL_WARN_ON_USE (pclose, "pclose is unportable - " "use gnulib module pclose for more portability"); # endif #endif #if @GNULIB_PERROR@ /* Print a message to standard error, describing the value of ERRNO, (if STRING is not NULL and not empty) prefixed with STRING and ": ", and terminated with a newline. */ # if @REPLACE_PERROR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define perror rpl_perror # endif _GL_FUNCDECL_RPL (perror, void, (const char *string)); _GL_CXXALIAS_RPL (perror, void, (const char *string)); # else _GL_CXXALIAS_SYS (perror, void, (const char *string)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (perror); # endif #elif defined GNULIB_POSIXCHECK # undef perror /* Assume perror is always declared. */ _GL_WARN_ON_USE (perror, "perror is not always POSIX compliant - " "use gnulib module perror for portability"); #endif #if @GNULIB_POPEN@ # if @REPLACE_POPEN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef popen # define popen rpl_popen # endif _GL_FUNCDECL_RPL (popen, FILE *, (const char *cmd, const char *mode) _GL_ARG_NONNULL ((1, 2)) _GL_ATTRIBUTE_DEALLOC (pclose, 1) _GL_ATTRIBUTE_MALLOC); _GL_CXXALIAS_RPL (popen, FILE *, (const char *cmd, const char *mode)); # else # if !@HAVE_POPEN@ || __GNUC__ >= 11 _GL_FUNCDECL_SYS (popen, FILE *, (const char *cmd, const char *mode) _GL_ARG_NONNULL ((1, 2)) _GL_ATTRIBUTE_DEALLOC (pclose, 1) _GL_ATTRIBUTE_MALLOC); # endif _GL_CXXALIAS_SYS (popen, FILE *, (const char *cmd, const char *mode)); # endif _GL_CXXALIASWARN (popen); #else # if @GNULIB_PCLOSE@ && __GNUC__ >= 11 && !defined popen /* For -Wmismatched-dealloc: Associate popen with pclose or rpl_pclose. */ _GL_FUNCDECL_SYS (popen, FILE *, (const char *cmd, const char *mode) _GL_ARG_NONNULL ((1, 2)) _GL_ATTRIBUTE_DEALLOC (pclose, 1) _GL_ATTRIBUTE_MALLOC); # endif # if defined GNULIB_POSIXCHECK # undef popen # if HAVE_RAW_DECL_POPEN _GL_WARN_ON_USE (popen, "popen is buggy on some platforms - " "use gnulib module popen or pipe for more portability"); # endif # endif #endif #if @GNULIB_PRINTF_POSIX@ || @GNULIB_PRINTF@ # if (@GNULIB_PRINTF_POSIX@ && @REPLACE_PRINTF@) \ || (@GNULIB_PRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@)) # if defined __GNUC__ || defined __clang__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) /* Don't break __attribute__((format(printf,M,N))). */ # define printf __printf__ # endif # if @GNULIB_PRINTF_POSIX@ || @GNULIB_VFPRINTF_POSIX@ _GL_FUNCDECL_RPL_1 (__printf__, int, (const char *restrict format, ...) __asm__ (@ASM_SYMBOL_PREFIX@ _GL_STDIO_MACROEXPAND_AND_STRINGIZE(rpl_printf)) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (1, 2) _GL_ARG_NONNULL ((1))); # else _GL_FUNCDECL_RPL_1 (__printf__, int, (const char *restrict format, ...) __asm__ (@ASM_SYMBOL_PREFIX@ _GL_STDIO_MACROEXPAND_AND_STRINGIZE(rpl_printf)) _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (1, 2) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_RPL_1 (printf, __printf__, int, (const char *format, ...)); # else # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define printf rpl_printf # endif _GL_FUNCDECL_RPL (printf, int, (const char *restrict format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (1, 2) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (printf, int, (const char *restrict format, ...)); # endif # define GNULIB_overrides_printf 1 # else _GL_CXXALIAS_SYS (printf, int, (const char *restrict format, ...)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (printf); # endif #endif #if !@GNULIB_PRINTF_POSIX@ && defined GNULIB_POSIXCHECK # if !GNULIB_overrides_printf # undef printf # endif /* Assume printf is always declared. */ _GL_WARN_ON_USE (printf, "printf is not always POSIX compliant - " "use gnulib module printf-posix for portable " "POSIX compliance"); #endif #if @GNULIB_PUTC@ # if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef putc # define putc rpl_fputc # endif _GL_FUNCDECL_RPL (fputc, int, (int c, FILE *stream) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL_1 (putc, rpl_fputc, int, (int c, FILE *stream)); # else _GL_CXXALIAS_SYS (putc, int, (int c, FILE *stream)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (putc); # endif #endif #if @GNULIB_PUTCHAR@ # if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef putchar # define putchar rpl_putchar # endif _GL_FUNCDECL_RPL (putchar, int, (int c)); _GL_CXXALIAS_RPL (putchar, int, (int c)); # else _GL_CXXALIAS_SYS (putchar, int, (int c)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (putchar); # endif #endif #if @GNULIB_PUTS@ # if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef puts # define puts rpl_puts # endif _GL_FUNCDECL_RPL (puts, int, (const char *string) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (puts, int, (const char *string)); # else _GL_CXXALIAS_SYS (puts, int, (const char *string)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (puts); # endif #endif #if @GNULIB_MDA_PUTW@ /* On native Windows, map 'putw' to '_putw', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::putw always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef putw # define putw _putw # endif _GL_CXXALIAS_MDA (putw, int, (int w, FILE *restrict stream)); # else # if @HAVE_DECL_PUTW@ # if defined __APPLE__ && defined __MACH__ /* The presence of the declaration depends on _POSIX_C_SOURCE. */ _GL_FUNCDECL_SYS (putw, int, (int w, FILE *restrict stream)); # endif _GL_CXXALIAS_SYS (putw, int, (int w, FILE *restrict stream)); # endif # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (putw); # endif #endif #if @GNULIB_REMOVE@ # if @REPLACE_REMOVE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef remove # define remove rpl_remove # endif _GL_FUNCDECL_RPL (remove, int, (const char *name) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (remove, int, (const char *name)); # else _GL_CXXALIAS_SYS (remove, int, (const char *name)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (remove); # endif #elif defined GNULIB_POSIXCHECK # undef remove /* Assume remove is always declared. */ _GL_WARN_ON_USE (remove, "remove cannot handle directories on some platforms - " "use gnulib module remove for more portability"); #endif #if @GNULIB_RENAME@ # if @REPLACE_RENAME@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef rename # define rename rpl_rename # endif _GL_FUNCDECL_RPL (rename, int, (const char *old_filename, const char *new_filename) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (rename, int, (const char *old_filename, const char *new_filename)); # else _GL_CXXALIAS_SYS (rename, int, (const char *old_filename, const char *new_filename)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (rename); # endif #elif defined GNULIB_POSIXCHECK # undef rename /* Assume rename is always declared. */ _GL_WARN_ON_USE (rename, "rename is buggy on some platforms - " "use gnulib module rename for more portability"); #endif #if @GNULIB_RENAMEAT@ # if @REPLACE_RENAMEAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef renameat # define renameat rpl_renameat # endif _GL_FUNCDECL_RPL (renameat, int, (int fd1, char const *file1, int fd2, char const *file2) _GL_ARG_NONNULL ((2, 4))); _GL_CXXALIAS_RPL (renameat, int, (int fd1, char const *file1, int fd2, char const *file2)); # else # if !@HAVE_RENAMEAT@ _GL_FUNCDECL_SYS (renameat, int, (int fd1, char const *file1, int fd2, char const *file2) _GL_ARG_NONNULL ((2, 4))); # endif _GL_CXXALIAS_SYS (renameat, int, (int fd1, char const *file1, int fd2, char const *file2)); # endif _GL_CXXALIASWARN (renameat); #elif defined GNULIB_POSIXCHECK # undef renameat # if HAVE_RAW_DECL_RENAMEAT _GL_WARN_ON_USE (renameat, "renameat is not portable - " "use gnulib module renameat for portability"); # endif #endif #if @GNULIB_SCANF@ # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ # if defined __GNUC__ || defined __clang__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef scanf /* Don't break __attribute__((format(scanf,M,N))). */ # define scanf __scanf__ # endif _GL_FUNCDECL_RPL_1 (__scanf__, int, (const char *restrict format, ...) __asm__ (@ASM_SYMBOL_PREFIX@ _GL_STDIO_MACROEXPAND_AND_STRINGIZE(rpl_scanf)) _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (1, 2) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL_1 (scanf, __scanf__, int, (const char *restrict format, ...)); # else # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef scanf # define scanf rpl_scanf # endif _GL_FUNCDECL_RPL (scanf, int, (const char *restrict format, ...) _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (1, 2) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (scanf, int, (const char *restrict format, ...)); # endif # else _GL_CXXALIAS_SYS (scanf, int, (const char *restrict format, ...)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (scanf); # endif #endif #if @GNULIB_SNPRINTF@ # if @REPLACE_SNPRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define snprintf rpl_snprintf # endif # define GNULIB_overrides_snprintf 1 _GL_FUNCDECL_RPL (snprintf, int, (char *restrict str, size_t size, const char *restrict format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (3, 4) _GL_ARG_NONNULL ((3))); _GL_CXXALIAS_RPL (snprintf, int, (char *restrict str, size_t size, const char *restrict format, ...)); # else # if !@HAVE_DECL_SNPRINTF@ _GL_FUNCDECL_SYS (snprintf, int, (char *restrict str, size_t size, const char *restrict format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (3, 4) _GL_ARG_NONNULL ((3))); # endif _GL_CXXALIAS_SYS (snprintf, int, (char *restrict str, size_t size, const char *restrict format, ...)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (snprintf); # endif #elif defined GNULIB_POSIXCHECK # undef snprintf # if HAVE_RAW_DECL_SNPRINTF _GL_WARN_ON_USE (snprintf, "snprintf is unportable - " "use gnulib module snprintf for portability"); # endif #endif /* Some people would argue that all sprintf uses should be warned about (for example, OpenBSD issues a link warning for it), since it can cause security holes due to buffer overruns. However, we believe that sprintf can be used safely, and is more efficient than snprintf in those safe cases; and as proof of our belief, we use sprintf in several gnulib modules. So this header intentionally avoids adding a warning to sprintf except when GNULIB_POSIXCHECK is defined. */ #if @GNULIB_SPRINTF_POSIX@ # if @REPLACE_SPRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define sprintf rpl_sprintf # endif # define GNULIB_overrides_sprintf 1 _GL_FUNCDECL_RPL (sprintf, int, (char *restrict str, const char *restrict format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 3) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (sprintf, int, (char *restrict str, const char *restrict format, ...)); # else _GL_CXXALIAS_SYS (sprintf, int, (char *restrict str, const char *restrict format, ...)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (sprintf); # endif #elif defined GNULIB_POSIXCHECK # undef sprintf /* Assume sprintf is always declared. */ _GL_WARN_ON_USE (sprintf, "sprintf is not always POSIX compliant - " "use gnulib module sprintf-posix for portable " "POSIX compliance"); #endif #if @GNULIB_MDA_TEMPNAM@ /* On native Windows, map 'tempnam' to '_tempnam', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::tempnam always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef tempnam # define tempnam _tempnam # endif _GL_CXXALIAS_MDA (tempnam, char *, (const char *dir, const char *prefix)); # else _GL_CXXALIAS_SYS (tempnam, char *, (const char *dir, const char *prefix)); # endif _GL_CXXALIASWARN (tempnam); #endif #if @GNULIB_TMPFILE@ # if @REPLACE_TMPFILE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define tmpfile rpl_tmpfile # endif _GL_FUNCDECL_RPL (tmpfile, FILE *, (void) _GL_ATTRIBUTE_DEALLOC (fclose, 1) _GL_ATTRIBUTE_MALLOC); _GL_CXXALIAS_RPL (tmpfile, FILE *, (void)); # else # if __GNUC__ >= 11 /* For -Wmismatched-dealloc: Associate tmpfile with fclose or rpl_fclose. */ _GL_FUNCDECL_SYS (tmpfile, FILE *, (void) _GL_ATTRIBUTE_DEALLOC (fclose, 1) _GL_ATTRIBUTE_MALLOC); # endif _GL_CXXALIAS_SYS (tmpfile, FILE *, (void)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (tmpfile); # endif #else # if @GNULIB_FCLOSE@ && __GNUC__ >= 11 && !defined tmpfile /* For -Wmismatched-dealloc: Associate tmpfile with fclose or rpl_fclose. */ _GL_FUNCDECL_SYS (tmpfile, FILE *, (void) _GL_ATTRIBUTE_DEALLOC (fclose, 1) _GL_ATTRIBUTE_MALLOC); # endif # if defined GNULIB_POSIXCHECK # undef tmpfile # if HAVE_RAW_DECL_TMPFILE _GL_WARN_ON_USE (tmpfile, "tmpfile is not usable on mingw - " "use gnulib module tmpfile for portability"); # endif # endif #endif #if @GNULIB_VASPRINTF@ /* Write formatted output to a string dynamically allocated with malloc(). If the memory allocation succeeds, store the address of the string in *RESULT and return the number of resulting bytes, excluding the trailing NUL. Upon memory allocation error, or some other error, return -1. */ # if @REPLACE_VASPRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define asprintf rpl_asprintf # endif # define GNULIB_overrides_asprintf _GL_FUNCDECL_RPL (asprintf, int, (char **result, const char *format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 3) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (asprintf, int, (char **result, const char *format, ...)); # else # if !@HAVE_VASPRINTF@ _GL_FUNCDECL_SYS (asprintf, int, (char **result, const char *format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 3) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (asprintf, int, (char **result, const char *format, ...)); # endif _GL_CXXALIASWARN (asprintf); # if @REPLACE_VASPRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define vasprintf rpl_vasprintf # endif # define GNULIB_overrides_vasprintf 1 _GL_FUNCDECL_RPL (vasprintf, int, (char **result, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 0) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (vasprintf, int, (char **result, const char *format, va_list args)); # else # if !@HAVE_VASPRINTF@ _GL_FUNCDECL_SYS (vasprintf, int, (char **result, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 0) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (vasprintf, int, (char **result, const char *format, va_list args)); # endif _GL_CXXALIASWARN (vasprintf); #endif #if @GNULIB_VDPRINTF@ # if @REPLACE_VDPRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define vdprintf rpl_vdprintf # endif _GL_FUNCDECL_RPL (vdprintf, int, (int fd, const char *restrict format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 0) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (vdprintf, int, (int fd, const char *restrict format, va_list args)); # else # if !@HAVE_VDPRINTF@ _GL_FUNCDECL_SYS (vdprintf, int, (int fd, const char *restrict format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 0) _GL_ARG_NONNULL ((2))); # endif /* Need to cast, because on Solaris, the third parameter will likely be __va_list args. */ _GL_CXXALIAS_SYS_CAST (vdprintf, int, (int fd, const char *restrict format, va_list args)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (vdprintf); # endif #elif defined GNULIB_POSIXCHECK # undef vdprintf # if HAVE_RAW_DECL_VDPRINTF _GL_WARN_ON_USE (vdprintf, "vdprintf is unportable - " "use gnulib module vdprintf for portability"); # endif #endif #if @GNULIB_VFPRINTF_POSIX@ || @GNULIB_VFPRINTF@ # if (@GNULIB_VFPRINTF_POSIX@ && @REPLACE_VFPRINTF@) \ || (@GNULIB_VFPRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@)) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define vfprintf rpl_vfprintf # endif # define GNULIB_overrides_vfprintf 1 # if @GNULIB_VFPRINTF_POSIX@ _GL_FUNCDECL_RPL (vfprintf, int, (FILE *restrict fp, const char *restrict format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 0) _GL_ARG_NONNULL ((1, 2))); # else _GL_FUNCDECL_RPL (vfprintf, int, (FILE *restrict fp, const char *restrict format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (2, 0) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_RPL (vfprintf, int, (FILE *restrict fp, const char *restrict format, va_list args)); # else /* Need to cast, because on Solaris, the third parameter is __va_list args and GCC's fixincludes did not change this to __gnuc_va_list. */ _GL_CXXALIAS_SYS_CAST (vfprintf, int, (FILE *restrict fp, const char *restrict format, va_list args)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (vfprintf); # endif #endif #if !@GNULIB_VFPRINTF_POSIX@ && defined GNULIB_POSIXCHECK # if !GNULIB_overrides_vfprintf # undef vfprintf # endif /* Assume vfprintf is always declared. */ _GL_WARN_ON_USE (vfprintf, "vfprintf is not always POSIX compliant - " "use gnulib module vfprintf-posix for portable " "POSIX compliance"); #endif #if @GNULIB_VFSCANF@ # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef vfscanf # define vfscanf rpl_vfscanf # endif _GL_FUNCDECL_RPL (vfscanf, int, (FILE *restrict stream, const char *restrict format, va_list args) _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (2, 0) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (vfscanf, int, (FILE *restrict stream, const char *restrict format, va_list args)); # else _GL_CXXALIAS_SYS (vfscanf, int, (FILE *restrict stream, const char *restrict format, va_list args)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (vfscanf); # endif #endif #if @GNULIB_VPRINTF_POSIX@ || @GNULIB_VPRINTF@ # if (@GNULIB_VPRINTF_POSIX@ && @REPLACE_VPRINTF@) \ || (@GNULIB_VPRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@)) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define vprintf rpl_vprintf # endif # define GNULIB_overrides_vprintf 1 # if @GNULIB_VPRINTF_POSIX@ || @GNULIB_VFPRINTF_POSIX@ _GL_FUNCDECL_RPL (vprintf, int, (const char *restrict format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (1, 0) _GL_ARG_NONNULL ((1))); # else _GL_FUNCDECL_RPL (vprintf, int, (const char *restrict format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (1, 0) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_RPL (vprintf, int, (const char *restrict format, va_list args)); # else /* Need to cast, because on Solaris, the second parameter is __va_list args and GCC's fixincludes did not change this to __gnuc_va_list. */ _GL_CXXALIAS_SYS_CAST (vprintf, int, (const char *restrict format, va_list args)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (vprintf); # endif #endif #if !@GNULIB_VPRINTF_POSIX@ && defined GNULIB_POSIXCHECK # if !GNULIB_overrides_vprintf # undef vprintf # endif /* Assume vprintf is always declared. */ _GL_WARN_ON_USE (vprintf, "vprintf is not always POSIX compliant - " "use gnulib module vprintf-posix for portable " "POSIX compliance"); #endif #if @GNULIB_VSCANF@ # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef vscanf # define vscanf rpl_vscanf # endif _GL_FUNCDECL_RPL (vscanf, int, (const char *restrict format, va_list args) _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (1, 0) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (vscanf, int, (const char *restrict format, va_list args)); # else _GL_CXXALIAS_SYS (vscanf, int, (const char *restrict format, va_list args)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (vscanf); # endif #endif #if @GNULIB_VSNPRINTF@ # if @REPLACE_VSNPRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define vsnprintf rpl_vsnprintf # endif # define GNULIB_overrides_vsnprintf 1 _GL_FUNCDECL_RPL (vsnprintf, int, (char *restrict str, size_t size, const char *restrict format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (3, 0) _GL_ARG_NONNULL ((3))); _GL_CXXALIAS_RPL (vsnprintf, int, (char *restrict str, size_t size, const char *restrict format, va_list args)); # else # if !@HAVE_DECL_VSNPRINTF@ _GL_FUNCDECL_SYS (vsnprintf, int, (char *restrict str, size_t size, const char *restrict format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (3, 0) _GL_ARG_NONNULL ((3))); # endif _GL_CXXALIAS_SYS (vsnprintf, int, (char *restrict str, size_t size, const char *restrict format, va_list args)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (vsnprintf); # endif #elif defined GNULIB_POSIXCHECK # undef vsnprintf # if HAVE_RAW_DECL_VSNPRINTF _GL_WARN_ON_USE (vsnprintf, "vsnprintf is unportable - " "use gnulib module vsnprintf for portability"); # endif #endif #if @GNULIB_VSPRINTF_POSIX@ # if @REPLACE_VSPRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define vsprintf rpl_vsprintf # endif # define GNULIB_overrides_vsprintf 1 _GL_FUNCDECL_RPL (vsprintf, int, (char *restrict str, const char *restrict format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 0) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (vsprintf, int, (char *restrict str, const char *restrict format, va_list args)); # else /* Need to cast, because on Solaris, the third parameter is __va_list args and GCC's fixincludes did not change this to __gnuc_va_list. */ _GL_CXXALIAS_SYS_CAST (vsprintf, int, (char *restrict str, const char *restrict format, va_list args)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (vsprintf); # endif #elif defined GNULIB_POSIXCHECK # undef vsprintf /* Assume vsprintf is always declared. */ _GL_WARN_ON_USE (vsprintf, "vsprintf is not always POSIX compliant - " "use gnulib module vsprintf-posix for portable " "POSIX compliance"); #endif #endif /* _@GUARD_PREFIX@_STDIO_H */ #endif /* _@GUARD_PREFIX@_STDIO_H */ #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/stdio-read.c���������������������������������������������������������������������������0000644�0001750�0001750�00000013614�14436425346�015336� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* POSIX compatible FILE stream read function. Copyright (C) 2008-2023 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <stdio.h> /* Replace these functions only if module 'nonblocking' is requested. */ #if GNULIB_NONBLOCKING /* On native Windows platforms, when read() is called on a non-blocking pipe with an empty buffer, ReadFile() fails with error GetLastError() = ERROR_NO_DATA, and read() in consequence fails with error EINVAL. This read() function is at the basis of the function which fills the buffer of a FILE stream. */ # if defined _WIN32 && ! defined __CYGWIN__ # include <errno.h> # include <io.h> # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> # if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" # else # include <io.h> # endif /* Don't assume that UNICODE is not defined. */ # undef GetNamedPipeHandleState # define GetNamedPipeHandleState GetNamedPipeHandleStateA # define CALL_WITH_ERRNO_FIX(RETTYPE, EXPRESSION, FAILED) \ if (ferror (stream)) \ return (EXPRESSION); \ else \ { \ RETTYPE ret; \ SetLastError (0); \ ret = (EXPRESSION); \ if (FAILED) \ { \ if (GetLastError () == ERROR_NO_DATA && ferror (stream)) \ { \ int fd = fileno (stream); \ if (fd >= 0) \ { \ HANDLE h = (HANDLE) _get_osfhandle (fd); \ if (GetFileType (h) == FILE_TYPE_PIPE) \ { \ /* h is a pipe or socket. */ \ DWORD state; \ if (GetNamedPipeHandleState (h, &state, NULL, NULL, \ NULL, NULL, 0) \ && (state & PIPE_NOWAIT) != 0) \ /* h is a pipe in non-blocking mode. \ Change errno from EINVAL to EAGAIN. */ \ errno = EAGAIN; \ } \ } \ } \ } \ return ret; \ } /* Enable this function definition only if gnulib's <stdio.h> has prepared it. Otherwise we get a function definition conflict with mingw64's <stdio.h>. */ # if GNULIB_SCANF int scanf (const char *format, ...) { int retval; va_list args; va_start (args, format); retval = vfscanf (stdin, format, args); va_end (args); return retval; } # endif /* Enable this function definition only if gnulib's <stdio.h> has prepared it. Otherwise we get a function definition conflict with mingw64's <stdio.h>. */ # if GNULIB_FSCANF int fscanf (FILE *stream, const char *format, ...) { int retval; va_list args; va_start (args, format); retval = vfscanf (stream, format, args); va_end (args); return retval; } # endif /* Enable this function definition only if gnulib's <stdio.h> has prepared it. Otherwise we get a function definition conflict with mingw64's <stdio.h>. */ # if GNULIB_VSCANF int vscanf (const char *format, va_list args) { return vfscanf (stdin, format, args); } # endif /* Enable this function definition only if gnulib's <stdio.h> has prepared it. Otherwise we get a function definition conflict with mingw64's <stdio.h>. */ # if GNULIB_VFSCANF int vfscanf (FILE *stream, const char *format, va_list args) #undef vfscanf { CALL_WITH_ERRNO_FIX (int, vfscanf (stream, format, args), ret == EOF) } # endif int getchar (void) { return fgetc (stdin); } int fgetc (FILE *stream) #undef fgetc { CALL_WITH_ERRNO_FIX (int, fgetc (stream), ret == EOF) } char * fgets (char *s, int n, FILE *stream) #undef fgets { CALL_WITH_ERRNO_FIX (char *, fgets (s, n, stream), ret == NULL) } /* We intentionally don't bother to fix gets. */ size_t fread (void *ptr, size_t s, size_t n, FILE *stream) #undef fread { CALL_WITH_ERRNO_FIX (size_t, fread (ptr, s, n, stream), ret < n) } # endif #endif ��������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/regex.c��������������������������������������������������������������������������������0000644�0001750�0001750�00000006226�14436425346�014416� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Extended regular expression matching and search library. Copyright (C) 2002-2023 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Isamu Hasegawa <isamu@yamato.ibm.com>. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ #define __STDC_WANT_IEC_60559_BFP_EXT__ #ifndef _LIBC # include <libc-config.h> # if __GNUC_PREREQ (4, 6) # pragma GCC diagnostic ignored "-Wsuggest-attribute=pure" # pragma GCC diagnostic ignored "-Wvla" # endif # if __GNUC_PREREQ (4, 3) # pragma GCC diagnostic ignored "-Wold-style-definition" # pragma GCC diagnostic ignored "-Wtype-limits" # endif #endif /* Make sure no one compiles this code with a C++ compiler. */ #if defined __cplusplus && defined _LIBC # error "This is C code, use a C compiler" #endif #ifdef _LIBC /* We have to keep the namespace clean. */ # define regfree(preg) __regfree (preg) # define regexec(pr, st, nm, pm, ef) __regexec (pr, st, nm, pm, ef) # define regcomp(preg, pattern, cflags) __regcomp (preg, pattern, cflags) # define regerror(errcode, preg, errbuf, errbuf_size) \ __regerror(errcode, preg, errbuf, errbuf_size) # define re_set_registers(bu, re, nu, st, en) \ __re_set_registers (bu, re, nu, st, en) # define re_match_2(bufp, string1, size1, string2, size2, pos, regs, stop) \ __re_match_2 (bufp, string1, size1, string2, size2, pos, regs, stop) # define re_match(bufp, string, size, pos, regs) \ __re_match (bufp, string, size, pos, regs) # define re_search(bufp, string, size, startpos, range, regs) \ __re_search (bufp, string, size, startpos, range, regs) # define re_compile_pattern(pattern, length, bufp) \ __re_compile_pattern (pattern, length, bufp) # define re_set_syntax(syntax) __re_set_syntax (syntax) # define re_search_2(bufp, st1, s1, st2, s2, startpos, range, regs, stop) \ __re_search_2 (bufp, st1, s1, st2, s2, startpos, range, regs, stop) # define re_compile_fastmap(bufp) __re_compile_fastmap (bufp) # include "../locale/localeinfo.h" #endif /* On some systems, limits.h sets RE_DUP_MAX to a lower value than GNU regex allows. Include it before <regex.h>, which correctly #undefs RE_DUP_MAX and sets it to the right value. */ #include <limits.h> #include <regex.h> #include "regex_internal.h" #include "regex_internal.c" #include "regcomp.c" #include "regexec.c" /* Binary backward compatibility. */ #if _LIBC # include <shlib-compat.h> # if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3) link_warning (re_max_failures, "the 're_max_failures' variable is obsolete and will go away.") int re_max_failures = 2000; # endif #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/time_rz.c������������������������������������������������������������������������������0000644�0001750�0001750�00000020625�14436425346�014754� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Time zone functions such as tzalloc and localtime_rz Copyright 2015-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paul Eggert. */ /* Although this module is not thread-safe, any races should be fairly rare and reasonably benign. For complete thread-safety, use a C library with a working timezone_t type, so that this module is not needed. */ #include <config.h> #include <time.h> #include <errno.h> #include <stddef.h> #include <stdlib.h> #include <string.h> #include "flexmember.h" #include "idx.h" #include "time-internal.h" /* The approximate size to use for small allocation requests. This is the largest "small" request for the GNU C library malloc. */ enum { DEFAULT_MXFAST = 64 * sizeof (size_t) / 4 }; /* Minimum size of the ABBRS member of struct tm_zone. ABBRS is larger only in the unlikely case where an abbreviation longer than this is used. */ enum { ABBR_SIZE_MIN = DEFAULT_MXFAST - offsetof (struct tm_zone, abbrs) }; /* Magic cookie timezone_t value, for local time. It differs from NULL and from all other timezone_t values. Only the address matters; the pointer is never dereferenced. */ static timezone_t const local_tz = (timezone_t) 1; /* Copy to ABBRS the abbreviation at ABBR with size ABBR_SIZE (this includes its trailing null byte). Append an extra null byte to mark the end of ABBRS. */ static void extend_abbrs (char *abbrs, char const *abbr, size_t abbr_size) { memcpy (abbrs, abbr, abbr_size); abbrs[abbr_size] = '\0'; } /* Return a newly allocated time zone for NAME, or NULL on failure. A null NAME stands for wall clock time (which is like unset TZ). */ timezone_t tzalloc (char const *name) { size_t name_size = name ? strlen (name) + 1 : 0; size_t abbr_size = name_size < ABBR_SIZE_MIN ? ABBR_SIZE_MIN : name_size + 1; timezone_t tz = malloc (FLEXSIZEOF (struct tm_zone, abbrs, abbr_size)); if (tz) { tz->next = NULL; #if HAVE_TZNAME && !HAVE_STRUCT_TM_TM_ZONE tz->tzname_copy[0] = tz->tzname_copy[1] = NULL; #endif tz->tz_is_set = !!name; tz->abbrs[0] = '\0'; if (name) extend_abbrs (tz->abbrs, name, name_size); } return tz; } /* Save into TZ any nontrivial time zone abbreviation used by TM, and update *TM (if HAVE_STRUCT_TM_TM_ZONE) or *TZ (if !HAVE_STRUCT_TM_TM_ZONE && HAVE_TZNAME) if they use the abbreviation. Return true if successful, false (setting errno) otherwise. */ static bool save_abbr (timezone_t tz, struct tm *tm) { #if HAVE_STRUCT_TM_TM_ZONE || HAVE_TZNAME char const *zone = NULL; char *zone_copy = (char *) ""; # if HAVE_TZNAME int tzname_index = -1; # endif # if HAVE_STRUCT_TM_TM_ZONE zone = tm->tm_zone; # endif # if HAVE_TZNAME if (! (zone && *zone) && 0 <= tm->tm_isdst) { tzname_index = tm->tm_isdst != 0; zone = tzname[tzname_index]; } # endif /* No need to replace null zones, or zones within the struct tm. */ if (!zone || ((char *) tm <= zone && zone < (char *) (tm + 1))) return true; if (*zone) { zone_copy = tz->abbrs; while (strcmp (zone_copy, zone) != 0) { if (! (*zone_copy || (zone_copy == tz->abbrs && tz->tz_is_set))) { idx_t zone_size = strlen (zone) + 1; if (zone_size < tz->abbrs + ABBR_SIZE_MIN - zone_copy) extend_abbrs (zone_copy, zone, zone_size); else { tz = tz->next = tzalloc (zone); if (!tz) return false; tz->tz_is_set = 0; zone_copy = tz->abbrs; } break; } zone_copy += strlen (zone_copy) + 1; if (!*zone_copy && tz->next) { tz = tz->next; zone_copy = tz->abbrs; } } } /* Replace the zone name so that its lifetime matches that of TZ. */ # if HAVE_STRUCT_TM_TM_ZONE tm->tm_zone = zone_copy; # else if (0 <= tzname_index) tz->tzname_copy[tzname_index] = zone_copy; # endif #endif return true; } /* Free a time zone. */ void tzfree (timezone_t tz) { if (tz != local_tz) while (tz) { timezone_t next = tz->next; free (tz); tz = next; } } /* Get and set the TZ environment variable. These functions can be overridden by programs like Emacs that manage their own environment. */ #ifndef getenv_TZ static char * getenv_TZ (void) { return getenv ("TZ"); } #endif #ifndef setenv_TZ static int setenv_TZ (char const *tz) { return tz ? setenv ("TZ", tz, 1) : unsetenv ("TZ"); } #endif /* Change the environment to match the specified timezone_t value. Return true if successful, false (setting errno) otherwise. */ static bool change_env (timezone_t tz) { if (setenv_TZ (tz->tz_is_set ? tz->abbrs : NULL) != 0) return false; tzset (); return true; } /* Temporarily set the time zone to TZ, which must not be null. Return LOCAL_TZ if the time zone setting is already correct. Otherwise return a newly allocated time zone representing the old setting, or NULL (setting errno) on failure. */ static timezone_t set_tz (timezone_t tz) { char *env_tz = getenv_TZ (); if (env_tz ? tz->tz_is_set && strcmp (tz->abbrs, env_tz) == 0 : !tz->tz_is_set) return local_tz; else { timezone_t old_tz = tzalloc (env_tz); if (!old_tz) return old_tz; if (! change_env (tz)) { int saved_errno = errno; tzfree (old_tz); errno = saved_errno; return NULL; } return old_tz; } } /* Restore an old setting returned by set_tz. It must not be null. Return true (preserving errno) if successful, false (setting errno) otherwise. */ static bool revert_tz (timezone_t tz) { if (tz == local_tz) return true; else { int saved_errno = errno; bool ok = change_env (tz); if (!ok) saved_errno = errno; tzfree (tz); errno = saved_errno; return ok; } } /* Use time zone TZ to compute localtime_r (T, TM). */ struct tm * localtime_rz (timezone_t tz, time_t const *t, struct tm *tm) { #ifdef HAVE_LOCALTIME_INFLOOP_BUG /* The -67768038400665599 comes from: https://lists.gnu.org/r/bug-gnulib/2017-07/msg00142.html On affected platforms the greatest POSIX-compatible time_t value that could return nonnull is 67768036191766798 (when TZ="XXX24:59:59" it resolves to the year 2**31 - 1 + 1900, on 12-31 at 23:59:59), so test for that too while we're in the neighborhood. */ if (! (-67768038400665599 <= *t && *t <= 67768036191766798)) { errno = EOVERFLOW; return NULL; } #endif if (!tz) return gmtime_r (t, tm); else { timezone_t old_tz = set_tz (tz); if (old_tz) { bool abbr_saved = localtime_r (t, tm) && save_abbr (tz, tm); if (revert_tz (old_tz) && abbr_saved) return tm; } return NULL; } } /* Use time zone TZ to compute mktime (TM). */ time_t mktime_z (timezone_t tz, struct tm *tm) { if (!tz) return timegm (tm); else { timezone_t old_tz = set_tz (tz); if (old_tz) { struct tm tm_1; tm_1.tm_sec = tm->tm_sec; tm_1.tm_min = tm->tm_min; tm_1.tm_hour = tm->tm_hour; tm_1.tm_mday = tm->tm_mday; tm_1.tm_mon = tm->tm_mon; tm_1.tm_year = tm->tm_year; tm_1.tm_yday = -1; tm_1.tm_isdst = tm->tm_isdst; time_t t = mktime (&tm_1); bool ok = 0 <= tm_1.tm_yday; #if HAVE_STRUCT_TM_TM_ZONE || HAVE_TZNAME ok = ok && save_abbr (tz, &tm_1); #endif if (revert_tz (old_tz) && ok) { *tm = tm_1; return t; } } return -1; } } �����������������������������������������������������������������������������������������������������������rush-2.4/gnu/dirname-lgpl.c�������������������������������������������������������������������������0000644�0001750�0001750�00000006142�14436425345�015653� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* dirname.c -- return all but the last element in a file name Copyright (C) 1990, 1998, 2000-2001, 2003-2006, 2009-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include "dirname.h" #include <stdlib.h> #include <string.h> /* Return the length of the prefix of FILE that will be used by dir_name. If FILE is in the working directory, this returns zero even though 'dir_name (FILE)' will return ".". Works properly even if there are trailing slashes (by effectively ignoring them). */ size_t dir_len (char const *file) { size_t prefix_length = FILE_SYSTEM_PREFIX_LEN (file); size_t length; /* Advance prefix_length beyond important leading slashes. */ prefix_length += (prefix_length != 0 ? (FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE && ISSLASH (file[prefix_length])) : (ISSLASH (file[0]) ? ((DOUBLE_SLASH_IS_DISTINCT_ROOT && ISSLASH (file[1]) && ! ISSLASH (file[2]) ? 2 : 1)) : 0)); /* Strip the basename and any redundant slashes before it. */ for (length = last_component (file) - file; prefix_length < length; length--) if (! ISSLASH (file[length - 1])) break; return length; } /* In general, we can't use the builtin 'dirname' function if available, since it has different meanings in different environments. In some environments the builtin 'dirname' modifies its argument. Return the leading directories part of FILE, allocated with malloc. Works properly even if there are trailing slashes (by effectively ignoring them). Return NULL on failure. If lstat (FILE) would succeed, then { chdir (dir_name (FILE)); lstat (base_name (FILE)); } will access the same file. Likewise, if the sequence { chdir (dir_name (FILE)); rename (base_name (FILE), "foo"); } succeeds, you have renamed FILE to "foo" in the same directory FILE was in. */ char * mdir_name (char const *file) { size_t length = dir_len (file); bool append_dot = (length == 0 || (FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE && length == FILE_SYSTEM_PREFIX_LEN (file) && file[2] != '\0' && ! ISSLASH (file[2]))); char *dir = malloc (length + append_dot + 1); if (!dir) return NULL; memcpy (dir, file, length); if (append_dot) dir[length++] = '.'; dir[length] = '\0'; return dir; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/error.c��������������������������������������������������������������������������������0000644�0001750�0001750�00000024746�14436425345�014443� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Error handler for noninteractive utilities Copyright (C) 1990-1998, 2000-2007, 2009-2023 Free Software Foundation, Inc. This file is part of the GNU C Library. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by David MacKenzie <djm@gnu.ai.mit.edu>. */ #if !_LIBC # include <config.h> # define _GL_NO_INLINE_ERROR #endif #include "error.h" #include <stdarg.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #if !_LIBC && ENABLE_NLS # include "gettext.h" # define _(msgid) gettext (msgid) #endif #ifdef _LIBC # include <libintl.h> # include <stdbool.h> # include <stdint.h> # include <wchar.h> # define mbsrtowcs __mbsrtowcs # define USE_UNLOCKED_IO 0 # define _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD(a, b) # define _GL_ARG_NONNULL(a) #endif #if USE_UNLOCKED_IO # include "unlocked-io.h" #endif #ifndef _ # define _(String) String #endif /* If NULL, error will flush stdout, then print on stderr the program name, a colon and a space. Otherwise, error will call this function without parameters instead. */ void (*error_print_progname) (void); /* This variable is incremented each time 'error' is called. */ unsigned int error_message_count; #ifdef _LIBC /* In the GNU C library, there is a predefined variable for this. */ # define program_name program_invocation_name # include <errno.h> # include <limits.h> # include <libio/libioP.h> /* In GNU libc we want do not want to use the common name 'error' directly. Instead make it a weak alias. */ extern void __error (int status, int errnum, const char *message, ...) __attribute__ ((__format__ (__printf__, 3, 4))); extern void __error_at_line (int status, int errnum, const char *file_name, unsigned int line_number, const char *message, ...) __attribute__ ((__format__ (__printf__, 5, 6))); # define error __error # define error_at_line __error_at_line # include <libio/iolibio.h> # define fflush(s) _IO_fflush (s) # undef putc # define putc(c, fp) _IO_putc (c, fp) # include <bits/libc-lock.h> #else /* not _LIBC */ # include <fcntl.h> # include <unistd.h> # if defined _WIN32 && ! defined __CYGWIN__ /* Get declarations of the native Windows API functions. */ # define WIN32_LEAN_AND_MEAN # include <windows.h> /* Get _get_osfhandle. */ # if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" # else # include <io.h> # endif # endif /* The gnulib override of fcntl is not needed in this file. */ # undef fcntl # if !(GNULIB_STRERROR_R_POSIX || HAVE_DECL_STRERROR_R) # ifndef HAVE_DECL_STRERROR_R "this configure-time declaration test was not run" # endif # if STRERROR_R_CHAR_P char *strerror_r (int errnum, char *buf, size_t buflen); # else int strerror_r (int errnum, char *buf, size_t buflen); # endif # endif # define program_name getprogname () # if GNULIB_STRERROR_R_POSIX || HAVE_STRERROR_R || defined strerror_r # define __strerror_r strerror_r # endif /* GNULIB_STRERROR_R_POSIX || HAVE_STRERROR_R || defined strerror_r */ #endif /* not _LIBC */ #if !_LIBC /* Return non-zero if FD is open. */ static int is_open (int fd) { # if defined _WIN32 && ! defined __CYGWIN__ /* On native Windows: The initial state of unassigned standard file descriptors is that they are open but point to an INVALID_HANDLE_VALUE. There is no fcntl, and the gnulib replacement fcntl does not support F_GETFL. */ return (HANDLE) _get_osfhandle (fd) != INVALID_HANDLE_VALUE; # else # ifndef F_GETFL # error Please port fcntl to your platform # endif return 0 <= fcntl (fd, F_GETFL); # endif } #endif static void flush_stdout (void) { #if !_LIBC int stdout_fd; # if GNULIB_FREOPEN_SAFER /* Use of gnulib's freopen-safer module normally ensures that fileno (stdout) == 1 whenever stdout is open. */ stdout_fd = STDOUT_FILENO; # else /* POSIX states that fileno (stdout) after fclose is unspecified. But in practice it is not a problem, because stdout is statically allocated and the fd of a FILE stream is stored as a field in its allocated memory. */ stdout_fd = fileno (stdout); # endif /* POSIX states that fflush (stdout) after fclose is unspecified; it is safe in glibc, but not on all other platforms. fflush (NULL) is always defined, but too draconian. */ if (0 <= stdout_fd && is_open (stdout_fd)) #endif fflush (stdout); } static void print_errno_message (int errnum) { char const *s; #if _LIBC || GNULIB_STRERROR_R_POSIX || defined HAVE_STRERROR_R char errbuf[1024]; # if _LIBC || (!GNULIB_STRERROR_R_POSIX && STRERROR_R_CHAR_P) s = __strerror_r (errnum, errbuf, sizeof errbuf); # else if (__strerror_r (errnum, errbuf, sizeof errbuf) == 0) s = errbuf; else s = 0; # endif #else s = strerror (errnum); #endif #if !_LIBC if (! s) s = _("Unknown system error"); #endif #if _LIBC __fxprintf (NULL, ": %s", s); #else fprintf (stderr, ": %s", s); #endif } static void _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (3, 0) _GL_ARG_NONNULL ((3)) error_tail (int status, int errnum, const char *message, va_list args) { #if _LIBC if (_IO_fwide (stderr, 0) > 0) { size_t len = strlen (message) + 1; wchar_t *wmessage = NULL; mbstate_t st; size_t res; const char *tmp; bool use_malloc = false; while (1) { if (__libc_use_alloca (len * sizeof (wchar_t))) wmessage = (wchar_t *) alloca (len * sizeof (wchar_t)); else { if (!use_malloc) wmessage = NULL; wchar_t *p = (wchar_t *) realloc (wmessage, len * sizeof (wchar_t)); if (p == NULL) { free (wmessage); fputws_unlocked (L"out of memory\n", stderr); return; } wmessage = p; use_malloc = true; } memset (&st, '\0', sizeof (st)); tmp = message; res = mbsrtowcs (wmessage, &tmp, len, &st); if (res != len) break; if (__builtin_expect (len >= SIZE_MAX / sizeof (wchar_t) / 2, 0)) { /* This really should not happen if everything is fine. */ res = (size_t) -1; break; } len *= 2; } if (res == (size_t) -1) { /* The string cannot be converted. */ if (use_malloc) { free (wmessage); use_malloc = false; } wmessage = (wchar_t *) L"???"; } __vfwprintf (stderr, wmessage, args); if (use_malloc) free (wmessage); } else #endif vfprintf (stderr, message, args); ++error_message_count; if (errnum) print_errno_message (errnum); #if _LIBC __fxprintf (NULL, "\n"); #else putc ('\n', stderr); #endif fflush (stderr); if (status) exit (status); } /* Print the program name and error message MESSAGE, which is a printf-style format string with optional args. If ERRNUM is nonzero, print its corresponding system error message. Exit with status STATUS if it is nonzero. */ void error (int status, int errnum, const char *message, ...) { va_list args; #if defined _LIBC && defined __libc_ptf_call /* We do not want this call to be cut short by a thread cancellation. Therefore disable cancellation for now. */ int state = PTHREAD_CANCEL_ENABLE; __libc_ptf_call (pthread_setcancelstate, (PTHREAD_CANCEL_DISABLE, &state), 0); #endif flush_stdout (); #ifdef _LIBC _IO_flockfile (stderr); #endif if (error_print_progname) (*error_print_progname) (); else { #if _LIBC __fxprintf (NULL, "%s: ", program_name); #else fprintf (stderr, "%s: ", program_name); #endif } va_start (args, message); error_tail (status, errnum, message, args); va_end (args); #ifdef _LIBC _IO_funlockfile (stderr); # ifdef __libc_ptf_call __libc_ptf_call (pthread_setcancelstate, (state, NULL), 0); # endif #endif } /* Sometimes we want to have at most one error per line. This variable controls whether this mode is selected or not. */ int error_one_per_line; void error_at_line (int status, int errnum, const char *file_name, unsigned int line_number, const char *message, ...) { va_list args; if (error_one_per_line) { static const char *old_file_name; static unsigned int old_line_number; if (old_line_number == line_number && (file_name == old_file_name || (old_file_name != NULL && file_name != NULL && strcmp (old_file_name, file_name) == 0))) /* Simply return and print nothing. */ return; old_file_name = file_name; old_line_number = line_number; } #if defined _LIBC && defined __libc_ptf_call /* We do not want this call to be cut short by a thread cancellation. Therefore disable cancellation for now. */ int state = PTHREAD_CANCEL_ENABLE; __libc_ptf_call (pthread_setcancelstate, (PTHREAD_CANCEL_DISABLE, &state), 0); #endif flush_stdout (); #ifdef _LIBC _IO_flockfile (stderr); #endif if (error_print_progname) (*error_print_progname) (); else { #if _LIBC __fxprintf (NULL, "%s:", program_name); #else fprintf (stderr, "%s:", program_name); #endif } #if _LIBC __fxprintf (NULL, file_name != NULL ? "%s:%u: " : " ", file_name, line_number); #else fprintf (stderr, file_name != NULL ? "%s:%u: " : " ", file_name, line_number); #endif va_start (args, message); error_tail (status, errnum, message, args); va_end (args); #ifdef _LIBC _IO_funlockfile (stderr); # ifdef __libc_ptf_call __libc_ptf_call (pthread_setcancelstate, (state, NULL), 0); # endif #endif } #ifdef _LIBC /* Make the weak alias. */ # undef error # undef error_at_line weak_alias (__error, error) weak_alias (__error_at_line, error_at_line) #endif ��������������������������rush-2.4/gnu/pathmax.h������������������������������������������������������������������������������0000644�0001750�0001750�00000006017�14436425346�014751� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Define PATH_MAX somehow. Requires sys/types.h. Copyright (C) 1992, 1999, 2001, 2003, 2005, 2009-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _PATHMAX_H # define _PATHMAX_H /* POSIX:2008 defines PATH_MAX to be the maximum number of bytes in a filename, including the terminating NUL byte. <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/limits.h.html> PATH_MAX is not defined on systems which have no limit on filename length, such as GNU/Hurd. This file does *not* define PATH_MAX always. Programs that use this file can handle the GNU/Hurd case in several ways: - Either with a package-wide handling, or with a per-file handling, - Either through a #ifdef PATH_MAX or through a fallback like #ifndef PATH_MAX # define PATH_MAX 8192 #endif or through a fallback like #ifndef PATH_MAX # define PATH_MAX pathconf ("/", _PC_PATH_MAX) #endif */ /* This file uses HAVE_SYS_PARAM_H. */ # if !_GL_CONFIG_H_INCLUDED # error "Please include config.h first." # endif # include <unistd.h> # include <limits.h> # ifndef _POSIX_PATH_MAX # define _POSIX_PATH_MAX 256 # endif /* Don't include sys/param.h if it already has been. */ # if defined HAVE_SYS_PARAM_H && !defined PATH_MAX && !defined MAXPATHLEN # include <sys/param.h> # endif # if !defined PATH_MAX && defined MAXPATHLEN # define PATH_MAX MAXPATHLEN # endif # ifdef __hpux /* On HP-UX, PATH_MAX designates the maximum number of bytes in a filename, *not* including the terminating NUL byte, and is set to 1023. Additionally, when _XOPEN_SOURCE is defined to 500 or more, PATH_MAX is not defined at all any more. */ # undef PATH_MAX # define PATH_MAX 1024 # endif # if defined _WIN32 && ! defined __CYGWIN__ /* The page "Naming Files, Paths, and Namespaces" on msdn.microsoft.com, section "Maximum Path Length Limitation", <https://docs.microsoft.com/en-us/windows/desktop/FileIO/naming-a-file#maximum-path-length-limitation> explains that the maximum size of a filename, including the terminating NUL byte, is 260 = 3 + 256 + 1. This is the same value as - FILENAME_MAX in <stdio.h>, - _MAX_PATH in <stdlib.h>, - MAX_PATH in <windef.h>. Undefine the original value, because mingw's <limits.h> gets it wrong. */ # undef PATH_MAX # define PATH_MAX 260 # endif #endif /* _PATHMAX_H */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/calloc.c�������������������������������������������������������������������������������0000644�0001750�0001750�00000002672�14436425345�014541� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* calloc() function that is glibc compatible. This wrapper function is required at least on Tru64 UNIX 5.1 and mingw. Copyright (C) 2004-2007, 2009-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* written by Jim Meyering and Bruno Haible */ #include <config.h> /* Specification. */ #include <stdlib.h> #include <errno.h> #include "xalloc-oversized.h" /* Call the system's calloc below. */ #undef calloc /* Allocate and zero-fill an NxS-byte block of memory from the heap, even if N or S is zero. */ void * rpl_calloc (size_t n, size_t s) { if (n == 0 || s == 0) n = s = 1; if (xalloc_oversized (n, s)) { errno = ENOMEM; return NULL; } void *result = calloc (n, s); #if !HAVE_MALLOC_POSIX if (result == NULL) errno = ENOMEM; #endif return result; } ����������������������������������������������������������������������rush-2.4/gnu/streq.h��������������������������������������������������������������������������������0000644�0001750�0001750�00000007703�14436425346�014450� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Optimized string comparison. Copyright (C) 2001-2002, 2007, 2009-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>. */ #ifndef _GL_STREQ_H #define _GL_STREQ_H #include <string.h> /* STREQ_OPT allows to optimize string comparison with a small literal string. STREQ_OPT (s, "EUC-KR", 'E', 'U', 'C', '-', 'K', 'R', 0, 0, 0) is semantically equivalent to strcmp (s, "EUC-KR") == 0 just faster. */ /* Help GCC to generate good code for string comparisons with immediate strings. */ #if (defined __GNUC__ || defined __clang__) && defined __OPTIMIZE__ static inline int streq9 (const char *s1, const char *s2) { return strcmp (s1 + 9, s2 + 9) == 0; } static inline int streq8 (const char *s1, const char *s2, char s28) { if (s1[8] == s28) { if (s28 == 0) return 1; else return streq9 (s1, s2); } else return 0; } static inline int streq7 (const char *s1, const char *s2, char s27, char s28) { if (s1[7] == s27) { if (s27 == 0) return 1; else return streq8 (s1, s2, s28); } else return 0; } static inline int streq6 (const char *s1, const char *s2, char s26, char s27, char s28) { if (s1[6] == s26) { if (s26 == 0) return 1; else return streq7 (s1, s2, s27, s28); } else return 0; } static inline int streq5 (const char *s1, const char *s2, char s25, char s26, char s27, char s28) { if (s1[5] == s25) { if (s25 == 0) return 1; else return streq6 (s1, s2, s26, s27, s28); } else return 0; } static inline int streq4 (const char *s1, const char *s2, char s24, char s25, char s26, char s27, char s28) { if (s1[4] == s24) { if (s24 == 0) return 1; else return streq5 (s1, s2, s25, s26, s27, s28); } else return 0; } static inline int streq3 (const char *s1, const char *s2, char s23, char s24, char s25, char s26, char s27, char s28) { if (s1[3] == s23) { if (s23 == 0) return 1; else return streq4 (s1, s2, s24, s25, s26, s27, s28); } else return 0; } static inline int streq2 (const char *s1, const char *s2, char s22, char s23, char s24, char s25, char s26, char s27, char s28) { if (s1[2] == s22) { if (s22 == 0) return 1; else return streq3 (s1, s2, s23, s24, s25, s26, s27, s28); } else return 0; } static inline int streq1 (const char *s1, const char *s2, char s21, char s22, char s23, char s24, char s25, char s26, char s27, char s28) { if (s1[1] == s21) { if (s21 == 0) return 1; else return streq2 (s1, s2, s22, s23, s24, s25, s26, s27, s28); } else return 0; } static inline int streq0 (const char *s1, const char *s2, char s20, char s21, char s22, char s23, char s24, char s25, char s26, char s27, char s28) { if (s1[0] == s20) { if (s20 == 0) return 1; else return streq1 (s1, s2, s21, s22, s23, s24, s25, s26, s27, s28); } else return 0; } #define STREQ_OPT(s1,s2,s20,s21,s22,s23,s24,s25,s26,s27,s28) \ streq0 (s1, s2, s20, s21, s22, s23, s24, s25, s26, s27, s28) #else #define STREQ_OPT(s1,s2,s20,s21,s22,s23,s24,s25,s26,s27,s28) \ (strcmp (s1, s2) == 0) #endif #endif /* _GL_STREQ_H */ �������������������������������������������������������������rush-2.4/gnu/assert.in.h����������������������������������������������������������������������������0000644�0001750�0001750�00000002025�14436425345�015207� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Substitute for and wrapper around <assert.h> Copyright (C) 2011-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Do not guard the include, since <assert.h> is supposed to define the assert macro each time it is included. */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #@INCLUDE_NEXT@ @NEXT_ASSERT_H@ /* The definition of static_assert is copied here. */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/dirname.c������������������������������������������������������������������������������0000644�0001750�0001750�00000002264�14436425345�014720� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* dirname.c -- return all but the last element in a file name Copyright (C) 1990, 1998, 2000-2001, 2003-2006, 2009-2023 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 <https://www.gnu.org/licenses/>. */ #include <config.h> #include "dirname.h" #include <stdlib.h> #include <string.h> #include "xalloc.h" /* Just like mdir_name (dirname-lgpl.c), except, rather than returning NULL upon malloc failure, here, we report the "memory exhausted" condition and exit. */ char * dir_name (char const *file) { char *result = mdir_name (file); if (!result) xalloc_die (); return result; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/nl_langinfo-lock.c���������������������������������������������������������������������0000644�0001750�0001750�00000010445�14436425346�016516� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Return the internal lock used by nl_langinfo. Copyright (C) 2019-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2019-2020. */ #include <config.h> /* When it is known that the gl_get_nl_langinfo_lock function is defined by a dependency library, it should not be defined here. */ #if OMIT_NL_LANGINFO_LOCK /* This declaration is solely to ensure that after preprocessing this file is never empty. */ typedef int dummy; #else /* This file defines the internal lock used by nl_langinfo. It is a separate compilation unit, so that only one copy of it is present when linking statically. */ /* Prohibit renaming this symbol. */ # undef gl_get_nl_langinfo_lock /* Macro for exporting a symbol (function, not variable) defined in this file, when compiled into a shared library. */ # ifndef DLL_EXPORTED # if HAVE_VISIBILITY /* Override the effect of the compiler option '-fvisibility=hidden'. */ # define DLL_EXPORTED __attribute__((__visibility__("default"))) # elif defined _WIN32 || defined __CYGWIN__ # define DLL_EXPORTED __declspec(dllexport) # else # define DLL_EXPORTED # endif # endif # if defined _WIN32 && !defined __CYGWIN__ # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> # include "windows-initguard.h" /* The return type is a 'CRITICAL_SECTION *', not a 'glwthread_mutex_t *', because the latter is not guaranteed to be a stable ABI in the future. */ /* Make sure the function gets exported from DLLs. */ DLL_EXPORTED CRITICAL_SECTION *gl_get_nl_langinfo_lock (void); static glwthread_initguard_t guard = GLWTHREAD_INITGUARD_INIT; static CRITICAL_SECTION lock; /* Returns the internal lock used by nl_langinfo. */ CRITICAL_SECTION * gl_get_nl_langinfo_lock (void) { if (!guard.done) { if (InterlockedIncrement (&guard.started) == 0) { /* This thread is the first one to need the lock. Initialize it. */ InitializeCriticalSection (&lock); guard.done = 1; } else { /* Don't let guard.started grow and wrap around. */ InterlockedDecrement (&guard.started); /* Yield the CPU while waiting for another thread to finish initializing this mutex. */ while (!guard.done) Sleep (0); } } return &lock; } # elif HAVE_PTHREAD_API # include <pthread.h> static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; /* Make sure the function gets exported from shared libraries. */ DLL_EXPORTED pthread_mutex_t *gl_get_nl_langinfo_lock (void); /* Returns the internal lock used by nl_langinfo. */ pthread_mutex_t * gl_get_nl_langinfo_lock (void) { return &mutex; } # elif HAVE_THREADS_H # include <threads.h> # include <stdlib.h> static int volatile init_needed = 1; static once_flag init_once = ONCE_FLAG_INIT; static mtx_t mutex; static void atomic_init (void) { if (mtx_init (&mutex, mtx_plain) != thrd_success) abort (); init_needed = 0; } /* Make sure the function gets exported from shared libraries. */ DLL_EXPORTED mtx_t *gl_get_nl_langinfo_lock (void); /* Returns the internal lock used by nl_langinfo. */ mtx_t * gl_get_nl_langinfo_lock (void) { if (init_needed) call_once (&init_once, atomic_init); return &mutex; } # endif # if (defined _WIN32 || defined __CYGWIN__) && !defined _MSC_VER /* Make sure the '__declspec(dllimport)' in nl_langinfo.c does not cause a link failure when no DLLs are involved. */ # if defined _WIN64 || defined _LP64 # define IMP(x) __imp_##x # else # define IMP(x) _imp__##x # endif void * IMP(gl_get_nl_langinfo_lock) = &gl_get_nl_langinfo_lock; # endif #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/xalloc.h�������������������������������������������������������������������������������0000644�0001750�0001750�00000015471�14436425347�014576� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* xalloc.h -- malloc with out-of-memory checking Copyright (C) 1990-2000, 2003-2004, 2006-2023 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 <https://www.gnu.org/licenses/>. */ #ifndef XALLOC_H_ #define XALLOC_H_ /* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, _Noreturn, _GL_ATTRIBUTE_ALLOC_SIZE, _GL_ATTRIBUTE_MALLOC, _GL_ATTRIBUTE_RETURNS_NONNULL. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif #include <stddef.h> #include <stdlib.h> #if GNULIB_XALLOC # include "idx.h" #endif _GL_INLINE_HEADER_BEGIN #ifndef XALLOC_INLINE # define XALLOC_INLINE _GL_INLINE #endif #ifdef __cplusplus extern "C" { #endif #if GNULIB_XALLOC_DIE /* This function is always triggered when memory is exhausted. It must be defined by the application, either explicitly or by using gnulib's xalloc-die module. This is the function to call when one wants the program to die because of a memory allocation failure. */ /*extern*/ _Noreturn void xalloc_die (void); #endif /* GNULIB_XALLOC_DIE */ #if GNULIB_XALLOC void *xmalloc (size_t s) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_ALLOC_SIZE ((1)) _GL_ATTRIBUTE_RETURNS_NONNULL; void *ximalloc (idx_t s) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_ALLOC_SIZE ((1)) _GL_ATTRIBUTE_RETURNS_NONNULL; void *xinmalloc (idx_t n, idx_t s) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_ALLOC_SIZE ((1, 2)) _GL_ATTRIBUTE_RETURNS_NONNULL; void *xzalloc (size_t s) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_ALLOC_SIZE ((1)) _GL_ATTRIBUTE_RETURNS_NONNULL; void *xizalloc (idx_t s) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_ALLOC_SIZE ((1)) _GL_ATTRIBUTE_RETURNS_NONNULL; void *xcalloc (size_t n, size_t s) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_ALLOC_SIZE ((1, 2)) _GL_ATTRIBUTE_RETURNS_NONNULL; void *xicalloc (idx_t n, idx_t s) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_ALLOC_SIZE ((1, 2)) _GL_ATTRIBUTE_RETURNS_NONNULL; void *xrealloc (void *p, size_t s) _GL_ATTRIBUTE_ALLOC_SIZE ((2)); void *xirealloc (void *p, idx_t s) _GL_ATTRIBUTE_ALLOC_SIZE ((2)) _GL_ATTRIBUTE_RETURNS_NONNULL; void *xreallocarray (void *p, size_t n, size_t s) _GL_ATTRIBUTE_ALLOC_SIZE ((2, 3)); void *xireallocarray (void *p, idx_t n, idx_t s) _GL_ATTRIBUTE_ALLOC_SIZE ((2, 3)) _GL_ATTRIBUTE_RETURNS_NONNULL; void *x2realloc (void *p, size_t *ps) /* superseded by xpalloc */ _GL_ATTRIBUTE_RETURNS_NONNULL; void *x2nrealloc (void *p, size_t *pn, size_t s) /* superseded by xpalloc */ _GL_ATTRIBUTE_RETURNS_NONNULL; void *xpalloc (void *pa, idx_t *pn, idx_t n_incr_min, ptrdiff_t n_max, idx_t s) _GL_ATTRIBUTE_RETURNS_NONNULL; void *xmemdup (void const *p, size_t s) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_ALLOC_SIZE ((2)) _GL_ATTRIBUTE_RETURNS_NONNULL; void *ximemdup (void const *p, idx_t s) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_ALLOC_SIZE ((2)) _GL_ATTRIBUTE_RETURNS_NONNULL; char *ximemdup0 (void const *p, idx_t s) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_RETURNS_NONNULL; char *xstrdup (char const *str) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_RETURNS_NONNULL; /* In the following macros, T must be an elementary or structure/union or typedef'ed type, or a pointer to such a type. To apply one of the following macros to a function pointer or array type, you need to typedef it first and use the typedef name. */ /* Allocate an object of type T dynamically, with error checking. */ /* extern t *XMALLOC (typename t); */ # define XMALLOC(t) ((t *) xmalloc (sizeof (t))) /* Allocate memory for N elements of type T, with error checking. */ /* extern t *XNMALLOC (size_t n, typename t); */ # define XNMALLOC(n, t) \ ((t *) (sizeof (t) == 1 ? xmalloc (n) : xnmalloc (n, sizeof (t)))) /* Allocate an object of type T dynamically, with error checking, and zero it. */ /* extern t *XZALLOC (typename t); */ # define XZALLOC(t) ((t *) xzalloc (sizeof (t))) /* Allocate memory for N elements of type T, with error checking, and zero it. */ /* extern t *XCALLOC (size_t n, typename t); */ # define XCALLOC(n, t) \ ((t *) (sizeof (t) == 1 ? xzalloc (n) : xcalloc (n, sizeof (t)))) /* Allocate an array of N objects, each with S bytes of memory, dynamically, with error checking. S must be nonzero. */ void *xnmalloc (size_t n, size_t s) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_ALLOC_SIZE ((1, 2)) _GL_ATTRIBUTE_RETURNS_NONNULL; /* FIXME: Deprecate this in favor of xreallocarray? */ /* Change the size of an allocated block of memory P to an array of N objects each of S bytes, with error checking. S must be nonzero. */ XALLOC_INLINE void *xnrealloc (void *p, size_t n, size_t s) _GL_ATTRIBUTE_ALLOC_SIZE ((2, 3)); XALLOC_INLINE void * xnrealloc (void *p, size_t n, size_t s) { return xreallocarray (p, n, s); } /* Return a pointer to a new buffer of N bytes. This is like xmalloc, except it returns char *. */ char *xcharalloc (size_t n) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_ALLOC_SIZE ((1)) _GL_ATTRIBUTE_RETURNS_NONNULL; #endif /* GNULIB_XALLOC */ #ifdef __cplusplus } #endif #if GNULIB_XALLOC && defined __cplusplus /* C++ does not allow conversions from void * to other pointer types without a cast. Use templates to work around the problem when possible. */ template <typename T> inline T * xrealloc (T *p, size_t s) { return (T *) xrealloc ((void *) p, s); } template <typename T> inline T * xreallocarray (T *p, size_t n, size_t s) { return (T *) xreallocarray ((void *) p, n, s); } /* FIXME: Deprecate this in favor of xreallocarray? */ template <typename T> inline T * xnrealloc (T *p, size_t n, size_t s) { return xreallocarray (p, n, s); } template <typename T> inline T * x2realloc (T *p, size_t *pn) { return (T *) x2realloc ((void *) p, pn); } template <typename T> inline T * x2nrealloc (T *p, size_t *pn, size_t s) { return (T *) x2nrealloc ((void *) p, pn, s); } template <typename T> inline T * xmemdup (T const *p, size_t s) { return (T *) xmemdup ((void const *) p, s); } #endif /* GNULIB_XALLOC && C++ */ _GL_INLINE_HEADER_END #endif /* !XALLOC_H_ */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/stat-time.h����������������������������������������������������������������������������0000644�0001750�0001750�00000017310�14436425346�015214� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* stat-related time functions. Copyright (C) 2005, 2007, 2009-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paul Eggert. */ #ifndef STAT_TIME_H #define STAT_TIME_H 1 /* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, _GL_UNUSED, _GL_ATTRIBUTE_PURE, HAVE_STRUCT_STAT_*. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif #include <errno.h> #include <stdckdint.h> #include <stddef.h> #include <sys/stat.h> #include <time.h> _GL_INLINE_HEADER_BEGIN #ifndef _GL_STAT_TIME_INLINE # define _GL_STAT_TIME_INLINE _GL_INLINE #endif #ifdef __cplusplus extern "C" { #endif /* STAT_TIMESPEC (ST, ST_XTIM) is the ST_XTIM member for *ST of type struct timespec, if available. If not, then STAT_TIMESPEC_NS (ST, ST_XTIM) is the nanosecond component of the ST_XTIM member for *ST, if available. ST_XTIM can be st_atim, st_ctim, st_mtim, or st_birthtim for access, status change, data modification, or birth (creation) time respectively. These macros are private to stat-time.h. */ #if _GL_WINDOWS_STAT_TIMESPEC || defined HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC # if _GL_WINDOWS_STAT_TIMESPEC || defined TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC # define STAT_TIMESPEC(st, st_xtim) ((st)->st_xtim) # else # define STAT_TIMESPEC_NS(st, st_xtim) ((st)->st_xtim.tv_nsec) # endif #elif defined HAVE_STRUCT_STAT_ST_ATIMESPEC_TV_NSEC # define STAT_TIMESPEC(st, st_xtim) ((st)->st_xtim##espec) #elif defined HAVE_STRUCT_STAT_ST_ATIMENSEC # define STAT_TIMESPEC_NS(st, st_xtim) ((st)->st_xtim##ensec) #elif defined HAVE_STRUCT_STAT_ST_ATIM_ST__TIM_TV_NSEC # define STAT_TIMESPEC_NS(st, st_xtim) ((st)->st_xtim.st__tim.tv_nsec) #endif /* Return the nanosecond component of *ST's access time. */ _GL_STAT_TIME_INLINE long int _GL_ATTRIBUTE_PURE get_stat_atime_ns (struct stat const *st) { # if defined STAT_TIMESPEC return STAT_TIMESPEC (st, st_atim).tv_nsec; # elif defined STAT_TIMESPEC_NS return STAT_TIMESPEC_NS (st, st_atim); # else return 0; # endif } /* Return the nanosecond component of *ST's status change time. */ _GL_STAT_TIME_INLINE long int _GL_ATTRIBUTE_PURE get_stat_ctime_ns (struct stat const *st) { # if defined STAT_TIMESPEC return STAT_TIMESPEC (st, st_ctim).tv_nsec; # elif defined STAT_TIMESPEC_NS return STAT_TIMESPEC_NS (st, st_ctim); # else return 0; # endif } /* Return the nanosecond component of *ST's data modification time. */ _GL_STAT_TIME_INLINE long int _GL_ATTRIBUTE_PURE get_stat_mtime_ns (struct stat const *st) { # if defined STAT_TIMESPEC return STAT_TIMESPEC (st, st_mtim).tv_nsec; # elif defined STAT_TIMESPEC_NS return STAT_TIMESPEC_NS (st, st_mtim); # else return 0; # endif } /* Return the nanosecond component of *ST's birth time. */ _GL_STAT_TIME_INLINE long int _GL_ATTRIBUTE_PURE get_stat_birthtime_ns (_GL_UNUSED struct stat const *st) { # if defined HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC return STAT_TIMESPEC (st, st_birthtim).tv_nsec; # elif defined HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC return STAT_TIMESPEC_NS (st, st_birthtim); # else return 0; # endif } /* Return *ST's access time. */ _GL_STAT_TIME_INLINE struct timespec _GL_ATTRIBUTE_PURE get_stat_atime (struct stat const *st) { #ifdef STAT_TIMESPEC return STAT_TIMESPEC (st, st_atim); #else return (struct timespec) { .tv_sec = st->st_atime, .tv_nsec = get_stat_atime_ns (st) }; #endif } /* Return *ST's status change time. */ _GL_STAT_TIME_INLINE struct timespec _GL_ATTRIBUTE_PURE get_stat_ctime (struct stat const *st) { #ifdef STAT_TIMESPEC return STAT_TIMESPEC (st, st_ctim); #else return (struct timespec) { .tv_sec = st->st_ctime, .tv_nsec = get_stat_ctime_ns (st) }; #endif } /* Return *ST's data modification time. */ _GL_STAT_TIME_INLINE struct timespec _GL_ATTRIBUTE_PURE get_stat_mtime (struct stat const *st) { #ifdef STAT_TIMESPEC return STAT_TIMESPEC (st, st_mtim); #else return (struct timespec) { .tv_sec = st->st_mtime, .tv_nsec = get_stat_mtime_ns (st) }; #endif } /* Return *ST's birth time, if available; otherwise return a value with tv_sec and tv_nsec both equal to -1. */ _GL_STAT_TIME_INLINE struct timespec _GL_ATTRIBUTE_PURE get_stat_birthtime (_GL_UNUSED struct stat const *st) { struct timespec t; #if (defined HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC \ || defined HAVE_STRUCT_STAT_ST_BIRTHTIM_TV_NSEC) t = STAT_TIMESPEC (st, st_birthtim); #elif defined HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC t = (struct timespec) { .tv_sec = st->st_birthtime, .tv_nsec = st->st_birthtimensec }; #elif defined _WIN32 && ! defined __CYGWIN__ /* Native Windows platforms (but not Cygwin) put the "file creation time" in st_ctime (!). See <https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/stat-functions>. */ # if _GL_WINDOWS_STAT_TIMESPEC t = st->st_ctim; # else t = (struct timespec) { .tv_sec = st->st_ctime }; # endif #else /* Birth time is not supported. */ t = (struct timespec) { .tv_sec = -1, .tv_nsec = -1 }; #endif #if (defined HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC \ || defined HAVE_STRUCT_STAT_ST_BIRTHTIM_TV_NSEC \ || defined HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC) /* FreeBSD and NetBSD sometimes signal the absence of knowledge by using zero. Attempt to work around this problem. Alas, this can report failure even for valid timestamps. Also, NetBSD sometimes returns junk in the birth time fields; work around this bug if it is detected. */ if (! (t.tv_sec && 0 <= t.tv_nsec && t.tv_nsec < 1000000000)) t = (struct timespec) { .tv_sec = -1, .tv_nsec = -1 }; #endif return t; } /* If a stat-like function returned RESULT, normalize the timestamps in *ST, in case this platform suffers from the Solaris 11 bug where tv_nsec might be negative. Return the adjusted RESULT, setting errno to EOVERFLOW if normalization overflowed. This function is intended to be private to this .h file. */ _GL_STAT_TIME_INLINE int stat_time_normalize (int result, _GL_UNUSED struct stat *st) { #if defined __sun && defined STAT_TIMESPEC if (result == 0) { long int timespec_hz = 1000000000; short int const ts_off[] = { offsetof (struct stat, st_atim), offsetof (struct stat, st_mtim), offsetof (struct stat, st_ctim) }; int i; for (i = 0; i < sizeof ts_off / sizeof *ts_off; i++) { struct timespec *ts = (struct timespec *) ((char *) st + ts_off[i]); long int q = ts->tv_nsec / timespec_hz; long int r = ts->tv_nsec % timespec_hz; if (r < 0) { r += timespec_hz; q--; } ts->tv_nsec = r; /* Overflow is possible, as Solaris 11 stat can yield tv_sec == TYPE_MINIMUM (time_t) && tv_nsec == -1000000000. */ if (ckd_add (&ts->tv_sec, q, ts->tv_sec)) { errno = EOVERFLOW; return -1; } } } #endif return result; } #ifdef __cplusplus } #endif _GL_INLINE_HEADER_END #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/strerror-override.h��������������������������������������������������������������������0000644�0001750�0001750�00000004242�14436425346�017004� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* strerror-override.h --- POSIX compatible system error routine Copyright (C) 2010-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _GL_STRERROR_OVERRIDE_H # define _GL_STRERROR_OVERRIDE_H /* This file uses _GL_ATTRIBUTE_CONST. */ # if !_GL_CONFIG_H_INCLUDED # error "Please include config.h first." # endif # include <errno.h> # include <stddef.h> /* Reasonable buffer size that should never trigger ERANGE; if this proves too small, we intentionally abort(), to remind us to fix this value. */ # define STACKBUF_LEN 256 /* If ERRNUM maps to an errno value defined by gnulib, return a string describing the error. Otherwise return NULL. */ # if REPLACE_STRERROR_0 \ || GNULIB_defined_ESOCK \ || GNULIB_defined_ESTREAMS \ || GNULIB_defined_EWINSOCK \ || GNULIB_defined_ENOMSG \ || GNULIB_defined_EIDRM \ || GNULIB_defined_ENOLINK \ || GNULIB_defined_EPROTO \ || GNULIB_defined_EMULTIHOP \ || GNULIB_defined_EBADMSG \ || GNULIB_defined_EOVERFLOW \ || GNULIB_defined_ENOTSUP \ || GNULIB_defined_ENETRESET \ || GNULIB_defined_ECONNABORTED \ || GNULIB_defined_ESTALE \ || GNULIB_defined_EDQUOT \ || GNULIB_defined_ECANCELED \ || GNULIB_defined_EOWNERDEAD \ || GNULIB_defined_ENOTRECOVERABLE \ || GNULIB_defined_EILSEQ extern const char *strerror_override (int errnum) _GL_ATTRIBUTE_CONST; # else # define strerror_override(ignored) NULL # define GNULIB_defined_strerror_override_macro 1 # endif #endif /* _GL_STRERROR_OVERRIDE_H */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/malloca.c������������������������������������������������������������������������������0000644�0001750�0001750�00000007165�14436425346�014717� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Safe automatic memory allocation. Copyright (C) 2003, 2006-2007, 2009-2023 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2003, 2018. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #define _GL_USE_STDLIB_ALLOC 1 #include <config.h> /* Specification. */ #include "malloca.h" #include <stdckdint.h> #include "idx.h" /* The speed critical point in this file is freea() applied to an alloca() result: it must be fast, to match the speed of alloca(). The speed of mmalloca() and freea() in the other case are not critical, because they are only invoked for big memory sizes. Here we use a bit in the address as an indicator, an idea by Ondřej Bílka. malloca() can return three types of pointers: - Pointers ≡ 0 mod 2*sa_alignment_max come from stack allocation. - Pointers ≡ sa_alignment_max mod 2*sa_alignment_max come from heap allocation. - NULL comes from a failed heap allocation. */ /* Type for holding very small pointer differences. */ typedef unsigned char small_t; /* Verify that it is wide enough. */ static_assert (2 * sa_alignment_max - 1 <= (small_t) -1); void * mmalloca (size_t n) { #if HAVE_ALLOCA /* Allocate one more word, used to determine the address to pass to freea(), and room for the alignment ≡ sa_alignment_max mod 2*sa_alignment_max. */ uintptr_t alignment2_mask = 2 * sa_alignment_max - 1; int plus = sizeof (small_t) + alignment2_mask; idx_t nplus; if (!ckd_add (&nplus, n, plus) && !xalloc_oversized (nplus, 1)) { char *mem = (char *) malloc (nplus); if (mem != NULL) { uintptr_t umem = (uintptr_t)mem, umemplus; /* The ckd_add avoids signed integer overflow on theoretical platforms where UINTPTR_MAX <= INT_MAX. */ ckd_add (&umemplus, umem, sizeof (small_t) + sa_alignment_max - 1); idx_t offset = ((umemplus & ~alignment2_mask) + sa_alignment_max - umem); void *vp = mem + offset; small_t *p = vp; /* Here p >= mem + sizeof (small_t), and p <= mem + sizeof (small_t) + 2 * sa_alignment_max - 1 hence p + n <= mem + nplus. So, the memory range [p, p+n) lies in the allocated memory range [mem, mem + nplus). */ p[-1] = offset; /* p ≡ sa_alignment_max mod 2*sa_alignment_max. */ return p; } } /* Out of memory. */ return NULL; #else # if !MALLOC_0_IS_NONNULL if (n == 0) n = 1; # endif return malloc (n); #endif } #if HAVE_ALLOCA void freea (void *p) { /* Check argument. */ if ((uintptr_t) p & (sa_alignment_max - 1)) { /* p was not the result of a malloca() call. Invalid argument. */ abort (); } /* Determine whether p was a non-NULL pointer returned by mmalloca(). */ if ((uintptr_t) p & sa_alignment_max) { void *mem = (char *) p - ((small_t *) p)[-1]; free (mem); } } #endif /* * Hey Emacs! * Local Variables: * coding: utf-8 * End: */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/msvc-inval.h���������������������������������������������������������������������������0000644�0001750�0001750�00000021435�14436425346�015367� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Invalid parameter handler for MSVC runtime libraries. Copyright (C) 2011-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _MSVC_INVAL_H #define _MSVC_INVAL_H /* With MSVC runtime libraries with the "invalid parameter handler" concept, functions like fprintf(), dup2(), or close() crash when the caller passes an invalid argument. But POSIX wants error codes (such as EINVAL or EBADF) instead. This file defines macros that turn such an invalid parameter notification into a non-local exit. An error code can then be produced at the target of this exit. You can thus write code like TRY_MSVC_INVAL { <Code that can trigger an invalid parameter notification but does not do 'return', 'break', 'continue', nor 'goto'.> } CATCH_MSVC_INVAL { <Code that handles an invalid parameter notification but does not do 'return', 'break', 'continue', nor 'goto'.> } DONE_MSVC_INVAL; This entire block expands to a single statement. The handling of invalid parameters can be done in three ways: * The default way, which is reasonable for programs (not libraries): AC_DEFINE([MSVC_INVALID_PARAMETER_HANDLING], [DEFAULT_HANDLING]) * The way for libraries that make "hairy" calls (like close(-1), or fclose(fp) where fileno(fp) is closed, or simply getdtablesize()): AC_DEFINE([MSVC_INVALID_PARAMETER_HANDLING], [HAIRY_LIBRARY_HANDLING]) * The way for libraries that make no "hairy" calls: AC_DEFINE([MSVC_INVALID_PARAMETER_HANDLING], [SANE_LIBRARY_HANDLING]) */ /* This file uses HAVE_MSVC_INVALID_PARAMETER_HANDLER. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif #define DEFAULT_HANDLING 0 #define HAIRY_LIBRARY_HANDLING 1 #define SANE_LIBRARY_HANDLING 2 #if HAVE_MSVC_INVALID_PARAMETER_HANDLER \ && !(MSVC_INVALID_PARAMETER_HANDLING == SANE_LIBRARY_HANDLING) /* A native Windows platform with the "invalid parameter handler" concept, and either DEFAULT_HANDLING or HAIRY_LIBRARY_HANDLING. */ # if MSVC_INVALID_PARAMETER_HANDLING == DEFAULT_HANDLING /* Default handling. */ # ifdef __cplusplus extern "C" { # endif /* Ensure that the invalid parameter handler in installed that just returns. Because we assume no other part of the program installs a different invalid parameter handler, this solution is multithread-safe. */ extern void gl_msvc_inval_ensure_handler (void); # ifdef __cplusplus } # endif # define TRY_MSVC_INVAL \ do \ { \ gl_msvc_inval_ensure_handler (); \ if (1) # define CATCH_MSVC_INVAL \ else # define DONE_MSVC_INVAL \ } \ while (0) # else /* Handling for hairy libraries. */ # include <excpt.h> /* Gnulib can define its own status codes, as described in the page "Raising Software Exceptions" on microsoft.com <https://docs.microsoft.com/en-us/cpp/cpp/raising-software-exceptions>. Our status codes are composed of - 0xE0000000, mandatory for all user-defined status codes, - 0x474E550, a API identifier ("GNU"), - 0, 1, 2, ..., used to distinguish different status codes from the same API. */ # define STATUS_GNULIB_INVALID_PARAMETER (0xE0000000 + 0x474E550 + 0) # if defined _MSC_VER /* A compiler that supports __try/__except, as described in the page "try-except statement" on microsoft.com <https://docs.microsoft.com/en-us/cpp/cpp/try-except-statement>. With __try/__except, we can use the multithread-safe exception handling. */ # ifdef __cplusplus extern "C" { # endif /* Ensure that the invalid parameter handler in installed that raises a software exception with code STATUS_GNULIB_INVALID_PARAMETER. Because we assume no other part of the program installs a different invalid parameter handler, this solution is multithread-safe. */ extern void gl_msvc_inval_ensure_handler (void); # ifdef __cplusplus } # endif # define TRY_MSVC_INVAL \ do \ { \ gl_msvc_inval_ensure_handler (); \ __try # define CATCH_MSVC_INVAL \ __except (GetExceptionCode () == STATUS_GNULIB_INVALID_PARAMETER \ ? EXCEPTION_EXECUTE_HANDLER \ : EXCEPTION_CONTINUE_SEARCH) # define DONE_MSVC_INVAL \ } \ while (0) # else /* Any compiler. We can only use setjmp/longjmp. */ # include <setjmp.h> # ifdef __cplusplus extern "C" { # endif struct gl_msvc_inval_per_thread { /* The restart that will resume execution at the code between CATCH_MSVC_INVAL and DONE_MSVC_INVAL. It is enabled only between TRY_MSVC_INVAL and CATCH_MSVC_INVAL. */ jmp_buf restart; /* Tells whether the contents of restart is valid. */ int restart_valid; }; /* Ensure that the invalid parameter handler in installed that passes control to the gl_msvc_inval_restart if it is valid, or raises a software exception with code STATUS_GNULIB_INVALID_PARAMETER otherwise. Because we assume no other part of the program installs a different invalid parameter handler, this solution is multithread-safe. */ extern void gl_msvc_inval_ensure_handler (void); /* Return a pointer to the per-thread data for the current thread. */ extern struct gl_msvc_inval_per_thread *gl_msvc_inval_current (void); # ifdef __cplusplus } # endif # define TRY_MSVC_INVAL \ do \ { \ struct gl_msvc_inval_per_thread *msvc_inval_current; \ gl_msvc_inval_ensure_handler (); \ msvc_inval_current = gl_msvc_inval_current (); \ /* First, initialize gl_msvc_inval_restart. */ \ if (setjmp (msvc_inval_current->restart) == 0) \ { \ /* Then, mark it as valid. */ \ msvc_inval_current->restart_valid = 1; # define CATCH_MSVC_INVAL \ /* Execution completed. \ Mark gl_msvc_inval_restart as invalid. */ \ msvc_inval_current->restart_valid = 0; \ } \ else \ { \ /* Execution triggered an invalid parameter notification. \ Mark gl_msvc_inval_restart as invalid. */ \ msvc_inval_current->restart_valid = 0; # define DONE_MSVC_INVAL \ } \ } \ while (0) # endif # endif #else /* A platform that does not need to the invalid parameter handler, or when SANE_LIBRARY_HANDLING is desired. */ /* The braces here avoid GCC warnings like "warning: suggest explicit braces to avoid ambiguous 'else'". */ # define TRY_MSVC_INVAL \ do \ { \ if (1) # define CATCH_MSVC_INVAL \ else # define DONE_MSVC_INVAL \ } \ while (0) #endif #endif /* _MSVC_INVAL_H */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/fstat.c��������������������������������������������������������������������������������0000644�0001750�0001750�00000005153�14436425345�014422� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* fstat() replacement. Copyright (C) 2011-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* If the user's config.h happens to include <sys/stat.h>, let it include only the system's <sys/stat.h> here, so that orig_fstat doesn't recurse to rpl_fstat. */ #define __need_system_sys_stat_h #include <config.h> /* Get the original definition of fstat. It might be defined as a macro. */ #include <sys/types.h> #include <sys/stat.h> #undef __need_system_sys_stat_h #if defined _WIN32 && ! defined __CYGWIN__ # define WINDOWS_NATIVE #endif #if !defined WINDOWS_NATIVE static int orig_fstat (int fd, struct stat *buf) { return fstat (fd, buf); } #endif /* Specification. */ #ifdef __osf__ /* Write "sys/stat.h" here, not <sys/stat.h>, otherwise OSF/1 5.1 DTK cc eliminates this include because of the preliminary #include <sys/stat.h> above. */ # include "sys/stat.h" #else # include <sys/stat.h> #endif #include "stat-time.h" #include <errno.h> #include <unistd.h> #ifdef WINDOWS_NATIVE # define WIN32_LEAN_AND_MEAN # include <windows.h> # if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" # else # include <io.h> # endif # include "stat-w32.h" #endif int rpl_fstat (int fd, struct stat *buf) { #if REPLACE_FCHDIR && REPLACE_OPEN_DIRECTORY /* Handle the case when rpl_open() used a dummy file descriptor to work around an open() that can't normally visit directories. */ const char *name = _gl_directory_name (fd); if (name != NULL) return stat (name, buf); #endif #ifdef WINDOWS_NATIVE /* Fill the fields ourselves, because the original fstat function returns values for st_atime, st_mtime, st_ctime that depend on the current time zone. See <https://lists.gnu.org/r/bug-gnulib/2017-04/msg00134.html> */ HANDLE h = (HANDLE) _get_osfhandle (fd); if (h == INVALID_HANDLE_VALUE) { errno = EBADF; return -1; } return _gl_fstat_by_handle (h, NULL, buf); #else return stat_time_normalize (orig_fstat (fd, buf), buf); #endif } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/wchar.in.h�����������������������������������������������������������������������������0000644�0001750�0001750�00000135300�14436425346�015016� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A substitute for ISO C99 <wchar.h>, for platforms that have issues. Copyright (C) 2007-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Eric Blake. */ /* * ISO C 99 <wchar.h> for platforms that have issues. * <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/wchar.h.html> * * For now, this just ensures proper prerequisite inclusion order and * the declaration of wcwidth(). */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if (((defined __need_mbstate_t || defined __need_wint_t) \ && !defined __MINGW32__) \ || (defined __hpux \ && ((defined _INTTYPES_INCLUDED \ && !defined _GL_FINISHED_INCLUDING_SYSTEM_INTTYPES_H) \ || defined _GL_JUST_INCLUDE_SYSTEM_WCHAR_H)) \ || (defined __MINGW32__ && defined __STRING_H_SOURCED__) \ || defined _GL_ALREADY_INCLUDING_WCHAR_H) /* Special invocation convention: - Inside glibc and uClibc header files, but not MinGW. - On HP-UX 11.00 we have a sequence of nested includes <wchar.h> -> <stdlib.h> -> <stdint.h>, and the latter includes <wchar.h>, once indirectly <stdint.h> -> <sys/types.h> -> <inttypes.h> -> <wchar.h> and once directly. In both situations 'wint_t' is not yet defined, therefore we cannot provide the function overrides; instead include only the system's <wchar.h>. - With MinGW 3.22, when <string.h> includes <wchar.h>, only some part of <wchar.h> is actually processed, and that doesn't include 'mbstate_t'. - On IRIX 6.5, similarly, we have an include <wchar.h> -> <wctype.h>, and the latter includes <wchar.h>. But here, we have no way to detect whether <wctype.h> is completely included or is still being included. */ #@INCLUDE_NEXT@ @NEXT_WCHAR_H@ #else /* Normal invocation convention. */ #ifndef _@GUARD_PREFIX@_WCHAR_H #define _GL_ALREADY_INCLUDING_WCHAR_H #if @HAVE_FEATURES_H@ # include <features.h> /* for __GLIBC__ */ #endif /* In some builds of uClibc, <wchar.h> is nonexistent and wchar_t is defined by <stddef.h>. But avoid namespace pollution on glibc systems. */ #if !(defined __GLIBC__ && !defined __UCLIBC__) # include <stddef.h> #endif /* Include the original <wchar.h> if it exists. Some builds of uClibc lack it. */ /* The include_next requires a split double-inclusion guard. */ #if @HAVE_WCHAR_H@ # @INCLUDE_NEXT@ @NEXT_WCHAR_H@ #endif #undef _GL_ALREADY_INCLUDING_WCHAR_H #ifndef _@GUARD_PREFIX@_WCHAR_H #define _@GUARD_PREFIX@_WCHAR_H /* This file uses _GL_ATTRIBUTE_DEALLOC, _GL_ATTRIBUTE_MALLOC, _GL_ATTRIBUTE_PURE, GNULIB_POSIXCHECK, HAVE_RAW_DECL_*. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif /* _GL_ATTRIBUTE_DEALLOC (F, I) declares that the function returns pointers that can be freed by passing them as the Ith argument to the function F. */ #ifndef _GL_ATTRIBUTE_DEALLOC # if __GNUC__ >= 11 # define _GL_ATTRIBUTE_DEALLOC(f, i) __attribute__ ((__malloc__ (f, i))) # else # define _GL_ATTRIBUTE_DEALLOC(f, i) # endif #endif /* _GL_ATTRIBUTE_DEALLOC_FREE declares that the function returns pointers that can be freed via 'free'; it can be used only after declaring 'free'. */ /* Applies to: functions. Cannot be used on inline functions. */ #ifndef _GL_ATTRIBUTE_DEALLOC_FREE # if defined __cplusplus && defined __GNUC__ && !defined __clang__ /* Work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108231> */ # define _GL_ATTRIBUTE_DEALLOC_FREE \ _GL_ATTRIBUTE_DEALLOC ((void (*) (void *)) free, 1) # else # define _GL_ATTRIBUTE_DEALLOC_FREE \ _GL_ATTRIBUTE_DEALLOC (free, 1) # endif #endif /* _GL_ATTRIBUTE_MALLOC declares that the function returns a pointer to freshly allocated memory. */ /* Applies to: functions. */ #ifndef _GL_ATTRIBUTE_MALLOC # if __GNUC__ >= 3 || defined __clang__ # define _GL_ATTRIBUTE_MALLOC __attribute__ ((__malloc__)) # else # define _GL_ATTRIBUTE_MALLOC # endif #endif /* The __attribute__ feature is available in gcc versions 2.5 and later. The attribute __pure__ was added in gcc 2.96. */ #ifndef _GL_ATTRIBUTE_PURE # if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) || defined __clang__ # define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) # else # define _GL_ATTRIBUTE_PURE /* empty */ # endif #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* Define wint_t and WEOF. (Also done in wctype.in.h.) */ #if !@HAVE_WINT_T@ && !defined wint_t # define wint_t int # ifndef WEOF # define WEOF -1 # endif #else /* mingw and MSVC define wint_t as 'unsigned short' in <crtdefs.h> or <stddef.h>. This is too small: ISO C 99 section 7.24.1.(2) says that wint_t must be "unchanged by default argument promotions". Override it. */ # if @GNULIBHEADERS_OVERRIDE_WINT_T@ # if !GNULIB_defined_wint_t # if @HAVE_CRTDEFS_H@ # include <crtdefs.h> # else # include <stddef.h> # endif typedef unsigned int rpl_wint_t; # undef wint_t # define wint_t rpl_wint_t # define GNULIB_defined_wint_t 1 # endif # endif # ifndef WEOF # define WEOF ((wint_t) -1) # endif #endif /* Override mbstate_t if it is too small. On IRIX 6.5, sizeof (mbstate_t) == 1, which is not sufficient for implementing mbrtowc for encodings like UTF-8. On AIX and MSVC, mbrtowc needs to be overridden, but mbstate_t exists and is large enough and overriding it would cause problems in C++ mode. */ #if !(((defined _WIN32 && !defined __CYGWIN__) || @HAVE_MBSINIT@) && @HAVE_MBRTOWC@) || @REPLACE_MBSTATE_T@ # if !GNULIB_defined_mbstate_t # if !(defined _AIX || defined _MSC_VER) typedef int rpl_mbstate_t; # undef mbstate_t # define mbstate_t rpl_mbstate_t # endif # define GNULIB_defined_mbstate_t 1 # endif #endif /* Make _GL_ATTRIBUTE_DEALLOC_FREE work, even though <stdlib.h> may not have been included yet. */ #if @GNULIB_FREE_POSIX@ # if (@REPLACE_FREE@ && !defined free \ && !(defined __cplusplus && defined GNULIB_NAMESPACE)) /* We can't do '#define free rpl_free' here. */ # if defined __cplusplus && (__GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2) _GL_EXTERN_C void rpl_free (void *) throw (); # else _GL_EXTERN_C void rpl_free (void *); # endif # undef _GL_ATTRIBUTE_DEALLOC_FREE # define _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_DEALLOC (rpl_free, 1) # else # if defined _MSC_VER && !defined free _GL_EXTERN_C # if defined _DLL __declspec (dllimport) # endif void __cdecl free (void *); # else # if defined __cplusplus && (__GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2) _GL_EXTERN_C void free (void *) throw (); # else _GL_EXTERN_C void free (void *); # endif # endif # endif #else # if defined _MSC_VER && !defined free _GL_EXTERN_C # if defined _DLL __declspec (dllimport) # endif void __cdecl free (void *); # else # if defined __cplusplus && (__GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2) _GL_EXTERN_C void free (void *) throw (); # else _GL_EXTERN_C void free (void *); # endif # endif #endif /* Convert a single-byte character to a wide character. */ #if @GNULIB_BTOWC@ # if @REPLACE_BTOWC@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef btowc # define btowc rpl_btowc # endif _GL_FUNCDECL_RPL (btowc, wint_t, (int c) _GL_ATTRIBUTE_PURE); _GL_CXXALIAS_RPL (btowc, wint_t, (int c)); # else # if !@HAVE_BTOWC@ _GL_FUNCDECL_SYS (btowc, wint_t, (int c) _GL_ATTRIBUTE_PURE); # endif /* Need to cast, because on mingw, the return type is 'unsigned short'. */ _GL_CXXALIAS_SYS_CAST (btowc, wint_t, (int c)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (btowc); # endif #elif defined GNULIB_POSIXCHECK # undef btowc # if HAVE_RAW_DECL_BTOWC _GL_WARN_ON_USE (btowc, "btowc is unportable - " "use gnulib module btowc for portability"); # endif #endif /* Convert a wide character to a single-byte character. */ #if @GNULIB_WCTOB@ # if @REPLACE_WCTOB@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef wctob # define wctob rpl_wctob # endif _GL_FUNCDECL_RPL (wctob, int, (wint_t wc) _GL_ATTRIBUTE_PURE); _GL_CXXALIAS_RPL (wctob, int, (wint_t wc)); # else # if !defined wctob && !@HAVE_DECL_WCTOB@ /* wctob is provided by gnulib, or wctob exists but is not declared. */ _GL_FUNCDECL_SYS (wctob, int, (wint_t wc) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (wctob, int, (wint_t wc)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wctob); # endif #elif defined GNULIB_POSIXCHECK # undef wctob # if HAVE_RAW_DECL_WCTOB _GL_WARN_ON_USE (wctob, "wctob is unportable - " "use gnulib module wctob for portability"); # endif #endif /* Test whether *PS is in the initial state. */ #if @GNULIB_MBSINIT@ # if @REPLACE_MBSINIT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mbsinit # define mbsinit rpl_mbsinit # endif _GL_FUNCDECL_RPL (mbsinit, int, (const mbstate_t *ps)); _GL_CXXALIAS_RPL (mbsinit, int, (const mbstate_t *ps)); # else # if !@HAVE_MBSINIT@ _GL_FUNCDECL_SYS (mbsinit, int, (const mbstate_t *ps)); # endif _GL_CXXALIAS_SYS (mbsinit, int, (const mbstate_t *ps)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (mbsinit); # endif #elif defined GNULIB_POSIXCHECK # undef mbsinit # if HAVE_RAW_DECL_MBSINIT _GL_WARN_ON_USE (mbsinit, "mbsinit is unportable - " "use gnulib module mbsinit for portability"); # endif #endif /* Convert a multibyte character to a wide character. */ #if @GNULIB_MBRTOWC@ # if @REPLACE_MBRTOWC@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mbrtowc # define mbrtowc rpl_mbrtowc # endif _GL_FUNCDECL_RPL (mbrtowc, size_t, (wchar_t *restrict pwc, const char *restrict s, size_t n, mbstate_t *restrict ps)); _GL_CXXALIAS_RPL (mbrtowc, size_t, (wchar_t *restrict pwc, const char *restrict s, size_t n, mbstate_t *restrict ps)); # else # if !@HAVE_MBRTOWC@ _GL_FUNCDECL_SYS (mbrtowc, size_t, (wchar_t *restrict pwc, const char *restrict s, size_t n, mbstate_t *restrict ps)); # endif _GL_CXXALIAS_SYS (mbrtowc, size_t, (wchar_t *restrict pwc, const char *restrict s, size_t n, mbstate_t *restrict ps)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (mbrtowc); # endif #elif defined GNULIB_POSIXCHECK # undef mbrtowc # if HAVE_RAW_DECL_MBRTOWC _GL_WARN_ON_USE (mbrtowc, "mbrtowc is unportable - " "use gnulib module mbrtowc for portability"); # endif #endif /* Recognize a multibyte character. */ #if @GNULIB_MBRLEN@ # if @REPLACE_MBRLEN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mbrlen # define mbrlen rpl_mbrlen # endif _GL_FUNCDECL_RPL (mbrlen, size_t, (const char *restrict s, size_t n, mbstate_t *restrict ps)); _GL_CXXALIAS_RPL (mbrlen, size_t, (const char *restrict s, size_t n, mbstate_t *restrict ps)); # else # if !@HAVE_MBRLEN@ _GL_FUNCDECL_SYS (mbrlen, size_t, (const char *restrict s, size_t n, mbstate_t *restrict ps)); # endif _GL_CXXALIAS_SYS (mbrlen, size_t, (const char *restrict s, size_t n, mbstate_t *restrict ps)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (mbrlen); # endif #elif defined GNULIB_POSIXCHECK # undef mbrlen # if HAVE_RAW_DECL_MBRLEN _GL_WARN_ON_USE (mbrlen, "mbrlen is unportable - " "use gnulib module mbrlen for portability"); # endif #endif /* Convert a string to a wide string. */ #if @GNULIB_MBSRTOWCS@ # if @REPLACE_MBSRTOWCS@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mbsrtowcs # define mbsrtowcs rpl_mbsrtowcs # endif _GL_FUNCDECL_RPL (mbsrtowcs, size_t, (wchar_t *restrict dest, const char **restrict srcp, size_t len, mbstate_t *restrict ps) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (mbsrtowcs, size_t, (wchar_t *restrict dest, const char **restrict srcp, size_t len, mbstate_t *restrict ps)); # else # if !@HAVE_MBSRTOWCS@ _GL_FUNCDECL_SYS (mbsrtowcs, size_t, (wchar_t *restrict dest, const char **restrict srcp, size_t len, mbstate_t *restrict ps) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (mbsrtowcs, size_t, (wchar_t *restrict dest, const char **restrict srcp, size_t len, mbstate_t *restrict ps)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (mbsrtowcs); # endif #elif defined GNULIB_POSIXCHECK # undef mbsrtowcs # if HAVE_RAW_DECL_MBSRTOWCS _GL_WARN_ON_USE (mbsrtowcs, "mbsrtowcs is unportable - " "use gnulib module mbsrtowcs for portability"); # endif #endif /* Convert a string to a wide string. */ #if @GNULIB_MBSNRTOWCS@ # if @REPLACE_MBSNRTOWCS@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mbsnrtowcs # define mbsnrtowcs rpl_mbsnrtowcs # endif _GL_FUNCDECL_RPL (mbsnrtowcs, size_t, (wchar_t *restrict dest, const char **restrict srcp, size_t srclen, size_t len, mbstate_t *restrict ps) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (mbsnrtowcs, size_t, (wchar_t *restrict dest, const char **restrict srcp, size_t srclen, size_t len, mbstate_t *restrict ps)); # else # if !@HAVE_MBSNRTOWCS@ _GL_FUNCDECL_SYS (mbsnrtowcs, size_t, (wchar_t *restrict dest, const char **restrict srcp, size_t srclen, size_t len, mbstate_t *restrict ps) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (mbsnrtowcs, size_t, (wchar_t *restrict dest, const char **restrict srcp, size_t srclen, size_t len, mbstate_t *restrict ps)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (mbsnrtowcs); # endif #elif defined GNULIB_POSIXCHECK # undef mbsnrtowcs # if HAVE_RAW_DECL_MBSNRTOWCS _GL_WARN_ON_USE (mbsnrtowcs, "mbsnrtowcs is unportable - " "use gnulib module mbsnrtowcs for portability"); # endif #endif /* Convert a wide character to a multibyte character. */ #if @GNULIB_WCRTOMB@ # if @REPLACE_WCRTOMB@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef wcrtomb # define wcrtomb rpl_wcrtomb # endif _GL_FUNCDECL_RPL (wcrtomb, size_t, (char *restrict s, wchar_t wc, mbstate_t *restrict ps)); _GL_CXXALIAS_RPL (wcrtomb, size_t, (char *restrict s, wchar_t wc, mbstate_t *restrict ps)); # else # if !@HAVE_WCRTOMB@ _GL_FUNCDECL_SYS (wcrtomb, size_t, (char *restrict s, wchar_t wc, mbstate_t *restrict ps)); # endif _GL_CXXALIAS_SYS (wcrtomb, size_t, (char *restrict s, wchar_t wc, mbstate_t *restrict ps)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcrtomb); # endif #elif defined GNULIB_POSIXCHECK # undef wcrtomb # if HAVE_RAW_DECL_WCRTOMB _GL_WARN_ON_USE (wcrtomb, "wcrtomb is unportable - " "use gnulib module wcrtomb for portability"); # endif #endif /* Convert a wide string to a string. */ #if @GNULIB_WCSRTOMBS@ # if @REPLACE_WCSRTOMBS@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef wcsrtombs # define wcsrtombs rpl_wcsrtombs # endif _GL_FUNCDECL_RPL (wcsrtombs, size_t, (char *restrict dest, const wchar_t **restrict srcp, size_t len, mbstate_t *restrict ps) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (wcsrtombs, size_t, (char *restrict dest, const wchar_t **restrict srcp, size_t len, mbstate_t *restrict ps)); # else # if !@HAVE_WCSRTOMBS@ _GL_FUNCDECL_SYS (wcsrtombs, size_t, (char *restrict dest, const wchar_t **restrict srcp, size_t len, mbstate_t *restrict ps) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (wcsrtombs, size_t, (char *restrict dest, const wchar_t **restrict srcp, size_t len, mbstate_t *restrict ps)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcsrtombs); # endif #elif defined GNULIB_POSIXCHECK # undef wcsrtombs # if HAVE_RAW_DECL_WCSRTOMBS _GL_WARN_ON_USE (wcsrtombs, "wcsrtombs is unportable - " "use gnulib module wcsrtombs for portability"); # endif #endif /* Convert a wide string to a string. */ #if @GNULIB_WCSNRTOMBS@ # if @REPLACE_WCSNRTOMBS@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef wcsnrtombs # define wcsnrtombs rpl_wcsnrtombs # endif _GL_FUNCDECL_RPL (wcsnrtombs, size_t, (char *restrict dest, const wchar_t **restrict srcp, size_t srclen, size_t len, mbstate_t *restrict ps) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (wcsnrtombs, size_t, (char *restrict dest, const wchar_t **restrict srcp, size_t srclen, size_t len, mbstate_t *restrict ps)); # else # if !@HAVE_WCSNRTOMBS@ || (defined __cplusplus && defined __sun) _GL_FUNCDECL_SYS (wcsnrtombs, size_t, (char *restrict dest, const wchar_t **restrict srcp, size_t srclen, size_t len, mbstate_t *restrict ps) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (wcsnrtombs, size_t, (char *restrict dest, const wchar_t **restrict srcp, size_t srclen, size_t len, mbstate_t *restrict ps)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcsnrtombs); # endif #elif defined GNULIB_POSIXCHECK # undef wcsnrtombs # if HAVE_RAW_DECL_WCSNRTOMBS _GL_WARN_ON_USE (wcsnrtombs, "wcsnrtombs is unportable - " "use gnulib module wcsnrtombs for portability"); # endif #endif /* Return the number of screen columns needed for WC. */ #if @GNULIB_WCWIDTH@ # if @REPLACE_WCWIDTH@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef wcwidth # define wcwidth rpl_wcwidth # endif _GL_FUNCDECL_RPL (wcwidth, int, (wchar_t) _GL_ATTRIBUTE_PURE); _GL_CXXALIAS_RPL (wcwidth, int, (wchar_t)); # else # if !@HAVE_DECL_WCWIDTH@ /* wcwidth exists but is not declared. */ _GL_FUNCDECL_SYS (wcwidth, int, (wchar_t) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (wcwidth, int, (wchar_t)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcwidth); # endif #elif defined GNULIB_POSIXCHECK # undef wcwidth # if HAVE_RAW_DECL_WCWIDTH _GL_WARN_ON_USE (wcwidth, "wcwidth is unportable - " "use gnulib module wcwidth for portability"); # endif #endif /* Search N wide characters of S for C. */ #if @GNULIB_WMEMCHR@ # if !@HAVE_WMEMCHR@ _GL_FUNCDECL_SYS (wmemchr, wchar_t *, (const wchar_t *s, wchar_t c, size_t n) _GL_ATTRIBUTE_PURE); # endif /* On some systems, this function is defined as an overloaded function: extern "C++" { const wchar_t * std::wmemchr (const wchar_t *, wchar_t, size_t); wchar_t * std::wmemchr (wchar_t *, wchar_t, size_t); } */ _GL_CXXALIAS_SYS_CAST2 (wmemchr, wchar_t *, (const wchar_t *, wchar_t, size_t), const wchar_t *, (const wchar_t *, wchar_t, size_t)); # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (wmemchr, wchar_t *, (wchar_t *s, wchar_t c, size_t n)); _GL_CXXALIASWARN1 (wmemchr, const wchar_t *, (const wchar_t *s, wchar_t c, size_t n)); # elif __GLIBC__ >= 2 _GL_CXXALIASWARN (wmemchr); # endif #elif defined GNULIB_POSIXCHECK # undef wmemchr # if HAVE_RAW_DECL_WMEMCHR _GL_WARN_ON_USE (wmemchr, "wmemchr is unportable - " "use gnulib module wmemchr for portability"); # endif #endif /* Compare N wide characters of S1 and S2. */ #if @GNULIB_WMEMCMP@ # if @REPLACE_WMEMCMP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef wmemcmp # define wmemcmp rpl_wmemcmp # endif _GL_FUNCDECL_RPL (wmemcmp, int, (const wchar_t *s1, const wchar_t *s2, size_t n) _GL_ATTRIBUTE_PURE); _GL_CXXALIAS_RPL (wmemcmp, int, (const wchar_t *s1, const wchar_t *s2, size_t n)); # else # if !@HAVE_WMEMCMP@ _GL_FUNCDECL_SYS (wmemcmp, int, (const wchar_t *s1, const wchar_t *s2, size_t n) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (wmemcmp, int, (const wchar_t *s1, const wchar_t *s2, size_t n)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wmemcmp); # endif #elif defined GNULIB_POSIXCHECK # undef wmemcmp # if HAVE_RAW_DECL_WMEMCMP _GL_WARN_ON_USE (wmemcmp, "wmemcmp is unportable - " "use gnulib module wmemcmp for portability"); # endif #endif /* Copy N wide characters of SRC to DEST. */ #if @GNULIB_WMEMCPY@ # if !@HAVE_WMEMCPY@ _GL_FUNCDECL_SYS (wmemcpy, wchar_t *, (wchar_t *restrict dest, const wchar_t *restrict src, size_t n)); # endif _GL_CXXALIAS_SYS (wmemcpy, wchar_t *, (wchar_t *restrict dest, const wchar_t *restrict src, size_t n)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wmemcpy); # endif #elif defined GNULIB_POSIXCHECK # undef wmemcpy # if HAVE_RAW_DECL_WMEMCPY _GL_WARN_ON_USE (wmemcpy, "wmemcpy is unportable - " "use gnulib module wmemcpy for portability"); # endif #endif /* Copy N wide characters of SRC to DEST, guaranteeing correct behavior for overlapping memory areas. */ #if @GNULIB_WMEMMOVE@ # if !@HAVE_WMEMMOVE@ _GL_FUNCDECL_SYS (wmemmove, wchar_t *, (wchar_t *dest, const wchar_t *src, size_t n)); # endif _GL_CXXALIAS_SYS (wmemmove, wchar_t *, (wchar_t *dest, const wchar_t *src, size_t n)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wmemmove); # endif #elif defined GNULIB_POSIXCHECK # undef wmemmove # if HAVE_RAW_DECL_WMEMMOVE _GL_WARN_ON_USE (wmemmove, "wmemmove is unportable - " "use gnulib module wmemmove for portability"); # endif #endif /* Copy N wide characters of SRC to DEST. Return pointer to wide characters after the last written wide character. */ #if @GNULIB_WMEMPCPY@ # if @REPLACE_WMEMPCPY@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef wmempcpy # define wmempcpy rpl_wmempcpy # endif _GL_FUNCDECL_RPL (wmempcpy, wchar_t *, (wchar_t *restrict dest, const wchar_t *restrict src, size_t n)); _GL_CXXALIAS_RPL (wmempcpy, wchar_t *, (wchar_t *restrict dest, const wchar_t *restrict src, size_t n)); # else # if !@HAVE_WMEMPCPY@ _GL_FUNCDECL_SYS (wmempcpy, wchar_t *, (wchar_t *restrict dest, const wchar_t *restrict src, size_t n)); # endif _GL_CXXALIAS_SYS (wmempcpy, wchar_t *, (wchar_t *restrict dest, const wchar_t *restrict src, size_t n)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wmempcpy); # endif #elif defined GNULIB_POSIXCHECK # undef wmempcpy # if HAVE_RAW_DECL_WMEMPCPY _GL_WARN_ON_USE (wmempcpy, "wmempcpy is unportable - " "use gnulib module wmempcpy for portability"); # endif #endif /* Set N wide characters of S to C. */ #if @GNULIB_WMEMSET@ # if !@HAVE_WMEMSET@ _GL_FUNCDECL_SYS (wmemset, wchar_t *, (wchar_t *s, wchar_t c, size_t n)); # endif _GL_CXXALIAS_SYS (wmemset, wchar_t *, (wchar_t *s, wchar_t c, size_t n)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wmemset); # endif #elif defined GNULIB_POSIXCHECK # undef wmemset # if HAVE_RAW_DECL_WMEMSET _GL_WARN_ON_USE (wmemset, "wmemset is unportable - " "use gnulib module wmemset for portability"); # endif #endif /* Return the number of wide characters in S. */ #if @GNULIB_WCSLEN@ # if !@HAVE_WCSLEN@ _GL_FUNCDECL_SYS (wcslen, size_t, (const wchar_t *s) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (wcslen, size_t, (const wchar_t *s)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcslen); # endif #elif defined GNULIB_POSIXCHECK # undef wcslen # if HAVE_RAW_DECL_WCSLEN _GL_WARN_ON_USE (wcslen, "wcslen is unportable - " "use gnulib module wcslen for portability"); # endif #endif /* Return the number of wide characters in S, but at most MAXLEN. */ #if @GNULIB_WCSNLEN@ /* On Solaris 11.3, the header files declare the function in the std:: namespace, not in the global namespace. So, force a declaration in the global namespace. */ # if !@HAVE_WCSNLEN@ || (defined __sun && defined __cplusplus) _GL_FUNCDECL_SYS (wcsnlen, size_t, (const wchar_t *s, size_t maxlen) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (wcsnlen, size_t, (const wchar_t *s, size_t maxlen)); _GL_CXXALIASWARN (wcsnlen); #elif defined GNULIB_POSIXCHECK # undef wcsnlen # if HAVE_RAW_DECL_WCSNLEN _GL_WARN_ON_USE (wcsnlen, "wcsnlen is unportable - " "use gnulib module wcsnlen for portability"); # endif #endif /* Copy SRC to DEST. */ #if @GNULIB_WCSCPY@ # if !@HAVE_WCSCPY@ _GL_FUNCDECL_SYS (wcscpy, wchar_t *, (wchar_t *restrict dest, const wchar_t *restrict src)); # endif _GL_CXXALIAS_SYS (wcscpy, wchar_t *, (wchar_t *restrict dest, const wchar_t *restrict src)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcscpy); # endif #elif defined GNULIB_POSIXCHECK # undef wcscpy # if HAVE_RAW_DECL_WCSCPY _GL_WARN_ON_USE (wcscpy, "wcscpy is unportable - " "use gnulib module wcscpy for portability"); # endif #endif /* Copy SRC to DEST, returning the address of the terminating L'\0' in DEST. */ #if @GNULIB_WCPCPY@ /* On Solaris 11.3, the header files declare the function in the std:: namespace, not in the global namespace. So, force a declaration in the global namespace. */ # if !@HAVE_WCPCPY@ || (defined __sun && defined __cplusplus) _GL_FUNCDECL_SYS (wcpcpy, wchar_t *, (wchar_t *restrict dest, const wchar_t *restrict src)); # endif _GL_CXXALIAS_SYS (wcpcpy, wchar_t *, (wchar_t *restrict dest, const wchar_t *restrict src)); _GL_CXXALIASWARN (wcpcpy); #elif defined GNULIB_POSIXCHECK # undef wcpcpy # if HAVE_RAW_DECL_WCPCPY _GL_WARN_ON_USE (wcpcpy, "wcpcpy is unportable - " "use gnulib module wcpcpy for portability"); # endif #endif /* Copy no more than N wide characters of SRC to DEST. */ #if @GNULIB_WCSNCPY@ # if !@HAVE_WCSNCPY@ _GL_FUNCDECL_SYS (wcsncpy, wchar_t *, (wchar_t *restrict dest, const wchar_t *restrict src, size_t n)); # endif _GL_CXXALIAS_SYS (wcsncpy, wchar_t *, (wchar_t *restrict dest, const wchar_t *restrict src, size_t n)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcsncpy); # endif #elif defined GNULIB_POSIXCHECK # undef wcsncpy # if HAVE_RAW_DECL_WCSNCPY _GL_WARN_ON_USE (wcsncpy, "wcsncpy is unportable - " "use gnulib module wcsncpy for portability"); # endif #endif /* Copy no more than N characters of SRC to DEST, returning the address of the last character written into DEST. */ #if @GNULIB_WCPNCPY@ /* On Solaris 11.3, the header files declare the function in the std:: namespace, not in the global namespace. So, force a declaration in the global namespace. */ # if !@HAVE_WCPNCPY@ || (defined __sun && defined __cplusplus) _GL_FUNCDECL_SYS (wcpncpy, wchar_t *, (wchar_t *restrict dest, const wchar_t *restrict src, size_t n)); # endif _GL_CXXALIAS_SYS (wcpncpy, wchar_t *, (wchar_t *restrict dest, const wchar_t *restrict src, size_t n)); _GL_CXXALIASWARN (wcpncpy); #elif defined GNULIB_POSIXCHECK # undef wcpncpy # if HAVE_RAW_DECL_WCPNCPY _GL_WARN_ON_USE (wcpncpy, "wcpncpy is unportable - " "use gnulib module wcpncpy for portability"); # endif #endif /* Append SRC onto DEST. */ #if @GNULIB_WCSCAT@ # if !@HAVE_WCSCAT@ _GL_FUNCDECL_SYS (wcscat, wchar_t *, (wchar_t *restrict dest, const wchar_t *restrict src)); # endif _GL_CXXALIAS_SYS (wcscat, wchar_t *, (wchar_t *restrict dest, const wchar_t *restrict src)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcscat); # endif #elif defined GNULIB_POSIXCHECK # undef wcscat # if HAVE_RAW_DECL_WCSCAT _GL_WARN_ON_USE (wcscat, "wcscat is unportable - " "use gnulib module wcscat for portability"); # endif #endif /* Append no more than N wide characters of SRC onto DEST. */ #if @GNULIB_WCSNCAT@ # if !@HAVE_WCSNCAT@ _GL_FUNCDECL_SYS (wcsncat, wchar_t *, (wchar_t *restrict dest, const wchar_t *restrict src, size_t n)); # endif _GL_CXXALIAS_SYS (wcsncat, wchar_t *, (wchar_t *restrict dest, const wchar_t *restrict src, size_t n)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcsncat); # endif #elif defined GNULIB_POSIXCHECK # undef wcsncat # if HAVE_RAW_DECL_WCSNCAT _GL_WARN_ON_USE (wcsncat, "wcsncat is unportable - " "use gnulib module wcsncat for portability"); # endif #endif /* Compare S1 and S2. */ #if @GNULIB_WCSCMP@ # if @REPLACE_WCSCMP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef wcscmp # define wcscmp rpl_wcscmp # endif _GL_FUNCDECL_RPL (wcscmp, int, (const wchar_t *s1, const wchar_t *s2) _GL_ATTRIBUTE_PURE); _GL_CXXALIAS_RPL (wcscmp, int, (const wchar_t *s1, const wchar_t *s2)); # else # if !@HAVE_WCSCMP@ _GL_FUNCDECL_SYS (wcscmp, int, (const wchar_t *s1, const wchar_t *s2) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (wcscmp, int, (const wchar_t *s1, const wchar_t *s2)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcscmp); # endif #elif defined GNULIB_POSIXCHECK # undef wcscmp # if HAVE_RAW_DECL_WCSCMP _GL_WARN_ON_USE (wcscmp, "wcscmp is unportable - " "use gnulib module wcscmp for portability"); # endif #endif /* Compare no more than N wide characters of S1 and S2. */ #if @GNULIB_WCSNCMP@ # if @REPLACE_WCSNCMP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef wcsncmp # define wcsncmp rpl_wcsncmp # endif _GL_FUNCDECL_RPL (wcsncmp, int, (const wchar_t *s1, const wchar_t *s2, size_t n) _GL_ATTRIBUTE_PURE); _GL_CXXALIAS_RPL (wcsncmp, int, (const wchar_t *s1, const wchar_t *s2, size_t n)); # else # if !@HAVE_WCSNCMP@ _GL_FUNCDECL_SYS (wcsncmp, int, (const wchar_t *s1, const wchar_t *s2, size_t n) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (wcsncmp, int, (const wchar_t *s1, const wchar_t *s2, size_t n)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcsncmp); # endif #elif defined GNULIB_POSIXCHECK # undef wcsncmp # if HAVE_RAW_DECL_WCSNCMP _GL_WARN_ON_USE (wcsncmp, "wcsncmp is unportable - " "use gnulib module wcsncmp for portability"); # endif #endif /* Compare S1 and S2, ignoring case. */ #if @GNULIB_WCSCASECMP@ /* On Solaris 11.3, the header files declare the function in the std:: namespace, not in the global namespace. So, force a declaration in the global namespace. */ # if !@HAVE_WCSCASECMP@ || (defined __sun && defined __cplusplus) _GL_FUNCDECL_SYS (wcscasecmp, int, (const wchar_t *s1, const wchar_t *s2) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (wcscasecmp, int, (const wchar_t *s1, const wchar_t *s2)); _GL_CXXALIASWARN (wcscasecmp); #elif defined GNULIB_POSIXCHECK # undef wcscasecmp # if HAVE_RAW_DECL_WCSCASECMP _GL_WARN_ON_USE (wcscasecmp, "wcscasecmp is unportable - " "use gnulib module wcscasecmp for portability"); # endif #endif /* Compare no more than N chars of S1 and S2, ignoring case. */ #if @GNULIB_WCSNCASECMP@ /* On Solaris 11.3, the header files declare the function in the std:: namespace, not in the global namespace. So, force a declaration in the global namespace. */ # if !@HAVE_WCSNCASECMP@ || (defined __sun && defined __cplusplus) _GL_FUNCDECL_SYS (wcsncasecmp, int, (const wchar_t *s1, const wchar_t *s2, size_t n) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (wcsncasecmp, int, (const wchar_t *s1, const wchar_t *s2, size_t n)); _GL_CXXALIASWARN (wcsncasecmp); #elif defined GNULIB_POSIXCHECK # undef wcsncasecmp # if HAVE_RAW_DECL_WCSNCASECMP _GL_WARN_ON_USE (wcsncasecmp, "wcsncasecmp is unportable - " "use gnulib module wcsncasecmp for portability"); # endif #endif /* Compare S1 and S2, both interpreted as appropriate to the LC_COLLATE category of the current locale. */ #if @GNULIB_WCSCOLL@ # if !@HAVE_WCSCOLL@ _GL_FUNCDECL_SYS (wcscoll, int, (const wchar_t *s1, const wchar_t *s2)); # endif _GL_CXXALIAS_SYS (wcscoll, int, (const wchar_t *s1, const wchar_t *s2)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcscoll); # endif #elif defined GNULIB_POSIXCHECK # undef wcscoll # if HAVE_RAW_DECL_WCSCOLL _GL_WARN_ON_USE (wcscoll, "wcscoll is unportable - " "use gnulib module wcscoll for portability"); # endif #endif /* Transform S2 into array pointed to by S1 such that if wcscmp is applied to two transformed strings the result is the as applying 'wcscoll' to the original strings. */ #if @GNULIB_WCSXFRM@ # if !@HAVE_WCSXFRM@ _GL_FUNCDECL_SYS (wcsxfrm, size_t, (wchar_t *restrict s1, const wchar_t *restrict s2, size_t n)); # endif _GL_CXXALIAS_SYS (wcsxfrm, size_t, (wchar_t *restrict s1, const wchar_t *restrict s2, size_t n)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcsxfrm); # endif #elif defined GNULIB_POSIXCHECK # undef wcsxfrm # if HAVE_RAW_DECL_WCSXFRM _GL_WARN_ON_USE (wcsxfrm, "wcsxfrm is unportable - " "use gnulib module wcsxfrm for portability"); # endif #endif /* Duplicate S, returning an identical malloc'd string. */ #if @GNULIB_WCSDUP@ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef wcsdup # define wcsdup _wcsdup # endif _GL_CXXALIAS_MDA (wcsdup, wchar_t *, (const wchar_t *s)); # else /* On Solaris 11.3, the header files declare the function in the std:: namespace, not in the global namespace. So, force a declaration in the global namespace. */ # if !@HAVE_WCSDUP@ || (defined __sun && defined __cplusplus) || __GNUC__ >= 11 _GL_FUNCDECL_SYS (wcsdup, wchar_t *, (const wchar_t *s) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); # endif _GL_CXXALIAS_SYS (wcsdup, wchar_t *, (const wchar_t *s)); # endif _GL_CXXALIASWARN (wcsdup); #else # if __GNUC__ >= 11 && !defined wcsdup /* For -Wmismatched-dealloc: Associate wcsdup with free or rpl_free. */ _GL_FUNCDECL_SYS (wcsdup, wchar_t *, (const wchar_t *s) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); # endif # if defined GNULIB_POSIXCHECK # undef wcsdup # if HAVE_RAW_DECL_WCSDUP _GL_WARN_ON_USE (wcsdup, "wcsdup is unportable - " "use gnulib module wcsdup for portability"); # endif # elif @GNULIB_MDA_WCSDUP@ /* On native Windows, map 'wcsdup' to '_wcsdup', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::wcsdup always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef wcsdup # define wcsdup _wcsdup # endif _GL_CXXALIAS_MDA (wcsdup, wchar_t *, (const wchar_t *s)); # else _GL_FUNCDECL_SYS (wcsdup, wchar_t *, (const wchar_t *s) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); # if @HAVE_DECL_WCSDUP@ _GL_CXXALIAS_SYS (wcsdup, wchar_t *, (const wchar_t *s)); # endif # endif # if (defined _WIN32 && !defined __CYGWIN__) || @HAVE_DECL_WCSDUP@ _GL_CXXALIASWARN (wcsdup); # endif # endif #endif /* Find the first occurrence of WC in WCS. */ #if @GNULIB_WCSCHR@ # if !@HAVE_WCSCHR@ _GL_FUNCDECL_SYS (wcschr, wchar_t *, (const wchar_t *wcs, wchar_t wc) _GL_ATTRIBUTE_PURE); # endif /* On some systems, this function is defined as an overloaded function: extern "C++" { const wchar_t * std::wcschr (const wchar_t *, wchar_t); wchar_t * std::wcschr (wchar_t *, wchar_t); } */ _GL_CXXALIAS_SYS_CAST2 (wcschr, wchar_t *, (const wchar_t *, wchar_t), const wchar_t *, (const wchar_t *, wchar_t)); # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (wcschr, wchar_t *, (wchar_t *wcs, wchar_t wc)); _GL_CXXALIASWARN1 (wcschr, const wchar_t *, (const wchar_t *wcs, wchar_t wc)); # elif __GLIBC__ >= 2 _GL_CXXALIASWARN (wcschr); # endif #elif defined GNULIB_POSIXCHECK # undef wcschr # if HAVE_RAW_DECL_WCSCHR _GL_WARN_ON_USE (wcschr, "wcschr is unportable - " "use gnulib module wcschr for portability"); # endif #endif /* Find the last occurrence of WC in WCS. */ #if @GNULIB_WCSRCHR@ # if !@HAVE_WCSRCHR@ _GL_FUNCDECL_SYS (wcsrchr, wchar_t *, (const wchar_t *wcs, wchar_t wc) _GL_ATTRIBUTE_PURE); # endif /* On some systems, this function is defined as an overloaded function: extern "C++" { const wchar_t * std::wcsrchr (const wchar_t *, wchar_t); wchar_t * std::wcsrchr (wchar_t *, wchar_t); } */ _GL_CXXALIAS_SYS_CAST2 (wcsrchr, wchar_t *, (const wchar_t *, wchar_t), const wchar_t *, (const wchar_t *, wchar_t)); # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (wcsrchr, wchar_t *, (wchar_t *wcs, wchar_t wc)); _GL_CXXALIASWARN1 (wcsrchr, const wchar_t *, (const wchar_t *wcs, wchar_t wc)); # elif __GLIBC__ >= 2 _GL_CXXALIASWARN (wcsrchr); # endif #elif defined GNULIB_POSIXCHECK # undef wcsrchr # if HAVE_RAW_DECL_WCSRCHR _GL_WARN_ON_USE (wcsrchr, "wcsrchr is unportable - " "use gnulib module wcsrchr for portability"); # endif #endif /* Return the length of the initial segmet of WCS which consists entirely of wide characters not in REJECT. */ #if @GNULIB_WCSCSPN@ # if !@HAVE_WCSCSPN@ _GL_FUNCDECL_SYS (wcscspn, size_t, (const wchar_t *wcs, const wchar_t *reject) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (wcscspn, size_t, (const wchar_t *wcs, const wchar_t *reject)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcscspn); # endif #elif defined GNULIB_POSIXCHECK # undef wcscspn # if HAVE_RAW_DECL_WCSCSPN _GL_WARN_ON_USE (wcscspn, "wcscspn is unportable - " "use gnulib module wcscspn for portability"); # endif #endif /* Return the length of the initial segmet of WCS which consists entirely of wide characters in ACCEPT. */ #if @GNULIB_WCSSPN@ # if !@HAVE_WCSSPN@ _GL_FUNCDECL_SYS (wcsspn, size_t, (const wchar_t *wcs, const wchar_t *accept) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (wcsspn, size_t, (const wchar_t *wcs, const wchar_t *accept)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcsspn); # endif #elif defined GNULIB_POSIXCHECK # undef wcsspn # if HAVE_RAW_DECL_WCSSPN _GL_WARN_ON_USE (wcsspn, "wcsspn is unportable - " "use gnulib module wcsspn for portability"); # endif #endif /* Find the first occurrence in WCS of any character in ACCEPT. */ #if @GNULIB_WCSPBRK@ # if !@HAVE_WCSPBRK@ _GL_FUNCDECL_SYS (wcspbrk, wchar_t *, (const wchar_t *wcs, const wchar_t *accept) _GL_ATTRIBUTE_PURE); # endif /* On some systems, this function is defined as an overloaded function: extern "C++" { const wchar_t * std::wcspbrk (const wchar_t *, const wchar_t *); wchar_t * std::wcspbrk (wchar_t *, const wchar_t *); } */ _GL_CXXALIAS_SYS_CAST2 (wcspbrk, wchar_t *, (const wchar_t *, const wchar_t *), const wchar_t *, (const wchar_t *, const wchar_t *)); # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (wcspbrk, wchar_t *, (wchar_t *wcs, const wchar_t *accept)); _GL_CXXALIASWARN1 (wcspbrk, const wchar_t *, (const wchar_t *wcs, const wchar_t *accept)); # elif __GLIBC__ >= 2 _GL_CXXALIASWARN (wcspbrk); # endif #elif defined GNULIB_POSIXCHECK # undef wcspbrk # if HAVE_RAW_DECL_WCSPBRK _GL_WARN_ON_USE (wcspbrk, "wcspbrk is unportable - " "use gnulib module wcspbrk for portability"); # endif #endif /* Find the first occurrence of NEEDLE in HAYSTACK. */ #if @GNULIB_WCSSTR@ # if @REPLACE_WCSSTR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef wcsstr # define wcsstr rpl_wcsstr # endif _GL_FUNCDECL_RPL (wcsstr, wchar_t *, (const wchar_t *restrict haystack, const wchar_t *restrict needle) _GL_ATTRIBUTE_PURE); _GL_CXXALIAS_RPL (wcsstr, wchar_t *, (const wchar_t *restrict haystack, const wchar_t *restrict needle)); # else # if !@HAVE_WCSSTR@ _GL_FUNCDECL_SYS (wcsstr, wchar_t *, (const wchar_t *restrict haystack, const wchar_t *restrict needle) _GL_ATTRIBUTE_PURE); # endif /* On some systems, this function is defined as an overloaded function: extern "C++" { const wchar_t * std::wcsstr (const wchar_t *, const wchar_t *); wchar_t * std::wcsstr (wchar_t *, const wchar_t *); } */ _GL_CXXALIAS_SYS_CAST2 (wcsstr, wchar_t *, (const wchar_t *restrict, const wchar_t *restrict), const wchar_t *, (const wchar_t *restrict, const wchar_t *restrict)); # endif # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (wcsstr, wchar_t *, (wchar_t *restrict haystack, const wchar_t *restrict needle)); _GL_CXXALIASWARN1 (wcsstr, const wchar_t *, (const wchar_t *restrict haystack, const wchar_t *restrict needle)); # elif __GLIBC__ >= 2 _GL_CXXALIASWARN (wcsstr); # endif #elif defined GNULIB_POSIXCHECK # undef wcsstr # if HAVE_RAW_DECL_WCSSTR _GL_WARN_ON_USE (wcsstr, "wcsstr is unportable - " "use gnulib module wcsstr for portability"); # endif #endif /* Divide WCS into tokens separated by characters in DELIM. */ #if @GNULIB_WCSTOK@ # if @REPLACE_WCSTOK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef wcstok # define wcstok rpl_wcstok # endif _GL_FUNCDECL_RPL (wcstok, wchar_t *, (wchar_t *restrict wcs, const wchar_t *restrict delim, wchar_t **restrict ptr)); _GL_CXXALIAS_RPL (wcstok, wchar_t *, (wchar_t *restrict wcs, const wchar_t *restrict delim, wchar_t **restrict ptr)); # else # if !@HAVE_WCSTOK@ _GL_FUNCDECL_SYS (wcstok, wchar_t *, (wchar_t *restrict wcs, const wchar_t *restrict delim, wchar_t **restrict ptr)); # endif _GL_CXXALIAS_SYS (wcstok, wchar_t *, (wchar_t *restrict wcs, const wchar_t *restrict delim, wchar_t **restrict ptr)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcstok); # endif #elif defined GNULIB_POSIXCHECK # undef wcstok # if HAVE_RAW_DECL_WCSTOK _GL_WARN_ON_USE (wcstok, "wcstok is unportable - " "use gnulib module wcstok for portability"); # endif #endif /* Determine number of column positions required for first N wide characters (or fewer if S ends before this) in S. */ #if @GNULIB_WCSWIDTH@ # if @REPLACE_WCSWIDTH@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef wcswidth # define wcswidth rpl_wcswidth # endif _GL_FUNCDECL_RPL (wcswidth, int, (const wchar_t *s, size_t n) _GL_ATTRIBUTE_PURE); _GL_CXXALIAS_RPL (wcswidth, int, (const wchar_t *s, size_t n)); # else # if !@HAVE_WCSWIDTH@ _GL_FUNCDECL_SYS (wcswidth, int, (const wchar_t *s, size_t n) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (wcswidth, int, (const wchar_t *s, size_t n)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcswidth); # endif #elif defined GNULIB_POSIXCHECK # undef wcswidth # if HAVE_RAW_DECL_WCSWIDTH _GL_WARN_ON_USE (wcswidth, "wcswidth is unportable - " "use gnulib module wcswidth for portability"); # endif #endif /* Convert *TP to a date and time wide string. See <https://pubs.opengroup.org/onlinepubs/9699919799/functions/wcsftime.html>. */ #if @GNULIB_WCSFTIME@ # if @REPLACE_WCSFTIME@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef wcsftime # define wcsftime rpl_wcsftime # endif _GL_FUNCDECL_RPL (wcsftime, size_t, (wchar_t *restrict __buf, size_t __bufsize, const wchar_t *restrict __fmt, const struct tm *restrict __tp) _GL_ARG_NONNULL ((1, 3, 4))); _GL_CXXALIAS_RPL (wcsftime, size_t, (wchar_t *restrict __buf, size_t __bufsize, const wchar_t *restrict __fmt, const struct tm *restrict __tp)); # else # if !@HAVE_WCSFTIME@ _GL_FUNCDECL_SYS (wcsftime, size_t, (wchar_t *restrict __buf, size_t __bufsize, const wchar_t *restrict __fmt, const struct tm *restrict __tp) _GL_ARG_NONNULL ((1, 3, 4))); # endif _GL_CXXALIAS_SYS (wcsftime, size_t, (wchar_t *restrict __buf, size_t __bufsize, const wchar_t *restrict __fmt, const struct tm *restrict __tp)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcsftime); # endif #elif defined GNULIB_POSIXCHECK # undef wcsftime # if HAVE_RAW_DECL_WCSFTIME _GL_WARN_ON_USE (wcsftime, "wcsftime is unportable - " "use gnulib module wcsftime for portability"); # endif #endif #endif /* _@GUARD_PREFIX@_WCHAR_H */ #endif /* _@GUARD_PREFIX@_WCHAR_H */ #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/setlocale_null.h�����������������������������������������������������������������������0000644�0001750�0001750�00000006664�14436425346�016324� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Query the name of the current global locale. Copyright (C) 2019-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2019. */ #ifndef _SETLOCALE_NULL_H #define _SETLOCALE_NULL_H #include <stddef.h> #include "arg-nonnull.h" #ifdef __cplusplus extern "C" { #endif /* Recommended size of a buffer for a locale name for a single category. On glibc systems, you can have locale names that are relative file names; assume a maximum length 256. In native Windows, in 2018 the longest locale name was of length 58 ("FYRO Macedonian_Former Yugoslav Republic of Macedonia.1251"). */ #define SETLOCALE_NULL_MAX (256+1) /* Recommended size of a buffer for a locale name with all categories. On glibc systems, you can have locale names that are relative file names; assume maximum length 256 for each. There are 12 categories; so, the maximum total length is 148+12*256. In native Windows, there are 5 categories, and the maximum total length is 55+5*58. */ #define SETLOCALE_NULL_ALL_MAX (148+12*256+1) /* setlocale_null_r (CATEGORY, BUF, BUFSIZE) is like setlocale (CATEGORY, NULL), except that - it is guaranteed to be multithread-safe, - it returns the resulting locale category name or locale name in the user-supplied buffer BUF, which must be BUFSIZE bytes long. The recommended minimum buffer size is - SETLOCALE_NULL_MAX for CATEGORY != LC_ALL, and - SETLOCALE_NULL_ALL_MAX for CATEGORY == LC_ALL. The return value is an error code: 0 if the call is successful, EINVAL if CATEGORY is invalid, or ERANGE if BUFSIZE is smaller than the length needed size (including the trailing NUL byte). In the latter case, a truncated result is returned in BUF, but still NUL-terminated if BUFSIZE > 0. For this call to be multithread-safe, *all* calls to setlocale (CATEGORY, NULL) in all other threads must have been converted to use setlocale_null_r or setlocale_null as well, and the other threads must not make other setlocale invocations (since changing the global locale has side effects on all threads). */ extern int setlocale_null_r (int category, char *buf, size_t bufsize) _GL_ARG_NONNULL ((2)); /* setlocale_null (CATEGORY) is like setlocale (CATEGORY, NULL), except that it is guaranteed to be multithread-safe. The return value is NULL if CATEGORY is invalid. For this call to be multithread-safe, *all* calls to setlocale (CATEGORY, NULL) in all other threads must have been converted to use setlocale_null_r or setlocale_null as well, and the other threads must not make other setlocale invocations (since changing the global locale has side effects on all threads). */ extern const char *setlocale_null (int category); #ifdef __cplusplus } #endif #endif /* _SETLOCALE_NULL_H */ ����������������������������������������������������������������������������rush-2.4/gnu/wctype-h.c�����������������������������������������������������������������������������0000644�0001750�0001750�00000001626�14436425346�015043� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Inline functions for <wctype.h>. Copyright (C) 2012-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Normally this would be wctype.c, but that name's already taken. */ #include <config.h> #define _GL_WCTYPE_INLINE _GL_EXTERN_INLINE #include "wctype.h" ����������������������������������������������������������������������������������������������������������rush-2.4/gnu/lc-charset-dispatch.c������������������������������������������������������������������0000644�0001750�0001750�00000005220�14436425346�017117� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Dispatching based on the current locale's character encoding. Copyright (C) 2018-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2018. */ #include <config.h> /* Specification. */ #include "lc-charset-dispatch.h" #if GNULIB_defined_mbstate_t # include "localcharset.h" # include "streq.h" # if GNULIB_WCHAR_SINGLE_LOCALE /* When we know that the locale does not change, provide a speedup by caching the value of locale_encoding_classification. */ # define locale_encoding_classification_cached locale_encoding_classification # else /* By default, don't make assumptions, hence no caching. */ # define locale_encoding_classification_uncached locale_encoding_classification # endif # if GNULIB_WCHAR_SINGLE_LOCALE static inline # endif enc_t locale_encoding_classification_uncached (void) { const char *encoding = locale_charset (); if (STREQ_OPT (encoding, "UTF-8", 'U', 'T', 'F', '-', '8', 0, 0, 0, 0)) return enc_utf8; if (STREQ_OPT (encoding, "EUC-JP", 'E', 'U', 'C', '-', 'J', 'P', 0, 0, 0)) return enc_eucjp; if (STREQ_OPT (encoding, "EUC-KR", 'E', 'U', 'C', '-', 'K', 'R', 0, 0, 0) || STREQ_OPT (encoding, "GB2312", 'G', 'B', '2', '3', '1', '2', 0, 0, 0) || STREQ_OPT (encoding, "BIG5", 'B', 'I', 'G', '5', 0, 0, 0, 0, 0)) return enc_94; if (STREQ_OPT (encoding, "EUC-TW", 'E', 'U', 'C', '-', 'T', 'W', 0, 0, 0)) return enc_euctw; if (STREQ_OPT (encoding, "GB18030", 'G', 'B', '1', '8', '0', '3', '0', 0, 0)) return enc_gb18030; if (STREQ_OPT (encoding, "SJIS", 'S', 'J', 'I', 'S', 0, 0, 0, 0, 0)) return enc_sjis; return enc_other; } # if GNULIB_WCHAR_SINGLE_LOCALE static int cached_locale_enc = -1; enc_t locale_encoding_classification_cached (void) { if (cached_locale_enc < 0) cached_locale_enc = locale_encoding_classification_uncached (); return cached_locale_enc; } # endif #else /* This declaration is solely to ensure that after preprocessing this file is never empty. */ typedef int dummy; #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/strftime.h�����������������������������������������������������������������������������0000644�0001750�0001750�00000002644�14436425346�015146� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* declarations for strftime.c Copyright (C) 2002, 2004, 2008-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <time.h> #ifdef __cplusplus extern "C" { #endif /* Just like strftime, but with two more arguments: POSIX requires that strftime use the local timezone information. Use the timezone __TZ instead. Use __NS as the number of nanoseconds in the %N directive. On error, set errno and return 0. Otherwise, return the number of bytes generated (not counting the trailing NUL), preserving errno if the number is 0. This errno behavior is in draft POSIX 202x plus some requested changes to POSIX. */ size_t nstrftime (char *restrict, size_t, char const *, struct tm const *, timezone_t __tz, int __ns); #ifdef __cplusplus } #endif ��������������������������������������������������������������������������������������������rush-2.4/gnu/stat-w32.c�����������������������������������������������������������������������������0000644�0001750�0001750�00000044207�14436425346�014671� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Core of implementation of fstat and stat for native Windows. Copyright (C) 2017-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible. */ #include <config.h> #if defined _WIN32 && ! defined __CYGWIN__ /* Attempt to make <windows.h> define FILE_ID_INFO. But ensure that the redefinition of _WIN32_WINNT does not make us assume Windows Vista or newer when building for an older version of Windows. */ #if HAVE_SDKDDKVER_H # include <sdkddkver.h> # if _WIN32_WINNT >= _WIN32_WINNT_VISTA # define WIN32_ASSUME_VISTA 1 # else # define WIN32_ASSUME_VISTA 0 # endif # if !defined _WIN32_WINNT || (_WIN32_WINNT < _WIN32_WINNT_WIN8) # undef _WIN32_WINNT # define _WIN32_WINNT _WIN32_WINNT_WIN8 # endif #else # define WIN32_ASSUME_VISTA (_WIN32_WINNT >= _WIN32_WINNT_VISTA) #endif #include <sys/types.h> #include <sys/stat.h> #include <errno.h> #include <limits.h> #include <string.h> #include <unistd.h> #include <windows.h> /* Specification. */ #include "stat-w32.h" #include "pathmax.h" /* Don't assume that UNICODE is not defined. */ #undef LoadLibrary #define LoadLibrary LoadLibraryA #undef GetFinalPathNameByHandle #define GetFinalPathNameByHandle GetFinalPathNameByHandleA /* Older mingw headers do not define VOLUME_NAME_NONE. */ #ifndef VOLUME_NAME_NONE # define VOLUME_NAME_NONE 4 #endif #if !WIN32_ASSUME_VISTA /* Avoid warnings from gcc -Wcast-function-type. */ # define GetProcAddress \ (void *) GetProcAddress # if _GL_WINDOWS_STAT_INODES == 2 /* GetFileInformationByHandleEx was introduced only in Windows Vista. */ typedef DWORD (WINAPI * GetFileInformationByHandleExFuncType) (HANDLE hFile, FILE_INFO_BY_HANDLE_CLASS fiClass, LPVOID lpBuffer, DWORD dwBufferSize); static GetFileInformationByHandleExFuncType GetFileInformationByHandleExFunc = NULL; # endif /* GetFinalPathNameByHandle was introduced only in Windows Vista. */ typedef DWORD (WINAPI * GetFinalPathNameByHandleFuncType) (HANDLE hFile, LPSTR lpFilePath, DWORD lenFilePath, DWORD dwFlags); static GetFinalPathNameByHandleFuncType GetFinalPathNameByHandleFunc = NULL; static BOOL initialized = FALSE; static void initialize (void) { HMODULE kernel32 = LoadLibrary ("kernel32.dll"); if (kernel32 != NULL) { # if _GL_WINDOWS_STAT_INODES == 2 GetFileInformationByHandleExFunc = (GetFileInformationByHandleExFuncType) GetProcAddress (kernel32, "GetFileInformationByHandleEx"); # endif GetFinalPathNameByHandleFunc = (GetFinalPathNameByHandleFuncType) GetProcAddress (kernel32, "GetFinalPathNameByHandleA"); } initialized = TRUE; } #else # define GetFileInformationByHandleExFunc GetFileInformationByHandleEx # define GetFinalPathNameByHandleFunc GetFinalPathNameByHandle #endif /* Converts a FILETIME to GMT time since 1970-01-01 00:00:00. */ #if _GL_WINDOWS_STAT_TIMESPEC struct timespec _gl_convert_FILETIME_to_timespec (const FILETIME *ft) { struct timespec result; /* FILETIME: <https://docs.microsoft.com/en-us/windows/desktop/api/minwinbase/ns-minwinbase-filetime> */ unsigned long long since_1601 = ((unsigned long long) ft->dwHighDateTime << 32) | (unsigned long long) ft->dwLowDateTime; if (since_1601 == 0) { result.tv_sec = 0; result.tv_nsec = 0; } else { /* Between 1601-01-01 and 1970-01-01 there were 280 normal years and 89 leap years, in total 134774 days. */ unsigned long long since_1970 = since_1601 - (unsigned long long) 134774 * (unsigned long long) 86400 * (unsigned long long) 10000000; result.tv_sec = since_1970 / (unsigned long long) 10000000; result.tv_nsec = (unsigned long) (since_1970 % (unsigned long long) 10000000) * 100; } return result; } #else time_t _gl_convert_FILETIME_to_POSIX (const FILETIME *ft) { /* FILETIME: <https://docs.microsoft.com/en-us/windows/desktop/api/minwinbase/ns-minwinbase-filetime> */ unsigned long long since_1601 = ((unsigned long long) ft->dwHighDateTime << 32) | (unsigned long long) ft->dwLowDateTime; if (since_1601 == 0) return 0; else { /* Between 1601-01-01 and 1970-01-01 there were 280 normal years and 89 leap years, in total 134774 days. */ unsigned long long since_1970 = since_1601 - (unsigned long long) 134774 * (unsigned long long) 86400 * (unsigned long long) 10000000; return since_1970 / (unsigned long long) 10000000; } } #endif /* Fill *BUF with information about the file designated by H. PATH is the file name, if known, otherwise NULL. Return 0 if successful, or -1 with errno set upon failure. */ int _gl_fstat_by_handle (HANDLE h, const char *path, struct stat *buf) { /* GetFileType <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfiletype> */ DWORD type = GetFileType (h); if (type == FILE_TYPE_DISK) { #if !WIN32_ASSUME_VISTA if (!initialized) initialize (); #endif /* st_mode can be determined through GetFileAttributesEx <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfileattributesexa> <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/ns-fileapi-_win32_file_attribute_data> or through GetFileInformationByHandle <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfileinformationbyhandle> <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/ns-fileapi-_by_handle_file_information> or through GetFileInformationByHandleEx with argument FileBasicInfo <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/nf-winbase-getfileinformationbyhandleex> <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/ns-winbase-_file_basic_info> The latter requires -D_WIN32_WINNT=_WIN32_WINNT_VISTA or higher. */ BY_HANDLE_FILE_INFORMATION info; if (! GetFileInformationByHandle (h, &info)) goto failed; /* Test for error conditions before starting to fill *buf. */ if (sizeof (buf->st_size) <= 4 && info.nFileSizeHigh > 0) { errno = EOVERFLOW; return -1; } #if _GL_WINDOWS_STAT_INODES /* st_ino can be determined through GetFileInformationByHandle <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfileinformationbyhandle> <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/ns-fileapi-_by_handle_file_information> as 64 bits, or through GetFileInformationByHandleEx with argument FileIdInfo <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/nf-winbase-getfileinformationbyhandleex> <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/ns-winbase-_file_id_info> as 128 bits. The latter requires -D_WIN32_WINNT=_WIN32_WINNT_WIN8 or higher. */ /* Experiments show that GetFileInformationByHandleEx does not provide much more information than GetFileInformationByHandle: * The dwVolumeSerialNumber from GetFileInformationByHandle is equal to the low 32 bits of the 64-bit VolumeSerialNumber from GetFileInformationByHandleEx, and is apparently sufficient for identifying the device. * The nFileIndex from GetFileInformationByHandle is equal to the low 64 bits of the 128-bit FileId from GetFileInformationByHandleEx, and the high 64 bits of this 128-bit FileId are zero. * On a FAT file system, GetFileInformationByHandleEx fails with error ERROR_INVALID_PARAMETER, whereas GetFileInformationByHandle succeeds. * On a CIFS/SMB file system, GetFileInformationByHandleEx fails with error ERROR_INVALID_LEVEL, whereas GetFileInformationByHandle succeeds. */ # if _GL_WINDOWS_STAT_INODES == 2 if (GetFileInformationByHandleExFunc != NULL) { FILE_ID_INFO id; if (GetFileInformationByHandleExFunc (h, FileIdInfo, &id, sizeof (id))) { buf->st_dev = id.VolumeSerialNumber; static_assert (sizeof (ino_t) == sizeof (id.FileId)); memcpy (&buf->st_ino, &id.FileId, sizeof (ino_t)); goto ino_done; } else { switch (GetLastError ()) { case ERROR_INVALID_PARAMETER: /* older Windows version, or FAT */ case ERROR_INVALID_LEVEL: /* CIFS/SMB file system */ goto fallback; default: goto failed; } } } fallback: ; /* Fallback for older Windows versions. */ buf->st_dev = info.dwVolumeSerialNumber; buf->st_ino._gl_ino[0] = ((ULONGLONG) info.nFileIndexHigh << 32) | (ULONGLONG) info.nFileIndexLow; buf->st_ino._gl_ino[1] = 0; ino_done: ; # else /* _GL_WINDOWS_STAT_INODES == 1 */ buf->st_dev = info.dwVolumeSerialNumber; buf->st_ino = ((ULONGLONG) info.nFileIndexHigh << 32) | (ULONGLONG) info.nFileIndexLow; # endif #else /* st_ino is not wide enough for identifying a file on a device. Without st_ino, st_dev is pointless. */ buf->st_dev = 0; buf->st_ino = 0; #endif /* st_mode. */ unsigned int mode = /* XXX How to handle FILE_ATTRIBUTE_REPARSE_POINT ? */ ((info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ? _S_IFDIR | S_IEXEC_UGO : _S_IFREG) | S_IREAD_UGO | ((info.dwFileAttributes & FILE_ATTRIBUTE_READONLY) ? 0 : S_IWRITE_UGO); if (!(info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) { /* Determine whether the file is executable by looking at the file name suffix. If the file name is already known, use it. Otherwise, for non-empty files, it can be determined through GetFinalPathNameByHandle <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfinalpathnamebyhandlea> or through GetFileInformationByHandleEx with argument FileNameInfo <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/nf-winbase-getfileinformationbyhandleex> <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/ns-winbase-_file_name_info> Both require -D_WIN32_WINNT=_WIN32_WINNT_VISTA or higher. */ if (info.nFileSizeHigh > 0 || info.nFileSizeLow > 0) { char fpath[PATH_MAX]; if (path != NULL || (GetFinalPathNameByHandleFunc != NULL && GetFinalPathNameByHandleFunc (h, fpath, sizeof (fpath), VOLUME_NAME_NONE) < sizeof (fpath) && (path = fpath, 1))) { const char *last_dot = NULL; const char *p; for (p = path; *p != '\0'; p++) if (*p == '.') last_dot = p; if (last_dot != NULL) { const char *suffix = last_dot + 1; if (_stricmp (suffix, "exe") == 0 || _stricmp (suffix, "bat") == 0 || _stricmp (suffix, "cmd") == 0 || _stricmp (suffix, "com") == 0) mode |= S_IEXEC_UGO; } } else /* Cannot determine file name. Pretend that it is executable. */ mode |= S_IEXEC_UGO; } } buf->st_mode = mode; /* st_nlink can be determined through GetFileInformationByHandle <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfileinformationbyhandle> <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/ns-fileapi-_by_handle_file_information> or through GetFileInformationByHandleEx with argument FileStandardInfo <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/nf-winbase-getfileinformationbyhandleex> <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/ns-winbase-_file_standard_info> The latter requires -D_WIN32_WINNT=_WIN32_WINNT_VISTA or higher. */ buf->st_nlink = (info.nNumberOfLinks > SHRT_MAX ? SHRT_MAX : info.nNumberOfLinks); /* There's no easy way to map the Windows SID concept to an integer. */ buf->st_uid = 0; buf->st_gid = 0; /* st_rdev is irrelevant for normal files and directories. */ buf->st_rdev = 0; /* st_size can be determined through GetFileSizeEx <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfilesizeex> or through GetFileAttributesEx <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfileattributesexa> <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/ns-fileapi-_win32_file_attribute_data> or through GetFileInformationByHandle <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfileinformationbyhandle> <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/ns-fileapi-_by_handle_file_information> or through GetFileInformationByHandleEx with argument FileStandardInfo <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/nf-winbase-getfileinformationbyhandleex> <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/ns-winbase-_file_standard_info> The latter requires -D_WIN32_WINNT=_WIN32_WINNT_VISTA or higher. */ if (sizeof (buf->st_size) <= 4) /* Range check already done above. */ buf->st_size = info.nFileSizeLow; else buf->st_size = ((long long) info.nFileSizeHigh << 32) | (long long) info.nFileSizeLow; /* st_atime, st_mtime, st_ctime can be determined through GetFileTime <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfiletime> or through GetFileAttributesEx <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfileattributesexa> <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/ns-fileapi-_win32_file_attribute_data> or through GetFileInformationByHandle <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfileinformationbyhandle> <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/ns-fileapi-_by_handle_file_information> or through GetFileInformationByHandleEx with argument FileBasicInfo <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/nf-winbase-getfileinformationbyhandleex> <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/ns-winbase-_file_basic_info> The latter requires -D_WIN32_WINNT=_WIN32_WINNT_VISTA or higher. */ #if _GL_WINDOWS_STAT_TIMESPEC buf->st_atim = _gl_convert_FILETIME_to_timespec (&info.ftLastAccessTime); buf->st_mtim = _gl_convert_FILETIME_to_timespec (&info.ftLastWriteTime); buf->st_ctim = _gl_convert_FILETIME_to_timespec (&info.ftCreationTime); #else buf->st_atime = _gl_convert_FILETIME_to_POSIX (&info.ftLastAccessTime); buf->st_mtime = _gl_convert_FILETIME_to_POSIX (&info.ftLastWriteTime); buf->st_ctime = _gl_convert_FILETIME_to_POSIX (&info.ftCreationTime); #endif return 0; } else if (type == FILE_TYPE_CHAR || type == FILE_TYPE_PIPE) { buf->st_dev = 0; #if _GL_WINDOWS_STAT_INODES == 2 buf->st_ino._gl_ino[0] = buf->st_ino._gl_ino[1] = 0; #else buf->st_ino = 0; #endif buf->st_mode = (type == FILE_TYPE_PIPE ? _S_IFIFO : _S_IFCHR); buf->st_nlink = 1; buf->st_uid = 0; buf->st_gid = 0; buf->st_rdev = 0; if (type == FILE_TYPE_PIPE) { /* PeekNamedPipe <https://msdn.microsoft.com/en-us/library/aa365779.aspx> */ DWORD bytes_available; if (PeekNamedPipe (h, NULL, 0, NULL, &bytes_available, NULL)) buf->st_size = bytes_available; else buf->st_size = 0; } else buf->st_size = 0; #if _GL_WINDOWS_STAT_TIMESPEC buf->st_atim.tv_sec = 0; buf->st_atim.tv_nsec = 0; buf->st_mtim.tv_sec = 0; buf->st_mtim.tv_nsec = 0; buf->st_ctim.tv_sec = 0; buf->st_ctim.tv_nsec = 0; #else buf->st_atime = 0; buf->st_mtime = 0; buf->st_ctime = 0; #endif return 0; } else { errno = ENOENT; return -1; } failed: { DWORD error = GetLastError (); #if 0 fprintf (stderr, "_gl_fstat_by_handle error 0x%x\n", (unsigned int) error); #endif switch (error) { case ERROR_ACCESS_DENIED: case ERROR_SHARING_VIOLATION: errno = EACCES; break; case ERROR_OUTOFMEMORY: errno = ENOMEM; break; case ERROR_WRITE_FAULT: case ERROR_READ_FAULT: case ERROR_GEN_FAILURE: errno = EIO; break; default: errno = EINVAL; break; } return -1; } } #else /* This declaration is solely to ensure that after preprocessing this file is never empty. */ typedef int dummy; #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/fcntl.in.h�����������������������������������������������������������������������������0000644�0001750�0001750�00000031537�14436425345�015026� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Like <fcntl.h>, but with non-working flags defined to 0. Copyright (C) 2006-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* written by Paul Eggert */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if defined __need_system_fcntl_h /* Special invocation convention. */ /* Needed before <sys/stat.h>. May also define off_t to a 64-bit type on native Windows. */ #include <sys/types.h> /* On some systems other than glibc, <sys/stat.h> is a prerequisite of <fcntl.h>. On glibc systems, we would like to avoid namespace pollution. But on glibc systems, <fcntl.h> includes <sys/stat.h> inside an extern "C" { ... } block, which leads to errors in C++ mode with the overridden <sys/stat.h> from gnulib. These errors are known to be gone with g++ version >= 4.3. */ #if !(defined __GLIBC__ || defined __UCLIBC__) || (defined __cplusplus && defined GNULIB_NAMESPACE && (defined __ICC || !(__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)))) # include <sys/stat.h> #endif #@INCLUDE_NEXT@ @NEXT_FCNTL_H@ /* Native Windows platforms declare open(), creat() in <io.h>. */ #if (@GNULIB_CREAT@ || @GNULIB_OPEN@ || defined GNULIB_POSIXCHECK) \ && (defined _WIN32 && ! defined __CYGWIN__) # include <io.h> #endif #else /* Normal invocation convention. */ #ifndef _@GUARD_PREFIX@_FCNTL_H /* Needed before <sys/stat.h>. May also define off_t to a 64-bit type on native Windows. */ #include <sys/types.h> /* On some systems other than glibc, <sys/stat.h> is a prerequisite of <fcntl.h>. On glibc systems, we would like to avoid namespace pollution. But on glibc systems, <fcntl.h> includes <sys/stat.h> inside an extern "C" { ... } block, which leads to errors in C++ mode with the overridden <sys/stat.h> from gnulib. These errors are known to be gone with g++ version >= 4.3. */ #if !(defined __GLIBC__ || defined __UCLIBC__) || (defined __cplusplus && defined GNULIB_NAMESPACE && (defined __ICC || !(__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)))) # include <sys/stat.h> #endif /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_FCNTL_H@ /* Native Windows platforms declare open(), creat() in <io.h>. */ #if (@GNULIB_CREAT@ || @GNULIB_OPEN@ || defined GNULIB_POSIXCHECK) \ && (defined _WIN32 && ! defined __CYGWIN__) # include <io.h> #endif #ifndef _@GUARD_PREFIX@_FCNTL_H #define _@GUARD_PREFIX@_FCNTL_H /* This file uses GNULIB_POSIXCHECK, HAVE_RAW_DECL_*. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif #ifndef __GLIBC__ /* Avoid namespace pollution on glibc systems. */ # include <unistd.h> #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* Declare overridden functions. */ #if @GNULIB_CREAT@ # if @REPLACE_CREAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef creat # define creat rpl_creat # endif _GL_FUNCDECL_RPL (creat, int, (const char *filename, mode_t mode) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (creat, int, (const char *filename, mode_t mode)); # elif defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef creat # define creat _creat # endif _GL_CXXALIAS_MDA (creat, int, (const char *filename, mode_t mode)); # else _GL_CXXALIAS_SYS (creat, int, (const char *filename, mode_t mode)); # endif _GL_CXXALIASWARN (creat); #elif defined GNULIB_POSIXCHECK # undef creat /* Assume creat is always declared. */ _GL_WARN_ON_USE (creat, "creat is not always POSIX compliant - " "use gnulib module creat for portability"); #elif @GNULIB_MDA_CREAT@ /* On native Windows, map 'creat' to '_creat', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::creat always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef creat # define creat _creat # endif /* Need to cast, because in mingw the last argument is 'int mode'. */ _GL_CXXALIAS_MDA_CAST (creat, int, (const char *filename, mode_t mode)); # else _GL_CXXALIAS_SYS (creat, int, (const char *filename, mode_t mode)); # endif _GL_CXXALIASWARN (creat); #endif #if @GNULIB_FCNTL@ # if @REPLACE_FCNTL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fcntl # define fcntl rpl_fcntl # endif _GL_FUNCDECL_RPL (fcntl, int, (int fd, int action, ...)); _GL_CXXALIAS_RPL (fcntl, int, (int fd, int action, ...)); # if !GNULIB_defined_rpl_fcntl # define GNULIB_defined_rpl_fcntl 1 # endif # else # if !@HAVE_FCNTL@ _GL_FUNCDECL_SYS (fcntl, int, (int fd, int action, ...)); # if !GNULIB_defined_fcntl # define GNULIB_defined_fcntl 1 # endif # endif _GL_CXXALIAS_SYS (fcntl, int, (int fd, int action, ...)); # endif _GL_CXXALIASWARN (fcntl); #elif defined GNULIB_POSIXCHECK # undef fcntl # if HAVE_RAW_DECL_FCNTL _GL_WARN_ON_USE (fcntl, "fcntl is not always POSIX compliant - " "use gnulib module fcntl for portability"); # endif #endif #if @GNULIB_OPEN@ # if @REPLACE_OPEN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef open # define open rpl_open # endif _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); # elif defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef open # define open _open # endif _GL_CXXALIAS_MDA (open, int, (const char *filename, int flags, ...)); # else _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); # endif /* On HP-UX 11, in C++ mode, open() is defined as an inline function with a default argument. _GL_CXXALIASWARN does not work in this case. */ # if !defined __hpux _GL_CXXALIASWARN (open); # endif #elif defined GNULIB_POSIXCHECK # undef open /* Assume open is always declared. */ _GL_WARN_ON_USE (open, "open is not always POSIX compliant - " "use gnulib module open for portability"); #elif @GNULIB_MDA_OPEN@ /* On native Windows, map 'open' to '_open', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::open always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef open # define open _open # endif _GL_CXXALIAS_MDA (open, int, (const char *filename, int flags, ...)); # else _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); # endif # if !defined __hpux _GL_CXXALIASWARN (open); # endif #endif #if @GNULIB_OPENAT@ # if @REPLACE_OPENAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef openat # define openat rpl_openat # endif _GL_FUNCDECL_RPL (openat, int, (int fd, char const *file, int flags, /* mode_t mode */ ...) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (openat, int, (int fd, char const *file, int flags, /* mode_t mode */ ...)); # else # if !@HAVE_OPENAT@ _GL_FUNCDECL_SYS (openat, int, (int fd, char const *file, int flags, /* mode_t mode */ ...) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (openat, int, (int fd, char const *file, int flags, /* mode_t mode */ ...)); # endif _GL_CXXALIASWARN (openat); #elif defined GNULIB_POSIXCHECK # undef openat # if HAVE_RAW_DECL_OPENAT _GL_WARN_ON_USE (openat, "openat is not portable - " "use gnulib module openat for portability"); # endif #endif /* Fix up the FD_* macros, only known to be missing on mingw. */ #ifndef FD_CLOEXEC # define FD_CLOEXEC 1 #endif /* Fix up the supported F_* macros. Intentionally leave other F_* macros undefined. Only known to be missing on mingw. */ #ifndef F_DUPFD_CLOEXEC # define F_DUPFD_CLOEXEC 0x40000000 /* Witness variable: 1 if gnulib defined F_DUPFD_CLOEXEC, 0 otherwise. */ # define GNULIB_defined_F_DUPFD_CLOEXEC 1 #else # define GNULIB_defined_F_DUPFD_CLOEXEC 0 #endif #ifndef F_DUPFD # define F_DUPFD 1 #endif #ifndef F_GETFD # define F_GETFD 2 #endif /* Fix up the O_* macros. */ /* AIX 7.1 with XL C 12.1 defines O_CLOEXEC, O_NOFOLLOW, and O_TTY_INIT to values outside 'int' range, so omit these misdefinitions. But avoid namespace pollution on non-AIX systems. */ #ifdef _AIX # include <limits.h> # if defined O_CLOEXEC && ! (INT_MIN <= O_CLOEXEC && O_CLOEXEC <= INT_MAX) # undef O_CLOEXEC # endif # if defined O_NOFOLLOW && ! (INT_MIN <= O_NOFOLLOW && O_NOFOLLOW <= INT_MAX) # undef O_NOFOLLOW # endif # if defined O_TTY_INIT && ! (INT_MIN <= O_TTY_INIT && O_TTY_INIT <= INT_MAX) # undef O_TTY_INIT # endif #endif #if !defined O_DIRECT && defined O_DIRECTIO /* Tru64 spells it 'O_DIRECTIO'. */ # define O_DIRECT O_DIRECTIO #endif #if !defined O_CLOEXEC && defined O_NOINHERIT /* Mingw spells it 'O_NOINHERIT'. */ # define O_CLOEXEC O_NOINHERIT #endif #ifndef O_CLOEXEC # define O_CLOEXEC 0x40000000 /* Try to not collide with system O_* flags. */ # define GNULIB_defined_O_CLOEXEC 1 #else # define GNULIB_defined_O_CLOEXEC 0 #endif #ifndef O_DIRECT # define O_DIRECT 0 #endif #ifndef O_DIRECTORY # define O_DIRECTORY 0 #endif #ifndef O_DSYNC # define O_DSYNC 0 #endif #ifndef O_EXEC # define O_EXEC O_RDONLY /* This is often close enough in older systems. */ #endif #ifndef O_IGNORE_CTTY # define O_IGNORE_CTTY 0 #endif #ifndef O_NDELAY # define O_NDELAY 0 #endif #ifndef O_NOATIME # define O_NOATIME 0 #endif #ifndef O_NONBLOCK # define O_NONBLOCK O_NDELAY #endif /* If the gnulib module 'nonblocking' is in use, guarantee a working non-zero value of O_NONBLOCK. Otherwise, O_NONBLOCK is defined (above) to O_NDELAY or to 0 as fallback. */ #if @GNULIB_NONBLOCKING@ # if O_NONBLOCK # define GNULIB_defined_O_NONBLOCK 0 # else # define GNULIB_defined_O_NONBLOCK 1 # undef O_NONBLOCK # define O_NONBLOCK 0x40000000 # endif #endif #ifndef O_NOCTTY # define O_NOCTTY 0 #endif #ifndef O_NOFOLLOW # define O_NOFOLLOW 0 #endif #ifndef O_NOLINK # define O_NOLINK 0 #endif #ifndef O_NOLINKS # define O_NOLINKS 0 #endif #ifndef O_NOTRANS # define O_NOTRANS 0 #endif #ifndef O_RSYNC # define O_RSYNC 0 #endif #ifndef O_SEARCH # define O_SEARCH O_RDONLY /* This is often close enough in older systems. */ #endif #ifndef O_SYNC # define O_SYNC 0 #endif #ifndef O_TTY_INIT # define O_TTY_INIT 0 #endif #if ~O_ACCMODE & (O_RDONLY | O_WRONLY | O_RDWR | O_EXEC | O_SEARCH) # undef O_ACCMODE # define O_ACCMODE (O_RDONLY | O_WRONLY | O_RDWR | O_EXEC | O_SEARCH) #endif /* For systems that distinguish between text and binary I/O. O_BINARY is usually declared in fcntl.h */ #if !defined O_BINARY && defined _O_BINARY /* For MSC-compatible compilers. */ # define O_BINARY _O_BINARY # define O_TEXT _O_TEXT #endif #if defined __BEOS__ || defined __HAIKU__ /* BeOS 5 and Haiku have O_BINARY and O_TEXT, but they have no effect. */ # undef O_BINARY # undef O_TEXT #endif #ifndef O_BINARY # define O_BINARY 0 # define O_TEXT 0 #endif /* Fix up the AT_* macros. */ /* Work around a bug in Solaris 9 and 10: AT_FDCWD is positive. Its value exceeds INT_MAX, so its use as an int doesn't conform to the C standard, and GCC and Sun C complain in some cases. If the bug is present, undef AT_FDCWD here, so it can be redefined below. */ #if 0 < AT_FDCWD && AT_FDCWD == 0xffd19553 # undef AT_FDCWD #endif /* Use the same bit pattern as Solaris 9, but with the proper signedness. The bit pattern is important, in case this actually is Solaris with the above workaround. */ #ifndef AT_FDCWD # define AT_FDCWD (-3041965) #endif /* Use the same values as Solaris 9. This shouldn't matter, but there's no real reason to differ. */ #ifndef AT_SYMLINK_NOFOLLOW # define AT_SYMLINK_NOFOLLOW 4096 #endif #ifndef AT_REMOVEDIR # define AT_REMOVEDIR 1 #endif /* Solaris 9 lacks these two, so just pick unique values. */ #ifndef AT_SYMLINK_FOLLOW # define AT_SYMLINK_FOLLOW 2 #endif #ifndef AT_EACCESS # define AT_EACCESS 4 #endif /* Ignore this flag if not supported. */ #ifndef AT_NO_AUTOMOUNT # define AT_NO_AUTOMOUNT 0 #endif #endif /* _@GUARD_PREFIX@_FCNTL_H */ #endif /* _@GUARD_PREFIX@_FCNTL_H */ #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/basename.c�����������������������������������������������������������������������������0000644�0001750�0001750�00000003525�14436425345�015055� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* basename.c -- return the last element in a file name Copyright (C) 1990, 1998-2001, 2003-2006, 2009-2023 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 <https://www.gnu.org/licenses/>. */ #include <config.h> #include "dirname.h" #include <string.h> #include "xalloc.h" char * base_name (char const *name) { char const *base = last_component (name); idx_t length; int dotslash_len; if (*base) { length = base_len (base); /* Collapse a sequence of trailing slashes into one. */ length += ISSLASH (base[length]); /* On systems with drive letters, "a/b:c" must return "./b:c" rather than "b:c" to avoid confusion with a drive letter. On systems with pure POSIX semantics, this is not an issue. */ dotslash_len = FILE_SYSTEM_PREFIX_LEN (base) != 0 ? 2 : 0; } else { /* There is no last component, so NAME is a file system root or the empty string. */ base = name; length = base_len (base); dotslash_len = 0; } char *p = ximalloc (dotslash_len + length + 1); if (dotslash_len) { p[0] = '.'; p[1] = '/'; } /* Finally, copy the basename. */ memcpy (p + dotslash_len, base, length); p[dotslash_len + length] = '\0'; return p; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/glthread/������������������������������������������������������������������������������0000755�0001750�0001750�00000000000�14655401527�014722� 5����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/glthread/lock.c������������������������������������������������������������������������0000644�0001750�0001750�00000044211�14436425345�016021� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Locking in multithreaded situations. Copyright (C) 2005-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2005. Based on GCC's gthr-posix.h, gthr-posix95.h. */ #include <config.h> #include "glthread/lock.h" /* ========================================================================= */ #if USE_ISOC_THREADS || USE_ISOC_AND_POSIX_THREADS /* -------------------------- gl_lock_t datatype -------------------------- */ int glthread_lock_init (gl_lock_t *lock) { if (mtx_init (&lock->mutex, mtx_plain) != thrd_success) return ENOMEM; lock->init_needed = 0; return 0; } int glthread_lock_lock (gl_lock_t *lock) { if (lock->init_needed) call_once (&lock->init_once, lock->init_func); if (mtx_lock (&lock->mutex) != thrd_success) return EAGAIN; return 0; } int glthread_lock_unlock (gl_lock_t *lock) { if (lock->init_needed) call_once (&lock->init_once, lock->init_func); if (mtx_unlock (&lock->mutex) != thrd_success) return EINVAL; return 0; } int glthread_lock_destroy (gl_lock_t *lock) { if (lock->init_needed) call_once (&lock->init_once, lock->init_func); mtx_destroy (&lock->mutex); return 0; } /* ------------------------- gl_rwlock_t datatype ------------------------- */ int glthread_rwlock_init (gl_rwlock_t *lock) { if (mtx_init (&lock->lock, mtx_plain) != thrd_success || cnd_init (&lock->waiting_readers) != thrd_success || cnd_init (&lock->waiting_writers) != thrd_success) return ENOMEM; lock->waiting_writers_count = 0; lock->runcount = 0; lock->init_needed = 0; return 0; } int glthread_rwlock_rdlock (gl_rwlock_t *lock) { if (lock->init_needed) call_once (&lock->init_once, lock->init_func); if (mtx_lock (&lock->lock) != thrd_success) return EAGAIN; /* Test whether only readers are currently running, and whether the runcount field will not overflow, and whether no writer is waiting. The latter condition is because POSIX recommends that "write locks shall take precedence over read locks", to avoid "writer starvation". */ while (!(lock->runcount + 1 > 0 && lock->waiting_writers_count == 0)) { /* This thread has to wait for a while. Enqueue it among the waiting_readers. */ if (cnd_wait (&lock->waiting_readers, &lock->lock) != thrd_success) { mtx_unlock (&lock->lock); return EINVAL; } } lock->runcount++; if (mtx_unlock (&lock->lock) != thrd_success) return EINVAL; return 0; } int glthread_rwlock_wrlock (gl_rwlock_t *lock) { if (lock->init_needed) call_once (&lock->init_once, lock->init_func); if (mtx_lock (&lock->lock) != thrd_success) return EAGAIN; /* Test whether no readers or writers are currently running. */ while (!(lock->runcount == 0)) { /* This thread has to wait for a while. Enqueue it among the waiting_writers. */ lock->waiting_writers_count++; if (cnd_wait (&lock->waiting_writers, &lock->lock) != thrd_success) { lock->waiting_writers_count--; mtx_unlock (&lock->lock); return EINVAL; } lock->waiting_writers_count--; } lock->runcount--; /* runcount becomes -1 */ if (mtx_unlock (&lock->lock) != thrd_success) return EINVAL; return 0; } int glthread_rwlock_unlock (gl_rwlock_t *lock) { if (lock->init_needed) call_once (&lock->init_once, lock->init_func); if (mtx_lock (&lock->lock) != thrd_success) return EAGAIN; if (lock->runcount < 0) { /* Drop a writer lock. */ if (!(lock->runcount == -1)) { mtx_unlock (&lock->lock); return EINVAL; } lock->runcount = 0; } else { /* Drop a reader lock. */ if (!(lock->runcount > 0)) { mtx_unlock (&lock->lock); return EINVAL; } lock->runcount--; } if (lock->runcount == 0) { /* POSIX recommends that "write locks shall take precedence over read locks", to avoid "writer starvation". */ if (lock->waiting_writers_count > 0) { /* Wake up one of the waiting writers. */ if (cnd_signal (&lock->waiting_writers) != thrd_success) { mtx_unlock (&lock->lock); return EINVAL; } } else { /* Wake up all waiting readers. */ if (cnd_broadcast (&lock->waiting_readers) != thrd_success) { mtx_unlock (&lock->lock); return EINVAL; } } } if (mtx_unlock (&lock->lock) != thrd_success) return EINVAL; return 0; } int glthread_rwlock_destroy (gl_rwlock_t *lock) { if (lock->init_needed) call_once (&lock->init_once, lock->init_func); mtx_destroy (&lock->lock); cnd_destroy (&lock->waiting_readers); cnd_destroy (&lock->waiting_writers); return 0; } /* --------------------- gl_recursive_lock_t datatype --------------------- */ int glthread_recursive_lock_init (gl_recursive_lock_t *lock) { if (mtx_init (&lock->mutex, mtx_plain | mtx_recursive) != thrd_success) return ENOMEM; lock->init_needed = 0; return 0; } int glthread_recursive_lock_lock (gl_recursive_lock_t *lock) { if (lock->init_needed) call_once (&lock->init_once, lock->init_func); if (mtx_lock (&lock->mutex) != thrd_success) return EAGAIN; return 0; } int glthread_recursive_lock_unlock (gl_recursive_lock_t *lock) { if (lock->init_needed) call_once (&lock->init_once, lock->init_func); if (mtx_unlock (&lock->mutex) != thrd_success) return EINVAL; return 0; } int glthread_recursive_lock_destroy (gl_recursive_lock_t *lock) { if (lock->init_needed) call_once (&lock->init_once, lock->init_func); mtx_destroy (&lock->mutex); return 0; } /* -------------------------- gl_once_t datatype -------------------------- */ #endif /* ========================================================================= */ #if USE_POSIX_THREADS /* -------------------------- gl_lock_t datatype -------------------------- */ /* ------------------------- gl_rwlock_t datatype ------------------------- */ # if HAVE_PTHREAD_RWLOCK && (HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER || (defined PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP && (__GNU_LIBRARY__ > 1))) # if defined PTHREAD_RWLOCK_INITIALIZER || defined PTHREAD_RWLOCK_INITIALIZER_NP # if !HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER /* glibc with bug https://sourceware.org/bugzilla/show_bug.cgi?id=13701 */ int glthread_rwlock_init_for_glibc (pthread_rwlock_t *lock) { pthread_rwlockattr_t attributes; int err; err = pthread_rwlockattr_init (&attributes); if (err != 0) return err; /* Note: PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP is the only value that causes the writer to be preferred. PTHREAD_RWLOCK_PREFER_WRITER_NP does not do this; see http://man7.org/linux/man-pages/man3/pthread_rwlockattr_setkind_np.3.html */ err = pthread_rwlockattr_setkind_np (&attributes, PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP); if (err == 0) err = pthread_rwlock_init(lock, &attributes); /* pthread_rwlockattr_destroy always returns 0. It cannot influence the return value. */ pthread_rwlockattr_destroy (&attributes); return err; } # endif # else int glthread_rwlock_init_multithreaded (gl_rwlock_t *lock) { int err; err = pthread_rwlock_init (&lock->rwlock, NULL); if (err != 0) return err; lock->initialized = 1; return 0; } int glthread_rwlock_rdlock_multithreaded (gl_rwlock_t *lock) { if (!lock->initialized) { int err; err = pthread_mutex_lock (&lock->guard); if (err != 0) return err; if (!lock->initialized) { err = glthread_rwlock_init_multithreaded (lock); if (err != 0) { pthread_mutex_unlock (&lock->guard); return err; } } err = pthread_mutex_unlock (&lock->guard); if (err != 0) return err; } return pthread_rwlock_rdlock (&lock->rwlock); } int glthread_rwlock_wrlock_multithreaded (gl_rwlock_t *lock) { if (!lock->initialized) { int err; err = pthread_mutex_lock (&lock->guard); if (err != 0) return err; if (!lock->initialized) { err = glthread_rwlock_init_multithreaded (lock); if (err != 0) { pthread_mutex_unlock (&lock->guard); return err; } } err = pthread_mutex_unlock (&lock->guard); if (err != 0) return err; } return pthread_rwlock_wrlock (&lock->rwlock); } int glthread_rwlock_unlock_multithreaded (gl_rwlock_t *lock) { if (!lock->initialized) return EINVAL; return pthread_rwlock_unlock (&lock->rwlock); } int glthread_rwlock_destroy_multithreaded (gl_rwlock_t *lock) { int err; if (!lock->initialized) return EINVAL; err = pthread_rwlock_destroy (&lock->rwlock); if (err != 0) return err; lock->initialized = 0; return 0; } # endif # else int glthread_rwlock_init_multithreaded (gl_rwlock_t *lock) { int err; err = pthread_mutex_init (&lock->lock, NULL); if (err != 0) return err; err = pthread_cond_init (&lock->waiting_readers, NULL); if (err != 0) return err; err = pthread_cond_init (&lock->waiting_writers, NULL); if (err != 0) return err; lock->waiting_writers_count = 0; lock->runcount = 0; return 0; } int glthread_rwlock_rdlock_multithreaded (gl_rwlock_t *lock) { int err; err = pthread_mutex_lock (&lock->lock); if (err != 0) return err; /* Test whether only readers are currently running, and whether the runcount field will not overflow, and whether no writer is waiting. The latter condition is because POSIX recommends that "write locks shall take precedence over read locks", to avoid "writer starvation". */ while (!(lock->runcount + 1 > 0 && lock->waiting_writers_count == 0)) { /* This thread has to wait for a while. Enqueue it among the waiting_readers. */ err = pthread_cond_wait (&lock->waiting_readers, &lock->lock); if (err != 0) { pthread_mutex_unlock (&lock->lock); return err; } } lock->runcount++; return pthread_mutex_unlock (&lock->lock); } int glthread_rwlock_wrlock_multithreaded (gl_rwlock_t *lock) { int err; err = pthread_mutex_lock (&lock->lock); if (err != 0) return err; /* Test whether no readers or writers are currently running. */ while (!(lock->runcount == 0)) { /* This thread has to wait for a while. Enqueue it among the waiting_writers. */ lock->waiting_writers_count++; err = pthread_cond_wait (&lock->waiting_writers, &lock->lock); if (err != 0) { lock->waiting_writers_count--; pthread_mutex_unlock (&lock->lock); return err; } lock->waiting_writers_count--; } lock->runcount--; /* runcount becomes -1 */ return pthread_mutex_unlock (&lock->lock); } int glthread_rwlock_unlock_multithreaded (gl_rwlock_t *lock) { int err; err = pthread_mutex_lock (&lock->lock); if (err != 0) return err; if (lock->runcount < 0) { /* Drop a writer lock. */ if (!(lock->runcount == -1)) { pthread_mutex_unlock (&lock->lock); return EINVAL; } lock->runcount = 0; } else { /* Drop a reader lock. */ if (!(lock->runcount > 0)) { pthread_mutex_unlock (&lock->lock); return EINVAL; } lock->runcount--; } if (lock->runcount == 0) { /* POSIX recommends that "write locks shall take precedence over read locks", to avoid "writer starvation". */ if (lock->waiting_writers_count > 0) { /* Wake up one of the waiting writers. */ err = pthread_cond_signal (&lock->waiting_writers); if (err != 0) { pthread_mutex_unlock (&lock->lock); return err; } } else { /* Wake up all waiting readers. */ err = pthread_cond_broadcast (&lock->waiting_readers); if (err != 0) { pthread_mutex_unlock (&lock->lock); return err; } } } return pthread_mutex_unlock (&lock->lock); } int glthread_rwlock_destroy_multithreaded (gl_rwlock_t *lock) { int err; err = pthread_mutex_destroy (&lock->lock); if (err != 0) return err; err = pthread_cond_destroy (&lock->waiting_readers); if (err != 0) return err; err = pthread_cond_destroy (&lock->waiting_writers); if (err != 0) return err; return 0; } # endif /* --------------------- gl_recursive_lock_t datatype --------------------- */ # if HAVE_PTHREAD_MUTEX_RECURSIVE # if defined PTHREAD_RECURSIVE_MUTEX_INITIALIZER || defined PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP int glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock) { pthread_mutexattr_t attributes; int err; err = pthread_mutexattr_init (&attributes); if (err != 0) return err; err = pthread_mutexattr_settype (&attributes, PTHREAD_MUTEX_RECURSIVE); if (err != 0) { pthread_mutexattr_destroy (&attributes); return err; } err = pthread_mutex_init (lock, &attributes); if (err != 0) { pthread_mutexattr_destroy (&attributes); return err; } err = pthread_mutexattr_destroy (&attributes); if (err != 0) return err; return 0; } # else int glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock) { pthread_mutexattr_t attributes; int err; err = pthread_mutexattr_init (&attributes); if (err != 0) return err; err = pthread_mutexattr_settype (&attributes, PTHREAD_MUTEX_RECURSIVE); if (err != 0) { pthread_mutexattr_destroy (&attributes); return err; } err = pthread_mutex_init (&lock->recmutex, &attributes); if (err != 0) { pthread_mutexattr_destroy (&attributes); return err; } err = pthread_mutexattr_destroy (&attributes); if (err != 0) return err; lock->initialized = 1; return 0; } int glthread_recursive_lock_lock_multithreaded (gl_recursive_lock_t *lock) { if (!lock->initialized) { int err; err = pthread_mutex_lock (&lock->guard); if (err != 0) return err; if (!lock->initialized) { err = glthread_recursive_lock_init_multithreaded (lock); if (err != 0) { pthread_mutex_unlock (&lock->guard); return err; } } err = pthread_mutex_unlock (&lock->guard); if (err != 0) return err; } return pthread_mutex_lock (&lock->recmutex); } int glthread_recursive_lock_unlock_multithreaded (gl_recursive_lock_t *lock) { if (!lock->initialized) return EINVAL; return pthread_mutex_unlock (&lock->recmutex); } int glthread_recursive_lock_destroy_multithreaded (gl_recursive_lock_t *lock) { int err; if (!lock->initialized) return EINVAL; err = pthread_mutex_destroy (&lock->recmutex); if (err != 0) return err; lock->initialized = 0; return 0; } # endif # else int glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock) { int err; err = pthread_mutex_init (&lock->mutex, NULL); if (err != 0) return err; lock->owner = (pthread_t) 0; lock->depth = 0; return 0; } int glthread_recursive_lock_lock_multithreaded (gl_recursive_lock_t *lock) { pthread_t self = pthread_self (); if (lock->owner != self) { int err; err = pthread_mutex_lock (&lock->mutex); if (err != 0) return err; lock->owner = self; } if (++(lock->depth) == 0) /* wraparound? */ { lock->depth--; return EAGAIN; } return 0; } int glthread_recursive_lock_unlock_multithreaded (gl_recursive_lock_t *lock) { if (lock->owner != pthread_self ()) return EPERM; if (lock->depth == 0) return EINVAL; if (--(lock->depth) == 0) { lock->owner = (pthread_t) 0; return pthread_mutex_unlock (&lock->mutex); } else return 0; } int glthread_recursive_lock_destroy_multithreaded (gl_recursive_lock_t *lock) { if (lock->owner != (pthread_t) 0) return EBUSY; return pthread_mutex_destroy (&lock->mutex); } # endif /* -------------------------- gl_once_t datatype -------------------------- */ static const pthread_once_t fresh_once = PTHREAD_ONCE_INIT; int glthread_once_singlethreaded (pthread_once_t *once_control) { /* We don't know whether pthread_once_t is an integer type, a floating-point type, a pointer type, or a structure type. */ char *firstbyte = (char *)once_control; if (*firstbyte == *(const char *)&fresh_once) { /* First time use of once_control. Invert the first byte. */ *firstbyte = ~ *(const char *)&fresh_once; return 1; } else return 0; } # if !(PTHREAD_IN_USE_DETECTION_HARD || USE_POSIX_THREADS_WEAK) int glthread_once_multithreaded (pthread_once_t *once_control, void (*init_function) (void)) { int err = pthread_once (once_control, init_function); if (err == ENOSYS) { /* This happens on FreeBSD 11: The pthread_once function in libc returns ENOSYS. */ if (glthread_once_singlethreaded (once_control)) init_function (); return 0; } return err; } # endif #endif /* ========================================================================= */ #if USE_WINDOWS_THREADS #endif /* ========================================================================= */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/glthread/threadlib.c�������������������������������������������������������������������0000644�0001750�0001750�00000005120�14436425345�017023� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Multithreading primitives. Copyright (C) 2005-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2005. */ #include <config.h> /* ========================================================================= */ #if USE_POSIX_THREADS || USE_ISOC_AND_POSIX_THREADS /* Use the POSIX threads library. */ # include <errno.h> # include <pthread.h> # include <stdlib.h> # if PTHREAD_IN_USE_DETECTION_HARD # if defined __FreeBSD__ || defined __DragonFly__ /* FreeBSD */ /* Test using pthread_key_create. */ int glthread_in_use (void) { static int tested; static int result; /* 1: linked with -lpthread, 0: only with libc */ if (!tested) { pthread_key_t key; int err = pthread_key_create (&key, NULL); if (err == ENOSYS) result = 0; else { result = 1; if (err == 0) pthread_key_delete (key); } tested = 1; } return result; } # else /* Solaris, HP-UX */ /* Test using pthread_create. */ /* The function to be executed by a dummy thread. */ static void * dummy_thread_func (void *arg) { return arg; } int glthread_in_use (void) { static int tested; static int result; /* 1: linked with -lpthread, 0: only with libc */ if (!tested) { pthread_t thread; if (pthread_create (&thread, NULL, dummy_thread_func, NULL) != 0) /* Thread creation failed. */ result = 0; else { /* Thread creation works. */ void *retval; if (pthread_join (thread, &retval) != 0) abort (); result = 1; } tested = 1; } return result; } # endif # endif #endif /* ========================================================================= */ /* This declaration is solely to ensure that after preprocessing this file is never empty. */ typedef int dummy; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/glthread/lock.h������������������������������������������������������������������������0000644�0001750�0001750�00000076101�14436425345�016031� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Locking in multithreaded situations. Copyright (C) 2005-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2005. Based on GCC's gthr-posix.h, gthr-posix95.h, gthr-win32.h. */ /* This file contains locking primitives for use with a given thread library. It does not contain primitives for creating threads or for other synchronization primitives. Normal (non-recursive) locks: Type: gl_lock_t Declaration: gl_lock_define(extern, name) Initializer: gl_lock_define_initialized(, name) Initialization: gl_lock_init (name); Taking the lock: gl_lock_lock (name); Releasing the lock: gl_lock_unlock (name); De-initialization: gl_lock_destroy (name); Equivalent functions with control of error handling: Initialization: err = glthread_lock_init (&name); Taking the lock: err = glthread_lock_lock (&name); Releasing the lock: err = glthread_lock_unlock (&name); De-initialization: err = glthread_lock_destroy (&name); Read-Write (non-recursive) locks: Type: gl_rwlock_t Declaration: gl_rwlock_define(extern, name) Initializer: gl_rwlock_define_initialized(, name) Initialization: gl_rwlock_init (name); Taking the lock: gl_rwlock_rdlock (name); gl_rwlock_wrlock (name); Releasing the lock: gl_rwlock_unlock (name); De-initialization: gl_rwlock_destroy (name); Equivalent functions with control of error handling: Initialization: err = glthread_rwlock_init (&name); Taking the lock: err = glthread_rwlock_rdlock (&name); err = glthread_rwlock_wrlock (&name); Releasing the lock: err = glthread_rwlock_unlock (&name); De-initialization: err = glthread_rwlock_destroy (&name); Recursive locks: Type: gl_recursive_lock_t Declaration: gl_recursive_lock_define(extern, name) Initializer: gl_recursive_lock_define_initialized(, name) Initialization: gl_recursive_lock_init (name); Taking the lock: gl_recursive_lock_lock (name); Releasing the lock: gl_recursive_lock_unlock (name); De-initialization: gl_recursive_lock_destroy (name); Equivalent functions with control of error handling: Initialization: err = glthread_recursive_lock_init (&name); Taking the lock: err = glthread_recursive_lock_lock (&name); Releasing the lock: err = glthread_recursive_lock_unlock (&name); De-initialization: err = glthread_recursive_lock_destroy (&name); Once-only execution: Type: gl_once_t Initializer: gl_once_define(extern, name) Execution: gl_once (name, initfunction); Equivalent functions with control of error handling: Execution: err = glthread_once (&name, initfunction); */ #ifndef _LOCK_H #define _LOCK_H /* This file uses HAVE_THREADS_H, HAVE_PTHREAD_RWLOCK, HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER, PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP, HAVE_PTHREAD_MUTEX_RECURSIVE. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif #include <errno.h> #include <stdlib.h> #if !defined c11_threads_in_use # if HAVE_THREADS_H && USE_POSIX_THREADS_FROM_LIBC # define c11_threads_in_use() 1 # elif HAVE_THREADS_H && USE_POSIX_THREADS_WEAK # include <threads.h> # pragma weak thrd_exit # define c11_threads_in_use() (thrd_exit != NULL) # else # define c11_threads_in_use() 0 # endif #endif /* ========================================================================= */ #if USE_ISOC_THREADS || USE_ISOC_AND_POSIX_THREADS /* Use the ISO C threads library. */ # include <threads.h> # ifdef __cplusplus extern "C" { # endif /* -------------------------- gl_lock_t datatype -------------------------- */ typedef struct { int volatile init_needed; once_flag init_once; void (*init_func) (void); mtx_t mutex; } gl_lock_t; # define gl_lock_define(STORAGECLASS, NAME) \ STORAGECLASS gl_lock_t NAME; # define gl_lock_define_initialized(STORAGECLASS, NAME) \ static void _atomic_init_##NAME (void); \ STORAGECLASS gl_lock_t NAME = \ { 1, ONCE_FLAG_INIT, _atomic_init_##NAME }; \ static void _atomic_init_##NAME (void) \ { \ if (glthread_lock_init (&(NAME))) \ abort (); \ } extern int glthread_lock_init (gl_lock_t *lock); extern int glthread_lock_lock (gl_lock_t *lock); extern int glthread_lock_unlock (gl_lock_t *lock); extern int glthread_lock_destroy (gl_lock_t *lock); /* ------------------------- gl_rwlock_t datatype ------------------------- */ typedef struct { int volatile init_needed; once_flag init_once; void (*init_func) (void); mtx_t lock; /* protects the remaining fields */ cnd_t waiting_readers; /* waiting readers */ cnd_t waiting_writers; /* waiting writers */ unsigned int waiting_writers_count; /* number of waiting writers */ int runcount; /* number of readers running, or -1 when a writer runs */ } gl_rwlock_t; # define gl_rwlock_define(STORAGECLASS, NAME) \ STORAGECLASS gl_rwlock_t NAME; # define gl_rwlock_define_initialized(STORAGECLASS, NAME) \ static void _atomic_init_##NAME (void); \ STORAGECLASS gl_rwlock_t NAME = \ { 1, ONCE_FLAG_INIT, _atomic_init_##NAME }; \ static void _atomic_init_##NAME (void) \ { \ if (glthread_rwlock_init (&(NAME))) \ abort (); \ } extern int glthread_rwlock_init (gl_rwlock_t *lock); extern int glthread_rwlock_rdlock (gl_rwlock_t *lock); extern int glthread_rwlock_wrlock (gl_rwlock_t *lock); extern int glthread_rwlock_unlock (gl_rwlock_t *lock); extern int glthread_rwlock_destroy (gl_rwlock_t *lock); /* --------------------- gl_recursive_lock_t datatype --------------------- */ typedef struct { int volatile init_needed; once_flag init_once; void (*init_func) (void); mtx_t mutex; } gl_recursive_lock_t; # define gl_recursive_lock_define(STORAGECLASS, NAME) \ STORAGECLASS gl_recursive_lock_t NAME; # define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \ static void _atomic_init_##NAME (void); \ STORAGECLASS gl_recursive_lock_t NAME = \ { 1, ONCE_FLAG_INIT, _atomic_init_##NAME }; \ static void _atomic_init_##NAME (void) \ { \ if (glthread_recursive_lock_init (&(NAME))) \ abort (); \ } extern int glthread_recursive_lock_init (gl_recursive_lock_t *lock); extern int glthread_recursive_lock_lock (gl_recursive_lock_t *lock); extern int glthread_recursive_lock_unlock (gl_recursive_lock_t *lock); extern int glthread_recursive_lock_destroy (gl_recursive_lock_t *lock); /* -------------------------- gl_once_t datatype -------------------------- */ typedef once_flag gl_once_t; # define gl_once_define(STORAGECLASS, NAME) \ STORAGECLASS once_flag NAME = ONCE_FLAG_INIT; # define glthread_once(ONCE_CONTROL, INITFUNCTION) \ (call_once (ONCE_CONTROL, INITFUNCTION), 0) # ifdef __cplusplus } # endif #endif /* ========================================================================= */ #if USE_POSIX_THREADS /* Use the POSIX threads library. */ # include <pthread.h> # ifdef __cplusplus extern "C" { # endif # if PTHREAD_IN_USE_DETECTION_HARD /* The pthread_in_use() detection needs to be done at runtime. */ # define pthread_in_use() \ glthread_in_use () extern int glthread_in_use (void); # endif # if USE_POSIX_THREADS_WEAK /* Use weak references to the POSIX threads library. */ /* Weak references avoid dragging in external libraries if the other parts of the program don't use them. Here we use them, because we don't want every program that uses libintl to depend on libpthread. This assumes that libpthread would not be loaded after libintl; i.e. if libintl is loaded first, by an executable that does not depend on libpthread, and then a module is dynamically loaded that depends on libpthread, libintl will not be multithread-safe. */ /* The way to test at runtime whether libpthread is present is to test whether a function pointer's value, such as &pthread_mutex_init, is non-NULL. However, some versions of GCC have a bug through which, in PIC mode, &foo != NULL always evaluates to true if there is a direct call to foo(...) in the same function. To avoid this, we test the address of a function in libpthread that we don't use. */ # pragma weak pthread_mutex_init # pragma weak pthread_mutex_lock # pragma weak pthread_mutex_unlock # pragma weak pthread_mutex_destroy # pragma weak pthread_rwlock_init # pragma weak pthread_rwlock_rdlock # pragma weak pthread_rwlock_wrlock # pragma weak pthread_rwlock_unlock # pragma weak pthread_rwlock_destroy # pragma weak pthread_once # pragma weak pthread_cond_init # pragma weak pthread_cond_wait # pragma weak pthread_cond_signal # pragma weak pthread_cond_broadcast # pragma weak pthread_cond_destroy # pragma weak pthread_mutexattr_init # pragma weak pthread_mutexattr_settype # pragma weak pthread_mutexattr_destroy # pragma weak pthread_rwlockattr_init # if __GNU_LIBRARY__ > 1 # pragma weak pthread_rwlockattr_setkind_np # endif # pragma weak pthread_rwlockattr_destroy # ifndef pthread_self # pragma weak pthread_self # endif # if !PTHREAD_IN_USE_DETECTION_HARD /* Considering all platforms with USE_POSIX_THREADS_WEAK, only few symbols can be used to determine whether libpthread is in use. These are: pthread_mutexattr_gettype pthread_rwlockattr_destroy pthread_rwlockattr_init */ # pragma weak pthread_mutexattr_gettype # define pthread_in_use() \ (pthread_mutexattr_gettype != NULL || c11_threads_in_use ()) # endif # else # if !PTHREAD_IN_USE_DETECTION_HARD # define pthread_in_use() 1 # endif # endif /* -------------------------- gl_lock_t datatype -------------------------- */ typedef pthread_mutex_t gl_lock_t; # define gl_lock_define(STORAGECLASS, NAME) \ STORAGECLASS pthread_mutex_t NAME; # define gl_lock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS pthread_mutex_t NAME = gl_lock_initializer; # define gl_lock_initializer \ PTHREAD_MUTEX_INITIALIZER # define glthread_lock_init(LOCK) \ (pthread_in_use () ? pthread_mutex_init (LOCK, NULL) : 0) # define glthread_lock_lock(LOCK) \ (pthread_in_use () ? pthread_mutex_lock (LOCK) : 0) # define glthread_lock_unlock(LOCK) \ (pthread_in_use () ? pthread_mutex_unlock (LOCK) : 0) # define glthread_lock_destroy(LOCK) \ (pthread_in_use () ? pthread_mutex_destroy (LOCK) : 0) /* ------------------------- gl_rwlock_t datatype ------------------------- */ # if HAVE_PTHREAD_RWLOCK && (HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER || (defined PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP && (__GNU_LIBRARY__ > 1))) # if defined PTHREAD_RWLOCK_INITIALIZER || defined PTHREAD_RWLOCK_INITIALIZER_NP typedef pthread_rwlock_t gl_rwlock_t; # define gl_rwlock_define(STORAGECLASS, NAME) \ STORAGECLASS pthread_rwlock_t NAME; # define gl_rwlock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS pthread_rwlock_t NAME = gl_rwlock_initializer; # if HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER # if defined PTHREAD_RWLOCK_INITIALIZER # define gl_rwlock_initializer \ PTHREAD_RWLOCK_INITIALIZER # else # define gl_rwlock_initializer \ PTHREAD_RWLOCK_INITIALIZER_NP # endif # define glthread_rwlock_init(LOCK) \ (pthread_in_use () ? pthread_rwlock_init (LOCK, NULL) : 0) # else /* glibc with bug https://sourceware.org/bugzilla/show_bug.cgi?id=13701 */ # define gl_rwlock_initializer \ PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP # define glthread_rwlock_init(LOCK) \ (pthread_in_use () ? glthread_rwlock_init_for_glibc (LOCK) : 0) extern int glthread_rwlock_init_for_glibc (pthread_rwlock_t *lock); # endif # define glthread_rwlock_rdlock(LOCK) \ (pthread_in_use () ? pthread_rwlock_rdlock (LOCK) : 0) # define glthread_rwlock_wrlock(LOCK) \ (pthread_in_use () ? pthread_rwlock_wrlock (LOCK) : 0) # define glthread_rwlock_unlock(LOCK) \ (pthread_in_use () ? pthread_rwlock_unlock (LOCK) : 0) # define glthread_rwlock_destroy(LOCK) \ (pthread_in_use () ? pthread_rwlock_destroy (LOCK) : 0) # else typedef struct { int initialized; pthread_mutex_t guard; /* protects the initialization */ pthread_rwlock_t rwlock; /* read-write lock */ } gl_rwlock_t; # define gl_rwlock_define(STORAGECLASS, NAME) \ STORAGECLASS gl_rwlock_t NAME; # define gl_rwlock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS gl_rwlock_t NAME = gl_rwlock_initializer; # define gl_rwlock_initializer \ { 0, PTHREAD_MUTEX_INITIALIZER } # define glthread_rwlock_init(LOCK) \ (pthread_in_use () ? glthread_rwlock_init_multithreaded (LOCK) : 0) # define glthread_rwlock_rdlock(LOCK) \ (pthread_in_use () ? glthread_rwlock_rdlock_multithreaded (LOCK) : 0) # define glthread_rwlock_wrlock(LOCK) \ (pthread_in_use () ? glthread_rwlock_wrlock_multithreaded (LOCK) : 0) # define glthread_rwlock_unlock(LOCK) \ (pthread_in_use () ? glthread_rwlock_unlock_multithreaded (LOCK) : 0) # define glthread_rwlock_destroy(LOCK) \ (pthread_in_use () ? glthread_rwlock_destroy_multithreaded (LOCK) : 0) extern int glthread_rwlock_init_multithreaded (gl_rwlock_t *lock); extern int glthread_rwlock_rdlock_multithreaded (gl_rwlock_t *lock); extern int glthread_rwlock_wrlock_multithreaded (gl_rwlock_t *lock); extern int glthread_rwlock_unlock_multithreaded (gl_rwlock_t *lock); extern int glthread_rwlock_destroy_multithreaded (gl_rwlock_t *lock); # endif # else typedef struct { pthread_mutex_t lock; /* protects the remaining fields */ pthread_cond_t waiting_readers; /* waiting readers */ pthread_cond_t waiting_writers; /* waiting writers */ unsigned int waiting_writers_count; /* number of waiting writers */ int runcount; /* number of readers running, or -1 when a writer runs */ } gl_rwlock_t; # define gl_rwlock_define(STORAGECLASS, NAME) \ STORAGECLASS gl_rwlock_t NAME; # define gl_rwlock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS gl_rwlock_t NAME = gl_rwlock_initializer; # define gl_rwlock_initializer \ { PTHREAD_MUTEX_INITIALIZER, PTHREAD_COND_INITIALIZER, PTHREAD_COND_INITIALIZER, 0, 0 } # define glthread_rwlock_init(LOCK) \ (pthread_in_use () ? glthread_rwlock_init_multithreaded (LOCK) : 0) # define glthread_rwlock_rdlock(LOCK) \ (pthread_in_use () ? glthread_rwlock_rdlock_multithreaded (LOCK) : 0) # define glthread_rwlock_wrlock(LOCK) \ (pthread_in_use () ? glthread_rwlock_wrlock_multithreaded (LOCK) : 0) # define glthread_rwlock_unlock(LOCK) \ (pthread_in_use () ? glthread_rwlock_unlock_multithreaded (LOCK) : 0) # define glthread_rwlock_destroy(LOCK) \ (pthread_in_use () ? glthread_rwlock_destroy_multithreaded (LOCK) : 0) extern int glthread_rwlock_init_multithreaded (gl_rwlock_t *lock); extern int glthread_rwlock_rdlock_multithreaded (gl_rwlock_t *lock); extern int glthread_rwlock_wrlock_multithreaded (gl_rwlock_t *lock); extern int glthread_rwlock_unlock_multithreaded (gl_rwlock_t *lock); extern int glthread_rwlock_destroy_multithreaded (gl_rwlock_t *lock); # endif /* --------------------- gl_recursive_lock_t datatype --------------------- */ # if HAVE_PTHREAD_MUTEX_RECURSIVE # if defined PTHREAD_RECURSIVE_MUTEX_INITIALIZER || defined PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP typedef pthread_mutex_t gl_recursive_lock_t; # define gl_recursive_lock_define(STORAGECLASS, NAME) \ STORAGECLASS pthread_mutex_t NAME; # define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS pthread_mutex_t NAME = gl_recursive_lock_initializer; # ifdef PTHREAD_RECURSIVE_MUTEX_INITIALIZER # define gl_recursive_lock_initializer \ PTHREAD_RECURSIVE_MUTEX_INITIALIZER # else # define gl_recursive_lock_initializer \ PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP # endif # define glthread_recursive_lock_init(LOCK) \ (pthread_in_use () ? glthread_recursive_lock_init_multithreaded (LOCK) : 0) # define glthread_recursive_lock_lock(LOCK) \ (pthread_in_use () ? pthread_mutex_lock (LOCK) : 0) # define glthread_recursive_lock_unlock(LOCK) \ (pthread_in_use () ? pthread_mutex_unlock (LOCK) : 0) # define glthread_recursive_lock_destroy(LOCK) \ (pthread_in_use () ? pthread_mutex_destroy (LOCK) : 0) extern int glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock); # else typedef struct { pthread_mutex_t recmutex; /* recursive mutex */ pthread_mutex_t guard; /* protects the initialization */ int initialized; } gl_recursive_lock_t; # define gl_recursive_lock_define(STORAGECLASS, NAME) \ STORAGECLASS gl_recursive_lock_t NAME; # define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS gl_recursive_lock_t NAME = gl_recursive_lock_initializer; # define gl_recursive_lock_initializer \ { PTHREAD_MUTEX_INITIALIZER, PTHREAD_MUTEX_INITIALIZER, 0 } # define glthread_recursive_lock_init(LOCK) \ (pthread_in_use () ? glthread_recursive_lock_init_multithreaded (LOCK) : 0) # define glthread_recursive_lock_lock(LOCK) \ (pthread_in_use () ? glthread_recursive_lock_lock_multithreaded (LOCK) : 0) # define glthread_recursive_lock_unlock(LOCK) \ (pthread_in_use () ? glthread_recursive_lock_unlock_multithreaded (LOCK) : 0) # define glthread_recursive_lock_destroy(LOCK) \ (pthread_in_use () ? glthread_recursive_lock_destroy_multithreaded (LOCK) : 0) extern int glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock); extern int glthread_recursive_lock_lock_multithreaded (gl_recursive_lock_t *lock); extern int glthread_recursive_lock_unlock_multithreaded (gl_recursive_lock_t *lock); extern int glthread_recursive_lock_destroy_multithreaded (gl_recursive_lock_t *lock); # endif # else /* Old versions of POSIX threads on Solaris did not have recursive locks. We have to implement them ourselves. */ typedef struct { pthread_mutex_t mutex; pthread_t owner; unsigned long depth; } gl_recursive_lock_t; # define gl_recursive_lock_define(STORAGECLASS, NAME) \ STORAGECLASS gl_recursive_lock_t NAME; # define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS gl_recursive_lock_t NAME = gl_recursive_lock_initializer; # define gl_recursive_lock_initializer \ { PTHREAD_MUTEX_INITIALIZER, (pthread_t) 0, 0 } # define glthread_recursive_lock_init(LOCK) \ (pthread_in_use () ? glthread_recursive_lock_init_multithreaded (LOCK) : 0) # define glthread_recursive_lock_lock(LOCK) \ (pthread_in_use () ? glthread_recursive_lock_lock_multithreaded (LOCK) : 0) # define glthread_recursive_lock_unlock(LOCK) \ (pthread_in_use () ? glthread_recursive_lock_unlock_multithreaded (LOCK) : 0) # define glthread_recursive_lock_destroy(LOCK) \ (pthread_in_use () ? glthread_recursive_lock_destroy_multithreaded (LOCK) : 0) extern int glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock); extern int glthread_recursive_lock_lock_multithreaded (gl_recursive_lock_t *lock); extern int glthread_recursive_lock_unlock_multithreaded (gl_recursive_lock_t *lock); extern int glthread_recursive_lock_destroy_multithreaded (gl_recursive_lock_t *lock); # endif /* -------------------------- gl_once_t datatype -------------------------- */ typedef pthread_once_t gl_once_t; # define gl_once_define(STORAGECLASS, NAME) \ STORAGECLASS pthread_once_t NAME = PTHREAD_ONCE_INIT; # if PTHREAD_IN_USE_DETECTION_HARD || USE_POSIX_THREADS_WEAK # define glthread_once(ONCE_CONTROL, INITFUNCTION) \ (pthread_in_use () \ ? pthread_once (ONCE_CONTROL, INITFUNCTION) \ : (glthread_once_singlethreaded (ONCE_CONTROL) ? (INITFUNCTION (), 0) : 0)) # else # define glthread_once(ONCE_CONTROL, INITFUNCTION) \ (pthread_in_use () \ ? glthread_once_multithreaded (ONCE_CONTROL, INITFUNCTION) \ : (glthread_once_singlethreaded (ONCE_CONTROL) ? (INITFUNCTION (), 0) : 0)) extern int glthread_once_multithreaded (pthread_once_t *once_control, void (*init_function) (void)); # endif extern int glthread_once_singlethreaded (pthread_once_t *once_control); # ifdef __cplusplus } # endif #endif /* ========================================================================= */ #if USE_WINDOWS_THREADS # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> # include "windows-mutex.h" # include "windows-rwlock.h" # include "windows-recmutex.h" # include "windows-once.h" # ifdef __cplusplus extern "C" { # endif /* We can use CRITICAL_SECTION directly, rather than the native Windows Event, Mutex, Semaphore types, because - we need only to synchronize inside a single process (address space), not inter-process locking, - we don't need to support trylock operations. (TryEnterCriticalSection does not work on Windows 95/98/ME. Packages that need trylock usually define their own mutex type.) */ /* There is no way to statically initialize a CRITICAL_SECTION. It needs to be done lazily, once only. For this we need spinlocks. */ /* -------------------------- gl_lock_t datatype -------------------------- */ typedef glwthread_mutex_t gl_lock_t; # define gl_lock_define(STORAGECLASS, NAME) \ STORAGECLASS gl_lock_t NAME; # define gl_lock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS gl_lock_t NAME = gl_lock_initializer; # define gl_lock_initializer \ GLWTHREAD_MUTEX_INIT # define glthread_lock_init(LOCK) \ (glwthread_mutex_init (LOCK), 0) # define glthread_lock_lock(LOCK) \ glwthread_mutex_lock (LOCK) # define glthread_lock_unlock(LOCK) \ glwthread_mutex_unlock (LOCK) # define glthread_lock_destroy(LOCK) \ glwthread_mutex_destroy (LOCK) /* ------------------------- gl_rwlock_t datatype ------------------------- */ typedef glwthread_rwlock_t gl_rwlock_t; # define gl_rwlock_define(STORAGECLASS, NAME) \ STORAGECLASS gl_rwlock_t NAME; # define gl_rwlock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS gl_rwlock_t NAME = gl_rwlock_initializer; # define gl_rwlock_initializer \ GLWTHREAD_RWLOCK_INIT # define glthread_rwlock_init(LOCK) \ (glwthread_rwlock_init (LOCK), 0) # define glthread_rwlock_rdlock(LOCK) \ glwthread_rwlock_rdlock (LOCK) # define glthread_rwlock_wrlock(LOCK) \ glwthread_rwlock_wrlock (LOCK) # define glthread_rwlock_unlock(LOCK) \ glwthread_rwlock_unlock (LOCK) # define glthread_rwlock_destroy(LOCK) \ glwthread_rwlock_destroy (LOCK) /* --------------------- gl_recursive_lock_t datatype --------------------- */ typedef glwthread_recmutex_t gl_recursive_lock_t; # define gl_recursive_lock_define(STORAGECLASS, NAME) \ STORAGECLASS gl_recursive_lock_t NAME; # define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS gl_recursive_lock_t NAME = gl_recursive_lock_initializer; # define gl_recursive_lock_initializer \ GLWTHREAD_RECMUTEX_INIT # define glthread_recursive_lock_init(LOCK) \ (glwthread_recmutex_init (LOCK), 0) # define glthread_recursive_lock_lock(LOCK) \ glwthread_recmutex_lock (LOCK) # define glthread_recursive_lock_unlock(LOCK) \ glwthread_recmutex_unlock (LOCK) # define glthread_recursive_lock_destroy(LOCK) \ glwthread_recmutex_destroy (LOCK) /* -------------------------- gl_once_t datatype -------------------------- */ typedef glwthread_once_t gl_once_t; # define gl_once_define(STORAGECLASS, NAME) \ STORAGECLASS gl_once_t NAME = GLWTHREAD_ONCE_INIT; # define glthread_once(ONCE_CONTROL, INITFUNCTION) \ (glwthread_once (ONCE_CONTROL, INITFUNCTION), 0) # ifdef __cplusplus } # endif #endif /* ========================================================================= */ #if !(USE_ISOC_THREADS || USE_POSIX_THREADS || USE_ISOC_AND_POSIX_THREADS || USE_WINDOWS_THREADS) /* Provide dummy implementation if threads are not supported. */ /* -------------------------- gl_lock_t datatype -------------------------- */ typedef int gl_lock_t; # define gl_lock_define(STORAGECLASS, NAME) # define gl_lock_define_initialized(STORAGECLASS, NAME) # define glthread_lock_init(NAME) 0 # define glthread_lock_lock(NAME) 0 # define glthread_lock_unlock(NAME) 0 # define glthread_lock_destroy(NAME) 0 /* ------------------------- gl_rwlock_t datatype ------------------------- */ typedef int gl_rwlock_t; # define gl_rwlock_define(STORAGECLASS, NAME) # define gl_rwlock_define_initialized(STORAGECLASS, NAME) # define glthread_rwlock_init(NAME) 0 # define glthread_rwlock_rdlock(NAME) 0 # define glthread_rwlock_wrlock(NAME) 0 # define glthread_rwlock_unlock(NAME) 0 # define glthread_rwlock_destroy(NAME) 0 /* --------------------- gl_recursive_lock_t datatype --------------------- */ typedef int gl_recursive_lock_t; # define gl_recursive_lock_define(STORAGECLASS, NAME) # define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) # define glthread_recursive_lock_init(NAME) 0 # define glthread_recursive_lock_lock(NAME) 0 # define glthread_recursive_lock_unlock(NAME) 0 # define glthread_recursive_lock_destroy(NAME) 0 /* -------------------------- gl_once_t datatype -------------------------- */ typedef int gl_once_t; # define gl_once_define(STORAGECLASS, NAME) \ STORAGECLASS gl_once_t NAME = 0; # define glthread_once(ONCE_CONTROL, INITFUNCTION) \ (*(ONCE_CONTROL) == 0 ? (*(ONCE_CONTROL) = ~ 0, INITFUNCTION (), 0) : 0) #endif /* ========================================================================= */ /* Macros with built-in error handling. */ /* -------------------------- gl_lock_t datatype -------------------------- */ #define gl_lock_init(NAME) \ do \ { \ if (glthread_lock_init (&NAME)) \ abort (); \ } \ while (0) #define gl_lock_lock(NAME) \ do \ { \ if (glthread_lock_lock (&NAME)) \ abort (); \ } \ while (0) #define gl_lock_unlock(NAME) \ do \ { \ if (glthread_lock_unlock (&NAME)) \ abort (); \ } \ while (0) #define gl_lock_destroy(NAME) \ do \ { \ if (glthread_lock_destroy (&NAME)) \ abort (); \ } \ while (0) /* ------------------------- gl_rwlock_t datatype ------------------------- */ #define gl_rwlock_init(NAME) \ do \ { \ if (glthread_rwlock_init (&NAME)) \ abort (); \ } \ while (0) #define gl_rwlock_rdlock(NAME) \ do \ { \ if (glthread_rwlock_rdlock (&NAME)) \ abort (); \ } \ while (0) #define gl_rwlock_wrlock(NAME) \ do \ { \ if (glthread_rwlock_wrlock (&NAME)) \ abort (); \ } \ while (0) #define gl_rwlock_unlock(NAME) \ do \ { \ if (glthread_rwlock_unlock (&NAME)) \ abort (); \ } \ while (0) #define gl_rwlock_destroy(NAME) \ do \ { \ if (glthread_rwlock_destroy (&NAME)) \ abort (); \ } \ while (0) /* --------------------- gl_recursive_lock_t datatype --------------------- */ #define gl_recursive_lock_init(NAME) \ do \ { \ if (glthread_recursive_lock_init (&NAME)) \ abort (); \ } \ while (0) #define gl_recursive_lock_lock(NAME) \ do \ { \ if (glthread_recursive_lock_lock (&NAME)) \ abort (); \ } \ while (0) #define gl_recursive_lock_unlock(NAME) \ do \ { \ if (glthread_recursive_lock_unlock (&NAME)) \ abort (); \ } \ while (0) #define gl_recursive_lock_destroy(NAME) \ do \ { \ if (glthread_recursive_lock_destroy (&NAME)) \ abort (); \ } \ while (0) /* -------------------------- gl_once_t datatype -------------------------- */ #define gl_once(NAME, INITFUNCTION) \ do \ { \ if (glthread_once (&NAME, INITFUNCTION)) \ abort (); \ } \ while (0) /* ========================================================================= */ #endif /* _LOCK_H */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/sys_types.in.h�������������������������������������������������������������������������0000644�0001750�0001750�00000006555�14436425346�015765� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Provide a more complete sys/types.h. Copyright (C) 2011-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* This file uses #include_next of a system file that defines time_t. For the 'year2038' module to work right, <config.h> needs to have been included before. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif #if defined _WIN32 && !defined __CYGWIN__ \ && (defined __need_off_t || defined __need___off64_t \ || defined __need_ssize_t || defined __need_time_t) /* Special invocation convention inside mingw header files. */ #@INCLUDE_NEXT@ @NEXT_SYS_TYPES_H@ #else /* Normal invocation convention. */ #ifndef _@GUARD_PREFIX@_SYS_TYPES_H /* The include_next requires a split double-inclusion guard. */ # define _GL_INCLUDING_SYS_TYPES_H #@INCLUDE_NEXT@ @NEXT_SYS_TYPES_H@ # undef _GL_INCLUDING_SYS_TYPES_H #ifndef _@GUARD_PREFIX@_SYS_TYPES_H #define _@GUARD_PREFIX@_SYS_TYPES_H /* Override off_t if Large File Support is requested on native Windows. */ #if @WINDOWS_64_BIT_OFF_T@ /* Same as int64_t in <stdint.h>. */ # if defined _MSC_VER # define off_t __int64 # else # define off_t long long int # endif /* Indicator, for gnulib internal purposes. */ # define _GL_WINDOWS_64_BIT_OFF_T 1 #endif /* Override dev_t and ino_t if distinguishable inodes support is requested on native Windows. */ #if @WINDOWS_STAT_INODES@ # if @WINDOWS_STAT_INODES@ == 2 /* Experimental, not useful in Windows 10. */ /* Define dev_t to a 64-bit type. */ # if !defined GNULIB_defined_dev_t typedef unsigned long long int rpl_dev_t; # undef dev_t # define dev_t rpl_dev_t # define GNULIB_defined_dev_t 1 # endif /* Define ino_t to a 128-bit type. */ # if !defined GNULIB_defined_ino_t /* MSVC does not have a 128-bit integer type. GCC has a 128-bit integer type __int128, but only on 64-bit targets. */ typedef struct { unsigned long long int _gl_ino[2]; } rpl_ino_t; # undef ino_t # define ino_t rpl_ino_t # define GNULIB_defined_ino_t 1 # endif # else /* @WINDOWS_STAT_INODES@ == 1 */ /* Define ino_t to a 64-bit type. */ # if !defined GNULIB_defined_ino_t typedef unsigned long long int rpl_ino_t; # undef ino_t # define ino_t rpl_ino_t # define GNULIB_defined_ino_t 1 # endif # endif /* Indicator, for gnulib internal purposes. */ # define _GL_WINDOWS_STAT_INODES @WINDOWS_STAT_INODES@ #endif /* MSVC 9 defines size_t in <stddef.h>, not in <sys/types.h>. */ /* But avoid namespace pollution on glibc systems. */ #if (defined _WIN32 && ! defined __CYGWIN__) && ! defined __GLIBC__ # include <stddef.h> #endif #endif /* _@GUARD_PREFIX@_SYS_TYPES_H */ #endif /* _@GUARD_PREFIX@_SYS_TYPES_H */ #endif /* __need_XXX */ ���������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/windows-mutex.h������������������������������������������������������������������������0000644�0001750�0001750�00000003175�14436425346�016143� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Plain mutexes (native Windows implementation). Copyright (C) 2005-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2005. Based on GCC's gthr-win32.h. */ #ifndef _WINDOWS_MUTEX_H #define _WINDOWS_MUTEX_H #define WIN32_LEAN_AND_MEAN /* avoid including junk */ #include <windows.h> #include "windows-initguard.h" typedef struct { glwthread_initguard_t guard; /* protects the initialization */ CRITICAL_SECTION lock; } glwthread_mutex_t; #define GLWTHREAD_MUTEX_INIT { GLWTHREAD_INITGUARD_INIT } #ifdef __cplusplus extern "C" { #endif extern void glwthread_mutex_init (glwthread_mutex_t *mutex); extern int glwthread_mutex_lock (glwthread_mutex_t *mutex); extern int glwthread_mutex_trylock (glwthread_mutex_t *mutex); extern int glwthread_mutex_unlock (glwthread_mutex_t *mutex); extern int glwthread_mutex_destroy (glwthread_mutex_t *mutex); #ifdef __cplusplus } #endif #endif /* _WINDOWS_MUTEX_H */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/mbtowc-lock.h��������������������������������������������������������������������������0000644�0001750�0001750�00000006304�14436425346�015527� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Use the internal lock used by mbrtowc and mbrtoc32. Copyright (C) 2019-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2019-2020. */ /* Use a lock, so that no two threads can invoke mbtowc at the same time. */ static inline int mbtowc_unlocked (wchar_t *pwc, const char *p, size_t m) { /* Put the hidden internal state of mbtowc into its initial state. This is needed at least with glibc, uClibc, and MSVC CRT. See <https://sourceware.org/bugzilla/show_bug.cgi?id=9674>. */ mbtowc (NULL, NULL, 0); return mbtowc (pwc, p, m); } /* Prohibit renaming this symbol. */ #undef gl_get_mbtowc_lock #if GNULIB_MBRTOWC_SINGLE_THREAD /* All uses of this function are in a single thread. No locking needed. */ static int mbtowc_with_lock (wchar_t *pwc, const char *p, size_t m) { return mbtowc_unlocked (pwc, p, m); } #elif defined _WIN32 && !defined __CYGWIN__ extern __declspec(dllimport) CRITICAL_SECTION *gl_get_mbtowc_lock (void); static int mbtowc_with_lock (wchar_t *pwc, const char *p, size_t m) { CRITICAL_SECTION *lock = gl_get_mbtowc_lock (); int ret; EnterCriticalSection (lock); ret = mbtowc_unlocked (pwc, p, m); LeaveCriticalSection (lock); return ret; } #elif HAVE_PTHREAD_API /* AIX, IRIX, Cygwin */ extern # if defined _WIN32 || defined __CYGWIN__ __declspec(dllimport) # endif pthread_mutex_t *gl_get_mbtowc_lock (void); # if HAVE_WEAK_SYMBOLS /* IRIX */ /* Avoid the need to link with '-lpthread'. */ # pragma weak pthread_mutex_lock # pragma weak pthread_mutex_unlock /* Determine whether libpthread is in use. */ # pragma weak pthread_mutexattr_gettype /* See the comments in lock.h. */ # define pthread_in_use() \ (pthread_mutexattr_gettype != NULL || c11_threads_in_use ()) # else # define pthread_in_use() 1 # endif static int mbtowc_with_lock (wchar_t *pwc, const char *p, size_t m) { if (pthread_in_use()) { pthread_mutex_t *lock = gl_get_mbtowc_lock (); int ret; if (pthread_mutex_lock (lock)) abort (); ret = mbtowc_unlocked (pwc, p, m); if (pthread_mutex_unlock (lock)) abort (); return ret; } else return mbtowc_unlocked (pwc, p, m); } #elif HAVE_THREADS_H extern mtx_t *gl_get_mbtowc_lock (void); static int mbtowc_with_lock (wchar_t *pwc, const char *p, size_t m) { mtx_t *lock = gl_get_mbtowc_lock (); int ret; if (mtx_lock (lock) != thrd_success) abort (); ret = mbtowc_unlocked (pwc, p, m); if (mtx_unlock (lock) != thrd_success) abort (); return ret; } #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/windows-rwlock.c�����������������������������������������������������������������������0000644�0001750�0001750�00000027273�14436425347�016303� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Read-write locks (native Windows implementation). Copyright (C) 2005-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2005. Based on GCC's gthr-win32.h. */ #include <config.h> /* Specification. */ #include "windows-rwlock.h" #include <errno.h> #include <stdlib.h> /* Don't assume that UNICODE is not defined. */ #undef CreateEvent #define CreateEvent CreateEventA /* In this file, the waitqueues are implemented as circular arrays. */ #define glwthread_waitqueue_t glwthread_carray_waitqueue_t static void glwthread_waitqueue_init (glwthread_waitqueue_t *wq) { wq->array = NULL; wq->count = 0; wq->alloc = 0; wq->offset = 0; } /* Enqueues the current thread, represented by an event, in a wait queue. Returns INVALID_HANDLE_VALUE if an allocation failure occurs. */ static HANDLE glwthread_waitqueue_add (glwthread_waitqueue_t *wq) { HANDLE event; unsigned int index; if (wq->count == wq->alloc) { unsigned int new_alloc = 2 * wq->alloc + 1; HANDLE *new_array = (HANDLE *) realloc (wq->array, new_alloc * sizeof (HANDLE)); if (new_array == NULL) /* No more memory. */ return INVALID_HANDLE_VALUE; /* Now is a good opportunity to rotate the array so that its contents starts at offset 0. */ if (wq->offset > 0) { unsigned int old_count = wq->count; unsigned int old_alloc = wq->alloc; unsigned int old_offset = wq->offset; unsigned int i; if (old_offset + old_count > old_alloc) { unsigned int limit = old_offset + old_count - old_alloc; for (i = 0; i < limit; i++) new_array[old_alloc + i] = new_array[i]; } for (i = 0; i < old_count; i++) new_array[i] = new_array[old_offset + i]; wq->offset = 0; } wq->array = new_array; wq->alloc = new_alloc; } /* Whether the created event is a manual-reset one or an auto-reset one, does not matter, since we will wait on it only once. */ event = CreateEvent (NULL, TRUE, FALSE, NULL); if (event == INVALID_HANDLE_VALUE) /* No way to allocate an event. */ return INVALID_HANDLE_VALUE; index = wq->offset + wq->count; if (index >= wq->alloc) index -= wq->alloc; wq->array[index] = event; wq->count++; return event; } /* Notifies the first thread from a wait queue and dequeues it. */ static void glwthread_waitqueue_notify_first (glwthread_waitqueue_t *wq) { SetEvent (wq->array[wq->offset + 0]); wq->offset++; wq->count--; if (wq->count == 0 || wq->offset == wq->alloc) wq->offset = 0; } /* Notifies all threads from a wait queue and dequeues them all. */ static void glwthread_waitqueue_notify_all (glwthread_waitqueue_t *wq) { unsigned int i; for (i = 0; i < wq->count; i++) { unsigned int index = wq->offset + i; if (index >= wq->alloc) index -= wq->alloc; SetEvent (wq->array[index]); } wq->count = 0; wq->offset = 0; } void glwthread_rwlock_init (glwthread_rwlock_t *lock) { InitializeCriticalSection (&lock->lock); glwthread_waitqueue_init (&lock->waiting_readers); glwthread_waitqueue_init (&lock->waiting_writers); lock->runcount = 0; lock->guard.done = 1; } int glwthread_rwlock_rdlock (glwthread_rwlock_t *lock) { if (!lock->guard.done) { if (InterlockedIncrement (&lock->guard.started) == 0) /* This thread is the first one to need this lock. Initialize it. */ glwthread_rwlock_init (lock); else { /* Don't let lock->guard.started grow and wrap around. */ InterlockedDecrement (&lock->guard.started); /* Yield the CPU while waiting for another thread to finish initializing this lock. */ while (!lock->guard.done) Sleep (0); } } EnterCriticalSection (&lock->lock); /* Test whether only readers are currently running, and whether the runcount field will not overflow, and whether no writer is waiting. The latter condition is because POSIX recommends that "write locks shall take precedence over read locks", to avoid "writer starvation". */ if (!(lock->runcount + 1 > 0 && lock->waiting_writers.count == 0)) { /* This thread has to wait for a while. Enqueue it among the waiting_readers. */ HANDLE event = glwthread_waitqueue_add (&lock->waiting_readers); if (event != INVALID_HANDLE_VALUE) { DWORD result; LeaveCriticalSection (&lock->lock); /* Wait until another thread signals this event. */ result = WaitForSingleObject (event, INFINITE); if (result == WAIT_FAILED || result == WAIT_TIMEOUT) abort (); CloseHandle (event); /* The thread which signalled the event already did the bookkeeping: removed us from the waiting_readers, incremented lock->runcount. */ if (!(lock->runcount > 0)) abort (); return 0; } else { /* Allocation failure. Weird. */ do { LeaveCriticalSection (&lock->lock); Sleep (1); EnterCriticalSection (&lock->lock); } while (!(lock->runcount + 1 > 0)); } } lock->runcount++; LeaveCriticalSection (&lock->lock); return 0; } int glwthread_rwlock_wrlock (glwthread_rwlock_t *lock) { if (!lock->guard.done) { if (InterlockedIncrement (&lock->guard.started) == 0) /* This thread is the first one to need this lock. Initialize it. */ glwthread_rwlock_init (lock); else { /* Don't let lock->guard.started grow and wrap around. */ InterlockedDecrement (&lock->guard.started); /* Yield the CPU while waiting for another thread to finish initializing this lock. */ while (!lock->guard.done) Sleep (0); } } EnterCriticalSection (&lock->lock); /* Test whether no readers or writers are currently running. */ if (!(lock->runcount == 0)) { /* This thread has to wait for a while. Enqueue it among the waiting_writers. */ HANDLE event = glwthread_waitqueue_add (&lock->waiting_writers); if (event != INVALID_HANDLE_VALUE) { DWORD result; LeaveCriticalSection (&lock->lock); /* Wait until another thread signals this event. */ result = WaitForSingleObject (event, INFINITE); if (result == WAIT_FAILED || result == WAIT_TIMEOUT) abort (); CloseHandle (event); /* The thread which signalled the event already did the bookkeeping: removed us from the waiting_writers, set lock->runcount = -1. */ if (!(lock->runcount == -1)) abort (); return 0; } else { /* Allocation failure. Weird. */ do { LeaveCriticalSection (&lock->lock); Sleep (1); EnterCriticalSection (&lock->lock); } while (!(lock->runcount == 0)); } } lock->runcount--; /* runcount becomes -1 */ LeaveCriticalSection (&lock->lock); return 0; } int glwthread_rwlock_tryrdlock (glwthread_rwlock_t *lock) { if (!lock->guard.done) { if (InterlockedIncrement (&lock->guard.started) == 0) /* This thread is the first one to need this lock. Initialize it. */ glwthread_rwlock_init (lock); else { /* Don't let lock->guard.started grow and wrap around. */ InterlockedDecrement (&lock->guard.started); /* Yield the CPU while waiting for another thread to finish initializing this lock. */ while (!lock->guard.done) Sleep (0); } } /* It's OK to wait for this critical section, because it is never taken for a long time. */ EnterCriticalSection (&lock->lock); /* Test whether only readers are currently running, and whether the runcount field will not overflow, and whether no writer is waiting. The latter condition is because POSIX recommends that "write locks shall take precedence over read locks", to avoid "writer starvation". */ if (!(lock->runcount + 1 > 0 && lock->waiting_writers.count == 0)) { /* This thread would have to wait for a while. Return instead. */ LeaveCriticalSection (&lock->lock); return EBUSY; } lock->runcount++; LeaveCriticalSection (&lock->lock); return 0; } int glwthread_rwlock_trywrlock (glwthread_rwlock_t *lock) { if (!lock->guard.done) { if (InterlockedIncrement (&lock->guard.started) == 0) /* This thread is the first one to need this lock. Initialize it. */ glwthread_rwlock_init (lock); else { /* Don't let lock->guard.started grow and wrap around. */ InterlockedDecrement (&lock->guard.started); /* Yield the CPU while waiting for another thread to finish initializing this lock. */ while (!lock->guard.done) Sleep (0); } } /* It's OK to wait for this critical section, because it is never taken for a long time. */ EnterCriticalSection (&lock->lock); /* Test whether no readers or writers are currently running. */ if (!(lock->runcount == 0)) { /* This thread would have to wait for a while. Return instead. */ LeaveCriticalSection (&lock->lock); return EBUSY; } lock->runcount--; /* runcount becomes -1 */ LeaveCriticalSection (&lock->lock); return 0; } int glwthread_rwlock_unlock (glwthread_rwlock_t *lock) { if (!lock->guard.done) return EINVAL; EnterCriticalSection (&lock->lock); if (lock->runcount < 0) { /* Drop a writer lock. */ if (!(lock->runcount == -1)) abort (); lock->runcount = 0; } else { /* Drop a reader lock. */ if (!(lock->runcount > 0)) { LeaveCriticalSection (&lock->lock); return EPERM; } lock->runcount--; } if (lock->runcount == 0) { /* POSIX recommends that "write locks shall take precedence over read locks", to avoid "writer starvation". */ if (lock->waiting_writers.count > 0) { /* Wake up one of the waiting writers. */ lock->runcount--; glwthread_waitqueue_notify_first (&lock->waiting_writers); } else { /* Wake up all waiting readers. */ lock->runcount += lock->waiting_readers.count; glwthread_waitqueue_notify_all (&lock->waiting_readers); } } LeaveCriticalSection (&lock->lock); return 0; } int glwthread_rwlock_destroy (glwthread_rwlock_t *lock) { if (!lock->guard.done) return EINVAL; if (lock->runcount != 0) return EBUSY; DeleteCriticalSection (&lock->lock); if (lock->waiting_readers.array != NULL) free (lock->waiting_readers.array); if (lock->waiting_writers.array != NULL) free (lock->waiting_writers.array); lock->guard.done = 0; return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/mbrtowc.c������������������������������������������������������������������������������0000644�0001750�0001750�00000007147�14436425346�014764� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert multibyte character to wide character. Copyright (C) 1999-2002, 2005-2023 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2008. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #if GNULIB_defined_mbstate_t /* Implement mbrtowc() on top of mbtowc() for the non-UTF-8 locales and directly for the UTF-8 locales. */ # include <errno.h> # include <stdint.h> # include <stdlib.h> # if defined _WIN32 && !defined __CYGWIN__ # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> # elif HAVE_PTHREAD_API # include <pthread.h> # if HAVE_THREADS_H && HAVE_WEAK_SYMBOLS # include <threads.h> # pragma weak thrd_exit # define c11_threads_in_use() (thrd_exit != NULL) # else # define c11_threads_in_use() 0 # endif # elif HAVE_THREADS_H # include <threads.h> # endif # include "attribute.h" # include "lc-charset-dispatch.h" # include "mbtowc-lock.h" static_assert (sizeof (mbstate_t) >= 4); static char internal_state[4]; size_t mbrtowc (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps) { # define FITS_IN_CHAR_TYPE(wc) ((wc) <= WCHAR_MAX) # include "mbrtowc-impl.h" } #else /* Override the system's mbrtowc() function. */ # if MBRTOWC_IN_C_LOCALE_MAYBE_EILSEQ # include "hard-locale.h" # include <locale.h> # endif # undef mbrtowc size_t rpl_mbrtowc (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps) { size_t ret; wchar_t wc; # if MBRTOWC_NULL_ARG2_BUG || MBRTOWC_RETVAL_BUG || MBRTOWC_EMPTY_INPUT_BUG if (s == NULL) { pwc = NULL; s = ""; n = 1; } # endif # if MBRTOWC_EMPTY_INPUT_BUG if (n == 0) return (size_t) -2; # endif if (! pwc) pwc = &wc; # if MBRTOWC_RETVAL_BUG { static mbstate_t internal_state; /* Override mbrtowc's internal state. We cannot call mbsinit() on the hidden internal state, but we can call it on our variable. */ if (ps == NULL) ps = &internal_state; if (!mbsinit (ps)) { /* Parse the rest of the multibyte character byte for byte. */ size_t count = 0; for (; n > 0; s++, n--) { ret = mbrtowc (&wc, s, 1, ps); if (ret == (size_t)(-1)) return (size_t)(-1); count++; if (ret != (size_t)(-2)) { /* The multibyte character has been completed. */ *pwc = wc; return (wc == 0 ? 0 : count); } } return (size_t)(-2); } } # endif # if MBRTOWC_STORES_INCOMPLETE_BUG ret = mbrtowc (&wc, s, n, ps); if (ret < (size_t) -2 && pwc != NULL) *pwc = wc; # else ret = mbrtowc (pwc, s, n, ps); # endif # if MBRTOWC_NUL_RETVAL_BUG if (ret < (size_t) -2 && !*pwc) return 0; # endif # if MBRTOWC_IN_C_LOCALE_MAYBE_EILSEQ if ((size_t) -2 <= ret && n != 0 && ! hard_locale (LC_CTYPE)) { unsigned char uc = *s; *pwc = uc; return 1; } # endif return ret; } #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/timegm.c�������������������������������������������������������������������������������0000644�0001750�0001750�00000002664�14436425346�014570� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert UTC calendar time to simple time. Like mktime but assumes UTC. Copyright (C) 1994-2023 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ #ifndef _LIBC # include <libc-config.h> #endif #include <time.h> #include <errno.h> #include "mktime-internal.h" __time64_t __timegm64 (struct tm *tmp) { static mktime_offset_t gmtime_offset; tmp->tm_isdst = 0; return __mktime_internal (tmp, __gmtime64_r, &gmtime_offset); } #if defined _LIBC && __TIMESIZE != 64 libc_hidden_def (__timegm64) time_t timegm (struct tm *tmp) { struct tm tm = *tmp; __time64_t t = __timegm64 (&tm); if (in_time_t_range (t)) { *tmp = tm; return t; } else { __set_errno (EOVERFLOW); return -1; } } #endif ����������������������������������������������������������������������������rush-2.4/gnu/mbrtowc-impl-utf8.h��������������������������������������������������������������������0000644�0001750�0001750�00000012255�14436425346�016610� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert multibyte character to wide character. Copyright (C) 1999-2002, 2005-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2008. */ /* This file contains the part of the body of the mbrtowc and mbrtoc32 functions that handles the special case of the UTF-8 encoding. */ /* Cf. unistr/u8-mbtouc.c. */ unsigned char c = (unsigned char) p[0]; if (c < 0x80) { if (pwc != NULL) *pwc = c; res = (c == 0 ? 0 : 1); goto success; } if (c >= 0xc2) { if (c < 0xe0) { if (m == 1) goto incomplete; else /* m >= 2 */ { unsigned char c2 = (unsigned char) p[1]; if ((c2 ^ 0x80) < 0x40) { if (pwc != NULL) *pwc = ((unsigned int) (c & 0x1f) << 6) | (unsigned int) (c2 ^ 0x80); res = 2; goto success; } } } else if (c < 0xf0) { if (m == 1) goto incomplete; else { unsigned char c2 = (unsigned char) p[1]; if ((c2 ^ 0x80) < 0x40 && (c >= 0xe1 || c2 >= 0xa0) && (c != 0xed || c2 < 0xa0)) { if (m == 2) goto incomplete; else /* m >= 3 */ { unsigned char c3 = (unsigned char) p[2]; if ((c3 ^ 0x80) < 0x40) { unsigned int wc = (((unsigned int) (c & 0x0f) << 12) | ((unsigned int) (c2 ^ 0x80) << 6) | (unsigned int) (c3 ^ 0x80)); if (FITS_IN_CHAR_TYPE (wc)) { if (pwc != NULL) *pwc = wc; res = 3; goto success; } } } } } } else if (c <= 0xf4) { if (m == 1) goto incomplete; else { unsigned char c2 = (unsigned char) p[1]; if ((c2 ^ 0x80) < 0x40 && (c >= 0xf1 || c2 >= 0x90) && (c < 0xf4 || (/* c == 0xf4 && */ c2 < 0x90))) { if (m == 2) goto incomplete; else { unsigned char c3 = (unsigned char) p[2]; if ((c3 ^ 0x80) < 0x40) { if (m == 3) goto incomplete; else /* m >= 4 */ { unsigned char c4 = (unsigned char) p[3]; if ((c4 ^ 0x80) < 0x40) { unsigned int wc = (((unsigned int) (c & 0x07) << 18) | ((unsigned int) (c2 ^ 0x80) << 12) | ((unsigned int) (c3 ^ 0x80) << 6) | (unsigned int) (c4 ^ 0x80)); if (FITS_IN_CHAR_TYPE (wc)) { if (pwc != NULL) *pwc = wc; res = 4; goto success; } } } } } } } } } goto invalid; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/tzset.c��������������������������������������������������������������������������������0000644�0001750�0001750�00000005433�14436425346�014454� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Provide tzset for systems that don't have it or for which it's broken. Copyright (C) 2001-2003, 2005-2007, 2009-2023 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* written by Jim Meyering */ #include <config.h> /* Specification. */ #include <time.h> #include <stdlib.h> #include <string.h> void rpl_tzset (void) #undef tzset { #if defined _WIN32 && ! defined __CYGWIN__ /* Rectify the value of the environment variable TZ. There are four possible kinds of such values: - Traditional US time zone names, e.g. "PST8PDT". Syntax: see <https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/tzset> - Time zone names based on geography, that contain one or more slashes, e.g. "Europe/Moscow". - Time zone names based on geography, without slashes, e.g. "Singapore". - Time zone names that contain explicit DST rules. Syntax: see <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html#tag_08_03> The Microsoft CRT understands only the first kind. It produces incorrect results if the value of TZ is of the other kinds. But in a Cygwin environment, /etc/profile.d/tzset.sh sets TZ to a value of the second kind for most geographies, or of the first kind in a few other geographies. If it is of the second kind, neutralize it. For the Microsoft CRT, an absent or empty TZ means the time zone that the user has set in the Windows Control Panel. If the value of TZ is of the third or fourth kind -- Cygwin programs understand these syntaxes as well --, it does not matter whether we neutralize it or not, since these values occur only when a Cygwin user has set TZ explicitly; this case is 1. rare and 2. under the user's responsibility. */ const char *tz = getenv ("TZ"); if (tz != NULL && strchr (tz, '/') != NULL) _putenv ("TZ="); /* On native Windows, tzset() is deprecated. Use _tzset() instead. See <https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/posix-tzset> <https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/tzset> */ _tzset (); #else tzset (); #endif } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/gnu/arg-nonnull.h��������������������������������������������������������������������������0000644�0001750�0001750�00000002353�14436425345�015541� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A C macro for declaring that specific arguments must not be NULL. Copyright (C) 2009-2023 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools that the values passed as arguments n, ..., m must be non-NULL pointers. n = 1 stands for the first argument, n = 2 for the second argument etc. */ #ifndef _GL_ARG_NONNULL # if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || defined __clang__ # define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params)) # else # define _GL_ARG_NONNULL(params) # endif #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/AUTHORS������������������������������������������������������������������������������������0000644�0001750�0001750�00000000042�14643176116�013403� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Sergey Poznyakoff gray@gnu.org.ua ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/lib/���������������������������������������������������������������������������������������0000755�0001750�0001750�00000000000�14655401527�013105� 5����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/lib/i18n.c���������������������������������������������������������������������������������0000644�0001750�0001750�00000002622�14643176117�014033� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* This file is part of GNU Rush. Copyright (C) 2009-2024 Sergey Poznyakoff GNU Rush is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GNU Rush is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include <gettext.h> #include <locale.h> #include <librush.h> #include <xalloc.h> void rush_i18n_init() { setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, LOCALEDIR); textdomain(PACKAGE); } const char * user_gettext(const char *locale, const char *domain, const char *dir, const char *msg) { if (locale) { char *save_locale = setlocale(LC_ALL, NULL); if (save_locale && (save_locale = strdup(save_locale))) { if (domain && dir) bindtextdomain(domain, dir); setlocale(LC_ALL, locale); msg = dgettext(domain, msg); setlocale(LC_ALL, save_locale); bindtextdomain(PACKAGE, LOCALEDIR); free(save_locale); } } return msg; } ��������������������������������������������������������������������������������������������������������������rush-2.4/lib/wordsplit/�����������������������������������������������������������������������������0000755�0001750�0001750�00000000000�14655401527�015134� 5����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/lib/wordsplit/wordsplit.h������������������������������������������������������������������0000644�0001750�0001750�00000031135�14263614056�017335� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* wordsplit - a word splitter Copyright (C) 2009-2021 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. */ const char *ws_namechar; /* [Input] (WRDSO_NAMECHAR) Characters that can be parts of a variable name, in addition to alphanumerics and underscore. */ 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 /* ws_namechar member is initialized */ #define WRDSO_NAMECHAR 0x00010000 #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 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/lib/wordsplit/wordsplit.c������������������������������������������������������������������0000644�0001750�0001750�00000172551�14263614056�017340� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* wordsplit - a word splitter Copyright (C) 2009-2021 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 == '_') static inline int is_name_char (struct wordsplit *wsp, int c) { return ISALNUM (c) || c == '_' || ((wsp->ws_options & WRDSO_NAMECHAR) && strchr (wsp->ws_namechar, 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); if (ec == WRDSE_USAGE) errno = EINVAL; 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 & ~WRDSO_MAXWORDS; wss->ws_namechar = wsp->ws_namechar; 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) return _wsplt_seterr (wsp, WRDSE_USAGE); } 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; if (wsp->ws_options & WRDSO_NAMECHAR) { if (wsp->ws_namechar[strcspn(wsp->ws_namechar, "${}*@-+?=")]) return _wsplt_seterr (wsp, WRDSE_USAGE); } else wsp->ws_namechar = 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; wsnode_free (node); } 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; stop = p == end; wsnode_remove (wsp, 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 (!is_name_char (wsp, 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)) { int i0 = str[1] == '-' ? 1 : 0; str++; len--; for (i = i0; i < len; i++) { 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); if (i > i0 + 1 && str[i-1] == ':') i--; *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 (!is_name_char (wsp, str[i])) { if (str[i] == ':' && i + 1 < len && strchr ("-+?=", str[i+1])) continue; 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 (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, i); 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); } 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); } 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); } 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); } } 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)); } } �������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/lib/Makefile.am����������������������������������������������������������������������������0000644�0001750�0001750�00000002136�14643176117�015144� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of GNU Rush. # Copyright (C) 2008-2024 Sergey Poznyakoff # # GNU Rush is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Rush is distributed in the hope that 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/>. noinst_LIBRARIES=librush.a librush_a_SOURCES=\ argcv.c\ i18n.c\ progname.c\ readfmt.c\ rushdb.c\ slist.c\ utmp.c\ version.c\ wildmatch.c\ wtmp.c nodist_librush_a_SOURCES = wordsplit.c VPATH += $(srcdir)/wordsplit EXTRA_DIST = \ wordsplit/wordsplit.c\ wordsplit/wordsplit.h noinst_HEADERS=librush.h AM_CPPFLAGS=\ -I$(top_srcdir)/gnu\ -I$(top_builddir)/gnu\ -I$(srcdir)/wordsplit\ -DLOCALEDIR=\"$(localedir)\" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/lib/slist.c��������������������������������������������������������������������������������0000644�0001750�0001750�00000004505�14643176120�014406� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* This file is part of GNU Rush. Copyright (C) 2008-2024 Sergey Poznyakoff GNU Rush is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GNU Rush is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include <stdlib.h> #include <string.h> #include <librush.h> #include <xalloc.h> struct line_list { struct line_list *next; size_t size; char line[1]; }; struct slist { struct line_list *head, *tail; size_t size; }; struct line_list * new_line_seg(const char *p, size_t len) { struct line_list *lp = xmalloc(sizeof(*lp) + len); lp->next = NULL; if (p) memcpy(lp->line, p, len); lp->size = len; return lp; } void slist_append(slist_t slist, const char *p, size_t len) { struct line_list *lp = new_line_seg(p, len); LIST_APPEND(lp, slist->head, slist->tail); slist->size += len; } char * slist_alloc(slist_t slist, size_t len) { struct line_list *lp = new_line_seg(NULL, len); LIST_APPEND(lp, slist->head, slist->tail); slist->size += len; return lp->line; } char * slist_reduce(slist_t slist, char **pbuf, size_t *psize) { struct line_list *lp; size_t total = slist->size + 1; size_t dummy; char *s; if (!psize) { dummy = 0; psize = &dummy; *pbuf = NULL; } if (*psize < total) { if (!*pbuf) *pbuf = xmalloc(total); else *pbuf = xrealloc(*pbuf, total); *psize = total; } s = *pbuf; for (lp = slist->head; lp; ) { struct line_list *next = lp->next; memcpy(s, lp->line, lp->size); s += lp->size; free(lp); lp = next; } *s++ = 0; slist->head = slist->tail = NULL; slist->size = 0; return *pbuf; } slist_t slist_create() { slist_t p = xzalloc(sizeof(*p)); return p; } void slist_free(slist_t slist) { struct line_list *lp; for (lp = slist->head; lp; ) { struct line_list *next = lp->next; free(lp); lp = next; } free(slist); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/lib/rushdb.c�������������������������������������������������������������������������������0000644�0001750�0001750�00000042102�14643176117�014540� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* This file is part of GNU Rush. Copyright (C) 2008-2024 Sergey Poznyakoff GNU Rush is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GNU Rush is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include <sys/time.h> #include <sys/stat.h> #include <stdlib.h> #include <stdarg.h> #include <string.h> #include <errno.h> #include <fcntl.h> #include <strftime.h> #include <fprintftime.h> #include <inttostr.h> #include <xalloc.h> #include <c-ctype.h> #include "librush.h" mode_t rushdb_umask = 022; mode_t rushdb_dir_mode = 0777; mode_t rushdb_file_mode = 0666; #define ERROR_BUFFER_SIZE 1024 static char rushdb_error_buffer[ERROR_BUFFER_SIZE]; char *rushdb_error_string = rushdb_error_buffer; static void format_error(const char *fmt, ...) RUSH_PRINTFLIKE(1,2); static void format_error(const char *fmt, ...) { va_list ap; va_start(ap, fmt); vsnprintf(rushdb_error_buffer, sizeof(rushdb_error_buffer), fmt, ap); va_end(ap); } static char * mkname(const char *dir, const char *file) { char *s = malloc(strlen(dir) + 1 + strlen(file) + 1); if (s) { strcpy(s, dir); strcat(s, "/"); strcat(s, file); } return s; } static enum rushdb_result rushdb_open_internal(const char *dbdir, int rw) { char *fname; int rc; struct stat st; if (stat(dbdir, &st)) { if (errno == ENOENT) { if (!rw) return rushdb_result_eof; if (mkdir(dbdir, rushdb_dir_mode)) { format_error(_("cannot create directory %s: %s"), dbdir, strerror(errno)); return rushdb_result_fail; } } else { format_error(_("cannot stat directory %s: %s"), dbdir, strerror(errno)); return rushdb_result_fail; } } else if (!S_ISDIR(st.st_mode)) { format_error(_("%s is not a directory"), dbdir); return rushdb_result_fail; } fname = mkname(dbdir, RUSH_UTMP_NAME); if (!fname) { format_error("%s", gettext(strerror(ENOMEM))); return rushdb_result_fail; } rc = rush_utmp_open(fname, rw); if (rc) { format_error(_("cannot open file %s: %s"), fname, strerror(errno)); free(fname); return rushdb_result_fail; } free(fname); fname = mkname(dbdir, RUSH_WTMP_NAME); if (!fname) { format_error("%s", gettext(strerror(ENOMEM))); return rushdb_result_fail; } rc = rush_wtmp_open(fname, rw); if (rc) { format_error(_("cannot open file %s: %s"), fname, strerror(errno)); free(fname); return rushdb_result_fail; } free(fname); return rushdb_result_ok; } enum rushdb_result rushdb_open(const char *dbdir, int rw) { mode_t um = umask(rushdb_umask); enum rushdb_result res = rushdb_open_internal(dbdir, rw); umask(um); return res; } int rushdb_close() { return rush_wtmp_close() || rush_utmp_close(); } void rushdb_backward_direction() { rush_wtmp_set_dir(rush_wtmp_backward); } /* Locking */ static int lock_typetab[] = { F_RDLCK, /* RUSH_LOCK_READ */ F_WRLCK /* RUSH_LOCK_WRITE */ }; int rushdb_lock(int fd, size_t size, off_t offset, int whence, int type) { struct flock fl; if (type < 0 || type > 1) { errno = EINVAL; return -1; } fl.l_type = lock_typetab[type]; fl.l_whence = whence; fl.l_start = offset; fl.l_len = size; return fcntl(fd, F_SETLKW, &fl); /* FIXME: Handle EINTR */ } int rushdb_unlock(int fd, size_t size, off_t offset, int whence) { struct flock fl; fl.l_type = F_UNLCK; fl.l_whence = whence; fl.l_start = offset; fl.l_len = size; return fcntl(fd, F_SETLKW, &fl); } #define FDATA_FH 0 #define FDATA_STRING 1 #define FDATA_TAB 2 #define FDATA_NEWLINE 3 struct format_key { struct format_key *next; char *name; char *value; }; typedef int (*rushdb_format_fp) (int outbytes, int width, struct format_key *key, struct rush_wtmp *); struct rushdb_format { rushdb_format_t next; int type; struct format_key *key; union { struct { rushdb_format_fp fun; int width; char *header; } fh; /* FDATA_FH */ char *string; /* FDATA_STRING */ int tabstop; /* FDATA_TAB */ int nl; /* FDATA_NEWLINE */ } v; }; char *rushdb_date_format = "%a %H:%M"; #define ALIGN_LEFT 0 #define ALIGN_RIGHT 1 #define TAB_SIZE 8 /* Key auxiliary */ static void format_key_free(struct format_key *key) { struct format_key *next; while (key) { next = key->next; free(key->name); free(key->value); free(key); key = next; } } static char * format_key_lookup(struct format_key *key, char *name) { for (; key; key = key->next) { if (strcmp(key->name, name) == 0) return key->value; } return NULL; } static void form_free(struct rushdb_format *form) { struct rushdb_format *next; while (form) { next = form->next; format_key_free(form->key); switch (form->type) { case FDATA_STRING: free(form->v.string); break; case FDATA_FH: free(form->v.fh.header); break; default: break; } free(form); form = next; } } static int key_align(struct format_key *key) { char *p = format_key_lookup(key, "right"); return p ? ALIGN_RIGHT : ALIGN_LEFT; } static int output_string(char *string, int width, int align) { if (width == 0) width = printf("%s", string); else if (align == ALIGN_LEFT) width = printf("%-*.*s", width, width, string); else width = printf("%*.*s", width, width, string); return width; } static int output_string_key(char *string, int width, struct format_key *key) { if (strlen(string) == 0) { char *p = format_key_lookup(key, "empty"); if (p) string = p; } return output_string(string, width, key_align(key)); } static int output_tab(int column, int tabstop) { int goal = (((column + TAB_SIZE - 1) / TAB_SIZE) + tabstop) * TAB_SIZE; for (;column < goal; column++) putchar(' '); return column; } /*FIXME: ignores key */ static int output_duration(time_t t, int width, struct format_key *key) { unsigned d,h,m,s; unsigned outbytes; char dbuf[INT_BUFSIZE_BOUND(unsigned)+1]; char *dptr = NULL; unsigned fullwidth, dlen; d = t / 86400; t %= 86400; s = t % 60; m = t / 60; if (m > 59) { h = m / 60; m -= h*60; } else h = 0; fullwidth = 8; if (d) { dptr = uinttostr(d, dbuf); dlen = strlen(dptr); fullwidth += dlen + 1; } if (d) { if (width >= fullwidth) outbytes = printf("%*s+%02u:%02u:%02u", width - fullwidth, dptr, h, m, s); else if (width >= fullwidth - 3) outbytes = printf("%*sd%02uh%02u", width - (dlen + 5), dptr, h, m); else if (width >= fullwidth - 5) outbytes = printf("%*sd%02uh", width - (dlen + 3), dptr, h); else if (width >= dlen + 1) outbytes = printf("%*sd", width - 1, dptr); else { outbytes = width; while (width--) putchar('>'); } } else { if (width >= 8) outbytes = printf("%*s%02u:%02u:%02u", width - 8, "", h, m, s); else if (width >= 5) { if (h) outbytes = printf("%*s%02uh%02u", width - 5, "", h, m); else outbytes = printf("%*s%02u:%02u", width - 5, "", m, s); } else if (h) { dptr = uinttostr(h, dbuf); dlen = strlen(dptr); if (width >= dlen + 1) outbytes = printf("%*sh", width - 1, dptr); else { outbytes = width; while (width--) putchar('>'); } } else { dptr = uinttostr(s, dbuf); dlen = strlen(dptr); if (width >= dlen) outbytes = printf("%*s", width, dptr); else { dptr = uinttostr(m, dbuf); dlen = strlen(dptr); if (width >= dlen + 1) outbytes = printf("%*sm", width - 1, dptr); else { outbytes = width; while (width--) putchar('>'); } } } } return outbytes; } static int output_time(struct timeval *tv, int width, struct format_key *key) { struct tm *tm = localtime(&tv->tv_sec); char *fmt = format_key_lookup(key, "format"); return fprintftime(stdout, fmt ? fmt : rushdb_date_format, tm, 0, tv->tv_usec * 1000); } /* Runtime */ static int format_user(int outbytes, int width, struct format_key *key, struct rush_wtmp *wtmp) { return output_string_key(wtmp->user, width, key); } static int format_rule(int outbytes, int width, struct format_key *key, struct rush_wtmp *wtmp) { return output_string_key(wtmp->rule, width, key); } static int format_command(int outbytes, int width, struct format_key *key, struct rush_wtmp *wtmp) { return output_string_key(wtmp->command, width, key); } static int format_pid(int outbytes, int width, struct format_key *key, struct rush_wtmp *wtmp) { char buf[INT_BUFSIZE_BOUND(uintmax_t)]; return output_string_key(umaxtostr(wtmp->pid, buf), width, key); } static int format_duration(int outbytes, int width, struct format_key *key, struct rush_wtmp *wtmp) { time_t end = wtmp->stop.tv_sec; time_t x = (end ? end : time(NULL)) - wtmp->start.tv_sec; return output_duration(x, width, key); } static int format_start(int outbytes, int width, struct format_key *key, struct rush_wtmp *wtmp) { return output_time(&wtmp->start, width, key); } static int format_stop(int outbytes, int width, struct format_key *key, struct rush_wtmp *wtmp) { if (wtmp->stop.tv_sec == 0 && wtmp->stop.tv_usec == 0) return output_string_key("running", width, key); else return output_time(&wtmp->stop, width, key); } struct format_tab { char *name; rushdb_format_fp fun; }; static struct format_tab handlers[] = { { "user", format_user }, { "rule", format_rule }, { "command", format_command }, { "pid", format_pid }, { "duration", format_duration }, { "time", format_start }, { "start-time", format_start }, { "stop-time", format_stop }, { NULL } }; static rushdb_format_fp _lookup(char *name) { int i; for (i = 0; handlers[i].name; i++) if (strcmp(handlers[i].name, name) == 0) return handlers[i].fun; return NULL; } static slist_t slist; static char * collect_sequence(char *fmt, int (*cond)(void *, char *), void *closure) { char c; char *p; for (p = fmt; *p && (*cond)(closure, p) == 0; p++) { if (*p == '\\') { switch (*++p) { case 'a': c = '\a'; break; case 'b': c = '\b'; break; case 'e': c = '\033'; break; case 'f': c = '\f'; break; case 'n': c = '\n'; break; case 't': c = '\t'; break; case 'r': c = '\r'; break; case 'v': c = '\v'; break; case '\n': continue; default: c = *p; } slist_append(slist, &c, 1); } else if (*p == '\n') ; else slist_append(slist, p, 1); } return p; } static char * parse_string_fmt(char *fmt, rushdb_format_t form, int (*cond)(void *, char *), void *closure) { char c; char *endp = collect_sequence(fmt, cond, closure); c = 0; slist_append(slist, &c, 1); slist_reduce(slist, &form->v.string, NULL); form->type = FDATA_STRING; return endp; } static int _is_closing_quote(void *closure, char *p) { return *(char*)closure == *p; } static int parse_quote(char **fmtp, struct rushdb_format *form) { char *p; p = parse_string_fmt(*fmtp + 1, form, _is_closing_quote, *fmtp); if (!*p) { format_error(_("missing closing quote in string started " "near `%s'"), *fmtp); return 1; } *fmtp = p + 1; return 0; } static int _is_open_brace(void *closure, char *p) { return *p == '('; } static int parse_string(char **fmtp, struct rushdb_format *form) { char *p; p = parse_string_fmt(*fmtp, form, _is_open_brace, NULL); *fmtp = p; return 0; } static int _is_delim(void *closure, char *p) { return c_isspace(*p) || *p == ')'; } static char * get_token(char **fmtp) { char *p; char c; while (**fmtp && c_isspace(**fmtp)) ++*fmtp; p = *fmtp; if (*p == ')') { slist_append(slist, p, 1); ++*fmtp; } else { if (**fmtp == '"' || **fmtp == '\'') { p = collect_sequence(*fmtp + 1, _is_closing_quote, *fmtp); if (*p == **fmtp) p++; *fmtp = p; } else *fmtp = collect_sequence(*fmtp, _is_delim, NULL); } c = 0; slist_append(slist, &c, 1); return slist_reduce(slist, &p, NULL); } static int is_time_function(rushdb_format_fp fh) { return fh == format_start || fh == format_stop; } static int time_width(struct rushdb_format *form) { time_t t = 0; struct tm *tm = localtime(&t); char *fmt = format_key_lookup(form->key, "format"); return nstrftime(NULL, -1, fmt ? fmt : rushdb_date_format, tm, 0, 0); } static int parse_form(char **fmtp, struct rushdb_format *form) { char *formname, *p; struct format_key *key_head, *key_tail; ++*fmtp; formname = get_token(fmtp); if (strcmp(formname, "newline") == 0) { form->type = FDATA_NEWLINE; p = get_token(fmtp); if (p[0] != ')') { form->v.nl = strtol(p, NULL, 0); p = get_token(fmtp); } else form->v.nl = 1; } else if (strcmp(formname, "tab") == 0) { form->type = FDATA_TAB; p = get_token(fmtp); if (p[0] != ')') { form->v.tabstop = strtol(p, NULL, 0); p = get_token(fmtp); } else form->v.tabstop = 1; } else { rushdb_format_fp fh; int arg; fh = _lookup(formname); if (!fh) { format_error("error in format spec: unknown format %s", formname); return 1; } form->type = FDATA_FH; form->v.fh.fun = fh; /* Collect optional arguments */ arg = 0; while ((p = get_token(fmtp)) != NULL && !(p[0] == ':' || p[0] == ')')) { arg++; switch (arg) { case 1: /* width */ form->v.fh.width = strtol(p, NULL, 0); break; case 2: /* header */ form->v.fh.header = xstrdup(p); break; default: format_error("wrong number of arguments " "to form %s", formname); return 1; } } /* Collect keyword arguments */ key_head = NULL; while (p && p[0] == ':') { struct format_key *key = xzalloc(sizeof(*key)); if (!key_head) key_head = key; else key_tail->next = key; key_tail = key; key->name = xstrdup(p + 1); p = get_token(fmtp); if (p[0] == ')' || p[0] == ':') key->value = xstrdup("t"); else { key->value = xstrdup(p); p = get_token(fmtp); } } form->key = key_head; if (is_time_function(form->v.fh.fun)) form->v.fh.width = time_width(form); } if (p[0] != ')') { format_error("form `%s' not closed", formname); return 1; } return 0; } rushdb_format_t rushdb_compile_format(char *fmt) { struct rushdb_format *form_head = NULL, *form_tail; slist = slist_create(); while (*fmt) { int rc; struct rushdb_format *form = xzalloc(sizeof(*form)); if (!form_head) form_head = form; else form_tail->next = form; form_tail = form; if (*fmt == '(') rc = parse_form(&fmt, form); else if (*fmt == '"' || *fmt == '\'') rc = parse_quote(&fmt, form); else rc = parse_string(&fmt, form); if (rc) { form_free(form_head); form_head = NULL; break; } } slist_free(slist); return form_head; } int rushdb_print(rushdb_format_t form, struct rush_wtmp *wtmp, int newline) { int i; int outbytes = 0; for (; form; form = form->next) { switch (form->type) { case FDATA_FH: outbytes += form->v.fh.fun(outbytes, form->v.fh.width, form->key, wtmp); break; case FDATA_STRING: outbytes += output_string(form->v.string, 0, ALIGN_LEFT); break; case FDATA_TAB: outbytes += output_tab(outbytes, form->v.tabstop); break; case FDATA_NEWLINE: for (i = 0; i < form->v.nl; i++) putchar('\n'); break; default: abort(); } } if (newline) putchar('\n'); return outbytes; } void rushdb_print_header(rushdb_format_t form) { int i, outbytes = 0; rushdb_format_t p; for (p = form; p; p = p->next) if (p->type == FDATA_NEWLINE) return; for (; form; form = form->next) { switch (form->type) { case FDATA_FH: if (form->v.fh.header) outbytes += output_string(form->v.fh.header, form->v.fh.width, ALIGN_LEFT); else outbytes += output_string("", form->v.fh.width, ALIGN_LEFT); break; case FDATA_STRING: outbytes += output_string(form->v.string, strlen(form->v.string), ALIGN_LEFT); break; case FDATA_TAB: outbytes += output_tab(outbytes, form->v.tabstop); break; case FDATA_NEWLINE: for (i = 0; i < form->v.nl; i++) putchar('\n'); break; default: abort(); } } putchar('\n'); } int rushdb_start(struct rush_wtmp *wtmp) { int status; enum rushdb_result result; int rc; rush_utmp_lock_all(RUSH_LOCK_WRITE); result = rush_utmp_read(RUSH_STATUS_MAP_BIT(RUSH_STATUS_AVAIL), &status, NULL); if (result == rushdb_result_fail) rc = 1; else { gettimeofday(&wtmp->start, NULL); memset(&wtmp->stop, 0, sizeof(wtmp->stop)); rc = rush_utmp_write(wtmp); } rush_utmp_unlock_all(); return rc; } int rushdb_stop() { struct timeval tv; if (rush_utmp_chstatus(RUSH_STATUS_AVAIL)) return 1; gettimeofday(&tv, NULL); return rush_wtmp_update(&tv); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/lib/utmp.c���������������������������������������������������������������������������������0000644�0001750�0001750�00000006077�14643176120�014243� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* This file is part of GNU Rush. Copyright (C) 2008-2024 Sergey Poznyakoff GNU Rush is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GNU Rush is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include <sys/types.h> #include <sys/time.h> #include <stdlib.h> #include <unistd.h> #include <fcntl.h> #include <errno.h> #include "librush.h" static int utmp_fd = -1; static enum rushdb_result status = rushdb_result_eof; static struct rush_utmp utmprec = { -1, 0 }; int rush_utmp_open(const char *name, int rw) { int fd; fd = open(name, rw ? O_RDWR|O_CREAT : O_RDONLY, rushdb_file_mode); if (fd == -1) return -1; utmp_fd = fd; return 0; } int rush_utmp_close() { int rc = close(utmp_fd); utmp_fd = -1; return rc; } static enum rushdb_result rush_utmp_read0(int statmap, int *pstatus, struct rush_wtmp **pwtmp) { for (;;) { ssize_t n = read(utmp_fd, &utmprec, sizeof(utmprec)); if (n == 0) return rushdb_result_eof; if (n != sizeof(utmprec)) return rushdb_result_fail; if (rush_wtmp_seek(utmprec.offset)) return rushdb_result_fail; if (statmap == 0 || RUSH_STATUS_MAP_ISSET(statmap, utmprec.status)) { if (pwtmp && rush_wtmp_read(pwtmp)) return rushdb_result_fail; break; } } *pstatus = utmprec.status; return rushdb_result_ok; } enum rushdb_result rush_utmp_read(int statmap, int *pstatus, struct rush_wtmp **pwtmp) { return status = rush_utmp_read0(statmap, pstatus, pwtmp); } int rush_utmp_chstatus(int status) { if (utmp_fd == -1 || utmprec.status == -1 || !(status == RUSH_STATUS_AVAIL || status == RUSH_STATUS_INUSE)) { errno = EINVAL; return 1; } if (lseek(utmp_fd, - sizeof(utmprec), SEEK_CUR) == -1) return 1; utmprec.status = status; if (write(utmp_fd, &utmprec, sizeof(utmprec)) != sizeof(utmprec)) return 1; return 0; } int rush_utmp_write(struct rush_wtmp *wtmp) { int rc; off_t off; if (utmp_fd == -1) { errno = EINVAL; return 1; } off = rush_wtmp_append(wtmp); if (off == -1) return 1; if (status == rushdb_result_ok) { if (lseek(utmp_fd, - sizeof(utmprec), SEEK_CUR) == -1) return 1; } utmprec.status = RUSH_STATUS_INUSE; utmprec.offset = off; rushdb_lock(utmp_fd, sizeof(utmprec), 0, SEEK_CUR, RUSH_LOCK_WRITE); rc = write(utmp_fd, &utmprec, sizeof(utmprec)); rushdb_unlock(utmp_fd, - sizeof(utmprec), 0, SEEK_CUR); if (rc != sizeof(utmprec)) return 1; return 0; } void rush_utmp_lock_all(int type) { rushdb_lock(utmp_fd, 0, 0, SEEK_SET, type); } void rush_utmp_unlock_all() { rushdb_unlock(utmp_fd, 0, 0, SEEK_SET); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/lib/readfmt.c������������������������������������������������������������������������������0000644�0001750�0001750�00000003023�14643176117�014672� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* This file is part of GNU Rush. Copyright (C) 2008-2024 Sergey Poznyakoff GNU Rush is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GNU Rush is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include <sys/time.h> #include <sys/stat.h> #include <stdlib.h> #include <stdio.h> #include <string.h> #include <xalloc.h> #include <error.h> #include <errno.h> #include <librush.h> char * rush_read_format(const char *name) { struct stat st; size_t size; char *buf, *p; FILE *fp; if (stat(name, &st)) error(1, errno, _("cannot stat format file %s"), name); else if (!S_ISREG(st.st_mode)) error(1, 0, _("%s is not a regular file"), name); buf = xmalloc(st.st_size + 1); fp = fopen(name, "r"); if (!fp) error(1, errno, _("cannot open format file %s"), name); size = st.st_size; p = buf; while (size && fgets(p, size + 1, fp)) { size_t len; if (*p == ';') continue; len = strlen(p); size -= len; p += len; } *p = 0; fclose(fp); return buf; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/lib/version.c������������������������������������������������������������������������������0000644�0001750�0001750�00000002331�14643176120�014730� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* This file is part of GNU Rush. Copyright (C) 2008-2024 Sergey Poznyakoff GNU Rush is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GNU Rush is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include <librush.h> #include <stdio.h> void version(const char *progname) { printf("%s (%s) %s\n", progname, PACKAGE, PACKAGE_VERSION); fputs("Copyright (C) 2008-2017 Sergey Poznyakoff\n", stdout); fputs(_("\ \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\ "), stdout); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/lib/wtmp.c���������������������������������������������������������������������������������0000644�0001750�0001750�00000013230�14643176120�014232� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* This file is part of GNU Rush. Copyright (C) 2008-2024 Sergey Poznyakoff GNU Rush is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GNU Rush is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include <sys/types.h> #include <sys/time.h> #include <stdlib.h> #include <unistd.h> #include <fcntl.h> #include <errno.h> #include <string.h> #include "librush.h" enum rush_wtmp_dir rush_wtmp_dir = rush_wtmp_forward; static int wtmp_fd = -1; static size_t wtmp_recsize = 0; int rush_wtmp_open(const char *name, int rw) { int fd; fd = open(name, rw ? O_RDWR|O_CREAT : O_RDONLY, rushdb_file_mode); if (fd == -1) return -1; wtmp_fd = fd; return 0; } int rush_wtmp_close() { int rc = close(wtmp_fd); wtmp_fd = -1; return rc; } int rush_wtmp_rewind(void) { int whence; switch (rush_wtmp_dir) { case rush_wtmp_forward: whence = SEEK_SET; break; case rush_wtmp_backward: whence = SEEK_END; break; default: /* Should not happen */ abort(); } return lseek(wtmp_fd, 0, whence) == -1; } void rush_wtmp_set_dir(enum rush_wtmp_dir dir) { rush_wtmp_dir = dir; rush_wtmp_rewind(); } int rush_wtmp_seek(off_t off) { off_t rc = lseek(wtmp_fd, off, SEEK_SET); if (rc == off) { wtmp_recsize = 0; return 0; } return 1; } struct rush_wtmp * alloc_wtmp(size_t reclen) { struct rush_wtmp *wtmp = malloc(sizeof(*wtmp) + reclen - sizeof(size_t)); if (wtmp) wtmp->reclen = reclen; return wtmp; } enum rushdb_result rush_wtmp_read_fwd(struct rush_wtmp **pwtmp) { struct rush_wtmp *wtmprec; size_t reclen, left; ssize_t size; char *p, *s; if (wtmp_fd == -1) { errno = EINVAL; return rushdb_result_fail; } size = read(wtmp_fd, &reclen, sizeof(reclen)); if (size == 0) return rushdb_result_eof; if (size != sizeof(reclen)) return rushdb_result_fail; wtmp_recsize = reclen; wtmprec = alloc_wtmp(reclen); if (!wtmprec) return rushdb_result_fail; p = RUSH_WTMP_DATA_PTR(wtmprec); reclen -= sizeof(reclen); left = reclen; while (left) { ssize_t n = read(wtmp_fd, p, left); if (n == -1) goto errlab; p += n; left -= n; } p = (char*) (wtmprec + 1); s = p; wtmprec->user = s; s += strlen(s) + 1; if (s - p > reclen) goto errlab; wtmprec->rule = s; s += strlen(s) + 1; if (s - p > reclen) goto errlab; wtmprec->command = s; *pwtmp = wtmprec; return rushdb_result_ok; errlab: free(wtmprec); rush_wtmp_close(); return rushdb_result_fail; } enum rushdb_result rush_wtmp_read(struct rush_wtmp **pwtmp) { size_t reclen; enum rushdb_result res; switch (rush_wtmp_dir) { case rush_wtmp_forward: res = rush_wtmp_read_fwd(pwtmp); if (lseek(wtmp_fd, sizeof(reclen), SEEK_CUR) == -1) res = rushdb_result_fail; break; case rush_wtmp_backward: if (lseek(wtmp_fd, 0, SEEK_CUR) == 0) return rushdb_result_eof; if (lseek(wtmp_fd, -sizeof(reclen), SEEK_CUR) == -1) return rushdb_result_fail; if (read(wtmp_fd, &reclen, sizeof(reclen)) != sizeof(reclen)) return rushdb_result_fail; if (lseek(wtmp_fd, -(reclen + sizeof(reclen)), SEEK_CUR) == -1) return rushdb_result_fail; res = rush_wtmp_read_fwd(pwtmp); if (res == rushdb_result_ok) { if (lseek(wtmp_fd, -reclen, SEEK_CUR) == -1) return rushdb_result_fail; } break; default: /* Should not happen */ abort(); } return res; } size_t rush_wtmp_reclen(struct rush_wtmp *src) { size_t reclen = sizeof(struct rush_wtmp) + strlen(src->user) + 1 + strlen(src->rule) + 1 + strlen(src->command) + 1; return reclen; } struct rush_wtmp * rush_wtmp_copy(struct rush_wtmp *src) { size_t reclen = rush_wtmp_reclen(src); struct rush_wtmp *dst = malloc(reclen); if (dst) { char *p; dst->reclen = reclen; dst->pid = src->pid; dst->start = src->start; dst->stop = src->stop; p = (char*) (dst + 1); strcpy(p, src->user); dst->user = NULL; p += strlen(p) + 1; dst->rule = NULL; strcpy(p, src->rule); p += strlen(p) + 1; dst->command = NULL; strcpy(p, src->command); p += strlen(p) + 1; } return dst; } off_t rush_wtmp_append(struct rush_wtmp *wtmp) { size_t left; char *p; off_t off; struct rush_wtmp *record; if (wtmp_fd == -1) { errno = EINVAL; return -1; } off = lseek(wtmp_fd, 0, SEEK_END); if (off == -1) return -1; record = rush_wtmp_copy(wtmp); rushdb_lock(wtmp_fd, record->reclen, off, SEEK_SET, RUSH_LOCK_WRITE); left = record->reclen; p = (char*) record; while (left) { ssize_t n = write(wtmp_fd, p, left); if (n == -1) goto errlab; p += n; left -= n; } if (write(wtmp_fd, &record->reclen, sizeof(record->reclen)) != sizeof(wtmp->reclen)) goto errlab; rushdb_unlock(wtmp_fd, record->reclen, off, SEEK_SET); wtmp_recsize = record->reclen; free(record); return off; errlab: rushdb_unlock(wtmp_fd, record->reclen, off, SEEK_SET); rush_wtmp_close(); return -1; } int rush_wtmp_update(struct timeval *tv) { struct rush_wtmp wtmp; if (lseek(wtmp_fd, - (wtmp_recsize + sizeof(size_t)), SEEK_CUR) == -1) return 1; if (read(wtmp_fd, &wtmp, sizeof wtmp) != sizeof wtmp) return 1; if (lseek(wtmp_fd, - sizeof(wtmp), SEEK_CUR) == -1) return 1; wtmp.stop = *tv; return write(wtmp_fd, &wtmp, sizeof wtmp) != sizeof wtmp; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/lib/Makefile.in����������������������������������������������������������������������������0000644�0001750�0001750�00000164764�14655401222�015164� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # This file is part of GNU Rush. # Copyright (C) 2008-2024 Sergey Poznyakoff # # GNU Rush is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Rush is distributed in the hope that 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/>. 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 = lib ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/doc/imprimatur/imprimatur.m4 \ $(top_srcdir)/m4/00gnulib.m4 $(top_srcdir)/m4/__inline.m4 \ $(top_srcdir)/m4/absolute-header.m4 $(top_srcdir)/m4/alloca.m4 \ $(top_srcdir)/m4/assert_h.m4 $(top_srcdir)/m4/btowc.m4 \ $(top_srcdir)/m4/builtin-expect.m4 $(top_srcdir)/m4/c-bool.m4 \ $(top_srcdir)/m4/calloc.m4 $(top_srcdir)/m4/close.m4 \ $(top_srcdir)/m4/codeset.m4 \ $(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup2.m4 \ $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \ $(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \ $(top_srcdir)/m4/error_h.m4 $(top_srcdir)/m4/extensions.m4 \ $(top_srcdir)/m4/extern-inline.m4 $(top_srcdir)/m4/fcntl-o.m4 \ $(top_srcdir)/m4/fcntl.m4 $(top_srcdir)/m4/fcntl_h.m4 \ $(top_srcdir)/m4/flexmember.m4 $(top_srcdir)/m4/free.m4 \ $(top_srcdir)/m4/fstat.m4 $(top_srcdir)/m4/getdelim.m4 \ $(top_srcdir)/m4/getdtablesize.m4 $(top_srcdir)/m4/getline.m4 \ $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/getprogname.m4 \ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gnulib-common.m4 \ $(top_srcdir)/m4/gnulib-comp.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/include_next.m4 \ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/inttostr.m4 \ $(top_srcdir)/m4/inttypes.m4 $(top_srcdir)/m4/langinfo_h.m4 \ $(top_srcdir)/m4/largefile.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/limits-h.m4 $(top_srcdir)/m4/localcharset.m4 \ $(top_srcdir)/m4/locale-fr.m4 $(top_srcdir)/m4/locale-ja.m4 \ $(top_srcdir)/m4/locale-zh.m4 $(top_srcdir)/m4/locale_h.m4 \ $(top_srcdir)/m4/localeconv.m4 $(top_srcdir)/m4/lock.m4 \ $(top_srcdir)/m4/malloc.m4 $(top_srcdir)/m4/malloca.m4 \ $(top_srcdir)/m4/mbrtowc.m4 $(top_srcdir)/m4/mbsinit.m4 \ $(top_srcdir)/m4/mbstate_t.m4 $(top_srcdir)/m4/mbtowc.m4 \ $(top_srcdir)/m4/minmax.m4 $(top_srcdir)/m4/mktime.m4 \ $(top_srcdir)/m4/mode_t.m4 $(top_srcdir)/m4/msvc-inval.m4 \ $(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \ $(top_srcdir)/m4/musl.m4 $(top_srcdir)/m4/nl_langinfo.m4 \ $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/nocrash.m4 \ $(top_srcdir)/m4/nstrftime.m4 $(top_srcdir)/m4/off_t.m4 \ $(top_srcdir)/m4/open-cloexec.m4 \ $(top_srcdir)/m4/open-slash.m4 $(top_srcdir)/m4/open.m4 \ $(top_srcdir)/m4/pathmax.m4 $(top_srcdir)/m4/po.m4 \ $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/m4/pthread_rwlock_rdlock.m4 \ $(top_srcdir)/m4/realloc.m4 $(top_srcdir)/m4/reallocarray.m4 \ $(top_srcdir)/m4/regex.m4 $(top_srcdir)/m4/setenv.m4 \ $(top_srcdir)/m4/setlocale_null.m4 $(top_srcdir)/m4/ssize_t.m4 \ $(top_srcdir)/m4/stat-time.m4 $(top_srcdir)/m4/stat.m4 \ $(top_srcdir)/m4/stddef_h.m4 $(top_srcdir)/m4/stdint.m4 \ $(top_srcdir)/m4/stdio_h.m4 $(top_srcdir)/m4/stdlib_h.m4 \ $(top_srcdir)/m4/strerror.m4 $(top_srcdir)/m4/string_h.m4 \ $(top_srcdir)/m4/sys_socket_h.m4 \ $(top_srcdir)/m4/sys_stat_h.m4 $(top_srcdir)/m4/sys_types_h.m4 \ $(top_srcdir)/m4/threadlib.m4 $(top_srcdir)/m4/time_h.m4 \ $(top_srcdir)/m4/time_r.m4 $(top_srcdir)/m4/time_rz.m4 \ $(top_srcdir)/m4/timegm.m4 $(top_srcdir)/m4/tm_gmtoff.m4 \ $(top_srcdir)/m4/tzset.m4 $(top_srcdir)/m4/unistd_h.m4 \ $(top_srcdir)/m4/visibility.m4 $(top_srcdir)/m4/warn-on-use.m4 \ $(top_srcdir)/m4/wchar_h.m4 $(top_srcdir)/m4/wchar_t.m4 \ $(top_srcdir)/m4/wcrtomb.m4 $(top_srcdir)/m4/wctype_h.m4 \ $(top_srcdir)/m4/wint_t.m4 $(top_srcdir)/m4/xalloc.m4 \ $(top_srcdir)/m4/zzgnulib.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 = LIBRARIES = $(noinst_LIBRARIES) 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 = librush_a_AR = $(AR) $(ARFLAGS) librush_a_LIBADD = am_librush_a_OBJECTS = argcv.$(OBJEXT) i18n.$(OBJEXT) \ progname.$(OBJEXT) readfmt.$(OBJEXT) rushdb.$(OBJEXT) \ slist.$(OBJEXT) utmp.$(OBJEXT) version.$(OBJEXT) \ wildmatch.$(OBJEXT) wtmp.$(OBJEXT) nodist_librush_a_OBJECTS = wordsplit.$(OBJEXT) librush_a_OBJECTS = $(am_librush_a_OBJECTS) \ $(nodist_librush_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__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/argcv.Po ./$(DEPDIR)/i18n.Po \ ./$(DEPDIR)/progname.Po ./$(DEPDIR)/readfmt.Po \ ./$(DEPDIR)/rushdb.Po ./$(DEPDIR)/slist.Po ./$(DEPDIR)/utmp.Po \ ./$(DEPDIR)/version.Po ./$(DEPDIR)/wildmatch.Po \ ./$(DEPDIR)/wordsplit.Po ./$(DEPDIR)/wtmp.Po 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 = $(librush_a_SOURCES) $(nodist_librush_a_SOURCES) DIST_SOURCES = $(librush_a_SOURCES) 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)` am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/build-aux/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) VPATH = @srcdir@ $(srcdir)/wordsplit ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALLOCA_H = @ALLOCA_H@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ ASSERT_H = @ASSERT_H@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOM4TE = @AUTOM4TE@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ GETOPT_H = @GETOPT_H@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GL_CFLAG_ALLOW_WARNINGS = @GL_CFLAG_ALLOW_WARNINGS@ GL_CFLAG_GNULIB_WARNINGS = @GL_CFLAG_GNULIB_WARNINGS@ GL_GNULIB_ACCESS = @GL_GNULIB_ACCESS@ GL_GNULIB_ALIGNED_ALLOC = @GL_GNULIB_ALIGNED_ALLOC@ GL_GNULIB_ATOLL = @GL_GNULIB_ATOLL@ GL_GNULIB_BTOWC = @GL_GNULIB_BTOWC@ GL_GNULIB_CALLOC_GNU = @GL_GNULIB_CALLOC_GNU@ GL_GNULIB_CALLOC_POSIX = @GL_GNULIB_CALLOC_POSIX@ GL_GNULIB_CANONICALIZE_FILE_NAME = @GL_GNULIB_CANONICALIZE_FILE_NAME@ GL_GNULIB_CHDIR = @GL_GNULIB_CHDIR@ GL_GNULIB_CHMOD = @GL_GNULIB_CHMOD@ GL_GNULIB_CHOWN = @GL_GNULIB_CHOWN@ GL_GNULIB_CLOSE = @GL_GNULIB_CLOSE@ GL_GNULIB_COPY_FILE_RANGE = @GL_GNULIB_COPY_FILE_RANGE@ GL_GNULIB_CREAT = @GL_GNULIB_CREAT@ GL_GNULIB_CTIME = @GL_GNULIB_CTIME@ GL_GNULIB_DPRINTF = @GL_GNULIB_DPRINTF@ GL_GNULIB_DUP = @GL_GNULIB_DUP@ GL_GNULIB_DUP2 = @GL_GNULIB_DUP2@ GL_GNULIB_DUP3 = @GL_GNULIB_DUP3@ GL_GNULIB_DUPLOCALE = @GL_GNULIB_DUPLOCALE@ GL_GNULIB_ENVIRON = @GL_GNULIB_ENVIRON@ GL_GNULIB_EUIDACCESS = @GL_GNULIB_EUIDACCESS@ GL_GNULIB_EXECL = @GL_GNULIB_EXECL@ GL_GNULIB_EXECLE = @GL_GNULIB_EXECLE@ GL_GNULIB_EXECLP = @GL_GNULIB_EXECLP@ GL_GNULIB_EXECV = @GL_GNULIB_EXECV@ GL_GNULIB_EXECVE = @GL_GNULIB_EXECVE@ GL_GNULIB_EXECVP = @GL_GNULIB_EXECVP@ GL_GNULIB_EXECVPE = @GL_GNULIB_EXECVPE@ GL_GNULIB_EXPLICIT_BZERO = @GL_GNULIB_EXPLICIT_BZERO@ GL_GNULIB_FACCESSAT = @GL_GNULIB_FACCESSAT@ GL_GNULIB_FCHDIR = @GL_GNULIB_FCHDIR@ GL_GNULIB_FCHMODAT = @GL_GNULIB_FCHMODAT@ GL_GNULIB_FCHOWNAT = @GL_GNULIB_FCHOWNAT@ GL_GNULIB_FCLOSE = @GL_GNULIB_FCLOSE@ GL_GNULIB_FCNTL = @GL_GNULIB_FCNTL@ GL_GNULIB_FDATASYNC = @GL_GNULIB_FDATASYNC@ GL_GNULIB_FDOPEN = @GL_GNULIB_FDOPEN@ GL_GNULIB_FFLUSH = @GL_GNULIB_FFLUSH@ GL_GNULIB_FFSL = @GL_GNULIB_FFSL@ GL_GNULIB_FFSLL = @GL_GNULIB_FFSLL@ GL_GNULIB_FGETC = @GL_GNULIB_FGETC@ GL_GNULIB_FGETS = @GL_GNULIB_FGETS@ GL_GNULIB_FOPEN = @GL_GNULIB_FOPEN@ GL_GNULIB_FOPEN_GNU = @GL_GNULIB_FOPEN_GNU@ GL_GNULIB_FPRINTF = @GL_GNULIB_FPRINTF@ GL_GNULIB_FPRINTF_POSIX = @GL_GNULIB_FPRINTF_POSIX@ GL_GNULIB_FPURGE = @GL_GNULIB_FPURGE@ GL_GNULIB_FPUTC = @GL_GNULIB_FPUTC@ GL_GNULIB_FPUTS = @GL_GNULIB_FPUTS@ GL_GNULIB_FREAD = @GL_GNULIB_FREAD@ GL_GNULIB_FREE_POSIX = @GL_GNULIB_FREE_POSIX@ GL_GNULIB_FREOPEN = @GL_GNULIB_FREOPEN@ GL_GNULIB_FSCANF = @GL_GNULIB_FSCANF@ GL_GNULIB_FSEEK = @GL_GNULIB_FSEEK@ GL_GNULIB_FSEEKO = @GL_GNULIB_FSEEKO@ GL_GNULIB_FSTAT = @GL_GNULIB_FSTAT@ GL_GNULIB_FSTATAT = @GL_GNULIB_FSTATAT@ GL_GNULIB_FSYNC = @GL_GNULIB_FSYNC@ GL_GNULIB_FTELL = @GL_GNULIB_FTELL@ GL_GNULIB_FTELLO = @GL_GNULIB_FTELLO@ GL_GNULIB_FTRUNCATE = @GL_GNULIB_FTRUNCATE@ GL_GNULIB_FUTIMENS = @GL_GNULIB_FUTIMENS@ GL_GNULIB_FWRITE = @GL_GNULIB_FWRITE@ GL_GNULIB_GETC = @GL_GNULIB_GETC@ GL_GNULIB_GETCHAR = @GL_GNULIB_GETCHAR@ GL_GNULIB_GETCWD = @GL_GNULIB_GETCWD@ GL_GNULIB_GETDELIM = @GL_GNULIB_GETDELIM@ GL_GNULIB_GETDOMAINNAME = @GL_GNULIB_GETDOMAINNAME@ GL_GNULIB_GETDTABLESIZE = @GL_GNULIB_GETDTABLESIZE@ GL_GNULIB_GETENTROPY = @GL_GNULIB_GETENTROPY@ GL_GNULIB_GETGROUPS = @GL_GNULIB_GETGROUPS@ GL_GNULIB_GETHOSTNAME = @GL_GNULIB_GETHOSTNAME@ GL_GNULIB_GETLINE = @GL_GNULIB_GETLINE@ GL_GNULIB_GETLOADAVG = @GL_GNULIB_GETLOADAVG@ GL_GNULIB_GETLOGIN = @GL_GNULIB_GETLOGIN@ GL_GNULIB_GETLOGIN_R = @GL_GNULIB_GETLOGIN_R@ GL_GNULIB_GETOPT_POSIX = @GL_GNULIB_GETOPT_POSIX@ GL_GNULIB_GETPAGESIZE = @GL_GNULIB_GETPAGESIZE@ GL_GNULIB_GETPASS = @GL_GNULIB_GETPASS@ GL_GNULIB_GETPASS_GNU = @GL_GNULIB_GETPASS_GNU@ GL_GNULIB_GETPROGNAME = @GL_GNULIB_GETPROGNAME@ GL_GNULIB_GETSUBOPT = @GL_GNULIB_GETSUBOPT@ GL_GNULIB_GETUMASK = @GL_GNULIB_GETUMASK@ GL_GNULIB_GETUSERSHELL = @GL_GNULIB_GETUSERSHELL@ GL_GNULIB_GRANTPT = @GL_GNULIB_GRANTPT@ GL_GNULIB_GROUP_MEMBER = @GL_GNULIB_GROUP_MEMBER@ GL_GNULIB_IMAXABS = @GL_GNULIB_IMAXABS@ GL_GNULIB_IMAXDIV = @GL_GNULIB_IMAXDIV@ GL_GNULIB_ISATTY = @GL_GNULIB_ISATTY@ GL_GNULIB_ISWBLANK = @GL_GNULIB_ISWBLANK@ GL_GNULIB_ISWCTYPE = @GL_GNULIB_ISWCTYPE@ GL_GNULIB_ISWDIGIT = @GL_GNULIB_ISWDIGIT@ GL_GNULIB_ISWXDIGIT = @GL_GNULIB_ISWXDIGIT@ GL_GNULIB_LCHMOD = @GL_GNULIB_LCHMOD@ GL_GNULIB_LCHOWN = @GL_GNULIB_LCHOWN@ GL_GNULIB_LINK = @GL_GNULIB_LINK@ GL_GNULIB_LINKAT = @GL_GNULIB_LINKAT@ GL_GNULIB_LOCALECONV = @GL_GNULIB_LOCALECONV@ GL_GNULIB_LOCALENAME = @GL_GNULIB_LOCALENAME@ GL_GNULIB_LOCALTIME = @GL_GNULIB_LOCALTIME@ GL_GNULIB_LSEEK = @GL_GNULIB_LSEEK@ GL_GNULIB_LSTAT = @GL_GNULIB_LSTAT@ GL_GNULIB_MALLOC_GNU = @GL_GNULIB_MALLOC_GNU@ GL_GNULIB_MALLOC_POSIX = @GL_GNULIB_MALLOC_POSIX@ GL_GNULIB_MBRLEN = @GL_GNULIB_MBRLEN@ GL_GNULIB_MBRTOWC = @GL_GNULIB_MBRTOWC@ GL_GNULIB_MBSCASECMP = @GL_GNULIB_MBSCASECMP@ GL_GNULIB_MBSCASESTR = @GL_GNULIB_MBSCASESTR@ GL_GNULIB_MBSCHR = @GL_GNULIB_MBSCHR@ GL_GNULIB_MBSCSPN = @GL_GNULIB_MBSCSPN@ GL_GNULIB_MBSINIT = @GL_GNULIB_MBSINIT@ GL_GNULIB_MBSLEN = @GL_GNULIB_MBSLEN@ GL_GNULIB_MBSNCASECMP = @GL_GNULIB_MBSNCASECMP@ GL_GNULIB_MBSNLEN = @GL_GNULIB_MBSNLEN@ GL_GNULIB_MBSNRTOWCS = @GL_GNULIB_MBSNRTOWCS@ GL_GNULIB_MBSPBRK = @GL_GNULIB_MBSPBRK@ GL_GNULIB_MBSPCASECMP = @GL_GNULIB_MBSPCASECMP@ GL_GNULIB_MBSRCHR = @GL_GNULIB_MBSRCHR@ GL_GNULIB_MBSRTOWCS = @GL_GNULIB_MBSRTOWCS@ GL_GNULIB_MBSSEP = @GL_GNULIB_MBSSEP@ GL_GNULIB_MBSSPN = @GL_GNULIB_MBSSPN@ GL_GNULIB_MBSSTR = @GL_GNULIB_MBSSTR@ GL_GNULIB_MBSTOK_R = @GL_GNULIB_MBSTOK_R@ GL_GNULIB_MBSTOWCS = @GL_GNULIB_MBSTOWCS@ GL_GNULIB_MBTOWC = @GL_GNULIB_MBTOWC@ GL_GNULIB_MDA_ACCESS = @GL_GNULIB_MDA_ACCESS@ GL_GNULIB_MDA_CHDIR = @GL_GNULIB_MDA_CHDIR@ GL_GNULIB_MDA_CHMOD = @GL_GNULIB_MDA_CHMOD@ GL_GNULIB_MDA_CLOSE = @GL_GNULIB_MDA_CLOSE@ GL_GNULIB_MDA_CREAT = @GL_GNULIB_MDA_CREAT@ GL_GNULIB_MDA_DUP = @GL_GNULIB_MDA_DUP@ GL_GNULIB_MDA_DUP2 = @GL_GNULIB_MDA_DUP2@ GL_GNULIB_MDA_ECVT = @GL_GNULIB_MDA_ECVT@ GL_GNULIB_MDA_EXECL = @GL_GNULIB_MDA_EXECL@ GL_GNULIB_MDA_EXECLE = @GL_GNULIB_MDA_EXECLE@ GL_GNULIB_MDA_EXECLP = @GL_GNULIB_MDA_EXECLP@ GL_GNULIB_MDA_EXECV = @GL_GNULIB_MDA_EXECV@ GL_GNULIB_MDA_EXECVE = @GL_GNULIB_MDA_EXECVE@ GL_GNULIB_MDA_EXECVP = @GL_GNULIB_MDA_EXECVP@ GL_GNULIB_MDA_EXECVPE = @GL_GNULIB_MDA_EXECVPE@ GL_GNULIB_MDA_FCLOSEALL = @GL_GNULIB_MDA_FCLOSEALL@ GL_GNULIB_MDA_FCVT = @GL_GNULIB_MDA_FCVT@ GL_GNULIB_MDA_FDOPEN = @GL_GNULIB_MDA_FDOPEN@ GL_GNULIB_MDA_FILENO = @GL_GNULIB_MDA_FILENO@ GL_GNULIB_MDA_GCVT = @GL_GNULIB_MDA_GCVT@ GL_GNULIB_MDA_GETCWD = @GL_GNULIB_MDA_GETCWD@ GL_GNULIB_MDA_GETPID = @GL_GNULIB_MDA_GETPID@ GL_GNULIB_MDA_GETW = @GL_GNULIB_MDA_GETW@ GL_GNULIB_MDA_ISATTY = @GL_GNULIB_MDA_ISATTY@ GL_GNULIB_MDA_LSEEK = @GL_GNULIB_MDA_LSEEK@ GL_GNULIB_MDA_MEMCCPY = @GL_GNULIB_MDA_MEMCCPY@ GL_GNULIB_MDA_MKDIR = @GL_GNULIB_MDA_MKDIR@ GL_GNULIB_MDA_MKTEMP = @GL_GNULIB_MDA_MKTEMP@ GL_GNULIB_MDA_OPEN = @GL_GNULIB_MDA_OPEN@ GL_GNULIB_MDA_PUTENV = @GL_GNULIB_MDA_PUTENV@ GL_GNULIB_MDA_PUTW = @GL_GNULIB_MDA_PUTW@ GL_GNULIB_MDA_READ = @GL_GNULIB_MDA_READ@ GL_GNULIB_MDA_RMDIR = @GL_GNULIB_MDA_RMDIR@ GL_GNULIB_MDA_STRDUP = @GL_GNULIB_MDA_STRDUP@ GL_GNULIB_MDA_SWAB = @GL_GNULIB_MDA_SWAB@ GL_GNULIB_MDA_TEMPNAM = @GL_GNULIB_MDA_TEMPNAM@ GL_GNULIB_MDA_TZSET = @GL_GNULIB_MDA_TZSET@ GL_GNULIB_MDA_UMASK = @GL_GNULIB_MDA_UMASK@ GL_GNULIB_MDA_UNLINK = @GL_GNULIB_MDA_UNLINK@ GL_GNULIB_MDA_WCSDUP = @GL_GNULIB_MDA_WCSDUP@ GL_GNULIB_MDA_WRITE = @GL_GNULIB_MDA_WRITE@ GL_GNULIB_MEMCHR = @GL_GNULIB_MEMCHR@ GL_GNULIB_MEMMEM = @GL_GNULIB_MEMMEM@ GL_GNULIB_MEMPCPY = @GL_GNULIB_MEMPCPY@ GL_GNULIB_MEMRCHR = @GL_GNULIB_MEMRCHR@ GL_GNULIB_MEMSET_EXPLICIT = @GL_GNULIB_MEMSET_EXPLICIT@ GL_GNULIB_MKDIR = @GL_GNULIB_MKDIR@ GL_GNULIB_MKDIRAT = @GL_GNULIB_MKDIRAT@ GL_GNULIB_MKDTEMP = @GL_GNULIB_MKDTEMP@ GL_GNULIB_MKFIFO = @GL_GNULIB_MKFIFO@ GL_GNULIB_MKFIFOAT = @GL_GNULIB_MKFIFOAT@ GL_GNULIB_MKNOD = @GL_GNULIB_MKNOD@ GL_GNULIB_MKNODAT = @GL_GNULIB_MKNODAT@ GL_GNULIB_MKOSTEMP = @GL_GNULIB_MKOSTEMP@ GL_GNULIB_MKOSTEMPS = @GL_GNULIB_MKOSTEMPS@ GL_GNULIB_MKSTEMP = @GL_GNULIB_MKSTEMP@ GL_GNULIB_MKSTEMPS = @GL_GNULIB_MKSTEMPS@ GL_GNULIB_MKTIME = @GL_GNULIB_MKTIME@ GL_GNULIB_NANOSLEEP = @GL_GNULIB_NANOSLEEP@ GL_GNULIB_NL_LANGINFO = @GL_GNULIB_NL_LANGINFO@ GL_GNULIB_NONBLOCKING = @GL_GNULIB_NONBLOCKING@ GL_GNULIB_OBSTACK_PRINTF = @GL_GNULIB_OBSTACK_PRINTF@ GL_GNULIB_OBSTACK_PRINTF_POSIX = @GL_GNULIB_OBSTACK_PRINTF_POSIX@ GL_GNULIB_OPEN = @GL_GNULIB_OPEN@ GL_GNULIB_OPENAT = @GL_GNULIB_OPENAT@ GL_GNULIB_OVERRIDES_STRUCT_STAT = @GL_GNULIB_OVERRIDES_STRUCT_STAT@ GL_GNULIB_PCLOSE = @GL_GNULIB_PCLOSE@ GL_GNULIB_PERROR = @GL_GNULIB_PERROR@ GL_GNULIB_PIPE = @GL_GNULIB_PIPE@ GL_GNULIB_PIPE2 = @GL_GNULIB_PIPE2@ GL_GNULIB_POPEN = @GL_GNULIB_POPEN@ GL_GNULIB_POSIX_MEMALIGN = @GL_GNULIB_POSIX_MEMALIGN@ GL_GNULIB_POSIX_OPENPT = @GL_GNULIB_POSIX_OPENPT@ GL_GNULIB_PREAD = @GL_GNULIB_PREAD@ GL_GNULIB_PRINTF = @GL_GNULIB_PRINTF@ GL_GNULIB_PRINTF_POSIX = @GL_GNULIB_PRINTF_POSIX@ GL_GNULIB_PTSNAME = @GL_GNULIB_PTSNAME@ GL_GNULIB_PTSNAME_R = @GL_GNULIB_PTSNAME_R@ GL_GNULIB_PUTC = @GL_GNULIB_PUTC@ GL_GNULIB_PUTCHAR = @GL_GNULIB_PUTCHAR@ GL_GNULIB_PUTENV = @GL_GNULIB_PUTENV@ GL_GNULIB_PUTS = @GL_GNULIB_PUTS@ GL_GNULIB_PWRITE = @GL_GNULIB_PWRITE@ GL_GNULIB_QSORT_R = @GL_GNULIB_QSORT_R@ GL_GNULIB_RANDOM = @GL_GNULIB_RANDOM@ GL_GNULIB_RANDOM_R = @GL_GNULIB_RANDOM_R@ GL_GNULIB_RAWMEMCHR = @GL_GNULIB_RAWMEMCHR@ GL_GNULIB_READ = @GL_GNULIB_READ@ GL_GNULIB_READLINK = @GL_GNULIB_READLINK@ GL_GNULIB_READLINKAT = @GL_GNULIB_READLINKAT@ GL_GNULIB_REALLOCARRAY = @GL_GNULIB_REALLOCARRAY@ GL_GNULIB_REALLOC_GNU = @GL_GNULIB_REALLOC_GNU@ GL_GNULIB_REALLOC_POSIX = @GL_GNULIB_REALLOC_POSIX@ GL_GNULIB_REALPATH = @GL_GNULIB_REALPATH@ GL_GNULIB_REMOVE = @GL_GNULIB_REMOVE@ GL_GNULIB_RENAME = @GL_GNULIB_RENAME@ GL_GNULIB_RENAMEAT = @GL_GNULIB_RENAMEAT@ GL_GNULIB_RMDIR = @GL_GNULIB_RMDIR@ GL_GNULIB_RPMATCH = @GL_GNULIB_RPMATCH@ GL_GNULIB_SCANF = @GL_GNULIB_SCANF@ GL_GNULIB_SECURE_GETENV = @GL_GNULIB_SECURE_GETENV@ GL_GNULIB_SETENV = @GL_GNULIB_SETENV@ GL_GNULIB_SETHOSTNAME = @GL_GNULIB_SETHOSTNAME@ GL_GNULIB_SETLOCALE = @GL_GNULIB_SETLOCALE@ GL_GNULIB_SETLOCALE_NULL = @GL_GNULIB_SETLOCALE_NULL@ GL_GNULIB_SIGABBREV_NP = @GL_GNULIB_SIGABBREV_NP@ GL_GNULIB_SIGDESCR_NP = @GL_GNULIB_SIGDESCR_NP@ GL_GNULIB_SLEEP = @GL_GNULIB_SLEEP@ GL_GNULIB_SNPRINTF = @GL_GNULIB_SNPRINTF@ GL_GNULIB_SPRINTF_POSIX = @GL_GNULIB_SPRINTF_POSIX@ GL_GNULIB_STAT = @GL_GNULIB_STAT@ GL_GNULIB_STDIO_H_NONBLOCKING = @GL_GNULIB_STDIO_H_NONBLOCKING@ GL_GNULIB_STDIO_H_SIGPIPE = @GL_GNULIB_STDIO_H_SIGPIPE@ GL_GNULIB_STPCPY = @GL_GNULIB_STPCPY@ GL_GNULIB_STPNCPY = @GL_GNULIB_STPNCPY@ GL_GNULIB_STRCASESTR = @GL_GNULIB_STRCASESTR@ GL_GNULIB_STRCHRNUL = @GL_GNULIB_STRCHRNUL@ GL_GNULIB_STRDUP = @GL_GNULIB_STRDUP@ GL_GNULIB_STRERROR = @GL_GNULIB_STRERROR@ GL_GNULIB_STRERRORNAME_NP = @GL_GNULIB_STRERRORNAME_NP@ GL_GNULIB_STRERROR_R = @GL_GNULIB_STRERROR_R@ GL_GNULIB_STRFTIME = @GL_GNULIB_STRFTIME@ GL_GNULIB_STRNCAT = @GL_GNULIB_STRNCAT@ GL_GNULIB_STRNDUP = @GL_GNULIB_STRNDUP@ GL_GNULIB_STRNLEN = @GL_GNULIB_STRNLEN@ GL_GNULIB_STRPBRK = @GL_GNULIB_STRPBRK@ GL_GNULIB_STRPTIME = @GL_GNULIB_STRPTIME@ GL_GNULIB_STRSEP = @GL_GNULIB_STRSEP@ GL_GNULIB_STRSIGNAL = @GL_GNULIB_STRSIGNAL@ GL_GNULIB_STRSTR = @GL_GNULIB_STRSTR@ GL_GNULIB_STRTOD = @GL_GNULIB_STRTOD@ GL_GNULIB_STRTOIMAX = @GL_GNULIB_STRTOIMAX@ GL_GNULIB_STRTOK_R = @GL_GNULIB_STRTOK_R@ GL_GNULIB_STRTOL = @GL_GNULIB_STRTOL@ GL_GNULIB_STRTOLD = @GL_GNULIB_STRTOLD@ GL_GNULIB_STRTOLL = @GL_GNULIB_STRTOLL@ GL_GNULIB_STRTOUL = @GL_GNULIB_STRTOUL@ GL_GNULIB_STRTOULL = @GL_GNULIB_STRTOULL@ GL_GNULIB_STRTOUMAX = @GL_GNULIB_STRTOUMAX@ GL_GNULIB_STRVERSCMP = @GL_GNULIB_STRVERSCMP@ GL_GNULIB_SYMLINK = @GL_GNULIB_SYMLINK@ GL_GNULIB_SYMLINKAT = @GL_GNULIB_SYMLINKAT@ GL_GNULIB_SYSTEM_POSIX = @GL_GNULIB_SYSTEM_POSIX@ GL_GNULIB_TIME = @GL_GNULIB_TIME@ GL_GNULIB_TIMEGM = @GL_GNULIB_TIMEGM@ GL_GNULIB_TIMESPEC_GET = @GL_GNULIB_TIMESPEC_GET@ GL_GNULIB_TIMESPEC_GETRES = @GL_GNULIB_TIMESPEC_GETRES@ GL_GNULIB_TIME_R = @GL_GNULIB_TIME_R@ GL_GNULIB_TIME_RZ = @GL_GNULIB_TIME_RZ@ GL_GNULIB_TMPFILE = @GL_GNULIB_TMPFILE@ GL_GNULIB_TOWCTRANS = @GL_GNULIB_TOWCTRANS@ GL_GNULIB_TRUNCATE = @GL_GNULIB_TRUNCATE@ GL_GNULIB_TTYNAME_R = @GL_GNULIB_TTYNAME_R@ GL_GNULIB_TZSET = @GL_GNULIB_TZSET@ GL_GNULIB_UNISTD_H_GETOPT = @GL_GNULIB_UNISTD_H_GETOPT@ GL_GNULIB_UNISTD_H_NONBLOCKING = @GL_GNULIB_UNISTD_H_NONBLOCKING@ GL_GNULIB_UNISTD_H_SIGPIPE = @GL_GNULIB_UNISTD_H_SIGPIPE@ GL_GNULIB_UNLINK = @GL_GNULIB_UNLINK@ GL_GNULIB_UNLINKAT = @GL_GNULIB_UNLINKAT@ GL_GNULIB_UNLOCKPT = @GL_GNULIB_UNLOCKPT@ GL_GNULIB_UNSETENV = @GL_GNULIB_UNSETENV@ GL_GNULIB_USLEEP = @GL_GNULIB_USLEEP@ GL_GNULIB_UTIMENSAT = @GL_GNULIB_UTIMENSAT@ GL_GNULIB_VASPRINTF = @GL_GNULIB_VASPRINTF@ GL_GNULIB_VDPRINTF = @GL_GNULIB_VDPRINTF@ GL_GNULIB_VFPRINTF = @GL_GNULIB_VFPRINTF@ GL_GNULIB_VFPRINTF_POSIX = @GL_GNULIB_VFPRINTF_POSIX@ GL_GNULIB_VFSCANF = @GL_GNULIB_VFSCANF@ GL_GNULIB_VPRINTF = @GL_GNULIB_VPRINTF@ GL_GNULIB_VPRINTF_POSIX = @GL_GNULIB_VPRINTF_POSIX@ GL_GNULIB_VSCANF = @GL_GNULIB_VSCANF@ GL_GNULIB_VSNPRINTF = @GL_GNULIB_VSNPRINTF@ GL_GNULIB_VSPRINTF_POSIX = @GL_GNULIB_VSPRINTF_POSIX@ GL_GNULIB_WCPCPY = @GL_GNULIB_WCPCPY@ GL_GNULIB_WCPNCPY = @GL_GNULIB_WCPNCPY@ GL_GNULIB_WCRTOMB = @GL_GNULIB_WCRTOMB@ GL_GNULIB_WCSCASECMP = @GL_GNULIB_WCSCASECMP@ GL_GNULIB_WCSCAT = @GL_GNULIB_WCSCAT@ GL_GNULIB_WCSCHR = @GL_GNULIB_WCSCHR@ GL_GNULIB_WCSCMP = @GL_GNULIB_WCSCMP@ GL_GNULIB_WCSCOLL = @GL_GNULIB_WCSCOLL@ GL_GNULIB_WCSCPY = @GL_GNULIB_WCSCPY@ GL_GNULIB_WCSCSPN = @GL_GNULIB_WCSCSPN@ GL_GNULIB_WCSDUP = @GL_GNULIB_WCSDUP@ GL_GNULIB_WCSFTIME = @GL_GNULIB_WCSFTIME@ GL_GNULIB_WCSLEN = @GL_GNULIB_WCSLEN@ GL_GNULIB_WCSNCASECMP = @GL_GNULIB_WCSNCASECMP@ GL_GNULIB_WCSNCAT = @GL_GNULIB_WCSNCAT@ GL_GNULIB_WCSNCMP = @GL_GNULIB_WCSNCMP@ GL_GNULIB_WCSNCPY = @GL_GNULIB_WCSNCPY@ GL_GNULIB_WCSNLEN = @GL_GNULIB_WCSNLEN@ GL_GNULIB_WCSNRTOMBS = @GL_GNULIB_WCSNRTOMBS@ GL_GNULIB_WCSPBRK = @GL_GNULIB_WCSPBRK@ GL_GNULIB_WCSRCHR = @GL_GNULIB_WCSRCHR@ GL_GNULIB_WCSRTOMBS = @GL_GNULIB_WCSRTOMBS@ GL_GNULIB_WCSSPN = @GL_GNULIB_WCSSPN@ GL_GNULIB_WCSSTR = @GL_GNULIB_WCSSTR@ GL_GNULIB_WCSTOK = @GL_GNULIB_WCSTOK@ GL_GNULIB_WCSWIDTH = @GL_GNULIB_WCSWIDTH@ GL_GNULIB_WCSXFRM = @GL_GNULIB_WCSXFRM@ GL_GNULIB_WCTOB = @GL_GNULIB_WCTOB@ GL_GNULIB_WCTOMB = @GL_GNULIB_WCTOMB@ GL_GNULIB_WCTRANS = @GL_GNULIB_WCTRANS@ GL_GNULIB_WCTYPE = @GL_GNULIB_WCTYPE@ GL_GNULIB_WCWIDTH = @GL_GNULIB_WCWIDTH@ GL_GNULIB_WMEMCHR = @GL_GNULIB_WMEMCHR@ GL_GNULIB_WMEMCMP = @GL_GNULIB_WMEMCMP@ GL_GNULIB_WMEMCPY = @GL_GNULIB_WMEMCPY@ GL_GNULIB_WMEMMOVE = @GL_GNULIB_WMEMMOVE@ GL_GNULIB_WMEMPCPY = @GL_GNULIB_WMEMPCPY@ GL_GNULIB_WMEMSET = @GL_GNULIB_WMEMSET@ GL_GNULIB_WRITE = @GL_GNULIB_WRITE@ GL_GNULIB__EXIT = @GL_GNULIB__EXIT@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GNULIBHEADERS_OVERRIDE_WINT_T = @GNULIBHEADERS_OVERRIDE_WINT_T@ GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@ GREP = @GREP@ HARD_LOCALE_LIB = @HARD_LOCALE_LIB@ HAVE_ALIGNED_ALLOC = @HAVE_ALIGNED_ALLOC@ HAVE_ALLOCA_H = @HAVE_ALLOCA_H@ HAVE_ATOLL = @HAVE_ATOLL@ HAVE_BTOWC = @HAVE_BTOWC@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_COPY_FILE_RANGE = @HAVE_COPY_FILE_RANGE@ HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ HAVE_DECL_ECVT = @HAVE_DECL_ECVT@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_EXECVPE = @HAVE_DECL_EXECVPE@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FCLOSEALL = @HAVE_DECL_FCLOSEALL@ HAVE_DECL_FCVT = @HAVE_DECL_FCVT@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GCVT = @HAVE_DECL_GCVT@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_GETW = @HAVE_DECL_GETW@ HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@ HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_PROGRAM_INVOCATION_NAME = @HAVE_DECL_PROGRAM_INVOCATION_NAME@ HAVE_DECL_PUTW = @HAVE_DECL_PUTW@ HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DECL_WCSDUP = @HAVE_DECL_WCSDUP@ HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ HAVE_ERROR = @HAVE_ERROR@ HAVE_ERROR_AT_LINE = @HAVE_ERROR_AT_LINE@ HAVE_ERROR_H = @HAVE_ERROR_H@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_EXECVPE = @HAVE_EXECVPE@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHMODAT = @HAVE_FCHMODAT@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FCNTL = @HAVE_FCNTL@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FEATURES_H = @HAVE_FEATURES_H@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FREELOCALE = @HAVE_FREELOCALE@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSTATAT = @HAVE_FSTATAT@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_FUTIMENS = @HAVE_FUTIMENS@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETENTROPY = @HAVE_GETENTROPY@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GETPASS = @HAVE_GETPASS@ HAVE_GETPROGNAME = @HAVE_GETPROGNAME@ HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ HAVE_GETUMASK = @HAVE_GETUMASK@ HAVE_GRANTPT = @HAVE_GRANTPT@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_IMAXABS = @HAVE_IMAXABS@ HAVE_IMAXDIV = @HAVE_IMAXDIV@ HAVE_IMAXDIV_T = @HAVE_IMAXDIV_T@ HAVE_INITSTATE = @HAVE_INITSTATE@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_ISWBLANK = @HAVE_ISWBLANK@ HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ HAVE_LANGINFO_ALTMON = @HAVE_LANGINFO_ALTMON@ HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ HAVE_LCHMOD = @HAVE_LCHMOD@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_LSTAT = @HAVE_LSTAT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBRLEN = @HAVE_MBRLEN@ HAVE_MBRTOWC = @HAVE_MBRTOWC@ HAVE_MBSINIT = @HAVE_MBSINIT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ HAVE_MBTOWC = @HAVE_MBTOWC@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MEMSET_EXPLICIT = @HAVE_MEMSET_EXPLICIT@ HAVE_MKDIRAT = @HAVE_MKDIRAT@ HAVE_MKDTEMP = @HAVE_MKDTEMP@ HAVE_MKFIFO = @HAVE_MKFIFO@ HAVE_MKFIFOAT = @HAVE_MKFIFOAT@ HAVE_MKNOD = @HAVE_MKNOD@ HAVE_MKNODAT = @HAVE_MKNODAT@ HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ HAVE_MKSTEMP = @HAVE_MKSTEMP@ HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ HAVE_NEWLOCALE = @HAVE_NEWLOCALE@ HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ HAVE_OPENAT = @HAVE_OPENAT@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_POSIX_MEMALIGN = @HAVE_POSIX_MEMALIGN@ HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PTSNAME = @HAVE_PTSNAME@ HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_QSORT_R = @HAVE_QSORT_R@ HAVE_RANDOM = @HAVE_RANDOM@ HAVE_RANDOM_H = @HAVE_RANDOM_H@ HAVE_RANDOM_R = @HAVE_RANDOM_R@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ HAVE_REALPATH = @HAVE_REALPATH@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_RPMATCH = @HAVE_RPMATCH@ HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ HAVE_SETENV = @HAVE_SETENV@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SETSTATE = @HAVE_SETSTATE@ HAVE_SIGABBREV_NP = @HAVE_SIGABBREV_NP@ HAVE_SIGDESCR_NP = @HAVE_SIGDESCR_NP@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRERRORNAME_NP = @HAVE_STRERRORNAME_NP@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRPTIME = @HAVE_STRPTIME@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRTOD = @HAVE_STRTOD@ HAVE_STRTOL = @HAVE_STRTOL@ HAVE_STRTOLD = @HAVE_STRTOLD@ HAVE_STRTOLL = @HAVE_STRTOLL@ HAVE_STRTOUL = @HAVE_STRTOUL@ HAVE_STRTOULL = @HAVE_STRTOULL@ HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_TIMEGM = @HAVE_TIMEGM@ HAVE_TIMESPEC_GET = @HAVE_TIMESPEC_GET@ HAVE_TIMESPEC_GETRES = @HAVE_TIMESPEC_GETRES@ HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WCPCPY = @HAVE_WCPCPY@ HAVE_WCPNCPY = @HAVE_WCPNCPY@ HAVE_WCRTOMB = @HAVE_WCRTOMB@ HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ HAVE_WCSCAT = @HAVE_WCSCAT@ HAVE_WCSCHR = @HAVE_WCSCHR@ HAVE_WCSCMP = @HAVE_WCSCMP@ HAVE_WCSCOLL = @HAVE_WCSCOLL@ HAVE_WCSCPY = @HAVE_WCSCPY@ HAVE_WCSCSPN = @HAVE_WCSCSPN@ HAVE_WCSDUP = @HAVE_WCSDUP@ HAVE_WCSFTIME = @HAVE_WCSFTIME@ HAVE_WCSLEN = @HAVE_WCSLEN@ HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ HAVE_WCSNCAT = @HAVE_WCSNCAT@ HAVE_WCSNCMP = @HAVE_WCSNCMP@ HAVE_WCSNCPY = @HAVE_WCSNCPY@ HAVE_WCSNLEN = @HAVE_WCSNLEN@ HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ HAVE_WCSPBRK = @HAVE_WCSPBRK@ HAVE_WCSRCHR = @HAVE_WCSRCHR@ HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ HAVE_WCSSPN = @HAVE_WCSSPN@ HAVE_WCSSTR = @HAVE_WCSSTR@ HAVE_WCSTOK = @HAVE_WCSTOK@ HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ HAVE_WCSXFRM = @HAVE_WCSXFRM@ HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE_WINT_T = @HAVE_WINT_T@ HAVE_WMEMCHR = @HAVE_WMEMCHR@ HAVE_WMEMCMP = @HAVE_WMEMCMP@ HAVE_WMEMCPY = @HAVE_WMEMCPY@ HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ HAVE_WMEMPCPY = @HAVE_WMEMPCPY@ HAVE_WMEMSET = @HAVE_WMEMSET@ HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ HAVE__EXIT = @HAVE__EXIT@ IMPRIMATUR_MAKEINFOFLAGS = @IMPRIMATUR_MAKEINFOFLAGS@ IMPRIMATUR_MODULE_DIR = @IMPRIMATUR_MODULE_DIR@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@ INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBGNU_LIBDEPS = @LIBGNU_LIBDEPS@ LIBGNU_LTLIBDEPS = @LIBGNU_LTLIBDEPS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPMULTITHREAD = @LIBPMULTITHREAD@ LIBPTHREAD = @LIBPTHREAD@ LIBS = @LIBS@ LIBSTDTHREAD = @LIBSTDTHREAD@ LIBTHREAD = @LIBTHREAD@ LIB_HARD_LOCALE = @LIB_HARD_LOCALE@ LIB_MBRTOWC = @LIB_MBRTOWC@ LIB_NL_LANGINFO = @LIB_NL_LANGINFO@ LIB_SCHED_YIELD = @LIB_SCHED_YIELD@ LIB_SETLOCALE_NULL = @LIB_SETLOCALE_NULL@ LIMITS_H = @LIMITS_H@ LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ LOCALENAME_ENHANCE_LOCALE_FUNCS = @LOCALENAME_ENHANCE_LOCALE_FUNCS@ LOCALE_FR = @LOCALE_FR@ LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ LOCALE_JA = @LOCALE_JA@ LOCALE_ZH_CN = @LOCALE_ZH_CN@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBTHREAD = @LTLIBTHREAD@ MAKEINFO = @MAKEINFO@ MBRTOWC_LIB = @MBRTOWC_LIB@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NEXT_ASSERT_H = @NEXT_ASSERT_H@ NEXT_AS_FIRST_DIRECTIVE_ASSERT_H = @NEXT_AS_FIRST_DIRECTIVE_ASSERT_H@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_ERROR_H = @NEXT_AS_FIRST_DIRECTIVE_ERROR_H@ NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@ NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_ERROR_H = @NEXT_ERROR_H@ NEXT_FCNTL_H = @NEXT_FCNTL_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_LOCALE_H = @NEXT_LOCALE_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STDLIB_H = @NEXT_STDLIB_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_TIME_H = @NEXT_TIME_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NEXT_WCHAR_H = @NEXT_WCHAR_H@ NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ 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@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PRIPTR_PREFIX = @PRIPTR_PREFIX@ PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ RANLIB = @RANLIB@ RENDITION = @RENDITION@ REPLACE_ACCESS = @REPLACE_ACCESS@ REPLACE_ALIGNED_ALLOC = @REPLACE_ALIGNED_ALLOC@ REPLACE_BTOWC = @REPLACE_BTOWC@ REPLACE_CALLOC_FOR_CALLOC_GNU = @REPLACE_CALLOC_FOR_CALLOC_GNU@ REPLACE_CALLOC_FOR_CALLOC_POSIX = @REPLACE_CALLOC_FOR_CALLOC_POSIX@ REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ REPLACE_CHMOD = @REPLACE_CHMOD@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_COPY_FILE_RANGE = @REPLACE_COPY_FILE_RANGE@ REPLACE_CREAT = @REPLACE_CREAT@ REPLACE_CTIME = @REPLACE_CTIME@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_DUP3 = @REPLACE_DUP3@ REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ REPLACE_ERROR = @REPLACE_ERROR@ REPLACE_ERROR_AT_LINE = @REPLACE_ERROR_AT_LINE@ REPLACE_EXECL = @REPLACE_EXECL@ REPLACE_EXECLE = @REPLACE_EXECLE@ REPLACE_EXECLP = @REPLACE_EXECLP@ REPLACE_EXECV = @REPLACE_EXECV@ REPLACE_EXECVE = @REPLACE_EXECVE@ REPLACE_EXECVP = @REPLACE_EXECVP@ REPLACE_EXECVPE = @REPLACE_EXECVPE@ REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ REPLACE_FCHMODAT = @REPLACE_FCHMODAT@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FCNTL = @REPLACE_FCNTL@ REPLACE_FDATASYNC = @REPLACE_FDATASYNC@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FFSLL = @REPLACE_FFSLL@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FOPEN_FOR_FOPEN_GNU = @REPLACE_FOPEN_FOR_FOPEN_GNU@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREE = @REPLACE_FREE@ REPLACE_FREELOCALE = @REPLACE_FREELOCALE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FSTAT = @REPLACE_FSTAT@ REPLACE_FSTATAT = @REPLACE_FSTATAT@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETENTROPY = @REPLACE_GETENTROPY@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOADAVG = @REPLACE_GETLOADAVG@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_GETPASS = @REPLACE_GETPASS@ REPLACE_GETPASS_FOR_GETPASS_GNU = @REPLACE_GETPASS_FOR_GETPASS_GNU@ REPLACE_GETPROGNAME = @REPLACE_GETPROGNAME@ REPLACE_GETSUBOPT = @REPLACE_GETSUBOPT@ REPLACE_GMTIME = @REPLACE_GMTIME@ REPLACE_IMAXABS = @REPLACE_IMAXABS@ REPLACE_IMAXDIV = @REPLACE_IMAXDIV@ REPLACE_INITSTATE = @REPLACE_INITSTATE@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ REPLACE_ISWDIGIT = @REPLACE_ISWDIGIT@ REPLACE_ISWXDIGIT = @REPLACE_ISWXDIGIT@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_LSTAT = @REPLACE_LSTAT@ REPLACE_MALLOC_FOR_MALLOC_GNU = @REPLACE_MALLOC_FOR_MALLOC_GNU@ REPLACE_MALLOC_FOR_MALLOC_POSIX = @REPLACE_MALLOC_FOR_MALLOC_POSIX@ REPLACE_MBRLEN = @REPLACE_MBRLEN@ REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ REPLACE_MBSINIT = @REPLACE_MBSINIT@ REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ REPLACE_MBSTOWCS = @REPLACE_MBSTOWCS@ REPLACE_MBTOWC = @REPLACE_MBTOWC@ REPLACE_MB_CUR_MAX = @REPLACE_MB_CUR_MAX@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_MEMPCPY = @REPLACE_MEMPCPY@ REPLACE_MKDIR = @REPLACE_MKDIR@ REPLACE_MKFIFO = @REPLACE_MKFIFO@ REPLACE_MKFIFOAT = @REPLACE_MKFIFOAT@ REPLACE_MKNOD = @REPLACE_MKNOD@ REPLACE_MKNODAT = @REPLACE_MKNODAT@ REPLACE_MKOSTEMP = @REPLACE_MKOSTEMP@ REPLACE_MKOSTEMPS = @REPLACE_MKOSTEMPS@ REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ REPLACE_MKTIME = @REPLACE_MKTIME@ REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ REPLACE_NEWLOCALE = @REPLACE_NEWLOCALE@ REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_OPEN = @REPLACE_OPEN@ REPLACE_OPENAT = @REPLACE_OPENAT@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_PIPE2 = @REPLACE_PIPE2@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_POSIX_MEMALIGN = @REPLACE_POSIX_MEMALIGN@ REPLACE_POSIX_OPENPT = @REPLACE_POSIX_OPENPT@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PTSNAME = @REPLACE_PTSNAME@ REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ REPLACE_PUTENV = @REPLACE_PUTENV@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_QSORT_R = @REPLACE_QSORT_R@ REPLACE_RANDOM = @REPLACE_RANDOM@ REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ REPLACE_READ = @REPLACE_READ@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_READLINKAT = @REPLACE_READLINKAT@ REPLACE_REALLOCARRAY = @REPLACE_REALLOCARRAY@ REPLACE_REALLOC_FOR_REALLOC_GNU = @REPLACE_REALLOC_FOR_REALLOC_GNU@ REPLACE_REALLOC_FOR_REALLOC_POSIX = @REPLACE_REALLOC_FOR_REALLOC_POSIX@ REPLACE_REALPATH = @REPLACE_REALPATH@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_SETENV = @REPLACE_SETENV@ REPLACE_SETHOSTNAME = @REPLACE_SETHOSTNAME@ REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ REPLACE_SETSTATE = @REPLACE_SETSTATE@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_STAT = @REPLACE_STAT@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPCPY = @REPLACE_STPCPY@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERRORNAME_NP = @REPLACE_STRERRORNAME_NP@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRFTIME = @REPLACE_STRFTIME@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOD = @REPLACE_STRTOD@ REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_STRTOL = @REPLACE_STRTOL@ REPLACE_STRTOLD = @REPLACE_STRTOLD@ REPLACE_STRTOLL = @REPLACE_STRTOLL@ REPLACE_STRTOUL = @REPLACE_STRTOUL@ REPLACE_STRTOULL = @REPLACE_STRTOULL@ REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ REPLACE_TIME = @REPLACE_TIME@ REPLACE_TIMEGM = @REPLACE_TIMEGM@ REPLACE_TIMESPEC_GET = @REPLACE_TIMESPEC_GET@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_TZSET = @REPLACE_TZSET@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_UNSETENV = @REPLACE_UNSETENV@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ REPLACE_WCSCMP = @REPLACE_WCSCMP@ REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ REPLACE_WCSNCMP = @REPLACE_WCSNCMP@ REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ REPLACE_WCSSTR = @REPLACE_WCSSTR@ REPLACE_WCSTOK = @REPLACE_WCSTOK@ REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ REPLACE_WCTOB = @REPLACE_WCTOB@ REPLACE_WCTOMB = @REPLACE_WCTOMB@ REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ REPLACE_WMEMCMP = @REPLACE_WMEMCMP@ REPLACE_WMEMPCPY = @REPLACE_WMEMPCPY@ REPLACE_WRITE = @REPLACE_WRITE@ REPLACE__EXIT = @REPLACE__EXIT@ RUSH_DEFAULT_CONFIG = @RUSH_DEFAULT_CONFIG@ SCHED_YIELD_LIB = @SCHED_YIELD_LIB@ SED = @SED@ SETLOCALE_NULL_LIB = @SETLOCALE_NULL_LIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ STDCKDINT_H = @STDCKDINT_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_TIME_UTC = @TIME_H_DEFINES_TIME_UTC@ UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@ UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ UNISTD_H_HAVE_SYS_RANDOM_H = @UNISTD_H_HAVE_SYS_RANDOM_H@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ 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@ gl_LIBOBJDEPS = @gl_LIBOBJDEPS@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJDEPS = @gltests_LIBOBJDEPS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LIBRARIES = librush.a librush_a_SOURCES = \ argcv.c\ i18n.c\ progname.c\ readfmt.c\ rushdb.c\ slist.c\ utmp.c\ version.c\ wildmatch.c\ wtmp.c nodist_librush_a_SOURCES = wordsplit.c EXTRA_DIST = \ wordsplit/wordsplit.c\ wordsplit/wordsplit.h noinst_HEADERS = librush.h AM_CPPFLAGS = \ -I$(top_srcdir)/gnu\ -I$(top_builddir)/gnu\ -I$(srcdir)/wordsplit\ -DLOCALEDIR=\"$(localedir)\" 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 lib/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnits lib/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) librush.a: $(librush_a_OBJECTS) $(librush_a_DEPENDENCIES) $(EXTRA_librush_a_DEPENDENCIES) $(AM_V_at)-rm -f librush.a $(AM_V_AR)$(librush_a_AR) librush.a $(librush_a_OBJECTS) $(librush_a_LIBADD) $(AM_V_at)$(RANLIB) librush.a mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/argcv.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i18n.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/progname.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/readfmt.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rushdb.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slist.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/utmp.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/version.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wildmatch.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wordsplit.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wtmp.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .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: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LIBRARIES) $(HEADERS) 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) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/argcv.Po -rm -f ./$(DEPDIR)/i18n.Po -rm -f ./$(DEPDIR)/progname.Po -rm -f ./$(DEPDIR)/readfmt.Po -rm -f ./$(DEPDIR)/rushdb.Po -rm -f ./$(DEPDIR)/slist.Po -rm -f ./$(DEPDIR)/utmp.Po -rm -f ./$(DEPDIR)/version.Po -rm -f ./$(DEPDIR)/wildmatch.Po -rm -f ./$(DEPDIR)/wordsplit.Po -rm -f ./$(DEPDIR)/wtmp.Po -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 -f ./$(DEPDIR)/argcv.Po -rm -f ./$(DEPDIR)/i18n.Po -rm -f ./$(DEPDIR)/progname.Po -rm -f ./$(DEPDIR)/readfmt.Po -rm -f ./$(DEPDIR)/rushdb.Po -rm -f ./$(DEPDIR)/slist.Po -rm -f ./$(DEPDIR)/utmp.Po -rm -f ./$(DEPDIR)/version.Po -rm -f ./$(DEPDIR)/wildmatch.Po -rm -f ./$(DEPDIR)/wordsplit.Po -rm -f ./$(DEPDIR)/wtmp.Po -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: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles 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-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 # 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: ������������rush-2.4/lib/librush.h������������������������������������������������������������������������������0000644�0001750�0001750�00000010013�14643176117�014722� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* This file is part of GNU Rush. Copyright (C) 2008-2024 Sergey Poznyakoff GNU Rush is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GNU Rush is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. */ #include <unistd.h> #include <stdlib.h> #include <gettext.h> #include <sys/stat.h> #include <sys/time.h> #define N_(s) s #define _(s) gettext(s) #ifndef RUSH_ARG_UNUSED # define RUSH_ARG_UNUSED __attribute__ ((__unused__)) #endif #ifndef RUSH_PRINTFLIKE # define RUSH_PRINTFLIKE(fmt,narg) __attribute__ ((__format__ (__printf__, fmt, narg))) #endif #ifndef RUSH_NORETURN # define RUSH_NORETURN __attribute__ ((noreturn)) #endif extern const char *program_name; void rush_set_program_name(const char *argv0); struct rush_wtmp { size_t reclen; pid_t pid; struct timeval start; struct timeval stop; char *user; char *rule; char *command; }; #define RUSH_WTMP_DATA_PTR(w) ((char*)&(w)->pid) #define RUSH_STATUS_AVAIL 0 #define RUSH_STATUS_INUSE 1 #define RUSH_STATUS_MAP_ANY 0 #define RUSH_STATUS_MAP_BIT(stat) (1<<(stat)) #define RUSH_STATUS_MAP_ISSET(map, stat) ((map) & RUSH_STATUS_MAP_BIT(stat)) struct rush_utmp { int status; off_t offset; }; #define RUSH_UTMP_NAME "utmp" #define RUSH_WTMP_NAME "wtmp" enum rushdb_result { rushdb_result_ok, rushdb_result_eof, rushdb_result_fail }; extern mode_t rushdb_umask; extern mode_t rushdb_dir_mode; extern mode_t rushdb_file_mode; enum rush_wtmp_dir { rush_wtmp_forward, rush_wtmp_backward }; void rush_wtmp_set_dir(enum rush_wtmp_dir dir); int rush_wtmp_rewind(void); int rush_wtmp_open(const char *name, int rw); enum rushdb_result rush_wtmp_read(struct rush_wtmp **pwtmp); int rush_wtmp_seek(off_t off); off_t rush_wtmp_append(struct rush_wtmp *wtmp); int rush_wtmp_close(void); int rush_wtmp_update(struct timeval *tv); int rush_utmp_open(const char *name, int rw); enum rushdb_result rush_utmp_read(int statmap, int *pstatus, struct rush_wtmp **pwtmp); int rush_utmp_chstatus(int status); int rush_utmp_write(struct rush_wtmp *wtmp); int rush_utmp_close(); void rush_utmp_lock_all(int type); void rush_utmp_unlock_all(void); enum rushdb_result rushdb_open(const char *base_name, int rw); int rushdb_close(void); int rushdb_start(struct rush_wtmp *wtmp); int rushdb_stop(void); void rushdb_backward_direction(void); #define RUSH_LOCK_READ 0 #define RUSH_LOCK_WRITE 1 int rushdb_lock(int fd, size_t size, off_t offset, int whence, int type); int rushdb_unlock(int fd, size_t size, off_t offset, int whence); typedef struct slist *slist_t; #define LIST_APPEND(elt, head, tail) \ do { \ if (tail) \ (tail)->next = elt; \ else \ head = elt; \ tail = elt; \ } while(0) void slist_append(slist_t slist, const char *p, size_t len); char *slist_reduce(slist_t slist, char **pbuf, size_t *psize); slist_t slist_create(void); void slist_free(slist_t slist); char *slist_alloc(slist_t slist, size_t len); void version(const char *progname); typedef struct rushdb_format *rushdb_format_t; extern char *rushdb_date_format; extern char *rushdb_error_string; rushdb_format_t rushdb_compile_format(char *fmt); int rushdb_print(rushdb_format_t form, struct rush_wtmp *wtmp, int newline); void rushdb_print_header(rushdb_format_t form); char *rush_read_format(const char *name); void rush_i18n_init(void); const char *user_gettext(const char *locale, const char *domain, const char *dir, const char *msg); void argcv_free(int argc, char **argv); char *argcv_string(int argc, char **argv); int wildmatch(char const *expr, char const *name, size_t len); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/lib/wildmatch.c����������������������������������������������������������������������������0000644�0001750�0001750�00000005761�14643176120�015231� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* This file is part of GNU Rush. Copyright (C) 2008-2024 Sergey Poznyakoff GNU Rush is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GNU Rush is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include "wordsplit.h" enum { WILD_FALSE = 0, WILD_TRUE, WILD_ABORT }; static int match_char_class(char const **pexpr, char c) { int res; int rc; char const *expr = *pexpr; expr++; if (*expr == '^') { res = 0; expr++; } else res = 1; if (*expr == '-' || *expr == ']') rc = c == *expr++; else rc = !res; for (; *expr && *expr != ']'; expr++) { if (rc == res) { if (*expr == '\\' && expr[1] == ']') expr++; } else if (expr[1] == '-') { if (*expr == '\\') rc = *++expr == c; else { rc = *expr <= c && c <= expr[2]; expr += 2; } } else if (*expr == '\\' && expr[1] == ']') rc = *++expr == c; else rc = *expr == c; } *pexpr = *expr ? expr + 1 : expr; return rc == res; } #define END_OF_NAME(s,l) ((l) == 0 || *(s) == 0) #define NEXT_CHAR(s,l) (s++, l--) int wilder_match(char const *expr, char const *name, size_t len) { int c; while (expr && *expr) { if (END_OF_NAME(name, len) && *expr != '*') return WILD_ABORT; switch (*expr) { case '*': while (*++expr == '*') ; if (*expr == 0) return WILD_TRUE; while (!END_OF_NAME(name, len)) { int res; res = wilder_match(expr, name, len); if (res != WILD_FALSE) return res; NEXT_CHAR(name, len); } return WILD_ABORT; case '?': expr++; NEXT_CHAR(name, len); break; case '[': if (!match_char_class(&expr, *name)) return WILD_FALSE; NEXT_CHAR(name, len); break; case '\\': if (expr[1]) { c = *++expr; expr++; if (*name != wordsplit_c_unquote_char(c)) return WILD_FALSE; NEXT_CHAR(name, len); break; } /* fall through */ default: if (*expr != *name) return WILD_FALSE; expr++; NEXT_CHAR(name, len); } } return END_OF_NAME(name, len) ? WILD_TRUE : WILD_FALSE; } /* Return 0 if first LEN bytes of NAME match globbing pattern EXPR. */ int wildmatch(char const *expr, char const *name, size_t len) { return wilder_match(expr, name, len) != WILD_TRUE; } ���������������rush-2.4/lib/argcv.c��������������������������������������������������������������������������������0000644�0001750�0001750�00000003003�14643176117�014350� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* This file is part of GNU Rush. Copyright (C) 2008-2024 Sergey Poznyakoff GNU Rush is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GNU Rush is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include "wordsplit.h" #include "librush.h" /* frees all elements of an argv array and the array itself */ void argcv_free(int argc, char **argv) { if (argc) { while (--argc >= 0) free(argv[argc]); free(argv); } } /* Make a argv an make string separated by ' '. */ char * argcv_string(int argc, char **argv) { int i; slist_t slist; char *ret; slist = slist_create(); for (i = 0; i < argc; i++) { size_t len; int quote; if (i) slist_append(slist, " ", 1); len = wordsplit_c_quoted_length(argv[i], 0, "e); if (quote) slist_append(slist, "\"", 1); wordsplit_c_quote_copy(slist_alloc(slist, len), argv[i], 0); if (quote) slist_append(slist, "\"", 1); } slist_reduce(slist, &ret, NULL); slist_free(slist); return ret; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/lib/progname.c�����������������������������������������������������������������������������0000644�0001750�0001750�00000002152�14643176117�015062� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* This file is part of Rush. Copyright (C) 2009-2024 Sergey Poznyakoff Rush 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. Rush is distributed in the hope that 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 Rush. If not, see <http://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include <stdlib.h> #include <librush.h> const char *program_name = NULL; void rush_set_program_name (const char *argv0) { const char *slash; const char *base; slash = strrchr(argv0, '/'); base = (slash != NULL ? slash + 1 : argv0); if (base - argv0 >= 7 && strncmp (base - 7, "/.libs/", 7) == 0 && strncmp (base, "lt-", 3) == 0) base += 3; program_name = base; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/THANKS�������������������������������������������������������������������������������������0000644�0001750�0001750�00000000546�14643176116�013257� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Many people contributed to GNU Rush by reporting problems, suggesting various improvements or submitting actual code. Here is a list of these people in alphabetical order. Help us keep it complete and exempt of errors. Jason Heiss <jheiss@attinteractive.com> Nelson H. F. Beebe <beebe@math.utah.edu> ;;;; Local Variables: ;;;; coding: utf-8 ;;;; End: ����������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/����������������������������������������������������������������������������������������0000755�0001750�0001750�00000000000�14655401526�012656� 5����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/double-slash-root.m4��������������������������������������������������������������������0000644�0001750�0001750�00000003125�14436424420�016457� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# double-slash-root.m4 serial 4 -*- Autoconf -*- dnl Copyright (C) 2006, 2008-2023 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. AC_DEFUN([gl_DOUBLE_SLASH_ROOT], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_CACHE_CHECK([whether // is distinct from /], [gl_cv_double_slash_root], [ if test x"$cross_compiling" = xyes ; then # When cross-compiling, there is no way to tell whether // is special # short of a list of hosts. However, the only known hosts to date # that have a distinct // are Apollo DomainOS (too old to port to), # Cygwin, and z/OS. If anyone knows of another system for which // has # special semantics and is distinct from /, please report it to # <bug-gnulib@gnu.org>. case $host in *-cygwin | i370-ibm-openedition) gl_cv_double_slash_root=yes ;; *) # Be optimistic and assume that / and // are the same when we # don't know. gl_cv_double_slash_root='unknown, assuming no' ;; esac else set x `ls -di / // 2>/dev/null` if test "$[2]" = "$[4]" && wc //dev/null >/dev/null 2>&1; then gl_cv_double_slash_root=no else gl_cv_double_slash_root=yes fi fi]) if test "$gl_cv_double_slash_root" = yes; then AC_DEFINE([DOUBLE_SLASH_IS_DISTINCT_ROOT], [1], [Define to 1 if // is a file system root distinct from /.]) fi ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/stdlib_h.m4�����������������������������������������������������������������������������0000644�0001750�0001750�00000027355�14436424420�014717� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# stdlib_h.m4 serial 75 dnl Copyright (C) 2007-2023 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. AC_DEFUN_ONCE([gl_STDLIB_H], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) gl_NEXT_HEADERS([stdlib.h]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use, and which is not dnl guaranteed by C89. gl_WARN_ON_USE_PREPARE([[#include <stdlib.h> #if HAVE_SYS_LOADAVG_H /* OpenIndiana has a bug: <sys/time.h> must be included before <sys/loadavg.h>. */ # include <sys/time.h> # include <sys/loadavg.h> #endif #if HAVE_RANDOM_H # include <random.h> #endif ]], [_Exit aligned_alloc atoll canonicalize_file_name free getloadavg getprogname getsubopt grantpt initstate initstate_r mbstowcs mbtowc mkdtemp mkostemp mkostemps mkstemp mkstemps posix_memalign posix_openpt ptsname ptsname_r qsort_r random random_r reallocarray realpath rpmatch secure_getenv setenv setstate setstate_r srandom srandom_r strtod strtol strtold strtoll strtoul strtoull unlockpt unsetenv]) AC_REQUIRE([AC_C_RESTRICT]) dnl Test whether MB_CUR_MAX needs to be overridden. dnl On Solaris 10, in UTF-8 locales, its value is 3 but needs to be 4. dnl Fortunately, we can do this because on this platform MB_LEN_MAX is 5. AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([gt_LOCALE_FR_UTF8]) AC_CACHE_CHECK([whether MB_CUR_MAX is correct], [gl_cv_macro_MB_CUR_MAX_good], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. changequote(,)dnl case "$host_os" in # Guess no on Solaris. solaris*) gl_cv_macro_MB_CUR_MAX_good="guessing no" ;; # Guess yes otherwise. *) gl_cv_macro_MB_CUR_MAX_good="guessing yes" ;; esac changequote([,])dnl if test $LOCALE_FR_UTF8 != none; then AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> #include <stdlib.h> int main () { int result = 0; if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) { if (MB_CUR_MAX < 4) result |= 1; } return result; }]])], [gl_cv_macro_MB_CUR_MAX_good=yes], [gl_cv_macro_MB_CUR_MAX_good=no], [:]) fi ]) case "$gl_cv_macro_MB_CUR_MAX_good" in *yes) ;; *) REPLACE_MB_CUR_MAX=1 ;; esac AC_CHECK_DECLS_ONCE([ecvt]) if test $ac_cv_have_decl_ecvt = no; then HAVE_DECL_ECVT=0 fi AC_CHECK_DECLS_ONCE([fcvt]) if test $ac_cv_have_decl_fcvt = no; then HAVE_DECL_FCVT=0 fi AC_CHECK_DECLS_ONCE([gcvt]) if test $ac_cv_have_decl_gcvt = no; then HAVE_DECL_GCVT=0 fi ]) # gl_STDLIB_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_STDLIB_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_STDLIB_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_STDLIB_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_STDLIB_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB__EXIT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ALIGNED_ALLOC]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ATOLL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CALLOC_GNU]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CALLOC_POSIX]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CANONICALIZE_FILE_NAME]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FREE_POSIX]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETLOADAVG]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETPROGNAME]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETSUBOPT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GRANTPT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MALLOC_GNU]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MALLOC_POSIX]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSTOWCS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBTOWC]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MKDTEMP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MKOSTEMP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MKOSTEMPS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MKSTEMP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MKSTEMPS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_POSIX_MEMALIGN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_POSIX_OPENPT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PTSNAME]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PTSNAME_R]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PUTENV]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_QSORT_R]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RANDOM]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RANDOM_R]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_REALLOCARRAY]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_REALLOC_GNU]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_REALLOC_POSIX]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_REALPATH]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RPMATCH]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SECURE_GETENV]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SETENV]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRTOD]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRTOL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRTOLD]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRTOLL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRTOUL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRTOULL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SYSTEM_POSIX]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNLOCKPT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNSETENV]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCTOMB]) dnl Support Microsoft deprecated alias function names by default. gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_ECVT], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_FCVT], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_GCVT], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_MKTEMP], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_PUTENV], [1]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_STDLIB_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) ]) AC_DEFUN([gl_STDLIB_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE__EXIT=1; AC_SUBST([HAVE__EXIT]) HAVE_ALIGNED_ALLOC=1; AC_SUBST([HAVE_ALIGNED_ALLOC]) HAVE_ATOLL=1; AC_SUBST([HAVE_ATOLL]) HAVE_CANONICALIZE_FILE_NAME=1; AC_SUBST([HAVE_CANONICALIZE_FILE_NAME]) HAVE_DECL_ECVT=1; AC_SUBST([HAVE_DECL_ECVT]) HAVE_DECL_FCVT=1; AC_SUBST([HAVE_DECL_FCVT]) HAVE_DECL_GCVT=1; AC_SUBST([HAVE_DECL_GCVT]) HAVE_DECL_GETLOADAVG=1; AC_SUBST([HAVE_DECL_GETLOADAVG]) HAVE_DECL_PROGRAM_INVOCATION_NAME=1; AC_SUBST([HAVE_DECL_PROGRAM_INVOCATION_NAME]) HAVE_GETPROGNAME=1; AC_SUBST([HAVE_GETPROGNAME]) HAVE_GETSUBOPT=1; AC_SUBST([HAVE_GETSUBOPT]) HAVE_GRANTPT=1; AC_SUBST([HAVE_GRANTPT]) HAVE_INITSTATE=1; AC_SUBST([HAVE_INITSTATE]) HAVE_DECL_INITSTATE=1; AC_SUBST([HAVE_DECL_INITSTATE]) HAVE_MBTOWC=1; AC_SUBST([HAVE_MBTOWC]) HAVE_MKDTEMP=1; AC_SUBST([HAVE_MKDTEMP]) HAVE_MKOSTEMP=1; AC_SUBST([HAVE_MKOSTEMP]) HAVE_MKOSTEMPS=1; AC_SUBST([HAVE_MKOSTEMPS]) HAVE_MKSTEMP=1; AC_SUBST([HAVE_MKSTEMP]) HAVE_MKSTEMPS=1; AC_SUBST([HAVE_MKSTEMPS]) HAVE_POSIX_MEMALIGN=1; AC_SUBST([HAVE_POSIX_MEMALIGN]) HAVE_POSIX_OPENPT=1; AC_SUBST([HAVE_POSIX_OPENPT]) HAVE_PTSNAME=1; AC_SUBST([HAVE_PTSNAME]) HAVE_PTSNAME_R=1; AC_SUBST([HAVE_PTSNAME_R]) HAVE_QSORT_R=1; AC_SUBST([HAVE_QSORT_R]) HAVE_RANDOM=1; AC_SUBST([HAVE_RANDOM]) HAVE_RANDOM_H=1; AC_SUBST([HAVE_RANDOM_H]) HAVE_RANDOM_R=1; AC_SUBST([HAVE_RANDOM_R]) HAVE_REALLOCARRAY=1; AC_SUBST([HAVE_REALLOCARRAY]) HAVE_REALPATH=1; AC_SUBST([HAVE_REALPATH]) HAVE_RPMATCH=1; AC_SUBST([HAVE_RPMATCH]) HAVE_SECURE_GETENV=1; AC_SUBST([HAVE_SECURE_GETENV]) HAVE_SETENV=1; AC_SUBST([HAVE_SETENV]) HAVE_DECL_SETENV=1; AC_SUBST([HAVE_DECL_SETENV]) HAVE_SETSTATE=1; AC_SUBST([HAVE_SETSTATE]) HAVE_DECL_SETSTATE=1; AC_SUBST([HAVE_DECL_SETSTATE]) HAVE_STRTOD=1; AC_SUBST([HAVE_STRTOD]) HAVE_STRTOL=1; AC_SUBST([HAVE_STRTOL]) HAVE_STRTOLD=1; AC_SUBST([HAVE_STRTOLD]) HAVE_STRTOLL=1; AC_SUBST([HAVE_STRTOLL]) HAVE_STRTOUL=1; AC_SUBST([HAVE_STRTOUL]) HAVE_STRTOULL=1; AC_SUBST([HAVE_STRTOULL]) HAVE_STRUCT_RANDOM_DATA=1; AC_SUBST([HAVE_STRUCT_RANDOM_DATA]) HAVE_SYS_LOADAVG_H=0; AC_SUBST([HAVE_SYS_LOADAVG_H]) HAVE_UNLOCKPT=1; AC_SUBST([HAVE_UNLOCKPT]) HAVE_DECL_UNSETENV=1; AC_SUBST([HAVE_DECL_UNSETENV]) REPLACE__EXIT=0; AC_SUBST([REPLACE__EXIT]) REPLACE_ALIGNED_ALLOC=0; AC_SUBST([REPLACE_ALIGNED_ALLOC]) REPLACE_CALLOC_FOR_CALLOC_GNU=0; AC_SUBST([REPLACE_CALLOC_FOR_CALLOC_GNU]) REPLACE_CALLOC_FOR_CALLOC_POSIX=0; AC_SUBST([REPLACE_CALLOC_FOR_CALLOC_POSIX]) REPLACE_CANONICALIZE_FILE_NAME=0; AC_SUBST([REPLACE_CANONICALIZE_FILE_NAME]) REPLACE_FREE=0; AC_SUBST([REPLACE_FREE]) REPLACE_GETLOADAVG=0; AC_SUBST([REPLACE_GETLOADAVG]) REPLACE_GETPROGNAME=0; AC_SUBST([REPLACE_GETPROGNAME]) REPLACE_GETSUBOPT=0; AC_SUBST([REPLACE_GETSUBOPT]) REPLACE_INITSTATE=0; AC_SUBST([REPLACE_INITSTATE]) REPLACE_MALLOC_FOR_MALLOC_GNU=0; AC_SUBST([REPLACE_MALLOC_FOR_MALLOC_GNU]) REPLACE_MALLOC_FOR_MALLOC_POSIX=0; AC_SUBST([REPLACE_MALLOC_FOR_MALLOC_POSIX]) REPLACE_MB_CUR_MAX=0; AC_SUBST([REPLACE_MB_CUR_MAX]) REPLACE_MBSTOWCS=0; AC_SUBST([REPLACE_MBSTOWCS]) REPLACE_MBTOWC=0; AC_SUBST([REPLACE_MBTOWC]) REPLACE_MKOSTEMP=0; AC_SUBST([REPLACE_MKOSTEMP]) REPLACE_MKOSTEMPS=0; AC_SUBST([REPLACE_MKOSTEMPS]) REPLACE_MKSTEMP=0; AC_SUBST([REPLACE_MKSTEMP]) REPLACE_POSIX_MEMALIGN=0; AC_SUBST([REPLACE_POSIX_MEMALIGN]) REPLACE_POSIX_OPENPT=0; AC_SUBST([REPLACE_POSIX_OPENPT]) REPLACE_PTSNAME=0; AC_SUBST([REPLACE_PTSNAME]) REPLACE_PTSNAME_R=0; AC_SUBST([REPLACE_PTSNAME_R]) REPLACE_PUTENV=0; AC_SUBST([REPLACE_PUTENV]) REPLACE_QSORT_R=0; AC_SUBST([REPLACE_QSORT_R]) REPLACE_RANDOM=0; AC_SUBST([REPLACE_RANDOM]) REPLACE_RANDOM_R=0; AC_SUBST([REPLACE_RANDOM_R]) REPLACE_REALLOC_FOR_REALLOC_GNU=0; AC_SUBST([REPLACE_REALLOC_FOR_REALLOC_GNU]) REPLACE_REALLOC_FOR_REALLOC_POSIX=0; AC_SUBST([REPLACE_REALLOC_FOR_REALLOC_POSIX]) REPLACE_REALLOCARRAY=0; AC_SUBST([REPLACE_REALLOCARRAY]) REPLACE_REALPATH=0; AC_SUBST([REPLACE_REALPATH]) REPLACE_SETENV=0; AC_SUBST([REPLACE_SETENV]) REPLACE_SETSTATE=0; AC_SUBST([REPLACE_SETSTATE]) REPLACE_STRTOD=0; AC_SUBST([REPLACE_STRTOD]) REPLACE_STRTOL=0; AC_SUBST([REPLACE_STRTOL]) REPLACE_STRTOLD=0; AC_SUBST([REPLACE_STRTOLD]) REPLACE_STRTOLL=0; AC_SUBST([REPLACE_STRTOLL]) REPLACE_STRTOUL=0; AC_SUBST([REPLACE_STRTOUL]) REPLACE_STRTOULL=0; AC_SUBST([REPLACE_STRTOULL]) REPLACE_UNSETENV=0; AC_SUBST([REPLACE_UNSETENV]) REPLACE_WCTOMB=0; AC_SUBST([REPLACE_WCTOMB]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/off_t.m4��������������������������������������������������������������������������������0000644�0001750�0001750�00000001006�14436424420�014205� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# off_t.m4 serial 1 dnl Copyright (C) 2012-2023 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 Check whether to override the 'off_t' type. dnl Set WINDOWS_64_BIT_OFF_T. AC_DEFUN([gl_TYPE_OFF_T], [ m4_ifdef([gl_LARGEFILE], [ AC_REQUIRE([gl_LARGEFILE]) ], [ WINDOWS_64_BIT_OFF_T=0 ]) AC_SUBST([WINDOWS_64_BIT_OFF_T]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/mbtowc.m4�������������������������������������������������������������������������������0000644�0001750�0001750�00000001251�14436424420�014405� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# mbtowc.m4 serial 5 dnl Copyright (C) 2011-2023 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. AC_DEFUN([gl_FUNC_MBTOWC], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) gl_CHECK_FUNCS_ANDROID([mbtowc], [[#include <stdlib.h>]]) if test $ac_cv_func_mbtowc = no; then HAVE_MBTOWC=0 case "$gl_cv_onwards_func_mbtowc" in future*) REPLACE_MBTOWC=1 ;; esac else if false; then REPLACE_MBTOWC=1 fi fi ]) # Prerequisites of lib/mbtowc.c. AC_DEFUN([gl_PREREQ_MBTOWC], [ : ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/lib-link.m4�����������������������������������������������������������������������������0000644�0001750�0001750�00000100443�14436425501�014617� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# lib-link.m4 serial 26 (gettext-0.18.2) dnl Copyright (C) 2001-2014 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],[m4_translit([$1],[./+-], [____])]) pushdef([NAME],[m4_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],[m4_translit([$1],[./+-], [____])]) pushdef([NAME],[m4_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_LINK_IFELSE( [AC_LANG_PROGRAM([[$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_libname_spec, dnl acl_library_names_spec, 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],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) define([acl_frompackage_]NAME, [$2]) popdef([NAME]) pushdef([PACK],[$2]) pushdef([PACKUP],[m4_translit(PACK,[abcdefghijklmnopqrstuvwxyz./+-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) define([acl_libsinpackage_]PACKUP, m4_ifdef([acl_libsinpackage_]PACKUP, [m4_defn([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],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) pushdef([PACK],[m4_ifdef([acl_frompackage_]NAME, [acl_frompackage_]NAME, lib[$1])]) pushdef([PACKUP],[m4_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],[m4_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]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/pathmax.m4������������������������������������������������������������������������������0000644�0001750�0001750�00000002155�14436424420�014560� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# pathmax.m4 serial 11 dnl Copyright (C) 2002-2003, 2005-2006, 2009-2023 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. AC_DEFUN([gl_PATHMAX], [ dnl Prerequisites of lib/pathmax.h. AC_CHECK_HEADERS_ONCE([sys/param.h]) ]) # Expands to a piece of C program that defines PATH_MAX in the same way as # "pathmax.h" will do. AC_DEFUN([gl_PATHMAX_SNIPPET], [[ /* Arrange to define PATH_MAX, like "pathmax.h" does. */ #if HAVE_UNISTD_H # include <unistd.h> #endif #include <limits.h> #if defined HAVE_SYS_PARAM_H && !defined PATH_MAX && !defined MAXPATHLEN # include <sys/param.h> #endif #if !defined PATH_MAX && defined MAXPATHLEN # define PATH_MAX MAXPATHLEN #endif #ifdef __hpux # undef PATH_MAX # define PATH_MAX 1024 #endif #if defined _WIN32 && ! defined __CYGWIN__ # undef PATH_MAX # define PATH_MAX 260 #endif ]]) # Prerequisites of gl_PATHMAX_SNIPPET. AC_DEFUN([gl_PATHMAX_SNIPPET_PREREQ], [ AC_CHECK_HEADERS_ONCE([unistd.h sys/param.h]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/timegm.m4�������������������������������������������������������������������������������0000644�0001750�0001750�00000001477�14436424420�014406� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# timegm.m4 serial 15 dnl Copyright (C) 2003, 2007, 2009-2023 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. AC_DEFUN([gl_FUNC_TIMEGM], [ AC_REQUIRE([gl_TIME_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_MKTIME_WORKS]) REPLACE_TIMEGM=0 gl_CHECK_FUNCS_ANDROID([timegm], [[#include <time.h>]]) if test $ac_cv_func_timegm = yes; then if test "$gl_cv_func_working_mktime" != yes; then # Assume that timegm is buggy if mktime is. REPLACE_TIMEGM=1 fi else HAVE_TIMEGM=0 case "$gl_cv_onwards_func_timegm" in future*) REPLACE_TIMEGM=1 ;; esac fi ]) # Prerequisites of lib/timegm.c. AC_DEFUN([gl_PREREQ_TIMEGM], [ : ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/visibility.m4���������������������������������������������������������������������������0000644�0001750�0001750�00000006622�14436424420�015310� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# visibility.m4 serial 8 dnl Copyright (C) 2005, 2008, 2010-2023 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 Tests whether the compiler supports the command-line option dnl -fvisibility=hidden and the function and variable attributes dnl __attribute__((__visibility__("hidden"))) and dnl __attribute__((__visibility__("default"))). dnl Does *not* test for __visibility__("protected") - which has tricky dnl semantics (see the 'vismain' test in glibc) and does not exist e.g. on dnl Mac OS X. dnl Does *not* test for __visibility__("internal") - which has processor dnl dependent semantics. dnl Does *not* test for #pragma GCC visibility push(hidden) - which is dnl "really only recommended for legacy code". dnl Set the variable CFLAG_VISIBILITY. dnl Defines and sets the variable HAVE_VISIBILITY. AC_DEFUN([gl_VISIBILITY], [ AC_REQUIRE([AC_PROG_CC]) CFLAG_VISIBILITY= HAVE_VISIBILITY=0 if test -n "$GCC"; then dnl First, check whether -Werror can be added to the command line, or dnl whether it leads to an error because of some other option that the dnl user has put into $CC $CFLAGS $CPPFLAGS. AC_CACHE_CHECK([whether the -Werror option is usable], [gl_cv_cc_vis_werror], [gl_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Werror" AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[]], [[]])], [gl_cv_cc_vis_werror=yes], [gl_cv_cc_vis_werror=no]) CFLAGS="$gl_save_CFLAGS" ]) dnl Now check whether visibility declarations are supported. AC_CACHE_CHECK([for simple visibility declarations], [gl_cv_cc_visibility], [gl_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -fvisibility=hidden" dnl We use the option -Werror and a function dummyfunc, because on some dnl platforms (Cygwin 1.7) the use of -fvisibility triggers a warning dnl "visibility attribute not supported in this configuration; ignored" dnl at the first function definition in every compilation unit, and we dnl don't want to use the option in this case. if test $gl_cv_cc_vis_werror = yes; then CFLAGS="$CFLAGS -Werror" fi AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[extern __attribute__((__visibility__("hidden"))) int hiddenvar; extern __attribute__((__visibility__("default"))) int exportedvar; extern __attribute__((__visibility__("hidden"))) int hiddenfunc (void); extern __attribute__((__visibility__("default"))) int exportedfunc (void); void dummyfunc (void); int hiddenvar; int exportedvar; int hiddenfunc (void) { return 51; } int exportedfunc (void) { return 1225736919; } void dummyfunc (void) {} ]], [[]])], [gl_cv_cc_visibility=yes], [gl_cv_cc_visibility=no]) CFLAGS="$gl_save_CFLAGS" ]) if test $gl_cv_cc_visibility = yes; then CFLAG_VISIBILITY="-fvisibility=hidden" HAVE_VISIBILITY=1 fi fi AC_SUBST([CFLAG_VISIBILITY]) AC_SUBST([HAVE_VISIBILITY]) AC_DEFINE_UNQUOTED([HAVE_VISIBILITY], [$HAVE_VISIBILITY], [Define to 1 or 0, depending whether the compiler supports simple visibility declarations.]) ]) ��������������������������������������������������������������������������������������������������������������rush-2.4/m4/extensions.m4���������������������������������������������������������������������������0000644�0001750�0001750�00000020626�14436424420�015320� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 23 -*- Autoconf -*- # Enable extensions on systems that normally disable them. # Copyright (C) 2003, 2006-2023 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. dnl Define to empty for the benefit of Autoconf 2.69 and earlier, so that dnl AC_USE_SYSTEM_EXTENSIONS (below) can be used unchanged from Autoconf 2.70+. m4_ifndef([AC_CHECK_INCLUDES_DEFAULT], [AC_DEFUN([AC_CHECK_INCLUDES_DEFAULT], [])]) # This definition of AC_USE_SYSTEM_EXTENSIONS is stolen from git # Autoconf. Perhaps we can remove this once we can assume Autoconf # is recent-enough everywhere, but since Autoconf mutates rapidly # enough in this area it's likely we'll need to redefine # AC_USE_SYSTEM_EXTENSIONS for quite some time. # If autoconf reports a warning # warning: AC_COMPILE_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS # or warning: AC_RUN_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS # the fix is # 1) to ensure that AC_USE_SYSTEM_EXTENSIONS is never directly invoked # but always AC_REQUIREd, # 2) to ensure that for each occurrence of # AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) # or # AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) # the corresponding gnulib module description has 'extensions' among # its dependencies. This will ensure that the gl_USE_SYSTEM_EXTENSIONS # invocation occurs in gl_EARLY, not in gl_INIT. m4_version_prereq([2.72], [], [ # AC_USE_SYSTEM_EXTENSIONS # ------------------------ # Enable extensions on systems that normally disable them, # typically due to standards-conformance issues. # We unconditionally define as many of the known feature-enabling # as possible, reserving conditional behavior for macros that are # known to cause problems on some platforms (such as __EXTENSIONS__). AC_DEFUN_ONCE([AC_USE_SYSTEM_EXTENSIONS], [AC_BEFORE([$0], [AC_PREPROC_IFELSE])dnl AC_BEFORE([$0], [AC_COMPILE_IFELSE])dnl AC_BEFORE([$0], [AC_LINK_IFELSE])dnl AC_BEFORE([$0], [AC_RUN_IFELSE])dnl AC_BEFORE([$0], [AC_CHECK_INCLUDES_DEFAULT])dnl dnl #undef in AH_VERBATIM gets replaced with #define by AC_DEFINE. dnl Use a different key than __EXTENSIONS__, as that name broke existing dnl configure.ac when using autoheader 2.62. dnl The macros below are in alphabetical order ignoring leading _ or __ dnl prefixes. AH_VERBATIM([USE_SYSTEM_EXTENSIONS], [/* Enable extensions on AIX 3, Interix. */ #ifndef _ALL_SOURCE # undef _ALL_SOURCE #endif /* Enable general extensions on macOS. */ #ifndef _DARWIN_C_SOURCE # undef _DARWIN_C_SOURCE #endif /* Enable general extensions on Solaris. */ #ifndef __EXTENSIONS__ # undef __EXTENSIONS__ #endif /* Enable GNU extensions on systems that have them. */ #ifndef _GNU_SOURCE # undef _GNU_SOURCE #endif /* Enable X/Open compliant socket functions that do not require linking with -lxnet on HP-UX 11.11. */ #ifndef _HPUX_ALT_XOPEN_SOCKET_API # undef _HPUX_ALT_XOPEN_SOCKET_API #endif /* Identify the host operating system as Minix. This macro does not affect the system headers' behavior. A future release of Autoconf may stop defining this macro. */ #ifndef _MINIX # undef _MINIX #endif /* Enable general extensions on NetBSD. Enable NetBSD compatibility extensions on Minix. */ #ifndef _NETBSD_SOURCE # undef _NETBSD_SOURCE #endif /* Enable OpenBSD compatibility extensions on NetBSD. Oddly enough, this does nothing on OpenBSD. */ #ifndef _OPENBSD_SOURCE # undef _OPENBSD_SOURCE #endif /* Define to 1 if needed for POSIX-compatible behavior. */ #ifndef _POSIX_SOURCE # undef _POSIX_SOURCE #endif /* Define to 2 if needed for POSIX-compatible behavior. */ #ifndef _POSIX_1_SOURCE # undef _POSIX_1_SOURCE #endif /* Enable POSIX-compatible threading on Solaris. */ #ifndef _POSIX_PTHREAD_SEMANTICS # undef _POSIX_PTHREAD_SEMANTICS #endif /* Enable extensions specified by ISO/IEC TS 18661-5:2014. */ #ifndef __STDC_WANT_IEC_60559_ATTRIBS_EXT__ # undef __STDC_WANT_IEC_60559_ATTRIBS_EXT__ #endif /* Enable extensions specified by ISO/IEC TS 18661-1:2014. */ #ifndef __STDC_WANT_IEC_60559_BFP_EXT__ # undef __STDC_WANT_IEC_60559_BFP_EXT__ #endif /* Enable extensions specified by ISO/IEC TS 18661-2:2015. */ #ifndef __STDC_WANT_IEC_60559_DFP_EXT__ # undef __STDC_WANT_IEC_60559_DFP_EXT__ #endif /* Enable extensions specified by C23 Annex F. */ #ifndef __STDC_WANT_IEC_60559_EXT__ # undef __STDC_WANT_IEC_60559_EXT__ #endif /* Enable extensions specified by ISO/IEC TS 18661-4:2015. */ #ifndef __STDC_WANT_IEC_60559_FUNCS_EXT__ # undef __STDC_WANT_IEC_60559_FUNCS_EXT__ #endif /* Enable extensions specified by C23 Annex H and ISO/IEC TS 18661-3:2015. */ #ifndef __STDC_WANT_IEC_60559_TYPES_EXT__ # undef __STDC_WANT_IEC_60559_TYPES_EXT__ #endif /* Enable extensions specified by ISO/IEC TR 24731-2:2010. */ #ifndef __STDC_WANT_LIB_EXT2__ # undef __STDC_WANT_LIB_EXT2__ #endif /* Enable extensions specified by ISO/IEC 24747:2009. */ #ifndef __STDC_WANT_MATH_SPEC_FUNCS__ # undef __STDC_WANT_MATH_SPEC_FUNCS__ #endif /* Enable extensions on HP NonStop. */ #ifndef _TANDEM_SOURCE # undef _TANDEM_SOURCE #endif /* Enable X/Open extensions. Define to 500 only if necessary to make mbstate_t available. */ #ifndef _XOPEN_SOURCE # undef _XOPEN_SOURCE #endif ])dnl AC_REQUIRE([AC_CHECK_INCLUDES_DEFAULT])dnl _AC_CHECK_HEADER_ONCE([wchar.h]) _AC_CHECK_HEADER_ONCE([minix/config.h]) dnl Defining __EXTENSIONS__ may break the system headers on some systems. dnl (FIXME: Which ones?) AC_CACHE_CHECK([whether it is safe to define __EXTENSIONS__], [ac_cv_safe_to_define___extensions__], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[ # define __EXTENSIONS__ 1 ]AC_INCLUDES_DEFAULT])], [ac_cv_safe_to_define___extensions__=yes], [ac_cv_safe_to_define___extensions__=no])]) dnl HP-UX 11.11 defines mbstate_t only if _XOPEN_SOURCE is defined to dnl 500, regardless of whether compiling with -Ae or -D_HPUX_SOURCE=1. dnl But defining _XOPEN_SOURCE may turn *off* extensions on platforms dnl not covered by turn-on-extensions macros (notably Dragonfly, Free, dnl and OpenBSD, which don't have any equivalent of _NETBSD_SOURCE) so dnl it should only be defined when necessary. AC_CACHE_CHECK([whether _XOPEN_SOURCE should be defined], [ac_cv_should_define__xopen_source], [ac_cv_should_define__xopen_source=no AS_IF([test $ac_cv_header_wchar_h = yes], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[ #include <wchar.h> mbstate_t x;]])], [], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[ #define _XOPEN_SOURCE 500 #include <wchar.h> mbstate_t x;]])], [ac_cv_should_define__xopen_source=yes])])])]) AC_DEFINE([_ALL_SOURCE]) AC_DEFINE([_DARWIN_C_SOURCE]) AC_DEFINE([_GNU_SOURCE]) AC_DEFINE([_HPUX_ALT_XOPEN_SOCKET_API]) AC_DEFINE([_NETBSD_SOURCE]) AC_DEFINE([_OPENBSD_SOURCE]) AC_DEFINE([_POSIX_PTHREAD_SEMANTICS]) AC_DEFINE([__STDC_WANT_IEC_60559_ATTRIBS_EXT__]) AC_DEFINE([__STDC_WANT_IEC_60559_BFP_EXT__]) AC_DEFINE([__STDC_WANT_IEC_60559_DFP_EXT__]) AC_DEFINE([__STDC_WANT_IEC_60559_EXT__]) AC_DEFINE([__STDC_WANT_IEC_60559_FUNCS_EXT__]) AC_DEFINE([__STDC_WANT_IEC_60559_TYPES_EXT__]) AC_DEFINE([__STDC_WANT_LIB_EXT2__]) AC_DEFINE([__STDC_WANT_MATH_SPEC_FUNCS__]) AC_DEFINE([_TANDEM_SOURCE]) AS_IF([test $ac_cv_header_minix_config_h = yes], [MINIX=yes AC_DEFINE([_MINIX]) AC_DEFINE([_POSIX_SOURCE]) AC_DEFINE([_POSIX_1_SOURCE], [2])], [MINIX=]) AS_IF([test $ac_cv_safe_to_define___extensions__ = yes], [AC_DEFINE([__EXTENSIONS__])]) AS_IF([test $ac_cv_should_define__xopen_source = yes], [AC_DEFINE([_XOPEN_SOURCE], [500])]) ])# AC_USE_SYSTEM_EXTENSIONS ]) # gl_USE_SYSTEM_EXTENSIONS # ------------------------ # Enable extensions on systems that normally disable them, # typically due to standards-conformance issues. AC_DEFUN_ONCE([gl_USE_SYSTEM_EXTENSIONS], [ AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) dnl On OpenBSD 6.8 with GCC, the include files contain a couple of dnl definitions that are only activated with an explicit -D_ISOC11_SOURCE. dnl That's because this version of GCC (4.2.1) supports the option dnl '-std=gnu99' but not the option '-std=gnu11'. AC_REQUIRE([AC_CANONICAL_HOST]) case "$host_os" in openbsd*) AC_DEFINE([_ISOC11_SOURCE], [1], [Define to enable the declarations of ISO C 11 types and functions.]) ;; esac ]) ����������������������������������������������������������������������������������������������������������rush-2.4/m4/progtest.m4�����������������������������������������������������������������������������0000644�0001750�0001750�00000006040�14436425501�014763� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# progtest.m4 serial 7 (gettext-0.18.2) dnl Copyright (C) 1996-2003, 2005, 2008-2014 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 # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which # contains only /bin. Note that ksh looks also at the FPATH variable, # so we have to set that as well for the test. 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 # 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 ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/mode_t.m4�������������������������������������������������������������������������������0000644�0001750�0001750�00000002342�14436424420�014363� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# mode_t.m4 serial 2 dnl Copyright (C) 2009-2023 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. # For using mode_t, it's sufficient to use AC_TYPE_MODE_T and # include <sys/types.h>. # Define PROMOTED_MODE_T to the type that is the result of "default argument # promotion" (ISO C 6.5.2.2.(6)) of the type mode_t. AC_DEFUN([gl_PROMOTED_TYPE_MODE_T], [ AC_REQUIRE([AC_TYPE_MODE_T]) AC_CACHE_CHECK([for promoted mode_t type], [gl_cv_promoted_mode_t], [ dnl Assume mode_t promotes to 'int' if and only if it is smaller than 'int', dnl and to itself otherwise. This assumption is not guaranteed by the ISO C dnl standard, but we don't know of any real-world counterexamples. AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>]], [[typedef int array[2 * (sizeof (mode_t) < sizeof (int)) - 1];]])], [gl_cv_promoted_mode_t='int'], [gl_cv_promoted_mode_t='mode_t']) ]) AC_DEFINE_UNQUOTED([PROMOTED_MODE_T], [$gl_cv_promoted_mode_t], [Define to the type that is the result of default argument promotions of type mode_t.]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/threadlib.m4����������������������������������������������������������������������������0000644�0001750�0001750�00000061161�14436424420�015056� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# threadlib.m4 serial 38 dnl Copyright (C) 2005-2023 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.60]) dnl The general structure of the multithreading modules in gnulib is that we dnl have three set of modules: dnl dnl * POSIX API: dnl pthread, which combines dnl pthread-h dnl pthread-thread dnl pthread-once dnl pthread-mutex dnl pthread-rwlock dnl pthread-cond dnl pthread-tss dnl pthread-spin dnl sched_yield dnl dnl * ISO C API: dnl threads, which combines dnl threads-h dnl thrd dnl mtx dnl cnd dnl tss dnl dnl * Gnulib API, with an implementation that can be chosen at configure dnl time through the option --enable-threads=... dnl thread dnl lock dnl cond dnl tls dnl yield dnl dnl They are independent, except for the fact that dnl - the implementation of the ISO C API may use the POSIX (or some other dnl platform dependent) API, dnl - the implementation of the Gnulib API may use the POSIX or ISO C or dnl some other platform dependent API, depending on the --enable-threads dnl option. dnl dnl This file contains macros for all of these APIs! dnl ============================================================================ dnl Macros for all thread APIs AC_DEFUN([gl_ANYTHREADLIB_EARLY], [ AC_REQUIRE([AC_CANONICAL_HOST]) if test -z "$gl_anythreadlib_early_done"; then case "$host_os" in osf*) # On OSF/1, the compiler needs the flag -D_REENTRANT so that it # groks <pthread.h>. cc also understands the flag -pthread, but # we don't use it because 1. gcc-2.95 doesn't understand -pthread, # 2. putting a flag into CPPFLAGS that has an effect on the linker # causes the AC_LINK_IFELSE test below to succeed unexpectedly, # leading to wrong values of LIBTHREAD and LTLIBTHREAD. CPPFLAGS="$CPPFLAGS -D_REENTRANT" ;; esac # Some systems optimize for single-threaded programs by default, and # need special flags to disable these optimizations. For example, the # definition of 'errno' in <errno.h>. case "$host_os" in aix* | freebsd*) CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE" ;; solaris*) CPPFLAGS="$CPPFLAGS -D_REENTRANT" ;; esac gl_anythreadlib_early_done=done fi ]) dnl Checks whether the compiler and linker support weak declarations of symbols. AC_DEFUN([gl_WEAK_SYMBOLS], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_CACHE_CHECK([whether imported symbols can be declared weak], [gl_cv_have_weak], [case "$host_os" in cygwin* | mingw*) dnl On Cygwin 3.2.0 with gcc 10.2, and likewise on mingw 10.0.0 with dnl gcc 11.3, the test below would succeed, but programs that use dnl pthread_in_use() with weak symbol references crash miserably at dnl runtime. gl_cv_have_weak="guessing no" ;; *) gl_cv_have_weak=no dnl First, test whether the compiler accepts it syntactically. AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[extern void xyzzy (); #pragma weak xyzzy]], [[xyzzy();]])], [gl_cv_have_weak=maybe]) if test $gl_cv_have_weak = maybe; then dnl Second, test whether it actually works. On Cygwin 1.7.2, with dnl gcc 4.3, symbols declared weak always evaluate to the address 0. AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stdio.h> #pragma weak fputs int main () { return (fputs == NULL); }]])], [gl_cv_have_weak=yes], [gl_cv_have_weak=no], [dnl When cross-compiling, assume that only ELF platforms support dnl weak symbols. AC_EGREP_CPP([Extensible Linking Format], [#ifdef __ELF__ Extensible Linking Format #endif ], [gl_cv_have_weak="guessing yes"], [gl_cv_have_weak="guessing no"]) ]) fi ;; esac dnl But when linking statically, weak symbols don't work. case " $LDFLAGS " in *" -static "*) gl_cv_have_weak=no ;; esac dnl Test for a bug in FreeBSD 11: A link error occurs when using a weak dnl symbol and linking against a shared library that has a dependency on dnl the shared library that defines the symbol. case "$gl_cv_have_weak" in *yes) case "$host_os" in freebsd* | dragonfly* | midnightbsd*) : > conftest1.c $CC $CPPFLAGS $CFLAGS $LDFLAGS -fPIC -shared -o libempty.so conftest1.c -lpthread >&AS_MESSAGE_LOG_FD 2>&1 cat <<EOF > conftest2.c #include <pthread.h> #pragma weak pthread_mutexattr_gettype int main () { return (pthread_mutexattr_gettype != NULL); } EOF $CC $CPPFLAGS $CFLAGS $LDFLAGS -o conftest conftest2.c libempty.so >&AS_MESSAGE_LOG_FD 2>&1 \ || gl_cv_have_weak=no rm -f conftest1.c libempty.so conftest2.c conftest ;; esac ;; esac ]) case "$gl_cv_have_weak" in *yes) AC_DEFINE([HAVE_WEAK_SYMBOLS], [1], [Define to 1 if the compiler and linker support weak declarations of symbols.]) ;; esac ]) dnl ============================================================================ dnl Macros for the POSIX API dnl gl_PTHREADLIB dnl ------------- dnl Tests for the libraries needs for using the POSIX threads API. dnl Sets the variable LIBPTHREAD to the linker options for use in a Makefile. dnl Sets the variable LIBPMULTITHREAD, for programs that really need dnl multithread functionality. The difference between LIBPTHREAD and dnl LIBPMULTITHREAD is that on platforms supporting weak symbols, typically dnl LIBPTHREAD is empty whereas LIBPMULTITHREAD is not. dnl Sets the variable SCHED_YIELD_LIB to the linker options needed to use the dnl sched_yield() function. dnl Adds to CPPFLAGS the flag -D_REENTRANT or -D_THREAD_SAFE if needed for dnl multithread-safe programs. dnl Defines the C macro HAVE_PTHREAD_API if (at least parts of) the POSIX dnl threads API is available. dnl The guts of gl_PTHREADLIB. Needs to be expanded only once. AC_DEFUN([gl_PTHREADLIB_BODY], [ AC_REQUIRE([gl_ANYTHREADLIB_EARLY]) if test -z "$gl_pthreadlib_body_done"; then gl_pthread_api=no LIBPTHREAD= LIBPMULTITHREAD= # On OSF/1, the compiler needs the flag -pthread or -D_REENTRANT so that # it groks <pthread.h>. It's added above, in gl_ANYTHREADLIB_EARLY. AC_CHECK_HEADER([pthread.h], [gl_have_pthread_h=yes], [gl_have_pthread_h=no]) if test "$gl_have_pthread_h" = yes; then # Other possible tests: # -lpthreads (FSU threads, PCthreads) # -lgthreads # Test whether both pthread_mutex_lock and pthread_mutexattr_init exist # in libc. IRIX 6.5 has the first one in both libc and libpthread, but # the second one only in libpthread, and lock.c needs it. # # If -pthread works, prefer it to -lpthread, since Ubuntu 14.04 # needs -pthread for some reason. See: # https://lists.gnu.org/r/bug-gnulib/2014-09/msg00023.html save_LIBS=$LIBS for gl_pthread in '' '-pthread'; do LIBS="$LIBS $gl_pthread" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <pthread.h> pthread_mutex_t m; pthread_mutexattr_t ma; ]], [[pthread_mutex_lock (&m); pthread_mutexattr_init (&ma);]])], [gl_pthread_api=yes LIBPTHREAD=$gl_pthread LIBPMULTITHREAD=$gl_pthread]) LIBS=$save_LIBS test $gl_pthread_api = yes && break done echo "$as_me:__oline__: gl_pthread_api=$gl_pthread_api" >&AS_MESSAGE_LOG_FD echo "$as_me:__oline__: LIBPTHREAD=$LIBPTHREAD" >&AS_MESSAGE_LOG_FD gl_pthread_in_glibc=no # On Linux with glibc >= 2.34, libc contains the fully functional # pthread functions. case "$host_os" in linux*) AC_EGREP_CPP([Lucky user], [#include <features.h> #ifdef __GNU_LIBRARY__ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 34) || (__GLIBC__ > 2) Lucky user #endif #endif ], [gl_pthread_in_glibc=yes], []) ;; esac echo "$as_me:__oline__: gl_pthread_in_glibc=$gl_pthread_in_glibc" >&AS_MESSAGE_LOG_FD # Test for libpthread by looking for pthread_kill. (Not pthread_self, # since it is defined as a macro on OSF/1.) if test $gl_pthread_api = yes && test -z "$LIBPTHREAD"; then # The program links fine without libpthread. But it may actually # need to link with libpthread in order to create multiple threads. AC_CHECK_LIB([pthread], [pthread_kill], [if test $gl_pthread_in_glibc = yes; then LIBPMULTITHREAD= else LIBPMULTITHREAD=-lpthread # On Solaris and HP-UX, most pthread functions exist also in libc. # Therefore pthread_in_use() needs to actually try to create a # thread: pthread_create from libc will fail, whereas # pthread_create will actually create a thread. # On Solaris 10 or newer, this test is no longer needed, because # libc contains the fully functional pthread functions. case "$host_os" in changequote(,)dnl solaris | solaris2.[1-9] | solaris2.[1-9].* | hpux*) changequote([,])dnl AC_DEFINE([PTHREAD_IN_USE_DETECTION_HARD], [1], [Define if the pthread_in_use() detection is hard.]) esac fi ]) elif test $gl_pthread_api != yes; then # Some library is needed. Try libpthread and libc_r. AC_CHECK_LIB([pthread], [pthread_kill], [gl_pthread_api=yes LIBPTHREAD=-lpthread LIBPMULTITHREAD=-lpthread]) if test $gl_pthread_api != yes; then # For FreeBSD 4. AC_CHECK_LIB([c_r], [pthread_kill], [gl_pthread_api=yes LIBPTHREAD=-lc_r LIBPMULTITHREAD=-lc_r]) fi fi echo "$as_me:__oline__: LIBPMULTITHREAD=$LIBPMULTITHREAD" >&AS_MESSAGE_LOG_FD fi AC_MSG_CHECKING([whether POSIX threads API is available]) AC_MSG_RESULT([$gl_pthread_api]) AC_SUBST([LIBPTHREAD]) AC_SUBST([LIBPMULTITHREAD]) if test $gl_pthread_api = yes; then AC_DEFINE([HAVE_PTHREAD_API], [1], [Define if you have the <pthread.h> header and the POSIX threads API.]) fi dnl On some systems, sched_yield is in librt, rather than in libpthread. AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <sched.h>]], [[sched_yield ();]])], [SCHED_YIELD_LIB= ], [dnl Solaris 7...10 has sched_yield in librt, not in libpthread or libc. AC_CHECK_LIB([rt], [sched_yield], [SCHED_YIELD_LIB=-lrt], [dnl Solaris 2.5.1, 2.6 has sched_yield in libposix4, not librt. AC_CHECK_LIB([posix4], [sched_yield], [SCHED_YIELD_LIB=-lposix4])]) ]) AC_SUBST([SCHED_YIELD_LIB]) dnl For backward compatibility. LIB_SCHED_YIELD="$SCHED_YIELD_LIB" AC_SUBST([LIB_SCHED_YIELD]) gl_pthreadlib_body_done=done fi ]) AC_DEFUN([gl_PTHREADLIB], [ AC_REQUIRE([gl_ANYTHREADLIB_EARLY]) gl_PTHREADLIB_BODY ]) dnl ============================================================================ dnl Macros for the ISO C API dnl gl_STDTHREADLIB dnl --------------- dnl Tests for the libraries needs for using the ISO C threads API. dnl Sets the variable LIBSTDTHREAD to the linker options for use in a Makefile. dnl Adds to CPPFLAGS the flag -D_REENTRANT or -D_THREAD_SAFE if needed for dnl multithread-safe programs. dnl Defines the C macro HAVE_THREADS_H if (at least parts of) the ISO C threads dnl API is available. dnl The guts of gl_STDTHREADLIB. Needs to be expanded only once. AC_DEFUN([gl_STDTHREADLIB_BODY], [ AC_REQUIRE([gl_ANYTHREADLIB_EARLY]) AC_REQUIRE([AC_CANONICAL_HOST]) if test -z "$gl_stdthreadlib_body_done"; then AC_CHECK_HEADERS_ONCE([threads.h]) case "$host_os" in mingw*) LIBSTDTHREAD= ;; *) gl_PTHREADLIB_BODY if test $ac_cv_header_threads_h = yes; then dnl glibc >= 2.29 has thrd_create in libpthread. dnl FreeBSD >= 10 has thrd_create in libstdthreads; this library depends dnl on libpthread (for the symbol 'pthread_mutexattr_gettype'). dnl glibc >= 2.34, AIX >= 7.1, and Solaris >= 11.4 have thrd_create in dnl libc. gl_CHECK_FUNCS_ANDROID([thrd_create], [[#include <threads.h>]]) if test $ac_cv_func_thrd_create = yes; then LIBSTDTHREAD= else AC_CHECK_LIB([stdthreads], [thrd_create], [ LIBSTDTHREAD='-lstdthreads -lpthread' ], [ dnl Guess that thrd_create is in libpthread. LIBSTDTHREAD="$LIBPMULTITHREAD" ]) fi else dnl Libraries needed by thrd.c, mtx.c, cnd.c, tss.c. LIBSTDTHREAD="$LIBPMULTITHREAD $SCHED_YIELD_LIB" fi ;; esac AC_SUBST([LIBSTDTHREAD]) AC_MSG_CHECKING([whether ISO C threads API is available]) AC_MSG_RESULT([$ac_cv_header_threads_h]) gl_stdthreadlib_body_done=done fi ]) AC_DEFUN([gl_STDTHREADLIB], [ AC_REQUIRE([gl_ANYTHREADLIB_EARLY]) gl_STDTHREADLIB_BODY ]) dnl ============================================================================ dnl Macros for the Gnulib API dnl gl_THREADLIB dnl ------------ dnl Tests for a multithreading library to be used. dnl If the configure.ac contains a definition of the gl_THREADLIB_DEFAULT_NO dnl (it must be placed before the invocation of gl_THREADLIB_EARLY!), then the dnl default is 'no', otherwise it is system dependent. In both cases, the user dnl can change the choice through the options --enable-threads=choice or dnl --disable-threads. dnl Defines at most one of the macros USE_ISOC_THREADS, USE_POSIX_THREADS, dnl USE_ISOC_AND_POSIX_THREADS, USE_WINDOWS_THREADS. dnl The choice --enable-threads=isoc+posix is available only on platforms that dnl have both the ISO C and the POSIX threads APIs. It has the effect of using dnl the ISO C API for most things and the POSIX API only for creating and dnl controlling threads (because there is no equivalent to pthread_atfork in dnl the ISO C API). dnl Sets the variables LIBTHREAD and LTLIBTHREAD to the linker options for use dnl in a Makefile (LIBTHREAD for use without libtool, LTLIBTHREAD for use with dnl libtool). dnl Sets the variables LIBMULTITHREAD and LTLIBMULTITHREAD similarly, for dnl programs that really need multithread functionality. The difference dnl between LIBTHREAD and LIBMULTITHREAD is that on platforms supporting weak dnl symbols, typically LIBTHREAD is empty whereas LIBMULTITHREAD is not. dnl Adds to CPPFLAGS the flag -D_REENTRANT or -D_THREAD_SAFE if needed for dnl multithread-safe programs. dnl Since support for GNU pth was removed, $LTLIBTHREAD and $LIBTHREAD have the dnl same value, and similarly $LTLIBMULTITHREAD and $LIBMULTITHREAD have the dnl same value. Only system libraries are needed. AC_DEFUN([gl_THREADLIB_EARLY], [ AC_REQUIRE([gl_THREADLIB_EARLY_BODY]) ]) dnl The guts of gl_THREADLIB_EARLY. Needs to be expanded only once. AC_DEFUN([gl_THREADLIB_EARLY_BODY], [ dnl Ordering constraints: This macro modifies CPPFLAGS in a way that dnl influences the result of the autoconf tests that test for *_unlocked dnl declarations, on AIX 5 at least. Therefore it must come early. AC_BEFORE([$0], [gl_FUNC_GLIBC_UNLOCKED_IO])dnl AC_BEFORE([$0], [gl_ARGP])dnl AC_REQUIRE([AC_CANONICAL_HOST]) dnl _GNU_SOURCE is needed for pthread_rwlock_t on glibc systems. AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) dnl Check for multithreading. m4_ifdef([gl_THREADLIB_DEFAULT_NO], [m4_divert_text([DEFAULTS], [gl_use_threads_default=no])], [m4_divert_text([DEFAULTS], [gl_use_threads_default=])]) dnl gl_use_winpthreads_default defaults to 'no', because in mingw 10, like dnl in mingw 5, the use of libwinpthread still makes test-pthread-tss crash. m4_divert_text([DEFAULTS], [gl_use_winpthreads_default=no]) AC_ARG_ENABLE([threads], AS_HELP_STRING([[--enable-threads={isoc|posix|isoc+posix|windows}]], [specify multithreading API])m4_ifdef([gl_THREADLIB_DEFAULT_NO], [], [ AS_HELP_STRING([[--disable-threads]], [build without multithread safety])]), [gl_use_threads=$enableval], [if test -n "$gl_use_threads_default"; then gl_use_threads="$gl_use_threads_default" else changequote(,)dnl case "$host_os" in dnl Disable multithreading by default on OSF/1, because it interferes dnl with fork()/exec(): When msgexec is linked with -lpthread, its dnl child process gets an endless segmentation fault inside execvp(). osf*) gl_use_threads=no ;; dnl Disable multithreading by default on Cygwin 1.5.x, because it has dnl bugs that lead to endless loops or crashes. See dnl <https://cygwin.com/ml/cygwin/2009-08/msg00283.html>. cygwin*) case `uname -r` in 1.[0-5].*) gl_use_threads=no ;; *) gl_use_threads=yes ;; esac ;; dnl Obey gl_AVOID_WINPTHREAD on mingw. mingw*) case "$gl_use_winpthreads_default" in yes) gl_use_threads=posix ;; no) gl_use_threads=windows ;; *) gl_use_threads=yes ;; esac ;; *) gl_use_threads=yes ;; esac changequote([,])dnl fi ]) if test "$gl_use_threads" = yes \ || test "$gl_use_threads" = isoc \ || test "$gl_use_threads" = posix \ || test "$gl_use_threads" = isoc+posix; then # For using <threads.h> or <pthread.h>: gl_ANYTHREADLIB_EARLY fi ]) dnl The guts of gl_THREADLIB. Needs to be expanded only once. AC_DEFUN([gl_THREADLIB_BODY], [ AC_REQUIRE([gl_THREADLIB_EARLY_BODY]) gl_threads_api=none LIBTHREAD= LTLIBTHREAD= LIBMULTITHREAD= LTLIBMULTITHREAD= if test "$gl_use_threads" != no; then dnl Check whether the compiler and linker support weak declarations. gl_WEAK_SYMBOLS if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then dnl If we use weak symbols to implement pthread_in_use / pth_in_use / dnl thread_in_use, we also need to test whether the ISO C 11 thrd_create dnl facility is in use. AC_CHECK_HEADERS_ONCE([threads.h]) : fi if test "$gl_use_threads" = isoc || test "$gl_use_threads" = isoc+posix; then AC_CHECK_HEADERS_ONCE([threads.h]) gl_have_isoc_threads="$ac_cv_header_threads_h" fi if test "$gl_use_threads" = yes \ || test "$gl_use_threads" = posix \ || test "$gl_use_threads" = isoc+posix; then gl_PTHREADLIB_BODY LIBTHREAD=$LIBPTHREAD LTLIBTHREAD=$LIBPTHREAD LIBMULTITHREAD=$LIBPMULTITHREAD LTLIBMULTITHREAD=$LIBPMULTITHREAD if test $gl_pthread_api = yes; then if test "$gl_use_threads" = isoc+posix && test "$gl_have_isoc_threads" = yes; then gl_threads_api='isoc+posix' AC_DEFINE([USE_ISOC_AND_POSIX_THREADS], [1], [Define if the combination of the ISO C and POSIX multithreading APIs can be used.]) LIBTHREAD= LTLIBTHREAD= else gl_threads_api=posix AC_DEFINE([USE_POSIX_THREADS], [1], [Define if the POSIX multithreading library can be used.]) if test -z "$LIBMULTITHREAD" && test -z "$LTLIBMULTITHREAD"; then AC_DEFINE([USE_POSIX_THREADS_FROM_LIBC], [1], [Define if references to the POSIX multithreading library are satisfied by libc.]) else if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then AC_DEFINE([USE_POSIX_THREADS_WEAK], [1], [Define if references to the POSIX multithreading library should be made weak.]) LIBTHREAD= LTLIBTHREAD= else case "$host_os" in freebsd* | dragonfly* | midnightbsd*) if test "x$LIBTHREAD" != "x$LIBMULTITHREAD"; then dnl If weak symbols can't tell whether pthread_create(), pthread_key_create() dnl etc. will succeed, we need a runtime test. AC_DEFINE([PTHREAD_IN_USE_DETECTION_HARD], [1], [Define if the pthread_in_use() detection is hard.]) fi ;; esac fi fi fi fi fi if test $gl_threads_api = none; then if test "$gl_use_threads" = isoc && test "$gl_have_isoc_threads" = yes; then gl_STDTHREADLIB_BODY LIBTHREAD=$LIBSTDTHREAD LTLIBTHREAD=$LIBSTDTHREAD LIBMULTITHREAD=$LIBSTDTHREAD LTLIBMULTITHREAD=$LIBSTDTHREAD gl_threads_api=isoc AC_DEFINE([USE_ISOC_THREADS], [1], [Define if the ISO C multithreading library can be used.]) fi fi if test $gl_threads_api = none; then case "$gl_use_threads" in yes | windows | win32) # The 'win32' is for backward compatibility. if { case "$host_os" in mingw*) true;; *) false;; esac }; then gl_threads_api=windows AC_DEFINE([USE_WINDOWS_THREADS], [1], [Define if the native Windows multithreading API can be used.]) fi ;; esac fi fi AC_MSG_CHECKING([for multithread API to use]) AC_MSG_RESULT([$gl_threads_api]) AC_SUBST([LIBTHREAD]) AC_SUBST([LTLIBTHREAD]) AC_SUBST([LIBMULTITHREAD]) AC_SUBST([LTLIBMULTITHREAD]) ]) AC_DEFUN([gl_THREADLIB], [ AC_REQUIRE([gl_THREADLIB_EARLY]) AC_REQUIRE([gl_THREADLIB_BODY]) ]) dnl gl_DISABLE_THREADS dnl ------------------ dnl Sets the gl_THREADLIB default so that threads are not used by default. dnl The user can still override it at installation time, by using the dnl configure option '--enable-threads'. AC_DEFUN([gl_DISABLE_THREADS], [ m4_divert_text([INIT_PREPARE], [gl_use_threads_default=no]) ]) dnl gl_AVOID_WINPTHREAD dnl ------------------- dnl Sets the gl_THREADLIB default so that on mingw, a dependency to the dnl libwinpthread DLL (mingw-w64 winpthreads library) is avoided. dnl The user can still override it at installation time, by using the dnl configure option '--enable-threads=posix'. dnl As of 2023, this is now the default. AC_DEFUN([gl_AVOID_WINPTHREAD], [ m4_divert_text([INIT_PREPARE], [gl_use_winpthreads_default=no]) ]) dnl ============================================================================ dnl Survey of platforms: dnl dnl Platform Available Compiler Supports test-lock dnl flavours option weak result dnl --------------- --------- --------- -------- --------- dnl Linux 2.4/glibc posix -lpthread Y OK dnl dnl Linux/glibc 2.34 posix Y OK dnl dnl GNU Hurd/glibc posix -lpthread Y OK dnl dnl Ubuntu 14.04 posix -pthread Y OK dnl dnl FreeBSD 5.3 posix -lc_r Y dnl posix -lkse ? Y dnl posix -lpthread ? Y dnl posix -lthr Y dnl dnl FreeBSD 5.2 posix -lc_r Y dnl posix -lkse Y dnl posix -lthr Y dnl dnl FreeBSD 4.0,4.10 posix -lc_r Y OK dnl dnl NetBSD 1.6 -- dnl dnl OpenBSD 3.4 posix -lpthread Y OK dnl dnl Mac OS X 10.[123] posix -lpthread Y OK dnl dnl Solaris 7,8,9 posix -lpthread Y Sol 7,8: 0.0; Sol 9: OK dnl dnl HP-UX 11 posix -lpthread N (cc) OK dnl Y (gcc) dnl dnl IRIX 6.5 posix -lpthread Y 0.5 dnl dnl AIX 4.3,5.1 posix -lpthread N AIX 4: 0.5; AIX 5: OK dnl dnl OSF/1 4.0,5.1 posix -pthread (cc) N OK dnl -lpthread (gcc) Y dnl dnl Cygwin posix -lpthread Y OK dnl dnl Mingw windows N OK dnl dnl BeOS 5 -- dnl dnl The test-lock result shows what happens if in test-lock.c EXPLICIT_YIELD is dnl turned off: dnl OK if all three tests terminate OK, dnl 0.5 if the first test terminates OK but the second one loops endlessly, dnl 0.0 if the first test already loops endlessly. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/environ.m4������������������������������������������������������������������������������0000644�0001750�0001750�00000002606�14436424420�014577� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# environ.m4 serial 8 dnl Copyright (C) 2001-2004, 2006-2023 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. AC_DEFUN_ONCE([gl_ENVIRON], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) dnl Persuade glibc <unistd.h> to declare environ. AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_CHECK_HEADERS_ONCE([unistd.h]) gt_CHECK_VAR_DECL( [#if HAVE_UNISTD_H #include <unistd.h> #endif /* mingw, BeOS, Haiku declare environ in <stdlib.h>, not in <unistd.h>. */ #include <stdlib.h> ], [environ]) if test $gt_cv_var_environ_declaration != yes; then HAVE_DECL_ENVIRON=0 fi ]) # Check if a variable is properly declared. # gt_CHECK_VAR_DECL(includes,variable) AC_DEFUN([gt_CHECK_VAR_DECL], [ define([gt_cv_var], [gt_cv_var_]$2[_declaration]) AC_CACHE_CHECK([if $2 is properly declared], [gt_cv_var], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[$1 typedef struct { int foo; } foo_t; extern foo_t $2;]], [[$2.foo = 1;]])], [gt_cv_var=no], [gt_cv_var=yes])]) if test $gt_cv_var = yes; then AC_DEFINE([HAVE_]m4_translit($2, [a-z], [A-Z])[_DECL], 1, [Define if you have the declaration of $2.]) fi undefine([gt_cv_var]) ]) ��������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/minmax.m4�������������������������������������������������������������������������������0000644�0001750�0001750�00000002455�14436424420�014412� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# minmax.m4 serial 4 dnl Copyright (C) 2005, 2009-2023 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. AC_PREREQ([2.53]) AC_DEFUN([gl_MINMAX], [ AC_REQUIRE([gl_PREREQ_MINMAX]) ]) # Prerequisites of lib/minmax.h. AC_DEFUN([gl_PREREQ_MINMAX], [ gl_MINMAX_IN_HEADER([limits.h]) gl_MINMAX_IN_HEADER([sys/param.h]) ]) dnl gl_MINMAX_IN_HEADER(HEADER) dnl The parameter has to be a literal header name; it cannot be macro, dnl nor a shell variable. (Because autoheader collects only AC_DEFINE dnl invocations with a literal macro name.) AC_DEFUN([gl_MINMAX_IN_HEADER], [ m4_pushdef([header], AS_TR_SH([$1])) m4_pushdef([HEADER], AS_TR_CPP([$1])) AC_CACHE_CHECK([whether <$1> defines MIN and MAX], [gl_cv_minmax_in_]header, [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <$1> int x = MIN (42, 17);]], [[]])], [gl_cv_minmax_in_]header[=yes], [gl_cv_minmax_in_]header[=no])]) if test $gl_cv_minmax_in_[]header = yes; then AC_DEFINE([HAVE_MINMAX_IN_]HEADER, 1, [Define to 1 if <$1> defines the MIN and MAX macros.]) fi m4_popdef([HEADER]) m4_popdef([header]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/extern-inline.m4������������������������������������������������������������������������0000644�0001750�0001750�00000013072�14635353471�015707� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������dnl 'extern inline' a la ISO C99. dnl Copyright 2012-2023 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. AC_DEFUN([gl_EXTERN_INLINE], [ AC_CACHE_CHECK([whether ctype.h defines __header_inline], [gl_cv_have___header_inline], [AC_PREPROC_IFELSE( [AC_LANG_SOURCE([[#include <ctype.h> #ifndef __header_inline #error "<ctype.h> does not define __header_inline" #endif ]])], [gl_cv_have___header_inline=yes], [gl_cv_have___header_inline=no])]) if test "$gl_cv_have___header_inline" = yes; then AC_DEFINE([HAVE___HEADER_INLINE], [1], [Define to 1 if ctype.h defines __header_inline.]) fi AH_VERBATIM([HAVE___HEADER_INLINE_1], [/* Please see the Gnulib manual for how to use these macros. Suppress extern inline with HP-UX cc, as it appears to be broken; see <https://lists.gnu.org/r/bug-texinfo/2013-02/msg00030.html>. Suppress extern inline with Sun C in standards-conformance mode, as it mishandles inline functions that call each other. E.g., for 'inline void f (void) { } inline void g (void) { f (); }', c99 incorrectly complains 'reference to static identifier "f" in extern inline function'. This bug was observed with Oracle Developer Studio 12.6 (Sun C 5.15 SunOS_sparc 2017/05/30). Suppress extern inline (with or without __attribute__ ((__gnu_inline__))) on configurations that mistakenly use 'static inline' to implement functions or macros in standard C headers like <ctype.h>. For example, if isdigit is mistakenly implemented via a static inline function, a program containing an extern inline function that calls isdigit may not work since the C standard prohibits extern inline functions from calling static functions (ISO C 99 section 6.7.4.(3). This bug is known to occur on: OS X 10.8 and earlier; see: https://lists.gnu.org/r/bug-gnulib/2012-12/msg00023.html DragonFly; see http://muscles.dragonflybsd.org/bulk/clang-master-potential/20141111_102002/logs/ah-tty-0.3.12.log FreeBSD; see: https://lists.gnu.org/r/bug-gnulib/2014-07/msg00104.html OS X 10.9 has a macro __header_inline indicating the bug is fixed for C and for clang but remains for g++; see <https://trac.macports.org/ticket/41033>. Assume DragonFly and FreeBSD will be similar. GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99 inline semantics, unless -fgnu89-inline is used. It defines a macro __GNUC_STDC_INLINE__ to indicate this situation or a macro __GNUC_GNU_INLINE__ to indicate the opposite situation. GCC 4.2 with -std=c99 or -std=gnu99 implements the GNU C inline semantics but warns, unless -fgnu89-inline is used: warning: C99 inline functions are not supported; using GNU89 warning: to disable this warning use -fgnu89-inline or the gnu_inline function attribute It defines a macro __GNUC_GNU_INLINE__ to indicate this situation. */ #if (((defined __APPLE__ && defined __MACH__) \ || defined __DragonFly__ || defined __FreeBSD__) \ && (defined HAVE___HEADER_INLINE \ ? (defined __cplusplus && defined __GNUC_STDC_INLINE__ \ && ! defined __clang__) \ : ((! defined _DONT_USE_CTYPE_INLINE_ \ && (defined __GNUC__ || defined __cplusplus)) \ || (defined _FORTIFY_SOURCE && 0 < _FORTIFY_SOURCE \ && defined __GNUC__ && ! defined __cplusplus)))) # define _GL_EXTERN_INLINE_STDHEADER_BUG #endif #if ((__GNUC__ \ ? (defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ \ && !defined __PCC__) \ : (199901L <= __STDC_VERSION__ \ && !defined __HP_cc \ && !defined __PGI \ && !(defined __SUNPRO_C && __STDC__))) \ && !defined _GL_EXTERN_INLINE_STDHEADER_BUG) # define _GL_INLINE inline # define _GL_EXTERN_INLINE extern inline # define _GL_EXTERN_INLINE_IN_USE #elif (2 < __GNUC__ + (7 <= __GNUC_MINOR__) && !defined __STRICT_ANSI__ \ && !defined __PCC__ \ && !defined _GL_EXTERN_INLINE_STDHEADER_BUG) # if defined __GNUC_GNU_INLINE__ && __GNUC_GNU_INLINE__ /* __gnu_inline__ suppresses a GCC 4.2 diagnostic. */ # define _GL_INLINE extern inline __attribute__ ((__gnu_inline__)) # else # define _GL_INLINE extern inline # endif # define _GL_EXTERN_INLINE extern # define _GL_EXTERN_INLINE_IN_USE #else # define _GL_INLINE _GL_UNUSED static # define _GL_EXTERN_INLINE _GL_UNUSED static #endif /* In GCC 4.6 (inclusive) to 5.1 (exclusive), suppress bogus "no previous prototype for 'FOO'" and "no previous declaration for 'FOO'" diagnostics, when FOO is an inline function in the header; see <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=54113> and <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63877>. */ #if __GNUC__ == 4 && 6 <= __GNUC_MINOR__ # if defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ # define _GL_INLINE_HEADER_CONST_PRAGMA # else # define _GL_INLINE_HEADER_CONST_PRAGMA \ _Pragma ("GCC diagnostic ignored \"-Wsuggest-attribute=const\"") # endif # define _GL_INLINE_HEADER_BEGIN \ _Pragma ("GCC diagnostic push") \ _Pragma ("GCC diagnostic ignored \"-Wmissing-prototypes\"") \ _Pragma ("GCC diagnostic ignored \"-Wmissing-declarations\"") \ _GL_INLINE_HEADER_CONST_PRAGMA # define _GL_INLINE_HEADER_END \ _Pragma ("GCC diagnostic pop") #else # define _GL_INLINE_HEADER_BEGIN # define _GL_INLINE_HEADER_END #endif]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/c-bool.m4�������������������������������������������������������������������������������0000644�0001750�0001750�00000003360�14436424420�014270� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Check for bool that conforms to C2023. dnl Copyright 2022-2023 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. AC_DEFUN([gl_C_BOOL], [ AC_CACHE_CHECK([for bool, true, false], [gl_cv_c_bool], [AC_COMPILE_IFELSE( [AC_LANG_SOURCE([[ #if true == false #error "true == false" #endif extern bool b; bool b = true == false;]])], [gl_cv_c_bool=yes], [gl_cv_c_bool=no])]) if test "$gl_cv_c_bool" = yes; then AC_DEFINE([HAVE_C_BOOL], [1], [Define to 1 if bool, true and false work as per C2023.]) fi AC_CHECK_HEADERS_ONCE([stdbool.h]) dnl The "zz" puts this toward config.h's end, to avoid potential dnl collisions with other definitions. dnl If 'bool', 'true' and 'false' do not work, arrange for them to work. dnl In C, this means including <stdbool.h> if it is not already included. dnl However, if the preprocessor mistakenly treats 'true' as 0, dnl define it to a bool expression equal to 1; this is needed in dnl Sun C++ 5.11 (Oracle Solaris Studio 12.2, 2010) and older. AH_VERBATIM([zzbool], [#ifndef HAVE_C_BOOL # if !defined __cplusplus && !defined __bool_true_false_are_defined # if HAVE_STDBOOL_H # include <stdbool.h> # else # if defined __SUNPRO_C # error "<stdbool.h> is not usable with this configuration. To make it usable, add -D_STDC_C99= to $CC." # else # error "<stdbool.h> does not exist on this platform. Use gnulib module 'stdbool-c99' instead of gnulib module 'stdbool'." # endif # endif # endif # if !true # define true (!false) # endif #endif]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/sys_socket_h.m4�������������������������������������������������������������������������0000644�0001750�0001750�00000016333�14436424420�015616� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sys_socket_h.m4 serial 29 dnl Copyright (C) 2005-2023 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 Simon Josefsson. AC_DEFUN_ONCE([gl_SYS_SOCKET_H], [ AC_REQUIRE([gl_SYS_SOCKET_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl On OSF/1, the functions recv(), send(), recvfrom(), sendto() have dnl old-style declarations (with return type 'int' instead of 'ssize_t') dnl unless _POSIX_PII_SOCKET is defined. case "$host_os" in osf*) AC_DEFINE([_POSIX_PII_SOCKET], [1], [Define to 1 in order to get the POSIX compatible declarations of socket functions.]) ;; esac GL_GENERATE_SYS_SOCKET_H=false AC_CACHE_CHECK([whether <sys/socket.h> is self-contained], [gl_cv_header_sys_socket_h_selfcontained], [ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]], [[]])], [gl_cv_header_sys_socket_h_selfcontained=yes], [gl_cv_header_sys_socket_h_selfcontained=no]) ]) if test $gl_cv_header_sys_socket_h_selfcontained = yes; then dnl If the shutdown function exists, <sys/socket.h> should define dnl SHUT_RD, SHUT_WR, SHUT_RDWR. AC_CHECK_FUNCS([shutdown]) if test $ac_cv_func_shutdown = yes; then AC_CACHE_CHECK([whether <sys/socket.h> defines the SHUT_* macros], [gl_cv_header_sys_socket_h_shut], [ AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include <sys/socket.h>]], [[int a[] = { SHUT_RD, SHUT_WR, SHUT_RDWR };]])], [gl_cv_header_sys_socket_h_shut=yes], [gl_cv_header_sys_socket_h_shut=no]) ]) if test $gl_cv_header_sys_socket_h_shut = no; then GL_GENERATE_SYS_SOCKET_H=true fi fi fi # We need to check for ws2tcpip.h now. gl_PREREQ_SYS_H_SOCKET AC_CHECK_TYPES([struct sockaddr_storage, sa_family_t],,,[ /* sys/types.h is not needed according to POSIX, but the sys/socket.h in i386-unknown-freebsd4.10 and powerpc-apple-darwin5.5 required it. */ #include <sys/types.h> #ifdef HAVE_SYS_SOCKET_H #include <sys/socket.h> #endif #ifdef HAVE_WS2TCPIP_H #include <ws2tcpip.h> #endif ]) if test $ac_cv_type_struct_sockaddr_storage = no; then HAVE_STRUCT_SOCKADDR_STORAGE=0 fi if test $ac_cv_type_sa_family_t = no; then HAVE_SA_FAMILY_T=0 fi if test $ac_cv_type_struct_sockaddr_storage != no; then AC_CHECK_MEMBERS([struct sockaddr_storage.ss_family], [], [HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY=0], [#include <sys/types.h> #ifdef HAVE_SYS_SOCKET_H #include <sys/socket.h> #endif #ifdef HAVE_WS2TCPIP_H #include <ws2tcpip.h> #endif ]) fi if test $HAVE_STRUCT_SOCKADDR_STORAGE = 0 || test $HAVE_SA_FAMILY_T = 0 \ || test $HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = 0; then GL_GENERATE_SYS_SOCKET_H=true fi gl_PREREQ_SYS_H_WINSOCK2 dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[ /* Some systems require prerequisite headers. */ #include <sys/types.h> #include <sys/socket.h> ]], [socket connect accept bind getpeername getsockname getsockopt listen recv send recvfrom sendto setsockopt shutdown accept4]) AC_REQUIRE([AC_C_RESTRICT]) ]) AC_DEFUN([gl_PREREQ_SYS_H_SOCKET], [ dnl Check prerequisites of the <sys/socket.h> replacement. AC_REQUIRE([gl_CHECK_SOCKET_HEADERS]) gl_CHECK_NEXT_HEADERS([sys/socket.h]) if test $ac_cv_header_sys_socket_h = yes; then HAVE_SYS_SOCKET_H=1 else HAVE_SYS_SOCKET_H=0 fi AC_SUBST([HAVE_SYS_SOCKET_H]) gl_PREREQ_SYS_H_WS2TCPIP ]) # Common prerequisites of the <sys/socket.h> replacement and of the # <sys/select.h> replacement. # Sets and substitutes HAVE_WINSOCK2_H. AC_DEFUN([gl_PREREQ_SYS_H_WINSOCK2], [ m4_ifdef([gl_UNISTD_H_DEFAULTS], [AC_REQUIRE([gl_UNISTD_H_DEFAULTS])]) m4_ifdef([gl_SYS_IOCTL_H_DEFAULTS], [AC_REQUIRE([gl_SYS_IOCTL_H_DEFAULTS])]) AC_CHECK_HEADERS_ONCE([sys/socket.h]) if test $ac_cv_header_sys_socket_h != yes; then dnl We cannot use AC_CHECK_HEADERS_ONCE here, because that would make dnl the check for those headers unconditional; yet cygwin reports dnl that the headers are present but cannot be compiled (since on dnl cygwin, all socket information should come from sys/socket.h). AC_CHECK_HEADERS([winsock2.h]) fi if test "$ac_cv_header_winsock2_h" = yes; then HAVE_WINSOCK2_H=1 UNISTD_H_HAVE_WINSOCK2_H=1 SYS_IOCTL_H_HAVE_WINSOCK2_H=1 else HAVE_WINSOCK2_H=0 fi AC_SUBST([HAVE_WINSOCK2_H]) ]) # Common prerequisites of the <sys/socket.h> replacement and of the # <arpa/inet.h> replacement. # Sets and substitutes HAVE_WS2TCPIP_H. AC_DEFUN([gl_PREREQ_SYS_H_WS2TCPIP], [ AC_REQUIRE([gl_CHECK_SOCKET_HEADERS]) if test $ac_cv_header_sys_socket_h = yes; then HAVE_WS2TCPIP_H=0 else if test $ac_cv_header_ws2tcpip_h = yes; then HAVE_WS2TCPIP_H=1 else HAVE_WS2TCPIP_H=0 fi fi AC_SUBST([HAVE_WS2TCPIP_H]) ]) # gl_SYS_SOCKET_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_SYS_SOCKET_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_SYS_SOCKET_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_SYS_SOCKET_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_SYS_SOCKET_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SOCKET]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CONNECT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ACCEPT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_BIND]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETPEERNAME]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETSOCKNAME]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETSOCKOPT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LISTEN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RECV]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SEND]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RECVFROM]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SENDTO]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SETSOCKOPT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SHUTDOWN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ACCEPT4]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_SYS_SOCKET_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_SYS_SOCKET_H_DEFAULTS]) ]) AC_DEFUN([gl_SYS_SOCKET_H_DEFAULTS], [ HAVE_STRUCT_SOCKADDR_STORAGE=1; AC_SUBST([HAVE_STRUCT_SOCKADDR_STORAGE]) HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY=1; AC_SUBST([HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY]) HAVE_SA_FAMILY_T=1; AC_SUBST([HAVE_SA_FAMILY_T]) HAVE_ACCEPT4=1; AC_SUBST([HAVE_ACCEPT4]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/errno_h.m4������������������������������������������������������������������������������0000644�0001750�0001750�00000005642�14436424420�014556� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# errno_h.m4 serial 14 dnl Copyright (C) 2004, 2006, 2008-2023 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. AC_PREREQ([2.61]) AC_DEFUN_ONCE([gl_HEADER_ERRNO_H], [ AC_REQUIRE([AC_PROG_CC]) AC_CACHE_CHECK([for complete errno.h], [gl_cv_header_errno_h_complete], [ AC_EGREP_CPP([booboo],[ #include <errno.h> #if !defined ETXTBSY booboo #endif #if !defined ENOMSG booboo #endif #if !defined EIDRM booboo #endif #if !defined ENOLINK booboo #endif #if !defined EPROTO booboo #endif #if !defined EMULTIHOP booboo #endif #if !defined EBADMSG booboo #endif #if !defined EOVERFLOW booboo #endif #if !defined ENOTSUP booboo #endif #if !defined ENETRESET booboo #endif #if !defined ECONNABORTED booboo #endif #if !defined ESTALE booboo #endif #if !defined EDQUOT booboo #endif #if !defined ECANCELED booboo #endif #if !defined EOWNERDEAD booboo #endif #if !defined ENOTRECOVERABLE booboo #endif #if !defined EILSEQ booboo #endif ], [gl_cv_header_errno_h_complete=no], [gl_cv_header_errno_h_complete=yes]) ]) if test $gl_cv_header_errno_h_complete = yes; then GL_GENERATE_ERRNO_H=false else gl_NEXT_HEADERS([errno.h]) GL_GENERATE_ERRNO_H=true fi gl_REPLACE_ERRNO_VALUE([EMULTIHOP]) gl_REPLACE_ERRNO_VALUE([ENOLINK]) gl_REPLACE_ERRNO_VALUE([EOVERFLOW]) ]) # Assuming $1 = EOVERFLOW. # The EOVERFLOW errno value ought to be defined in <errno.h>, according to # POSIX. But some systems (like OpenBSD 4.0 or AIX 3) don't define it, and # some systems (like OSF/1) define it when _XOPEN_SOURCE_EXTENDED is defined. # Check for the value of EOVERFLOW. # Set the variables EOVERFLOW_HIDDEN and EOVERFLOW_VALUE. AC_DEFUN([gl_REPLACE_ERRNO_VALUE], [ if $GL_GENERATE_ERRNO_H; then AC_CACHE_CHECK([for ]$1[ value], [gl_cv_header_errno_h_]$1, [ AC_EGREP_CPP([yes],[ #include <errno.h> #ifdef ]$1[ yes #endif ], [gl_cv_header_errno_h_]$1[=yes], [gl_cv_header_errno_h_]$1[=no]) if test $gl_cv_header_errno_h_]$1[ = no; then AC_EGREP_CPP([yes],[ #define _XOPEN_SOURCE_EXTENDED 1 #include <errno.h> #ifdef ]$1[ yes #endif ], [gl_cv_header_errno_h_]$1[=hidden]) if test $gl_cv_header_errno_h_]$1[ = hidden; then dnl The macro exists but is hidden. dnl Define it to the same value. AC_COMPUTE_INT([gl_cv_header_errno_h_]$1, $1, [ #define _XOPEN_SOURCE_EXTENDED 1 #include <errno.h> /* The following two lines are a workaround against an autoconf-2.52 bug. */ #include <stdio.h> #include <stdlib.h> ]) fi fi ]) case $gl_cv_header_errno_h_]$1[ in yes | no) ]$1[_HIDDEN=0; ]$1[_VALUE= ;; *) ]$1[_HIDDEN=1; ]$1[_VALUE="$gl_cv_header_errno_h_]$1[" ;; esac AC_SUBST($1[_HIDDEN]) AC_SUBST($1[_VALUE]) fi ]) ����������������������������������������������������������������������������������������������rush-2.4/m4/reallocarray.m4�������������������������������������������������������������������������0000644�0001750�0001750�00000001571�14436424420�015577� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# reallocarray.m4 serial 5 dnl Copyright (C) 2017-2023 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. AC_DEFUN([gl_FUNC_REALLOCARRAY], [ dnl Persuade glibc <stdlib.h> to declare reallocarray. AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_REQUIRE([gl_CHECK_MALLOC_PTRDIFF]) gl_CHECK_FUNCS_ANDROID([reallocarray], [[#include <stdlib.h>]]) if test "$ac_cv_func_reallocarray" = no; then HAVE_REALLOCARRAY=0 case "$gl_cv_onwards_func_reallocarray" in future*) REPLACE_REALLOCARRAY=1 ;; esac elif test "$gl_cv_malloc_ptrdiff" = no; then REPLACE_REALLOCARRAY=1 fi ]) # Prerequisites of lib/reallocarray.c. AC_DEFUN([gl_PREREQ_REALLOCARRAY], [:]) ���������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/lib-prefix.m4���������������������������������������������������������������������������0000644�0001750�0001750�00000020422�14436425327�015163� 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" ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/sys_types_h.m4��������������������������������������������������������������������������0000644�0001750�0001750�00000004361�14436424420�015470� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sys_types_h.m4 serial 13 dnl Copyright (C) 2011-2023 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. AC_DEFUN_ONCE([gl_SYS_TYPES_H], [ AC_REQUIRE([gl_SYS_TYPES_H_DEFAULTS]) dnl Use sane struct stat types in OpenVMS 8.2 and later. AC_DEFINE([_USE_STD_STAT], 1, [For standard stat data types on VMS.]) gl_NEXT_HEADERS([sys/types.h]) dnl Ensure the type pid_t gets defined. AC_REQUIRE([AC_TYPE_PID_T]) dnl Ensure the type mode_t gets defined. AC_REQUIRE([AC_TYPE_MODE_T]) dnl Whether to override the 'off_t' type. AC_REQUIRE([gl_TYPE_OFF_T]) dnl Whether to override the 'dev_t' and 'ino_t' types. m4_ifdef([gl_WINDOWS_STAT_INODES], [ AC_REQUIRE([gl_WINDOWS_STAT_INODES]) ], [ WINDOWS_STAT_INODES=0 ]) AC_SUBST([WINDOWS_STAT_INODES]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_SYS_TYPES_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_SYS_TYPE_H_MODULE_INDICATOR_DEFAULTS], [ ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_SYS_TYPE_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_SYS_TYPES_H_DEFAULTS]) ]) AC_DEFUN([gl_SYS_TYPES_H_DEFAULTS], [ ]) # This works around a buggy version in autoconf <= 2.69. # See <https://lists.gnu.org/r/autoconf/2016-08/msg00014.html> # The 2.70 version isn't quoted properly, so override it too. m4_version_prereq([2.70.1], [], [ m4_undefine([AC_HEADER_MAJOR]) AC_DEFUN([AC_HEADER_MAJOR], [AC_CHECK_HEADERS_ONCE([sys/types.h]) AC_CHECK_HEADER([sys/mkdev.h], [AC_DEFINE([MAJOR_IN_MKDEV], [1], [Define to 1 if `major', `minor', and `makedev' are declared in <mkdev.h>.])]) if test $ac_cv_header_sys_mkdev_h = no; then AC_CHECK_HEADER([sys/sysmacros.h], [AC_DEFINE([MAJOR_IN_SYSMACROS], [1], [Define to 1 if `major', `minor', and `makedev' are declared in <sysmacros.h>.])]) fi ])# AC_HEADER_MAJOR ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/lock.m4���������������������������������������������������������������������������������0000644�0001750�0001750�00000003037�14436424420�014046� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# lock.m4 serial 14 dnl Copyright (C) 2005-2023 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([gl_LOCK], [ AC_REQUIRE([gl_THREADLIB]) if test "$gl_threads_api" = posix; then # OSF/1 4.0 and Mac OS X 10.1 lack the pthread_rwlock_t type and the # pthread_rwlock_* functions. has_rwlock=false AC_CHECK_TYPE([pthread_rwlock_t], [has_rwlock=true AC_DEFINE([HAVE_PTHREAD_RWLOCK], [1], [Define if the POSIX multithreading library has read/write locks.])], [], [#include <pthread.h>]) if $has_rwlock; then gl_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER fi # glibc defines PTHREAD_MUTEX_RECURSIVE as enum, not as a macro. AC_COMPILE_IFELSE([ AC_LANG_PROGRAM( [[#include <pthread.h>]], [[ #if __FreeBSD__ == 4 error "No, in FreeBSD 4.0 recursive mutexes actually don't work." #elif (defined __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ \ && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 1070) error "No, in Mac OS X < 10.7 recursive mutexes actually don't work." #else int x = (int)PTHREAD_MUTEX_RECURSIVE; return !x; #endif ]])], [AC_DEFINE([HAVE_PTHREAD_MUTEX_RECURSIVE], [1], [Define if the <pthread.h> defines PTHREAD_MUTEX_RECURSIVE.])]) fi gl_PREREQ_LOCK ]) # Prerequisites of lib/glthread/lock.c. AC_DEFUN([gl_PREREQ_LOCK], [:]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/mbrtowc.m4������������������������������������������������������������������������������0000644�0001750�0001750�00000056341�14436424420�014601� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# mbrtowc.m4 serial 40 -*- coding: utf-8 -*- dnl Copyright (C) 2001-2002, 2004-2005, 2008-2023 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. AC_DEFUN([gl_FUNC_MBRTOWC], [ AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) AC_REQUIRE([gl_PTHREADLIB]) AC_CHECK_HEADERS_ONCE([threads.h]) AC_REQUIRE([AC_TYPE_MBSTATE_T]) gl_MBSTATE_T_BROKEN AC_CHECK_FUNCS_ONCE([mbrtowc]) if test $ac_cv_func_mbrtowc = no; then HAVE_MBRTOWC=0 AC_CHECK_DECLS([mbrtowc],,, [[ #include <wchar.h> ]]) if test $ac_cv_have_decl_mbrtowc = yes; then dnl On Minix 3.1.8, the system's <wchar.h> declares mbrtowc() although dnl it does not have the function. Avoid a collision with gnulib's dnl replacement. REPLACE_MBRTOWC=1 fi else if test $REPLACE_MBSTATE_T = 1; then REPLACE_MBRTOWC=1 else gl_MBRTOWC_NULL_ARG1 gl_MBRTOWC_NULL_ARG2 gl_MBRTOWC_RETVAL gl_MBRTOWC_NUL_RETVAL gl_MBRTOWC_STORES_INCOMPLETE gl_MBRTOWC_EMPTY_INPUT gl_MBRTOWC_C_LOCALE case "$gl_cv_func_mbrtowc_null_arg1" in *yes) ;; *) AC_DEFINE([MBRTOWC_NULL_ARG1_BUG], [1], [Define if the mbrtowc function has the NULL pwc argument bug.]) REPLACE_MBRTOWC=1 ;; esac case "$gl_cv_func_mbrtowc_null_arg2" in *yes) ;; *) AC_DEFINE([MBRTOWC_NULL_ARG2_BUG], [1], [Define if the mbrtowc function has the NULL string argument bug.]) REPLACE_MBRTOWC=1 ;; esac case "$gl_cv_func_mbrtowc_retval" in *yes) ;; *) AC_DEFINE([MBRTOWC_RETVAL_BUG], [1], [Define if the mbrtowc function returns a wrong return value.]) REPLACE_MBRTOWC=1 ;; esac case "$gl_cv_func_mbrtowc_nul_retval" in *yes) ;; *) AC_DEFINE([MBRTOWC_NUL_RETVAL_BUG], [1], [Define if the mbrtowc function does not return 0 for a NUL character.]) REPLACE_MBRTOWC=1 ;; esac case "$gl_cv_func_mbrtowc_stores_incomplete" in *no) ;; *) AC_DEFINE([MBRTOWC_STORES_INCOMPLETE_BUG], [1], [Define if the mbrtowc function stores a wide character when reporting incomplete input.]) REPLACE_MBRTOWC=1 ;; esac case "$gl_cv_func_mbrtowc_empty_input" in *yes) ;; *) AC_DEFINE([MBRTOWC_EMPTY_INPUT_BUG], [1], [Define if the mbrtowc function does not return (size_t) -2 for empty input.]) REPLACE_MBRTOWC=1 ;; esac case "$gl_cv_func_mbrtowc_C_locale_sans_EILSEQ" in *yes) ;; *) AC_DEFINE([MBRTOWC_IN_C_LOCALE_MAYBE_EILSEQ], [1], [Define if the mbrtowc function may signal encoding errors in the C locale.]) REPLACE_MBRTOWC=1 ;; esac fi fi if test $REPLACE_MBSTATE_T = 1; then case "$host_os" in mingw*) MBRTOWC_LIB= ;; *) gl_WEAK_SYMBOLS case "$gl_cv_have_weak" in *yes) MBRTOWC_LIB= ;; *) MBRTOWC_LIB="$LIBPTHREAD" ;; esac ;; esac else MBRTOWC_LIB= fi dnl MBRTOWC_LIB is expected to be '-pthread' or '-lpthread' on AIX dnl with gcc or xlc, and empty otherwise. AC_SUBST([MBRTOWC_LIB]) dnl For backward compatibility. LIB_MBRTOWC="$MBRTOWC_LIB" AC_SUBST([LIB_MBRTOWC]) ]) dnl Test whether mbsinit() and mbrtowc() need to be overridden in a way that dnl redefines the semantics of the given mbstate_t type. dnl Result is REPLACE_MBSTATE_T. dnl When this is set to 1, we replace both mbsinit() and mbrtowc(), in order to dnl avoid inconsistencies. AC_DEFUN_ONCE([gl_MBSTATE_T_BROKEN], [ AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AC_TYPE_MBSTATE_T]) AC_CHECK_FUNCS_ONCE([mbsinit]) AC_CHECK_FUNCS_ONCE([mbrtowc]) dnl On native Windows, we know exactly how mbsinit() behaves and don't need dnl to override it, even if - like on MSVC - mbsinit() is only defined as dnl an inline function, not as a global function. if case "$host_os" in mingw*) true ;; *) test $ac_cv_func_mbsinit = yes ;; esac \ && test $ac_cv_func_mbrtowc = yes; then gl_MBRTOWC_INCOMPLETE_STATE gl_MBRTOWC_SANITYCHECK REPLACE_MBSTATE_T=0 case "$gl_cv_func_mbrtowc_incomplete_state" in *yes) ;; *) REPLACE_MBSTATE_T=1 ;; esac case "$gl_cv_func_mbrtowc_sanitycheck" in *yes) ;; *) REPLACE_MBSTATE_T=1 ;; esac else REPLACE_MBSTATE_T=1 fi ]) dnl Test whether mbrtowc puts the state into non-initial state when parsing an dnl incomplete multibyte character. dnl Result is gl_cv_func_mbrtowc_incomplete_state. AC_DEFUN([gl_MBRTOWC_INCOMPLETE_STATE], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gt_LOCALE_JA]) AC_REQUIRE([gt_LOCALE_FR_UTF8]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether mbrtowc handles incomplete characters], [gl_cv_func_mbrtowc_incomplete_state], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. changequote(,)dnl case "$host_os" in # Guess no on AIX and OSF/1. aix* | osf*) gl_cv_func_mbrtowc_incomplete_state="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbrtowc_incomplete_state="guessing yes" ;; esac changequote([,])dnl if test $LOCALE_JA != none; then AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> #include <string.h> #include <wchar.h> int main () { if (setlocale (LC_ALL, "$LOCALE_JA") != NULL) { const char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) if (mbsinit (&state)) return 2; } return 0; }]])], [gl_cv_func_mbrtowc_incomplete_state=yes], [gl_cv_func_mbrtowc_incomplete_state=no], [:]) else if test $LOCALE_FR_UTF8 != none; then AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> #include <string.h> #include <wchar.h> int main () { if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) { const char input[] = "B\303\274\303\237er"; /* "Büßer" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) if (mbsinit (&state)) return 2; } return 0; }]])], [gl_cv_func_mbrtowc_incomplete_state=yes], [gl_cv_func_mbrtowc_incomplete_state=no], [:]) fi fi ]) ]) dnl Test whether mbrtowc works not worse than mbtowc. dnl Result is gl_cv_func_mbrtowc_sanitycheck. AC_DEFUN([gl_MBRTOWC_SANITYCHECK], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gt_LOCALE_ZH_CN]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether mbrtowc works as well as mbtowc], [gl_cv_func_mbrtowc_sanitycheck], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. changequote(,)dnl case "$host_os" in # Guess no on Solaris 8. solaris2.8) gl_cv_func_mbrtowc_sanitycheck="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbrtowc_sanitycheck="guessing yes" ;; esac changequote([,])dnl if test $LOCALE_ZH_CN != none; then AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> #include <stdlib.h> #include <string.h> #include <wchar.h> int main () { /* This fails on Solaris 8: mbrtowc returns 2, and sets wc to 0x00F0. mbtowc returns 4 (correct) and sets wc to 0x5EDC. */ if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) { char input[] = "B\250\271\201\060\211\070er"; /* "Büßer" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 3, 6, &state) != 4 && mbtowc (&wc, input + 3, 6) == 4) return 2; } return 0; }]])], [gl_cv_func_mbrtowc_sanitycheck=yes], [gl_cv_func_mbrtowc_sanitycheck=no], [:]) fi ]) ]) dnl Test whether mbrtowc supports a NULL pwc argument correctly. dnl Result is gl_cv_func_mbrtowc_null_arg1. AC_DEFUN([gl_MBRTOWC_NULL_ARG1], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gt_LOCALE_FR_UTF8]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether mbrtowc handles a NULL pwc argument], [gl_cv_func_mbrtowc_null_arg1], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. changequote(,)dnl case "$host_os" in # Guess no on Solaris. solaris*) gl_cv_func_mbrtowc_null_arg1="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbrtowc_null_arg1="guessing yes" ;; esac changequote([,])dnl if test $LOCALE_FR_UTF8 != none; then AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> #include <stdlib.h> #include <string.h> #include <wchar.h> int main () { int result = 0; if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) { char input[] = "\303\237er"; mbstate_t state; wchar_t wc; size_t ret; memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input, 5, &state); if (ret != 2) result |= 1; if (!mbsinit (&state)) result |= 2; memset (&state, '\0', sizeof (mbstate_t)); ret = mbrtowc (NULL, input, 5, &state); if (ret != 2) /* Solaris 7 fails here: ret is -1. */ result |= 4; if (!mbsinit (&state)) result |= 8; } return result; }]])], [gl_cv_func_mbrtowc_null_arg1=yes], [gl_cv_func_mbrtowc_null_arg1=no], [:]) fi ]) ]) dnl Test whether mbrtowc supports a NULL string argument correctly. dnl Result is gl_cv_func_mbrtowc_null_arg2. AC_DEFUN([gl_MBRTOWC_NULL_ARG2], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gt_LOCALE_FR_UTF8]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether mbrtowc handles a NULL string argument], [gl_cv_func_mbrtowc_null_arg2], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. changequote(,)dnl case "$host_os" in # Guess no on OSF/1. osf*) gl_cv_func_mbrtowc_null_arg2="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbrtowc_null_arg2="guessing yes" ;; esac changequote([,])dnl if test $LOCALE_FR_UTF8 != none; then AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> #include <string.h> #include <wchar.h> int main () { if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) { mbstate_t state; wchar_t wc; int ret; memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; mbrtowc (&wc, NULL, 5, &state); /* Check that wc was not modified. */ if (wc != (wchar_t) 0xBADFACE) return 2; } return 0; }]])], [gl_cv_func_mbrtowc_null_arg2=yes], [gl_cv_func_mbrtowc_null_arg2=no], [:]) fi ]) ]) dnl Test whether mbrtowc, when parsing the end of a multibyte character, dnl correctly returns the number of bytes that were needed to complete the dnl character (not the total number of bytes of the multibyte character). dnl Result is gl_cv_func_mbrtowc_retval. AC_DEFUN([gl_MBRTOWC_RETVAL], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gt_LOCALE_FR_UTF8]) AC_REQUIRE([gt_LOCALE_JA]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_CACHE_CHECK([whether mbrtowc has a correct return value], [gl_cv_func_mbrtowc_retval], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. changequote(,)dnl case "$host_os" in # Guess no on HP-UX, Solaris, native Windows. hpux* | solaris* | mingw*) gl_cv_func_mbrtowc_retval="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbrtowc_retval="guessing yes" ;; esac changequote([,])dnl if test $LOCALE_FR_UTF8 != none || test $LOCALE_JA != none \ || { case "$host_os" in mingw*) true;; *) false;; esac; }; then AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> #include <string.h> #include <wchar.h> int main () { int result = 0; int found_some_locale = 0; /* This fails on Solaris. */ if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) { char input[] = "B\303\274\303\237er"; /* "Büßer" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) { input[1] = '\0'; if (mbrtowc (&wc, input + 2, 5, &state) != 1) result |= 1; } found_some_locale = 1; } /* This fails on HP-UX 11.11. */ if (setlocale (LC_ALL, "$LOCALE_JA") != NULL) { char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) { input[1] = '\0'; if (mbrtowc (&wc, input + 2, 5, &state) != 2) result |= 2; } found_some_locale = 1; } /* This fails on native Windows. */ if (setlocale (LC_ALL, "Japanese_Japan.932") != NULL) { char input[] = "<\223\372\226\173\214\352>"; /* "<日本語>" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 3, 1, &state) == (size_t)(-2)) { input[3] = '\0'; if (mbrtowc (&wc, input + 4, 4, &state) != 1) result |= 4; } found_some_locale = 1; } if (setlocale (LC_ALL, "Chinese_Taiwan.950") != NULL) { char input[] = "<\244\351\245\273\273\171>"; /* "<日本語>" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 3, 1, &state) == (size_t)(-2)) { input[3] = '\0'; if (mbrtowc (&wc, input + 4, 4, &state) != 1) result |= 8; } found_some_locale = 1; } if (setlocale (LC_ALL, "Chinese_China.936") != NULL) { char input[] = "<\310\325\261\276\325\132>"; /* "<日本語>" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 3, 1, &state) == (size_t)(-2)) { input[3] = '\0'; if (mbrtowc (&wc, input + 4, 4, &state) != 1) result |= 16; } found_some_locale = 1; } return (found_some_locale ? result : 77); }]])], [gl_cv_func_mbrtowc_retval=yes], [if test $? != 77; then gl_cv_func_mbrtowc_retval=no fi ], [:]) fi ]) ]) dnl Test whether mbrtowc, when parsing a NUL character, correctly returns 0. dnl Result is gl_cv_func_mbrtowc_nul_retval. AC_DEFUN([gl_MBRTOWC_NUL_RETVAL], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gt_LOCALE_ZH_CN]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether mbrtowc returns 0 when parsing a NUL character], [gl_cv_func_mbrtowc_nul_retval], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. changequote(,)dnl case "$host_os" in # Guess no on Solaris 8 and 9. solaris2.[89]) gl_cv_func_mbrtowc_nul_retval="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbrtowc_nul_retval="guessing yes" ;; esac changequote([,])dnl if test $LOCALE_ZH_CN != none; then AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> #include <string.h> #include <wchar.h> int main () { /* This fails on Solaris 8 and 9. */ if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) { mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, "", 1, &state) != 0) return 2; } return 0; }]])], [gl_cv_func_mbrtowc_nul_retval=yes], [gl_cv_func_mbrtowc_nul_retval=no], [:]) fi ]) ]) dnl Test whether mbrtowc stores a wide character when reporting incomplete dnl input. AC_DEFUN([gl_MBRTOWC_STORES_INCOMPLETE], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether mbrtowc stores incomplete characters], [gl_cv_func_mbrtowc_stores_incomplete], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. changequote(,)dnl case "$host_os" in # Guess yes on native Windows. mingw*) gl_cv_func_mbrtowc_stores_incomplete="guessing yes" ;; *) gl_cv_func_mbrtowc_stores_incomplete="guessing no" ;; esac changequote([,])dnl case "$host_os" in mingw*) AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> #include <string.h> #include <wchar.h> int main () { int result = 0; if (setlocale (LC_ALL, "French_France.65001") != NULL) { wchar_t wc = (wchar_t) 0xBADFACE; mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, "\303", 1, &state) == (size_t)(-2) && wc != (wchar_t) 0xBADFACE) result |= 1; } if (setlocale (LC_ALL, "Japanese_Japan.932") != NULL) { wchar_t wc = (wchar_t) 0xBADFACE; mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, "\226", 1, &state) == (size_t)(-2) && wc != (wchar_t) 0xBADFACE) result |= 2; } if (setlocale (LC_ALL, "Chinese_Taiwan.950") != NULL) { wchar_t wc = (wchar_t) 0xBADFACE; mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, "\245", 1, &state) == (size_t)(-2) && wc != (wchar_t) 0xBADFACE) result |= 4; } if (setlocale (LC_ALL, "Chinese_China.936") != NULL) { wchar_t wc = (wchar_t) 0xBADFACE; mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, "\261", 1, &state) == (size_t)(-2) && wc != (wchar_t) 0xBADFACE) result |= 8; } return result; }]])], [gl_cv_func_mbrtowc_stores_incomplete=no], [gl_cv_func_mbrtowc_stores_incomplete=yes], [:]) ;; *) AC_REQUIRE([gt_LOCALE_FR_UTF8]) if test $LOCALE_FR_UTF8 != none; then AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> #include <string.h> #include <wchar.h> int main () { if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) { wchar_t wc = (wchar_t) 0xBADFACE; mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, "\303", 1, &state) == (size_t)(-2) && wc != (wchar_t) 0xBADFACE) return 1; } return 0; }]])], [gl_cv_func_mbrtowc_stores_incomplete=no], [gl_cv_func_mbrtowc_stores_incomplete=yes], [:]) fi ;; esac ]) ]) dnl Test whether mbrtowc returns the correct value on empty input. AC_DEFUN([gl_MBRTOWC_EMPTY_INPUT], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether mbrtowc works on empty input], [gl_cv_func_mbrtowc_empty_input], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. changequote(,)dnl case "$host_os" in # Guess no on AIX and glibc systems. aix* | *-gnu* | gnu*) gl_cv_func_mbrtowc_empty_input="guessing no" ;; # Guess yes on native Windows. mingw*) gl_cv_func_mbrtowc_empty_input="guessing yes" ;; *) gl_cv_func_mbrtowc_empty_input="guessing yes" ;; esac changequote([,])dnl AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <wchar.h> static wchar_t wc; static mbstate_t mbs; int main (void) { return mbrtowc (&wc, "", 0, &mbs) != (size_t) -2; }]])], [gl_cv_func_mbrtowc_empty_input=yes], [gl_cv_func_mbrtowc_empty_input=no], [:]) ]) ]) dnl Test whether mbrtowc reports encoding errors in the C locale. dnl Although POSIX was never intended to allow this, the GNU C Library dnl and other implementations do it. See: dnl https://sourceware.org/bugzilla/show_bug.cgi?id=19932 dnl POSIX has now clarified it: dnl <https://pubs.opengroup.org/onlinepubs/9699919799/functions/mbrtowc.html> dnl says: "In the POSIX locale an [EILSEQ] error cannot occur since all byte dnl values are valid characters." AC_DEFUN([gl_MBRTOWC_C_LOCALE], [ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether the C locale is free of encoding errors], [gl_cv_func_mbrtowc_C_locale_sans_EILSEQ], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. gl_cv_func_mbrtowc_C_locale_sans_EILSEQ="$gl_cross_guess_normal" AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <limits.h> #include <locale.h> #include <wchar.h> ]], [[ int i; char *locale = setlocale (LC_ALL, "C"); if (! locale) return 2; for (i = CHAR_MIN; i <= CHAR_MAX; i++) { char c = i; wchar_t wc; mbstate_t mbs = { 0, }; size_t ss = mbrtowc (&wc, &c, 1, &mbs); if (1 < ss) return 3; } return 0; ]])], [gl_cv_func_mbrtowc_C_locale_sans_EILSEQ=yes], [gl_cv_func_mbrtowc_C_locale_sans_EILSEQ=no], [case "$host_os" in # Guess yes on native Windows. mingw*) gl_cv_func_mbrtowc_C_locale_sans_EILSEQ="guessing yes" ;; esac ]) ]) ]) # Prerequisites of lib/mbrtowc.c and lib/lc-charset-dispatch.c. AC_DEFUN([gl_PREREQ_MBRTOWC], [ AC_REQUIRE([AC_C_INLINE]) : ]) # Prerequisites of lib/mbtowc-lock.c. AC_DEFUN([gl_PREREQ_MBTOWC_LOCK], [ gl_VISIBILITY ]) dnl From Paul Eggert dnl This is an override of an autoconf macro. AC_DEFUN([AC_FUNC_MBRTOWC], [ dnl Same as AC_FUNC_MBRTOWC in autoconf-2.60. AC_CACHE_CHECK([whether mbrtowc and mbstate_t are properly declared], [gl_cv_func_mbrtowc], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <wchar.h>]], [[wchar_t wc; char const s[] = ""; size_t n = 1; mbstate_t state; return ! (sizeof state && (mbrtowc) (&wc, s, n, &state));]])], [gl_cv_func_mbrtowc=yes], [gl_cv_func_mbrtowc=no])]) if test $gl_cv_func_mbrtowc = yes; then AC_DEFINE([HAVE_MBRTOWC], [1], [Define to 1 if mbrtowc and mbstate_t are properly declared.]) fi ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/dup2.m4���������������������������������������������������������������������������������0000644�0001750�0001750�00000007236�14436424420�013775� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#serial 27 dnl Copyright (C) 2002, 2005, 2007, 2009-2023 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. AC_DEFUN([gl_FUNC_DUP2], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_CACHE_CHECK([whether dup2 works], [gl_cv_func_dup2_works], [AC_RUN_IFELSE([ AC_LANG_PROGRAM( [[#include <errno.h> #include <fcntl.h> #include <limits.h> #include <sys/resource.h> #include <unistd.h> ]GL_MDA_DEFINES[ #ifndef RLIM_SAVED_CUR # define RLIM_SAVED_CUR RLIM_INFINITY #endif #ifndef RLIM_SAVED_MAX # define RLIM_SAVED_MAX RLIM_INFINITY #endif ]], [[int result = 0; int bad_fd = INT_MAX; struct rlimit rlim; if (getrlimit (RLIMIT_NOFILE, &rlim) == 0 && 0 <= rlim.rlim_cur && rlim.rlim_cur <= INT_MAX && rlim.rlim_cur != RLIM_INFINITY && rlim.rlim_cur != RLIM_SAVED_MAX && rlim.rlim_cur != RLIM_SAVED_CUR) bad_fd = rlim.rlim_cur; #ifdef FD_CLOEXEC if (fcntl (1, F_SETFD, FD_CLOEXEC) == -1) result |= 1; #endif if (dup2 (1, 1) != 1) result |= 2; #ifdef FD_CLOEXEC if (fcntl (1, F_GETFD) != FD_CLOEXEC) result |= 4; #endif close (0); if (dup2 (0, 0) != -1) result |= 8; /* Many gnulib modules require POSIX conformance of EBADF. */ if (dup2 (2, bad_fd) == -1 && errno != EBADF) result |= 16; /* Flush out some cygwin core dumps. */ if (dup2 (2, -1) != -1 || errno != EBADF) result |= 32; dup2 (2, 255); dup2 (2, 256); /* On OS/2 kLIBC, dup2() does not work on a directory fd. */ { int fd = open (".", O_RDONLY); if (fd == -1) result |= 64; else if (dup2 (fd, fd + 1) == -1) result |= 128; close (fd); } return result;]]) ], [gl_cv_func_dup2_works=yes], [gl_cv_func_dup2_works=no], [case "$host_os" in mingw*) # on this platform, dup2 always returns 0 for success gl_cv_func_dup2_works="guessing no" ;; cygwin*) # on cygwin 1.5.x, dup2(1,1) returns 0 gl_cv_func_dup2_works="guessing no" ;; aix* | freebsd*) # on AIX 7.1 and FreeBSD 6.1, dup2 (1,toobig) gives EMFILE, # not EBADF. gl_cv_func_dup2_works="guessing no" ;; haiku*) # on Haiku alpha 2, dup2(1, 1) resets FD_CLOEXEC. gl_cv_func_dup2_works="guessing no" ;; *-android*) # implemented using dup3(), which fails if oldfd == newfd gl_cv_func_dup2_works="guessing no" ;; os2*) # on OS/2 kLIBC, dup2() does not work on a directory fd. gl_cv_func_dup2_works="guessing no" ;; *) gl_cv_func_dup2_works="guessing yes" ;; esac]) ]) case "$gl_cv_func_dup2_works" in *yes) ;; *) REPLACE_DUP2=1 AC_CHECK_FUNCS([setdtablesize]) ;; esac dnl Replace dup2() for supporting the gnulib-defined fchdir() function, dnl to keep fchdir's bookkeeping up-to-date. m4_ifdef([gl_FUNC_FCHDIR], [ gl_TEST_FCHDIR if test $HAVE_FCHDIR = 0; then REPLACE_DUP2=1 fi ]) ]) # Prerequisites of lib/dup2.c. AC_DEFUN([gl_PREREQ_DUP2], []) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/stat-time.m4����������������������������������������������������������������������������0000644�0001750�0001750�00000006057�14436424420�015032� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Checks for stat-related time functions. # Copyright (C) 1998-1999, 2001, 2003, 2005-2007, 2009-2023 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. dnl From Paul Eggert. # st_atim.tv_nsec - Linux, Solaris, Cygwin # st_atimespec.tv_nsec - FreeBSD, NetBSD, if ! defined _POSIX_SOURCE # st_atimensec - FreeBSD, NetBSD, if defined _POSIX_SOURCE # st_atim.st__tim.tv_nsec - UnixWare (at least 2.1.2 through 7.1) # st_birthtimespec - FreeBSD, NetBSD (hidden on OpenBSD 3.9, anyway) # st_birthtim - Cygwin 1.7.0+ AC_DEFUN([gl_STAT_TIME], [ AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_CHECK_HEADERS_ONCE([sys/time.h]) AC_CHECK_MEMBERS([struct stat.st_atim.tv_nsec], [AC_CACHE_CHECK([whether struct stat.st_atim is of type struct timespec], [ac_cv_typeof_struct_stat_st_atim_is_struct_timespec], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM( [[ #include <sys/types.h> #include <sys/stat.h> #if HAVE_SYS_TIME_H # include <sys/time.h> #endif #include <time.h> struct timespec ts; struct stat st; ]], [[ st.st_atim = ts; ]])], [ac_cv_typeof_struct_stat_st_atim_is_struct_timespec=yes], [ac_cv_typeof_struct_stat_st_atim_is_struct_timespec=no])]) if test $ac_cv_typeof_struct_stat_st_atim_is_struct_timespec = yes; then AC_DEFINE([TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC], [1], [Define to 1 if the type of the st_atim member of a struct stat is struct timespec.]) fi], [AC_CHECK_MEMBERS([struct stat.st_atimespec.tv_nsec], [], [AC_CHECK_MEMBERS([struct stat.st_atimensec], [], [AC_CHECK_MEMBERS([struct stat.st_atim.st__tim.tv_nsec], [], [], [#include <sys/types.h> #include <sys/stat.h>])], [#include <sys/types.h> #include <sys/stat.h>])], [#include <sys/types.h> #include <sys/stat.h>])], [#include <sys/types.h> #include <sys/stat.h>]) ]) # Check for st_birthtime, a feature from UFS2 (FreeBSD, NetBSD, OpenBSD, etc.) # and NTFS (Cygwin). # There was a time when this field was named st_createtime (21 June # 2002 to 16 July 2002) But that window is very small and applied only # to development code, so systems still using that configuration are # not supported. See revisions 1.10 and 1.11 of FreeBSD's # src/sys/ufs/ufs/dinode.h. # AC_DEFUN([gl_STAT_BIRTHTIME], [ AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_CHECK_HEADERS_ONCE([sys/time.h]) AC_CHECK_MEMBERS([struct stat.st_birthtimespec.tv_nsec], [], [AC_CHECK_MEMBERS([struct stat.st_birthtimensec], [], [AC_CHECK_MEMBERS([struct stat.st_birthtim.tv_nsec], [], [], [#include <sys/types.h> #include <sys/stat.h>])], [#include <sys/types.h> #include <sys/stat.h>])], [#include <sys/types.h> #include <sys/stat.h>]) ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/wint_t.m4�������������������������������������������������������������������������������0000644�0001750�0001750�00000003433�14436424420�014422� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wint_t.m4 serial 11 dnl Copyright (C) 2003, 2007-2023 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 Test whether <wchar.h> has the 'wint_t' type and whether gnulib's dnl <wchar.h> or <wctype.h> would, if present, override 'wint_t'. dnl Prerequisite: AC_PROG_CC AC_DEFUN([gt_TYPE_WINT_T], [ AC_CACHE_CHECK([for wint_t], [gt_cv_c_wint_t], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <wchar.h> wint_t foo = (wchar_t)'\0';]], [[]])], [gt_cv_c_wint_t=yes], [gt_cv_c_wint_t=no])]) if test $gt_cv_c_wint_t = yes; then AC_DEFINE([HAVE_WINT_T], [1], [Define if you have the 'wint_t' type.]) dnl Determine whether gnulib's <wchar.h> or <wctype.h> would, if present, dnl override 'wint_t'. AC_CACHE_CHECK([whether wint_t is large enough], [gl_cv_type_wint_t_large_enough], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <wchar.h> int verify[sizeof (wint_t) < sizeof (int) ? -1 : 1]; ]])], [gl_cv_type_wint_t_large_enough=yes], [gl_cv_type_wint_t_large_enough=no])]) if test $gl_cv_type_wint_t_large_enough = no; then GNULIBHEADERS_OVERRIDE_WINT_T=1 else GNULIBHEADERS_OVERRIDE_WINT_T=0 fi else GNULIBHEADERS_OVERRIDE_WINT_T=0 fi AC_SUBST([GNULIBHEADERS_OVERRIDE_WINT_T]) ]) dnl Prerequisites of the 'wint_t' override. AC_DEFUN([gl_TYPE_WINT_T_PREREQ], [ AC_CHECK_HEADERS_ONCE([crtdefs.h]) if test $ac_cv_header_crtdefs_h = yes; then HAVE_CRTDEFS_H=1 else HAVE_CRTDEFS_H=0 fi AC_SUBST([HAVE_CRTDEFS_H]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/eealloc.m4������������������������������������������������������������������������������0000644�0001750�0001750�00000001667�14436424420�014531� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# eealloc.m4 serial 3 dnl Copyright (C) 2003, 2009-2023 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. AC_DEFUN([gl_EEALLOC], [ AC_REQUIRE([gl_EEMALLOC]) AC_REQUIRE([gl_EEREALLOC]) ]) AC_DEFUN([gl_EEMALLOC], [ _AC_FUNC_MALLOC_IF( [gl_cv_func_malloc_0_nonnull=1], [gl_cv_func_malloc_0_nonnull=0]) AC_DEFINE_UNQUOTED([MALLOC_0_IS_NONNULL], [$gl_cv_func_malloc_0_nonnull], [If malloc(0) is != NULL, define this to 1. Otherwise define this to 0.]) ]) AC_DEFUN([gl_EEREALLOC], [ _AC_FUNC_REALLOC_IF( [gl_cv_func_realloc_0_nonnull=1], [gl_cv_func_realloc_0_nonnull=0]) AC_DEFINE_UNQUOTED([REALLOC_0_IS_NONNULL], [$gl_cv_func_realloc_0_nonnull], [If realloc(NULL,0) is != NULL, define this to 1. Otherwise define this to 0.]) ]) �������������������������������������������������������������������������rush-2.4/m4/nls.m4����������������������������������������������������������������������������������0000644�0001750�0001750�00000002315�14436425327�013717� 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]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/alloca.m4�������������������������������������������������������������������������������0000644�0001750�0001750�00000007312�14436424420�014351� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# alloca.m4 serial 21 dnl Copyright (C) 2002-2004, 2006-2007, 2009-2023 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. AC_DEFUN([gl_FUNC_ALLOCA], [ AC_REQUIRE([AC_FUNC_ALLOCA]) if test $ac_cv_func_alloca_works = no; then gl_PREREQ_ALLOCA fi # Define an additional variable used in the Makefile substitution. if test $ac_cv_working_alloca_h = yes; then AC_CACHE_CHECK([for alloca as a compiler built-in], [gl_cv_rpl_alloca], [ AC_EGREP_CPP([Need own alloca], [ #if defined __GNUC__ || defined _AIX || defined _MSC_VER Need own alloca #endif ], [gl_cv_rpl_alloca=yes], [gl_cv_rpl_alloca=no]) ]) if test $gl_cv_rpl_alloca = yes; then dnl OK, alloca can be implemented through a compiler built-in. AC_DEFINE([HAVE_ALLOCA], [1], [Define to 1 if you have 'alloca' after including <alloca.h>, a header that may be supplied by this distribution.]) GL_GENERATE_ALLOCA_H=true else dnl alloca exists as a library function, i.e. it is slow and probably dnl a memory leak. Don't define HAVE_ALLOCA in this case. GL_GENERATE_ALLOCA_H=false fi else GL_GENERATE_ALLOCA_H=true fi if test $ac_cv_working_alloca_h = yes; then HAVE_ALLOCA_H=1 else HAVE_ALLOCA_H=0 fi AC_SUBST([HAVE_ALLOCA_H]) ]) # Prerequisites of lib/alloca.c. # STACK_DIRECTION is already handled by AC_FUNC_ALLOCA. AC_DEFUN([gl_PREREQ_ALLOCA], [:]) m4_version_prereq([2.70], [], [ # This works around a bug in autoconf <= 2.68 and has simplifications # from 2.70. See: # https://lists.gnu.org/r/bug-gnulib/2011-06/msg00277.html # https://git.savannah.gnu.org/cgit/autoconf.git/commit/?id=6cd9f12520b0d6f76d3230d7565feba1ecf29497 # https://git.savannah.gnu.org/cgit/autoconf.git/commit/?id=15edf7fd8094fd14a89d9891dd72a9624762597a # _AC_LIBOBJ_ALLOCA # ----------------- # Set up the LIBOBJ replacement of 'alloca'. Well, not exactly # AC_LIBOBJ since we actually set the output variable 'ALLOCA'. # Nevertheless, for Automake, AC_LIBSOURCES it. m4_define([_AC_LIBOBJ_ALLOCA], [# The SVR3 libPW and SVR4 libucb both contain incompatible functions # that cause trouble. Some versions do not even contain alloca or # contain a buggy version. If you still want to use their alloca, # use ar to extract alloca.o from them instead of compiling alloca.c. AC_LIBSOURCES(alloca.c) AC_SUBST([ALLOCA], [\${LIBOBJDIR}alloca.$ac_objext])dnl AC_DEFINE(C_ALLOCA, 1, [Define to 1 if using 'alloca.c'.]) AC_CACHE_CHECK([stack direction for C alloca], [ac_cv_c_stack_direction], [AC_RUN_IFELSE([AC_LANG_SOURCE( [AC_INCLUDES_DEFAULT int find_stack_direction (int *addr, int depth) { int dir, dummy = 0; if (! addr) addr = &dummy; *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1; dir = depth ? find_stack_direction (addr, depth - 1) : 0; return dir + dummy; } int main (int argc, char **argv) { return find_stack_direction (0, argc + !argv + 20) < 0; }])], [ac_cv_c_stack_direction=1], [ac_cv_c_stack_direction=-1], [ac_cv_c_stack_direction=0])]) AH_VERBATIM([STACK_DIRECTION], [/* If using the C implementation of alloca, define if you know the direction of stack growth for your system; otherwise it will be automatically deduced at runtime. STACK_DIRECTION > 0 => grows toward higher addresses STACK_DIRECTION < 0 => grows toward lower addresses STACK_DIRECTION = 0 => direction of growth unknown */ #undef STACK_DIRECTION])dnl AC_DEFINE_UNQUOTED(STACK_DIRECTION, $ac_cv_c_stack_direction) ])# _AC_LIBOBJ_ALLOCA ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/unistd_h.m4�����������������������������������������������������������������������������0000644�0001750�0001750�00000034335�14436424420�014740� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# unistd_h.m4 serial 94 dnl Copyright (C) 2006-2023 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 Written by Simon Josefsson, Bruno Haible. AC_DEFUN_ONCE([gl_UNISTD_H], [ dnl Ensure to expand the default settings once only, before all statements dnl that occur in other macros. AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) gl_CHECK_NEXT_HEADERS([unistd.h]) if test $ac_cv_header_unistd_h = yes; then HAVE_UNISTD_H=1 else HAVE_UNISTD_H=0 fi AC_SUBST([HAVE_UNISTD_H]) dnl Ensure the type pid_t gets defined. AC_REQUIRE([AC_TYPE_PID_T]) dnl Determine WINDOWS_64_BIT_OFF_T. AC_REQUIRE([gl_TYPE_OFF_T]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[ #if HAVE_UNISTD_H # include <unistd.h> #endif /* Some systems declare various items in the wrong headers. */ #if !(defined __GLIBC__ && !defined __UCLIBC__) # include <fcntl.h> # include <stdio.h> # include <stdlib.h> # if defined _WIN32 && ! defined __CYGWIN__ # include <io.h> # endif #endif ]], [access chdir chown copy_file_range dup dup2 dup3 environ euidaccess execl execle execlp execv execve execvp execvpe faccessat fchdir fchownat fdatasync fsync ftruncate getcwd getdomainname getdtablesize getentropy getgroups gethostname getlogin getlogin_r getpagesize getpass getusershell setusershell endusershell group_member isatty lchown link linkat lseek pipe pipe2 pread pwrite readlink readlinkat rmdir sethostname sleep symlink symlinkat truncate ttyname_r unlink unlinkat usleep]) AC_REQUIRE([AC_C_RESTRICT]) AC_CHECK_DECLS_ONCE([execvpe]) if test $ac_cv_have_decl_execvpe = no; then HAVE_DECL_EXECVPE=0 fi ]) # gl_UNISTD_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_UNISTD_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_UNISTD_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_UNISTD_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_UNISTD_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ACCESS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CHDIR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CHOWN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CLOSE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_COPY_FILE_RANGE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_DUP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_DUP2]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_DUP3]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ENVIRON]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EUIDACCESS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXECL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXECLE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXECLP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXECV]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXECVE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXECVP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXECVPE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FACCESSAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FCHDIR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FCHOWNAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FDATASYNC]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FSYNC]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FTRUNCATE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETCWD]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETDOMAINNAME]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETDTABLESIZE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETENTROPY]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETGROUPS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETHOSTNAME]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETLOGIN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETLOGIN_R]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETOPT_POSIX]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETPAGESIZE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETPASS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETPASS_GNU]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETUSERSHELL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GROUP_MEMBER]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISATTY]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LCHOWN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LINK]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LINKAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LSEEK]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PIPE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PIPE2]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PREAD]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PWRITE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_READ]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_READLINK]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_READLINKAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RMDIR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SETHOSTNAME]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SLEEP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SYMLINK]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SYMLINKAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TRUNCATE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TTYNAME_R]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNISTD_H_GETOPT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNISTD_H_NONBLOCKING]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNISTD_H_SIGPIPE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNLINK]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNLINKAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_USLEEP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WRITE]) dnl Support Microsoft deprecated alias function names by default. gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_ACCESS], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_CHDIR], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_CLOSE], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_DUP], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_DUP2], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_EXECL], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_EXECLE], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_EXECLP], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_EXECV], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_EXECVE], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_EXECVP], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_EXECVPE], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_GETCWD], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_GETPID], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_ISATTY], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_LSEEK], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_READ], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_RMDIR], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_SWAB], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_UNLINK], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_WRITE], [1]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_UNISTD_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) ]) AC_DEFUN([gl_UNISTD_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_CHOWN=1; AC_SUBST([HAVE_CHOWN]) HAVE_COPY_FILE_RANGE=1; AC_SUBST([HAVE_COPY_FILE_RANGE]) HAVE_DUP3=1; AC_SUBST([HAVE_DUP3]) HAVE_EUIDACCESS=1; AC_SUBST([HAVE_EUIDACCESS]) HAVE_EXECVPE=1; AC_SUBST([HAVE_EXECVPE]) HAVE_FACCESSAT=1; AC_SUBST([HAVE_FACCESSAT]) HAVE_FCHDIR=1; AC_SUBST([HAVE_FCHDIR]) HAVE_FCHOWNAT=1; AC_SUBST([HAVE_FCHOWNAT]) HAVE_FDATASYNC=1; AC_SUBST([HAVE_FDATASYNC]) HAVE_FSYNC=1; AC_SUBST([HAVE_FSYNC]) HAVE_FTRUNCATE=1; AC_SUBST([HAVE_FTRUNCATE]) HAVE_GETDTABLESIZE=1; AC_SUBST([HAVE_GETDTABLESIZE]) HAVE_GETENTROPY=1; AC_SUBST([HAVE_GETENTROPY]) HAVE_GETGROUPS=1; AC_SUBST([HAVE_GETGROUPS]) HAVE_GETHOSTNAME=1; AC_SUBST([HAVE_GETHOSTNAME]) HAVE_GETLOGIN=1; AC_SUBST([HAVE_GETLOGIN]) HAVE_GETPAGESIZE=1; AC_SUBST([HAVE_GETPAGESIZE]) HAVE_GETPASS=1; AC_SUBST([HAVE_GETPASS]) HAVE_GROUP_MEMBER=1; AC_SUBST([HAVE_GROUP_MEMBER]) HAVE_LCHOWN=1; AC_SUBST([HAVE_LCHOWN]) HAVE_LINK=1; AC_SUBST([HAVE_LINK]) HAVE_LINKAT=1; AC_SUBST([HAVE_LINKAT]) HAVE_PIPE=1; AC_SUBST([HAVE_PIPE]) HAVE_PIPE2=1; AC_SUBST([HAVE_PIPE2]) HAVE_PREAD=1; AC_SUBST([HAVE_PREAD]) HAVE_PWRITE=1; AC_SUBST([HAVE_PWRITE]) HAVE_READLINK=1; AC_SUBST([HAVE_READLINK]) HAVE_READLINKAT=1; AC_SUBST([HAVE_READLINKAT]) HAVE_SETHOSTNAME=1; AC_SUBST([HAVE_SETHOSTNAME]) HAVE_SLEEP=1; AC_SUBST([HAVE_SLEEP]) HAVE_SYMLINK=1; AC_SUBST([HAVE_SYMLINK]) HAVE_SYMLINKAT=1; AC_SUBST([HAVE_SYMLINKAT]) HAVE_UNLINKAT=1; AC_SUBST([HAVE_UNLINKAT]) HAVE_USLEEP=1; AC_SUBST([HAVE_USLEEP]) HAVE_DECL_ENVIRON=1; AC_SUBST([HAVE_DECL_ENVIRON]) HAVE_DECL_EXECVPE=1; AC_SUBST([HAVE_DECL_EXECVPE]) HAVE_DECL_FCHDIR=1; AC_SUBST([HAVE_DECL_FCHDIR]) HAVE_DECL_FDATASYNC=1; AC_SUBST([HAVE_DECL_FDATASYNC]) HAVE_DECL_GETDOMAINNAME=1; AC_SUBST([HAVE_DECL_GETDOMAINNAME]) HAVE_DECL_GETLOGIN=1; AC_SUBST([HAVE_DECL_GETLOGIN]) HAVE_DECL_GETLOGIN_R=1; AC_SUBST([HAVE_DECL_GETLOGIN_R]) HAVE_DECL_GETPAGESIZE=1; AC_SUBST([HAVE_DECL_GETPAGESIZE]) HAVE_DECL_GETUSERSHELL=1; AC_SUBST([HAVE_DECL_GETUSERSHELL]) HAVE_DECL_SETHOSTNAME=1; AC_SUBST([HAVE_DECL_SETHOSTNAME]) HAVE_DECL_TRUNCATE=1; AC_SUBST([HAVE_DECL_TRUNCATE]) HAVE_DECL_TTYNAME_R=1; AC_SUBST([HAVE_DECL_TTYNAME_R]) HAVE_OS_H=0; AC_SUBST([HAVE_OS_H]) HAVE_SYS_PARAM_H=0; AC_SUBST([HAVE_SYS_PARAM_H]) REPLACE_ACCESS=0; AC_SUBST([REPLACE_ACCESS]) REPLACE_CHOWN=0; AC_SUBST([REPLACE_CHOWN]) REPLACE_CLOSE=0; AC_SUBST([REPLACE_CLOSE]) REPLACE_COPY_FILE_RANGE=0; AC_SUBST([REPLACE_COPY_FILE_RANGE]) REPLACE_DUP=0; AC_SUBST([REPLACE_DUP]) REPLACE_DUP2=0; AC_SUBST([REPLACE_DUP2]) REPLACE_DUP3=0; AC_SUBST([REPLACE_DUP3]) REPLACE_EXECL=0; AC_SUBST([REPLACE_EXECL]) REPLACE_EXECLE=0; AC_SUBST([REPLACE_EXECLE]) REPLACE_EXECLP=0; AC_SUBST([REPLACE_EXECLP]) REPLACE_EXECV=0; AC_SUBST([REPLACE_EXECV]) REPLACE_EXECVE=0; AC_SUBST([REPLACE_EXECVE]) REPLACE_EXECVP=0; AC_SUBST([REPLACE_EXECVP]) REPLACE_EXECVPE=0; AC_SUBST([REPLACE_EXECVPE]) REPLACE_FACCESSAT=0; AC_SUBST([REPLACE_FACCESSAT]) REPLACE_FCHOWNAT=0; AC_SUBST([REPLACE_FCHOWNAT]) REPLACE_FDATASYNC=0; AC_SUBST([REPLACE_FDATASYNC]) REPLACE_FTRUNCATE=0; AC_SUBST([REPLACE_FTRUNCATE]) REPLACE_GETCWD=0; AC_SUBST([REPLACE_GETCWD]) REPLACE_GETDOMAINNAME=0; AC_SUBST([REPLACE_GETDOMAINNAME]) REPLACE_GETDTABLESIZE=0; AC_SUBST([REPLACE_GETDTABLESIZE]) REPLACE_GETENTROPY=0; AC_SUBST([REPLACE_GETENTROPY]) REPLACE_GETLOGIN_R=0; AC_SUBST([REPLACE_GETLOGIN_R]) REPLACE_GETGROUPS=0; AC_SUBST([REPLACE_GETGROUPS]) REPLACE_GETPAGESIZE=0; AC_SUBST([REPLACE_GETPAGESIZE]) REPLACE_GETPASS=0; AC_SUBST([REPLACE_GETPASS]) REPLACE_GETPASS_FOR_GETPASS_GNU=0; AC_SUBST([REPLACE_GETPASS_FOR_GETPASS_GNU]) REPLACE_ISATTY=0; AC_SUBST([REPLACE_ISATTY]) REPLACE_LCHOWN=0; AC_SUBST([REPLACE_LCHOWN]) REPLACE_LINK=0; AC_SUBST([REPLACE_LINK]) REPLACE_LINKAT=0; AC_SUBST([REPLACE_LINKAT]) REPLACE_LSEEK=0; AC_SUBST([REPLACE_LSEEK]) REPLACE_PIPE2=0; AC_SUBST([REPLACE_PIPE2]) REPLACE_PREAD=0; AC_SUBST([REPLACE_PREAD]) REPLACE_PWRITE=0; AC_SUBST([REPLACE_PWRITE]) REPLACE_READ=0; AC_SUBST([REPLACE_READ]) REPLACE_READLINK=0; AC_SUBST([REPLACE_READLINK]) REPLACE_READLINKAT=0; AC_SUBST([REPLACE_READLINKAT]) REPLACE_RMDIR=0; AC_SUBST([REPLACE_RMDIR]) REPLACE_SETHOSTNAME=0; AC_SUBST([REPLACE_SETHOSTNAME]) REPLACE_SLEEP=0; AC_SUBST([REPLACE_SLEEP]) REPLACE_SYMLINK=0; AC_SUBST([REPLACE_SYMLINK]) REPLACE_SYMLINKAT=0; AC_SUBST([REPLACE_SYMLINKAT]) REPLACE_TRUNCATE=0; AC_SUBST([REPLACE_TRUNCATE]) REPLACE_TTYNAME_R=0; AC_SUBST([REPLACE_TTYNAME_R]) REPLACE_UNLINK=0; AC_SUBST([REPLACE_UNLINK]) REPLACE_UNLINKAT=0; AC_SUBST([REPLACE_UNLINKAT]) REPLACE_USLEEP=0; AC_SUBST([REPLACE_USLEEP]) REPLACE_WRITE=0; AC_SUBST([REPLACE_WRITE]) UNISTD_H_HAVE_SYS_RANDOM_H=0; AC_SUBST([UNISTD_H_HAVE_SYS_RANDOM_H]) UNISTD_H_HAVE_WINSOCK2_H=0; AC_SUBST([UNISTD_H_HAVE_WINSOCK2_H]) UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS=0; AC_SUBST([UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS]) ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/msvc-inval.m4���������������������������������������������������������������������������0000644�0001750�0001750�00000001334�14436424420�015173� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# msvc-inval.m4 serial 1 dnl Copyright (C) 2011-2023 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. AC_DEFUN([gl_MSVC_INVAL], [ AC_CHECK_FUNCS_ONCE([_set_invalid_parameter_handler]) if test $ac_cv_func__set_invalid_parameter_handler = yes; then HAVE_MSVC_INVALID_PARAMETER_HANDLER=1 AC_DEFINE([HAVE_MSVC_INVALID_PARAMETER_HANDLER], [1], [Define to 1 on MSVC platforms that have the "invalid parameter handler" concept.]) else HAVE_MSVC_INVALID_PARAMETER_HANDLER=0 fi AC_SUBST([HAVE_MSVC_INVALID_PARAMETER_HANDLER]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/gettext.m4������������������������������������������������������������������������������0000644�0001750�0001750�00000035615�14436425500�014611� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# gettext.m4 serial 66 (gettext-0.18.2) dnl Copyright (C) 1995-2014 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 Mac OS 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_LINK_IFELSE( [AC_LANG_PROGRAM( [[ #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_LINK_IFELSE( [AC_LANG_PROGRAM( [[ #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_LINK_IFELSE( [AC_LANG_PROGRAM( [[ #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], []) �������������������������������������������������������������������������������������������������������������������rush-2.4/m4/00gnulib.m4�����������������������������������������������������������������������������0000644�0001750�0001750�00000007011�14436424420�014532� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# 00gnulib.m4 serial 8 dnl Copyright (C) 2009-2023 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 This file must be named something that sorts before all other dnl gnulib-provided .m4 files. It is needed until the clang fix has dnl been included in Autoconf. # The following definitions arrange to use a compiler option # -Werror=implicit-function-declaration in AC_CHECK_DECL, when the # compiler is clang. Without it, clang implicitly declares "known" # library functions in C mode, but not in C++ mode, which would cause # Gnulib to omit a declaration and thus later produce an error in C++ # mode. As of clang 9.0, these "known" functions are identified through # LIBBUILTIN invocations in the LLVM source file # llvm/tools/clang/include/clang/Basic/Builtins.def. # It's not possible to AC_REQUIRE the extra tests from AC_CHECK_DECL, # because AC_CHECK_DECL, like other Autoconf built-ins, is not supposed # to AC_REQUIRE anything: some configure.ac files have their first # AC_CHECK_DECL executed conditionally. Therefore append the extra tests # to AC_PROG_CC. AC_DEFUN([gl_COMPILER_CLANG], [ dnl AC_REQUIRE([AC_PROG_CC]) AC_CACHE_CHECK([whether the compiler is clang], [gl_cv_compiler_clang], [dnl Use _AC_COMPILE_IFELSE instead of AC_EGREP_CPP, to avoid error dnl "circular dependency of AC_LANG_COMPILER(C)" if AC_PROG_CC has dnl not yet been invoked. _AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[ #ifdef __clang__ barfbarf #endif ]],[[]]) ], [gl_cv_compiler_clang=no], [gl_cv_compiler_clang=yes]) ]) ]) AC_DEFUN([gl_COMPILER_PREPARE_CHECK_DECL], [ dnl AC_REQUIRE([AC_PROG_CC]) dnl AC_REQUIRE([gl_COMPILER_CLANG]) AC_CACHE_CHECK([for compiler option needed when checking for declarations], [gl_cv_compiler_check_decl_option], [if test $gl_cv_compiler_clang = yes; then dnl Test whether the compiler supports the option dnl '-Werror=implicit-function-declaration'. save_ac_compile="$ac_compile" ac_compile="$ac_compile -Werror=implicit-function-declaration" dnl Use _AC_COMPILE_IFELSE instead of AC_COMPILE_IFELSE, to avoid a dnl warning "AC_COMPILE_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS". _AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]],[[]])], [gl_cv_compiler_check_decl_option='-Werror=implicit-function-declaration'], [gl_cv_compiler_check_decl_option=none]) ac_compile="$save_ac_compile" else gl_cv_compiler_check_decl_option=none fi ]) if test "x$gl_cv_compiler_check_decl_option" != xnone; then ac_compile_for_check_decl="$ac_compile $gl_cv_compiler_check_decl_option" else ac_compile_for_check_decl="$ac_compile" fi ]) dnl Redefine _AC_CHECK_DECL_BODY so that it references ac_compile_for_check_decl dnl instead of ac_compile. If, for whatever reason, the override of AC_PROG_CC dnl in zzgnulib.m4 is inactive, use the original ac_compile. m4_define([_AC_CHECK_DECL_BODY], [ ac_save_ac_compile="$ac_compile" if test -n "$ac_compile_for_check_decl"; then ac_compile="$ac_compile_for_check_decl" fi] m4_defn([_AC_CHECK_DECL_BODY])[ ac_compile="$ac_save_ac_compile" ]) # gl_00GNULIB # ----------- # Witness macro that this file has been included. Needed to force # Automake to include this file prior to all other gnulib .m4 files. AC_DEFUN([gl_00GNULIB]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/getdelim.m4�����������������������������������������������������������������������������0000644�0001750�0001750�00000006756�14436424420�014723� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# getdelim.m4 serial 19 dnl Copyright (C) 2005-2007, 2009-2023 Free Software Foundation, Inc. dnl 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. AC_PREREQ([2.59]) AC_DEFUN([gl_FUNC_GETDELIM], [ AC_REQUIRE([gl_STDIO_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl Persuade glibc <stdio.h> to declare getdelim(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_CHECK_DECLS_ONCE([getdelim]) gl_CHECK_FUNCS_ANDROID([getdelim], [[#include <stdio.h>]]) if test $ac_cv_func_getdelim = yes; then HAVE_GETDELIM=1 dnl Found it in some library. Verify that it works. AC_CACHE_CHECK([for working getdelim function], [gl_cv_func_working_getdelim], [case "$host_os" in darwin*) dnl On macOS 10.13, valgrind detected an out-of-bounds read during dnl the GNU sed test suite: dnl Invalid read of size 16 dnl at 0x100EE6A05: _platform_memchr$VARIANT$Base (in /usr/lib/system/libsystem_platform.dylib) dnl by 0x100B7B0BD: getdelim (in /usr/lib/system/libsystem_c.dylib) dnl by 0x10000B0BE: ck_getdelim (utils.c:254) gl_cv_func_working_getdelim=no ;; *) echo fooNbarN | tr -d '\012' | tr N '\012' > conftest.data AC_RUN_IFELSE([AC_LANG_SOURCE([[ # include <stdio.h> # include <stdlib.h> # include <string.h> int main () { FILE *in = fopen ("./conftest.data", "r"); if (!in) return 1; { /* Test result for a NULL buffer and a zero size. Based on a test program from Karl Heuer. */ char *line = NULL; size_t siz = 0; int len = getdelim (&line, &siz, '\n', in); if (!(len == 4 && line && strcmp (line, "foo\n") == 0)) { free (line); fclose (in); return 2; } free (line); } { /* Test result for a NULL buffer and a non-zero size. This crashes on FreeBSD 8.0. */ char *line = NULL; size_t siz = (size_t)(~0) / 4; if (getdelim (&line, &siz, '\n', in) == -1) { fclose (in); return 3; } free (line); } fclose (in); return 0; } ]])], [gl_cv_func_working_getdelim=yes], [gl_cv_func_working_getdelim=no], [dnl We're cross compiling. dnl Guess it works on glibc2 systems and musl systems. AC_EGREP_CPP([Lucky GNU user], [ #include <features.h> #ifdef __GNU_LIBRARY__ #if (__GLIBC__ >= 2) && !defined __UCLIBC__ Lucky GNU user #endif #endif ], [gl_cv_func_working_getdelim="guessing yes"], [case "$host_os" in *-musl* | midipix*) gl_cv_func_working_getdelim="guessing yes" ;; *) gl_cv_func_working_getdelim="$gl_cross_guess_normal" ;; esac ]) ]) ;; esac ]) case "$gl_cv_func_working_getdelim" in *yes) ;; *) REPLACE_GETDELIM=1 ;; esac else HAVE_GETDELIM=0 case "$gl_cv_onwards_func_getdelim" in future*) REPLACE_GETDELIM=1 ;; esac fi if test $ac_cv_have_decl_getdelim = no; then HAVE_DECL_GETDELIM=0 fi ]) # Prerequisites of lib/getdelim.c. AC_DEFUN([gl_PREREQ_GETDELIM], [ AC_CHECK_FUNCS([flockfile funlockfile]) AC_CHECK_DECLS([getc_unlocked]) ]) ������������������rush-2.4/m4/gnulib-common.m4������������������������������������������������������������������������0000644�0001750�0001750�00000152757�14436424420�015702� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# gnulib-common.m4 serial 87 dnl Copyright (C) 2007-2023 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. AC_PREREQ([2.62]) # gl_COMMON # is expanded unconditionally through gnulib-tool magic. AC_DEFUN([gl_COMMON], [ dnl Use AC_REQUIRE here, so that the code is expanded once only. AC_REQUIRE([gl_00GNULIB]) AC_REQUIRE([gl_COMMON_BODY]) AC_REQUIRE([gl_ZZGNULIB]) ]) AC_DEFUN([gl_COMMON_BODY], [ AH_VERBATIM([0witness], [/* Witness that <config.h> has been included. */ #define _GL_CONFIG_H_INCLUDED 1 ]) AH_VERBATIM([_GL_GNUC_PREREQ], [/* True if the compiler says it groks GNU C version MAJOR.MINOR. */ #if defined __GNUC__ && defined __GNUC_MINOR__ # define _GL_GNUC_PREREQ(major, minor) \ ((major) < __GNUC__ + ((minor) <= __GNUC_MINOR__)) #else # define _GL_GNUC_PREREQ(major, minor) 0 #endif ]) AH_VERBATIM([_Noreturn], [/* The _Noreturn keyword of C11. */ #ifndef _Noreturn # if (defined __cplusplus \ && ((201103 <= __cplusplus && !(__GNUC__ == 4 && __GNUC_MINOR__ == 7)) \ || (defined _MSC_VER && 1900 <= _MSC_VER)) \ && 0) /* [[noreturn]] is not practically usable, because with it the syntax extern _Noreturn void func (...); would not be valid; such a declaration would only be valid with 'extern' and '_Noreturn' swapped, or without the 'extern' keyword. However, some AIX system header files and several gnulib header files use precisely this syntax with 'extern'. */ # define _Noreturn [[noreturn]] # elif (defined __clang__ && __clang_major__ < 16 \ && defined _GL_WORK_AROUND_LLVM_BUG_59792) /* Compile with -D_GL_WORK_AROUND_LLVM_BUG_59792 to work around that rare LLVM bug, though you may get many false-alarm warnings. */ # define _Noreturn # elif ((!defined __cplusplus || defined __clang__) \ && (201112 <= (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) \ || (!defined __STRICT_ANSI__ \ && (_GL_GNUC_PREREQ (4, 7) \ || (defined __apple_build_version__ \ ? 6000000 <= __apple_build_version__ \ : 3 < __clang_major__ + (5 <= __clang_minor__)))))) /* _Noreturn works as-is. */ # elif _GL_GNUC_PREREQ (2, 8) || defined __clang__ || 0x5110 <= __SUNPRO_C # define _Noreturn __attribute__ ((__noreturn__)) # elif 1200 <= (defined _MSC_VER ? _MSC_VER : 0) # define _Noreturn __declspec (noreturn) # else # define _Noreturn # endif #endif ]) AH_VERBATIM([isoc99_inline], [/* Work around a bug in Apple GCC 4.0.1 build 5465: In C99 mode, it supports the ISO C 99 semantics of 'extern inline' (unlike the GNU C semantics of earlier versions), but does not display it by setting __GNUC_STDC_INLINE__. __APPLE__ && __MACH__ test for Mac OS X. __APPLE_CC__ tests for the Apple compiler and its version. __STDC_VERSION__ tests for the C99 mode. */ #if defined __APPLE__ && defined __MACH__ && __APPLE_CC__ >= 5465 && !defined __cplusplus && __STDC_VERSION__ >= 199901L && !defined __GNUC_STDC_INLINE__ # define __GNUC_STDC_INLINE__ 1 #endif]) AH_VERBATIM([attribute], [/* Attributes. */ #if (defined __has_attribute \ && (!defined __clang_minor__ \ || (defined __apple_build_version__ \ ? 6000000 <= __apple_build_version__ \ : 5 <= __clang_major__))) # define _GL_HAS_ATTRIBUTE(attr) __has_attribute (__##attr##__) #else # define _GL_HAS_ATTRIBUTE(attr) _GL_ATTR_##attr # define _GL_ATTR_alloc_size _GL_GNUC_PREREQ (4, 3) # define _GL_ATTR_always_inline _GL_GNUC_PREREQ (3, 2) # define _GL_ATTR_artificial _GL_GNUC_PREREQ (4, 3) # define _GL_ATTR_cold _GL_GNUC_PREREQ (4, 3) # define _GL_ATTR_const _GL_GNUC_PREREQ (2, 95) # define _GL_ATTR_deprecated _GL_GNUC_PREREQ (3, 1) # define _GL_ATTR_diagnose_if 0 # define _GL_ATTR_error _GL_GNUC_PREREQ (4, 3) # define _GL_ATTR_externally_visible _GL_GNUC_PREREQ (4, 1) # define _GL_ATTR_fallthrough _GL_GNUC_PREREQ (7, 0) # define _GL_ATTR_format _GL_GNUC_PREREQ (2, 7) # define _GL_ATTR_leaf _GL_GNUC_PREREQ (4, 6) # define _GL_ATTR_malloc _GL_GNUC_PREREQ (3, 0) # ifdef _ICC # define _GL_ATTR_may_alias 0 # else # define _GL_ATTR_may_alias _GL_GNUC_PREREQ (3, 3) # endif # define _GL_ATTR_noinline _GL_GNUC_PREREQ (3, 1) # define _GL_ATTR_nonnull _GL_GNUC_PREREQ (3, 3) # define _GL_ATTR_nonstring _GL_GNUC_PREREQ (8, 0) # define _GL_ATTR_nothrow _GL_GNUC_PREREQ (3, 3) # define _GL_ATTR_packed _GL_GNUC_PREREQ (2, 7) # define _GL_ATTR_pure _GL_GNUC_PREREQ (2, 96) # define _GL_ATTR_returns_nonnull _GL_GNUC_PREREQ (4, 9) # define _GL_ATTR_sentinel _GL_GNUC_PREREQ (4, 0) # define _GL_ATTR_unused _GL_GNUC_PREREQ (2, 7) # define _GL_ATTR_warn_unused_result _GL_GNUC_PREREQ (3, 4) #endif /* Disable GCC -Wpedantic if using __has_c_attribute and this is not C23+. */ #if (defined __has_c_attribute && _GL_GNUC_PREREQ (4, 6) \ && (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) <= 201710) # pragma GCC diagnostic ignored "-Wpedantic" #endif /* Define if, in a function declaration, the attributes in bracket syntax [[...]] must come before the attributes in __attribute__((...)) syntax. If this is defined, it is best to avoid the bracket syntax, so that the various _GL_ATTRIBUTE_* can be cumulated on the same declaration in any order. */ #ifdef __cplusplus # if defined __clang__ # define _GL_BRACKET_BEFORE_ATTRIBUTE 1 # endif #else # if defined __GNUC__ && !defined __clang__ # define _GL_BRACKET_BEFORE_ATTRIBUTE 1 # endif #endif ]dnl There is no _GL_ATTRIBUTE_ALIGNED; use stdalign's alignas instead. [ /* _GL_ATTRIBUTE_ALLOC_SIZE ((N)) declares that the Nth argument of the function is the size of the returned memory block. _GL_ATTRIBUTE_ALLOC_SIZE ((M, N)) declares that the Mth argument multiplied by the Nth argument of the function is the size of the returned memory block. */ /* Applies to: function, pointer to function, function types. */ #ifndef _GL_ATTRIBUTE_ALLOC_SIZE # if _GL_HAS_ATTRIBUTE (alloc_size) # define _GL_ATTRIBUTE_ALLOC_SIZE(args) __attribute__ ((__alloc_size__ args)) # else # define _GL_ATTRIBUTE_ALLOC_SIZE(args) # endif #endif /* _GL_ATTRIBUTE_ALWAYS_INLINE tells that the compiler should always inline the function and report an error if it cannot do so. */ /* Applies to: function. */ #ifndef _GL_ATTRIBUTE_ALWAYS_INLINE # if _GL_HAS_ATTRIBUTE (always_inline) # define _GL_ATTRIBUTE_ALWAYS_INLINE __attribute__ ((__always_inline__)) # else # define _GL_ATTRIBUTE_ALWAYS_INLINE # endif #endif /* _GL_ATTRIBUTE_ARTIFICIAL declares that the function is not important to show in stack traces when debugging. The compiler should omit the function from stack traces. */ /* Applies to: function. */ #ifndef _GL_ATTRIBUTE_ARTIFICIAL # if _GL_HAS_ATTRIBUTE (artificial) # define _GL_ATTRIBUTE_ARTIFICIAL __attribute__ ((__artificial__)) # else # define _GL_ATTRIBUTE_ARTIFICIAL # endif #endif /* _GL_ATTRIBUTE_COLD declares that the function is rarely executed. */ /* Applies to: functions. */ /* Avoid __attribute__ ((cold)) on MinGW; see thread starting at <https://lists.gnu.org/r/emacs-devel/2019-04/msg01152.html>. Also, Oracle Studio 12.6 requires 'cold' not '__cold__'. */ #ifndef _GL_ATTRIBUTE_COLD # if _GL_HAS_ATTRIBUTE (cold) && !defined __MINGW32__ # ifndef __SUNPRO_C # define _GL_ATTRIBUTE_COLD __attribute__ ((__cold__)) # else # define _GL_ATTRIBUTE_COLD __attribute__ ((cold)) # endif # else # define _GL_ATTRIBUTE_COLD # endif #endif /* _GL_ATTRIBUTE_CONST declares that it is OK for a compiler to omit duplicate calls to the function with the same arguments. This attribute is safe for a function that neither depends on nor affects observable state, and always returns exactly once - e.g., does not loop forever, and does not call longjmp. (This attribute is stricter than _GL_ATTRIBUTE_PURE.) */ /* Applies to: functions. */ #ifndef _GL_ATTRIBUTE_CONST # if _GL_HAS_ATTRIBUTE (const) # define _GL_ATTRIBUTE_CONST __attribute__ ((__const__)) # else # define _GL_ATTRIBUTE_CONST # endif #endif /* _GL_ATTRIBUTE_DEALLOC (F, I) declares that the function returns pointers that can be freed by passing them as the Ith argument to the function F. _GL_ATTRIBUTE_DEALLOC_FREE declares that the function returns pointers that can be freed via 'free'; it can be used only after declaring 'free'. */ /* Applies to: functions. Cannot be used on inline functions. */ #ifndef _GL_ATTRIBUTE_DEALLOC # if _GL_GNUC_PREREQ (11, 0) # define _GL_ATTRIBUTE_DEALLOC(f, i) __attribute__ ((__malloc__ (f, i))) # else # define _GL_ATTRIBUTE_DEALLOC(f, i) # endif #endif /* If gnulib's <string.h> or <wchar.h> has already defined this macro, continue to use this earlier definition, since <stdlib.h> may not have been included yet. */ #ifndef _GL_ATTRIBUTE_DEALLOC_FREE # if defined __cplusplus && defined __GNUC__ && !defined __clang__ /* Work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108231> */ # define _GL_ATTRIBUTE_DEALLOC_FREE \ _GL_ATTRIBUTE_DEALLOC ((void (*) (void *)) free, 1) # else # define _GL_ATTRIBUTE_DEALLOC_FREE \ _GL_ATTRIBUTE_DEALLOC (free, 1) # endif #endif /* _GL_ATTRIBUTE_DEPRECATED: Declares that an entity is deprecated. The compiler may warn if the entity is used. */ /* Applies to: - function, variable, - struct, union, struct/union member, - enumeration, enumeration item, - typedef, in C++ also: namespace, class, template specialization. */ #ifndef _GL_ATTRIBUTE_DEPRECATED # ifndef _GL_BRACKET_BEFORE_ATTRIBUTE # ifdef __has_c_attribute # if __has_c_attribute (__deprecated__) # define _GL_ATTRIBUTE_DEPRECATED [[__deprecated__]] # endif # endif # endif # if !defined _GL_ATTRIBUTE_DEPRECATED && _GL_HAS_ATTRIBUTE (deprecated) # define _GL_ATTRIBUTE_DEPRECATED __attribute__ ((__deprecated__)) # endif # ifndef _GL_ATTRIBUTE_DEPRECATED # define _GL_ATTRIBUTE_DEPRECATED # endif #endif /* _GL_ATTRIBUTE_ERROR(msg) requests an error if a function is called and the function call is not optimized away. _GL_ATTRIBUTE_WARNING(msg) requests a warning if a function is called and the function call is not optimized away. */ /* Applies to: functions. */ #if !(defined _GL_ATTRIBUTE_ERROR && defined _GL_ATTRIBUTE_WARNING) # if _GL_HAS_ATTRIBUTE (error) # define _GL_ATTRIBUTE_ERROR(msg) __attribute__ ((__error__ (msg))) # define _GL_ATTRIBUTE_WARNING(msg) __attribute__ ((__warning__ (msg))) # elif _GL_HAS_ATTRIBUTE (diagnose_if) # define _GL_ATTRIBUTE_ERROR(msg) __attribute__ ((__diagnose_if__ (1, msg, "error"))) # define _GL_ATTRIBUTE_WARNING(msg) __attribute__ ((__diagnose_if__ (1, msg, "warning"))) # else # define _GL_ATTRIBUTE_ERROR(msg) # define _GL_ATTRIBUTE_WARNING(msg) # endif #endif /* _GL_ATTRIBUTE_EXTERNALLY_VISIBLE declares that the entity should remain visible to debuggers etc., even with '-fwhole-program'. */ /* Applies to: functions, variables. */ #ifndef _GL_ATTRIBUTE_EXTERNALLY_VISIBLE # if _GL_HAS_ATTRIBUTE (externally_visible) # define _GL_ATTRIBUTE_EXTERNALLY_VISIBLE __attribute__ ((externally_visible)) # else # define _GL_ATTRIBUTE_EXTERNALLY_VISIBLE # endif #endif /* _GL_ATTRIBUTE_FALLTHROUGH declares that it is not a programming mistake if the control flow falls through to the immediately following 'case' or 'default' label. The compiler should not warn in this case. */ /* Applies to: Empty statement (;), inside a 'switch' statement. */ /* Always expands to something. */ #ifndef _GL_ATTRIBUTE_FALLTHROUGH # ifdef __has_c_attribute # if __has_c_attribute (__fallthrough__) # define _GL_ATTRIBUTE_FALLTHROUGH [[__fallthrough__]] # endif # endif # if !defined _GL_ATTRIBUTE_FALLTHROUGH && _GL_HAS_ATTRIBUTE (fallthrough) # define _GL_ATTRIBUTE_FALLTHROUGH __attribute__ ((__fallthrough__)) # endif # ifndef _GL_ATTRIBUTE_FALLTHROUGH # define _GL_ATTRIBUTE_FALLTHROUGH ((void) 0) # endif #endif /* _GL_ATTRIBUTE_FORMAT ((ARCHETYPE, STRING-INDEX, FIRST-TO-CHECK)) declares that the STRING-INDEXth function argument is a format string of style ARCHETYPE, which is one of: printf, gnu_printf scanf, gnu_scanf, strftime, gnu_strftime, strfmon, or the same thing prefixed and suffixed with '__'. If FIRST-TO-CHECK is not 0, arguments starting at FIRST-TO_CHECK are suitable for the format string. */ /* Applies to: functions. */ #ifndef _GL_ATTRIBUTE_FORMAT # if _GL_HAS_ATTRIBUTE (format) # define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec)) # else # define _GL_ATTRIBUTE_FORMAT(spec) # endif #endif /* _GL_ATTRIBUTE_LEAF declares that if the function is called from some other compilation unit, it executes code from that unit only by return or by exception handling. This declaration lets the compiler optimize that unit more aggressively. */ /* Applies to: functions. */ #ifndef _GL_ATTRIBUTE_LEAF # if _GL_HAS_ATTRIBUTE (leaf) # define _GL_ATTRIBUTE_LEAF __attribute__ ((__leaf__)) # else # define _GL_ATTRIBUTE_LEAF # endif #endif /* _GL_ATTRIBUTE_MALLOC declares that the function returns a pointer to freshly allocated memory. */ /* Applies to: functions. */ #ifndef _GL_ATTRIBUTE_MALLOC # if _GL_HAS_ATTRIBUTE (malloc) # define _GL_ATTRIBUTE_MALLOC __attribute__ ((__malloc__)) # else # define _GL_ATTRIBUTE_MALLOC # endif #endif /* _GL_ATTRIBUTE_MAY_ALIAS declares that pointers to the type may point to the same storage as pointers to other types. Thus this declaration disables strict aliasing optimization. */ /* Applies to: types. */ /* Oracle Studio 12.6 mishandles may_alias despite __has_attribute OK. */ #ifndef _GL_ATTRIBUTE_MAY_ALIAS # if _GL_HAS_ATTRIBUTE (may_alias) && !defined __SUNPRO_C # define _GL_ATTRIBUTE_MAY_ALIAS __attribute__ ((__may_alias__)) # else # define _GL_ATTRIBUTE_MAY_ALIAS # endif #endif /* _GL_ATTRIBUTE_MAYBE_UNUSED declares that it is not a programming mistake if the entity is not used. The compiler should not warn if the entity is not used. */ /* Applies to: - function, variable, - struct, union, struct/union member, - enumeration, enumeration item, - typedef, in C++ also: class. */ /* In C++ and C23, this is spelled [[__maybe_unused__]]. GCC's syntax is __attribute__ ((__unused__)). clang supports both syntaxes. Except that with clang ≥ 6, < 10, in C++ mode, __has_c_attribute (__maybe_unused__) yields true but the use of [[__maybe_unused__]] nevertheless produces a warning. */ #ifndef _GL_ATTRIBUTE_MAYBE_UNUSED # ifndef _GL_BRACKET_BEFORE_ATTRIBUTE # if defined __clang__ && defined __cplusplus # if !defined __apple_build_version__ && __clang_major__ >= 10 # define _GL_ATTRIBUTE_MAYBE_UNUSED [[__maybe_unused__]] # endif # elif defined __has_c_attribute # if __has_c_attribute (__maybe_unused__) # define _GL_ATTRIBUTE_MAYBE_UNUSED [[__maybe_unused__]] # endif # endif # endif # ifndef _GL_ATTRIBUTE_MAYBE_UNUSED # define _GL_ATTRIBUTE_MAYBE_UNUSED _GL_ATTRIBUTE_UNUSED # endif #endif /* Alternative spelling of this macro, for convenience and for compatibility with glibc/include/libc-symbols.h. */ #define _GL_UNUSED _GL_ATTRIBUTE_MAYBE_UNUSED /* Earlier spellings of this macro. */ #define _UNUSED_PARAMETER_ _GL_ATTRIBUTE_MAYBE_UNUSED /* _GL_ATTRIBUTE_NODISCARD declares that the caller of the function should not discard the return value. The compiler may warn if the caller does not use the return value, unless the caller uses something like ignore_value. */ /* Applies to: function, enumeration, class. */ #ifndef _GL_ATTRIBUTE_NODISCARD # ifndef _GL_BRACKET_BEFORE_ATTRIBUTE # if defined __clang__ && defined __cplusplus /* With clang up to 15.0.6 (at least), in C++ mode, [[__nodiscard__]] produces a warning. The 1000 below means a yet unknown threshold. When clang++ version X starts supporting [[__nodiscard__]] without warning about it, you can replace the 1000 with X. */ # if __clang_major__ >= 1000 # define _GL_ATTRIBUTE_NODISCARD [[__nodiscard__]] # endif # elif defined __has_c_attribute # if __has_c_attribute (__nodiscard__) # define _GL_ATTRIBUTE_NODISCARD [[__nodiscard__]] # endif # endif # endif # if !defined _GL_ATTRIBUTE_NODISCARD && _GL_HAS_ATTRIBUTE (warn_unused_result) # define _GL_ATTRIBUTE_NODISCARD __attribute__ ((__warn_unused_result__)) # endif # ifndef _GL_ATTRIBUTE_NODISCARD # define _GL_ATTRIBUTE_NODISCARD # endif #endif /* _GL_ATTRIBUTE_NOINLINE tells that the compiler should not inline the function. */ /* Applies to: functions. */ #ifndef _GL_ATTRIBUTE_NOINLINE # if _GL_HAS_ATTRIBUTE (noinline) # define _GL_ATTRIBUTE_NOINLINE __attribute__ ((__noinline__)) # else # define _GL_ATTRIBUTE_NOINLINE # endif #endif /* _GL_ATTRIBUTE_NONNULL ((N1, N2,...)) declares that the arguments N1, N2,... must not be NULL. _GL_ATTRIBUTE_NONNULL () declares that all pointer arguments must not be null. */ /* Applies to: functions. */ #ifndef _GL_ATTRIBUTE_NONNULL # if _GL_HAS_ATTRIBUTE (nonnull) # define _GL_ATTRIBUTE_NONNULL(args) __attribute__ ((__nonnull__ args)) # else # define _GL_ATTRIBUTE_NONNULL(args) # endif #endif /* _GL_ATTRIBUTE_NONSTRING declares that the contents of a character array is not meant to be NUL-terminated. */ /* Applies to: struct/union members and variables that are arrays of element type '[[un]signed] char'. */ #ifndef _GL_ATTRIBUTE_NONSTRING # if _GL_HAS_ATTRIBUTE (nonstring) # define _GL_ATTRIBUTE_NONSTRING __attribute__ ((__nonstring__)) # else # define _GL_ATTRIBUTE_NONSTRING # endif #endif /* There is no _GL_ATTRIBUTE_NORETURN; use _Noreturn instead. */ /* _GL_ATTRIBUTE_NOTHROW declares that the function does not throw exceptions. */ /* Applies to: functions. */ #ifndef _GL_ATTRIBUTE_NOTHROW # if _GL_HAS_ATTRIBUTE (nothrow) && !defined __cplusplus # define _GL_ATTRIBUTE_NOTHROW __attribute__ ((__nothrow__)) # else # define _GL_ATTRIBUTE_NOTHROW # endif #endif /* _GL_ATTRIBUTE_PACKED declares: For struct members: The member has the smallest possible alignment. For struct, union, class: All members have the smallest possible alignment, minimizing the memory required. */ /* Applies to: struct members, struct, union, in C++ also: class. */ #ifndef _GL_ATTRIBUTE_PACKED # if _GL_HAS_ATTRIBUTE (packed) # define _GL_ATTRIBUTE_PACKED __attribute__ ((__packed__)) # else # define _GL_ATTRIBUTE_PACKED # endif #endif /* _GL_ATTRIBUTE_PURE declares that It is OK for a compiler to omit duplicate calls to the function with the same arguments if observable state is not changed between calls. This attribute is safe for a function that does not affect observable state, and always returns exactly once. (This attribute is looser than _GL_ATTRIBUTE_CONST.) */ /* Applies to: functions. */ #ifndef _GL_ATTRIBUTE_PURE # if _GL_HAS_ATTRIBUTE (pure) # define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) # else # define _GL_ATTRIBUTE_PURE # endif #endif /* _GL_ATTRIBUTE_RETURNS_NONNULL declares that the function's return value is a non-NULL pointer. */ /* Applies to: functions. */ #ifndef _GL_ATTRIBUTE_RETURNS_NONNULL # if _GL_HAS_ATTRIBUTE (returns_nonnull) # define _GL_ATTRIBUTE_RETURNS_NONNULL __attribute__ ((__returns_nonnull__)) # else # define _GL_ATTRIBUTE_RETURNS_NONNULL # endif #endif /* _GL_ATTRIBUTE_SENTINEL(pos) declares that the variadic function expects a trailing NULL argument. _GL_ATTRIBUTE_SENTINEL () - The last argument is NULL (requires C99). _GL_ATTRIBUTE_SENTINEL ((N)) - The (N+1)st argument from the end is NULL. */ /* Applies to: functions. */ #ifndef _GL_ATTRIBUTE_SENTINEL # if _GL_HAS_ATTRIBUTE (sentinel) # define _GL_ATTRIBUTE_SENTINEL(pos) __attribute__ ((__sentinel__ pos)) # else # define _GL_ATTRIBUTE_SENTINEL(pos) # endif #endif /* A helper macro. Don't use it directly. */ #ifndef _GL_ATTRIBUTE_UNUSED # if _GL_HAS_ATTRIBUTE (unused) # define _GL_ATTRIBUTE_UNUSED __attribute__ ((__unused__)) # else # define _GL_ATTRIBUTE_UNUSED # endif #endif ]dnl There is no _GL_ATTRIBUTE_VISIBILITY; see m4/visibility.m4 instead. [ /* _GL_UNUSED_LABEL; declares that it is not a programming mistake if the immediately preceding label is not used. The compiler should not warn if the label is not used. */ /* Applies to: label (both in C and C++). */ /* Note that g++ < 4.5 does not support the '__attribute__ ((__unused__)) ;' syntax. But clang does. */ #ifndef _GL_UNUSED_LABEL # if !(defined __cplusplus && !_GL_GNUC_PREREQ (4, 5)) || defined __clang__ # define _GL_UNUSED_LABEL _GL_ATTRIBUTE_UNUSED # else # define _GL_UNUSED_LABEL # endif #endif ]) AH_VERBATIM([c_linkage], [/* In C++, there is the concept of "language linkage", that encompasses name mangling and function calling conventions. The following macros start and end a block of "C" linkage. */ #ifdef __cplusplus # define _GL_BEGIN_C_LINKAGE extern "C" { # define _GL_END_C_LINKAGE } #else # define _GL_BEGIN_C_LINKAGE # define _GL_END_C_LINKAGE #endif ]) AH_VERBATIM([async_safe], [/* The _GL_ASYNC_SAFE marker should be attached to functions that are signal handlers (for signals other than SIGABRT, SIGPIPE) or can be invoked from such signal handlers. Such functions have some restrictions: * All functions that it calls should be marked _GL_ASYNC_SAFE as well, or should be listed as async-signal-safe in POSIX <https://pubs.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html#tag_15_04> section 2.4.3. Note that malloc(), sprintf(), and fwrite(), in particular, are NOT async-signal-safe. * All memory locations (variables and struct fields) that these functions access must be marked 'volatile'. This holds for both read and write accesses. Otherwise the compiler might optimize away stores to and reads from such locations that occur in the program, depending on its data flow analysis. For example, when the program contains a loop that is intended to inspect a variable set from within a signal handler while (!signal_occurred) ; the compiler is allowed to transform this into an endless loop if the variable 'signal_occurred' is not declared 'volatile'. Additionally, recall that: * A signal handler should not modify errno (except if it is a handler for a fatal signal and ends by raising the same signal again, thus provoking the termination of the process). If it invokes a function that may clobber errno, it needs to save and restore the value of errno. */ #define _GL_ASYNC_SAFE ]) AH_VERBATIM([micro_optimizations], [/* _GL_CMP (n1, n2) performs a three-valued comparison on n1 vs. n2, where n1 and n2 are expressions without side effects, that evaluate to real numbers (excluding NaN). It returns 1 if n1 > n2 0 if n1 == n2 -1 if n1 < n2 The naïve code (n1 > n2 ? 1 : n1 < n2 ? -1 : 0) produces a conditional jump with nearly all GCC versions up to GCC 10. This variant (n1 < n2 ? -1 : n1 > n2) produces a conditional with many GCC versions up to GCC 9. The better code (n1 > n2) - (n1 < n2) from Hacker's Delight § 2-9 avoids conditional jumps in all GCC versions >= 3.4. */ #define _GL_CMP(n1, n2) (((n1) > (n2)) - ((n1) < (n2))) ]) dnl Hint which direction to take regarding cross-compilation guesses: dnl When a user installs a program on a platform they are not intimately dnl familiar with, --enable-cross-guesses=conservative is the appropriate dnl choice. It implements the "If we don't know, assume the worst" principle. dnl However, when an operating system developer (on a platform which is not dnl yet known to gnulib) builds packages for their platform, they want to dnl expose, not hide, possible platform bugs; in this case, dnl --enable-cross-guesses=risky is the appropriate choice. dnl Sets the variables dnl gl_cross_guess_normal (to be used when 'yes' is good and 'no' is bad), dnl gl_cross_guess_inverted (to be used when 'no' is good and 'yes' is bad). AC_ARG_ENABLE([cross-guesses], [AS_HELP_STRING([[--enable-cross-guesses={conservative|risky}]], [specify policy for cross-compilation guesses])], [if test "x$enableval" != xconservative && test "x$enableval" != xrisky; then AC_MSG_WARN([invalid argument supplied to --enable-cross-guesses]) enableval=conservative fi gl_cross_guesses="$enableval"], [gl_cross_guesses=conservative]) if test $gl_cross_guesses = risky; then gl_cross_guess_normal="guessing yes" gl_cross_guess_inverted="guessing no" else gl_cross_guess_normal="guessing no" gl_cross_guess_inverted="guessing yes" fi dnl Preparation for running test programs: dnl Tell glibc to write diagnostics from -D_FORTIFY_SOURCE=2 to stderr, not dnl to /dev/tty, so they can be redirected to log files. Such diagnostics dnl arise e.g., in the macros gl_PRINTF_DIRECTIVE_N, gl_SNPRINTF_DIRECTIVE_N. LIBC_FATAL_STDERR_=1 export LIBC_FATAL_STDERR_ ]) # gl_MODULE_INDICATOR_INIT_VARIABLE([variablename]) # gl_MODULE_INDICATOR_INIT_VARIABLE([variablename], [initialvalue]) # initializes the shell variable that indicates the presence of the given module # as a C preprocessor expression. AC_DEFUN([gl_MODULE_INDICATOR_INIT_VARIABLE], [ GL_MODULE_INDICATOR_PREFIX[]_[$1]=m4_if([$2], , [0], [$2]) AC_SUBST(GL_MODULE_INDICATOR_PREFIX[]_[$1]) ]) # gl_MODULE_INDICATOR_CONDITION # expands to a C preprocessor expression that evaluates to 1 or 0, depending # whether a gnulib module that has been requested shall be considered present # or not. m4_define([gl_MODULE_INDICATOR_CONDITION], [1]) # gl_MODULE_INDICATOR_SET_VARIABLE([modulename]) # sets the shell variable that indicates the presence of the given module to # a C preprocessor expression that will evaluate to 1. AC_DEFUN([gl_MODULE_INDICATOR_SET_VARIABLE], [ gl_MODULE_INDICATOR_SET_VARIABLE_AUX( [GL_MODULE_INDICATOR_PREFIX[]_GNULIB_[]m4_translit([[$1]], [abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])], [gl_MODULE_INDICATOR_CONDITION]) ]) # gl_MODULE_INDICATOR_SET_VARIABLE_AUX([variable]) # modifies the shell variable to include the gl_MODULE_INDICATOR_CONDITION. # The shell variable's value is a C preprocessor expression that evaluates # to 0 or 1. AC_DEFUN([gl_MODULE_INDICATOR_SET_VARIABLE_AUX], [ m4_if(m4_defn([gl_MODULE_INDICATOR_CONDITION]), [1], [ dnl Simplify the expression VALUE || 1 to 1. $1=1 ], [gl_MODULE_INDICATOR_SET_VARIABLE_AUX_OR([$1], [gl_MODULE_INDICATOR_CONDITION])]) ]) # gl_MODULE_INDICATOR_SET_VARIABLE_AUX_OR([variable], [condition]) # modifies the shell variable to include the given condition. The shell # variable's value is a C preprocessor expression that evaluates to 0 or 1. AC_DEFUN([gl_MODULE_INDICATOR_SET_VARIABLE_AUX_OR], [ dnl Simplify the expression 1 || CONDITION to 1. if test "$[]$1" != 1; then dnl Simplify the expression 0 || CONDITION to CONDITION. if test "$[]$1" = 0; then $1=$2 else $1="($[]$1 || $2)" fi fi ]) # gl_MODULE_INDICATOR([modulename]) # defines a C macro indicating the presence of the given module # in a location where it can be used. # | Value | Value | # | in lib/ | in tests/ | # --------------------------------------------+---------+-----------+ # Module present among main modules: | 1 | 1 | # --------------------------------------------+---------+-----------+ # Module present among tests-related modules: | 0 | 1 | # --------------------------------------------+---------+-----------+ # Module not present at all: | 0 | 0 | # --------------------------------------------+---------+-----------+ AC_DEFUN([gl_MODULE_INDICATOR], [ AC_DEFINE_UNQUOTED([GNULIB_]m4_translit([[$1]], [abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___]), [gl_MODULE_INDICATOR_CONDITION], [Define to a C preprocessor expression that evaluates to 1 or 0, depending whether the gnulib module $1 shall be considered present.]) ]) # gl_MODULE_INDICATOR_FOR_TESTS([modulename]) # defines a C macro indicating the presence of the given module # in lib or tests. This is useful to determine whether the module # should be tested. # | Value | Value | # | in lib/ | in tests/ | # --------------------------------------------+---------+-----------+ # Module present among main modules: | 1 | 1 | # --------------------------------------------+---------+-----------+ # Module present among tests-related modules: | 1 | 1 | # --------------------------------------------+---------+-----------+ # Module not present at all: | 0 | 0 | # --------------------------------------------+---------+-----------+ AC_DEFUN([gl_MODULE_INDICATOR_FOR_TESTS], [ AC_DEFINE([GNULIB_TEST_]m4_translit([[$1]], [abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___]), [1], [Define to 1 when the gnulib module $1 should be tested.]) ]) # gl_ASSERT_NO_GNULIB_POSIXCHECK # asserts that there will never be a need to #define GNULIB_POSIXCHECK. # and thereby enables an optimization of configure and config.h. # Used by Emacs. AC_DEFUN([gl_ASSERT_NO_GNULIB_POSIXCHECK], [ dnl Override gl_WARN_ON_USE_PREPARE. dnl But hide this definition from 'aclocal'. AC_DEFUN([gl_W][ARN_ON_USE_PREPARE], []) ]) # gl_ASSERT_NO_GNULIB_TESTS # asserts that there will be no gnulib tests in the scope of the configure.ac # and thereby enables an optimization of config.h. # Used by Emacs. AC_DEFUN([gl_ASSERT_NO_GNULIB_TESTS], [ dnl Override gl_MODULE_INDICATOR_FOR_TESTS. AC_DEFUN([gl_MODULE_INDICATOR_FOR_TESTS], []) ]) # Test whether <features.h> exists. # Set HAVE_FEATURES_H. AC_DEFUN([gl_FEATURES_H], [ AC_CHECK_HEADERS_ONCE([features.h]) if test $ac_cv_header_features_h = yes; then HAVE_FEATURES_H=1 else HAVE_FEATURES_H=0 fi AC_SUBST([HAVE_FEATURES_H]) ]) # gl_PROG_CC_C99 # Modifies the value of the shell variable CC in an attempt to make $CC # understand ISO C99 source code. AC_DEFUN([gl_PROG_CC_C99], [ dnl Just use AC_PROG_CC_C99. dnl When AC_PROG_CC_C99 and AC_PROG_CC_STDC are used together, the substituted dnl value of CC will contain the C99 enabling options twice. But this is only dnl a cosmetic problem. dnl With Autoconf >= 2.70, use AC_PROG_CC since it implies AC_PROG_CC_C99; dnl this avoids a "warning: The macro `AC_PROG_CC_C99' is obsolete." m4_version_prereq([2.70], [AC_REQUIRE([AC_PROG_CC])], [AC_REQUIRE([AC_PROG_CC_C99])]) ]) # gl_PROG_AR_RANLIB # Determines the values for AR, ARFLAGS, RANLIB that fit with the compiler. # The user can set the variables AR, ARFLAGS, RANLIB if he wants to override # the values. AC_DEFUN([gl_PROG_AR_RANLIB], [ dnl Minix 3 comes with two toolchains: The Amsterdam Compiler Kit compiler dnl as "cc", and GCC as "gcc". They have different object file formats and dnl library formats. In particular, the GNU binutils programs ar and ranlib dnl produce libraries that work only with gcc, not with cc. AC_REQUIRE([AC_PROG_CC]) dnl The '][' hides this use from 'aclocal'. AC_BEFORE([$0], [A][M_PROG_AR]) AC_CACHE_CHECK([for Minix Amsterdam compiler], [gl_cv_c_amsterdam_compiler], [ AC_EGREP_CPP([Amsterdam], [ #ifdef __ACK__ Amsterdam #endif ], [gl_cv_c_amsterdam_compiler=yes], [gl_cv_c_amsterdam_compiler=no]) ]) dnl Don't compete with AM_PROG_AR's decision about AR/ARFLAGS if we are not dnl building with __ACK__. if test $gl_cv_c_amsterdam_compiler = yes; then if test -z "$AR"; then AR='cc -c.a' fi if test -z "$ARFLAGS"; then ARFLAGS='-o' fi else dnl AM_PROG_AR was added in automake v1.11.2. AM_PROG_AR does not AC_SUBST dnl ARFLAGS variable (it is filed into Makefile.in directly by automake dnl script on-demand, if not specified by ./configure of course). dnl Don't AC_REQUIRE the AM_PROG_AR otherwise the code for __ACK__ above dnl will be ignored. Also, pay attention to call AM_PROG_AR in else block dnl because AM_PROG_AR is written so it could re-set AR variable even for dnl __ACK__. It may seem like its easier to avoid calling the macro here, dnl but we need to AC_SUBST both AR/ARFLAGS (thus those must have some good dnl default value and automake should usually know them). dnl dnl The '][' hides this use from 'aclocal'. m4_ifdef([A][M_PROG_AR], [A][M_PROG_AR], [:]) fi dnl In case the code above has not helped with setting AR/ARFLAGS, use dnl Automake-documented default values for AR and ARFLAGS, but prefer dnl ${host}-ar over ar (useful for cross-compiling). AC_CHECK_TOOL([AR], [ar], [ar]) if test -z "$ARFLAGS"; then ARFLAGS='cr' fi AC_SUBST([AR]) AC_SUBST([ARFLAGS]) if test -z "$RANLIB"; then if test $gl_cv_c_amsterdam_compiler = yes; then RANLIB=':' else dnl Use the ranlib program if it is available. AC_PROG_RANLIB fi fi AC_SUBST([RANLIB]) ]) # AC_C_RESTRICT # This definition is copied from post-2.70 Autoconf and overrides the # AC_C_RESTRICT macro from autoconf 2.60..2.70. m4_version_prereq([2.70.1], [], [ AC_DEFUN([AC_C_RESTRICT], [AC_CACHE_CHECK([for C/C++ restrict keyword], [ac_cv_c_restrict], [ac_cv_c_restrict=no # Put '__restrict__' first, to avoid problems with glibc and non-GCC; see: # https://lists.gnu.org/archive/html/bug-autoconf/2016-02/msg00006.html # Put 'restrict' last, because C++ lacks it. for ac_kw in __restrict__ __restrict _Restrict restrict; do AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[typedef int *int_ptr; int foo (int_ptr $ac_kw ip) { return ip[0]; } int bar (int [$ac_kw]); /* Catch GCC bug 14050. */ int bar (int ip[$ac_kw]) { return ip[0]; } ]], [[int s[1]; int *$ac_kw t = s; t[0] = 0; return foo (t) + bar (t); ]])], [ac_cv_c_restrict=$ac_kw]) test "$ac_cv_c_restrict" != no && break done ]) AH_VERBATIM([restrict], [/* Define to the equivalent of the C99 'restrict' keyword, or to nothing if this is not supported. Do not define if restrict is supported only directly. */ #undef restrict /* Work around a bug in older versions of Sun C++, which did not #define __restrict__ or support _Restrict or __restrict__ even though the corresponding Sun C compiler ended up with "#define restrict _Restrict" or "#define restrict __restrict__" in the previous line. This workaround can be removed once we assume Oracle Developer Studio 12.5 (2016) or later. */ #if defined __SUNPRO_CC && !defined __RESTRICT && !defined __restrict__ # define _Restrict # define __restrict__ #endif]) case $ac_cv_c_restrict in restrict) ;; no) AC_DEFINE([restrict], []) ;; *) AC_DEFINE_UNQUOTED([restrict], [$ac_cv_c_restrict]) ;; esac ])# AC_C_RESTRICT ]) # gl_BIGENDIAN # is like AC_C_BIGENDIAN, except that it can be AC_REQUIREd. # Note that AC_REQUIRE([AC_C_BIGENDIAN]) does not work reliably because some # macros invoke AC_C_BIGENDIAN with arguments. AC_DEFUN([gl_BIGENDIAN], [ AC_C_BIGENDIAN ]) # A temporary file descriptor. # Must be less than 10, because dash 0.5.8 does not support redirections # with multi-digit file descriptors. m4_define([GL_TMP_FD], 9) # gl_SILENT(command) # executes command, but without the normal configure output. # This is useful when you want to invoke AC_CACHE_CHECK (or AC_CHECK_FUNC etc.) # inside another AC_CACHE_CHECK. AC_DEFUN([gl_SILENT], [ exec GL_TMP_FD>&AS_MESSAGE_FD AS_MESSAGE_FD>/dev/null $1 exec AS_MESSAGE_FD>&GL_TMP_FD GL_TMP_FD>&- ]) # gl_CACHE_VAL_SILENT(cache-id, command-to-set-it) # is like AC_CACHE_VAL(cache-id, command-to-set-it), except that it does not # output a spurious "(cached)" mark in the midst of other configure output. # This macro should be used instead of AC_CACHE_VAL when it is not surrounded # by an AC_MSG_CHECKING/AC_MSG_RESULT pair. AC_DEFUN([gl_CACHE_VAL_SILENT], [ gl_SILENT([ AC_CACHE_VAL([$1], [$2]) ]) ]) # gl_CONDITIONAL(conditional, condition) # is like AM_CONDITIONAL(conditional, condition), except that it does not # produce an error # configure: error: conditional "..." was never defined. # Usually this means the macro was only invoked conditionally. # when only invoked conditionally. Instead, in that case, both the _TRUE # and the _FALSE case are disabled. AC_DEFUN([gl_CONDITIONAL], [ pushdef([AC_CONFIG_COMMANDS_PRE], [:])dnl AM_CONDITIONAL([$1], [$2]) popdef([AC_CONFIG_COMMANDS_PRE])dnl if test -z "${[$1]_TRUE}" && test -z "${[$1]_FALSE}"; then [$1]_TRUE='#' [$1]_FALSE='#' fi ]) # gl_CC_ALLOW_WARNINGS # sets and substitutes a variable GL_CFLAG_ALLOW_WARNINGS, to a $(CC) option # that reverts a preceding '-Werror' option, if available. # This is expected to be '-Wno-error' on gcc, clang (except clang/MSVC), xlclang # and empty otherwise. AC_DEFUN([gl_CC_ALLOW_WARNINGS], [ AC_REQUIRE([AC_PROG_CC]) AC_CACHE_CHECK([for C compiler option to allow warnings], [gl_cv_cc_wallow], [rm -f conftest* echo 'int dummy;' > conftest.c AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS -c conftest.c 2>conftest1.err]) >/dev/null AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS -Wno-error -c conftest.c 2>conftest2.err]) >/dev/null dnl Test the number of error output lines, because AIX xlc accepts the dnl option '-Wno-error', just to produce a warning dnl "Option -Wno-error was incorrectly specified. The option will be ignored." dnl afterwards. if test $? = 0 && test `wc -l < conftest1.err` = `wc -l < conftest2.err`; then gl_cv_cc_wallow='-Wno-error' else gl_cv_cc_wallow=none fi rm -f conftest* ]) case "$gl_cv_cc_wallow" in none) GL_CFLAG_ALLOW_WARNINGS='' ;; *) GL_CFLAG_ALLOW_WARNINGS="$gl_cv_cc_wallow" ;; esac AC_SUBST([GL_CFLAG_ALLOW_WARNINGS]) ]) # gl_CXX_ALLOW_WARNINGS # sets and substitutes a variable GL_CXXFLAG_ALLOW_WARNINGS, to a $(CC) option # that reverts a preceding '-Werror' option, if available. AC_DEFUN([gl_CXX_ALLOW_WARNINGS], [ dnl Requires AC_PROG_CXX or gl_PROG_ANSI_CXX. if test -n "$CXX" && test "$CXX" != no; then AC_CACHE_CHECK([for C++ compiler option to allow warnings], [gl_cv_cxx_wallow], [rm -f conftest* echo 'int dummy;' > conftest.cc AC_TRY_COMMAND([${CXX-c++} $CXXFLAGS $CPPFLAGS -c conftest.cc 2>conftest1.err]) >/dev/null AC_TRY_COMMAND([${CXX-c++} $CXXFLAGS $CPPFLAGS -Wno-error -c conftest.cc 2>conftest2.err]) >/dev/null dnl Test the number of error output lines, because AIX xlC accepts the dnl option '-Wno-error', just to produce a warning dnl "Option -Wno-error was incorrectly specified. The option will be ignored." dnl afterwards. if test $? = 0 && test `wc -l < conftest1.err` = `wc -l < conftest2.err`; then gl_cv_cxx_wallow='-Wno-error' else gl_cv_cxx_wallow=none fi rm -f conftest* ]) case "$gl_cv_cxx_wallow" in none) GL_CXXFLAG_ALLOW_WARNINGS='' ;; *) GL_CXXFLAG_ALLOW_WARNINGS="$gl_cv_cxx_wallow" ;; esac else GL_CXXFLAG_ALLOW_WARNINGS='' fi AC_SUBST([GL_CXXFLAG_ALLOW_WARNINGS]) ]) # gl_CC_GNULIB_WARNINGS # sets and substitutes a variable GL_CFLAG_GNULIB_WARNINGS, to a $(CC) option # set that enables or disables warnings as suitable for the Gnulib coding style. AC_DEFUN([gl_CC_GNULIB_WARNINGS], [ AC_REQUIRE([gl_CC_ALLOW_WARNINGS]) dnl Assume that the compiler supports -Wno-* options only if it also supports dnl -Wno-error. GL_CFLAG_GNULIB_WARNINGS='' if test -n "$GL_CFLAG_ALLOW_WARNINGS"; then dnl Enable these warning options: dnl dnl GCC clang dnl -Wno-cast-qual >= 3 >= 3.9 dnl -Wno-conversion >= 3 >= 3.9 dnl -Wno-float-conversion >= 4.9 >= 3.9 dnl -Wno-float-equal >= 3 >= 3.9 dnl -Wimplicit-fallthrough >= 7 >= 3.9 dnl -Wno-pedantic >= 4.8 >= 3.9 dnl -Wno-sign-compare >= 3 >= 3.9 dnl -Wno-sign-conversion >= 4.3 >= 3.9 dnl -Wno-type-limits >= 4.3 >= 3.9 dnl -Wno-undef >= 3 >= 3.9 dnl -Wno-unsuffixed-float-constants >= 4.5 dnl -Wno-unused-function >= 3 >= 3.9 dnl -Wno-unused-parameter >= 3 >= 3.9 dnl cat > conftest.c <<\EOF #if __GNUC__ >= 3 || (__clang_major__ + (__clang_minor__ >= 9) > 3) -Wno-cast-qual -Wno-conversion -Wno-float-equal -Wno-sign-compare -Wno-undef -Wno-unused-function -Wno-unused-parameter #endif #if __GNUC__ + (__GNUC_MINOR__ >= 9) > 4 || (__clang_major__ + (__clang_minor__ >= 9) > 3) -Wno-float-conversion #endif #if __GNUC__ >= 7 || (__clang_major__ + (__clang_minor__ >= 9) > 3) -Wimplicit-fallthrough #endif #if __GNUC__ + (__GNUC_MINOR__ >= 8) > 4 || (__clang_major__ + (__clang_minor__ >= 9) > 3) -Wno-pedantic #endif #if __GNUC__ + (__GNUC_MINOR__ >= 3) > 4 || (__clang_major__ + (__clang_minor__ >= 9) > 3) -Wno-sign-conversion -Wno-type-limits #endif #if __GNUC__ + (__GNUC_MINOR__ >= 5) > 4 -Wno-unsuffixed-float-constants #endif EOF gl_command="$CC $CFLAGS $CPPFLAGS -E conftest.c > conftest.out" if AC_TRY_EVAL([gl_command]); then gl_options=`grep -v '#' conftest.out` for word in $gl_options; do GL_CFLAG_GNULIB_WARNINGS="$GL_CFLAG_GNULIB_WARNINGS $word" done fi rm -f conftest.c conftest.out fi AC_SUBST([GL_CFLAG_GNULIB_WARNINGS]) ]) dnl gl_CONDITIONAL_HEADER([foo.h]) dnl takes a shell variable GL_GENERATE_FOO_H (with value true or false) as input dnl and produces dnl - an AC_SUBSTed variable FOO_H that is either a file name or empty, based dnl on whether GL_GENERATE_FOO_H is true or false, dnl - an Automake conditional GL_GENERATE_FOO_H that evaluates to the value of dnl the shell variable GL_GENERATE_FOO_H. AC_DEFUN([gl_CONDITIONAL_HEADER], [ m4_pushdef([gl_header_name], AS_TR_SH(m4_toupper($1))) m4_pushdef([gl_generate_var], [GL_GENERATE_]AS_TR_SH(m4_toupper($1))) m4_pushdef([gl_generate_cond], [GL_GENERATE_]AS_TR_SH(m4_toupper($1))) case "$gl_generate_var" in false) gl_header_name='' ;; true) dnl It is OK to use a .h file in lib/ from within tests/, but not vice dnl versa. if test -z "$gl_header_name"; then gl_header_name="${gl_source_base_prefix}$1" fi ;; *) echo "*** gl_generate_var is not set correctly" 1>&2; exit 1 ;; esac AC_SUBST(gl_header_name) gl_CONDITIONAL(gl_generate_cond, [$gl_generate_var]) m4_popdef([gl_generate_cond]) m4_popdef([gl_generate_var]) m4_popdef([gl_header_name]) ]) dnl Preparations for gl_CHECK_FUNCS_MACOS. AC_DEFUN([gl_PREPARE_CHECK_FUNCS_MACOS], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([gl_COMPILER_CLANG]) AC_CACHE_CHECK([for compiler option needed when checking for future declarations], [gl_cv_compiler_check_future_option], [case "$host_os" in dnl This is only needed on macOS. darwin*) if test $gl_cv_compiler_clang = yes; then dnl Test whether the compiler supports the option dnl '-Werror=unguarded-availability-new'. save_ac_compile="$ac_compile" ac_compile="$ac_compile -Werror=unguarded-availability-new" AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]],[[]])], [gl_cv_compiler_check_future_option='-Werror=unguarded-availability-new'], [gl_cv_compiler_check_future_option=none]) ac_compile="$save_ac_compile" else gl_cv_compiler_check_future_option=none fi ;; *) gl_cv_compiler_check_future_option=none ;; esac ]) ]) dnl Pieces of the expansion of dnl gl_CHECK_FUNCS_ANDROID dnl gl_CHECK_FUNCS_MACOS dnl gl_CHECK_FUNCS_ANDROID_MACOS AC_DEFUN([gl_CHECK_FUNCS_DEFAULT_CASE], [ *) AC_CHECK_FUNC([$1]) [gl_cv_onwards_func_][$1]=$[ac_cv_func_][$1] ;; ]) AC_DEFUN([gl_CHECK_FUNCS_CASE_FOR_ANDROID], [ linux*-android*) AC_CHECK_DECL([$1], , , [$2]) if test $[ac_cv_have_decl_][$1] = yes; then AC_CHECK_FUNC([[$1]]) if test $[ac_cv_func_][$1] = yes; then [gl_cv_onwards_func_][$1]=yes else dnl The function is declared but does not exist. This should not dnl happen normally. But anyway, we know that a future version dnl of Android will have the function. [gl_cv_onwards_func_][$1]='future OS version' fi else [gl_cv_onwards_func_][$1]='future OS version' fi ;; ]) AC_DEFUN([gl_CHECK_FUNCS_CASE_FOR_MACOS], [ darwin*) if test "x$gl_cv_compiler_check_future_option" != "xnone"; then dnl Use a compile test, not a link test. save_ac_compile="$ac_compile" ac_compile="$ac_compile $gl_cv_compiler_check_future_option" save_ac_compile_for_check_decl="$ac_compile_for_check_decl" ac_compile_for_check_decl="$ac_compile_for_check_decl $gl_cv_compiler_check_future_option" unset [ac_cv_have_decl_][$1] AC_CHECK_DECL([$1], , , [$2]) ac_compile="$save_ac_compile" ac_compile_for_check_decl="$save_ac_compile_for_check_decl" [ac_cv_func_][$1]="$[ac_cv_have_decl_][$1]" if test $[ac_cv_func_][$1] = yes; then [gl_cv_onwards_func_][$1]=yes else unset [ac_cv_have_decl_][$1] AC_CHECK_DECL([$1], , , [$2]) if test $[ac_cv_have_decl_][$1] = yes; then [gl_cv_onwards_func_][$1]='future OS version' else [gl_cv_onwards_func_][$1]=no fi fi else AC_CHECK_FUNC([$1]) [gl_cv_onwards_func_][$1]=$[ac_cv_func_][$1] fi ;; ]) AC_DEFUN([gl_CHECK_FUNCS_SET_RESULTS], [ case "$[gl_cv_onwards_func_][$1]" in future*) [ac_cv_func_][$1]=no ;; *) [ac_cv_func_][$1]=$[gl_cv_onwards_func_][$1] ;; esac if test $[ac_cv_func_][$1] = yes; then AC_DEFINE([HAVE_]m4_translit([[$1]], [abcdefghijklmnopqrstuvwxyz], [ABCDEFGHIJKLMNOPQRSTUVWXYZ]), [1], [Define to 1 if you have the `$1' function.]) fi ]) dnl gl_CHECK_FUNCS_ANDROID([func], [[#include <foo.h>]]) dnl is like AC_CHECK_FUNCS([func]), taking into account a portability problem dnl on Android. dnl dnl When code is compiled on Android, it is in the context of a certain dnl "Android API level", which indicates the minimum version of Android on dnl which the app can be installed. In other words, you don't compile for a dnl specific version of Android. You compile for all versions of Android, dnl onwards from the given API level. dnl Thus, the question "does the OS have the function func" has three possible dnl answers: dnl - yes, in all versions starting from the given API level, dnl - no, in no version, dnl - not in the given API level, but in a later version of Android. dnl dnl In detail, this works as follows: dnl If func was added to Android API level, say, 28, then the libc.so has the dnl symbol func always, whereas the header file <foo.h> declares func dnl conditionally: dnl #if __ANDROID_API__ >= 28 dnl ... func (...) __INTRODUCED_IN(28); dnl #endif dnl Thus, when compiling with "clang -target armv7a-unknown-linux-android28", dnl the function func is declared and exists in libc. dnl Whereas when compiling with "clang -target armv7a-unknown-linux-android27", dnl the function func is not declared but exists in libc. dnl dnl This macro sets two variables: dnl - gl_cv_onwards_func_<func> to yes / no / "future OS version" dnl - ac_cv_func_<func> to yes / no / no dnl The first variable allows to distinguish all three cases. dnl The second variable is set, so that an invocation dnl gl_CHECK_FUNCS_ANDROID([func], [[#include <foo.h>]]) dnl can be used as a drop-in replacement for dnl AC_CHECK_FUNCS([func]). AC_DEFUN([gl_CHECK_FUNCS_ANDROID], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_CACHE_CHECK([for [$1]], [[gl_cv_onwards_func_][$1]], [gl_SILENT([ case "$host_os" in gl_CHECK_FUNCS_CASE_FOR_ANDROID([$1], [$2]) gl_CHECK_FUNCS_DEFAULT_CASE([$1]) esac ]) ]) gl_CHECK_FUNCS_SET_RESULTS([$1]) ]) dnl gl_CHECK_FUNCS_MACOS([func], [[#include <foo.h>]]) dnl is like AC_CHECK_FUNCS([func]), taking into account a portability problem dnl on macOS. dnl dnl When code is compiled on macOS, it is in the context of a certain minimum dnl macOS version, that can be set through the option '-mmacosx-version-min='. dnl In other words, you don't compile for a specific version of macOS. You dnl compile for all versions of macOS, onwards from the given version. dnl Thus, the question "does the OS have the function func" has three possible dnl answers: dnl - yes, in all versions starting from the given version, dnl - no, in no version, dnl - not in the given version, but in a later version of macOS. dnl dnl In detail, this works as follows: dnl If func was added to, say, macOS version 13, then the libc has the dnl symbol func always, whereas the header file <foo.h> declares func dnl conditionally with a special availability attribute: dnl ... func (...) __attribute__((availability(macos,introduced=13.0))); dnl Thus, when compiling with "clang mmacosx-version-min=13", there is no dnl warning about the use of func, and the resulting binary dnl - runs fine on macOS 13, dnl - aborts with a dyld "Symbol not found" message on macOS 12. dnl Whereas, when compiling with "clang mmacosx-version-min=12", there is a dnl warning: 'func' is only available on macOS 13.0 or newer dnl [-Wunguarded-availability-new], dnl and the resulting binary dnl - runs fine on macOS 13, dnl - crashes with a SIGSEGV (signal 11) on macOS 12. dnl dnl This macro sets two variables: dnl - gl_cv_onwards_func_<func> to yes / no / "future OS version" dnl - ac_cv_func_<func> to yes / no / no dnl The first variable allows to distinguish all three cases. dnl The second variable is set, so that an invocation dnl gl_CHECK_FUNCS_MACOS([func], [[#include <foo.h>]]) dnl can be used as a drop-in replacement for dnl AC_CHECK_FUNCS([func]). AC_DEFUN([gl_CHECK_FUNCS_MACOS], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([gl_PREPARE_CHECK_FUNCS_MACOS]) AC_CACHE_CHECK([for [$1]], [[gl_cv_onwards_func_][$1]], [gl_SILENT([ case "$host_os" in gl_CHECK_FUNCS_CASE_FOR_MACOS([$1], [$2]) gl_CHECK_FUNCS_DEFAULT_CASE([$1]) esac ]) ]) gl_CHECK_FUNCS_SET_RESULTS([$1]) ]) dnl gl_CHECK_FUNCS_ANDROID_MACOS([func], [[#include <foo.h>]]) dnl is like AC_CHECK_FUNCS([func]), taking into account a portability problem dnl on Android and on macOS. dnl It is the combination of gl_CHECK_FUNCS_ANDROID and gl_CHECK_FUNCS_MACOS. AC_DEFUN([gl_CHECK_FUNCS_ANDROID_MACOS], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([gl_PREPARE_CHECK_FUNCS_MACOS]) AC_CACHE_CHECK([for [$1]], [[gl_cv_onwards_func_][$1]], [gl_SILENT([ case "$host_os" in gl_CHECK_FUNCS_CASE_FOR_ANDROID([$1], [$2]) gl_CHECK_FUNCS_CASE_FOR_MACOS([$1], [$2]) gl_CHECK_FUNCS_DEFAULT_CASE([$1]) esac ]) ]) gl_CHECK_FUNCS_SET_RESULTS([$1]) ]) dnl Expands to some code for use in .c programs that, on native Windows, defines dnl the Microsoft deprecated alias function names to the underscore-prefixed dnl actual function names. With this macro, these function names are available dnl without linking with '-loldnames' and without generating warnings. dnl Usage: Use it after all system header files are included. dnl #include <...> dnl #include <...> dnl ]GL_MDA_DEFINES[ dnl ... AC_DEFUN([GL_MDA_DEFINES],[ AC_REQUIRE([_GL_MDA_DEFINES]) [$gl_mda_defines] ]) AC_DEFUN([_GL_MDA_DEFINES], [gl_mda_defines=' #if defined _WIN32 && !defined __CYGWIN__ #define access _access #define chdir _chdir #define chmod _chmod #define close _close #define creat _creat #define dup _dup #define dup2 _dup2 #define ecvt _ecvt #define execl _execl #define execle _execle #define execlp _execlp #define execv _execv #define execve _execve #define execvp _execvp #define execvpe _execvpe #define fcloseall _fcloseall #define fcvt _fcvt #define fdopen _fdopen #define fileno _fileno #define gcvt _gcvt #define getcwd _getcwd #define getpid _getpid #define getw _getw #define isatty _isatty #define j0 _j0 #define j1 _j1 #define jn _jn #define lfind _lfind #define lsearch _lsearch #define lseek _lseek #define memccpy _memccpy #define mkdir _mkdir #define mktemp _mktemp #define open _open #define putenv _putenv #define putw _putw #define read _read #define rmdir _rmdir #define strdup _strdup #define swab _swab #define tempnam _tempnam #define tzset _tzset #define umask _umask #define unlink _unlink #define utime _utime #define wcsdup _wcsdup #define write _write #define y0 _y0 #define y1 _y1 #define yn _yn #endif ' ]) �����������������rush-2.4/m4/inttostr.m4�����������������������������������������������������������������������������0000644�0001750�0001750�00000001454�14436424420�015005� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#serial 8 dnl Copyright (C) 2004-2006, 2009-2023 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. AC_DEFUN([gl_INTTOSTR], [ gl_PREREQ_INTTOSTR gl_PREREQ_IMAXTOSTR gl_PREREQ_OFFTOSTR gl_PREREQ_UMAXTOSTR gl_PREREQ_UINTTOSTR ]) # Prerequisites of lib/inttostr.h. AC_DEFUN([gl_PREREQ_INTTOSTR], [ AC_REQUIRE([AC_TYPE_OFF_T]) : ]) # Prerequisites of lib/imaxtostr.c. AC_DEFUN([gl_PREREQ_IMAXTOSTR], [:]) # Prerequisites of lib/offtostr.c. AC_DEFUN([gl_PREREQ_OFFTOSTR], [:]) # Prerequisites of lib/umaxtostr.c. AC_DEFUN([gl_PREREQ_UMAXTOSTR], [:]) # Prerequisites of lib/uinttostr.c. AC_DEFUN([gl_PREREQ_UINTTOSTR], [:]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/po.m4�����������������������������������������������������������������������������������0000644�0001750�0001750�00000045037�14436425501�013543� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# po.m4 serial 22 (gettext-0.19) dnl Copyright (C) 1995-2014 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.60]) 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([AC_PROG_MKDIR_P])dnl AC_REQUIRE([AC_PROG_SED])dnl 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.19]) 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" gt_tab=`printf '\t'` cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ${gt_tab}]*\$/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 assignment 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 assignment 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. tab=`printf '\t'` 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. /^['"${tab}"' ]*VARIABLE['"${tab}"' ]*=/{ # Seen the first line of the variable definition. s/^['"${tab}"' ]*VARIABLE['"${tab}"' ]*=// 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 assignment 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" tab=`printf '\t'` 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 ${tab}@echo "\$(MSGFMT) -c --tcl -d \$(srcdir) -l $lang $srcdirpre$lang.po"; \ ${tab}\$(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 ${tab}@echo "\$(MSGFMT) -c --csharp -d \$(srcdir) -l $lang $srcdirpre$lang.po -r \$(DOMAIN)"; \ ${tab}\$(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" ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/flexmember.m4���������������������������������������������������������������������������0000644�0001750�0001750�00000003254�14436424420�015245� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 5 # Check for flexible array member support. # Copyright (C) 2006, 2009-2023 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. # Written by Paul Eggert. AC_DEFUN([AC_C_FLEXIBLE_ARRAY_MEMBER], [ AC_CACHE_CHECK([for flexible array member], ac_cv_c_flexmember, [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <stdlib.h> #include <stdio.h> #include <stddef.h> struct m { struct m *next, **list; char name[]; }; struct s { struct s *p; struct m *m; int n; double d[]; };]], [[int m = getchar (); size_t nbytes = offsetof (struct s, d) + m * sizeof (double); nbytes += sizeof (struct s) - 1; nbytes -= nbytes % sizeof (struct s); struct s *p = malloc (nbytes); p->p = p; p->m = NULL; p->d[0] = 0.0; return p->d != (double *) NULL;]])], [ac_cv_c_flexmember=yes], [ac_cv_c_flexmember=no])]) if test $ac_cv_c_flexmember = yes; then AC_DEFINE([FLEXIBLE_ARRAY_MEMBER], [], [Define to nothing if C supports flexible array members, and to 1 if it does not. That way, with a declaration like 'struct s { int n; short d@<:@FLEXIBLE_ARRAY_MEMBER@:>@; };', the struct hack can be used with pre-C99 compilers. Use 'FLEXSIZEOF (struct s, d, N * sizeof (short))' to calculate the size in bytes of such a struct containing an N-element array.]) else AC_DEFINE([FLEXIBLE_ARRAY_MEMBER], [1]) fi ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/iconv.m4��������������������������������������������������������������������������������0000644�0001750�0001750�00000021620�14436425500�014232� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# iconv.m4 serial 18 (gettext-0.18.2) dnl Copyright (C) 2000-2002, 2007-2014 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_LINK_IFELSE will then fail, the second AC_LINK_IFELSE 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_LINK_IFELSE( [AC_LANG_PROGRAM( [[ #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_LINK_IFELSE( [AC_LANG_PROGRAM( [[ #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, AIX 6.1..7.1, HP-UX 11.11, dnl Solaris 10. am_save_LIBS="$LIBS" if test $am_cv_lib_iconv = yes; then LIBS="$LIBS $LIBICONV" fi AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <iconv.h> #include <string.h> int main () { int result = 0; /* 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) result |= 1; iconv_close (cd_utf8_to_88591); } } /* 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) result |= 2; iconv_close (cd_ascii_to_88591); } } /* Test against AIX 6.1..7.1 bug: Buffer overrun. */ { iconv_t cd_88591_to_utf8 = iconv_open ("UTF-8", "ISO-8859-1"); if (cd_88591_to_utf8 != (iconv_t)(-1)) { static const char input[] = "\304"; static char buf[2] = { (char)0xDE, (char)0xAD }; const char *inptr = input; size_t inbytesleft = 1; char *outptr = buf; size_t outbytesleft = 1; size_t res = iconv (cd_88591_to_utf8, (char **) &inptr, &inbytesleft, &outptr, &outbytesleft); if (res != (size_t)(-1) || outptr - buf > 1 || buf[1] != (char)0xAD) result |= 4; iconv_close (cd_88591_to_utf8); } } #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) result |= 8; iconv_close (cd_88591_to_utf8); } } #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)) result |= 16; return result; }]])], [am_cv_func_iconv_works=yes], [am_cv_func_iconv_works=no], [ changequote(,)dnl case "$host_os" in aix* | hpux*) am_cv_func_iconv_works="guessing no" ;; *) am_cv_func_iconv_works="guessing yes" ;; esac changequote([,])dnl ]) 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]) ]) dnl Define AM_ICONV using AC_DEFUN_ONCE for Autoconf >= 2.64, in order to dnl avoid warnings like dnl "warning: AC_REQUIRE: `AM_ICONV' was expanded before it was required". dnl This is tricky because of the way 'aclocal' is implemented: dnl - It requires defining an auxiliary macro whose name ends in AC_DEFUN. dnl Otherwise aclocal's initial scan pass would miss the macro definition. dnl - It requires a line break inside the AC_DEFUN_ONCE and AC_DEFUN expansions. dnl Otherwise aclocal would emit many "Use of uninitialized value $1" dnl warnings. m4_define([gl_iconv_AC_DEFUN], m4_version_prereq([2.64], [[AC_DEFUN_ONCE( [$1], [$2])]], [m4_ifdef([gl_00GNULIB], [[AC_DEFUN_ONCE( [$1], [$2])]], [[AC_DEFUN( [$1], [$2])]])])) gl_iconv_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_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[ #include <stdlib.h> #include <iconv.h> extern #ifdef __cplusplus "C" #endif #if defined(__STDC__) || defined(_MSC_VER) || 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.]) dnl Also substitute ICONV_CONST in the gnulib generated <iconv.h>. m4_ifdef([gl_ICONV_H_DEFAULTS], [AC_REQUIRE([gl_ICONV_H_DEFAULTS]) if test -n "$am_cv_proto_iconv_arg1"; then ICONV_CONST="const" fi ]) fi ]) ����������������������������������������������������������������������������������������������������������������rush-2.4/m4/nstrftime.m4����������������������������������������������������������������������������0000644�0001750�0001750�00000001162�14436424420�015126� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 37 # Copyright (C) 1996-1997, 1999-2007, 2009-2023 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. # Written by Jim Meyering and Paul Eggert. AC_DEFUN([gl_FUNC_GNU_STRFTIME], [ AC_REQUIRE([AC_C_RESTRICT]) # This defines (or not) HAVE_TZNAME and HAVE_STRUCT_TM_TM_ZONE. AC_REQUIRE([AC_STRUCT_TIMEZONE]) AC_REQUIRE([gl_TM_GMTOFF]) AC_DEFINE([my_strftime], [nstrftime], [Define to the name of the strftime replacement function.]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/nl_langinfo.m4��������������������������������������������������������������������������0000644�0001750�0001750�00000005474�14436424420�015413� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# nl_langinfo.m4 serial 11 dnl Copyright (C) 2009-2023 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. AC_DEFUN([gl_FUNC_NL_LANGINFO], [ AC_REQUIRE([gl_LANGINFO_H_DEFAULTS]) AC_REQUIRE([gl_LANGINFO_H]) gl_CHECK_FUNCS_ANDROID([nl_langinfo], [[#include <langinfo.h>]]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([gl_FUNC_SETLOCALE_NULL]) AC_REQUIRE([gl_PTHREADLIB]) AC_CHECK_HEADERS_ONCE([threads.h]) if test $ac_cv_func_nl_langinfo = yes; then # On Irix 6.5, YESEXPR is defined, but nl_langinfo(YESEXPR) is broken. AC_CACHE_CHECK([whether YESEXPR works], [gl_cv_func_nl_langinfo_yesexpr_works], [AC_RUN_IFELSE( [AC_LANG_PROGRAM([[#include <langinfo.h> ]], [[return !*nl_langinfo(YESEXPR); ]])], [gl_cv_func_nl_langinfo_yesexpr_works=yes], [gl_cv_func_nl_langinfo_yesexpr_works=no], [ case "$host_os" in # Guess no on irix systems. irix*) gl_cv_func_nl_langinfo_yesexpr_works="guessing no";; # Guess yes elsewhere. *) gl_cv_func_nl_langinfo_yesexpr_works="guessing yes";; esac ]) ]) case $gl_cv_func_nl_langinfo_yesexpr_works in *yes) FUNC_NL_LANGINFO_YESEXPR_WORKS=1 ;; *) FUNC_NL_LANGINFO_YESEXPR_WORKS=0 ;; esac AC_DEFINE_UNQUOTED([FUNC_NL_LANGINFO_YESEXPR_WORKS], [$FUNC_NL_LANGINFO_YESEXPR_WORKS], [Define to 1 if nl_langinfo (YESEXPR) returns a non-empty string.]) # On Solaris 10 and Solaris 11.3, nl_langinfo is not multithread-safe. case "$host_os" in solaris*) NL_LANGINFO_MTSAFE=0 ;; *) NL_LANGINFO_MTSAFE=1 ;; esac AC_DEFINE_UNQUOTED([NL_LANGINFO_MTSAFE], [$NL_LANGINFO_MTSAFE], [Define to 1 if nl_langinfo is multithread-safe.]) if test $HAVE_LANGINFO_CODESET = 1 \ && test $HAVE_LANGINFO_T_FMT_AMPM = 1 \ && test $HAVE_LANGINFO_ALTMON = 1 \ && test $HAVE_LANGINFO_ERA = 1 \ && test $FUNC_NL_LANGINFO_YESEXPR_WORKS = 1 \ && test $NL_LANGINFO_MTSAFE = 1; then : else REPLACE_NL_LANGINFO=1 AC_DEFINE([REPLACE_NL_LANGINFO], [1], [Define if nl_langinfo exists but is overridden by gnulib.]) fi else HAVE_NL_LANGINFO=0 case "$gl_cv_onwards_func_nl_langinfo" in future*) REPLACE_NL_LANGINFO=1 ;; esac fi if test $HAVE_NL_LANGINFO = 0 || test $HAVE_LANGINFO_CODESET = 0; then LIB_NL_LANGINFO="$SETLOCALE_NULL_LIB" else LIB_NL_LANGINFO= fi dnl LIB_NL_LANGINFO is expected to be empty everywhere. AC_SUBST([LIB_NL_LANGINFO]) ]) # Prerequisites of lib/nl_langinfo-lock.c. AC_DEFUN([gl_PREREQ_NL_LANGINFO_LOCK], [ gl_VISIBILITY ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/include_next.m4�������������������������������������������������������������������������0000644�0001750�0001750�00000021034�14436424420�015574� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# include_next.m4 serial 26 dnl Copyright (C) 2006-2023 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 Paul Eggert and Derek Price. dnl Sets INCLUDE_NEXT, INCLUDE_NEXT_AS_FIRST_DIRECTIVE, PRAGMA_SYSTEM_HEADER, dnl and PRAGMA_COLUMNS. dnl dnl INCLUDE_NEXT expands to 'include_next' if the compiler supports it, or to dnl 'include' otherwise. dnl dnl INCLUDE_NEXT_AS_FIRST_DIRECTIVE expands to 'include_next' if the compiler dnl supports it in the special case that it is the first include directive in dnl the given file, or to 'include' otherwise. dnl dnl PRAGMA_SYSTEM_HEADER can be used in files that contain #include_next, dnl so as to avoid GCC warnings when the gcc option -pedantic is used. dnl '#pragma GCC system_header' has the same effect as if the file was found dnl through the include search path specified with '-isystem' options (as dnl opposed to the search path specified with '-I' options). Namely, gcc dnl does not warn about some things, and on some systems (Solaris and Interix) dnl __STDC__ evaluates to 0 instead of to 1. The latter is an undesired side dnl effect; we are therefore careful to use 'defined __STDC__' or '1' instead dnl of plain '__STDC__'. dnl dnl PRAGMA_COLUMNS can be used in files that override system header files, so dnl as to avoid compilation errors on HP NonStop systems when the gnulib file dnl is included by a system header file that does a "#pragma COLUMNS 80" (which dnl has the effect of truncating the lines of that file and all files that it dnl includes to 80 columns) and the gnulib file has lines longer than 80 dnl columns. AC_DEFUN([gl_INCLUDE_NEXT], [ AC_LANG_PREPROC_REQUIRE() AC_CACHE_CHECK([whether the preprocessor supports include_next], [gl_cv_have_include_next], [rm -rf conftestd1a conftestd1b conftestd2 mkdir conftestd1a conftestd1b conftestd2 dnl IBM C 9.0, 10.1 (original versions, prior to the 2009-01 updates) on dnl AIX 6.1 support include_next when used as first preprocessor directive dnl in a file, but not when preceded by another include directive. Check dnl for this bug by including <stdio.h>. dnl Additionally, with this same compiler, include_next is a no-op when dnl used in a header file that was included by specifying its absolute dnl file name. Despite these two bugs, include_next is used in the dnl compiler's <math.h>. By virtue of the second bug, we need to use dnl include_next as well in this case. cat <<EOF > conftestd1a/conftest.h #define DEFINED_IN_CONFTESTD1 #include_next <conftest.h> #ifdef DEFINED_IN_CONFTESTD2 int foo; #else #error "include_next doesn't work" #endif EOF cat <<EOF > conftestd1b/conftest.h #define DEFINED_IN_CONFTESTD1 #include <stdio.h> #include_next <conftest.h> #ifdef DEFINED_IN_CONFTESTD2 int foo; #else #error "include_next doesn't work" #endif EOF cat <<EOF > conftestd2/conftest.h #ifndef DEFINED_IN_CONFTESTD1 #error "include_next test doesn't work" #endif #define DEFINED_IN_CONFTESTD2 EOF gl_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1b -Iconftestd2" dnl We intentionally avoid using AC_LANG_SOURCE here. AC_COMPILE_IFELSE([AC_LANG_DEFINES_PROVIDED[#include <conftest.h>]], [gl_cv_have_include_next=yes], [CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1a -Iconftestd2" AC_COMPILE_IFELSE([AC_LANG_DEFINES_PROVIDED[#include <conftest.h>]], [gl_cv_have_include_next=buggy], [gl_cv_have_include_next=no]) ]) CPPFLAGS="$gl_save_CPPFLAGS" rm -rf conftestd1a conftestd1b conftestd2 ]) PRAGMA_SYSTEM_HEADER= if test $gl_cv_have_include_next = yes; then INCLUDE_NEXT=include_next INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next if test -n "$GCC"; then PRAGMA_SYSTEM_HEADER='#pragma GCC system_header' fi else if test $gl_cv_have_include_next = buggy; then INCLUDE_NEXT=include INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next else INCLUDE_NEXT=include INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include fi fi AC_SUBST([INCLUDE_NEXT]) AC_SUBST([INCLUDE_NEXT_AS_FIRST_DIRECTIVE]) AC_SUBST([PRAGMA_SYSTEM_HEADER]) dnl HP NonStop systems, which define __TANDEM, limit the line length dnl after including some system header files. AC_CACHE_CHECK([whether source code line length is unlimited], [gl_cv_source_line_length_unlimited], [AC_EGREP_CPP([choke me], [ #ifdef __TANDEM choke me #endif ], [gl_cv_source_line_length_unlimited=no], [gl_cv_source_line_length_unlimited=yes]) ]) if test $gl_cv_source_line_length_unlimited = no; then PRAGMA_COLUMNS="#pragma COLUMNS 10000" else PRAGMA_COLUMNS= fi AC_SUBST([PRAGMA_COLUMNS]) ]) # gl_CHECK_NEXT_HEADERS(HEADER1 HEADER2 ...) # ------------------------------------------ # For each arg foo.h, if #include_next works, define NEXT_FOO_H to be # '<foo.h>'; otherwise define it to be # '"///usr/include/foo.h"', or whatever other absolute file name is suitable. # Also, if #include_next works as first preprocessing directive in a file, # define NEXT_AS_FIRST_DIRECTIVE_FOO_H to be '<foo.h>'; otherwise define it to # be # '"///usr/include/foo.h"', or whatever other absolute file name is suitable. # That way, a header file with the following line: # #@INCLUDE_NEXT@ @NEXT_FOO_H@ # or # #@INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ @NEXT_AS_FIRST_DIRECTIVE_FOO_H@ # behaves (after sed substitution) as if it contained # #include_next <foo.h> # even if the compiler does not support include_next. # The three "///" are to pacify Sun C 5.8, which otherwise would say # "warning: #include of /usr/include/... may be non-portable". # Use '""', not '<>', so that the /// cannot be confused with a C99 comment. # Note: This macro assumes that the header file is not empty after # preprocessing, i.e. it does not only define preprocessor macros but also # provides some type/enum definitions or function/variable declarations. # # This macro also checks whether each header exists, by invoking # AC_CHECK_HEADERS_ONCE or AC_CHECK_HEADERS on each argument. AC_DEFUN([gl_CHECK_NEXT_HEADERS], [ gl_NEXT_HEADERS_INTERNAL([$1], [check]) ]) # gl_NEXT_HEADERS(HEADER1 HEADER2 ...) # ------------------------------------ # Like gl_CHECK_NEXT_HEADERS, except do not check whether the headers exist. # This is suitable for headers like <stddef.h> that are standardized by C89 # and therefore can be assumed to exist. AC_DEFUN([gl_NEXT_HEADERS], [ gl_NEXT_HEADERS_INTERNAL([$1], [assume]) ]) # The guts of gl_CHECK_NEXT_HEADERS and gl_NEXT_HEADERS. AC_DEFUN([gl_NEXT_HEADERS_INTERNAL], [ AC_REQUIRE([gl_INCLUDE_NEXT]) AC_REQUIRE([AC_CANONICAL_HOST]) m4_if([$2], [check], [AC_CHECK_HEADERS_ONCE([$1]) ]) m4_foreach_w([gl_HEADER_NAME], [$1], [AS_VAR_PUSHDEF([gl_next_header], [gl_cv_next_]m4_defn([gl_HEADER_NAME])) if test $gl_cv_have_include_next = yes; then AS_VAR_SET([gl_next_header], ['<'gl_HEADER_NAME'>']) else AC_CACHE_CHECK( [absolute name of <]m4_defn([gl_HEADER_NAME])[>], [gl_next_header], [m4_if([$2], [check], [AS_VAR_PUSHDEF([gl_header_exists], [ac_cv_header_]m4_defn([gl_HEADER_NAME])) if test AS_VAR_GET([gl_header_exists]) = yes; then AS_VAR_POPDEF([gl_header_exists]) ]) gl_ABSOLUTE_HEADER_ONE(gl_HEADER_NAME) AS_VAR_COPY([gl_header], [gl_cv_absolute_]AS_TR_SH(gl_HEADER_NAME)) AS_VAR_SET([gl_next_header], ['"'$gl_header'"']) m4_if([$2], [check], [else AS_VAR_SET([gl_next_header], ['<'gl_HEADER_NAME'>']) fi ]) ]) fi AC_SUBST( AS_TR_CPP([NEXT_]m4_defn([gl_HEADER_NAME])), [AS_VAR_GET([gl_next_header])]) if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'gl_HEADER_NAME'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=AS_VAR_GET([gl_next_header]) fi AC_SUBST( AS_TR_CPP([NEXT_AS_FIRST_DIRECTIVE_]m4_defn([gl_HEADER_NAME])), [$gl_next_as_first_directive]) AS_VAR_POPDEF([gl_next_header])]) ]) # Autoconf 2.68 added warnings for our use of AC_COMPILE_IFELSE; # this fallback is safe for all earlier autoconf versions. m4_define_default([AC_LANG_DEFINES_PROVIDED]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/codeset.m4������������������������������������������������������������������������������0000644�0001750�0001750�00000001525�14436424420�014544� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# codeset.m4 serial 5 (gettext-0.18.2) dnl Copyright (C) 2000-2002, 2006, 2008-2014, 2016, 2019-2023 Free Software dnl 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_LANGINFO_CODESET], [ AC_CACHE_CHECK([for nl_langinfo and CODESET], [am_cv_langinfo_codeset], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <langinfo.h>]], [[char* cs = nl_langinfo(CODESET); return !cs;]])], [am_cv_langinfo_codeset=yes], [am_cv_langinfo_codeset=no]) ]) if test $am_cv_langinfo_codeset = yes; then AC_DEFINE([HAVE_LANGINFO_CODESET], [1], [Define if you have <langinfo.h> and nl_langinfo(CODESET).]) fi ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/pthread_rwlock_rdlock.m4����������������������������������������������������������������0000644�0001750�0001750�00000015603�14436424420�017466� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# pthread_rwlock_rdlock.m4 serial 5 dnl Copyright (C) 2017-2023 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 Inspired by dnl https://github.com/linux-test-project/ltp/blob/master/testcases/open_posix_testsuite/conformance/interfaces/pthread_rwlock_rdlock/2-2.c dnl by Intel Corporation. dnl Test whether in a situation where dnl - an rwlock is taken by a reader and has a writer waiting, dnl - an additional reader requests the lock, dnl - the waiting writer and the requesting reader threads have the same dnl priority, dnl the requesting reader thread gets blocked, so that at some point the dnl waiting writer can acquire the lock. dnl Without such a guarantee, when there a N readers and each of the readers dnl spends more than 1/Nth of the time with the lock held, there is a high dnl probability that the waiting writer will not get the lock in a given finite dnl time, a phenomenon called "writer starvation". dnl Without such a guarantee, applications have a hard time avoiding writer dnl starvation. dnl dnl POSIX:2017 makes this requirement only for implementations that support TPS dnl (Thread Priority Scheduling) and only for the scheduling policies SCHED_FIFO dnl and SCHED_RR, see dnl https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_rwlock_rdlock.html dnl but this test verifies the guarantee regardless of TPS and regardless of dnl scheduling policy. dnl Glibc does not provide this guarantee (and never will on Linux), see dnl https://sourceware.org/bugzilla/show_bug.cgi?id=13701 dnl https://bugzilla.redhat.com/show_bug.cgi?id=1410052 AC_DEFUN([gl_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER], [ AC_REQUIRE([gl_THREADLIB_EARLY]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether pthread_rwlock_rdlock prefers a writer to a reader], [gl_cv_pthread_rwlock_rdlock_prefer_writer], [save_LIBS="$LIBS" LIBS="$LIBS $LIBMULTITHREAD" AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <errno.h> #include <pthread.h> #include <stdlib.h> #include <unistd.h> #define SUCCEED() exit (0) #define FAILURE() exit (1) #define UNEXPECTED(n) (exit (10 + (n))) /* The main thread creates the waiting writer and the requesting reader threads in the default way; this guarantees that they have the same priority. We can reuse the main thread as first reader thread. */ static pthread_rwlock_t lock; static pthread_t reader1; static pthread_t writer; static pthread_t reader2; static pthread_t timer; /* Used to pass control from writer to reader2 and from reader2 to timer, as in a relay race. Passing control from one running thread to another running thread is most likely faster than to create the second thread. */ static pthread_mutex_t baton; static void * timer_func (void *ignored) { /* Step 13 (can be before or after step 12): The timer thread takes the baton, then waits a moment to make sure it can tell whether the second reader thread is blocked at step 12. */ if (pthread_mutex_lock (&baton)) UNEXPECTED (13); usleep (100000); /* By the time we get here, it's clear that the second reader thread is blocked at step 12. This is the desired behaviour. */ SUCCEED (); } static void * reader2_func (void *ignored) { int err; /* Step 8 (can be before or after step 7): The second reader thread takes the baton, then waits a moment to make sure the writer thread has reached step 7. */ if (pthread_mutex_lock (&baton)) UNEXPECTED (8); usleep (100000); /* Step 9: The second reader thread requests the lock. */ err = pthread_rwlock_tryrdlock (&lock); if (err == 0) FAILURE (); else if (err != EBUSY) UNEXPECTED (9); /* Step 10: Launch a timer, to test whether the next call blocks. */ if (pthread_create (&timer, NULL, timer_func, NULL)) UNEXPECTED (10); /* Step 11: Release the baton. */ if (pthread_mutex_unlock (&baton)) UNEXPECTED (11); /* Step 12: The second reader thread requests the lock. */ err = pthread_rwlock_rdlock (&lock); if (err == 0) FAILURE (); else UNEXPECTED (12); } static void * writer_func (void *ignored) { /* Step 4: Take the baton, so that the second reader thread does not go ahead too early. */ if (pthread_mutex_lock (&baton)) UNEXPECTED (4); /* Step 5: Create the second reader thread. */ if (pthread_create (&reader2, NULL, reader2_func, NULL)) UNEXPECTED (5); /* Step 6: Release the baton. */ if (pthread_mutex_unlock (&baton)) UNEXPECTED (6); /* Step 7: The writer thread requests the lock. */ if (pthread_rwlock_wrlock (&lock)) UNEXPECTED (7); return NULL; } int main () { reader1 = pthread_self (); /* Step 1: The main thread initializes the lock and the baton. */ if (pthread_rwlock_init (&lock, NULL)) UNEXPECTED (1); if (pthread_mutex_init (&baton, NULL)) UNEXPECTED (1); /* Step 2: The main thread acquires the lock as a reader. */ if (pthread_rwlock_rdlock (&lock)) UNEXPECTED (2); /* Step 3: Create the writer thread. */ if (pthread_create (&writer, NULL, writer_func, NULL)) UNEXPECTED (3); /* Job done. Go to sleep. */ for (;;) { sleep (1); } } ]])], [gl_cv_pthread_rwlock_rdlock_prefer_writer=yes], [gl_cv_pthread_rwlock_rdlock_prefer_writer=no], [case "$host_os" in # Guess no on glibc systems. *-gnu* | gnu*) gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing no" ;; # Guess no on musl systems. *-musl* | midipix*) gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing no" ;; # Guess no on bionic systems. *-android*) gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing no" ;; # Guess yes on native Windows with the mingw-w64 winpthreads library. # Guess no on native Windows with the gnulib windows-rwlock module. mingw*) if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing yes" else gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing no" fi ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_pthread_rwlock_rdlock_prefer_writer="$gl_cross_guess_normal" ;; esac ]) LIBS="$save_LIBS" ]) case "$gl_cv_pthread_rwlock_rdlock_prefer_writer" in *yes) AC_DEFINE([HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER], [1], [Define if the 'pthread_rwlock_rdlock' function prefers a writer to a reader.]) ;; esac ]) �����������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/wchar_t.m4������������������������������������������������������������������������������0000644�0001750�0001750�00000001462�14436424420�014545� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wchar_t.m4 serial 4 (gettext-0.18.2) dnl Copyright (C) 2002-2003, 2008-2023 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 Test whether <stddef.h> has the 'wchar_t' type. dnl Prerequisite: AC_PROG_CC AC_DEFUN([gt_TYPE_WCHAR_T], [ AC_CACHE_CHECK([for wchar_t], [gt_cv_c_wchar_t], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <stddef.h> wchar_t foo = (wchar_t)'\0';]], [[]])], [gt_cv_c_wchar_t=yes], [gt_cv_c_wchar_t=no])]) if test $gt_cv_c_wchar_t = yes; then AC_DEFINE([HAVE_WCHAR_T], [1], [Define if you have the 'wchar_t' type.]) fi ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/warn-on-use.m4��������������������������������������������������������������������������0000644�0001750�0001750�00000005523�14436424420�015273� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# warn-on-use.m4 serial 10 dnl Copyright (C) 2010-2023 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. # gl_WARN_ON_USE_PREPARE(INCLUDES, NAMES) # --------------------------------------- # If the module 'posixcheck' is in use: # # For each whitespace-separated element in the list of NAMES, define # HAVE_RAW_DECL_name if the function has a declaration among INCLUDES # even after being undefined as a macro. # # See warn-on-use.h for some hints on how to poison function names, as # well as ideas on poisoning global variables and macros. NAMES may # include global variables, but remember that only functions work with # _GL_WARN_ON_USE. Typically, INCLUDES only needs to list a single # header, but if the replacement header pulls in other headers because # some systems declare functions in the wrong header, then INCLUDES # should do likewise. # # It is generally safe to assume declarations for functions declared # in the intersection of C89 and C11 (such as printf) without # needing gl_WARN_ON_USE_PREPARE. AC_DEFUN([gl_WARN_ON_USE_PREPARE], [ m4_ifdef([gl_POSIXCHECK], [m4_foreach_w([gl_decl], [$2], [AH_TEMPLATE([HAVE_RAW_DECL_]AS_TR_CPP(m4_defn([gl_decl])), [Define to 1 if ]m4_defn([gl_decl])[ is declared even after undefining macros.])])dnl for gl_func in m4_flatten([$2]); do AS_VAR_PUSHDEF([gl_Symbol], [gl_cv_have_raw_decl_$gl_func])dnl dnl As a workaround to implicit built-in function declarations in dnl clang (e.g. strndup), reference ac_compile_for_check_decl instead dnl of ac_compile. If, for whatever reason, the override of AC_PROG_CC dnl in zzgnulib.m4 is inactive, use the original ac_compile. ac_save_ac_compile="$ac_compile" if test -n "$ac_compile_for_check_decl"; then ac_compile="$ac_compile_for_check_decl" fi AC_CACHE_CHECK([whether $gl_func is declared without a macro], [gl_Symbol], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([$1], [[#undef $gl_func (void) $gl_func;]])], [AS_VAR_SET([gl_Symbol], [yes])], [AS_VAR_SET([gl_Symbol], [no])])]) ac_compile="$ac_save_ac_compile" AS_VAR_IF([gl_Symbol], [yes], [AC_DEFINE_UNQUOTED(AS_TR_CPP([HAVE_RAW_DECL_$gl_func]), [1]) dnl Shortcut for an AC_CHECK_DECL invocation that may come later: dnl If the raw declaration exists with the given includes, then dnl AC_CHECK_DECL with its many includes would see it as well. dnl So, set a cache variable to allow skipping any later dnl AC_CHECK_DECL invocation for $gl_func. eval "ac_cv_have_decl_$gl_func=yes" ]) AS_VAR_POPDEF([gl_Symbol])dnl done ]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/fstat.m4��������������������������������������������������������������������������������0000644�0001750�0001750�00000002117�14436424420�014235� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fstat.m4 serial 8 dnl Copyright (C) 2011-2023 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. AC_DEFUN([gl_FUNC_FSTAT], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS]) case "$host_os" in mingw* | solaris*) dnl On MinGW, the original stat() returns st_atime, st_mtime, dnl st_ctime values that are affected by the time zone. dnl Solaris stat can return a negative tv_nsec. REPLACE_FSTAT=1 ;; esac dnl Replace fstat() for supporting the gnulib-defined open() on directories. m4_ifdef([gl_FUNC_FCHDIR], [ gl_TEST_FCHDIR if test $HAVE_FCHDIR = 0; then case "$gl_cv_func_open_directory_works" in *yes) ;; *) REPLACE_FSTAT=1 ;; esac fi ]) ]) # Prerequisites of lib/fstat.c and lib/stat-w32.c. AC_DEFUN([gl_PREREQ_FSTAT], [ AC_REQUIRE([gl_SYS_STAT_H]) AC_REQUIRE([gl_PREREQ_STAT_W32]) : ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/stdint.m4�������������������������������������������������������������������������������0000644�0001750�0001750�00000042731�14436424420�014427� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# stdint.m4 serial 61 dnl Copyright (C) 2001-2023 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 Paul Eggert and Bruno Haible. dnl Test whether <stdint.h> is supported or must be substituted. AC_PREREQ([2.61]) AC_DEFUN_ONCE([gl_STDINT_H], [ AC_PREREQ([2.59])dnl AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_REQUIRE([gl_LIMITS_H]) AC_REQUIRE([gt_TYPE_WINT_T]) dnl For backward compatibility. Some packages may still be testing these dnl macros. AC_DEFINE([HAVE_LONG_LONG_INT], [1], [Define to 1 if the system has the type 'long long int'.]) AC_DEFINE([HAVE_UNSIGNED_LONG_LONG_INT], [1], [Define to 1 if the system has the type 'unsigned long long int'.]) dnl Check for <wchar.h>, in the same way as gl_WCHAR_H does. AC_CHECK_HEADERS_ONCE([wchar.h]) if test $ac_cv_header_wchar_h = yes; then HAVE_WCHAR_H=1 else HAVE_WCHAR_H=0 fi AC_SUBST([HAVE_WCHAR_H]) dnl Check for <inttypes.h>. AC_CHECK_HEADERS_ONCE([inttypes.h]) if test $ac_cv_header_inttypes_h = yes; then HAVE_INTTYPES_H=1 else HAVE_INTTYPES_H=0 fi AC_SUBST([HAVE_INTTYPES_H]) dnl Check for <sys/types.h>. AC_CHECK_HEADERS_ONCE([sys/types.h]) if test $ac_cv_header_sys_types_h = yes; then HAVE_SYS_TYPES_H=1 else HAVE_SYS_TYPES_H=0 fi AC_SUBST([HAVE_SYS_TYPES_H]) gl_CHECK_NEXT_HEADERS([stdint.h]) if test $ac_cv_header_stdint_h = yes; then HAVE_STDINT_H=1 else HAVE_STDINT_H=0 fi AC_SUBST([HAVE_STDINT_H]) dnl Now see whether we need a substitute <stdint.h>. if test $ac_cv_header_stdint_h = yes; then AC_CACHE_CHECK([whether stdint.h conforms to C99], [gl_cv_header_working_stdint_h], [gl_cv_header_working_stdint_h=no AC_COMPILE_IFELSE([ AC_LANG_PROGRAM([[ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ #define __STDC_CONSTANT_MACROS 1 #define __STDC_LIMIT_MACROS 1 #include <stdint.h> /* Dragonfly defines WCHAR_MIN, WCHAR_MAX only in <wchar.h>. */ #if !(defined WCHAR_MIN && defined WCHAR_MAX) #error "WCHAR_MIN, WCHAR_MAX not defined in <stdint.h>" #endif ] gl_STDINT_INCLUDES [ #ifdef INT8_MAX int8_t a1 = INT8_MAX; int8_t a1min = INT8_MIN; #endif #ifdef INT16_MAX int16_t a2 = INT16_MAX; int16_t a2min = INT16_MIN; #endif #ifdef INT32_MAX int32_t a3 = INT32_MAX; int32_t a3min = INT32_MIN; #endif #ifdef INT64_MAX int64_t a4 = INT64_MAX; int64_t a4min = INT64_MIN; #endif #ifdef UINT8_MAX uint8_t b1 = UINT8_MAX; #else typedef int b1[(unsigned char) -1 != 255 ? 1 : -1]; #endif #ifdef UINT16_MAX uint16_t b2 = UINT16_MAX; #endif #ifdef UINT32_MAX uint32_t b3 = UINT32_MAX; #endif #ifdef UINT64_MAX uint64_t b4 = UINT64_MAX; #endif int_least8_t c1 = INT8_C (0x7f); int_least8_t c1max = INT_LEAST8_MAX; int_least8_t c1min = INT_LEAST8_MIN; int_least16_t c2 = INT16_C (0x7fff); int_least16_t c2max = INT_LEAST16_MAX; int_least16_t c2min = INT_LEAST16_MIN; int_least32_t c3 = INT32_C (0x7fffffff); int_least32_t c3max = INT_LEAST32_MAX; int_least32_t c3min = INT_LEAST32_MIN; int_least64_t c4 = INT64_C (0x7fffffffffffffff); int_least64_t c4max = INT_LEAST64_MAX; int_least64_t c4min = INT_LEAST64_MIN; uint_least8_t d1 = UINT8_C (0xff); uint_least8_t d1max = UINT_LEAST8_MAX; uint_least16_t d2 = UINT16_C (0xffff); uint_least16_t d2max = UINT_LEAST16_MAX; uint_least32_t d3 = UINT32_C (0xffffffff); uint_least32_t d3max = UINT_LEAST32_MAX; uint_least64_t d4 = UINT64_C (0xffffffffffffffff); uint_least64_t d4max = UINT_LEAST64_MAX; int_fast8_t e1 = INT_FAST8_MAX; int_fast8_t e1min = INT_FAST8_MIN; int_fast16_t e2 = INT_FAST16_MAX; int_fast16_t e2min = INT_FAST16_MIN; int_fast32_t e3 = INT_FAST32_MAX; int_fast32_t e3min = INT_FAST32_MIN; int_fast64_t e4 = INT_FAST64_MAX; int_fast64_t e4min = INT_FAST64_MIN; uint_fast8_t f1 = UINT_FAST8_MAX; uint_fast16_t f2 = UINT_FAST16_MAX; uint_fast32_t f3 = UINT_FAST32_MAX; uint_fast64_t f4 = UINT_FAST64_MAX; #ifdef INTPTR_MAX intptr_t g = INTPTR_MAX; intptr_t gmin = INTPTR_MIN; #endif #ifdef UINTPTR_MAX uintptr_t h = UINTPTR_MAX; #endif intmax_t i = INTMAX_MAX; uintmax_t j = UINTMAX_MAX; /* Check that SIZE_MAX has the correct type, if possible. */ #if 201112 <= __STDC_VERSION__ int k = _Generic (SIZE_MAX, size_t: 0); #elif (2 <= __GNUC__ || 4 <= __clang_major__ || defined __IBM__TYPEOF__ \ || (0x5110 <= __SUNPRO_C && !__STDC__)) extern size_t k; extern __typeof__ (SIZE_MAX) k; #endif #include <limits.h> /* for CHAR_BIT */ #define TYPE_MINIMUM(t) \ ((t) ((t) 0 < (t) -1 ? (t) 0 : ~ TYPE_MAXIMUM (t))) #define TYPE_MAXIMUM(t) \ ((t) ((t) 0 < (t) -1 \ ? (t) -1 \ : ((((t) 1 << (sizeof (t) * CHAR_BIT - 2)) - 1) * 2 + 1))) struct s { int check_PTRDIFF: PTRDIFF_MIN == TYPE_MINIMUM (ptrdiff_t) && PTRDIFF_MAX == TYPE_MAXIMUM (ptrdiff_t) ? 1 : -1; /* Detect bug in FreeBSD 6.0/ia64 and FreeBSD 13.0/arm64. */ int check_SIG_ATOMIC: SIG_ATOMIC_MIN == TYPE_MINIMUM (sig_atomic_t) && SIG_ATOMIC_MAX == TYPE_MAXIMUM (sig_atomic_t) ? 1 : -1; int check_SIZE: SIZE_MAX == TYPE_MAXIMUM (size_t) ? 1 : -1; int check_WCHAR: WCHAR_MIN == TYPE_MINIMUM (wchar_t) && WCHAR_MAX == TYPE_MAXIMUM (wchar_t) ? 1 : -1; /* Detect bug in mingw. */ int check_WINT: WINT_MIN == TYPE_MINIMUM (wint_t) && WINT_MAX == TYPE_MAXIMUM (wint_t) ? 1 : -1; /* Detect bugs in glibc 2.4 and Solaris 10 stdint.h, among others. */ int check_UINT8_C: (-1 < UINT8_C (0)) == (-1 < (uint_least8_t) 0) ? 1 : -1; int check_UINT16_C: (-1 < UINT16_C (0)) == (-1 < (uint_least16_t) 0) ? 1 : -1; /* Detect bugs in OpenBSD 3.9 stdint.h. */ #ifdef UINT8_MAX int check_uint8: (uint8_t) -1 == UINT8_MAX ? 1 : -1; #endif #ifdef UINT16_MAX int check_uint16: (uint16_t) -1 == UINT16_MAX ? 1 : -1; #endif #ifdef UINT32_MAX int check_uint32: (uint32_t) -1 == UINT32_MAX ? 1 : -1; #endif #ifdef UINT64_MAX int check_uint64: (uint64_t) -1 == UINT64_MAX ? 1 : -1; #endif int check_uint_least8: (uint_least8_t) -1 == UINT_LEAST8_MAX ? 1 : -1; int check_uint_least16: (uint_least16_t) -1 == UINT_LEAST16_MAX ? 1 : -1; int check_uint_least32: (uint_least32_t) -1 == UINT_LEAST32_MAX ? 1 : -1; int check_uint_least64: (uint_least64_t) -1 == UINT_LEAST64_MAX ? 1 : -1; int check_uint_fast8: (uint_fast8_t) -1 == UINT_FAST8_MAX ? 1 : -1; int check_uint_fast16: (uint_fast16_t) -1 == UINT_FAST16_MAX ? 1 : -1; int check_uint_fast32: (uint_fast32_t) -1 == UINT_FAST32_MAX ? 1 : -1; int check_uint_fast64: (uint_fast64_t) -1 == UINT_FAST64_MAX ? 1 : -1; int check_uintptr: (uintptr_t) -1 == UINTPTR_MAX ? 1 : -1; int check_uintmax: (uintmax_t) -1 == UINTMAX_MAX ? 1 : -1; int check_size: (size_t) -1 == SIZE_MAX ? 1 : -1; }; ]])], [dnl Determine whether the various *_MIN, *_MAX macros are usable dnl in preprocessor expression. We could do it by compiling a test dnl program for each of these macros. It is faster to run a program dnl that inspects the macro expansion. dnl This detects a bug on HP-UX 11.23/ia64. AC_RUN_IFELSE([ AC_LANG_PROGRAM([[ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ #define __STDC_CONSTANT_MACROS 1 #define __STDC_LIMIT_MACROS 1 #include <stdint.h> ] gl_STDINT_INCLUDES [ #include <stdio.h> #include <string.h> #define MVAL(macro) MVAL1(macro) #define MVAL1(expression) #expression static const char *macro_values[] = { #ifdef INT8_MAX MVAL (INT8_MAX), #endif #ifdef INT16_MAX MVAL (INT16_MAX), #endif #ifdef INT32_MAX MVAL (INT32_MAX), #endif #ifdef INT64_MAX MVAL (INT64_MAX), #endif #ifdef UINT8_MAX MVAL (UINT8_MAX), #endif #ifdef UINT16_MAX MVAL (UINT16_MAX), #endif #ifdef UINT32_MAX MVAL (UINT32_MAX), #endif #ifdef UINT64_MAX MVAL (UINT64_MAX), #endif NULL }; ]], [[ const char **mv; for (mv = macro_values; *mv != NULL; mv++) { const char *value = *mv; /* Test whether it looks like a cast expression. */ if (strncmp (value, "((unsigned int)"/*)*/, 15) == 0 || strncmp (value, "((unsigned short)"/*)*/, 17) == 0 || strncmp (value, "((unsigned char)"/*)*/, 16) == 0 || strncmp (value, "((int)"/*)*/, 6) == 0 || strncmp (value, "((signed short)"/*)*/, 15) == 0 || strncmp (value, "((signed char)"/*)*/, 14) == 0) return mv - macro_values + 1; } return 0; ]])], [gl_cv_header_working_stdint_h=yes], [], [case "$host_os" in # Guess yes on native Windows. mingw*) gl_cv_header_working_stdint_h="guessing yes" ;; # In general, assume it works. *) gl_cv_header_working_stdint_h="guessing yes" ;; esac ]) ]) ]) fi HAVE_C99_STDINT_H=0 HAVE_SYS_BITYPES_H=0 HAVE_SYS_INTTYPES_H=0 GL_GENERATE_STDINT_H=true case "$gl_cv_header_working_stdint_h" in *yes) HAVE_C99_STDINT_H=1 dnl Now see whether the system <stdint.h> works without dnl __STDC_CONSTANT_MACROS/__STDC_LIMIT_MACROS defined. dnl If not, there would be problems when stdint.h is included from C++. AC_CACHE_CHECK([whether stdint.h works without ISO C predefines], [gl_cv_header_stdint_without_STDC_macros], [gl_cv_header_stdint_without_STDC_macros=no AC_COMPILE_IFELSE([ AC_LANG_PROGRAM([[ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ #include <stdint.h> ] gl_STDINT_INCLUDES [ intmax_t im = INTMAX_MAX; int32_t i32 = INT32_C (0x7fffffff); ]])], [gl_cv_header_stdint_without_STDC_macros=yes]) ]) if test $gl_cv_header_stdint_without_STDC_macros = no; then AC_DEFINE([__STDC_CONSTANT_MACROS], [1], [Define to 1 if the system <stdint.h> predates C++11.]) AC_DEFINE([__STDC_LIMIT_MACROS], [1], [Define to 1 if the system <stdint.h> predates C++11.]) fi AC_CACHE_CHECK([whether stdint.h has UINTMAX_WIDTH etc.], [gl_cv_header_stdint_width], [gl_cv_header_stdint_width=no AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[ /* Work if build is not clean. */ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 #ifndef __STDC_WANT_IEC_60559_BFP_EXT__ #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 #endif #include <stdint.h> ]gl_STDINT_INCLUDES[ int iw = UINTMAX_WIDTH; ]])], [gl_cv_header_stdint_width=yes])]) if test "$gl_cv_header_stdint_width" = yes; then GL_GENERATE_STDINT_H=false fi ;; *) dnl Check for <sys/inttypes.h>, and for dnl <sys/bitypes.h> (used in Linux libc4 >= 4.6.7 and libc5). AC_CHECK_HEADERS([sys/inttypes.h sys/bitypes.h]) if test $ac_cv_header_sys_inttypes_h = yes; then HAVE_SYS_INTTYPES_H=1 fi if test $ac_cv_header_sys_bitypes_h = yes; then HAVE_SYS_BITYPES_H=1 fi gl_STDINT_TYPE_PROPERTIES ;; esac dnl The substitute stdint.h needs the substitute limit.h's _GL_INTEGER_WIDTH. gl_REPLACE_LIMITS_H AC_SUBST([HAVE_C99_STDINT_H]) AC_SUBST([HAVE_SYS_BITYPES_H]) AC_SUBST([HAVE_SYS_INTTYPES_H]) ]) dnl gl_STDINT_BITSIZEOF(TYPES, INCLUDES) dnl Determine the size of each of the given types in bits. AC_DEFUN([gl_STDINT_BITSIZEOF], [ dnl Use a shell loop, to avoid bloating configure, and dnl - extra AH_TEMPLATE calls, so that autoheader knows what to put into dnl config.h.in, dnl - extra AC_SUBST calls, so that the right substitutions are made. m4_foreach_w([gltype], [$1], [AH_TEMPLATE([BITSIZEOF_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]), [Define to the number of bits in type ']gltype['.])]) for gltype in $1 ; do AC_CACHE_CHECK([for bit size of $gltype], [gl_cv_bitsizeof_${gltype}], [AC_COMPUTE_INT([result], [sizeof ($gltype) * CHAR_BIT], [$2 #include <limits.h>], [result=unknown]) eval gl_cv_bitsizeof_${gltype}=\$result ]) eval result=\$gl_cv_bitsizeof_${gltype} if test $result = unknown; then dnl Use a nonempty default, because some compilers, such as IRIX 5 cc, dnl do a syntax check even on unused #if conditions and give an error dnl on valid C code like this: dnl #if 0 dnl # if > 32 dnl # endif dnl #endif result=0 fi GLTYPE=`echo "$gltype" | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` AC_DEFINE_UNQUOTED([BITSIZEOF_${GLTYPE}], [$result]) eval BITSIZEOF_${GLTYPE}=\$result done m4_foreach_w([gltype], [$1], [AC_SUBST([BITSIZEOF_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]))]) ]) dnl gl_CHECK_TYPES_SIGNED(TYPES, INCLUDES) dnl Determine the signedness of each of the given types. dnl Define HAVE_SIGNED_TYPE if type is signed. AC_DEFUN([gl_CHECK_TYPES_SIGNED], [ dnl Use a shell loop, to avoid bloating configure, and dnl - extra AH_TEMPLATE calls, so that autoheader knows what to put into dnl config.h.in, dnl - extra AC_SUBST calls, so that the right substitutions are made. m4_foreach_w([gltype], [$1], [AH_TEMPLATE([HAVE_SIGNED_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]), [Define to 1 if ']gltype[' is a signed integer type.])]) for gltype in $1 ; do AC_CACHE_CHECK([whether $gltype is signed], [gl_cv_type_${gltype}_signed], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([$2[ int verify[2 * (($gltype) -1 < ($gltype) 0) - 1];]])], result=yes, result=no) eval gl_cv_type_${gltype}_signed=\$result ]) eval result=\$gl_cv_type_${gltype}_signed GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` if test "$result" = yes; then AC_DEFINE_UNQUOTED([HAVE_SIGNED_${GLTYPE}], [1]) eval HAVE_SIGNED_${GLTYPE}=1 else eval HAVE_SIGNED_${GLTYPE}=0 fi done m4_foreach_w([gltype], [$1], [AC_SUBST([HAVE_SIGNED_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]))]) ]) dnl gl_INTEGER_TYPE_SUFFIX(TYPES, INCLUDES) dnl Determine the suffix to use for integer constants of the given types. dnl Define t_SUFFIX for each such type. AC_DEFUN([gl_INTEGER_TYPE_SUFFIX], [ dnl Use a shell loop, to avoid bloating configure, and dnl - extra AH_TEMPLATE calls, so that autoheader knows what to put into dnl config.h.in, dnl - extra AC_SUBST calls, so that the right substitutions are made. m4_foreach_w([gltype], [$1], [AH_TEMPLATE(m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_])[_SUFFIX], [Define to l, ll, u, ul, ull, etc., as suitable for constants of type ']gltype['.])]) for gltype in $1 ; do AC_CACHE_CHECK([for $gltype integer literal suffix], [gl_cv_type_${gltype}_suffix], [eval gl_cv_type_${gltype}_suffix=no eval result=\$gl_cv_type_${gltype}_signed if test "$result" = yes; then glsufu= else glsufu=u fi for glsuf in "$glsufu" ${glsufu}l ${glsufu}ll ${glsufu}i64; do case $glsuf in '') gltype1='int';; l) gltype1='long int';; ll) gltype1='long long int';; i64) gltype1='__int64';; u) gltype1='unsigned int';; ul) gltype1='unsigned long int';; ull) gltype1='unsigned long long int';; ui64)gltype1='unsigned __int64';; esac AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([$2[ extern $gltype foo; extern $gltype1 foo;]])], [eval gl_cv_type_${gltype}_suffix=\$glsuf]) eval result=\$gl_cv_type_${gltype}_suffix test "$result" != no && break done]) GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` eval result=\$gl_cv_type_${gltype}_suffix test "$result" = no && result= eval ${GLTYPE}_SUFFIX=\$result AC_DEFINE_UNQUOTED([${GLTYPE}_SUFFIX], [$result]) done m4_foreach_w([gltype], [$1], [AC_SUBST(m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_])[_SUFFIX])]) ]) dnl gl_STDINT_INCLUDES AC_DEFUN([gl_STDINT_INCLUDES], [[ #include <stddef.h> #include <signal.h> #if HAVE_WCHAR_H # include <wchar.h> #endif ]]) dnl gl_STDINT_TYPE_PROPERTIES dnl Compute HAVE_SIGNED_t, BITSIZEOF_t and t_SUFFIX, for all the types t dnl of interest to stdint.in.h. AC_DEFUN([gl_STDINT_TYPE_PROPERTIES], [ AC_REQUIRE([gl_MULTIARCH]) if test $APPLE_UNIVERSAL_BUILD = 0; then gl_STDINT_BITSIZEOF([ptrdiff_t size_t], [gl_STDINT_INCLUDES]) fi gl_STDINT_BITSIZEOF([sig_atomic_t wchar_t wint_t], [gl_STDINT_INCLUDES]) gl_CHECK_TYPES_SIGNED([sig_atomic_t wchar_t wint_t], [gl_STDINT_INCLUDES]) gl_cv_type_ptrdiff_t_signed=yes gl_cv_type_size_t_signed=no if test $APPLE_UNIVERSAL_BUILD = 0; then gl_INTEGER_TYPE_SUFFIX([ptrdiff_t size_t], [gl_STDINT_INCLUDES]) fi gl_INTEGER_TYPE_SUFFIX([sig_atomic_t wchar_t wint_t], [gl_STDINT_INCLUDES]) dnl If wint_t is smaller than 'int', it cannot satisfy the ISO C 99 dnl requirement that wint_t is "unchanged by default argument promotions". dnl In this case gnulib's <wchar.h> and <wctype.h> override wint_t. dnl Set the variable BITSIZEOF_WINT_T accordingly. if test $GNULIBHEADERS_OVERRIDE_WINT_T = 1; then BITSIZEOF_WINT_T=32 fi ]) ���������������������������������������rush-2.4/m4/setlocale_null.m4�����������������������������������������������������������������������0000644�0001750�0001750�00000010214�14436424420�016116� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# setlocale_null.m4 serial 8 dnl Copyright (C) 2019-2023 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. AC_DEFUN([gl_FUNC_SETLOCALE_NULL], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([gl_PTHREADLIB]) AC_CHECK_HEADERS_ONCE([threads.h]) AC_CACHE_CHECK([whether setlocale (LC_ALL, NULL) is multithread-safe], [gl_cv_func_setlocale_null_all_mtsafe], [case "$host_os" in # Guess no on musl libc, macOS, FreeBSD, NetBSD, OpenBSD, AIX, Haiku. *-musl* | midipix* | darwin* | freebsd* | midnightbsd* | netbsd* | openbsd* | aix* | haiku*) gl_cv_func_setlocale_null_all_mtsafe=no ;; # Guess no on Cygwin < 3.4.6. cygwin*) AC_EGREP_CPP([Lucky user], [ #if defined __CYGWIN__ #include <cygwin/version.h> #if CYGWIN_VERSION_DLL_COMBINED >= CYGWIN_VERSION_DLL_MAKE_COMBINED (3004, 6) Lucky user #endif #endif ], [gl_cv_func_setlocale_null_all_mtsafe=yes], [gl_cv_func_setlocale_null_all_mtsafe=no]) ;; # Guess yes on glibc, HP-UX, IRIX, Solaris, native Windows. *-gnu* | gnu* | hpux* | irix* | solaris* | mingw*) gl_cv_func_setlocale_null_all_mtsafe=yes ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_setlocale_null_all_mtsafe="$gl_cross_guess_normal" ;; esac ]) dnl On platforms without multithreading, there is no issue. case "$host_os" in mingw*) ;; *) if test $gl_pthread_api = no && test $ac_cv_header_threads_h = no; then gl_cv_func_setlocale_null_all_mtsafe="trivially yes" fi ;; esac case "$gl_cv_func_setlocale_null_all_mtsafe" in *yes) SETLOCALE_NULL_ALL_MTSAFE=1 ;; *) SETLOCALE_NULL_ALL_MTSAFE=0 ;; esac AC_DEFINE_UNQUOTED([SETLOCALE_NULL_ALL_MTSAFE], [$SETLOCALE_NULL_ALL_MTSAFE], [Define to 1 if setlocale (LC_ALL, NULL) is multithread-safe.]) dnl This is about a single category (not LC_ALL). AC_CACHE_CHECK([whether setlocale (category, NULL) is multithread-safe], [gl_cv_func_setlocale_null_one_mtsafe], [case "$host_os" in # Guess no on OpenBSD, AIX. openbsd* | aix*) gl_cv_func_setlocale_null_one_mtsafe=no ;; # Guess yes on glibc, musl libc, macOS, FreeBSD, NetBSD, HP-UX, IRIX, Solaris, Haiku, Cygwin, native Windows. *-gnu* | gnu* | *-musl* | midipix* | darwin* | freebsd* | midnightbsd* | netbsd* | hpux* | irix* | solaris* | haiku* | cygwin* | mingw*) gl_cv_func_setlocale_null_one_mtsafe=yes ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_setlocale_null_one_mtsafe="$gl_cross_guess_normal" ;; esac ]) dnl On platforms without multithreading, there is no issue. case "$host_os" in mingw*) ;; *) if test $gl_pthread_api = no && test $ac_cv_header_threads_h = no; then gl_cv_func_setlocale_null_one_mtsafe="trivially yes" fi ;; esac case "$gl_cv_func_setlocale_null_one_mtsafe" in *yes) SETLOCALE_NULL_ONE_MTSAFE=1 ;; *) SETLOCALE_NULL_ONE_MTSAFE=0 ;; esac AC_DEFINE_UNQUOTED([SETLOCALE_NULL_ONE_MTSAFE], [$SETLOCALE_NULL_ONE_MTSAFE], [Define to 1 if setlocale (category, NULL) is multithread-safe.]) dnl Determine link dependencies of lib/setlocale_null.c and lib/setlocale-lock.c. if test $SETLOCALE_NULL_ALL_MTSAFE = 0 || test $SETLOCALE_NULL_ONE_MTSAFE = 0; then case "$host_os" in mingw*) SETLOCALE_NULL_LIB= ;; *) gl_WEAK_SYMBOLS case "$gl_cv_have_weak" in *yes) SETLOCALE_NULL_LIB= ;; *) SETLOCALE_NULL_LIB="$LIBPTHREAD" ;; esac ;; esac else SETLOCALE_NULL_LIB= fi dnl SETLOCALE_NULL_LIB is expected to be '-pthread' or '-lpthread' on AIX dnl with gcc or xlc, and empty otherwise. AC_SUBST([SETLOCALE_NULL_LIB]) dnl For backward compatibility. LIB_SETLOCALE_NULL="$SETLOCALE_NULL_LIB" AC_SUBST([LIB_SETLOCALE_NULL]) ]) # Prerequisites of lib/setlocale-lock.c. AC_DEFUN([gl_PREREQ_SETLOCALE_LOCK], [ gl_VISIBILITY ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/locale-fr.m4����������������������������������������������������������������������������0000644�0001750�0001750�00000024506�14436424420�014766� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# locale-fr.m4 serial 21 dnl Copyright (C) 2003, 2005-2023 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 Determine the name of a french locale with traditional encoding. AC_DEFUN_ONCE([gt_LOCALE_FR], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AM_LANGINFO_CODESET]) AC_CACHE_CHECK([for a traditional french locale], [gt_cv_locale_fr], [ AC_LANG_CONFTEST([AC_LANG_SOURCE([[ #include <locale.h> #include <time.h> #if HAVE_LANGINFO_CODESET # include <langinfo.h> #endif #include <stdlib.h> #include <string.h> struct tm t; char buf[16]; int main () { /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl imitates locale dependent behaviour by looking at the environment variables, and all locales use the UTF-8 encoding. */ #if defined __BEOS__ || defined __HAIKU__ return 1; #else /* Check whether the given locale name is recognized by the system. */ # if defined _WIN32 && !defined __CYGWIN__ /* On native Windows, setlocale(category, "") looks at the system settings, not at the environment variables. Also, when an encoding suffix such as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE category of the locale to "C". */ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) return 1; # else if (setlocale (LC_ALL, "") == NULL) return 1; # endif /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) is empty, and the behaviour of Tcl 8.4 in this locale is not useful. On OpenBSD 4.0, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "646". In this situation, some unit tests fail. On MirBSD 10, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "UTF-8". */ # if HAVE_LANGINFO_CODESET { const char *cs = nl_langinfo (CODESET); if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0 || strcmp (cs, "UTF-8") == 0) return 1; } # endif # ifdef __CYGWIN__ /* On Cygwin, avoid locale names without encoding suffix, because the locale_charset() function relies on the encoding suffix. Note that LC_ALL is set on the command line. */ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; # endif /* Check whether in the abbreviation of the second month, the second character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is only one byte long. This excludes the UTF-8 encoding. */ t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; if (strftime (buf, sizeof (buf), "%b", &t) < 3 || buf[2] != 'v') return 1; # if !defined __BIONIC__ /* Bionic libc's 'struct lconv' is just a dummy. */ /* Check whether the decimal separator is a comma. On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point are nl_langinfo(RADIXCHAR) are both ".". */ if (localeconv () ->decimal_point[0] != ',') return 1; # endif return 0; #endif } ]])]) if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then case "$host_os" in # Handle native Windows specially, because there setlocale() interprets # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", # "fr" or "fra" as "French" or "French_France.1252", # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", # "ja" as "Japanese" or "Japanese_Japan.932", # and similar. mingw*) # Test for the native Windows locale name. if (LC_ALL=French_France.1252 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=French_France.1252 else # None found. gt_cv_locale_fr=none fi ;; *) # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the # configure script would override the LC_ALL setting. Likewise for # LC_CTYPE, which is also set at the beginning of the configure script. # Test for the usual locale name. if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=fr_FR else # Test for the locale name with explicit encoding suffix. if (LC_ALL=fr_FR.ISO-8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=fr_FR.ISO-8859-1 else # Test for the AIX, OSF/1, FreeBSD, NetBSD, OpenBSD locale name. if (LC_ALL=fr_FR.ISO8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=fr_FR.ISO8859-1 else # Test for the HP-UX locale name. if (LC_ALL=fr_FR.iso88591 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=fr_FR.iso88591 else # Test for the Solaris 7 locale name. if (LC_ALL=fr LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=fr else # None found. gt_cv_locale_fr=none fi fi fi fi fi ;; esac fi rm -fr conftest* ]) LOCALE_FR=$gt_cv_locale_fr AC_SUBST([LOCALE_FR]) ]) dnl Determine the name of a french locale with UTF-8 encoding. AC_DEFUN_ONCE([gt_LOCALE_FR_UTF8], [ AC_REQUIRE([AM_LANGINFO_CODESET]) AC_CACHE_CHECK([for a french Unicode locale], [gt_cv_locale_fr_utf8], [ AC_LANG_CONFTEST([AC_LANG_SOURCE([[ #include <locale.h> #include <time.h> #if HAVE_LANGINFO_CODESET # include <langinfo.h> #endif #include <stdlib.h> #include <string.h> struct tm t; char buf[16]; int main () { /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl imitates locale dependent behaviour by looking at the environment variables, and all locales use the UTF-8 encoding. */ #if !(defined __BEOS__ || defined __HAIKU__) /* Check whether the given locale name is recognized by the system. */ # if defined _WIN32 && !defined __CYGWIN__ /* On native Windows, setlocale(category, "") looks at the system settings, not at the environment variables. Also, when an encoding suffix such as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE category of the locale to "C". */ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) return 1; # else if (setlocale (LC_ALL, "") == NULL) return 1; # endif /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) is empty, and the behaviour of Tcl 8.4 in this locale is not useful. On OpenBSD 4.0, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "646". In this situation, some unit tests fail. */ # if HAVE_LANGINFO_CODESET { const char *cs = nl_langinfo (CODESET); if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) return 1; } # endif # ifdef __CYGWIN__ /* On Cygwin, avoid locale names without encoding suffix, because the locale_charset() function relies on the encoding suffix. Note that LC_ALL is set on the command line. */ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; # endif /* Check whether in the abbreviation of the second month, the second character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is two bytes long, with UTF-8 encoding. */ t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; if (strftime (buf, sizeof (buf), "%b", &t) < 4 || buf[1] != (char) 0xc3 || buf[2] != (char) 0xa9 || buf[3] != 'v') return 1; #endif #if !defined __BIONIC__ /* Bionic libc's 'struct lconv' is just a dummy. */ /* Check whether the decimal separator is a comma. On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point are nl_langinfo(RADIXCHAR) are both ".". */ if (localeconv () ->decimal_point[0] != ',') return 1; #endif return 0; } ]])]) if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then case "$host_os" in # Handle native Windows specially, because there setlocale() interprets # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", # "fr" or "fra" as "French" or "French_France.1252", # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", # "ja" as "Japanese" or "Japanese_Japan.932", # and similar. mingw*) # Test for the hypothetical native Windows locale name. if (LC_ALL=French_France.65001 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr_utf8=French_France.65001 else # None found. gt_cv_locale_fr_utf8=none fi ;; *) # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the # configure script would override the LC_ALL setting. Likewise for # LC_CTYPE, which is also set at the beginning of the configure script. # Test for the usual locale name. if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr_utf8=fr_FR else # Test for the locale name with explicit encoding suffix. if (LC_ALL=fr_FR.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr_utf8=fr_FR.UTF-8 else # Test for the Solaris 7 locale name. if (LC_ALL=fr.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr_utf8=fr.UTF-8 else # None found. gt_cv_locale_fr_utf8=none fi fi fi ;; esac fi rm -fr conftest* ]) LOCALE_FR_UTF8=$gt_cv_locale_fr_utf8 AC_SUBST([LOCALE_FR_UTF8]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/regex.m4��������������������������������������������������������������������������������0000644�0001750�0001750�00000035752�14436424420�014241� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 74 # Copyright (C) 1996-2001, 2003-2023 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. dnl Initially derived from code in GNU grep. dnl Mostly written by Jim Meyering. AC_PREREQ([2.50]) AC_DEFUN([gl_REGEX], [ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_ARG_WITH([included-regex], [AS_HELP_STRING([[--without-included-regex]], [don't compile regex; this is the default on systems with recent-enough versions of the GNU C Library (use with caution on other systems).])]) case $with_included_regex in #( yes|no) ac_use_included_regex=$with_included_regex ;; '') # If the system regex support is good enough that it passes the # following run test, then default to *not* using the included regex.c. # If cross compiling, assume the test would fail and use the included # regex.c. AC_CHECK_DECLS_ONCE([alarm]) AC_CHECK_HEADERS_ONCE([malloc.h]) AC_CACHE_CHECK([for working re_compile_pattern], [gl_cv_func_re_compile_pattern_working], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <regex.h> #include <locale.h> #include <limits.h> #include <string.h> #if defined M_CHECK_ACTION || HAVE_DECL_ALARM # include <signal.h> # include <unistd.h> #endif #if HAVE_MALLOC_H # include <malloc.h> #endif #ifdef M_CHECK_ACTION /* Exit with distinguishable exit code. */ static void sigabrt_no_core (int sig) { raise (SIGTERM); } #endif ]], [[int result = 0; static struct re_pattern_buffer regex; unsigned char folded_chars[UCHAR_MAX + 1]; int i; const char *s; struct re_registers regs; /* Some builds of glibc go into an infinite loop on this test. Use alarm to force death, and mallopt to avoid malloc recursion in diagnosing the corrupted heap. */ #if HAVE_DECL_ALARM signal (SIGALRM, SIG_DFL); alarm (2); #endif #ifdef M_CHECK_ACTION signal (SIGABRT, sigabrt_no_core); mallopt (M_CHECK_ACTION, 2); #endif if (setlocale (LC_ALL, "en_US.UTF-8")) { { /* https://sourceware.org/ml/libc-hacker/2006-09/msg00008.html This test needs valgrind to catch the bug on Debian GNU/Linux 3.1 x86, but it might catch the bug better on other platforms and it shouldn't hurt to try the test here. */ static char const pat[] = "insert into"; static char const data[] = "\xFF\0\x12\xA2\xAA\xC4\xB1,K\x12\xC4\xB1*\xACK"; re_set_syntax (RE_SYNTAX_GREP | RE_HAT_LISTS_NOT_NEWLINE | RE_ICASE); memset (®ex, 0, sizeof regex); s = re_compile_pattern (pat, sizeof pat - 1, ®ex); if (s) result |= 1; else { if (re_search (®ex, data, sizeof data - 1, 0, sizeof data - 1, ®s) != -1) result |= 1; regfree (®ex); } } { /* This test is from glibc bug 15078. The test case is from Andreas Schwab in <https://sourceware.org/ml/libc-alpha/2013-01/msg00967.html>. */ static char const pat[] = "[^x]x"; static char const data[] = /* <U1000><U103B><U103D><U1014><U103A><U102F><U1015><U103A> */ "\xe1\x80\x80" "\xe1\x80\xbb" "\xe1\x80\xbd" "\xe1\x80\x94" "\xe1\x80\xba" "\xe1\x80\xaf" "\xe1\x80\x95" "\xe1\x80\xba" "x"; re_set_syntax (0); memset (®ex, 0, sizeof regex); s = re_compile_pattern (pat, sizeof pat - 1, ®ex); if (s) result |= 1; else { i = re_search (®ex, data, sizeof data - 1, 0, sizeof data - 1, 0); if (i != 0 && i != 21) result |= 1; regfree (®ex); } } if (! setlocale (LC_ALL, "C")) return 1; } /* This test is from glibc bug 3957, reported by Andrew Mackey. */ re_set_syntax (RE_SYNTAX_EGREP | RE_HAT_LISTS_NOT_NEWLINE); memset (®ex, 0, sizeof regex); s = re_compile_pattern ("a[^x]b", 6, ®ex); if (s) result |= 2; else { /* This should fail, but succeeds for glibc-2.5. */ if (re_search (®ex, "a\nb", 3, 0, 3, ®s) != -1) result |= 2; regfree (®ex); } /* This regular expression is from Spencer ere test number 75 in grep-2.3. */ re_set_syntax (RE_SYNTAX_POSIX_EGREP); memset (®ex, 0, sizeof regex); for (i = 0; i <= UCHAR_MAX; i++) folded_chars[i] = i; regex.translate = folded_chars; s = re_compile_pattern ("a[[:@:>@:]]b\n", 11, ®ex); /* This should fail with _Invalid character class name_ error. */ if (!s) { result |= 4; regfree (®ex); } /* Ensure that [b-a] is diagnosed as invalid, when using RE_NO_EMPTY_RANGES. */ re_set_syntax (RE_SYNTAX_POSIX_EGREP | RE_NO_EMPTY_RANGES); memset (®ex, 0, sizeof regex); s = re_compile_pattern ("a[b-a]", 6, ®ex); if (s == 0) { result |= 8; regfree (®ex); } /* This should succeed, but does not for glibc-2.1.3. */ memset (®ex, 0, sizeof regex); s = re_compile_pattern ("{1", 2, ®ex); if (s) result |= 8; else regfree (®ex); /* The following example is derived from a problem report against gawk from Jorge Stolfi <stolfi@ic.unicamp.br>. */ memset (®ex, 0, sizeof regex); s = re_compile_pattern ("[an\371]*n", 7, ®ex); if (s) result |= 8; else { /* This should match, but does not for glibc-2.2.1. */ if (re_match (®ex, "an", 2, 0, ®s) != 2) result |= 8; else { free (regs.start); free (regs.end); } regfree (®ex); } memset (®ex, 0, sizeof regex); s = re_compile_pattern ("x", 1, ®ex); if (s) result |= 8; else { /* glibc-2.2.93 does not work with a negative RANGE argument. */ if (re_search (®ex, "wxy", 3, 2, -2, ®s) != 1) result |= 8; else { free (regs.start); free (regs.end); } regfree (®ex); } /* The version of regex.c in older versions of gnulib ignored RE_ICASE. Detect that problem too. */ re_set_syntax (RE_SYNTAX_EMACS | RE_ICASE); memset (®ex, 0, sizeof regex); s = re_compile_pattern ("x", 1, ®ex); if (s) result |= 16; else { if (re_search (®ex, "WXY", 3, 0, 3, ®s) < 0) result |= 16; else { free (regs.start); free (regs.end); } regfree (®ex); } /* Catch a bug reported by Vin Shelton in https://lists.gnu.org/r/bug-coreutils/2007-06/msg00089.html */ re_set_syntax (RE_SYNTAX_POSIX_BASIC & ~RE_CONTEXT_INVALID_DUP & ~RE_NO_EMPTY_RANGES); memset (®ex, 0, sizeof regex); s = re_compile_pattern ("[[:alnum:]_-]\\\\+\$", 16, ®ex); if (s) result |= 32; else regfree (®ex); /* REG_STARTEND was added to glibc on 2004-01-15. Reject older versions. */ if (! REG_STARTEND) result |= 64; /* Matching with the compiled form of this regexp would provoke an assertion failure prior to glibc-2.28: regexec.c:1375: pop_fail_stack: Assertion 'num >= 0' failed With glibc-2.28, compilation fails and reports the invalid back reference. */ re_set_syntax (RE_SYNTAX_POSIX_EGREP); memset (®ex, 0, sizeof regex); s = re_compile_pattern ("0|()0|\\\\1|0", 10, ®ex); if (!s) { memset (®s, 0, sizeof regs); i = re_search (®ex, "x", 1, 0, 1, ®s); if (i != -1) result |= 64; if (0 <= i) { free (regs.start); free (regs.end); } regfree (®ex); } else { if (strcmp (s, "Invalid back reference")) result |= 64; } /* glibc bug 11053. */ re_set_syntax (RE_SYNTAX_POSIX_BASIC); memset (®ex, 0, sizeof regex); static char const pat_sub2[] = "\\\\(a*\\\\)*a*\\\\1"; s = re_compile_pattern (pat_sub2, sizeof pat_sub2 - 1, ®ex); if (s) result |= 64; else { memset (®s, 0, sizeof regs); static char const data[] = "a"; int datalen = sizeof data - 1; i = re_search (®ex, data, datalen, 0, datalen, ®s); if (i != 0) result |= 64; else if (regs.num_regs < 2) result |= 64; else if (! (regs.start[0] == 0 && regs.end[0] == 1)) result |= 64; else if (! (regs.start[1] == 0 && regs.end[1] == 0)) result |= 64; regfree (®ex); free (regs.start); free (regs.end); } #if 0 /* It would be nice to reject hosts whose regoff_t values are too narrow (including glibc on hosts with 64-bit ptrdiff_t and 32-bit int), but we should wait until glibc implements this feature. Otherwise, support for equivalence classes and multibyte collation symbols would always be broken except when compiling --without-included-regex. */ if (sizeof (regoff_t) < sizeof (ptrdiff_t) || sizeof (regoff_t) < sizeof (ssize_t)) result |= 64; #endif return result; ]])], [gl_cv_func_re_compile_pattern_working=yes], [gl_cv_func_re_compile_pattern_working=no], [case "$host_os" in # Guess no on native Windows. mingw*) gl_cv_func_re_compile_pattern_working="guessing no" ;; # Otherwise obey --enable-cross-guesses. *) gl_cv_func_re_compile_pattern_working="$gl_cross_guess_normal" ;; esac ]) ]) case "$gl_cv_func_re_compile_pattern_working" in #( *yes) ac_use_included_regex=no;; #( *no) ac_use_included_regex=yes;; esac ;; *) AC_MSG_ERROR([Invalid value for --with-included-regex: $with_included_regex]) ;; esac if test $ac_use_included_regex = yes; then AC_DEFINE([_REGEX_INCLUDE_LIMITS_H], [1], [Define if you want <regex.h> to include <limits.h>, so that it consistently overrides <limits.h>'s RE_DUP_MAX.]) AC_DEFINE([_REGEX_LARGE_OFFSETS], [1], [Define if you want regoff_t to be at least as wide POSIX requires.]) AC_DEFINE([re_syntax_options], [rpl_re_syntax_options], [Define to rpl_re_syntax_options if the replacement should be used.]) AC_DEFINE([re_set_syntax], [rpl_re_set_syntax], [Define to rpl_re_set_syntax if the replacement should be used.]) AC_DEFINE([re_compile_pattern], [rpl_re_compile_pattern], [Define to rpl_re_compile_pattern if the replacement should be used.]) AC_DEFINE([re_compile_fastmap], [rpl_re_compile_fastmap], [Define to rpl_re_compile_fastmap if the replacement should be used.]) AC_DEFINE([re_search], [rpl_re_search], [Define to rpl_re_search if the replacement should be used.]) AC_DEFINE([re_search_2], [rpl_re_search_2], [Define to rpl_re_search_2 if the replacement should be used.]) AC_DEFINE([re_match], [rpl_re_match], [Define to rpl_re_match if the replacement should be used.]) AC_DEFINE([re_match_2], [rpl_re_match_2], [Define to rpl_re_match_2 if the replacement should be used.]) AC_DEFINE([re_set_registers], [rpl_re_set_registers], [Define to rpl_re_set_registers if the replacement should be used.]) AC_DEFINE([re_comp], [rpl_re_comp], [Define to rpl_re_comp if the replacement should be used.]) AC_DEFINE([re_exec], [rpl_re_exec], [Define to rpl_re_exec if the replacement should be used.]) AC_DEFINE([regcomp], [rpl_regcomp], [Define to rpl_regcomp if the replacement should be used.]) AC_DEFINE([regexec], [rpl_regexec], [Define to rpl_regexec if the replacement should be used.]) AC_DEFINE([regerror], [rpl_regerror], [Define to rpl_regerror if the replacement should be used.]) AC_DEFINE([regfree], [rpl_regfree], [Define to rpl_regfree if the replacement should be used.]) fi ]) # Prerequisites of lib/regex.c and lib/regex_internal.c. AC_DEFUN([gl_PREREQ_REGEX], [ AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([AC_C_INLINE]) AC_REQUIRE([AC_C_RESTRICT]) AC_REQUIRE([AC_TYPE_MBSTATE_T]) AC_REQUIRE([gl_EEMALLOC]) AC_CHECK_HEADERS([libintl.h]) AC_CHECK_FUNCS_ONCE([isblank iswctype]) AC_CHECK_DECLS([isblank], [], [], [[#include <ctype.h>]]) ]) ����������������������rush-2.4/m4/limits-h.m4�����������������������������������������������������������������������������0000644�0001750�0001750�00000003314�14436424420�014642� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������dnl Check whether limits.h has needed features. dnl Copyright 2016-2023 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 Paul Eggert. AC_DEFUN_ONCE([gl_LIMITS_H], [ gl_CHECK_NEXT_HEADERS([limits.h]) AC_CACHE_CHECK([whether limits.h has WORD_BIT, BOOL_WIDTH etc.], [gl_cv_header_limits_width], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#ifndef __STDC_WANT_IEC_60559_BFP_EXT__ #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 #endif #include <limits.h> long long llm = LLONG_MAX; int wb = WORD_BIT; int ullw = ULLONG_WIDTH; int bw = BOOL_WIDTH; int bm = BOOL_MAX; int mblm = MB_LEN_MAX; ]])], [gl_cv_header_limits_width=yes], [gl_cv_header_limits_width=no])]) GL_GENERATE_LIMITS_H=true AS_IF([test "$gl_cv_header_limits_width" = yes], [AC_CACHE_CHECK([whether limits.h has SSIZE_MAX], [gl_cv_header_limits_ssize_max], [AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#include <limits.h> #ifndef SSIZE_MAX #error "SSIZE_MAX is not defined" #endif ]])], [gl_cv_header_limits_ssize_max=yes], [gl_cv_header_limits_ssize_max=no])]) if test "$gl_cv_header_limits_ssize_max" = yes; then GL_GENERATE_LIMITS_H=false fi]) ]) dnl Unconditionally enables the replacement of <limits.h>. AC_DEFUN([gl_REPLACE_LIMITS_H], [ AC_REQUIRE([gl_LIMITS_H]) GL_GENERATE_LIMITS_H=true ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/time_r.m4�������������������������������������������������������������������������������0000644�0001750�0001750�00000006525�14436424420�014402� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������dnl Reentrant time functions: localtime_r, gmtime_r. dnl Copyright (C) 2003, 2006-2023 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 Written by Paul Eggert. AC_DEFUN([gl_TIME_R], [ dnl Persuade glibc and Solaris <time.h> to declare localtime_r. AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_TIME_H_DEFAULTS]) AC_REQUIRE([AC_C_RESTRICT]) dnl Some systems don't declare localtime_r() and gmtime_r() if _REENTRANT is dnl not defined. AC_CHECK_DECLS([localtime_r], [], [], [[/* mingw's <time.h> provides the functions asctime_r, ctime_r, gmtime_r, localtime_r only if <unistd.h> or <pthread.h> has been included before. */ #if defined __MINGW32__ # include <unistd.h> #endif #include <time.h> ]]) if test $ac_cv_have_decl_localtime_r = no; then HAVE_DECL_LOCALTIME_R=0 fi AC_CHECK_FUNCS_ONCE([localtime_r]) if test $ac_cv_func_localtime_r = yes; then HAVE_LOCALTIME_R=1 AC_CACHE_CHECK([whether localtime_r is compatible with its POSIX signature], [gl_cv_time_r_posix], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[/* mingw's <time.h> provides the functions asctime_r, ctime_r, gmtime_r, localtime_r only if <unistd.h> or <pthread.h> has been included before. */ #if defined __MINGW32__ # include <unistd.h> #endif #include <time.h> ]], [[/* We don't need to append 'restrict's to the argument types, even though the POSIX signature has the 'restrict's, since C99 says they can't affect type compatibility. */ struct tm * (*ptr) (time_t const *, struct tm *) = localtime_r; if (ptr) return 0; /* Check the return type is a pointer. On HP-UX 10 it is 'int'. */ *localtime_r (0, 0);]]) ], [gl_cv_time_r_posix=yes], [gl_cv_time_r_posix=no]) ]) if test $gl_cv_time_r_posix = yes; then REPLACE_LOCALTIME_R=0 else REPLACE_LOCALTIME_R=1 fi else HAVE_LOCALTIME_R=0 dnl On mingw, localtime_r() is defined as an inline function; use through a dnl direct function call works but the use as a function pointer leads to a dnl link error. AC_CACHE_CHECK([whether localtime_r exists as an inline function], [gl_cv_func_localtime_r_inline], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[/* mingw's <time.h> provides the functions asctime_r, ctime_r, gmtime_r, localtime_r only if <unistd.h> or <pthread.h> has been included before. */ #if defined __MINGW32__ # include <unistd.h> #endif #include <time.h> ]], [[time_t a; struct tm r; localtime_r (&a, &r); ]]) ], [gl_cv_func_localtime_r_inline=yes], [gl_cv_func_localtime_r_inline=no]) ]) if test $gl_cv_func_localtime_r_inline = yes; then REPLACE_LOCALTIME_R=1 fi fi ]) # Prerequisites of lib/time_r.c. AC_DEFUN([gl_PREREQ_TIME_R], [ : ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/getdtablesize.m4������������������������������������������������������������������������0000644�0001750�0001750�00000005045�14436424420�015745� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# getdtablesize.m4 serial 8 dnl Copyright (C) 2008-2023 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. AC_DEFUN([gl_FUNC_GETDTABLESIZE], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_CHECK_FUNCS_ONCE([getdtablesize]) AC_CHECK_DECLS_ONCE([getdtablesize]) if test $ac_cv_func_getdtablesize = yes && test $ac_cv_have_decl_getdtablesize = yes; then AC_CACHE_CHECK([whether getdtablesize works], [gl_cv_func_getdtablesize_works], [dnl There are two concepts: the "maximum possible file descriptor value + 1" dnl and the "maximum number of open file descriptors in a process". dnl Per SUSv2 and POSIX, getdtablesize() should return the first one. dnl On most platforms, the first and the second concept are the same. dnl On OpenVMS, however, they are different and getdtablesize() returns dnl the second one; thus the test below fails. But we don't care dnl because there's no good way to write a replacement getdtablesize(). case "$host_os" in vms*) gl_cv_func_getdtablesize_works="no (limitation)" ;; *) dnl Cygwin 1.7.25 automatically increases the RLIMIT_NOFILE soft dnl limit up to an unchangeable hard limit; all other platforms dnl correctly require setrlimit before getdtablesize() can report dnl a larger value. AC_RUN_IFELSE([ AC_LANG_PROGRAM( [[#include <unistd.h>] GL_MDA_DEFINES ], [[int size = getdtablesize(); if (dup2 (0, getdtablesize()) != -1) return 1; if (size != getdtablesize()) return 2; ]])], [gl_cv_func_getdtablesize_works=yes], [gl_cv_func_getdtablesize_works=no], [case "$host_os" in cygwin*) # on cygwin 1.5.25, getdtablesize() automatically grows gl_cv_func_getdtablesize_works="guessing no" ;; *) gl_cv_func_getdtablesize_works="guessing yes" ;; esac ]) ;; esac ]) case "$gl_cv_func_getdtablesize_works" in *yes | "no (limitation)") ;; *) REPLACE_GETDTABLESIZE=1 ;; esac else HAVE_GETDTABLESIZE=0 fi ]) # Prerequisites of lib/getdtablesize.c. AC_DEFUN([gl_PREREQ_GETDTABLESIZE], [:]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/tzset.m4��������������������������������������������������������������������������������0000644�0001750�0001750�00000000754�14436424420�014272� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 16 # Copyright (C) 2003, 2007, 2009-2023 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. # Written by Paul Eggert and Jim Meyering. AC_DEFUN([gl_FUNC_TZSET], [ AC_REQUIRE([gl_TIME_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) REPLACE_TZSET=0 case "$host_os" in mingw*) REPLACE_TZSET=1 ;; esac ]) ��������������������rush-2.4/m4/mbstate_t.m4����������������������������������������������������������������������������0000644�0001750�0001750�00000002210�14436424420�015070� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# mbstate_t.m4 serial 14 dnl Copyright (C) 2000-2002, 2008-2023 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. # From Paul Eggert. # BeOS 5 has <wchar.h> but does not define mbstate_t, # so you can't declare an object of that type. # Check for this incompatibility with Standard C. # AC_TYPE_MBSTATE_T # ----------------- AC_DEFUN([AC_TYPE_MBSTATE_T], [ AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) dnl for HP-UX 11.11 AC_CACHE_CHECK([for mbstate_t], [ac_cv_type_mbstate_t], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [AC_INCLUDES_DEFAULT[ #include <wchar.h>]], [[mbstate_t x; return sizeof x;]])], [ac_cv_type_mbstate_t=yes], [ac_cv_type_mbstate_t=no])]) if test $ac_cv_type_mbstate_t = yes; then AC_DEFINE([HAVE_MBSTATE_T], [1], [Define to 1 if <wchar.h> declares mbstate_t.]) else AC_DEFINE([mbstate_t], [int], [Define to a type if <wchar.h> does not define.]) fi ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/strerror.m4�����������������������������������������������������������������������������0000644�0001750�0001750�00000007311�14436424420�014777� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# strerror.m4 serial 24 dnl Copyright (C) 2002, 2007-2023 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. AC_DEFUN([gl_FUNC_STRERROR], [ AC_REQUIRE([gl_STRING_H_DEFAULTS]) AC_REQUIRE([gl_HEADER_ERRNO_H]) AC_REQUIRE([gl_FUNC_STRERROR_0]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles m4_ifdef([gl_FUNC_STRERROR_R_WORKS], [ AC_REQUIRE([gl_FUNC_STRERROR_R_WORKS]) ]) if test "$GL_GENERATE_ERRNO_H:$REPLACE_STRERROR_0" = false:0; then AC_CACHE_CHECK([for working strerror function], [gl_cv_func_working_strerror], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <string.h> ]], [[if (!*strerror (-2)) return 1;]])], [gl_cv_func_working_strerror=yes], [gl_cv_func_working_strerror=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_working_strerror="guessing yes" ;; # Guess yes on musl systems. *-musl* | midipix*) gl_cv_func_working_strerror="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_working_strerror="$gl_cross_guess_normal" ;; esac ]) ]) case "$gl_cv_func_working_strerror" in *yes) ;; *) dnl The system's strerror() fails to return a string for out-of-range dnl integers. Replace it. REPLACE_STRERROR=1 ;; esac m4_ifdef([gl_FUNC_STRERROR_R_WORKS], [ dnl If the system's strerror_r or __xpg_strerror_r clobbers strerror's dnl buffer, we must replace strerror. case "$gl_cv_func_strerror_r_works" in *no) REPLACE_STRERROR=1 ;; esac ]) else dnl The system's strerror() cannot know about the new errno values we add dnl to <errno.h>, or any fix for strerror(0). Replace it. REPLACE_STRERROR=1 fi ]) dnl Detect if strerror(0) passes (that is, does not set errno, and does not dnl return a string that matches strerror(-1)). AC_DEFUN([gl_FUNC_STRERROR_0], [ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles REPLACE_STRERROR_0=0 AC_CACHE_CHECK([whether strerror(0) succeeds], [gl_cv_func_strerror_0_works], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <string.h> #include <errno.h> ]], [[int result = 0; char *str; errno = 0; str = strerror (0); if (!*str) result |= 1; if (errno) result |= 2; if (strstr (str, "nknown") || strstr (str, "ndefined")) result |= 4; return result;]])], [gl_cv_func_strerror_0_works=yes], [gl_cv_func_strerror_0_works=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_strerror_0_works="guessing yes" ;; # Guess yes on musl systems. *-musl* | midipix*) gl_cv_func_strerror_0_works="guessing yes" ;; # Guess yes on native Windows. mingw*) gl_cv_func_strerror_0_works="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_strerror_0_works="$gl_cross_guess_normal" ;; esac ]) ]) case "$gl_cv_func_strerror_0_works" in *yes) ;; *) REPLACE_STRERROR_0=1 AC_DEFINE([REPLACE_STRERROR_0], [1], [Define to 1 if strerror(0) does not return a message implying success.]) ;; esac ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/string_h.m4�����������������������������������������������������������������������������0000644�0001750�0001750�00000016503�14436424420�014735� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Configure a GNU-like replacement for <string.h>. # Copyright (C) 2007-2023 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. # serial 37 # Written by Paul Eggert. AC_DEFUN_ONCE([gl_STRING_H], [ dnl Ensure to expand the default settings once only, before all statements dnl that occur in other macros. AC_REQUIRE([gl_STRING_H_DEFAULTS]) gl_NEXT_HEADERS([string.h]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use, and which is not dnl guaranteed by C89. gl_WARN_ON_USE_PREPARE([[#include <string.h> ]], [explicit_bzero ffsl ffsll memmem mempcpy memrchr memset_explicit rawmemchr stpcpy stpncpy strchrnul strdup strncat strndup strnlen strpbrk strsep strcasestr strtok_r strerror_r strerrorname_np sigabbrev_np sigdescr_np strsignal strverscmp]) AC_REQUIRE([AC_C_RESTRICT]) ]) # gl_STRING_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_STRING_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_STRING_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_STRING_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_STRING_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXPLICIT_BZERO]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FFSL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FFSLL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MEMCHR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MEMMEM]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MEMPCPY]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MEMRCHR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MEMSET_EXPLICIT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RAWMEMCHR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STPCPY]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STPNCPY]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRCHRNUL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRDUP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRNCAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRNDUP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRNLEN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRPBRK]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRSEP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRSTR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRCASESTR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRTOK_R]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSLEN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSNLEN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSCHR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSRCHR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSSTR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSCASECMP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSNCASECMP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSPCASECMP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSCASESTR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSCSPN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSPBRK]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSSPN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSSEP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSTOK_R]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRERROR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRERROR_R]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRERRORNAME_NP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SIGABBREV_NP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SIGDESCR_NP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRSIGNAL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRVERSCMP]) dnl Support Microsoft deprecated alias function names by default. gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_MEMCCPY], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_STRDUP], [1]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_STRING_H_MODULE_INDICATOR_DEFAULTS]) dnl Make sure the shell variable for GNULIB_FREE_POSIX is initialized. gl_STDLIB_H_REQUIRE_DEFAULTS AC_REQUIRE([gl_STRING_H_DEFAULTS]) ]) AC_DEFUN([gl_STRING_H_DEFAULTS], [ HAVE_MBSLEN=0; AC_SUBST([HAVE_MBSLEN]) dnl Assume proper GNU behavior unless another module says otherwise. HAVE_EXPLICIT_BZERO=1; AC_SUBST([HAVE_EXPLICIT_BZERO]) HAVE_FFSL=1; AC_SUBST([HAVE_FFSL]) HAVE_FFSLL=1; AC_SUBST([HAVE_FFSLL]) HAVE_DECL_MEMMEM=1; AC_SUBST([HAVE_DECL_MEMMEM]) HAVE_MEMPCPY=1; AC_SUBST([HAVE_MEMPCPY]) HAVE_MEMSET_EXPLICIT=1; AC_SUBST([HAVE_MEMSET_EXPLICIT]) HAVE_DECL_MEMRCHR=1; AC_SUBST([HAVE_DECL_MEMRCHR]) HAVE_RAWMEMCHR=1; AC_SUBST([HAVE_RAWMEMCHR]) HAVE_STPCPY=1; AC_SUBST([HAVE_STPCPY]) HAVE_STPNCPY=1; AC_SUBST([HAVE_STPNCPY]) HAVE_STRCHRNUL=1; AC_SUBST([HAVE_STRCHRNUL]) HAVE_DECL_STRDUP=1; AC_SUBST([HAVE_DECL_STRDUP]) HAVE_DECL_STRNDUP=1; AC_SUBST([HAVE_DECL_STRNDUP]) HAVE_DECL_STRNLEN=1; AC_SUBST([HAVE_DECL_STRNLEN]) HAVE_STRPBRK=1; AC_SUBST([HAVE_STRPBRK]) HAVE_STRSEP=1; AC_SUBST([HAVE_STRSEP]) HAVE_STRCASESTR=1; AC_SUBST([HAVE_STRCASESTR]) HAVE_DECL_STRTOK_R=1; AC_SUBST([HAVE_DECL_STRTOK_R]) HAVE_DECL_STRERROR_R=1; AC_SUBST([HAVE_DECL_STRERROR_R]) HAVE_STRERRORNAME_NP=1; AC_SUBST([HAVE_STRERRORNAME_NP]) HAVE_SIGABBREV_NP=1; AC_SUBST([HAVE_SIGABBREV_NP]) HAVE_SIGDESCR_NP=1; AC_SUBST([HAVE_SIGDESCR_NP]) HAVE_DECL_STRSIGNAL=1; AC_SUBST([HAVE_DECL_STRSIGNAL]) HAVE_STRVERSCMP=1; AC_SUBST([HAVE_STRVERSCMP]) REPLACE_FFSLL=0; AC_SUBST([REPLACE_FFSLL]) REPLACE_MEMCHR=0; AC_SUBST([REPLACE_MEMCHR]) REPLACE_MEMMEM=0; AC_SUBST([REPLACE_MEMMEM]) REPLACE_MEMPCPY=0; AC_SUBST([REPLACE_MEMPCPY]) REPLACE_STPCPY=0; AC_SUBST([REPLACE_STPCPY]) REPLACE_STPNCPY=0; AC_SUBST([REPLACE_STPNCPY]) REPLACE_STRCHRNUL=0; AC_SUBST([REPLACE_STRCHRNUL]) REPLACE_STRDUP=0; AC_SUBST([REPLACE_STRDUP]) REPLACE_STRNCAT=0; AC_SUBST([REPLACE_STRNCAT]) REPLACE_STRNDUP=0; AC_SUBST([REPLACE_STRNDUP]) REPLACE_STRNLEN=0; AC_SUBST([REPLACE_STRNLEN]) REPLACE_STRSTR=0; AC_SUBST([REPLACE_STRSTR]) REPLACE_STRCASESTR=0; AC_SUBST([REPLACE_STRCASESTR]) REPLACE_STRTOK_R=0; AC_SUBST([REPLACE_STRTOK_R]) REPLACE_STRERROR=0; AC_SUBST([REPLACE_STRERROR]) REPLACE_STRERROR_R=0; AC_SUBST([REPLACE_STRERROR_R]) REPLACE_STRERRORNAME_NP=0; AC_SUBST([REPLACE_STRERRORNAME_NP]) REPLACE_STRSIGNAL=0; AC_SUBST([REPLACE_STRSIGNAL]) UNDEFINE_STRTOK_R=0; AC_SUBST([UNDEFINE_STRTOK_R]) ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/lib-ld.m4�������������������������������������������������������������������������������0000644�0001750�0001750�00000007143�14436425501�014264� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# lib-ld.m4 serial 6 dnl Copyright (C) 1996-2003, 2009-2014 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/_*LT_PATH/AC_LIB_PROG/ and s/lt_/acl_/ to avoid dnl collision with libtool.m4. dnl From libtool-2.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 lds 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-2.4. Sets the variable LD. AC_DEFUN([AC_LIB_PROG_LD], [AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_ARG_WITH([gnu-ld], [AS_HELP_STRING([--with-gnu-ld], [assume the C compiler uses GNU ld [default=no]])], [test "$withval" = no || with_gnu_ld=yes], [with_gnu_ld=no])dnl # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which # contains only /bin. Note that ksh looks also at the FPATH variable, # so we have to set that as well for the test. 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 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 $CC]) 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. [[\\/]]* | ?:[[\\/]]*) re_direlt='/[[^/]][[^/]]*/\.\./' # Canonicalize the pathname 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 acl_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$acl_save_ifs" 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 variants of GNU ld 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="$acl_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 ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/builtin-expect.m4�����������������������������������������������������������������������0000644�0001750�0001750�00000003023�14436424420�016045� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������dnl Check for __builtin_expect. dnl Copyright 2016-2023 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 Written by Paul Eggert. AC_DEFUN([gl___BUILTIN_EXPECT], [ AC_CACHE_CHECK([for __builtin_expect], [gl_cv___builtin_expect], [AC_LINK_IFELSE( [AC_LANG_SOURCE([[ int main (int argc, char **argv) { argc = __builtin_expect (argc, 100); return argv[argc != 100][0]; }]])], [gl_cv___builtin_expect=yes], [AC_LINK_IFELSE( [AC_LANG_SOURCE([[ #include <builtins.h> int main (int argc, char **argv) { argc = __builtin_expect (argc, 100); return argv[argc != 100][0]; }]])], [gl_cv___builtin_expect="in <builtins.h>"], [gl_cv___builtin_expect=no])])]) if test "$gl_cv___builtin_expect" = yes; then AC_DEFINE([HAVE___BUILTIN_EXPECT], [1]) elif test "$gl_cv___builtin_expect" = "in <builtins.h>"; then AC_DEFINE([HAVE___BUILTIN_EXPECT], [2]) fi AH_VERBATIM([HAVE___BUILTIN_EXPECT], [/* Define to 1 if the compiler supports __builtin_expect, and to 2 if <builtins.h> does. */ #undef HAVE___BUILTIN_EXPECT #ifndef HAVE___BUILTIN_EXPECT # define __builtin_expect(e, c) (e) #elif HAVE___BUILTIN_EXPECT == 2 # include <builtins.h> #endif ]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/close.m4��������������������������������������������������������������������������������0000644�0001750�0001750�00000002227�14436424420�014223� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# close.m4 serial 10 dnl Copyright (C) 2008-2023 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. AC_DEFUN_ONCE([gl_FUNC_CLOSE], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) m4_ifdef([gl_MSVC_INVAL], [ AC_REQUIRE([gl_MSVC_INVAL]) if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then REPLACE_CLOSE=1 fi ]) m4_ifdef([gl_PREREQ_SYS_H_WINSOCK2], [ gl_PREREQ_SYS_H_WINSOCK2 if test $UNISTD_H_HAVE_WINSOCK2_H = 1; then dnl Even if the 'socket' module is not used here, another part of the dnl application may use it and pass file descriptors that refer to dnl sockets to the close() function. So enable the support for sockets. REPLACE_CLOSE=1 fi ]) dnl Replace close() for supporting the gnulib-defined fchdir() function, dnl to keep fchdir's bookkeeping up-to-date. m4_ifdef([gl_FUNC_FCHDIR], [ if test $REPLACE_CLOSE = 0; then gl_TEST_FCHDIR if test $HAVE_FCHDIR = 0; then REPLACE_CLOSE=1 fi fi ]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/error_h.m4������������������������������������������������������������������������������0000644�0001750�0001750�00000007516�14436424420�014564� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# error_h.m4 serial 4 dnl Copyright (C) 1996-2023 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 Provide a working "error.h". AC_DEFUN_ONCE([gl_ERROR_H], [ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles gl_CHECK_NEXT_HEADERS([error.h]) if test $ac_cv_header_error_h = yes; then HAVE_ERROR_H=1 else HAVE_ERROR_H=0 fi AC_SUBST([HAVE_ERROR_H]) REPLACE_ERROR=0 gl_CHECK_FUNCS_ANDROID([error], [[#include <error.h>]]) if test $ac_cv_func_error = yes; then HAVE_ERROR=1 else HAVE_ERROR=0 case "$gl_cv_onwards_func_error" in future*) REPLACE_ERROR=1 ;; esac fi dnl We don't use AC_FUNC_ERROR_AT_LINE any more, because it is no longer dnl maintained in Autoconf and because it invokes AC_LIBOBJ. dnl We need to notice a missing declaration, like gl_CHECK_FUNCS_ANDROID does. AC_CHECK_DECL([error_at_line], , , [[#include <error.h>]]) if test $ac_cv_have_decl_error_at_line = yes; then AC_CACHE_CHECK([for error_at_line], [ac_cv_lib_error_at_line], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <error.h>]], [[error_at_line (0, 0, "", 0, "an error occurred");]])], [ac_cv_lib_error_at_line=yes], [ac_cv_lib_error_at_line=no])]) else ac_cv_lib_error_at_line=no fi if test $ac_cv_lib_error_at_line = yes; then HAVE_ERROR_AT_LINE=1 else HAVE_ERROR_AT_LINE=0 fi REPLACE_ERROR_AT_LINE=0 if test $ac_cv_func_error = yes && test $ac_cv_lib_error_at_line = yes; then dnl On Android 11, when error_print_progname is set, the output of the dnl error() function contains an extra space. AC_CACHE_CHECK([for working error function], [gl_cv_func_working_error], [if test $cross_compiling != yes; then AC_LINK_IFELSE( [AC_LANG_PROGRAM([[ #include <error.h> static void print_no_progname (void) {} ]], [[ error_print_progname = print_no_progname; error (0, 0, "foo"); ]]) ], [rm -f conftest.out if test -s conftest$ac_exeext \ && ./conftest$ac_exeext 2> conftest.out; then if grep ' ' conftest.out >/dev/null; then gl_cv_func_working_error=no else gl_cv_func_working_error=yes fi else gl_cv_func_working_error=no fi rm -f conftest.out ], [gl_cv_func_working_error=no]) else AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[ #include <error.h> ]], [[ error (0, 0, "foo"); ]]) ], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_working_error="guessing yes" ;; # Guess no on Android. linux*-android*) gl_cv_func_working_error="guessing no" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_working_error="$gl_cross_guess_normal" ;; esac ], [gl_cv_func_working_error=no]) fi ]) case "$gl_cv_func_working_error" in *no) REPLACE_ERROR=1 REPLACE_ERROR_AT_LINE=1 ;; esac fi if test $HAVE_ERROR = 0 || test $REPLACE_ERROR = 1 \ || test $HAVE_ERROR_AT_LINE = 0 || test $REPLACE_ERROR_AT_LINE = 1; then COMPILE_ERROR_C=1 else COMPILE_ERROR_C=0 fi AC_SUBST([HAVE_ERROR]) AC_SUBST([HAVE_ERROR_AT_LINE]) AC_SUBST([REPLACE_ERROR]) AC_SUBST([REPLACE_ERROR_AT_LINE]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/time_h.m4�������������������������������������������������������������������������������0000644�0001750�0001750�00000017036�14436424420�014367� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Configure a more-standard replacement for <time.h>. # Copyright (C) 2000-2001, 2003-2007, 2009-2023 Free Software Foundation, Inc. # serial 22 # 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. # Written by Paul Eggert and Jim Meyering. AC_DEFUN_ONCE([gl_TIME_H], [ dnl Ensure to expand the default settings once only, before all statements dnl that occur in other macros. AC_REQUIRE([gl_TIME_H_DEFAULTS]) gl_NEXT_HEADERS([time.h]) AC_REQUIRE([gl_CHECK_TYPE_STRUCT_TIMESPEC]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[ #include <time.h> ]], [asctime_r ctime_r]) AC_REQUIRE([AC_C_RESTRICT]) AC_CACHE_CHECK([for TIME_UTC in <time.h>], [gl_cv_time_h_has_TIME_UTC], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <time.h> ]], [[static int x = TIME_UTC; x++;]])], [gl_cv_time_h_has_TIME_UTC=yes], [gl_cv_time_h_has_TIME_UTC=no])]) if test $gl_cv_time_h_has_TIME_UTC = yes; then TIME_H_DEFINES_TIME_UTC=1 else TIME_H_DEFINES_TIME_UTC=0 fi AC_SUBST([TIME_H_DEFINES_TIME_UTC]) ]) dnl Check whether 'struct timespec' is declared dnl in time.h, sys/time.h, pthread.h, or unistd.h. AC_DEFUN([gl_CHECK_TYPE_STRUCT_TIMESPEC], [ AC_CHECK_HEADERS_ONCE([sys/time.h]) AC_CACHE_CHECK([for struct timespec in <time.h>], [gl_cv_sys_struct_timespec_in_time_h], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <time.h> ]], [[static struct timespec x; x.tv_sec = x.tv_nsec;]])], [gl_cv_sys_struct_timespec_in_time_h=yes], [gl_cv_sys_struct_timespec_in_time_h=no])]) TIME_H_DEFINES_STRUCT_TIMESPEC=0 SYS_TIME_H_DEFINES_STRUCT_TIMESPEC=0 PTHREAD_H_DEFINES_STRUCT_TIMESPEC=0 UNISTD_H_DEFINES_STRUCT_TIMESPEC=0 if test $gl_cv_sys_struct_timespec_in_time_h = yes; then TIME_H_DEFINES_STRUCT_TIMESPEC=1 else AC_CACHE_CHECK([for struct timespec in <sys/time.h>], [gl_cv_sys_struct_timespec_in_sys_time_h], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <sys/time.h> ]], [[static struct timespec x; x.tv_sec = x.tv_nsec;]])], [gl_cv_sys_struct_timespec_in_sys_time_h=yes], [gl_cv_sys_struct_timespec_in_sys_time_h=no])]) if test $gl_cv_sys_struct_timespec_in_sys_time_h = yes; then SYS_TIME_H_DEFINES_STRUCT_TIMESPEC=1 else AC_CACHE_CHECK([for struct timespec in <pthread.h>], [gl_cv_sys_struct_timespec_in_pthread_h], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <pthread.h> ]], [[static struct timespec x; x.tv_sec = x.tv_nsec;]])], [gl_cv_sys_struct_timespec_in_pthread_h=yes], [gl_cv_sys_struct_timespec_in_pthread_h=no])]) if test $gl_cv_sys_struct_timespec_in_pthread_h = yes; then PTHREAD_H_DEFINES_STRUCT_TIMESPEC=1 else AC_CACHE_CHECK([for struct timespec in <unistd.h>], [gl_cv_sys_struct_timespec_in_unistd_h], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <unistd.h> ]], [[static struct timespec x; x.tv_sec = x.tv_nsec;]])], [gl_cv_sys_struct_timespec_in_unistd_h=yes], [gl_cv_sys_struct_timespec_in_unistd_h=no])]) if test $gl_cv_sys_struct_timespec_in_unistd_h = yes; then UNISTD_H_DEFINES_STRUCT_TIMESPEC=1 fi fi fi fi AC_SUBST([TIME_H_DEFINES_STRUCT_TIMESPEC]) AC_SUBST([SYS_TIME_H_DEFINES_STRUCT_TIMESPEC]) AC_SUBST([PTHREAD_H_DEFINES_STRUCT_TIMESPEC]) AC_SUBST([UNISTD_H_DEFINES_STRUCT_TIMESPEC]) ]) # gl_TIME_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_TIME_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_TIME_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_TIME_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_TIME_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CTIME]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MKTIME]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOCALTIME]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_NANOSLEEP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRFTIME]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRPTIME]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TIME]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TIMEGM]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TIMESPEC_GET]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TIMESPEC_GETRES]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TIME_R]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TIME_RZ]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TZSET]) dnl Support Microsoft deprecated alias function names by default. gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_TZSET], [1]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_TIME_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_TIME_H_DEFAULTS]) ]) AC_DEFUN([gl_TIME_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_DECL_LOCALTIME_R=1; AC_SUBST([HAVE_DECL_LOCALTIME_R]) HAVE_NANOSLEEP=1; AC_SUBST([HAVE_NANOSLEEP]) HAVE_STRPTIME=1; AC_SUBST([HAVE_STRPTIME]) HAVE_TIMEGM=1; AC_SUBST([HAVE_TIMEGM]) HAVE_TIMESPEC_GET=1; AC_SUBST([HAVE_TIMESPEC_GET]) HAVE_TIMESPEC_GETRES=1; AC_SUBST([HAVE_TIMESPEC_GETRES]) dnl Even GNU libc does not have timezone_t yet. HAVE_TIMEZONE_T=0; AC_SUBST([HAVE_TIMEZONE_T]) dnl If another module says to replace or to not replace, do that. dnl Otherwise, replace only if someone compiles with -DGNULIB_PORTCHECK; dnl this lets maintainers check for portability. REPLACE_CTIME=GNULIB_PORTCHECK; AC_SUBST([REPLACE_CTIME]) REPLACE_LOCALTIME_R=GNULIB_PORTCHECK; AC_SUBST([REPLACE_LOCALTIME_R]) REPLACE_MKTIME=GNULIB_PORTCHECK; AC_SUBST([REPLACE_MKTIME]) REPLACE_NANOSLEEP=GNULIB_PORTCHECK; AC_SUBST([REPLACE_NANOSLEEP]) REPLACE_STRFTIME=GNULIB_PORTCHECK; AC_SUBST([REPLACE_STRFTIME]) REPLACE_TIME=0; AC_SUBST([REPLACE_TIME]) REPLACE_TIMEGM=GNULIB_PORTCHECK; AC_SUBST([REPLACE_TIMEGM]) REPLACE_TIMESPEC_GET=GNULIB_PORTCHECK; AC_SUBST([REPLACE_TIMESPEC_GET]) REPLACE_TZSET=GNULIB_PORTCHECK; AC_SUBST([REPLACE_TZSET]) dnl Hack so that the time module doesn't depend on the sys_time module. dnl First, default GNULIB_GETTIMEOFDAY to 0 if sys_time is absent. : ${GNULIB_GETTIMEOFDAY=0}; AC_SUBST([GNULIB_GETTIMEOFDAY]) dnl Second, it's OK to not use GNULIB_PORTCHECK for REPLACE_GMTIME dnl and REPLACE_LOCALTIME, as portability to Solaris 2.6 and earlier dnl is no longer a big deal. REPLACE_GMTIME=0; AC_SUBST([REPLACE_GMTIME]) REPLACE_LOCALTIME=0; AC_SUBST([REPLACE_LOCALTIME]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/fcntl_h.m4������������������������������������������������������������������������������0000644�0001750�0001750�00000005206�14436424420�014533� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 20 # Configure fcntl.h. dnl Copyright (C) 2006-2007, 2009-2023 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 Written by Paul Eggert. AC_DEFUN_ONCE([gl_FCNTL_H], [ AC_REQUIRE([gl_FCNTL_H_DEFAULTS]) AC_REQUIRE([gl_FCNTL_O_FLAGS]) gl_NEXT_HEADERS([fcntl.h]) dnl Ensure the type pid_t gets defined. AC_REQUIRE([AC_TYPE_PID_T]) dnl Ensure the type mode_t gets defined. AC_REQUIRE([AC_TYPE_MODE_T]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use, if it is not common dnl enough to be declared everywhere. gl_WARN_ON_USE_PREPARE([[#include <fcntl.h> ]], [fcntl openat]) ]) # gl_FCNTL_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_FCNTL_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_FCNTL_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_FCNTL_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_FCNTL_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CREAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FCNTL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_NONBLOCKING]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_OPEN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_OPENAT]) dnl Support Microsoft deprecated alias function names by default. gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_CREAT], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_OPEN], [1]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_FCNTL_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_FCNTL_H_DEFAULTS]) ]) AC_DEFUN([gl_FCNTL_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_FCNTL=1; AC_SUBST([HAVE_FCNTL]) HAVE_OPENAT=1; AC_SUBST([HAVE_OPENAT]) REPLACE_CREAT=0; AC_SUBST([REPLACE_CREAT]) REPLACE_FCNTL=0; AC_SUBST([REPLACE_FCNTL]) REPLACE_OPEN=0; AC_SUBST([REPLACE_OPEN]) REPLACE_OPENAT=0; AC_SUBST([REPLACE_OPENAT]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/free.m4���������������������������������������������������������������������������������0000644�0001750�0001750�00000003710�14436424420�014035� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# free.m4 serial 6 # Copyright (C) 2003-2005, 2009-2023 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. # Written by Paul Eggert and Bruno Haible. AC_DEFUN([gl_FUNC_FREE], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) dnl In the next release of POSIX, free must preserve errno. dnl https://www.austingroupbugs.net/view.php?id=385 dnl https://sourceware.org/bugzilla/show_bug.cgi?id=17924 dnl So far, we know of three platforms that do this: dnl * glibc >= 2.33, thanks to the fix for this bug: dnl <https://sourceware.org/bugzilla/show_bug.cgi?id=17924> dnl * OpenBSD >= 4.5, thanks to this commit: dnl <https://cvsweb.openbsd.org/cgi-bin/cvsweb/src/lib/libc/stdlib/malloc.c.diff?r1=1.100&r2=1.101&f=h> dnl * Solaris, because its malloc() implementation is based on brk(), dnl not mmap(); hence its free() implementation makes no system calls. dnl For other platforms, you can only be sure if they state it in their dnl documentation, or by code inspection of the free() implementation in libc. AC_CACHE_CHECK([whether free is known to preserve errno], [gl_cv_func_free_preserves_errno], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <stdlib.h> ]], [[#if 2 < __GLIBC__ + (33 <= __GLIBC_MINOR__) #elif defined __OpenBSD__ #elif defined __sun #else #error "'free' is not known to preserve errno" #endif ]])], [gl_cv_func_free_preserves_errno=yes], [gl_cv_func_free_preserves_errno=no]) ]) case $gl_cv_func_free_preserves_errno in *yes) AC_DEFINE([HAVE_FREE_POSIX], [1], [Define if the 'free' function is guaranteed to preserve errno.]) ;; *) REPLACE_FREE=1 ;; esac ]) # Prerequisites of lib/free.c. AC_DEFUN([gl_PREREQ_FREE], [:]) ��������������������������������������������������������rush-2.4/m4/locale-zh.m4����������������������������������������������������������������������������0000644�0001750�0001750�00000012617�14436424420�015000� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# locale-zh.m4 serial 16 dnl Copyright (C) 2003, 2005-2023 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 Determine the name of a chinese locale with GB18030 encoding. AC_DEFUN_ONCE([gt_LOCALE_ZH_CN], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AM_LANGINFO_CODESET]) AC_CACHE_CHECK([for a transitional chinese locale], [gt_cv_locale_zh_CN], [ AC_LANG_CONFTEST([AC_LANG_SOURCE([[ #include <locale.h> #include <stdlib.h> #include <time.h> #if HAVE_LANGINFO_CODESET # include <langinfo.h> #endif #include <stdlib.h> #include <string.h> struct tm t; char buf[16]; int main () { /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl imitates locale dependent behaviour by looking at the environment variables, and all locales use the UTF-8 encoding. */ #if defined __BEOS__ || defined __HAIKU__ return 1; #else /* Check whether the given locale name is recognized by the system. */ # if defined _WIN32 && !defined __CYGWIN__ /* On native Windows, setlocale(category, "") looks at the system settings, not at the environment variables. Also, when an encoding suffix such as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE category of the locale to "C". */ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) return 1; # else if (setlocale (LC_ALL, "") == NULL) return 1; # endif /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) is empty, and the behaviour of Tcl 8.4 in this locale is not useful. On OpenBSD 4.0, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "646". In this situation, some unit tests fail. On MirBSD 10, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "UTF-8". */ # if HAVE_LANGINFO_CODESET { const char *cs = nl_langinfo (CODESET); if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0 || strcmp (cs, "UTF-8") == 0) return 1; } # endif # ifdef __CYGWIN__ /* On Cygwin, avoid locale names without encoding suffix, because the locale_charset() function relies on the encoding suffix. Note that LC_ALL is set on the command line. */ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; # endif /* Check whether in a month name, no byte in the range 0x80..0x9F occurs. This excludes the UTF-8 encoding (except on MirBSD). */ { const char *p; t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1; for (p = buf; *p != '\0'; p++) if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0) return 1; } /* Check whether a typical GB18030 multibyte sequence is recognized as a single wide character. This excludes the GB2312 and GBK encodings. */ if (mblen ("\203\062\332\066", 5) != 4) return 1; return 0; #endif } ]])]) if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then case "$host_os" in # Handle native Windows specially, because there setlocale() interprets # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", # "fr" or "fra" as "French" or "French_France.1252", # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", # "ja" as "Japanese" or "Japanese_Japan.932", # and similar. mingw*) # Test for the hypothetical native Windows locale name. if (LC_ALL=Chinese_China.54936 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_zh_CN=Chinese_China.54936 else # None found. gt_cv_locale_zh_CN=none fi ;; solaris2.8) # On Solaris 8, the locales zh_CN.GB18030, zh_CN.GBK, zh.GBK are # broken. One witness is the test case in gl_MBRTOWC_SANITYCHECK. # Another witness is that "LC_ALL=zh_CN.GB18030 bash -c true" dumps core. gt_cv_locale_zh_CN=none ;; *) # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the # configure script would override the LC_ALL setting. Likewise for # LC_CTYPE, which is also set at the beginning of the configure script. # Test for the locale name without encoding suffix. if (LC_ALL=zh_CN LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_zh_CN=zh_CN else # Test for the locale name with explicit encoding suffix. if (LC_ALL=zh_CN.GB18030 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_zh_CN=zh_CN.GB18030 else # None found. gt_cv_locale_zh_CN=none fi fi ;; esac else # If there was a link error, due to mblen(), the system is so old that # it certainly doesn't have a chinese locale. gt_cv_locale_zh_CN=none fi rm -fr conftest* ]) LOCALE_ZH_CN=$gt_cv_locale_zh_CN AC_SUBST([LOCALE_ZH_CN]) ]) �����������������������������������������������������������������������������������������������������������������rush-2.4/m4/__inline.m4�����������������������������������������������������������������������������0000644�0001750�0001750�00000001423�14436424420�014667� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Test for __inline keyword dnl Copyright 2017-2023 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. AC_DEFUN([gl___INLINE], [ AC_CACHE_CHECK([whether the compiler supports the __inline keyword], [gl_cv_c___inline], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[typedef int foo_t; static __inline foo_t foo (void) { return 0; }]], [[return foo ();]])], [gl_cv_c___inline=yes], [gl_cv_c___inline=no])]) if test $gl_cv_c___inline = yes; then AC_DEFINE([HAVE___INLINE], [1], [Define to 1 if the compiler supports the keyword '__inline'.]) fi ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/getline.m4������������������������������������������������������������������������������0000644�0001750�0001750�00000006414�14436424420�014547� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# getline.m4 serial 33 dnl Copyright (C) 1998-2003, 2005-2007, 2009-2023 Free Software Foundation, dnl Inc. dnl 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. AC_PREREQ([2.59]) dnl See if there's a working, system-supplied version of the getline function. dnl We can't just do AC_REPLACE_FUNCS([getline]) because some systems dnl have a function by that name in -linet that doesn't have anything dnl to do with the function we need. AC_DEFUN([gl_FUNC_GETLINE], [ AC_REQUIRE([gl_STDIO_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl Persuade glibc <stdio.h> to declare getline(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_CHECK_DECLS_ONCE([getline]) gl_CHECK_FUNCS_ANDROID([getline], [[#include <stdio.h>]]) if test $ac_cv_func_getline = yes; then dnl Found it in some library. Verify that it works. AC_CACHE_CHECK([for working getline function], [am_cv_func_working_getline], [echo fooNbarN | tr -d '\012' | tr N '\012' > conftest.data AC_RUN_IFELSE([AC_LANG_SOURCE([[ # include <stdio.h> # include <stdlib.h> # include <string.h> int main () { FILE *in = fopen ("./conftest.data", "r"); if (!in) return 1; { /* Test result for a NULL buffer and a zero size. Based on a test program from Karl Heuer. */ char *line = NULL; size_t siz = 0; int len = getline (&line, &siz, in); if (!(len == 4 && line && strcmp (line, "foo\n") == 0)) { free (line); fclose (in); return 2; } free (line); } { /* Test result for a NULL buffer and a non-zero size. This crashes on FreeBSD 8.0. */ char *line = NULL; size_t siz = (size_t)(~0) / 4; if (getline (&line, &siz, in) == -1) { fclose (in); return 3; } free (line); } fclose (in); return 0; } ]])], [am_cv_func_working_getline=yes], [am_cv_func_working_getline=no], [dnl We're cross compiling. dnl Guess it works on glibc2 systems and musl systems. AC_EGREP_CPP([Lucky GNU user], [ #include <features.h> #ifdef __GNU_LIBRARY__ #if (__GLIBC__ >= 2) && !defined __UCLIBC__ Lucky GNU user #endif #endif ], [am_cv_func_working_getline="guessing yes"], [case "$host_os" in *-musl* | midipix*) am_cv_func_working_getline="guessing yes" ;; *) am_cv_func_working_getline="$gl_cross_guess_normal" ;; esac ]) ]) ]) else am_cv_func_working_getline=no case "$gl_cv_onwards_func_getline" in future*) REPLACE_GETLINE=1 ;; esac fi if test $ac_cv_have_decl_getline = no; then HAVE_DECL_GETLINE=0 fi case "$am_cv_func_working_getline" in *yes) ;; *) dnl Set REPLACE_GETLINE always: Even if we have not found the broken dnl getline function among $LIBS, it may exist in libinet and the dnl executable may be linked with -linet. REPLACE_GETLINE=1 ;; esac ]) # Prerequisites of lib/getline.c. AC_DEFUN([gl_PREREQ_GETLINE], [ : ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/mbsinit.m4������������������������������������������������������������������������������0000644�0001750�0001750�00000002401�14436424420�014555� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# mbsinit.m4 serial 9 dnl Copyright (C) 2008, 2010-2023 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. AC_DEFUN([gl_FUNC_MBSINIT], [ AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AC_TYPE_MBSTATE_T]) gl_MBSTATE_T_BROKEN AC_CHECK_FUNCS_ONCE([mbsinit]) if test $ac_cv_func_mbsinit = no; then HAVE_MBSINIT=0 AC_CHECK_DECLS([mbsinit],,, [[ #include <wchar.h> ]]) if test $ac_cv_have_decl_mbsinit = yes; then dnl On Minix 3.1.8, the system's <wchar.h> declares mbsinit() although dnl it does not have the function. Avoid a collision with gnulib's dnl replacement. REPLACE_MBSINIT=1 fi else if test $REPLACE_MBSTATE_T = 1; then REPLACE_MBSINIT=1 else dnl On mingw, mbsinit() always returns 1, which is inappropriate for dnl states produced by mbrtowc() for an incomplete multibyte character dnl in multibyte locales. case "$host_os" in mingw*) REPLACE_MBSINIT=1 ;; esac fi fi ]) # Prerequisites of lib/mbsinit.c. AC_DEFUN([gl_PREREQ_MBSINIT], [ : ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/mktime.m4�������������������������������������������������������������������������������0000644�0001750�0001750�00000021622�14436424420�014404� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 37 dnl Copyright (C) 2002-2003, 2005-2007, 2009-2023 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 From Jim Meyering. AC_DEFUN([gl_TIME_T_IS_SIGNED], [ AC_CACHE_CHECK([whether time_t is signed], [gl_cv_time_t_is_signed], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include <time.h> char time_t_signed[(time_t) -1 < 0 ? 1 : -1];]])], [gl_cv_time_t_is_signed=yes], [gl_cv_time_t_is_signed=no])]) if test $gl_cv_time_t_is_signed = yes; then AC_DEFINE([TIME_T_IS_SIGNED], [1], [Define to 1 if time_t is signed.]) fi ]) dnl Test whether mktime works. Set gl_cv_func_working_mktime. AC_DEFUN([gl_FUNC_MKTIME_WORKS], [ AC_REQUIRE([gl_TIME_T_IS_SIGNED]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl We don't use AC_FUNC_MKTIME any more, because it is no longer maintained dnl in Autoconf and because it invokes AC_LIBOBJ. AC_CHECK_HEADERS_ONCE([unistd.h]) AC_CHECK_DECLS_ONCE([alarm]) AC_REQUIRE([gl_MULTIARCH]) AC_CACHE_CHECK([for working mktime], [gl_cv_func_working_mktime], [if test $APPLE_UNIVERSAL_BUILD = 1; then # A universal build on Apple Mac OS X platforms. # The test result would be 'yes' in 32-bit mode and 'no' in 64-bit mode. # But we need a configuration result that is valid in both modes. gl_cv_func_working_mktime="guessing no" else AC_RUN_IFELSE( [AC_LANG_SOURCE( [[/* Test program from Paul Eggert and Tony Leneis. */ #include <limits.h> #include <stdlib.h> #include <time.h> #ifdef HAVE_UNISTD_H # include <unistd.h> #endif #if HAVE_DECL_ALARM # include <signal.h> #endif ]GL_MDA_DEFINES[ #ifndef TIME_T_IS_SIGNED # define TIME_T_IS_SIGNED 0 #endif static time_t time_t_max; static time_t time_t_min; /* Values we'll use to set the TZ environment variable. */ static char *tz_strings[] = { (char *) 0, "TZ=GMT0", "TZ=JST-9", "TZ=EST+3EDT+2,M10.1.0/00:00:00,M2.3.0/00:00:00" }; #define N_STRINGS (sizeof (tz_strings) / sizeof (tz_strings[0])) /* Return 0 if mktime fails to convert a date in the spring-forward gap. Based on a problem report from Andreas Jaeger. */ static int spring_forward_gap () { /* glibc (up to about 1998-10-07) failed this test. */ struct tm tm; /* Use the portable POSIX.1 specification "TZ=PST8PDT,M4.1.0,M10.5.0" instead of "TZ=America/Vancouver" in order to detect the bug even on systems that don't support the Olson extension, or don't have the full zoneinfo tables installed. */ if (putenv ("TZ=PST8PDT,M4.1.0,M10.5.0") != 0) return -1; tm.tm_year = 98; tm.tm_mon = 3; tm.tm_mday = 5; tm.tm_hour = 2; tm.tm_min = 0; tm.tm_sec = 0; tm.tm_isdst = -1; return mktime (&tm) != (time_t) -1; } static int mktime_test1 (time_t now) { struct tm *lt; return ! (lt = localtime (&now)) || mktime (lt) == now; } static int mktime_test (time_t now) { return (mktime_test1 (now) && mktime_test1 ((time_t) (time_t_max - now)) && mktime_test1 ((time_t) (time_t_min + now))); } static int irix_6_4_bug () { /* Based on code from Ariel Faigon. */ struct tm tm; tm.tm_year = 96; tm.tm_mon = 3; tm.tm_mday = 0; tm.tm_hour = 0; tm.tm_min = 0; tm.tm_sec = 0; tm.tm_isdst = -1; mktime (&tm); return tm.tm_mon == 2 && tm.tm_mday == 31; } static int bigtime_test (int j) { struct tm tm; time_t now; tm.tm_year = tm.tm_mon = tm.tm_mday = tm.tm_hour = tm.tm_min = tm.tm_sec = j; now = mktime (&tm); if (now != (time_t) -1) { struct tm *lt = localtime (&now); if (! (lt && lt->tm_year == tm.tm_year && lt->tm_mon == tm.tm_mon && lt->tm_mday == tm.tm_mday && lt->tm_hour == tm.tm_hour && lt->tm_min == tm.tm_min && lt->tm_sec == tm.tm_sec && lt->tm_yday == tm.tm_yday && lt->tm_wday == tm.tm_wday && ((lt->tm_isdst < 0 ? -1 : 0 < lt->tm_isdst) == (tm.tm_isdst < 0 ? -1 : 0 < tm.tm_isdst)))) return 0; } return 1; } static int year_2050_test () { /* The correct answer for 2050-02-01 00:00:00 in Pacific time, ignoring leap seconds. */ unsigned long int answer = 2527315200UL; struct tm tm; time_t t; tm.tm_year = 2050 - 1900; tm.tm_mon = 2 - 1; tm.tm_mday = 1; tm.tm_hour = tm.tm_min = tm.tm_sec = 0; tm.tm_isdst = -1; /* Use the portable POSIX.1 specification "TZ=PST8PDT,M4.1.0,M10.5.0" instead of "TZ=America/Vancouver" in order to detect the bug even on systems that don't support the Olson extension, or don't have the full zoneinfo tables installed. */ if (putenv ("TZ=PST8PDT,M4.1.0,M10.5.0") != 0) return -1; t = mktime (&tm); /* Check that the result is either a failure, or close enough to the correct answer that we can assume the discrepancy is due to leap seconds. */ return (t == (time_t) -1 || (0 < t && answer - 120 <= t && t <= answer + 120)); } static int indiana_test () { if (putenv ("TZ=America/Indiana/Indianapolis") != 0) return -1; struct tm tm; tm.tm_year = 1986 - 1900; tm.tm_mon = 4 - 1; tm.tm_mday = 28; tm.tm_hour = 16; tm.tm_min = 24; tm.tm_sec = 50; tm.tm_isdst = 0; time_t std = mktime (&tm); if (! (std == 515107490 || std == 515107503)) return 1; /* This platform supports TZDB, either without or with leap seconds. Return true if GNU Bug#48085 is absent. */ tm.tm_isdst = 1; time_t dst = mktime (&tm); return std - dst == 60 * 60; } int main () { int result = 0; time_t t, delta; int i, j; int time_t_signed_magnitude = (time_t) ~ (time_t) 0 < (time_t) -1; #if HAVE_DECL_ALARM /* This test makes some buggy mktime implementations loop. Give up after 60 seconds; a mktime slower than that isn't worth using anyway. */ signal (SIGALRM, SIG_DFL); alarm (60); #endif time_t_max = (! TIME_T_IS_SIGNED ? (time_t) -1 : ((((time_t) 1 << (sizeof (time_t) * CHAR_BIT - 2)) - 1) * 2 + 1)); time_t_min = (! TIME_T_IS_SIGNED ? (time_t) 0 : time_t_signed_magnitude ? ~ (time_t) 0 : ~ time_t_max); delta = time_t_max / 997; /* a suitable prime number */ for (i = 0; i < N_STRINGS; i++) { if (tz_strings[i]) putenv (tz_strings[i]); for (t = 0; t <= time_t_max - delta && (result & 1) == 0; t += delta) if (! mktime_test (t)) result |= 1; if ((result & 2) == 0 && ! (mktime_test ((time_t) 1) && mktime_test ((time_t) (60 * 60)) && mktime_test ((time_t) (60 * 60 * 24)))) result |= 2; for (j = 1; (result & 4) == 0; j <<= 1) { if (! bigtime_test (j)) result |= 4; if (INT_MAX / 2 < j) break; } if ((result & 8) == 0 && ! bigtime_test (INT_MAX)) result |= 8; } if (! irix_6_4_bug ()) result |= 16; if (! spring_forward_gap ()) result |= 32; if (! year_2050_test () || ! indiana_test ()) result |= 64; return result; }]])], [gl_cv_func_working_mktime=yes], [gl_cv_func_working_mktime=no], [case "$host_os" in # Guess no on native Windows. mingw*) gl_cv_func_working_mktime="guessing no" ;; *) gl_cv_func_working_mktime="$gl_cross_guess_normal" ;; esac ]) fi ]) ]) dnl Main macro of module 'mktime'. AC_DEFUN([gl_FUNC_MKTIME], [ AC_REQUIRE([gl_TIME_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([gl_FUNC_MKTIME_WORKS]) REPLACE_MKTIME=0 if test "$gl_cv_func_working_mktime" != yes; then REPLACE_MKTIME=1 AC_DEFINE([NEED_MKTIME_WORKING], [1], [Define if the compilation of mktime.c should define 'mktime' with the algorithmic workarounds.]) fi case "$host_os" in mingw*) REPLACE_MKTIME=1 AC_DEFINE([NEED_MKTIME_WINDOWS], [1], [Define if the compilation of mktime.c should define 'mktime' with the native Windows TZ workaround.]) ;; esac ]) dnl Main macro of module 'mktime-internal'. AC_DEFUN([gl_FUNC_MKTIME_INTERNAL], [ AC_REQUIRE([gl_FUNC_MKTIME_WORKS]) WANT_MKTIME_INTERNAL=0 dnl BeOS has __mktime_internal in libc, but other platforms don't. AC_CHECK_FUNC([__mktime_internal], [AC_DEFINE([mktime_internal], [__mktime_internal], [Define to the real name of the mktime_internal function.]) ], [dnl mktime works but it doesn't export __mktime_internal, dnl so we need to substitute our own mktime implementation. WANT_MKTIME_INTERNAL=1 AC_DEFINE([NEED_MKTIME_INTERNAL], [1], [Define if the compilation of mktime.c should define 'mktime_internal'.]) ]) ]) # Prerequisites of lib/mktime.c. AC_DEFUN([gl_PREREQ_MKTIME], [:]) ��������������������������������������������������������������������������������������������������������������rush-2.4/m4/error.m4��������������������������������������������������������������������������������0000644�0001750�0001750�00000001130�14436424420�014237� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#serial 16 # Copyright (C) 1996-1998, 2001-2004, 2009-2023 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. AC_DEFUN([gl_ERROR], [ ]) # Prerequisites of lib/error.c. AC_DEFUN([gl_PREREQ_ERROR], [ dnl Use system extensions on Android, so that AC_FUNC_STRERROR_R dnl discovers the GNU API for strerror_r on Android API level 23 and later. AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([AC_FUNC_STRERROR_R]) : ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/open.m4���������������������������������������������������������������������������������0000644�0001750�0001750�00000002765�14436424420�014066� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# open.m4 serial 15 dnl Copyright (C) 2007-2023 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. AC_DEFUN([gl_FUNC_OPEN], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([gl_PREPROC_O_CLOEXEC]) case "$host_os" in mingw* | pw*) REPLACE_OPEN=1 ;; *) dnl open("foo/") should not create a file when the file name has a dnl trailing slash. FreeBSD only has the problem on symlinks. AC_CHECK_FUNCS_ONCE([lstat]) if test "$gl_cv_macro_O_CLOEXEC" != yes; then REPLACE_OPEN=1 fi gl_OPEN_TRAILING_SLASH_BUG case "$gl_cv_func_open_slash" in *no) REPLACE_OPEN=1 ;; esac ;; esac dnl Replace open() for supporting the gnulib-defined fchdir() function, dnl to keep fchdir's bookkeeping up-to-date. m4_ifdef([gl_FUNC_FCHDIR], [ if test $REPLACE_OPEN = 0; then gl_TEST_FCHDIR if test $HAVE_FCHDIR = 0; then REPLACE_OPEN=1 fi fi ]) dnl Replace open() for supporting the gnulib-defined O_NONBLOCK flag. m4_ifdef([gl_NONBLOCKING_IO], [ if test $REPLACE_OPEN = 0; then gl_NONBLOCKING_IO if test $gl_cv_have_open_O_NONBLOCK != yes; then REPLACE_OPEN=1 fi fi ]) ]) # Prerequisites of lib/open.c. AC_DEFUN([gl_PREREQ_OPEN], [ AC_REQUIRE([gl_PROMOTED_TYPE_MODE_T]) : ]) �����������rush-2.4/m4/malloca.m4������������������������������������������������������������������������������0000644�0001750�0001750�00000001033�14436424420�014520� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# malloca.m4 serial 2 dnl Copyright (C) 2003-2004, 2006-2007, 2009-2023 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. AC_DEFUN([gl_MALLOCA], [ dnl Use the autoconf tests for alloca(), but not the AC_SUBSTed variables dnl @ALLOCA@ and @LTALLOCA@. dnl gl_FUNC_ALLOCA dnl Already brought in by the module dependencies. AC_REQUIRE([gl_EEMALLOC]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/locale_h.m4�����������������������������������������������������������������������������0000644�0001750�0001750�00000013756�14436424420�014675� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# locale_h.m4 serial 28 dnl Copyright (C) 2007, 2009-2023 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. AC_DEFUN_ONCE([gl_LOCALE_H], [ dnl Ensure to expand the default settings once only, before all statements dnl that occur in other macros. AC_REQUIRE([gl_LOCALE_H_DEFAULTS]) dnl Persuade glibc <locale.h> to define locale_t and the int_p_*, int_n_* dnl members of 'struct lconv'. AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl If <stddef.h> is replaced, then <locale.h> must also be replaced. AC_REQUIRE([gl_STDDEF_H]) AC_REQUIRE([gl_LOCALE_T]) dnl Solaris 11.0 defines the int_p_*, int_n_* members of 'struct lconv' dnl only if _LCONV_C99 is defined. AC_REQUIRE([AC_CANONICAL_HOST]) case "$host_os" in solaris*) AC_DEFINE([_LCONV_C99], [1], [Define to 1 on Solaris.]) ;; esac AC_CACHE_CHECK([whether locale.h conforms to POSIX:2001], [gl_cv_header_locale_h_posix2001], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <locale.h> int x = LC_MESSAGES; int y = sizeof (((struct lconv *) 0)->decimal_point);]], [[]])], [gl_cv_header_locale_h_posix2001=yes], [gl_cv_header_locale_h_posix2001=no])]) dnl Check whether 'struct lconv' is complete. dnl Bionic libc's 'struct lconv' is just a dummy. dnl On OpenBSD 4.9, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 9, Cygwin 1.5.x, dnl mingw, MSVC 9, it lacks the int_p_* and int_n_* members. AC_CACHE_CHECK([whether struct lconv is properly defined], [gl_cv_sys_struct_lconv_ok], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <locale.h> struct lconv l; int x = sizeof (l.decimal_point); int y = sizeof (l.int_p_cs_precedes);]], [[]])], [gl_cv_sys_struct_lconv_ok=yes], [gl_cv_sys_struct_lconv_ok=no]) ]) if test $gl_cv_sys_struct_lconv_ok = no; then dnl On native Windows with MSVC, merely define these member names as macros. dnl This avoids trouble in C++ mode. case "$host_os" in mingw*) AC_EGREP_CPP([Special], [ #ifdef _MSC_VER Special #endif ], [], [REPLACE_STRUCT_LCONV=1]) ;; *) REPLACE_STRUCT_LCONV=1 ;; esac fi dnl <locale.h> is always overridden, because of GNULIB_POSIXCHECK. gl_NEXT_HEADERS([locale.h]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[#include <locale.h> /* Some systems provide declarations in a non-standard header. */ #if HAVE_XLOCALE_H # include <xlocale.h> #endif ]], [setlocale newlocale duplocale freelocale]) ]) dnl Checks to determine whether the system has the locale_t type, dnl and how to obtain it. AC_DEFUN([gl_LOCALE_T], [ dnl Persuade glibc and Solaris <locale.h> to define locale_t. AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl Check whether use of locale_t requires inclusion of <xlocale.h>, dnl e.g. on Mac OS X 10.5. If <locale.h> does not define locale_t by dnl itself, we assume that <xlocale.h> will do so. AC_CACHE_CHECK([whether locale.h defines locale_t], [gl_cv_header_locale_has_locale_t], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <locale.h> locale_t x;]], [[]])], [gl_cv_header_locale_has_locale_t=yes], [gl_cv_header_locale_has_locale_t=no]) ]) dnl Check for <xlocale.h>. AC_CHECK_HEADERS_ONCE([xlocale.h]) if test $ac_cv_header_xlocale_h = yes; then HAVE_XLOCALE_H=1 if test $gl_cv_header_locale_has_locale_t = yes; then gl_cv_header_locale_h_needs_xlocale_h=no else gl_cv_header_locale_h_needs_xlocale_h=yes fi HAVE_LOCALE_T=1 else HAVE_XLOCALE_H=0 gl_cv_header_locale_h_needs_xlocale_h=no if test $gl_cv_header_locale_has_locale_t = yes; then HAVE_LOCALE_T=1 else HAVE_LOCALE_T=0 fi fi AC_SUBST([HAVE_XLOCALE_H]) ]) # gl_LOCALE_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_LOCALE_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_LOCALE_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_LOCALE_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_LOCALE_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOCALECONV]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SETLOCALE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SETLOCALE_NULL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_DUPLOCALE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOCALENAME]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_LOCALE_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_LOCALE_H_DEFAULTS]) ]) AC_DEFUN([gl_LOCALE_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_NEWLOCALE=1; AC_SUBST([HAVE_NEWLOCALE]) HAVE_DUPLOCALE=1; AC_SUBST([HAVE_DUPLOCALE]) HAVE_FREELOCALE=1; AC_SUBST([HAVE_FREELOCALE]) REPLACE_LOCALECONV=0; AC_SUBST([REPLACE_LOCALECONV]) REPLACE_SETLOCALE=0; AC_SUBST([REPLACE_SETLOCALE]) REPLACE_NEWLOCALE=0; AC_SUBST([REPLACE_NEWLOCALE]) REPLACE_DUPLOCALE=0; AC_SUBST([REPLACE_DUPLOCALE]) REPLACE_FREELOCALE=0; AC_SUBST([REPLACE_FREELOCALE]) REPLACE_STRUCT_LCONV=0; AC_SUBST([REPLACE_STRUCT_LCONV]) LOCALENAME_ENHANCE_LOCALE_FUNCS=0; AC_SUBST([LOCALENAME_ENHANCE_LOCALE_FUNCS]) ]) ������������������rush-2.4/m4/realloc.m4������������������������������������������������������������������������������0000644�0001750�0001750�00000004350�14436424420�014536� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# realloc.m4 serial 27 dnl Copyright (C) 2007, 2009-2023 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. # This is adapted with modifications from upstream Autoconf here: # https://git.savannah.gnu.org/cgit/autoconf.git/tree/lib/autoconf/functions.m4?id=v2.70#n1455 AC_DEFUN([_AC_FUNC_REALLOC_IF], [ AC_REQUIRE([AC_CANONICAL_HOST])dnl for cross-compiles AC_CACHE_CHECK([whether realloc (0, 0) returns nonnull], [ac_cv_func_realloc_0_nonnull], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <stdlib.h> ]], [[void *p = realloc (0, 0); int result = !p; free (p); return result;]]) ], [ac_cv_func_realloc_0_nonnull=yes], [ac_cv_func_realloc_0_nonnull=no], [case "$host_os" in # Guess yes on platforms where we know the result. *-gnu* | freebsd* | netbsd* | openbsd* | bitrig* \ | gnu* | *-musl* | midipix* | midnightbsd* \ | hpux* | solaris* | cygwin* | mingw* | msys* ) ac_cv_func_realloc_0_nonnull="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) ac_cv_func_realloc_0_nonnull="$gl_cross_guess_normal" ;; esac ]) ]) AS_CASE([$ac_cv_func_realloc_0_nonnull], [*yes], [$1], [$2]) ])# AC_FUNC_REALLOC # gl_FUNC_REALLOC_GNU # ------------------- # Replace realloc if it is not compatible with GNU libc. AC_DEFUN([gl_FUNC_REALLOC_GNU], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_REALLOC_POSIX]) if test $REPLACE_REALLOC_FOR_REALLOC_GNU = 0; then _AC_FUNC_REALLOC_IF([], [REPLACE_REALLOC_FOR_REALLOC_GNU=1]) fi ])# gl_FUNC_REALLOC_GNU # gl_FUNC_REALLOC_POSIX # --------------------- # Test whether 'realloc' is POSIX compliant (sets errno to ENOMEM when it # fails, and doesn't mess up with ptrdiff_t overflow), # and replace realloc if it is not. AC_DEFUN([gl_FUNC_REALLOC_POSIX], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_MALLOC_POSIX]) if test $REPLACE_MALLOC_FOR_MALLOC_POSIX = 1; then REPLACE_REALLOC_FOR_REALLOC_POSIX=1 fi ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/langinfo_h.m4���������������������������������������������������������������������������0000644�0001750�0001750�00000011234�14436424420�015220� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# langinfo_h.m4 serial 12 dnl Copyright (C) 2009-2023 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. AC_DEFUN_ONCE([gl_LANGINFO_H], [ AC_REQUIRE([gl_LANGINFO_H_DEFAULTS]) dnl Persuade glibc-2.0.6 <langinfo.h> to define CODESET. AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) dnl <langinfo.h> is always overridden, because of GNULIB_POSIXCHECK. gl_CHECK_NEXT_HEADERS([langinfo.h]) dnl Determine whether <langinfo.h> exists. It is missing on mingw and BeOS. HAVE_LANGINFO_CODESET=0 HAVE_LANGINFO_T_FMT_AMPM=0 HAVE_LANGINFO_ALTMON=0 HAVE_LANGINFO_ERA=0 HAVE_LANGINFO_YESEXPR=0 AC_CHECK_HEADERS_ONCE([langinfo.h]) if test $ac_cv_header_langinfo_h = yes; then HAVE_LANGINFO_H=1 dnl Determine what <langinfo.h> defines. dnl CODESET is missing on OpenBSD 3.8. dnl ERA etc. are missing on OpenBSD 6.7. dnl T_FMT_AMPM and YESEXPR, NOEXPR are missing on IRIX 5.3. dnl ALTMON_* are missing on glibc 2.26 and many other systems. AC_CACHE_CHECK([whether langinfo.h defines CODESET], [gl_cv_header_langinfo_codeset], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include <langinfo.h> int a = CODESET; ]])], [gl_cv_header_langinfo_codeset=yes], [gl_cv_header_langinfo_codeset=no]) ]) if test $gl_cv_header_langinfo_codeset = yes; then HAVE_LANGINFO_CODESET=1 fi AC_CACHE_CHECK([whether langinfo.h defines T_FMT_AMPM], [gl_cv_header_langinfo_t_fmt_ampm], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include <langinfo.h> int a = T_FMT_AMPM; ]])], [gl_cv_header_langinfo_t_fmt_ampm=yes], [gl_cv_header_langinfo_t_fmt_ampm=no]) ]) if test $gl_cv_header_langinfo_t_fmt_ampm = yes; then HAVE_LANGINFO_T_FMT_AMPM=1 fi AC_CACHE_CHECK([whether langinfo.h defines ALTMON_1], [gl_cv_header_langinfo_altmon], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include <langinfo.h> int a = ALTMON_1; ]])], [gl_cv_header_langinfo_altmon=yes], [gl_cv_header_langinfo_altmon=no]) ]) if test $gl_cv_header_langinfo_altmon = yes; then HAVE_LANGINFO_ALTMON=1 fi AC_CACHE_CHECK([whether langinfo.h defines ERA], [gl_cv_header_langinfo_era], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include <langinfo.h> int a = ERA; ]])], [gl_cv_header_langinfo_era=yes], [gl_cv_header_langinfo_era=no]) ]) if test $gl_cv_header_langinfo_era = yes; then HAVE_LANGINFO_ERA=1 fi AC_CACHE_CHECK([whether langinfo.h defines YESEXPR], [gl_cv_header_langinfo_yesexpr], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include <langinfo.h> int a = YESEXPR; ]])], [gl_cv_header_langinfo_yesexpr=yes], [gl_cv_header_langinfo_yesexpr=no]) ]) if test $gl_cv_header_langinfo_yesexpr = yes; then HAVE_LANGINFO_YESEXPR=1 fi else HAVE_LANGINFO_H=0 fi AC_SUBST([HAVE_LANGINFO_H]) AC_SUBST([HAVE_LANGINFO_CODESET]) AC_SUBST([HAVE_LANGINFO_T_FMT_AMPM]) AC_SUBST([HAVE_LANGINFO_ALTMON]) AC_SUBST([HAVE_LANGINFO_ERA]) AC_SUBST([HAVE_LANGINFO_YESEXPR]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[#include <langinfo.h> ]], [nl_langinfo]) ]) # gl_LANGINFO_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_LANGINFO_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_LANGINFO_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_LANGINFO_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_LANGINFO_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_NL_LANGINFO]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_LANGINFO_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_LANGINFO_H_DEFAULTS]) ]) AC_DEFUN([gl_LANGINFO_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_NL_LANGINFO=1; AC_SUBST([HAVE_NL_LANGINFO]) REPLACE_NL_LANGINFO=0; AC_SUBST([REPLACE_NL_LANGINFO]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/setenv.m4�������������������������������������������������������������������������������0000644�0001750�0001750�00000011667�14436424420�014432� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# setenv.m4 serial 32 dnl Copyright (C) 2001-2004, 2006-2023 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. AC_DEFUN([gl_FUNC_SETENV], [ AC_REQUIRE([gl_FUNC_SETENV_SEPARATE]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles if test $ac_cv_func_setenv = no; then HAVE_SETENV=0 else AC_CACHE_CHECK([whether setenv validates arguments], [gl_cv_func_setenv_works], [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ #include <stdlib.h> #include <errno.h> #include <string.h> ]], [[ int result = 0; { if (setenv ("", "", 0) != -1) result |= 1; else if (errno != EINVAL) result |= 2; } { if (setenv ("a", "=", 1) != 0) result |= 4; else if (strcmp (getenv ("a"), "=") != 0) result |= 8; } return result; ]])], [gl_cv_func_setenv_works=yes], [gl_cv_func_setenv_works=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_setenv_works="guessing yes" ;; # Guess yes on musl systems. *-musl* | midipix*) gl_cv_func_setenv_works="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_setenv_works="$gl_cross_guess_normal" ;; esac ])]) case "$gl_cv_func_setenv_works" in *yes) ;; *) REPLACE_SETENV=1 ;; esac fi ]) # Like gl_FUNC_SETENV, except prepare for separate compilation # (no REPLACE_SETENV, no AC_LIBOBJ). AC_DEFUN([gl_FUNC_SETENV_SEPARATE], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_CHECK_DECLS_ONCE([setenv]) if test $ac_cv_have_decl_setenv = no; then HAVE_DECL_SETENV=0 fi AC_CHECK_FUNCS_ONCE([setenv]) gl_PREREQ_SETENV ]) AC_DEFUN([gl_FUNC_UNSETENV], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CHECK_DECLS_ONCE([unsetenv]) if test $ac_cv_have_decl_unsetenv = no; then HAVE_DECL_UNSETENV=0 fi AC_CHECK_FUNCS([unsetenv]) if test $ac_cv_func_unsetenv = no; then HAVE_UNSETENV=0 else HAVE_UNSETENV=1 dnl Some BSDs return void, failing to do error checking. AC_CACHE_CHECK([for unsetenv() return type], [gt_cv_func_unsetenv_ret], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[ #undef _BSD #define _BSD 1 /* unhide unsetenv declaration in OSF/1 5.1 <stdlib.h> */ #include <stdlib.h> extern #ifdef __cplusplus "C" #endif int unsetenv (const char *name); ]], [[]])], [gt_cv_func_unsetenv_ret='int'], [gt_cv_func_unsetenv_ret='void'])]) if test $gt_cv_func_unsetenv_ret = 'void'; then AC_DEFINE([VOID_UNSETENV], [1], [Define to 1 if unsetenv returns void instead of int.]) REPLACE_UNSETENV=1 fi dnl Solaris 10 unsetenv does not remove all copies of a name. dnl Haiku alpha 2 unsetenv gets confused by assignment to environ. dnl OpenBSD 4.7 unsetenv("") does not fail. AC_CACHE_CHECK([whether unsetenv obeys POSIX], [gl_cv_func_unsetenv_works], [AC_RUN_IFELSE( [AC_LANG_PROGRAM([[ #include <stdlib.h> #include <errno.h> extern char **environ; ]GL_MDA_DEFINES], [[ char entry1[] = "a=1"; char entry2[] = "b=2"; char *env[] = { entry1, entry2, NULL }; if (putenv ((char *) "a=1")) return 1; if (putenv (entry2)) return 2; entry2[0] = 'a'; unsetenv ("a"); if (getenv ("a")) return 3; if (!unsetenv ("") || errno != EINVAL) return 4; entry2[0] = 'b'; environ = env; if (!getenv ("a")) return 5; entry2[0] = 'a'; unsetenv ("a"); if (getenv ("a")) return 6; ]])], [gl_cv_func_unsetenv_works=yes], [gl_cv_func_unsetenv_works=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu*) gl_cv_func_unsetenv_works="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_unsetenv_works="$gl_cross_guess_normal" ;; esac ]) ]) case "$gl_cv_func_unsetenv_works" in *yes) ;; *) REPLACE_UNSETENV=1 ;; esac fi ]) # Prerequisites of lib/setenv.c. AC_DEFUN([gl_PREREQ_SETENV], [ AC_REQUIRE([AC_FUNC_ALLOCA]) AC_REQUIRE([gl_ENVIRON]) AC_CHECK_HEADERS_ONCE([unistd.h]) AC_CHECK_HEADERS([search.h]) gl_CHECK_FUNCS_ANDROID([tsearch], [[#include <search.h>]]) ]) # Prerequisites of lib/unsetenv.c. AC_DEFUN([gl_PREREQ_UNSETENV], [ AC_REQUIRE([gl_ENVIRON]) AC_CHECK_HEADERS_ONCE([unistd.h]) ]) �������������������������������������������������������������������������rush-2.4/m4/open-slash.m4���������������������������������������������������������������������������0000644�0001750�0001750�00000003455�14436424420�015173� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# open-slash.m4 serial 2 dnl Copyright (C) 2007-2023 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 Tests whether open() and creat() recognize a trailing slash. dnl Sets gl_cv_func_open_slash. AC_DEFUN([gl_OPEN_TRAILING_SLASH_BUG], [ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl open("foo/") should not create a file when the file name has a dnl trailing slash. FreeBSD only has the problem on symlinks. AC_CHECK_FUNCS_ONCE([lstat]) AC_CACHE_CHECK([whether open recognizes a trailing slash], [gl_cv_func_open_slash], [# Assume that if we have lstat, we can also check symlinks. if test $ac_cv_func_lstat = yes; then touch conftest.tmp ln -s conftest.tmp conftest.lnk fi AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <fcntl.h> #if HAVE_UNISTD_H # include <unistd.h> #endif ]GL_MDA_DEFINES[ int main () { int result = 0; #if HAVE_LSTAT if (open ("conftest.lnk/", O_RDONLY) != -1) result |= 1; #endif if (open ("conftest.sl/", O_CREAT, 0600) >= 0) result |= 2; return result; }]])], [gl_cv_func_open_slash=yes], [gl_cv_func_open_slash=no], [ changequote(,)dnl case "$host_os" in freebsd* | aix* | hpux* | solaris2.[0-9] | solaris2.[0-9].*) gl_cv_func_open_slash="guessing no" ;; *) gl_cv_func_open_slash="guessing yes" ;; esac changequote([,])dnl ]) rm -f conftest.sl conftest.tmp conftest.lnk ]) case "$gl_cv_func_open_slash" in *no) AC_DEFINE([OPEN_TRAILING_SLASH_BUG], [1], [Define to 1 if open() fails to recognize a trailing slash.]) ;; esac ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/localeconv.m4���������������������������������������������������������������������������0000644�0001750�0001750�00000004126�14436424420�015243� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# localeconv.m4 serial 2 dnl Copyright (C) 2012-2023 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. AC_DEFUN([gl_FUNC_LOCALECONV], [ AC_REQUIRE([gl_LOCALE_H_DEFAULTS]) AC_REQUIRE([gl_LOCALE_H]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles if test $REPLACE_STRUCT_LCONV = 1; then REPLACE_LOCALECONV=1 fi if test $REPLACE_LOCALECONV = 0; then dnl Test whether fields of type 'char' are filled correctly. dnl This test fails on mingw 5.0.3. AC_CACHE_CHECK([whether localeconv works], [gl_cv_func_localeconv_works], [AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> #include <limits.h> int main () { struct lconv *l = localeconv (); return l->frac_digits != CHAR_MAX && l->frac_digits < 0; } ]])], [gl_cv_func_localeconv_works=yes], [gl_cv_func_localeconv_works=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_localeconv_works="guessing yes" ;; # Guess yes on musl systems. *-musl* | midipix*) gl_cv_func_localeconv_works="guessing yes" ;; # Guess no on native Windows. mingw*) gl_cv_func_localeconv_works="guessing no" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_localeconv_works="$gl_cross_guess_normal" ;; esac ]) ]) case "$gl_cv_func_localeconv_works" in *yes) ;; *) REPLACE_LOCALECONV=1 ;; esac fi ]) # Prerequisites of lib/localeconv.c. AC_DEFUN([gl_PREREQ_LOCALECONV], [ AC_CHECK_MEMBERS([struct lconv.decimal_point], [], [], [[#include <locale.h>]]) AC_CHECK_MEMBERS([struct lconv.int_p_cs_precedes], [], [], [[#include <locale.h>]]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/wcrtomb.m4������������������������������������������������������������������������������0000644�0001750�0001750�00000011035�14436424420�014570� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wcrtomb.m4 serial 17 dnl Copyright (C) 2008-2023 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. AC_DEFUN([gl_FUNC_WCRTOMB], [ AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) AC_REQUIRE([AC_TYPE_MBSTATE_T]) gl_MBSTATE_T_BROKEN AC_CHECK_FUNCS_ONCE([wcrtomb]) if test $ac_cv_func_wcrtomb = no; then HAVE_WCRTOMB=0 AC_CHECK_DECLS([wcrtomb],,, [[ #include <wchar.h> ]]) if test $ac_cv_have_decl_wcrtomb = yes; then dnl On Minix 3.1.8, the system's <wchar.h> declares wcrtomb() although dnl it does not have the function. Avoid a collision with gnulib's dnl replacement. REPLACE_WCRTOMB=1 fi else dnl We don't actually need to override wcrtomb when redefining the semantics dnl of the mbstate_t type. Tested on 32-bit AIX. dnl if test $REPLACE_MBSTATE_T = 1; then dnl REPLACE_WCRTOMB=1 dnl fi if test $REPLACE_WCRTOMB = 0; then dnl On Android 4.3, wcrtomb produces wrong characters in the C locale. dnl On AIX 4.3, OSF/1 5.1 and Solaris <= 11.3, wcrtomb (NULL, 0, NULL) dnl sometimes returns 0 instead of 1. AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gt_LOCALE_FR]) AC_REQUIRE([gt_LOCALE_FR_UTF8]) AC_REQUIRE([gt_LOCALE_JA]) AC_REQUIRE([gt_LOCALE_ZH_CN]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether wcrtomb works in the C locale], [gl_cv_func_wcrtomb_works], [AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <string.h> #include <stdlib.h> #include <wchar.h> int main () { mbstate_t state; char out[64]; int count; memset (&state, 0, sizeof (state)); out[0] = 'x'; count = wcrtomb (out, L'a', &state); return !(count == 1 && out[0] == 'a'); }]])], [gl_cv_func_wcrtomb_works=yes], [gl_cv_func_wcrtomb_works=no], [case "$host_os" in # Guess no on Android. linux*-android*) gl_cv_func_wcrtomb_works="guessing no";; # Guess yes otherwise. *) gl_cv_func_wcrtomb_works="guessing yes";; esac ]) ]) case "$gl_cv_func_wcrtomb_works" in *yes) ;; *) AC_DEFINE([WCRTOMB_C_LOCALE_BUG], [1], [Define if the wcrtomb function does not work in the C locale.]) REPLACE_WCRTOMB=1 ;; esac fi if test $REPLACE_WCRTOMB = 0; then AC_CACHE_CHECK([whether wcrtomb return value is correct], [gl_cv_func_wcrtomb_retval], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. changequote(,)dnl case "$host_os" in # Guess no on AIX 4, OSF/1, Solaris, native Windows. aix4* | osf* | solaris* | mingw*) gl_cv_func_wcrtomb_retval="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_wcrtomb_retval="guessing yes" ;; esac changequote([,])dnl if test $LOCALE_FR != none || test $LOCALE_FR_UTF8 != none || test $LOCALE_JA != none || test $LOCALE_ZH_CN != none; then AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> #include <string.h> #include <wchar.h> #include <stdlib.h> int main () { int result = 0; if (setlocale (LC_ALL, "$LOCALE_FR") != NULL) { if (wcrtomb (NULL, 0, NULL) != 1) result |= 1; } if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) { if (wcrtomb (NULL, 0, NULL) != 1) result |= 2; { wchar_t wc = (wchar_t) 0xBADFACE; if (mbtowc (&wc, "\303\274", 2) == 2) if (wcrtomb (NULL, wc, NULL) != 1) result |= 2; } } if (setlocale (LC_ALL, "$LOCALE_JA") != NULL) { if (wcrtomb (NULL, 0, NULL) != 1) result |= 4; } if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) { if (wcrtomb (NULL, 0, NULL) != 1) result |= 8; } return result; }]])], [gl_cv_func_wcrtomb_retval=yes], [gl_cv_func_wcrtomb_retval=no], [:]) fi ]) case "$gl_cv_func_wcrtomb_retval" in *yes) ;; *) AC_DEFINE([WCRTOMB_RETVAL_BUG], [1], [Define if the wcrtomb function has an incorrect return value.]) REPLACE_WCRTOMB=1 ;; esac fi fi ]) # Prerequisites of lib/wcrtomb.c. AC_DEFUN([gl_PREREQ_WCRTOMB], [ : ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/inttypes.m4�����������������������������������������������������������������������������0000644�0001750�0001750�00000014312�14436424420�014773� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# inttypes.m4 serial 37 dnl Copyright (C) 2006-2023 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 Derek Price, Bruno Haible. dnl Test whether <inttypes.h> is supported or must be substituted. AC_DEFUN_ONCE([gl_INTTYPES_H], [ AC_REQUIRE([gl_INTTYPES_INCOMPLETE]) gl_INTTYPES_PRI_SCN ]) AC_DEFUN_ONCE([gl_INTTYPES_INCOMPLETE], [ AC_REQUIRE([gl_STDINT_H]) AC_CHECK_HEADERS_ONCE([inttypes.h]) dnl Override <inttypes.h> always, so that the portability warnings work. AC_REQUIRE([gl_INTTYPES_H_DEFAULTS]) gl_CHECK_NEXT_HEADERS([inttypes.h]) AC_REQUIRE([gl_MULTIARCH]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[#include <inttypes.h> ]], [imaxabs imaxdiv strtoimax strtoumax]) AC_REQUIRE([AC_C_RESTRICT]) ]) # Ensure that the PRI* and SCN* macros are defined appropriately. AC_DEFUN([gl_INTTYPES_PRI_SCN], [ PRIPTR_PREFIX= if $GL_GENERATE_STDINT_H; then dnl Using the gnulib <stdint.h>. It defines intptr_t to 'long' or dnl 'long long', depending on _WIN64. AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[ #ifdef _WIN64 LLP64 #endif ]]) ], [PRIPTR_PREFIX='"l"'], [PRIPTR_PREFIX='"ll"']) else dnl Using the system's <stdint.h>. for glpfx in '' l ll I64; do case $glpfx in '') gltype1='int';; l) gltype1='long int';; ll) gltype1='long long int';; I64) gltype1='__int64';; esac AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include <stdint.h> extern intptr_t foo; extern $gltype1 foo;]])], [PRIPTR_PREFIX='"'$glpfx'"']) test -n "$PRIPTR_PREFIX" && break done fi AC_SUBST([PRIPTR_PREFIX]) gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION( [INT32_MAX_LT_INTMAX_MAX], [defined INT32_MAX && defined INTMAX_MAX], [INT32_MAX < INTMAX_MAX], [sizeof (int) < sizeof (long long int)]) if test $APPLE_UNIVERSAL_BUILD = 0; then gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION( [INT64_MAX_EQ_LONG_MAX], [defined INT64_MAX], [INT64_MAX == LONG_MAX], [sizeof (long long int) == sizeof (long int)]) else INT64_MAX_EQ_LONG_MAX=-1 fi gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION( [UINT32_MAX_LT_UINTMAX_MAX], [defined UINT32_MAX && defined UINTMAX_MAX], [UINT32_MAX < UINTMAX_MAX], [sizeof (unsigned int) < sizeof (unsigned long long int)]) if test $APPLE_UNIVERSAL_BUILD = 0; then gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION( [UINT64_MAX_EQ_ULONG_MAX], [defined UINT64_MAX], [UINT64_MAX == ULONG_MAX], [sizeof (unsigned long long int) == sizeof (unsigned long int)]) else UINT64_MAX_EQ_ULONG_MAX=-1 fi ]) # Define the symbol $1 to be 1 if the condition is true, 0 otherwise. # If $2 is true, the condition is $3; otherwise if long long int is supported # approximate the condition with $4; otherwise, assume the condition is false. # The condition should work on all C99 platforms; the approximations should be # good enough to work on all practical pre-C99 platforms. # $2 is evaluated by the C preprocessor, $3 and $4 as compile-time constants. AC_DEFUN([gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION], [ AC_CACHE_CHECK([whether $3], [gl_cv_test_$1], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[/* Work also in C++ mode. */ #define __STDC_LIMIT_MACROS 1 /* Work if build is not clean. */ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H #include <limits.h> #if HAVE_STDINT_H #include <stdint.h> #endif #if $2 #define CONDITION ($3) #else #define CONDITION ($4) #endif int test[CONDITION ? 1 : -1];]])], [gl_cv_test_$1=yes], [gl_cv_test_$1=no])]) if test $gl_cv_test_$1 = yes; then $1=1; else $1=0; fi AC_SUBST([$1]) ]) # gl_INTTYPES_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_INTTYPES_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_INTTYPES_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_INTTYPES_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_INTTYPES_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_IMAXABS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_IMAXDIV]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRTOIMAX]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRTOUMAX]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_INTTYPES_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_INTTYPES_H_DEFAULTS]) ]) AC_DEFUN([gl_INTTYPES_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_DECL_IMAXABS=1; AC_SUBST([HAVE_DECL_IMAXABS]) HAVE_DECL_IMAXDIV=1; AC_SUBST([HAVE_DECL_IMAXDIV]) HAVE_DECL_STRTOIMAX=1; AC_SUBST([HAVE_DECL_STRTOIMAX]) HAVE_DECL_STRTOUMAX=1; AC_SUBST([HAVE_DECL_STRTOUMAX]) HAVE_IMAXDIV_T=1; AC_SUBST([HAVE_IMAXDIV_T]) HAVE_IMAXABS=1; AC_SUBST([HAVE_IMAXABS]) HAVE_IMAXDIV=1; AC_SUBST([HAVE_IMAXDIV]) REPLACE_IMAXABS=0; AC_SUBST([REPLACE_IMAXABS]) REPLACE_IMAXDIV=0; AC_SUBST([REPLACE_IMAXDIV]) REPLACE_STRTOIMAX=0; AC_SUBST([REPLACE_STRTOIMAX]) REPLACE_STRTOUMAX=0; AC_SUBST([REPLACE_STRTOUMAX]) INT32_MAX_LT_INTMAX_MAX=1; AC_SUBST([INT32_MAX_LT_INTMAX_MAX]) INT64_MAX_EQ_LONG_MAX='defined _LP64'; AC_SUBST([INT64_MAX_EQ_LONG_MAX]) PRIPTR_PREFIX=__PRIPTR_PREFIX; AC_SUBST([PRIPTR_PREFIX]) UINT32_MAX_LT_UINTMAX_MAX=1; AC_SUBST([UINT32_MAX_LT_UINTMAX_MAX]) UINT64_MAX_EQ_ULONG_MAX='defined _LP64'; AC_SUBST([UINT64_MAX_EQ_ULONG_MAX]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/stdio_h.m4������������������������������������������������������������������������������0000644�0001750�0001750�00000027556�14436424420�014563� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# stdio_h.m4 serial 63 dnl Copyright (C) 2007-2023 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. AC_DEFUN([gl_STDIO_H_EARLY], [ dnl Defining __USE_MINGW_ANSI_STDIO to 1 must be done early, because dnl the results of several configure tests depend on it: The tests dnl - checking whether snprintf returns a byte count as in C99... dnl - checking whether snprintf truncates the result as in C99... dnl - checking whether printf supports the 'F' directive... dnl - checking whether printf supports the grouping flag... dnl - checking whether printf supports the zero flag correctly... dnl - checking whether printf supports infinite 'double' arguments... dnl - checking whether printf supports large precisions... dnl report 'yes' if __USE_MINGW_ANSI_STDIO is 1 but 'no' if dnl __USE_MINGW_ANSI_STDIO is not set. AH_VERBATIM([MINGW_ANSI_STDIO], [/* Use GNU style printf and scanf. */ #ifndef __USE_MINGW_ANSI_STDIO # undef __USE_MINGW_ANSI_STDIO #endif ]) AC_DEFINE([__USE_MINGW_ANSI_STDIO]) ]) AC_DEFUN_ONCE([gl_STDIO_H], [ AC_REQUIRE([gl_STDIO_H_DEFAULTS]) gl_NEXT_HEADERS([stdio.h]) dnl Determine whether __USE_MINGW_ANSI_STDIO makes printf and dnl inttypes.h behave like gnu instead of system; we must give our dnl printf wrapper the right attribute to match. AC_CACHE_CHECK([which flavor of printf attribute matches inttypes macros], [gl_cv_func_printf_attribute_flavor], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #define __STDC_FORMAT_MACROS 1 #include <stdio.h> #include <inttypes.h> /* For non-mingw systems, compilation will trivially succeed. For mingw, compilation will succeed for older mingw (system printf, "I64d") and fail for newer mingw (gnu printf, "lld"). */ #if (defined _WIN32 && ! defined __CYGWIN__) && \ (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) extern char PRIdMAX_probe[sizeof PRIdMAX == sizeof "I64d" ? 1 : -1]; #endif ]])], [gl_cv_func_printf_attribute_flavor=system], [gl_cv_func_printf_attribute_flavor=gnu])]) if test "$gl_cv_func_printf_attribute_flavor" = gnu; then AC_DEFINE([GNULIB_PRINTF_ATTRIBUTE_FLAVOR_GNU], [1], [Define to 1 if printf and friends should be labeled with attribute "__gnu_printf__" instead of "__printf__"]) fi dnl For defining _PRINTF_NAN_LEN_MAX. gl_MUSL_LIBC dnl This ifdef is an optimization, to avoid performing a configure check whose dnl result is not used. But it does not make the test of dnl GNULIB_STDIO_H_NONBLOCKING or GNULIB_NONBLOCKING redundant. m4_ifdef([gl_NONBLOCKING_IO], [ gl_NONBLOCKING_IO if test $gl_cv_have_nonblocking != yes; then REPLACE_STDIO_READ_FUNCS=1 fi ]) dnl This ifdef is an optimization, to avoid performing a configure check whose dnl result is not used. But it does not make the test of dnl GNULIB_STDIO_H_SIGPIPE or GNULIB_SIGPIPE redundant. m4_ifdef([gl_SIGNAL_SIGPIPE], [ gl_SIGNAL_SIGPIPE if test $gl_cv_header_signal_h_SIGPIPE != yes; then REPLACE_STDIO_WRITE_FUNCS=1 fi ]) dnl This ifdef is an optimization, to avoid performing a configure check whose dnl result is not used. But it does not make the test of dnl GNULIB_STDIO_H_NONBLOCKING or GNULIB_NONBLOCKING redundant. m4_ifdef([gl_NONBLOCKING_IO], [ gl_NONBLOCKING_IO if test $gl_cv_have_nonblocking != yes; then REPLACE_STDIO_WRITE_FUNCS=1 fi ]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use, and which is not dnl guaranteed by both C89 and C11. gl_WARN_ON_USE_PREPARE([[#include <stdio.h> ]], [dprintf fpurge fseeko ftello getdelim getline gets pclose popen renameat snprintf tmpfile vdprintf vsnprintf]) AC_REQUIRE([AC_C_RESTRICT]) AC_CHECK_DECLS_ONCE([fcloseall]) if test $ac_cv_have_decl_fcloseall = no; then HAVE_DECL_FCLOSEALL=0 fi AC_CHECK_DECLS_ONCE([getw]) if test $ac_cv_have_decl_getw = no; then HAVE_DECL_GETW=0 fi AC_CHECK_DECLS_ONCE([putw]) if test $ac_cv_have_decl_putw = no; then HAVE_DECL_PUTW=0 fi ]) # gl_STDIO_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_STDIO_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_STDIO_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_STDIO_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_STDIO_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_DPRINTF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FCLOSE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FDOPEN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FFLUSH]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FGETC]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FGETS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FOPEN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FOPEN_GNU]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FPRINTF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FPRINTF_POSIX]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FPURGE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FPUTC]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FPUTS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FREAD]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FREOPEN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FSCANF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FSEEK]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FSEEKO]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FTELL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FTELLO]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FWRITE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETC]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETCHAR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETDELIM]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETLINE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_OBSTACK_PRINTF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_OBSTACK_PRINTF_POSIX]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PCLOSE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PERROR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_POPEN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PRINTF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PRINTF_POSIX]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PUTC]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PUTCHAR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PUTS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_REMOVE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RENAME]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RENAMEAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SCANF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SNPRINTF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SPRINTF_POSIX]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STDIO_H_NONBLOCKING]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STDIO_H_SIGPIPE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TMPFILE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_VASPRINTF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_VFSCANF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_VSCANF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_VDPRINTF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_VFPRINTF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_VFPRINTF_POSIX]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_VPRINTF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_VPRINTF_POSIX]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_VSNPRINTF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_VSPRINTF_POSIX]) dnl Support Microsoft deprecated alias function names by default. gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_FCLOSEALL], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_FDOPEN], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_FILENO], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_GETW], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_PUTW], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_TEMPNAM], [1]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_STDIO_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_STDIO_H_DEFAULTS]) ]) AC_DEFUN([gl_STDIO_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_DECL_FCLOSEALL=1; AC_SUBST([HAVE_DECL_FCLOSEALL]) HAVE_DECL_FPURGE=1; AC_SUBST([HAVE_DECL_FPURGE]) HAVE_DECL_FSEEKO=1; AC_SUBST([HAVE_DECL_FSEEKO]) HAVE_DECL_FTELLO=1; AC_SUBST([HAVE_DECL_FTELLO]) HAVE_DECL_GETDELIM=1; AC_SUBST([HAVE_DECL_GETDELIM]) HAVE_DECL_GETLINE=1; AC_SUBST([HAVE_DECL_GETLINE]) HAVE_DECL_GETW=1; AC_SUBST([HAVE_DECL_GETW]) HAVE_DECL_OBSTACK_PRINTF=1; AC_SUBST([HAVE_DECL_OBSTACK_PRINTF]) HAVE_DECL_PUTW=1; AC_SUBST([HAVE_DECL_PUTW]) HAVE_DECL_SNPRINTF=1; AC_SUBST([HAVE_DECL_SNPRINTF]) HAVE_DECL_VSNPRINTF=1; AC_SUBST([HAVE_DECL_VSNPRINTF]) HAVE_DPRINTF=1; AC_SUBST([HAVE_DPRINTF]) HAVE_FSEEKO=1; AC_SUBST([HAVE_FSEEKO]) HAVE_FTELLO=1; AC_SUBST([HAVE_FTELLO]) HAVE_PCLOSE=1; AC_SUBST([HAVE_PCLOSE]) HAVE_POPEN=1; AC_SUBST([HAVE_POPEN]) HAVE_RENAMEAT=1; AC_SUBST([HAVE_RENAMEAT]) HAVE_VASPRINTF=1; AC_SUBST([HAVE_VASPRINTF]) HAVE_VDPRINTF=1; AC_SUBST([HAVE_VDPRINTF]) REPLACE_DPRINTF=0; AC_SUBST([REPLACE_DPRINTF]) REPLACE_FCLOSE=0; AC_SUBST([REPLACE_FCLOSE]) REPLACE_FDOPEN=0; AC_SUBST([REPLACE_FDOPEN]) REPLACE_FFLUSH=0; AC_SUBST([REPLACE_FFLUSH]) REPLACE_FOPEN=0; AC_SUBST([REPLACE_FOPEN]) REPLACE_FOPEN_FOR_FOPEN_GNU=0; AC_SUBST([REPLACE_FOPEN_FOR_FOPEN_GNU]) REPLACE_FPRINTF=0; AC_SUBST([REPLACE_FPRINTF]) REPLACE_FPURGE=0; AC_SUBST([REPLACE_FPURGE]) REPLACE_FREOPEN=0; AC_SUBST([REPLACE_FREOPEN]) REPLACE_FSEEK=0; AC_SUBST([REPLACE_FSEEK]) REPLACE_FSEEKO=0; AC_SUBST([REPLACE_FSEEKO]) REPLACE_FTELL=0; AC_SUBST([REPLACE_FTELL]) REPLACE_FTELLO=0; AC_SUBST([REPLACE_FTELLO]) REPLACE_GETDELIM=0; AC_SUBST([REPLACE_GETDELIM]) REPLACE_GETLINE=0; AC_SUBST([REPLACE_GETLINE]) REPLACE_OBSTACK_PRINTF=0; AC_SUBST([REPLACE_OBSTACK_PRINTF]) REPLACE_PERROR=0; AC_SUBST([REPLACE_PERROR]) REPLACE_POPEN=0; AC_SUBST([REPLACE_POPEN]) REPLACE_PRINTF=0; AC_SUBST([REPLACE_PRINTF]) REPLACE_REMOVE=0; AC_SUBST([REPLACE_REMOVE]) REPLACE_RENAME=0; AC_SUBST([REPLACE_RENAME]) REPLACE_RENAMEAT=0; AC_SUBST([REPLACE_RENAMEAT]) REPLACE_SNPRINTF=0; AC_SUBST([REPLACE_SNPRINTF]) REPLACE_SPRINTF=0; AC_SUBST([REPLACE_SPRINTF]) REPLACE_STDIO_READ_FUNCS=0; AC_SUBST([REPLACE_STDIO_READ_FUNCS]) REPLACE_STDIO_WRITE_FUNCS=0; AC_SUBST([REPLACE_STDIO_WRITE_FUNCS]) REPLACE_TMPFILE=0; AC_SUBST([REPLACE_TMPFILE]) REPLACE_VASPRINTF=0; AC_SUBST([REPLACE_VASPRINTF]) REPLACE_VDPRINTF=0; AC_SUBST([REPLACE_VDPRINTF]) REPLACE_VFPRINTF=0; AC_SUBST([REPLACE_VFPRINTF]) REPLACE_VPRINTF=0; AC_SUBST([REPLACE_VPRINTF]) REPLACE_VSNPRINTF=0; AC_SUBST([REPLACE_VSNPRINTF]) REPLACE_VSPRINTF=0; AC_SUBST([REPLACE_VSPRINTF]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/btowc.m4��������������������������������������������������������������������������������0000644�0001750�0001750�00000010662�14436424420�014236� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# btowc.m4 serial 13 dnl Copyright (C) 2008-2023 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. AC_DEFUN([gl_FUNC_BTOWC], [ AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) dnl Check whether <wchar.h> is usable at all, first. Otherwise the test dnl program below may lead to an endless loop. See dnl <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=42440>. AC_REQUIRE([gl_WCHAR_H_INLINE_OK]) AC_CHECK_FUNCS_ONCE([btowc]) if test $ac_cv_func_btowc = no; then HAVE_BTOWC=0 else AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gt_LOCALE_FR]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl Cygwin 1.7.2 btowc('\0') is WEOF, not 0. AC_CACHE_CHECK([whether btowc(0) is correct], [gl_cv_func_btowc_nul], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <wchar.h> int main () { if (btowc ('\0') != 0) return 1; return 0; }]])], [gl_cv_func_btowc_nul=yes], [gl_cv_func_btowc_nul=no], [ changequote(,)dnl case "$host_os" in # Guess no on Cygwin. cygwin*) gl_cv_func_btowc_nul="guessing no" ;; # Guess yes on native Windows. mingw*) gl_cv_func_btowc_nul="guessing yes" ;; # Guess yes otherwise. *) gl_cv_func_btowc_nul="guessing yes" ;; esac changequote([,])dnl ]) ]) dnl IRIX 6.5 btowc(EOF) is 0xFF, not WEOF. AC_CACHE_CHECK([whether btowc(EOF) is correct], [gl_cv_func_btowc_eof], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. changequote(,)dnl case "$host_os" in # Guess no on IRIX. irix*) gl_cv_func_btowc_eof="guessing no" ;; # Guess yes on native Windows. mingw*) gl_cv_func_btowc_eof="guessing yes" ;; # Guess yes otherwise. *) gl_cv_func_btowc_eof="guessing yes" ;; esac changequote([,])dnl if test $LOCALE_FR != none; then AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> #include <stdio.h> #include <wchar.h> int main () { if (setlocale (LC_ALL, "$LOCALE_FR") != NULL) { if (btowc (EOF) != WEOF) return 1; } return 0; }]])], [gl_cv_func_btowc_eof=yes], [gl_cv_func_btowc_eof=no], [:]) fi ]) dnl On mingw, in the C locale, btowc is inconsistent with mbrtowc: dnl mbrtowc avoids calling MultiByteToWideChar when MB_CUR_MAX is 1 and dnl ___lc_codepage_func() is 0, but btowc is lacking this special case. AC_CHECK_FUNCS_ONCE([mbrtowc]) AC_CACHE_CHECK([whether btowc is consistent with mbrtowc in the C locale], [gl_cv_func_btowc_consistent], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stdlib.h> #include <string.h> #include <wchar.h> int main () { #if HAVE_MBRTOWC wint_t wc1 = btowc (0x80); wchar_t wc2 = (wchar_t) 0xbadface; char buf[1] = { 0x80 }; mbstate_t state; memset (&state, 0, sizeof (mbstate_t)); if (mbrtowc (&wc2, buf, 1, &state) != 1 || wc1 != wc2) return 1; #endif return 0; }]])], [gl_cv_func_btowc_consistent=yes], [gl_cv_func_btowc_consistent=no], [case "$host_os" in # Guess no on mingw. mingw*) AC_EGREP_CPP([Problem], [ #ifdef __MINGW32__ Problem #endif ], [gl_cv_func_btowc_consistent="guessing no"], [gl_cv_func_btowc_consistent="guessing yes"]) ;; # Guess yes otherwise. *) gl_cv_func_btowc_consistent="guessing yes" ;; esac ]) ]) case "$gl_cv_func_btowc_nul" in *yes) ;; *) REPLACE_BTOWC=1 ;; esac case "$gl_cv_func_btowc_eof" in *yes) ;; *) REPLACE_BTOWC=1 ;; esac case "$gl_cv_func_btowc_consistent" in *yes) ;; *) REPLACE_BTOWC=1 ;; esac if test $REPLACE_BTOWC = 0; then gl_MBRTOWC_C_LOCALE case "$gl_cv_func_mbrtowc_C_locale_sans_EILSEQ" in *yes) ;; *) REPLACE_BTOWC=1 ;; esac fi fi ]) # Prerequisites of lib/btowc.c. AC_DEFUN([gl_PREREQ_BTOWC], [ : AC_CHECK_FUNCS_ONCE([mbrtowc]) ]) ������������������������������������������������������������������������������rush-2.4/m4/xalloc.m4�������������������������������������������������������������������������������0000644�0001750�0001750�00000000472�14436424420�014400� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# xalloc.m4 serial 18 dnl Copyright (C) 2002-2006, 2009-2023 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. AC_DEFUN([gl_XALLOC], [:]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/largefile.m4����������������������������������������������������������������������������0000644�0001750�0001750�00000033564�14436424420�015060� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Enable large files on systems where this is not the default. # Enable support for files on Linux file systems with 64-bit inode numbers. # Copyright 1992-1996, 1998-2023 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. # The following macro works around a problem in Autoconf's AC_FUNC_FSEEKO: # It does not set _LARGEFILE_SOURCE=1 on HP-UX/ia64 32-bit, although this # setting of _LARGEFILE_SOURCE is needed so that <stdio.h> declares fseeko # and ftello in C++ mode as well. # This problem occurs in Autoconf 2.71 and earlier, which lack AC_SYS_YEAR2038. AC_DEFUN([gl_SET_LARGEFILE_SOURCE], m4_ifndef([AC_SYS_YEAR2038], [[ AC_REQUIRE([AC_CANONICAL_HOST]) AC_FUNC_FSEEKO case "$host_os" in hpux*) AC_DEFINE([_LARGEFILE_SOURCE], [1], [Define to 1 to make fseeko visible on some hosts (e.g. glibc 2.2).]) ;; esac ]]) ) m4_ifndef([AC_SYS_YEAR2038_RECOMMENDED], [ # Support AC_SYS_YEAR2038_RECOMMENDED and related macros, even if # Autoconf 2.71 or earlier. This code is taken from Autoconf master. # _AC_SYS_YEAR2038_TEST_CODE # -------------------------- # C code used to probe for time_t that can represent time points more # than 2**31 - 1 seconds after the epoch. With the usual Unix epoch, # these correspond to dates after 2038-01-18 22:14:07 +0000 (Gregorian), # hence the name. AC_DEFUN([_AC_SYS_YEAR2038_TEST_CODE], [[ #include <time.h> /* Check that time_t can represent 2**32 - 1 correctly. */ #define LARGE_TIME_T \\ ((time_t) (((time_t) 1 << 30) - 1 + 3 * ((time_t) 1 << 30))) int verify_time_t_range[(LARGE_TIME_T / 65537 == 65535 && LARGE_TIME_T % 65537 == 0) ? 1 : -1]; ]]) # _AC_SYS_YEAR2038_OPTIONS # ------------------------ # List of known ways to enable support for large time_t. If you change # this list you probably also need to change the AS_CASE at the end of # _AC_SYS_YEAR2038_PROBE. m4_define([_AC_SYS_YEAR2038_OPTIONS], m4_normalize( ["none needed"] dnl 64-bit and newer 32-bit Unix ["-D_TIME_BITS=64"] dnl glibc 2.34 with some 32-bit ABIs ["-D__MINGW_USE_VC2005_COMPAT"] dnl 32-bit MinGW ["-U_USE_32_BIT_TIME_T -D__MINGW_USE_VC2005_COMPAT"] dnl 32-bit MinGW (misconfiguration) )) # _AC_SYS_YEAR2038_PROBE # ---------------------- # Subroutine of AC_SYS_YEAR2038. Probe for time_t that can represent # time points more than 2**31 - 1 seconds after the epoch (dates after # 2038-01-18, see above) and set the cache variable ac_cv_sys_year2038_opts # to one of the values in the _AC_SYS_YEAR2038_OPTIONS list, or to # "support not detected" if none of them worked. Then, set compilation # options and #defines as necessary to enable large time_t support. # # Note that we do not test whether mktime, localtime, etc. handle # large values of time_t correctly, as that would require use of # AC_TRY_RUN. Note also that some systems only support large time_t # together with large off_t. # # If you change this macro you may also need to change # _AC_SYS_YEAR2038_OPTIONS. AC_DEFUN([_AC_SYS_YEAR2038_PROBE], [AC_CACHE_CHECK([for $CC option for timestamps after 2038], [ac_cv_sys_year2038_opts], [ac_save_CPPFLAGS="$CPPFLAGS" ac_opt_found=no for ac_opt in _AC_SYS_YEAR2038_OPTIONS; do AS_IF([test x"$ac_opt" != x"none needed"], [CPPFLAGS="$ac_save_CPPFLAGS $ac_opt"]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([_AC_SYS_YEAR2038_TEST_CODE])], [ac_cv_sys_year2038_opts="$ac_opt" ac_opt_found=yes]) test $ac_opt_found = no || break done CPPFLAGS="$ac_save_CPPFLAGS" test $ac_opt_found = yes || ac_cv_sys_year2038_opts="support not detected"]) ac_have_year2038=yes AS_CASE([$ac_cv_sys_year2038_opts], ["none needed"], [], ["support not detected"], [ac_have_year2038=no], ["-D_TIME_BITS=64"], [AC_DEFINE([_TIME_BITS], [64], [Number of bits in time_t, on hosts where this is settable.])], ["-D__MINGW_USE_VC2005_COMPAT"], [AC_DEFINE([__MINGW_USE_VC2005_COMPAT], [1], [Define to 1 on platforms where this makes time_t a 64-bit type.])], ["-U_USE_32_BIT_TIME_T"*], [AC_MSG_FAILURE(m4_text_wrap( [the 'time_t' type is currently forced to be 32-bit. It will stop working after mid-January 2038. Remove _USE_32BIT_TIME_T from the compiler flags.], [], [], [55]))], [AC_MSG_ERROR( [internal error: bad value for \$ac_cv_sys_year2038_opts])]) ]) # _AC_SYS_YEAR2038_ENABLE # ----------------------- # Depending on which of the YEAR2038 macros was used, add either an # --enable-year2038 or a --disable-year2038 to # the configure script. This is expanded very late and # therefore there cannot be any code in the AC_ARG_ENABLE. The # default value for 'enable_year2038' is emitted unconditionally # because the generated code always looks at this variable. m4_define([_AC_SYS_YEAR2038_ENABLE], [m4_divert_text([DEFAULTS], m4_provide_if([AC_SYS_YEAR2038], [enable_year2038=yes], [enable_year2038=no]))]dnl [AC_ARG_ENABLE([year2038], m4_provide_if([AC_SYS_YEAR2038], [AS_HELP_STRING([--disable-year2038], [don't support timestamps after 2038])], [AS_HELP_STRING([--enable-year2038], [support timestamps after 2038])]))]) # AC_SYS_YEAR2038 # --------------- # Attempt to detect and activate support for large time_t. # On systems where time_t is not always 64 bits, this probe can be # skipped by passing the --disable-year2038 option to configure. AC_DEFUN([AC_SYS_YEAR2038], [AC_REQUIRE([AC_SYS_LARGEFILE])dnl AS_IF([test "$enable_year2038,$ac_have_year2038,$cross_compiling" = yes,no,no], [# If we're not cross compiling and 'touch' works with a large # timestamp, then we can presume the system supports wider time_t # *somehow* and we just weren't able to detect it. One common # case that we deliberately *don't* probe for is a system that # supports both 32- and 64-bit ABIs but only the 64-bit ABI offers # wide time_t. (It would be inappropriate for us to override an # intentional use of -m32.) Error out, demanding use of # --disable-year2038 if this is intentional. AS_IF([TZ=UTC0 touch -t 210602070628.15 conftest.time 2>/dev/null], [AS_CASE([`TZ=UTC0 LC_ALL=C ls -l conftest.time 2>/dev/null`], [*'Feb 7 2106'* | *'Feb 7 17:10'*], [AC_MSG_FAILURE(m4_text_wrap( [this system appears to support timestamps after mid-January 2038, but no mechanism for enabling wide 'time_t' was detected. Did you mean to build a 64-bit binary? (E.g., 'CC="${CC} -m64"'.) To proceed with 32-bit time_t, configure with '--disable-year2038'.], [], [], [55]))])])])]) # AC_SYS_YEAR2038_RECOMMENDED # --------------------------- # Same as AC_SYS_YEAR2038, but recommend support for large time_t. # If we cannot find any way to make time_t capable of representing # values larger than 2**31 - 1, error out unless --disable-year2038 is given. AC_DEFUN([AC_SYS_YEAR2038_RECOMMENDED], [AC_REQUIRE([AC_SYS_YEAR2038])dnl AS_IF([test "$enable_year2038,$ac_have_year2038" = yes,no], [AC_MSG_FAILURE(m4_text_wrap( [could not enable timestamps after mid-January 2038. This package recommends support for these later timestamps. However, to proceed with signed 32-bit time_t even though it will fail then, configure with '--disable-year2038'.], [], [], [55]))])]) # _AC_SYS_LARGEFILE_TEST_CODE # --------------------------- # C code used to probe for large file support. m4_define([_AC_SYS_LARGEFILE_TEST_CODE], [@%:@include <sys/types.h> /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ @%:@define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31)) int off_t_is_large[[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]];[]dnl ]) # Defined by Autoconf 2.71 and circa 2022 Gnulib unwisely depended on it. m4_define([_AC_SYS_LARGEFILE_TEST_INCLUDES], [_AC_SYS_LARGEFILE_TEST_CODE]) # _AC_SYS_LARGEFILE_OPTIONS # ------------------------- # List of known ways to enable support for large files. If you change # this list you probably also need to change the AS_CASE at the end of # _AC_SYS_LARGEFILE_PROBE. m4_define([_AC_SYS_LARGEFILE_OPTIONS], m4_normalize( ["none needed"] dnl Most current systems ["-D_FILE_OFFSET_BITS=64"] dnl X/Open LFS spec ["-D_LARGE_FILES=1"] dnl 32-bit AIX 4.2.1+, 32-bit z/OS ["-n32"] dnl 32-bit IRIX 6, SGI cc (obsolete) )) # _AC_SYS_LARGEFILE_PROBE # ----------------------- # Subroutine of AC_SYS_LARGEFILE. Probe for large file support and set # the cache variable ac_cv_sys_largefile_opts to one of the values in # the _AC_SYS_LARGEFILE_OPTIONS list, or to "support not detected" if # none of the options in that list worked. Then, set compilation # options and #defines as necessary to enable large file support. # # If large file support is not detected, the behavior depends on which of # the top-level AC_SYS_LARGEFILE macros was used (see below). # # If you change this macro you may also need to change # _AC_SYS_LARGEFILE_OPTIONS. AC_DEFUN([_AC_SYS_LARGEFILE_PROBE], [AC_CACHE_CHECK([for $CC option to enable large file support], [ac_cv_sys_largefile_opts], [ac_save_CC="$CC" ac_opt_found=no for ac_opt in _AC_SYS_LARGEFILE_OPTIONS; do AS_IF([test x"$ac_opt" != x"none needed"], [CC="$ac_save_CC $ac_opt"]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([_AC_SYS_LARGEFILE_TEST_CODE])], [ac_cv_sys_largefile_opts="$ac_opt" ac_opt_found=yes]) test $ac_opt_found = no || break done CC="$ac_save_CC" dnl Gnulib implements large file support for native Windows, based on the dnl variables WINDOWS_64_BIT_OFF_T, WINDOWS_64_BIT_ST_SIZE. m4_ifdef([gl_LARGEFILE], [ AC_REQUIRE([AC_CANONICAL_HOST]) if test $ac_opt_found != yes; then AS_CASE([$host_os], [mingw*], [ac_cv_sys_largefile_opts="supported through gnulib" ac_opt_found=yes] ) fi ]) test $ac_opt_found = yes || ac_cv_sys_largefile_opts="support not detected"]) ac_have_largefile=yes AS_CASE([$ac_cv_sys_largefile_opts], ["none needed"], [], ["supported through gnulib"], [], ["support not detected"], [ac_have_largefile=no], ["-D_FILE_OFFSET_BITS=64"], [AC_DEFINE([_FILE_OFFSET_BITS], [64], [Number of bits in a file offset, on hosts where this is settable.])], ["-D_LARGE_FILES=1"], [AC_DEFINE([_LARGE_FILES], [1], [Define to 1 on platforms where this makes off_t a 64-bit type.])], ["-n32"], [CC="$CC -n32"], [AC_MSG_ERROR( [internal error: bad value for \$ac_cv_sys_largefile_opts])]) AS_IF([test "$enable_year2038" != no], [_AC_SYS_YEAR2038_PROBE]) AC_CONFIG_COMMANDS_PRE([_AC_SYS_YEAR2038_ENABLE])]) # AC_SYS_LARGEFILE # ---------------- # By default, many hosts won't let programs access large files; # one must use special compiler options to get large-file access to work. # For more details about this brain damage please see: # http://www.unix.org/version2/whatsnew/lfs20mar.html # Additionally, on Linux file systems with 64-bit inodes a file that happens # to have a 64-bit inode number cannot be accessed by 32-bit applications on # Linux x86/x86_64. This can occur with file systems such as XFS and NFS. AC_DEFUN([AC_SYS_LARGEFILE], [AC_ARG_ENABLE([largefile], [AS_HELP_STRING([--disable-largefile], [omit support for large files])])dnl AS_IF([test "$enable_largefile,$enable_year2038" != no,no], [_AC_SYS_LARGEFILE_PROBE])]) ])# m4_ifndef AC_SYS_YEAR2038_RECOMMENDED # Enable large files on systems where this is implemented by Gnulib, not by the # system headers. # Set the variables WINDOWS_64_BIT_OFF_T, WINDOWS_64_BIT_ST_SIZE if Gnulib # overrides ensure that off_t or 'struct size.st_size' are 64-bit, respectively. AC_DEFUN([gl_LARGEFILE], [ AC_REQUIRE([AC_CANONICAL_HOST]) case "$host_os" in mingw*) dnl Native Windows. dnl mingw64 defines off_t to a 64-bit type already, if dnl _FILE_OFFSET_BITS=64, which is ensured by AC_SYS_LARGEFILE. AC_CACHE_CHECK([for 64-bit off_t], [gl_cv_type_off_t_64], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <sys/types.h> int verify_off_t_size[sizeof (off_t) >= 8 ? 1 : -1]; ]], [[]])], [gl_cv_type_off_t_64=yes], [gl_cv_type_off_t_64=no]) ]) if test $gl_cv_type_off_t_64 = no; then WINDOWS_64_BIT_OFF_T=1 else WINDOWS_64_BIT_OFF_T=0 fi dnl Some mingw versions define, if _FILE_OFFSET_BITS=64, 'struct stat' dnl to 'struct _stat32i64' or 'struct _stat64' (depending on dnl _USE_32BIT_TIME_T), which has a 32-bit st_size member. AC_CACHE_CHECK([for 64-bit st_size], [gl_cv_member_st_size_64], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <sys/types.h> struct stat buf; int verify_st_size_size[sizeof (buf.st_size) >= 8 ? 1 : -1]; ]], [[]])], [gl_cv_member_st_size_64=yes], [gl_cv_member_st_size_64=no]) ]) if test $gl_cv_member_st_size_64 = no; then WINDOWS_64_BIT_ST_SIZE=1 else WINDOWS_64_BIT_ST_SIZE=0 fi ;; *) dnl Nothing to do on gnulib's side. dnl A 64-bit off_t is dnl - already the default on Mac OS X, FreeBSD, NetBSD, OpenBSD, IRIX, dnl OSF/1, Cygwin, dnl - enabled by _FILE_OFFSET_BITS=64 (ensured by AC_SYS_LARGEFILE) on dnl glibc, HP-UX, Solaris, dnl - enabled by _LARGE_FILES=1 (ensured by AC_SYS_LARGEFILE) on AIX, dnl - impossible to achieve on Minix 3.1.8. WINDOWS_64_BIT_OFF_T=0 WINDOWS_64_BIT_ST_SIZE=0 ;; esac ]) ��������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/assert_h.m4�����������������������������������������������������������������������������0000644�0001750�0001750�00000005204�14436424420�014724� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# assert-h.m4 dnl Copyright (C) 2011-2023 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 Paul Eggert. AC_DEFUN([gl_ASSERT_H], [ AC_CACHE_CHECK([for static_assert], [gl_cv_static_assert], [gl_save_CFLAGS=$CFLAGS for gl_working in "yes, a keyword" "yes, an <assert.h> macro"; do AS_CASE([$gl_working], [*assert.h*], [CFLAGS="$gl_save_CFLAGS -DINCLUDE_ASSERT_H"]) AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#if defined __clang__ && __STDC_VERSION__ < 202311 #pragma clang diagnostic error "-Wc2x-extensions" #pragma clang diagnostic error "-Wc++1z-extensions" #endif #ifdef INCLUDE_ASSERT_H #include <assert.h> #endif static_assert (2 + 2 == 4, "arithmetic does not work"); static_assert (2 + 2 == 4); ]], [[ static_assert (sizeof (char) == 1, "sizeof does not work"); static_assert (sizeof (char) == 1); ]])], [gl_cv_static_assert=$gl_working], [gl_cv_static_assert=no]) CFLAGS=$gl_save_CFLAGS test "$gl_cv_static_assert" != no && break done]) GL_GENERATE_ASSERT_H=false AS_CASE([$gl_cv_static_assert], [yes*keyword*], [AC_DEFINE([HAVE_C_STATIC_ASSERT], [1], [Define to 1 if the static_assert keyword works.])], [no], [GL_GENERATE_ASSERT_H=true gl_NEXT_HEADERS([assert.h])]) dnl The "zz" puts this toward config.h's end, to avoid potential dnl collisions with other definitions. dnl #undef assert so that programs are not tempted to use it without dnl specifically including assert.h. dnl #undef __ASSERT_H__ so that on IRIX, when programs later include dnl <assert.h>, this include actually defines assert. dnl Break the #undef_s apart with a comment so that 'configure' does dnl not comment them out. AH_VERBATIM([zzstatic_assert], [#if (!defined HAVE_C_STATIC_ASSERT && !defined assert \ && (!defined __cplusplus \ || (__cpp_static_assert < 201411 \ && __GNUG__ < 6 && __clang_major__ < 6))) #include <assert.h> #undef/**/assert #ifdef __sgi #undef/**/__ASSERT_H__ #endif /* Solaris 11.4 <assert.h> defines static_assert as a macro with 2 arguments. We need it also to be invocable with a single argument. */ #if defined __sun && (__STDC_VERSION__ - 0 >= 201112L) && !defined __cplusplus #undef/**/static_assert #define static_assert _Static_assert #endif #endif]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/getopt.m4�������������������������������������������������������������������������������0000644�0001750�0001750�00000031445�14436424420�014424� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# getopt.m4 serial 48 dnl Copyright (C) 2002-2006, 2008-2023 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. # Request a POSIX compliant getopt function. AC_DEFUN([gl_FUNC_GETOPT_POSIX], [ m4_divert_text([DEFAULTS], [gl_getopt_required=POSIX]) AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([gl_GETOPT_CHECK_HEADERS]) dnl Other modules can request the gnulib implementation of the getopt dnl functions unconditionally, by defining gl_REPLACE_GETOPT_ALWAYS. dnl argp.m4 does this. m4_ifdef([gl_REPLACE_GETOPT_ALWAYS], [ REPLACE_GETOPT=1 ], [ REPLACE_GETOPT=0 if test -n "$gl_replace_getopt"; then REPLACE_GETOPT=1 fi ]) GL_GENERATE_GETOPT_H=false GL_GENERATE_GETOPT_CDEFS_H=false if test $REPLACE_GETOPT = 1; then dnl Arrange for getopt.h to be created. gl_GETOPT_SUBSTITUTE_HEADER fi ]) # Request a POSIX compliant getopt function with GNU extensions (such as # options with optional arguments) and the functions getopt_long, # getopt_long_only. AC_DEFUN([gl_FUNC_GETOPT_GNU], [ dnl Set the variable gl_getopt_required, so that all invocations of dnl gl_GETOPT_CHECK_HEADERS in the scope of the current configure file dnl will check for getopt with GNU extensions. dnl This means that if one gnulib-tool invocation requests getopt-posix dnl and another gnulib-tool invocation requests getopt-gnu, it is as if dnl both had requested getopt-gnu. m4_divert_text([INIT_PREPARE], [gl_getopt_required=GNU]) dnl No need to invoke gl_FUNC_GETOPT_POSIX here; this is automatically dnl done through the module dependency getopt-gnu -> getopt-posix. ]) # Determine whether to replace the entire getopt facility. AC_DEFUN([gl_GETOPT_CHECK_HEADERS], [ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_REQUIRE([AC_PROG_AWK]) dnl for awk that supports ENVIRON dnl Persuade Solaris <unistd.h> to declare optarg, optind, opterr, optopt. AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) gl_CHECK_NEXT_HEADERS([getopt.h]) if test $ac_cv_header_getopt_h = yes; then HAVE_GETOPT_H=1 else HAVE_GETOPT_H=0 fi AC_SUBST([HAVE_GETOPT_H]) gl_replace_getopt= dnl Test whether <getopt.h> is available. if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then AC_CHECK_HEADERS([getopt.h], [], [gl_replace_getopt=yes]) fi dnl Test whether the function getopt_long is available. if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then AC_CHECK_FUNCS([getopt_long_only], [], [gl_replace_getopt=yes]) fi dnl POSIX 2008 does not specify leading '+' behavior, but see dnl http://austingroupbugs.net/view.php?id=191 for a recommendation on dnl the next version of POSIX. For now, we only guarantee leading '+' dnl behavior with getopt-gnu. if test -z "$gl_replace_getopt"; then AC_CACHE_CHECK([whether getopt is POSIX compatible], [gl_cv_func_getopt_posix], [ dnl Merging these three different test programs into a single one dnl would require a reset mechanism. On BSD systems, it can be done dnl through 'optreset'; on some others (glibc), it can be done by dnl setting 'optind' to 0; on others again (HP-UX, IRIX, OSF/1, dnl Solaris 9, musl libc), there is no such mechanism. if test $cross_compiling = no; then dnl Sanity check. Succeeds everywhere (except on MSVC, dnl which lacks <unistd.h> and getopt() entirely). AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <unistd.h> #include <stdlib.h> #include <string.h> int main () { static char program[] = "program"; static char a[] = "-a"; static char foo[] = "foo"; static char bar[] = "bar"; char *argv[] = { program, a, foo, bar, NULL }; int c; c = getopt (4, argv, "ab"); if (!(c == 'a')) return 1; c = getopt (4, argv, "ab"); if (!(c == -1)) return 2; if (!(optind == 2)) return 3; return 0; } ]])], [gl_cv_func_getopt_posix=maybe], [gl_cv_func_getopt_posix=no]) if test $gl_cv_func_getopt_posix = maybe; then dnl Sanity check with '+'. Succeeds everywhere (except on MSVC, dnl which lacks <unistd.h> and getopt() entirely). AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <unistd.h> #include <stdlib.h> #include <string.h> int main () { static char program[] = "program"; static char donald[] = "donald"; static char p[] = "-p"; static char billy[] = "billy"; static char duck[] = "duck"; static char a[] = "-a"; static char bar[] = "bar"; char *argv[] = { program, donald, p, billy, duck, a, bar, NULL }; int c; c = getopt (7, argv, "+abp:q:"); if (!(c == -1)) return 4; if (!(strcmp (argv[0], "program") == 0)) return 5; if (!(strcmp (argv[1], "donald") == 0)) return 6; if (!(strcmp (argv[2], "-p") == 0)) return 7; if (!(strcmp (argv[3], "billy") == 0)) return 8; if (!(strcmp (argv[4], "duck") == 0)) return 9; if (!(strcmp (argv[5], "-a") == 0)) return 10; if (!(strcmp (argv[6], "bar") == 0)) return 11; if (!(optind == 1)) return 12; return 0; } ]])], [gl_cv_func_getopt_posix=maybe], [gl_cv_func_getopt_posix=no]) fi if test $gl_cv_func_getopt_posix = maybe; then dnl Detect Mac OS X 10.5, AIX 7.1, mingw bug. AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <unistd.h> #include <stdlib.h> #include <string.h> int main () { static char program[] = "program"; static char ab[] = "-ab"; char *argv[3] = { program, ab, NULL }; if (getopt (2, argv, "ab:") != 'a') return 13; if (getopt (2, argv, "ab:") != '?') return 14; if (optopt != 'b') return 15; if (optind != 2) return 16; return 0; } ]])], [gl_cv_func_getopt_posix=yes], [gl_cv_func_getopt_posix=no]) fi else case "$host_os" in darwin* | aix* | mingw*) gl_cv_func_getopt_posix="guessing no";; *) gl_cv_func_getopt_posix="guessing yes";; esac fi ]) case "$gl_cv_func_getopt_posix" in *no) gl_replace_getopt=yes ;; esac fi if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then AC_CACHE_CHECK([for working GNU getopt function], [gl_cv_func_getopt_gnu], [# Even with POSIXLY_CORRECT, the GNU extension of leading '-' in the # optstring is necessary for programs like m4 that have POSIX-mandated # semantics for supporting options interspersed with files. # Also, since getopt_long is a GNU extension, we require optind=0. # Bash ties 'set -o posix' to a non-exported POSIXLY_CORRECT; # so take care to revert to the correct (non-)export state. dnl GNU Coding Standards currently allow awk but not env; besides, env dnl is ambiguous with environment values that contain newlines. gl_awk_probe='BEGIN { if ("POSIXLY_CORRECT" in ENVIRON) print "x" }' case ${POSIXLY_CORRECT+x}`$AWK "$gl_awk_probe" </dev/null` in xx) gl_had_POSIXLY_CORRECT=exported ;; x) gl_had_POSIXLY_CORRECT=yes ;; *) gl_had_POSIXLY_CORRECT= ;; esac POSIXLY_CORRECT=1 export POSIXLY_CORRECT AC_RUN_IFELSE( [AC_LANG_PROGRAM([[#include <getopt.h> #include <stddef.h> #include <string.h> ]GL_NOCRASH[ ]], [[ int result = 0; nocrash_init(); /* This code succeeds on glibc 2.8, OpenBSD 4.0, Cygwin, mingw, and fails on Mac OS X 10.5, AIX 5.2, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 10. */ { static char conftest[] = "conftest"; static char plus[] = "-+"; char *argv[3] = { conftest, plus, NULL }; opterr = 0; if (getopt (2, argv, "+a") != '?') result |= 1; } /* This code succeeds on glibc 2.8, mingw, and fails on Mac OS X 10.5, OpenBSD 4.0, AIX 5.2, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 10, Cygwin 1.5.x. */ { static char program[] = "program"; static char p[] = "-p"; static char foo[] = "foo"; static char bar[] = "bar"; char *argv[] = { program, p, foo, bar, NULL }; optind = 1; if (getopt (4, argv, "p::") != 'p') result |= 2; else if (optarg != NULL) result |= 4; else if (getopt (4, argv, "p::") != -1) result |= 6; else if (optind != 2) result |= 8; } /* This code succeeds on glibc 2.8 and fails on Cygwin 1.7.0. */ { static char program[] = "program"; static char foo[] = "foo"; static char p[] = "-p"; char *argv[] = { program, foo, p, NULL }; optind = 0; if (getopt (3, argv, "-p") != 1) result |= 16; else if (getopt (3, argv, "-p") != 'p') result |= 16; } /* This code fails on glibc 2.11. */ { static char program[] = "program"; static char b[] = "-b"; static char a[] = "-a"; char *argv[] = { program, b, a, NULL }; optind = opterr = 0; if (getopt (3, argv, "+:a:b") != 'b') result |= 32; else if (getopt (3, argv, "+:a:b") != ':') result |= 32; } /* This code dumps core on glibc 2.14. */ { static char program[] = "program"; static char w[] = "-W"; static char dummy[] = "dummy"; char *argv[] = { program, w, dummy, NULL }; optind = opterr = 1; if (getopt (3, argv, "W;") != 'W') result |= 64; } return result; ]])], [gl_cv_func_getopt_gnu=yes], [gl_cv_func_getopt_gnu=no], [dnl Cross compiling. dnl Assume the worst, even on glibc platforms. dnl But obey --enable-cross-guesses. gl_cv_func_getopt_gnu="$gl_cross_guess_normal" ]) case $gl_had_POSIXLY_CORRECT in exported) ;; yes) AS_UNSET([POSIXLY_CORRECT]); POSIXLY_CORRECT=1 ;; *) AS_UNSET([POSIXLY_CORRECT]) ;; esac ]) if test "$gl_cv_func_getopt_gnu" != yes; then gl_replace_getopt=yes else AC_CACHE_CHECK([for working GNU getopt_long function], [gl_cv_func_getopt_long_gnu], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <getopt.h> #include <stddef.h> #include <string.h> ]], [[static const struct option long_options[] = { { "xtremely-",no_argument, NULL, 1003 }, { "xtra", no_argument, NULL, 1001 }, { "xtreme", no_argument, NULL, 1002 }, { "xtremely", no_argument, NULL, 1003 }, { NULL, 0, NULL, 0 } }; /* This code fails on OpenBSD 5.0. */ { static char program[] = "program"; static char xtremel[] = "--xtremel"; char *argv[] = { program, xtremel, NULL }; int option_index; optind = 1; opterr = 0; if (getopt_long (2, argv, "", long_options, &option_index) != 1003) return 1; } return 0; ]])], [gl_cv_func_getopt_long_gnu=yes], [gl_cv_func_getopt_long_gnu=no], [dnl Cross compiling. Guess no on OpenBSD, yes otherwise. case "$host_os" in openbsd*) gl_cv_func_getopt_long_gnu="guessing no";; *) gl_cv_func_getopt_long_gnu="guessing yes";; esac ]) ]) case "$gl_cv_func_getopt_long_gnu" in *yes) ;; *) gl_replace_getopt=yes ;; esac fi fi ]) AC_DEFUN([gl_GETOPT_SUBSTITUTE_HEADER], [ AC_CHECK_HEADERS_ONCE([sys/cdefs.h]) if test $ac_cv_header_sys_cdefs_h = yes; then HAVE_SYS_CDEFS_H=1 else HAVE_SYS_CDEFS_H=0 fi AC_SUBST([HAVE_SYS_CDEFS_H]) AC_DEFINE([__GETOPT_PREFIX], [[rpl_]], [Define to rpl_ if the getopt replacement functions and variables should be used.]) GL_GENERATE_GETOPT_H=true GL_GENERATE_GETOPT_CDEFS_H=true ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/ssize_t.m4������������������������������������������������������������������������������0000644�0001750�0001750�00000002612�14436424420�014574� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ssize_t.m4 serial 6 dnl Copyright (C) 2001-2003, 2006, 2010-2023 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 Define ssize_t if it does not already exist. AC_DEFUN([gt_TYPE_SSIZE_T], [ AC_CACHE_CHECK([for ssize_t], [gl_cv_ssize_t], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <sys/types.h>]], [[int x = sizeof (ssize_t *) + sizeof (ssize_t); return !x;]])], [gl_cv_ssize_t=yes], [gl_cv_ssize_t=no])]) if test $gl_cv_ssize_t = no; then dnl On 64-bit native Windows, ssize_t needs to be defined as 'long long', dnl for consistency with the 64-bit size_t. AC_CACHE_CHECK([whether size_t is wider than 'long'], [gl_cv_size_t_large], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <sys/types.h> typedef int array [2 * (sizeof (size_t) > sizeof (long)) - 1]; ]])], [gl_cv_size_t_large=yes], [gl_cv_size_t_large=no])]) if test $gl_cv_size_t_large = yes; then gl_def_ssize_t='long long' else gl_def_ssize_t='long' fi AC_DEFINE_UNQUOTED([ssize_t], [$gl_def_ssize_t], [Define as a signed type of the same size as size_t.]) fi ]) ����������������������������������������������������������������������������������������������������������������������rush-2.4/m4/fcntl-o.m4������������������������������������������������������������������������������0000644�0001750�0001750�00000011236�14436424420�014460� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fcntl-o.m4 serial 7 dnl Copyright (C) 2006, 2009-2023 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 Written by Paul Eggert. AC_PREREQ([2.60]) # Test whether the flags O_NOATIME and O_NOFOLLOW actually work. # Define HAVE_WORKING_O_NOATIME to 1 if O_NOATIME works, or to 0 otherwise. # Define HAVE_WORKING_O_NOFOLLOW to 1 if O_NOFOLLOW works, or to 0 otherwise. AC_DEFUN([gl_FCNTL_O_FLAGS], [ dnl Persuade glibc <fcntl.h> to define O_NOATIME and O_NOFOLLOW. AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CHECK_HEADERS_ONCE([unistd.h]) AC_CHECK_FUNCS_ONCE([symlink]) AC_CACHE_CHECK([for working fcntl.h], [gl_cv_header_working_fcntl_h], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <sys/types.h> #include <sys/stat.h> #if HAVE_UNISTD_H # include <unistd.h> #else /* on Windows with MSVC */ # include <io.h> # include <stdlib.h> # defined sleep(n) _sleep ((n) * 1000) #endif #include <fcntl.h> ]GL_MDA_DEFINES[ #ifndef O_NOATIME #define O_NOATIME 0 #endif #ifndef O_NOFOLLOW #define O_NOFOLLOW 0 #endif static int const constants[] = { O_CREAT, O_EXCL, O_NOCTTY, O_TRUNC, O_APPEND, O_NONBLOCK, O_SYNC, O_ACCMODE, O_RDONLY, O_RDWR, O_WRONLY }; ]], [[ int result = !constants; #if HAVE_SYMLINK { static char const sym[] = "conftest.sym"; if (symlink ("/dev/null", sym) != 0) result |= 2; else { int fd = open (sym, O_WRONLY | O_NOFOLLOW | O_CREAT, 0); if (fd >= 0) { close (fd); result |= 4; } } if (unlink (sym) != 0 || symlink (".", sym) != 0) result |= 2; else { int fd = open (sym, O_RDONLY | O_NOFOLLOW); if (fd >= 0) { close (fd); result |= 4; } } unlink (sym); } #endif { static char const file[] = "confdefs.h"; int fd = open (file, O_RDONLY | O_NOATIME); if (fd < 0) result |= 8; else { struct stat st0; if (fstat (fd, &st0) != 0) result |= 16; else { char c; sleep (1); if (read (fd, &c, 1) != 1) result |= 24; else { if (close (fd) != 0) result |= 32; else { struct stat st1; if (stat (file, &st1) != 0) result |= 40; else if (st0.st_atime != st1.st_atime) result |= 64; } } } } } return result;]])], [gl_cv_header_working_fcntl_h=yes], [case $? in #( 4) gl_cv_header_working_fcntl_h='no (bad O_NOFOLLOW)';; #( 64) gl_cv_header_working_fcntl_h='no (bad O_NOATIME)';; #( 68) gl_cv_header_working_fcntl_h='no (bad O_NOATIME, O_NOFOLLOW)';; #( *) gl_cv_header_working_fcntl_h='no';; esac], [case "$host_os" in # Guess 'no' on native Windows. mingw*) gl_cv_header_working_fcntl_h='no' ;; *) gl_cv_header_working_fcntl_h=cross-compiling ;; esac ]) ]) case $gl_cv_header_working_fcntl_h in #( *O_NOATIME* | no | cross-compiling) ac_val=0;; #( *) ac_val=1;; esac AC_DEFINE_UNQUOTED([HAVE_WORKING_O_NOATIME], [$ac_val], [Define to 1 if O_NOATIME works.]) case $gl_cv_header_working_fcntl_h in #( *O_NOFOLLOW* | no | cross-compiling) ac_val=0;; #( *) ac_val=1;; esac AC_DEFINE_UNQUOTED([HAVE_WORKING_O_NOFOLLOW], [$ac_val], [Define to 1 if O_NOFOLLOW works.]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/zzgnulib.m4�����������������������������������������������������������������������������0000644�0001750�0001750�00000001522�14436424420�014757� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# zzgnulib.m4 serial 1 dnl Copyright (C) 2020-2023 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 This file must be named something that sorts after all other dnl package- or gnulib-provided .m4 files - at least for those packages dnl that redefine AC_PROG_CC. dnl Redefine AC_PROG_CC so that it ends with invocations of gl_COMPILER_CLANG dnl and gl_COMPILER_PREPARE_CHECK_DECL. m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC])[ gl_COMPILER_CLANG gl_COMPILER_PREPARE_CHECK_DECL ]) # gl_ZZGNULIB # ----------- # Witness macro that this file has been included. Needed to force # Automake to include this file after all other gnulib .m4 files. AC_DEFUN([gl_ZZGNULIB]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/malloc.m4�������������������������������������������������������������������������������0000644�0001750�0001750�00000013533�14436424420�014367� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# malloc.m4 serial 29 dnl Copyright (C) 2007, 2009-2023 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. # This is adapted with modifications from upstream Autoconf here: # https://git.savannah.gnu.org/cgit/autoconf.git/tree/lib/autoconf/functions.m4?id=v2.70#n949 AC_DEFUN([_AC_FUNC_MALLOC_IF], [ AC_REQUIRE([AC_CANONICAL_HOST])dnl for cross-compiles AC_CACHE_CHECK([whether malloc (0) returns nonnull], [ac_cv_func_malloc_0_nonnull], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <stdlib.h> ]], [[void *p = malloc (0); int result = !p; free (p); return result;]]) ], [ac_cv_func_malloc_0_nonnull=yes], [ac_cv_func_malloc_0_nonnull=no], [case "$host_os" in # Guess yes on platforms where we know the result. *-gnu* | freebsd* | netbsd* | openbsd* | bitrig* \ | gnu* | *-musl* | midipix* | midnightbsd* \ | hpux* | solaris* | cygwin* | mingw* | msys* ) ac_cv_func_malloc_0_nonnull="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) ac_cv_func_malloc_0_nonnull="$gl_cross_guess_normal" ;; esac ]) ]) AS_CASE([$ac_cv_func_malloc_0_nonnull], [*yes], [$1], [$2]) ])# _AC_FUNC_MALLOC_IF # gl_FUNC_MALLOC_GNU # ------------------ # Replace malloc if it is not compatible with GNU libc. AC_DEFUN([gl_FUNC_MALLOC_GNU], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_MALLOC_POSIX]) REPLACE_MALLOC_FOR_MALLOC_GNU="$REPLACE_MALLOC_FOR_MALLOC_POSIX" if test $REPLACE_MALLOC_FOR_MALLOC_GNU = 0; then _AC_FUNC_MALLOC_IF([], [REPLACE_MALLOC_FOR_MALLOC_GNU=1]) fi ]) # gl_FUNC_MALLOC_PTRDIFF # ---------------------- # Test whether malloc (N) reliably fails when N exceeds PTRDIFF_MAX, # and replace malloc otherwise. AC_DEFUN([gl_FUNC_MALLOC_PTRDIFF], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_REQUIRE([gl_CHECK_MALLOC_PTRDIFF]) test "$gl_cv_malloc_ptrdiff" = yes || REPLACE_MALLOC_FOR_MALLOC_POSIX=1 ]) # Test whether malloc, realloc, calloc refuse to create objects # larger than what can be expressed in ptrdiff_t. # Set gl_cv_func_malloc_gnu to yes or no accordingly. AC_DEFUN([gl_CHECK_MALLOC_PTRDIFF], [ AC_CACHE_CHECK([whether malloc is ptrdiff_t safe], [gl_cv_malloc_ptrdiff], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <stdint.h> ]], [[/* 64-bit ptrdiff_t is so wide that no practical platform can exceed it. */ #define WIDE_PTRDIFF (PTRDIFF_MAX >> 31 >> 31 != 0) /* On rare machines where size_t fits in ptrdiff_t there is no problem. */ #define NARROW_SIZE (SIZE_MAX <= PTRDIFF_MAX) /* glibc 2.30 and later malloc refuses to exceed ptrdiff_t bounds even on 32-bit platforms. We don't know which non-glibc systems are safe. */ #define KNOWN_SAFE (2 < __GLIBC__ + (30 <= __GLIBC_MINOR__)) #if WIDE_PTRDIFF || NARROW_SIZE || KNOWN_SAFE return 0; #else #error "malloc might not be ptrdiff_t safe" syntax error #endif ]])], [gl_cv_malloc_ptrdiff=yes], [gl_cv_malloc_ptrdiff=no]) ]) ]) # gl_FUNC_MALLOC_POSIX # -------------------- # Test whether 'malloc' is POSIX compliant (sets errno to ENOMEM when it # fails, and doesn't mess up with ptrdiff_t overflow), and replace # malloc if it is not. AC_DEFUN([gl_FUNC_MALLOC_POSIX], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_MALLOC_PTRDIFF]) AC_REQUIRE([gl_CHECK_MALLOC_POSIX]) if test "$gl_cv_func_malloc_posix" = yes; then AC_DEFINE([HAVE_MALLOC_POSIX], [1], [Define if malloc, realloc, and calloc set errno on allocation failure.]) else REPLACE_MALLOC_FOR_MALLOC_POSIX=1 fi ]) # Test whether malloc, realloc, calloc set errno to ENOMEM on failure. # Set gl_cv_func_malloc_posix to yes or no accordingly. AC_DEFUN([gl_CHECK_MALLOC_POSIX], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_CACHE_CHECK([whether malloc, realloc, calloc set errno on failure], [gl_cv_func_malloc_posix], [ dnl It is too dangerous to try to allocate a large amount of memory: dnl some systems go to their knees when you do that. So assume that dnl all Unix implementations of the function set errno on failure, dnl except on those platforms where we have seen 'test-malloc-gnu', dnl 'test-realloc-gnu', 'test-calloc-gnu' fail. case "$host_os" in mingw*) gl_cv_func_malloc_posix=no ;; irix* | solaris*) dnl On IRIX 6.5, the three functions return NULL with errno unset dnl when the argument is larger than PTRDIFF_MAX. dnl On Solaris 11.3, the three functions return NULL with errno set dnl to EAGAIN, not ENOMEM, when the argument is larger than dnl PTRDIFF_MAX. dnl Here is a test program: m4_divert_push([KILL]) #include <errno.h> #include <stdio.h> #include <stdlib.h> #define ptrdiff_t long #ifndef PTRDIFF_MAX # define PTRDIFF_MAX ((ptrdiff_t) ((1UL << (8 * sizeof (ptrdiff_t) - 1)) - 1)) #endif int main () { void *p; fprintf (stderr, "PTRDIFF_MAX = %lu\n", (unsigned long) PTRDIFF_MAX); errno = 0; p = malloc ((unsigned long) PTRDIFF_MAX + 1); fprintf (stderr, "p=%p errno=%d\n", p, errno); errno = 0; p = calloc (PTRDIFF_MAX / 2 + 1, 2); fprintf (stderr, "p=%p errno=%d\n", p, errno); errno = 0; p = realloc (NULL, (unsigned long) PTRDIFF_MAX + 1); fprintf (stderr, "p=%p errno=%d\n", p, errno); return 0; } m4_divert_pop([KILL]) gl_cv_func_malloc_posix=no ;; *) gl_cv_func_malloc_posix=yes ;; esac ]) ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/msvc-nothrow.m4�������������������������������������������������������������������������0000644�0001750�0001750�00000000530�14436424420�015557� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# msvc-nothrow.m4 serial 1 dnl Copyright (C) 2011-2023 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. AC_DEFUN([gl_MSVC_NOTHROW], [ AC_REQUIRE([gl_MSVC_INVAL]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/time_rz.m4������������������������������������������������������������������������������0000644�0001750�0001750�00000003436�14436424420�014572� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������dnl Time zone functions: tzalloc, localtime_rz, etc. dnl Copyright (C) 2015-2023 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 Written by Paul Eggert. AC_DEFUN([gl_TIME_RZ], [ AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_TIME_H_DEFAULTS]) AC_REQUIRE([AC_STRUCT_TIMEZONE]) # On Mac OS X 10.6, localtime loops forever with some time_t values. # See Bug#27706, Bug#27736, and # https://lists.gnu.org/r/bug-gnulib/2017-07/msg00142.html AC_CACHE_CHECK([whether localtime works even near extrema], [gl_cv_func_localtime_works], [gl_cv_func_localtime_works=yes AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <stdlib.h> #include <string.h> #include <unistd.h> #include <time.h> ]], [[ time_t t = -67768038400666600; struct tm *tm; char *tz = getenv ("TZ"); if (! (tz && strcmp (tz, "QQQ0") == 0)) return 0; alarm (2); tm = localtime (&t); /* Use TM and *TM to suppress over-optimization. */ return tm && tm->tm_isdst; ]])], [(TZ=QQQ0 ./conftest$EXEEXT) >/dev/null 2>&1 || gl_cv_func_localtime_works=no], [], [gl_cv_func_localtime_works="guessing yes"])]) if test "$gl_cv_func_localtime_works" = no; then AC_DEFINE([HAVE_LOCALTIME_INFLOOP_BUG], 1, [Define if localtime-like functions can loop forever on extreme arguments.]) fi AC_CHECK_TYPES([timezone_t], [], [], [[#include <time.h>]]) if test "$ac_cv_type_timezone_t" = yes; then HAVE_TIMEZONE_T=1 fi ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/sys_stat_h.m4���������������������������������������������������������������������������0000644�0001750�0001750�00000012232�14436424420�015273� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sys_stat_h.m4 serial 42 -*- Autoconf -*- dnl Copyright (C) 2006-2023 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 Eric Blake. dnl Provide a GNU-like <sys/stat.h>. AC_DEFUN_ONCE([gl_SYS_STAT_H], [ AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS]) dnl Check for broken stat macros. AC_REQUIRE([AC_HEADER_STAT]) gl_CHECK_NEXT_HEADERS([sys/stat.h]) dnl Ensure the type mode_t gets defined. AC_REQUIRE([AC_TYPE_MODE_T]) dnl Whether to enable precise timestamps in 'struct stat'. m4_ifdef([gl_WINDOWS_STAT_TIMESPEC], [ AC_REQUIRE([gl_WINDOWS_STAT_TIMESPEC]) ], [ WINDOWS_STAT_TIMESPEC=0 ]) AC_SUBST([WINDOWS_STAT_TIMESPEC]) dnl Whether to ensure that struct stat.st_size is 64-bit wide. m4_ifdef([gl_LARGEFILE], [ AC_REQUIRE([gl_LARGEFILE]) ], [ WINDOWS_64_BIT_ST_SIZE=0 ]) AC_SUBST([WINDOWS_64_BIT_ST_SIZE]) dnl Define types that are supposed to be defined in <sys/types.h> or dnl <sys/stat.h>. AC_CHECK_TYPE([nlink_t], [], [AC_DEFINE([nlink_t], [int], [Define to the type of st_nlink in struct stat, or a supertype.])], [#include <sys/types.h> #include <sys/stat.h>]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[#include <sys/stat.h> ]], [chmod fchmodat fstat fstatat futimens getumask lchmod lstat mkdirat mkfifo mkfifoat mknod mknodat stat utimensat]) AC_REQUIRE([AC_C_RESTRICT]) ]) # gl_SYS_STAT_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_SYS_STAT_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_SYS_STAT_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_SYS_STAT_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_SYS_STAT_H_MODULE_INDICATOR_DEFAULTS], [ gl_UNISTD_H_REQUIRE_DEFAULTS dnl for REPLACE_FCHDIR gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CHMOD]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FCHMODAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FSTAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FSTATAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FUTIMENS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETUMASK]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LCHMOD]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LSTAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MKDIR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MKDIRAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MKFIFO]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MKFIFOAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MKNOD]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MKNODAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UTIMENSAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_OVERRIDES_STRUCT_STAT]) dnl Support Microsoft deprecated alias function names by default. gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_CHMOD], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_MKDIR], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_UMASK], [1]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_SYS_STAT_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS]) ]) AC_DEFUN([gl_SYS_STAT_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_FCHMODAT=1; AC_SUBST([HAVE_FCHMODAT]) HAVE_FSTATAT=1; AC_SUBST([HAVE_FSTATAT]) HAVE_FUTIMENS=1; AC_SUBST([HAVE_FUTIMENS]) HAVE_GETUMASK=1; AC_SUBST([HAVE_GETUMASK]) HAVE_LCHMOD=1; AC_SUBST([HAVE_LCHMOD]) HAVE_LSTAT=1; AC_SUBST([HAVE_LSTAT]) HAVE_MKDIRAT=1; AC_SUBST([HAVE_MKDIRAT]) HAVE_MKFIFO=1; AC_SUBST([HAVE_MKFIFO]) HAVE_MKFIFOAT=1; AC_SUBST([HAVE_MKFIFOAT]) HAVE_MKNOD=1; AC_SUBST([HAVE_MKNOD]) HAVE_MKNODAT=1; AC_SUBST([HAVE_MKNODAT]) HAVE_UTIMENSAT=1; AC_SUBST([HAVE_UTIMENSAT]) REPLACE_CHMOD=0; AC_SUBST([REPLACE_CHMOD]) REPLACE_FCHMODAT=0; AC_SUBST([REPLACE_FCHMODAT]) REPLACE_FSTAT=0; AC_SUBST([REPLACE_FSTAT]) REPLACE_FSTATAT=0; AC_SUBST([REPLACE_FSTATAT]) REPLACE_FUTIMENS=0; AC_SUBST([REPLACE_FUTIMENS]) REPLACE_LSTAT=0; AC_SUBST([REPLACE_LSTAT]) REPLACE_MKDIR=0; AC_SUBST([REPLACE_MKDIR]) REPLACE_MKFIFO=0; AC_SUBST([REPLACE_MKFIFO]) REPLACE_MKFIFOAT=0; AC_SUBST([REPLACE_MKFIFOAT]) REPLACE_MKNOD=0; AC_SUBST([REPLACE_MKNOD]) REPLACE_MKNODAT=0; AC_SUBST([REPLACE_MKNODAT]) REPLACE_STAT=0; AC_SUBST([REPLACE_STAT]) REPLACE_UTIMENSAT=0; AC_SUBST([REPLACE_UTIMENSAT]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/multiarch.m4����������������������������������������������������������������������������0000644�0001750�0001750�00000004220�14436424420�015101� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# multiarch.m4 serial 9 dnl Copyright (C) 2008-2023 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. # Determine whether the compiler is or may be producing universal binaries. # # On Mac OS X 10.5 and later systems, the user 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" # # Detect this situation and set APPLE_UNIVERSAL_BUILD accordingly. AC_DEFUN_ONCE([gl_MULTIARCH], [ dnl Code similar to autoconf-2.63 AC_C_BIGENDIAN. AC_CACHE_CHECK([whether the compiler produces multi-arch binaries], [gl_cv_c_multiarch], [gl_cv_c_multiarch=no AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#ifndef __APPLE_CC__ not a universal capable compiler #endif typedef int dummy; ]])], [ dnl Check for potential -arch flags. It is not universal unless dnl there are at least two -arch flags with different values. arch= prev= for word in ${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS}; do if test -n "$prev"; then case $word in i?86 | x86_64 | ppc | ppc64 | arm | arm64) if test -z "$arch" || test "$arch" = "$word"; then arch="$word" else gl_cv_c_multiarch=yes fi ;; esac prev= else if test "x$word" = "x-arch"; then prev=arch fi fi done ]) ]) if test $gl_cv_c_multiarch = yes; then APPLE_UNIVERSAL_BUILD=1 else APPLE_UNIVERSAL_BUILD=0 fi AC_SUBST([APPLE_UNIVERSAL_BUILD]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/stat.m4���������������������������������������������������������������������������������0000644�0001750�0001750�00000005726�14436424420�014100� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 19 # Copyright (C) 2009-2023 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. AC_DEFUN([gl_FUNC_STAT], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([lstat]) case "$host_os" in mingw*) dnl On this platform, the original stat() returns st_atime, st_mtime, dnl st_ctime values that are affected by the time zone. REPLACE_STAT=1 ;; *) dnl AIX 7.1, Solaris 9, mingw64 mistakenly succeed on stat("file/"). dnl (For mingw, this is due to a broken stat() override in libmingwex.a.) dnl FreeBSD 7.2 mistakenly succeeds on stat("link-to-file/"). AC_CACHE_CHECK([whether stat handles trailing slashes on files], [gl_cv_func_stat_file_slash], [touch conftest.tmp # Assume that if we have lstat, we can also check symlinks. if test $ac_cv_func_lstat = yes; then ln -s conftest.tmp conftest.lnk fi AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <sys/stat.h> ]], [[int result = 0; struct stat st; if (!stat ("conftest.tmp/", &st)) result |= 1; #if HAVE_LSTAT if (!stat ("conftest.lnk/", &st)) result |= 2; #endif return result; ]])], [gl_cv_func_stat_file_slash=yes], [gl_cv_func_stat_file_slash=no], [case "$host_os" in # Guess yes on Linux systems. linux-* | linux) gl_cv_func_stat_file_slash="guessing yes" ;; # Guess yes on systems that emulate the Linux system calls. midipix*) gl_cv_func_stat_file_slash="guessing yes" ;; # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_stat_file_slash="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_stat_file_slash="$gl_cross_guess_normal" ;; esac ]) rm -f conftest.tmp conftest.lnk]) case $gl_cv_func_stat_file_slash in *no) REPLACE_STAT=1 AC_DEFINE([REPLACE_FUNC_STAT_FILE], [1], [Define to 1 if stat needs help when passed a file name with a trailing slash]);; esac case $host_os in dnl Solaris stat can return a negative tv_nsec. solaris*) REPLACE_FSTAT=1 ;; esac ;; esac ]) # Prerequisites of lib/stat.c and lib/stat-w32.c. AC_DEFUN([gl_PREREQ_STAT], [ AC_REQUIRE([gl_SYS_STAT_H]) AC_REQUIRE([gl_PREREQ_STAT_W32]) : ]) # Prerequisites of lib/stat-w32.c. AC_DEFUN([gl_PREREQ_STAT_W32], [ AC_REQUIRE([AC_CANONICAL_HOST]) case "$host_os" in mingw*) AC_CHECK_HEADERS([sdkddkver.h]) ;; esac ]) ������������������������������������������rush-2.4/m4/tm_gmtoff.m4����������������������������������������������������������������������������0000644�0001750�0001750�00000001035�14436424420�015074� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# tm_gmtoff.m4 serial 3 dnl Copyright (C) 2002, 2009-2023 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. AC_DEFUN([gl_TM_GMTOFF], [ AC_CHECK_MEMBER([struct tm.tm_gmtoff], [AC_DEFINE([HAVE_TM_GMTOFF], [1], [Define if struct tm has the tm_gmtoff member.])], , [#include <time.h>]) ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/musl.m4���������������������������������������������������������������������������������0000644�0001750�0001750�00000001233�14436424420�014072� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# musl.m4 serial 4 dnl Copyright (C) 2019-2023 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. # Test for musl libc, despite the musl libc authors don't like it # <https://wiki.musl-libc.org/faq.html> # <https://lists.gnu.org/archive/html/bug-gnulib/2018-02/msg00079.html>. # From Bruno Haible. AC_DEFUN_ONCE([gl_MUSL_LIBC], [ AC_REQUIRE([AC_CANONICAL_HOST]) case "$host_os" in *-musl* | midipix*) AC_DEFINE([MUSL_LIBC], [1], [Define to 1 on musl libc.]) ;; esac ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/intlmacosx.m4���������������������������������������������������������������������������0000644�0001750�0001750�00000004753�14436425500�015305� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# intlmacosx.m4 serial 5 (gettext-0.18.2) dnl Copyright (C) 2004-2014 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 Mac OS X. dnl Defines INTL_MACOSX_LIBS. AC_DEFUN([gt_INTL_MACOSX], [ dnl Check for API introduced in Mac OS X 10.2. AC_CACHE_CHECK([for CFPreferencesCopyAppValue], [gt_cv_func_CFPreferencesCopyAppValue], [gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#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 Mac OS X function CFPreferencesCopyAppValue in the CoreFoundation framework.]) fi dnl Check for API introduced in Mac OS X 10.3. AC_CACHE_CHECK([for CFLocaleCopyCurrent], [gt_cv_func_CFLocaleCopyCurrent], [gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#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 Mac OS 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]) ]) ���������������������rush-2.4/m4/open-cloexec.m4�������������������������������������������������������������������������0000644�0001750�0001750�00000001323�14436424420�015473� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Test whether O_CLOEXEC is defined. dnl Copyright 2017-2023 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. AC_DEFUN([gl_PREPROC_O_CLOEXEC], [ AC_CACHE_CHECK([for O_CLOEXEC], [gl_cv_macro_O_CLOEXEC], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include <fcntl.h> #ifndef O_CLOEXEC choke me; #endif ]], [[return O_CLOEXEC;]])], [gl_cv_macro_O_CLOEXEC=yes], [gl_cv_macro_O_CLOEXEC=no])]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/fcntl.m4��������������������������������������������������������������������������������0000644�0001750�0001750�00000012172�14436424420�014224� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fcntl.m4 serial 11 dnl Copyright (C) 2009-2023 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. # For now, this module ensures that fcntl() # - supports F_DUPFD correctly # - supports or emulates F_DUPFD_CLOEXEC # - supports F_GETFD # Still to be ported to mingw: # - F_SETFD # - F_GETFL, F_SETFL # - F_GETOWN, F_SETOWN # - F_GETLK, F_SETLK, F_SETLKW AC_DEFUN([gl_FUNC_FCNTL], [ dnl Persuade glibc to expose F_DUPFD_CLOEXEC. AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_FCNTL_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_CHECK_FUNCS_ONCE([fcntl]) if test $ac_cv_func_fcntl = no; then gl_REPLACE_FCNTL else dnl cygwin 1.5.x F_DUPFD has wrong errno, and allows negative target dnl haiku alpha 2 F_DUPFD has wrong errno AC_CACHE_CHECK([whether fcntl handles F_DUPFD correctly], [gl_cv_func_fcntl_f_dupfd_works], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <errno.h> #include <fcntl.h> #include <limits.h> #include <sys/resource.h> #include <unistd.h> ]GL_MDA_DEFINES[ #ifndef RLIM_SAVED_CUR # define RLIM_SAVED_CUR RLIM_INFINITY #endif #ifndef RLIM_SAVED_MAX # define RLIM_SAVED_MAX RLIM_INFINITY #endif ]], [[int result = 0; int bad_fd = INT_MAX; struct rlimit rlim; if (getrlimit (RLIMIT_NOFILE, &rlim) == 0 && 0 <= rlim.rlim_cur && rlim.rlim_cur <= INT_MAX && rlim.rlim_cur != RLIM_INFINITY && rlim.rlim_cur != RLIM_SAVED_MAX && rlim.rlim_cur != RLIM_SAVED_CUR) bad_fd = rlim.rlim_cur; if (fcntl (0, F_DUPFD, -1) != -1) result |= 1; if (errno != EINVAL) result |= 2; if (fcntl (0, F_DUPFD, bad_fd) != -1) result |= 4; if (errno != EINVAL) result |= 8; /* On OS/2 kLIBC, F_DUPFD does not work on a directory fd */ { int fd; fd = open (".", O_RDONLY); if (fd == -1) result |= 16; else if (fcntl (fd, F_DUPFD, STDERR_FILENO + 1) == -1) result |= 32; close (fd); } return result;]])], [gl_cv_func_fcntl_f_dupfd_works=yes], [gl_cv_func_fcntl_f_dupfd_works=no], [case $host_os in aix* | cygwin* | haiku*) gl_cv_func_fcntl_f_dupfd_works="guessing no" ;; *) gl_cv_func_fcntl_f_dupfd_works="guessing yes" ;; esac])]) case $gl_cv_func_fcntl_f_dupfd_works in *yes) ;; *) gl_REPLACE_FCNTL AC_DEFINE([FCNTL_DUPFD_BUGGY], [1], [Define this to 1 if F_DUPFD behavior does not match POSIX]) ;; esac dnl Many systems lack F_DUPFD_CLOEXEC. dnl NetBSD 9.0 declares F_DUPFD_CLOEXEC but it works only like F_DUPFD. AC_CACHE_CHECK([whether fcntl understands F_DUPFD_CLOEXEC], [gl_cv_func_fcntl_f_dupfd_cloexec], [AC_RUN_IFELSE( [AC_LANG_SOURCE( [[#include <fcntl.h> #include <unistd.h> int main (int argc, char *argv[]) { if (argc == 1) /* parent process */ { if (fcntl (1, F_DUPFD_CLOEXEC, 10) < 0) return 1; return execl ("./conftest", "./conftest", "child", NULL); } else /* child process */ return (fcntl (10, F_GETFL) < 0 ? 0 : 42); } ]]) ], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #ifdef __linux__ /* The Linux kernel only added F_DUPFD_CLOEXEC in 2.6.24, so we always replace it to support the semantics on older kernels that failed with EINVAL. */ choke me #endif ]])], [gl_cv_func_fcntl_f_dupfd_cloexec=yes], [gl_cv_func_fcntl_f_dupfd_cloexec="needs runtime check"]) ], [gl_cv_func_fcntl_f_dupfd_cloexec=no], [case "$host_os" in # Guess no on NetBSD. netbsd*) gl_cv_func_fcntl_f_dupfd_cloexec="guessing no" ;; *) gl_cv_func_fcntl_f_dupfd_cloexec="$gl_cross_guess_normal" ;; esac ]) ]) case "$gl_cv_func_fcntl_f_dupfd_cloexec" in *yes) ;; *) gl_REPLACE_FCNTL dnl No witness macro needed for this bug. ;; esac fi dnl Replace fcntl() for supporting the gnulib-defined fchdir() function, dnl to keep fchdir's bookkeeping up-to-date. m4_ifdef([gl_FUNC_FCHDIR], [ gl_TEST_FCHDIR if test $HAVE_FCHDIR = 0; then gl_REPLACE_FCNTL fi ]) ]) AC_DEFUN([gl_REPLACE_FCNTL], [ AC_REQUIRE([gl_FCNTL_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([fcntl]) if test $ac_cv_func_fcntl = no; then HAVE_FCNTL=0 else REPLACE_FCNTL=1 fi ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/calloc.m4�������������������������������������������������������������������������������0000644�0001750�0001750�00000006064�14436424420�014356� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# calloc.m4 serial 30 # Copyright (C) 2004-2023 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. # Written by Jim Meyering. # Determine whether calloc (N, S) returns non-NULL when N*S is zero, # and returns NULL when N*S overflows. # If so, define HAVE_CALLOC. Otherwise, define calloc to rpl_calloc # and arrange to use a calloc wrapper function that does work in that case. # _AC_FUNC_CALLOC_IF([IF-WORKS], [IF-NOT]) # ------------------------------------- # If calloc is compatible with GNU calloc, run IF-WORKS, otherwise, IF-NOT. AC_DEFUN([_AC_FUNC_CALLOC_IF], [ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether calloc (0, n) and calloc (n, 0) return nonnull], [ac_cv_func_calloc_0_nonnull], [if test $cross_compiling != yes; then ac_cv_func_calloc_0_nonnull=yes AC_RUN_IFELSE( [AC_LANG_PROGRAM( [AC_INCLUDES_DEFAULT], [[int result = 0; char * volatile p = calloc (0, 0); if (!p) result |= 1; free (p); return result; ]])], [], [ac_cv_func_calloc_0_nonnull=no]) else case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) ac_cv_func_calloc_0_nonnull="guessing yes" ;; # Guess yes on musl systems. *-musl* | midipix*) ac_cv_func_calloc_0_nonnull="guessing yes" ;; # Guess yes on native Windows. mingw*) ac_cv_func_calloc_0_nonnull="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) ac_cv_func_calloc_0_nonnull="$gl_cross_guess_normal" ;; esac fi ]) AS_CASE([$ac_cv_func_calloc_0_nonnull], [*yes], [$1], [$2]) ]) # gl_FUNC_CALLOC_GNU # ------------------ # Replace calloc if it is not compatible with GNU libc. AC_DEFUN([gl_FUNC_CALLOC_GNU], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_CALLOC_POSIX]) REPLACE_CALLOC_FOR_CALLOC_GNU="$REPLACE_CALLOC_FOR_CALLOC_POSIX" if test $REPLACE_CALLOC_FOR_CALLOC_GNU = 0; then _AC_FUNC_CALLOC_IF([], [REPLACE_CALLOC_FOR_CALLOC_GNU=1]) fi ])# gl_FUNC_CALLOC_GNU # gl_FUNC_CALLOC_POSIX # -------------------- # Test whether 'calloc' is POSIX compliant (sets errno to ENOMEM when it # fails, and doesn't mess up with ptrdiff_t or size_t overflow), # and replace calloc if it is not. AC_DEFUN([gl_FUNC_CALLOC_POSIX], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_MALLOC_POSIX]) if test $REPLACE_MALLOC_FOR_MALLOC_POSIX = 1; then REPLACE_CALLOC_FOR_CALLOC_POSIX=1 fi dnl Although in theory we should also test for size_t overflow, dnl in practice testing for ptrdiff_t overflow suffices dnl since PTRDIFF_MAX <= SIZE_MAX on all known Gnulib porting targets. dnl A separate size_t test would slow down 'configure'. ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/absolute-header.m4����������������������������������������������������������������������0000644�0001750�0001750�00000010151�14436424420�016155� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# absolute-header.m4 serial 17 dnl Copyright (C) 2006-2023 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 Derek Price. # gl_ABSOLUTE_HEADER(HEADER1 HEADER2 ...) # --------------------------------------- # Find the absolute name of a header file, testing first if the header exists. # If the header were sys/inttypes.h, this macro would define # ABSOLUTE_SYS_INTTYPES_H to the '""' quoted absolute name of sys/inttypes.h # in config.h # (e.g. '#define ABSOLUTE_SYS_INTTYPES_H "///usr/include/sys/inttypes.h"'). # The three "///" are to pacify Sun C 5.8, which otherwise would say # "warning: #include of /usr/include/... may be non-portable". # Use '""', not '<>', so that the /// cannot be confused with a C99 comment. # Note: This macro assumes that the header file is not empty after # preprocessing, i.e. it does not only define preprocessor macros but also # provides some type/enum definitions or function/variable declarations. AC_DEFUN([gl_ABSOLUTE_HEADER], [AC_REQUIRE([AC_CANONICAL_HOST]) AC_LANG_PREPROC_REQUIRE()dnl m4_foreach_w([gl_HEADER_NAME], [$1], [AS_VAR_PUSHDEF([gl_absolute_header], [gl_cv_absolute_]m4_defn([gl_HEADER_NAME]))dnl AC_CACHE_CHECK([absolute name of <]m4_defn([gl_HEADER_NAME])[>], [gl_absolute_header], [AS_VAR_PUSHDEF([ac_header_exists], [ac_cv_header_]m4_defn([gl_HEADER_NAME]))dnl AC_CHECK_HEADERS_ONCE(m4_defn([gl_HEADER_NAME]))dnl if test AS_VAR_GET([ac_header_exists]) = yes; then gl_ABSOLUTE_HEADER_ONE(m4_defn([gl_HEADER_NAME])) fi AS_VAR_POPDEF([ac_header_exists])dnl ])dnl AC_DEFINE_UNQUOTED(AS_TR_CPP([ABSOLUTE_]m4_defn([gl_HEADER_NAME])), ["AS_VAR_GET([gl_absolute_header])"], [Define this to an absolute name of <]m4_defn([gl_HEADER_NAME])[>.]) AS_VAR_POPDEF([gl_absolute_header])dnl ])dnl ])# gl_ABSOLUTE_HEADER # gl_ABSOLUTE_HEADER_ONE(HEADER) # ------------------------------ # Like gl_ABSOLUTE_HEADER, except that: # - it assumes that the header exists, # - it uses the current CPPFLAGS, # - it does not cache the result, # - it is silent. AC_DEFUN([gl_ABSOLUTE_HEADER_ONE], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_LANG_CONFTEST([AC_LANG_SOURCE([[#include <]]m4_dquote([$1])[[>]])]) dnl AIX "xlc -E" and "cc -E" omit #line directives for header files dnl that contain only a #include of other header files and no dnl non-comment tokens of their own. This leads to a failure to dnl detect the absolute name of <dirent.h>, <signal.h>, <poll.h> dnl and others. The workaround is to force preservation of comments dnl through option -C. This ensures all necessary #line directives dnl are present. GCC supports option -C as well. case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac changequote(,) case "$host_os" in mingw*) dnl For the sake of native Windows compilers (excluding gcc), dnl treat backslash as a directory separator, like /. dnl Actually, these compilers use a double-backslash as dnl directory separator, inside the dnl # line "filename" dnl directives. gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac dnl A sed expression that turns a string into a basic regular dnl expression, for use within "/.../". gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo '$1' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' changequote([,]) dnl eval is necessary to expand gl_absname_cpp. dnl Ultrix and Pyramid sh refuse to redirect output of eval, dnl so use subshell. AS_VAR_SET([gl_cv_absolute_]AS_TR_SH([[$1]]), [`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&AS_MESSAGE_LOG_FD | sed -n "$gl_absolute_header_sed"`]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/nocrash.m4������������������������������������������������������������������������������0000644�0001750�0001750�00000010555�14436424420�014556� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# nocrash.m4 serial 5 dnl Copyright (C) 2005, 2009-2023 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 Based on libsigsegv, from Bruno Haible and Paolo Bonzini. AC_PREREQ([2.13]) dnl Expands to some code for use in .c programs that will cause the configure dnl test to exit instead of crashing. This is useful to avoid triggering dnl action from a background debugger and to avoid core dumps. dnl Usage: ... dnl ]GL_NOCRASH[ dnl ... dnl int main() { nocrash_init(); ... } AC_DEFUN([GL_NOCRASH],[[ #include <stdlib.h> #if defined __MACH__ && defined __APPLE__ /* Avoid a crash on Mac OS X. */ #include <mach/mach.h> #include <mach/mach_error.h> #include <mach/thread_status.h> #include <mach/exception.h> #include <mach/task.h> #include <pthread.h> /* The exception port on which our thread listens. */ static mach_port_t our_exception_port; /* The main function of the thread listening for exceptions of type EXC_BAD_ACCESS. */ static void * mach_exception_thread (void *arg) { /* Buffer for a message to be received. */ struct { mach_msg_header_t head; mach_msg_body_t msgh_body; char data[1024]; } msg; mach_msg_return_t retval; /* Wait for a message on the exception port. */ retval = mach_msg (&msg.head, MACH_RCV_MSG | MACH_RCV_LARGE, 0, sizeof (msg), our_exception_port, MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL); if (retval != MACH_MSG_SUCCESS) abort (); exit (1); } static void nocrash_init (void) { mach_port_t self = mach_task_self (); /* Allocate a port on which the thread shall listen for exceptions. */ if (mach_port_allocate (self, MACH_PORT_RIGHT_RECEIVE, &our_exception_port) == KERN_SUCCESS) { /* See https://web.mit.edu/darwin/src/modules/xnu/osfmk/man/mach_port_insert_right.html. */ if (mach_port_insert_right (self, our_exception_port, our_exception_port, MACH_MSG_TYPE_MAKE_SEND) == KERN_SUCCESS) { /* The exceptions we want to catch. Only EXC_BAD_ACCESS is interesting for us. */ exception_mask_t mask = EXC_MASK_BAD_ACCESS; /* Create the thread listening on the exception port. */ pthread_attr_t attr; pthread_t thread; if (pthread_attr_init (&attr) == 0 && pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED) == 0 && pthread_create (&thread, &attr, mach_exception_thread, NULL) == 0) { pthread_attr_destroy (&attr); /* Replace the exception port info for these exceptions with our own. Note that we replace the exception port for the entire task, not only for a particular thread. This has the effect that when our exception port gets the message, the thread specific exception port has already been asked, and we don't need to bother about it. See https://web.mit.edu/darwin/src/modules/xnu/osfmk/man/task_set_exception_ports.html. */ task_set_exception_ports (self, mask, our_exception_port, EXCEPTION_DEFAULT, MACHINE_THREAD_STATE); } } } } #elif defined _WIN32 && ! defined __CYGWIN__ /* Avoid a crash on native Windows. */ #define WIN32_LEAN_AND_MEAN #include <windows.h> #include <winerror.h> static LONG WINAPI exception_filter (EXCEPTION_POINTERS *ExceptionInfo) { switch (ExceptionInfo->ExceptionRecord->ExceptionCode) { case EXCEPTION_ACCESS_VIOLATION: case EXCEPTION_IN_PAGE_ERROR: case EXCEPTION_STACK_OVERFLOW: case EXCEPTION_GUARD_PAGE: case EXCEPTION_PRIV_INSTRUCTION: case EXCEPTION_ILLEGAL_INSTRUCTION: case EXCEPTION_DATATYPE_MISALIGNMENT: case EXCEPTION_ARRAY_BOUNDS_EXCEEDED: case EXCEPTION_NONCONTINUABLE_EXCEPTION: exit (1); } return EXCEPTION_CONTINUE_SEARCH; } static void nocrash_init (void) { SetUnhandledExceptionFilter ((LPTOP_LEVEL_EXCEPTION_FILTER) exception_filter); } #else /* Avoid a crash on POSIX systems. */ #include <signal.h> #include <unistd.h> /* A POSIX signal handler. */ static void exception_handler (int sig) { _exit (1); } static void nocrash_init (void) { #ifdef SIGSEGV signal (SIGSEGV, exception_handler); #endif #ifdef SIGBUS signal (SIGBUS, exception_handler); #endif } #endif ]]) ���������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/gnulib-comp.m4��������������������������������������������������������������������������0000644�0001750�0001750�00000074775�14436425351�015357� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# DO NOT EDIT! GENERATED AUTOMATICALLY! # Copyright (C) 2002-2023 Free Software Foundation, Inc. # # 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 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 file. If not, see <https://www.gnu.org/licenses/>. # # As a special exception to the GNU General Public License, # this file may be distributed as part of a program that # contains a configuration script generated by Autoconf, under # the same distribution terms as the rest of that program. # # Generated by gnulib-tool. # # This file represents the compiled summary of the specification in # gnulib-cache.m4. It lists the computed macro invocations that need # to be invoked from configure.ac. # In projects that use version control, this file can be treated like # other built files. # This macro should be invoked from ./configure.ac, in the section # "Checks for programs", right after AC_PROG_CC, and certainly before # any checks for libraries, header files, types and library functions. AC_DEFUN([gl_EARLY], [ m4_pattern_forbid([^gl_[A-Z]])dnl the gnulib macro namespace m4_pattern_allow([^gl_ES$])dnl a valid locale name m4_pattern_allow([^gl_LIBOBJS$])dnl a variable m4_pattern_allow([^gl_LTLIBOBJS$])dnl a variable # Pre-early section. AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_PROG_AR_RANLIB]) # Code from module absolute-header: # Code from module alloca-opt: # Code from module assert-h: # Code from module attribute: # Code from module basename-lgpl: # Code from module btowc: # Code from module builtin-expect: # Code from module c-ctype: # Code from module c99: # Code from module calloc-gnu: # Code from module calloc-posix: # Code from module cloexec: # Code from module close: # Code from module dirname: # Code from module dirname-lgpl: # Code from module double-slash-root: # Code from module dup2: # Code from module environ: # Code from module errno: # Code from module error: # Code from module error-h: # Code from module extensions: # Code from module extern-inline: # Code from module fcntl: # Code from module fcntl-h: # Code from module fd-hook: # Code from module filename: # Code from module flexmember: # Code from module fprintftime: # Code from module free-posix: # Code from module fstat: # Code from module gen-header: # Code from module getdelim: # Code from module getdtablesize: # Code from module getline: # Code from module getopt-gnu: # Code from module getopt-posix: # Code from module getprogname: # Code from module gettext-h: # Code from module gitlog-to-changelog: # Code from module glibc-internal/dynarray: # Code from module hard-locale: # Code from module ialloc: # Code from module idx: # Code from module include_next: # Code from module intprops: # Code from module inttostr: # Code from module inttypes-incomplete: # Code from module langinfo: # Code from module largefile: AC_REQUIRE([AC_SYS_LARGEFILE]) # Code from module libc-config: # Code from module limits-h: # Code from module localcharset: # Code from module locale: # Code from module localeconv: # Code from module lock: # Code from module malloc-gnu: # Code from module malloc-posix: # Code from module malloca: # Code from module mbrtowc: # Code from module mbsinit: # Code from module mbtowc: # Code from module minmax: # Code from module mktime: # Code from module mktime-internal: # Code from module msvc-inval: # Code from module msvc-nothrow: # Code from module multiarch: # Code from module nl_langinfo: # Code from module nocrash: # Code from module nstrftime: # Code from module open: # Code from module pathmax: # Code from module realloc-gnu: # Code from module realloc-posix: # Code from module reallocarray: # Code from module regex: # Code from module setenv: # Code from module setlocale-null: # Code from module snippet/_Noreturn: # Code from module snippet/arg-nonnull: # Code from module snippet/c++defs: # Code from module snippet/warn-on-use: # Code from module ssize_t: # Code from module stat: # Code from module stat-time: # Code from module std-gnu11: # Code from module stdbool: # Code from module stdckdint: # Code from module stddef: # Code from module stdint: # Code from module stdio: gl_STDIO_H_EARLY # Code from module stdlib: # Code from module streq: # Code from module strerror: # Code from module strerror-override: # Code from module string: # Code from module sys_stat: # Code from module sys_types: # Code from module threadlib: gl_THREADLIB_EARLY # Code from module time-h: # Code from module time_r: # Code from module time_rz: # Code from module timegm: # Code from module tzset: # Code from module unistd: # Code from module unsetenv: # Code from module vararrays: # Code from module verify: # Code from module wchar: # Code from module wcrtomb: # Code from module wctype-h: # Code from module windows-mutex: # Code from module windows-once: # Code from module windows-recmutex: # Code from module windows-rwlock: # Code from module xalloc: # Code from module xalloc-oversized: ]) # This macro should be invoked from ./configure.ac, in the section # "Check for header files, types and library functions". AC_DEFUN([gl_INIT], [ AM_CONDITIONAL([GL_COND_LIBTOOL], [false]) gl_cond_libtool=false gl_libdeps= gl_ltlibdeps= gl_m4_base='m4' m4_pushdef([AC_LIBOBJ], m4_defn([gl_LIBOBJ])) m4_pushdef([AC_REPLACE_FUNCS], m4_defn([gl_REPLACE_FUNCS])) m4_pushdef([AC_LIBSOURCES], m4_defn([gl_LIBSOURCES])) m4_pushdef([gl_LIBSOURCES_LIST], []) m4_pushdef([gl_LIBSOURCES_DIR], []) m4_pushdef([GL_MACRO_PREFIX], [gl]) m4_pushdef([GL_MODULE_INDICATOR_PREFIX], [GL]) gl_COMMON gl_source_base='gnu' gl_source_base_prefix= gl_FUNC_ALLOCA gl_CONDITIONAL_HEADER([alloca.h]) AC_PROG_MKDIR_P gl_ASSERT_H gl_CONDITIONAL_HEADER([assert.h]) AC_PROG_MKDIR_P gl_FUNC_BTOWC gl_CONDITIONAL([GL_COND_OBJ_BTOWC], [test $HAVE_BTOWC = 0 || test $REPLACE_BTOWC = 1]) AM_COND_IF([GL_COND_OBJ_BTOWC], [ gl_PREREQ_BTOWC ]) gl_WCHAR_MODULE_INDICATOR([btowc]) gl___BUILTIN_EXPECT gl_FUNC_CALLOC_GNU if test $REPLACE_CALLOC_FOR_CALLOC_GNU = 1; then AC_LIBOBJ([calloc]) fi gl_STDLIB_MODULE_INDICATOR([calloc-gnu]) gl_FUNC_CALLOC_POSIX if test $REPLACE_CALLOC_FOR_CALLOC_POSIX = 1; then AC_LIBOBJ([calloc]) fi gl_STDLIB_MODULE_INDICATOR([calloc-posix]) gl_MODULE_INDICATOR_FOR_TESTS([cloexec]) gl_FUNC_CLOSE gl_CONDITIONAL([GL_COND_OBJ_CLOSE], [test $REPLACE_CLOSE = 1]) gl_UNISTD_MODULE_INDICATOR([close]) gl_MODULE_INDICATOR([dirname]) gl_DOUBLE_SLASH_ROOT gl_FUNC_DUP2 gl_CONDITIONAL([GL_COND_OBJ_DUP2], [test $REPLACE_DUP2 = 1]) AM_COND_IF([GL_COND_OBJ_DUP2], [ gl_PREREQ_DUP2 ]) gl_UNISTD_MODULE_INDICATOR([dup2]) gl_ENVIRON gl_UNISTD_MODULE_INDICATOR([environ]) gl_HEADER_ERRNO_H gl_CONDITIONAL_HEADER([errno.h]) AC_PROG_MKDIR_P AC_REQUIRE([gl_ERROR_H]) gl_ERROR gl_CONDITIONAL([GL_COND_OBJ_ERROR], [test $COMPILE_ERROR_C = 1]) AM_COND_IF([GL_COND_OBJ_ERROR], [ gl_PREREQ_ERROR ]) m4_ifdef([AM_XGETTEXT_OPTION], [AM_][XGETTEXT_OPTION([--flag=error:3:c-format]) AM_][XGETTEXT_OPTION([--flag=error_at_line:5:c-format])]) gl_ERROR_H AC_PROG_MKDIR_P AC_REQUIRE([gl_EXTERN_INLINE]) gl_FUNC_FCNTL gl_CONDITIONAL([GL_COND_OBJ_FCNTL], [test $HAVE_FCNTL = 0 || test $REPLACE_FCNTL = 1]) gl_FCNTL_MODULE_INDICATOR([fcntl]) gl_FCNTL_H gl_FCNTL_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P AC_C_FLEXIBLE_ARRAY_MEMBER gl_FUNC_FREE gl_CONDITIONAL([GL_COND_OBJ_FREE], [test $REPLACE_FREE = 1]) AM_COND_IF([GL_COND_OBJ_FREE], [ gl_PREREQ_FREE ]) gl_STDLIB_MODULE_INDICATOR([free-posix]) gl_FUNC_FSTAT gl_CONDITIONAL([GL_COND_OBJ_FSTAT], [test $REPLACE_FSTAT = 1]) AM_COND_IF([GL_COND_OBJ_FSTAT], [ case "$host_os" in mingw*) AC_LIBOBJ([stat-w32]) ;; esac gl_PREREQ_FSTAT ]) gl_SYS_STAT_MODULE_INDICATOR([fstat]) gl_FUNC_GETDELIM gl_CONDITIONAL([GL_COND_OBJ_GETDELIM], [test $HAVE_GETDELIM = 0 || test $REPLACE_GETDELIM = 1]) AM_COND_IF([GL_COND_OBJ_GETDELIM], [ gl_PREREQ_GETDELIM ]) gl_STDIO_MODULE_INDICATOR([getdelim]) gl_FUNC_GETDTABLESIZE gl_CONDITIONAL([GL_COND_OBJ_GETDTABLESIZE], [test $HAVE_GETDTABLESIZE = 0 || test $REPLACE_GETDTABLESIZE = 1]) AM_COND_IF([GL_COND_OBJ_GETDTABLESIZE], [ gl_PREREQ_GETDTABLESIZE ]) gl_UNISTD_MODULE_INDICATOR([getdtablesize]) gl_FUNC_GETLINE gl_CONDITIONAL([GL_COND_OBJ_GETLINE], [test $REPLACE_GETLINE = 1]) AM_COND_IF([GL_COND_OBJ_GETLINE], [ gl_PREREQ_GETLINE ]) gl_STDIO_MODULE_INDICATOR([getline]) gl_FUNC_GETOPT_GNU dnl Because of the way gl_FUNC_GETOPT_GNU is implemented (the gl_getopt_required dnl mechanism), there is no need to do any AC_LIBOBJ or AC_SUBST here; they are dnl done in the getopt-posix module. gl_FUNC_GETOPT_POSIX gl_CONDITIONAL_HEADER([getopt.h]) gl_CONDITIONAL_HEADER([getopt-cdefs.h]) AC_PROG_MKDIR_P gl_CONDITIONAL([GL_COND_OBJ_GETOPT], [test $REPLACE_GETOPT = 1]) AM_COND_IF([GL_COND_OBJ_GETOPT], [ dnl Define the substituted variable GNULIB_UNISTD_H_GETOPT to 1. gl_UNISTD_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNISTD_H_GETOPT], [1]) ]) gl_UNISTD_MODULE_INDICATOR([getopt-posix]) gl_FUNC_GETPROGNAME gl_CONDITIONAL([GL_COND_OBJ_GETPROGNAME], [test $HAVE_GETPROGNAME = 0 || test $REPLACE_GETPROGNAME = 1]) AM_COND_IF([GL_COND_OBJ_GETPROGNAME], [ gl_PREREQ_GETPROGNAME ]) gl_STDLIB_MODULE_INDICATOR([getprogname]) AC_SUBST([LIBINTL]) AC_SUBST([LTLIBINTL]) AC_PROG_MKDIR_P AC_REQUIRE([gl_FUNC_SETLOCALE_NULL]) HARD_LOCALE_LIB="$SETLOCALE_NULL_LIB" AC_SUBST([HARD_LOCALE_LIB]) dnl For backward compatibility. LIB_HARD_LOCALE="$HARD_LOCALE_LIB" AC_SUBST([LIB_HARD_LOCALE]) gl_INTTOSTR gl_INTTYPES_INCOMPLETE gl_INTTYPES_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P gl_LANGINFO_H gl_LANGINFO_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P AC_REQUIRE([gl_LARGEFILE]) gl___INLINE gl_LIMITS_H gl_CONDITIONAL_HEADER([limits.h]) AC_PROG_MKDIR_P gl_LOCALCHARSET dnl For backward compatibility. Some packages still use this. LOCALCHARSET_TESTS_ENVIRONMENT= AC_SUBST([LOCALCHARSET_TESTS_ENVIRONMENT]) gl_LOCALE_H gl_LOCALE_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P gl_FUNC_LOCALECONV gl_CONDITIONAL([GL_COND_OBJ_LOCALECONV], [test $REPLACE_LOCALECONV = 1]) AM_COND_IF([GL_COND_OBJ_LOCALECONV], [ gl_PREREQ_LOCALECONV ]) gl_LOCALE_MODULE_INDICATOR([localeconv]) gl_LOCK gl_MODULE_INDICATOR([lock]) gl_FUNC_MALLOC_GNU if test $REPLACE_MALLOC_FOR_MALLOC_GNU = 1; then AC_LIBOBJ([malloc]) fi gl_STDLIB_MODULE_INDICATOR([malloc-gnu]) AC_REQUIRE([gl_FUNC_MALLOC_POSIX]) if test $REPLACE_MALLOC_FOR_MALLOC_POSIX = 1; then AC_LIBOBJ([malloc]) fi gl_STDLIB_MODULE_INDICATOR([malloc-posix]) gl_MALLOCA gl_FUNC_MBRTOWC gl_CONDITIONAL([GL_COND_OBJ_MBRTOWC], [test $HAVE_MBRTOWC = 0 || test $REPLACE_MBRTOWC = 1]) AM_COND_IF([GL_COND_OBJ_MBRTOWC], [ if test $REPLACE_MBSTATE_T = 1; then AC_LIBOBJ([lc-charset-dispatch]) AC_LIBOBJ([mbtowc-lock]) gl_PREREQ_MBTOWC_LOCK fi gl_PREREQ_MBRTOWC ]) gl_WCHAR_MODULE_INDICATOR([mbrtowc]) gl_FUNC_MBSINIT gl_CONDITIONAL([GL_COND_OBJ_MBSINIT], [test $HAVE_MBSINIT = 0 || test $REPLACE_MBSINIT = 1]) AM_COND_IF([GL_COND_OBJ_MBSINIT], [ gl_PREREQ_MBSINIT ]) gl_WCHAR_MODULE_INDICATOR([mbsinit]) gl_FUNC_MBTOWC gl_CONDITIONAL([GL_COND_OBJ_MBTOWC], [test $HAVE_MBTOWC = 0 || test $REPLACE_MBTOWC = 1]) AM_COND_IF([GL_COND_OBJ_MBTOWC], [ gl_PREREQ_MBTOWC ]) gl_STDLIB_MODULE_INDICATOR([mbtowc]) gl_MINMAX gl_FUNC_MKTIME if test $REPLACE_MKTIME = 1; then AC_LIBOBJ([mktime]) gl_PREREQ_MKTIME fi gl_TIME_MODULE_INDICATOR([mktime]) gl_FUNC_MKTIME_INTERNAL if test $WANT_MKTIME_INTERNAL = 1; then AC_LIBOBJ([mktime]) gl_PREREQ_MKTIME fi AC_REQUIRE([gl_MSVC_INVAL]) gl_CONDITIONAL([GL_COND_OBJ_MSVC_INVAL], [test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1]) AC_REQUIRE([gl_MSVC_NOTHROW]) gl_CONDITIONAL([GL_COND_OBJ_MSVC_NOTHROW], [test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1]) gl_MODULE_INDICATOR([msvc-nothrow]) gl_MULTIARCH gl_FUNC_NL_LANGINFO gl_CONDITIONAL([GL_COND_OBJ_NL_LANGINFO], [test $HAVE_NL_LANGINFO = 0 || test $REPLACE_NL_LANGINFO = 1]) gl_CONDITIONAL([GL_COND_OBJ_NL_LANGINFO_LOCK], [test $REPLACE_NL_LANGINFO = 1 && test $NL_LANGINFO_MTSAFE = 0]) if test $REPLACE_NL_LANGINFO = 1 && test $NL_LANGINFO_MTSAFE = 0; then gl_PREREQ_NL_LANGINFO_LOCK fi gl_LANGINFO_MODULE_INDICATOR([nl_langinfo]) gl_FUNC_GNU_STRFTIME gl_FUNC_OPEN gl_CONDITIONAL([GL_COND_OBJ_OPEN], [test $REPLACE_OPEN = 1]) AM_COND_IF([GL_COND_OBJ_OPEN], [ gl_PREREQ_OPEN ]) gl_FCNTL_MODULE_INDICATOR([open]) gl_PATHMAX gl_FUNC_REALLOC_GNU if test $REPLACE_REALLOC_FOR_REALLOC_GNU = 1; then AC_LIBOBJ([realloc]) fi gl_STDLIB_MODULE_INDICATOR([realloc-gnu]) gl_FUNC_REALLOC_POSIX if test $REPLACE_REALLOC_FOR_REALLOC_POSIX = 1; then AC_LIBOBJ([realloc]) fi gl_STDLIB_MODULE_INDICATOR([realloc-posix]) gl_FUNC_REALLOCARRAY gl_CONDITIONAL([GL_COND_OBJ_REALLOCARRAY], [test $HAVE_REALLOCARRAY = 0 || test $REPLACE_REALLOCARRAY = 1]) AM_COND_IF([GL_COND_OBJ_REALLOCARRAY], [ gl_PREREQ_REALLOCARRAY ]) gl_MODULE_INDICATOR([reallocarray]) gl_STDLIB_MODULE_INDICATOR([reallocarray]) gl_REGEX gl_CONDITIONAL([GL_COND_OBJ_REGEX], [test $ac_use_included_regex = yes]) AM_COND_IF([GL_COND_OBJ_REGEX], [ gl_PREREQ_REGEX ]) gl_FUNC_SETENV gl_CONDITIONAL([GL_COND_OBJ_SETENV], [test $HAVE_SETENV = 0 || test $REPLACE_SETENV = 1]) gl_STDLIB_MODULE_INDICATOR([setenv]) gl_FUNC_SETLOCALE_NULL gl_CONDITIONAL([GL_COND_OBJ_SETLOCALE_LOCK], [test $SETLOCALE_NULL_ALL_MTSAFE = 0 || test $SETLOCALE_NULL_ONE_MTSAFE = 0]) AM_COND_IF([GL_COND_OBJ_SETLOCALE_LOCK], [ gl_PREREQ_SETLOCALE_LOCK ]) gl_LOCALE_MODULE_INDICATOR([setlocale_null]) gt_TYPE_SSIZE_T gl_FUNC_STAT gl_CONDITIONAL([GL_COND_OBJ_STAT], [test $REPLACE_STAT = 1]) AM_COND_IF([GL_COND_OBJ_STAT], [ case "$host_os" in mingw*) AC_LIBOBJ([stat-w32]) ;; esac gl_PREREQ_STAT ]) gl_SYS_STAT_MODULE_INDICATOR([stat]) gl_STAT_TIME gl_STAT_BIRTHTIME gl_C_BOOL AC_CHECK_HEADERS_ONCE([stdckdint.h]) if test $ac_cv_header_stdckdint_h = yes; then GL_GENERATE_STDCKDINT_H=false else GL_GENERATE_STDCKDINT_H=true fi gl_CONDITIONAL_HEADER([stdckdint.h]) AC_PROG_MKDIR_P gl_STDDEF_H gl_STDDEF_H_REQUIRE_DEFAULTS gl_CONDITIONAL_HEADER([stddef.h]) AC_PROG_MKDIR_P gl_STDINT_H gl_CONDITIONAL_HEADER([stdint.h]) dnl Because of gl_REPLACE_LIMITS_H: gl_CONDITIONAL_HEADER([limits.h]) AC_PROG_MKDIR_P gl_STDIO_H gl_STDIO_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P gl_CONDITIONAL([GL_COND_OBJ_STDIO_READ], [test $REPLACE_STDIO_READ_FUNCS = 1]) gl_CONDITIONAL([GL_COND_OBJ_STDIO_WRITE], [test $REPLACE_STDIO_WRITE_FUNCS = 1]) dnl No need to create extra modules for these functions. Everyone who uses dnl <stdio.h> likely needs them. gl_STDIO_MODULE_INDICATOR([fscanf]) gl_MODULE_INDICATOR([fscanf]) gl_STDIO_MODULE_INDICATOR([scanf]) gl_MODULE_INDICATOR([scanf]) gl_STDIO_MODULE_INDICATOR([fgetc]) gl_STDIO_MODULE_INDICATOR([getc]) gl_STDIO_MODULE_INDICATOR([getchar]) gl_STDIO_MODULE_INDICATOR([fgets]) gl_STDIO_MODULE_INDICATOR([fread]) dnl No need to create extra modules for these functions. Everyone who uses dnl <stdio.h> likely needs them. gl_STDIO_MODULE_INDICATOR([fprintf]) gl_STDIO_MODULE_INDICATOR([printf]) gl_STDIO_MODULE_INDICATOR([vfprintf]) gl_STDIO_MODULE_INDICATOR([vprintf]) gl_STDIO_MODULE_INDICATOR([fputc]) gl_STDIO_MODULE_INDICATOR([putc]) gl_STDIO_MODULE_INDICATOR([putchar]) gl_STDIO_MODULE_INDICATOR([fputs]) gl_STDIO_MODULE_INDICATOR([puts]) gl_STDIO_MODULE_INDICATOR([fwrite]) gl_STDLIB_H gl_STDLIB_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P gl_FUNC_STRERROR gl_CONDITIONAL([GL_COND_OBJ_STRERROR], [test $REPLACE_STRERROR = 1]) gl_MODULE_INDICATOR([strerror]) gl_STRING_MODULE_INDICATOR([strerror]) AC_REQUIRE([gl_HEADER_ERRNO_H]) AC_REQUIRE([gl_FUNC_STRERROR_0]) gl_CONDITIONAL([GL_COND_OBJ_STRERROR_OVERRIDE], [test -n "$ERRNO_H" || test $REPLACE_STRERROR_0 = 1]) AM_COND_IF([GL_COND_OBJ_STRERROR_OVERRIDE], [ gl_PREREQ_SYS_H_WINSOCK2 ]) gl_STRING_H gl_STRING_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P gl_SYS_STAT_H gl_SYS_STAT_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P gl_SYS_TYPES_H gl_SYS_TYPES_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P AC_REQUIRE([gl_THREADLIB]) gl_TIME_H gl_TIME_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P gl_TIME_R gl_CONDITIONAL([GL_COND_OBJ_TIME_R], [test $HAVE_LOCALTIME_R = 0 || test $REPLACE_LOCALTIME_R = 1]) AM_COND_IF([GL_COND_OBJ_TIME_R], [ gl_PREREQ_TIME_R ]) gl_TIME_MODULE_INDICATOR([time_r]) gl_TIME_RZ gl_CONDITIONAL([GL_COND_OBJ_TIME_RZ], [test $HAVE_TIMEZONE_T = 0]) gl_TIME_MODULE_INDICATOR([time_rz]) gl_FUNC_TIMEGM gl_CONDITIONAL([GL_COND_OBJ_TIMEGM], [test $HAVE_TIMEGM = 0 || test $REPLACE_TIMEGM = 1]) AM_COND_IF([GL_COND_OBJ_TIMEGM], [ gl_PREREQ_TIMEGM ]) gl_TIME_MODULE_INDICATOR([timegm]) gl_FUNC_TZSET gl_CONDITIONAL([GL_COND_OBJ_TZSET], [test $REPLACE_TZSET = 1]) gl_TIME_MODULE_INDICATOR([tzset]) gl_UNISTD_H gl_UNISTD_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P gl_FUNC_UNSETENV gl_CONDITIONAL([GL_COND_OBJ_UNSETENV], [test $HAVE_UNSETENV = 0 || test $REPLACE_UNSETENV = 1]) AM_COND_IF([GL_COND_OBJ_UNSETENV], [ gl_PREREQ_UNSETENV ]) gl_STDLIB_MODULE_INDICATOR([unsetenv]) AC_C_VARARRAYS gl_WCHAR_H gl_WCHAR_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P gl_FUNC_WCRTOMB gl_CONDITIONAL([GL_COND_OBJ_WCRTOMB], [test $HAVE_WCRTOMB = 0 || test $REPLACE_WCRTOMB = 1]) AM_COND_IF([GL_COND_OBJ_WCRTOMB], [ gl_PREREQ_WCRTOMB ]) gl_WCHAR_MODULE_INDICATOR([wcrtomb]) gl_WCTYPE_H gl_WCTYPE_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P AC_REQUIRE([AC_CANONICAL_HOST]) gl_CONDITIONAL([GL_COND_OBJ_WINDOWS_MUTEX], [case "$host_os" in mingw*) true;; *) false;; esac]) AC_REQUIRE([AC_CANONICAL_HOST]) gl_CONDITIONAL([GL_COND_OBJ_WINDOWS_ONCE], [case "$host_os" in mingw*) true;; *) false;; esac]) AC_REQUIRE([AC_CANONICAL_HOST]) gl_CONDITIONAL([GL_COND_OBJ_WINDOWS_RECMUTEX], [case "$host_os" in mingw*) true;; *) false;; esac]) AC_REQUIRE([AC_CANONICAL_HOST]) gl_CONDITIONAL([GL_COND_OBJ_WINDOWS_RWLOCK], [case "$host_os" in mingw*) true;; *) false;; esac]) gl_XALLOC gl_MODULE_INDICATOR([xalloc]) # End of code from modules m4_ifval(gl_LIBSOURCES_LIST, [ m4_syscmd([test ! -d ]m4_defn([gl_LIBSOURCES_DIR])[ || for gl_file in ]gl_LIBSOURCES_LIST[ ; do if test ! -r ]m4_defn([gl_LIBSOURCES_DIR])[/$gl_file ; then echo "missing file ]m4_defn([gl_LIBSOURCES_DIR])[/$gl_file" >&2 exit 1 fi done])dnl m4_if(m4_sysval, [0], [], [AC_FATAL([expected source file, required through AC_LIBSOURCES, not found])]) ]) m4_popdef([GL_MODULE_INDICATOR_PREFIX]) m4_popdef([GL_MACRO_PREFIX]) m4_popdef([gl_LIBSOURCES_DIR]) m4_popdef([gl_LIBSOURCES_LIST]) m4_popdef([AC_LIBSOURCES]) m4_popdef([AC_REPLACE_FUNCS]) m4_popdef([AC_LIBOBJ]) AC_CONFIG_COMMANDS_PRE([ gl_libobjs= gl_ltlibobjs= gl_libobjdeps= if test -n "$gl_LIBOBJS"; then # Remove the extension. changequote(,)dnl sed_drop_objext='s/\.o$//;s/\.obj$//' sed_dirname1='s,//*,/,g' sed_dirname2='s,\(.\)/$,\1,' sed_dirname3='s,^[^/]*$,.,' sed_dirname4='s,\(.\)/[^/]*$,\1,' sed_basename1='s,.*/,,' changequote([, ])dnl for i in `for i in $gl_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do gl_libobjs="$gl_libobjs $i.$ac_objext" gl_ltlibobjs="$gl_ltlibobjs $i.lo" i_dir=`echo "$i" | sed -e "$sed_dirname1" -e "$sed_dirname2" -e "$sed_dirname3" -e "$sed_dirname4"` i_base=`echo "$i" | sed -e "$sed_basename1"` gl_libobjdeps="$gl_libobjdeps $i_dir/\$(DEPDIR)/$i_base.Po" done fi AC_SUBST([gl_LIBOBJS], [$gl_libobjs]) AC_SUBST([gl_LTLIBOBJS], [$gl_ltlibobjs]) AC_SUBST([gl_LIBOBJDEPS], [$gl_libobjdeps]) ]) gltests_libdeps= gltests_ltlibdeps= m4_pushdef([AC_LIBOBJ], m4_defn([gltests_LIBOBJ])) m4_pushdef([AC_REPLACE_FUNCS], m4_defn([gltests_REPLACE_FUNCS])) m4_pushdef([AC_LIBSOURCES], m4_defn([gltests_LIBSOURCES])) m4_pushdef([gltests_LIBSOURCES_LIST], []) m4_pushdef([gltests_LIBSOURCES_DIR], []) m4_pushdef([GL_MACRO_PREFIX], [gltests]) m4_pushdef([GL_MODULE_INDICATOR_PREFIX], [GL]) gl_COMMON gl_source_base='tests' gl_source_base_prefix= changequote(,)dnl gltests_WITNESS=IN_`echo "${PACKAGE-$PACKAGE_TARNAME}" | LC_ALL=C tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ | LC_ALL=C sed -e 's/[^A-Z0-9_]/_/g'`_GNULIB_TESTS changequote([, ])dnl AC_SUBST([gltests_WITNESS]) gl_module_indicator_condition=$gltests_WITNESS m4_pushdef([gl_MODULE_INDICATOR_CONDITION], [$gl_module_indicator_condition]) m4_popdef([gl_MODULE_INDICATOR_CONDITION]) m4_ifval(gltests_LIBSOURCES_LIST, [ m4_syscmd([test ! -d ]m4_defn([gltests_LIBSOURCES_DIR])[ || for gl_file in ]gltests_LIBSOURCES_LIST[ ; do if test ! -r ]m4_defn([gltests_LIBSOURCES_DIR])[/$gl_file ; then echo "missing file ]m4_defn([gltests_LIBSOURCES_DIR])[/$gl_file" >&2 exit 1 fi done])dnl m4_if(m4_sysval, [0], [], [AC_FATAL([expected source file, required through AC_LIBSOURCES, not found])]) ]) m4_popdef([GL_MODULE_INDICATOR_PREFIX]) m4_popdef([GL_MACRO_PREFIX]) m4_popdef([gltests_LIBSOURCES_DIR]) m4_popdef([gltests_LIBSOURCES_LIST]) m4_popdef([AC_LIBSOURCES]) m4_popdef([AC_REPLACE_FUNCS]) m4_popdef([AC_LIBOBJ]) AC_CONFIG_COMMANDS_PRE([ gltests_libobjs= gltests_ltlibobjs= gltests_libobjdeps= if test -n "$gltests_LIBOBJS"; then # Remove the extension. changequote(,)dnl sed_drop_objext='s/\.o$//;s/\.obj$//' sed_dirname1='s,//*,/,g' sed_dirname2='s,\(.\)/$,\1,' sed_dirname3='s,^[^/]*$,.,' sed_dirname4='s,\(.\)/[^/]*$,\1,' sed_basename1='s,.*/,,' changequote([, ])dnl for i in `for i in $gltests_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do gltests_libobjs="$gltests_libobjs $i.$ac_objext" gltests_ltlibobjs="$gltests_ltlibobjs $i.lo" i_dir=`echo "$i" | sed -e "$sed_dirname1" -e "$sed_dirname2" -e "$sed_dirname3" -e "$sed_dirname4"` i_base=`echo "$i" | sed -e "$sed_basename1"` gltests_libobjdeps="$gltests_libobjdeps $i_dir/\$(DEPDIR)/$i_base.Po" done fi AC_SUBST([gltests_LIBOBJS], [$gltests_libobjs]) AC_SUBST([gltests_LTLIBOBJS], [$gltests_ltlibobjs]) AC_SUBST([gltests_LIBOBJDEPS], [$gltests_libobjdeps]) ]) AC_REQUIRE([gl_CC_GNULIB_WARNINGS]) LIBGNU_LIBDEPS="$gl_libdeps" AC_SUBST([LIBGNU_LIBDEPS]) LIBGNU_LTLIBDEPS="$gl_ltlibdeps" AC_SUBST([LIBGNU_LTLIBDEPS]) ]) # Like AC_LIBOBJ, except that the module name goes # into gl_LIBOBJS instead of into LIBOBJS. AC_DEFUN([gl_LIBOBJ], [ AS_LITERAL_IF([$1], [gl_LIBSOURCES([$1.c])])dnl gl_LIBOBJS="$gl_LIBOBJS $1.$ac_objext" ]) # Like AC_REPLACE_FUNCS, except that the module name goes # into gl_LIBOBJS instead of into LIBOBJS. AC_DEFUN([gl_REPLACE_FUNCS], [ m4_foreach_w([gl_NAME], [$1], [AC_LIBSOURCES(gl_NAME[.c])])dnl AC_CHECK_FUNCS([$1], , [gl_LIBOBJ($ac_func)]) ]) # Like AC_LIBSOURCES, except the directory where the source file is # expected is derived from the gnulib-tool parameterization, # and alloca is special cased (for the alloca-opt module). # We could also entirely rely on EXTRA_lib..._SOURCES. AC_DEFUN([gl_LIBSOURCES], [ m4_foreach([_gl_NAME], [$1], [ m4_if(_gl_NAME, [alloca.c], [], [ m4_define([gl_LIBSOURCES_DIR], [gnu]) m4_append([gl_LIBSOURCES_LIST], _gl_NAME, [ ]) ]) ]) ]) # Like AC_LIBOBJ, except that the module name goes # into gltests_LIBOBJS instead of into LIBOBJS. AC_DEFUN([gltests_LIBOBJ], [ AS_LITERAL_IF([$1], [gltests_LIBSOURCES([$1.c])])dnl gltests_LIBOBJS="$gltests_LIBOBJS $1.$ac_objext" ]) # Like AC_REPLACE_FUNCS, except that the module name goes # into gltests_LIBOBJS instead of into LIBOBJS. AC_DEFUN([gltests_REPLACE_FUNCS], [ m4_foreach_w([gl_NAME], [$1], [AC_LIBSOURCES(gl_NAME[.c])])dnl AC_CHECK_FUNCS([$1], , [gltests_LIBOBJ($ac_func)]) ]) # Like AC_LIBSOURCES, except the directory where the source file is # expected is derived from the gnulib-tool parameterization, # and alloca is special cased (for the alloca-opt module). # We could also entirely rely on EXTRA_lib..._SOURCES. AC_DEFUN([gltests_LIBSOURCES], [ m4_foreach([_gl_NAME], [$1], [ m4_if(_gl_NAME, [alloca.c], [], [ m4_define([gltests_LIBSOURCES_DIR], [tests]) m4_append([gltests_LIBSOURCES_LIST], _gl_NAME, [ ]) ]) ]) ]) # This macro records the list of files which have been installed by # gnulib-tool and may be removed by future gnulib-tool invocations. AC_DEFUN([gl_FILE_LIST], [ build-aux/gitlog-to-changelog lib/_Noreturn.h lib/alloca.in.h lib/anytostr.c lib/arg-nonnull.h lib/assert.in.h lib/attribute.h lib/basename-lgpl.c lib/basename-lgpl.h lib/basename.c lib/btowc.c lib/c++defs.h lib/c-ctype.c lib/c-ctype.h lib/calloc.c lib/cdefs.h lib/cloexec.c lib/cloexec.h lib/close.c lib/dirname-lgpl.c lib/dirname.c lib/dirname.h lib/dup2.c lib/dynarray.h lib/errno.in.h lib/error.c lib/error.in.h lib/fcntl.c lib/fcntl.in.h lib/fd-hook.c lib/fd-hook.h lib/filename.h lib/flexmember.h lib/fprintftime.c lib/fprintftime.h lib/free.c lib/fstat.c lib/getdelim.c lib/getdtablesize.c lib/getline.c lib/getopt-cdefs.in.h lib/getopt-core.h lib/getopt-ext.h lib/getopt-pfx-core.h lib/getopt-pfx-ext.h lib/getopt.c lib/getopt.in.h lib/getopt1.c lib/getopt_int.h lib/getprogname.c lib/getprogname.h lib/gettext.h lib/glthread/lock.c lib/glthread/lock.h lib/glthread/threadlib.c lib/hard-locale.c lib/hard-locale.h lib/ialloc.c lib/ialloc.h lib/idx.h lib/imaxtostr.c lib/intprops-internal.h lib/intprops.h lib/inttostr.c lib/inttostr.h lib/inttypes.in.h lib/langinfo.in.h lib/lc-charset-dispatch.c lib/lc-charset-dispatch.h lib/libc-config.h lib/limits.in.h lib/localcharset.c lib/localcharset.h lib/locale.in.h lib/localeconv.c lib/malloc.c lib/malloc/dynarray-skeleton.c lib/malloc/dynarray.h lib/malloc/dynarray_at_failure.c lib/malloc/dynarray_emplace_enlarge.c lib/malloc/dynarray_finalize.c lib/malloc/dynarray_resize.c lib/malloc/dynarray_resize_clear.c lib/malloca.c lib/malloca.h lib/mbrtowc-impl-utf8.h lib/mbrtowc-impl.h lib/mbrtowc.c lib/mbsinit.c lib/mbtowc-impl.h lib/mbtowc-lock.c lib/mbtowc-lock.h lib/mbtowc.c lib/minmax.h lib/mktime-internal.h lib/mktime.c lib/msvc-inval.c lib/msvc-inval.h lib/msvc-nothrow.c lib/msvc-nothrow.h lib/nl_langinfo-lock.c lib/nl_langinfo.c lib/nstrftime.c lib/offtostr.c lib/open.c lib/pathmax.h lib/realloc.c lib/reallocarray.c lib/regcomp.c lib/regex.c lib/regex.h lib/regex_internal.c lib/regex_internal.h lib/regexec.c lib/setenv.c lib/setlocale-lock.c lib/setlocale_null.c lib/setlocale_null.h lib/stat-time.c lib/stat-time.h lib/stat-w32.c lib/stat-w32.h lib/stat.c lib/stdckdint.in.h lib/stddef.in.h lib/stdint.in.h lib/stdio-read.c lib/stdio-write.c lib/stdio.in.h lib/stdlib.in.h lib/streq.h lib/strerror-override.c lib/strerror-override.h lib/strerror.c lib/strftime.h lib/string.in.h lib/stripslash.c lib/sys_stat.in.h lib/sys_types.in.h lib/time-internal.h lib/time.in.h lib/time_r.c lib/time_rz.c lib/timegm.c lib/tzset.c lib/uinttostr.c lib/umaxtostr.c lib/unistd.c lib/unistd.in.h lib/unsetenv.c lib/verify.h lib/warn-on-use.h lib/wchar.in.h lib/wcrtomb.c lib/wctype-h.c lib/wctype.in.h lib/windows-initguard.h lib/windows-mutex.c lib/windows-mutex.h lib/windows-once.c lib/windows-once.h lib/windows-recmutex.c lib/windows-recmutex.h lib/windows-rwlock.c lib/windows-rwlock.h lib/xalloc-oversized.h lib/xalloc.h lib/xmalloc.c m4/00gnulib.m4 m4/__inline.m4 m4/absolute-header.m4 m4/alloca.m4 m4/assert_h.m4 m4/btowc.m4 m4/builtin-expect.m4 m4/c-bool.m4 m4/calloc.m4 m4/close.m4 m4/codeset.m4 m4/double-slash-root.m4 m4/dup2.m4 m4/eealloc.m4 m4/environ.m4 m4/errno_h.m4 m4/error.m4 m4/error_h.m4 m4/extensions.m4 m4/extern-inline.m4 m4/fcntl-o.m4 m4/fcntl.m4 m4/fcntl_h.m4 m4/flexmember.m4 m4/free.m4 m4/fstat.m4 m4/getdelim.m4 m4/getdtablesize.m4 m4/getline.m4 m4/getopt.m4 m4/getprogname.m4 m4/gnulib-common.m4 m4/include_next.m4 m4/inttostr.m4 m4/inttypes.m4 m4/langinfo_h.m4 m4/largefile.m4 m4/limits-h.m4 m4/localcharset.m4 m4/locale-fr.m4 m4/locale-ja.m4 m4/locale-zh.m4 m4/locale_h.m4 m4/localeconv.m4 m4/lock.m4 m4/malloc.m4 m4/malloca.m4 m4/mbrtowc.m4 m4/mbsinit.m4 m4/mbstate_t.m4 m4/mbtowc.m4 m4/minmax.m4 m4/mktime.m4 m4/mode_t.m4 m4/msvc-inval.m4 m4/msvc-nothrow.m4 m4/multiarch.m4 m4/musl.m4 m4/nl_langinfo.m4 m4/nocrash.m4 m4/nstrftime.m4 m4/off_t.m4 m4/open-cloexec.m4 m4/open-slash.m4 m4/open.m4 m4/pathmax.m4 m4/pid_t.m4 m4/pthread_rwlock_rdlock.m4 m4/realloc.m4 m4/reallocarray.m4 m4/regex.m4 m4/setenv.m4 m4/setlocale_null.m4 m4/ssize_t.m4 m4/stat-time.m4 m4/stat.m4 m4/std-gnu11.m4 m4/stddef_h.m4 m4/stdint.m4 m4/stdio_h.m4 m4/stdlib_h.m4 m4/strerror.m4 m4/string_h.m4 m4/sys_socket_h.m4 m4/sys_stat_h.m4 m4/sys_types_h.m4 m4/threadlib.m4 m4/time_h.m4 m4/time_r.m4 m4/time_rz.m4 m4/timegm.m4 m4/tm_gmtoff.m4 m4/tzset.m4 m4/unistd_h.m4 m4/vararrays.m4 m4/visibility.m4 m4/warn-on-use.m4 m4/wchar_h.m4 m4/wchar_t.m4 m4/wcrtomb.m4 m4/wctype_h.m4 m4/wint_t.m4 m4/xalloc.m4 m4/zzgnulib.m4 ]) ���rush-2.4/m4/localcharset.m4�������������������������������������������������������������������������0000644�0001750�0001750�00000000633�14436424420�015561� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# localcharset.m4 serial 8 dnl Copyright (C) 2002, 2004, 2006, 2009-2023 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. AC_DEFUN([gl_LOCALCHARSET], [ dnl Prerequisites of lib/localcharset.c. AC_REQUIRE([AM_LANGINFO_CODESET]) ]) �����������������������������������������������������������������������������������������������������rush-2.4/m4/getprogname.m4��������������������������������������������������������������������������0000644�0001750�0001750�00000003551�14436424420�015427� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# getprogname.m4 - check for getprogname or replacements for it # Copyright (C) 2016-2023 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. # serial 8 AC_DEFUN([gl_FUNC_GETPROGNAME], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) gl_CHECK_FUNCS_ANDROID([getprogname], [[#include <stdlib.h>]]) if test $ac_cv_func_getprogname = no; then HAVE_GETPROGNAME=0 case "$gl_cv_onwards_func_getprogname" in future*) REPLACE_GETPROGNAME=1 ;; esac fi AC_CHECK_DECLS([program_invocation_name], [], [HAVE_DECL_PROGRAM_INVOCATION_NAME=0], [[#include <errno.h>]]) ]) AC_DEFUN([gl_PREREQ_GETPROGNAME], [ AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_CHECK_FUNCS_ONCE([getexecname]) ac_found=0 AC_CHECK_DECLS([program_invocation_name], [ac_found=1], [], [#include <errno.h>]) AC_CHECK_DECLS([program_invocation_short_name], [ac_found=1], [], [#include <errno.h>]) AC_CHECK_DECLS([__argv], [ac_found=1], [], [#include <stdlib.h>]) # Incur the cost of this test only if none of the above worked. if test $ac_found = 0; then # On OpenBSD 5.1, using the global __progname variable appears to be # the only way to implement getprogname. AC_CACHE_CHECK([whether __progname is defined in default libraries], [gl_cv_var___progname], [ gl_cv_var___progname= AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[extern char *__progname;]], [[return *__progname;]] )], [gl_cv_var___progname=yes] ) ] ) if test "$gl_cv_var___progname" = yes; then AC_DEFINE([HAVE_VAR___PROGNAME], 1, [Define if you have a global __progname variable]) fi fi ]) �������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/stddef_h.m4�����������������������������������������������������������������������������0000644�0001750�0001750�00000010630�14436424420�014673� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# stddef_h.m4 serial 14 dnl Copyright (C) 2009-2023 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 A placeholder for <stddef.h>, for platforms that have issues. AC_DEFUN_ONCE([gl_STDDEF_H], [ AC_REQUIRE([gl_STDDEF_H_DEFAULTS]) AC_REQUIRE([gt_TYPE_WCHAR_T]) dnl Persuade OpenBSD <stddef.h> to declare max_align_t. AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) GL_GENERATE_STDDEF_H=false dnl Test whether the type max_align_t exists and whether its alignment dnl "is as great as is supported by the implementation in all contexts". AC_CACHE_CHECK([for good max_align_t], [gl_cv_type_max_align_t], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[/* On FreeBSD 12.0/x86, max_align_t defined by <stddef.h> has the correct alignment with the default (wrong) definition of _Alignof, but a wrong alignment as soon as we activate an ISO C compliant _Alignof definition. */ #if ((defined __GNUC__ && 4 <= __GNUC__) || defined __clang__) && !defined __cplusplus #define _Alignof(type) __builtin_offsetof (struct { char __a; type __b; }, __b) #endif #include <stddef.h> unsigned int s = sizeof (max_align_t); #if defined __GNUC__ || defined __clang__ || defined __IBM__ALIGNOF__ int check1[2 * (__alignof__ (double) <= __alignof__ (max_align_t)) - 1]; int check2[2 * (__alignof__ (long double) <= __alignof__ (max_align_t)) - 1]; #endif typedef struct { char a; max_align_t b; } max_helper; typedef struct { char a; long b; } long_helper; typedef struct { char a; double b; } double_helper; typedef struct { char a; long double b; } long_double_helper; int check3[2 * (offsetof (long_helper, b) <= offsetof (max_helper, b)) - 1]; int check4[2 * (offsetof (double_helper, b) <= offsetof (max_helper, b)) - 1]; int check5[2 * (offsetof (long_double_helper, b) <= offsetof (max_helper, b)) - 1]; ]])], [gl_cv_type_max_align_t=yes], [gl_cv_type_max_align_t=no]) ]) if test $gl_cv_type_max_align_t = no; then HAVE_MAX_ALIGN_T=0 GL_GENERATE_STDDEF_H=true fi if test $gt_cv_c_wchar_t = no; then HAVE_WCHAR_T=0 GL_GENERATE_STDDEF_H=true fi AC_CACHE_CHECK([whether NULL can be used in arbitrary expressions], [gl_cv_decl_null_works], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stddef.h> int test[2 * (sizeof NULL == sizeof (void *)) -1]; ]])], [gl_cv_decl_null_works=yes], [gl_cv_decl_null_works=no])]) if test $gl_cv_decl_null_works = no; then REPLACE_NULL=1 GL_GENERATE_STDDEF_H=true fi AC_CACHE_CHECK([for unreachable], [gl_cv_func_unreachable], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <stddef.h> ]], [[unreachable (); ]])], [gl_cv_func_unreachable=yes], [gl_cv_func_unreachable=no]) ]) if test $gl_cv_func_unreachable = no; then GL_GENERATE_STDDEF_H=true fi if $GL_GENERATE_STDDEF_H; then gl_NEXT_HEADERS([stddef.h]) fi ]) # gl_STDDEF_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_STDDEF_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_STDDEF_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_STDDEF_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_STDDEF_H_MODULE_INDICATOR_DEFAULTS], [ ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_STDDEF_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_STDDEF_H_DEFAULTS]) ]) AC_DEFUN([gl_STDDEF_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. REPLACE_NULL=0; AC_SUBST([REPLACE_NULL]) HAVE_MAX_ALIGN_T=1; AC_SUBST([HAVE_MAX_ALIGN_T]) HAVE_WCHAR_T=1; AC_SUBST([HAVE_WCHAR_T]) ]) ��������������������������������������������������������������������������������������������������������rush-2.4/m4/locale-ja.m4����������������������������������������������������������������������������0000644�0001750�0001750�00000013174�14436424420�014750� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# locale-ja.m4 serial 16 dnl Copyright (C) 2003, 2005-2023 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 Determine the name of a japanese locale with EUC-JP encoding. AC_DEFUN_ONCE([gt_LOCALE_JA], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AM_LANGINFO_CODESET]) AC_CACHE_CHECK([for a traditional japanese locale], [gt_cv_locale_ja], [ AC_LANG_CONFTEST([AC_LANG_SOURCE([[ #include <locale.h> #include <time.h> #if HAVE_LANGINFO_CODESET # include <langinfo.h> #endif #include <stdlib.h> #include <string.h> struct tm t; char buf[16]; int main () { /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl imitates locale dependent behaviour by looking at the environment variables, and all locales use the UTF-8 encoding. */ #if defined __BEOS__ || defined __HAIKU__ return 1; #else /* Check whether the given locale name is recognized by the system. */ # if defined _WIN32 && !defined __CYGWIN__ /* On native Windows, setlocale(category, "") looks at the system settings, not at the environment variables. Also, when an encoding suffix such as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE category of the locale to "C". */ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) return 1; # else if (setlocale (LC_ALL, "") == NULL) return 1; # endif /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) is empty, and the behaviour of Tcl 8.4 in this locale is not useful. On OpenBSD 4.0, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "646". In this situation, some unit tests fail. On MirBSD 10, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "UTF-8". */ # if HAVE_LANGINFO_CODESET { const char *cs = nl_langinfo (CODESET); if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0 || strcmp (cs, "UTF-8") == 0) return 1; } # endif # ifdef __CYGWIN__ /* On Cygwin, avoid locale names without encoding suffix, because the locale_charset() function relies on the encoding suffix. Note that LC_ALL is set on the command line. */ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; # endif /* Check whether MB_CUR_MAX is > 1. This excludes the dysfunctional locales on Cygwin 1.5.x. */ if (MB_CUR_MAX == 1) return 1; /* Check whether in a month name, no byte in the range 0x80..0x9F occurs. This excludes the UTF-8 encoding (except on MirBSD). */ { const char *p; t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1; for (p = buf; *p != '\0'; p++) if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0) return 1; } return 0; #endif } ]])]) if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then case "$host_os" in # Handle native Windows specially, because there setlocale() interprets # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", # "fr" or "fra" as "French" or "French_France.1252", # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", # "ja" as "Japanese" or "Japanese_Japan.932", # and similar. mingw*) # Note that on native Windows, the Japanese locale is # Japanese_Japan.932, and CP932 is very different from EUC-JP, so we # cannot use it here. gt_cv_locale_ja=none ;; *) # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the # configure script would override the LC_ALL setting. Likewise for # LC_CTYPE, which is also set at the beginning of the configure script. # Test for the AIX locale name. if (LC_ALL=ja_JP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_ja=ja_JP else # Test for the locale name with explicit encoding suffix. if (LC_ALL=ja_JP.EUC-JP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_ja=ja_JP.EUC-JP else # Test for the HP-UX, OSF/1, NetBSD locale name. if (LC_ALL=ja_JP.eucJP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_ja=ja_JP.eucJP else # Test for the IRIX, FreeBSD locale name. if (LC_ALL=ja_JP.EUC LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_ja=ja_JP.EUC else # Test for the Solaris 7 locale name. if (LC_ALL=ja LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_ja=ja else # Special test for NetBSD 1.6. if test -f /usr/share/locale/ja_JP.eucJP/LC_CTYPE; then gt_cv_locale_ja=ja_JP.eucJP else # None found. gt_cv_locale_ja=none fi fi fi fi fi fi ;; esac fi rm -fr conftest* ]) LOCALE_JA=$gt_cv_locale_ja AC_SUBST([LOCALE_JA]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/wctype_h.m4�����������������������������������������������������������������������������0000644�0001750�0001750�00000014444�14436424420�014744� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wctype_h.m4 serial 30 dnl A placeholder for ISO C99 <wctype.h>, for platforms that lack it. dnl Copyright (C) 2006-2023 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 Written by Paul Eggert. AC_DEFUN_ONCE([gl_WCTYPE_H], [ AC_REQUIRE([gl_WCTYPE_H_DEFAULTS]) AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_CHECK_FUNCS_ONCE([iswcntrl]) if test $ac_cv_func_iswcntrl = yes; then HAVE_ISWCNTRL=1 else HAVE_ISWCNTRL=0 fi AC_SUBST([HAVE_ISWCNTRL]) AC_REQUIRE([gt_TYPE_WINT_T]) if test $gt_cv_c_wint_t = yes; then HAVE_WINT_T=1 else HAVE_WINT_T=0 fi AC_SUBST([HAVE_WINT_T]) AC_REQUIRE([gl_TYPE_WINT_T_PREREQ]) gl_CHECK_NEXT_HEADERS([wctype.h]) if test $ac_cv_header_wctype_h = yes; then if test $ac_cv_func_iswcntrl = yes; then dnl Linux libc5 has an iswprint function that returns 0 for all arguments. dnl The other functions are likely broken in the same way. AC_CACHE_CHECK([whether iswcntrl works], [gl_cv_func_iswcntrl_works], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <wchar.h> #include <wctype.h> int main () { return iswprint ('x') == 0; } ]])], [gl_cv_func_iswcntrl_works=yes], [gl_cv_func_iswcntrl_works=no], [dnl Guess no on Linux libc5, yes otherwise. AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdlib.h> #if __GNU_LIBRARY__ == 1 Linux libc5 i18n is broken. #endif]], [[]])], [gl_cv_func_iswcntrl_works="guessing yes"], [gl_cv_func_iswcntrl_works="guessing no"]) ]) ]) fi HAVE_WCTYPE_H=1 else HAVE_WCTYPE_H=0 fi AC_SUBST([HAVE_WCTYPE_H]) if test $GNULIBHEADERS_OVERRIDE_WINT_T = 1; then REPLACE_ISWCNTRL=1 else case "$gl_cv_func_iswcntrl_works" in *yes) REPLACE_ISWCNTRL=0 ;; *) REPLACE_ISWCNTRL=1 ;; esac fi AC_SUBST([REPLACE_ISWCNTRL]) if test $HAVE_ISWCNTRL = 0 || test $REPLACE_ISWCNTRL = 1; then dnl Redefine all of iswcntrl, ..., iswxdigit in <wctype.h>. : fi if test $REPLACE_ISWCNTRL = 1; then REPLACE_TOWLOWER=1 else AC_CHECK_FUNCS([towlower]) if test $ac_cv_func_towlower = yes; then REPLACE_TOWLOWER=0 else AC_CHECK_DECLS([towlower],,, [[#include <wchar.h> #if HAVE_WCTYPE_H # include <wctype.h> #endif ]]) if test $ac_cv_have_decl_towlower = yes; then dnl On Minix 3.1.8, the system's <wctype.h> declares towlower() and dnl towupper() although it does not have the functions. Avoid a dnl collision with gnulib's replacement. REPLACE_TOWLOWER=1 else REPLACE_TOWLOWER=0 fi fi fi AC_SUBST([REPLACE_TOWLOWER]) if test $HAVE_ISWCNTRL = 0 || test $REPLACE_TOWLOWER = 1; then dnl Redefine towlower, towupper in <wctype.h>. : fi dnl We assume that the wctype() and iswctype() functions exist if and only dnl if the type wctype_t is defined in <wchar.h> or in <wctype.h> if that dnl exists. dnl HP-UX 11.00 declares all these in <wchar.h> and lacks <wctype.h>. AC_CACHE_CHECK([for wctype_t], [gl_cv_type_wctype_t], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <wchar.h> #if HAVE_WCTYPE_H # include <wctype.h> #endif wctype_t a; ]], [[]])], [gl_cv_type_wctype_t=yes], [gl_cv_type_wctype_t=no]) ]) if test $gl_cv_type_wctype_t = no; then HAVE_WCTYPE_T=0 fi dnl We assume that the wctrans() and towctrans() functions exist if and only dnl if the type wctrans_t is defined in <wctype.h>. AC_CACHE_CHECK([for wctrans_t], [gl_cv_type_wctrans_t], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <wchar.h> #include <wctype.h> wctrans_t a; ]], [[]])], [gl_cv_type_wctrans_t=yes], [gl_cv_type_wctrans_t=no]) ]) if test $gl_cv_type_wctrans_t = no; then HAVE_WCTRANS_T=0 fi dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[ #if !(defined __GLIBC__ && !defined __UCLIBC__) # include <wchar.h> #endif #include <wctype.h> ]], [wctype iswctype wctrans towctrans ]) ]) # gl_WCTYPE_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_WCTYPE_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_WCTYPE_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_WCTYPE_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_WCTYPE_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISWBLANK]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISWDIGIT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISWXDIGIT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCTYPE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISWCTYPE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCTRANS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TOWCTRANS]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_WCTYPE_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_WCTYPE_H_DEFAULTS]) ]) AC_DEFUN([gl_WCTYPE_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_ISWBLANK=1; AC_SUBST([HAVE_ISWBLANK]) HAVE_WCTYPE_T=1; AC_SUBST([HAVE_WCTYPE_T]) HAVE_WCTRANS_T=1; AC_SUBST([HAVE_WCTRANS_T]) REPLACE_ISWBLANK=0; AC_SUBST([REPLACE_ISWBLANK]) REPLACE_ISWDIGIT=0; AC_SUBST([REPLACE_ISWDIGIT]) REPLACE_ISWXDIGIT=0; AC_SUBST([REPLACE_ISWXDIGIT]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/m4/wchar_h.m4������������������������������������������������������������������������������0000644�0001750�0001750�00000026315�14436424420�014535� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������dnl A placeholder for ISO C99 <wchar.h>, for platforms that have issues. dnl Copyright (C) 2007-2023 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 Written by Eric Blake. # wchar_h.m4 serial 60 AC_DEFUN_ONCE([gl_WCHAR_H], [ AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) AC_REQUIRE([gl_WCHAR_H_INLINE_OK]) dnl Prepare for creating substitute <wchar.h>. dnl Check for <wchar.h> (missing in Linux uClibc when built without wide dnl character support). dnl <wchar.h> is always overridden, because of GNULIB_POSIXCHECK. gl_CHECK_NEXT_HEADERS([wchar.h]) if test $ac_cv_header_wchar_h = yes; then HAVE_WCHAR_H=1 else HAVE_WCHAR_H=0 fi AC_SUBST([HAVE_WCHAR_H]) AC_REQUIRE([gl_FEATURES_H]) AC_REQUIRE([gt_TYPE_WINT_T]) if test $gt_cv_c_wint_t = yes; then HAVE_WINT_T=1 else HAVE_WINT_T=0 fi AC_SUBST([HAVE_WINT_T]) AC_REQUIRE([gl_TYPE_WINT_T_PREREQ]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[ #include <wchar.h> ]], [btowc wctob mbsinit mbrtowc mbrlen mbsrtowcs mbsnrtowcs wcrtomb wcsrtombs wcsnrtombs wcwidth wmemchr wmemcmp wmemcpy wmemmove wmempcpy wmemset wcslen wcsnlen wcscpy wcpcpy wcsncpy wcpncpy wcscat wcsncat wcscmp wcsncmp wcscasecmp wcsncasecmp wcscoll wcsxfrm wcsdup wcschr wcsrchr wcscspn wcsspn wcspbrk wcsstr wcstok wcswidth wcsftime ]) AC_REQUIRE([AC_C_RESTRICT]) AC_CHECK_DECLS([wcsdup], [], [], [[ #include <wchar.h> ]]) if test $ac_cv_have_decl_wcsdup = no; then HAVE_DECL_WCSDUP=0 fi ]) dnl Check whether <wchar.h> is usable at all. AC_DEFUN([gl_WCHAR_H_INLINE_OK], [ dnl Test whether <wchar.h> suffers due to the transition from '__inline' to dnl 'gnu_inline'. See <https://sourceware.org/bugzilla/show_bug.cgi?id=4022> dnl and <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=42440>. In summary, dnl glibc version 2.5 or older, together with gcc version 4.3 or newer and dnl the option -std=c99 or -std=gnu99, leads to a broken <wchar.h>. AC_REQUIRE([AC_CANONICAL_HOST]) AC_CACHE_CHECK([whether <wchar.h> uses 'inline' correctly], [gl_cv_header_wchar_h_correct_inline], [gl_cv_header_wchar_h_correct_inline=yes case "$host_os" in *-gnu* | gnu*) AC_LANG_CONFTEST([ AC_LANG_SOURCE([[ #define wcstod renamed_wcstod #include <wchar.h> extern int zero (void); int main () { return zero(); } ]])]) dnl Do not rename the object file from conftest.$ac_objext to dnl conftest1.$ac_objext, as this will cause the link to fail on dnl z/OS when using the XPLINK object format (due to duplicate dnl CSECT names). Instead, temporarily redefine $ac_compile so dnl that the object file has the latter name from the start. save_ac_compile="$ac_compile" ac_compile=`echo "$save_ac_compile" | sed s/conftest/conftest1/` if echo '#include "conftest.c"' >conftest1.c \ && AC_TRY_EVAL([ac_compile]); then AC_LANG_CONFTEST([ AC_LANG_SOURCE([[ #define wcstod renamed_wcstod #include <wchar.h> int zero (void) { return 0; } ]])]) dnl See note above about renaming object files. ac_compile=`echo "$save_ac_compile" | sed s/conftest/conftest2/` if echo '#include "conftest.c"' >conftest2.c \ && AC_TRY_EVAL([ac_compile]); then if $CC -o conftest$ac_exeext $CFLAGS $LDFLAGS conftest1.$ac_objext conftest2.$ac_objext $LIBS >&AS_MESSAGE_LOG_FD 2>&1; then : else gl_cv_header_wchar_h_correct_inline=no fi fi fi ac_compile="$save_ac_compile" rm -f conftest[12].c conftest[12].$ac_objext conftest$ac_exeext ;; esac ]) if test $gl_cv_header_wchar_h_correct_inline = no; then AC_MSG_ERROR([<wchar.h> cannot be used with this compiler ($CC $CFLAGS $CPPFLAGS). This is a known interoperability problem of glibc <= 2.5 with gcc >= 4.3 in C99 mode. You have four options: - Add the flag -fgnu89-inline to CC and reconfigure, or - Fix your include files, using parts of <https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=b037a293a48718af30d706c2e18c929d0e69a621>, or - Use a gcc version older than 4.3, or - Don't use the flags -std=c99 or -std=gnu99. Configuration aborted.]) fi ]) # gl_WCHAR_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_WCHAR_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_WCHAR_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_WCHAR_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_WCHAR_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_BTOWC]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCTOB]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSINIT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBRTOWC]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBRLEN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSRTOWCS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSNRTOWCS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCRTOMB]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSRTOMBS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSNRTOMBS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCWIDTH]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WMEMCHR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WMEMCMP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WMEMCPY]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WMEMMOVE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WMEMPCPY]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WMEMSET]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSLEN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSNLEN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSCPY]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCPCPY]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSNCPY]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCPNCPY]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSCAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSNCAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSCMP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSNCMP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSCASECMP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSNCASECMP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSCOLL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSXFRM]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSDUP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSCHR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSRCHR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSCSPN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSSPN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSPBRK]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSSTR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSTOK]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSWIDTH]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSFTIME]) dnl Support Microsoft deprecated alias function names by default. gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_WCSDUP], [1]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_WCHAR_H_MODULE_INDICATOR_DEFAULTS]) dnl Make sure the shell variable for GNULIB_FREE_POSIX is initialized. gl_STDLIB_H_REQUIRE_DEFAULTS AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) ]) AC_DEFUN([gl_WCHAR_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_BTOWC=1; AC_SUBST([HAVE_BTOWC]) HAVE_MBSINIT=1; AC_SUBST([HAVE_MBSINIT]) HAVE_MBRTOWC=1; AC_SUBST([HAVE_MBRTOWC]) HAVE_MBRLEN=1; AC_SUBST([HAVE_MBRLEN]) HAVE_MBSRTOWCS=1; AC_SUBST([HAVE_MBSRTOWCS]) HAVE_MBSNRTOWCS=1; AC_SUBST([HAVE_MBSNRTOWCS]) HAVE_WCRTOMB=1; AC_SUBST([HAVE_WCRTOMB]) HAVE_WCSRTOMBS=1; AC_SUBST([HAVE_WCSRTOMBS]) HAVE_WCSNRTOMBS=1; AC_SUBST([HAVE_WCSNRTOMBS]) HAVE_WMEMCHR=1; AC_SUBST([HAVE_WMEMCHR]) HAVE_WMEMCMP=1; AC_SUBST([HAVE_WMEMCMP]) HAVE_WMEMCPY=1; AC_SUBST([HAVE_WMEMCPY]) HAVE_WMEMMOVE=1; AC_SUBST([HAVE_WMEMMOVE]) HAVE_WMEMPCPY=1; AC_SUBST([HAVE_WMEMPCPY]) HAVE_WMEMSET=1; AC_SUBST([HAVE_WMEMSET]) HAVE_WCSLEN=1; AC_SUBST([HAVE_WCSLEN]) HAVE_WCSNLEN=1; AC_SUBST([HAVE_WCSNLEN]) HAVE_WCSCPY=1; AC_SUBST([HAVE_WCSCPY]) HAVE_WCPCPY=1; AC_SUBST([HAVE_WCPCPY]) HAVE_WCSNCPY=1; AC_SUBST([HAVE_WCSNCPY]) HAVE_WCPNCPY=1; AC_SUBST([HAVE_WCPNCPY]) HAVE_WCSCAT=1; AC_SUBST([HAVE_WCSCAT]) HAVE_WCSNCAT=1; AC_SUBST([HAVE_WCSNCAT]) HAVE_WCSCMP=1; AC_SUBST([HAVE_WCSCMP]) HAVE_WCSNCMP=1; AC_SUBST([HAVE_WCSNCMP]) HAVE_WCSCASECMP=1; AC_SUBST([HAVE_WCSCASECMP]) HAVE_WCSNCASECMP=1; AC_SUBST([HAVE_WCSNCASECMP]) HAVE_WCSCOLL=1; AC_SUBST([HAVE_WCSCOLL]) HAVE_WCSXFRM=1; AC_SUBST([HAVE_WCSXFRM]) HAVE_WCSDUP=1; AC_SUBST([HAVE_WCSDUP]) HAVE_WCSCHR=1; AC_SUBST([HAVE_WCSCHR]) HAVE_WCSRCHR=1; AC_SUBST([HAVE_WCSRCHR]) HAVE_WCSCSPN=1; AC_SUBST([HAVE_WCSCSPN]) HAVE_WCSSPN=1; AC_SUBST([HAVE_WCSSPN]) HAVE_WCSPBRK=1; AC_SUBST([HAVE_WCSPBRK]) HAVE_WCSSTR=1; AC_SUBST([HAVE_WCSSTR]) HAVE_WCSTOK=1; AC_SUBST([HAVE_WCSTOK]) HAVE_WCSWIDTH=1; AC_SUBST([HAVE_WCSWIDTH]) HAVE_WCSFTIME=1; AC_SUBST([HAVE_WCSFTIME]) HAVE_DECL_WCTOB=1; AC_SUBST([HAVE_DECL_WCTOB]) HAVE_DECL_WCSDUP=1; AC_SUBST([HAVE_DECL_WCSDUP]) HAVE_DECL_WCWIDTH=1; AC_SUBST([HAVE_DECL_WCWIDTH]) REPLACE_MBSTATE_T=0; AC_SUBST([REPLACE_MBSTATE_T]) REPLACE_BTOWC=0; AC_SUBST([REPLACE_BTOWC]) REPLACE_WCTOB=0; AC_SUBST([REPLACE_WCTOB]) REPLACE_MBSINIT=0; AC_SUBST([REPLACE_MBSINIT]) REPLACE_MBRTOWC=0; AC_SUBST([REPLACE_MBRTOWC]) REPLACE_MBRLEN=0; AC_SUBST([REPLACE_MBRLEN]) REPLACE_MBSRTOWCS=0; AC_SUBST([REPLACE_MBSRTOWCS]) REPLACE_MBSNRTOWCS=0; AC_SUBST([REPLACE_MBSNRTOWCS]) REPLACE_WCRTOMB=0; AC_SUBST([REPLACE_WCRTOMB]) REPLACE_WCSRTOMBS=0; AC_SUBST([REPLACE_WCSRTOMBS]) REPLACE_WCSNRTOMBS=0; AC_SUBST([REPLACE_WCSNRTOMBS]) REPLACE_WCWIDTH=0; AC_SUBST([REPLACE_WCWIDTH]) REPLACE_WCSWIDTH=0; AC_SUBST([REPLACE_WCSWIDTH]) REPLACE_WCSFTIME=0; AC_SUBST([REPLACE_WCSFTIME]) REPLACE_WCSCMP=0; AC_SUBST([REPLACE_WCSCMP]) REPLACE_WCSNCMP=0; AC_SUBST([REPLACE_WCSNCMP]) REPLACE_WCSSTR=0; AC_SUBST([REPLACE_WCSSTR]) REPLACE_WCSTOK=0; AC_SUBST([REPLACE_WCSTOK]) REPLACE_WMEMCMP=0; AC_SUBST([REPLACE_WMEMCMP]) REPLACE_WMEMPCPY=0; AC_SUBST([REPLACE_WMEMPCPY]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/config.h.in��������������������������������������������������������������������������������0000644�0001750�0001750�00000176423�14655401276�014400� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* config.h.in. Generated from configure.ac by autoheader. */ /* Witness that <config.h> has been included. */ #define _GL_CONFIG_H_INCLUDED 1 /* Define to the number of bits in type 'ptrdiff_t'. */ #undef BITSIZEOF_PTRDIFF_T /* Define to the number of bits in type 'sig_atomic_t'. */ #undef BITSIZEOF_SIG_ATOMIC_T /* Define to the number of bits in type 'size_t'. */ #undef BITSIZEOF_SIZE_T /* Define to the number of bits in type 'wchar_t'. */ #undef BITSIZEOF_WCHAR_T /* Define to the number of bits in type 'wint_t'. */ #undef BITSIZEOF_WINT_T /* Define to 1 if using 'alloca.c'. */ #undef C_ALLOCA /* Define to 1 if // is a file system root distinct from /. */ #undef DOUBLE_SLASH_IS_DISTINCT_ROOT /* Define to 1 if translation of program messages to the user's native language is requested. */ #undef ENABLE_NLS /* Define this to 1 if F_DUPFD behavior does not match POSIX */ #undef FCNTL_DUPFD_BUGGY /* Define to nothing if C supports flexible array members, and to 1 if it does not. That way, with a declaration like 'struct s { int n; short d[FLEXIBLE_ARRAY_MEMBER]; };', the struct hack can be used with pre-C99 compilers. Use 'FLEXSIZEOF (struct s, d, N * sizeof (short))' to calculate the size in bytes of such a struct containing an N-element array. */ #undef FLEXIBLE_ARRAY_MEMBER /* Define to 1 if nl_langinfo (YESEXPR) returns a non-empty string. */ #undef FUNC_NL_LANGINFO_YESEXPR_WORKS /* Define to the type of elements in the array set by `getgroups'. Usually this is either `int' or `gid_t'. */ #undef GETGROUPS_T /* Define to a C preprocessor expression that evaluates to 1 or 0, depending whether the gnulib module dirname shall be considered present. */ #undef GNULIB_DIRNAME /* Define to a C preprocessor expression that evaluates to 1 or 0, depending whether the gnulib module fscanf shall be considered present. */ #undef GNULIB_FSCANF /* Define to a C preprocessor expression that evaluates to 1 or 0, depending whether the gnulib module lock shall be considered present. */ #undef GNULIB_LOCK /* Define to a C preprocessor expression that evaluates to 1 or 0, depending whether the gnulib module msvc-nothrow shall be considered present. */ #undef GNULIB_MSVC_NOTHROW /* Define to 1 if printf and friends should be labeled with attribute "__gnu_printf__" instead of "__printf__" */ #undef GNULIB_PRINTF_ATTRIBUTE_FLAVOR_GNU /* Define to a C preprocessor expression that evaluates to 1 or 0, depending whether the gnulib module reallocarray shall be considered present. */ #undef GNULIB_REALLOCARRAY /* Define to a C preprocessor expression that evaluates to 1 or 0, depending whether the gnulib module scanf shall be considered present. */ #undef GNULIB_SCANF /* Define to a C preprocessor expression that evaluates to 1 or 0, depending whether the gnulib module strerror shall be considered present. */ #undef GNULIB_STRERROR /* Define to 1 when the gnulib module btowc should be tested. */ #undef GNULIB_TEST_BTOWC /* Define to 1 when the gnulib module calloc-gnu should be tested. */ #undef GNULIB_TEST_CALLOC_GNU /* Define to 1 when the gnulib module calloc-posix should be tested. */ #undef GNULIB_TEST_CALLOC_POSIX /* Define to 1 when the gnulib module cloexec should be tested. */ #undef GNULIB_TEST_CLOEXEC /* Define to 1 when the gnulib module close should be tested. */ #undef GNULIB_TEST_CLOSE /* Define to 1 when the gnulib module dup2 should be tested. */ #undef GNULIB_TEST_DUP2 /* Define to 1 when the gnulib module environ should be tested. */ #undef GNULIB_TEST_ENVIRON /* Define to 1 when the gnulib module fcntl should be tested. */ #undef GNULIB_TEST_FCNTL /* Define to 1 when the gnulib module fgetc should be tested. */ #undef GNULIB_TEST_FGETC /* Define to 1 when the gnulib module fgets should be tested. */ #undef GNULIB_TEST_FGETS /* Define to 1 when the gnulib module fprintf should be tested. */ #undef GNULIB_TEST_FPRINTF /* Define to 1 when the gnulib module fputc should be tested. */ #undef GNULIB_TEST_FPUTC /* Define to 1 when the gnulib module fputs should be tested. */ #undef GNULIB_TEST_FPUTS /* Define to 1 when the gnulib module fread should be tested. */ #undef GNULIB_TEST_FREAD /* Define to 1 when the gnulib module free-posix should be tested. */ #undef GNULIB_TEST_FREE_POSIX /* Define to 1 when the gnulib module fscanf should be tested. */ #undef GNULIB_TEST_FSCANF /* Define to 1 when the gnulib module fstat should be tested. */ #undef GNULIB_TEST_FSTAT /* Define to 1 when the gnulib module fwrite should be tested. */ #undef GNULIB_TEST_FWRITE /* Define to 1 when the gnulib module getc should be tested. */ #undef GNULIB_TEST_GETC /* Define to 1 when the gnulib module getchar should be tested. */ #undef GNULIB_TEST_GETCHAR /* Define to 1 when the gnulib module getdelim should be tested. */ #undef GNULIB_TEST_GETDELIM /* Define to 1 when the gnulib module getdtablesize should be tested. */ #undef GNULIB_TEST_GETDTABLESIZE /* Define to 1 when the gnulib module getline should be tested. */ #undef GNULIB_TEST_GETLINE /* Define to 1 when the gnulib module getopt-posix should be tested. */ #undef GNULIB_TEST_GETOPT_POSIX /* Define to 1 when the gnulib module getprogname should be tested. */ #undef GNULIB_TEST_GETPROGNAME /* Define to 1 when the gnulib module localeconv should be tested. */ #undef GNULIB_TEST_LOCALECONV /* Define to 1 when the gnulib module malloc-gnu should be tested. */ #undef GNULIB_TEST_MALLOC_GNU /* Define to 1 when the gnulib module malloc-posix should be tested. */ #undef GNULIB_TEST_MALLOC_POSIX /* Define to 1 when the gnulib module mbrtowc should be tested. */ #undef GNULIB_TEST_MBRTOWC /* Define to 1 when the gnulib module mbsinit should be tested. */ #undef GNULIB_TEST_MBSINIT /* Define to 1 when the gnulib module mbtowc should be tested. */ #undef GNULIB_TEST_MBTOWC /* Define to 1 when the gnulib module mktime should be tested. */ #undef GNULIB_TEST_MKTIME /* Define to 1 when the gnulib module nl_langinfo should be tested. */ #undef GNULIB_TEST_NL_LANGINFO /* Define to 1 when the gnulib module open should be tested. */ #undef GNULIB_TEST_OPEN /* Define to 1 when the gnulib module printf should be tested. */ #undef GNULIB_TEST_PRINTF /* Define to 1 when the gnulib module putc should be tested. */ #undef GNULIB_TEST_PUTC /* Define to 1 when the gnulib module putchar should be tested. */ #undef GNULIB_TEST_PUTCHAR /* Define to 1 when the gnulib module puts should be tested. */ #undef GNULIB_TEST_PUTS /* Define to 1 when the gnulib module reallocarray should be tested. */ #undef GNULIB_TEST_REALLOCARRAY /* Define to 1 when the gnulib module realloc-gnu should be tested. */ #undef GNULIB_TEST_REALLOC_GNU /* Define to 1 when the gnulib module realloc-posix should be tested. */ #undef GNULIB_TEST_REALLOC_POSIX /* Define to 1 when the gnulib module scanf should be tested. */ #undef GNULIB_TEST_SCANF /* Define to 1 when the gnulib module setenv should be tested. */ #undef GNULIB_TEST_SETENV /* Define to 1 when the gnulib module setlocale_null should be tested. */ #undef GNULIB_TEST_SETLOCALE_NULL /* Define to 1 when the gnulib module stat should be tested. */ #undef GNULIB_TEST_STAT /* Define to 1 when the gnulib module strerror should be tested. */ #undef GNULIB_TEST_STRERROR /* Define to 1 when the gnulib module timegm should be tested. */ #undef GNULIB_TEST_TIMEGM /* Define to 1 when the gnulib module time_r should be tested. */ #undef GNULIB_TEST_TIME_R /* Define to 1 when the gnulib module time_rz should be tested. */ #undef GNULIB_TEST_TIME_RZ /* Define to 1 when the gnulib module tzset should be tested. */ #undef GNULIB_TEST_TZSET /* Define to 1 when the gnulib module unsetenv should be tested. */ #undef GNULIB_TEST_UNSETENV /* Define to 1 when the gnulib module vfprintf should be tested. */ #undef GNULIB_TEST_VFPRINTF /* Define to 1 when the gnulib module vprintf should be tested. */ #undef GNULIB_TEST_VPRINTF /* Define to 1 when the gnulib module wcrtomb should be tested. */ #undef GNULIB_TEST_WCRTOMB /* Define to a C preprocessor expression that evaluates to 1 or 0, depending whether the gnulib module xalloc shall be considered present. */ #undef GNULIB_XALLOC /* Provide prototype of xalloc_die in gnulib */ #undef GNULIB_XALLOC_DIE /* Define to 1 if you have 'alloca' after including <alloca.h>, a header that may be supplied by this distribution. */ #undef HAVE_ALLOCA /* Define to 1 if <alloca.h> works. */ #undef HAVE_ALLOCA_H /* Define to 1 if you have the `btowc' function. */ #undef HAVE_BTOWC /* Define to 1 if you have the Mac OS X function CFLocaleCopyCurrent in the CoreFoundation framework. */ #undef HAVE_CFLOCALECOPYCURRENT /* Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in the CoreFoundation framework. */ #undef HAVE_CFPREFERENCESCOPYAPPVALUE /* Define to 1 if you have the <crtdefs.h> header file. */ #undef HAVE_CRTDEFS_H /* Define to 1 if bool, true and false work as per C2023. */ #undef HAVE_C_BOOL /* Define to 1 if the static_assert keyword works. */ #undef HAVE_C_STATIC_ASSERT /* Define to 1 if C supports variable-length arrays. */ #undef HAVE_C_VARARRAYS /* Define if the GNU dcgettext() function is already present or preinstalled. */ #undef HAVE_DCGETTEXT /* Define to 1 if you have the declaration of `alarm', and to 0 if you don't. */ #undef HAVE_DECL_ALARM /* Define to 1 if you have the declaration of `ecvt', and to 0 if you don't. */ #undef HAVE_DECL_ECVT /* Define to 1 if you have the declaration of `execvpe', and to 0 if you don't. */ #undef HAVE_DECL_EXECVPE /* Define to 1 if you have the declaration of `fcloseall', and to 0 if you don't. */ #undef HAVE_DECL_FCLOSEALL /* Define to 1 if you have the declaration of `fcvt', and to 0 if you don't. */ #undef HAVE_DECL_FCVT /* Define to 1 if you have the declaration of `gcvt', and to 0 if you don't. */ #undef HAVE_DECL_GCVT /* Define to 1 if you have the declaration of `getc_unlocked', and to 0 if you don't. */ #undef HAVE_DECL_GETC_UNLOCKED /* Define to 1 if you have the declaration of `getdelim', and to 0 if you don't. */ #undef HAVE_DECL_GETDELIM /* Define to 1 if you have the declaration of `getdtablesize', and to 0 if you don't. */ #undef HAVE_DECL_GETDTABLESIZE /* Define to 1 if you have the declaration of `getline', and to 0 if you don't. */ #undef HAVE_DECL_GETLINE /* Define to 1 if you have the declaration of `getw', and to 0 if you don't. */ #undef HAVE_DECL_GETW /* Define to 1 if you have the declaration of `isblank', and to 0 if you don't. */ #undef HAVE_DECL_ISBLANK /* Define to 1 if you have the declaration of `localtime_r', and to 0 if you don't. */ #undef HAVE_DECL_LOCALTIME_R /* Define to 1 if you have the declaration of `mbrtowc', and to 0 if you don't. */ #undef HAVE_DECL_MBRTOWC /* Define to 1 if you have the declaration of `mbsinit', and to 0 if you don't. */ #undef HAVE_DECL_MBSINIT /* Define to 1 if you have the declaration of `program_invocation_name', and to 0 if you don't. */ #undef HAVE_DECL_PROGRAM_INVOCATION_NAME /* Define to 1 if you have the declaration of `program_invocation_short_name', and to 0 if you don't. */ #undef HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME /* Define to 1 if you have the declaration of `putw', and to 0 if you don't. */ #undef HAVE_DECL_PUTW /* Define to 1 if you have the declaration of `setenv', and to 0 if you don't. */ #undef HAVE_DECL_SETENV /* Define to 1 if you have the declaration of `strerror_r', and to 0 if you don't. */ #undef HAVE_DECL_STRERROR_R /* Define to 1 if you have the declaration of `towlower', and to 0 if you don't. */ #undef HAVE_DECL_TOWLOWER /* Define to 1 if you have the declaration of `tzname', and to 0 if you don't. */ #undef HAVE_DECL_TZNAME /* Define to 1 if you have the declaration of `unsetenv', and to 0 if you don't. */ #undef HAVE_DECL_UNSETENV /* Define to 1 if you have the declaration of `wcrtomb', and to 0 if you don't. */ #undef HAVE_DECL_WCRTOMB /* Define to 1 if you have the declaration of `wcsdup', and to 0 if you don't. */ #undef HAVE_DECL_WCSDUP /* Define to 1 if you have the declaration of `__argv', and to 0 if you don't. */ #undef HAVE_DECL___ARGV /* Define if you have the declaration of environ. */ #undef HAVE_ENVIRON_DECL /* Define to 1 if you have the `error' function. */ #undef HAVE_ERROR /* Define to 1 if you have the <error.h> header file. */ #undef HAVE_ERROR_H /* Define to 1 if you have the `fcntl' function. */ #undef HAVE_FCNTL /* Define to 1 if you have the <features.h> header file. */ #undef HAVE_FEATURES_H /* Define to 1 if you have the `flock' function. */ #undef HAVE_FLOCK /* Define to 1 if you have the `flockfile' function. */ #undef HAVE_FLOCKFILE /* Define if the 'free' function is guaranteed to preserve errno. */ #undef HAVE_FREE_POSIX /* Define to 1 if you have the `ftruncate' function. */ #undef HAVE_FTRUNCATE /* Define to 1 if you have the `funlockfile' function. */ #undef HAVE_FUNLOCKFILE /* Define to 1 if you have the `getdelim' function. */ #undef HAVE_GETDELIM /* Define to 1 if you have the `getdtablesize' function. */ #undef HAVE_GETDTABLESIZE /* Define to 1 if you have the `getexecname' function. */ #undef HAVE_GETEXECNAME /* Define to 1 if you have the `getgrouplist' function. */ #undef HAVE_GETGROUPLIST /* Define to 1 if your system has a working `getgroups' function. */ #undef HAVE_GETGROUPS /* Define to 1 if you have the `getline' function. */ #undef HAVE_GETLINE /* Define to 1 if you have the <getopt.h> header file. */ #undef HAVE_GETOPT_H /* Define to 1 if you have the `getopt_long_only' function. */ #undef HAVE_GETOPT_LONG_ONLY /* Define to 1 if you have the `getprogname' function. */ #undef HAVE_GETPROGNAME /* 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 <inttypes.h> header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the `isblank' function. */ #undef HAVE_ISBLANK /* Define to 1 if you have the `iswcntrl' function. */ #undef HAVE_ISWCNTRL /* Define to 1 if you have the `iswctype' function. */ #undef HAVE_ISWCTYPE /* Define if you have <langinfo.h> and nl_langinfo(CODESET). */ #undef HAVE_LANGINFO_CODESET /* Define to 1 if you have the <langinfo.h> header file. */ #undef HAVE_LANGINFO_H /* Define to 1 if you have the <libintl.h> header file. */ #undef HAVE_LIBINTL_H /* Define to 1 if you have the <limits.h> header file. */ #undef HAVE_LIMITS_H /* Define if localtime-like functions can loop forever on extreme arguments. */ #undef HAVE_LOCALTIME_INFLOOP_BUG /* Define to 1 if you have the `localtime_r' function. */ #undef HAVE_LOCALTIME_R /* Define to 1 if the system has the type 'long long int'. */ #undef HAVE_LONG_LONG_INT /* Define to 1 if you have the `lstat' function. */ #undef HAVE_LSTAT /* Define to 1 if your system has a GNU libc compatible `malloc' function, and to 0 otherwise. */ #undef HAVE_MALLOC /* Define to 1 if you have the <malloc.h> header file. */ #undef HAVE_MALLOC_H /* Define if malloc, realloc, and calloc set errno on allocation failure. */ #undef HAVE_MALLOC_POSIX /* Define to 1 if you have the `mbrtowc' function. */ #undef HAVE_MBRTOWC /* Define to 1 if you have the `mbsinit' function. */ #undef HAVE_MBSINIT /* Define to 1 if <wchar.h> declares mbstate_t. */ #undef HAVE_MBSTATE_T /* Define to 1 if you have the `mbtowc' function. */ #undef HAVE_MBTOWC /* Define to 1 if you have the <minix/config.h> header file. */ #undef HAVE_MINIX_CONFIG_H /* Define to 1 if <limits.h> defines the MIN and MAX macros. */ #undef HAVE_MINMAX_IN_LIMITS_H /* Define to 1 if <sys/param.h> defines the MIN and MAX macros. */ #undef HAVE_MINMAX_IN_SYS_PARAM_H /* Define to 1 on MSVC platforms that have the "invalid parameter handler" concept. */ #undef HAVE_MSVC_INVALID_PARAMETER_HANDLER /* Define to 1 if you have the `nl_langinfo' function. */ #undef HAVE_NL_LANGINFO /* Define if you have the <pthread.h> header and the POSIX threads API. */ #undef HAVE_PTHREAD_API /* Define if the <pthread.h> defines PTHREAD_MUTEX_RECURSIVE. */ #undef HAVE_PTHREAD_MUTEX_RECURSIVE /* Define if the POSIX multithreading library has read/write locks. */ #undef HAVE_PTHREAD_RWLOCK /* Define if the 'pthread_rwlock_rdlock' function prefers a writer to a reader. */ #undef HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER /* Define to 1 if your system has a GNU libc compatible `realloc' function, and to 0 otherwise. */ #undef HAVE_REALLOC /* Define to 1 if you have the `reallocarray' function. */ #undef HAVE_REALLOCARRAY /* Define to 1 if you have the <sdkddkver.h> header file. */ #undef HAVE_SDKDDKVER_H /* Define to 1 if you have the <search.h> header file. */ #undef HAVE_SEARCH_H /* Define to 1 if you have the `setdtablesize' function. */ #undef HAVE_SETDTABLESIZE /* Define to 1 if you have the `setenv' function. */ #undef HAVE_SETENV /* Define to 1 if 'sig_atomic_t' is a signed integer type. */ #undef HAVE_SIGNED_SIG_ATOMIC_T /* Define to 1 if 'wchar_t' is a signed integer type. */ #undef HAVE_SIGNED_WCHAR_T /* Define to 1 if 'wint_t' is a signed integer type. */ #undef HAVE_SIGNED_WINT_T /* Define to 1 if you have the <socket.h> header file. */ #undef HAVE_SOCKET_H /* Define to 1 if `stat' has the bug that it succeeds when given the zero-length file name argument. */ #undef HAVE_STAT_EMPTY_STRING_BUG /* Define to 1 if you have the <stdbool.h> header file. */ #undef HAVE_STDBOOL_H /* Define to 1 if you have the <stdckdint.h> header file. */ #undef HAVE_STDCKDINT_H /* Define to 1 if you have the <stdint.h> header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the <stdio.h> header file. */ #undef HAVE_STDIO_H /* Define to 1 if you have the <stdlib.h> header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the `strdup' function. */ #undef HAVE_STRDUP /* Define to 1 if you have the `strerror' function. */ #undef HAVE_STRERROR /* Define if you have `strerror_r'. */ #undef HAVE_STRERROR_R /* 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 `strrchr' function. */ #undef HAVE_STRRCHR /* Define to 1 if you have the `strtoul' function. */ #undef HAVE_STRTOUL /* Define to 1 if `decimal_point' is a member of `struct lconv'. */ #undef HAVE_STRUCT_LCONV_DECIMAL_POINT /* Define to 1 if `int_p_cs_precedes' is a member of `struct lconv'. */ #undef HAVE_STRUCT_LCONV_INT_P_CS_PRECEDES /* Define to 1 if `st_atimensec' is a member of `struct stat'. */ #undef HAVE_STRUCT_STAT_ST_ATIMENSEC /* Define to 1 if `st_atimespec.tv_nsec' is a member of `struct stat'. */ #undef HAVE_STRUCT_STAT_ST_ATIMESPEC_TV_NSEC /* Define to 1 if `st_atim.st__tim.tv_nsec' is a member of `struct stat'. */ #undef HAVE_STRUCT_STAT_ST_ATIM_ST__TIM_TV_NSEC /* Define to 1 if `st_atim.tv_nsec' is a member of `struct stat'. */ #undef HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC /* Define to 1 if `st_birthtimensec' is a member of `struct stat'. */ #undef HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC /* Define to 1 if `st_birthtimespec.tv_nsec' is a member of `struct stat'. */ #undef HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC /* Define to 1 if `st_birthtim.tv_nsec' is a member of `struct stat'. */ #undef HAVE_STRUCT_STAT_ST_BIRTHTIM_TV_NSEC /* Define to 1 if `tm_zone' is a member of `struct tm'. */ #undef HAVE_STRUCT_TM_TM_ZONE /* Define to 1 if you have the `symlink' function. */ #undef HAVE_SYMLINK /* Define to 1 if you have the `sysconf' function. */ #undef HAVE_SYSCONF /* Define to 1 if you have the <syslog.h> header file. */ #undef HAVE_SYSLOG_H /* Define to 1 if you have the <sys/bitypes.h> header file. */ #undef HAVE_SYS_BITYPES_H /* Define to 1 if you have the <sys/cdefs.h> header file. */ #undef HAVE_SYS_CDEFS_H /* Define to 1 if you have the <sys/inttypes.h> header file. */ #undef HAVE_SYS_INTTYPES_H /* Define to 1 if you have the <sys/param.h> header file. */ #undef HAVE_SYS_PARAM_H /* Define to 1 if you have the <sys/socket.h> header file. */ #undef HAVE_SYS_SOCKET_H /* Define to 1 if you have the <sys/stat.h> header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the <sys/time.h> header file. */ #undef HAVE_SYS_TIME_H /* Define to 1 if you have the <sys/types.h> header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the `thrd_create' function. */ #undef HAVE_THRD_CREATE /* Define to 1 if you have the <threads.h> header file. */ #undef HAVE_THREADS_H /* Define to 1 if you have the `timegm' function. */ #undef HAVE_TIMEGM /* Define to 1 if the system has the type `timezone_t'. */ #undef HAVE_TIMEZONE_T /* Define if struct tm has the tm_gmtoff member. */ #undef HAVE_TM_GMTOFF /* Define to 1 if your `struct tm' has `tm_zone'. Deprecated, use `HAVE_STRUCT_TM_TM_ZONE' instead. */ #undef HAVE_TM_ZONE /* Define to 1 if you have the `towlower' function. */ #undef HAVE_TOWLOWER /* Define to 1 if you have the `tsearch' function. */ #undef HAVE_TSEARCH /* Define to 1 if you don't have `tm_zone' but do have the external array `tzname'. */ #undef HAVE_TZNAME /* Define to 1 if you have the <unistd.h> header file. */ #undef HAVE_UNISTD_H /* Define to 1 if you have the `unsetenv' function. */ #undef HAVE_UNSETENV /* Define to 1 if the system has the type 'unsigned long long int'. */ #undef HAVE_UNSIGNED_LONG_LONG_INT /* Define if you have a global __progname variable */ #undef HAVE_VAR___PROGNAME /* Define to 1 or 0, depending whether the compiler supports simple visibility declarations. */ #undef HAVE_VISIBILITY /* Define to 1 if you have the <wchar.h> header file. */ #undef HAVE_WCHAR_H /* Define if you have the 'wchar_t' type. */ #undef HAVE_WCHAR_T /* Define to 1 if you have the `wcrtomb' function. */ #undef HAVE_WCRTOMB /* Define to 1 if you have the <wctype.h> header file. */ #undef HAVE_WCTYPE_H /* Define to 1 if the compiler and linker support weak declarations of symbols. */ #undef HAVE_WEAK_SYMBOLS /* Define to 1 if you have the <winsock2.h> header file. */ #undef HAVE_WINSOCK2_H /* Define if you have the 'wint_t' type. */ #undef HAVE_WINT_T /* Define to 1 if O_NOATIME works. */ #undef HAVE_WORKING_O_NOATIME /* Define to 1 if O_NOFOLLOW works. */ #undef HAVE_WORKING_O_NOFOLLOW /* Define to 1 if you have the <xlocale.h> header file. */ #undef HAVE_XLOCALE_H /* Define to 1 if you have the `_set_invalid_parameter_handler' function. */ #undef HAVE__SET_INVALID_PARAMETER_HANDLER /* Define to 1 if the compiler supports __builtin_expect, and to 2 if <builtins.h> does. */ #undef HAVE___BUILTIN_EXPECT #ifndef HAVE___BUILTIN_EXPECT # define __builtin_expect(e, c) (e) #elif HAVE___BUILTIN_EXPECT == 2 # include <builtins.h> #endif /* Define to 1 if ctype.h defines __header_inline. */ #undef HAVE___HEADER_INLINE /* Please see the Gnulib manual for how to use these macros. Suppress extern inline with HP-UX cc, as it appears to be broken; see <https://lists.gnu.org/r/bug-texinfo/2013-02/msg00030.html>. Suppress extern inline with Sun C in standards-conformance mode, as it mishandles inline functions that call each other. E.g., for 'inline void f (void) { } inline void g (void) { f (); }', c99 incorrectly complains 'reference to static identifier "f" in extern inline function'. This bug was observed with Oracle Developer Studio 12.6 (Sun C 5.15 SunOS_sparc 2017/05/30). Suppress extern inline (with or without __attribute__ ((__gnu_inline__))) on configurations that mistakenly use 'static inline' to implement functions or macros in standard C headers like <ctype.h>. For example, if isdigit is mistakenly implemented via a static inline function, a program containing an extern inline function that calls isdigit may not work since the C standard prohibits extern inline functions from calling static functions (ISO C 99 section 6.7.4.(3). This bug is known to occur on: OS X 10.8 and earlier; see: https://lists.gnu.org/r/bug-gnulib/2012-12/msg00023.html DragonFly; see http://muscles.dragonflybsd.org/bulk/clang-master-potential/20141111_102002/logs/ah-tty-0.3.12.log FreeBSD; see: https://lists.gnu.org/r/bug-gnulib/2014-07/msg00104.html OS X 10.9 has a macro __header_inline indicating the bug is fixed for C and for clang but remains for g++; see <https://trac.macports.org/ticket/41033>. Assume DragonFly and FreeBSD will be similar. GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99 inline semantics, unless -fgnu89-inline is used. It defines a macro __GNUC_STDC_INLINE__ to indicate this situation or a macro __GNUC_GNU_INLINE__ to indicate the opposite situation. GCC 4.2 with -std=c99 or -std=gnu99 implements the GNU C inline semantics but warns, unless -fgnu89-inline is used: warning: C99 inline functions are not supported; using GNU89 warning: to disable this warning use -fgnu89-inline or the gnu_inline function attribute It defines a macro __GNUC_GNU_INLINE__ to indicate this situation. */ #if (((defined __APPLE__ && defined __MACH__) \ || defined __DragonFly__ || defined __FreeBSD__) \ && (defined HAVE___HEADER_INLINE \ ? (defined __cplusplus && defined __GNUC_STDC_INLINE__ \ && ! defined __clang__) \ : ((! defined _DONT_USE_CTYPE_INLINE_ \ && (defined __GNUC__ || defined __cplusplus)) \ || (defined _FORTIFY_SOURCE && 0 < _FORTIFY_SOURCE \ && defined __GNUC__ && ! defined __cplusplus)))) # define _GL_EXTERN_INLINE_STDHEADER_BUG #endif #if ((__GNUC__ \ ? (defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ \ && !defined __PCC__) \ : (199901L <= __STDC_VERSION__ \ && !defined __HP_cc \ && !defined __PGI \ && !(defined __SUNPRO_C && __STDC__))) \ && !defined _GL_EXTERN_INLINE_STDHEADER_BUG) # define _GL_INLINE inline # define _GL_EXTERN_INLINE extern inline # define _GL_EXTERN_INLINE_IN_USE #elif (2 < __GNUC__ + (7 <= __GNUC_MINOR__) && !defined __STRICT_ANSI__ \ && !defined __PCC__ \ && !defined _GL_EXTERN_INLINE_STDHEADER_BUG) # if defined __GNUC_GNU_INLINE__ && __GNUC_GNU_INLINE__ /* __gnu_inline__ suppresses a GCC 4.2 diagnostic. */ # define _GL_INLINE extern inline __attribute__ ((__gnu_inline__)) # else # define _GL_INLINE extern inline # endif # define _GL_EXTERN_INLINE extern # define _GL_EXTERN_INLINE_IN_USE #else # define _GL_INLINE _GL_UNUSED static # define _GL_EXTERN_INLINE _GL_UNUSED static #endif /* In GCC 4.6 (inclusive) to 5.1 (exclusive), suppress bogus "no previous prototype for 'FOO'" and "no previous declaration for 'FOO'" diagnostics, when FOO is an inline function in the header; see <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=54113> and <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63877>. */ #if __GNUC__ == 4 && 6 <= __GNUC_MINOR__ # if defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ # define _GL_INLINE_HEADER_CONST_PRAGMA # else # define _GL_INLINE_HEADER_CONST_PRAGMA \ _Pragma ("GCC diagnostic ignored \"-Wsuggest-attribute=const\"") # endif # define _GL_INLINE_HEADER_BEGIN \ _Pragma ("GCC diagnostic push") \ _Pragma ("GCC diagnostic ignored \"-Wmissing-prototypes\"") \ _Pragma ("GCC diagnostic ignored \"-Wmissing-declarations\"") \ _GL_INLINE_HEADER_CONST_PRAGMA # define _GL_INLINE_HEADER_END \ _Pragma ("GCC diagnostic pop") #else # define _GL_INLINE_HEADER_BEGIN # define _GL_INLINE_HEADER_END #endif /* Define to 1 if the compiler supports the keyword '__inline'. */ #undef HAVE___INLINE /* Define as const if the declaration of iconv() needs const. */ #undef ICONV_CONST /* Define to 1 if `lstat' dereferences a symlink specified with a trailing slash. */ #undef LSTAT_FOLLOWS_SLASHED_SYMLINK /* If malloc(0) is != NULL, define this to 1. Otherwise define this to 0. */ #undef MALLOC_0_IS_NONNULL /* Define if the mbrtowc function does not return (size_t) -2 for empty input. */ #undef MBRTOWC_EMPTY_INPUT_BUG /* Define if the mbrtowc function may signal encoding errors in the C locale. */ #undef MBRTOWC_IN_C_LOCALE_MAYBE_EILSEQ /* Define if the mbrtowc function has the NULL pwc argument bug. */ #undef MBRTOWC_NULL_ARG1_BUG /* Define if the mbrtowc function has the NULL string argument bug. */ #undef MBRTOWC_NULL_ARG2_BUG /* Define if the mbrtowc function does not return 0 for a NUL character. */ #undef MBRTOWC_NUL_RETVAL_BUG /* Define if the mbrtowc function returns a wrong return value. */ #undef MBRTOWC_RETVAL_BUG /* Define if the mbrtowc function stores a wide character when reporting incomplete input. */ #undef MBRTOWC_STORES_INCOMPLETE_BUG /* Use GNU style printf and scanf. */ #ifndef __USE_MINGW_ANSI_STDIO # undef __USE_MINGW_ANSI_STDIO #endif /* Define to 1 on musl libc. */ #undef MUSL_LIBC /* Define if the compilation of mktime.c should define 'mktime_internal'. */ #undef NEED_MKTIME_INTERNAL /* Define if the compilation of mktime.c should define 'mktime' with the native Windows TZ workaround. */ #undef NEED_MKTIME_WINDOWS /* Define if the compilation of mktime.c should define 'mktime' with the algorithmic workarounds. */ #undef NEED_MKTIME_WORKING /* Define to 1 if nl_langinfo is multithread-safe. */ #undef NL_LANGINFO_MTSAFE /* Define to 1 if open() fails to recognize a trailing slash. */ #undef OPEN_TRAILING_SLASH_BUG /* 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 the type that is the result of default argument promotions of type mode_t. */ #undef PROMOTED_MODE_T /* Define if the pthread_in_use() detection is hard. */ #undef PTHREAD_IN_USE_DETECTION_HARD /* Define to l, ll, u, ul, ull, etc., as suitable for constants of type 'ptrdiff_t'. */ #undef PTRDIFF_T_SUFFIX /* Define to 1 if stat needs help when passed a file name with a trailing slash */ #undef REPLACE_FUNC_STAT_FILE /* Define if nl_langinfo exists but is overridden by gnulib. */ #undef REPLACE_NL_LANGINFO /* Define to 1 if strerror(0) does not return a message implying success. */ #undef REPLACE_STRERROR_0 /* Define to 1 if setlocale (LC_ALL, NULL) is multithread-safe. */ #undef SETLOCALE_NULL_ALL_MTSAFE /* Define to 1 if setlocale (category, NULL) is multithread-safe. */ #undef SETLOCALE_NULL_ONE_MTSAFE /* Define to l, ll, u, ul, ull, etc., as suitable for constants of type 'sig_atomic_t'. */ #undef SIG_ATOMIC_T_SUFFIX /* Define to l, ll, u, ul, ull, etc., as suitable for constants of type 'size_t'. */ #undef SIZE_T_SUFFIX /* If using the C implementation of alloca, define if you know the direction of stack growth for your system; otherwise it will be automatically deduced at runtime. STACK_DIRECTION > 0 => grows toward higher addresses STACK_DIRECTION < 0 => grows toward lower addresses STACK_DIRECTION = 0 => direction of growth unknown */ #undef STACK_DIRECTION /* Define to 1 if the `S_IS*' macros in <sys/stat.h> do not work properly. */ #undef STAT_MACROS_BROKEN /* Define to 1 if all of the C90 standard headers exist (not just the ones required in a freestanding environment). This macro is provided for backward compatibility; new code need not use it. */ #undef STDC_HEADERS /* Define to 1 if strerror_r returns char *. */ #undef STRERROR_R_CHAR_P /* Define to 1 if time_t is signed. */ #undef TIME_T_IS_SIGNED /* Define to 1 if your <sys/time.h> declares `struct tm'. */ #undef TM_IN_SYS_TIME /* Define to 1 if the type of the st_atim member of a struct stat is struct timespec. */ #undef TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC /* Define if the combination of the ISO C and POSIX multithreading APIs can be used. */ #undef USE_ISOC_AND_POSIX_THREADS /* Define if the ISO C multithreading library can be used. */ #undef USE_ISOC_THREADS /* Define if the POSIX multithreading library can be used. */ #undef USE_POSIX_THREADS /* Define if references to the POSIX multithreading library are satisfied by libc. */ #undef USE_POSIX_THREADS_FROM_LIBC /* Define if references to the POSIX multithreading library should be made weak. */ #undef USE_POSIX_THREADS_WEAK /* Enable extensions on AIX 3, Interix. */ #ifndef _ALL_SOURCE # undef _ALL_SOURCE #endif /* Enable general extensions on macOS. */ #ifndef _DARWIN_C_SOURCE # undef _DARWIN_C_SOURCE #endif /* Enable general extensions on Solaris. */ #ifndef __EXTENSIONS__ # undef __EXTENSIONS__ #endif /* Enable GNU extensions on systems that have them. */ #ifndef _GNU_SOURCE # undef _GNU_SOURCE #endif /* Enable X/Open compliant socket functions that do not require linking with -lxnet on HP-UX 11.11. */ #ifndef _HPUX_ALT_XOPEN_SOCKET_API # undef _HPUX_ALT_XOPEN_SOCKET_API #endif /* Identify the host operating system as Minix. This macro does not affect the system headers' behavior. A future release of Autoconf may stop defining this macro. */ #ifndef _MINIX # undef _MINIX #endif /* Enable general extensions on NetBSD. Enable NetBSD compatibility extensions on Minix. */ #ifndef _NETBSD_SOURCE # undef _NETBSD_SOURCE #endif /* Enable OpenBSD compatibility extensions on NetBSD. Oddly enough, this does nothing on OpenBSD. */ #ifndef _OPENBSD_SOURCE # undef _OPENBSD_SOURCE #endif /* Define to 1 if needed for POSIX-compatible behavior. */ #ifndef _POSIX_SOURCE # undef _POSIX_SOURCE #endif /* Define to 2 if needed for POSIX-compatible behavior. */ #ifndef _POSIX_1_SOURCE # undef _POSIX_1_SOURCE #endif /* Enable POSIX-compatible threading on Solaris. */ #ifndef _POSIX_PTHREAD_SEMANTICS # undef _POSIX_PTHREAD_SEMANTICS #endif /* Enable extensions specified by ISO/IEC TS 18661-5:2014. */ #ifndef __STDC_WANT_IEC_60559_ATTRIBS_EXT__ # undef __STDC_WANT_IEC_60559_ATTRIBS_EXT__ #endif /* Enable extensions specified by ISO/IEC TS 18661-1:2014. */ #ifndef __STDC_WANT_IEC_60559_BFP_EXT__ # undef __STDC_WANT_IEC_60559_BFP_EXT__ #endif /* Enable extensions specified by ISO/IEC TS 18661-2:2015. */ #ifndef __STDC_WANT_IEC_60559_DFP_EXT__ # undef __STDC_WANT_IEC_60559_DFP_EXT__ #endif /* Enable extensions specified by C23 Annex F. */ #ifndef __STDC_WANT_IEC_60559_EXT__ # undef __STDC_WANT_IEC_60559_EXT__ #endif /* Enable extensions specified by ISO/IEC TS 18661-4:2015. */ #ifndef __STDC_WANT_IEC_60559_FUNCS_EXT__ # undef __STDC_WANT_IEC_60559_FUNCS_EXT__ #endif /* Enable extensions specified by C23 Annex H and ISO/IEC TS 18661-3:2015. */ #ifndef __STDC_WANT_IEC_60559_TYPES_EXT__ # undef __STDC_WANT_IEC_60559_TYPES_EXT__ #endif /* Enable extensions specified by ISO/IEC TR 24731-2:2010. */ #ifndef __STDC_WANT_LIB_EXT2__ # undef __STDC_WANT_LIB_EXT2__ #endif /* Enable extensions specified by ISO/IEC 24747:2009. */ #ifndef __STDC_WANT_MATH_SPEC_FUNCS__ # undef __STDC_WANT_MATH_SPEC_FUNCS__ #endif /* Enable extensions on HP NonStop. */ #ifndef _TANDEM_SOURCE # undef _TANDEM_SOURCE #endif /* Enable X/Open extensions. Define to 500 only if necessary to make mbstate_t available. */ #ifndef _XOPEN_SOURCE # undef _XOPEN_SOURCE #endif /* Define if the native Windows multithreading API can be used. */ #undef USE_WINDOWS_THREADS /* Version number of package */ #undef VERSION /* Define to 1 if unsetenv returns void instead of int. */ #undef VOID_UNSETENV /* Define to l, ll, u, ul, ull, etc., as suitable for constants of type 'wchar_t'. */ #undef WCHAR_T_SUFFIX /* Define if the wcrtomb function does not work in the C locale. */ #undef WCRTOMB_C_LOCALE_BUG /* Define if the wcrtomb function has an incorrect return value. */ #undef WCRTOMB_RETVAL_BUG /* Define to l, ll, u, ul, ull, etc., as suitable for constants of type 'wint_t'. */ #undef WINT_T_SUFFIX /* Define to 1 if `lex' declares `yytext' as a `char *' by default, not a `char[]'. */ #undef YYTEXT_POINTER /* Number of bits in a file offset, on hosts where this is settable. */ #undef _FILE_OFFSET_BITS /* True if the compiler says it groks GNU C version MAJOR.MINOR. */ #if defined __GNUC__ && defined __GNUC_MINOR__ # define _GL_GNUC_PREREQ(major, minor) \ ((major) < __GNUC__ + ((minor) <= __GNUC_MINOR__)) #else # define _GL_GNUC_PREREQ(major, minor) 0 #endif /* Define to enable the declarations of ISO C 11 types and functions. */ #undef _ISOC11_SOURCE /* Define to 1 on platforms where this makes off_t a 64-bit type. */ #undef _LARGE_FILES /* Define to 1 on Solaris. */ #undef _LCONV_C99 /* The _Noreturn keyword of C11. */ #ifndef _Noreturn # if (defined __cplusplus \ && ((201103 <= __cplusplus && !(__GNUC__ == 4 && __GNUC_MINOR__ == 7)) \ || (defined _MSC_VER && 1900 <= _MSC_VER)) \ && 0) /* [[noreturn]] is not practically usable, because with it the syntax extern _Noreturn void func (...); would not be valid; such a declaration would only be valid with 'extern' and '_Noreturn' swapped, or without the 'extern' keyword. However, some AIX system header files and several gnulib header files use precisely this syntax with 'extern'. */ # define _Noreturn [[noreturn]] # elif (defined __clang__ && __clang_major__ < 16 \ && defined _GL_WORK_AROUND_LLVM_BUG_59792) /* Compile with -D_GL_WORK_AROUND_LLVM_BUG_59792 to work around that rare LLVM bug, though you may get many false-alarm warnings. */ # define _Noreturn # elif ((!defined __cplusplus || defined __clang__) \ && (201112 <= (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) \ || (!defined __STRICT_ANSI__ \ && (_GL_GNUC_PREREQ (4, 7) \ || (defined __apple_build_version__ \ ? 6000000 <= __apple_build_version__ \ : 3 < __clang_major__ + (5 <= __clang_minor__)))))) /* _Noreturn works as-is. */ # elif _GL_GNUC_PREREQ (2, 8) || defined __clang__ || 0x5110 <= __SUNPRO_C # define _Noreturn __attribute__ ((__noreturn__)) # elif 1200 <= (defined _MSC_VER ? _MSC_VER : 0) # define _Noreturn __declspec (noreturn) # else # define _Noreturn # endif #endif /* Define if you want <regex.h> to include <limits.h>, so that it consistently overrides <limits.h>'s RE_DUP_MAX. */ #undef _REGEX_INCLUDE_LIMITS_H /* Define if you want regoff_t to be at least as wide POSIX requires. */ #undef _REGEX_LARGE_OFFSETS /* Number of bits in time_t, on hosts where this is settable. */ #undef _TIME_BITS /* For standard stat data types on VMS. */ #undef _USE_STD_STAT /* Define to rpl_ if the getopt replacement functions and variables should be used. */ #undef __GETOPT_PREFIX /* Define to 1 on platforms where this makes time_t a 64-bit type. */ #undef __MINGW_USE_VC2005_COMPAT /* Define to 1 if the system <stdint.h> predates C++11. */ #undef __STDC_CONSTANT_MACROS /* Define to 1 if the system <stdint.h> predates C++11. */ #undef __STDC_LIMIT_MACROS /* Define to 1 if C does not support variable-length arrays, and if the compiler does not already define this. */ #undef __STDC_NO_VLA__ /* The _GL_ASYNC_SAFE marker should be attached to functions that are signal handlers (for signals other than SIGABRT, SIGPIPE) or can be invoked from such signal handlers. Such functions have some restrictions: * All functions that it calls should be marked _GL_ASYNC_SAFE as well, or should be listed as async-signal-safe in POSIX <https://pubs.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html#tag_15_04> section 2.4.3. Note that malloc(), sprintf(), and fwrite(), in particular, are NOT async-signal-safe. * All memory locations (variables and struct fields) that these functions access must be marked 'volatile'. This holds for both read and write accesses. Otherwise the compiler might optimize away stores to and reads from such locations that occur in the program, depending on its data flow analysis. For example, when the program contains a loop that is intended to inspect a variable set from within a signal handler while (!signal_occurred) ; the compiler is allowed to transform this into an endless loop if the variable 'signal_occurred' is not declared 'volatile'. Additionally, recall that: * A signal handler should not modify errno (except if it is a handler for a fatal signal and ends by raising the same signal again, thus provoking the termination of the process). If it invokes a function that may clobber errno, it needs to save and restore the value of errno. */ #define _GL_ASYNC_SAFE /* Attributes. */ #if (defined __has_attribute \ && (!defined __clang_minor__ \ || (defined __apple_build_version__ \ ? 6000000 <= __apple_build_version__ \ : 5 <= __clang_major__))) # define _GL_HAS_ATTRIBUTE(attr) __has_attribute (__##attr##__) #else # define _GL_HAS_ATTRIBUTE(attr) _GL_ATTR_##attr # define _GL_ATTR_alloc_size _GL_GNUC_PREREQ (4, 3) # define _GL_ATTR_always_inline _GL_GNUC_PREREQ (3, 2) # define _GL_ATTR_artificial _GL_GNUC_PREREQ (4, 3) # define _GL_ATTR_cold _GL_GNUC_PREREQ (4, 3) # define _GL_ATTR_const _GL_GNUC_PREREQ (2, 95) # define _GL_ATTR_deprecated _GL_GNUC_PREREQ (3, 1) # define _GL_ATTR_diagnose_if 0 # define _GL_ATTR_error _GL_GNUC_PREREQ (4, 3) # define _GL_ATTR_externally_visible _GL_GNUC_PREREQ (4, 1) # define _GL_ATTR_fallthrough _GL_GNUC_PREREQ (7, 0) # define _GL_ATTR_format _GL_GNUC_PREREQ (2, 7) # define _GL_ATTR_leaf _GL_GNUC_PREREQ (4, 6) # define _GL_ATTR_malloc _GL_GNUC_PREREQ (3, 0) # ifdef _ICC # define _GL_ATTR_may_alias 0 # else # define _GL_ATTR_may_alias _GL_GNUC_PREREQ (3, 3) # endif # define _GL_ATTR_noinline _GL_GNUC_PREREQ (3, 1) # define _GL_ATTR_nonnull _GL_GNUC_PREREQ (3, 3) # define _GL_ATTR_nonstring _GL_GNUC_PREREQ (8, 0) # define _GL_ATTR_nothrow _GL_GNUC_PREREQ (3, 3) # define _GL_ATTR_packed _GL_GNUC_PREREQ (2, 7) # define _GL_ATTR_pure _GL_GNUC_PREREQ (2, 96) # define _GL_ATTR_returns_nonnull _GL_GNUC_PREREQ (4, 9) # define _GL_ATTR_sentinel _GL_GNUC_PREREQ (4, 0) # define _GL_ATTR_unused _GL_GNUC_PREREQ (2, 7) # define _GL_ATTR_warn_unused_result _GL_GNUC_PREREQ (3, 4) #endif /* Disable GCC -Wpedantic if using __has_c_attribute and this is not C23+. */ #if (defined __has_c_attribute && _GL_GNUC_PREREQ (4, 6) \ && (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) <= 201710) # pragma GCC diagnostic ignored "-Wpedantic" #endif /* Define if, in a function declaration, the attributes in bracket syntax [[...]] must come before the attributes in __attribute__((...)) syntax. If this is defined, it is best to avoid the bracket syntax, so that the various _GL_ATTRIBUTE_* can be cumulated on the same declaration in any order. */ #ifdef __cplusplus # if defined __clang__ # define _GL_BRACKET_BEFORE_ATTRIBUTE 1 # endif #else # if defined __GNUC__ && !defined __clang__ # define _GL_BRACKET_BEFORE_ATTRIBUTE 1 # endif #endif /* _GL_ATTRIBUTE_ALLOC_SIZE ((N)) declares that the Nth argument of the function is the size of the returned memory block. _GL_ATTRIBUTE_ALLOC_SIZE ((M, N)) declares that the Mth argument multiplied by the Nth argument of the function is the size of the returned memory block. */ /* Applies to: function, pointer to function, function types. */ #ifndef _GL_ATTRIBUTE_ALLOC_SIZE # if _GL_HAS_ATTRIBUTE (alloc_size) # define _GL_ATTRIBUTE_ALLOC_SIZE(args) __attribute__ ((__alloc_size__ args)) # else # define _GL_ATTRIBUTE_ALLOC_SIZE(args) # endif #endif /* _GL_ATTRIBUTE_ALWAYS_INLINE tells that the compiler should always inline the function and report an error if it cannot do so. */ /* Applies to: function. */ #ifndef _GL_ATTRIBUTE_ALWAYS_INLINE # if _GL_HAS_ATTRIBUTE (always_inline) # define _GL_ATTRIBUTE_ALWAYS_INLINE __attribute__ ((__always_inline__)) # else # define _GL_ATTRIBUTE_ALWAYS_INLINE # endif #endif /* _GL_ATTRIBUTE_ARTIFICIAL declares that the function is not important to show in stack traces when debugging. The compiler should omit the function from stack traces. */ /* Applies to: function. */ #ifndef _GL_ATTRIBUTE_ARTIFICIAL # if _GL_HAS_ATTRIBUTE (artificial) # define _GL_ATTRIBUTE_ARTIFICIAL __attribute__ ((__artificial__)) # else # define _GL_ATTRIBUTE_ARTIFICIAL # endif #endif /* _GL_ATTRIBUTE_COLD declares that the function is rarely executed. */ /* Applies to: functions. */ /* Avoid __attribute__ ((cold)) on MinGW; see thread starting at <https://lists.gnu.org/r/emacs-devel/2019-04/msg01152.html>. Also, Oracle Studio 12.6 requires 'cold' not '__cold__'. */ #ifndef _GL_ATTRIBUTE_COLD # if _GL_HAS_ATTRIBUTE (cold) && !defined __MINGW32__ # ifndef __SUNPRO_C # define _GL_ATTRIBUTE_COLD __attribute__ ((__cold__)) # else # define _GL_ATTRIBUTE_COLD __attribute__ ((cold)) # endif # else # define _GL_ATTRIBUTE_COLD # endif #endif /* _GL_ATTRIBUTE_CONST declares that it is OK for a compiler to omit duplicate calls to the function with the same arguments. This attribute is safe for a function that neither depends on nor affects observable state, and always returns exactly once - e.g., does not loop forever, and does not call longjmp. (This attribute is stricter than _GL_ATTRIBUTE_PURE.) */ /* Applies to: functions. */ #ifndef _GL_ATTRIBUTE_CONST # if _GL_HAS_ATTRIBUTE (const) # define _GL_ATTRIBUTE_CONST __attribute__ ((__const__)) # else # define _GL_ATTRIBUTE_CONST # endif #endif /* _GL_ATTRIBUTE_DEALLOC (F, I) declares that the function returns pointers that can be freed by passing them as the Ith argument to the function F. _GL_ATTRIBUTE_DEALLOC_FREE declares that the function returns pointers that can be freed via 'free'; it can be used only after declaring 'free'. */ /* Applies to: functions. Cannot be used on inline functions. */ #ifndef _GL_ATTRIBUTE_DEALLOC # if _GL_GNUC_PREREQ (11, 0) # define _GL_ATTRIBUTE_DEALLOC(f, i) __attribute__ ((__malloc__ (f, i))) # else # define _GL_ATTRIBUTE_DEALLOC(f, i) # endif #endif /* If gnulib's <string.h> or <wchar.h> has already defined this macro, continue to use this earlier definition, since <stdlib.h> may not have been included yet. */ #ifndef _GL_ATTRIBUTE_DEALLOC_FREE # if defined __cplusplus && defined __GNUC__ && !defined __clang__ /* Work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108231> */ # define _GL_ATTRIBUTE_DEALLOC_FREE \ _GL_ATTRIBUTE_DEALLOC ((void (*) (void *)) free, 1) # else # define _GL_ATTRIBUTE_DEALLOC_FREE \ _GL_ATTRIBUTE_DEALLOC (free, 1) # endif #endif /* _GL_ATTRIBUTE_DEPRECATED: Declares that an entity is deprecated. The compiler may warn if the entity is used. */ /* Applies to: - function, variable, - struct, union, struct/union member, - enumeration, enumeration item, - typedef, in C++ also: namespace, class, template specialization. */ #ifndef _GL_ATTRIBUTE_DEPRECATED # ifndef _GL_BRACKET_BEFORE_ATTRIBUTE # ifdef __has_c_attribute # if __has_c_attribute (__deprecated__) # define _GL_ATTRIBUTE_DEPRECATED [[__deprecated__]] # endif # endif # endif # if !defined _GL_ATTRIBUTE_DEPRECATED && _GL_HAS_ATTRIBUTE (deprecated) # define _GL_ATTRIBUTE_DEPRECATED __attribute__ ((__deprecated__)) # endif # ifndef _GL_ATTRIBUTE_DEPRECATED # define _GL_ATTRIBUTE_DEPRECATED # endif #endif /* _GL_ATTRIBUTE_ERROR(msg) requests an error if a function is called and the function call is not optimized away. _GL_ATTRIBUTE_WARNING(msg) requests a warning if a function is called and the function call is not optimized away. */ /* Applies to: functions. */ #if !(defined _GL_ATTRIBUTE_ERROR && defined _GL_ATTRIBUTE_WARNING) # if _GL_HAS_ATTRIBUTE (error) # define _GL_ATTRIBUTE_ERROR(msg) __attribute__ ((__error__ (msg))) # define _GL_ATTRIBUTE_WARNING(msg) __attribute__ ((__warning__ (msg))) # elif _GL_HAS_ATTRIBUTE (diagnose_if) # define _GL_ATTRIBUTE_ERROR(msg) __attribute__ ((__diagnose_if__ (1, msg, "error"))) # define _GL_ATTRIBUTE_WARNING(msg) __attribute__ ((__diagnose_if__ (1, msg, "warning"))) # else # define _GL_ATTRIBUTE_ERROR(msg) # define _GL_ATTRIBUTE_WARNING(msg) # endif #endif /* _GL_ATTRIBUTE_EXTERNALLY_VISIBLE declares that the entity should remain visible to debuggers etc., even with '-fwhole-program'. */ /* Applies to: functions, variables. */ #ifndef _GL_ATTRIBUTE_EXTERNALLY_VISIBLE # if _GL_HAS_ATTRIBUTE (externally_visible) # define _GL_ATTRIBUTE_EXTERNALLY_VISIBLE __attribute__ ((externally_visible)) # else # define _GL_ATTRIBUTE_EXTERNALLY_VISIBLE # endif #endif /* _GL_ATTRIBUTE_FALLTHROUGH declares that it is not a programming mistake if the control flow falls through to the immediately following 'case' or 'default' label. The compiler should not warn in this case. */ /* Applies to: Empty statement (;), inside a 'switch' statement. */ /* Always expands to something. */ #ifndef _GL_ATTRIBUTE_FALLTHROUGH # ifdef __has_c_attribute # if __has_c_attribute (__fallthrough__) # define _GL_ATTRIBUTE_FALLTHROUGH [[__fallthrough__]] # endif # endif # if !defined _GL_ATTRIBUTE_FALLTHROUGH && _GL_HAS_ATTRIBUTE (fallthrough) # define _GL_ATTRIBUTE_FALLTHROUGH __attribute__ ((__fallthrough__)) # endif # ifndef _GL_ATTRIBUTE_FALLTHROUGH # define _GL_ATTRIBUTE_FALLTHROUGH ((void) 0) # endif #endif /* _GL_ATTRIBUTE_FORMAT ((ARCHETYPE, STRING-INDEX, FIRST-TO-CHECK)) declares that the STRING-INDEXth function argument is a format string of style ARCHETYPE, which is one of: printf, gnu_printf scanf, gnu_scanf, strftime, gnu_strftime, strfmon, or the same thing prefixed and suffixed with '__'. If FIRST-TO-CHECK is not 0, arguments starting at FIRST-TO_CHECK are suitable for the format string. */ /* Applies to: functions. */ #ifndef _GL_ATTRIBUTE_FORMAT # if _GL_HAS_ATTRIBUTE (format) # define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec)) # else # define _GL_ATTRIBUTE_FORMAT(spec) # endif #endif /* _GL_ATTRIBUTE_LEAF declares that if the function is called from some other compilation unit, it executes code from that unit only by return or by exception handling. This declaration lets the compiler optimize that unit more aggressively. */ /* Applies to: functions. */ #ifndef _GL_ATTRIBUTE_LEAF # if _GL_HAS_ATTRIBUTE (leaf) # define _GL_ATTRIBUTE_LEAF __attribute__ ((__leaf__)) # else # define _GL_ATTRIBUTE_LEAF # endif #endif /* _GL_ATTRIBUTE_MALLOC declares that the function returns a pointer to freshly allocated memory. */ /* Applies to: functions. */ #ifndef _GL_ATTRIBUTE_MALLOC # if _GL_HAS_ATTRIBUTE (malloc) # define _GL_ATTRIBUTE_MALLOC __attribute__ ((__malloc__)) # else # define _GL_ATTRIBUTE_MALLOC # endif #endif /* _GL_ATTRIBUTE_MAY_ALIAS declares that pointers to the type may point to the same storage as pointers to other types. Thus this declaration disables strict aliasing optimization. */ /* Applies to: types. */ /* Oracle Studio 12.6 mishandles may_alias despite __has_attribute OK. */ #ifndef _GL_ATTRIBUTE_MAY_ALIAS # if _GL_HAS_ATTRIBUTE (may_alias) && !defined __SUNPRO_C # define _GL_ATTRIBUTE_MAY_ALIAS __attribute__ ((__may_alias__)) # else # define _GL_ATTRIBUTE_MAY_ALIAS # endif #endif /* _GL_ATTRIBUTE_MAYBE_UNUSED declares that it is not a programming mistake if the entity is not used. The compiler should not warn if the entity is not used. */ /* Applies to: - function, variable, - struct, union, struct/union member, - enumeration, enumeration item, - typedef, in C++ also: class. */ /* In C++ and C23, this is spelled [[__maybe_unused__]]. GCC's syntax is __attribute__ ((__unused__)). clang supports both syntaxes. Except that with clang ≥ 6, < 10, in C++ mode, __has_c_attribute (__maybe_unused__) yields true but the use of [[__maybe_unused__]] nevertheless produces a warning. */ #ifndef _GL_ATTRIBUTE_MAYBE_UNUSED # ifndef _GL_BRACKET_BEFORE_ATTRIBUTE # if defined __clang__ && defined __cplusplus # if !defined __apple_build_version__ && __clang_major__ >= 10 # define _GL_ATTRIBUTE_MAYBE_UNUSED [[__maybe_unused__]] # endif # elif defined __has_c_attribute # if __has_c_attribute (__maybe_unused__) # define _GL_ATTRIBUTE_MAYBE_UNUSED [[__maybe_unused__]] # endif # endif # endif # ifndef _GL_ATTRIBUTE_MAYBE_UNUSED # define _GL_ATTRIBUTE_MAYBE_UNUSED _GL_ATTRIBUTE_UNUSED # endif #endif /* Alternative spelling of this macro, for convenience and for compatibility with glibc/include/libc-symbols.h. */ #define _GL_UNUSED _GL_ATTRIBUTE_MAYBE_UNUSED /* Earlier spellings of this macro. */ #define _UNUSED_PARAMETER_ _GL_ATTRIBUTE_MAYBE_UNUSED /* _GL_ATTRIBUTE_NODISCARD declares that the caller of the function should not discard the return value. The compiler may warn if the caller does not use the return value, unless the caller uses something like ignore_value. */ /* Applies to: function, enumeration, class. */ #ifndef _GL_ATTRIBUTE_NODISCARD # ifndef _GL_BRACKET_BEFORE_ATTRIBUTE # if defined __clang__ && defined __cplusplus /* With clang up to 15.0.6 (at least), in C++ mode, [[__nodiscard__]] produces a warning. The 1000 below means a yet unknown threshold. When clang++ version X starts supporting [[__nodiscard__]] without warning about it, you can replace the 1000 with X. */ # if __clang_major__ >= 1000 # define _GL_ATTRIBUTE_NODISCARD [[__nodiscard__]] # endif # elif defined __has_c_attribute # if __has_c_attribute (__nodiscard__) # define _GL_ATTRIBUTE_NODISCARD [[__nodiscard__]] # endif # endif # endif # if !defined _GL_ATTRIBUTE_NODISCARD && _GL_HAS_ATTRIBUTE (warn_unused_result) # define _GL_ATTRIBUTE_NODISCARD __attribute__ ((__warn_unused_result__)) # endif # ifndef _GL_ATTRIBUTE_NODISCARD # define _GL_ATTRIBUTE_NODISCARD # endif #endif /* _GL_ATTRIBUTE_NOINLINE tells that the compiler should not inline the function. */ /* Applies to: functions. */ #ifndef _GL_ATTRIBUTE_NOINLINE # if _GL_HAS_ATTRIBUTE (noinline) # define _GL_ATTRIBUTE_NOINLINE __attribute__ ((__noinline__)) # else # define _GL_ATTRIBUTE_NOINLINE # endif #endif /* _GL_ATTRIBUTE_NONNULL ((N1, N2,...)) declares that the arguments N1, N2,... must not be NULL. _GL_ATTRIBUTE_NONNULL () declares that all pointer arguments must not be null. */ /* Applies to: functions. */ #ifndef _GL_ATTRIBUTE_NONNULL # if _GL_HAS_ATTRIBUTE (nonnull) # define _GL_ATTRIBUTE_NONNULL(args) __attribute__ ((__nonnull__ args)) # else # define _GL_ATTRIBUTE_NONNULL(args) # endif #endif /* _GL_ATTRIBUTE_NONSTRING declares that the contents of a character array is not meant to be NUL-terminated. */ /* Applies to: struct/union members and variables that are arrays of element type '[[un]signed] char'. */ #ifndef _GL_ATTRIBUTE_NONSTRING # if _GL_HAS_ATTRIBUTE (nonstring) # define _GL_ATTRIBUTE_NONSTRING __attribute__ ((__nonstring__)) # else # define _GL_ATTRIBUTE_NONSTRING # endif #endif /* There is no _GL_ATTRIBUTE_NORETURN; use _Noreturn instead. */ /* _GL_ATTRIBUTE_NOTHROW declares that the function does not throw exceptions. */ /* Applies to: functions. */ #ifndef _GL_ATTRIBUTE_NOTHROW # if _GL_HAS_ATTRIBUTE (nothrow) && !defined __cplusplus # define _GL_ATTRIBUTE_NOTHROW __attribute__ ((__nothrow__)) # else # define _GL_ATTRIBUTE_NOTHROW # endif #endif /* _GL_ATTRIBUTE_PACKED declares: For struct members: The member has the smallest possible alignment. For struct, union, class: All members have the smallest possible alignment, minimizing the memory required. */ /* Applies to: struct members, struct, union, in C++ also: class. */ #ifndef _GL_ATTRIBUTE_PACKED # if _GL_HAS_ATTRIBUTE (packed) # define _GL_ATTRIBUTE_PACKED __attribute__ ((__packed__)) # else # define _GL_ATTRIBUTE_PACKED # endif #endif /* _GL_ATTRIBUTE_PURE declares that It is OK for a compiler to omit duplicate calls to the function with the same arguments if observable state is not changed between calls. This attribute is safe for a function that does not affect observable state, and always returns exactly once. (This attribute is looser than _GL_ATTRIBUTE_CONST.) */ /* Applies to: functions. */ #ifndef _GL_ATTRIBUTE_PURE # if _GL_HAS_ATTRIBUTE (pure) # define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) # else # define _GL_ATTRIBUTE_PURE # endif #endif /* _GL_ATTRIBUTE_RETURNS_NONNULL declares that the function's return value is a non-NULL pointer. */ /* Applies to: functions. */ #ifndef _GL_ATTRIBUTE_RETURNS_NONNULL # if _GL_HAS_ATTRIBUTE (returns_nonnull) # define _GL_ATTRIBUTE_RETURNS_NONNULL __attribute__ ((__returns_nonnull__)) # else # define _GL_ATTRIBUTE_RETURNS_NONNULL # endif #endif /* _GL_ATTRIBUTE_SENTINEL(pos) declares that the variadic function expects a trailing NULL argument. _GL_ATTRIBUTE_SENTINEL () - The last argument is NULL (requires C99). _GL_ATTRIBUTE_SENTINEL ((N)) - The (N+1)st argument from the end is NULL. */ /* Applies to: functions. */ #ifndef _GL_ATTRIBUTE_SENTINEL # if _GL_HAS_ATTRIBUTE (sentinel) # define _GL_ATTRIBUTE_SENTINEL(pos) __attribute__ ((__sentinel__ pos)) # else # define _GL_ATTRIBUTE_SENTINEL(pos) # endif #endif /* A helper macro. Don't use it directly. */ #ifndef _GL_ATTRIBUTE_UNUSED # if _GL_HAS_ATTRIBUTE (unused) # define _GL_ATTRIBUTE_UNUSED __attribute__ ((__unused__)) # else # define _GL_ATTRIBUTE_UNUSED # endif #endif /* _GL_UNUSED_LABEL; declares that it is not a programming mistake if the immediately preceding label is not used. The compiler should not warn if the label is not used. */ /* Applies to: label (both in C and C++). */ /* Note that g++ < 4.5 does not support the '__attribute__ ((__unused__)) ;' syntax. But clang does. */ #ifndef _GL_UNUSED_LABEL # if !(defined __cplusplus && !_GL_GNUC_PREREQ (4, 5)) || defined __clang__ # define _GL_UNUSED_LABEL _GL_ATTRIBUTE_UNUSED # else # define _GL_UNUSED_LABEL # endif #endif /* In C++, there is the concept of "language linkage", that encompasses name mangling and function calling conventions. The following macros start and end a block of "C" linkage. */ #ifdef __cplusplus # define _GL_BEGIN_C_LINKAGE extern "C" { # define _GL_END_C_LINKAGE } #else # define _GL_BEGIN_C_LINKAGE # define _GL_END_C_LINKAGE #endif /* Define to empty if `const' does not conform to ANSI C. */ #undef const /* Define to `int' if <sys/types.h> doesn't define. */ #undef gid_t /* Define to `__inline__' or `__inline' if that's what the C compiler calls it, or to nothing if 'inline' is not supported under any name. */ #ifndef __cplusplus #undef inline #endif /* Work around a bug in Apple GCC 4.0.1 build 5465: In C99 mode, it supports the ISO C 99 semantics of 'extern inline' (unlike the GNU C semantics of earlier versions), but does not display it by setting __GNUC_STDC_INLINE__. __APPLE__ && __MACH__ test for Mac OS X. __APPLE_CC__ tests for the Apple compiler and its version. __STDC_VERSION__ tests for the C99 mode. */ #if defined __APPLE__ && defined __MACH__ && __APPLE_CC__ >= 5465 && !defined __cplusplus && __STDC_VERSION__ >= 199901L && !defined __GNUC_STDC_INLINE__ # define __GNUC_STDC_INLINE__ 1 #endif /* Define to rpl_malloc if the replacement function should be used. */ #undef malloc /* Define to a type if <wchar.h> does not define. */ #undef mbstate_t /* _GL_CMP (n1, n2) performs a three-valued comparison on n1 vs. n2, where n1 and n2 are expressions without side effects, that evaluate to real numbers (excluding NaN). It returns 1 if n1 > n2 0 if n1 == n2 -1 if n1 < n2 The naïve code (n1 > n2 ? 1 : n1 < n2 ? -1 : 0) produces a conditional jump with nearly all GCC versions up to GCC 10. This variant (n1 < n2 ? -1 : n1 > n2) produces a conditional with many GCC versions up to GCC 9. The better code (n1 > n2) - (n1 < n2) from Hacker's Delight § 2-9 avoids conditional jumps in all GCC versions >= 3.4. */ #define _GL_CMP(n1, n2) (((n1) > (n2)) - ((n1) < (n2))) /* Define to the real name of the mktime_internal function. */ #undef mktime_internal /* Define to `int' if <sys/types.h> does not define. */ #undef mode_t /* Define to the name of the strftime replacement function. */ #undef my_strftime /* Define to the type of st_nlink in struct stat, or a supertype. */ #undef nlink_t /* Define to `long int' if <sys/types.h> does not define. */ #undef off_t /* Define as a signed integer type capable of holding a process identifier. */ #undef pid_t /* Define to rpl_re_comp if the replacement should be used. */ #undef re_comp /* Define to rpl_re_compile_fastmap if the replacement should be used. */ #undef re_compile_fastmap /* Define to rpl_re_compile_pattern if the replacement should be used. */ #undef re_compile_pattern /* Define to rpl_re_exec if the replacement should be used. */ #undef re_exec /* Define to rpl_re_match if the replacement should be used. */ #undef re_match /* Define to rpl_re_match_2 if the replacement should be used. */ #undef re_match_2 /* Define to rpl_re_search if the replacement should be used. */ #undef re_search /* Define to rpl_re_search_2 if the replacement should be used. */ #undef re_search_2 /* Define to rpl_re_set_registers if the replacement should be used. */ #undef re_set_registers /* Define to rpl_re_set_syntax if the replacement should be used. */ #undef re_set_syntax /* Define to rpl_re_syntax_options if the replacement should be used. */ #undef re_syntax_options /* Define to rpl_realloc if the replacement function should be used. */ #undef realloc /* Define to rpl_regcomp if the replacement should be used. */ #undef regcomp /* Define to rpl_regerror if the replacement should be used. */ #undef regerror /* Define to rpl_regexec if the replacement should be used. */ #undef regexec /* Define to rpl_regfree if the replacement should be used. */ #undef regfree /* Define to the equivalent of the C99 'restrict' keyword, or to nothing if this is not supported. Do not define if restrict is supported only directly. */ #undef restrict /* Work around a bug in older versions of Sun C++, which did not #define __restrict__ or support _Restrict or __restrict__ even though the corresponding Sun C compiler ended up with "#define restrict _Restrict" or "#define restrict __restrict__" in the previous line. This workaround can be removed once we assume Oracle Developer Studio 12.5 (2016) or later. */ #if defined __SUNPRO_CC && !defined __RESTRICT && !defined __restrict__ # define _Restrict # define __restrict__ #endif /* Define to `unsigned int' if <sys/types.h> does not define. */ #undef size_t /* Define to int if <sys/types.h> does not */ #undef socklen_t /* Define as a signed type of the same size as size_t. */ #undef ssize_t /* Define to `int' if <sys/types.h> doesn't define. */ #undef uid_t #ifndef HAVE_C_BOOL # if !defined __cplusplus && !defined __bool_true_false_are_defined # if HAVE_STDBOOL_H # include <stdbool.h> # else # if defined __SUNPRO_C # error "<stdbool.h> is not usable with this configuration. To make it usable, add -D_STDC_C99= to $CC." # else # error "<stdbool.h> does not exist on this platform. Use gnulib module 'stdbool-c99' instead of gnulib module 'stdbool'." # endif # endif # endif # if !true # define true (!false) # endif #endif #if (!defined HAVE_C_STATIC_ASSERT && !defined assert \ && (!defined __cplusplus \ || (__cpp_static_assert < 201411 \ && __GNUG__ < 6 && __clang_major__ < 6))) #include <assert.h> #undef/**/assert #ifdef __sgi #undef/**/__ASSERT_H__ #endif /* Solaris 11.4 <assert.h> defines static_assert as a macro with 2 arguments. We need it also to be invocable with a single argument. */ #if defined __sun && (__STDC_VERSION__ - 0 >= 201112L) && !defined __cplusplus #undef/**/static_assert #define static_assert _Static_assert #endif #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/Makefile.in��������������������������������������������������������������������������������0000644�0001750�0001750�00000204362�14655401217�014407� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # This file is part of GNU Rush. # Copyright (C) 2008-2024 Sergey Poznyakoff # # GNU Rush is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Rush is distributed in the hope that 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/>. 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)/doc/imprimatur/imprimatur.m4 \ $(top_srcdir)/m4/00gnulib.m4 $(top_srcdir)/m4/__inline.m4 \ $(top_srcdir)/m4/absolute-header.m4 $(top_srcdir)/m4/alloca.m4 \ $(top_srcdir)/m4/assert_h.m4 $(top_srcdir)/m4/btowc.m4 \ $(top_srcdir)/m4/builtin-expect.m4 $(top_srcdir)/m4/c-bool.m4 \ $(top_srcdir)/m4/calloc.m4 $(top_srcdir)/m4/close.m4 \ $(top_srcdir)/m4/codeset.m4 \ $(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup2.m4 \ $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \ $(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \ $(top_srcdir)/m4/error_h.m4 $(top_srcdir)/m4/extensions.m4 \ $(top_srcdir)/m4/extern-inline.m4 $(top_srcdir)/m4/fcntl-o.m4 \ $(top_srcdir)/m4/fcntl.m4 $(top_srcdir)/m4/fcntl_h.m4 \ $(top_srcdir)/m4/flexmember.m4 $(top_srcdir)/m4/free.m4 \ $(top_srcdir)/m4/fstat.m4 $(top_srcdir)/m4/getdelim.m4 \ $(top_srcdir)/m4/getdtablesize.m4 $(top_srcdir)/m4/getline.m4 \ $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/getprogname.m4 \ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gnulib-common.m4 \ $(top_srcdir)/m4/gnulib-comp.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/include_next.m4 \ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/inttostr.m4 \ $(top_srcdir)/m4/inttypes.m4 $(top_srcdir)/m4/langinfo_h.m4 \ $(top_srcdir)/m4/largefile.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/limits-h.m4 $(top_srcdir)/m4/localcharset.m4 \ $(top_srcdir)/m4/locale-fr.m4 $(top_srcdir)/m4/locale-ja.m4 \ $(top_srcdir)/m4/locale-zh.m4 $(top_srcdir)/m4/locale_h.m4 \ $(top_srcdir)/m4/localeconv.m4 $(top_srcdir)/m4/lock.m4 \ $(top_srcdir)/m4/malloc.m4 $(top_srcdir)/m4/malloca.m4 \ $(top_srcdir)/m4/mbrtowc.m4 $(top_srcdir)/m4/mbsinit.m4 \ $(top_srcdir)/m4/mbstate_t.m4 $(top_srcdir)/m4/mbtowc.m4 \ $(top_srcdir)/m4/minmax.m4 $(top_srcdir)/m4/mktime.m4 \ $(top_srcdir)/m4/mode_t.m4 $(top_srcdir)/m4/msvc-inval.m4 \ $(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \ $(top_srcdir)/m4/musl.m4 $(top_srcdir)/m4/nl_langinfo.m4 \ $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/nocrash.m4 \ $(top_srcdir)/m4/nstrftime.m4 $(top_srcdir)/m4/off_t.m4 \ $(top_srcdir)/m4/open-cloexec.m4 \ $(top_srcdir)/m4/open-slash.m4 $(top_srcdir)/m4/open.m4 \ $(top_srcdir)/m4/pathmax.m4 $(top_srcdir)/m4/po.m4 \ $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/m4/pthread_rwlock_rdlock.m4 \ $(top_srcdir)/m4/realloc.m4 $(top_srcdir)/m4/reallocarray.m4 \ $(top_srcdir)/m4/regex.m4 $(top_srcdir)/m4/setenv.m4 \ $(top_srcdir)/m4/setlocale_null.m4 $(top_srcdir)/m4/ssize_t.m4 \ $(top_srcdir)/m4/stat-time.m4 $(top_srcdir)/m4/stat.m4 \ $(top_srcdir)/m4/stddef_h.m4 $(top_srcdir)/m4/stdint.m4 \ $(top_srcdir)/m4/stdio_h.m4 $(top_srcdir)/m4/stdlib_h.m4 \ $(top_srcdir)/m4/strerror.m4 $(top_srcdir)/m4/string_h.m4 \ $(top_srcdir)/m4/sys_socket_h.m4 \ $(top_srcdir)/m4/sys_stat_h.m4 $(top_srcdir)/m4/sys_types_h.m4 \ $(top_srcdir)/m4/threadlib.m4 $(top_srcdir)/m4/time_h.m4 \ $(top_srcdir)/m4/time_r.m4 $(top_srcdir)/m4/time_rz.m4 \ $(top_srcdir)/m4/timegm.m4 $(top_srcdir)/m4/tm_gmtoff.m4 \ $(top_srcdir)/m4/tzset.m4 $(top_srcdir)/m4/unistd_h.m4 \ $(top_srcdir)/m4/visibility.m4 $(top_srcdir)/m4/warn-on-use.m4 \ $(top_srcdir)/m4/wchar_h.m4 $(top_srcdir)/m4/wchar_t.m4 \ $(top_srcdir)/m4/wcrtomb.m4 $(top_srcdir)/m4/wctype_h.m4 \ $(top_srcdir)/m4/wint_t.m4 $(top_srcdir)/m4/xalloc.m4 \ $(top_srcdir)/m4/zzgnulib.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 distdir-am 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)` 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/ar-lib \ 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 $(distdir).tar.bz2 $(distdir).tar.xz GZIP_ENV = --best DIST_TARGETS = dist-xz dist-bzip2 dist-gzip # Exists only to be overridden by the user if desired. AM_DISTCHECK_DVI_TARGET = dvi am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALLOCA_H = @ALLOCA_H@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ ASSERT_H = @ASSERT_H@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOM4TE = @AUTOM4TE@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ GETOPT_H = @GETOPT_H@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GL_CFLAG_ALLOW_WARNINGS = @GL_CFLAG_ALLOW_WARNINGS@ GL_CFLAG_GNULIB_WARNINGS = @GL_CFLAG_GNULIB_WARNINGS@ GL_GNULIB_ACCESS = @GL_GNULIB_ACCESS@ GL_GNULIB_ALIGNED_ALLOC = @GL_GNULIB_ALIGNED_ALLOC@ GL_GNULIB_ATOLL = @GL_GNULIB_ATOLL@ GL_GNULIB_BTOWC = @GL_GNULIB_BTOWC@ GL_GNULIB_CALLOC_GNU = @GL_GNULIB_CALLOC_GNU@ GL_GNULIB_CALLOC_POSIX = @GL_GNULIB_CALLOC_POSIX@ GL_GNULIB_CANONICALIZE_FILE_NAME = @GL_GNULIB_CANONICALIZE_FILE_NAME@ GL_GNULIB_CHDIR = @GL_GNULIB_CHDIR@ GL_GNULIB_CHMOD = @GL_GNULIB_CHMOD@ GL_GNULIB_CHOWN = @GL_GNULIB_CHOWN@ GL_GNULIB_CLOSE = @GL_GNULIB_CLOSE@ GL_GNULIB_COPY_FILE_RANGE = @GL_GNULIB_COPY_FILE_RANGE@ GL_GNULIB_CREAT = @GL_GNULIB_CREAT@ GL_GNULIB_CTIME = @GL_GNULIB_CTIME@ GL_GNULIB_DPRINTF = @GL_GNULIB_DPRINTF@ GL_GNULIB_DUP = @GL_GNULIB_DUP@ GL_GNULIB_DUP2 = @GL_GNULIB_DUP2@ GL_GNULIB_DUP3 = @GL_GNULIB_DUP3@ GL_GNULIB_DUPLOCALE = @GL_GNULIB_DUPLOCALE@ GL_GNULIB_ENVIRON = @GL_GNULIB_ENVIRON@ GL_GNULIB_EUIDACCESS = @GL_GNULIB_EUIDACCESS@ GL_GNULIB_EXECL = @GL_GNULIB_EXECL@ GL_GNULIB_EXECLE = @GL_GNULIB_EXECLE@ GL_GNULIB_EXECLP = @GL_GNULIB_EXECLP@ GL_GNULIB_EXECV = @GL_GNULIB_EXECV@ GL_GNULIB_EXECVE = @GL_GNULIB_EXECVE@ GL_GNULIB_EXECVP = @GL_GNULIB_EXECVP@ GL_GNULIB_EXECVPE = @GL_GNULIB_EXECVPE@ GL_GNULIB_EXPLICIT_BZERO = @GL_GNULIB_EXPLICIT_BZERO@ GL_GNULIB_FACCESSAT = @GL_GNULIB_FACCESSAT@ GL_GNULIB_FCHDIR = @GL_GNULIB_FCHDIR@ GL_GNULIB_FCHMODAT = @GL_GNULIB_FCHMODAT@ GL_GNULIB_FCHOWNAT = @GL_GNULIB_FCHOWNAT@ GL_GNULIB_FCLOSE = @GL_GNULIB_FCLOSE@ GL_GNULIB_FCNTL = @GL_GNULIB_FCNTL@ GL_GNULIB_FDATASYNC = @GL_GNULIB_FDATASYNC@ GL_GNULIB_FDOPEN = @GL_GNULIB_FDOPEN@ GL_GNULIB_FFLUSH = @GL_GNULIB_FFLUSH@ GL_GNULIB_FFSL = @GL_GNULIB_FFSL@ GL_GNULIB_FFSLL = @GL_GNULIB_FFSLL@ GL_GNULIB_FGETC = @GL_GNULIB_FGETC@ GL_GNULIB_FGETS = @GL_GNULIB_FGETS@ GL_GNULIB_FOPEN = @GL_GNULIB_FOPEN@ GL_GNULIB_FOPEN_GNU = @GL_GNULIB_FOPEN_GNU@ GL_GNULIB_FPRINTF = @GL_GNULIB_FPRINTF@ GL_GNULIB_FPRINTF_POSIX = @GL_GNULIB_FPRINTF_POSIX@ GL_GNULIB_FPURGE = @GL_GNULIB_FPURGE@ GL_GNULIB_FPUTC = @GL_GNULIB_FPUTC@ GL_GNULIB_FPUTS = @GL_GNULIB_FPUTS@ GL_GNULIB_FREAD = @GL_GNULIB_FREAD@ GL_GNULIB_FREE_POSIX = @GL_GNULIB_FREE_POSIX@ GL_GNULIB_FREOPEN = @GL_GNULIB_FREOPEN@ GL_GNULIB_FSCANF = @GL_GNULIB_FSCANF@ GL_GNULIB_FSEEK = @GL_GNULIB_FSEEK@ GL_GNULIB_FSEEKO = @GL_GNULIB_FSEEKO@ GL_GNULIB_FSTAT = @GL_GNULIB_FSTAT@ GL_GNULIB_FSTATAT = @GL_GNULIB_FSTATAT@ GL_GNULIB_FSYNC = @GL_GNULIB_FSYNC@ GL_GNULIB_FTELL = @GL_GNULIB_FTELL@ GL_GNULIB_FTELLO = @GL_GNULIB_FTELLO@ GL_GNULIB_FTRUNCATE = @GL_GNULIB_FTRUNCATE@ GL_GNULIB_FUTIMENS = @GL_GNULIB_FUTIMENS@ GL_GNULIB_FWRITE = @GL_GNULIB_FWRITE@ GL_GNULIB_GETC = @GL_GNULIB_GETC@ GL_GNULIB_GETCHAR = @GL_GNULIB_GETCHAR@ GL_GNULIB_GETCWD = @GL_GNULIB_GETCWD@ GL_GNULIB_GETDELIM = @GL_GNULIB_GETDELIM@ GL_GNULIB_GETDOMAINNAME = @GL_GNULIB_GETDOMAINNAME@ GL_GNULIB_GETDTABLESIZE = @GL_GNULIB_GETDTABLESIZE@ GL_GNULIB_GETENTROPY = @GL_GNULIB_GETENTROPY@ GL_GNULIB_GETGROUPS = @GL_GNULIB_GETGROUPS@ GL_GNULIB_GETHOSTNAME = @GL_GNULIB_GETHOSTNAME@ GL_GNULIB_GETLINE = @GL_GNULIB_GETLINE@ GL_GNULIB_GETLOADAVG = @GL_GNULIB_GETLOADAVG@ GL_GNULIB_GETLOGIN = @GL_GNULIB_GETLOGIN@ GL_GNULIB_GETLOGIN_R = @GL_GNULIB_GETLOGIN_R@ GL_GNULIB_GETOPT_POSIX = @GL_GNULIB_GETOPT_POSIX@ GL_GNULIB_GETPAGESIZE = @GL_GNULIB_GETPAGESIZE@ GL_GNULIB_GETPASS = @GL_GNULIB_GETPASS@ GL_GNULIB_GETPASS_GNU = @GL_GNULIB_GETPASS_GNU@ GL_GNULIB_GETPROGNAME = @GL_GNULIB_GETPROGNAME@ GL_GNULIB_GETSUBOPT = @GL_GNULIB_GETSUBOPT@ GL_GNULIB_GETUMASK = @GL_GNULIB_GETUMASK@ GL_GNULIB_GETUSERSHELL = @GL_GNULIB_GETUSERSHELL@ GL_GNULIB_GRANTPT = @GL_GNULIB_GRANTPT@ GL_GNULIB_GROUP_MEMBER = @GL_GNULIB_GROUP_MEMBER@ GL_GNULIB_IMAXABS = @GL_GNULIB_IMAXABS@ GL_GNULIB_IMAXDIV = @GL_GNULIB_IMAXDIV@ GL_GNULIB_ISATTY = @GL_GNULIB_ISATTY@ GL_GNULIB_ISWBLANK = @GL_GNULIB_ISWBLANK@ GL_GNULIB_ISWCTYPE = @GL_GNULIB_ISWCTYPE@ GL_GNULIB_ISWDIGIT = @GL_GNULIB_ISWDIGIT@ GL_GNULIB_ISWXDIGIT = @GL_GNULIB_ISWXDIGIT@ GL_GNULIB_LCHMOD = @GL_GNULIB_LCHMOD@ GL_GNULIB_LCHOWN = @GL_GNULIB_LCHOWN@ GL_GNULIB_LINK = @GL_GNULIB_LINK@ GL_GNULIB_LINKAT = @GL_GNULIB_LINKAT@ GL_GNULIB_LOCALECONV = @GL_GNULIB_LOCALECONV@ GL_GNULIB_LOCALENAME = @GL_GNULIB_LOCALENAME@ GL_GNULIB_LOCALTIME = @GL_GNULIB_LOCALTIME@ GL_GNULIB_LSEEK = @GL_GNULIB_LSEEK@ GL_GNULIB_LSTAT = @GL_GNULIB_LSTAT@ GL_GNULIB_MALLOC_GNU = @GL_GNULIB_MALLOC_GNU@ GL_GNULIB_MALLOC_POSIX = @GL_GNULIB_MALLOC_POSIX@ GL_GNULIB_MBRLEN = @GL_GNULIB_MBRLEN@ GL_GNULIB_MBRTOWC = @GL_GNULIB_MBRTOWC@ GL_GNULIB_MBSCASECMP = @GL_GNULIB_MBSCASECMP@ GL_GNULIB_MBSCASESTR = @GL_GNULIB_MBSCASESTR@ GL_GNULIB_MBSCHR = @GL_GNULIB_MBSCHR@ GL_GNULIB_MBSCSPN = @GL_GNULIB_MBSCSPN@ GL_GNULIB_MBSINIT = @GL_GNULIB_MBSINIT@ GL_GNULIB_MBSLEN = @GL_GNULIB_MBSLEN@ GL_GNULIB_MBSNCASECMP = @GL_GNULIB_MBSNCASECMP@ GL_GNULIB_MBSNLEN = @GL_GNULIB_MBSNLEN@ GL_GNULIB_MBSNRTOWCS = @GL_GNULIB_MBSNRTOWCS@ GL_GNULIB_MBSPBRK = @GL_GNULIB_MBSPBRK@ GL_GNULIB_MBSPCASECMP = @GL_GNULIB_MBSPCASECMP@ GL_GNULIB_MBSRCHR = @GL_GNULIB_MBSRCHR@ GL_GNULIB_MBSRTOWCS = @GL_GNULIB_MBSRTOWCS@ GL_GNULIB_MBSSEP = @GL_GNULIB_MBSSEP@ GL_GNULIB_MBSSPN = @GL_GNULIB_MBSSPN@ GL_GNULIB_MBSSTR = @GL_GNULIB_MBSSTR@ GL_GNULIB_MBSTOK_R = @GL_GNULIB_MBSTOK_R@ GL_GNULIB_MBSTOWCS = @GL_GNULIB_MBSTOWCS@ GL_GNULIB_MBTOWC = @GL_GNULIB_MBTOWC@ GL_GNULIB_MDA_ACCESS = @GL_GNULIB_MDA_ACCESS@ GL_GNULIB_MDA_CHDIR = @GL_GNULIB_MDA_CHDIR@ GL_GNULIB_MDA_CHMOD = @GL_GNULIB_MDA_CHMOD@ GL_GNULIB_MDA_CLOSE = @GL_GNULIB_MDA_CLOSE@ GL_GNULIB_MDA_CREAT = @GL_GNULIB_MDA_CREAT@ GL_GNULIB_MDA_DUP = @GL_GNULIB_MDA_DUP@ GL_GNULIB_MDA_DUP2 = @GL_GNULIB_MDA_DUP2@ GL_GNULIB_MDA_ECVT = @GL_GNULIB_MDA_ECVT@ GL_GNULIB_MDA_EXECL = @GL_GNULIB_MDA_EXECL@ GL_GNULIB_MDA_EXECLE = @GL_GNULIB_MDA_EXECLE@ GL_GNULIB_MDA_EXECLP = @GL_GNULIB_MDA_EXECLP@ GL_GNULIB_MDA_EXECV = @GL_GNULIB_MDA_EXECV@ GL_GNULIB_MDA_EXECVE = @GL_GNULIB_MDA_EXECVE@ GL_GNULIB_MDA_EXECVP = @GL_GNULIB_MDA_EXECVP@ GL_GNULIB_MDA_EXECVPE = @GL_GNULIB_MDA_EXECVPE@ GL_GNULIB_MDA_FCLOSEALL = @GL_GNULIB_MDA_FCLOSEALL@ GL_GNULIB_MDA_FCVT = @GL_GNULIB_MDA_FCVT@ GL_GNULIB_MDA_FDOPEN = @GL_GNULIB_MDA_FDOPEN@ GL_GNULIB_MDA_FILENO = @GL_GNULIB_MDA_FILENO@ GL_GNULIB_MDA_GCVT = @GL_GNULIB_MDA_GCVT@ GL_GNULIB_MDA_GETCWD = @GL_GNULIB_MDA_GETCWD@ GL_GNULIB_MDA_GETPID = @GL_GNULIB_MDA_GETPID@ GL_GNULIB_MDA_GETW = @GL_GNULIB_MDA_GETW@ GL_GNULIB_MDA_ISATTY = @GL_GNULIB_MDA_ISATTY@ GL_GNULIB_MDA_LSEEK = @GL_GNULIB_MDA_LSEEK@ GL_GNULIB_MDA_MEMCCPY = @GL_GNULIB_MDA_MEMCCPY@ GL_GNULIB_MDA_MKDIR = @GL_GNULIB_MDA_MKDIR@ GL_GNULIB_MDA_MKTEMP = @GL_GNULIB_MDA_MKTEMP@ GL_GNULIB_MDA_OPEN = @GL_GNULIB_MDA_OPEN@ GL_GNULIB_MDA_PUTENV = @GL_GNULIB_MDA_PUTENV@ GL_GNULIB_MDA_PUTW = @GL_GNULIB_MDA_PUTW@ GL_GNULIB_MDA_READ = @GL_GNULIB_MDA_READ@ GL_GNULIB_MDA_RMDIR = @GL_GNULIB_MDA_RMDIR@ GL_GNULIB_MDA_STRDUP = @GL_GNULIB_MDA_STRDUP@ GL_GNULIB_MDA_SWAB = @GL_GNULIB_MDA_SWAB@ GL_GNULIB_MDA_TEMPNAM = @GL_GNULIB_MDA_TEMPNAM@ GL_GNULIB_MDA_TZSET = @GL_GNULIB_MDA_TZSET@ GL_GNULIB_MDA_UMASK = @GL_GNULIB_MDA_UMASK@ GL_GNULIB_MDA_UNLINK = @GL_GNULIB_MDA_UNLINK@ GL_GNULIB_MDA_WCSDUP = @GL_GNULIB_MDA_WCSDUP@ GL_GNULIB_MDA_WRITE = @GL_GNULIB_MDA_WRITE@ GL_GNULIB_MEMCHR = @GL_GNULIB_MEMCHR@ GL_GNULIB_MEMMEM = @GL_GNULIB_MEMMEM@ GL_GNULIB_MEMPCPY = @GL_GNULIB_MEMPCPY@ GL_GNULIB_MEMRCHR = @GL_GNULIB_MEMRCHR@ GL_GNULIB_MEMSET_EXPLICIT = @GL_GNULIB_MEMSET_EXPLICIT@ GL_GNULIB_MKDIR = @GL_GNULIB_MKDIR@ GL_GNULIB_MKDIRAT = @GL_GNULIB_MKDIRAT@ GL_GNULIB_MKDTEMP = @GL_GNULIB_MKDTEMP@ GL_GNULIB_MKFIFO = @GL_GNULIB_MKFIFO@ GL_GNULIB_MKFIFOAT = @GL_GNULIB_MKFIFOAT@ GL_GNULIB_MKNOD = @GL_GNULIB_MKNOD@ GL_GNULIB_MKNODAT = @GL_GNULIB_MKNODAT@ GL_GNULIB_MKOSTEMP = @GL_GNULIB_MKOSTEMP@ GL_GNULIB_MKOSTEMPS = @GL_GNULIB_MKOSTEMPS@ GL_GNULIB_MKSTEMP = @GL_GNULIB_MKSTEMP@ GL_GNULIB_MKSTEMPS = @GL_GNULIB_MKSTEMPS@ GL_GNULIB_MKTIME = @GL_GNULIB_MKTIME@ GL_GNULIB_NANOSLEEP = @GL_GNULIB_NANOSLEEP@ GL_GNULIB_NL_LANGINFO = @GL_GNULIB_NL_LANGINFO@ GL_GNULIB_NONBLOCKING = @GL_GNULIB_NONBLOCKING@ GL_GNULIB_OBSTACK_PRINTF = @GL_GNULIB_OBSTACK_PRINTF@ GL_GNULIB_OBSTACK_PRINTF_POSIX = @GL_GNULIB_OBSTACK_PRINTF_POSIX@ GL_GNULIB_OPEN = @GL_GNULIB_OPEN@ GL_GNULIB_OPENAT = @GL_GNULIB_OPENAT@ GL_GNULIB_OVERRIDES_STRUCT_STAT = @GL_GNULIB_OVERRIDES_STRUCT_STAT@ GL_GNULIB_PCLOSE = @GL_GNULIB_PCLOSE@ GL_GNULIB_PERROR = @GL_GNULIB_PERROR@ GL_GNULIB_PIPE = @GL_GNULIB_PIPE@ GL_GNULIB_PIPE2 = @GL_GNULIB_PIPE2@ GL_GNULIB_POPEN = @GL_GNULIB_POPEN@ GL_GNULIB_POSIX_MEMALIGN = @GL_GNULIB_POSIX_MEMALIGN@ GL_GNULIB_POSIX_OPENPT = @GL_GNULIB_POSIX_OPENPT@ GL_GNULIB_PREAD = @GL_GNULIB_PREAD@ GL_GNULIB_PRINTF = @GL_GNULIB_PRINTF@ GL_GNULIB_PRINTF_POSIX = @GL_GNULIB_PRINTF_POSIX@ GL_GNULIB_PTSNAME = @GL_GNULIB_PTSNAME@ GL_GNULIB_PTSNAME_R = @GL_GNULIB_PTSNAME_R@ GL_GNULIB_PUTC = @GL_GNULIB_PUTC@ GL_GNULIB_PUTCHAR = @GL_GNULIB_PUTCHAR@ GL_GNULIB_PUTENV = @GL_GNULIB_PUTENV@ GL_GNULIB_PUTS = @GL_GNULIB_PUTS@ GL_GNULIB_PWRITE = @GL_GNULIB_PWRITE@ GL_GNULIB_QSORT_R = @GL_GNULIB_QSORT_R@ GL_GNULIB_RANDOM = @GL_GNULIB_RANDOM@ GL_GNULIB_RANDOM_R = @GL_GNULIB_RANDOM_R@ GL_GNULIB_RAWMEMCHR = @GL_GNULIB_RAWMEMCHR@ GL_GNULIB_READ = @GL_GNULIB_READ@ GL_GNULIB_READLINK = @GL_GNULIB_READLINK@ GL_GNULIB_READLINKAT = @GL_GNULIB_READLINKAT@ GL_GNULIB_REALLOCARRAY = @GL_GNULIB_REALLOCARRAY@ GL_GNULIB_REALLOC_GNU = @GL_GNULIB_REALLOC_GNU@ GL_GNULIB_REALLOC_POSIX = @GL_GNULIB_REALLOC_POSIX@ GL_GNULIB_REALPATH = @GL_GNULIB_REALPATH@ GL_GNULIB_REMOVE = @GL_GNULIB_REMOVE@ GL_GNULIB_RENAME = @GL_GNULIB_RENAME@ GL_GNULIB_RENAMEAT = @GL_GNULIB_RENAMEAT@ GL_GNULIB_RMDIR = @GL_GNULIB_RMDIR@ GL_GNULIB_RPMATCH = @GL_GNULIB_RPMATCH@ GL_GNULIB_SCANF = @GL_GNULIB_SCANF@ GL_GNULIB_SECURE_GETENV = @GL_GNULIB_SECURE_GETENV@ GL_GNULIB_SETENV = @GL_GNULIB_SETENV@ GL_GNULIB_SETHOSTNAME = @GL_GNULIB_SETHOSTNAME@ GL_GNULIB_SETLOCALE = @GL_GNULIB_SETLOCALE@ GL_GNULIB_SETLOCALE_NULL = @GL_GNULIB_SETLOCALE_NULL@ GL_GNULIB_SIGABBREV_NP = @GL_GNULIB_SIGABBREV_NP@ GL_GNULIB_SIGDESCR_NP = @GL_GNULIB_SIGDESCR_NP@ GL_GNULIB_SLEEP = @GL_GNULIB_SLEEP@ GL_GNULIB_SNPRINTF = @GL_GNULIB_SNPRINTF@ GL_GNULIB_SPRINTF_POSIX = @GL_GNULIB_SPRINTF_POSIX@ GL_GNULIB_STAT = @GL_GNULIB_STAT@ GL_GNULIB_STDIO_H_NONBLOCKING = @GL_GNULIB_STDIO_H_NONBLOCKING@ GL_GNULIB_STDIO_H_SIGPIPE = @GL_GNULIB_STDIO_H_SIGPIPE@ GL_GNULIB_STPCPY = @GL_GNULIB_STPCPY@ GL_GNULIB_STPNCPY = @GL_GNULIB_STPNCPY@ GL_GNULIB_STRCASESTR = @GL_GNULIB_STRCASESTR@ GL_GNULIB_STRCHRNUL = @GL_GNULIB_STRCHRNUL@ GL_GNULIB_STRDUP = @GL_GNULIB_STRDUP@ GL_GNULIB_STRERROR = @GL_GNULIB_STRERROR@ GL_GNULIB_STRERRORNAME_NP = @GL_GNULIB_STRERRORNAME_NP@ GL_GNULIB_STRERROR_R = @GL_GNULIB_STRERROR_R@ GL_GNULIB_STRFTIME = @GL_GNULIB_STRFTIME@ GL_GNULIB_STRNCAT = @GL_GNULIB_STRNCAT@ GL_GNULIB_STRNDUP = @GL_GNULIB_STRNDUP@ GL_GNULIB_STRNLEN = @GL_GNULIB_STRNLEN@ GL_GNULIB_STRPBRK = @GL_GNULIB_STRPBRK@ GL_GNULIB_STRPTIME = @GL_GNULIB_STRPTIME@ GL_GNULIB_STRSEP = @GL_GNULIB_STRSEP@ GL_GNULIB_STRSIGNAL = @GL_GNULIB_STRSIGNAL@ GL_GNULIB_STRSTR = @GL_GNULIB_STRSTR@ GL_GNULIB_STRTOD = @GL_GNULIB_STRTOD@ GL_GNULIB_STRTOIMAX = @GL_GNULIB_STRTOIMAX@ GL_GNULIB_STRTOK_R = @GL_GNULIB_STRTOK_R@ GL_GNULIB_STRTOL = @GL_GNULIB_STRTOL@ GL_GNULIB_STRTOLD = @GL_GNULIB_STRTOLD@ GL_GNULIB_STRTOLL = @GL_GNULIB_STRTOLL@ GL_GNULIB_STRTOUL = @GL_GNULIB_STRTOUL@ GL_GNULIB_STRTOULL = @GL_GNULIB_STRTOULL@ GL_GNULIB_STRTOUMAX = @GL_GNULIB_STRTOUMAX@ GL_GNULIB_STRVERSCMP = @GL_GNULIB_STRVERSCMP@ GL_GNULIB_SYMLINK = @GL_GNULIB_SYMLINK@ GL_GNULIB_SYMLINKAT = @GL_GNULIB_SYMLINKAT@ GL_GNULIB_SYSTEM_POSIX = @GL_GNULIB_SYSTEM_POSIX@ GL_GNULIB_TIME = @GL_GNULIB_TIME@ GL_GNULIB_TIMEGM = @GL_GNULIB_TIMEGM@ GL_GNULIB_TIMESPEC_GET = @GL_GNULIB_TIMESPEC_GET@ GL_GNULIB_TIMESPEC_GETRES = @GL_GNULIB_TIMESPEC_GETRES@ GL_GNULIB_TIME_R = @GL_GNULIB_TIME_R@ GL_GNULIB_TIME_RZ = @GL_GNULIB_TIME_RZ@ GL_GNULIB_TMPFILE = @GL_GNULIB_TMPFILE@ GL_GNULIB_TOWCTRANS = @GL_GNULIB_TOWCTRANS@ GL_GNULIB_TRUNCATE = @GL_GNULIB_TRUNCATE@ GL_GNULIB_TTYNAME_R = @GL_GNULIB_TTYNAME_R@ GL_GNULIB_TZSET = @GL_GNULIB_TZSET@ GL_GNULIB_UNISTD_H_GETOPT = @GL_GNULIB_UNISTD_H_GETOPT@ GL_GNULIB_UNISTD_H_NONBLOCKING = @GL_GNULIB_UNISTD_H_NONBLOCKING@ GL_GNULIB_UNISTD_H_SIGPIPE = @GL_GNULIB_UNISTD_H_SIGPIPE@ GL_GNULIB_UNLINK = @GL_GNULIB_UNLINK@ GL_GNULIB_UNLINKAT = @GL_GNULIB_UNLINKAT@ GL_GNULIB_UNLOCKPT = @GL_GNULIB_UNLOCKPT@ GL_GNULIB_UNSETENV = @GL_GNULIB_UNSETENV@ GL_GNULIB_USLEEP = @GL_GNULIB_USLEEP@ GL_GNULIB_UTIMENSAT = @GL_GNULIB_UTIMENSAT@ GL_GNULIB_VASPRINTF = @GL_GNULIB_VASPRINTF@ GL_GNULIB_VDPRINTF = @GL_GNULIB_VDPRINTF@ GL_GNULIB_VFPRINTF = @GL_GNULIB_VFPRINTF@ GL_GNULIB_VFPRINTF_POSIX = @GL_GNULIB_VFPRINTF_POSIX@ GL_GNULIB_VFSCANF = @GL_GNULIB_VFSCANF@ GL_GNULIB_VPRINTF = @GL_GNULIB_VPRINTF@ GL_GNULIB_VPRINTF_POSIX = @GL_GNULIB_VPRINTF_POSIX@ GL_GNULIB_VSCANF = @GL_GNULIB_VSCANF@ GL_GNULIB_VSNPRINTF = @GL_GNULIB_VSNPRINTF@ GL_GNULIB_VSPRINTF_POSIX = @GL_GNULIB_VSPRINTF_POSIX@ GL_GNULIB_WCPCPY = @GL_GNULIB_WCPCPY@ GL_GNULIB_WCPNCPY = @GL_GNULIB_WCPNCPY@ GL_GNULIB_WCRTOMB = @GL_GNULIB_WCRTOMB@ GL_GNULIB_WCSCASECMP = @GL_GNULIB_WCSCASECMP@ GL_GNULIB_WCSCAT = @GL_GNULIB_WCSCAT@ GL_GNULIB_WCSCHR = @GL_GNULIB_WCSCHR@ GL_GNULIB_WCSCMP = @GL_GNULIB_WCSCMP@ GL_GNULIB_WCSCOLL = @GL_GNULIB_WCSCOLL@ GL_GNULIB_WCSCPY = @GL_GNULIB_WCSCPY@ GL_GNULIB_WCSCSPN = @GL_GNULIB_WCSCSPN@ GL_GNULIB_WCSDUP = @GL_GNULIB_WCSDUP@ GL_GNULIB_WCSFTIME = @GL_GNULIB_WCSFTIME@ GL_GNULIB_WCSLEN = @GL_GNULIB_WCSLEN@ GL_GNULIB_WCSNCASECMP = @GL_GNULIB_WCSNCASECMP@ GL_GNULIB_WCSNCAT = @GL_GNULIB_WCSNCAT@ GL_GNULIB_WCSNCMP = @GL_GNULIB_WCSNCMP@ GL_GNULIB_WCSNCPY = @GL_GNULIB_WCSNCPY@ GL_GNULIB_WCSNLEN = @GL_GNULIB_WCSNLEN@ GL_GNULIB_WCSNRTOMBS = @GL_GNULIB_WCSNRTOMBS@ GL_GNULIB_WCSPBRK = @GL_GNULIB_WCSPBRK@ GL_GNULIB_WCSRCHR = @GL_GNULIB_WCSRCHR@ GL_GNULIB_WCSRTOMBS = @GL_GNULIB_WCSRTOMBS@ GL_GNULIB_WCSSPN = @GL_GNULIB_WCSSPN@ GL_GNULIB_WCSSTR = @GL_GNULIB_WCSSTR@ GL_GNULIB_WCSTOK = @GL_GNULIB_WCSTOK@ GL_GNULIB_WCSWIDTH = @GL_GNULIB_WCSWIDTH@ GL_GNULIB_WCSXFRM = @GL_GNULIB_WCSXFRM@ GL_GNULIB_WCTOB = @GL_GNULIB_WCTOB@ GL_GNULIB_WCTOMB = @GL_GNULIB_WCTOMB@ GL_GNULIB_WCTRANS = @GL_GNULIB_WCTRANS@ GL_GNULIB_WCTYPE = @GL_GNULIB_WCTYPE@ GL_GNULIB_WCWIDTH = @GL_GNULIB_WCWIDTH@ GL_GNULIB_WMEMCHR = @GL_GNULIB_WMEMCHR@ GL_GNULIB_WMEMCMP = @GL_GNULIB_WMEMCMP@ GL_GNULIB_WMEMCPY = @GL_GNULIB_WMEMCPY@ GL_GNULIB_WMEMMOVE = @GL_GNULIB_WMEMMOVE@ GL_GNULIB_WMEMPCPY = @GL_GNULIB_WMEMPCPY@ GL_GNULIB_WMEMSET = @GL_GNULIB_WMEMSET@ GL_GNULIB_WRITE = @GL_GNULIB_WRITE@ GL_GNULIB__EXIT = @GL_GNULIB__EXIT@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GNULIBHEADERS_OVERRIDE_WINT_T = @GNULIBHEADERS_OVERRIDE_WINT_T@ GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@ GREP = @GREP@ HARD_LOCALE_LIB = @HARD_LOCALE_LIB@ HAVE_ALIGNED_ALLOC = @HAVE_ALIGNED_ALLOC@ HAVE_ALLOCA_H = @HAVE_ALLOCA_H@ HAVE_ATOLL = @HAVE_ATOLL@ HAVE_BTOWC = @HAVE_BTOWC@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_COPY_FILE_RANGE = @HAVE_COPY_FILE_RANGE@ HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ HAVE_DECL_ECVT = @HAVE_DECL_ECVT@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_EXECVPE = @HAVE_DECL_EXECVPE@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FCLOSEALL = @HAVE_DECL_FCLOSEALL@ HAVE_DECL_FCVT = @HAVE_DECL_FCVT@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GCVT = @HAVE_DECL_GCVT@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_GETW = @HAVE_DECL_GETW@ HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@ HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_PROGRAM_INVOCATION_NAME = @HAVE_DECL_PROGRAM_INVOCATION_NAME@ HAVE_DECL_PUTW = @HAVE_DECL_PUTW@ HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DECL_WCSDUP = @HAVE_DECL_WCSDUP@ HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ HAVE_ERROR = @HAVE_ERROR@ HAVE_ERROR_AT_LINE = @HAVE_ERROR_AT_LINE@ HAVE_ERROR_H = @HAVE_ERROR_H@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_EXECVPE = @HAVE_EXECVPE@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHMODAT = @HAVE_FCHMODAT@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FCNTL = @HAVE_FCNTL@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FEATURES_H = @HAVE_FEATURES_H@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FREELOCALE = @HAVE_FREELOCALE@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSTATAT = @HAVE_FSTATAT@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_FUTIMENS = @HAVE_FUTIMENS@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETENTROPY = @HAVE_GETENTROPY@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GETPASS = @HAVE_GETPASS@ HAVE_GETPROGNAME = @HAVE_GETPROGNAME@ HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ HAVE_GETUMASK = @HAVE_GETUMASK@ HAVE_GRANTPT = @HAVE_GRANTPT@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_IMAXABS = @HAVE_IMAXABS@ HAVE_IMAXDIV = @HAVE_IMAXDIV@ HAVE_IMAXDIV_T = @HAVE_IMAXDIV_T@ HAVE_INITSTATE = @HAVE_INITSTATE@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_ISWBLANK = @HAVE_ISWBLANK@ HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ HAVE_LANGINFO_ALTMON = @HAVE_LANGINFO_ALTMON@ HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ HAVE_LCHMOD = @HAVE_LCHMOD@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_LSTAT = @HAVE_LSTAT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBRLEN = @HAVE_MBRLEN@ HAVE_MBRTOWC = @HAVE_MBRTOWC@ HAVE_MBSINIT = @HAVE_MBSINIT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ HAVE_MBTOWC = @HAVE_MBTOWC@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MEMSET_EXPLICIT = @HAVE_MEMSET_EXPLICIT@ HAVE_MKDIRAT = @HAVE_MKDIRAT@ HAVE_MKDTEMP = @HAVE_MKDTEMP@ HAVE_MKFIFO = @HAVE_MKFIFO@ HAVE_MKFIFOAT = @HAVE_MKFIFOAT@ HAVE_MKNOD = @HAVE_MKNOD@ HAVE_MKNODAT = @HAVE_MKNODAT@ HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ HAVE_MKSTEMP = @HAVE_MKSTEMP@ HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ HAVE_NEWLOCALE = @HAVE_NEWLOCALE@ HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ HAVE_OPENAT = @HAVE_OPENAT@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_POSIX_MEMALIGN = @HAVE_POSIX_MEMALIGN@ HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PTSNAME = @HAVE_PTSNAME@ HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_QSORT_R = @HAVE_QSORT_R@ HAVE_RANDOM = @HAVE_RANDOM@ HAVE_RANDOM_H = @HAVE_RANDOM_H@ HAVE_RANDOM_R = @HAVE_RANDOM_R@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ HAVE_REALPATH = @HAVE_REALPATH@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_RPMATCH = @HAVE_RPMATCH@ HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ HAVE_SETENV = @HAVE_SETENV@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SETSTATE = @HAVE_SETSTATE@ HAVE_SIGABBREV_NP = @HAVE_SIGABBREV_NP@ HAVE_SIGDESCR_NP = @HAVE_SIGDESCR_NP@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRERRORNAME_NP = @HAVE_STRERRORNAME_NP@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRPTIME = @HAVE_STRPTIME@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRTOD = @HAVE_STRTOD@ HAVE_STRTOL = @HAVE_STRTOL@ HAVE_STRTOLD = @HAVE_STRTOLD@ HAVE_STRTOLL = @HAVE_STRTOLL@ HAVE_STRTOUL = @HAVE_STRTOUL@ HAVE_STRTOULL = @HAVE_STRTOULL@ HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_TIMEGM = @HAVE_TIMEGM@ HAVE_TIMESPEC_GET = @HAVE_TIMESPEC_GET@ HAVE_TIMESPEC_GETRES = @HAVE_TIMESPEC_GETRES@ HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WCPCPY = @HAVE_WCPCPY@ HAVE_WCPNCPY = @HAVE_WCPNCPY@ HAVE_WCRTOMB = @HAVE_WCRTOMB@ HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ HAVE_WCSCAT = @HAVE_WCSCAT@ HAVE_WCSCHR = @HAVE_WCSCHR@ HAVE_WCSCMP = @HAVE_WCSCMP@ HAVE_WCSCOLL = @HAVE_WCSCOLL@ HAVE_WCSCPY = @HAVE_WCSCPY@ HAVE_WCSCSPN = @HAVE_WCSCSPN@ HAVE_WCSDUP = @HAVE_WCSDUP@ HAVE_WCSFTIME = @HAVE_WCSFTIME@ HAVE_WCSLEN = @HAVE_WCSLEN@ HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ HAVE_WCSNCAT = @HAVE_WCSNCAT@ HAVE_WCSNCMP = @HAVE_WCSNCMP@ HAVE_WCSNCPY = @HAVE_WCSNCPY@ HAVE_WCSNLEN = @HAVE_WCSNLEN@ HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ HAVE_WCSPBRK = @HAVE_WCSPBRK@ HAVE_WCSRCHR = @HAVE_WCSRCHR@ HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ HAVE_WCSSPN = @HAVE_WCSSPN@ HAVE_WCSSTR = @HAVE_WCSSTR@ HAVE_WCSTOK = @HAVE_WCSTOK@ HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ HAVE_WCSXFRM = @HAVE_WCSXFRM@ HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE_WINT_T = @HAVE_WINT_T@ HAVE_WMEMCHR = @HAVE_WMEMCHR@ HAVE_WMEMCMP = @HAVE_WMEMCMP@ HAVE_WMEMCPY = @HAVE_WMEMCPY@ HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ HAVE_WMEMPCPY = @HAVE_WMEMPCPY@ HAVE_WMEMSET = @HAVE_WMEMSET@ HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ HAVE__EXIT = @HAVE__EXIT@ IMPRIMATUR_MAKEINFOFLAGS = @IMPRIMATUR_MAKEINFOFLAGS@ IMPRIMATUR_MODULE_DIR = @IMPRIMATUR_MODULE_DIR@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@ INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBGNU_LIBDEPS = @LIBGNU_LIBDEPS@ LIBGNU_LTLIBDEPS = @LIBGNU_LTLIBDEPS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPMULTITHREAD = @LIBPMULTITHREAD@ LIBPTHREAD = @LIBPTHREAD@ LIBS = @LIBS@ LIBSTDTHREAD = @LIBSTDTHREAD@ LIBTHREAD = @LIBTHREAD@ LIB_HARD_LOCALE = @LIB_HARD_LOCALE@ LIB_MBRTOWC = @LIB_MBRTOWC@ LIB_NL_LANGINFO = @LIB_NL_LANGINFO@ LIB_SCHED_YIELD = @LIB_SCHED_YIELD@ LIB_SETLOCALE_NULL = @LIB_SETLOCALE_NULL@ LIMITS_H = @LIMITS_H@ LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ LOCALENAME_ENHANCE_LOCALE_FUNCS = @LOCALENAME_ENHANCE_LOCALE_FUNCS@ LOCALE_FR = @LOCALE_FR@ LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ LOCALE_JA = @LOCALE_JA@ LOCALE_ZH_CN = @LOCALE_ZH_CN@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBTHREAD = @LTLIBTHREAD@ MAKEINFO = @MAKEINFO@ MBRTOWC_LIB = @MBRTOWC_LIB@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NEXT_ASSERT_H = @NEXT_ASSERT_H@ NEXT_AS_FIRST_DIRECTIVE_ASSERT_H = @NEXT_AS_FIRST_DIRECTIVE_ASSERT_H@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_ERROR_H = @NEXT_AS_FIRST_DIRECTIVE_ERROR_H@ NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@ NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_ERROR_H = @NEXT_ERROR_H@ NEXT_FCNTL_H = @NEXT_FCNTL_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_LOCALE_H = @NEXT_LOCALE_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STDLIB_H = @NEXT_STDLIB_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_TIME_H = @NEXT_TIME_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NEXT_WCHAR_H = @NEXT_WCHAR_H@ NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ 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@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PRIPTR_PREFIX = @PRIPTR_PREFIX@ PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ RANLIB = @RANLIB@ RENDITION = @RENDITION@ REPLACE_ACCESS = @REPLACE_ACCESS@ REPLACE_ALIGNED_ALLOC = @REPLACE_ALIGNED_ALLOC@ REPLACE_BTOWC = @REPLACE_BTOWC@ REPLACE_CALLOC_FOR_CALLOC_GNU = @REPLACE_CALLOC_FOR_CALLOC_GNU@ REPLACE_CALLOC_FOR_CALLOC_POSIX = @REPLACE_CALLOC_FOR_CALLOC_POSIX@ REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ REPLACE_CHMOD = @REPLACE_CHMOD@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_COPY_FILE_RANGE = @REPLACE_COPY_FILE_RANGE@ REPLACE_CREAT = @REPLACE_CREAT@ REPLACE_CTIME = @REPLACE_CTIME@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_DUP3 = @REPLACE_DUP3@ REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ REPLACE_ERROR = @REPLACE_ERROR@ REPLACE_ERROR_AT_LINE = @REPLACE_ERROR_AT_LINE@ REPLACE_EXECL = @REPLACE_EXECL@ REPLACE_EXECLE = @REPLACE_EXECLE@ REPLACE_EXECLP = @REPLACE_EXECLP@ REPLACE_EXECV = @REPLACE_EXECV@ REPLACE_EXECVE = @REPLACE_EXECVE@ REPLACE_EXECVP = @REPLACE_EXECVP@ REPLACE_EXECVPE = @REPLACE_EXECVPE@ REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ REPLACE_FCHMODAT = @REPLACE_FCHMODAT@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FCNTL = @REPLACE_FCNTL@ REPLACE_FDATASYNC = @REPLACE_FDATASYNC@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FFSLL = @REPLACE_FFSLL@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FOPEN_FOR_FOPEN_GNU = @REPLACE_FOPEN_FOR_FOPEN_GNU@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREE = @REPLACE_FREE@ REPLACE_FREELOCALE = @REPLACE_FREELOCALE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FSTAT = @REPLACE_FSTAT@ REPLACE_FSTATAT = @REPLACE_FSTATAT@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETENTROPY = @REPLACE_GETENTROPY@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOADAVG = @REPLACE_GETLOADAVG@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_GETPASS = @REPLACE_GETPASS@ REPLACE_GETPASS_FOR_GETPASS_GNU = @REPLACE_GETPASS_FOR_GETPASS_GNU@ REPLACE_GETPROGNAME = @REPLACE_GETPROGNAME@ REPLACE_GETSUBOPT = @REPLACE_GETSUBOPT@ REPLACE_GMTIME = @REPLACE_GMTIME@ REPLACE_IMAXABS = @REPLACE_IMAXABS@ REPLACE_IMAXDIV = @REPLACE_IMAXDIV@ REPLACE_INITSTATE = @REPLACE_INITSTATE@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ REPLACE_ISWDIGIT = @REPLACE_ISWDIGIT@ REPLACE_ISWXDIGIT = @REPLACE_ISWXDIGIT@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_LSTAT = @REPLACE_LSTAT@ REPLACE_MALLOC_FOR_MALLOC_GNU = @REPLACE_MALLOC_FOR_MALLOC_GNU@ REPLACE_MALLOC_FOR_MALLOC_POSIX = @REPLACE_MALLOC_FOR_MALLOC_POSIX@ REPLACE_MBRLEN = @REPLACE_MBRLEN@ REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ REPLACE_MBSINIT = @REPLACE_MBSINIT@ REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ REPLACE_MBSTOWCS = @REPLACE_MBSTOWCS@ REPLACE_MBTOWC = @REPLACE_MBTOWC@ REPLACE_MB_CUR_MAX = @REPLACE_MB_CUR_MAX@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_MEMPCPY = @REPLACE_MEMPCPY@ REPLACE_MKDIR = @REPLACE_MKDIR@ REPLACE_MKFIFO = @REPLACE_MKFIFO@ REPLACE_MKFIFOAT = @REPLACE_MKFIFOAT@ REPLACE_MKNOD = @REPLACE_MKNOD@ REPLACE_MKNODAT = @REPLACE_MKNODAT@ REPLACE_MKOSTEMP = @REPLACE_MKOSTEMP@ REPLACE_MKOSTEMPS = @REPLACE_MKOSTEMPS@ REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ REPLACE_MKTIME = @REPLACE_MKTIME@ REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ REPLACE_NEWLOCALE = @REPLACE_NEWLOCALE@ REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_OPEN = @REPLACE_OPEN@ REPLACE_OPENAT = @REPLACE_OPENAT@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_PIPE2 = @REPLACE_PIPE2@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_POSIX_MEMALIGN = @REPLACE_POSIX_MEMALIGN@ REPLACE_POSIX_OPENPT = @REPLACE_POSIX_OPENPT@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PTSNAME = @REPLACE_PTSNAME@ REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ REPLACE_PUTENV = @REPLACE_PUTENV@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_QSORT_R = @REPLACE_QSORT_R@ REPLACE_RANDOM = @REPLACE_RANDOM@ REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ REPLACE_READ = @REPLACE_READ@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_READLINKAT = @REPLACE_READLINKAT@ REPLACE_REALLOCARRAY = @REPLACE_REALLOCARRAY@ REPLACE_REALLOC_FOR_REALLOC_GNU = @REPLACE_REALLOC_FOR_REALLOC_GNU@ REPLACE_REALLOC_FOR_REALLOC_POSIX = @REPLACE_REALLOC_FOR_REALLOC_POSIX@ REPLACE_REALPATH = @REPLACE_REALPATH@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_SETENV = @REPLACE_SETENV@ REPLACE_SETHOSTNAME = @REPLACE_SETHOSTNAME@ REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ REPLACE_SETSTATE = @REPLACE_SETSTATE@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_STAT = @REPLACE_STAT@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPCPY = @REPLACE_STPCPY@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERRORNAME_NP = @REPLACE_STRERRORNAME_NP@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRFTIME = @REPLACE_STRFTIME@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOD = @REPLACE_STRTOD@ REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_STRTOL = @REPLACE_STRTOL@ REPLACE_STRTOLD = @REPLACE_STRTOLD@ REPLACE_STRTOLL = @REPLACE_STRTOLL@ REPLACE_STRTOUL = @REPLACE_STRTOUL@ REPLACE_STRTOULL = @REPLACE_STRTOULL@ REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ REPLACE_TIME = @REPLACE_TIME@ REPLACE_TIMEGM = @REPLACE_TIMEGM@ REPLACE_TIMESPEC_GET = @REPLACE_TIMESPEC_GET@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_TZSET = @REPLACE_TZSET@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_UNSETENV = @REPLACE_UNSETENV@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ REPLACE_WCSCMP = @REPLACE_WCSCMP@ REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ REPLACE_WCSNCMP = @REPLACE_WCSNCMP@ REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ REPLACE_WCSSTR = @REPLACE_WCSSTR@ REPLACE_WCSTOK = @REPLACE_WCSTOK@ REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ REPLACE_WCTOB = @REPLACE_WCTOB@ REPLACE_WCTOMB = @REPLACE_WCTOMB@ REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ REPLACE_WMEMCMP = @REPLACE_WMEMCMP@ REPLACE_WMEMPCPY = @REPLACE_WMEMPCPY@ REPLACE_WRITE = @REPLACE_WRITE@ REPLACE__EXIT = @REPLACE__EXIT@ RUSH_DEFAULT_CONFIG = @RUSH_DEFAULT_CONFIG@ SCHED_YIELD_LIB = @SCHED_YIELD_LIB@ SED = @SED@ SETLOCALE_NULL_LIB = @SETLOCALE_NULL_LIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ STDCKDINT_H = @STDCKDINT_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_TIME_UTC = @TIME_H_DEFINES_TIME_UTC@ UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@ UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ UNISTD_H_HAVE_SYS_RANDOM_H = @UNISTD_H_HAVE_SYS_RANDOM_H@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ 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@ gl_LIBOBJDEPS = @gl_LIBOBJDEPS@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJDEPS = @gltests_LIBOBJDEPS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ACLOCAL_AMFLAGS = -I m4 -I doc/imprimatur SUBDIRS = gnu lib src etc doc po tests # We never remove files from the configuration directory distuninstallcheck_listfiles = \ find $(prefix) -type f -not -path '$(sysconfdir)/*' 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__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles);; \ 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: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(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) | eval GZIP= gzip $(GZIP_ENV) -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-zstd: distdir tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst $(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) | eval GZIP= gzip $(GZIP_ENV) -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*) \ eval GZIP= gzip $(GZIP_ENV) -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*) \ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ *.tar.zst*) \ zstd -dc $(distdir).tar.zst | $(am__untar) ;;\ 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) $(AM_DISTCHECK_DVI_TARGET) \ && $(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 \ dist-zstd 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 \ cmd=$(top_srcdir)/build-aux/gitlog-to-changelog; \ $$cmd --format='%s%n%n%b%n' | \ sed '/<unknown>$$/d' | fmt -s > cl-t; \ echo "Local Variables:" >> cl-t; \ echo "mode: change-log" >> cl-t; \ echo "version-control: never" >> cl-t; \ echo "buffer-read-only: t" >> cl-t; \ echo "End:" >> cl-t; \ rm -f ChangeLog; \ mv cl-t 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: ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/tests/�������������������������������������������������������������������������������������0000755�0001750�0001750�00000000000�14655401532�013475� 5����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/tests/lex.at�������������������������������������������������������������������������������0000644�0001750�0001750�00000005423�14643176123�014621� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of GNU Rush. # Copyright (C) 2019-2024 Sergey Poznyakoff # # GNU Rush is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Rush is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. AT_BANNER([Lexical structure]) m4_pushdef([LEXTEST], [AT_SETUP([$1]) AT_KEYWORDS([lex]) AT_CHECK( [rush -T <<'EOT' $2[]dnl EOT ], [0], [$3]) AT_CLEANUP ]) LEXTEST([identifier], [rule test ], [state 2, stdin:1.1-4: 'rule' state 2, stdin:1.6-9: IDENT test state 1, stdin:1.10-2: EOL ]) LEXTEST([unquoted string], [rule /un.quoted,string&() ], [state 2, stdin:1.1-4: 'rule' state 2, stdin:1.6-22: STRING "/un.quoted,string" state 2, stdin:1.23: '&' state 2, stdin:1.24: '(' state 2, stdin:1.25: ')' state 1, stdin:1.26-2: EOL ]) LEXTEST([number], [rule 10 rule +10 rule -10 ], [state 2, stdin:1.1-4: 'rule' state 2, stdin:1.6-7: NUMBER 10 state 1, stdin:1.8-2: EOL state 2, stdin:2.1-4: 'rule' state 2, stdin:2.6-8: NUMBER +10 state 1, stdin:2.9-3: EOL state 2, stdin:3.1-4: 'rule' state 2, stdin:3.6-8: NUMBER -10 state 1, stdin:3.9-4: EOL ]) LEXTEST([quoted string], [rule "input string" ], [state 2, stdin:1.1-4: 'rule' state 2, stdin:1.6-19: STRING "input string" state 1, stdin:1.20-2: EOL ]) LEXTEST([escapes in quoted string], [rule "simple\btext\040with e\163capes \%3" ], [state 2, stdin:1.1-4: 'rule' state 2, stdin:1.6-42: STRING "simple\btext with escapes \\%3" state 1, stdin:1.43-2: EOL ]) LEXTEST([multiline string], [rule "multiline\ text\ " ], [state 2, stdin:1.1-4: 'rule' state 2, stdin:1.6-3.1: STRING "multiline text" state 1, stdin:3.2-4: EOL ]) LEXTEST([complex multiline string], [rule "a \"com\x70lex\r\n\ multiline\"\r\n\ text" ], [state 2, stdin:1.1-4: 'rule' state 2, stdin:1.6-3.5: STRING "a \"complex\r\nmultiline\"\r\ntext" state 1, stdin:3.6-4: EOL ]) LEXTEST([invalid escape sequence], [rule "bad \&escape" ], [state 2, stdin:1.1-4: 'rule' state 2, stdin:1.6-19: STRING "bad \\&escape" state 1, stdin:1.20-2: EOL ]) LEXTEST([unquoted variable], [rule $VAR ], [state 2, stdin:1.1-4: 'rule' state 2, stdin:1.6-9: STRING "$VAR" state 1, stdin:1.10-2: EOL ]) LEXTEST([unquoted variable with defaults], [rule ${VAR:-"string\ \145\x6et ${SUBVAR=:} \"test\""} ], [state 2, stdin:1.1-4: 'rule' state 2, stdin:1.6-2.32: STRING "${VAR:-\"string\\145\\x6et ${SUBVAR=:} \\\"test\\\"\"}" state 1, stdin:2.33-3: EOL ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/tests/evalenv.at���������������������������������������������������������������������������0000644�0001750�0001750�00000002076�14643176122�015471� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of GNU Rush. # Copyright (C) 2019-2024 Sergey Poznyakoff # # GNU Rush is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Rush is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([evalenv]) AT_KEYWORDS([evalenv]) m4_pushdef([RUSH_ENVIRON],[-i HOME=$PWD USER=$MY_USER FOO=foo]) AT_RUSH_TEST([ rush 2.0 rule evalenv \${FOO:=test} evalenv \${BAR:=bar} evalenv \$HOME ], [environ], [command], [0], [{ "environ":[[ "BAR=bar", "FOO=foo", "HOME=$TESTDIR", "USER=$MY_USER" ]] } ], []) m4_popdef([RUSH_ENVIRON]) AT_CLEANUP ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/tests/setenv.at����������������������������������������������������������������������������0000644�0001750�0001750�00000004423�14643176124�015335� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of GNU Rush. # Copyright (C) 2016-2024 Sergey Poznyakoff # # GNU Rush is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Rush is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([setenv]) AT_KEYWORDS([setenv]) m4_pushdef([RUSH_ENVIRON],[-i HOME=$PWD USER=$MY_USER]) AT_RUSH_TEST([ rush 2.0 rule setenv NEWVAR=foo ], [environ], [command], [0], [{ "environ":[[ "HOME=$TESTDIR", "NEWVAR=foo", "USER=$MY_USER" ]] } ], []) m4_popdef([RUSH_ENVIRON]) m4_pushdef([RUSH_ENVIRON],[-i]) AT_RUSH_TEST([ rush 2.0 rule setenv MYPATH="\${MYPATH:-}\${MYPATH+:}/usr/local/bin" ], [environ], [command], [0], [{ "environ":[[ "MYPATH=/usr/local/bin" ]] } ], []) m4_popdef([RUSH_ENVIRON]) m4_pushdef([RUSH_ENVIRON],[-i MYPATH=/bin:/usr/bin]) AT_RUSH_TEST([ rush 2.0 rule setenv MYPATH="\${MYPATH:-}\${MYPATH+:}/usr/local/bin" ], [environ], [command], [0], [{ "environ":[[ "MYPATH=/bin:/usr/bin:/usr/local/bin" ]] } ], []) m4_popdef([RUSH_ENVIRON]) m4_pushdef([RUSH_ENVIRON],[-i]) AT_RUSH_TEST([ rush 2.0 rule setenv MYPATH="/usr/local/bin\${MYPATH+:}\${MYPATH:-}" ], [environ], [command], [0], [{ "environ":[[ "MYPATH=/usr/local/bin" ]] } ], []) m4_popdef([RUSH_ENVIRON]) m4_pushdef([RUSH_ENVIRON],[-i MYPATH=/bin:/usr/bin]) AT_RUSH_TEST([ rush 2.0 rule setenv MYPATH="/usr/local/bin\${MYPATH+:}\$MYPATH" ], [environ], [command], [0], [{ "environ":[[ "MYPATH=/usr/local/bin:/bin:/usr/bin" ]] } ], []) m4_popdef([RUSH_ENVIRON]) m4_pushdef([RUSH_ENVIRON],[-i MYPATH=/bin:/usr/bin]) AT_RUSH_TEST([ rush 2.0 rule setenv MYPATH="/usr/local/bin:\$MYPATH" ], [environ], [command], [0], [{ "environ":[[ "MYPATH=/usr/local/bin:/bin:/usr/bin" ]] } ], []) m4_popdef([RUSH_ENVIRON]) AT_CLEANUP ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/tests/interactive.at�����������������������������������������������������������������������0000644�0001750�0001750�00000001715�14643176122�016345� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of GNU Rush. # Copyright (C) 2016-2024 Sergey Poznyakoff # # GNU Rush is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Rush is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([interactive]) AT_KEYWORDS([interactive]) AT_RUSH_TEST([ rush 2.0 rule interactive true ], [cmdline,argv,prog,interactive], [interactive], [0], [{ "cmdline":"/bin/sh", "argv":[[ "/bin/sh" ]], "prog":null, "interactive":1 } ], []) AT_CLEANUP ���������������������������������������������������rush-2.4/tests/backref.at���������������������������������������������������������������������������0000644�0001750�0001750�00000002100�14643176121�015411� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of GNU Rush. # Copyright (C) 2019-2024 Sergey Poznyakoff # # GNU Rush is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Rush is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([Back-reference expansion]) AT_KEYWORDS([backref]) AT_RUSH_TEST([ rush 2.0 rule chdir match \$command ~ "^cd \"(.+)\" && (runcom .*)$" chdir %1 set command = "%{2}" fall-through rule runcom match \$0 == runcom set [0] = "./bin/runcom" ], [cmdline,home_dir], [cd "$PWD" && runcom test], [0], [{ "cmdline":"./bin/runcom test", "home_dir":"$TESTDIR" } ], []) AT_CLEANUP ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/tests/null.at������������������������������������������������������������������������������0000644�0001750�0001750�00000001554�14643176123�015004� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of GNU Rush. # Copyright (C) 2019-2024 Sergey Poznyakoff # # GNU Rush is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Rush is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([null]) AT_KEYWORDS([null]) AT_RUSH_TEST([ rush 2.0 ], [all], [/usr/bin/echo foo], [1], [], [rush: Error: no matching rule for "/usr/bin/echo foo", user $MY_USER ]) AT_CLEANUP ����������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/tests/Makefile.am��������������������������������������������������������������������������0000644�0001750�0001750�00000005477�14643176121�015546� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of GNU Rush. # Copyright (C) 2008-2024 Sergey Poznyakoff # # GNU Rush is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Rush is distributed in the hope that 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/>. EXTRA_DIST = $(TESTSUITE_AT) testsuite package.m4 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 = \ testsuite.at\ null.at\ argc.at\ command.at\ matcharg.at\ matchprog.at\ uid.at\ user.at\ in.at\ gid.at\ group.at\ and.at\ or.at\ compound.at\ set.at\ delete.at\ transform.at\ map.at\ umask.at\ newgrp.at\ chdir.at\ interactive.at\ fallthrough.at\ error.at\ evalenv.at\ clrenv.at\ unsetenv.at\ keepenv.at\ setenv.at\ backref.at\ setvar.at\ unsetvar.at\ undef.at\ regexp.at\ qstr.at\ inc00.at\ inc01.at\ insert.at\ remopt.at\ lex.at\ fstest.at\ legacy/argc.at\ legacy/backref.at\ legacy/chdir.at\ legacy/command.at\ legacy/delete.at\ legacy/env.at\ legacy/error.at\ legacy/fallthrough.at\ legacy/interactive.at\ legacy/gid.at\ legacy/map.at\ legacy/match.at\ legacy/matchprog.at\ legacy/newgrp.at\ legacy/set.at\ legacy/setvar.at\ legacy/transform.at\ legacy/uid.at\ legacy/unsetvar.at\ legacy/umask.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=myid mksock �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/tests/group.at�����������������������������������������������������������������������������0000644�0001750�0001750�00000002106�14643176122�015157� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of GNU Rush. # Copyright (C) 2019-2024 Sergey Poznyakoff # # GNU Rush is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Rush is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([group]) AT_KEYWORDS([group]) AT_RUSH_TEST([ rush 2.0 rule match \$group == $MY_GROUP ], [cmdline,argv,prog], [ls /], [0], [{ "cmdline":"ls /", "argv":[[ "ls", "/" ]], "prog":null } ], []) AT_RUSH_TEST([ rush 2.0 rule match \$group != $MY_GROUP ], [cmdline,argv,prog], [ls /], [1], [], [rush: Error: no matching rule for "ls /", user $MY_USER ]) AT_CLEANUP ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/tests/testsuite.at�������������������������������������������������������������������������0000644�0001750�0001750�00000007305�14643176124�016064� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of GNU Rush. # Copyright (C) 2008-2024 Sergey Poznyakoff # # GNU Rush is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Rush is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. m4_version_prereq([2.52g]) m4_define([AT_SKIP_TEST],[exit 77]) dnl m4_run_rush([KW], [CMD],[EC],[STDOUT],[STDERR],...) m4_define([m4_run_rush],[m4_ifval([$2],[dnl echo "; m4_bpatsubst($2,",\\")" echo "; m4_bpatsubst($2,",\\")" >&2 m4_ifset([RUSH_ENVIRON],[env RUSH_ENVIRON $RUSHDIR/])rush -C none -D$1 dnl m4_if([$2],[interactive],[-i],[-c "m4_bpatsubst($2,",\\")"]) test.conf echo "; $?" $0([$1],m4_shiftn(5, $@))])]) dnl m4_fmt_out([CMD],[EC],[STDOUT],[STDERR],...) m4_define([m4_fmt_out],[m4_ifval([$1],[dnl ; $1 $3[]dnl ; $2 $0(m4_shift(m4_shift3($@)))])]) dnl m4_fmt_err([CMD],[EC],[STDOUT],[STDERR],...) m4_define([m4_fmt_err],[m4_ifval([$1],[dnl ; $1 $4[]dnl $0(m4_shift(m4_shift3($@)))])]) dnl AT_RUSH_TEST([CONFIG],[KW], [CMD],[EC],[STDOUT],[STDERR]) m4_define([AT_RUSH_TEST],[ myvars AT_CHECK_UNQUOTED([ cat > test.conf <<EOT [$1] EOT m4_run_rush(m4_shift($@)) ], [0], [m4_fmt_out(m4_shift2($@))], [m4_fmt_err(m4_shift2($@))])]) # AT_INIT AT_TESTED([rush]) m4_include([lex.at]) AT_BANNER([Base]) m4_include([null.at]) m4_include([qstr.at]) m4_include([setvar.at]) m4_include([unsetvar.at]) m4_include([undef.at]) AT_BANNER([Simple Conditions]) m4_include([argc.at]) m4_include([command.at]) m4_include([matcharg.at]) m4_include([matchprog.at]) m4_include([regexp.at]) m4_include([uid.at]) m4_include([user.at]) m4_include([in.at]) m4_include([gid.at]) m4_include([group.at]) m4_include([fstest.at]) AT_BANNER([Complex Conditions]) m4_include([and.at]) m4_include([or.at]) m4_include([compound.at]) AT_BANNER([Transformations]) m4_include([set.at]) m4_include([delete.at]) m4_include([transform.at]) m4_include([map.at]) m4_include([insert.at]) m4_include([remopt.at]) AT_BANNER([Rule attributes]) m4_include([umask.at]) m4_include([newgrp.at]) m4_include([chdir.at]) m4_include([interactive.at]) AT_BANNER([Environment]) m4_include([clrenv.at]) m4_include([unsetenv.at]) m4_include([keepenv.at]) m4_include([setenv.at]) m4_include([evalenv.at]) AT_BANNER([Features]) m4_include([backref.at]) AT_BANNER([Flow control]) m4_include([fallthrough.at]) m4_include([error.at]) AT_BANNER([Includes]) m4_include([inc00.at]) m4_include([inc01.at]) AT_BANNER([Legacy configuration]) dnl AT_BANNER([Conditionals]) m4_include([legacy/argc.at]) m4_include([legacy/command.at]) m4_include([legacy/match.at]) m4_include([legacy/matchprog.at]) m4_include([legacy/uid.at]) m4_include([legacy/gid.at]) dnl AT_BANNER([Transformations]) m4_include([legacy/set.at]) m4_include([legacy/delete.at]) m4_include([legacy/transform.at]) m4_include([legacy/map.at]) dnl AT_BANNER([Actions]) m4_include([legacy/umask.at]) m4_include([legacy/newgrp.at]) # FIXME: No way to test chroot & limits m4_include([legacy/chdir.at]) m4_include([legacy/env.at]) dnl AT_BANNER([Features]) m4_include([legacy/interactive.at]) m4_include([legacy/fallthrough.at]) dnl FIXME: dnl m4_include([legacy/fork.at]) dnl m4_include([legacy/acct.at]) dnl m4_include([legacy/notification.at]) m4_include([legacy/error.at]) m4_include([legacy/backref.at]) m4_include([legacy/setvar.at]) m4_include([legacy/unsetvar.at]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/tests/qstr.at������������������������������������������������������������������������������0000644�0001750�0001750�00000002407�14643176123�015021� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of GNU Rush. # Copyright (C) 2016-2024 Sergey Poznyakoff # # GNU Rush is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Rush is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([quoted strings]) AT_KEYWORDS([qstr string]) AT_CHECK( [AT_DATA([test.cf],[rush 2.0 rule set t1 = "simple text" set t2 = "simple\btext\040with e\163capes \%3" set t3 = "multiline\ text\ " set t4 = "complex\r\n\ multiline\r\n\ text" set t5 = "bad \&escape" ]) rush -C none -D vars -c "ls" test.cf ], [0], [{ "vars":{ "t1":"simple text", "t2":"simple\btext with escapes %3", "t3":"multiline text", "t4":"complex\r\nmultiline\r\ntext", "t5":"bad \\&escape" } } ], [rush: Error: test.cf:11.17-19: unrecognized escape \& ]) AT_CLEANUP���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/tests/newgrp.at����������������������������������������������������������������������������0000644�0001750�0001750�00000001501�14643176123�015324� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of GNU Rush. # Copyright (C) 2016-2024 Sergey Poznyakoff # # GNU Rush is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Rush is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([newgrp]) AT_KEYWORDS([newgrp]) AT_RUSH_TEST([ rush 2.0 rule newgrp 0 ], [gid], [command], [0], [{ "gid":0 } ], []) AT_CLEANUP �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/tests/delete.at����������������������������������������������������������������������������0000644�0001750�0001750�00000003004�14643176121�015262� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of GNU Rush. # Copyright (C) 2019-2024 Sergey Poznyakoff # # GNU Rush is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Rush is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([delete]) AT_KEYWORDS([delete]) AT_RUSH_TEST([ rush 2.0 rule delete 1 ], [cmdline,argv,prog], [echo foo bar], [0], [{ "cmdline":"echo bar", "argv":[[ "echo", "bar" ]], "prog":null } ], []) AT_RUSH_TEST([ rush 2.0 rule delete -1 ], [cmdline,argv,prog], [echo foo bar], [0], [{ "cmdline":"echo foo", "argv":[[ "echo", "foo" ]], "prog":null } ], []) AT_RUSH_TEST([ rush 2.0 rule delete 2 4 ], [cmdline,argv,prog], [echo foo bar baz quux wum], [0], [{ "cmdline":"echo foo wum", "argv":[[ "echo", "foo", "wum" ]], "prog":null } ], []) AT_RUSH_TEST([ rush 2.0 rule delete 0 ], [cmdline,argv,prog], [echo foo bar], [1], [], [rush: Error: test.conf:4.10: \$0 cannot be deleted rush: Error: errors in configuration file ]) AT_CLEANUP ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/tests/setvar.at����������������������������������������������������������������������������0000644�0001750�0001750�00000002257�14643176124�015340� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of GNU Rush. # Copyright (C) 2019-2024 Sergey Poznyakoff # # GNU Rush is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Rush is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([setvar]) AT_KEYWORDS([setvar]) AT_RUSH_TEST([ rush 2.0 rule first set count = 1 set FOO = bar fall-through rule last set command = "\$FOO \$count" ], [cmdline,vars], [ls], [0], [{ "cmdline":"bar 1", "vars":{ "FOO":"bar", "count":"1" } } ], []) AT_RUSH_TEST([ rush 2.0 rule first set home = "$PWD" ], [cmdline,vars], [ls], [1], [], [rush: Error: test.conf:4.7-10: attempt to modify a read-only variable rush: Error: errors in configuration file ]) AT_CLEANUP �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/tests/clrenv.at����������������������������������������������������������������������������0000644�0001750�0001750�00000001513�14643176121�015314� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of GNU Rush. # Copyright (C) 2016-2024 Sergey Poznyakoff # # GNU Rush is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Rush is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([clrenv]) AT_KEYWORDS([clrenv]) AT_RUSH_TEST([ rush 2.0 rule clrenv ], [environ], [command], [0], [{ "environ":[[]] } ], []) AT_CLEANUP �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/tests/uid.at�������������������������������������������������������������������������������0000644�0001750�0001750�00000002072�14643176124�014610� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of GNU Rush. # Copyright (C) 2019-2024 Sergey Poznyakoff # # GNU Rush is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Rush is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([uid]) AT_KEYWORDS([uid]) AT_RUSH_TEST([ rush 2.0 rule match \$uid == $MY_UID ], [cmdline,argv,prog], [ls /], [0], [{ "cmdline":"ls /", "argv":[[ "ls", "/" ]], "prog":null } ], []) AT_RUSH_TEST([ rush 2.0 rule match \$uid != $MY_UID ], [cmdline,argv,prog], [ls /], [1], [], [rush: Error: no matching rule for "ls /", user $MY_USER ]) AT_CLEANUP ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/tests/user.at������������������������������������������������������������������������������0000644�0001750�0001750�00000002100�14643176124�014775� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of GNU Rush. # Copyright (C) 2019-2024 Sergey Poznyakoff # # GNU Rush is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Rush is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([user]) AT_KEYWORDS([user]) AT_RUSH_TEST([ rush 2.0 rule match \$user == $MY_USER ], [cmdline,argv,prog], [ls /], [0], [{ "cmdline":"ls /", "argv":[[ "ls", "/" ]], "prog":null } ], []) AT_RUSH_TEST([ rush 2.0 rule match \$user != $MY_USER ], [cmdline,argv,prog], [ls /], [1], [], [rush: Error: no matching rule for "ls /", user $MY_USER ]) AT_CLEANUP ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/tests/umask.at�����������������������������������������������������������������������������0000644�0001750�0001750�00000001506�14643176124�015150� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of GNU Rush. # Copyright (C) 2016-2024 Sergey Poznyakoff # # GNU Rush is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Rush is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([umask]) AT_KEYWORDS([umask]) AT_RUSH_TEST([ rush 2.0 rule umask 017 ], [umask], [command], [0], [{ "umask":017 } ], []) AT_CLEANUP ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/tests/testsuite����������������������������������������������������������������������������0000755�0001750�0001750�00001140535�14655401316�015465� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Generated from testsuite.at by GNU Autoconf 2.71. # # Copyright (C) 2009-2017, 2020-2021 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 as_nop=: if test ${ZSH_VERSION+y} && (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 $as_nop case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0</dev/null; fi if (exec 3>&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; 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 # 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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 printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="as_nop=: if test \${ZSH_VERSION+y} && (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 \$as_nop 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 \$as_nop exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 blah=\$(echo \$(echo blah)) test x\"\$blah\" = xblah || 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_nop as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null then : else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$as_shell as_have_required=yes if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null then : break 2 fi fi done;; esac as_found=false done IFS=$as_save_IFS if $as_found then : else $as_nop if { test -f "$SHELL" || test -f "$SHELL.exe"; } && as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$SHELL as_have_required=yes fi fi 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'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno then : printf "%s\n" "$0: This script requires a shell more modern than all" printf "%s\n" "$0: the shells that I found on your system." if test ${ZSH_VERSION+y} ; then printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should" printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later." else printf "%s\n" "$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_nop # --------- # Do nothing but, unlike ":", preserve the value of $?. as_fn_nop () { return $? } as_nop=as_fn_nop # 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=`printf "%s\n" "$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 || printf "%s\n" 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_nop 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_nop 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 printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$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 || printf "%s\n" 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" || { printf "%s\n" "$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 } # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. 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 # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_echo='printf %s\n' as_echo_n='printf %s' 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 # 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;lex.at:32;identifier;lex; 2;lex.at:40;unquoted string;lex; 3;lex.at:51;number;lex; 4;lex.at:67;quoted string;lex; 5;lex.at:75;escapes in quoted string;lex; 6;lex.at:83;multiline string;lex; 7;lex.at:93;complex multiline string;lex; 8;lex.at:103;invalid escape sequence;lex; 9;lex.at:111;unquoted variable;lex; 10;lex.at:119;unquoted variable with defaults;lex; 11;null.at:17;null;null; 12;qstr.at:17;quoted strings;qstr string; 13;setvar.at:17;setvar;setvar; 14;unsetvar.at:17;unsetvar;unsetvar; 15;undef.at:17;expanding undefined variables;undef; 16;argc.at:17;argc;argc; 17;command.at:17;command;command; 18;matcharg.at:17;match arg;match arg; 19;matchprog.at:17;match program name;matchprog; 20;regexp.at:17;regexp options;match regexp; 21;uid.at:17;uid;uid; 22;user.at:17;user;user; 23;in.at:17;in;in; 24;gid.at:17;gid;gid; 25;group.at:17;group;group; 26;fstest.at:51;basic filesystem tests;match fstest; 27;fstest.at:115;match -h;match fstest fs_symlink; 28;fstest.at:126;match -p;match fstest fs_pipe; 29;fstest.at:135;match -k;match fstest fs_sticky; 30;fstest.at:144;match -c;match fstest fs_char_special; 31;fstest.at:154;match -b;match fstest fs_block_special; 32;fstest.at:161;match -S;match fstest fs_socket; 33;fstest.at:171;match -O;match fstest fs_owner_euid; 34;fstest.at:180;match -G;match fstest fs_owner_egid; 35;fstest.at:189;match -u;match fstest fs_set_uid; 36;fstest.at:199;match -g;match fstest fs_set_gid; 37;and.at:17;and;match and; 38;or.at:17;or;match or; 39;compound.at:17;compound;match compound; 40;set.at:17;set;set; 41;delete.at:17;delete;delete; 42;transform.at:17;transform;transform; 43;map.at:17;map;map; 44;insert.at:17;insert;insert; 45;remopt.at:17;remopt;remopt; 46;umask.at:17;umask;umask; 47;newgrp.at:17;newgrp;newgrp; 48;chdir.at:17;chdir;chdir; 49;interactive.at:17;interactive;interactive; 50;clrenv.at:17;clrenv;clrenv; 51;unsetenv.at:17;unsetenv;unsetenv; 52;keepenv.at:17;keepenv;keepenv; 53;setenv.at:17;setenv;setenv; 54;evalenv.at:17;evalenv;evalenv; 55;backref.at:17;Back-reference expansion;backref; 56;fallthrough.at:17;fall-through;fallthrough fall-through; 57;error.at:17;error;error; 58;inc00.at:17;basic include functionality;inc00 inc include; 59;inc01.at:17;rule and global statements;inc01 inc include; 60;argc.at:17;argc;argc; 61;command.at:17;command;command; 62;match.at:17;match;match; 63;matchprog.at:17;match program name;matchprog; 64;uid.at:17;uid;uid; 65;gid.at:17;gid;gid; 66;set.at:17;set;set; 67;delete.at:17;delete;delete; 68;transform.at:17;transform;transform; 69;map.at:17;map;map; 70;umask.at:17;umask;umask; 71;newgrp.at:17;newgrp;newgrp; 72;chdir.at:17;chdir;chdir; 73;env.at:17;env;env; 74;interactive.at:17;interactive;interactive; 75;fallthrough.at:17;fall-through;fallthrough fall-through; 76;error.at:17;error;error; 77;backref.at:17;Back-reference expansion;backref; 78;setvar.at:17;setvar;setvar; 79;unsetvar.at:17;unsetvar;unsetvar; " # List of the all the test groups. at_groups_all=`printf "%s\n" "$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 79; then printf "%s\n" "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 } # List of the tested programs. at_tested='"rush"' 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 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=`printf "%s\n" "$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=`printf "%s\n" "$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=`printf "%s\n" "$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=`printf "%s\n" "$at_groups_selected" | grep -i $at_invert "^[1-9][^;]*;.*[; ]$at_keyword[ ;]"` done # Smash the keywords. at_groups_selected=`printf "%s\n" "$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=`printf "%s\n" "$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'" ;; *) printf "%s\n" "$as_me: invalid option: $at_option" >&2 printf "%s\n" "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=`printf "%s\n" "$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-rush@gnu.org>. General help using GNU software: <https://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 rush 2.4 test suite test groups: NUM: FILE-NAME:LINE TEST-GROUP-NAME KEYWORDS _ATEOF # Pass an empty line as separator between selected groups and help. printf "%s\n" "$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 printf "%s\n" "$as_me (GNU rush 2.4)" && cat <<\_ATEOF || at_write_fail=1 Copyright (C) 2021 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. lex.at:17 # Category starts at test group 1. at_banner_text_1="Lexical structure" # Banner 2. testsuite.at:62 # Category starts at test group 11. at_banner_text_2="Base" # Banner 3. testsuite.at:69 # Category starts at test group 16. at_banner_text_3="Simple Conditions" # Banner 4. testsuite.at:82 # Category starts at test group 37. at_banner_text_4="Complex Conditions" # Banner 5. testsuite.at:87 # Category starts at test group 40. at_banner_text_5="Transformations" # Banner 6. testsuite.at:95 # Category starts at test group 46. at_banner_text_6="Rule attributes" # Banner 7. testsuite.at:101 # Category starts at test group 50. at_banner_text_7="Environment" # Banner 8. testsuite.at:108 # Category starts at test group 55. at_banner_text_8="Features" # Banner 9. testsuite.at:111 # Category starts at test group 56. at_banner_text_9="Flow control" # Banner 10. testsuite.at:115 # Category starts at test group 58. at_banner_text_10="Includes" # Banner 11. testsuite.at:119 # Category starts at test group 60. at_banner_text_11="Legacy configuration" # 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=`printf "%s\n" "$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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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. printf "%s\n" "## ------------------------ ## ## GNU rush 2.4 test suite. ## ## ------------------------ ##" { printf "%s\n" "## ------------------------ ## ## GNU rush 2.4 test suite. ## ## ------------------------ ##" echo printf "%s\n" "$as_me: command line was:" printf "%s\n" " \$ $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 printf "%s\n" "## ---------- ## ## 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac printf "%s\n" "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 printf "%s\n" "$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 printf "%s\n" "$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)" printf "%s\n" "$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 () { printf "%s\n" "$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 printf "%s\n" "$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=: printf "%s\n" "$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=: printf "%s\n" "$3: hard failure"; exit 99;; *) printf "%s\n" "$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+y} && alias -g '\''${1+"$@"}'\''='\''"$@"'\''' && printf "%s\n" "cd '$at_dir'" && printf "%s\n" "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. ## ## -------------------------------- ## { printf "%s\n" "## ---------------- ## ## Tested programs. ## ## ---------------- ##" echo } >&5 # Report what programs are being tested. for at_program in : `eval echo $at_tested` do case $at_program in #( :) : continue ;; #( [\\/]* | ?:[\\/]*) : at_program_=$at_program ;; #( *) : as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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 { printf "%s\n" "$at_srcdir/testsuite.at:56: $at_program_ --version" "$at_program_" --version </dev/null echo } >&5 2>&1 else as_fn_error $? "cannot find $at_program" "$LINENO" 5 fi done { printf "%s\n" "## ------------------ ## ## Running the tests. ## ## ------------------ ##" } >&5 at_start_date=`date` at_start_time=`date +%s 2>/dev/null` printf "%s\n" "$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 || { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: test directory for $at_group_normalized could not be cleaned" >&5 printf "%s\n" "$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 printf %s "$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-rush@gnu.org>. _ATEOF printf "%s\n" "$at_setup_line" >"$at_check_line_file" at_status=99 fi $at_verbose printf %s "$at_group. $at_setup_line: " printf %s "$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 printf "%s\n" "$at_desc_line $at_color$at_msg$at_std" else # Make sure there is a separator even with long titles. printf "%s\n" " $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 printf "%s\n" "$at_log_msg" >> "$at_group_log" printf "%s\n" "$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. printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: caught signal $at_signame, bailing out" >&5 printf "%s\n" "$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+y} && 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=`printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unable to parse test group: $at_group" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unable to parse test group: $at_group" >&5 printf "%s\n" "$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` printf "%s\n" "$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" printf "%s\n" "$as_me: test suite duration: $at_duration" >&5 ;; esac echo printf "%s\n" "## ------------- ## ## Test results. ## ## ------------- ##" echo { echo printf "%s\n" "## ------------- ## ## 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 printf "%s\n" "## ------------------------ ## ## 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 printf "%s\n" "## ---------------------- ## ## 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 at_msg1a=${at_xpass_list:+', '} at_msg1=$at_fail_list${at_fail_list:+" failed$at_msg1a"} at_msg2=$at_xpass_list${at_xpass_list:+" passed unexpectedly"} printf "%s\n" "Please send $at_msg and all information you think might help: To: <bug-rush@gnu.org> Subject: [GNU rush 2.4] $as_me: $at_msg1$at_msg2 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 'lex.at:32' \ "identifier" " " 1 at_xfail=no ( printf "%s\n" "1. $at_setup_line: testing $at_desc ..." $at_traceon { set +x printf "%s\n" "$at_srcdir/lex.at:32: rush -T <<'EOT' rule test EOT " at_fn_check_prepare_notrace 'an embedded newline' "lex.at:32" ( $at_check_trace; rush -T <<'EOT' rule 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"; printf "%s\n" "state 2, stdin:1.1-4: 'rule' state 2, stdin:1.6-9: IDENT test state 1, stdin:1.10-2: EOL " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/lex.at:32" $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 'lex.at:40' \ "unquoted string" " " 1 at_xfail=no ( printf "%s\n" "2. $at_setup_line: testing $at_desc ..." $at_traceon { set +x printf "%s\n" "$at_srcdir/lex.at:40: rush -T <<'EOT' rule /un.quoted,string&() EOT " at_fn_check_prepare_notrace 'an embedded newline' "lex.at:40" ( $at_check_trace; rush -T <<'EOT' rule /un.quoted,string&() 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"; printf "%s\n" "state 2, stdin:1.1-4: 'rule' state 2, stdin:1.6-22: STRING \"/un.quoted,string\" state 2, stdin:1.23: '&' state 2, stdin:1.24: '(' state 2, stdin:1.25: ')' state 1, stdin:1.26-2: EOL " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/lex.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_2 #AT_START_3 at_fn_group_banner 3 'lex.at:51' \ "number" " " 1 at_xfail=no ( printf "%s\n" "3. $at_setup_line: testing $at_desc ..." $at_traceon { set +x printf "%s\n" "$at_srcdir/lex.at:51: rush -T <<'EOT' rule 10 rule +10 rule -10 EOT " at_fn_check_prepare_notrace 'an embedded newline' "lex.at:51" ( $at_check_trace; rush -T <<'EOT' rule 10 rule +10 rule -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"; printf "%s\n" "state 2, stdin:1.1-4: 'rule' state 2, stdin:1.6-7: NUMBER 10 state 1, stdin:1.8-2: EOL state 2, stdin:2.1-4: 'rule' state 2, stdin:2.6-8: NUMBER +10 state 1, stdin:2.9-3: EOL state 2, stdin:3.1-4: 'rule' state 2, stdin:3.6-8: NUMBER -10 state 1, stdin:3.9-4: EOL " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/lex.at:51" $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 'lex.at:67' \ "quoted string" " " 1 at_xfail=no ( printf "%s\n" "4. $at_setup_line: testing $at_desc ..." $at_traceon { set +x printf "%s\n" "$at_srcdir/lex.at:67: rush -T <<'EOT' rule \"input string\" EOT " at_fn_check_prepare_notrace 'an embedded newline' "lex.at:67" ( $at_check_trace; rush -T <<'EOT' rule "input string" 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"; printf "%s\n" "state 2, stdin:1.1-4: 'rule' state 2, stdin:1.6-19: STRING \"input string\" state 1, stdin:1.20-2: EOL " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/lex.at:67" $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 'lex.at:75' \ "escapes in quoted string" " " 1 at_xfail=no ( printf "%s\n" "5. $at_setup_line: testing $at_desc ..." $at_traceon { set +x printf "%s\n" "$at_srcdir/lex.at:75: rush -T <<'EOT' rule \"simple\\btext\\040with e\\163capes \\%3\" EOT " at_fn_check_prepare_notrace 'an embedded newline' "lex.at:75" ( $at_check_trace; rush -T <<'EOT' rule "simple\btext\040with e\163capes \%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"; printf "%s\n" "state 2, stdin:1.1-4: 'rule' state 2, stdin:1.6-42: STRING \"simple\\btext with escapes \\\\%3\" state 1, stdin:1.43-2: EOL " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/lex.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_5 #AT_START_6 at_fn_group_banner 6 'lex.at:83' \ "multiline string" " " 1 at_xfail=no ( printf "%s\n" "6. $at_setup_line: testing $at_desc ..." $at_traceon { set +x printf "%s\n" "$at_srcdir/lex.at:83: rush -T <<'EOT' rule \"multiline\\ text\\ \" EOT " at_fn_check_prepare_notrace 'an embedded newline' "lex.at:83" ( $at_check_trace; rush -T <<'EOT' rule "multiline\ 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"; printf "%s\n" "state 2, stdin:1.1-4: 'rule' state 2, stdin:1.6-3.1: STRING \"multiline text\" state 1, stdin:3.2-4: EOL " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/lex.at:83" $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 'lex.at:93' \ "complex multiline string" " " 1 at_xfail=no ( printf "%s\n" "7. $at_setup_line: testing $at_desc ..." $at_traceon { set +x printf "%s\n" "$at_srcdir/lex.at:93: rush -T <<'EOT' rule \"a \\\"com\\x70lex\\r\\n\\ multiline\\\"\\r\\n\\ text\" EOT " at_fn_check_prepare_notrace 'an embedded newline' "lex.at:93" ( $at_check_trace; rush -T <<'EOT' rule "a \"com\x70lex\r\n\ multiline\"\r\n\ 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"; printf "%s\n" "state 2, stdin:1.1-4: 'rule' state 2, stdin:1.6-3.5: STRING \"a \\\"complex\\r\\nmultiline\\\"\\r\\ntext\" state 1, stdin:3.6-4: EOL " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/lex.at:93" $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 'lex.at:103' \ "invalid escape sequence" " " 1 at_xfail=no ( printf "%s\n" "8. $at_setup_line: testing $at_desc ..." $at_traceon { set +x printf "%s\n" "$at_srcdir/lex.at:103: rush -T <<'EOT' rule \"bad \\&escape\" EOT " at_fn_check_prepare_notrace 'an embedded newline' "lex.at:103" ( $at_check_trace; rush -T <<'EOT' rule "bad \&escape" 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"; printf "%s\n" "state 2, stdin:1.1-4: 'rule' state 2, stdin:1.6-19: STRING \"bad \\\\&escape\" state 1, stdin:1.20-2: EOL " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/lex.at:103" $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 'lex.at:111' \ "unquoted variable" " " 1 at_xfail=no ( printf "%s\n" "9. $at_setup_line: testing $at_desc ..." $at_traceon { set +x printf "%s\n" "$at_srcdir/lex.at:111: rush -T <<'EOT' rule \$VAR EOT " at_fn_check_prepare_notrace 'an embedded newline' "lex.at:111" ( $at_check_trace; rush -T <<'EOT' rule $VAR 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"; printf "%s\n" "state 2, stdin:1.1-4: 'rule' state 2, stdin:1.6-9: STRING \"\$VAR\" state 1, stdin:1.10-2: EOL " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/lex.at:111" $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 'lex.at:119' \ "unquoted variable with defaults" " " 1 at_xfail=no ( printf "%s\n" "10. $at_setup_line: testing $at_desc ..." $at_traceon { set +x printf "%s\n" "$at_srcdir/lex.at:119: rush -T <<'EOT' rule \${VAR:-\"string\\ \\145\\x6et \${SUBVAR=:} \\\"test\\\"\"} EOT " at_fn_check_prepare_notrace 'a ${...} parameter expansion' "lex.at:119" ( $at_check_trace; rush -T <<'EOT' rule ${VAR:-"string\ \145\x6et ${SUBVAR=:} \"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"; printf "%s\n" "state 2, stdin:1.1-4: 'rule' state 2, stdin:1.6-2.32: STRING \"\${VAR:-\\\"string\\\\145\\\\x6et \${SUBVAR=:} \\\\\\\"test\\\\\\\"\\\"}\" state 1, stdin:2.33-3: EOL " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/lex.at:119" $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 'null.at:17' \ "null" " " 2 at_xfail=no ( printf "%s\n" "11. $at_setup_line: testing $at_desc ..." $at_traceon myvars { set +x printf "%s\n" "$at_srcdir/null.at:20: cat > test.conf <<EOT rush 2.0 EOT echo \"; /usr/bin/echo foo\" echo \"; /usr/bin/echo foo\" >&2 rush -C none -Dall -c \"/usr/bin/echo foo\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "null.at:20" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 EOT echo "; /usr/bin/echo foo" echo "; /usr/bin/echo foo" >&2 rush -C none -Dall -c "/usr/bin/echo foo" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; /usr/bin/echo foo rush: Error: no matching rule for \"/usr/bin/echo foo\", user $MY_USER " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; /usr/bin/echo foo ; 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/null.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 'qstr.at:17' \ "quoted strings" " " 2 at_xfail=no ( printf "%s\n" "12. $at_setup_line: testing $at_desc ..." $at_traceon { set +x printf "%s\n" "$at_srcdir/qstr.at:20: cat >test.cf <<'_ATEOF' rush 2.0 rule set t1 = \"simple text\" set t2 = \"simple\\btext\\040with e\\163capes \\%3\" set t3 = \"multiline\\ text\\ \" set t4 = \"complex\\r\\n\\ multiline\\r\\n\\ text\" set t5 = \"bad \\&escape\" _ATEOF rush -C none -D vars -c \"ls\" test.cf " at_fn_check_prepare_notrace 'an embedded newline' "qstr.at:20" ( $at_check_trace; cat >test.cf <<'_ATEOF' rush 2.0 rule set t1 = "simple text" set t2 = "simple\btext\040with e\163capes \%3" set t3 = "multiline\ text\ " set t4 = "complex\r\n\ multiline\r\n\ text" set t5 = "bad \&escape" _ATEOF rush -C none -D vars -c "ls" test.cf ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "rush: Error: test.cf:11.17-19: unrecognized escape \\& " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "{ \"vars\":{ \"t1\":\"simple text\", \"t2\":\"simple\\btext with escapes %3\", \"t3\":\"multiline text\", \"t4\":\"complex\\r\\nmultiline\\r\\ntext\", \"t5\":\"bad \\\\&escape\" } } " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/qstr.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 'setvar.at:17' \ "setvar" " " 2 at_xfail=no ( printf "%s\n" "13. $at_setup_line: testing $at_desc ..." $at_traceon myvars { set +x printf "%s\n" "$at_srcdir/setvar.at:19: cat > test.conf <<EOT rush 2.0 rule first set count = 1 set FOO = bar fall-through rule last set command = \"\\\$FOO \\\$count\" EOT echo \"; ls\" echo \"; ls\" >&2 rush -C none -Dcmdline,vars -c \"ls\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "setvar.at:19" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule first set count = 1 set FOO = bar fall-through rule last set command = "\$FOO \$count" EOT echo "; ls" echo "; ls" >&2 rush -C none -Dcmdline,vars -c "ls" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; ls " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; ls { \"cmdline\":\"bar 1\", \"vars\":{ \"FOO\":\"bar\", \"count\":\"1\" } } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/setvar.at:19" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/setvar.at:42: cat > test.conf <<EOT rush 2.0 rule first set home = \"\$PWD\" EOT echo \"; ls\" echo \"; ls\" >&2 rush -C none -Dcmdline,vars -c \"ls\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "setvar.at:42" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule first set home = "$PWD" EOT echo "; ls" echo "; ls" >&2 rush -C none -Dcmdline,vars -c "ls" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; ls rush: Error: test.conf:4.7-10: attempt to modify a read-only variable rush: Error: errors in configuration file " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; ls ; 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/setvar.at:42" $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 'unsetvar.at:17' \ "unsetvar" " " 2 at_xfail=no ( printf "%s\n" "14. $at_setup_line: testing $at_desc ..." $at_traceon myvars { set +x printf "%s\n" "$at_srcdir/unsetvar.at:19: cat > test.conf <<EOT rush 2.0 rule first set count = 1 set FOO = bar fall-through rule intermediate unset count fall-through rule last set command = \"\\\$FOO \\\${count:-}\" EOT echo \"; ls\" echo \"; ls\" >&2 rush -C none -Dcmdline,vars -c \"ls\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'a ${...} parameter expansion' "unsetvar.at:19" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule first set count = 1 set FOO = bar fall-through rule intermediate unset count fall-through rule last set command = "\$FOO \${count:-}" EOT echo "; ls" echo "; ls" >&2 rush -C none -Dcmdline,vars -c "ls" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; ls " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; ls { \"cmdline\":\"bar \", \"vars\":{ \"FOO\":\"bar\" } } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/unsetvar.at:19" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/unsetvar.at:45: cat > test.conf <<EOT rush 2.0 rule first unset home EOT echo \"; ls\" echo \"; ls\" >&2 rush -C none -Dcmdline,vars -c \"ls\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "unsetvar.at:45" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule first unset home EOT echo "; ls" echo "; ls" >&2 rush -C none -Dcmdline,vars -c "ls" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; ls rush: Error: test.conf:4.9-12: attempt to modify a read-only variable rush: Error: errors in configuration file " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; ls ; 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/unsetvar.at:45" $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 'undef.at:17' \ "expanding undefined variables" " " 2 at_xfail=no ( printf "%s\n" "15. $at_setup_line: testing $at_desc ..." $at_traceon myvars { set +x printf "%s\n" "$at_srcdir/undef.at:21: cat > test.conf <<EOT rush 2.0 rule first set command = \\\$COMMAND EOT echo \"; ls\" echo \"; ls\" >&2 env -i \$RUSHDIR/rush -C none -Dcmdline -c \"ls\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "undef.at:21" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule first set command = \$COMMAND EOT echo "; ls" echo "; ls" >&2 env -i $RUSHDIR/rush -C none -Dcmdline -c "ls" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; ls rush: Error: undefined variable: COMMAND " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; ls ; 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/undef.at:21" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/undef.at:33: cat > test.conf <<EOT rush 2.0 rule first set command = \\\${COMMAND:-\\\$command} EOT echo \"; ls\" echo \"; ls\" >&2 env -i \$RUSHDIR/rush -C none -Dcmdline -c \"ls\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'a ${...} parameter expansion' "undef.at:33" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule first set command = \${COMMAND:-\$command} EOT echo "; ls" echo "; ls" >&2 env -i $RUSHDIR/rush -C none -Dcmdline -c "ls" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; ls " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; ls { \"cmdline\":\"ls\" } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/undef.at:33" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/undef.at:47: cat > test.conf <<EOT rush 2.0 global expand-undefined true rule first set command = \\\$COMMAND EOT echo \"; ls\" echo \"; ls\" >&2 env -i \$RUSHDIR/rush -C none -Dcmdline -c \"ls\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "undef.at:47" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 global expand-undefined true rule first set command = \$COMMAND EOT echo "; ls" echo "; ls" >&2 env -i $RUSHDIR/rush -C none -Dcmdline -c "ls" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; ls " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; ls { \"cmdline\":\"\" } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/undef.at:47" $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 'argc.at:17' \ "argc" " " 3 at_xfail=no ( printf "%s\n" "16. $at_setup_line: testing $at_desc ..." $at_traceon myvars { set +x printf "%s\n" "$at_srcdir/argc.at:20: cat > test.conf <<EOT rush 2.0 rule match \\\$# == 2 EOT echo \"; /usr/bin/echo foo\" echo \"; /usr/bin/echo foo\" >&2 rush -C none -Dcmdline,argv,prog,interactive,fork,acct -c \"/usr/bin/echo foo\" test.conf echo \"; \$?\" echo \"; /usr/bin/echo foo bar\" echo \"; /usr/bin/echo foo bar\" >&2 rush -C none -Dcmdline,argv,prog,interactive,fork,acct -c \"/usr/bin/echo foo bar\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "argc.at:20" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match \$# == 2 EOT echo "; /usr/bin/echo foo" echo "; /usr/bin/echo foo" >&2 rush -C none -Dcmdline,argv,prog,interactive,fork,acct -c "/usr/bin/echo foo" test.conf echo "; $?" echo "; /usr/bin/echo foo bar" echo "; /usr/bin/echo foo bar" >&2 rush -C none -Dcmdline,argv,prog,interactive,fork,acct -c "/usr/bin/echo foo bar" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; /usr/bin/echo foo ; /usr/bin/echo foo bar rush: Error: no matching rule for \"/usr/bin/echo foo bar\", user $MY_USER " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; /usr/bin/echo foo { \"cmdline\":\"/usr/bin/echo foo\", \"argv\":[ \"/usr/bin/echo\", \"foo\" ], \"prog\":null, \"interactive\":0, \"fork\":-1, \"acct\":-1 } ; 0 ; /usr/bin/echo foo bar ; 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/argc.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 'command.at:17' \ "command" " " 3 at_xfail=no ( printf "%s\n" "17. $at_setup_line: testing $at_desc ..." $at_traceon myvars { set +x printf "%s\n" "$at_srcdir/command.at:20: cat > test.conf <<EOT rush 2.0 rule match \\\$command ~ \"echo[[:space:]]+foo\$\" EOT echo \"; /usr/bin/echo foo\" echo \"; /usr/bin/echo foo\" >&2 rush -C none -Dcmdline,argv,prog,interactive,fork,acct -c \"/usr/bin/echo foo\" test.conf echo \"; \$?\" echo \"; /usr/bin/echo foo bar\" echo \"; /usr/bin/echo foo bar\" >&2 rush -C none -Dcmdline,argv,prog,interactive,fork,acct -c \"/usr/bin/echo foo bar\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "command.at:20" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match \$command ~ "echo[[:space:]]+foo$" EOT echo "; /usr/bin/echo foo" echo "; /usr/bin/echo foo" >&2 rush -C none -Dcmdline,argv,prog,interactive,fork,acct -c "/usr/bin/echo foo" test.conf echo "; $?" echo "; /usr/bin/echo foo bar" echo "; /usr/bin/echo foo bar" >&2 rush -C none -Dcmdline,argv,prog,interactive,fork,acct -c "/usr/bin/echo foo bar" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; /usr/bin/echo foo ; /usr/bin/echo foo bar rush: Error: no matching rule for \"/usr/bin/echo foo bar\", user $MY_USER " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; /usr/bin/echo foo { \"cmdline\":\"/usr/bin/echo foo\", \"argv\":[ \"/usr/bin/echo\", \"foo\" ], \"prog\":null, \"interactive\":0, \"fork\":-1, \"acct\":-1 } ; 0 ; /usr/bin/echo foo bar ; 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/command.at:20" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/command.at:49: cat > test.conf <<EOT rush 2.0 rule match \\\$command == \"/bin/ls\" EOT echo \"; /bin/ls\" echo \"; /bin/ls\" >&2 rush -C none -Dcmdline,argv,prog,interactive,fork,acct -c \"/bin/ls\" test.conf echo \"; \$?\" echo \"; /bin/ls /\" echo \"; /bin/ls /\" >&2 rush -C none -Dcmdline,argv,prog,interactive,fork,acct -c \"/bin/ls /\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "command.at:49" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match \$command == "/bin/ls" EOT echo "; /bin/ls" echo "; /bin/ls" >&2 rush -C none -Dcmdline,argv,prog,interactive,fork,acct -c "/bin/ls" test.conf echo "; $?" echo "; /bin/ls /" echo "; /bin/ls /" >&2 rush -C none -Dcmdline,argv,prog,interactive,fork,acct -c "/bin/ls /" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; /bin/ls ; /bin/ls / rush: Error: no matching rule for \"/bin/ls /\", user $MY_USER " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; /bin/ls { \"cmdline\":\"/bin/ls\", \"argv\":[ \"/bin/ls\" ], \"prog\":null, \"interactive\":0, \"fork\":-1, \"acct\":-1 } ; 0 ; /bin/ls / ; 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/command.at:49" $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 'matcharg.at:17' \ "match arg" " " 3 at_xfail=no ( printf "%s\n" "18. $at_setup_line: testing $at_desc ..." $at_traceon myvars { set +x printf "%s\n" "$at_srcdir/matcharg.at:20: cat > test.conf <<EOT rush 2.0 rule match \\\$1 ~ \"^fo+\\\$\" set RULE = 1 rule match \\\${1} ~ \"^ba\" set RULE = 2 rule match \\\${-1} ~ \"/\" set RULE = 3 EOT echo \"; /usr/bin/echo foo\" echo \"; /usr/bin/echo foo\" >&2 rush -C none -Dcmdline,vars -c \"/usr/bin/echo foo\" test.conf echo \"; \$?\" echo \"; /usr/bin/echo bar\" echo \"; /usr/bin/echo bar\" >&2 rush -C none -Dcmdline,vars -c \"/usr/bin/echo bar\" test.conf echo \"; \$?\" echo \"; /usr/bin/echo /var\" echo \"; /usr/bin/echo /var\" >&2 rush -C none -Dcmdline,vars -c \"/usr/bin/echo /var\" test.conf echo \"; \$?\" echo \"; /usr/bin/echo for\" echo \"; /usr/bin/echo for\" >&2 rush -C none -Dcmdline,vars -c \"/usr/bin/echo for\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'a ${...} parameter expansion' "matcharg.at:20" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match \$1 ~ "^fo+\$" set RULE = 1 rule match \${1} ~ "^ba" set RULE = 2 rule match \${-1} ~ "/" set RULE = 3 EOT echo "; /usr/bin/echo foo" echo "; /usr/bin/echo foo" >&2 rush -C none -Dcmdline,vars -c "/usr/bin/echo foo" test.conf echo "; $?" echo "; /usr/bin/echo bar" echo "; /usr/bin/echo bar" >&2 rush -C none -Dcmdline,vars -c "/usr/bin/echo bar" test.conf echo "; $?" echo "; /usr/bin/echo /var" echo "; /usr/bin/echo /var" >&2 rush -C none -Dcmdline,vars -c "/usr/bin/echo /var" test.conf echo "; $?" echo "; /usr/bin/echo for" echo "; /usr/bin/echo for" >&2 rush -C none -Dcmdline,vars -c "/usr/bin/echo for" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; /usr/bin/echo foo ; /usr/bin/echo bar ; /usr/bin/echo /var ; /usr/bin/echo for rush: Error: no matching rule for \"/usr/bin/echo for\", user $MY_USER " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; /usr/bin/echo foo { \"cmdline\":\"/usr/bin/echo foo\", \"vars\":{ \"RULE\":\"1\" } } ; 0 ; /usr/bin/echo bar { \"cmdline\":\"/usr/bin/echo bar\", \"vars\":{ \"RULE\":\"2\" } } ; 0 ; /usr/bin/echo /var { \"cmdline\":\"/usr/bin/echo /var\", \"vars\":{ \"RULE\":\"3\" } } ; 0 ; /usr/bin/echo for ; 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/matcharg.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 'matchprog.at:17' \ "match program name" " " 3 at_xfail=no ( printf "%s\n" "19. $at_setup_line: testing $at_desc ..." $at_traceon myvars { set +x printf "%s\n" "$at_srcdir/matchprog.at:20: cat > test.conf <<EOT rush 2.0 rule match \\\$0 ~ \"/usr/bin/.*\" EOT echo \"; /usr/bin/echo foo\" echo \"; /usr/bin/echo foo\" >&2 rush -C none -Dcmdline,argv,prog -c \"/usr/bin/echo foo\" test.conf echo \"; \$?\" echo \"; echo foo\" echo \"; echo foo\" >&2 rush -C none -Dcmdline,argv,prog -c \"echo foo\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "matchprog.at:20" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match \$0 ~ "/usr/bin/.*" EOT echo "; /usr/bin/echo foo" echo "; /usr/bin/echo foo" >&2 rush -C none -Dcmdline,argv,prog -c "/usr/bin/echo foo" test.conf echo "; $?" echo "; echo foo" echo "; echo foo" >&2 rush -C none -Dcmdline,argv,prog -c "echo foo" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; /usr/bin/echo foo ; echo foo rush: Error: no matching rule for \"echo foo\", user $MY_USER " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; /usr/bin/echo foo { \"cmdline\":\"/usr/bin/echo foo\", \"argv\":[ \"/usr/bin/echo\", \"foo\" ], \"prog\":null } ; 0 ; echo foo ; 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/matchprog.at:20" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/matchprog.at:46: cat > test.conf <<EOT rush 2.0 rule match \\\$program ~ \"/usr/bin/.*\" EOT echo \"; /usr/bin/echo foo\" echo \"; /usr/bin/echo foo\" >&2 rush -C none -Dcmdline,argv,prog -c \"/usr/bin/echo foo\" test.conf echo \"; \$?\" echo \"; echo foo\" echo \"; echo foo\" >&2 rush -C none -Dcmdline,argv,prog -c \"echo foo\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "matchprog.at:46" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match \$program ~ "/usr/bin/.*" EOT echo "; /usr/bin/echo foo" echo "; /usr/bin/echo foo" >&2 rush -C none -Dcmdline,argv,prog -c "/usr/bin/echo foo" test.conf echo "; $?" echo "; echo foo" echo "; echo foo" >&2 rush -C none -Dcmdline,argv,prog -c "echo foo" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; /usr/bin/echo foo ; echo foo rush: Error: no matching rule for \"echo foo\", user $MY_USER " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; /usr/bin/echo foo { \"cmdline\":\"/usr/bin/echo foo\", \"argv\":[ \"/usr/bin/echo\", \"foo\" ], \"prog\":null } ; 0 ; echo foo ; 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/matchprog.at:46" $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 'regexp.at:17' \ "regexp options" " " 3 at_xfail=no ( printf "%s\n" "20. $at_setup_line: testing $at_desc ..." $at_traceon myvars { set +x printf "%s\n" "$at_srcdir/regexp.at:20: cat > test.conf <<EOT rush 2.0 rule match \\\$command ~ \"fo+\\\$\" EOT echo \"; ls foo\" echo \"; ls foo\" >&2 rush -C none -Dcmdline,argv -c \"ls foo\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "regexp.at:20" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match \$command ~ "fo+\$" EOT echo "; ls foo" echo "; ls foo" >&2 rush -C none -Dcmdline,argv -c "ls foo" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; ls foo " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; ls foo { \"cmdline\":\"ls foo\", \"argv\":[ \"ls\", \"foo\" ] } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/regexp.at:20" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/regexp.at:38: cat > test.conf <<EOT rush 2.0 rule match \\\$command !~ \"fo+\\\$\" EOT echo \"; ls foo\" echo \"; ls foo\" >&2 rush -C none -Dcmdline,argv -c \"ls foo\" test.conf echo \"; \$?\" echo \"; ls bar\" echo \"; ls bar\" >&2 rush -C none -Dcmdline,argv -c \"ls bar\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "regexp.at:38" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match \$command !~ "fo+\$" EOT echo "; ls foo" echo "; ls foo" >&2 rush -C none -Dcmdline,argv -c "ls foo" test.conf echo "; $?" echo "; ls bar" echo "; ls bar" >&2 rush -C none -Dcmdline,argv -c "ls bar" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; ls foo rush: Error: no matching rule for \"ls foo\", user $MY_USER ; ls bar " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; ls foo ; 1 ; ls bar { \"cmdline\":\"ls bar\", \"argv\":[ \"ls\", \"bar\" ] } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/regexp.at:38" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/regexp.at:63: cat > test.conf <<EOT rush 2.0 global regexp basic rule match \\\$command ~ \"fo+\\\$\" EOT echo \"; ls foo\" echo \"; ls foo\" >&2 rush -C none -Dcmdline,argv -c \"ls foo\" test.conf echo \"; \$?\" echo \"; ls fo+\" echo \"; ls fo+\" >&2 rush -C none -Dcmdline,argv -c \"ls fo+\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "regexp.at:63" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 global regexp basic rule match \$command ~ "fo+\$" EOT echo "; ls foo" echo "; ls foo" >&2 rush -C none -Dcmdline,argv -c "ls foo" test.conf echo "; $?" echo "; ls fo+" echo "; ls fo+" >&2 rush -C none -Dcmdline,argv -c "ls fo+" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; ls foo rush: Error: no matching rule for \"ls foo\", user $MY_USER ; ls fo+ " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; ls foo ; 1 ; ls fo+ { \"cmdline\":\"ls fo+\", \"argv\":[ \"ls\", \"fo+\" ] } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/regexp.at:63" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/regexp.at:90: cat > test.conf <<EOT rush 2.0 global regexp basic ignore-case rule match \\\$command ~ \"fo+\\\$\" EOT echo \"; ls Fo+\" echo \"; ls Fo+\" >&2 rush -C none -Dcmdline,argv -c \"ls Fo+\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "regexp.at:90" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 global regexp basic ignore-case rule match \$command ~ "fo+\$" EOT echo "; ls Fo+" echo "; ls Fo+" >&2 rush -C none -Dcmdline,argv -c "ls Fo+" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; ls Fo+ " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; ls Fo+ { \"cmdline\":\"ls Fo+\", \"argv\":[ \"ls\", \"Fo+\" ] } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/regexp.at:90" $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 'uid.at:17' \ "uid" " " 3 at_xfail=no ( printf "%s\n" "21. $at_setup_line: testing $at_desc ..." $at_traceon myvars { set +x printf "%s\n" "$at_srcdir/uid.at:20: cat > test.conf <<EOT rush 2.0 rule match \\\$uid == \$MY_UID EOT echo \"; ls /\" echo \"; ls /\" >&2 rush -C none -Dcmdline,argv,prog -c \"ls /\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "uid.at:20" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match \$uid == $MY_UID EOT echo "; ls /" echo "; ls /" >&2 rush -C none -Dcmdline,argv,prog -c "ls /" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; ls / " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; ls / { \"cmdline\":\"ls /\", \"argv\":[ \"ls\", \"/\" ], \"prog\":null } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/uid.at:20" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/uid.at:39: cat > test.conf <<EOT rush 2.0 rule match \\\$uid != \$MY_UID EOT echo \"; ls /\" echo \"; ls /\" >&2 rush -C none -Dcmdline,argv,prog -c \"ls /\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "uid.at:39" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match \$uid != $MY_UID EOT echo "; ls /" echo "; ls /" >&2 rush -C none -Dcmdline,argv,prog -c "ls /" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; ls / rush: Error: no matching rule for \"ls /\", user $MY_USER " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; ls / ; 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/uid.at:39" $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 'user.at:17' \ "user" " " 3 at_xfail=no ( printf "%s\n" "22. $at_setup_line: testing $at_desc ..." $at_traceon myvars { set +x printf "%s\n" "$at_srcdir/user.at:20: cat > test.conf <<EOT rush 2.0 rule match \\\$user == \$MY_USER EOT echo \"; ls /\" echo \"; ls /\" >&2 rush -C none -Dcmdline,argv,prog -c \"ls /\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "user.at:20" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match \$user == $MY_USER EOT echo "; ls /" echo "; ls /" >&2 rush -C none -Dcmdline,argv,prog -c "ls /" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; ls / " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; ls / { \"cmdline\":\"ls /\", \"argv\":[ \"ls\", \"/\" ], \"prog\":null } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/user.at:20" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/user.at:39: cat > test.conf <<EOT rush 2.0 rule match \\\$user != \$MY_USER EOT echo \"; ls /\" echo \"; ls /\" >&2 rush -C none -Dcmdline,argv,prog -c \"ls /\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "user.at:39" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match \$user != $MY_USER EOT echo "; ls /" echo "; ls /" >&2 rush -C none -Dcmdline,argv,prog -c "ls /" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; ls / rush: Error: no matching rule for \"ls /\", user $MY_USER " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; ls / ; 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/user.at:39" $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 'in.at:17' \ "in" " " 3 at_xfail=no ( printf "%s\n" "23. $at_setup_line: testing $at_desc ..." $at_traceon myvars { set +x printf "%s\n" "$at_srcdir/in.at:20: cat > test.conf <<EOT rush 2.0 rule match \\\$user in (root bin \$MY_USER daemon) EOT echo \"; ls /\" echo \"; ls /\" >&2 rush -C none -Dcmdline,argv,prog -c \"ls /\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "in.at:20" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match \$user in (root bin $MY_USER daemon) EOT echo "; ls /" echo "; ls /" >&2 rush -C none -Dcmdline,argv,prog -c "ls /" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; ls / " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; ls / { \"cmdline\":\"ls /\", \"argv\":[ \"ls\", \"/\" ], \"prog\":null } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/in.at:20" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/in.at:39: cat > test.conf <<EOT rush 2.0 rule match !(\\\$user in (root bin \$MY_USER daemon)) EOT echo \"; ls /\" echo \"; ls /\" >&2 rush -C none -Dcmdline,argv,prog -c \"ls /\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "in.at:39" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match !(\$user in (root bin $MY_USER daemon)) EOT echo "; ls /" echo "; ls /" >&2 rush -C none -Dcmdline,argv,prog -c "ls /" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; ls / rush: Error: no matching rule for \"ls /\", user $MY_USER " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; ls / ; 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/in.at:39" $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 'gid.at:17' \ "gid" " " 3 at_xfail=no ( printf "%s\n" "24. $at_setup_line: testing $at_desc ..." $at_traceon myvars { set +x printf "%s\n" "$at_srcdir/gid.at:20: cat > test.conf <<EOT rush 2.0 rule match \\\$gid == \$MY_GID EOT echo \"; ls /\" echo \"; ls /\" >&2 rush -C none -Dcmdline,argv,prog -c \"ls /\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "gid.at:20" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match \$gid == $MY_GID EOT echo "; ls /" echo "; ls /" >&2 rush -C none -Dcmdline,argv,prog -c "ls /" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; ls / " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; ls / { \"cmdline\":\"ls /\", \"argv\":[ \"ls\", \"/\" ], \"prog\":null } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/gid.at:20" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/gid.at:39: cat > test.conf <<EOT rush 2.0 rule match \\\$gid != \$MY_GID EOT echo \"; ls /\" echo \"; ls /\" >&2 rush -C none -Dcmdline,argv,prog -c \"ls /\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "gid.at:39" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match \$gid != $MY_GID EOT echo "; ls /" echo "; ls /" >&2 rush -C none -Dcmdline,argv,prog -c "ls /" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; ls / rush: Error: no matching rule for \"ls /\", user $MY_USER " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; ls / ; 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/gid.at:39" $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 'group.at:17' \ "group" " " 3 at_xfail=no ( printf "%s\n" "25. $at_setup_line: testing $at_desc ..." $at_traceon myvars { set +x printf "%s\n" "$at_srcdir/group.at:20: cat > test.conf <<EOT rush 2.0 rule match \\\$group == \$MY_GROUP EOT echo \"; ls /\" echo \"; ls /\" >&2 rush -C none -Dcmdline,argv,prog -c \"ls /\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "group.at:20" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match \$group == $MY_GROUP EOT echo "; ls /" echo "; ls /" >&2 rush -C none -Dcmdline,argv,prog -c "ls /" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; ls / " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; ls / { \"cmdline\":\"ls /\", \"argv\":[ \"ls\", \"/\" ], \"prog\":null } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/group.at:20" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/group.at:39: cat > test.conf <<EOT rush 2.0 rule match \\\$group != \$MY_GROUP EOT echo \"; ls /\" echo \"; ls /\" >&2 rush -C none -Dcmdline,argv,prog -c \"ls /\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "group.at:39" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match \$group != $MY_GROUP EOT echo "; ls /" echo "; ls /" >&2 rush -C none -Dcmdline,argv,prog -c "ls /" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; ls / rush: Error: no matching rule for \"ls /\", user $MY_USER " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; ls / ; 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/group.at:39" $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 'fstest.at:51' \ "basic filesystem tests" " " 3 at_xfail=no ( printf "%s\n" "26. $at_setup_line: testing $at_desc ..." $at_traceon # ############################## # test -e # ############################## { set +x printf "%s\n" "$at_srcdir/fstest.at:58: rm -f file" at_fn_check_prepare_trace "fstest.at:58" ( $at_check_trace; rm -f file ) >>"$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/fstest.at:58" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/fstest.at:58: cat > test.conf <<EOT rush 2.0 rule match -e file set SUCCESS = true EOT echo \"; cmd\" echo \"; cmd\" >&2 rush -C none -Dvars -c \"cmd\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:58" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match -e file set SUCCESS = true EOT echo "; cmd" echo "; cmd" >&2 rush -C none -Dvars -c "cmd" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; cmd rush: Error: no matching rule for \"cmd\", user $MY_USER " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; cmd ; 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:58" $at_failed && at_fn_log_failure $at_traceon; } { set +x printf "%s\n" "$at_srcdir/fstest.at:59: touch file" at_fn_check_prepare_trace "fstest.at:59" ( $at_check_trace; touch file ) >>"$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/fstest.at:59" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/fstest.at:59: cat > test.conf <<EOT rush 2.0 rule match -e file set SUCCESS = true EOT echo \"; cmd\" echo \"; cmd\" >&2 rush -C none -Dvars -c \"cmd\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:59" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match -e file set SUCCESS = true EOT echo "; cmd" echo "; cmd" >&2 rush -C none -Dvars -c "cmd" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; cmd " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; cmd { \"vars\":{ \"SUCCESS\":\"true\" } } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:59" $at_failed && at_fn_log_failure $at_traceon; } # ############################## # test -f # ############################## { set +x printf "%s\n" "$at_srcdir/fstest.at:64: rm -rf file" at_fn_check_prepare_trace "fstest.at:64" ( $at_check_trace; rm -rf file ) >>"$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/fstest.at:64" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/fstest.at:64: cat > test.conf <<EOT rush 2.0 rule match -f file set SUCCESS = true EOT echo \"; cmd\" echo \"; cmd\" >&2 rush -C none -Dvars -c \"cmd\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:64" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match -f file set SUCCESS = true EOT echo "; cmd" echo "; cmd" >&2 rush -C none -Dvars -c "cmd" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; cmd rush: Error: no matching rule for \"cmd\", user $MY_USER " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; cmd ; 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:64" $at_failed && at_fn_log_failure $at_traceon; } { set +x printf "%s\n" "$at_srcdir/fstest.at:65: touch file" at_fn_check_prepare_trace "fstest.at:65" ( $at_check_trace; touch file ) >>"$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/fstest.at:65" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/fstest.at:65: cat > test.conf <<EOT rush 2.0 rule match -f file set SUCCESS = true EOT echo \"; cmd\" echo \"; cmd\" >&2 rush -C none -Dvars -c \"cmd\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:65" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match -f file set SUCCESS = true EOT echo "; cmd" echo "; cmd" >&2 rush -C none -Dvars -c "cmd" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; cmd " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; cmd { \"vars\":{ \"SUCCESS\":\"true\" } } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:65" $at_failed && at_fn_log_failure $at_traceon; } { set +x printf "%s\n" "$at_srcdir/fstest.at:66: rm -f file && mkdir file" at_fn_check_prepare_trace "fstest.at:66" ( $at_check_trace; rm -f file && mkdir file ) >>"$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/fstest.at:66" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/fstest.at:66: cat > test.conf <<EOT rush 2.0 rule match -f file set SUCCESS = true EOT echo \"; cmd\" echo \"; cmd\" >&2 rush -C none -Dvars -c \"cmd\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:66" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match -f file set SUCCESS = true EOT echo "; cmd" echo "; cmd" >&2 rush -C none -Dvars -c "cmd" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; cmd rush: Error: no matching rule for \"cmd\", user $MY_USER " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; cmd ; 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:66" $at_failed && at_fn_log_failure $at_traceon; } # ############################## # test -d # ############################## { set +x printf "%s\n" "$at_srcdir/fstest.at:71: rm -rf file" at_fn_check_prepare_trace "fstest.at:71" ( $at_check_trace; rm -rf file ) >>"$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/fstest.at:71" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/fstest.at:71: cat > test.conf <<EOT rush 2.0 rule match -d file set SUCCESS = true EOT echo \"; cmd\" echo \"; cmd\" >&2 rush -C none -Dvars -c \"cmd\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:71" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match -d file set SUCCESS = true EOT echo "; cmd" echo "; cmd" >&2 rush -C none -Dvars -c "cmd" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; cmd rush: Error: no matching rule for \"cmd\", user $MY_USER " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; cmd ; 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:71" $at_failed && at_fn_log_failure $at_traceon; } { set +x printf "%s\n" "$at_srcdir/fstest.at:72: touch file" at_fn_check_prepare_trace "fstest.at:72" ( $at_check_trace; touch file ) >>"$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/fstest.at:72" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/fstest.at:72: cat > test.conf <<EOT rush 2.0 rule match -d file set SUCCESS = true EOT echo \"; cmd\" echo \"; cmd\" >&2 rush -C none -Dvars -c \"cmd\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:72" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match -d file set SUCCESS = true EOT echo "; cmd" echo "; cmd" >&2 rush -C none -Dvars -c "cmd" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; cmd rush: Error: no matching rule for \"cmd\", user $MY_USER " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; cmd ; 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:72" $at_failed && at_fn_log_failure $at_traceon; } { set +x printf "%s\n" "$at_srcdir/fstest.at:73: rm -f file && mkdir file" at_fn_check_prepare_trace "fstest.at:73" ( $at_check_trace; rm -f file && mkdir file ) >>"$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/fstest.at:73" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/fstest.at:73: cat > test.conf <<EOT rush 2.0 rule match -d file set SUCCESS = true EOT echo \"; cmd\" echo \"; cmd\" >&2 rush -C none -Dvars -c \"cmd\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:73" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match -d file set SUCCESS = true EOT echo "; cmd" echo "; cmd" >&2 rush -C none -Dvars -c "cmd" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; cmd " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; cmd { \"vars\":{ \"SUCCESS\":\"true\" } } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:73" $at_failed && at_fn_log_failure $at_traceon; } # ############################## # test -s # ############################## { set +x printf "%s\n" "$at_srcdir/fstest.at:78: rm -rf file" at_fn_check_prepare_trace "fstest.at:78" ( $at_check_trace; rm -rf file ) >>"$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/fstest.at:78" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/fstest.at:78: cat > test.conf <<EOT rush 2.0 rule match -s file set SUCCESS = true EOT echo \"; cmd\" echo \"; cmd\" >&2 rush -C none -Dvars -c \"cmd\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:78" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match -s file set SUCCESS = true EOT echo "; cmd" echo "; cmd" >&2 rush -C none -Dvars -c "cmd" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; cmd rush: Error: no matching rule for \"cmd\", user $MY_USER " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; cmd ; 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:78" $at_failed && at_fn_log_failure $at_traceon; } { set +x printf "%s\n" "$at_srcdir/fstest.at:79: touch file" at_fn_check_prepare_trace "fstest.at:79" ( $at_check_trace; touch file ) >>"$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/fstest.at:79" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/fstest.at:79: cat > test.conf <<EOT rush 2.0 rule match -s file set SUCCESS = true EOT echo \"; cmd\" echo \"; cmd\" >&2 rush -C none -Dvars -c \"cmd\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:79" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match -s file set SUCCESS = true EOT echo "; cmd" echo "; cmd" >&2 rush -C none -Dvars -c "cmd" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; cmd rush: Error: no matching rule for \"cmd\", user $MY_USER " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; cmd ; 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:79" $at_failed && at_fn_log_failure $at_traceon; } { set +x printf "%s\n" "$at_srcdir/fstest.at:80: echo \"test\" > file" at_fn_check_prepare_trace "fstest.at:80" ( $at_check_trace; echo "test" > file ) >>"$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/fstest.at:80" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/fstest.at:80: cat > test.conf <<EOT rush 2.0 rule match -s file set SUCCESS = true EOT echo \"; cmd\" echo \"; cmd\" >&2 rush -C none -Dvars -c \"cmd\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:80" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match -s file set SUCCESS = true EOT echo "; cmd" echo "; cmd" >&2 rush -C none -Dvars -c "cmd" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; cmd " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; cmd { \"vars\":{ \"SUCCESS\":\"true\" } } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:80" $at_failed && at_fn_log_failure $at_traceon; } # ############################## # test -r # ############################## { set +x printf "%s\n" "$at_srcdir/fstest.at:86: rm -rf file && touch file" at_fn_check_prepare_trace "fstest.at:86" ( $at_check_trace; rm -rf file && touch file ) >>"$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/fstest.at:86" $at_failed && at_fn_log_failure $at_traceon; } { set +x printf "%s\n" "$at_srcdir/fstest.at:87: chmod u=r file" at_fn_check_prepare_trace "fstest.at:87" ( $at_check_trace; chmod u=r file ) >>"$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/fstest.at:87" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/fstest.at:87: cat > test.conf <<EOT rush 2.0 rule match -r file set SUCCESS = true EOT echo \"; cmd\" echo \"; cmd\" >&2 rush -C none -Dvars -c \"cmd\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:87" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match -r file set SUCCESS = true EOT echo "; cmd" echo "; cmd" >&2 rush -C none -Dvars -c "cmd" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; cmd " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; cmd { \"vars\":{ \"SUCCESS\":\"true\" } } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:87" $at_failed && at_fn_log_failure $at_traceon; } { set +x printf "%s\n" "$at_srcdir/fstest.at:88: chmod g=r file" at_fn_check_prepare_trace "fstest.at:88" ( $at_check_trace; chmod g=r file ) >>"$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/fstest.at:88" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/fstest.at:88: cat > test.conf <<EOT rush 2.0 rule match -r file set SUCCESS = true EOT echo \"; cmd\" echo \"; cmd\" >&2 rush -C none -Dvars -c \"cmd\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:88" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match -r file set SUCCESS = true EOT echo "; cmd" echo "; cmd" >&2 rush -C none -Dvars -c "cmd" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; cmd " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; cmd { \"vars\":{ \"SUCCESS\":\"true\" } } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:88" $at_failed && at_fn_log_failure $at_traceon; } { set +x printf "%s\n" "$at_srcdir/fstest.at:89: chmod o=r file" at_fn_check_prepare_trace "fstest.at:89" ( $at_check_trace; chmod o=r file ) >>"$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/fstest.at:89" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/fstest.at:89: cat > test.conf <<EOT rush 2.0 rule match -r file set SUCCESS = true EOT echo \"; cmd\" echo \"; cmd\" >&2 rush -C none -Dvars -c \"cmd\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:89" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match -r file set SUCCESS = true EOT echo "; cmd" echo "; cmd" >&2 rush -C none -Dvars -c "cmd" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; cmd " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; cmd { \"vars\":{ \"SUCCESS\":\"true\" } } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:89" $at_failed && at_fn_log_failure $at_traceon; } { set +x printf "%s\n" "$at_srcdir/fstest.at:90: chmod a=r file" at_fn_check_prepare_trace "fstest.at:90" ( $at_check_trace; chmod a=r file ) >>"$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/fstest.at:90" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/fstest.at:90: cat > test.conf <<EOT rush 2.0 rule match -r file set SUCCESS = true EOT echo \"; cmd\" echo \"; cmd\" >&2 rush -C none -Dvars -c \"cmd\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:90" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match -r file set SUCCESS = true EOT echo "; cmd" echo "; cmd" >&2 rush -C none -Dvars -c "cmd" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; cmd " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; cmd { \"vars\":{ \"SUCCESS\":\"true\" } } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:90" $at_failed && at_fn_log_failure $at_traceon; } { set +x printf "%s\n" "$at_srcdir/fstest.at:91: chmod -r file" at_fn_check_prepare_trace "fstest.at:91" ( $at_check_trace; chmod -r file ) >>"$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/fstest.at:91" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/fstest.at:91: cat > test.conf <<EOT rush 2.0 rule match -r file set SUCCESS = true EOT echo \"; cmd\" echo \"; cmd\" >&2 rush -C none -Dvars -c \"cmd\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:91" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match -r file set SUCCESS = true EOT echo "; cmd" echo "; cmd" >&2 rush -C none -Dvars -c "cmd" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; cmd rush: Error: no matching rule for \"cmd\", user $MY_USER " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; cmd ; 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:91" $at_failed && at_fn_log_failure $at_traceon; } # ############################## # test -w # ############################## { set +x printf "%s\n" "$at_srcdir/fstest.at:97: chmod u=w file" at_fn_check_prepare_trace "fstest.at:97" ( $at_check_trace; chmod u=w file ) >>"$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/fstest.at:97" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/fstest.at:97: cat > test.conf <<EOT rush 2.0 rule match -w file set SUCCESS = true EOT echo \"; cmd\" echo \"; cmd\" >&2 rush -C none -Dvars -c \"cmd\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:97" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match -w file set SUCCESS = true EOT echo "; cmd" echo "; cmd" >&2 rush -C none -Dvars -c "cmd" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; cmd " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; cmd { \"vars\":{ \"SUCCESS\":\"true\" } } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:97" $at_failed && at_fn_log_failure $at_traceon; } { set +x printf "%s\n" "$at_srcdir/fstest.at:98: chmod g=w file" at_fn_check_prepare_trace "fstest.at:98" ( $at_check_trace; chmod g=w file ) >>"$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/fstest.at:98" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/fstest.at:98: cat > test.conf <<EOT rush 2.0 rule match -w file set SUCCESS = true EOT echo \"; cmd\" echo \"; cmd\" >&2 rush -C none -Dvars -c \"cmd\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:98" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match -w file set SUCCESS = true EOT echo "; cmd" echo "; cmd" >&2 rush -C none -Dvars -c "cmd" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; cmd " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; cmd { \"vars\":{ \"SUCCESS\":\"true\" } } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:98" $at_failed && at_fn_log_failure $at_traceon; } { set +x printf "%s\n" "$at_srcdir/fstest.at:99: chmod o=w file" at_fn_check_prepare_trace "fstest.at:99" ( $at_check_trace; chmod o=w file ) >>"$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/fstest.at:99" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/fstest.at:99: cat > test.conf <<EOT rush 2.0 rule match -w file set SUCCESS = true EOT echo \"; cmd\" echo \"; cmd\" >&2 rush -C none -Dvars -c \"cmd\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:99" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match -w file set SUCCESS = true EOT echo "; cmd" echo "; cmd" >&2 rush -C none -Dvars -c "cmd" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; cmd " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; cmd { \"vars\":{ \"SUCCESS\":\"true\" } } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:99" $at_failed && at_fn_log_failure $at_traceon; } { set +x printf "%s\n" "$at_srcdir/fstest.at:100: chmod a=w file" at_fn_check_prepare_trace "fstest.at:100" ( $at_check_trace; chmod a=w file ) >>"$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/fstest.at:100" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/fstest.at:100: cat > test.conf <<EOT rush 2.0 rule match -w file set SUCCESS = true EOT echo \"; cmd\" echo \"; cmd\" >&2 rush -C none -Dvars -c \"cmd\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:100" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match -w file set SUCCESS = true EOT echo "; cmd" echo "; cmd" >&2 rush -C none -Dvars -c "cmd" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; cmd " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; cmd { \"vars\":{ \"SUCCESS\":\"true\" } } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:100" $at_failed && at_fn_log_failure $at_traceon; } { set +x printf "%s\n" "$at_srcdir/fstest.at:101: chmod 444 file" at_fn_check_prepare_trace "fstest.at:101" ( $at_check_trace; chmod 444 file ) >>"$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/fstest.at:101" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/fstest.at:101: cat > test.conf <<EOT rush 2.0 rule match -w file set SUCCESS = true EOT echo \"; cmd\" echo \"; cmd\" >&2 rush -C none -Dvars -c \"cmd\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:101" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match -w file set SUCCESS = true EOT echo "; cmd" echo "; cmd" >&2 rush -C none -Dvars -c "cmd" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; cmd rush: Error: no matching rule for \"cmd\", user $MY_USER " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; cmd ; 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:101" $at_failed && at_fn_log_failure $at_traceon; } # ############################## # test -x # ############################## { set +x printf "%s\n" "$at_srcdir/fstest.at:107: chmod u=x file" at_fn_check_prepare_trace "fstest.at:107" ( $at_check_trace; chmod u=x file ) >>"$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/fstest.at:107" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/fstest.at:107: cat > test.conf <<EOT rush 2.0 rule match -x file set SUCCESS = true EOT echo \"; cmd\" echo \"; cmd\" >&2 rush -C none -Dvars -c \"cmd\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:107" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match -x file set SUCCESS = true EOT echo "; cmd" echo "; cmd" >&2 rush -C none -Dvars -c "cmd" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; cmd " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; cmd { \"vars\":{ \"SUCCESS\":\"true\" } } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:107" $at_failed && at_fn_log_failure $at_traceon; } { set +x printf "%s\n" "$at_srcdir/fstest.at:108: chmod g=x file" at_fn_check_prepare_trace "fstest.at:108" ( $at_check_trace; chmod g=x file ) >>"$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/fstest.at:108" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/fstest.at:108: cat > test.conf <<EOT rush 2.0 rule match -x file set SUCCESS = true EOT echo \"; cmd\" echo \"; cmd\" >&2 rush -C none -Dvars -c \"cmd\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:108" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match -x file set SUCCESS = true EOT echo "; cmd" echo "; cmd" >&2 rush -C none -Dvars -c "cmd" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; cmd " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; cmd { \"vars\":{ \"SUCCESS\":\"true\" } } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:108" $at_failed && at_fn_log_failure $at_traceon; } { set +x printf "%s\n" "$at_srcdir/fstest.at:109: chmod o=x file" at_fn_check_prepare_trace "fstest.at:109" ( $at_check_trace; chmod o=x file ) >>"$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/fstest.at:109" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/fstest.at:109: cat > test.conf <<EOT rush 2.0 rule match -x file set SUCCESS = true EOT echo \"; cmd\" echo \"; cmd\" >&2 rush -C none -Dvars -c \"cmd\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:109" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match -x file set SUCCESS = true EOT echo "; cmd" echo "; cmd" >&2 rush -C none -Dvars -c "cmd" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; cmd " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; cmd { \"vars\":{ \"SUCCESS\":\"true\" } } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:109" $at_failed && at_fn_log_failure $at_traceon; } { set +x printf "%s\n" "$at_srcdir/fstest.at:110: chmod a=x file" at_fn_check_prepare_trace "fstest.at:110" ( $at_check_trace; chmod a=x file ) >>"$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/fstest.at:110" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/fstest.at:110: cat > test.conf <<EOT rush 2.0 rule match -x file set SUCCESS = true EOT echo \"; cmd\" echo \"; cmd\" >&2 rush -C none -Dvars -c \"cmd\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:110" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match -x file set SUCCESS = true EOT echo "; cmd" echo "; cmd" >&2 rush -C none -Dvars -c "cmd" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; cmd " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; cmd { \"vars\":{ \"SUCCESS\":\"true\" } } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:110" $at_failed && at_fn_log_failure $at_traceon; } { set +x printf "%s\n" "$at_srcdir/fstest.at:111: chmod 644 file" at_fn_check_prepare_trace "fstest.at:111" ( $at_check_trace; chmod 644 file ) >>"$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/fstest.at:111" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/fstest.at:111: cat > test.conf <<EOT rush 2.0 rule match -x file set SUCCESS = true EOT echo \"; cmd\" echo \"; cmd\" >&2 rush -C none -Dvars -c \"cmd\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:111" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match -x file set SUCCESS = true EOT echo "; cmd" echo "; cmd" >&2 rush -C none -Dvars -c "cmd" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; cmd rush: Error: no matching rule for \"cmd\", user $MY_USER " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; cmd ; 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:111" $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 'fstest.at:115' \ "match -h" " " 3 at_xfail=no ( printf "%s\n" "27. $at_setup_line: testing $at_desc ..." $at_traceon # ############################## # test -h # ############################## { set +x printf "%s\n" "$at_srcdir/fstest.at:120: rm -rf file symlink" at_fn_check_prepare_trace "fstest.at:120" ( $at_check_trace; rm -rf file symlink ) >>"$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/fstest.at:120" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/fstest.at:120: cat > test.conf <<EOT rush 2.0 rule match -h symlink set SUCCESS = true EOT echo \"; cmd\" echo \"; cmd\" >&2 rush -C none -Dvars -c \"cmd\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:120" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match -h symlink set SUCCESS = true EOT echo "; cmd" echo "; cmd" >&2 rush -C none -Dvars -c "cmd" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; cmd rush: Error: no matching rule for \"cmd\", user $MY_USER " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; cmd ; 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:120" $at_failed && at_fn_log_failure $at_traceon; } { set +x printf "%s\n" "$at_srcdir/fstest.at:121: touch file" at_fn_check_prepare_trace "fstest.at:121" ( $at_check_trace; touch file ) >>"$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/fstest.at:121" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/fstest.at:121: cat > test.conf <<EOT rush 2.0 rule match -h file set SUCCESS = true EOT echo \"; cmd\" echo \"; cmd\" >&2 rush -C none -Dvars -c \"cmd\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:121" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match -h file set SUCCESS = true EOT echo "; cmd" echo "; cmd" >&2 rush -C none -Dvars -c "cmd" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; cmd rush: Error: no matching rule for \"cmd\", user $MY_USER " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; cmd ; 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:121" $at_failed && at_fn_log_failure $at_traceon; } { set +x printf "%s\n" "$at_srcdir/fstest.at:122: ln -sf file symlink || exit 77" at_fn_check_prepare_trace "fstest.at:122" ( $at_check_trace; ln -sf file symlink || exit 77 ) >>"$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/fstest.at:122" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/fstest.at:122: cat > test.conf <<EOT rush 2.0 rule match -h symlink set SUCCESS = true EOT echo \"; cmd\" echo \"; cmd\" >&2 rush -C none -Dvars -c \"cmd\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:122" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match -h symlink set SUCCESS = true EOT echo "; cmd" echo "; cmd" >&2 rush -C none -Dvars -c "cmd" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; cmd " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; cmd { \"vars\":{ \"SUCCESS\":\"true\" } } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:122" $at_failed && at_fn_log_failure $at_traceon; } { set +x printf "%s\n" "$at_srcdir/fstest.at:123: true" at_fn_check_prepare_trace "fstest.at:123" ( $at_check_trace; true ) >>"$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/fstest.at:123" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/fstest.at:123: cat > test.conf <<EOT rush 2.0 rule match -L symlink set SUCCESS = true EOT echo \"; cmd\" echo \"; cmd\" >&2 rush -C none -Dvars -c \"cmd\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:123" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match -L symlink set SUCCESS = true EOT echo "; cmd" echo "; cmd" >&2 rush -C none -Dvars -c "cmd" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; cmd " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; cmd { \"vars\":{ \"SUCCESS\":\"true\" } } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:123" $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 'fstest.at:126' \ "match -p" " " 3 at_xfail=no ( printf "%s\n" "28. $at_setup_line: testing $at_desc ..." $at_traceon # ############################## # test -p # ############################## { set +x printf "%s\n" "$at_srcdir/fstest.at:131: rm -rf file" at_fn_check_prepare_trace "fstest.at:131" ( $at_check_trace; rm -rf file ) >>"$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/fstest.at:131" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/fstest.at:131: cat > test.conf <<EOT rush 2.0 rule match -p file set SUCCESS = true EOT echo \"; cmd\" echo \"; cmd\" >&2 rush -C none -Dvars -c \"cmd\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:131" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match -p file set SUCCESS = true EOT echo "; cmd" echo "; cmd" >&2 rush -C none -Dvars -c "cmd" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; cmd rush: Error: no matching rule for \"cmd\", user $MY_USER " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; cmd ; 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:131" $at_failed && at_fn_log_failure $at_traceon; } { set +x printf "%s\n" "$at_srcdir/fstest.at:132: mkfifo file || exit 77" at_fn_check_prepare_trace "fstest.at:132" ( $at_check_trace; mkfifo file || exit 77 ) >>"$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/fstest.at:132" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/fstest.at:132: cat > test.conf <<EOT rush 2.0 rule match -p file set SUCCESS = true EOT echo \"; cmd\" echo \"; cmd\" >&2 rush -C none -Dvars -c \"cmd\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:132" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match -p file set SUCCESS = true EOT echo "; cmd" echo "; cmd" >&2 rush -C none -Dvars -c "cmd" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; cmd " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; cmd { \"vars\":{ \"SUCCESS\":\"true\" } } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:132" $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 'fstest.at:135' \ "match -k" " " 3 at_xfail=no ( printf "%s\n" "29. $at_setup_line: testing $at_desc ..." $at_traceon # ############################## # test -k # ############################## { set +x printf "%s\n" "$at_srcdir/fstest.at:140: rm -rf file" at_fn_check_prepare_trace "fstest.at:140" ( $at_check_trace; rm -rf file ) >>"$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/fstest.at:140" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/fstest.at:140: cat > test.conf <<EOT rush 2.0 rule match -k file set SUCCESS = true EOT echo \"; cmd\" echo \"; cmd\" >&2 rush -C none -Dvars -c \"cmd\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:140" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match -k file set SUCCESS = true EOT echo "; cmd" echo "; cmd" >&2 rush -C none -Dvars -c "cmd" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; cmd rush: Error: no matching rule for \"cmd\", user $MY_USER " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; cmd ; 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:140" $at_failed && at_fn_log_failure $at_traceon; } { set +x printf "%s\n" "$at_srcdir/fstest.at:141: touch file && chmod +t file || exit 77" at_fn_check_prepare_trace "fstest.at:141" ( $at_check_trace; touch file && chmod +t file || exit 77 ) >>"$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/fstest.at:141" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/fstest.at:141: cat > test.conf <<EOT rush 2.0 rule match -k file set SUCCESS = true EOT echo \"; cmd\" echo \"; cmd\" >&2 rush -C none -Dvars -c \"cmd\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:141" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match -k file set SUCCESS = true EOT echo "; cmd" echo "; cmd" >&2 rush -C none -Dvars -c "cmd" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; cmd " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; cmd { \"vars\":{ \"SUCCESS\":\"true\" } } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:141" $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 'fstest.at:144' \ "match -c" " " 3 at_xfail=no ( printf "%s\n" "30. $at_setup_line: testing $at_desc ..." $at_traceon # ############################## # test -c # ############################## { set +x printf "%s\n" "$at_srcdir/fstest.at:149: rm -rf file" at_fn_check_prepare_trace "fstest.at:149" ( $at_check_trace; rm -rf file ) >>"$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/fstest.at:149" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/fstest.at:149: cat > test.conf <<EOT rush 2.0 rule match -c file set SUCCESS = true EOT echo \"; cmd\" echo \"; cmd\" >&2 rush -C none -Dvars -c \"cmd\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:149" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match -c file set SUCCESS = true EOT echo "; cmd" echo "; cmd" >&2 rush -C none -Dvars -c "cmd" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; cmd rush: Error: no matching rule for \"cmd\", user $MY_USER " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; cmd ; 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:149" $at_failed && at_fn_log_failure $at_traceon; } { set +x printf "%s\n" "$at_srcdir/fstest.at:150: touch file" at_fn_check_prepare_trace "fstest.at:150" ( $at_check_trace; touch file ) >>"$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/fstest.at:150" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/fstest.at:150: cat > test.conf <<EOT rush 2.0 rule match -c file set SUCCESS = true EOT echo \"; cmd\" echo \"; cmd\" >&2 rush -C none -Dvars -c \"cmd\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:150" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match -c file set SUCCESS = true EOT echo "; cmd" echo "; cmd" >&2 rush -C none -Dvars -c "cmd" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; cmd rush: Error: no matching rule for \"cmd\", user $MY_USER " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; cmd ; 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:150" $at_failed && at_fn_log_failure $at_traceon; } { set +x printf "%s\n" "$at_srcdir/fstest.at:151: test -c /dev/tty || exit 77" at_fn_check_prepare_trace "fstest.at:151" ( $at_check_trace; test -c /dev/tty || exit 77 ) >>"$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/fstest.at:151" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/fstest.at:151: cat > test.conf <<EOT rush 2.0 rule match -c /dev/tty set SUCCESS = true EOT echo \"; cmd\" echo \"; cmd\" >&2 rush -C none -Dvars -c \"cmd\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:151" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match -c /dev/tty set SUCCESS = true EOT echo "; cmd" echo "; cmd" >&2 rush -C none -Dvars -c "cmd" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; cmd " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; cmd { \"vars\":{ \"SUCCESS\":\"true\" } } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:151" $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 'fstest.at:154' \ "match -b" " " 3 at_xfail=no ( printf "%s\n" "31. $at_setup_line: testing $at_desc ..." $at_traceon { set +x printf "%s\n" "$at_srcdir/fstest.at:156: rm -rf file" at_fn_check_prepare_trace "fstest.at:156" ( $at_check_trace; rm -rf file ) >>"$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/fstest.at:156" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/fstest.at:156: cat > test.conf <<EOT rush 2.0 rule match -b file set SUCCESS = true EOT echo \"; cmd\" echo \"; cmd\" >&2 rush -C none -Dvars -c \"cmd\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:156" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match -b file set SUCCESS = true EOT echo "; cmd" echo "; cmd" >&2 rush -C none -Dvars -c "cmd" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; cmd rush: Error: no matching rule for \"cmd\", user $MY_USER " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; cmd ; 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:156" $at_failed && at_fn_log_failure $at_traceon; } { set +x printf "%s\n" "$at_srcdir/fstest.at:157: touch file" at_fn_check_prepare_trace "fstest.at:157" ( $at_check_trace; touch file ) >>"$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/fstest.at:157" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/fstest.at:157: cat > test.conf <<EOT rush 2.0 rule match -b file set SUCCESS = true EOT echo \"; cmd\" echo \"; cmd\" >&2 rush -C none -Dvars -c \"cmd\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:157" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match -b file set SUCCESS = true EOT echo "; cmd" echo "; cmd" >&2 rush -C none -Dvars -c "cmd" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; cmd rush: Error: no matching rule for \"cmd\", user $MY_USER " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; cmd ; 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:157" $at_failed && at_fn_log_failure $at_traceon; } { set +x printf "%s\n" "$at_srcdir/fstest.at:158: mknod file b 1 1 || exit 77" at_fn_check_prepare_trace "fstest.at:158" ( $at_check_trace; mknod file b 1 1 || exit 77 ) >>"$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/fstest.at:158" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/fstest.at:158: cat > test.conf <<EOT rush 2.0 rule match -b file set SUCCESS = true EOT echo \"; cmd\" echo \"; cmd\" >&2 rush -C none -Dvars -c \"cmd\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:158" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match -b file set SUCCESS = true EOT echo "; cmd" echo "; cmd" >&2 rush -C none -Dvars -c "cmd" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; cmd " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; cmd { \"vars\":{ \"SUCCESS\":\"true\" } } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:158" $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 'fstest.at:161' \ "match -S" " " 3 at_xfail=no ( printf "%s\n" "32. $at_setup_line: testing $at_desc ..." $at_traceon # ############################## # test -c # ############################## { set +x printf "%s\n" "$at_srcdir/fstest.at:166: rm -rf file" at_fn_check_prepare_trace "fstest.at:166" ( $at_check_trace; rm -rf file ) >>"$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/fstest.at:166" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/fstest.at:166: cat > test.conf <<EOT rush 2.0 rule match -S file set SUCCESS = true EOT echo \"; cmd\" echo \"; cmd\" >&2 rush -C none -Dvars -c \"cmd\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:166" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match -S file set SUCCESS = true EOT echo "; cmd" echo "; cmd" >&2 rush -C none -Dvars -c "cmd" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; cmd rush: Error: no matching rule for \"cmd\", user $MY_USER " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; cmd ; 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:166" $at_failed && at_fn_log_failure $at_traceon; } { set +x printf "%s\n" "$at_srcdir/fstest.at:167: touch file" at_fn_check_prepare_trace "fstest.at:167" ( $at_check_trace; touch file ) >>"$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/fstest.at:167" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/fstest.at:167: cat > test.conf <<EOT rush 2.0 rule match -S file set SUCCESS = true EOT echo \"; cmd\" echo \"; cmd\" >&2 rush -C none -Dvars -c \"cmd\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:167" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match -S file set SUCCESS = true EOT echo "; cmd" echo "; cmd" >&2 rush -C none -Dvars -c "cmd" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; cmd rush: Error: no matching rule for \"cmd\", user $MY_USER " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; cmd ; 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:167" $at_failed && at_fn_log_failure $at_traceon; } { set +x printf "%s\n" "$at_srcdir/fstest.at:168: mksock socket || exit 77" at_fn_check_prepare_trace "fstest.at:168" ( $at_check_trace; mksock socket || exit 77 ) >>"$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/fstest.at:168" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/fstest.at:168: cat > test.conf <<EOT rush 2.0 rule match -S socket set SUCCESS = true EOT echo \"; cmd\" echo \"; cmd\" >&2 rush -C none -Dvars -c \"cmd\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:168" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match -S socket set SUCCESS = true EOT echo "; cmd" echo "; cmd" >&2 rush -C none -Dvars -c "cmd" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; cmd " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; cmd { \"vars\":{ \"SUCCESS\":\"true\" } } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:168" $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 'fstest.at:171' \ "match -O" " " 3 at_xfail=no ( printf "%s\n" "33. $at_setup_line: testing $at_desc ..." $at_traceon # ############################## # test -O # ############################## { set +x printf "%s\n" "$at_srcdir/fstest.at:176: rm -rf file" at_fn_check_prepare_trace "fstest.at:176" ( $at_check_trace; rm -rf file ) >>"$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/fstest.at:176" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/fstest.at:176: cat > test.conf <<EOT rush 2.0 rule match -O file set SUCCESS = true EOT echo \"; cmd\" echo \"; cmd\" >&2 rush -C none -Dvars -c \"cmd\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:176" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match -O file set SUCCESS = true EOT echo "; cmd" echo "; cmd" >&2 rush -C none -Dvars -c "cmd" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; cmd rush: Error: no matching rule for \"cmd\", user $MY_USER " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; cmd ; 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:176" $at_failed && at_fn_log_failure $at_traceon; } { set +x printf "%s\n" "$at_srcdir/fstest.at:177: touch file" at_fn_check_prepare_trace "fstest.at:177" ( $at_check_trace; touch file ) >>"$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/fstest.at:177" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/fstest.at:177: cat > test.conf <<EOT rush 2.0 rule match -O file set SUCCESS = true EOT echo \"; cmd\" echo \"; cmd\" >&2 rush -C none -Dvars -c \"cmd\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:177" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match -O file set SUCCESS = true EOT echo "; cmd" echo "; cmd" >&2 rush -C none -Dvars -c "cmd" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; cmd " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; cmd { \"vars\":{ \"SUCCESS\":\"true\" } } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:177" $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 'fstest.at:180' \ "match -G" " " 3 at_xfail=no ( printf "%s\n" "34. $at_setup_line: testing $at_desc ..." $at_traceon # ############################## # test -G # ############################## { set +x printf "%s\n" "$at_srcdir/fstest.at:185: rm -rf file" at_fn_check_prepare_trace "fstest.at:185" ( $at_check_trace; rm -rf file ) >>"$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/fstest.at:185" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/fstest.at:185: cat > test.conf <<EOT rush 2.0 rule match -G file set SUCCESS = true EOT echo \"; cmd\" echo \"; cmd\" >&2 rush -C none -Dvars -c \"cmd\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:185" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match -G file set SUCCESS = true EOT echo "; cmd" echo "; cmd" >&2 rush -C none -Dvars -c "cmd" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; cmd rush: Error: no matching rule for \"cmd\", user $MY_USER " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; cmd ; 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:185" $at_failed && at_fn_log_failure $at_traceon; } { set +x printf "%s\n" "$at_srcdir/fstest.at:186: touch file" at_fn_check_prepare_trace "fstest.at:186" ( $at_check_trace; touch file ) >>"$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/fstest.at:186" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/fstest.at:186: cat > test.conf <<EOT rush 2.0 rule match -G file set SUCCESS = true EOT echo \"; cmd\" echo \"; cmd\" >&2 rush -C none -Dvars -c \"cmd\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:186" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match -G file set SUCCESS = true EOT echo "; cmd" echo "; cmd" >&2 rush -C none -Dvars -c "cmd" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; cmd " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; cmd { \"vars\":{ \"SUCCESS\":\"true\" } } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:186" $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 'fstest.at:189' \ "match -u" " " 3 at_xfail=no ( printf "%s\n" "35. $at_setup_line: testing $at_desc ..." $at_traceon # ############################## # test -u # ############################## { set +x printf "%s\n" "$at_srcdir/fstest.at:194: rm -rf file" at_fn_check_prepare_trace "fstest.at:194" ( $at_check_trace; rm -rf file ) >>"$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/fstest.at:194" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/fstest.at:194: cat > test.conf <<EOT rush 2.0 rule match -u file set SUCCESS = true EOT echo \"; cmd\" echo \"; cmd\" >&2 rush -C none -Dvars -c \"cmd\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:194" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match -u file set SUCCESS = true EOT echo "; cmd" echo "; cmd" >&2 rush -C none -Dvars -c "cmd" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; cmd rush: Error: no matching rule for \"cmd\", user $MY_USER " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; cmd ; 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:194" $at_failed && at_fn_log_failure $at_traceon; } { set +x printf "%s\n" "$at_srcdir/fstest.at:195: touch file" at_fn_check_prepare_trace "fstest.at:195" ( $at_check_trace; touch file ) >>"$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/fstest.at:195" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/fstest.at:195: cat > test.conf <<EOT rush 2.0 rule match -u file set SUCCESS = true EOT echo \"; cmd\" echo \"; cmd\" >&2 rush -C none -Dvars -c \"cmd\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:195" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match -u file set SUCCESS = true EOT echo "; cmd" echo "; cmd" >&2 rush -C none -Dvars -c "cmd" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; cmd rush: Error: no matching rule for \"cmd\", user $MY_USER " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; cmd ; 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:195" $at_failed && at_fn_log_failure $at_traceon; } { set +x printf "%s\n" "$at_srcdir/fstest.at:196: chmod u+s file || exit 77" at_fn_check_prepare_trace "fstest.at:196" ( $at_check_trace; chmod u+s file || exit 77 ) >>"$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/fstest.at:196" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/fstest.at:196: cat > test.conf <<EOT rush 2.0 rule match -u file set SUCCESS = true EOT echo \"; cmd\" echo \"; cmd\" >&2 rush -C none -Dvars -c \"cmd\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:196" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match -u file set SUCCESS = true EOT echo "; cmd" echo "; cmd" >&2 rush -C none -Dvars -c "cmd" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; cmd " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; cmd { \"vars\":{ \"SUCCESS\":\"true\" } } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/fstest.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_35 #AT_START_36 at_fn_group_banner 36 'fstest.at:199' \ "match -g" " " 3 at_xfail=no ( printf "%s\n" "36. $at_setup_line: testing $at_desc ..." $at_traceon # ############################## # test -g # ############################## { set +x printf "%s\n" "$at_srcdir/fstest.at:204: rm -rf file" at_fn_check_prepare_trace "fstest.at:204" ( $at_check_trace; rm -rf file ) >>"$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/fstest.at:204" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/fstest.at:204: cat > test.conf <<EOT rush 2.0 rule match -g file set SUCCESS = true EOT echo \"; cmd\" echo \"; cmd\" >&2 rush -C none -Dvars -c \"cmd\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:204" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match -g file set SUCCESS = true EOT echo "; cmd" echo "; cmd" >&2 rush -C none -Dvars -c "cmd" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; cmd rush: Error: no matching rule for \"cmd\", user $MY_USER " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; cmd ; 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:204" $at_failed && at_fn_log_failure $at_traceon; } { set +x printf "%s\n" "$at_srcdir/fstest.at:205: touch file" at_fn_check_prepare_trace "fstest.at:205" ( $at_check_trace; touch file ) >>"$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/fstest.at:205" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/fstest.at:205: cat > test.conf <<EOT rush 2.0 rule match -g file set SUCCESS = true EOT echo \"; cmd\" echo \"; cmd\" >&2 rush -C none -Dvars -c \"cmd\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:205" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match -g file set SUCCESS = true EOT echo "; cmd" echo "; cmd" >&2 rush -C none -Dvars -c "cmd" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; cmd rush: Error: no matching rule for \"cmd\", user $MY_USER " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; cmd ; 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:205" $at_failed && at_fn_log_failure $at_traceon; } { set +x printf "%s\n" "$at_srcdir/fstest.at:206: chmod g+s file || exit 77" at_fn_check_prepare_trace "fstest.at:206" ( $at_check_trace; chmod g+s file || exit 77 ) >>"$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/fstest.at:206" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/fstest.at:206: cat > test.conf <<EOT rush 2.0 rule match -g file set SUCCESS = true EOT echo \"; cmd\" echo \"; cmd\" >&2 rush -C none -Dvars -c \"cmd\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:206" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match -g file set SUCCESS = true EOT echo "; cmd" echo "; cmd" >&2 rush -C none -Dvars -c "cmd" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; cmd " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; cmd { \"vars\":{ \"SUCCESS\":\"true\" } } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:206" $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 'and.at:17' \ "and" " " 4 at_xfail=no ( printf "%s\n" "37. $at_setup_line: testing $at_desc ..." $at_traceon myvars { set +x printf "%s\n" "$at_srcdir/and.at:20: cat > test.conf <<EOT rush 2.0 rule match \\\$0 == \"/bin/ls\" && \\\$1 ~ \"^/usr\" EOT echo \"; /bin/ls /usr/lib\" echo \"; /bin/ls /usr/lib\" >&2 rush -C none -Dcmdline,argv,prog -c \"/bin/ls /usr/lib\" test.conf echo \"; \$?\" echo \"; /bin/ls /lib\" echo \"; /bin/ls /lib\" >&2 rush -C none -Dcmdline,argv,prog -c \"/bin/ls /lib\" test.conf echo \"; \$?\" echo \"; /bin/stat /usr/lib\" echo \"; /bin/stat /usr/lib\" >&2 rush -C none -Dcmdline,argv,prog -c \"/bin/stat /usr/lib\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "and.at:20" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match \$0 == "/bin/ls" && \$1 ~ "^/usr" EOT echo "; /bin/ls /usr/lib" echo "; /bin/ls /usr/lib" >&2 rush -C none -Dcmdline,argv,prog -c "/bin/ls /usr/lib" test.conf echo "; $?" echo "; /bin/ls /lib" echo "; /bin/ls /lib" >&2 rush -C none -Dcmdline,argv,prog -c "/bin/ls /lib" test.conf echo "; $?" echo "; /bin/stat /usr/lib" echo "; /bin/stat /usr/lib" >&2 rush -C none -Dcmdline,argv,prog -c "/bin/stat /usr/lib" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; /bin/ls /usr/lib ; /bin/ls /lib rush: Error: no matching rule for \"/bin/ls /lib\", user $MY_USER ; /bin/stat /usr/lib rush: Error: no matching rule for \"/bin/stat /usr/lib\", user $MY_USER " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; /bin/ls /usr/lib { \"cmdline\":\"/bin/ls /usr/lib\", \"argv\":[ \"/bin/ls\", \"/usr/lib\" ], \"prog\":null } ; 0 ; /bin/ls /lib ; 1 ; /bin/stat /usr/lib ; 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/and.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_37 #AT_START_38 at_fn_group_banner 38 'or.at:17' \ "or" " " 4 at_xfail=no ( printf "%s\n" "38. $at_setup_line: testing $at_desc ..." $at_traceon myvars { set +x printf "%s\n" "$at_srcdir/or.at:20: cat > test.conf <<EOT rush 2.0 rule match \\\$0 == \"/bin/ls\" || \\\$0 == \"/bin/stat\" EOT echo \"; /bin/ls /usr/lib\" echo \"; /bin/ls /usr/lib\" >&2 rush -C none -Dcmdline,argv,prog -c \"/bin/ls /usr/lib\" test.conf echo \"; \$?\" echo \"; /bin/stat /usr/lib\" echo \"; /bin/stat /usr/lib\" >&2 rush -C none -Dcmdline,argv,prog -c \"/bin/stat /usr/lib\" test.conf echo \"; \$?\" echo \"; /bin/find /usr/lib\" echo \"; /bin/find /usr/lib\" >&2 rush -C none -Dcmdline,argv,prog -c \"/bin/find /usr/lib\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "or.at:20" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match \$0 == "/bin/ls" || \$0 == "/bin/stat" EOT echo "; /bin/ls /usr/lib" echo "; /bin/ls /usr/lib" >&2 rush -C none -Dcmdline,argv,prog -c "/bin/ls /usr/lib" test.conf echo "; $?" echo "; /bin/stat /usr/lib" echo "; /bin/stat /usr/lib" >&2 rush -C none -Dcmdline,argv,prog -c "/bin/stat /usr/lib" test.conf echo "; $?" echo "; /bin/find /usr/lib" echo "; /bin/find /usr/lib" >&2 rush -C none -Dcmdline,argv,prog -c "/bin/find /usr/lib" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; /bin/ls /usr/lib ; /bin/stat /usr/lib ; /bin/find /usr/lib rush: Error: no matching rule for \"/bin/find /usr/lib\", user $MY_USER " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; /bin/ls /usr/lib { \"cmdline\":\"/bin/ls /usr/lib\", \"argv\":[ \"/bin/ls\", \"/usr/lib\" ], \"prog\":null } ; 0 ; /bin/stat /usr/lib { \"cmdline\":\"/bin/stat /usr/lib\", \"argv\":[ \"/bin/stat\", \"/usr/lib\" ], \"prog\":null } ; 0 ; /bin/find /usr/lib ; 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/or.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_38 #AT_START_39 at_fn_group_banner 39 'compound.at:17' \ "compound" " " 4 at_xfail=no ( printf "%s\n" "39. $at_setup_line: testing $at_desc ..." $at_traceon myvars { set +x printf "%s\n" "$at_srcdir/compound.at:20: cat > test.conf <<EOT rush 2.0 rule match \\\$0 == \"/bin/ls\" && \\\$# == 2 && (\\\$1 ~ \"^/usr\" || \\\$1 == \"/\") EOT echo \"; /bin/ls /usr/lib\" echo \"; /bin/ls /usr/lib\" >&2 rush -C none -Dcmdline,argv,prog -c \"/bin/ls /usr/lib\" test.conf echo \"; \$?\" echo \"; /bin/ls /\" echo \"; /bin/ls /\" >&2 rush -C none -Dcmdline,argv,prog -c \"/bin/ls /\" test.conf echo \"; \$?\" echo \"; /bin/ls /usr/lib /\" echo \"; /bin/ls /usr/lib /\" >&2 rush -C none -Dcmdline,argv,prog -c \"/bin/ls /usr/lib /\" test.conf echo \"; \$?\" echo \"; /bin/ls /lib\" echo \"; /bin/ls /lib\" >&2 rush -C none -Dcmdline,argv,prog -c \"/bin/ls /lib\" test.conf echo \"; \$?\" echo \"; /bin/stat /usr/lib\" echo \"; /bin/stat /usr/lib\" >&2 rush -C none -Dcmdline,argv,prog -c \"/bin/stat /usr/lib\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "compound.at:20" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match \$0 == "/bin/ls" && \$# == 2 && (\$1 ~ "^/usr" || \$1 == "/") EOT echo "; /bin/ls /usr/lib" echo "; /bin/ls /usr/lib" >&2 rush -C none -Dcmdline,argv,prog -c "/bin/ls /usr/lib" test.conf echo "; $?" echo "; /bin/ls /" echo "; /bin/ls /" >&2 rush -C none -Dcmdline,argv,prog -c "/bin/ls /" test.conf echo "; $?" echo "; /bin/ls /usr/lib /" echo "; /bin/ls /usr/lib /" >&2 rush -C none -Dcmdline,argv,prog -c "/bin/ls /usr/lib /" test.conf echo "; $?" echo "; /bin/ls /lib" echo "; /bin/ls /lib" >&2 rush -C none -Dcmdline,argv,prog -c "/bin/ls /lib" test.conf echo "; $?" echo "; /bin/stat /usr/lib" echo "; /bin/stat /usr/lib" >&2 rush -C none -Dcmdline,argv,prog -c "/bin/stat /usr/lib" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; /bin/ls /usr/lib ; /bin/ls / ; /bin/ls /usr/lib / rush: Error: no matching rule for \"/bin/ls /usr/lib /\", user $MY_USER ; /bin/ls /lib rush: Error: no matching rule for \"/bin/ls /lib\", user $MY_USER ; /bin/stat /usr/lib rush: Error: no matching rule for \"/bin/stat /usr/lib\", user $MY_USER " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; /bin/ls /usr/lib { \"cmdline\":\"/bin/ls /usr/lib\", \"argv\":[ \"/bin/ls\", \"/usr/lib\" ], \"prog\":null } ; 0 ; /bin/ls / { \"cmdline\":\"/bin/ls /\", \"argv\":[ \"/bin/ls\", \"/\" ], \"prog\":null } ; 0 ; /bin/ls /usr/lib / ; 1 ; /bin/ls /lib ; 1 ; /bin/stat /usr/lib ; 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/compound.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_39 #AT_START_40 at_fn_group_banner 40 'set.at:17' \ "set" " " 5 at_xfail=no ( printf "%s\n" "40. $at_setup_line: testing $at_desc ..." $at_traceon myvars { set +x printf "%s\n" "$at_srcdir/set.at:20: cat > test.conf <<EOT rush 2.0 rule set command = \"ls /\" EOT echo \"; echo\" echo \"; echo\" >&2 rush -C none -Dcmdline,argv,prog -c \"echo\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "set.at:20" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule set command = "ls /" EOT echo "; echo" echo "; echo" >&2 rush -C none -Dcmdline,argv,prog -c "echo" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; echo " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; echo { \"cmdline\":\"ls /\", \"argv\":[ \"ls\", \"/\" ], \"prog\":null } ; 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; } myvars { set +x printf "%s\n" "$at_srcdir/set.at:39: cat > test.conf <<EOT rush 2.0 rule set [0] = \"/usr/bin/\\\$0\" EOT echo \"; ls /\" echo \"; ls /\" >&2 rush -C none -Dcmdline,argv,prog -c \"ls /\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "set.at:39" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule set [0] = "/usr/bin/\$0" EOT echo "; ls /" echo "; ls /" >&2 rush -C none -Dcmdline,argv,prog -c "ls /" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; ls / " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; ls / { \"cmdline\":\"/usr/bin/ls /\", \"argv\":[ \"/usr/bin/ls\", \"/\" ], \"prog\":null } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/set.at:39" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/set.at:58: cat > test.conf <<EOT rush 2.0 rule set [1] = \"/chroot\\\${1}\" EOT echo \"; ls /\" echo \"; ls /\" >&2 rush -C none -Dcmdline,argv,prog -c \"ls /\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'a ${...} parameter expansion' "set.at:58" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule set [1] = "/chroot\${1}" EOT echo "; ls /" echo "; ls /" >&2 rush -C none -Dcmdline,argv,prog -c "ls /" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; ls / " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; ls / { \"cmdline\":\"ls /chroot/\", \"argv\":[ \"ls\", \"/chroot/\" ], \"prog\":null } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/set.at:58" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/set.at:77: cat > test.conf <<EOT rush 2.0 rule set program = \"/usr/bin/ls\" EOT echo \"; ls /\" echo \"; ls /\" >&2 rush -C none -Dcmdline,argv,prog -c \"ls /\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "set.at:77" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule set program = "/usr/bin/ls" EOT echo "; ls /" echo "; ls /" >&2 rush -C none -Dcmdline,argv,prog -c "ls /" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; ls / " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; ls / { \"cmdline\":\"ls /\", \"argv\":[ \"ls\", \"/\" ], \"prog\":\"/usr/bin/ls\" } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/set.at:77" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/set.at:96: cat > test.conf <<EOT rush 2.0 rule set [-1] = \"/tmp\" EOT echo \"; ls /\" echo \"; ls /\" >&2 rush -C none -Dcmdline,argv,prog -c \"ls /\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "set.at:96" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule set [-1] = "/tmp" EOT echo "; ls /" echo "; ls /" >&2 rush -C none -Dcmdline,argv,prog -c "ls /" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; ls / " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; ls / { \"cmdline\":\"ls /tmp\", \"argv\":[ \"ls\", \"/tmp\" ], \"prog\":null } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/set.at:96" $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 'delete.at:17' \ "delete" " " 5 at_xfail=no ( printf "%s\n" "41. $at_setup_line: testing $at_desc ..." $at_traceon myvars { set +x printf "%s\n" "$at_srcdir/delete.at:20: cat > test.conf <<EOT rush 2.0 rule delete 1 EOT echo \"; echo foo bar\" echo \"; echo foo bar\" >&2 rush -C none -Dcmdline,argv,prog -c \"echo foo bar\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "delete.at:20" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule delete 1 EOT echo "; echo foo bar" echo "; echo foo bar" >&2 rush -C none -Dcmdline,argv,prog -c "echo foo bar" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; echo foo bar " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; echo foo bar { \"cmdline\":\"echo bar\", \"argv\":[ \"echo\", \"bar\" ], \"prog\":null } ; 0 " | \ $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; } myvars { set +x printf "%s\n" "$at_srcdir/delete.at:39: cat > test.conf <<EOT rush 2.0 rule delete -1 EOT echo \"; echo foo bar\" echo \"; echo foo bar\" >&2 rush -C none -Dcmdline,argv,prog -c \"echo foo bar\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "delete.at:39" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule delete -1 EOT echo "; echo foo bar" echo "; echo foo bar" >&2 rush -C none -Dcmdline,argv,prog -c "echo foo bar" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; echo foo bar " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; echo foo bar { \"cmdline\":\"echo foo\", \"argv\":[ \"echo\", \"foo\" ], \"prog\":null } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/delete.at:39" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/delete.at:58: cat > test.conf <<EOT rush 2.0 rule delete 2 4 EOT echo \"; echo foo bar baz quux wum\" echo \"; echo foo bar baz quux wum\" >&2 rush -C none -Dcmdline,argv,prog -c \"echo foo bar baz quux wum\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "delete.at:58" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule delete 2 4 EOT echo "; echo foo bar baz quux wum" echo "; echo foo bar baz quux wum" >&2 rush -C none -Dcmdline,argv,prog -c "echo foo bar baz quux wum" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; echo foo bar baz quux wum " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; echo foo bar baz quux wum { \"cmdline\":\"echo foo wum\", \"argv\":[ \"echo\", \"foo\", \"wum\" ], \"prog\":null } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/delete.at:58" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/delete.at:78: cat > test.conf <<EOT rush 2.0 rule delete 0 EOT echo \"; echo foo bar\" echo \"; echo foo bar\" >&2 rush -C none -Dcmdline,argv,prog -c \"echo foo bar\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "delete.at:78" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule delete 0 EOT echo "; echo foo bar" echo "; echo foo bar" >&2 rush -C none -Dcmdline,argv,prog -c "echo foo bar" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; echo foo bar rush: Error: test.conf:4.10: \$0 cannot be deleted rush: Error: errors in configuration file " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; echo foo bar ; 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/delete.at:78" $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 'transform.at:17' \ "transform" " " 5 at_xfail=no ( printf "%s\n" "42. $at_setup_line: testing $at_desc ..." $at_traceon myvars { set +x printf "%s\n" "$at_srcdir/transform.at:20: cat > test.conf <<EOT rush 2.0 rule set command =~ \"s/^[^[:space:]]+/& -t/\" EOT echo \"; svnserve\" echo \"; svnserve\" >&2 rush -C none -Dcmdline,argv,prog -c \"svnserve\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "transform.at:20" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule set command =~ "s/^[^[:space:]]+/& -t/" EOT echo "; svnserve" echo "; svnserve" >&2 rush -C none -Dcmdline,argv,prog -c "svnserve" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; svnserve " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; svnserve { \"cmdline\":\"svnserve -t\", \"argv\":[ \"svnserve\", \"-t\" ], \"prog\":null } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/transform.at:20" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/transform.at:39: cat > test.conf <<EOT rush 2.0 rule set command = \"\\\${command} end\" ~ \"s/[[:space:]]+-[^[:space:]]+//g\" EOT echo \"; echo -c -t foo -n bar\" echo \"; echo -c -t foo -n bar\" >&2 rush -C none -Dcmdline,argv,prog -c \"echo -c -t foo -n bar\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'a ${...} parameter expansion' "transform.at:39" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule set command = "\${command} end" ~ "s/[[:space:]]+-[^[:space:]]+//g" EOT echo "; echo -c -t foo -n bar" echo "; echo -c -t foo -n bar" >&2 rush -C none -Dcmdline,argv,prog -c "echo -c -t foo -n bar" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; echo -c -t foo -n bar " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; echo -c -t foo -n bar { \"cmdline\":\"echo foo bar end\", \"argv\":[ \"echo\", \"foo\", \"bar\", \"end\" ], \"prog\":null } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/transform.at:39" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/transform.at:60: cat > test.conf <<EOT rush 2.0 rule set [0] =~ \"s|^[^/]|/usr/bin/&|\" EOT echo \"; echo foo\" echo \"; echo foo\" >&2 rush -C none -Dcmdline,argv,prog -c \"echo foo\" test.conf echo \"; \$?\" echo \"; /bin/echo foo\" echo \"; /bin/echo foo\" >&2 rush -C none -Dcmdline,argv,prog -c \"/bin/echo foo\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "transform.at:60" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule set [0] =~ "s|^[^/]|/usr/bin/&|" EOT echo "; echo foo" echo "; echo foo" >&2 rush -C none -Dcmdline,argv,prog -c "echo foo" test.conf echo "; $?" echo "; /bin/echo foo" echo "; /bin/echo foo" >&2 rush -C none -Dcmdline,argv,prog -c "/bin/echo foo" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; echo foo ; /bin/echo foo " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; echo foo { \"cmdline\":\"/usr/bin/echo foo\", \"argv\":[ \"/usr/bin/echo\", \"foo\" ], \"prog\":null } ; 0 ; /bin/echo foo { \"cmdline\":\"/bin/echo foo\", \"argv\":[ \"/bin/echo\", \"foo\" ], \"prog\":null } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/transform.at:60" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/transform.at:92: cat > test.conf <<EOT rush 2.0 rule set [0] = \\\$program ~ \"s,.*/,-,\" EOT echo \"; /bin/sh\" echo \"; /bin/sh\" >&2 rush -C none -Dcmdline,argv,prog -c \"/bin/sh\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "transform.at:92" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule set [0] = \$program ~ "s,.*/,-," EOT echo "; /bin/sh" echo "; /bin/sh" >&2 rush -C none -Dcmdline,argv,prog -c "/bin/sh" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; /bin/sh " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; /bin/sh { \"cmdline\":\"-sh\", \"argv\":[ \"-sh\" ], \"prog\":null } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/transform.at:92" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/transform.at:110: cat > test.conf <<EOT rush 2.0 rule set command =~ \"s/s/@/2\" EOT echo \"; password\" echo \"; password\" >&2 rush -C none -Dcmdline -c \"password\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "transform.at:110" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule set command =~ "s/s/@/2" EOT echo "; password" echo "; password" >&2 rush -C none -Dcmdline -c "password" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; password " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; password { \"cmdline\":\"pas@word\" } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/transform.at:110" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/transform.at:124: cat > test.conf <<EOT rush 2.0 rule set command =~ \"s/s/@/2g\" EOT echo \"; passwords\" echo \"; passwords\" >&2 rush -C none -Dcmdline -c \"passwords\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "transform.at:124" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule set command =~ "s/s/@/2g" EOT echo "; passwords" echo "; passwords" >&2 rush -C none -Dcmdline -c "passwords" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; passwords " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; passwords { \"cmdline\":\"pas@word@\" } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/transform.at:124" $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 'map.at:17' \ "map" " " 5 at_xfail=no ( printf "%s\n" "43. $at_setup_line: testing $at_desc ..." $at_traceon { set +x printf "%s\n" "$at_srcdir/map.at:20: myvars cat > passwd.rush <<EOT x\$MY_USER:x:\$((\$MY_UID + 1)):\$((\$MY_GID + 1))::/root:/bin/bash \$MY_USER:x:\$MY_UID:\$MY_GID:Me:/:/rush_special_shell EOT WD=\`pwd\` cat > test.conf <<EOT rush 2.0 rule map [0] \"\$WD/passwd.rush\" \":\" \"\\\${user}\" 1 7 \"/nologin\" EOT set -e echo Matching map rush -C none -Dcmdline,argv,prog -c 'command arg' test.conf echo No match, return default > passwd.rush rush -C none -Dcmdline,argv,prog -c 'command arg' test.conf echo No match, no default cat > test.conf <<EOT rush 2.0 rule map [0] \"\$WD/passwd.rush\" \":\" \"\\\${user}\" 1 7 EOT rush -C none -Dcmdline,argv,prog -c 'command arg' test.conf " at_fn_check_prepare_notrace 'a `...` command substitution' "map.at:20" ( $at_check_trace; myvars cat > passwd.rush <<EOT x$MY_USER:x:$(($MY_UID + 1)):$(($MY_GID + 1))::/root:/bin/bash $MY_USER:x:$MY_UID:$MY_GID:Me:/:/rush_special_shell EOT WD=`pwd` cat > test.conf <<EOT rush 2.0 rule map [0] "$WD/passwd.rush" ":" "\${user}" 1 7 "/nologin" EOT set -e echo Matching map rush -C none -Dcmdline,argv,prog -c 'command arg' test.conf echo No match, return default > passwd.rush rush -C none -Dcmdline,argv,prog -c 'command arg' test.conf echo No match, no default cat > test.conf <<EOT rush 2.0 rule map [0] "$WD/passwd.rush" ":" "\${user}" 1 7 EOT rush -C none -Dcmdline,argv,prog -c 'command arg' test.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"; printf "%s\n" "Matching map { \"cmdline\":\"/rush_special_shell arg\", \"argv\":[ \"/rush_special_shell\", \"arg\" ], \"prog\":null } No match, return default { \"cmdline\":\"/nologin arg\", \"argv\":[ \"/nologin\", \"arg\" ], \"prog\":null } No match, no default { \"cmdline\":\"command arg\", \"argv\":[ \"command\", \"arg\" ], \"prog\":null } " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/map.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_43 #AT_START_44 at_fn_group_banner 44 'insert.at:17' \ "insert" " " 5 at_xfail=no ( printf "%s\n" "44. $at_setup_line: testing $at_desc ..." $at_traceon myvars { set +x printf "%s\n" "$at_srcdir/insert.at:20: cat > test.conf <<EOT rush 2.0 rule match \\\$command ~ \"^svnserve -t\" insert [1] = \"-r\" insert [2] = \"/svnroot\" EOT echo \"; svnserve -t -v\" echo \"; svnserve -t -v\" >&2 rush -C none -Dcmdline,argv -c \"svnserve -t -v\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "insert.at:20" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match \$command ~ "^svnserve -t" insert [1] = "-r" insert [2] = "/svnroot" EOT echo "; svnserve -t -v" echo "; svnserve -t -v" >&2 rush -C none -Dcmdline,argv -c "svnserve -t -v" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; svnserve -t -v " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; svnserve -t -v { \"cmdline\":\"svnserve -r /svnroot -t -v\", \"argv\":[ \"svnserve\", \"-r\", \"/svnroot\", \"-t\", \"-v\" ] } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/insert.at:20" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/insert.at:43: cat > test.conf <<EOT rush 2.0 rule match \\\$command ~ \"^svnserve -t\" insert [1] = \"/svnroot\" insert [1] = \"-r\" EOT echo \"; svnserve -t -v\" echo \"; svnserve -t -v\" >&2 rush -C none -Dcmdline,argv -c \"svnserve -t -v\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "insert.at:43" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match \$command ~ "^svnserve -t" insert [1] = "/svnroot" insert [1] = "-r" EOT echo "; svnserve -t -v" echo "; svnserve -t -v" >&2 rush -C none -Dcmdline,argv -c "svnserve -t -v" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; svnserve -t -v " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; svnserve -t -v { \"cmdline\":\"svnserve -r /svnroot -t -v\", \"argv\":[ \"svnserve\", \"-r\", \"/svnroot\", \"-t\", \"-v\" ] } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/insert.at:43" $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 'remopt.at:17' \ "remopt" " " 5 at_xfail=no ( printf "%s\n" "45. $at_setup_line: testing $at_desc ..." $at_traceon # Option without argument myvars { set +x printf "%s\n" "$at_srcdir/remopt.at:21: cat > test.conf <<EOT rush 2.0 rule match \\\$command ~ \"^server\" remopt r root EOT echo \"; server -A -r -B -ref -C -erf -D -efr -C --root -D --roo -E --ro -F --r -G --rooting\" echo \"; server -A -r -B -ref -C -erf -D -efr -C --root -D --roo -E --ro -F --r -G --rooting\" >&2 rush -C none -Dcmdline,argv -c \"server -A -r -B -ref -C -erf -D -efr -C --root -D --roo -E --ro -F --r -G --rooting\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "remopt.at:21" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match \$command ~ "^server" remopt r root EOT echo "; server -A -r -B -ref -C -erf -D -efr -C --root -D --roo -E --ro -F --r -G --rooting" echo "; server -A -r -B -ref -C -erf -D -efr -C --root -D --roo -E --ro -F --r -G --rooting" >&2 rush -C none -Dcmdline,argv -c "server -A -r -B -ref -C -erf -D -efr -C --root -D --roo -E --ro -F --r -G --rooting" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; server -A -r -B -ref -C -erf -D -efr -C --root -D --roo -E --ro -F --r -G --rooting " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; server -A -r -B -ref -C -erf -D -efr -C --root -D --roo -E --ro -F --r -G --rooting { \"cmdline\":\"server -A -B -ef -C -ef -D -ef -C -D -E -F -G --rooting\", \"argv\":[ \"server\", \"-A\", \"-B\", \"-ef\", \"-C\", \"-ef\", \"-D\", \"-ef\", \"-C\", \"-D\", \"-E\", \"-F\", \"-G\", \"--rooting\" ] } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/remopt.at:21" $at_failed && at_fn_log_failure $at_traceon; } # Option with mandatory argument myvars { set +x printf "%s\n" "$at_srcdir/remopt.at:53: cat > test.conf <<EOT rush 2.0 rule match \\\$command ~ \"^server\" remopt r: root EOT echo \"; server -t -r ARG -A -rARG -B -C -aeFrARG -D --root=ARG -E --root ARG -F --ro=ARG -G --ro ARG -H --root\" echo \"; server -t -r ARG -A -rARG -B -C -aeFrARG -D --root=ARG -E --root ARG -F --ro=ARG -G --ro ARG -H --root\" >&2 rush -C none -Dcmdline,argv -c \"server -t -r ARG -A -rARG -B -C -aeFrARG -D --root=ARG -E --root ARG -F --ro=ARG -G --ro ARG -H --root\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "remopt.at:53" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match \$command ~ "^server" remopt r: root EOT echo "; server -t -r ARG -A -rARG -B -C -aeFrARG -D --root=ARG -E --root ARG -F --ro=ARG -G --ro ARG -H --root" echo "; server -t -r ARG -A -rARG -B -C -aeFrARG -D --root=ARG -E --root ARG -F --ro=ARG -G --ro ARG -H --root" >&2 rush -C none -Dcmdline,argv -c "server -t -r ARG -A -rARG -B -C -aeFrARG -D --root=ARG -E --root ARG -F --ro=ARG -G --ro ARG -H --root" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; server -t -r ARG -A -rARG -B -C -aeFrARG -D --root=ARG -E --root ARG -F --ro=ARG -G --ro ARG -H --root " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; server -t -r ARG -A -rARG -B -C -aeFrARG -D --root=ARG -E --root ARG -F --ro=ARG -G --ro ARG -H --root { \"cmdline\":\"server -t -A -B -C -aeF -D -E -F -G -H --root\", \"argv\":[ \"server\", \"-t\", \"-A\", \"-B\", \"-C\", \"-aeF\", \"-D\", \"-E\", \"-F\", \"-G\", \"-H\", \"--root\" ] } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/remopt.at:53" $at_failed && at_fn_log_failure $at_traceon; } # Option with optional argument myvars { set +x printf "%s\n" "$at_srcdir/remopt.at:83: cat > test.conf <<EOT rush 2.0 rule match \\\$command ~ \"^server\" remopt r:: root EOT echo \"; server -t -rARG -A -r ARG -B -aeFrARG -D -beFr -E --root=ARG -F --roo=ARG -G --root ARG -H --root\" echo \"; server -t -rARG -A -r ARG -B -aeFrARG -D -beFr -E --root=ARG -F --roo=ARG -G --root ARG -H --root\" >&2 rush -C none -Dcmdline,argv -c \"server -t -rARG -A -r ARG -B -aeFrARG -D -beFr -E --root=ARG -F --roo=ARG -G --root ARG -H --root\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "remopt.at:83" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule match \$command ~ "^server" remopt r:: root EOT echo "; server -t -rARG -A -r ARG -B -aeFrARG -D -beFr -E --root=ARG -F --roo=ARG -G --root ARG -H --root" echo "; server -t -rARG -A -r ARG -B -aeFrARG -D -beFr -E --root=ARG -F --roo=ARG -G --root ARG -H --root" >&2 rush -C none -Dcmdline,argv -c "server -t -rARG -A -r ARG -B -aeFrARG -D -beFr -E --root=ARG -F --roo=ARG -G --root ARG -H --root" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; server -t -rARG -A -r ARG -B -aeFrARG -D -beFr -E --root=ARG -F --roo=ARG -G --root ARG -H --root " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; server -t -rARG -A -r ARG -B -aeFrARG -D -beFr -E --root=ARG -F --roo=ARG -G --root ARG -H --root { \"cmdline\":\"server -t -A ARG -B -aeF -D -beF -E -F -G ARG -H --root\", \"argv\":[ \"server\", \"-t\", \"-A\", \"ARG\", \"-B\", \"-aeF\", \"-D\", \"-beF\", \"-E\", \"-F\", \"-G\", \"ARG\", \"-H\", \"--root\" ] } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/remopt.at:83" $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 'umask.at:17' \ "umask" " " 6 at_xfail=no ( printf "%s\n" "46. $at_setup_line: testing $at_desc ..." $at_traceon myvars { set +x printf "%s\n" "$at_srcdir/umask.at:20: cat > test.conf <<EOT rush 2.0 rule umask 017 EOT echo \"; command\" echo \"; command\" >&2 rush -C none -Dumask -c \"command\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "umask.at:20" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule umask 017 EOT echo "; command" echo "; command" >&2 rush -C none -Dumask -c "command" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; command " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; command { \"umask\":017 } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/umask.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_46 #AT_START_47 at_fn_group_banner 47 'newgrp.at:17' \ "newgrp" " " 6 at_xfail=no ( printf "%s\n" "47. $at_setup_line: testing $at_desc ..." $at_traceon myvars { set +x printf "%s\n" "$at_srcdir/newgrp.at:20: cat > test.conf <<EOT rush 2.0 rule newgrp 0 EOT echo \"; command\" echo \"; command\" >&2 rush -C none -Dgid -c \"command\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "newgrp.at:20" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule newgrp 0 EOT echo "; command" echo "; command" >&2 rush -C none -Dgid -c "command" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; command " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; command { \"gid\":0 } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/newgrp.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_47 #AT_START_48 at_fn_group_banner 48 'chdir.at:17' \ "chdir" " " 6 at_xfail=no ( printf "%s\n" "48. $at_setup_line: testing $at_desc ..." $at_traceon myvars { set +x printf "%s\n" "$at_srcdir/chdir.at:20: cat > test.conf <<EOT rush 2.0 rule chdir \"\$PWD\" EOT echo \"; command\" echo \"; command\" >&2 rush -C none -Dhome_dir -c \"command\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "chdir.at:20" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule chdir "$PWD" EOT echo "; command" echo "; command" >&2 rush -C none -Dhome_dir -c "command" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; command " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; command { \"home_dir\":\"$TESTDIR\" } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/chdir.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_48 #AT_START_49 at_fn_group_banner 49 'interactive.at:17' \ "interactive" " " 6 at_xfail=no ( printf "%s\n" "49. $at_setup_line: testing $at_desc ..." $at_traceon myvars { set +x printf "%s\n" "$at_srcdir/interactive.at:20: cat > test.conf <<EOT rush 2.0 rule interactive true EOT echo \"; interactive\" echo \"; interactive\" >&2 rush -C none -Dcmdline,argv,prog,interactive -i test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "interactive.at:20" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule interactive true EOT echo "; interactive" echo "; interactive" >&2 rush -C none -Dcmdline,argv,prog,interactive -i test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; interactive " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; interactive { \"cmdline\":\"/bin/sh\", \"argv\":[ \"/bin/sh\" ], \"prog\":null, \"interactive\":1 } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/interactive.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_49 #AT_START_50 at_fn_group_banner 50 'clrenv.at:17' \ "clrenv" " " 7 at_xfail=no ( printf "%s\n" "50. $at_setup_line: testing $at_desc ..." $at_traceon myvars { set +x printf "%s\n" "$at_srcdir/clrenv.at:20: cat > test.conf <<EOT rush 2.0 rule clrenv EOT echo \"; command\" echo \"; command\" >&2 rush -C none -Denviron -c \"command\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "clrenv.at:20" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule clrenv EOT echo "; command" echo "; command" >&2 rush -C none -Denviron -c "command" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; command " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; command { \"environ\":[] } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/clrenv.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_50 #AT_START_51 at_fn_group_banner 51 'unsetenv.at:17' \ "unsetenv" " " 7 at_xfail=no ( printf "%s\n" "51. $at_setup_line: testing $at_desc ..." $at_traceon myvars { set +x printf "%s\n" "$at_srcdir/unsetenv.at:21: cat > test.conf <<EOT rush 2.0 rule unsetenv LOGIN EOT echo \"; command\" echo \"; command\" >&2 env -i HOME=\$PWD USER=\$MY_USER LOGIN=\$MY_USER \$RUSHDIR/rush -C none -Denviron -c \"command\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "unsetenv.at:21" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule unsetenv LOGIN EOT echo "; command" echo "; command" >&2 env -i HOME=$PWD USER=$MY_USER LOGIN=$MY_USER $RUSHDIR/rush -C none -Denviron -c "command" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; command " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; command { \"environ\":[ \"HOME=$TESTDIR\", \"USER=$MY_USER\" ] } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/unsetenv.at:21" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/unsetenv.at:38: cat > test.conf <<EOT rush 2.0 rule unsetenv LOGIN=\$MY_USER EOT echo \"; command\" echo \"; command\" >&2 env -i HOME=\$PWD USER=\$MY_USER LOGIN=\$MY_USER \$RUSHDIR/rush -C none -Denviron -c \"command\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "unsetenv.at:38" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule unsetenv LOGIN=$MY_USER EOT echo "; command" echo "; command" >&2 env -i HOME=$PWD USER=$MY_USER LOGIN=$MY_USER $RUSHDIR/rush -C none -Denviron -c "command" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; command " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; command { \"environ\":[ \"HOME=$TESTDIR\", \"USER=$MY_USER\" ] } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/unsetenv.at:38" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/unsetenv.at:57: cat > test.conf <<EOT rush 2.0 rule unsetenv LOGIN=\$MY_USER EOT echo \"; command\" echo \"; command\" >&2 env -i HOME=\$PWD USER=\$MY_USER LOGIN=NO_\$MY_USER \$RUSHDIR/rush -C none -Denviron -c \"command\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "unsetenv.at:57" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule unsetenv LOGIN=$MY_USER EOT echo "; command" echo "; command" >&2 env -i HOME=$PWD USER=$MY_USER LOGIN=NO_$MY_USER $RUSHDIR/rush -C none -Denviron -c "command" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; command " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; command { \"environ\":[ \"HOME=$TESTDIR\", \"LOGIN=NO_$MY_USER\", \"USER=$MY_USER\" ] } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/unsetenv.at:57" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/unsetenv.at:77: cat > test.conf <<EOT rush 2.0 rule unsetenv \"TEST_*\" EOT echo \"; command\" echo \"; command\" >&2 env -i HOME=\$PWD USER=\$MY_USER TEST_FOO=foo TEST_BAR=bar \$RUSHDIR/rush -C none -Denviron -c \"command\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "unsetenv.at:77" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule unsetenv "TEST_*" EOT echo "; command" echo "; command" >&2 env -i HOME=$PWD USER=$MY_USER TEST_FOO=foo TEST_BAR=bar $RUSHDIR/rush -C none -Denviron -c "command" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; command " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; command { \"environ\":[ \"HOME=$TESTDIR\", \"USER=$MY_USER\" ] } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/unsetenv.at:77" $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 'keepenv.at:17' \ "keepenv" " " 7 at_xfail=no ( printf "%s\n" "52. $at_setup_line: testing $at_desc ..." $at_traceon myvars { set +x printf "%s\n" "$at_srcdir/keepenv.at:21: cat > test.conf <<EOT rush 2.0 rule clrenv keepenv HOME USER \"TEST_*\" EOT echo \"; command\" echo \"; command\" >&2 env -i HOME=\$PWD USER=\$MY_USER LOGIN=NO_\$MY_USER PATH=\$PATH TEST_FOO=foo TEST_BAR=bar \$RUSHDIR/rush -C none -Denviron -c \"command\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "keepenv.at:21" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule clrenv keepenv HOME USER "TEST_*" EOT echo "; command" echo "; command" >&2 env -i HOME=$PWD USER=$MY_USER LOGIN=NO_$MY_USER PATH=$PATH TEST_FOO=foo TEST_BAR=bar $RUSHDIR/rush -C none -Denviron -c "command" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; command " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; command { \"environ\":[ \"HOME=$TESTDIR\", \"TEST_BAR=bar\", \"TEST_FOO=foo\", \"USER=$MY_USER\" ] } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/keepenv.at:21" $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 'setenv.at:17' \ "setenv" " " 7 at_xfail=no ( printf "%s\n" "53. $at_setup_line: testing $at_desc ..." $at_traceon myvars { set +x printf "%s\n" "$at_srcdir/setenv.at:21: cat > test.conf <<EOT rush 2.0 rule setenv NEWVAR=foo EOT echo \"; command\" echo \"; command\" >&2 env -i HOME=\$PWD USER=\$MY_USER \$RUSHDIR/rush -C none -Denviron -c \"command\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "setenv.at:21" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule setenv NEWVAR=foo EOT echo "; command" echo "; command" >&2 env -i HOME=$PWD USER=$MY_USER $RUSHDIR/rush -C none -Denviron -c "command" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; command " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; command { \"environ\":[ \"HOME=$TESTDIR\", \"NEWVAR=foo\", \"USER=$MY_USER\" ] } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/setenv.at:21" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/setenv.at:41: cat > test.conf <<EOT rush 2.0 rule setenv MYPATH=\"\\\${MYPATH:-}\\\${MYPATH+:}/usr/local/bin\" EOT echo \"; command\" echo \"; command\" >&2 env -i \$RUSHDIR/rush -C none -Denviron -c \"command\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'a ${...} parameter expansion' "setenv.at:41" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule setenv MYPATH="\${MYPATH:-}\${MYPATH+:}/usr/local/bin" EOT echo "; command" echo "; command" >&2 env -i $RUSHDIR/rush -C none -Denviron -c "command" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; command " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; command { \"environ\":[ \"MYPATH=/usr/local/bin\" ] } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/setenv.at:41" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/setenv.at:59: cat > test.conf <<EOT rush 2.0 rule setenv MYPATH=\"\\\${MYPATH:-}\\\${MYPATH+:}/usr/local/bin\" EOT echo \"; command\" echo \"; command\" >&2 env -i MYPATH=/bin:/usr/bin \$RUSHDIR/rush -C none -Denviron -c \"command\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'a ${...} parameter expansion' "setenv.at:59" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule setenv MYPATH="\${MYPATH:-}\${MYPATH+:}/usr/local/bin" EOT echo "; command" echo "; command" >&2 env -i MYPATH=/bin:/usr/bin $RUSHDIR/rush -C none -Denviron -c "command" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; command " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; command { \"environ\":[ \"MYPATH=/bin:/usr/bin:/usr/local/bin\" ] } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/setenv.at:59" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/setenv.at:77: cat > test.conf <<EOT rush 2.0 rule setenv MYPATH=\"/usr/local/bin\\\${MYPATH+:}\\\${MYPATH:-}\" EOT echo \"; command\" echo \"; command\" >&2 env -i \$RUSHDIR/rush -C none -Denviron -c \"command\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'a ${...} parameter expansion' "setenv.at:77" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule setenv MYPATH="/usr/local/bin\${MYPATH+:}\${MYPATH:-}" EOT echo "; command" echo "; command" >&2 env -i $RUSHDIR/rush -C none -Denviron -c "command" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; command " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; command { \"environ\":[ \"MYPATH=/usr/local/bin\" ] } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/setenv.at:77" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/setenv.at:95: cat > test.conf <<EOT rush 2.0 rule setenv MYPATH=\"/usr/local/bin\\\${MYPATH+:}\\\$MYPATH\" EOT echo \"; command\" echo \"; command\" >&2 env -i MYPATH=/bin:/usr/bin \$RUSHDIR/rush -C none -Denviron -c \"command\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'a ${...} parameter expansion' "setenv.at:95" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule setenv MYPATH="/usr/local/bin\${MYPATH+:}\$MYPATH" EOT echo "; command" echo "; command" >&2 env -i MYPATH=/bin:/usr/bin $RUSHDIR/rush -C none -Denviron -c "command" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; command " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; command { \"environ\":[ \"MYPATH=/usr/local/bin:/bin:/usr/bin\" ] } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/setenv.at:95" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/setenv.at:113: cat > test.conf <<EOT rush 2.0 rule setenv MYPATH=\"/usr/local/bin:\\\$MYPATH\" EOT echo \"; command\" echo \"; command\" >&2 env -i MYPATH=/bin:/usr/bin \$RUSHDIR/rush -C none -Denviron -c \"command\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "setenv.at:113" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule setenv MYPATH="/usr/local/bin:\$MYPATH" EOT echo "; command" echo "; command" >&2 env -i MYPATH=/bin:/usr/bin $RUSHDIR/rush -C none -Denviron -c "command" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; command " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; command { \"environ\":[ \"MYPATH=/usr/local/bin:/bin:/usr/bin\" ] } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/setenv.at:113" $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 'evalenv.at:17' \ "evalenv" " " 7 at_xfail=no ( printf "%s\n" "54. $at_setup_line: testing $at_desc ..." $at_traceon myvars { set +x printf "%s\n" "$at_srcdir/evalenv.at:21: cat > test.conf <<EOT rush 2.0 rule evalenv \\\${FOO:=test} evalenv \\\${BAR:=bar} evalenv \\\$HOME EOT echo \"; command\" echo \"; command\" >&2 env -i HOME=\$PWD USER=\$MY_USER FOO=foo \$RUSHDIR/rush -C none -Denviron -c \"command\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'a ${...} parameter expansion' "evalenv.at:21" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule evalenv \${FOO:=test} evalenv \${BAR:=bar} evalenv \$HOME EOT echo "; command" echo "; command" >&2 env -i HOME=$PWD USER=$MY_USER FOO=foo $RUSHDIR/rush -C none -Denviron -c "command" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; command " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; command { \"environ\":[ \"BAR=bar\", \"FOO=foo\", \"HOME=$TESTDIR\", \"USER=$MY_USER\" ] } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/evalenv.at:21" $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 'backref.at:17' \ "Back-reference expansion" " " 8 at_xfail=no ( printf "%s\n" "55. $at_setup_line: testing $at_desc ..." $at_traceon myvars { set +x printf "%s\n" "$at_srcdir/backref.at:20: cat > test.conf <<EOT rush 2.0 rule chdir match \\\$command ~ \"^cd \\\"(.+)\\\" && (runcom .*)\$\" chdir %1 set command = \"%{2}\" fall-through rule runcom match \\\$0 == runcom set [0] = \"./bin/runcom\" EOT echo \"; cd \\\"\$PWD\\\" && runcom test\" echo \"; cd \\\"\$PWD\\\" && runcom test\" >&2 rush -C none -Dcmdline,home_dir -c \"cd \\\"\$PWD\\\" && runcom test\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "backref.at:20" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule chdir match \$command ~ "^cd \"(.+)\" && (runcom .*)$" chdir %1 set command = "%{2}" fall-through rule runcom match \$0 == runcom set [0] = "./bin/runcom" EOT echo "; cd \"$PWD\" && runcom test" echo "; cd \"$PWD\" && runcom test" >&2 rush -C none -Dcmdline,home_dir -c "cd \"$PWD\" && runcom test" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; cd \"$PWD\" && runcom test " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; cd \"$PWD\" && runcom test { \"cmdline\":\"./bin/runcom test\", \"home_dir\":\"$TESTDIR\" } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/backref.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_55 #AT_START_56 at_fn_group_banner 56 'fallthrough.at:17' \ "fall-through" " " 9 at_xfail=no ( printf "%s\n" "56. $at_setup_line: testing $at_desc ..." $at_traceon myvars { set +x printf "%s\n" "$at_srcdir/fallthrough.at:20: cat > test.conf <<EOT rush 2.0 rule set [0] = newcommand fall-through rule set [1] = list EOT echo \"; command\" echo \"; command\" >&2 rush -C none -Dcmdline,argv -c \"command\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "fallthrough.at:20" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule set [0] = newcommand fall-through rule set [1] = list EOT echo "; command" echo "; command" >&2 rush -C none -Dcmdline,argv -c "command" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; command " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; command { \"cmdline\":\"newcommand list\", \"argv\":[ \"newcommand\", \"list\" ] } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/fallthrough.at:20" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/fallthrough.at:42: cat > test.conf <<EOT rush 2.0 rule chdir \"/tmp\" fall-through rule set [0] = newcommand interactive true EOT echo \"; interactive\" echo \"; interactive\" >&2 rush -C none -Dcmdline,interactive,home_dir -i test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "fallthrough.at:42" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule chdir "/tmp" fall-through rule set [0] = newcommand interactive true EOT echo "; interactive" echo "; interactive" >&2 rush -C none -Dcmdline,interactive,home_dir -i test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; interactive " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; interactive { \"cmdline\":\"newcommand\", \"interactive\":1, \"home_dir\":null } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/fallthrough.at:42" $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 'error.at:17' \ "error" " " 9 at_xfail=no ( printf "%s\n" "57. $at_setup_line: testing $at_desc ..." $at_traceon myvars { set +x printf "%s\n" "$at_srcdir/error.at:20: cat > test.conf <<EOT rush 2.0 rule exit \"Forced error\" EOT echo \"; command\" echo \"; command\" >&2 rush -C none -Dcmdline -c \"command\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "error.at:20" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule exit "Forced error" EOT echo "; command" echo "; command" >&2 rush -C none -Dcmdline -c "command" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; command Forced error " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; command ; 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/error.at:20" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/error.at:32: cat > test.conf <<EOT rush 2.0 rule exit 1 \"Forced error\" EOT echo \"; command\" echo \"; command\" >&2 rush -C none -Dcmdline -c \"command\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "error.at:32" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule exit 1 "Forced error" EOT echo "; command" echo "; command" >&2 rush -C none -Dcmdline -c "command" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; command " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; command Forced error ; 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/error.at:32" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/error.at:44: cat > test.conf <<EOT rush 2.0 rule exit 1 nologin-error EOT echo \"; command\" echo \"; command\" >&2 rush -C none -Dcmdline -c \"command\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "error.at:44" ( $at_check_trace; cat > test.conf <<EOT rush 2.0 rule exit 1 nologin-error EOT echo "; command" echo "; command" >&2 rush -C none -Dcmdline -c "command" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; command " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; command You do not have interactive login access to this machine. Contact the systems administrator for further assistance. ; 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/error.at:44" $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 'inc00.at:17' \ "basic include functionality" " " 10 at_xfail=no ( printf "%s\n" "58. $at_setup_line: testing $at_desc ..." $at_traceon { set +x printf "%s\n" "$at_srcdir/inc00.at:20: cat >test.cf <<'_ATEOF' rush 2.0 rule match \$0 == \"ls\" include \"i1.cf\" rule match \$0 == \"dir\" include \"i2.cf\" _ATEOF cat >i1.cf <<'_ATEOF' set [0] = \"/bin/ls\" _ATEOF cat >i2.cf <<'_ATEOF' set [0] = \"/bin/dir\" _ATEOF rush -C none -D cmdline -t -c \"ls\" test.cf rush -C none -D cmdline -t -c \"dir\" test.cf " at_fn_check_prepare_notrace 'an embedded newline' "inc00.at:20" ( $at_check_trace; cat >test.cf <<'_ATEOF' rush 2.0 rule match $0 == "ls" include "i1.cf" rule match $0 == "dir" include "i2.cf" _ATEOF cat >i1.cf <<'_ATEOF' set [0] = "/bin/ls" _ATEOF cat >i2.cf <<'_ATEOF' set [0] = "/bin/dir" _ATEOF rush -C none -D cmdline -t -c "ls" test.cf rush -C none -D cmdline -t -c "dir" 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"; printf "%s\n" "{ \"cmdline\":\"/bin/ls\" } { \"cmdline\":\"/bin/dir\" } " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/inc00.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_58 #AT_START_59 at_fn_group_banner 59 'inc01.at:17' \ "rule and global statements" " " 10 at_xfail=no ( printf "%s\n" "59. $at_setup_line: testing $at_desc ..." $at_traceon { set +x printf "%s\n" "$at_srcdir/inc01.at:20: cat >test.cf <<'_ATEOF' rush 2.0 rule match \$0 == \"ls\" include \"i1.cf\" _ATEOF cat >i1.cf <<'_ATEOF' setenv INC=\"i1\" rule new set command = \"dir\" _ATEOF rush -C none -D cmdline -t -c \"ls\" test.cf " at_fn_check_prepare_notrace 'an embedded newline' "inc01.at:20" ( $at_check_trace; cat >test.cf <<'_ATEOF' rush 2.0 rule match $0 == "ls" include "i1.cf" _ATEOF cat >i1.cf <<'_ATEOF' setenv INC="i1" rule new set command = "dir" _ATEOF rush -C none -D cmdline -t -c "ls" test.cf ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "rush: Error: i1.cf:3.1-5: the rule statement is not allowed in included file rush: Error: i1.cf:3.1-5: skipping to the end of file rush: Error: errors in configuration file " | \ $at_diff - "$at_stderr" || at_failed=: at_fn_diff_devnull "$at_stdout" || at_failed=: at_fn_check_status 1 $at_status "$at_srcdir/inc01.at:20" $at_failed && at_fn_log_failure $at_traceon; } { set +x printf "%s\n" "$at_srcdir/inc01.at:42: cat >test.cf <<'_ATEOF' rush 2.0 rule match \$0 == \"ls\" include \"i1.cf\" _ATEOF cat >i1.cf <<'_ATEOF' setenv INC=\"i1\" global debug 2 _ATEOF rush -C none -D cmdline -t -c \"ls\" test.cf " at_fn_check_prepare_notrace 'an embedded newline' "inc01.at:42" ( $at_check_trace; cat >test.cf <<'_ATEOF' rush 2.0 rule match $0 == "ls" include "i1.cf" _ATEOF cat >i1.cf <<'_ATEOF' setenv INC="i1" global debug 2 _ATEOF rush -C none -D cmdline -t -c "ls" test.cf ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "rush: Error: i1.cf:3.1-7: the global statement is not allowed in included file rush: Error: i1.cf:3.1-7: skipping to the end of file rush: Error: errors in configuration file " | \ $at_diff - "$at_stderr" || at_failed=: at_fn_diff_devnull "$at_stdout" || at_failed=: at_fn_check_status 1 $at_status "$at_srcdir/inc01.at:42" $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 'argc.at:17' \ "argc" " " 11 at_xfail=no ( printf "%s\n" "60. $at_setup_line: testing $at_desc ..." $at_traceon myvars { set +x printf "%s\n" "$at_srcdir/argc.at:20: cat > test.conf <<EOT rule argc 2 EOT echo \"; /usr/bin/echo foo\" echo \"; /usr/bin/echo foo\" >&2 rush -C none -Dcmdline,argv,prog,interactive,fork,acct -c \"/usr/bin/echo foo\" test.conf echo \"; \$?\" echo \"; /usr/bin/echo foo bar\" echo \"; /usr/bin/echo foo bar\" >&2 rush -C none -Dcmdline,argv,prog,interactive,fork,acct -c \"/usr/bin/echo foo bar\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "argc.at:20" ( $at_check_trace; cat > test.conf <<EOT rule argc 2 EOT echo "; /usr/bin/echo foo" echo "; /usr/bin/echo foo" >&2 rush -C none -Dcmdline,argv,prog,interactive,fork,acct -c "/usr/bin/echo foo" test.conf echo "; $?" echo "; /usr/bin/echo foo bar" echo "; /usr/bin/echo foo bar" >&2 rush -C none -Dcmdline,argv,prog,interactive,fork,acct -c "/usr/bin/echo foo bar" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; /usr/bin/echo foo rush: Notice: parsing legacy configuration file test.conf ; /usr/bin/echo foo bar rush: Notice: parsing legacy configuration file test.conf rush: Error: no matching rule for \"/usr/bin/echo foo bar\", user $MY_USER " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; /usr/bin/echo foo { \"cmdline\":\"/usr/bin/echo foo\", \"argv\":[ \"/usr/bin/echo\", \"foo\" ], \"prog\":null, \"interactive\":0, \"fork\":-1, \"acct\":-1 } ; 0 ; /usr/bin/echo foo bar ; 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/argc.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_60 #AT_START_61 at_fn_group_banner 61 'command.at:17' \ "command" " " 11 at_xfail=no ( printf "%s\n" "61. $at_setup_line: testing $at_desc ..." $at_traceon myvars { set +x printf "%s\n" "$at_srcdir/command.at:20: cat > test.conf <<EOT rule command echo[[:space:]]+foo\$ EOT echo \"; /usr/bin/echo foo\" echo \"; /usr/bin/echo foo\" >&2 rush -C none -Dcmdline,argv,prog,interactive,fork,acct -c \"/usr/bin/echo foo\" test.conf echo \"; \$?\" echo \"; /usr/bin/echo foo bar\" echo \"; /usr/bin/echo foo bar\" >&2 rush -C none -Dcmdline,argv,prog,interactive,fork,acct -c \"/usr/bin/echo foo bar\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "command.at:20" ( $at_check_trace; cat > test.conf <<EOT rule command echo[[:space:]]+foo$ EOT echo "; /usr/bin/echo foo" echo "; /usr/bin/echo foo" >&2 rush -C none -Dcmdline,argv,prog,interactive,fork,acct -c "/usr/bin/echo foo" test.conf echo "; $?" echo "; /usr/bin/echo foo bar" echo "; /usr/bin/echo foo bar" >&2 rush -C none -Dcmdline,argv,prog,interactive,fork,acct -c "/usr/bin/echo foo bar" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; /usr/bin/echo foo rush: Notice: parsing legacy configuration file test.conf ; /usr/bin/echo foo bar rush: Notice: parsing legacy configuration file test.conf rush: Error: no matching rule for \"/usr/bin/echo foo bar\", user $MY_USER " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; /usr/bin/echo foo { \"cmdline\":\"/usr/bin/echo foo\", \"argv\":[ \"/usr/bin/echo\", \"foo\" ], \"prog\":null, \"interactive\":0, \"fork\":-1, \"acct\":-1 } ; 0 ; /usr/bin/echo foo bar ; 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/command.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_61 #AT_START_62 at_fn_group_banner 62 'match.at:17' \ "match" " " 11 at_xfail=no ( printf "%s\n" "62. $at_setup_line: testing $at_desc ..." $at_traceon myvars { set +x printf "%s\n" "$at_srcdir/match.at:20: cat > test.conf <<EOT rule match[1] fo+ EOT echo \"; /usr/bin/echo foo\" echo \"; /usr/bin/echo foo\" >&2 rush -C none -Dcmdline,argv,prog -c \"/usr/bin/echo foo\" test.conf echo \"; \$?\" echo \"; /usr/bin/echo bar\" echo \"; /usr/bin/echo bar\" >&2 rush -C none -Dcmdline,argv,prog -c \"/usr/bin/echo bar\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "match.at:20" ( $at_check_trace; cat > test.conf <<EOT rule match[1] fo+ EOT echo "; /usr/bin/echo foo" echo "; /usr/bin/echo foo" >&2 rush -C none -Dcmdline,argv,prog -c "/usr/bin/echo foo" test.conf echo "; $?" echo "; /usr/bin/echo bar" echo "; /usr/bin/echo bar" >&2 rush -C none -Dcmdline,argv,prog -c "/usr/bin/echo bar" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; /usr/bin/echo foo rush: Notice: parsing legacy configuration file test.conf ; /usr/bin/echo bar rush: Notice: parsing legacy configuration file test.conf rush: Error: no matching rule for \"/usr/bin/echo bar\", user $MY_USER " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; /usr/bin/echo foo { \"cmdline\":\"/usr/bin/echo foo\", \"argv\":[ \"/usr/bin/echo\", \"foo\" ], \"prog\":null } ; 0 ; /usr/bin/echo bar ; 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/match.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_62 #AT_START_63 at_fn_group_banner 63 'matchprog.at:17' \ "match program name" " " 11 at_xfail=no ( printf "%s\n" "63. $at_setup_line: testing $at_desc ..." $at_traceon myvars { set +x printf "%s\n" "$at_srcdir/matchprog.at:20: cat > test.conf <<EOT rule match[^] /usr/bin/.* EOT echo \"; /usr/bin/echo foo\" echo \"; /usr/bin/echo foo\" >&2 rush -C none -Dcmdline,argv,prog -c \"/usr/bin/echo foo\" test.conf echo \"; \$?\" echo \"; echo foo\" echo \"; echo foo\" >&2 rush -C none -Dcmdline,argv,prog -c \"echo foo\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "matchprog.at:20" ( $at_check_trace; cat > test.conf <<EOT rule match[^] /usr/bin/.* EOT echo "; /usr/bin/echo foo" echo "; /usr/bin/echo foo" >&2 rush -C none -Dcmdline,argv,prog -c "/usr/bin/echo foo" test.conf echo "; $?" echo "; echo foo" echo "; echo foo" >&2 rush -C none -Dcmdline,argv,prog -c "echo foo" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; /usr/bin/echo foo rush: Notice: parsing legacy configuration file test.conf ; echo foo rush: Notice: parsing legacy configuration file test.conf rush: Error: no matching rule for \"echo foo\", user $MY_USER " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; /usr/bin/echo foo { \"cmdline\":\"/usr/bin/echo foo\", \"argv\":[ \"/usr/bin/echo\", \"foo\" ], \"prog\":null } ; 0 ; echo foo ; 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/matchprog.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_63 #AT_START_64 at_fn_group_banner 64 'uid.at:17' \ "uid" " " 11 at_xfail=no ( printf "%s\n" "64. $at_setup_line: testing $at_desc ..." $at_traceon myvars { set +x printf "%s\n" "$at_srcdir/uid.at:20: cat > test.conf <<EOT rule uid \$MY_USER EOT echo \"; ls /\" echo \"; ls /\" >&2 rush -C none -Dcmdline,argv,prog -c \"ls /\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "uid.at:20" ( $at_check_trace; cat > test.conf <<EOT rule uid $MY_USER EOT echo "; ls /" echo "; ls /" >&2 rush -C none -Dcmdline,argv,prog -c "ls /" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; ls / rush: Notice: parsing legacy configuration file test.conf " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; ls / { \"cmdline\":\"ls /\", \"argv\":[ \"ls\", \"/\" ], \"prog\":null } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/uid.at:20" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/uid.at:39: cat > test.conf <<EOT rule uid != \$MY_USER EOT echo \"; ls /\" echo \"; ls /\" >&2 rush -C none -Dcmdline,argv,prog -c \"ls /\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "uid.at:39" ( $at_check_trace; cat > test.conf <<EOT rule uid != $MY_USER EOT echo "; ls /" echo "; ls /" >&2 rush -C none -Dcmdline,argv,prog -c "ls /" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; ls / rush: Notice: parsing legacy configuration file test.conf rush: Error: no matching rule for \"ls /\", user $MY_USER " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; ls / ; 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/uid.at:39" $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 'gid.at:17' \ "gid" " " 11 at_xfail=no ( printf "%s\n" "65. $at_setup_line: testing $at_desc ..." $at_traceon myvars { set +x printf "%s\n" "$at_srcdir/gid.at:20: cat > test.conf <<EOT rule gid \$MY_GROUP EOT echo \"; ls /\" echo \"; ls /\" >&2 rush -C none -Dcmdline,argv,prog -c \"ls /\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "gid.at:20" ( $at_check_trace; cat > test.conf <<EOT rule gid $MY_GROUP EOT echo "; ls /" echo "; ls /" >&2 rush -C none -Dcmdline,argv,prog -c "ls /" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; ls / rush: Notice: parsing legacy configuration file test.conf " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; ls / { \"cmdline\":\"ls /\", \"argv\":[ \"ls\", \"/\" ], \"prog\":null } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/gid.at:20" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/gid.at:39: cat > test.conf <<EOT rule gid != \$MY_GROUP EOT echo \"; ls /\" echo \"; ls /\" >&2 rush -C none -Dcmdline,argv,prog -c \"ls /\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "gid.at:39" ( $at_check_trace; cat > test.conf <<EOT rule gid != $MY_GROUP EOT echo "; ls /" echo "; ls /" >&2 rush -C none -Dcmdline,argv,prog -c "ls /" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; ls / rush: Notice: parsing legacy configuration file test.conf rush: Error: no matching rule for \"ls /\", user $MY_USER " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; ls / ; 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/gid.at:39" $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 'set.at:17' \ "set" " " 11 at_xfail=no ( printf "%s\n" "66. $at_setup_line: testing $at_desc ..." $at_traceon myvars { set +x printf "%s\n" "$at_srcdir/set.at:20: cat > test.conf <<EOT rule set ls / EOT echo \"; echo\" echo \"; echo\" >&2 rush -C none -Dcmdline,argv,prog -c \"echo\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "set.at:20" ( $at_check_trace; cat > test.conf <<EOT rule set ls / EOT echo "; echo" echo "; echo" >&2 rush -C none -Dcmdline,argv,prog -c "echo" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; echo rush: Notice: parsing legacy configuration file test.conf " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; echo { \"cmdline\":\"ls /\", \"argv\":[ \"ls\", \"/\" ], \"prog\":null } ; 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; } myvars { set +x printf "%s\n" "$at_srcdir/set.at:39: cat > test.conf <<EOT rule set[0] /usr/bin/\\\$0 EOT echo \"; ls /\" echo \"; ls /\" >&2 rush -C none -Dcmdline,argv,prog -c \"ls /\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "set.at:39" ( $at_check_trace; cat > test.conf <<EOT rule set[0] /usr/bin/\$0 EOT echo "; ls /" echo "; ls /" >&2 rush -C none -Dcmdline,argv,prog -c "ls /" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; ls / rush: Notice: parsing legacy configuration file test.conf " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; ls / { \"cmdline\":\"/usr/bin/ls /\", \"argv\":[ \"/usr/bin/ls\", \"/\" ], \"prog\":null } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/set.at:39" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/set.at:58: cat > test.conf <<EOT rule set[1] /chroot\\\${1} EOT echo \"; ls /\" echo \"; ls /\" >&2 rush -C none -Dcmdline,argv,prog -c \"ls /\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'a ${...} parameter expansion' "set.at:58" ( $at_check_trace; cat > test.conf <<EOT rule set[1] /chroot\${1} EOT echo "; ls /" echo "; ls /" >&2 rush -C none -Dcmdline,argv,prog -c "ls /" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; ls / rush: Notice: parsing legacy configuration file test.conf " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; ls / { \"cmdline\":\"ls /chroot/\", \"argv\":[ \"ls\", \"/chroot/\" ], \"prog\":null } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/set.at:58" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/set.at:77: cat > test.conf <<EOT rule set[^] /usr/bin/ls EOT echo \"; ls /\" echo \"; ls /\" >&2 rush -C none -Dcmdline,argv,prog -c \"ls /\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "set.at:77" ( $at_check_trace; cat > test.conf <<EOT rule set[^] /usr/bin/ls EOT echo "; ls /" echo "; ls /" >&2 rush -C none -Dcmdline,argv,prog -c "ls /" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; ls / rush: Notice: parsing legacy configuration file test.conf " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; ls / { \"cmdline\":\"ls /\", \"argv\":[ \"ls\", \"/\" ], \"prog\":\"/usr/bin/ls\" } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/set.at:77" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/set.at:96: cat > test.conf <<EOT rule set[\$] /tmp EOT echo \"; ls /\" echo \"; ls /\" >&2 rush -C none -Dcmdline,argv,prog -c \"ls /\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "set.at:96" ( $at_check_trace; cat > test.conf <<EOT rule set[$] /tmp EOT echo "; ls /" echo "; ls /" >&2 rush -C none -Dcmdline,argv,prog -c "ls /" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; ls / rush: Notice: parsing legacy configuration file test.conf " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; ls / { \"cmdline\":\"ls /tmp\", \"argv\":[ \"ls\", \"/tmp\" ], \"prog\":null } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/set.at:96" $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 'delete.at:17' \ "delete" " " 11 at_xfail=no ( printf "%s\n" "67. $at_setup_line: testing $at_desc ..." $at_traceon myvars { set +x printf "%s\n" "$at_srcdir/delete.at:20: cat > test.conf <<EOT rule delete[1] EOT echo \"; echo foo bar\" echo \"; echo foo bar\" >&2 rush -C none -Dcmdline,argv,prog -c \"echo foo bar\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "delete.at:20" ( $at_check_trace; cat > test.conf <<EOT rule delete[1] EOT echo "; echo foo bar" echo "; echo foo bar" >&2 rush -C none -Dcmdline,argv,prog -c "echo foo bar" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; echo foo bar rush: Notice: parsing legacy configuration file test.conf " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; echo foo bar { \"cmdline\":\"echo bar\", \"argv\":[ \"echo\", \"bar\" ], \"prog\":null } ; 0 " | \ $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; } myvars { set +x printf "%s\n" "$at_srcdir/delete.at:39: cat > test.conf <<EOT rule delete[\$] EOT echo \"; echo foo bar\" echo \"; echo foo bar\" >&2 rush -C none -Dcmdline,argv,prog -c \"echo foo bar\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "delete.at:39" ( $at_check_trace; cat > test.conf <<EOT rule delete[$] EOT echo "; echo foo bar" echo "; echo foo bar" >&2 rush -C none -Dcmdline,argv,prog -c "echo foo bar" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; echo foo bar rush: Notice: parsing legacy configuration file test.conf " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; echo foo bar { \"cmdline\":\"echo foo\", \"argv\":[ \"echo\", \"foo\" ], \"prog\":null } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/delete.at:39" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/delete.at:58: cat > test.conf <<EOT rule delete 2 4 EOT echo \"; echo foo bar baz quux wum\" echo \"; echo foo bar baz quux wum\" >&2 rush -C none -Dcmdline,argv,prog -c \"echo foo bar baz quux wum\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "delete.at:58" ( $at_check_trace; cat > test.conf <<EOT rule delete 2 4 EOT echo "; echo foo bar baz quux wum" echo "; echo foo bar baz quux wum" >&2 rush -C none -Dcmdline,argv,prog -c "echo foo bar baz quux wum" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; echo foo bar baz quux wum rush: Notice: parsing legacy configuration file test.conf " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; echo foo bar baz quux wum { \"cmdline\":\"echo foo wum\", \"argv\":[ \"echo\", \"foo\", \"wum\" ], \"prog\":null } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/delete.at:58" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/delete.at:78: cat > test.conf <<EOT rule delete[0] EOT echo \"; echo foo bar\" echo \"; echo foo bar\" >&2 rush -C none -Dcmdline,argv,prog -c \"echo foo bar\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "delete.at:78" ( $at_check_trace; cat > test.conf <<EOT rule delete[0] EOT echo "; echo foo bar" echo "; echo foo bar" >&2 rush -C none -Dcmdline,argv,prog -c "echo foo bar" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; echo foo bar rush: Notice: parsing legacy configuration file test.conf rush: Error: Deleting argv[0] is prohibited " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; echo foo bar ; 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/delete.at:78" $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 'transform.at:17' \ "transform" " " 11 at_xfail=no ( printf "%s\n" "68. $at_setup_line: testing $at_desc ..." $at_traceon myvars { set +x printf "%s\n" "$at_srcdir/transform.at:20: cat > test.conf <<EOT rule transform s/^[^[:space:]]+/& -t/ EOT echo \"; svnserve\" echo \"; svnserve\" >&2 rush -C none -Dcmdline,argv,prog -c \"svnserve\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "transform.at:20" ( $at_check_trace; cat > test.conf <<EOT rule transform s/^[^[:space:]]+/& -t/ EOT echo "; svnserve" echo "; svnserve" >&2 rush -C none -Dcmdline,argv,prog -c "svnserve" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; svnserve rush: Notice: parsing legacy configuration file test.conf " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; svnserve { \"cmdline\":\"svnserve -t\", \"argv\":[ \"svnserve\", \"-t\" ], \"prog\":null } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/transform.at:20" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/transform.at:39: cat > test.conf <<EOT rule transform \"\\\${command} end\" s/[[:space:]]+-[^[:space:]]+//g EOT echo \"; echo -c -t foo -n bar\" echo \"; echo -c -t foo -n bar\" >&2 rush -C none -Dcmdline,argv,prog -c \"echo -c -t foo -n bar\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'a ${...} parameter expansion' "transform.at:39" ( $at_check_trace; cat > test.conf <<EOT rule transform "\${command} end" s/[[:space:]]+-[^[:space:]]+//g EOT echo "; echo -c -t foo -n bar" echo "; echo -c -t foo -n bar" >&2 rush -C none -Dcmdline,argv,prog -c "echo -c -t foo -n bar" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; echo -c -t foo -n bar rush: Notice: parsing legacy configuration file test.conf " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; echo -c -t foo -n bar { \"cmdline\":\"echo foo bar end\", \"argv\":[ \"echo\", \"foo\", \"bar\", \"end\" ], \"prog\":null } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/transform.at:39" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/transform.at:60: cat > test.conf <<EOT rule transform[0] s|^[^/]|/usr/bin/&| EOT echo \"; echo foo\" echo \"; echo foo\" >&2 rush -C none -Dcmdline,argv,prog -c \"echo foo\" test.conf echo \"; \$?\" echo \"; /bin/echo foo\" echo \"; /bin/echo foo\" >&2 rush -C none -Dcmdline,argv,prog -c \"/bin/echo foo\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "transform.at:60" ( $at_check_trace; cat > test.conf <<EOT rule transform[0] s|^[^/]|/usr/bin/&| EOT echo "; echo foo" echo "; echo foo" >&2 rush -C none -Dcmdline,argv,prog -c "echo foo" test.conf echo "; $?" echo "; /bin/echo foo" echo "; /bin/echo foo" >&2 rush -C none -Dcmdline,argv,prog -c "/bin/echo foo" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; echo foo rush: Notice: parsing legacy configuration file test.conf ; /bin/echo foo rush: Notice: parsing legacy configuration file test.conf " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; echo foo { \"cmdline\":\"/usr/bin/echo foo\", \"argv\":[ \"/usr/bin/echo\", \"foo\" ], \"prog\":null } ; 0 ; /bin/echo foo { \"cmdline\":\"/bin/echo foo\", \"argv\":[ \"/bin/echo\", \"foo\" ], \"prog\":null } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/transform.at:60" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/transform.at:93: cat > test.conf <<EOT rule transform[0] \\\$program s,.*/,-, EOT echo \"; /bin/sh\" echo \"; /bin/sh\" >&2 rush -C none -Dcmdline,argv,prog -c \"/bin/sh\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "transform.at:93" ( $at_check_trace; cat > test.conf <<EOT rule transform[0] \$program s,.*/,-, EOT echo "; /bin/sh" echo "; /bin/sh" >&2 rush -C none -Dcmdline,argv,prog -c "/bin/sh" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; /bin/sh rush: Notice: parsing legacy configuration file test.conf " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; /bin/sh { \"cmdline\":\"-sh\", \"argv\":[ \"-sh\" ], \"prog\":null } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/transform.at:93" $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 'map.at:17' \ "map" " " 11 at_xfail=no ( printf "%s\n" "69. $at_setup_line: testing $at_desc ..." $at_traceon { set +x printf "%s\n" "$at_srcdir/map.at:20: myvars cat > passwd.rush <<EOT x\$MY_USER:x:\$((\$MY_UID + 1)):\$((\$MY_GID + 1))::/root:/bin/bash \$MY_USER:x:\$MY_UID:\$MY_GID:Me:/:/rush_special_shell EOT WD=\`pwd\` cat > test.conf <<EOT rule map[0] \$WD/passwd.rush : \\\${user} 1 7 /nologin EOT set -e echo Matching map rush -C none -Dcmdline,argv,prog -c 'command arg' test.conf echo No match, return default > passwd.rush rush -C none -Dcmdline,argv,prog -c 'command arg' test.conf echo No match, no default cat > test.conf <<EOT rule map[0] \$WD/passwd.rush : \\\${user} 1 7 EOT rush -C none -Dcmdline,argv,prog -c 'command arg' test.conf " at_fn_check_prepare_notrace 'a `...` command substitution' "map.at:20" ( $at_check_trace; myvars cat > passwd.rush <<EOT x$MY_USER:x:$(($MY_UID + 1)):$(($MY_GID + 1))::/root:/bin/bash $MY_USER:x:$MY_UID:$MY_GID:Me:/:/rush_special_shell EOT WD=`pwd` cat > test.conf <<EOT rule map[0] $WD/passwd.rush : \${user} 1 7 /nologin EOT set -e echo Matching map rush -C none -Dcmdline,argv,prog -c 'command arg' test.conf echo No match, return default > passwd.rush rush -C none -Dcmdline,argv,prog -c 'command arg' test.conf echo No match, no default cat > test.conf <<EOT rule map[0] $WD/passwd.rush : \${user} 1 7 EOT rush -C none -Dcmdline,argv,prog -c 'command arg' test.conf ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "rush: Notice: parsing legacy configuration file test.conf rush: Notice: parsing legacy configuration file test.conf rush: Notice: parsing legacy configuration file test.conf " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "Matching map { \"cmdline\":\"/rush_special_shell arg\", \"argv\":[ \"/rush_special_shell\", \"arg\" ], \"prog\":null } No match, return default { \"cmdline\":\"/nologin arg\", \"argv\":[ \"/nologin\", \"arg\" ], \"prog\":null } No match, no default { \"cmdline\":\"command arg\", \"argv\":[ \"command\", \"arg\" ], \"prog\":null } " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/map.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_69 #AT_START_70 at_fn_group_banner 70 'umask.at:17' \ "umask" " " 11 at_xfail=no ( printf "%s\n" "70. $at_setup_line: testing $at_desc ..." $at_traceon myvars { set +x printf "%s\n" "$at_srcdir/umask.at:20: cat > test.conf <<EOT rule umask 017 EOT echo \"; command\" echo \"; command\" >&2 rush -C none -Dumask -c \"command\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "umask.at:20" ( $at_check_trace; cat > test.conf <<EOT rule umask 017 EOT echo "; command" echo "; command" >&2 rush -C none -Dumask -c "command" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; command rush: Notice: parsing legacy configuration file test.conf " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; command { \"umask\":017 } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/umask.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_70 #AT_START_71 at_fn_group_banner 71 'newgrp.at:17' \ "newgrp" " " 11 at_xfail=no ( printf "%s\n" "71. $at_setup_line: testing $at_desc ..." $at_traceon myvars { set +x printf "%s\n" "$at_srcdir/newgrp.at:20: cat > test.conf <<EOT rule newgrp 0 EOT echo \"; command\" echo \"; command\" >&2 rush -C none -Dgid -c \"command\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "newgrp.at:20" ( $at_check_trace; cat > test.conf <<EOT rule newgrp 0 EOT echo "; command" echo "; command" >&2 rush -C none -Dgid -c "command" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; command rush: Notice: parsing legacy configuration file test.conf " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; command { \"gid\":0 } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/newgrp.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_71 #AT_START_72 at_fn_group_banner 72 'chdir.at:17' \ "chdir" " " 11 at_xfail=no ( printf "%s\n" "72. $at_setup_line: testing $at_desc ..." $at_traceon myvars { set +x printf "%s\n" "$at_srcdir/chdir.at:20: cat > test.conf <<EOT rule chdir \$PWD EOT echo \"; command\" echo \"; command\" >&2 rush -C none -Dhome_dir -c \"command\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "chdir.at:20" ( $at_check_trace; cat > test.conf <<EOT rule chdir $PWD EOT echo "; command" echo "; command" >&2 rush -C none -Dhome_dir -c "command" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; command rush: Notice: parsing legacy configuration file test.conf " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; command { \"home_dir\":\"$TESTDIR\" } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/chdir.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_72 #AT_START_73 at_fn_group_banner 73 'env.at:17' \ "env" " " 11 at_xfail=no ( printf "%s\n" "73. $at_setup_line: testing $at_desc ..." $at_traceon myvars { set +x printf "%s\n" "$at_srcdir/env.at:20: cat > test.conf <<EOT rule env - EOT echo \"; command\" echo \"; command\" >&2 rush -C none -Denviron -c \"command\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "env.at:20" ( $at_check_trace; cat > test.conf <<EOT rule env - EOT echo "; command" echo "; command" >&2 rush -C none -Denviron -c "command" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; command rush: Notice: parsing legacy configuration file test.conf " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; command { \"environ\":[] } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/env.at:20" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/env.at:35: cat > test.conf <<EOT rule env -LOGIN EOT echo \"; command\" echo \"; command\" >&2 env -i HOME=\$PWD USER=\$MY_USER LOGIN=\$MY_USER \$RUSHDIR/rush -C none -Denviron -c \"command\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "env.at:35" ( $at_check_trace; cat > test.conf <<EOT rule env -LOGIN EOT echo "; command" echo "; command" >&2 env -i HOME=$PWD USER=$MY_USER LOGIN=$MY_USER $RUSHDIR/rush -C none -Denviron -c "command" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; command rush: Notice: parsing legacy configuration file test.conf " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; command { \"environ\":[ \"HOME=$TESTDIR\", \"USER=$MY_USER\" ] } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/env.at:35" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/env.at:52: cat > test.conf <<EOT rule env -LOGIN=\$MY_USER EOT echo \"; command\" echo \"; command\" >&2 env -i HOME=\$PWD USER=\$MY_USER LOGIN=\$MY_USER \$RUSHDIR/rush -C none -Denviron -c \"command\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "env.at:52" ( $at_check_trace; cat > test.conf <<EOT rule env -LOGIN=$MY_USER EOT echo "; command" echo "; command" >&2 env -i HOME=$PWD USER=$MY_USER LOGIN=$MY_USER $RUSHDIR/rush -C none -Denviron -c "command" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; command rush: Notice: parsing legacy configuration file test.conf " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; command { \"environ\":[ \"HOME=$TESTDIR\", \"USER=$MY_USER\" ] } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/env.at:52" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/env.at:71: cat > test.conf <<EOT rule env -LOGIN=\$MY_USER EOT echo \"; command\" echo \"; command\" >&2 env -i HOME=\$PWD USER=\$MY_USER LOGIN=NO_\$MY_USER \$RUSHDIR/rush -C none -Denviron -c \"command\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "env.at:71" ( $at_check_trace; cat > test.conf <<EOT rule env -LOGIN=$MY_USER EOT echo "; command" echo "; command" >&2 env -i HOME=$PWD USER=$MY_USER LOGIN=NO_$MY_USER $RUSHDIR/rush -C none -Denviron -c "command" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; command rush: Notice: parsing legacy configuration file test.conf " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; command { \"environ\":[ \"HOME=$TESTDIR\", \"LOGIN=NO_$MY_USER\", \"USER=$MY_USER\" ] } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/env.at:71" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/env.at:91: cat > test.conf <<EOT rule env - HOME USER EOT echo \"; command\" echo \"; command\" >&2 env -i HOME=\$PWD USER=\$MY_USER LOGIN=NO_\$MY_USER PATH=\$PATH \$RUSHDIR/rush -C none -Denviron -c \"command\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "env.at:91" ( $at_check_trace; cat > test.conf <<EOT rule env - HOME USER EOT echo "; command" echo "; command" >&2 env -i HOME=$PWD USER=$MY_USER LOGIN=NO_$MY_USER PATH=$PATH $RUSHDIR/rush -C none -Denviron -c "command" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; command rush: Notice: parsing legacy configuration file test.conf " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; command { \"environ\":[ \"HOME=$TESTDIR\", \"USER=$MY_USER\" ] } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/env.at:91" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/env.at:110: cat > test.conf <<EOT rule env NEWVAR=foo EOT echo \"; command\" echo \"; command\" >&2 env -i HOME=\$PWD USER=\$MY_USER \$RUSHDIR/rush -C none -Denviron -c \"command\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "env.at:110" ( $at_check_trace; cat > test.conf <<EOT rule env NEWVAR=foo EOT echo "; command" echo "; command" >&2 env -i HOME=$PWD USER=$MY_USER $RUSHDIR/rush -C none -Denviron -c "command" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; command rush: Notice: parsing legacy configuration file test.conf " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; command { \"environ\":[ \"HOME=$TESTDIR\", \"NEWVAR=foo\", \"USER=$MY_USER\" ] } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/env.at:110" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/env.at:130: cat > test.conf <<EOT rule env MYPATH+=:/usr/local/bin EOT echo \"; command\" echo \"; command\" >&2 env -i \$RUSHDIR/rush -C none -Denviron -c \"command\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "env.at:130" ( $at_check_trace; cat > test.conf <<EOT rule env MYPATH+=:/usr/local/bin EOT echo "; command" echo "; command" >&2 env -i $RUSHDIR/rush -C none -Denviron -c "command" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; command rush: Notice: parsing legacy configuration file test.conf " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; command { \"environ\":[ \"MYPATH=/usr/local/bin\" ] } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/env.at:130" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/env.at:148: cat > test.conf <<EOT rule env MYPATH+=:/usr/local/bin EOT echo \"; command\" echo \"; command\" >&2 env -i MYPATH=/bin:/usr/bin \$RUSHDIR/rush -C none -Denviron -c \"command\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "env.at:148" ( $at_check_trace; cat > test.conf <<EOT rule env MYPATH+=:/usr/local/bin EOT echo "; command" echo "; command" >&2 env -i MYPATH=/bin:/usr/bin $RUSHDIR/rush -C none -Denviron -c "command" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; command rush: Notice: parsing legacy configuration file test.conf " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; command { \"environ\":[ \"MYPATH=/bin:/usr/bin:/usr/local/bin\" ] } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/env.at:148" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/env.at:166: cat > test.conf <<EOT rule env MYPATH=+/usr/local/bin: EOT echo \"; command\" echo \"; command\" >&2 env -i \$RUSHDIR/rush -C none -Denviron -c \"command\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "env.at:166" ( $at_check_trace; cat > test.conf <<EOT rule env MYPATH=+/usr/local/bin: EOT echo "; command" echo "; command" >&2 env -i $RUSHDIR/rush -C none -Denviron -c "command" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; command rush: Notice: parsing legacy configuration file test.conf " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; command { \"environ\":[ \"MYPATH=/usr/local/bin\" ] } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/env.at:166" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/env.at:184: cat > test.conf <<EOT rule env MYPATH=+/usr/local/bin: EOT echo \"; command\" echo \"; command\" >&2 env -i MYPATH=/bin:/usr/bin \$RUSHDIR/rush -C none -Denviron -c \"command\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "env.at:184" ( $at_check_trace; cat > test.conf <<EOT rule env MYPATH=+/usr/local/bin: EOT echo "; command" echo "; command" >&2 env -i MYPATH=/bin:/usr/bin $RUSHDIR/rush -C none -Denviron -c "command" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; command rush: Notice: parsing legacy configuration file test.conf " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; command { \"environ\":[ \"MYPATH=/usr/local/bin:/bin:/usr/bin\" ] } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/env.at:184" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/env.at:202: cat > test.conf <<EOT rule env MYPATH=/usr/local/bin:\\\$MYPATH EOT echo \"; command\" echo \"; command\" >&2 env -i MYPATH=/bin:/usr/bin \$RUSHDIR/rush -C none -Denviron -c \"command\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "env.at:202" ( $at_check_trace; cat > test.conf <<EOT rule env MYPATH=/usr/local/bin:\$MYPATH EOT echo "; command" echo "; command" >&2 env -i MYPATH=/bin:/usr/bin $RUSHDIR/rush -C none -Denviron -c "command" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; command rush: Notice: parsing legacy configuration file test.conf " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; command { \"environ\":[ \"MYPATH=/usr/local/bin:/bin:/usr/bin\" ] } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/env.at:202" $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 'interactive.at:17' \ "interactive" " " 11 at_xfail=no ( printf "%s\n" "74. $at_setup_line: testing $at_desc ..." $at_traceon myvars { set +x printf "%s\n" "$at_srcdir/interactive.at:20: cat > test.conf <<EOT rule interactive EOT echo \"; interactive\" echo \"; interactive\" >&2 rush -C none -Dcmdline,argv,prog,interactive -i test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "interactive.at:20" ( $at_check_trace; cat > test.conf <<EOT rule interactive EOT echo "; interactive" echo "; interactive" >&2 rush -C none -Dcmdline,argv,prog,interactive -i test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; interactive rush: Notice: parsing legacy configuration file test.conf " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; interactive { \"cmdline\":\"/bin/sh\", \"argv\":[ \"/bin/sh\" ], \"prog\":null, \"interactive\":1 } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/interactive.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_74 #AT_START_75 at_fn_group_banner 75 'fallthrough.at:17' \ "fall-through" " " 11 at_xfail=no ( printf "%s\n" "75. $at_setup_line: testing $at_desc ..." $at_traceon myvars { set +x printf "%s\n" "$at_srcdir/fallthrough.at:20: cat > test.conf <<EOT rule env - USER=\$MY_USER STATUS='Fall-through working' fall-through rule set[0] newcommand EOT echo \"; command\" echo \"; command\" >&2 rush -C none -Dcmdline,environ -c \"command\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "fallthrough.at:20" ( $at_check_trace; cat > test.conf <<EOT rule env - USER=$MY_USER STATUS='Fall-through working' fall-through rule set[0] newcommand EOT echo "; command" echo "; command" >&2 rush -C none -Dcmdline,environ -c "command" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; command rush: Notice: parsing legacy configuration file test.conf " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; command { \"cmdline\":\"newcommand\", \"environ\":[ \"STATUS=Fall-through working\", \"USER=$MY_USER\" ] } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/fallthrough.at:20" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/fallthrough.at:42: cat > test.conf <<EOT rule chdir /tmp fall-through rule set[0] newcommand interactive EOT echo \"; interactive\" echo \"; interactive\" >&2 rush -C none -Dcmdline,interactive,home_dir -i test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "fallthrough.at:42" ( $at_check_trace; cat > test.conf <<EOT rule chdir /tmp fall-through rule set[0] newcommand interactive EOT echo "; interactive" echo "; interactive" >&2 rush -C none -Dcmdline,interactive,home_dir -i test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; interactive rush: Notice: parsing legacy configuration file test.conf " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; interactive { \"cmdline\":\"newcommand\", \"interactive\":1, \"home_dir\":null } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/fallthrough.at:42" $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 'error.at:17' \ "error" " " 11 at_xfail=no ( printf "%s\n" "76. $at_setup_line: testing $at_desc ..." $at_traceon myvars { set +x printf "%s\n" "$at_srcdir/error.at:20: cat > test.conf <<EOT rule exit \"Forced error\" EOT echo \"; command\" echo \"; command\" >&2 rush -C none -Dcmdline -c \"command\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "error.at:20" ( $at_check_trace; cat > test.conf <<EOT rule exit "Forced error" EOT echo "; command" echo "; command" >&2 rush -C none -Dcmdline -c "command" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; command rush: Notice: parsing legacy configuration file test.conf \"Forced error\" " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; command ; 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/error.at:20" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/error.at:32: cat > test.conf <<EOT rule exit 1 \"Forced error\" EOT echo \"; command\" echo \"; command\" >&2 rush -C none -Dcmdline -c \"command\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "error.at:32" ( $at_check_trace; cat > test.conf <<EOT rule exit 1 "Forced error" EOT echo "; command" echo "; command" >&2 rush -C none -Dcmdline -c "command" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; command rush: Notice: parsing legacy configuration file test.conf " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; command \"Forced error\" ; 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/error.at:32" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/error.at:44: cat > test.conf <<EOT rule exit 1 @nologin-error EOT echo \"; command\" echo \"; command\" >&2 rush -C none -Dcmdline -c \"command\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "error.at:44" ( $at_check_trace; cat > test.conf <<EOT rule exit 1 @nologin-error EOT echo "; command" echo "; command" >&2 rush -C none -Dcmdline -c "command" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; command rush: Notice: parsing legacy configuration file test.conf " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; command You do not have interactive login access to this machine. Contact the systems administrator for further assistance. ; 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/error.at:44" $at_failed && at_fn_log_failure $at_traceon; } myvars { set +x printf "%s\n" "$at_srcdir/error.at:57: cat > test.conf <<EOT rule exit 1 @@nologin-error EOT echo \"; command\" echo \"; command\" >&2 rush -C none -Dcmdline -c \"command\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "error.at:57" ( $at_check_trace; cat > test.conf <<EOT rule exit 1 @@nologin-error EOT echo "; command" echo "; command" >&2 rush -C none -Dcmdline -c "command" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; command rush: Notice: parsing legacy configuration file test.conf " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; command @nologin-error ; 1 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/error.at:57" $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 'backref.at:17' \ "Back-reference expansion" " " 11 at_xfail=no ( printf "%s\n" "77. $at_setup_line: testing $at_desc ..." $at_traceon myvars { set +x printf "%s\n" "$at_srcdir/backref.at:20: cat > test.conf <<EOT rule chdir command ^cd \"(.+)\" && (runcom .*)\$ chdir %1 set %2 fall-through rule runcom command ^runcom set[0] ./bin/runcom EOT echo \"; cd \\\"\$PWD\\\" && runcom test\" echo \"; cd \\\"\$PWD\\\" && runcom test\" >&2 rush -C none -Dcmdline,home_dir -c \"cd \\\"\$PWD\\\" && runcom test\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "backref.at:20" ( $at_check_trace; cat > test.conf <<EOT rule chdir command ^cd "(.+)" && (runcom .*)$ chdir %1 set %2 fall-through rule runcom command ^runcom set[0] ./bin/runcom EOT echo "; cd \"$PWD\" && runcom test" echo "; cd \"$PWD\" && runcom test" >&2 rush -C none -Dcmdline,home_dir -c "cd \"$PWD\" && runcom test" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; cd \"$PWD\" && runcom test rush: Notice: parsing legacy configuration file test.conf " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; cd \"$PWD\" && runcom test { \"cmdline\":\"./bin/runcom test\", \"home_dir\":\"$TESTDIR\" } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/backref.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_77 #AT_START_78 at_fn_group_banner 78 'setvar.at:17' \ "setvar" " " 11 at_xfail=no ( printf "%s\n" "78. $at_setup_line: testing $at_desc ..." $at_traceon myvars { set +x printf "%s\n" "$at_srcdir/setvar.at:19: cat > test.conf <<EOT rule first setvar[home] \$PWD setvar[count] 1 setvar[FOO] bar fall-through rule last command .* set %0 \\\$FOO \\\$count EOT echo \"; ls\" echo \"; ls\" >&2 rush -C none -Dcmdline,vars -c \"ls\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'an embedded newline' "setvar.at:19" ( $at_check_trace; cat > test.conf <<EOT rule first setvar[home] $PWD setvar[count] 1 setvar[FOO] bar fall-through rule last command .* set %0 \$FOO \$count EOT echo "; ls" echo "; ls" >&2 rush -C none -Dcmdline,vars -c "ls" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; ls rush: Notice: parsing legacy configuration file test.conf " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; ls { \"cmdline\":\"ls bar 1\", \"vars\":{ \"FOO\":\"bar\", \"count\":\"1\", \"home\":\"$TESTDIR\" } } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/setvar.at:19" $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 'unsetvar.at:17' \ "unsetvar" " " 11 at_xfail=no ( printf "%s\n" "79. $at_setup_line: testing $at_desc ..." $at_traceon myvars { set +x printf "%s\n" "$at_srcdir/unsetvar.at:19: cat > test.conf <<EOT rule first setvar[home] \$PWD setvar[count] 1 setvar[FOO] bar fall-through rule intermediate unsetvar[count] fall-through rule last command .* set %0 \\\$FOO \\\${count:-0} EOT echo \"; ls\" echo \"; ls\" >&2 rush -C none -Dcmdline,vars -c \"ls\" test.conf echo \"; \$?\" " at_fn_check_prepare_notrace 'a ${...} parameter expansion' "unsetvar.at:19" ( $at_check_trace; cat > test.conf <<EOT rule first setvar[home] $PWD setvar[count] 1 setvar[FOO] bar fall-through rule intermediate unsetvar[count] fall-through rule last command .* set %0 \$FOO \${count:-0} EOT echo "; ls" echo "; ls" >&2 rush -C none -Dcmdline,vars -c "ls" test.conf echo "; $?" ) >>"$at_stdout" 2>>"$at_stderr" 5>&- at_status=$? at_failed=false $at_check_filter echo >>"$at_stderr"; printf "%s\n" "; ls rush: Notice: parsing legacy configuration file test.conf " | \ $at_diff - "$at_stderr" || at_failed=: echo >>"$at_stdout"; printf "%s\n" "; ls { \"cmdline\":\"ls bar 0\", \"vars\":{ \"FOO\":\"bar\", \"home\":\"$TESTDIR\" } } ; 0 " | \ $at_diff - "$at_stdout" || at_failed=: at_fn_check_status 0 $at_status "$at_srcdir/unsetvar.at:19" $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 �������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/tests/undef.at�����������������������������������������������������������������������������0000644�0001750�0001750�00000002324�14643176124�015130� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of GNU Rush. # Copyright (C) 2019-2024 Sergey Poznyakoff # # GNU Rush is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Rush is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([expanding undefined variables]) AT_KEYWORDS([undef]) m4_pushdef([RUSH_ENVIRON],[-i]) AT_RUSH_TEST([ rush 2.0 rule first set command = \$COMMAND ], [cmdline], [ls], [1], [], [rush: Error: undefined variable: COMMAND ]) AT_RUSH_TEST([ rush 2.0 rule first set command = \${COMMAND:-\$command} ], [cmdline], [ls], [0], [{ "cmdline":"ls" } ], []) AT_RUSH_TEST([ rush 2.0 global expand-undefined true rule first set command = \$COMMAND ], [cmdline], [ls], [0], [{ "cmdline":"" } ], []) m4_popdef([RUSH_ENVIRON]) AT_CLEANUP ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/tests/unsetenv.at��������������������������������������������������������������������������0000644�0001750�0001750�00000003334�14643176124�015700� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of GNU Rush. # Copyright (C) 2016-2024 Sergey Poznyakoff # # GNU Rush is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Rush is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([unsetenv]) AT_KEYWORDS([unsetenv]) m4_pushdef([RUSH_ENVIRON],[-i HOME=$PWD USER=$MY_USER LOGIN=$MY_USER]) AT_RUSH_TEST([ rush 2.0 rule unsetenv LOGIN ], [environ], [command], [0], [{ "environ":[[ "HOME=$TESTDIR", "USER=$MY_USER" ]] } ], []) AT_RUSH_TEST([ rush 2.0 rule unsetenv LOGIN=$MY_USER ], [environ], [command], [0], [{ "environ":[[ "HOME=$TESTDIR", "USER=$MY_USER" ]] } ], []) m4_popdef([RUSH_ENVIRON]) m4_pushdef([RUSH_ENVIRON],[-i HOME=$PWD USER=$MY_USER LOGIN=NO_$MY_USER]) AT_RUSH_TEST([ rush 2.0 rule unsetenv LOGIN=$MY_USER ], [environ], [command], [0], [{ "environ":[[ "HOME=$TESTDIR", "LOGIN=NO_$MY_USER", "USER=$MY_USER" ]] } ], []) m4_popdef([RUSH_ENVIRON]) m4_pushdef([RUSH_ENVIRON],[-i HOME=$PWD USER=$MY_USER TEST_FOO=foo TEST_BAR=bar]) AT_RUSH_TEST([ rush 2.0 rule unsetenv "TEST_*" ], [environ], [command], [0], [{ "environ":[[ "HOME=$TESTDIR", "USER=$MY_USER" ]] } ], []) m4_popdef([RUSH_ENVIRON]) AT_CLEANUP ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/tests/matcharg.at��������������������������������������������������������������������������0000644�0001750�0001750�00000002525�14643176123�015617� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of GNU Rush. # Copyright (C) 2019-2024 Sergey Poznyakoff # # GNU Rush is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Rush is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([match arg]) AT_KEYWORDS([match arg]) AT_RUSH_TEST([ rush 2.0 rule match \$1 ~ "^fo+\$" set RULE = 1 rule match \${1} ~ "^ba" set RULE = 2 rule match \${-1} ~ "/" set RULE = 3 ], [cmdline,vars], [/usr/bin/echo foo], [0], [{ "cmdline":"/usr/bin/echo foo", "vars":{ "RULE":"1" } } ], [], [/usr/bin/echo bar], [0], [{ "cmdline":"/usr/bin/echo bar", "vars":{ "RULE":"2" } } ], [], [/usr/bin/echo /var], [0], [{ "cmdline":"/usr/bin/echo /var", "vars":{ "RULE":"3" } } ], [], [/usr/bin/echo for], [1], [], [rush: Error: no matching rule for "/usr/bin/echo for", user $MY_USER ], ) AT_CLEANUP ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/tests/unsetvar.at��������������������������������������������������������������������������0000644�0001750�0001750�00000002312�14643176124�015673� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of GNU Rush. # Copyright (C) 2019-2024 Sergey Poznyakoff # # GNU Rush is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Rush is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([unsetvar]) AT_KEYWORDS([unsetvar]) AT_RUSH_TEST([ rush 2.0 rule first set count = 1 set FOO = bar fall-through rule intermediate unset count fall-through rule last set command = "\$FOO \${count:-}" ], [cmdline,vars], [ls], [0], [{ "cmdline":"bar ", "vars":{ "FOO":"bar" } } ], []) AT_RUSH_TEST([ rush 2.0 rule first unset home ], [cmdline,vars], [ls], [1], [], [rush: Error: test.conf:4.9-12: attempt to modify a read-only variable rush: Error: errors in configuration file ]) AT_CLEANUP ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/tests/and.at�������������������������������������������������������������������������������0000644�0001750�0001750�00000002242�14643176121�014565� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of GNU Rush. # Copyright (C) 2019-2024 Sergey Poznyakoff # # GNU Rush is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Rush is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([and]) AT_KEYWORDS([match and]) AT_RUSH_TEST([ rush 2.0 rule match \$0 == "/bin/ls" && \$1 ~ "^/usr" ], [cmdline,argv,prog], [/bin/ls /usr/lib], [0], [{ "cmdline":"/bin/ls /usr/lib", "argv":[[ "/bin/ls", "/usr/lib" ]], "prog":null } ], [], [/bin/ls /lib], [1], [], [rush: Error: no matching rule for "/bin/ls /lib", user $MY_USER ], [/bin/stat /usr/lib], [1], [], [rush: Error: no matching rule for "/bin/stat /usr/lib", user $MY_USER ]) AT_CLEANUP ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/tests/legacy/������������������������������������������������������������������������������0000755�0001750�0001750�00000000000�14655401532�014741� 5����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/tests/legacy/interactive.at����������������������������������������������������������������0000644�0001750�0001750�00000001771�14643176122�017613� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of GNU Rush. # Copyright (C) 2016-2024 Sergey Poznyakoff # # GNU Rush is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Rush is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([interactive]) AT_KEYWORDS([interactive]) AT_RUSH_TEST([ rule interactive ], [cmdline,argv,prog,interactive], [interactive], [0], [{ "cmdline":"/bin/sh", "argv":[[ "/bin/sh" ]], "prog":null, "interactive":1 } ], [rush: Notice: parsing legacy configuration file test.conf ]) AT_CLEANUP �������rush-2.4/tests/legacy/backref.at��������������������������������������������������������������������0000644�0001750�0001750�00000002114�14643176122�016663� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of GNU Rush. # Copyright (C) 2019-2024 Sergey Poznyakoff # # GNU Rush is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Rush is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([Back-reference expansion]) AT_KEYWORDS([backref]) AT_RUSH_TEST([ rule chdir command ^cd "(.+)" && (runcom .*)$ chdir %1 set %2 fall-through rule runcom command ^runcom set[0] ./bin/runcom ], [cmdline,home_dir], [cd "$PWD" && runcom test], [0], [{ "cmdline":"./bin/runcom test", "home_dir":"$TESTDIR" } ], [rush: Notice: parsing legacy configuration file test.conf ]) AT_CLEANUP ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/tests/legacy/match.at����������������������������������������������������������������������0000644�0001750�0001750�00000002223�14643176123�016364� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of GNU Rush. # Copyright (C) 2008-2024 Sergey Poznyakoff # # GNU Rush is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Rush is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([match]) AT_KEYWORDS([match]) AT_RUSH_TEST([ rule match[1] fo+ ], [cmdline,argv,prog], [/usr/bin/echo foo], [0], [{ "cmdline":"/usr/bin/echo foo", "argv":[[ "/usr/bin/echo", "foo" ]], "prog":null } ], [rush: Notice: parsing legacy configuration file test.conf ], [/usr/bin/echo bar], [1], [], [rush: Notice: parsing legacy configuration file test.conf rush: Error: no matching rule for "/usr/bin/echo bar", user $MY_USER ]) AT_CLEANUP �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/tests/legacy/newgrp.at���������������������������������������������������������������������0000644�0001750�0001750�00000001562�14643176123�016577� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of GNU Rush. # Copyright (C) 2016-2024 Sergey Poznyakoff # # GNU Rush is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Rush is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([newgrp]) AT_KEYWORDS([newgrp]) AT_RUSH_TEST([ rule newgrp 0 ], [gid], [command], [0], [{ "gid":0 } ], [rush: Notice: parsing legacy configuration file test.conf ]) AT_CLEANUP ����������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/tests/legacy/delete.at���������������������������������������������������������������������0000644�0001750�0001750�00000003233�14643176122�016533� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of GNU Rush. # Copyright (C) 2016-2024 Sergey Poznyakoff # # GNU Rush is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Rush is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([delete]) AT_KEYWORDS([delete]) AT_RUSH_TEST([ rule delete[1] ], [cmdline,argv,prog], [echo foo bar], [0], [{ "cmdline":"echo bar", "argv":[[ "echo", "bar" ]], "prog":null } ], [rush: Notice: parsing legacy configuration file test.conf ]) AT_RUSH_TEST([ rule delete[$] ], [cmdline,argv,prog], [echo foo bar], [0], [{ "cmdline":"echo foo", "argv":[[ "echo", "foo" ]], "prog":null } ], [rush: Notice: parsing legacy configuration file test.conf ]) AT_RUSH_TEST([ rule delete 2 4 ], [cmdline,argv,prog], [echo foo bar baz quux wum], [0], [{ "cmdline":"echo foo wum", "argv":[[ "echo", "foo", "wum" ]], "prog":null } ], [rush: Notice: parsing legacy configuration file test.conf ]) AT_RUSH_TEST([ rule delete[0] ], [cmdline,argv,prog], [echo foo bar], [1], [], [rush: Notice: parsing legacy configuration file test.conf rush: Error: Deleting argv[[0]] is prohibited ]) AT_CLEANUP ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/tests/legacy/setvar.at���������������������������������������������������������������������0000644�0001750�0001750�00000002111�14643176123�016570� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of GNU Rush. # Copyright (C) 2019-2024 Sergey Poznyakoff # # GNU Rush is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Rush is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([setvar]) AT_KEYWORDS([setvar]) AT_RUSH_TEST([ rule first setvar[home] $PWD setvar[count] 1 setvar[FOO] bar fall-through rule last command .* set %0 \$FOO \$count ], [cmdline,vars], [ls], [0], [{ "cmdline":"ls bar 1", "vars":{ "FOO":"bar", "count":"1", "home":"$TESTDIR" } } ], [rush: Notice: parsing legacy configuration file test.conf ]) AT_CLEANUP �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/tests/legacy/uid.at������������������������������������������������������������������������0000644�0001750�0001750�00000002213�14643176123�016050� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of GNU Rush. # Copyright (C) 2008-2024 Sergey Poznyakoff # # GNU Rush is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Rush is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([uid]) AT_KEYWORDS([uid]) AT_RUSH_TEST([ rule uid $MY_USER ], [cmdline,argv,prog], [ls /], [0], [{ "cmdline":"ls /", "argv":[[ "ls", "/" ]], "prog":null } ], [rush: Notice: parsing legacy configuration file test.conf ]) AT_RUSH_TEST([ rule uid != $MY_USER ], [cmdline,argv,prog], [ls /], [1], [], [rush: Notice: parsing legacy configuration file test.conf rush: Error: no matching rule for "ls /", user $MY_USER ]) AT_CLEANUP �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/tests/legacy/umask.at����������������������������������������������������������������������0000644�0001750�0001750�00000001567�14643176123�016422� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of GNU Rush. # Copyright (C) 2016-2024 Sergey Poznyakoff # # GNU Rush is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Rush is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([umask]) AT_KEYWORDS([umask]) AT_RUSH_TEST([ rule umask 017 ], [umask], [command], [0], [{ "umask":017 } ], [rush: Notice: parsing legacy configuration file test.conf ]) AT_CLEANUP �����������������������������������������������������������������������������������������������������������������������������������������rush-2.4/tests/legacy/env.at������������������������������������������������������������������������0000644�0001750�0001750�00000007405�14643176122�016066� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of GNU Rush. # Copyright (C) 2016-2024 Sergey Poznyakoff # # GNU Rush is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Rush is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([env]) AT_KEYWORDS([env]) AT_RUSH_TEST([ rule env - ], [environ], [command], [0], [{ "environ":[[]] } ], [rush: Notice: parsing legacy configuration file test.conf ]) m4_pushdef([RUSH_ENVIRON],[-i HOME=$PWD USER=$MY_USER LOGIN=$MY_USER]) AT_RUSH_TEST([ rule env -LOGIN ], [environ], [command], [0], [{ "environ":[[ "HOME=$TESTDIR", "USER=$MY_USER" ]] } ], [rush: Notice: parsing legacy configuration file test.conf ]) AT_RUSH_TEST([ rule env -LOGIN=$MY_USER ], [environ], [command], [0], [{ "environ":[[ "HOME=$TESTDIR", "USER=$MY_USER" ]] } ], [rush: Notice: parsing legacy configuration file test.conf ]) m4_popdef([RUSH_ENVIRON]) m4_pushdef([RUSH_ENVIRON],[-i HOME=$PWD USER=$MY_USER LOGIN=NO_$MY_USER]) AT_RUSH_TEST([ rule env -LOGIN=$MY_USER ], [environ], [command], [0], [{ "environ":[[ "HOME=$TESTDIR", "LOGIN=NO_$MY_USER", "USER=$MY_USER" ]] } ], [rush: Notice: parsing legacy configuration file test.conf ]) m4_popdef([RUSH_ENVIRON]) m4_pushdef([RUSH_ENVIRON],[-i HOME=$PWD USER=$MY_USER LOGIN=NO_$MY_USER PATH=$PATH]) AT_RUSH_TEST([ rule env - HOME USER ], [environ], [command], [0], [{ "environ":[[ "HOME=$TESTDIR", "USER=$MY_USER" ]] } ], [rush: Notice: parsing legacy configuration file test.conf ]) m4_popdef([RUSH_ENVIRON]) m4_pushdef([RUSH_ENVIRON],[-i HOME=$PWD USER=$MY_USER]) AT_RUSH_TEST([ rule env NEWVAR=foo ], [environ], [command], [0], [{ "environ":[[ "HOME=$TESTDIR", "NEWVAR=foo", "USER=$MY_USER" ]] } ], [rush: Notice: parsing legacy configuration file test.conf ]) m4_popdef([RUSH_ENVIRON]) m4_pushdef([RUSH_ENVIRON],[-i]) AT_RUSH_TEST([ rule env MYPATH+=:/usr/local/bin ], [environ], [command], [0], [{ "environ":[[ "MYPATH=/usr/local/bin" ]] } ], [rush: Notice: parsing legacy configuration file test.conf ]) m4_popdef([RUSH_ENVIRON]) m4_pushdef([RUSH_ENVIRON],[-i MYPATH=/bin:/usr/bin]) AT_RUSH_TEST([ rule env MYPATH+=:/usr/local/bin ], [environ], [command], [0], [{ "environ":[[ "MYPATH=/bin:/usr/bin:/usr/local/bin" ]] } ], [rush: Notice: parsing legacy configuration file test.conf ]) m4_popdef([RUSH_ENVIRON]) m4_pushdef([RUSH_ENVIRON],[-i]) AT_RUSH_TEST([ rule env MYPATH=+/usr/local/bin: ], [environ], [command], [0], [{ "environ":[[ "MYPATH=/usr/local/bin" ]] } ], [rush: Notice: parsing legacy configuration file test.conf ]) m4_popdef([RUSH_ENVIRON]) m4_pushdef([RUSH_ENVIRON],[-i MYPATH=/bin:/usr/bin]) AT_RUSH_TEST([ rule env MYPATH=+/usr/local/bin: ], [environ], [command], [0], [{ "environ":[[ "MYPATH=/usr/local/bin:/bin:/usr/bin" ]] } ], [rush: Notice: parsing legacy configuration file test.conf ]) m4_popdef([RUSH_ENVIRON]) m4_pushdef([RUSH_ENVIRON],[-i MYPATH=/bin:/usr/bin]) AT_RUSH_TEST([ rule env MYPATH=/usr/local/bin:\$MYPATH ], [environ], [command], [0], [{ "environ":[[ "MYPATH=/usr/local/bin:/bin:/usr/bin" ]] } ], [rush: Notice: parsing legacy configuration file test.conf ]) m4_popdef([RUSH_ENVIRON]) AT_CLEANUP �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/tests/legacy/unsetvar.at�������������������������������������������������������������������0000644�0001750�0001750�00000002163�14643176123�017142� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of GNU Rush. # Copyright (C) 2019-2024 Sergey Poznyakoff # # GNU Rush is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Rush is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([unsetvar]) AT_KEYWORDS([unsetvar]) AT_RUSH_TEST([ rule first setvar[home] $PWD setvar[count] 1 setvar[FOO] bar fall-through rule intermediate unsetvar[count] fall-through rule last command .* set %0 \$FOO \${count:-0} ], [cmdline,vars], [ls], [0], [{ "cmdline":"ls bar 0", "vars":{ "FOO":"bar", "home":"$TESTDIR" } } ], [rush: Notice: parsing legacy configuration file test.conf ]) AT_CLEANUP �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/tests/legacy/set.at������������������������������������������������������������������������0000644�0001750�0001750�00000003631�14643176123�016067� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of GNU Rush. # Copyright (C) 2016-2024 Sergey Poznyakoff # # GNU Rush is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Rush is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([set]) AT_KEYWORDS([set]) AT_RUSH_TEST([ rule set ls / ], [cmdline,argv,prog], [echo], [0], [{ "cmdline":"ls /", "argv":[[ "ls", "/" ]], "prog":null } ], [rush: Notice: parsing legacy configuration file test.conf ]) AT_RUSH_TEST([ rule set[0] /usr/bin/\$0 ], [cmdline,argv,prog], [ls /], [0], [{ "cmdline":"/usr/bin/ls /", "argv":[[ "/usr/bin/ls", "/" ]], "prog":null } ], [rush: Notice: parsing legacy configuration file test.conf ]) AT_RUSH_TEST([ rule set[1] /chroot\${1} ], [cmdline,argv,prog], [ls /], [0], [{ "cmdline":"ls /chroot/", "argv":[[ "ls", "/chroot/" ]], "prog":null } ], [rush: Notice: parsing legacy configuration file test.conf ]) AT_RUSH_TEST([ rule set[^] /usr/bin/ls ], [cmdline,argv,prog], [ls /], [0], [{ "cmdline":"ls /", "argv":[[ "ls", "/" ]], "prog":"/usr/bin/ls" } ], [rush: Notice: parsing legacy configuration file test.conf ]) AT_RUSH_TEST([ rule set[$] /tmp ], [cmdline,argv,prog], [ls /], [0], [{ "cmdline":"ls /tmp", "argv":[[ "ls", "/tmp" ]], "prog":null } ], [rush: Notice: parsing legacy configuration file test.conf ]) AT_CLEANUP �������������������������������������������������������������������������������������������������������rush-2.4/tests/legacy/transform.at������������������������������������������������������������������0000644�0001750�0001750�00000004036�14643176123�017307� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of GNU Rush. # Copyright (C) 2016-2024 Sergey Poznyakoff # # GNU Rush is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Rush is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([transform]) AT_KEYWORDS([transform]) AT_RUSH_TEST([ rule transform s/^[^[:space:]]+/& -t/ ], [cmdline,argv,prog], [svnserve], [0], [{ "cmdline":"svnserve -t", "argv":[[ "svnserve", "-t" ]], "prog":null } ], [rush: Notice: parsing legacy configuration file test.conf ]) AT_RUSH_TEST([ rule transform "\${command} end" s/[[:space:]]+-[^[:space:]]+//g ], [cmdline,argv,prog], [echo -c -t foo -n bar], [0], [{ "cmdline":"echo foo bar end", "argv":[[ "echo", "foo", "bar", "end" ]], "prog":null } ], [rush: Notice: parsing legacy configuration file test.conf ]) AT_RUSH_TEST([ rule transform[0] s|^[^/]|/usr/bin/&| ], [cmdline,argv,prog], [echo foo], [0], [{ "cmdline":"/usr/bin/echo foo", "argv":[[ "/usr/bin/echo", "foo" ]], "prog":null } ], [rush: Notice: parsing legacy configuration file test.conf ], [/bin/echo foo], [0], [{ "cmdline":"/bin/echo foo", "argv":[[ "/bin/echo", "foo" ]], "prog":null } ], [rush: Notice: parsing legacy configuration file test.conf ]) AT_RUSH_TEST([ rule transform[0] \$program s,.*/,-, ], [cmdline,argv,prog], [/bin/sh], [0], [{ "cmdline":"-sh", "argv":[[ "-sh" ]], "prog":null } ], [rush: Notice: parsing legacy configuration file test.conf ]) AT_CLEANUP ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/tests/legacy/fallthrough.at����������������������������������������������������������������0000644�0001750�0001750�00000002607�14643176122�017614� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of GNU Rush. # Copyright (C) 2016-2024 Sergey Poznyakoff # # GNU Rush is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Rush is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([fall-through]) AT_KEYWORDS([fallthrough fall-through]) AT_RUSH_TEST([ rule env - USER=$MY_USER STATUS='Fall-through working' fall-through rule set[0] newcommand ], [cmdline,environ], [command], [0], [{ "cmdline":"newcommand", "environ":[[ "STATUS=Fall-through working", "USER=$MY_USER" ]] } ], [rush: Notice: parsing legacy configuration file test.conf ]) AT_RUSH_TEST([ rule chdir /tmp fall-through rule set[0] newcommand interactive ], [cmdline,interactive,home_dir], [interactive], [0], [{ "cmdline":"newcommand", "interactive":1, "home_dir":null } ], [rush: Notice: parsing legacy configuration file test.conf ]) AT_CLEANUP �������������������������������������������������������������������������������������������������������������������������rush-2.4/tests/legacy/error.at����������������������������������������������������������������������0000644�0001750�0001750�00000002677�14643176122�016435� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of GNU Rush. # Copyright (C) 2016-2024 Sergey Poznyakoff # # GNU Rush is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Rush is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([error]) AT_KEYWORDS([error]) AT_RUSH_TEST([ rule exit "Forced error" ], [cmdline], [command], [1], [], [rush: Notice: parsing legacy configuration file test.conf "Forced error" ]) AT_RUSH_TEST([ rule exit 1 "Forced error" ], [cmdline], [command], [1], ["Forced error" ], [rush: Notice: parsing legacy configuration file test.conf ]) AT_RUSH_TEST([ rule exit 1 @nologin-error ], [cmdline], [command], [1], [You do not have interactive login access to this machine. Contact the systems administrator for further assistance. ], [rush: Notice: parsing legacy configuration file test.conf ]) AT_RUSH_TEST([ rule exit 1 @@nologin-error ], [cmdline], [command], [1], [@nologin-error ], [rush: Notice: parsing legacy configuration file test.conf ]) AT_CLEANUP �����������������������������������������������������������������rush-2.4/tests/legacy/gid.at������������������������������������������������������������������������0000644�0001750�0001750�00000002215�14643176122�016033� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of GNU Rush. # Copyright (C) 2008-2024 Sergey Poznyakoff # # GNU Rush is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Rush is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([gid]) AT_KEYWORDS([gid]) AT_RUSH_TEST([ rule gid $MY_GROUP ], [cmdline,argv,prog], [ls /], [0], [{ "cmdline":"ls /", "argv":[[ "ls", "/" ]], "prog":null } ], [rush: Notice: parsing legacy configuration file test.conf ]) AT_RUSH_TEST([ rule gid != $MY_GROUP ], [cmdline,argv,prog], [ls /], [1], [], [rush: Notice: parsing legacy configuration file test.conf rush: Error: no matching rule for "ls /", user $MY_USER ]) AT_CLEANUP �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/tests/legacy/argc.at�����������������������������������������������������������������������0000644�0001750�0001750�00000002333�14643176122�016205� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of GNU Rush. # Copyright (C) 2008-2024 Sergey Poznyakoff # # GNU Rush is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Rush is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([argc]) AT_KEYWORDS([argc]) AT_RUSH_TEST([ rule argc 2 ], [cmdline,argv,prog,interactive,fork,acct], [/usr/bin/echo foo], [0], [{ "cmdline":"/usr/bin/echo foo", "argv":[[ "/usr/bin/echo", "foo" ]], "prog":null, "interactive":0, "fork":-1, "acct":-1 } ], [rush: Notice: parsing legacy configuration file test.conf ], [/usr/bin/echo foo bar], [1], [], [rush: Notice: parsing legacy configuration file test.conf rush: Error: no matching rule for "/usr/bin/echo foo bar", user $MY_USER ]) AT_CLEANUP �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/tests/legacy/matchprog.at������������������������������������������������������������������0000644�0001750�0001750�00000002233�14643176123�017255� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of GNU Rush. # Copyright (C) 2008-2024 Sergey Poznyakoff # # GNU Rush is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Rush is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([match program name]) AT_KEYWORDS([matchprog]) AT_RUSH_TEST([ rule match[^] /usr/bin/.* ], [cmdline,argv,prog], [/usr/bin/echo foo], [0], [{ "cmdline":"/usr/bin/echo foo", "argv":[[ "/usr/bin/echo", "foo" ]], "prog":null } ], [rush: Notice: parsing legacy configuration file test.conf ], [echo foo], [1], [], [rush: Notice: parsing legacy configuration file test.conf rush: Error: no matching rule for "echo foo", user $MY_USER ]) AT_CLEANUP ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/tests/legacy/chdir.at����������������������������������������������������������������������0000644�0001750�0001750�00000001605�14643176122�016363� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of GNU Rush. # Copyright (C) 2016-2024 Sergey Poznyakoff # # GNU Rush is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Rush is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([chdir]) AT_KEYWORDS([chdir]) AT_RUSH_TEST([ rule chdir $PWD ], [home_dir], [command], [0], [{ "home_dir":"$TESTDIR" } ], [rush: Notice: parsing legacy configuration file test.conf ]) AT_CLEANUP ���������������������������������������������������������������������������������������������������������������������������rush-2.4/tests/legacy/command.at��������������������������������������������������������������������0000644�0001750�0001750�00000002367�14643176122�016716� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of GNU Rush. # Copyright (C) 2008-2024 Sergey Poznyakoff # # GNU Rush is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Rush is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([command]) AT_KEYWORDS([command]) AT_RUSH_TEST([ rule command echo[[:space:]]+foo$ ], [cmdline,argv,prog,interactive,fork,acct], [/usr/bin/echo foo], [0], [{ "cmdline":"/usr/bin/echo foo", "argv":[[ "/usr/bin/echo", "foo" ]], "prog":null, "interactive":0, "fork":-1, "acct":-1 } ], [rush: Notice: parsing legacy configuration file test.conf ], [/usr/bin/echo foo bar], [1], [], [rush: Notice: parsing legacy configuration file test.conf rush: Error: no matching rule for "/usr/bin/echo foo bar", user $MY_USER ]) AT_CLEANUP �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/tests/legacy/map.at������������������������������������������������������������������������0000644�0001750�0001750�00000003614�14643176123�016052� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of GNU Rush. # Copyright (C) 2016-2024 Sergey Poznyakoff # # GNU Rush is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Rush is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([map]) AT_KEYWORDS([map]) AT_CHECK([ myvars cat > passwd.rush <<EOT x$MY_USER:x:$(($MY_UID + 1)):$(($MY_GID + 1))::/root:/bin/bash $MY_USER:x:$MY_UID:$MY_GID:Me:/:/rush_special_shell EOT WD=`pwd` cat > test.conf <<EOT rule map[[0]] $WD/passwd.rush : \${user} 1 7 /nologin EOT set -e echo Matching map rush -C none -Dcmdline,argv,prog -c 'command arg' test.conf echo No match, return default > passwd.rush rush -C none -Dcmdline,argv,prog -c 'command arg' test.conf echo No match, no default cat > test.conf <<EOT rule map[[0]] $WD/passwd.rush : \${user} 1 7 EOT rush -C none -Dcmdline,argv,prog -c 'command arg' test.conf ], [0], [Matching map { "cmdline":"/rush_special_shell arg", "argv":[[ "/rush_special_shell", "arg" ]], "prog":null } No match, return default { "cmdline":"/nologin arg", "argv":[[ "/nologin", "arg" ]], "prog":null } No match, no default { "cmdline":"command arg", "argv":[[ "command", "arg" ]], "prog":null } ], [rush: Notice: parsing legacy configuration file test.conf rush: Notice: parsing legacy configuration file test.conf rush: Notice: parsing legacy configuration file test.conf ]) AT_CLEANUP ��������������������������������������������������������������������������������������������������������������������rush-2.4/tests/compound.at��������������������������������������������������������������������������0000644�0001750�0001750�00000002661�14643176121�015654� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of GNU Rush. # Copyright (C) 2019-2024 Sergey Poznyakoff # # GNU Rush is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Rush is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([compound]) AT_KEYWORDS([match compound]) AT_RUSH_TEST([ rush 2.0 rule match \$0 == "/bin/ls" && \$# == 2 && (\$1 ~ "^/usr" || \$1 == "/") ], [cmdline,argv,prog], [/bin/ls /usr/lib], [0], [{ "cmdline":"/bin/ls /usr/lib", "argv":[[ "/bin/ls", "/usr/lib" ]], "prog":null } ], [], [/bin/ls /], [0], [{ "cmdline":"/bin/ls /", "argv":[[ "/bin/ls", "/" ]], "prog":null } ], [], [/bin/ls /usr/lib /], [1], [], [rush: Error: no matching rule for "/bin/ls /usr/lib /", user $MY_USER ], [/bin/ls /lib], [1], [], [rush: Error: no matching rule for "/bin/ls /lib", user $MY_USER ], [/bin/stat /usr/lib], [1], [], [rush: Error: no matching rule for "/bin/stat /usr/lib", user $MY_USER ]) AT_CLEANUP �������������������������������������������������������������������������������rush-2.4/tests/set.at�������������������������������������������������������������������������������0000644�0001750�0001750�00000003311�14643176124�014617� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of GNU Rush. # Copyright (C) 2016-2024 Sergey Poznyakoff # # GNU Rush is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Rush is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([set]) AT_KEYWORDS([set]) AT_RUSH_TEST([ rush 2.0 rule set command = "ls /" ], [cmdline,argv,prog], [echo], [0], [{ "cmdline":"ls /", "argv":[[ "ls", "/" ]], "prog":null } ], []) AT_RUSH_TEST([ rush 2.0 rule set [0] = "/usr/bin/\$0" ], [cmdline,argv,prog], [ls /], [0], [{ "cmdline":"/usr/bin/ls /", "argv":[[ "/usr/bin/ls", "/" ]], "prog":null } ], []) AT_RUSH_TEST([ rush 2.0 rule set [1] = "/chroot\${1}" ], [cmdline,argv,prog], [ls /], [0], [{ "cmdline":"ls /chroot/", "argv":[[ "ls", "/chroot/" ]], "prog":null } ], []) AT_RUSH_TEST([ rush 2.0 rule set program = "/usr/bin/ls" ], [cmdline,argv,prog], [ls /], [0], [{ "cmdline":"ls /", "argv":[[ "ls", "/" ]], "prog":"/usr/bin/ls" } ], []) AT_RUSH_TEST([ rush 2.0 rule set [-1] = "/tmp" ], [cmdline,argv,prog], [ls /], [0], [{ "cmdline":"ls /tmp", "argv":[[ "ls", "/tmp" ]], "prog":null } ], []) AT_CLEANUP �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/tests/transform.at�������������������������������������������������������������������������0000644�0001750�0001750�00000004067�14643176124�016050� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of GNU Rush. # Copyright (C) 2019-2024 Sergey Poznyakoff # # GNU Rush is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Rush is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([transform]) AT_KEYWORDS([transform]) AT_RUSH_TEST([ rush 2.0 rule set command =~ "s/^[^[:space:]]+/& -t/" ], [cmdline,argv,prog], [svnserve], [0], [{ "cmdline":"svnserve -t", "argv":[[ "svnserve", "-t" ]], "prog":null } ], []) AT_RUSH_TEST([ rush 2.0 rule set command = "\${command} end" ~ "s/[[:space:]]+-[^[:space:]]+//g" ], [cmdline,argv,prog], [echo -c -t foo -n bar], [0], [{ "cmdline":"echo foo bar end", "argv":[[ "echo", "foo", "bar", "end" ]], "prog":null } ], []) AT_RUSH_TEST([ rush 2.0 rule set [0] =~ "s|^[^/]|/usr/bin/&|" ], [cmdline,argv,prog], [echo foo], [0], [{ "cmdline":"/usr/bin/echo foo", "argv":[[ "/usr/bin/echo", "foo" ]], "prog":null } ], [], [/bin/echo foo], [0], [{ "cmdline":"/bin/echo foo", "argv":[[ "/bin/echo", "foo" ]], "prog":null } ], []) AT_RUSH_TEST([ rush 2.0 rule set [0] = \$program ~ "s,.*/,-," ], [cmdline,argv,prog], [/bin/sh], [0], [{ "cmdline":"-sh", "argv":[[ "-sh" ]], "prog":null } ], []) AT_RUSH_TEST([ rush 2.0 rule set command =~ "s/s/@/2" ], [cmdline], [password], [0], [{ "cmdline":"pas@word" } ], []) AT_RUSH_TEST([ rush 2.0 rule set command =~ "s/s/@/2g" ], [cmdline], [passwords], [0], [{ "cmdline":"pas@word@" } ], []) AT_CLEANUP �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/tests/fallthrough.at�����������������������������������������������������������������������0000644�0001750�0001750�00000002364�14643176122�016350� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of GNU Rush. # Copyright (C) 2016-2024 Sergey Poznyakoff # # GNU Rush is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Rush is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([fall-through]) AT_KEYWORDS([fallthrough fall-through]) AT_RUSH_TEST([ rush 2.0 rule set [0] = newcommand fall-through rule set [1] = list ], [cmdline,argv], [command], [0], [{ "cmdline":"newcommand list", "argv":[[ "newcommand", "list" ]] } ], []) AT_RUSH_TEST([ rush 2.0 rule chdir "/tmp" fall-through rule set [0] = newcommand interactive true ], [cmdline,interactive,home_dir], [interactive], [0], [{ "cmdline":"newcommand", "interactive":1, "home_dir":null } ], []) AT_CLEANUP ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/tests/error.at�����������������������������������������������������������������������������0000644�0001750�0001750�00000002210�14643176122�015150� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of GNU Rush. # Copyright (C) 2016-2024 Sergey Poznyakoff # # GNU Rush is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Rush is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([error]) AT_KEYWORDS([error]) AT_RUSH_TEST([ rush 2.0 rule exit "Forced error" ], [cmdline], [command], [1], [], [Forced error ]) AT_RUSH_TEST([ rush 2.0 rule exit 1 "Forced error" ], [cmdline], [command], [1], [Forced error ], []) AT_RUSH_TEST([ rush 2.0 rule exit 1 nologin-error ], [cmdline], [command], [1], [You do not have interactive login access to this machine. Contact the systems administrator for further assistance. ], []) AT_CLEANUP ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/tests/myid.c�������������������������������������������������������������������������������0000644�0001750�0001750�00000000637�14643176123�014613� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#include <unistd.h> #include <stdio.h> #include <pwd.h> #include <grp.h> #include <assert.h> int main(int argc, char **argv) { struct passwd *pw; struct group *gr; pw = getpwuid(getuid()); assert(pw!=NULL); gr = getgrgid(pw->pw_gid); assert(gr!=NULL); printf("%s %lu %s %lu\n", pw->pw_name, (unsigned long) pw->pw_uid, gr->gr_name, (unsigned long) gr->gr_gid); return 0; } �������������������������������������������������������������������������������������������������rush-2.4/tests/Makefile.in��������������������������������������������������������������������������0000644�0001750�0001750�00000165143�14655401223�015551� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # This file is part of GNU Rush. # Copyright (C) 2008-2024 Sergey Poznyakoff # # GNU Rush is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Rush is distributed in the hope that 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/>. 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 = myid$(EXEEXT) mksock$(EXEEXT) subdir = tests ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/doc/imprimatur/imprimatur.m4 \ $(top_srcdir)/m4/00gnulib.m4 $(top_srcdir)/m4/__inline.m4 \ $(top_srcdir)/m4/absolute-header.m4 $(top_srcdir)/m4/alloca.m4 \ $(top_srcdir)/m4/assert_h.m4 $(top_srcdir)/m4/btowc.m4 \ $(top_srcdir)/m4/builtin-expect.m4 $(top_srcdir)/m4/c-bool.m4 \ $(top_srcdir)/m4/calloc.m4 $(top_srcdir)/m4/close.m4 \ $(top_srcdir)/m4/codeset.m4 \ $(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup2.m4 \ $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \ $(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \ $(top_srcdir)/m4/error_h.m4 $(top_srcdir)/m4/extensions.m4 \ $(top_srcdir)/m4/extern-inline.m4 $(top_srcdir)/m4/fcntl-o.m4 \ $(top_srcdir)/m4/fcntl.m4 $(top_srcdir)/m4/fcntl_h.m4 \ $(top_srcdir)/m4/flexmember.m4 $(top_srcdir)/m4/free.m4 \ $(top_srcdir)/m4/fstat.m4 $(top_srcdir)/m4/getdelim.m4 \ $(top_srcdir)/m4/getdtablesize.m4 $(top_srcdir)/m4/getline.m4 \ $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/getprogname.m4 \ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gnulib-common.m4 \ $(top_srcdir)/m4/gnulib-comp.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/include_next.m4 \ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/inttostr.m4 \ $(top_srcdir)/m4/inttypes.m4 $(top_srcdir)/m4/langinfo_h.m4 \ $(top_srcdir)/m4/largefile.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/limits-h.m4 $(top_srcdir)/m4/localcharset.m4 \ $(top_srcdir)/m4/locale-fr.m4 $(top_srcdir)/m4/locale-ja.m4 \ $(top_srcdir)/m4/locale-zh.m4 $(top_srcdir)/m4/locale_h.m4 \ $(top_srcdir)/m4/localeconv.m4 $(top_srcdir)/m4/lock.m4 \ $(top_srcdir)/m4/malloc.m4 $(top_srcdir)/m4/malloca.m4 \ $(top_srcdir)/m4/mbrtowc.m4 $(top_srcdir)/m4/mbsinit.m4 \ $(top_srcdir)/m4/mbstate_t.m4 $(top_srcdir)/m4/mbtowc.m4 \ $(top_srcdir)/m4/minmax.m4 $(top_srcdir)/m4/mktime.m4 \ $(top_srcdir)/m4/mode_t.m4 $(top_srcdir)/m4/msvc-inval.m4 \ $(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \ $(top_srcdir)/m4/musl.m4 $(top_srcdir)/m4/nl_langinfo.m4 \ $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/nocrash.m4 \ $(top_srcdir)/m4/nstrftime.m4 $(top_srcdir)/m4/off_t.m4 \ $(top_srcdir)/m4/open-cloexec.m4 \ $(top_srcdir)/m4/open-slash.m4 $(top_srcdir)/m4/open.m4 \ $(top_srcdir)/m4/pathmax.m4 $(top_srcdir)/m4/po.m4 \ $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/m4/pthread_rwlock_rdlock.m4 \ $(top_srcdir)/m4/realloc.m4 $(top_srcdir)/m4/reallocarray.m4 \ $(top_srcdir)/m4/regex.m4 $(top_srcdir)/m4/setenv.m4 \ $(top_srcdir)/m4/setlocale_null.m4 $(top_srcdir)/m4/ssize_t.m4 \ $(top_srcdir)/m4/stat-time.m4 $(top_srcdir)/m4/stat.m4 \ $(top_srcdir)/m4/stddef_h.m4 $(top_srcdir)/m4/stdint.m4 \ $(top_srcdir)/m4/stdio_h.m4 $(top_srcdir)/m4/stdlib_h.m4 \ $(top_srcdir)/m4/strerror.m4 $(top_srcdir)/m4/string_h.m4 \ $(top_srcdir)/m4/sys_socket_h.m4 \ $(top_srcdir)/m4/sys_stat_h.m4 $(top_srcdir)/m4/sys_types_h.m4 \ $(top_srcdir)/m4/threadlib.m4 $(top_srcdir)/m4/time_h.m4 \ $(top_srcdir)/m4/time_r.m4 $(top_srcdir)/m4/time_rz.m4 \ $(top_srcdir)/m4/timegm.m4 $(top_srcdir)/m4/tm_gmtoff.m4 \ $(top_srcdir)/m4/tzset.m4 $(top_srcdir)/m4/unistd_h.m4 \ $(top_srcdir)/m4/visibility.m4 $(top_srcdir)/m4/warn-on-use.m4 \ $(top_srcdir)/m4/wchar_h.m4 $(top_srcdir)/m4/wchar_t.m4 \ $(top_srcdir)/m4/wcrtomb.m4 $(top_srcdir)/m4/wctype_h.m4 \ $(top_srcdir)/m4/wint_t.m4 $(top_srcdir)/m4/xalloc.m4 \ $(top_srcdir)/m4/zzgnulib.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) mksock_SOURCES = mksock.c mksock_OBJECTS = mksock.$(OBJEXT) mksock_LDADD = $(LDADD) myid_SOURCES = myid.c myid_OBJECTS = myid.$(OBJEXT) myid_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__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/mksock.Po ./$(DEPDIR)/myid.Po 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 = mksock.c myid.c DIST_SOURCES = mksock.c myid.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)` am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/atlocal.in \ $(top_srcdir)/build-aux/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALLOCA_H = @ALLOCA_H@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ ASSERT_H = @ASSERT_H@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOM4TE = @AUTOM4TE@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ GETOPT_H = @GETOPT_H@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GL_CFLAG_ALLOW_WARNINGS = @GL_CFLAG_ALLOW_WARNINGS@ GL_CFLAG_GNULIB_WARNINGS = @GL_CFLAG_GNULIB_WARNINGS@ GL_GNULIB_ACCESS = @GL_GNULIB_ACCESS@ GL_GNULIB_ALIGNED_ALLOC = @GL_GNULIB_ALIGNED_ALLOC@ GL_GNULIB_ATOLL = @GL_GNULIB_ATOLL@ GL_GNULIB_BTOWC = @GL_GNULIB_BTOWC@ GL_GNULIB_CALLOC_GNU = @GL_GNULIB_CALLOC_GNU@ GL_GNULIB_CALLOC_POSIX = @GL_GNULIB_CALLOC_POSIX@ GL_GNULIB_CANONICALIZE_FILE_NAME = @GL_GNULIB_CANONICALIZE_FILE_NAME@ GL_GNULIB_CHDIR = @GL_GNULIB_CHDIR@ GL_GNULIB_CHMOD = @GL_GNULIB_CHMOD@ GL_GNULIB_CHOWN = @GL_GNULIB_CHOWN@ GL_GNULIB_CLOSE = @GL_GNULIB_CLOSE@ GL_GNULIB_COPY_FILE_RANGE = @GL_GNULIB_COPY_FILE_RANGE@ GL_GNULIB_CREAT = @GL_GNULIB_CREAT@ GL_GNULIB_CTIME = @GL_GNULIB_CTIME@ GL_GNULIB_DPRINTF = @GL_GNULIB_DPRINTF@ GL_GNULIB_DUP = @GL_GNULIB_DUP@ GL_GNULIB_DUP2 = @GL_GNULIB_DUP2@ GL_GNULIB_DUP3 = @GL_GNULIB_DUP3@ GL_GNULIB_DUPLOCALE = @GL_GNULIB_DUPLOCALE@ GL_GNULIB_ENVIRON = @GL_GNULIB_ENVIRON@ GL_GNULIB_EUIDACCESS = @GL_GNULIB_EUIDACCESS@ GL_GNULIB_EXECL = @GL_GNULIB_EXECL@ GL_GNULIB_EXECLE = @GL_GNULIB_EXECLE@ GL_GNULIB_EXECLP = @GL_GNULIB_EXECLP@ GL_GNULIB_EXECV = @GL_GNULIB_EXECV@ GL_GNULIB_EXECVE = @GL_GNULIB_EXECVE@ GL_GNULIB_EXECVP = @GL_GNULIB_EXECVP@ GL_GNULIB_EXECVPE = @GL_GNULIB_EXECVPE@ GL_GNULIB_EXPLICIT_BZERO = @GL_GNULIB_EXPLICIT_BZERO@ GL_GNULIB_FACCESSAT = @GL_GNULIB_FACCESSAT@ GL_GNULIB_FCHDIR = @GL_GNULIB_FCHDIR@ GL_GNULIB_FCHMODAT = @GL_GNULIB_FCHMODAT@ GL_GNULIB_FCHOWNAT = @GL_GNULIB_FCHOWNAT@ GL_GNULIB_FCLOSE = @GL_GNULIB_FCLOSE@ GL_GNULIB_FCNTL = @GL_GNULIB_FCNTL@ GL_GNULIB_FDATASYNC = @GL_GNULIB_FDATASYNC@ GL_GNULIB_FDOPEN = @GL_GNULIB_FDOPEN@ GL_GNULIB_FFLUSH = @GL_GNULIB_FFLUSH@ GL_GNULIB_FFSL = @GL_GNULIB_FFSL@ GL_GNULIB_FFSLL = @GL_GNULIB_FFSLL@ GL_GNULIB_FGETC = @GL_GNULIB_FGETC@ GL_GNULIB_FGETS = @GL_GNULIB_FGETS@ GL_GNULIB_FOPEN = @GL_GNULIB_FOPEN@ GL_GNULIB_FOPEN_GNU = @GL_GNULIB_FOPEN_GNU@ GL_GNULIB_FPRINTF = @GL_GNULIB_FPRINTF@ GL_GNULIB_FPRINTF_POSIX = @GL_GNULIB_FPRINTF_POSIX@ GL_GNULIB_FPURGE = @GL_GNULIB_FPURGE@ GL_GNULIB_FPUTC = @GL_GNULIB_FPUTC@ GL_GNULIB_FPUTS = @GL_GNULIB_FPUTS@ GL_GNULIB_FREAD = @GL_GNULIB_FREAD@ GL_GNULIB_FREE_POSIX = @GL_GNULIB_FREE_POSIX@ GL_GNULIB_FREOPEN = @GL_GNULIB_FREOPEN@ GL_GNULIB_FSCANF = @GL_GNULIB_FSCANF@ GL_GNULIB_FSEEK = @GL_GNULIB_FSEEK@ GL_GNULIB_FSEEKO = @GL_GNULIB_FSEEKO@ GL_GNULIB_FSTAT = @GL_GNULIB_FSTAT@ GL_GNULIB_FSTATAT = @GL_GNULIB_FSTATAT@ GL_GNULIB_FSYNC = @GL_GNULIB_FSYNC@ GL_GNULIB_FTELL = @GL_GNULIB_FTELL@ GL_GNULIB_FTELLO = @GL_GNULIB_FTELLO@ GL_GNULIB_FTRUNCATE = @GL_GNULIB_FTRUNCATE@ GL_GNULIB_FUTIMENS = @GL_GNULIB_FUTIMENS@ GL_GNULIB_FWRITE = @GL_GNULIB_FWRITE@ GL_GNULIB_GETC = @GL_GNULIB_GETC@ GL_GNULIB_GETCHAR = @GL_GNULIB_GETCHAR@ GL_GNULIB_GETCWD = @GL_GNULIB_GETCWD@ GL_GNULIB_GETDELIM = @GL_GNULIB_GETDELIM@ GL_GNULIB_GETDOMAINNAME = @GL_GNULIB_GETDOMAINNAME@ GL_GNULIB_GETDTABLESIZE = @GL_GNULIB_GETDTABLESIZE@ GL_GNULIB_GETENTROPY = @GL_GNULIB_GETENTROPY@ GL_GNULIB_GETGROUPS = @GL_GNULIB_GETGROUPS@ GL_GNULIB_GETHOSTNAME = @GL_GNULIB_GETHOSTNAME@ GL_GNULIB_GETLINE = @GL_GNULIB_GETLINE@ GL_GNULIB_GETLOADAVG = @GL_GNULIB_GETLOADAVG@ GL_GNULIB_GETLOGIN = @GL_GNULIB_GETLOGIN@ GL_GNULIB_GETLOGIN_R = @GL_GNULIB_GETLOGIN_R@ GL_GNULIB_GETOPT_POSIX = @GL_GNULIB_GETOPT_POSIX@ GL_GNULIB_GETPAGESIZE = @GL_GNULIB_GETPAGESIZE@ GL_GNULIB_GETPASS = @GL_GNULIB_GETPASS@ GL_GNULIB_GETPASS_GNU = @GL_GNULIB_GETPASS_GNU@ GL_GNULIB_GETPROGNAME = @GL_GNULIB_GETPROGNAME@ GL_GNULIB_GETSUBOPT = @GL_GNULIB_GETSUBOPT@ GL_GNULIB_GETUMASK = @GL_GNULIB_GETUMASK@ GL_GNULIB_GETUSERSHELL = @GL_GNULIB_GETUSERSHELL@ GL_GNULIB_GRANTPT = @GL_GNULIB_GRANTPT@ GL_GNULIB_GROUP_MEMBER = @GL_GNULIB_GROUP_MEMBER@ GL_GNULIB_IMAXABS = @GL_GNULIB_IMAXABS@ GL_GNULIB_IMAXDIV = @GL_GNULIB_IMAXDIV@ GL_GNULIB_ISATTY = @GL_GNULIB_ISATTY@ GL_GNULIB_ISWBLANK = @GL_GNULIB_ISWBLANK@ GL_GNULIB_ISWCTYPE = @GL_GNULIB_ISWCTYPE@ GL_GNULIB_ISWDIGIT = @GL_GNULIB_ISWDIGIT@ GL_GNULIB_ISWXDIGIT = @GL_GNULIB_ISWXDIGIT@ GL_GNULIB_LCHMOD = @GL_GNULIB_LCHMOD@ GL_GNULIB_LCHOWN = @GL_GNULIB_LCHOWN@ GL_GNULIB_LINK = @GL_GNULIB_LINK@ GL_GNULIB_LINKAT = @GL_GNULIB_LINKAT@ GL_GNULIB_LOCALECONV = @GL_GNULIB_LOCALECONV@ GL_GNULIB_LOCALENAME = @GL_GNULIB_LOCALENAME@ GL_GNULIB_LOCALTIME = @GL_GNULIB_LOCALTIME@ GL_GNULIB_LSEEK = @GL_GNULIB_LSEEK@ GL_GNULIB_LSTAT = @GL_GNULIB_LSTAT@ GL_GNULIB_MALLOC_GNU = @GL_GNULIB_MALLOC_GNU@ GL_GNULIB_MALLOC_POSIX = @GL_GNULIB_MALLOC_POSIX@ GL_GNULIB_MBRLEN = @GL_GNULIB_MBRLEN@ GL_GNULIB_MBRTOWC = @GL_GNULIB_MBRTOWC@ GL_GNULIB_MBSCASECMP = @GL_GNULIB_MBSCASECMP@ GL_GNULIB_MBSCASESTR = @GL_GNULIB_MBSCASESTR@ GL_GNULIB_MBSCHR = @GL_GNULIB_MBSCHR@ GL_GNULIB_MBSCSPN = @GL_GNULIB_MBSCSPN@ GL_GNULIB_MBSINIT = @GL_GNULIB_MBSINIT@ GL_GNULIB_MBSLEN = @GL_GNULIB_MBSLEN@ GL_GNULIB_MBSNCASECMP = @GL_GNULIB_MBSNCASECMP@ GL_GNULIB_MBSNLEN = @GL_GNULIB_MBSNLEN@ GL_GNULIB_MBSNRTOWCS = @GL_GNULIB_MBSNRTOWCS@ GL_GNULIB_MBSPBRK = @GL_GNULIB_MBSPBRK@ GL_GNULIB_MBSPCASECMP = @GL_GNULIB_MBSPCASECMP@ GL_GNULIB_MBSRCHR = @GL_GNULIB_MBSRCHR@ GL_GNULIB_MBSRTOWCS = @GL_GNULIB_MBSRTOWCS@ GL_GNULIB_MBSSEP = @GL_GNULIB_MBSSEP@ GL_GNULIB_MBSSPN = @GL_GNULIB_MBSSPN@ GL_GNULIB_MBSSTR = @GL_GNULIB_MBSSTR@ GL_GNULIB_MBSTOK_R = @GL_GNULIB_MBSTOK_R@ GL_GNULIB_MBSTOWCS = @GL_GNULIB_MBSTOWCS@ GL_GNULIB_MBTOWC = @GL_GNULIB_MBTOWC@ GL_GNULIB_MDA_ACCESS = @GL_GNULIB_MDA_ACCESS@ GL_GNULIB_MDA_CHDIR = @GL_GNULIB_MDA_CHDIR@ GL_GNULIB_MDA_CHMOD = @GL_GNULIB_MDA_CHMOD@ GL_GNULIB_MDA_CLOSE = @GL_GNULIB_MDA_CLOSE@ GL_GNULIB_MDA_CREAT = @GL_GNULIB_MDA_CREAT@ GL_GNULIB_MDA_DUP = @GL_GNULIB_MDA_DUP@ GL_GNULIB_MDA_DUP2 = @GL_GNULIB_MDA_DUP2@ GL_GNULIB_MDA_ECVT = @GL_GNULIB_MDA_ECVT@ GL_GNULIB_MDA_EXECL = @GL_GNULIB_MDA_EXECL@ GL_GNULIB_MDA_EXECLE = @GL_GNULIB_MDA_EXECLE@ GL_GNULIB_MDA_EXECLP = @GL_GNULIB_MDA_EXECLP@ GL_GNULIB_MDA_EXECV = @GL_GNULIB_MDA_EXECV@ GL_GNULIB_MDA_EXECVE = @GL_GNULIB_MDA_EXECVE@ GL_GNULIB_MDA_EXECVP = @GL_GNULIB_MDA_EXECVP@ GL_GNULIB_MDA_EXECVPE = @GL_GNULIB_MDA_EXECVPE@ GL_GNULIB_MDA_FCLOSEALL = @GL_GNULIB_MDA_FCLOSEALL@ GL_GNULIB_MDA_FCVT = @GL_GNULIB_MDA_FCVT@ GL_GNULIB_MDA_FDOPEN = @GL_GNULIB_MDA_FDOPEN@ GL_GNULIB_MDA_FILENO = @GL_GNULIB_MDA_FILENO@ GL_GNULIB_MDA_GCVT = @GL_GNULIB_MDA_GCVT@ GL_GNULIB_MDA_GETCWD = @GL_GNULIB_MDA_GETCWD@ GL_GNULIB_MDA_GETPID = @GL_GNULIB_MDA_GETPID@ GL_GNULIB_MDA_GETW = @GL_GNULIB_MDA_GETW@ GL_GNULIB_MDA_ISATTY = @GL_GNULIB_MDA_ISATTY@ GL_GNULIB_MDA_LSEEK = @GL_GNULIB_MDA_LSEEK@ GL_GNULIB_MDA_MEMCCPY = @GL_GNULIB_MDA_MEMCCPY@ GL_GNULIB_MDA_MKDIR = @GL_GNULIB_MDA_MKDIR@ GL_GNULIB_MDA_MKTEMP = @GL_GNULIB_MDA_MKTEMP@ GL_GNULIB_MDA_OPEN = @GL_GNULIB_MDA_OPEN@ GL_GNULIB_MDA_PUTENV = @GL_GNULIB_MDA_PUTENV@ GL_GNULIB_MDA_PUTW = @GL_GNULIB_MDA_PUTW@ GL_GNULIB_MDA_READ = @GL_GNULIB_MDA_READ@ GL_GNULIB_MDA_RMDIR = @GL_GNULIB_MDA_RMDIR@ GL_GNULIB_MDA_STRDUP = @GL_GNULIB_MDA_STRDUP@ GL_GNULIB_MDA_SWAB = @GL_GNULIB_MDA_SWAB@ GL_GNULIB_MDA_TEMPNAM = @GL_GNULIB_MDA_TEMPNAM@ GL_GNULIB_MDA_TZSET = @GL_GNULIB_MDA_TZSET@ GL_GNULIB_MDA_UMASK = @GL_GNULIB_MDA_UMASK@ GL_GNULIB_MDA_UNLINK = @GL_GNULIB_MDA_UNLINK@ GL_GNULIB_MDA_WCSDUP = @GL_GNULIB_MDA_WCSDUP@ GL_GNULIB_MDA_WRITE = @GL_GNULIB_MDA_WRITE@ GL_GNULIB_MEMCHR = @GL_GNULIB_MEMCHR@ GL_GNULIB_MEMMEM = @GL_GNULIB_MEMMEM@ GL_GNULIB_MEMPCPY = @GL_GNULIB_MEMPCPY@ GL_GNULIB_MEMRCHR = @GL_GNULIB_MEMRCHR@ GL_GNULIB_MEMSET_EXPLICIT = @GL_GNULIB_MEMSET_EXPLICIT@ GL_GNULIB_MKDIR = @GL_GNULIB_MKDIR@ GL_GNULIB_MKDIRAT = @GL_GNULIB_MKDIRAT@ GL_GNULIB_MKDTEMP = @GL_GNULIB_MKDTEMP@ GL_GNULIB_MKFIFO = @GL_GNULIB_MKFIFO@ GL_GNULIB_MKFIFOAT = @GL_GNULIB_MKFIFOAT@ GL_GNULIB_MKNOD = @GL_GNULIB_MKNOD@ GL_GNULIB_MKNODAT = @GL_GNULIB_MKNODAT@ GL_GNULIB_MKOSTEMP = @GL_GNULIB_MKOSTEMP@ GL_GNULIB_MKOSTEMPS = @GL_GNULIB_MKOSTEMPS@ GL_GNULIB_MKSTEMP = @GL_GNULIB_MKSTEMP@ GL_GNULIB_MKSTEMPS = @GL_GNULIB_MKSTEMPS@ GL_GNULIB_MKTIME = @GL_GNULIB_MKTIME@ GL_GNULIB_NANOSLEEP = @GL_GNULIB_NANOSLEEP@ GL_GNULIB_NL_LANGINFO = @GL_GNULIB_NL_LANGINFO@ GL_GNULIB_NONBLOCKING = @GL_GNULIB_NONBLOCKING@ GL_GNULIB_OBSTACK_PRINTF = @GL_GNULIB_OBSTACK_PRINTF@ GL_GNULIB_OBSTACK_PRINTF_POSIX = @GL_GNULIB_OBSTACK_PRINTF_POSIX@ GL_GNULIB_OPEN = @GL_GNULIB_OPEN@ GL_GNULIB_OPENAT = @GL_GNULIB_OPENAT@ GL_GNULIB_OVERRIDES_STRUCT_STAT = @GL_GNULIB_OVERRIDES_STRUCT_STAT@ GL_GNULIB_PCLOSE = @GL_GNULIB_PCLOSE@ GL_GNULIB_PERROR = @GL_GNULIB_PERROR@ GL_GNULIB_PIPE = @GL_GNULIB_PIPE@ GL_GNULIB_PIPE2 = @GL_GNULIB_PIPE2@ GL_GNULIB_POPEN = @GL_GNULIB_POPEN@ GL_GNULIB_POSIX_MEMALIGN = @GL_GNULIB_POSIX_MEMALIGN@ GL_GNULIB_POSIX_OPENPT = @GL_GNULIB_POSIX_OPENPT@ GL_GNULIB_PREAD = @GL_GNULIB_PREAD@ GL_GNULIB_PRINTF = @GL_GNULIB_PRINTF@ GL_GNULIB_PRINTF_POSIX = @GL_GNULIB_PRINTF_POSIX@ GL_GNULIB_PTSNAME = @GL_GNULIB_PTSNAME@ GL_GNULIB_PTSNAME_R = @GL_GNULIB_PTSNAME_R@ GL_GNULIB_PUTC = @GL_GNULIB_PUTC@ GL_GNULIB_PUTCHAR = @GL_GNULIB_PUTCHAR@ GL_GNULIB_PUTENV = @GL_GNULIB_PUTENV@ GL_GNULIB_PUTS = @GL_GNULIB_PUTS@ GL_GNULIB_PWRITE = @GL_GNULIB_PWRITE@ GL_GNULIB_QSORT_R = @GL_GNULIB_QSORT_R@ GL_GNULIB_RANDOM = @GL_GNULIB_RANDOM@ GL_GNULIB_RANDOM_R = @GL_GNULIB_RANDOM_R@ GL_GNULIB_RAWMEMCHR = @GL_GNULIB_RAWMEMCHR@ GL_GNULIB_READ = @GL_GNULIB_READ@ GL_GNULIB_READLINK = @GL_GNULIB_READLINK@ GL_GNULIB_READLINKAT = @GL_GNULIB_READLINKAT@ GL_GNULIB_REALLOCARRAY = @GL_GNULIB_REALLOCARRAY@ GL_GNULIB_REALLOC_GNU = @GL_GNULIB_REALLOC_GNU@ GL_GNULIB_REALLOC_POSIX = @GL_GNULIB_REALLOC_POSIX@ GL_GNULIB_REALPATH = @GL_GNULIB_REALPATH@ GL_GNULIB_REMOVE = @GL_GNULIB_REMOVE@ GL_GNULIB_RENAME = @GL_GNULIB_RENAME@ GL_GNULIB_RENAMEAT = @GL_GNULIB_RENAMEAT@ GL_GNULIB_RMDIR = @GL_GNULIB_RMDIR@ GL_GNULIB_RPMATCH = @GL_GNULIB_RPMATCH@ GL_GNULIB_SCANF = @GL_GNULIB_SCANF@ GL_GNULIB_SECURE_GETENV = @GL_GNULIB_SECURE_GETENV@ GL_GNULIB_SETENV = @GL_GNULIB_SETENV@ GL_GNULIB_SETHOSTNAME = @GL_GNULIB_SETHOSTNAME@ GL_GNULIB_SETLOCALE = @GL_GNULIB_SETLOCALE@ GL_GNULIB_SETLOCALE_NULL = @GL_GNULIB_SETLOCALE_NULL@ GL_GNULIB_SIGABBREV_NP = @GL_GNULIB_SIGABBREV_NP@ GL_GNULIB_SIGDESCR_NP = @GL_GNULIB_SIGDESCR_NP@ GL_GNULIB_SLEEP = @GL_GNULIB_SLEEP@ GL_GNULIB_SNPRINTF = @GL_GNULIB_SNPRINTF@ GL_GNULIB_SPRINTF_POSIX = @GL_GNULIB_SPRINTF_POSIX@ GL_GNULIB_STAT = @GL_GNULIB_STAT@ GL_GNULIB_STDIO_H_NONBLOCKING = @GL_GNULIB_STDIO_H_NONBLOCKING@ GL_GNULIB_STDIO_H_SIGPIPE = @GL_GNULIB_STDIO_H_SIGPIPE@ GL_GNULIB_STPCPY = @GL_GNULIB_STPCPY@ GL_GNULIB_STPNCPY = @GL_GNULIB_STPNCPY@ GL_GNULIB_STRCASESTR = @GL_GNULIB_STRCASESTR@ GL_GNULIB_STRCHRNUL = @GL_GNULIB_STRCHRNUL@ GL_GNULIB_STRDUP = @GL_GNULIB_STRDUP@ GL_GNULIB_STRERROR = @GL_GNULIB_STRERROR@ GL_GNULIB_STRERRORNAME_NP = @GL_GNULIB_STRERRORNAME_NP@ GL_GNULIB_STRERROR_R = @GL_GNULIB_STRERROR_R@ GL_GNULIB_STRFTIME = @GL_GNULIB_STRFTIME@ GL_GNULIB_STRNCAT = @GL_GNULIB_STRNCAT@ GL_GNULIB_STRNDUP = @GL_GNULIB_STRNDUP@ GL_GNULIB_STRNLEN = @GL_GNULIB_STRNLEN@ GL_GNULIB_STRPBRK = @GL_GNULIB_STRPBRK@ GL_GNULIB_STRPTIME = @GL_GNULIB_STRPTIME@ GL_GNULIB_STRSEP = @GL_GNULIB_STRSEP@ GL_GNULIB_STRSIGNAL = @GL_GNULIB_STRSIGNAL@ GL_GNULIB_STRSTR = @GL_GNULIB_STRSTR@ GL_GNULIB_STRTOD = @GL_GNULIB_STRTOD@ GL_GNULIB_STRTOIMAX = @GL_GNULIB_STRTOIMAX@ GL_GNULIB_STRTOK_R = @GL_GNULIB_STRTOK_R@ GL_GNULIB_STRTOL = @GL_GNULIB_STRTOL@ GL_GNULIB_STRTOLD = @GL_GNULIB_STRTOLD@ GL_GNULIB_STRTOLL = @GL_GNULIB_STRTOLL@ GL_GNULIB_STRTOUL = @GL_GNULIB_STRTOUL@ GL_GNULIB_STRTOULL = @GL_GNULIB_STRTOULL@ GL_GNULIB_STRTOUMAX = @GL_GNULIB_STRTOUMAX@ GL_GNULIB_STRVERSCMP = @GL_GNULIB_STRVERSCMP@ GL_GNULIB_SYMLINK = @GL_GNULIB_SYMLINK@ GL_GNULIB_SYMLINKAT = @GL_GNULIB_SYMLINKAT@ GL_GNULIB_SYSTEM_POSIX = @GL_GNULIB_SYSTEM_POSIX@ GL_GNULIB_TIME = @GL_GNULIB_TIME@ GL_GNULIB_TIMEGM = @GL_GNULIB_TIMEGM@ GL_GNULIB_TIMESPEC_GET = @GL_GNULIB_TIMESPEC_GET@ GL_GNULIB_TIMESPEC_GETRES = @GL_GNULIB_TIMESPEC_GETRES@ GL_GNULIB_TIME_R = @GL_GNULIB_TIME_R@ GL_GNULIB_TIME_RZ = @GL_GNULIB_TIME_RZ@ GL_GNULIB_TMPFILE = @GL_GNULIB_TMPFILE@ GL_GNULIB_TOWCTRANS = @GL_GNULIB_TOWCTRANS@ GL_GNULIB_TRUNCATE = @GL_GNULIB_TRUNCATE@ GL_GNULIB_TTYNAME_R = @GL_GNULIB_TTYNAME_R@ GL_GNULIB_TZSET = @GL_GNULIB_TZSET@ GL_GNULIB_UNISTD_H_GETOPT = @GL_GNULIB_UNISTD_H_GETOPT@ GL_GNULIB_UNISTD_H_NONBLOCKING = @GL_GNULIB_UNISTD_H_NONBLOCKING@ GL_GNULIB_UNISTD_H_SIGPIPE = @GL_GNULIB_UNISTD_H_SIGPIPE@ GL_GNULIB_UNLINK = @GL_GNULIB_UNLINK@ GL_GNULIB_UNLINKAT = @GL_GNULIB_UNLINKAT@ GL_GNULIB_UNLOCKPT = @GL_GNULIB_UNLOCKPT@ GL_GNULIB_UNSETENV = @GL_GNULIB_UNSETENV@ GL_GNULIB_USLEEP = @GL_GNULIB_USLEEP@ GL_GNULIB_UTIMENSAT = @GL_GNULIB_UTIMENSAT@ GL_GNULIB_VASPRINTF = @GL_GNULIB_VASPRINTF@ GL_GNULIB_VDPRINTF = @GL_GNULIB_VDPRINTF@ GL_GNULIB_VFPRINTF = @GL_GNULIB_VFPRINTF@ GL_GNULIB_VFPRINTF_POSIX = @GL_GNULIB_VFPRINTF_POSIX@ GL_GNULIB_VFSCANF = @GL_GNULIB_VFSCANF@ GL_GNULIB_VPRINTF = @GL_GNULIB_VPRINTF@ GL_GNULIB_VPRINTF_POSIX = @GL_GNULIB_VPRINTF_POSIX@ GL_GNULIB_VSCANF = @GL_GNULIB_VSCANF@ GL_GNULIB_VSNPRINTF = @GL_GNULIB_VSNPRINTF@ GL_GNULIB_VSPRINTF_POSIX = @GL_GNULIB_VSPRINTF_POSIX@ GL_GNULIB_WCPCPY = @GL_GNULIB_WCPCPY@ GL_GNULIB_WCPNCPY = @GL_GNULIB_WCPNCPY@ GL_GNULIB_WCRTOMB = @GL_GNULIB_WCRTOMB@ GL_GNULIB_WCSCASECMP = @GL_GNULIB_WCSCASECMP@ GL_GNULIB_WCSCAT = @GL_GNULIB_WCSCAT@ GL_GNULIB_WCSCHR = @GL_GNULIB_WCSCHR@ GL_GNULIB_WCSCMP = @GL_GNULIB_WCSCMP@ GL_GNULIB_WCSCOLL = @GL_GNULIB_WCSCOLL@ GL_GNULIB_WCSCPY = @GL_GNULIB_WCSCPY@ GL_GNULIB_WCSCSPN = @GL_GNULIB_WCSCSPN@ GL_GNULIB_WCSDUP = @GL_GNULIB_WCSDUP@ GL_GNULIB_WCSFTIME = @GL_GNULIB_WCSFTIME@ GL_GNULIB_WCSLEN = @GL_GNULIB_WCSLEN@ GL_GNULIB_WCSNCASECMP = @GL_GNULIB_WCSNCASECMP@ GL_GNULIB_WCSNCAT = @GL_GNULIB_WCSNCAT@ GL_GNULIB_WCSNCMP = @GL_GNULIB_WCSNCMP@ GL_GNULIB_WCSNCPY = @GL_GNULIB_WCSNCPY@ GL_GNULIB_WCSNLEN = @GL_GNULIB_WCSNLEN@ GL_GNULIB_WCSNRTOMBS = @GL_GNULIB_WCSNRTOMBS@ GL_GNULIB_WCSPBRK = @GL_GNULIB_WCSPBRK@ GL_GNULIB_WCSRCHR = @GL_GNULIB_WCSRCHR@ GL_GNULIB_WCSRTOMBS = @GL_GNULIB_WCSRTOMBS@ GL_GNULIB_WCSSPN = @GL_GNULIB_WCSSPN@ GL_GNULIB_WCSSTR = @GL_GNULIB_WCSSTR@ GL_GNULIB_WCSTOK = @GL_GNULIB_WCSTOK@ GL_GNULIB_WCSWIDTH = @GL_GNULIB_WCSWIDTH@ GL_GNULIB_WCSXFRM = @GL_GNULIB_WCSXFRM@ GL_GNULIB_WCTOB = @GL_GNULIB_WCTOB@ GL_GNULIB_WCTOMB = @GL_GNULIB_WCTOMB@ GL_GNULIB_WCTRANS = @GL_GNULIB_WCTRANS@ GL_GNULIB_WCTYPE = @GL_GNULIB_WCTYPE@ GL_GNULIB_WCWIDTH = @GL_GNULIB_WCWIDTH@ GL_GNULIB_WMEMCHR = @GL_GNULIB_WMEMCHR@ GL_GNULIB_WMEMCMP = @GL_GNULIB_WMEMCMP@ GL_GNULIB_WMEMCPY = @GL_GNULIB_WMEMCPY@ GL_GNULIB_WMEMMOVE = @GL_GNULIB_WMEMMOVE@ GL_GNULIB_WMEMPCPY = @GL_GNULIB_WMEMPCPY@ GL_GNULIB_WMEMSET = @GL_GNULIB_WMEMSET@ GL_GNULIB_WRITE = @GL_GNULIB_WRITE@ GL_GNULIB__EXIT = @GL_GNULIB__EXIT@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GNULIBHEADERS_OVERRIDE_WINT_T = @GNULIBHEADERS_OVERRIDE_WINT_T@ GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@ GREP = @GREP@ HARD_LOCALE_LIB = @HARD_LOCALE_LIB@ HAVE_ALIGNED_ALLOC = @HAVE_ALIGNED_ALLOC@ HAVE_ALLOCA_H = @HAVE_ALLOCA_H@ HAVE_ATOLL = @HAVE_ATOLL@ HAVE_BTOWC = @HAVE_BTOWC@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_COPY_FILE_RANGE = @HAVE_COPY_FILE_RANGE@ HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ HAVE_DECL_ECVT = @HAVE_DECL_ECVT@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_EXECVPE = @HAVE_DECL_EXECVPE@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FCLOSEALL = @HAVE_DECL_FCLOSEALL@ HAVE_DECL_FCVT = @HAVE_DECL_FCVT@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GCVT = @HAVE_DECL_GCVT@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_GETW = @HAVE_DECL_GETW@ HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@ HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_PROGRAM_INVOCATION_NAME = @HAVE_DECL_PROGRAM_INVOCATION_NAME@ HAVE_DECL_PUTW = @HAVE_DECL_PUTW@ HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DECL_WCSDUP = @HAVE_DECL_WCSDUP@ HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ HAVE_ERROR = @HAVE_ERROR@ HAVE_ERROR_AT_LINE = @HAVE_ERROR_AT_LINE@ HAVE_ERROR_H = @HAVE_ERROR_H@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_EXECVPE = @HAVE_EXECVPE@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHMODAT = @HAVE_FCHMODAT@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FCNTL = @HAVE_FCNTL@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FEATURES_H = @HAVE_FEATURES_H@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FREELOCALE = @HAVE_FREELOCALE@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSTATAT = @HAVE_FSTATAT@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_FUTIMENS = @HAVE_FUTIMENS@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETENTROPY = @HAVE_GETENTROPY@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GETPASS = @HAVE_GETPASS@ HAVE_GETPROGNAME = @HAVE_GETPROGNAME@ HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ HAVE_GETUMASK = @HAVE_GETUMASK@ HAVE_GRANTPT = @HAVE_GRANTPT@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_IMAXABS = @HAVE_IMAXABS@ HAVE_IMAXDIV = @HAVE_IMAXDIV@ HAVE_IMAXDIV_T = @HAVE_IMAXDIV_T@ HAVE_INITSTATE = @HAVE_INITSTATE@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_ISWBLANK = @HAVE_ISWBLANK@ HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ HAVE_LANGINFO_ALTMON = @HAVE_LANGINFO_ALTMON@ HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ HAVE_LCHMOD = @HAVE_LCHMOD@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_LSTAT = @HAVE_LSTAT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBRLEN = @HAVE_MBRLEN@ HAVE_MBRTOWC = @HAVE_MBRTOWC@ HAVE_MBSINIT = @HAVE_MBSINIT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ HAVE_MBTOWC = @HAVE_MBTOWC@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MEMSET_EXPLICIT = @HAVE_MEMSET_EXPLICIT@ HAVE_MKDIRAT = @HAVE_MKDIRAT@ HAVE_MKDTEMP = @HAVE_MKDTEMP@ HAVE_MKFIFO = @HAVE_MKFIFO@ HAVE_MKFIFOAT = @HAVE_MKFIFOAT@ HAVE_MKNOD = @HAVE_MKNOD@ HAVE_MKNODAT = @HAVE_MKNODAT@ HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ HAVE_MKSTEMP = @HAVE_MKSTEMP@ HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ HAVE_NEWLOCALE = @HAVE_NEWLOCALE@ HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ HAVE_OPENAT = @HAVE_OPENAT@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_POSIX_MEMALIGN = @HAVE_POSIX_MEMALIGN@ HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PTSNAME = @HAVE_PTSNAME@ HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_QSORT_R = @HAVE_QSORT_R@ HAVE_RANDOM = @HAVE_RANDOM@ HAVE_RANDOM_H = @HAVE_RANDOM_H@ HAVE_RANDOM_R = @HAVE_RANDOM_R@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ HAVE_REALPATH = @HAVE_REALPATH@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_RPMATCH = @HAVE_RPMATCH@ HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ HAVE_SETENV = @HAVE_SETENV@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SETSTATE = @HAVE_SETSTATE@ HAVE_SIGABBREV_NP = @HAVE_SIGABBREV_NP@ HAVE_SIGDESCR_NP = @HAVE_SIGDESCR_NP@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRERRORNAME_NP = @HAVE_STRERRORNAME_NP@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRPTIME = @HAVE_STRPTIME@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRTOD = @HAVE_STRTOD@ HAVE_STRTOL = @HAVE_STRTOL@ HAVE_STRTOLD = @HAVE_STRTOLD@ HAVE_STRTOLL = @HAVE_STRTOLL@ HAVE_STRTOUL = @HAVE_STRTOUL@ HAVE_STRTOULL = @HAVE_STRTOULL@ HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_TIMEGM = @HAVE_TIMEGM@ HAVE_TIMESPEC_GET = @HAVE_TIMESPEC_GET@ HAVE_TIMESPEC_GETRES = @HAVE_TIMESPEC_GETRES@ HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WCPCPY = @HAVE_WCPCPY@ HAVE_WCPNCPY = @HAVE_WCPNCPY@ HAVE_WCRTOMB = @HAVE_WCRTOMB@ HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ HAVE_WCSCAT = @HAVE_WCSCAT@ HAVE_WCSCHR = @HAVE_WCSCHR@ HAVE_WCSCMP = @HAVE_WCSCMP@ HAVE_WCSCOLL = @HAVE_WCSCOLL@ HAVE_WCSCPY = @HAVE_WCSCPY@ HAVE_WCSCSPN = @HAVE_WCSCSPN@ HAVE_WCSDUP = @HAVE_WCSDUP@ HAVE_WCSFTIME = @HAVE_WCSFTIME@ HAVE_WCSLEN = @HAVE_WCSLEN@ HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ HAVE_WCSNCAT = @HAVE_WCSNCAT@ HAVE_WCSNCMP = @HAVE_WCSNCMP@ HAVE_WCSNCPY = @HAVE_WCSNCPY@ HAVE_WCSNLEN = @HAVE_WCSNLEN@ HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ HAVE_WCSPBRK = @HAVE_WCSPBRK@ HAVE_WCSRCHR = @HAVE_WCSRCHR@ HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ HAVE_WCSSPN = @HAVE_WCSSPN@ HAVE_WCSSTR = @HAVE_WCSSTR@ HAVE_WCSTOK = @HAVE_WCSTOK@ HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ HAVE_WCSXFRM = @HAVE_WCSXFRM@ HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE_WINT_T = @HAVE_WINT_T@ HAVE_WMEMCHR = @HAVE_WMEMCHR@ HAVE_WMEMCMP = @HAVE_WMEMCMP@ HAVE_WMEMCPY = @HAVE_WMEMCPY@ HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ HAVE_WMEMPCPY = @HAVE_WMEMPCPY@ HAVE_WMEMSET = @HAVE_WMEMSET@ HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ HAVE__EXIT = @HAVE__EXIT@ IMPRIMATUR_MAKEINFOFLAGS = @IMPRIMATUR_MAKEINFOFLAGS@ IMPRIMATUR_MODULE_DIR = @IMPRIMATUR_MODULE_DIR@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@ INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBGNU_LIBDEPS = @LIBGNU_LIBDEPS@ LIBGNU_LTLIBDEPS = @LIBGNU_LTLIBDEPS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPMULTITHREAD = @LIBPMULTITHREAD@ LIBPTHREAD = @LIBPTHREAD@ LIBS = @LIBS@ LIBSTDTHREAD = @LIBSTDTHREAD@ LIBTHREAD = @LIBTHREAD@ LIB_HARD_LOCALE = @LIB_HARD_LOCALE@ LIB_MBRTOWC = @LIB_MBRTOWC@ LIB_NL_LANGINFO = @LIB_NL_LANGINFO@ LIB_SCHED_YIELD = @LIB_SCHED_YIELD@ LIB_SETLOCALE_NULL = @LIB_SETLOCALE_NULL@ LIMITS_H = @LIMITS_H@ LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ LOCALENAME_ENHANCE_LOCALE_FUNCS = @LOCALENAME_ENHANCE_LOCALE_FUNCS@ LOCALE_FR = @LOCALE_FR@ LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ LOCALE_JA = @LOCALE_JA@ LOCALE_ZH_CN = @LOCALE_ZH_CN@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBTHREAD = @LTLIBTHREAD@ MAKEINFO = @MAKEINFO@ MBRTOWC_LIB = @MBRTOWC_LIB@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NEXT_ASSERT_H = @NEXT_ASSERT_H@ NEXT_AS_FIRST_DIRECTIVE_ASSERT_H = @NEXT_AS_FIRST_DIRECTIVE_ASSERT_H@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_ERROR_H = @NEXT_AS_FIRST_DIRECTIVE_ERROR_H@ NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@ NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_ERROR_H = @NEXT_ERROR_H@ NEXT_FCNTL_H = @NEXT_FCNTL_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_LOCALE_H = @NEXT_LOCALE_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STDLIB_H = @NEXT_STDLIB_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_TIME_H = @NEXT_TIME_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NEXT_WCHAR_H = @NEXT_WCHAR_H@ NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ 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@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PRIPTR_PREFIX = @PRIPTR_PREFIX@ PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ RANLIB = @RANLIB@ RENDITION = @RENDITION@ REPLACE_ACCESS = @REPLACE_ACCESS@ REPLACE_ALIGNED_ALLOC = @REPLACE_ALIGNED_ALLOC@ REPLACE_BTOWC = @REPLACE_BTOWC@ REPLACE_CALLOC_FOR_CALLOC_GNU = @REPLACE_CALLOC_FOR_CALLOC_GNU@ REPLACE_CALLOC_FOR_CALLOC_POSIX = @REPLACE_CALLOC_FOR_CALLOC_POSIX@ REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ REPLACE_CHMOD = @REPLACE_CHMOD@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_COPY_FILE_RANGE = @REPLACE_COPY_FILE_RANGE@ REPLACE_CREAT = @REPLACE_CREAT@ REPLACE_CTIME = @REPLACE_CTIME@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_DUP3 = @REPLACE_DUP3@ REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ REPLACE_ERROR = @REPLACE_ERROR@ REPLACE_ERROR_AT_LINE = @REPLACE_ERROR_AT_LINE@ REPLACE_EXECL = @REPLACE_EXECL@ REPLACE_EXECLE = @REPLACE_EXECLE@ REPLACE_EXECLP = @REPLACE_EXECLP@ REPLACE_EXECV = @REPLACE_EXECV@ REPLACE_EXECVE = @REPLACE_EXECVE@ REPLACE_EXECVP = @REPLACE_EXECVP@ REPLACE_EXECVPE = @REPLACE_EXECVPE@ REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ REPLACE_FCHMODAT = @REPLACE_FCHMODAT@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FCNTL = @REPLACE_FCNTL@ REPLACE_FDATASYNC = @REPLACE_FDATASYNC@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FFSLL = @REPLACE_FFSLL@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FOPEN_FOR_FOPEN_GNU = @REPLACE_FOPEN_FOR_FOPEN_GNU@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREE = @REPLACE_FREE@ REPLACE_FREELOCALE = @REPLACE_FREELOCALE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FSTAT = @REPLACE_FSTAT@ REPLACE_FSTATAT = @REPLACE_FSTATAT@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETENTROPY = @REPLACE_GETENTROPY@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOADAVG = @REPLACE_GETLOADAVG@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_GETPASS = @REPLACE_GETPASS@ REPLACE_GETPASS_FOR_GETPASS_GNU = @REPLACE_GETPASS_FOR_GETPASS_GNU@ REPLACE_GETPROGNAME = @REPLACE_GETPROGNAME@ REPLACE_GETSUBOPT = @REPLACE_GETSUBOPT@ REPLACE_GMTIME = @REPLACE_GMTIME@ REPLACE_IMAXABS = @REPLACE_IMAXABS@ REPLACE_IMAXDIV = @REPLACE_IMAXDIV@ REPLACE_INITSTATE = @REPLACE_INITSTATE@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ REPLACE_ISWDIGIT = @REPLACE_ISWDIGIT@ REPLACE_ISWXDIGIT = @REPLACE_ISWXDIGIT@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_LSTAT = @REPLACE_LSTAT@ REPLACE_MALLOC_FOR_MALLOC_GNU = @REPLACE_MALLOC_FOR_MALLOC_GNU@ REPLACE_MALLOC_FOR_MALLOC_POSIX = @REPLACE_MALLOC_FOR_MALLOC_POSIX@ REPLACE_MBRLEN = @REPLACE_MBRLEN@ REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ REPLACE_MBSINIT = @REPLACE_MBSINIT@ REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ REPLACE_MBSTOWCS = @REPLACE_MBSTOWCS@ REPLACE_MBTOWC = @REPLACE_MBTOWC@ REPLACE_MB_CUR_MAX = @REPLACE_MB_CUR_MAX@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_MEMPCPY = @REPLACE_MEMPCPY@ REPLACE_MKDIR = @REPLACE_MKDIR@ REPLACE_MKFIFO = @REPLACE_MKFIFO@ REPLACE_MKFIFOAT = @REPLACE_MKFIFOAT@ REPLACE_MKNOD = @REPLACE_MKNOD@ REPLACE_MKNODAT = @REPLACE_MKNODAT@ REPLACE_MKOSTEMP = @REPLACE_MKOSTEMP@ REPLACE_MKOSTEMPS = @REPLACE_MKOSTEMPS@ REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ REPLACE_MKTIME = @REPLACE_MKTIME@ REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ REPLACE_NEWLOCALE = @REPLACE_NEWLOCALE@ REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_OPEN = @REPLACE_OPEN@ REPLACE_OPENAT = @REPLACE_OPENAT@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_PIPE2 = @REPLACE_PIPE2@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_POSIX_MEMALIGN = @REPLACE_POSIX_MEMALIGN@ REPLACE_POSIX_OPENPT = @REPLACE_POSIX_OPENPT@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PTSNAME = @REPLACE_PTSNAME@ REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ REPLACE_PUTENV = @REPLACE_PUTENV@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_QSORT_R = @REPLACE_QSORT_R@ REPLACE_RANDOM = @REPLACE_RANDOM@ REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ REPLACE_READ = @REPLACE_READ@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_READLINKAT = @REPLACE_READLINKAT@ REPLACE_REALLOCARRAY = @REPLACE_REALLOCARRAY@ REPLACE_REALLOC_FOR_REALLOC_GNU = @REPLACE_REALLOC_FOR_REALLOC_GNU@ REPLACE_REALLOC_FOR_REALLOC_POSIX = @REPLACE_REALLOC_FOR_REALLOC_POSIX@ REPLACE_REALPATH = @REPLACE_REALPATH@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_SETENV = @REPLACE_SETENV@ REPLACE_SETHOSTNAME = @REPLACE_SETHOSTNAME@ REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ REPLACE_SETSTATE = @REPLACE_SETSTATE@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_STAT = @REPLACE_STAT@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPCPY = @REPLACE_STPCPY@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERRORNAME_NP = @REPLACE_STRERRORNAME_NP@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRFTIME = @REPLACE_STRFTIME@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOD = @REPLACE_STRTOD@ REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_STRTOL = @REPLACE_STRTOL@ REPLACE_STRTOLD = @REPLACE_STRTOLD@ REPLACE_STRTOLL = @REPLACE_STRTOLL@ REPLACE_STRTOUL = @REPLACE_STRTOUL@ REPLACE_STRTOULL = @REPLACE_STRTOULL@ REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ REPLACE_TIME = @REPLACE_TIME@ REPLACE_TIMEGM = @REPLACE_TIMEGM@ REPLACE_TIMESPEC_GET = @REPLACE_TIMESPEC_GET@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_TZSET = @REPLACE_TZSET@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_UNSETENV = @REPLACE_UNSETENV@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ REPLACE_WCSCMP = @REPLACE_WCSCMP@ REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ REPLACE_WCSNCMP = @REPLACE_WCSNCMP@ REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ REPLACE_WCSSTR = @REPLACE_WCSSTR@ REPLACE_WCSTOK = @REPLACE_WCSTOK@ REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ REPLACE_WCTOB = @REPLACE_WCTOB@ REPLACE_WCTOMB = @REPLACE_WCTOMB@ REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ REPLACE_WMEMCMP = @REPLACE_WMEMCMP@ REPLACE_WMEMPCPY = @REPLACE_WMEMPCPY@ REPLACE_WRITE = @REPLACE_WRITE@ REPLACE__EXIT = @REPLACE__EXIT@ RUSH_DEFAULT_CONFIG = @RUSH_DEFAULT_CONFIG@ SCHED_YIELD_LIB = @SCHED_YIELD_LIB@ SED = @SED@ SETLOCALE_NULL_LIB = @SETLOCALE_NULL_LIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ STDCKDINT_H = @STDCKDINT_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_TIME_UTC = @TIME_H_DEFINES_TIME_UTC@ UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@ UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ UNISTD_H_HAVE_SYS_RANDOM_H = @UNISTD_H_HAVE_SYS_RANDOM_H@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ 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@ gl_LIBOBJDEPS = @gl_LIBOBJDEPS@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJDEPS = @gltests_LIBOBJDEPS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = $(TESTSUITE_AT) testsuite package.m4 DISTCLEANFILES = atconfig $(check_SCRIPTS) MAINTAINERCLEANFILES = Makefile.in $(TESTSUITE) # TESTSUITE_AT = \ testsuite.at\ null.at\ argc.at\ command.at\ matcharg.at\ matchprog.at\ uid.at\ user.at\ in.at\ gid.at\ group.at\ and.at\ or.at\ compound.at\ set.at\ delete.at\ transform.at\ map.at\ umask.at\ newgrp.at\ chdir.at\ interactive.at\ fallthrough.at\ error.at\ evalenv.at\ clrenv.at\ unsetenv.at\ keepenv.at\ setenv.at\ backref.at\ setvar.at\ unsetvar.at\ undef.at\ regexp.at\ qstr.at\ inc00.at\ inc01.at\ insert.at\ remopt.at\ lex.at\ fstest.at\ legacy/argc.at\ legacy/backref.at\ legacy/chdir.at\ legacy/command.at\ legacy/delete.at\ legacy/env.at\ legacy/error.at\ legacy/fallthrough.at\ legacy/interactive.at\ legacy/gid.at\ legacy/map.at\ legacy/match.at\ legacy/matchprog.at\ legacy/newgrp.at\ legacy/set.at\ legacy/setvar.at\ legacy/transform.at\ legacy/uid.at\ legacy/unsetvar.at\ legacy/umask.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__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): 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) mksock$(EXEEXT): $(mksock_OBJECTS) $(mksock_DEPENDENCIES) $(EXTRA_mksock_DEPENDENCIES) @rm -f mksock$(EXEEXT) $(AM_V_CCLD)$(LINK) $(mksock_OBJECTS) $(mksock_LDADD) $(LIBS) myid$(EXEEXT): $(myid_OBJECTS) $(myid_DEPENDENCIES) $(EXTRA_myid_DEPENDENCIES) @rm -f myid$(EXEEXT) $(AM_V_CCLD)$(LINK) $(myid_OBJECTS) $(myid_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mksock.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/myid.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .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: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done 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 -f ./$(DEPDIR)/mksock.Po -rm -f ./$(DEPDIR)/myid.Po -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 -f ./$(DEPDIR)/mksock.Po -rm -f ./$(DEPDIR)/myid.Po -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 am--depfiles 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: �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/tests/regexp.at����������������������������������������������������������������������������0000644�0001750�0001750�00000003231�14643176123�015316� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of GNU Rush. # Copyright (C) 2019-2024 Sergey Poznyakoff # # GNU Rush is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Rush is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([regexp options]) AT_KEYWORDS([match regexp]) AT_RUSH_TEST([ rush 2.0 rule match \$command ~ "fo+\$" ], [cmdline,argv], [ls foo], [0], [{ "cmdline":"ls foo", "argv":[[ "ls", "foo" ]] } ], []) AT_RUSH_TEST([ rush 2.0 rule match \$command !~ "fo+\$" ], [cmdline,argv], [ls foo], [1], [], [rush: Error: no matching rule for "ls foo", user $MY_USER ], [ls bar], [0], [{ "cmdline":"ls bar", "argv":[[ "ls", "bar" ]] } ], []) AT_RUSH_TEST([ rush 2.0 global regexp basic rule match \$command ~ "fo+\$" ], [cmdline,argv], [ls foo], [1], [], [rush: Error: no matching rule for "ls foo", user $MY_USER ], [ls fo+], [0], [{ "cmdline":"ls fo+", "argv":[[ "ls", "fo+" ]] } ], []) AT_RUSH_TEST([ rush 2.0 global regexp basic ignore-case rule match \$command ~ "fo+\$" ], [cmdline,argv], [ls Fo+], [0], [{ "cmdline":"ls Fo+", "argv":[[ "ls", "Fo+" ]] } ], []) AT_CLEANUP �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/tests/in.at��������������������������������������������������������������������������������0000644�0001750�0001750�00000002143�14643176122�014432� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of GNU Rush. # Copyright (C) 2019-2024 Sergey Poznyakoff # # GNU Rush is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Rush is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([in]) AT_KEYWORDS([in]) AT_RUSH_TEST([ rush 2.0 rule match \$user in (root bin $MY_USER daemon) ], [cmdline,argv,prog], [ls /], [0], [{ "cmdline":"ls /", "argv":[[ "ls", "/" ]], "prog":null } ], []) AT_RUSH_TEST([ rush 2.0 rule match !(\$user in (root bin $MY_USER daemon)) ], [cmdline,argv,prog], [ls /], [1], [], [rush: Error: no matching rule for "ls /", user $MY_USER ]) AT_CLEANUP �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/tests/or.at��������������������������������������������������������������������������������0000644�0001750�0001750�00000002341�14643176123�014445� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of GNU Rush. # Copyright (C) 2019-2024 Sergey Poznyakoff # # GNU Rush is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Rush is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([or]) AT_KEYWORDS([match or]) AT_RUSH_TEST([ rush 2.0 rule match \$0 == "/bin/ls" || \$0 == "/bin/stat" ], [cmdline,argv,prog], [/bin/ls /usr/lib], [0], [{ "cmdline":"/bin/ls /usr/lib", "argv":[[ "/bin/ls", "/usr/lib" ]], "prog":null } ], [], [/bin/stat /usr/lib], [0], [{ "cmdline":"/bin/stat /usr/lib", "argv":[[ "/bin/stat", "/usr/lib" ]], "prog":null } ], [], [/bin/find /usr/lib], [1], [], [rush: Error: no matching rule for "/bin/find /usr/lib", user $MY_USER ]) AT_CLEANUP �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/tests/atlocal.in���������������������������������������������������������������������������0000644�0001750�0001750�00000000604�14643176121�015444� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# @configure_input@ -*- shell-script -*- # Configurable variable values for GNU rush test suite. # Copyright (C) 2016-2024 Sergey Poznyakoff PATH=@abs_builddir@:@abs_top_builddir@/src:$top_srcdir:$srcdir:$PATH RUSHDIR=@abs_top_builddir@/src myvars() { set -- $(myid) MY_USER=$1 MY_UID=$2 MY_GROUP=$3 MY_GID=$4 TESTDIR=$(pwd) } ����������������������������������������������������������������������������������������������������������������������������rush-2.4/tests/gid.at�������������������������������������������������������������������������������0000644�0001750�0001750�00000002072�14643176122�014570� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of GNU Rush. # Copyright (C) 2019-2024 Sergey Poznyakoff # # GNU Rush is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Rush is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([gid]) AT_KEYWORDS([gid]) AT_RUSH_TEST([ rush 2.0 rule match \$gid == $MY_GID ], [cmdline,argv,prog], [ls /], [0], [{ "cmdline":"ls /", "argv":[[ "ls", "/" ]], "prog":null } ], []) AT_RUSH_TEST([ rush 2.0 rule match \$gid != $MY_GID ], [cmdline,argv,prog], [ls /], [1], [], [rush: Error: no matching rule for "ls /", user $MY_USER ]) AT_CLEANUP ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/tests/package.m4���������������������������������������������������������������������������0000644�0001750�0001750�00000000415�14655401315�015331� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Signature of the current package. m4_define([AT_PACKAGE_NAME], [GNU rush]) m4_define([AT_PACKAGE_TARNAME], [rush]) m4_define([AT_PACKAGE_VERSION], [2.4]) m4_define([AT_PACKAGE_STRING], [GNU rush 2.4]) m4_define([AT_PACKAGE_BUGREPORT], [bug-rush@gnu.org]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/tests/keepenv.at���������������������������������������������������������������������������0000644�0001750�0001750�00000002133�14643176122�015460� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of GNU Rush. # Copyright (C) 2016-2024 Sergey Poznyakoff # # GNU Rush is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Rush is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([keepenv]) AT_KEYWORDS([keepenv]) m4_pushdef([RUSH_ENVIRON],[-i HOME=$PWD USER=$MY_USER LOGIN=NO_$MY_USER PATH=$PATH TEST_FOO=foo TEST_BAR=bar]) AT_RUSH_TEST([ rush 2.0 rule clrenv keepenv HOME USER "TEST_*" ], [environ], [command], [0], [{ "environ":[[ "HOME=$TESTDIR", "TEST_BAR=bar", "TEST_FOO=foo", "USER=$MY_USER" ]] } ], []) m4_popdef([RUSH_ENVIRON]) AT_CLEANUP �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/tests/inc00.at�����������������������������������������������������������������������������0000644�0001750�0001750�00000002170�14643176122�014735� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of GNU Rush. # Copyright (C) 2016-2024 Sergey Poznyakoff # # GNU Rush is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Rush is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([basic include functionality]) AT_KEYWORDS([inc00 inc include]) AT_CHECK([ AT_DATA([test.cf], [rush 2.0 rule match $0 == "ls" include "i1.cf" rule match $0 == "dir" include "i2.cf" ]) AT_DATA([i1.cf], [set [[0]] = "/bin/ls" ]) AT_DATA([i2.cf], [set [[0]] = "/bin/dir" ]) rush -C none -D cmdline -t -c "ls" test.cf rush -C none -D cmdline -t -c "dir" test.cf ], [0], [{ "cmdline":"/bin/ls" } { "cmdline":"/bin/dir" } ]) AT_CLEANUP��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/tests/remopt.at����������������������������������������������������������������������������0000644�0001750�0001750�00000004456�14643176123�015344� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of GNU Rush. # Copyright (C) 2016-2024 Sergey Poznyakoff # # GNU Rush is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Rush is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([remopt]) AT_KEYWORDS([remopt]) # Option without argument AT_RUSH_TEST([ rush 2.0 rule match \$command ~ "^server" remopt r root ], [cmdline,argv], [server -A -r -B -ref -C -erf -D -efr -C --root -D --roo -E --ro -F --r -G --rooting], [0], [{ "cmdline":"server -A -B -ef -C -ef -D -ef -C -D -E -F -G --rooting", "argv":[[ "server", "-A", "-B", "-ef", "-C", "-ef", "-D", "-ef", "-C", "-D", "-E", "-F", "-G", "--rooting" ]] } ], []) # Option with mandatory argument AT_RUSH_TEST([ rush 2.0 rule match \$command ~ "^server" remopt r: root ], [cmdline,argv], [server -t -r ARG -A -rARG -B -C -aeFrARG -D --root=ARG -E --root ARG -F --ro=ARG -G --ro ARG -H --root], [0], [{ "cmdline":"server -t -A -B -C -aeF -D -E -F -G -H --root", "argv":[[ "server", "-t", "-A", "-B", "-C", "-aeF", "-D", "-E", "-F", "-G", "-H", "--root" ]] } ], []) # Option with optional argument AT_RUSH_TEST([ rush 2.0 rule match \$command ~ "^server" remopt r:: root ], [cmdline,argv], [server -t -rARG -A -r ARG -B -aeFrARG -D -beFr -E --root=ARG -F --roo=ARG -G --root ARG -H --root], [0], [{ "cmdline":"server -t -A ARG -B -aeF -D -beF -E -F -G ARG -H --root", "argv":[[ "server", "-t", "-A", "ARG", "-B", "-aeF", "-D", "-beF", "-E", "-F", "-G", "ARG", "-H", "--root" ]] } ], []) AT_CLEANUP ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/tests/fstest.at����������������������������������������������������������������������������0000644�0001750�0001750�00000012730�14643176122�015337� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of GNU Rush. # Copyright (C) 2021-2024 Sergey Poznyakoff # # GNU Rush is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Rush is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. m4_pushdef([AT_FS_SUCCESS], [AT_CHECK([$1]) AT_RUSH_TEST([ rush 2.0 rule match $2 set SUCCESS = true ], [vars], [cmd], [0], [{ "vars":{ "SUCCESS":"true" } } ], [])]) m4_pushdef([AT_FS_FAILURE], [AT_CHECK([$1]) AT_RUSH_TEST([ rush 2.0 rule match $2 set SUCCESS = true ], [vars], [cmd], [1], [], [rush: Error: no matching rule for "cmd", user $MY_USER ])]) AT_SETUP([basic filesystem tests]) AT_KEYWORDS([match fstest]) # ############################## # test -e # ############################## AT_FS_FAILURE([rm -f file],[-e file]) AT_FS_SUCCESS([touch file],[-e file]) # ############################## # test -f # ############################## AT_FS_FAILURE([rm -rf file],[-f file]) AT_FS_SUCCESS([touch file],[-f file]) AT_FS_FAILURE([rm -f file && mkdir file],[-f file]) # ############################## # test -d # ############################## AT_FS_FAILURE([rm -rf file],[-d file]) AT_FS_FAILURE([touch file],[-d file]) AT_FS_SUCCESS([rm -f file && mkdir file],[-d file]) # ############################## # test -s # ############################## AT_FS_FAILURE([rm -rf file],[-s file]) AT_FS_FAILURE([touch file],[-s file]) AT_FS_SUCCESS([echo "test" > file],[-s file]) # ############################## # test -r # ############################## AT_CHECK([rm -rf file && touch file]) AT_FS_SUCCESS([chmod u=r file],[-r file]) AT_FS_SUCCESS([chmod g=r file],[-r file]) AT_FS_SUCCESS([chmod o=r file],[-r file]) AT_FS_SUCCESS([chmod a=r file],[-r file]) AT_FS_FAILURE([chmod -r file],[-r file]) # ############################## # test -w # ############################## AT_FS_SUCCESS([chmod u=w file],[-w file]) AT_FS_SUCCESS([chmod g=w file],[-w file]) AT_FS_SUCCESS([chmod o=w file],[-w file]) AT_FS_SUCCESS([chmod a=w file],[-w file]) AT_FS_FAILURE([chmod 444 file],[-w file]) # ############################## # test -x # ############################## AT_FS_SUCCESS([chmod u=x file],[-x file]) AT_FS_SUCCESS([chmod g=x file],[-x file]) AT_FS_SUCCESS([chmod o=x file],[-x file]) AT_FS_SUCCESS([chmod a=x file],[-x file]) AT_FS_FAILURE([chmod 644 file],[-x file]) AT_CLEANUP AT_SETUP([match -h]) AT_KEYWORDS([match fstest fs_symlink]) # ############################## # test -h # ############################## AT_FS_FAILURE([rm -rf file symlink],[-h symlink]) AT_FS_FAILURE([touch file],[-h file]) AT_FS_SUCCESS([ln -sf file symlink || AT_SKIP_TEST],[-h symlink]) AT_FS_SUCCESS([true],[-L symlink]) AT_CLEANUP AT_SETUP([match -p]) AT_KEYWORDS([match fstest fs_pipe]) # ############################## # test -p # ############################## AT_FS_FAILURE([rm -rf file],[-p file]) AT_FS_SUCCESS([mkfifo file || AT_SKIP_TEST],[-p file]) AT_CLEANUP AT_SETUP([match -k]) AT_KEYWORDS([match fstest fs_sticky]) # ############################## # test -k # ############################## AT_FS_FAILURE([rm -rf file],[-k file]) AT_FS_SUCCESS([touch file && chmod +t file || AT_SKIP_TEST],[-k file]) AT_CLEANUP AT_SETUP([match -c]) AT_KEYWORDS([match fstest fs_char_special]) # ############################## # test -c # ############################## AT_FS_FAILURE([rm -rf file],[-c file]) AT_FS_FAILURE([touch file],[-c file]) AT_FS_SUCCESS([test -c /dev/tty || AT_SKIP_TEST],[-c /dev/tty]) AT_CLEANUP AT_SETUP([match -b]) AT_KEYWORDS([match fstest fs_block_special]) AT_FS_FAILURE([rm -rf file],[-b file]) AT_FS_FAILURE([touch file],[-b file]) AT_FS_SUCCESS([mknod file b 1 1 || AT_SKIP_TEST],[-b file]) AT_CLEANUP AT_SETUP([match -S]) AT_KEYWORDS([match fstest fs_socket]) # ############################## # test -c # ############################## AT_FS_FAILURE([rm -rf file],[-S file]) AT_FS_FAILURE([touch file],[-S file]) AT_FS_SUCCESS([mksock socket || AT_SKIP_TEST],[-S socket]) AT_CLEANUP AT_SETUP([match -O]) AT_KEYWORDS([match fstest fs_owner_euid]) # ############################## # test -O # ############################## AT_FS_FAILURE([rm -rf file],[-O file]) AT_FS_SUCCESS([touch file],[-O file]) AT_CLEANUP AT_SETUP([match -G]) AT_KEYWORDS([match fstest fs_owner_egid]) # ############################## # test -G # ############################## AT_FS_FAILURE([rm -rf file],[-G file]) AT_FS_SUCCESS([touch file],[-G file]) AT_CLEANUP AT_SETUP([match -u]) AT_KEYWORDS([match fstest fs_set_uid]) # ############################## # test -u # ############################## AT_FS_FAILURE([rm -rf file],[-u file]) AT_FS_FAILURE([touch file],[-u file]) AT_FS_SUCCESS([chmod u+s file || AT_SKIP_TEST],[-u file]) AT_CLEANUP AT_SETUP([match -g]) AT_KEYWORDS([match fstest fs_set_gid]) # ############################## # test -g # ############################## AT_FS_FAILURE([rm -rf file],[-g file]) AT_FS_FAILURE([touch file],[-g file]) AT_FS_SUCCESS([chmod g+s file || AT_SKIP_TEST],[-g file]) AT_CLEANUP # ############################## # Cleanup # ############################## m4_popdef([AT_FS_FAILURE]) m4_popdef([AT_FS_SUCCESS]) ����������������������������������������rush-2.4/tests/argc.at������������������������������������������������������������������������������0000644�0001750�0001750�00000002170�14643176121�014737� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of GNU Rush. # Copyright (C) 2019-2024 Sergey Poznyakoff # # GNU Rush is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Rush is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([argc]) AT_KEYWORDS([argc]) AT_RUSH_TEST([ rush 2.0 rule match \$# == 2 ], [cmdline,argv,prog,interactive,fork,acct], [/usr/bin/echo foo], [0], [{ "cmdline":"/usr/bin/echo foo", "argv":[[ "/usr/bin/echo", "foo" ]], "prog":null, "interactive":0, "fork":-1, "acct":-1 } ], [], [/usr/bin/echo foo bar], [1], [], [rush: Error: no matching rule for "/usr/bin/echo foo bar", user $MY_USER ]) AT_CLEANUP ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/tests/matchprog.at�������������������������������������������������������������������������0000644�0001750�0001750�00000002572�14643176123�016017� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of GNU Rush. # Copyright (C) 2019-2024 Sergey Poznyakoff # # GNU Rush is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Rush is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([match program name]) AT_KEYWORDS([matchprog]) AT_RUSH_TEST([ rush 2.0 rule match \$0 ~ "/usr/bin/.*" ], [cmdline,argv,prog], [/usr/bin/echo foo], [0], [{ "cmdline":"/usr/bin/echo foo", "argv":[[ "/usr/bin/echo", "foo" ]], "prog":null } ], [], [echo foo], [1], [], [rush: Error: no matching rule for "echo foo", user $MY_USER ]) AT_RUSH_TEST([ rush 2.0 rule match \$program ~ "/usr/bin/.*" ], [cmdline,argv,prog], [/usr/bin/echo foo], [0], [{ "cmdline":"/usr/bin/echo foo", "argv":[[ "/usr/bin/echo", "foo" ]], "prog":null } ], [], [echo foo], [1], [], [rush: Error: no matching rule for "echo foo", user $MY_USER ]) AT_CLEANUP ��������������������������������������������������������������������������������������������������������������������������������������rush-2.4/tests/inc01.at�����������������������������������������������������������������������������0000644�0001750�0001750�00000003000�14643176122�014727� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of GNU Rush. # Copyright (C) 2016-2024 Sergey Poznyakoff # # GNU Rush is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Rush is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([rule and global statements]) AT_KEYWORDS([inc01 inc include]) AT_CHECK([ AT_DATA([test.cf], [rush 2.0 rule match $0 == "ls" include "i1.cf" ]) AT_DATA([i1.cf], [setenv INC="i1" rule new set command = "dir" ]) rush -C none -D cmdline -t -c "ls" test.cf ], [1], [], [rush: Error: i1.cf:3.1-5: the rule statement is not allowed in included file rush: Error: i1.cf:3.1-5: skipping to the end of file rush: Error: errors in configuration file ]) AT_CHECK([ AT_DATA([test.cf], [rush 2.0 rule match $0 == "ls" include "i1.cf" ]) AT_DATA([i1.cf], [setenv INC="i1" global debug 2 ]) rush -C none -D cmdline -t -c "ls" test.cf ], [1], [], [rush: Error: i1.cf:3.1-7: the global statement is not allowed in included file rush: Error: i1.cf:3.1-7: skipping to the end of file rush: Error: errors in configuration file ]) AT_CLEANUP rush-2.4/tests/insert.at����������������������������������������������������������������������������0000644�0001750�0001750�00000002526�14643176122�015335� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of GNU Rush. # Copyright (C) 2016-2024 Sergey Poznyakoff # # GNU Rush is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Rush is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([insert]) AT_KEYWORDS([insert]) AT_RUSH_TEST([ rush 2.0 rule match \$command ~ "^svnserve -t" insert [1] = "-r" insert [2] = "/svnroot" ], [cmdline,argv], [svnserve -t -v], [0], [{ "cmdline":"svnserve -r /svnroot -t -v", "argv":[[ "svnserve", "-r", "/svnroot", "-t", "-v" ]] } ], []) AT_RUSH_TEST([ rush 2.0 rule match \$command ~ "^svnserve -t" insert [1] = "/svnroot" insert [1] = "-r" ], [cmdline,argv], [svnserve -t -v], [0], [{ "cmdline":"svnserve -r /svnroot -t -v", "argv":[[ "svnserve", "-r", "/svnroot", "-t", "-v" ]] } ], []) AT_CLEANUP ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/tests/chdir.at�����������������������������������������������������������������������������0000644�0001750�0001750�00000001526�14643176121�015120� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of GNU Rush. # Copyright (C) 2016-2024 Sergey Poznyakoff # # GNU Rush is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Rush is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([chdir]) AT_KEYWORDS([chdir]) AT_RUSH_TEST([ rush 2.0 rule chdir "$PWD" ], [home_dir], [command], [0], [{ "home_dir":"$TESTDIR" } ], []) AT_CLEANUP ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/tests/command.at���������������������������������������������������������������������������0000644�0001750�0001750�00000002774�14643176121�015453� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of GNU Rush. # Copyright (C) 2019-2024 Sergey Poznyakoff # # GNU Rush is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Rush is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([command]) AT_KEYWORDS([command]) AT_RUSH_TEST([ rush 2.0 rule match \$command ~ "echo[[:space:]]+foo$" ], [cmdline,argv,prog,interactive,fork,acct], [/usr/bin/echo foo], [0], [{ "cmdline":"/usr/bin/echo foo", "argv":[[ "/usr/bin/echo", "foo" ]], "prog":null, "interactive":0, "fork":-1, "acct":-1 } ], [], [/usr/bin/echo foo bar], [1], [], [rush: Error: no matching rule for "/usr/bin/echo foo bar", user $MY_USER ]) AT_RUSH_TEST([ rush 2.0 rule match \$command == "/bin/ls" ], [cmdline,argv,prog,interactive,fork,acct], [/bin/ls], [0], [{ "cmdline":"/bin/ls", "argv":[[ "/bin/ls" ]], "prog":null, "interactive":0, "fork":-1, "acct":-1 } ], [], [/bin/ls /], [1], [], [rush: Error: no matching rule for "/bin/ls /", user $MY_USER ]) AT_CLEANUP ����rush-2.4/tests/map.at�������������������������������������������������������������������������������0000644�0001750�0001750�00000003374�14643176123�014611� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of GNU Rush. # Copyright (C) 2016-2024 Sergey Poznyakoff # # GNU Rush is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Rush is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([map]) AT_KEYWORDS([map]) AT_CHECK([ myvars cat > passwd.rush <<EOT x$MY_USER:x:$(($MY_UID + 1)):$(($MY_GID + 1))::/root:/bin/bash $MY_USER:x:$MY_UID:$MY_GID:Me:/:/rush_special_shell EOT WD=`pwd` cat > test.conf <<EOT rush 2.0 rule map [[0]] "$WD/passwd.rush" ":" "\${user}" 1 7 "/nologin" EOT set -e echo Matching map rush -C none -Dcmdline,argv,prog -c 'command arg' test.conf echo No match, return default > passwd.rush rush -C none -Dcmdline,argv,prog -c 'command arg' test.conf echo No match, no default cat > test.conf <<EOT rush 2.0 rule map [[0]] "$WD/passwd.rush" ":" "\${user}" 1 7 EOT rush -C none -Dcmdline,argv,prog -c 'command arg' test.conf ], [0], [Matching map { "cmdline":"/rush_special_shell arg", "argv":[[ "/rush_special_shell", "arg" ]], "prog":null } No match, return default { "cmdline":"/nologin arg", "argv":[[ "/nologin", "arg" ]], "prog":null } No match, no default { "cmdline":"command arg", "argv":[[ "command", "arg" ]], "prog":null } ]) AT_CLEANUP ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/tests/mksock.c�����������������������������������������������������������������������������0000644�0001750�0001750�00000000771�14643176123�015137� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#include <stdlib.h> #include <stdio.h> #include <sys/socket.h> #include <sys/un.h> #include <string.h> #include <assert.h> int main(int argc, char **argv) { struct sockaddr_un s; int fd; assert(argc == 2); s.sun_family = AF_UNIX; assert(strlen(argv[1]) < sizeof(s.sun_path)); strcpy(s.sun_path, argv[1]); fd = socket(AF_UNIX, SOCK_STREAM, 0); if (fd == -1) { perror("socket"); return 1; } if (bind(fd, (struct sockaddr*)&s, sizeof(s))) { perror("bind"); return 1; } return 0; } �������rush-2.4/COPYING������������������������������������������������������������������������������������0000644�0001750�0001750�00000104513�14643176116�013376� 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>. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/configure.ac�������������������������������������������������������������������������������0000644�0001750�0001750�00000005455�14655401040�014624� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of GNU Rush. -*- Autoconf -*- # Copyright (C) 2008-2024 Sergey Poznyakoff # # GNU Rush is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Rush is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. AC_PREREQ([2.71]) AC_INIT([GNU rush],[2.4],[bug-rush@gnu.org], [rush], [https://www.gnu.org.ua/software/rush/]) AC_CONFIG_SRCDIR([src/rush.c]) AC_CONFIG_HEADERS([config.h]) AC_CONFIG_AUX_DIR([build-aux]) AM_INIT_AUTOMAKE([1.16.5 gnits tar-ustar dist-bzip2 dist-xz std-options]) # Enable silent rules by default: AM_SILENT_RULES([yes]) # Checks for programs. AC_PROG_CC gl_EARLY AC_PROG_INSTALL AC_PROG_RANLIB AC_PROG_YACC AC_PROG_LEX([noyywrap]) # Checks for header files. AC_CHECK_HEADERS([stdlib.h string.h socket.h sys/socket.h syslog.h unistd.h]) # Checks for typedefs, structures, and compiler characteristics. AC_C_CONST AC_TYPE_UID_T AC_TYPE_MODE_T AC_TYPE_SIZE_T AC_CHECK_TYPE(socklen_t, , AC_DEFINE(socklen_t, int, [Define to int if <sys/types.h> does not]), [ #if HAVE_SYS_TYPES_H # include <sys/types.h> #endif #ifdef HAVE_SYS_SOCKET_H # include <sys/socket.h> #endif #ifdef HAVE_SOCKET_H # include <socket.h> #endif ]) # Checks for library functions. AC_FUNC_GETGROUPS AC_FUNC_MALLOC AC_FUNC_MEMCMP AC_FUNC_REALLOC AC_FUNC_STAT AC_FUNC_ALLOCA AC_CHECK_FUNCS([strdup strerror strrchr strtoul sysconf getdtablesize \ flock ftruncate getgrouplist]) gl_INIT # Gettext. AM_ICONV AM_GNU_GETTEXT([external], [need-formatstring-macros]) AM_GNU_GETTEXT_VERSION([0.19]) IMPRIMATUR_INIT(doc/imprimatur) AC_ARG_WITH([default-config], AS_HELP_STRING([--with-default-config=FILE], [read the default configuration from FILE]), [dir=`AS_DIRNAME(["$withval"])` if test -d $dir; then dir=`cd $dir; pwd` else AC_MSG_ERROR([No such directory: $dir]) fi name=`expr x"$withval" : '.*/\(.*\)'` AC_SUBST(RUSH_DEFAULT_CONFIG, $dir/$name)]) AC_DEFINE([GNULIB_XALLOC_DIE], [1], [Provide prototype of xalloc_die in gnulib]) # Initialize the test suite. AC_CONFIG_TESTDIR(tests) AC_CONFIG_FILES([tests/Makefile tests/atlocal]) AM_MISSING_PROG([AUTOM4TE], [autom4te]) AC_CONFIG_FILES([Makefile gnu/Makefile lib/Makefile src/Makefile etc/Makefile doc/Makefile po/Makefile.in]) AC_OUTPUT �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/aclocal.m4���������������������������������������������������������������������������������0000644�0001750�0001750�00000133027�14655401213�014175� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# generated automatically by aclocal 1.16.5 -*- Autoconf -*- # Copyright (C) 1996-2021 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.71],, [m4_warning([this file was generated for autoconf 2.71. 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-2021 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.16' 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.16.5], [], [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.16.5])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-2021 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_COND_IF -*- Autoconf -*- # Copyright (C) 2008-2021 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_COND_IF # _AM_COND_ELSE # _AM_COND_ENDIF # -------------- # These macros are only used for tracing. m4_define([_AM_COND_IF]) m4_define([_AM_COND_ELSE]) m4_define([_AM_COND_ENDIF]) # AM_COND_IF(COND, [IF-TRUE], [IF-FALSE]) # --------------------------------------- # If the shell condition COND is true, execute IF-TRUE, otherwise execute # IF-FALSE. Allow automake to learn about conditional instantiating macros # (the AC_CONFIG_FOOS). AC_DEFUN([AM_COND_IF], [m4_ifndef([_AM_COND_VALUE_$1], [m4_fatal([$0: no such condition "$1"])])dnl _AM_COND_IF([$1])dnl if test -z "$$1_TRUE"; then : m4_n([$2])[]dnl m4_ifval([$3], [_AM_COND_ELSE([$1])dnl else $3 ])dnl _AM_COND_ENDIF([$1])dnl fi[]dnl ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997-2021 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-2021 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-2021 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. # TODO: see whether this extra hack can be removed once we start # requiring Autoconf 2.70 or later. AS_CASE([$CONFIG_FILES], [*\'*], [eval set x "$CONFIG_FILES"], [*], [set x $CONFIG_FILES]) shift # Used to flag and report bootstrapping failures. am_rc=0 for am_mf do # Strip MF so we end up with the name of the file. am_mf=`AS_ECHO(["$am_mf"]) | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile which includes # dependency-tracking related rules and includes. # Grep'ing the whole file directly is not great: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ || continue am_dirpart=`AS_DIRNAME(["$am_mf"])` am_filepart=`AS_BASENAME(["$am_mf"])` AM_RUN_LOG([cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles]) || am_rc=$? done if test $am_rc -ne 0; then AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments for automatic dependency tracking. If GNU make was not used, consider re-running the configure script with MAKE="gmake" (or whatever is necessary). You can also try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking).]) fi AS_UNSET([am_dirpart]) AS_UNSET([am_filepart]) AS_UNSET([am_mf]) AS_UNSET([am_rc]) rm -f conftest-deps.mk } ])# _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. # This creates each '.Po' and '.Plo' makefile fragment that we'll 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" MAKE="${MAKE-make}"])]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996-2021 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 m4_ifdef([_$0_ALREADY_INIT], [m4_fatal([$0 expanded multiple times ]m4_defn([_$0_ALREADY_INIT]))], [m4_define([_$0_ALREADY_INIT], m4_expansion_stack)])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_ifset([AC_PACKAGE_NAME], [ok]):m4_ifset([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: # <https://lists.gnu.org/archive/html/automake/2012-07/msg00001.html> # <https://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 ]) # Variables for tags utilities; see am/tags.am if test -z "$CTAGS"; then CTAGS=ctags fi AC_SUBST([CTAGS]) if test -z "$ETAGS"; then ETAGS=etags fi AC_SUBST([ETAGS]) if test -z "$CSCOPE"; then CSCOPE=cscope fi AC_SUBST([CSCOPE]) 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: <https://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-2021 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-2021 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])]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001-2021 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 whether make has an 'include' directive that can support all # the idioms we need for our automatic dependency tracking code. AC_DEFUN([AM_MAKE_INCLUDE], [AC_MSG_CHECKING([whether ${MAKE-make} supports the include directive]) cat > confinc.mk << 'END' am__doit: @echo this is the am__doit target >confinc.out .PHONY: am__doit END am__include="#" am__quote= # BSD make does it like this. echo '.include "confinc.mk" # ignored' > confmf.BSD # Other make implementations (GNU, Solaris 10, AIX) do it like this. echo 'include confinc.mk # ignored' > confmf.GNU _am_result=no for s in GNU BSD; do AM_RUN_LOG([${MAKE-make} -f confmf.$s && cat confinc.out]) AS_CASE([$?:`cat confinc.out 2>/dev/null`], ['0:this is the am__doit target'], [AS_CASE([$s], [BSD], [am__include='.include' am__quote='"'], [am__include='include' am__quote=''])]) if test "$am__include" != "#"; then _am_result="yes ($s style)" break fi done rm -f confinc.* confmf.* AC_MSG_RESULT([${_am_result}]) AC_SUBST([am__include])]) AC_SUBST([am__quote])]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997-2021 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 MISSING="\${SHELL} '$am_aux_dir/missing'" 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 ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001-2021 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-2021 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-2021 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-2021 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-2021 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-2021 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-2021 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-2021 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([doc/imprimatur/imprimatur.m4]) m4_include([m4/00gnulib.m4]) m4_include([m4/__inline.m4]) m4_include([m4/absolute-header.m4]) m4_include([m4/alloca.m4]) m4_include([m4/assert_h.m4]) m4_include([m4/btowc.m4]) m4_include([m4/builtin-expect.m4]) m4_include([m4/c-bool.m4]) m4_include([m4/calloc.m4]) m4_include([m4/close.m4]) m4_include([m4/codeset.m4]) m4_include([m4/double-slash-root.m4]) m4_include([m4/dup2.m4]) m4_include([m4/eealloc.m4]) m4_include([m4/environ.m4]) m4_include([m4/errno_h.m4]) m4_include([m4/error.m4]) m4_include([m4/error_h.m4]) m4_include([m4/extensions.m4]) m4_include([m4/extern-inline.m4]) m4_include([m4/fcntl-o.m4]) m4_include([m4/fcntl.m4]) m4_include([m4/fcntl_h.m4]) m4_include([m4/flexmember.m4]) m4_include([m4/free.m4]) m4_include([m4/fstat.m4]) m4_include([m4/getdelim.m4]) m4_include([m4/getdtablesize.m4]) m4_include([m4/getline.m4]) m4_include([m4/getopt.m4]) m4_include([m4/getprogname.m4]) m4_include([m4/gettext.m4]) m4_include([m4/gnulib-common.m4]) m4_include([m4/gnulib-comp.m4]) m4_include([m4/iconv.m4]) m4_include([m4/include_next.m4]) m4_include([m4/intlmacosx.m4]) m4_include([m4/inttostr.m4]) m4_include([m4/inttypes.m4]) m4_include([m4/langinfo_h.m4]) m4_include([m4/largefile.m4]) m4_include([m4/lib-ld.m4]) m4_include([m4/lib-link.m4]) m4_include([m4/lib-prefix.m4]) m4_include([m4/limits-h.m4]) m4_include([m4/localcharset.m4]) m4_include([m4/locale-fr.m4]) m4_include([m4/locale-ja.m4]) m4_include([m4/locale-zh.m4]) m4_include([m4/locale_h.m4]) m4_include([m4/localeconv.m4]) m4_include([m4/lock.m4]) m4_include([m4/malloc.m4]) m4_include([m4/malloca.m4]) m4_include([m4/mbrtowc.m4]) m4_include([m4/mbsinit.m4]) m4_include([m4/mbstate_t.m4]) m4_include([m4/mbtowc.m4]) m4_include([m4/minmax.m4]) m4_include([m4/mktime.m4]) m4_include([m4/mode_t.m4]) m4_include([m4/msvc-inval.m4]) m4_include([m4/msvc-nothrow.m4]) m4_include([m4/multiarch.m4]) m4_include([m4/musl.m4]) m4_include([m4/nl_langinfo.m4]) m4_include([m4/nls.m4]) m4_include([m4/nocrash.m4]) m4_include([m4/nstrftime.m4]) m4_include([m4/off_t.m4]) m4_include([m4/open-cloexec.m4]) m4_include([m4/open-slash.m4]) m4_include([m4/open.m4]) m4_include([m4/pathmax.m4]) m4_include([m4/po.m4]) m4_include([m4/progtest.m4]) m4_include([m4/pthread_rwlock_rdlock.m4]) m4_include([m4/realloc.m4]) m4_include([m4/reallocarray.m4]) m4_include([m4/regex.m4]) m4_include([m4/setenv.m4]) m4_include([m4/setlocale_null.m4]) m4_include([m4/ssize_t.m4]) m4_include([m4/stat-time.m4]) m4_include([m4/stat.m4]) m4_include([m4/stddef_h.m4]) m4_include([m4/stdint.m4]) m4_include([m4/stdio_h.m4]) m4_include([m4/stdlib_h.m4]) m4_include([m4/strerror.m4]) m4_include([m4/string_h.m4]) m4_include([m4/sys_socket_h.m4]) m4_include([m4/sys_stat_h.m4]) m4_include([m4/sys_types_h.m4]) m4_include([m4/threadlib.m4]) m4_include([m4/time_h.m4]) m4_include([m4/time_r.m4]) m4_include([m4/time_rz.m4]) m4_include([m4/timegm.m4]) m4_include([m4/tm_gmtoff.m4]) m4_include([m4/tzset.m4]) m4_include([m4/unistd_h.m4]) m4_include([m4/visibility.m4]) m4_include([m4/warn-on-use.m4]) m4_include([m4/wchar_h.m4]) m4_include([m4/wchar_t.m4]) m4_include([m4/wcrtomb.m4]) m4_include([m4/wctype_h.m4]) m4_include([m4/wint_t.m4]) m4_include([m4/xalloc.m4]) m4_include([m4/zzgnulib.m4]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/INSTALL������������������������������������������������������������������������������������0000644�0001750�0001750�00000040123�14436424417�013370� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Installation Instructions ************************* Copyright © 1994–1996, 1999–2002, 2004–2017, 2020–2023 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 timestamps 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. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/NEWS���������������������������������������������������������������������������������������0000644�0001750�0001750�00000026415�14655401024�013036� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������GNU Rush NEWS -- history of user-visible changes. 2024-08-09 See the end of file for copying conditions. Please send bug reports to <bug-rush@gnu.org.ua> Version 2.4, 2024-08-09 * Use getgrouplist call, if available * Fix in rush-po script * Bugfixes Version 2.3, 2022-07-16 * Fix invalid memory addressing in remopt command * Fix building with flex >= 2.6.1 (EOF check) Version 2.2, 2022-01-02 * File system tests New predicates, designed after options to the "test" system command, check for file types. modes and ownership. For example rule match -d /var/lock/sd will match if /var/lock/sd exists on diks and is a directory * transform: fix replacement of numbered pattern instance This fixes handling of transform expressions like "s/X/@/2". Version 2.1, 2019-07-12 * Include updated wordsplit version (v1.0-7-g6ccb9ad) * Allow for multiple EOLs and comments after the preface statement. * Bugfix in the testcase 20. Version 2.0, 2019-07-01 Configuration file support completely rewritten. New configuration file syntax is introduced that offers a large set of control structures and transformation instructions for handling arbitrary requests. Please see the documentation for details. Backward compatibility with prior releases is retained and old configuration syntax is still supported. This ensures that existing installations will remain operational without any changes. Nevertheless, system administrators are encouraged to switch to the new syntax as soon as possible. Version 1.9, 2019-04-24 * Backreference expansion Arguments to tranformations, chroot and chdir statements can contain references to parenthesized groups in the recent regular expression match. Such references are replaced with the strings that matched the corresponding groups. Syntactically, a backreference expansion is a percent sign followed by one-digit number of the subexpression (1-based, %0 refers to entire matched line). For example rule X command ^cd (.+) && (.+) chdir %1 set %2 * User-defined variables The configuration file can define new variables or redefine the built-in ones using the "setvar" statement: setvar[VAR] PATTERN Here, VAR is the variable name, and PATTERN is its new value. The PATTERN is subject to variable and backreference expansion. User-defined variables can be unset using the "unsetvar" statement: unsetvar[VAR] Unsetting a built-in variable, previously redefined using the "setvar" statement causes the user-supplied definition to be forgotten and the built-in one restored. * Shell-like variable expansion The following shell-like notations are supported: ${VAR:-WORD} Use Default Values ${VAR:=WORD} Assign Default Values ${VAR:?WORD} Display Error if Null or Unset ${VAR:+WORD} Use Alternate Value * New script rush-po for extracting translatable strings from the configuration The script rush-po.awk that was used in prior versions has been withdrawn. Version 1.8, 2016-10-01 * rushlast and rushwho Select the most suitable time representation for the duration field, depending on the requested width. * chroot handling If chroot is requested, re-read the password database after chrooting. * Supplementary user groups Set supplementary groups when switching to user privileges. * Change provisions for interactive shell usage Interactive rules are marked with the keyword "interactive". Only such rules are considered when rush is invoked without the -c option. The support of the old (global) "interactive" keyword is discontinued. * The env statement The env statement can contain references to the unmodified environment variables. E.g. this is now valid: env PATH=/sbin:$PATH * Testsuite is provided * Minor fix in TXPMUX code. * Fix CVE-2013-6889 * Manpages are provided Version 1.7, 2010-07-07 * New configuration statements `acct-umask', `acct-dir-mode', `acct-file-mode' These statements set the value of umask used when accessing accounting database files, and permissions for the accounting directory and database files, correspondingly. * Conditions `uid' and `gid' accept symbolic user/group names as argument. Both conditions now accept symbolic as well as numeric arguments, e.g.: uid 1300 uid smith uid < smith gid != 500 * The `newgrp' command The `newgrp' command changes the current group ID to the one given as its argument, which must be either a numeric GID or a name of an existing group. * Default regex flags affect the `transfer' statement. * New translations Dutch, by Koen Torfs. Vietnamese, by Clytie Siddall. * Bugfixes ** Fix memory allocation in make_file_name (puszcza#127). ** Fix handling of numeric options in `rushlast'. ** A single fall-through rule caused infinite loop (puszcza#127#comment7). ** Accounting mode is off by default, as described in the documentation. Version 1.6, 2009-02-10 * Patterns in `transform' statement The syntax of the `transform' statement has been extended to allow for specifying transformation argument string: transform STRING REGEX or transform[N] STRING REGEX STRING may contain meta-variables, which are expanded before performing the transformation. The following meta-variables are defined: ${user} User name ${group} Name of the user's principal group ${uid} UID ${gid} GID ${home} User's home directory ${gecos} User's GECOS field ${program} Program name ${command} Full command line $0 to $9 The value of the Nth command line argument ${N} Same as above, useful if N > 9 or N < 0 (see "Negative argument indexes", below). Thus, for example: transform[0] s,.*/,/bin/, is equivalent to: transform[0] $0 s,.*/,/bin/, * The `map' statement. This statement sets a command line argument using a map file. map[N] FILE DELIM KEY K V [DEFAULT] Each line in a map file FILE contains fields, separated by delimiter DELIM. The `map' statement looks for the record whose Kth field has the value of KEY. If such a record is found, its Vth field becomes a new value of the Nth command line argument. Othervise, if DEFAULT is given, it is used as a new value. Otherwise, the argument retains its old value. KEY may contain meta-variables described above (see "Patterns in `transform' statement"). * The `set' statement. The `set' statement replaces entire command line with the new value: rule foo set /bin/scp -t /upload In indexed form, it replaces the given argument: set[0] /bin/scp The argument to `set' may contain meta-variables (see "Patterns in `transform' statement"). * The `delete' statement. This statement deletes the given argument, or range of arguments, from the command line. It has two forms: 1. Delete the Nth argument: delete[N] 2. Delete all arguments between indexes N and M, inclusive: delete N M * Modifying program name To modify the program name (as opposed to argv[0]), use ^ pseudo-index, e.g.: set[^] /bin/scp By default (unless [^] form is used) argv[0] is used as the program name. * Negative argument indexes Negative argument indexes refer to arguments numbered from the end of the command line. E.g.: transform[-1] is the same as transform[$] transform[-2] will transform the last but one argument * New statement `interactive' This statement provides a replacement command line for interactive use of rush. By default, such use is prohibited. However, using `interactive' statement you can allow some users a limited interactive access. For example: interactive *shell* rule login command \*shell\* group rshell map[^] /usr/local/etc/rush.shell : ${user} 1 2 none transform[0] ${program} s,^.*/,-r, * Use of predefined error messages in `exit' statement. Predefined error messages can be used in `exit' statements. E.g., the statement: exit @nologin-message will retrieve the text of the `nologin-message' and send it to the remote party before exiting. If the message text must begin with a `@' sign, duplicate it: exit @@special error message Version 1.5, 2009-01-14 * Post-process notification After completing a rule, Rush can send a notification over a TCP/IP or UNIX socket. * Include statement The include statement allows to inlcude contents of a file into the main rush configuration file. * Safety checks. Before parsing, rush checks permissions and ownership of its configuration file. The file is rejected if: - It is not owned by root. - It is group or world writable - It resides in a group or world writable directory - It is a symbolic link to a file residing in a group or world writable directory The same checks are performed for any included file. The safety checks for included files can be changed using the global statement `include-security'. * Default configuration Default configuration file can be built into the rush binary. See `Default Configuration' in README file. * Internationalization Version 1.4, 2008-10-20 * RUSHWHO_FORMAT and RUSHLAST_FORMAT environment variables. These variables can be used to supply customized formats to rushwho and rushlast utilities. * Bugfixes in format parsing code. Version 1.3, 2008-10-14 * Implement accounting mode. * New programs: rushwho and rushlast These utilities display information from the Rush accounting database. Version 1.2, 2008-09-06 * Test mode Rush can be run from the command line to test its configuration file. Examples: 1. Test default configuration file: rush --test 2. Test configuration file `sample.rc': rush --test sample.rc 3. Test the configuration file and emulate execution of the command `cvs server'. Set debugging level 2: rush --test --debug=2 -c "cvs server" Version 1.1, 2008-08-30 * A condition can be negated. Placing ! between the keyword and conditional expression indicates its negation, e.g.: command ! ^cvs matches any command line that does not begin with `cvs' * New action `exit' The `exit' statement instructs rush to write a supplied error message to specified file descriptor and exit immediately. If file descriptor is not given, 2 (standard error) is used. Exit actions are useful for writing ``trap rules'', i.e. rules that are intended to trap incorrect or prohibited command lines and to return customized reply messages in such cases. * New statement `regexp' Configures the style of regular expressions used in subsequent `cmdline' and `match' clauses. For example: regex +icase +extended sets case-insensitive extended regular expressions. Version 1.0, 2008-08-26 Initial version. ========================================================================= Copyright information: Copyright (C) 2008-2024 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: ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/etc/���������������������������������������������������������������������������������������0000755�0001750�0001750�00000000000�14655401530�013104� 5����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/etc/Makefile.am����������������������������������������������������������������������������0000644�0001750�0001750�00000002262�14643176117�015151� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of GNU Rush. # Copyright (C) 2008-2024 Sergey Poznyakoff # # GNU Rush is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Rush is distributed in the hope that 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/>. EXTRA_DIST=rush.rc install-data-local: @test -d $(DESTDIR)$(sysconfdir) || \ ${INSTALL} -d $(DESTDIR)$(sysconfdir); \ conf=$(DESTDIR)$(sysconfdir)/rush.rc; \ if [ -r $$conf ]; then \ echo $$conf | sed 's,.,=,g'; \ echo "The configuration file $$conf already exists"; \ echo "Make sure it is up to date!"; \ echo $$conf | sed 's,.,=,g'; \ else \ for file in $(EXTRA_DIST); do \ ${INSTALL} -m 640 $(top_srcdir)/etc/$$file \ $(DESTDIR)$(sysconfdir)/$$file; \ done; \ fi ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/etc/rush.rc��������������������������������������������������������������������������������0000644�0001750�0001750�00000002744�14643176117�014431� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Sample configuration file for rush. # Lines beginning with # and empty lines are ignored. # See `info rush' for a detailed description. rush 2.0 global # Set verbosity level. debug 1 rule default limits t10r20 umask 002 clrenv keepenv USER LOGNAME HOME PATH setenv PATH="$PATH:/usr/local/bin" fall-through rule cvs match $command ~ "^cvs server" set [0] = "/usr/bin/cvs" # Secure cp requests rule scp-to match $command ~ "^scp (-v )?-t /incoming/(alpha|ftp)" set [0] = "/bin/scp" chroot "/var/spool/sftp-upload" chdir "/incoming" # A trap rule for outbound scp requests rule scp-from match $command ~ "^scp (-v )?-f" exit "Error: Secure copy from this server is not allowed" # Svn server: force full binary path and root directory. rule svn match $command ~ "^svnserve -t" set program = "/usr/bin/svnserve" remopt r: insert [1] = "-r" insert [2] = "/svnroot" # For git requests, allow access to repositories located under # /vcs-roots/git rule git match $command ~ "^git-(receive|upload)-pack" match $1 ~ "^/vcs-roots/git/[^ ]+\\.git$" set command =~ "s|^|/usr/bin/|" # Trap the rest of Git requests: rule git-trap match $command ~ "^git-(receive|upload)-pack" exit "fatal: access to this repository is denied." # Sftp-server requests: chroot into the user's home directory, set umask # 002 and execute bin/sftp-server. rule sftp match $program ~ "^.*/sftp-server" set [0] = "bin/sftp-server" umask 002 chroot "~" chdir "/" ����������������������������rush-2.4/etc/Makefile.in����������������������������������������������������������������������������0000644�0001750�0001750�00000147676�14655401220�015172� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # This file is part of GNU Rush. # Copyright (C) 2008-2024 Sergey Poznyakoff # # GNU Rush is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Rush is distributed in the hope that 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/>. 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 = etc ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/doc/imprimatur/imprimatur.m4 \ $(top_srcdir)/m4/00gnulib.m4 $(top_srcdir)/m4/__inline.m4 \ $(top_srcdir)/m4/absolute-header.m4 $(top_srcdir)/m4/alloca.m4 \ $(top_srcdir)/m4/assert_h.m4 $(top_srcdir)/m4/btowc.m4 \ $(top_srcdir)/m4/builtin-expect.m4 $(top_srcdir)/m4/c-bool.m4 \ $(top_srcdir)/m4/calloc.m4 $(top_srcdir)/m4/close.m4 \ $(top_srcdir)/m4/codeset.m4 \ $(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup2.m4 \ $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \ $(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \ $(top_srcdir)/m4/error_h.m4 $(top_srcdir)/m4/extensions.m4 \ $(top_srcdir)/m4/extern-inline.m4 $(top_srcdir)/m4/fcntl-o.m4 \ $(top_srcdir)/m4/fcntl.m4 $(top_srcdir)/m4/fcntl_h.m4 \ $(top_srcdir)/m4/flexmember.m4 $(top_srcdir)/m4/free.m4 \ $(top_srcdir)/m4/fstat.m4 $(top_srcdir)/m4/getdelim.m4 \ $(top_srcdir)/m4/getdtablesize.m4 $(top_srcdir)/m4/getline.m4 \ $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/getprogname.m4 \ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gnulib-common.m4 \ $(top_srcdir)/m4/gnulib-comp.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/include_next.m4 \ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/inttostr.m4 \ $(top_srcdir)/m4/inttypes.m4 $(top_srcdir)/m4/langinfo_h.m4 \ $(top_srcdir)/m4/largefile.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/limits-h.m4 $(top_srcdir)/m4/localcharset.m4 \ $(top_srcdir)/m4/locale-fr.m4 $(top_srcdir)/m4/locale-ja.m4 \ $(top_srcdir)/m4/locale-zh.m4 $(top_srcdir)/m4/locale_h.m4 \ $(top_srcdir)/m4/localeconv.m4 $(top_srcdir)/m4/lock.m4 \ $(top_srcdir)/m4/malloc.m4 $(top_srcdir)/m4/malloca.m4 \ $(top_srcdir)/m4/mbrtowc.m4 $(top_srcdir)/m4/mbsinit.m4 \ $(top_srcdir)/m4/mbstate_t.m4 $(top_srcdir)/m4/mbtowc.m4 \ $(top_srcdir)/m4/minmax.m4 $(top_srcdir)/m4/mktime.m4 \ $(top_srcdir)/m4/mode_t.m4 $(top_srcdir)/m4/msvc-inval.m4 \ $(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \ $(top_srcdir)/m4/musl.m4 $(top_srcdir)/m4/nl_langinfo.m4 \ $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/nocrash.m4 \ $(top_srcdir)/m4/nstrftime.m4 $(top_srcdir)/m4/off_t.m4 \ $(top_srcdir)/m4/open-cloexec.m4 \ $(top_srcdir)/m4/open-slash.m4 $(top_srcdir)/m4/open.m4 \ $(top_srcdir)/m4/pathmax.m4 $(top_srcdir)/m4/po.m4 \ $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/m4/pthread_rwlock_rdlock.m4 \ $(top_srcdir)/m4/realloc.m4 $(top_srcdir)/m4/reallocarray.m4 \ $(top_srcdir)/m4/regex.m4 $(top_srcdir)/m4/setenv.m4 \ $(top_srcdir)/m4/setlocale_null.m4 $(top_srcdir)/m4/ssize_t.m4 \ $(top_srcdir)/m4/stat-time.m4 $(top_srcdir)/m4/stat.m4 \ $(top_srcdir)/m4/stddef_h.m4 $(top_srcdir)/m4/stdint.m4 \ $(top_srcdir)/m4/stdio_h.m4 $(top_srcdir)/m4/stdlib_h.m4 \ $(top_srcdir)/m4/strerror.m4 $(top_srcdir)/m4/string_h.m4 \ $(top_srcdir)/m4/sys_socket_h.m4 \ $(top_srcdir)/m4/sys_stat_h.m4 $(top_srcdir)/m4/sys_types_h.m4 \ $(top_srcdir)/m4/threadlib.m4 $(top_srcdir)/m4/time_h.m4 \ $(top_srcdir)/m4/time_r.m4 $(top_srcdir)/m4/time_rz.m4 \ $(top_srcdir)/m4/timegm.m4 $(top_srcdir)/m4/tm_gmtoff.m4 \ $(top_srcdir)/m4/tzset.m4 $(top_srcdir)/m4/unistd_h.m4 \ $(top_srcdir)/m4/visibility.m4 $(top_srcdir)/m4/warn-on-use.m4 \ $(top_srcdir)/m4/wchar_h.m4 $(top_srcdir)/m4/wchar_t.m4 \ $(top_srcdir)/m4/wcrtomb.m4 $(top_srcdir)/m4/wctype_h.m4 \ $(top_srcdir)/m4/wint_t.m4 $(top_srcdir)/m4/xalloc.m4 \ $(top_srcdir)/m4/zzgnulib.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 = 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__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALLOCA_H = @ALLOCA_H@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ ASSERT_H = @ASSERT_H@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOM4TE = @AUTOM4TE@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ GETOPT_H = @GETOPT_H@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GL_CFLAG_ALLOW_WARNINGS = @GL_CFLAG_ALLOW_WARNINGS@ GL_CFLAG_GNULIB_WARNINGS = @GL_CFLAG_GNULIB_WARNINGS@ GL_GNULIB_ACCESS = @GL_GNULIB_ACCESS@ GL_GNULIB_ALIGNED_ALLOC = @GL_GNULIB_ALIGNED_ALLOC@ GL_GNULIB_ATOLL = @GL_GNULIB_ATOLL@ GL_GNULIB_BTOWC = @GL_GNULIB_BTOWC@ GL_GNULIB_CALLOC_GNU = @GL_GNULIB_CALLOC_GNU@ GL_GNULIB_CALLOC_POSIX = @GL_GNULIB_CALLOC_POSIX@ GL_GNULIB_CANONICALIZE_FILE_NAME = @GL_GNULIB_CANONICALIZE_FILE_NAME@ GL_GNULIB_CHDIR = @GL_GNULIB_CHDIR@ GL_GNULIB_CHMOD = @GL_GNULIB_CHMOD@ GL_GNULIB_CHOWN = @GL_GNULIB_CHOWN@ GL_GNULIB_CLOSE = @GL_GNULIB_CLOSE@ GL_GNULIB_COPY_FILE_RANGE = @GL_GNULIB_COPY_FILE_RANGE@ GL_GNULIB_CREAT = @GL_GNULIB_CREAT@ GL_GNULIB_CTIME = @GL_GNULIB_CTIME@ GL_GNULIB_DPRINTF = @GL_GNULIB_DPRINTF@ GL_GNULIB_DUP = @GL_GNULIB_DUP@ GL_GNULIB_DUP2 = @GL_GNULIB_DUP2@ GL_GNULIB_DUP3 = @GL_GNULIB_DUP3@ GL_GNULIB_DUPLOCALE = @GL_GNULIB_DUPLOCALE@ GL_GNULIB_ENVIRON = @GL_GNULIB_ENVIRON@ GL_GNULIB_EUIDACCESS = @GL_GNULIB_EUIDACCESS@ GL_GNULIB_EXECL = @GL_GNULIB_EXECL@ GL_GNULIB_EXECLE = @GL_GNULIB_EXECLE@ GL_GNULIB_EXECLP = @GL_GNULIB_EXECLP@ GL_GNULIB_EXECV = @GL_GNULIB_EXECV@ GL_GNULIB_EXECVE = @GL_GNULIB_EXECVE@ GL_GNULIB_EXECVP = @GL_GNULIB_EXECVP@ GL_GNULIB_EXECVPE = @GL_GNULIB_EXECVPE@ GL_GNULIB_EXPLICIT_BZERO = @GL_GNULIB_EXPLICIT_BZERO@ GL_GNULIB_FACCESSAT = @GL_GNULIB_FACCESSAT@ GL_GNULIB_FCHDIR = @GL_GNULIB_FCHDIR@ GL_GNULIB_FCHMODAT = @GL_GNULIB_FCHMODAT@ GL_GNULIB_FCHOWNAT = @GL_GNULIB_FCHOWNAT@ GL_GNULIB_FCLOSE = @GL_GNULIB_FCLOSE@ GL_GNULIB_FCNTL = @GL_GNULIB_FCNTL@ GL_GNULIB_FDATASYNC = @GL_GNULIB_FDATASYNC@ GL_GNULIB_FDOPEN = @GL_GNULIB_FDOPEN@ GL_GNULIB_FFLUSH = @GL_GNULIB_FFLUSH@ GL_GNULIB_FFSL = @GL_GNULIB_FFSL@ GL_GNULIB_FFSLL = @GL_GNULIB_FFSLL@ GL_GNULIB_FGETC = @GL_GNULIB_FGETC@ GL_GNULIB_FGETS = @GL_GNULIB_FGETS@ GL_GNULIB_FOPEN = @GL_GNULIB_FOPEN@ GL_GNULIB_FOPEN_GNU = @GL_GNULIB_FOPEN_GNU@ GL_GNULIB_FPRINTF = @GL_GNULIB_FPRINTF@ GL_GNULIB_FPRINTF_POSIX = @GL_GNULIB_FPRINTF_POSIX@ GL_GNULIB_FPURGE = @GL_GNULIB_FPURGE@ GL_GNULIB_FPUTC = @GL_GNULIB_FPUTC@ GL_GNULIB_FPUTS = @GL_GNULIB_FPUTS@ GL_GNULIB_FREAD = @GL_GNULIB_FREAD@ GL_GNULIB_FREE_POSIX = @GL_GNULIB_FREE_POSIX@ GL_GNULIB_FREOPEN = @GL_GNULIB_FREOPEN@ GL_GNULIB_FSCANF = @GL_GNULIB_FSCANF@ GL_GNULIB_FSEEK = @GL_GNULIB_FSEEK@ GL_GNULIB_FSEEKO = @GL_GNULIB_FSEEKO@ GL_GNULIB_FSTAT = @GL_GNULIB_FSTAT@ GL_GNULIB_FSTATAT = @GL_GNULIB_FSTATAT@ GL_GNULIB_FSYNC = @GL_GNULIB_FSYNC@ GL_GNULIB_FTELL = @GL_GNULIB_FTELL@ GL_GNULIB_FTELLO = @GL_GNULIB_FTELLO@ GL_GNULIB_FTRUNCATE = @GL_GNULIB_FTRUNCATE@ GL_GNULIB_FUTIMENS = @GL_GNULIB_FUTIMENS@ GL_GNULIB_FWRITE = @GL_GNULIB_FWRITE@ GL_GNULIB_GETC = @GL_GNULIB_GETC@ GL_GNULIB_GETCHAR = @GL_GNULIB_GETCHAR@ GL_GNULIB_GETCWD = @GL_GNULIB_GETCWD@ GL_GNULIB_GETDELIM = @GL_GNULIB_GETDELIM@ GL_GNULIB_GETDOMAINNAME = @GL_GNULIB_GETDOMAINNAME@ GL_GNULIB_GETDTABLESIZE = @GL_GNULIB_GETDTABLESIZE@ GL_GNULIB_GETENTROPY = @GL_GNULIB_GETENTROPY@ GL_GNULIB_GETGROUPS = @GL_GNULIB_GETGROUPS@ GL_GNULIB_GETHOSTNAME = @GL_GNULIB_GETHOSTNAME@ GL_GNULIB_GETLINE = @GL_GNULIB_GETLINE@ GL_GNULIB_GETLOADAVG = @GL_GNULIB_GETLOADAVG@ GL_GNULIB_GETLOGIN = @GL_GNULIB_GETLOGIN@ GL_GNULIB_GETLOGIN_R = @GL_GNULIB_GETLOGIN_R@ GL_GNULIB_GETOPT_POSIX = @GL_GNULIB_GETOPT_POSIX@ GL_GNULIB_GETPAGESIZE = @GL_GNULIB_GETPAGESIZE@ GL_GNULIB_GETPASS = @GL_GNULIB_GETPASS@ GL_GNULIB_GETPASS_GNU = @GL_GNULIB_GETPASS_GNU@ GL_GNULIB_GETPROGNAME = @GL_GNULIB_GETPROGNAME@ GL_GNULIB_GETSUBOPT = @GL_GNULIB_GETSUBOPT@ GL_GNULIB_GETUMASK = @GL_GNULIB_GETUMASK@ GL_GNULIB_GETUSERSHELL = @GL_GNULIB_GETUSERSHELL@ GL_GNULIB_GRANTPT = @GL_GNULIB_GRANTPT@ GL_GNULIB_GROUP_MEMBER = @GL_GNULIB_GROUP_MEMBER@ GL_GNULIB_IMAXABS = @GL_GNULIB_IMAXABS@ GL_GNULIB_IMAXDIV = @GL_GNULIB_IMAXDIV@ GL_GNULIB_ISATTY = @GL_GNULIB_ISATTY@ GL_GNULIB_ISWBLANK = @GL_GNULIB_ISWBLANK@ GL_GNULIB_ISWCTYPE = @GL_GNULIB_ISWCTYPE@ GL_GNULIB_ISWDIGIT = @GL_GNULIB_ISWDIGIT@ GL_GNULIB_ISWXDIGIT = @GL_GNULIB_ISWXDIGIT@ GL_GNULIB_LCHMOD = @GL_GNULIB_LCHMOD@ GL_GNULIB_LCHOWN = @GL_GNULIB_LCHOWN@ GL_GNULIB_LINK = @GL_GNULIB_LINK@ GL_GNULIB_LINKAT = @GL_GNULIB_LINKAT@ GL_GNULIB_LOCALECONV = @GL_GNULIB_LOCALECONV@ GL_GNULIB_LOCALENAME = @GL_GNULIB_LOCALENAME@ GL_GNULIB_LOCALTIME = @GL_GNULIB_LOCALTIME@ GL_GNULIB_LSEEK = @GL_GNULIB_LSEEK@ GL_GNULIB_LSTAT = @GL_GNULIB_LSTAT@ GL_GNULIB_MALLOC_GNU = @GL_GNULIB_MALLOC_GNU@ GL_GNULIB_MALLOC_POSIX = @GL_GNULIB_MALLOC_POSIX@ GL_GNULIB_MBRLEN = @GL_GNULIB_MBRLEN@ GL_GNULIB_MBRTOWC = @GL_GNULIB_MBRTOWC@ GL_GNULIB_MBSCASECMP = @GL_GNULIB_MBSCASECMP@ GL_GNULIB_MBSCASESTR = @GL_GNULIB_MBSCASESTR@ GL_GNULIB_MBSCHR = @GL_GNULIB_MBSCHR@ GL_GNULIB_MBSCSPN = @GL_GNULIB_MBSCSPN@ GL_GNULIB_MBSINIT = @GL_GNULIB_MBSINIT@ GL_GNULIB_MBSLEN = @GL_GNULIB_MBSLEN@ GL_GNULIB_MBSNCASECMP = @GL_GNULIB_MBSNCASECMP@ GL_GNULIB_MBSNLEN = @GL_GNULIB_MBSNLEN@ GL_GNULIB_MBSNRTOWCS = @GL_GNULIB_MBSNRTOWCS@ GL_GNULIB_MBSPBRK = @GL_GNULIB_MBSPBRK@ GL_GNULIB_MBSPCASECMP = @GL_GNULIB_MBSPCASECMP@ GL_GNULIB_MBSRCHR = @GL_GNULIB_MBSRCHR@ GL_GNULIB_MBSRTOWCS = @GL_GNULIB_MBSRTOWCS@ GL_GNULIB_MBSSEP = @GL_GNULIB_MBSSEP@ GL_GNULIB_MBSSPN = @GL_GNULIB_MBSSPN@ GL_GNULIB_MBSSTR = @GL_GNULIB_MBSSTR@ GL_GNULIB_MBSTOK_R = @GL_GNULIB_MBSTOK_R@ GL_GNULIB_MBSTOWCS = @GL_GNULIB_MBSTOWCS@ GL_GNULIB_MBTOWC = @GL_GNULIB_MBTOWC@ GL_GNULIB_MDA_ACCESS = @GL_GNULIB_MDA_ACCESS@ GL_GNULIB_MDA_CHDIR = @GL_GNULIB_MDA_CHDIR@ GL_GNULIB_MDA_CHMOD = @GL_GNULIB_MDA_CHMOD@ GL_GNULIB_MDA_CLOSE = @GL_GNULIB_MDA_CLOSE@ GL_GNULIB_MDA_CREAT = @GL_GNULIB_MDA_CREAT@ GL_GNULIB_MDA_DUP = @GL_GNULIB_MDA_DUP@ GL_GNULIB_MDA_DUP2 = @GL_GNULIB_MDA_DUP2@ GL_GNULIB_MDA_ECVT = @GL_GNULIB_MDA_ECVT@ GL_GNULIB_MDA_EXECL = @GL_GNULIB_MDA_EXECL@ GL_GNULIB_MDA_EXECLE = @GL_GNULIB_MDA_EXECLE@ GL_GNULIB_MDA_EXECLP = @GL_GNULIB_MDA_EXECLP@ GL_GNULIB_MDA_EXECV = @GL_GNULIB_MDA_EXECV@ GL_GNULIB_MDA_EXECVE = @GL_GNULIB_MDA_EXECVE@ GL_GNULIB_MDA_EXECVP = @GL_GNULIB_MDA_EXECVP@ GL_GNULIB_MDA_EXECVPE = @GL_GNULIB_MDA_EXECVPE@ GL_GNULIB_MDA_FCLOSEALL = @GL_GNULIB_MDA_FCLOSEALL@ GL_GNULIB_MDA_FCVT = @GL_GNULIB_MDA_FCVT@ GL_GNULIB_MDA_FDOPEN = @GL_GNULIB_MDA_FDOPEN@ GL_GNULIB_MDA_FILENO = @GL_GNULIB_MDA_FILENO@ GL_GNULIB_MDA_GCVT = @GL_GNULIB_MDA_GCVT@ GL_GNULIB_MDA_GETCWD = @GL_GNULIB_MDA_GETCWD@ GL_GNULIB_MDA_GETPID = @GL_GNULIB_MDA_GETPID@ GL_GNULIB_MDA_GETW = @GL_GNULIB_MDA_GETW@ GL_GNULIB_MDA_ISATTY = @GL_GNULIB_MDA_ISATTY@ GL_GNULIB_MDA_LSEEK = @GL_GNULIB_MDA_LSEEK@ GL_GNULIB_MDA_MEMCCPY = @GL_GNULIB_MDA_MEMCCPY@ GL_GNULIB_MDA_MKDIR = @GL_GNULIB_MDA_MKDIR@ GL_GNULIB_MDA_MKTEMP = @GL_GNULIB_MDA_MKTEMP@ GL_GNULIB_MDA_OPEN = @GL_GNULIB_MDA_OPEN@ GL_GNULIB_MDA_PUTENV = @GL_GNULIB_MDA_PUTENV@ GL_GNULIB_MDA_PUTW = @GL_GNULIB_MDA_PUTW@ GL_GNULIB_MDA_READ = @GL_GNULIB_MDA_READ@ GL_GNULIB_MDA_RMDIR = @GL_GNULIB_MDA_RMDIR@ GL_GNULIB_MDA_STRDUP = @GL_GNULIB_MDA_STRDUP@ GL_GNULIB_MDA_SWAB = @GL_GNULIB_MDA_SWAB@ GL_GNULIB_MDA_TEMPNAM = @GL_GNULIB_MDA_TEMPNAM@ GL_GNULIB_MDA_TZSET = @GL_GNULIB_MDA_TZSET@ GL_GNULIB_MDA_UMASK = @GL_GNULIB_MDA_UMASK@ GL_GNULIB_MDA_UNLINK = @GL_GNULIB_MDA_UNLINK@ GL_GNULIB_MDA_WCSDUP = @GL_GNULIB_MDA_WCSDUP@ GL_GNULIB_MDA_WRITE = @GL_GNULIB_MDA_WRITE@ GL_GNULIB_MEMCHR = @GL_GNULIB_MEMCHR@ GL_GNULIB_MEMMEM = @GL_GNULIB_MEMMEM@ GL_GNULIB_MEMPCPY = @GL_GNULIB_MEMPCPY@ GL_GNULIB_MEMRCHR = @GL_GNULIB_MEMRCHR@ GL_GNULIB_MEMSET_EXPLICIT = @GL_GNULIB_MEMSET_EXPLICIT@ GL_GNULIB_MKDIR = @GL_GNULIB_MKDIR@ GL_GNULIB_MKDIRAT = @GL_GNULIB_MKDIRAT@ GL_GNULIB_MKDTEMP = @GL_GNULIB_MKDTEMP@ GL_GNULIB_MKFIFO = @GL_GNULIB_MKFIFO@ GL_GNULIB_MKFIFOAT = @GL_GNULIB_MKFIFOAT@ GL_GNULIB_MKNOD = @GL_GNULIB_MKNOD@ GL_GNULIB_MKNODAT = @GL_GNULIB_MKNODAT@ GL_GNULIB_MKOSTEMP = @GL_GNULIB_MKOSTEMP@ GL_GNULIB_MKOSTEMPS = @GL_GNULIB_MKOSTEMPS@ GL_GNULIB_MKSTEMP = @GL_GNULIB_MKSTEMP@ GL_GNULIB_MKSTEMPS = @GL_GNULIB_MKSTEMPS@ GL_GNULIB_MKTIME = @GL_GNULIB_MKTIME@ GL_GNULIB_NANOSLEEP = @GL_GNULIB_NANOSLEEP@ GL_GNULIB_NL_LANGINFO = @GL_GNULIB_NL_LANGINFO@ GL_GNULIB_NONBLOCKING = @GL_GNULIB_NONBLOCKING@ GL_GNULIB_OBSTACK_PRINTF = @GL_GNULIB_OBSTACK_PRINTF@ GL_GNULIB_OBSTACK_PRINTF_POSIX = @GL_GNULIB_OBSTACK_PRINTF_POSIX@ GL_GNULIB_OPEN = @GL_GNULIB_OPEN@ GL_GNULIB_OPENAT = @GL_GNULIB_OPENAT@ GL_GNULIB_OVERRIDES_STRUCT_STAT = @GL_GNULIB_OVERRIDES_STRUCT_STAT@ GL_GNULIB_PCLOSE = @GL_GNULIB_PCLOSE@ GL_GNULIB_PERROR = @GL_GNULIB_PERROR@ GL_GNULIB_PIPE = @GL_GNULIB_PIPE@ GL_GNULIB_PIPE2 = @GL_GNULIB_PIPE2@ GL_GNULIB_POPEN = @GL_GNULIB_POPEN@ GL_GNULIB_POSIX_MEMALIGN = @GL_GNULIB_POSIX_MEMALIGN@ GL_GNULIB_POSIX_OPENPT = @GL_GNULIB_POSIX_OPENPT@ GL_GNULIB_PREAD = @GL_GNULIB_PREAD@ GL_GNULIB_PRINTF = @GL_GNULIB_PRINTF@ GL_GNULIB_PRINTF_POSIX = @GL_GNULIB_PRINTF_POSIX@ GL_GNULIB_PTSNAME = @GL_GNULIB_PTSNAME@ GL_GNULIB_PTSNAME_R = @GL_GNULIB_PTSNAME_R@ GL_GNULIB_PUTC = @GL_GNULIB_PUTC@ GL_GNULIB_PUTCHAR = @GL_GNULIB_PUTCHAR@ GL_GNULIB_PUTENV = @GL_GNULIB_PUTENV@ GL_GNULIB_PUTS = @GL_GNULIB_PUTS@ GL_GNULIB_PWRITE = @GL_GNULIB_PWRITE@ GL_GNULIB_QSORT_R = @GL_GNULIB_QSORT_R@ GL_GNULIB_RANDOM = @GL_GNULIB_RANDOM@ GL_GNULIB_RANDOM_R = @GL_GNULIB_RANDOM_R@ GL_GNULIB_RAWMEMCHR = @GL_GNULIB_RAWMEMCHR@ GL_GNULIB_READ = @GL_GNULIB_READ@ GL_GNULIB_READLINK = @GL_GNULIB_READLINK@ GL_GNULIB_READLINKAT = @GL_GNULIB_READLINKAT@ GL_GNULIB_REALLOCARRAY = @GL_GNULIB_REALLOCARRAY@ GL_GNULIB_REALLOC_GNU = @GL_GNULIB_REALLOC_GNU@ GL_GNULIB_REALLOC_POSIX = @GL_GNULIB_REALLOC_POSIX@ GL_GNULIB_REALPATH = @GL_GNULIB_REALPATH@ GL_GNULIB_REMOVE = @GL_GNULIB_REMOVE@ GL_GNULIB_RENAME = @GL_GNULIB_RENAME@ GL_GNULIB_RENAMEAT = @GL_GNULIB_RENAMEAT@ GL_GNULIB_RMDIR = @GL_GNULIB_RMDIR@ GL_GNULIB_RPMATCH = @GL_GNULIB_RPMATCH@ GL_GNULIB_SCANF = @GL_GNULIB_SCANF@ GL_GNULIB_SECURE_GETENV = @GL_GNULIB_SECURE_GETENV@ GL_GNULIB_SETENV = @GL_GNULIB_SETENV@ GL_GNULIB_SETHOSTNAME = @GL_GNULIB_SETHOSTNAME@ GL_GNULIB_SETLOCALE = @GL_GNULIB_SETLOCALE@ GL_GNULIB_SETLOCALE_NULL = @GL_GNULIB_SETLOCALE_NULL@ GL_GNULIB_SIGABBREV_NP = @GL_GNULIB_SIGABBREV_NP@ GL_GNULIB_SIGDESCR_NP = @GL_GNULIB_SIGDESCR_NP@ GL_GNULIB_SLEEP = @GL_GNULIB_SLEEP@ GL_GNULIB_SNPRINTF = @GL_GNULIB_SNPRINTF@ GL_GNULIB_SPRINTF_POSIX = @GL_GNULIB_SPRINTF_POSIX@ GL_GNULIB_STAT = @GL_GNULIB_STAT@ GL_GNULIB_STDIO_H_NONBLOCKING = @GL_GNULIB_STDIO_H_NONBLOCKING@ GL_GNULIB_STDIO_H_SIGPIPE = @GL_GNULIB_STDIO_H_SIGPIPE@ GL_GNULIB_STPCPY = @GL_GNULIB_STPCPY@ GL_GNULIB_STPNCPY = @GL_GNULIB_STPNCPY@ GL_GNULIB_STRCASESTR = @GL_GNULIB_STRCASESTR@ GL_GNULIB_STRCHRNUL = @GL_GNULIB_STRCHRNUL@ GL_GNULIB_STRDUP = @GL_GNULIB_STRDUP@ GL_GNULIB_STRERROR = @GL_GNULIB_STRERROR@ GL_GNULIB_STRERRORNAME_NP = @GL_GNULIB_STRERRORNAME_NP@ GL_GNULIB_STRERROR_R = @GL_GNULIB_STRERROR_R@ GL_GNULIB_STRFTIME = @GL_GNULIB_STRFTIME@ GL_GNULIB_STRNCAT = @GL_GNULIB_STRNCAT@ GL_GNULIB_STRNDUP = @GL_GNULIB_STRNDUP@ GL_GNULIB_STRNLEN = @GL_GNULIB_STRNLEN@ GL_GNULIB_STRPBRK = @GL_GNULIB_STRPBRK@ GL_GNULIB_STRPTIME = @GL_GNULIB_STRPTIME@ GL_GNULIB_STRSEP = @GL_GNULIB_STRSEP@ GL_GNULIB_STRSIGNAL = @GL_GNULIB_STRSIGNAL@ GL_GNULIB_STRSTR = @GL_GNULIB_STRSTR@ GL_GNULIB_STRTOD = @GL_GNULIB_STRTOD@ GL_GNULIB_STRTOIMAX = @GL_GNULIB_STRTOIMAX@ GL_GNULIB_STRTOK_R = @GL_GNULIB_STRTOK_R@ GL_GNULIB_STRTOL = @GL_GNULIB_STRTOL@ GL_GNULIB_STRTOLD = @GL_GNULIB_STRTOLD@ GL_GNULIB_STRTOLL = @GL_GNULIB_STRTOLL@ GL_GNULIB_STRTOUL = @GL_GNULIB_STRTOUL@ GL_GNULIB_STRTOULL = @GL_GNULIB_STRTOULL@ GL_GNULIB_STRTOUMAX = @GL_GNULIB_STRTOUMAX@ GL_GNULIB_STRVERSCMP = @GL_GNULIB_STRVERSCMP@ GL_GNULIB_SYMLINK = @GL_GNULIB_SYMLINK@ GL_GNULIB_SYMLINKAT = @GL_GNULIB_SYMLINKAT@ GL_GNULIB_SYSTEM_POSIX = @GL_GNULIB_SYSTEM_POSIX@ GL_GNULIB_TIME = @GL_GNULIB_TIME@ GL_GNULIB_TIMEGM = @GL_GNULIB_TIMEGM@ GL_GNULIB_TIMESPEC_GET = @GL_GNULIB_TIMESPEC_GET@ GL_GNULIB_TIMESPEC_GETRES = @GL_GNULIB_TIMESPEC_GETRES@ GL_GNULIB_TIME_R = @GL_GNULIB_TIME_R@ GL_GNULIB_TIME_RZ = @GL_GNULIB_TIME_RZ@ GL_GNULIB_TMPFILE = @GL_GNULIB_TMPFILE@ GL_GNULIB_TOWCTRANS = @GL_GNULIB_TOWCTRANS@ GL_GNULIB_TRUNCATE = @GL_GNULIB_TRUNCATE@ GL_GNULIB_TTYNAME_R = @GL_GNULIB_TTYNAME_R@ GL_GNULIB_TZSET = @GL_GNULIB_TZSET@ GL_GNULIB_UNISTD_H_GETOPT = @GL_GNULIB_UNISTD_H_GETOPT@ GL_GNULIB_UNISTD_H_NONBLOCKING = @GL_GNULIB_UNISTD_H_NONBLOCKING@ GL_GNULIB_UNISTD_H_SIGPIPE = @GL_GNULIB_UNISTD_H_SIGPIPE@ GL_GNULIB_UNLINK = @GL_GNULIB_UNLINK@ GL_GNULIB_UNLINKAT = @GL_GNULIB_UNLINKAT@ GL_GNULIB_UNLOCKPT = @GL_GNULIB_UNLOCKPT@ GL_GNULIB_UNSETENV = @GL_GNULIB_UNSETENV@ GL_GNULIB_USLEEP = @GL_GNULIB_USLEEP@ GL_GNULIB_UTIMENSAT = @GL_GNULIB_UTIMENSAT@ GL_GNULIB_VASPRINTF = @GL_GNULIB_VASPRINTF@ GL_GNULIB_VDPRINTF = @GL_GNULIB_VDPRINTF@ GL_GNULIB_VFPRINTF = @GL_GNULIB_VFPRINTF@ GL_GNULIB_VFPRINTF_POSIX = @GL_GNULIB_VFPRINTF_POSIX@ GL_GNULIB_VFSCANF = @GL_GNULIB_VFSCANF@ GL_GNULIB_VPRINTF = @GL_GNULIB_VPRINTF@ GL_GNULIB_VPRINTF_POSIX = @GL_GNULIB_VPRINTF_POSIX@ GL_GNULIB_VSCANF = @GL_GNULIB_VSCANF@ GL_GNULIB_VSNPRINTF = @GL_GNULIB_VSNPRINTF@ GL_GNULIB_VSPRINTF_POSIX = @GL_GNULIB_VSPRINTF_POSIX@ GL_GNULIB_WCPCPY = @GL_GNULIB_WCPCPY@ GL_GNULIB_WCPNCPY = @GL_GNULIB_WCPNCPY@ GL_GNULIB_WCRTOMB = @GL_GNULIB_WCRTOMB@ GL_GNULIB_WCSCASECMP = @GL_GNULIB_WCSCASECMP@ GL_GNULIB_WCSCAT = @GL_GNULIB_WCSCAT@ GL_GNULIB_WCSCHR = @GL_GNULIB_WCSCHR@ GL_GNULIB_WCSCMP = @GL_GNULIB_WCSCMP@ GL_GNULIB_WCSCOLL = @GL_GNULIB_WCSCOLL@ GL_GNULIB_WCSCPY = @GL_GNULIB_WCSCPY@ GL_GNULIB_WCSCSPN = @GL_GNULIB_WCSCSPN@ GL_GNULIB_WCSDUP = @GL_GNULIB_WCSDUP@ GL_GNULIB_WCSFTIME = @GL_GNULIB_WCSFTIME@ GL_GNULIB_WCSLEN = @GL_GNULIB_WCSLEN@ GL_GNULIB_WCSNCASECMP = @GL_GNULIB_WCSNCASECMP@ GL_GNULIB_WCSNCAT = @GL_GNULIB_WCSNCAT@ GL_GNULIB_WCSNCMP = @GL_GNULIB_WCSNCMP@ GL_GNULIB_WCSNCPY = @GL_GNULIB_WCSNCPY@ GL_GNULIB_WCSNLEN = @GL_GNULIB_WCSNLEN@ GL_GNULIB_WCSNRTOMBS = @GL_GNULIB_WCSNRTOMBS@ GL_GNULIB_WCSPBRK = @GL_GNULIB_WCSPBRK@ GL_GNULIB_WCSRCHR = @GL_GNULIB_WCSRCHR@ GL_GNULIB_WCSRTOMBS = @GL_GNULIB_WCSRTOMBS@ GL_GNULIB_WCSSPN = @GL_GNULIB_WCSSPN@ GL_GNULIB_WCSSTR = @GL_GNULIB_WCSSTR@ GL_GNULIB_WCSTOK = @GL_GNULIB_WCSTOK@ GL_GNULIB_WCSWIDTH = @GL_GNULIB_WCSWIDTH@ GL_GNULIB_WCSXFRM = @GL_GNULIB_WCSXFRM@ GL_GNULIB_WCTOB = @GL_GNULIB_WCTOB@ GL_GNULIB_WCTOMB = @GL_GNULIB_WCTOMB@ GL_GNULIB_WCTRANS = @GL_GNULIB_WCTRANS@ GL_GNULIB_WCTYPE = @GL_GNULIB_WCTYPE@ GL_GNULIB_WCWIDTH = @GL_GNULIB_WCWIDTH@ GL_GNULIB_WMEMCHR = @GL_GNULIB_WMEMCHR@ GL_GNULIB_WMEMCMP = @GL_GNULIB_WMEMCMP@ GL_GNULIB_WMEMCPY = @GL_GNULIB_WMEMCPY@ GL_GNULIB_WMEMMOVE = @GL_GNULIB_WMEMMOVE@ GL_GNULIB_WMEMPCPY = @GL_GNULIB_WMEMPCPY@ GL_GNULIB_WMEMSET = @GL_GNULIB_WMEMSET@ GL_GNULIB_WRITE = @GL_GNULIB_WRITE@ GL_GNULIB__EXIT = @GL_GNULIB__EXIT@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GNULIBHEADERS_OVERRIDE_WINT_T = @GNULIBHEADERS_OVERRIDE_WINT_T@ GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@ GREP = @GREP@ HARD_LOCALE_LIB = @HARD_LOCALE_LIB@ HAVE_ALIGNED_ALLOC = @HAVE_ALIGNED_ALLOC@ HAVE_ALLOCA_H = @HAVE_ALLOCA_H@ HAVE_ATOLL = @HAVE_ATOLL@ HAVE_BTOWC = @HAVE_BTOWC@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_COPY_FILE_RANGE = @HAVE_COPY_FILE_RANGE@ HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ HAVE_DECL_ECVT = @HAVE_DECL_ECVT@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_EXECVPE = @HAVE_DECL_EXECVPE@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FCLOSEALL = @HAVE_DECL_FCLOSEALL@ HAVE_DECL_FCVT = @HAVE_DECL_FCVT@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GCVT = @HAVE_DECL_GCVT@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_GETW = @HAVE_DECL_GETW@ HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@ HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_PROGRAM_INVOCATION_NAME = @HAVE_DECL_PROGRAM_INVOCATION_NAME@ HAVE_DECL_PUTW = @HAVE_DECL_PUTW@ HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DECL_WCSDUP = @HAVE_DECL_WCSDUP@ HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ HAVE_ERROR = @HAVE_ERROR@ HAVE_ERROR_AT_LINE = @HAVE_ERROR_AT_LINE@ HAVE_ERROR_H = @HAVE_ERROR_H@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_EXECVPE = @HAVE_EXECVPE@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHMODAT = @HAVE_FCHMODAT@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FCNTL = @HAVE_FCNTL@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FEATURES_H = @HAVE_FEATURES_H@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FREELOCALE = @HAVE_FREELOCALE@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSTATAT = @HAVE_FSTATAT@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_FUTIMENS = @HAVE_FUTIMENS@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETENTROPY = @HAVE_GETENTROPY@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GETPASS = @HAVE_GETPASS@ HAVE_GETPROGNAME = @HAVE_GETPROGNAME@ HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ HAVE_GETUMASK = @HAVE_GETUMASK@ HAVE_GRANTPT = @HAVE_GRANTPT@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_IMAXABS = @HAVE_IMAXABS@ HAVE_IMAXDIV = @HAVE_IMAXDIV@ HAVE_IMAXDIV_T = @HAVE_IMAXDIV_T@ HAVE_INITSTATE = @HAVE_INITSTATE@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_ISWBLANK = @HAVE_ISWBLANK@ HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ HAVE_LANGINFO_ALTMON = @HAVE_LANGINFO_ALTMON@ HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ HAVE_LCHMOD = @HAVE_LCHMOD@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_LSTAT = @HAVE_LSTAT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBRLEN = @HAVE_MBRLEN@ HAVE_MBRTOWC = @HAVE_MBRTOWC@ HAVE_MBSINIT = @HAVE_MBSINIT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ HAVE_MBTOWC = @HAVE_MBTOWC@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MEMSET_EXPLICIT = @HAVE_MEMSET_EXPLICIT@ HAVE_MKDIRAT = @HAVE_MKDIRAT@ HAVE_MKDTEMP = @HAVE_MKDTEMP@ HAVE_MKFIFO = @HAVE_MKFIFO@ HAVE_MKFIFOAT = @HAVE_MKFIFOAT@ HAVE_MKNOD = @HAVE_MKNOD@ HAVE_MKNODAT = @HAVE_MKNODAT@ HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ HAVE_MKSTEMP = @HAVE_MKSTEMP@ HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ HAVE_NEWLOCALE = @HAVE_NEWLOCALE@ HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ HAVE_OPENAT = @HAVE_OPENAT@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_POSIX_MEMALIGN = @HAVE_POSIX_MEMALIGN@ HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PTSNAME = @HAVE_PTSNAME@ HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_QSORT_R = @HAVE_QSORT_R@ HAVE_RANDOM = @HAVE_RANDOM@ HAVE_RANDOM_H = @HAVE_RANDOM_H@ HAVE_RANDOM_R = @HAVE_RANDOM_R@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ HAVE_REALPATH = @HAVE_REALPATH@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_RPMATCH = @HAVE_RPMATCH@ HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ HAVE_SETENV = @HAVE_SETENV@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SETSTATE = @HAVE_SETSTATE@ HAVE_SIGABBREV_NP = @HAVE_SIGABBREV_NP@ HAVE_SIGDESCR_NP = @HAVE_SIGDESCR_NP@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRERRORNAME_NP = @HAVE_STRERRORNAME_NP@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRPTIME = @HAVE_STRPTIME@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRTOD = @HAVE_STRTOD@ HAVE_STRTOL = @HAVE_STRTOL@ HAVE_STRTOLD = @HAVE_STRTOLD@ HAVE_STRTOLL = @HAVE_STRTOLL@ HAVE_STRTOUL = @HAVE_STRTOUL@ HAVE_STRTOULL = @HAVE_STRTOULL@ HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_TIMEGM = @HAVE_TIMEGM@ HAVE_TIMESPEC_GET = @HAVE_TIMESPEC_GET@ HAVE_TIMESPEC_GETRES = @HAVE_TIMESPEC_GETRES@ HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WCPCPY = @HAVE_WCPCPY@ HAVE_WCPNCPY = @HAVE_WCPNCPY@ HAVE_WCRTOMB = @HAVE_WCRTOMB@ HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ HAVE_WCSCAT = @HAVE_WCSCAT@ HAVE_WCSCHR = @HAVE_WCSCHR@ HAVE_WCSCMP = @HAVE_WCSCMP@ HAVE_WCSCOLL = @HAVE_WCSCOLL@ HAVE_WCSCPY = @HAVE_WCSCPY@ HAVE_WCSCSPN = @HAVE_WCSCSPN@ HAVE_WCSDUP = @HAVE_WCSDUP@ HAVE_WCSFTIME = @HAVE_WCSFTIME@ HAVE_WCSLEN = @HAVE_WCSLEN@ HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ HAVE_WCSNCAT = @HAVE_WCSNCAT@ HAVE_WCSNCMP = @HAVE_WCSNCMP@ HAVE_WCSNCPY = @HAVE_WCSNCPY@ HAVE_WCSNLEN = @HAVE_WCSNLEN@ HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ HAVE_WCSPBRK = @HAVE_WCSPBRK@ HAVE_WCSRCHR = @HAVE_WCSRCHR@ HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ HAVE_WCSSPN = @HAVE_WCSSPN@ HAVE_WCSSTR = @HAVE_WCSSTR@ HAVE_WCSTOK = @HAVE_WCSTOK@ HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ HAVE_WCSXFRM = @HAVE_WCSXFRM@ HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE_WINT_T = @HAVE_WINT_T@ HAVE_WMEMCHR = @HAVE_WMEMCHR@ HAVE_WMEMCMP = @HAVE_WMEMCMP@ HAVE_WMEMCPY = @HAVE_WMEMCPY@ HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ HAVE_WMEMPCPY = @HAVE_WMEMPCPY@ HAVE_WMEMSET = @HAVE_WMEMSET@ HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ HAVE__EXIT = @HAVE__EXIT@ IMPRIMATUR_MAKEINFOFLAGS = @IMPRIMATUR_MAKEINFOFLAGS@ IMPRIMATUR_MODULE_DIR = @IMPRIMATUR_MODULE_DIR@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@ INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBGNU_LIBDEPS = @LIBGNU_LIBDEPS@ LIBGNU_LTLIBDEPS = @LIBGNU_LTLIBDEPS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPMULTITHREAD = @LIBPMULTITHREAD@ LIBPTHREAD = @LIBPTHREAD@ LIBS = @LIBS@ LIBSTDTHREAD = @LIBSTDTHREAD@ LIBTHREAD = @LIBTHREAD@ LIB_HARD_LOCALE = @LIB_HARD_LOCALE@ LIB_MBRTOWC = @LIB_MBRTOWC@ LIB_NL_LANGINFO = @LIB_NL_LANGINFO@ LIB_SCHED_YIELD = @LIB_SCHED_YIELD@ LIB_SETLOCALE_NULL = @LIB_SETLOCALE_NULL@ LIMITS_H = @LIMITS_H@ LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ LOCALENAME_ENHANCE_LOCALE_FUNCS = @LOCALENAME_ENHANCE_LOCALE_FUNCS@ LOCALE_FR = @LOCALE_FR@ LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ LOCALE_JA = @LOCALE_JA@ LOCALE_ZH_CN = @LOCALE_ZH_CN@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBTHREAD = @LTLIBTHREAD@ MAKEINFO = @MAKEINFO@ MBRTOWC_LIB = @MBRTOWC_LIB@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NEXT_ASSERT_H = @NEXT_ASSERT_H@ NEXT_AS_FIRST_DIRECTIVE_ASSERT_H = @NEXT_AS_FIRST_DIRECTIVE_ASSERT_H@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_ERROR_H = @NEXT_AS_FIRST_DIRECTIVE_ERROR_H@ NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@ NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_ERROR_H = @NEXT_ERROR_H@ NEXT_FCNTL_H = @NEXT_FCNTL_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_LOCALE_H = @NEXT_LOCALE_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STDLIB_H = @NEXT_STDLIB_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_TIME_H = @NEXT_TIME_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NEXT_WCHAR_H = @NEXT_WCHAR_H@ NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ 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@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PRIPTR_PREFIX = @PRIPTR_PREFIX@ PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ RANLIB = @RANLIB@ RENDITION = @RENDITION@ REPLACE_ACCESS = @REPLACE_ACCESS@ REPLACE_ALIGNED_ALLOC = @REPLACE_ALIGNED_ALLOC@ REPLACE_BTOWC = @REPLACE_BTOWC@ REPLACE_CALLOC_FOR_CALLOC_GNU = @REPLACE_CALLOC_FOR_CALLOC_GNU@ REPLACE_CALLOC_FOR_CALLOC_POSIX = @REPLACE_CALLOC_FOR_CALLOC_POSIX@ REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ REPLACE_CHMOD = @REPLACE_CHMOD@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_COPY_FILE_RANGE = @REPLACE_COPY_FILE_RANGE@ REPLACE_CREAT = @REPLACE_CREAT@ REPLACE_CTIME = @REPLACE_CTIME@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_DUP3 = @REPLACE_DUP3@ REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ REPLACE_ERROR = @REPLACE_ERROR@ REPLACE_ERROR_AT_LINE = @REPLACE_ERROR_AT_LINE@ REPLACE_EXECL = @REPLACE_EXECL@ REPLACE_EXECLE = @REPLACE_EXECLE@ REPLACE_EXECLP = @REPLACE_EXECLP@ REPLACE_EXECV = @REPLACE_EXECV@ REPLACE_EXECVE = @REPLACE_EXECVE@ REPLACE_EXECVP = @REPLACE_EXECVP@ REPLACE_EXECVPE = @REPLACE_EXECVPE@ REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ REPLACE_FCHMODAT = @REPLACE_FCHMODAT@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FCNTL = @REPLACE_FCNTL@ REPLACE_FDATASYNC = @REPLACE_FDATASYNC@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FFSLL = @REPLACE_FFSLL@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FOPEN_FOR_FOPEN_GNU = @REPLACE_FOPEN_FOR_FOPEN_GNU@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREE = @REPLACE_FREE@ REPLACE_FREELOCALE = @REPLACE_FREELOCALE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FSTAT = @REPLACE_FSTAT@ REPLACE_FSTATAT = @REPLACE_FSTATAT@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETENTROPY = @REPLACE_GETENTROPY@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOADAVG = @REPLACE_GETLOADAVG@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_GETPASS = @REPLACE_GETPASS@ REPLACE_GETPASS_FOR_GETPASS_GNU = @REPLACE_GETPASS_FOR_GETPASS_GNU@ REPLACE_GETPROGNAME = @REPLACE_GETPROGNAME@ REPLACE_GETSUBOPT = @REPLACE_GETSUBOPT@ REPLACE_GMTIME = @REPLACE_GMTIME@ REPLACE_IMAXABS = @REPLACE_IMAXABS@ REPLACE_IMAXDIV = @REPLACE_IMAXDIV@ REPLACE_INITSTATE = @REPLACE_INITSTATE@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ REPLACE_ISWDIGIT = @REPLACE_ISWDIGIT@ REPLACE_ISWXDIGIT = @REPLACE_ISWXDIGIT@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_LSTAT = @REPLACE_LSTAT@ REPLACE_MALLOC_FOR_MALLOC_GNU = @REPLACE_MALLOC_FOR_MALLOC_GNU@ REPLACE_MALLOC_FOR_MALLOC_POSIX = @REPLACE_MALLOC_FOR_MALLOC_POSIX@ REPLACE_MBRLEN = @REPLACE_MBRLEN@ REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ REPLACE_MBSINIT = @REPLACE_MBSINIT@ REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ REPLACE_MBSTOWCS = @REPLACE_MBSTOWCS@ REPLACE_MBTOWC = @REPLACE_MBTOWC@ REPLACE_MB_CUR_MAX = @REPLACE_MB_CUR_MAX@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_MEMPCPY = @REPLACE_MEMPCPY@ REPLACE_MKDIR = @REPLACE_MKDIR@ REPLACE_MKFIFO = @REPLACE_MKFIFO@ REPLACE_MKFIFOAT = @REPLACE_MKFIFOAT@ REPLACE_MKNOD = @REPLACE_MKNOD@ REPLACE_MKNODAT = @REPLACE_MKNODAT@ REPLACE_MKOSTEMP = @REPLACE_MKOSTEMP@ REPLACE_MKOSTEMPS = @REPLACE_MKOSTEMPS@ REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ REPLACE_MKTIME = @REPLACE_MKTIME@ REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ REPLACE_NEWLOCALE = @REPLACE_NEWLOCALE@ REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_OPEN = @REPLACE_OPEN@ REPLACE_OPENAT = @REPLACE_OPENAT@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_PIPE2 = @REPLACE_PIPE2@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_POSIX_MEMALIGN = @REPLACE_POSIX_MEMALIGN@ REPLACE_POSIX_OPENPT = @REPLACE_POSIX_OPENPT@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PTSNAME = @REPLACE_PTSNAME@ REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ REPLACE_PUTENV = @REPLACE_PUTENV@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_QSORT_R = @REPLACE_QSORT_R@ REPLACE_RANDOM = @REPLACE_RANDOM@ REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ REPLACE_READ = @REPLACE_READ@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_READLINKAT = @REPLACE_READLINKAT@ REPLACE_REALLOCARRAY = @REPLACE_REALLOCARRAY@ REPLACE_REALLOC_FOR_REALLOC_GNU = @REPLACE_REALLOC_FOR_REALLOC_GNU@ REPLACE_REALLOC_FOR_REALLOC_POSIX = @REPLACE_REALLOC_FOR_REALLOC_POSIX@ REPLACE_REALPATH = @REPLACE_REALPATH@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_SETENV = @REPLACE_SETENV@ REPLACE_SETHOSTNAME = @REPLACE_SETHOSTNAME@ REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ REPLACE_SETSTATE = @REPLACE_SETSTATE@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_STAT = @REPLACE_STAT@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPCPY = @REPLACE_STPCPY@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERRORNAME_NP = @REPLACE_STRERRORNAME_NP@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRFTIME = @REPLACE_STRFTIME@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOD = @REPLACE_STRTOD@ REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_STRTOL = @REPLACE_STRTOL@ REPLACE_STRTOLD = @REPLACE_STRTOLD@ REPLACE_STRTOLL = @REPLACE_STRTOLL@ REPLACE_STRTOUL = @REPLACE_STRTOUL@ REPLACE_STRTOULL = @REPLACE_STRTOULL@ REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ REPLACE_TIME = @REPLACE_TIME@ REPLACE_TIMEGM = @REPLACE_TIMEGM@ REPLACE_TIMESPEC_GET = @REPLACE_TIMESPEC_GET@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_TZSET = @REPLACE_TZSET@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_UNSETENV = @REPLACE_UNSETENV@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ REPLACE_WCSCMP = @REPLACE_WCSCMP@ REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ REPLACE_WCSNCMP = @REPLACE_WCSNCMP@ REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ REPLACE_WCSSTR = @REPLACE_WCSSTR@ REPLACE_WCSTOK = @REPLACE_WCSTOK@ REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ REPLACE_WCTOB = @REPLACE_WCTOB@ REPLACE_WCTOMB = @REPLACE_WCTOMB@ REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ REPLACE_WMEMCMP = @REPLACE_WMEMCMP@ REPLACE_WMEMPCPY = @REPLACE_WMEMPCPY@ REPLACE_WRITE = @REPLACE_WRITE@ REPLACE__EXIT = @REPLACE__EXIT@ RUSH_DEFAULT_CONFIG = @RUSH_DEFAULT_CONFIG@ SCHED_YIELD_LIB = @SCHED_YIELD_LIB@ SED = @SED@ SETLOCALE_NULL_LIB = @SETLOCALE_NULL_LIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ STDCKDINT_H = @STDCKDINT_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_TIME_UTC = @TIME_H_DEFINES_TIME_UTC@ UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@ UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ UNISTD_H_HAVE_SYS_RANDOM_H = @UNISTD_H_HAVE_SYS_RANDOM_H@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ 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@ gl_LIBOBJDEPS = @gl_LIBOBJDEPS@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJDEPS = @gltests_LIBOBJDEPS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = rush.rc 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 etc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnits etc/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: 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 dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-data-local 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: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic cscopelist-am \ ctags-am distclean distclean-generic distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-data-local 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-generic pdf \ pdf-am ps ps-am tags-am uninstall uninstall-am .PRECIOUS: Makefile install-data-local: @test -d $(DESTDIR)$(sysconfdir) || \ ${INSTALL} -d $(DESTDIR)$(sysconfdir); \ conf=$(DESTDIR)$(sysconfdir)/rush.rc; \ if [ -r $$conf ]; then \ echo $$conf | sed 's,.,=,g'; \ echo "The configuration file $$conf already exists"; \ echo "Make sure it is up to date!"; \ echo $$conf | sed 's,.,=,g'; \ else \ for file in $(EXTRA_DIST); do \ ${INSTALL} -m 640 $(top_srcdir)/etc/$$file \ $(DESTDIR)$(sysconfdir)/$$file; \ done; \ 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: ������������������������������������������������������������������rush-2.4/build-aux/���������������������������������������������������������������������������������0000755�0001750�0001750�00000000000�14655401527�014231� 5����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/build-aux/missing��������������������������������������������������������������������������0000755�0001750�0001750�00000015336�14635353543�015642� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Common wrapper for a few potentially missing GNU programs. scriptversion=2018-03-07.03; # UTC # Copyright (C) 1996-2021 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 <https://www.gnu.org/licenses/>. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. 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=https://www.perl.org/ flex_URL=https://github.com/westes/flex gnu_software_URL=https://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 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/build-aux/config.rpath���������������������������������������������������������������������0000755�0001750�0001750�00000044435�14436425500�016545� 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-2014 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,' ;; mingw* | cygwin* | pw32* | os2* | cegcc*) ;; hpux9* | hpux10* | hpux11*) wl='-Wl,' ;; irix5* | irix6* | nonstopux*) wl='-Wl,' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in ecc*) wl='-Wl,' ;; icc* | ifort*) wl='-Wl,' ;; lf95*) wl='-Wl,' ;; nagfor*) wl='-Wl,-Wl,,' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) wl='-Wl,' ;; ccc*) wl='-Wl,' ;; xl* | bgxl* | bgf* | mpixl*) wl='-Wl,' ;; como) wl='-lopt=' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ F* | *Sun*Fortran*) wl= ;; *Sun\ C*) wl='-Wl,' ;; esac ;; esac ;; newsos6) ;; *nto* | *qnx*) ;; osf3* | osf4* | osf5*) wl='-Wl,' ;; rdos*) ;; solaris*) case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) wl='-Qoption ld ' ;; *) wl='-Wl,' ;; esac ;; 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*) case "$host_cpu" in powerpc) ;; m68k) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; 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 ;; haiku*) ;; interix[3-9]*) hardcode_direct=no hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-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*) case "$host_cpu" in powerpc) ;; m68k) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; 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 { case $cc_basename in ifort*) true;; *) test "$GCC" = yes;; esac; }; then : else ld_shlibs=no fi ;; dgux*) hardcode_libdir_flag_spec='-L$libdir' ;; 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=: ;; *nto* | *qnx*) ;; 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*) case "$host_cpu" in powerpc*) library_names_spec='$libname$shrext' ;; m68k) library_names_spec='$libname.a' ;; esac ;; 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' ;; 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' ;; haiku*) 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 | kopensolaris*-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' ;; tpf*) 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 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/build-aux/compile��������������������������������������������������������������������������0000755�0001750�0001750�00000016350�14635353543�015616� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Wrapper for compilers which do not understand '-c -o'. scriptversion=2018-03-07.03; # UTC # Copyright (C) 1999-2021 Free Software Foundation, Inc. # Written by Tom Tromey <tromey@cygnus.com>. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <https://www.gnu.org/licenses/>. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to <bug-automake@gnu.org> or send patches to # <automake-patches@gnu.org>. nl=' ' # We need space, tab and new line, in precisely that order. Quoting is # there to prevent tools from complaining about whitespace usage. IFS=" "" $nl" file_conv= # func_file_conv build_file lazy # Convert a $build file to $host form and store it in $file # Currently only supports Windows hosts. If the determined conversion # type is listed in (the comma separated) LAZY, no conversion will # take place. func_file_conv () { file=$1 case $file in / | /[!/]*) # absolute file, and not a UNC file if test -z "$file_conv"; then # lazily determine how to convert abs files case `uname -s` in MINGW*) file_conv=mingw ;; CYGWIN* | MSYS*) file_conv=cygwin ;; *) file_conv=wine ;; esac fi case $file_conv/,$2, in *,$file_conv,*) ;; mingw/*) file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` ;; cygwin/* | msys/*) file=`cygpath -m "$file" || echo "$file"` ;; wine/*) file=`winepath -w "$file" || echo "$file"` ;; esac ;; esac } # func_cl_dashL linkdir # Make cl look for libraries in LINKDIR func_cl_dashL () { func_file_conv "$1" if test -z "$lib_path"; then lib_path=$file else lib_path="$lib_path;$file" fi linker_opts="$linker_opts -LIBPATH:$file" } # func_cl_dashl library # Do a library search-path lookup for cl func_cl_dashl () { lib=$1 found=no save_IFS=$IFS IFS=';' for dir in $lib_path $LIB do IFS=$save_IFS if $shared && test -f "$dir/$lib.dll.lib"; then found=yes lib=$dir/$lib.dll.lib break fi if test -f "$dir/$lib.lib"; then found=yes lib=$dir/$lib.lib break fi if test -f "$dir/lib$lib.a"; then found=yes lib=$dir/lib$lib.a break fi done IFS=$save_IFS if test "$found" != yes; then lib=$lib.lib fi } # func_cl_wrapper cl arg... # Adjust compile command to suit cl func_cl_wrapper () { # Assume a capable shell lib_path= shared=: linker_opts= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. eat=1 case $2 in *.o | *.[oO][bB][jJ]) func_file_conv "$2" set x "$@" -Fo"$file" shift ;; *) func_file_conv "$2" set x "$@" -Fe"$file" shift ;; esac ;; -I) eat=1 func_file_conv "$2" mingw set x "$@" -I"$file" shift ;; -I*) func_file_conv "${1#-I}" mingw set x "$@" -I"$file" shift ;; -l) eat=1 func_cl_dashl "$2" set x "$@" "$lib" shift ;; -l*) func_cl_dashl "${1#-l}" set x "$@" "$lib" shift ;; -L) eat=1 func_cl_dashL "$2" ;; -L*) func_cl_dashL "${1#-L}" ;; -static) shared=false ;; -Wl,*) arg=${1#-Wl,} save_ifs="$IFS"; IFS=',' for flag in $arg; do IFS="$save_ifs" linker_opts="$linker_opts $flag" done IFS="$save_ifs" ;; -Xlinker) eat=1 linker_opts="$linker_opts $2" ;; -*) set x "$@" "$1" shift ;; *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) func_file_conv "$1" set x "$@" -Tp"$file" shift ;; *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) func_file_conv "$1" mingw set x "$@" "$file" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -n "$linker_opts"; then linker_opts="-link$linker_opts" fi exec "$@" $linker_opts exit 1 } eat= case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: compile [--help] [--version] PROGRAM [ARGS] Wrapper for compilers which do not understand '-c -o'. Remove '-o dest.o' from ARGS, run PROGRAM with the remaining arguments, and rename the output as expected. If you are trying to build a whole package this is not the right script to run: please start by reading the file 'INSTALL'. Report bugs to <bug-automake@gnu.org>. EOF exit $? ;; -v | --v*) echo "compile $scriptversion" exit $? ;; cl | *[/\\]cl | cl.exe | *[/\\]cl.exe | \ icl | *[/\\]icl | icl.exe | *[/\\]icl.exe ) func_cl_wrapper "$@" # Doesn't return... ;; esac ofile= cfile= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. # So we strip '-o arg' only if arg is an object. eat=1 case $2 in *.o | *.obj) ofile=$2 ;; *) set x "$@" -o "$2" shift ;; esac ;; *.c) cfile=$1 set x "$@" "$1" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -z "$ofile" || test -z "$cfile"; then # If no '-o' option was seen then we might have been invoked from a # pattern rule where we don't need one. That is ok -- this is a # normal compilation that the losing compiler can handle. If no # '.c' file was seen then we are probably linking. That is also # ok. exec "$@" fi # Name of file we expect compiler to create. cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` # Create the lock directory. # Note: use '[/\\:.-]' here to ensure that we don't use the same name # that we are using for the .o file. Also, base the name on the expected # object file name, since that is what matters with a parallel build. lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d while true; do if mkdir "$lockdir" >/dev/null 2>&1; then break fi sleep 1 done # FIXME: race condition here if user kills between mkdir and trap. trap "rmdir '$lockdir'; exit 1" 1 2 15 # Run the compile. "$@" ret=$? if test -f "$cofile"; then test "$cofile" = "$ofile" || mv "$cofile" "$ofile" elif test -f "${cofile}bj"; then test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" fi rmdir "$lockdir" exit $ret # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/build-aux/mdate-sh�������������������������������������������������������������������������0000755�0001750�0001750�00000013732�14436424417�015667� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Get modification time of a file or directory and pretty-print it. scriptversion=2018-03-07.03; # UTC # Copyright (C) 1995-2023 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 <https://www.gnu.org/licenses/>. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to <bug-automake@gnu.org> or send patches to # <automake-patches@gnu.org>. 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 # Use UTC to get reproducible result. TZ=UTC0 export TZ # 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 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: ��������������������������������������rush-2.4/build-aux/install-sh�����������������������������������������������������������������������0000755�0001750�0001750�00000035776�14436424417�016257� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # install - install a program, script, or datafile scriptversion=2020-11-14.01; # 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 # Create dirs (including intermediate dirs) using mode 755. # This is like GNU 'install' as of coreutils 8.32 (2020). mkdir_umask=22 backupsuffix= 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 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. -p pass -p to $cpprog. -s $stripprog installed files. -S SUFFIX attempt to back up existing files, with suffix SUFFIX. -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 By default, rm is invoked with -f; when overridden with RMPROG, it's up to you to specify -f if you want it. If -S is not specified, no backups are attempted. Email bug reports to bug-automake@gnu.org. Automake home page: https://www.gnu.org/software/automake/ " 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;; -p) cpprog="$cpprog -p";; -s) stripcmd=$stripprog;; -S) backupsuffix="$2" shift;; -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=$? # Don't chown directories that already exist. if test $dstdir_status = 0; then chowncmd="" fi 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. if test -d "$dst"; then if test "$is_target_a_directory" = never; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dstbase=`basename "$src"` case $dst in */) dst=$dst$dstbase;; *) dst=$dst/$dstbase;; esac dstdir_status=0 else dstdir=`dirname "$dst"` test -d "$dstdir" dstdir_status=$? fi fi case $dstdir in */) dstdirslash=$dstdir;; *) dstdirslash=$dstdir/;; esac obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # 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 # The $RANDOM variable is not portable (e.g., dash). Use it # here however when possible just to lower collision chance. tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap ' ret=$? rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null exit $ret ' 0 # Because "mkdir -p" follows existing symlinks and we likely work # directly in world-writeable /tmp, make sure that the '$tmpdir' # directory is successfully created first before we actually test # 'mkdir -p'. if (umask $mkdir_umask && $mkdirprog $mkdir_mode "$tmpdir" && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. test_tmpdir="$tmpdir/a" ls_ld_tmpdir=`ls -ld "$test_tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$test_tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null fi trap '' 0;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac oIFS=$IFS IFS=/ set -f set fnord $dstdir shift set +f IFS=$oIFS prefixes= for d do test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=${dstdirslash}_inst.$$_ rmtmp=${dstdirslash}_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && { test -z "$stripcmd" || { # Create $dsttmp read-write so that cp doesn't create it read-only, # which would cause strip to fail. if test -z "$doit"; then : >"$dsttmp" # No need to fork-exec 'touch'. else $doit touch "$dsttmp" fi } } && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # If $backupsuffix is set, and the file being installed # already exists, attempt a backup. Don't worry if it fails, # e.g., if mv doesn't support -f. if test -n "$backupsuffix" && test -f "$dst"; then $doit $mvcmd -f "$dst" "$dst$backupsuffix" 2>/dev/null fi # 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 "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: ��rush-2.4/build-aux/gitlog-to-changelog��������������������������������������������������������������0000755�0001750�0001750�00000040260�14436424417�020013� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh #! -*-perl-*- # Convert git log output to ChangeLog format. # Copyright (C) 2008-2023 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 <https://www.gnu.org/licenses/>. # # Written by Jim Meyering # This is a prologue that allows to run a perl script as an executable # on systems that are compliant to a POSIX version before POSIX:2017. # On such systems, the usual invocation of an executable through execlp() # or execvp() fails with ENOEXEC if it is a script that does not start # with a #! line. The script interpreter mentioned in the #! line has # to be /bin/sh, because on GuixSD systems that is the only program that # has a fixed file name. The second line is essential for perl and is # also useful for editing this file in Emacs. The next two lines below # are valid code in both sh and perl. When executed by sh, they re-execute # the script through the perl program found in $PATH. The '-x' option # is essential as well; without it, perl would re-execute the script # through /bin/sh. When executed by perl, the next two lines are a no-op. eval 'exec perl -wSx "$0" "$@"' if 0; my $VERSION = '2022-01-27 18:49'; # UTC # The definition above must lie within the first 8 lines in order # for the Emacs time-stamp write hook (at end) to update it. # If you change this file with Emacs, please let the write hook # do its job. Otherwise, update this string manually. use strict; use warnings; use Getopt::Long; use POSIX qw(strftime); (my $ME = $0) =~ s|.*/||; # use File::Coda; # https://meyering.net/code/Coda/ END { defined fileno STDOUT or return; close STDOUT and return; warn "$ME: failed to close standard output: $!\n"; $? ||= 1; } sub usage ($) { my ($exit_code) = @_; my $STREAM = ($exit_code == 0 ? *STDOUT : *STDERR); if ($exit_code != 0) { print $STREAM "Try '$ME --help' for more information.\n"; } else { print $STREAM <<EOF; Usage: $ME [OPTIONS] [ARGS] Convert git log output to ChangeLog format. If present, any ARGS are passed to "git log". To avoid ARGS being parsed as options to $ME, they may be preceded by '--'. OPTIONS: --amend=FILE FILE maps from an SHA1 to perl code (i.e., s/old/new/) that makes a change to SHA1's commit log text or metadata. --append-dot append a dot to the first line of each commit message if there is no other punctuation or blank at the end. --no-cluster never cluster commit messages under the same date/author header; the default is to cluster adjacent commit messages if their headers are the same and neither commit message contains multiple paragraphs. --srcdir=DIR the root of the source tree, from which the .git/ directory can be derived. --since=DATE convert only the logs since DATE; the default is to convert all log entries. --until=DATE convert only the logs older than DATE. --ignore-matching=PAT ignore commit messages whose first lines match PAT. --ignore-line=PAT ignore lines of commit messages that match PAT. --format=FMT set format string for commit subject and body; see 'man git-log' for the list of format metacharacters; the default is '%s%n%b%n' --strip-tab remove one additional leading TAB from commit message lines. --strip-cherry-pick remove data inserted by "git cherry-pick"; this includes the "cherry picked from commit ..." line, and the possible final "Conflicts:" paragraph. --help display this help and exit --version output version information and exit EXAMPLE: $ME --since=2008-01-01 > ChangeLog $ME -- -n 5 foo > last-5-commits-to-branch-foo SPECIAL SYNTAX: The following types of strings are interpreted specially when they appear at the beginning of a log message line. They are not copied to the output. Copyright-paperwork-exempt: Yes Append the "(tiny change)" notation to the usual "date name email" ChangeLog header to mark a change that does not require a copyright assignment. Co-authored-by: Joe User <user\@example.com> List the specified name and email address on a second ChangeLog header, denoting a co-author. Signed-off-by: Joe User <user\@example.com> These lines are simply elided. In a FILE specified via --amend, comment lines (starting with "#") are ignored. FILE must consist of <SHA,CODE+> pairs where SHA is a 40-byte SHA1 (alone on a line) referring to a commit in the current project, and CODE refers to one or more consecutive lines of Perl code. Pairs must be separated by one or more blank line. Here is sample input for use with --amend=FILE, from coreutils: 3a169f4c5d9159283548178668d2fae6fced3030 # fix typo in title: s/all tile types/all file types/ 1379ed974f1fa39b12e2ffab18b3f7a607082202 # Due to a bug in vc-dwim, I mis-attributed a patch by Paul to myself. # Change the author to be Paul. Note the escaped "@": s,Jim .*>,Paul Eggert <eggert\\\@cs.ucla.edu>, EOF } exit $exit_code; } # If the string $S is a well-behaved file name, simply return it. # If it contains white space, quotes, etc., quote it, and return the new string. sub shell_quote($) { my ($s) = @_; if ($s =~ m![^\w+/.,-]!) { # Convert each single quote to '\'' $s =~ s/\'/\'\\\'\'/g; # Then single quote the string. $s = "'$s'"; } return $s; } sub quoted_cmd(@) { return join (' ', map {shell_quote $_} @_); } # Parse file F. # Comment lines (starting with "#") are ignored. # F must consist of <SHA,CODE+> pairs where SHA is a 40-byte SHA1 # (alone on a line) referring to a commit in the current project, and # CODE refers to one or more consecutive lines of Perl code. # Pairs must be separated by one or more blank line. sub parse_amend_file($) { my ($f) = @_; open F, '<', $f or die "$ME: $f: failed to open for reading: $!\n"; my $fail; my $h = {}; my $in_code = 0; my $sha; while (defined (my $line = <F>)) { $line =~ /^\#/ and next; chomp $line; $line eq '' and $in_code = 0, next; if (!$in_code) { $line =~ /^([[:xdigit:]]{40})$/ or (warn "$ME: $f:$.: invalid line; expected an SHA1\n"), $fail = 1, next; $sha = lc $1; $in_code = 1; exists $h->{$sha} and (warn "$ME: $f:$.: duplicate SHA1\n"), $fail = 1, next; } else { $h->{$sha} ||= ''; $h->{$sha} .= "$line\n"; } } close F; $fail and exit 1; return $h; } # git_dir_option $SRCDIR # # From $SRCDIR, the --git-dir option to pass to git (none if $SRCDIR # is undef). Return as a list (0 or 1 element). sub git_dir_option($) { my ($srcdir) = @_; my @res = (); if (defined $srcdir) { my $qdir = shell_quote $srcdir; my $cmd = "cd $qdir && git rev-parse --show-toplevel"; my $qcmd = shell_quote $cmd; my $git_dir = qx($cmd); defined $git_dir or die "$ME: cannot run $qcmd: $!\n"; $? == 0 or die "$ME: $qcmd had unexpected exit code or signal ($?)\n"; chomp $git_dir; push @res, "--git-dir=$git_dir/.git"; } @res; } { my $since_date; my $until_date; my $format_string = '%s%n%b%n'; my $amend_file; my $append_dot = 0; my $cluster = 1; my $ignore_matching; my $ignore_line; my $strip_tab = 0; my $strip_cherry_pick = 0; my $srcdir; GetOptions ( help => sub { usage 0 }, version => sub { print "$ME version $VERSION\n"; exit }, 'since=s' => \$since_date, 'until=s' => \$until_date, 'format=s' => \$format_string, 'amend=s' => \$amend_file, 'append-dot' => \$append_dot, 'cluster!' => \$cluster, 'ignore-matching=s' => \$ignore_matching, 'ignore-line=s' => \$ignore_line, 'strip-tab' => \$strip_tab, 'strip-cherry-pick' => \$strip_cherry_pick, 'srcdir=s' => \$srcdir, ) or usage 1; defined $since_date and unshift @ARGV, "--since=$since_date"; defined $until_date and unshift @ARGV, "--until=$until_date"; # This is a hash that maps an SHA1 to perl code (i.e., s/old/new/) # that makes a correction in the log or attribution of that commit. my $amend_code = defined $amend_file ? parse_amend_file $amend_file : {}; my @cmd = ('git', git_dir_option $srcdir, qw(log --log-size), '--pretty=format:%H:%ct %an <%ae>%n%n'.$format_string, @ARGV); open PIPE, '-|', @cmd or die ("$ME: failed to run '". quoted_cmd (@cmd) ."': $!\n" . "(Is your Git too old? Version 1.5.1 or later is required.)\n"); my $prev_multi_paragraph; my $prev_date_line = ''; my @prev_coauthors = (); my @skipshas = (); while (1) { defined (my $in = <PIPE>) or last; $in =~ /^log size (\d+)$/ or die "$ME:$.: Invalid line (expected log size):\n$in"; my $log_nbytes = $1; my $log; my $n_read = read PIPE, $log, $log_nbytes; $n_read == $log_nbytes or die "$ME:$.: unexpected EOF\n"; # Extract leading hash. my ($sha, $rest) = split ':', $log, 2; defined $sha or die "$ME:$.: malformed log entry\n"; $sha =~ /^[[:xdigit:]]{40}$/ or die "$ME:$.: invalid SHA1: $sha\n"; my $skipflag = 0; if (@skipshas) { foreach(@skipshas) { if ($sha =~ /^$_/) { $skipflag = $_; last; } } } # If this commit's log requires any transformation, do it now. my $code = $amend_code->{$sha}; if (defined $code) { eval 'use Safe'; my $s = new Safe; # Put the unpreprocessed entry into "$_". $_ = $rest; # Let $code operate on it, safely. my $r = $s->reval("$code") or die "$ME:$.:$sha: failed to eval \"$code\":\n$@\n"; # Note that we've used this entry. delete $amend_code->{$sha}; # Update $rest upon success. $rest = $_; } # Remove lines inserted by "git cherry-pick". if ($strip_cherry_pick) { $rest =~ s/^\s*Conflicts:\n.*//sm; $rest =~ s/^\s*\(cherry picked from commit [\da-f]+\)\n//m; } my @line = split /[ \t]*\n/, $rest; my $author_line = shift @line; defined $author_line or die "$ME:$.: unexpected EOF\n"; $author_line =~ /^(\d+) (.*>)$/ or die "$ME:$.: Invalid line " . "(expected date/author/email):\n$author_line\n"; # Format 'Copyright-paperwork-exempt: Yes' as a standard ChangeLog # `(tiny change)' annotation. my $tiny = (grep (/^(?:Copyright-paperwork-exempt|Tiny-change):\s+[Yy]es$/, @line) ? ' (tiny change)' : ''); my $date_line = sprintf "%s %s$tiny\n", strftime ("%Y-%m-%d", localtime ($1)), $2; my @coauthors = grep /^Co-authored-by:.*$/, @line; # Omit meta-data lines we've already interpreted. @line = grep !/^(?:Signed-off-by:[ ].*>$ |Co-authored-by:[ ] |Copyright-paperwork-exempt:[ ] |Tiny-change:[ ] )/x, @line; # Remove leading and trailing blank lines. if (@line) { while ($line[0] =~ /^\s*$/) { shift @line; } while ($line[$#line] =~ /^\s*$/) { pop @line; } } # Handle Emacs gitmerge.el "skipped" commits. # Yes, this should be controlled by an option. So sue me. if ( grep /^(; )?Merge from /, @line ) { my $found = 0; foreach (@line) { if (grep /^The following commit.*skipped:$/, $_) { $found = 1; ## Reset at each merge to reduce chance of false matches. @skipshas = (); next; } if ($found && $_ =~ /^([[:xdigit:]]{7,}) [^ ]/) { push ( @skipshas, $1 ); } } } # Ignore commits that match the --ignore-matching pattern, if specified. if (defined $ignore_matching && @line && $line[0] =~ /$ignore_matching/) { $skipflag = 1; } elsif ($skipflag) { ## Perhaps only warn if a pattern matches more than once? warn "$ME: warning: skipping $sha due to $skipflag\n"; } if (! $skipflag) { if (defined $ignore_line && @line) { @line = grep ! /$ignore_line/, @line; while ($line[$#line] =~ /^\s*$/) { pop @line; } } # Record whether there are two or more paragraphs. my $multi_paragraph = grep /^\s*$/, @line; # Format 'Co-authored-by: A U Thor <email@example.com>' lines in # standard multi-author ChangeLog format. for (@coauthors) { s/^Co-authored-by:\s*/\t /; s/\s*</ </; /<.*?@.*\..*>/ or warn "$ME: warning: missing email address for " . substr ($_, 5) . "\n"; } # If clustering of commit messages has been disabled, if this header # would be different from the previous date/name/etc. header, # or if this or the previous entry consists of two or more paragraphs, # then print the header. if ( ! $cluster || $date_line ne $prev_date_line || "@coauthors" ne "@prev_coauthors" || $multi_paragraph || $prev_multi_paragraph) { $prev_date_line eq '' or print "\n"; print $date_line; @coauthors and print join ("\n", @coauthors), "\n"; } $prev_date_line = $date_line; @prev_coauthors = @coauthors; $prev_multi_paragraph = $multi_paragraph; # If there were any lines if (@line == 0) { warn "$ME: warning: empty commit message:\n" . " commit $sha\n $date_line\n"; } else { if ($append_dot) { # If the first line of the message has enough room, then if (length $line[0] < 72) { # append a dot if there is no other punctuation or blank # at the end. $line[0] =~ /[[:punct:]\s]$/ or $line[0] .= '.'; } } # Remove one additional leading TAB from each line. $strip_tab and map { s/^\t// } @line; # Prefix each non-empty line with a TAB. @line = map { length $_ ? "\t$_" : '' } @line; print "\n", join ("\n", @line), "\n"; } } defined ($in = <PIPE>) or last; $in ne "\n" and die "$ME:$.: unexpected line:\n$in"; } close PIPE or die "$ME: error closing pipe from " . quoted_cmd (@cmd) . "\n"; # FIXME-someday: include $PROCESS_STATUS in the diagnostic # Complain about any unused entry in the --amend=F specified file. my $fail = 0; foreach my $sha (keys %$amend_code) { warn "$ME:$amend_file: unused entry: $sha\n"; $fail = 1; } exit $fail; } # Local Variables: # mode: perl # indent-tabs-mode: nil # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-line-limit: 50 # time-stamp-start: "my $VERSION = '" # time-stamp-format: "%:y-%02m-%02d %02H:%02M" # time-stamp-time-zone: "UTC0" # time-stamp-end: "'; # UTC" # End: ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/build-aux/ar-lib���������������������������������������������������������������������������0000755�0001750�0001750�00000013302�13456335207�015323� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Wrapper for Microsoft lib.exe me=ar-lib scriptversion=2012-03-01.08; # UTC # Copyright (C) 2010-2014 Free Software Foundation, Inc. # Written by Peter Rosin <peda@lysator.liu.se>. # # 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>. # func_error message func_error () { echo "$me: $1" 1>&2 exit 1 } file_conv= # func_file_conv build_file # Convert a $build file to $host form and store it in $file # Currently only supports Windows hosts. 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 in 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_at_file at_file operation archive # Iterate over all members in AT_FILE performing OPERATION on ARCHIVE # for each of them. # When interpreting the content of the @FILE, do NOT use func_file_conv, # since the user would need to supply preconverted file names to # binutils ar, at least for MinGW. func_at_file () { operation=$2 archive=$3 at_file_contents=`cat "$1"` eval set x "$at_file_contents" shift for member do $AR -NOLOGO $operation:"$member" "$archive" || exit $? done } case $1 in '') func_error "no command. Try '$0 --help' for more information." ;; -h | --h*) cat <<EOF Usage: $me [--help] [--version] PROGRAM ACTION ARCHIVE [MEMBER...] Members may be specified in a file named with @FILE. EOF exit $? ;; -v | --v*) echo "$me, version $scriptversion" exit $? ;; esac if test $# -lt 3; then func_error "you must specify a program, an action and an archive" fi AR=$1 shift while : do if test $# -lt 2; then func_error "you must specify a program, an action and an archive" fi case $1 in -lib | -LIB \ | -ltcg | -LTCG \ | -machine* | -MACHINE* \ | -subsystem* | -SUBSYSTEM* \ | -verbose | -VERBOSE \ | -wx* | -WX* ) AR="$AR $1" shift ;; *) action=$1 shift break ;; esac done orig_archive=$1 shift func_file_conv "$orig_archive" archive=$file # strip leading dash in $action action=${action#-} delete= extract= list= quick= replace= index= create= while test -n "$action" do case $action in d*) delete=yes ;; x*) extract=yes ;; t*) list=yes ;; q*) quick=yes ;; r*) replace=yes ;; s*) index=yes ;; S*) ;; # the index is always updated implicitly c*) create=yes ;; u*) ;; # TODO: don't ignore the update modifier v*) ;; # TODO: don't ignore the verbose modifier *) func_error "unknown action specified" ;; esac action=${action#?} done case $delete$extract$list$quick$replace,$index in yes,* | ,yes) ;; yesyes*) func_error "more than one action specified" ;; *) func_error "no action specified" ;; esac if test -n "$delete"; then if test ! -f "$orig_archive"; then func_error "archive not found" fi for member do case $1 in @*) func_at_file "${1#@}" -REMOVE "$archive" ;; *) func_file_conv "$1" $AR -NOLOGO -REMOVE:"$file" "$archive" || exit $? ;; esac done elif test -n "$extract"; then if test ! -f "$orig_archive"; then func_error "archive not found" fi if test $# -gt 0; then for member do case $1 in @*) func_at_file "${1#@}" -EXTRACT "$archive" ;; *) func_file_conv "$1" $AR -NOLOGO -EXTRACT:"$file" "$archive" || exit $? ;; esac done else $AR -NOLOGO -LIST "$archive" | sed -e 's/\\/\\\\/g' | while read member do $AR -NOLOGO -EXTRACT:"$member" "$archive" || exit $? done fi elif test -n "$quick$replace"; then if test ! -f "$orig_archive"; then if test -z "$create"; then echo "$me: creating $orig_archive" fi orig_archive= else orig_archive=$archive fi for member do case $1 in @*) func_file_conv "${1#@}" set x "$@" "@$file" ;; *) func_file_conv "$1" set x "$@" "$file" ;; esac shift shift done if test -n "$orig_archive"; then $AR -NOLOGO -OUT:"$archive" "$orig_archive" "$@" || exit $? else $AR -NOLOGO -OUT:"$archive" "$@" || exit $? fi elif test -n "$list"; then if test ! -f "$orig_archive"; then func_error "archive not found" fi $AR -NOLOGO -LIST "$archive" || exit $? fi ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/build-aux/config.sub�����������������������������������������������������������������������0000755�0001750�0001750�00000105752�14436424417�016226� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Configuration validation subroutine script. # Copyright 1992-2023 Free Software Foundation, Inc. # shellcheck disable=SC2006,SC2268 # see below for rationale timestamp='2023-01-21' # 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 <https://www.gnu.org/licenses/>. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This 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: # https://git.savannah.gnu.org/cgit/config.git/plain/config.sub # 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. # The "shellcheck disable" line above the timestamp inhibits complaints # about features and limitations of the classic Bourne shell that were # superseded or lifted in POSIX. However, this script identifies a wide # variety of pre-POSIX systems that do not have POSIX shells at all, and # even some reasonably current systems (Solaris 10 as case-in-point) still # have a pre-POSIX /bin/sh. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS Canonicalize a configuration name. Options: -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-2023 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 ;; *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 # Split fields of configuration type # shellcheck disable=SC2162 saved_IFS=$IFS IFS="-" read field1 field2 field3 field4 <<EOF $1 EOF IFS=$saved_IFS # Separate into logical components for further validation case $1 in *-*-*-*-*) echo Invalid configuration \`"$1"\': more than four components >&2 exit 1 ;; *-*-*-*) basic_machine=$field1-$field2 basic_os=$field3-$field4 ;; *-*-*) # Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two # parts maybe_os=$field2-$field3 case $maybe_os in nto-qnx* | linux-* | uclinux-uclibc* \ | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \ | netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \ | storm-chaos* | os2-emx* | rtmk-nova* | managarm-*) basic_machine=$field1 basic_os=$maybe_os ;; android-linux) basic_machine=$field1-unknown basic_os=linux-android ;; *) basic_machine=$field1-$field2 basic_os=$field3 ;; esac ;; *-*) # A lone config we happen to match not fitting any pattern case $field1-$field2 in decstation-3100) basic_machine=mips-dec basic_os= ;; *-*) # Second component is usually, but not always the OS case $field2 in # Prevent following clause from handling this valid os sun*os*) basic_machine=$field1 basic_os=$field2 ;; zephyr*) basic_machine=$field1-unknown basic_os=$field2 ;; # Manufacturers dec* | mips* | sequent* | encore* | pc533* | 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* | sim | cisco \ | oki | wec | wrs | winbond) basic_machine=$field1-$field2 basic_os= ;; *) basic_machine=$field1 basic_os=$field2 ;; esac ;; esac ;; *) # Convert single-component short-hands not valid as part of # multi-component configurations. case $field1 in 386bsd) basic_machine=i386-pc basic_os=bsd ;; a29khif) basic_machine=a29k-amd basic_os=udi ;; adobe68k) basic_machine=m68010-adobe basic_os=scout ;; alliant) basic_machine=fx80-alliant basic_os= ;; altos | altos3068) basic_machine=m68k-altos basic_os= ;; am29k) basic_machine=a29k-none basic_os=bsd ;; amdahl) basic_machine=580-amdahl basic_os=sysv ;; amiga) basic_machine=m68k-unknown basic_os= ;; amigaos | amigados) basic_machine=m68k-unknown basic_os=amigaos ;; amigaunix | amix) basic_machine=m68k-unknown basic_os=sysv4 ;; apollo68) basic_machine=m68k-apollo basic_os=sysv ;; apollo68bsd) basic_machine=m68k-apollo basic_os=bsd ;; aros) basic_machine=i386-pc basic_os=aros ;; aux) basic_machine=m68k-apple basic_os=aux ;; balance) basic_machine=ns32k-sequent basic_os=dynix ;; blackfin) basic_machine=bfin-unknown basic_os=linux ;; cegcc) basic_machine=arm-unknown basic_os=cegcc ;; convex-c1) basic_machine=c1-convex basic_os=bsd ;; convex-c2) basic_machine=c2-convex basic_os=bsd ;; convex-c32) basic_machine=c32-convex basic_os=bsd ;; convex-c34) basic_machine=c34-convex basic_os=bsd ;; convex-c38) basic_machine=c38-convex basic_os=bsd ;; cray) basic_machine=j90-cray basic_os=unicos ;; crds | unos) basic_machine=m68k-crds basic_os= ;; da30) basic_machine=m68k-da30 basic_os= ;; decstation | pmax | pmin | dec3100 | decstatn) basic_machine=mips-dec basic_os= ;; delta88) basic_machine=m88k-motorola basic_os=sysv3 ;; dicos) basic_machine=i686-pc basic_os=dicos ;; djgpp) basic_machine=i586-pc basic_os=msdosdjgpp ;; ebmon29k) basic_machine=a29k-amd basic_os=ebmon ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson basic_os=ose ;; gmicro) basic_machine=tron-gmicro basic_os=sysv ;; go32) basic_machine=i386-pc basic_os=go32 ;; h8300hms) basic_machine=h8300-hitachi basic_os=hms ;; h8300xray) basic_machine=h8300-hitachi basic_os=xray ;; h8500hms) basic_machine=h8500-hitachi basic_os=hms ;; harris) basic_machine=m88k-harris basic_os=sysv3 ;; hp300 | hp300hpux) basic_machine=m68k-hp basic_os=hpux ;; hp300bsd) basic_machine=m68k-hp basic_os=bsd ;; hppaosf) basic_machine=hppa1.1-hp basic_os=osf ;; hppro) basic_machine=hppa1.1-hp basic_os=proelf ;; i386mach) basic_machine=i386-mach basic_os=mach ;; isi68 | isi) basic_machine=m68k-isi basic_os=sysv ;; m68knommu) basic_machine=m68k-unknown basic_os=linux ;; magnum | m3230) basic_machine=mips-mips basic_os=sysv ;; merlin) basic_machine=ns32k-utek basic_os=sysv ;; mingw64) basic_machine=x86_64-pc basic_os=mingw64 ;; mingw32) basic_machine=i686-pc basic_os=mingw32 ;; mingw32ce) basic_machine=arm-unknown basic_os=mingw32ce ;; monitor) basic_machine=m68k-rom68k basic_os=coff ;; morphos) basic_machine=powerpc-unknown basic_os=morphos ;; moxiebox) basic_machine=moxie-unknown basic_os=moxiebox ;; msdos) basic_machine=i386-pc basic_os=msdos ;; msys) basic_machine=i686-pc basic_os=msys ;; mvs) basic_machine=i370-ibm basic_os=mvs ;; nacl) basic_machine=le32-unknown basic_os=nacl ;; ncr3000) basic_machine=i486-ncr basic_os=sysv4 ;; netbsd386) basic_machine=i386-pc basic_os=netbsd ;; netwinder) basic_machine=armv4l-rebel basic_os=linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony basic_os=newsos ;; news1000) basic_machine=m68030-sony basic_os=newsos ;; necv70) basic_machine=v70-nec basic_os=sysv ;; nh3000) basic_machine=m68k-harris basic_os=cxux ;; nh[45]000) basic_machine=m88k-harris basic_os=cxux ;; nindy960) basic_machine=i960-intel basic_os=nindy ;; mon960) basic_machine=i960-intel basic_os=mon960 ;; nonstopux) basic_machine=mips-compaq basic_os=nonstopux ;; os400) basic_machine=powerpc-ibm basic_os=os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson basic_os=ose ;; os68k) basic_machine=m68k-none basic_os=os68k ;; paragon) basic_machine=i860-intel basic_os=osf ;; parisc) basic_machine=hppa-unknown basic_os=linux ;; psp) basic_machine=mipsallegrexel-sony basic_os=psp ;; pw32) basic_machine=i586-unknown basic_os=pw32 ;; rdos | rdos64) basic_machine=x86_64-pc basic_os=rdos ;; rdos32) basic_machine=i386-pc basic_os=rdos ;; rom68k) basic_machine=m68k-rom68k basic_os=coff ;; sa29200) basic_machine=a29k-amd basic_os=udi ;; sei) basic_machine=mips-sei basic_os=seiux ;; sequent) basic_machine=i386-sequent basic_os= ;; sps7) basic_machine=m68k-bull basic_os=sysv2 ;; st2000) basic_machine=m68k-tandem basic_os= ;; stratus) basic_machine=i860-stratus basic_os=sysv4 ;; sun2) basic_machine=m68000-sun basic_os= ;; sun2os3) basic_machine=m68000-sun basic_os=sunos3 ;; sun2os4) basic_machine=m68000-sun basic_os=sunos4 ;; sun3) basic_machine=m68k-sun basic_os= ;; sun3os3) basic_machine=m68k-sun basic_os=sunos3 ;; sun3os4) basic_machine=m68k-sun basic_os=sunos4 ;; sun4) basic_machine=sparc-sun basic_os= ;; sun4os3) basic_machine=sparc-sun basic_os=sunos3 ;; sun4os4) basic_machine=sparc-sun basic_os=sunos4 ;; sun4sol2) basic_machine=sparc-sun basic_os=solaris2 ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun basic_os= ;; sv1) basic_machine=sv1-cray basic_os=unicos ;; symmetry) basic_machine=i386-sequent basic_os=dynix ;; t3e) basic_machine=alphaev5-cray basic_os=unicos ;; t90) basic_machine=t90-cray basic_os=unicos ;; toad1) basic_machine=pdp10-xkl basic_os=tops20 ;; tpf) basic_machine=s390x-ibm basic_os=tpf ;; udi29k) basic_machine=a29k-amd basic_os=udi ;; ultra3) basic_machine=a29k-nyu basic_os=sym1 ;; v810 | necv810) basic_machine=v810-nec basic_os=none ;; vaxv) basic_machine=vax-dec basic_os=sysv ;; vms) basic_machine=vax-dec basic_os=vms ;; vsta) basic_machine=i386-pc basic_os=vsta ;; vxworks960) basic_machine=i960-wrs basic_os=vxworks ;; vxworks68) basic_machine=m68k-wrs basic_os=vxworks ;; vxworks29k) basic_machine=a29k-wrs basic_os=vxworks ;; xbox) basic_machine=i686-pc basic_os=mingw32 ;; ymp) basic_machine=ymp-cray basic_os=unicos ;; *) basic_machine=$1 basic_os= ;; esac ;; esac # Decode 1-component or ad-hoc basic machines case $basic_machine in # 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) cpu=hppa1.1 vendor=winbond ;; op50n) cpu=hppa1.1 vendor=oki ;; op60c) cpu=hppa1.1 vendor=oki ;; ibm*) cpu=i370 vendor=ibm ;; orion105) cpu=clipper vendor=highlevel ;; mac | mpw | mac-mpw) cpu=m68k vendor=apple ;; pmac | pmac-mpw) cpu=powerpc vendor=apple ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) cpu=m68000 vendor=att ;; 3b*) cpu=we32k vendor=att ;; bluegene*) cpu=powerpc vendor=ibm basic_os=cnk ;; decsystem10* | dec10*) cpu=pdp10 vendor=dec basic_os=tops10 ;; decsystem20* | dec20*) cpu=pdp10 vendor=dec basic_os=tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) cpu=m68k vendor=motorola ;; dpx2*) cpu=m68k vendor=bull basic_os=sysv3 ;; encore | umax | mmax) cpu=ns32k vendor=encore ;; elxsi) cpu=elxsi vendor=elxsi basic_os=${basic_os:-bsd} ;; fx2800) cpu=i860 vendor=alliant ;; genix) cpu=ns32k vendor=ns ;; h3050r* | hiux*) cpu=hppa1.1 vendor=hitachi basic_os=hiuxwe2 ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) cpu=m68000 vendor=hp ;; hp9k3[2-9][0-9]) cpu=m68k vendor=hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) cpu=hppa1.1 vendor=hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp cpu=hppa1.1 vendor=hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp cpu=hppa1.1 vendor=hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) cpu=hppa1.1 vendor=hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; i*86v32) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=sysv32 ;; i*86v4*) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=sysv4 ;; i*86v) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=sysv ;; i*86sol2) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=solaris2 ;; j90 | j90-cray) cpu=j90 vendor=cray basic_os=${basic_os:-unicos} ;; iris | iris4d) cpu=mips vendor=sgi case $basic_os in irix*) ;; *) basic_os=irix4 ;; esac ;; miniframe) cpu=m68000 vendor=convergent ;; *mint | mint[0-9]* | *MiNT | *MiNT[0-9]*) cpu=m68k vendor=atari basic_os=mint ;; news-3600 | risc-news) cpu=mips vendor=sony basic_os=newsos ;; next | m*-next) cpu=m68k vendor=next case $basic_os in openstep*) ;; nextstep*) ;; ns2*) basic_os=nextstep2 ;; *) basic_os=nextstep3 ;; esac ;; np1) cpu=np1 vendor=gould ;; op50n-* | op60c-*) cpu=hppa1.1 vendor=oki basic_os=proelf ;; pa-hitachi) cpu=hppa1.1 vendor=hitachi basic_os=hiuxwe2 ;; pbd) cpu=sparc vendor=tti ;; pbb) cpu=m68k vendor=tti ;; pc532) cpu=ns32k vendor=pc532 ;; pn) cpu=pn vendor=gould ;; power) cpu=power vendor=ibm ;; ps2) cpu=i386 vendor=ibm ;; rm[46]00) cpu=mips vendor=siemens ;; rtpc | rtpc-*) cpu=romp vendor=ibm ;; sde) cpu=mipsisa32 vendor=sde basic_os=${basic_os:-elf} ;; simso-wrs) cpu=sparclite vendor=wrs basic_os=vxworks ;; tower | tower-32) cpu=m68k vendor=ncr ;; vpp*|vx|vx-*) cpu=f301 vendor=fujitsu ;; w65) cpu=w65 vendor=wdc ;; w89k-*) cpu=hppa1.1 vendor=winbond basic_os=proelf ;; none) cpu=none vendor=none ;; leon|leon[3-9]) cpu=sparc vendor=$basic_machine ;; leon-*|leon[3-9]-*) cpu=sparc vendor=`echo "$basic_machine" | sed 's/-.*//'` ;; *-*) # shellcheck disable=SC2162 saved_IFS=$IFS IFS="-" read cpu vendor <<EOF $basic_machine EOF IFS=$saved_IFS ;; # 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) cpu=$basic_machine vendor=pc ;; # These rules are duplicated from below for sake of the special case above; # i.e. things that normalized to x86 arches should also default to "pc" pc98) cpu=i386 vendor=pc ;; x64 | amd64) cpu=x86_64 vendor=pc ;; # Recognize the basic CPU types without company name. *) cpu=$basic_machine vendor=unknown ;; esac unset -v basic_machine # Decode basic machines in the full and proper CPU-Company form. case $cpu-$vendor in # Here we handle the default manufacturer of certain CPU types in canonical form. It is in # some cases the only manufacturer, in others, it is the most popular. craynv-unknown) vendor=cray basic_os=${basic_os:-unicosmp} ;; c90-unknown | c90-cray) vendor=cray basic_os=${Basic_os:-unicos} ;; fx80-unknown) vendor=alliant ;; romp-unknown) vendor=ibm ;; mmix-unknown) vendor=knuth ;; microblaze-unknown | microblazeel-unknown) vendor=xilinx ;; rs6000-unknown) vendor=ibm ;; vax-unknown) vendor=dec ;; pdp11-unknown) vendor=dec ;; we32k-unknown) vendor=att ;; cydra-unknown) vendor=cydrome ;; i370-ibm*) vendor=ibm ;; orion-unknown) vendor=highlevel ;; xps-unknown | xps100-unknown) cpu=xps100 vendor=honeywell ;; # Here we normalize CPU types with a missing or matching vendor armh-unknown | armh-alt) cpu=armv7l vendor=alt basic_os=${basic_os:-linux-gnueabihf} ;; dpx20-unknown | dpx20-bull) cpu=rs6000 vendor=bull basic_os=${basic_os:-bosx} ;; # Here we normalize CPU types irrespective of the vendor amd64-*) cpu=x86_64 ;; blackfin-*) cpu=bfin basic_os=linux ;; c54x-*) cpu=tic54x ;; c55x-*) cpu=tic55x ;; c6x-*) cpu=tic6x ;; e500v[12]-*) cpu=powerpc basic_os=${basic_os}"spe" ;; mips3*-*) cpu=mips64 ;; ms1-*) cpu=mt ;; m68knommu-*) cpu=m68k basic_os=linux ;; m9s12z-* | m68hcs12z-* | hcs12z-* | s12z-*) cpu=s12z ;; openrisc-*) cpu=or32 ;; parisc-*) cpu=hppa basic_os=linux ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) cpu=i586 ;; pentiumpro-* | p6-* | 6x86-* | athlon-* | athlon_*-*) cpu=i686 ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) cpu=i686 ;; pentium4-*) cpu=i786 ;; pc98-*) cpu=i386 ;; ppc-* | ppcbe-*) cpu=powerpc ;; ppcle-* | powerpclittle-*) cpu=powerpcle ;; ppc64-*) cpu=powerpc64 ;; ppc64le-* | powerpc64little-*) cpu=powerpc64le ;; sb1-*) cpu=mipsisa64sb1 ;; sb1el-*) cpu=mipsisa64sb1el ;; sh5e[lb]-*) cpu=`echo "$cpu" | sed 's/^\(sh.\)e\(.\)$/\1\2e/'` ;; spur-*) cpu=spur ;; strongarm-* | thumb-*) cpu=arm ;; tx39-*) cpu=mipstx39 ;; tx39el-*) cpu=mipstx39el ;; x64-*) cpu=x86_64 ;; xscale-* | xscalee[bl]-*) cpu=`echo "$cpu" | sed 's/^xscale/arm/'` ;; arm64-* | aarch64le-*) cpu=aarch64 ;; # Recognize the canonical CPU Types that limit and/or modify the # company names they are paired with. cr16-*) basic_os=${basic_os:-elf} ;; crisv32-* | etraxfs*-*) cpu=crisv32 vendor=axis ;; cris-* | etrax*-*) cpu=cris vendor=axis ;; crx-*) basic_os=${basic_os:-elf} ;; neo-tandem) cpu=neo vendor=tandem ;; nse-tandem) cpu=nse vendor=tandem ;; nsr-tandem) cpu=nsr vendor=tandem ;; nsv-tandem) cpu=nsv vendor=tandem ;; nsx-tandem) cpu=nsx vendor=tandem ;; mipsallegrexel-sony) cpu=mipsallegrexel vendor=sony ;; tile*-*) basic_os=${basic_os:-linux-gnu} ;; *) # Recognize the canonical CPU types that are allowed with any # company name. case $cpu in 1750a | 580 \ | a29k \ | aarch64 | aarch64_be \ | abacus \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] \ | alphapca5[67] | alpha64pca5[67] \ | am33_2.0 \ | amdgcn \ | arc | arceb | arc32 | arc64 \ | arm | arm[lb]e | arme[lb] | armv* \ | avr | avr32 \ | asmjs \ | ba \ | be32 | be64 \ | bfin | bpf | bs2000 \ | c[123]* | c30 | [cjt]90 | c4x \ | c8051 | clipper | craynv | csky | cydra \ | d10v | d30v | dlx | dsp16xx \ | e2k | elxsi | epiphany \ | f30[01] | f700 | fido | fr30 | frv | ft32 | fx80 \ | h8300 | h8500 \ | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i*86 | i860 | i960 | ia16 | ia64 \ | ip2k | iq2000 \ | k1om \ | le32 | le64 \ | lm32 \ | loongarch32 | loongarch64 \ | m32c | m32r | m32rle \ | m5200 | m68000 | m680[012346]0 | m68360 | m683?2 | m68k \ | m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x \ | m88110 | m88k | maxq | mb | mcore | mep | metag \ | microblaze | microblazeel \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64eb | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa32r3 | mipsisa32r3el \ | mipsisa32r5 | mipsisa32r5el \ | mipsisa32r6 | mipsisa32r6el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64r3 | mipsisa64r3el \ | mipsisa64r5 | mipsisa64r5el \ | mipsisa64r6 | mipsisa64r6el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipsr5900 | mipsr5900el \ | mipstx39 | mipstx39el \ | mmix \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nfp \ | nios | nios2 | nios2eb | nios2el \ | none | np1 | ns16k | ns32k | nvptx \ | open8 \ | or1k* \ | or32 \ | orion \ | picochip \ | pdp10 | pdp11 | pj | pjl | pn | power \ | powerpc | powerpc64 | powerpc64le | powerpcle | powerpcspe \ | pru \ | pyramid \ | riscv | riscv32 | riscv32be | riscv64 | riscv64be \ | rl78 | romp | rs6000 | rx \ | s390 | s390x \ | score \ | sh | shl \ | sh[1234] | sh[24]a | sh[24]ae[lb] | sh[23]e | she[lb] | sh[lb]e \ | sh[1234]e[lb] | sh[12345][lb]e | sh[23]ele | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet \ | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v | sv1 | sx* \ | spu \ | tahoe \ | thumbv7* \ | tic30 | tic4x | tic54x | tic55x | tic6x | tic80 \ | tron \ | ubicom32 \ | v70 | v850 | v850e | v850e1 | v850es | v850e2 | v850e2v3 \ | vax \ | visium \ | w65 \ | wasm32 | wasm64 \ | we32k \ | x86 | x86_64 | xc16x | xgate | xps100 \ | xstormy16 | xtensa* \ | ymp \ | z8k | z80) ;; *) echo Invalid configuration \`"$1"\': machine \`"$cpu-$vendor"\' not recognized 1>&2 exit 1 ;; esac ;; esac # Here we canonicalize certain aliases for manufacturers. case $vendor in digital*) vendor=dec ;; commodore*) vendor=cbm ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if test x$basic_os != x then # First recognize some ad-hoc cases, or perhaps split kernel-os, or else just # set os. case $basic_os in gnu/linux*) kernel=linux os=`echo "$basic_os" | sed -e 's|gnu/linux|gnu|'` ;; os2-emx) kernel=os2 os=`echo "$basic_os" | sed -e 's|os2-emx|emx|'` ;; nto-qnx*) kernel=nto os=`echo "$basic_os" | sed -e 's|nto-qnx|qnx|'` ;; *-*) # shellcheck disable=SC2162 saved_IFS=$IFS IFS="-" read kernel os <<EOF $basic_os EOF IFS=$saved_IFS ;; # Default OS when just kernel was specified nto*) kernel=nto os=`echo "$basic_os" | sed -e 's|nto|qnx|'` ;; linux*) kernel=linux os=`echo "$basic_os" | sed -e 's|linux|gnu|'` ;; managarm*) kernel=managarm os=`echo "$basic_os" | sed -e 's|managarm|mlibc|'` ;; *) kernel= os=$basic_os ;; esac # Now, normalize the OS (knowing we just have one component, it's not a kernel, # etc.) 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 ;; bluegene*) os=cnk ;; solaris1 | solaris1.*) os=`echo "$os" | sed -e 's|solaris1|sunos4|'` ;; solaris) os=solaris2 ;; unixware*) os=sysv4.2uw ;; # es1800 is here to avoid being matched by es* (a different OS) es1800*) os=ose ;; # Some version numbers need modification chorusos*) os=chorusos ;; isc) os=isc2.2 ;; sco6) os=sco5v6 ;; sco5) os=sco3.2v5 ;; sco4) os=sco3.2v4 ;; sco3.2.[4-9]*) os=`echo "$os" | sed -e 's/sco3.2./sco3.2v/'` ;; sco*v* | scout) # Don't match below ;; sco*) os=sco3.2v2 ;; psos*) os=psos ;; qnx*) os=qnx ;; hiux*) os=hiuxwe2 ;; lynx*178) os=lynxos178 ;; lynx*5) os=lynxos5 ;; lynxos*) # don't get caught up in next wildcard ;; lynx*) os=lynxos ;; mac[0-9]*) os=`echo "$os" | sed -e 's|mac|macos|'` ;; opened*) os=openedition ;; os400*) os=os400 ;; sunos5*) os=`echo "$os" | sed -e 's|sunos5|solaris2|'` ;; sunos6*) os=`echo "$os" | sed -e 's|sunos6|solaris3|'` ;; wince*) os=wince ;; 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 ;; # 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 ;; ose*) os=ose ;; *mint | mint[0-9]* | *MiNT | MiNT[0-9]*) os=mint ;; dicos*) os=dicos ;; pikeos*) # Until real need of OS specific support for # particular features comes up, bare metal # configurations are quite functional. case $cpu in arm*) os=eabi ;; *) os=elf ;; esac ;; *) # No normalization, but not necessarily accepted, that comes below. ;; 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. kernel= case $cpu-$vendor in score-*) os=elf ;; spu-*) os=elf ;; *-acorn) os=riscix1.2 ;; arm*-rebel) kernel=linux os=gnu ;; arm*-semi) os=aout ;; c4x-* | tic4x-*) os=coff ;; c8051-*) os=elf ;; clipper-intergraph) os=clix ;; 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 ;; pru-*) os=elf ;; *-be) os=beos ;; *-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 ;; *-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 ;; *-wrs) os=vxworks ;; *) os=none ;; esac fi # Now, validate our (potentially fixed-up) OS. case $os in # Sometimes we do "kernel-libc", so those need to count as OSes. musl* | newlib* | relibc* | uclibc*) ;; # Likewise for "kernel-abi" eabi* | gnueabi*) ;; # VxWorks passes extra cpu info in the 4th filed. simlinux | simwindows | spe) ;; # Now accept the basic system types. # The portable systems comes first. # Each alternative MUST end in a * to match a version number. gnu* | android* | bsd* | mach* | minix* | genix* | ultrix* | irix* \ | *vms* | esix* | aix* | cnk* | sunos | sunos[34]* \ | hpux* | unos* | osf* | luna* | dgux* | auroraux* | solaris* \ | sym* | plan9* | psp* | sim* | xray* | os68k* | v88r* \ | hiux* | abug | nacl* | netware* | windows* \ | os9* | macos* | osx* | ios* \ | mpw* | magic* | mmixware* | mon960* | lnews* \ | amigaos* | amigados* | msdos* | newsos* | unicos* | aof* \ | aos* | aros* | cloudabi* | sortix* | twizzler* \ | nindy* | vxsim* | vxworks* | ebmon* | hms* | mvs* \ | clix* | riscos* | uniplus* | iris* | isc* | rtu* | xenix* \ | mirbsd* | netbsd* | dicos* | openedition* | ose* \ | bitrig* | openbsd* | secbsd* | solidbsd* | libertybsd* | os108* \ | ekkobsd* | freebsd* | riscix* | lynxos* | os400* \ | bosx* | nextstep* | cxux* | aout* | elf* | oabi* \ | ptx* | coff* | ecoff* | winnt* | domain* | vsta* \ | udi* | lites* | ieee* | go32* | aux* | hcos* \ | chorusrdb* | cegcc* | glidix* | serenity* \ | cygwin* | msys* | pe* | moss* | proelf* | rtems* \ | midipix* | mingw32* | mingw64* | mint* \ | uxpv* | beos* | mpeix* | udk* | moxiebox* \ | interix* | uwin* | mks* | rhapsody* | darwin* \ | openstep* | oskit* | conix* | pw32* | nonstopux* \ | storm-chaos* | tops10* | tenex* | tops20* | its* \ | os2* | vos* | palmos* | uclinux* | nucleus* | morphos* \ | scout* | superux* | sysv* | rtmk* | tpf* | windiss* \ | powermax* | dnix* | nx6 | nx7 | sei* | dragonfly* \ | skyos* | haiku* | rdos* | toppers* | drops* | es* \ | onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \ | midnightbsd* | amdhsa* | unleashed* | emscripten* | wasi* \ | nsk* | powerunix* | genode* | zvmoe* | qnx* | emx* | zephyr* \ | fiwix* | mlibc* ) ;; # This one is extra strict with allowed versions sco3.2v2 | sco3.2v[4-9]* | sco5v6*) # Don't forget version if it is 3.2v4 or newer. ;; none) ;; kernel* ) # Restricted further below ;; *) echo Invalid configuration \`"$1"\': OS \`"$os"\' not recognized 1>&2 exit 1 ;; esac # As a final step for OS-related things, validate the OS-kernel combination # (given a valid OS), if there is a kernel. case $kernel-$os in linux-gnu* | linux-dietlibc* | linux-android* | linux-newlib* \ | linux-musl* | linux-relibc* | linux-uclibc* | linux-mlibc* ) ;; uclinux-uclibc* ) ;; managarm-mlibc* | managarm-kernel* ) ;; -dietlibc* | -newlib* | -musl* | -relibc* | -uclibc* | -mlibc* ) # These are just libc implementations, not actual OSes, and thus # require a kernel. echo "Invalid configuration \`$1': libc \`$os' needs explicit kernel." 1>&2 exit 1 ;; -kernel* ) echo "Invalid configuration \`$1': \`$os' needs explicit kernel." 1>&2 exit 1 ;; *-kernel* ) echo "Invalid configuration \`$1': \`$kernel' does not support \`$os'." 1>&2 exit 1 ;; kfreebsd*-gnu* | kopensolaris*-gnu*) ;; vxworks-simlinux | vxworks-simwindows | vxworks-spe) ;; nto-qnx*) ;; os2-emx) ;; *-eabi* | *-gnueabi*) ;; -*) # Blank kernel with real OS is always fine. ;; *-*) echo "Invalid configuration \`$1': Kernel \`$kernel' not known to work with OS \`$os'." 1>&2 exit 1 ;; esac # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. case $vendor in unknown) case $cpu-$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 ;; *-clix*) vendor=intergraph ;; *-mvs* | *-opened*) vendor=ibm ;; *-os400*) vendor=ibm ;; s390-* | s390x-*) 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 ;; esac echo "$cpu-$vendor-${kernel:+$kernel-}$os" exit # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: ����������������������rush-2.4/build-aux/ylwrap���������������������������������������������������������������������������0000755�0001750�0001750�00000015314�14635353546�015506� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # ylwrap - wrapper for lex/yacc invocations. scriptversion=2018-03-07.03; # UTC # Copyright (C) 1996-2021 Free Software Foundation, Inc. # # Written by Tom Tromey <tromey@cygnus.com>. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <https://www.gnu.org/licenses/>. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to <bug-automake@gnu.org> or send patches to # <automake-patches@gnu.org>. 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 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/build-aux/depcomp��������������������������������������������������������������������������0000755�0001750�0001750�00000055776�14436424417�015632� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2022-09-18.14; # UTC # Copyright (C) 1999-2023 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 <https://www.gnu.org/licenses/>. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # 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 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 obsolete 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 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: ��rush-2.4/build-aux/config.guess���������������������������������������������������������������������0000755�0001750�0001750�00000141422�14436424417�016555� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2023 Free Software Foundation, Inc. # shellcheck disable=SC2006,SC2268 # see below for rationale timestamp='2023-01-01' # 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 <https://www.gnu.org/licenses/>. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This 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: # https://git.savannah.gnu.org/cgit/config.git/plain/config.guess # # Please send patches to <config-patches@gnu.org>. # The "shellcheck disable" line above the timestamp inhibits complaints # about features and limitations of the classic Bourne shell that were # superseded or lifted in POSIX. However, this script identifies a wide # variety of pre-POSIX systems that do not have POSIX shells at all, and # even some reasonably current systems (Solaris 10 as case-in-point) still # have a pre-POSIX /bin/sh. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Options: -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-2023 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 # Just in case it came from the environment. GUESS= # 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. tmp= # shellcheck disable=SC2172 trap 'test -z "$tmp" || rm -fr "$tmp"' 0 1 2 13 15 set_cc_for_build() { # prevent multiple calls if $tmp is already set test "$tmp" && return 0 : "${TMPDIR=/tmp}" # shellcheck disable=SC2039,SC3028 { 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" 2>/dev/null) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir "$tmp" 2>/dev/null) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } dummy=$tmp/dummy case ${CC_FOR_BUILD-},${HOST_CC-},${CC-} in ,,) echo "int x;" > "$dummy.c" for driver in cc gcc c89 c99 ; do if ($driver -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then CC_FOR_BUILD=$driver 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 } # 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 ; 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/*) LIBC=unknown set_cc_for_build cat <<-EOF > "$dummy.c" #include <features.h> #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #elif defined(__GLIBC__) LIBC=gnu #else #include <stdarg.h> /* First heuristic to detect musl libc. */ #ifdef __DEFINED_va_list LIBC=musl #endif #endif EOF cc_set_libc=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` eval "$cc_set_libc" # Second heuristic to detect musl libc. if [ "$LIBC" = unknown ] && command -v ldd >/dev/null && ldd --version 2>&1 | grep -q ^musl; then LIBC=musl fi # If the system lacks a compiler, then just pick glibc. # We could probably try harder. if [ "$LIBC" = unknown ]; then LIBC=gnu fi ;; 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". UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ /sbin/sysctl -n hw.machine_arch 2>/dev/null || \ /usr/sbin/sysctl -n hw.machine_arch 2>/dev/null || \ echo unknown)` case $UNAME_MACHINE_ARCH in aarch64eb) machine=aarch64_be-unknown ;; armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; earmv*) arch=`echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,'` endian=`echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p'` machine=${arch}${endian}-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) and ABI. case $UNAME_MACHINE_ARCH in earm*) os=netbsdelf ;; arm*|i386|m68k|ns32k|sh3*|sparc|vax) 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 # Determine ABI tags. case $UNAME_MACHINE_ARCH in earm*) expr='s/^earmv[0-9]/-eabi/;s/eb$//' abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"` ;; 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/[-_].*//' | cut -d. -f1,2` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. GUESS=$machine-${os}${release}${abi-} ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-bitrig$UNAME_RELEASE ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-openbsd$UNAME_RELEASE ;; *:SecBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/SecBSD.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-secbsd$UNAME_RELEASE ;; *:LibertyBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-libertybsd$UNAME_RELEASE ;; *:MidnightBSD:*:*) GUESS=$UNAME_MACHINE-unknown-midnightbsd$UNAME_RELEASE ;; *:ekkoBSD:*:*) GUESS=$UNAME_MACHINE-unknown-ekkobsd$UNAME_RELEASE ;; *:SolidBSD:*:*) GUESS=$UNAME_MACHINE-unknown-solidbsd$UNAME_RELEASE ;; *:OS108:*:*) GUESS=$UNAME_MACHINE-unknown-os108_$UNAME_RELEASE ;; macppc:MirBSD:*:*) GUESS=powerpc-unknown-mirbsd$UNAME_RELEASE ;; *:MirBSD:*:*) GUESS=$UNAME_MACHINE-unknown-mirbsd$UNAME_RELEASE ;; *:Sortix:*:*) GUESS=$UNAME_MACHINE-unknown-sortix ;; *:Twizzler:*:*) GUESS=$UNAME_MACHINE-unknown-twizzler ;; *:Redox:*:*) GUESS=$UNAME_MACHINE-unknown-redox ;; mips:OSF1:*.*) GUESS=mips-dec-osf1 ;; alpha:OSF1:*:*) # Reset EXIT trap before exiting to avoid spurious non-zero exit code. trap '' 0 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. OSF_REL=`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` GUESS=$UNAME_MACHINE-dec-osf$OSF_REL ;; Amiga*:UNIX_System_V:4.0:*) GUESS=m68k-unknown-sysv4 ;; *:[Aa]miga[Oo][Ss]:*:*) GUESS=$UNAME_MACHINE-unknown-amigaos ;; *:[Mm]orph[Oo][Ss]:*:*) GUESS=$UNAME_MACHINE-unknown-morphos ;; *:OS/390:*:*) GUESS=i370-ibm-openedition ;; *:z/VM:*:*) GUESS=s390-ibm-zvmoe ;; *:OS400:*:*) GUESS=powerpc-ibm-os400 ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) GUESS=arm-acorn-riscix$UNAME_RELEASE ;; arm*:riscos:*:*|arm*:RISCOS:*:*) GUESS=arm-unknown-riscos ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) GUESS=hppa1.1-hitachi-hiuxmpp ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. case `(/bin/universe) 2>/dev/null` in att) GUESS=pyramid-pyramid-sysv3 ;; *) GUESS=pyramid-pyramid-bsd ;; esac ;; NILE*:*:*:dcosx) GUESS=pyramid-pyramid-svr4 ;; DRS?6000:unix:4.0:6*) GUESS=sparc-icl-nx6 ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) GUESS=sparc-icl-nx7 ;; esac ;; s390x:SunOS:*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=$UNAME_MACHINE-ibm-solaris2$SUN_REL ;; sun4H:SunOS:5.*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=sparc-hal-solaris2$SUN_REL ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=sparc-sun-solaris2$SUN_REL ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) GUESS=i386-pc-auroraux$UNAME_RELEASE ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) 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 test "$CC_FOR_BUILD" != no_compiler_found; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -m64 -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH=x86_64 fi fi SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=$SUN_ARCH-pc-solaris2$SUN_REL ;; 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. SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=sparc-sun-solaris3$SUN_REL ;; 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'. SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/'` GUESS=sparc-sun-sunos$SUN_REL ;; sun3*:SunOS:*:*) GUESS=m68k-sun-sunos$UNAME_RELEASE ;; 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) GUESS=m68k-sun-sunos$UNAME_RELEASE ;; sun4) GUESS=sparc-sun-sunos$UNAME_RELEASE ;; esac ;; aushp:SunOS:*:*) GUESS=sparc-auspex-sunos$UNAME_RELEASE ;; # 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:*:*) GUESS=m68k-atari-mint$UNAME_RELEASE ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) GUESS=m68k-atari-mint$UNAME_RELEASE ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) GUESS=m68k-atari-mint$UNAME_RELEASE ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) GUESS=m68k-milan-mint$UNAME_RELEASE ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) GUESS=m68k-hades-mint$UNAME_RELEASE ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) GUESS=m68k-unknown-mint$UNAME_RELEASE ;; m68k:machten:*:*) GUESS=m68k-apple-machten$UNAME_RELEASE ;; powerpc:machten:*:*) GUESS=powerpc-apple-machten$UNAME_RELEASE ;; RISC*:Mach:*:*) GUESS=mips-dec-mach_bsd4.3 ;; RISC*:ULTRIX:*:*) GUESS=mips-dec-ultrix$UNAME_RELEASE ;; VAX*:ULTRIX*:*:*) GUESS=vax-dec-ultrix$UNAME_RELEASE ;; 2020:CLIX:*:* | 2430:CLIX:*:*) GUESS=clipper-intergraph-clix$UNAME_RELEASE ;; mips:*:*:UMIPS | mips:*:*:RISCos) 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; } GUESS=mips-mips-riscos$UNAME_RELEASE ;; Motorola:PowerMAX_OS:*:*) GUESS=powerpc-motorola-powermax ;; Motorola:*:4.3:PL8-*) GUESS=powerpc-harris-powermax ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) GUESS=powerpc-harris-powermax ;; Night_Hawk:Power_UNIX:*:*) GUESS=powerpc-harris-powerunix ;; m88k:CX/UX:7*:*) GUESS=m88k-harris-cxux7 ;; m88k:*:4*:R4*) GUESS=m88k-motorola-sysv4 ;; m88k:*:3*:R3*) GUESS=m88k-motorola-sysv3 ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if test "$UNAME_PROCESSOR" = mc88100 || test "$UNAME_PROCESSOR" = mc88110 then if test "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx || \ test "$TARGET_BINARY_INTERFACE"x = x then GUESS=m88k-dg-dgux$UNAME_RELEASE else GUESS=m88k-dg-dguxbcs$UNAME_RELEASE fi else GUESS=i586-dg-dgux$UNAME_RELEASE fi ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) GUESS=m88k-dolphin-sysv3 ;; M88*:*:R3*:*) # Delta 88k system running SVR3 GUESS=m88k-motorola-sysv3 ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) GUESS=m88k-tektronix-sysv3 ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) GUESS=m68k-tektronix-bsd ;; *:IRIX*:*:*) IRIX_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/g'` GUESS=mips-sgi-irix$IRIX_REL ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. GUESS=romp-ibm-aix # uname -m gives an 8 hex-code CPU id ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) GUESS=i386-ibm-aix ;; ia64:AIX:*:*) if test -x /usr/bin/oslevel ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=$UNAME_VERSION.$UNAME_RELEASE fi GUESS=$UNAME_MACHINE-ibm-aix$IBM_REV ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then 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 GUESS=$SYSTEM_NAME else GUESS=rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then GUESS=rs6000-ibm-aix3.2.4 else GUESS=rs6000-ibm-aix3.2 fi ;; *: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 test -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 GUESS=$IBM_ARCH-ibm-aix$IBM_REV ;; *:AIX:*:*) GUESS=rs6000-ibm-aix ;; ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*) GUESS=romp-ibm-bsd4.4 ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and GUESS=romp-ibm-bsd$UNAME_RELEASE # 4.3 with uname added to ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) GUESS=rs6000-bull-bosx ;; DPX/2?00:B.O.S.:*:*) GUESS=m68k-bull-sysv3 ;; 9000/[34]??:4.3bsd:1.*:*) GUESS=m68k-hp-bsd ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) GUESS=m68k-hp-bsd4.4 ;; 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 test -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 test "$HP_ARCH" = ""; then 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 test "$HP_ARCH" = hppa2.0w then 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 GUESS=$HP_ARCH-hp-hpux$HPUX_REV ;; ia64:HP-UX:*:*) HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'` GUESS=ia64-hp-hpux$HPUX_REV ;; 3050*:HI-UX:*:*) 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; } GUESS=unknown-hitachi-hiuxwe2 ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*) GUESS=hppa1.1-hp-bsd ;; 9000/8??:4.3bsd:*:*) GUESS=hppa1.0-hp-bsd ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) GUESS=hppa1.0-hp-mpeix ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*) GUESS=hppa1.1-hp-osf ;; hp8??:OSF1:*:*) GUESS=hppa1.0-hp-osf ;; i*86:OSF1:*:*) if test -x /usr/sbin/sysversion ; then GUESS=$UNAME_MACHINE-unknown-osf1mk else GUESS=$UNAME_MACHINE-unknown-osf1 fi ;; parisc*:Lites*:*:*) GUESS=hppa1.1-hp-lites ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) GUESS=c1-convex-bsd ;; 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*:*) GUESS=c34-convex-bsd ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) GUESS=c38-convex-bsd ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) GUESS=c4-convex-bsd ;; CRAY*Y-MP:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=ymp-cray-unicos$CRAY_REL ;; 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:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=t90-cray-unicos$CRAY_REL ;; CRAY*T3E:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=alphaev5-cray-unicosmk$CRAY_REL ;; CRAY*SV1:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=sv1-cray-unicos$CRAY_REL ;; *:UNICOS/mp:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=craynv-cray-unicosmp$CRAY_REL ;; 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/ /_/'` GUESS=${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL} ;; 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/ /_/'` GUESS=sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL} ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) GUESS=$UNAME_MACHINE-pc-bsdi$UNAME_RELEASE ;; sparc*:BSD/OS:*:*) GUESS=sparc-unknown-bsdi$UNAME_RELEASE ;; *:BSD/OS:*:*) GUESS=$UNAME_MACHINE-unknown-bsdi$UNAME_RELEASE ;; arm:FreeBSD:*:*) UNAME_PROCESSOR=`uname -p` set_cc_for_build if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabi else FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabihf fi ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case $UNAME_PROCESSOR in amd64) UNAME_PROCESSOR=x86_64 ;; i386) UNAME_PROCESSOR=i586 ;; esac FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL ;; i*:CYGWIN*:*) GUESS=$UNAME_MACHINE-pc-cygwin ;; *:MINGW64*:*) GUESS=$UNAME_MACHINE-pc-mingw64 ;; *:MINGW*:*) GUESS=$UNAME_MACHINE-pc-mingw32 ;; *:MSYS*:*) GUESS=$UNAME_MACHINE-pc-msys ;; i*:PW*:*) GUESS=$UNAME_MACHINE-pc-pw32 ;; *:SerenityOS:*:*) GUESS=$UNAME_MACHINE-pc-serenity ;; *:Interix*:*) case $UNAME_MACHINE in x86) GUESS=i586-pc-interix$UNAME_RELEASE ;; authenticamd | genuineintel | EM64T) GUESS=x86_64-unknown-interix$UNAME_RELEASE ;; IA64) GUESS=ia64-unknown-interix$UNAME_RELEASE ;; esac ;; i*:UWIN*:*) GUESS=$UNAME_MACHINE-pc-uwin ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) GUESS=x86_64-pc-cygwin ;; prep*:SunOS:5.*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=powerpcle-unknown-solaris2$SUN_REL ;; *:GNU:*:*) # the GNU system GNU_ARCH=`echo "$UNAME_MACHINE" | sed -e 's,[-/].*$,,'` GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's,/.*$,,'` GUESS=$GNU_ARCH-unknown-$LIBC$GNU_REL ;; *:GNU/*:*:*) # other systems with GNU libc and userland GNU_SYS=`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"` GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_MACHINE-unknown-$GNU_SYS$GNU_REL-$LIBC ;; x86_64:[Mm]anagarm:*:*|i?86:[Mm]anagarm:*:*) GUESS="$UNAME_MACHINE-pc-managarm-mlibc" ;; *:[Mm]anagarm:*:*) GUESS="$UNAME_MACHINE-unknown-managarm-mlibc" ;; *:Minix:*:*) GUESS=$UNAME_MACHINE-unknown-minix ;; aarch64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' /proc/cpuinfo 2>/dev/null` 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 GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; arc:Linux:*:* | arceb:Linux:*:* | arc32:Linux:*:* | arc64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; arm*:Linux:*:*) set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then GUESS=$UNAME_MACHINE-unknown-linux-$LIBC else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabi else GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabihf fi fi ;; avr32*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; cris:Linux:*:*) GUESS=$UNAME_MACHINE-axis-linux-$LIBC ;; crisv32:Linux:*:*) GUESS=$UNAME_MACHINE-axis-linux-$LIBC ;; e2k:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; frv:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; hexagon:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; i*86:Linux:*:*) GUESS=$UNAME_MACHINE-pc-linux-$LIBC ;; ia64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; k1om:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; loongarch32:Linux:*:* | loongarch64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; m32r*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; m68*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; mips:Linux:*:* | mips64:Linux:*:*) set_cc_for_build IS_GLIBC=0 test x"${LIBC}" = xgnu && IS_GLIBC=1 sed 's/^ //' << EOF > "$dummy.c" #undef CPU #undef mips #undef mipsel #undef mips64 #undef mips64el #if ${IS_GLIBC} && defined(_ABI64) LIBCABI=gnuabi64 #else #if ${IS_GLIBC} && defined(_ABIN32) LIBCABI=gnuabin32 #else LIBCABI=${LIBC} #endif #endif #if ${IS_GLIBC} && defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 CPU=mipsisa64r6 #else #if ${IS_GLIBC} && !defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 CPU=mipsisa32r6 #else #if defined(__mips64) CPU=mips64 #else CPU=mips #endif #endif #endif #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) MIPS_ENDIAN=el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) MIPS_ENDIAN= #else MIPS_ENDIAN= #endif #endif EOF cc_set_vars=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU\|^MIPS_ENDIAN\|^LIBCABI'` eval "$cc_set_vars" test "x$CPU" != x && { echo "$CPU${MIPS_ENDIAN}-unknown-linux-$LIBCABI"; exit; } ;; mips64el:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; openrisc*:Linux:*:*) GUESS=or1k-unknown-linux-$LIBC ;; or32:Linux:*:* | or1k*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; padre:Linux:*:*) GUESS=sparc-unknown-linux-$LIBC ;; parisc64:Linux:*:* | hppa64:Linux:*:*) GUESS=hppa64-unknown-linux-$LIBC ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) GUESS=hppa1.1-unknown-linux-$LIBC ;; PA8*) GUESS=hppa2.0-unknown-linux-$LIBC ;; *) GUESS=hppa-unknown-linux-$LIBC ;; esac ;; ppc64:Linux:*:*) GUESS=powerpc64-unknown-linux-$LIBC ;; ppc:Linux:*:*) GUESS=powerpc-unknown-linux-$LIBC ;; ppc64le:Linux:*:*) GUESS=powerpc64le-unknown-linux-$LIBC ;; ppcle:Linux:*:*) GUESS=powerpcle-unknown-linux-$LIBC ;; riscv32:Linux:*:* | riscv32be:Linux:*:* | riscv64:Linux:*:* | riscv64be:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; s390:Linux:*:* | s390x:Linux:*:*) GUESS=$UNAME_MACHINE-ibm-linux-$LIBC ;; sh64*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; sh*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; sparc:Linux:*:* | sparc64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; tile*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; vax:Linux:*:*) GUESS=$UNAME_MACHINE-dec-linux-$LIBC ;; x86_64:Linux:*:*) set_cc_for_build CPU=$UNAME_MACHINE LIBCABI=$LIBC if test "$CC_FOR_BUILD" != no_compiler_found; then ABI=64 sed 's/^ //' << EOF > "$dummy.c" #ifdef __i386__ ABI=x86 #else #ifdef __ILP32__ ABI=x32 #endif #endif EOF cc_set_abi=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^ABI' | sed 's, ,,g'` eval "$cc_set_abi" case $ABI in x86) CPU=i686 ;; x32) LIBCABI=${LIBC}x32 ;; esac fi GUESS=$CPU-pc-linux-$LIBCABI ;; xtensa*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; 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. GUESS=i386-sequent-sysv4 ;; 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. GUESS=$UNAME_MACHINE-pc-sysv4.2uw$UNAME_VERSION ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. GUESS=$UNAME_MACHINE-pc-os2-emx ;; i*86:XTS-300:*:STOP) GUESS=$UNAME_MACHINE-unknown-stop ;; i*86:atheos:*:*) GUESS=$UNAME_MACHINE-unknown-atheos ;; i*86:syllable:*:*) GUESS=$UNAME_MACHINE-pc-syllable ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) GUESS=i386-unknown-lynxos$UNAME_RELEASE ;; i*86:*DOS:*:*) GUESS=$UNAME_MACHINE-pc-msdosdjgpp ;; i*86:*:4.*:*) UNAME_REL=`echo "$UNAME_RELEASE" | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then GUESS=$UNAME_MACHINE-univel-sysv$UNAME_REL else GUESS=$UNAME_MACHINE-pc-sysv$UNAME_REL fi ;; 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 GUESS=$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name` GUESS=$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 GUESS=$UNAME_MACHINE-pc-sco$UNAME_REL else GUESS=$UNAME_MACHINE-pc-sysv32 fi ;; 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 configure will decide that # this is a cross-build. GUESS=i586-pc-msdosdjgpp ;; Intel:Mach:3*:*) GUESS=i386-pc-mach3 ;; paragon:*:*:*) GUESS=i860-intel-osf1 ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then GUESS=i860-stardent-sysv$UNAME_RELEASE # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. GUESS=i860-unknown-sysv$UNAME_RELEASE # Unknown i860-SVR4 fi ;; mini*:CTIX:SYS*5:*) # "miniframe" GUESS=m68010-convergent-sysv ;; mc68k:UNIX:SYSTEM5:3.51m) GUESS=m68k-convergent-sysv ;; M680?0:D-NIX:5.3:*) GUESS=m68k-diab-dnix ;; 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*:*) GUESS=m68k-unknown-lynxos$UNAME_RELEASE ;; mc68030:UNIX_System_V:4.*:*) GUESS=m68k-atari-sysv4 ;; TSUNAMI:LynxOS:2.*:*) GUESS=sparc-unknown-lynxos$UNAME_RELEASE ;; rs6000:LynxOS:2.*:*) GUESS=rs6000-unknown-lynxos$UNAME_RELEASE ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) GUESS=powerpc-unknown-lynxos$UNAME_RELEASE ;; SM[BE]S:UNIX_SV:*:*) GUESS=mips-dde-sysv$UNAME_RELEASE ;; RM*:ReliantUNIX-*:*:*) GUESS=mips-sni-sysv4 ;; RM*:SINIX-*:*:*) GUESS=mips-sni-sysv4 ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` GUESS=$UNAME_MACHINE-sni-sysv4 else GUESS=ns32k-sni-sysv fi ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says <Richard.M.Bartel@ccMail.Census.GOV> GUESS=i586-unisys-sysv4 ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes <hewes@openmarket.com>. # How about differentiating between stratus architectures? -djm GUESS=hppa1.1-stratus-sysv4 ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. GUESS=i860-stratus-sysv4 ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. GUESS=$UNAME_MACHINE-stratus-vos ;; *:VOS:*:*) # From Paul.Green@stratus.com. GUESS=hppa1.1-stratus-vos ;; mc68*:A/UX:*:*) GUESS=m68k-apple-aux$UNAME_RELEASE ;; news*:NEWS-OS:6*:*) GUESS=mips-sony-newsos6 ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if test -d /usr/nec; then GUESS=mips-nec-sysv$UNAME_RELEASE else GUESS=mips-unknown-sysv$UNAME_RELEASE fi ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. GUESS=powerpc-be-beos ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. GUESS=powerpc-apple-beos ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. GUESS=i586-pc-beos ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. GUESS=i586-pc-haiku ;; ppc:Haiku:*:*) # Haiku running on Apple PowerPC GUESS=powerpc-apple-haiku ;; *:Haiku:*:*) # Haiku modern gcc (not bound by BeOS compat) GUESS=$UNAME_MACHINE-unknown-haiku ;; SX-4:SUPER-UX:*:*) GUESS=sx4-nec-superux$UNAME_RELEASE ;; SX-5:SUPER-UX:*:*) GUESS=sx5-nec-superux$UNAME_RELEASE ;; SX-6:SUPER-UX:*:*) GUESS=sx6-nec-superux$UNAME_RELEASE ;; SX-7:SUPER-UX:*:*) GUESS=sx7-nec-superux$UNAME_RELEASE ;; SX-8:SUPER-UX:*:*) GUESS=sx8-nec-superux$UNAME_RELEASE ;; SX-8R:SUPER-UX:*:*) GUESS=sx8r-nec-superux$UNAME_RELEASE ;; SX-ACE:SUPER-UX:*:*) GUESS=sxace-nec-superux$UNAME_RELEASE ;; Power*:Rhapsody:*:*) GUESS=powerpc-apple-rhapsody$UNAME_RELEASE ;; *:Rhapsody:*:*) GUESS=$UNAME_MACHINE-apple-rhapsody$UNAME_RELEASE ;; arm64:Darwin:*:*) GUESS=aarch64-apple-darwin$UNAME_RELEASE ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` case $UNAME_PROCESSOR in unknown) UNAME_PROCESSOR=powerpc ;; esac if command -v xcode-select > /dev/null 2> /dev/null && \ ! xcode-select --print-path > /dev/null 2> /dev/null ; then # Avoid executing cc if there is no toolchain installed as # cc will be a stub that puts up a graphical alert # prompting the user to install developer tools. CC_FOR_BUILD=no_compiler_found else set_cc_for_build fi if test "$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 # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_PPC >/dev/null then UNAME_PROCESSOR=powerpc fi elif test "$UNAME_PROCESSOR" = i386 ; then # uname -m returns i386 or x86_64 UNAME_PROCESSOR=$UNAME_MACHINE fi GUESS=$UNAME_PROCESSOR-apple-darwin$UNAME_RELEASE ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = x86; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi GUESS=$UNAME_PROCESSOR-$UNAME_MACHINE-nto-qnx$UNAME_RELEASE ;; *:QNX:*:4*) GUESS=i386-pc-qnx ;; NEO-*:NONSTOP_KERNEL:*:*) GUESS=neo-tandem-nsk$UNAME_RELEASE ;; NSE-*:NONSTOP_KERNEL:*:*) GUESS=nse-tandem-nsk$UNAME_RELEASE ;; NSR-*:NONSTOP_KERNEL:*:*) GUESS=nsr-tandem-nsk$UNAME_RELEASE ;; NSV-*:NONSTOP_KERNEL:*:*) GUESS=nsv-tandem-nsk$UNAME_RELEASE ;; NSX-*:NONSTOP_KERNEL:*:*) GUESS=nsx-tandem-nsk$UNAME_RELEASE ;; *:NonStop-UX:*:*) GUESS=mips-compaq-nonstopux ;; BS2000:POSIX*:*:*) GUESS=bs2000-siemens-sysv ;; DS/*:UNIX_System_V:*:*) GUESS=$UNAME_MACHINE-$UNAME_SYSTEM-$UNAME_RELEASE ;; *: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 elif test "x${cputype-}" != x; then UNAME_MACHINE=$cputype fi GUESS=$UNAME_MACHINE-unknown-plan9 ;; *:TOPS-10:*:*) GUESS=pdp10-unknown-tops10 ;; *:TENEX:*:*) GUESS=pdp10-unknown-tenex ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) GUESS=pdp10-dec-tops20 ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) GUESS=pdp10-xkl-tops20 ;; *:TOPS-20:*:*) GUESS=pdp10-unknown-tops20 ;; *:ITS:*:*) GUESS=pdp10-unknown-its ;; SEI:*:*:SEIUX) GUESS=mips-sei-seiux$UNAME_RELEASE ;; *:DragonFly:*:*) DRAGONFLY_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_MACHINE-unknown-dragonfly$DRAGONFLY_REL ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case $UNAME_MACHINE in A*) GUESS=alpha-dec-vms ;; I*) GUESS=ia64-dec-vms ;; V*) GUESS=vax-dec-vms ;; esac ;; *:XENIX:*:SysV) GUESS=i386-pc-xenix ;; i*86:skyos:*:*) SKYOS_REL=`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'` GUESS=$UNAME_MACHINE-pc-skyos$SKYOS_REL ;; i*86:rdos:*:*) GUESS=$UNAME_MACHINE-pc-rdos ;; i*86:Fiwix:*:*) GUESS=$UNAME_MACHINE-pc-fiwix ;; *:AROS:*:*) GUESS=$UNAME_MACHINE-unknown-aros ;; x86_64:VMkernel:*:*) GUESS=$UNAME_MACHINE-unknown-esx ;; amd64:Isilon\ OneFS:*:*) GUESS=x86_64-unknown-onefs ;; *:Unleashed:*:*) GUESS=$UNAME_MACHINE-unknown-unleashed$UNAME_RELEASE ;; esac # Do we have a guess based on uname results? if test "x$GUESS" != x; then echo "$GUESS" exit fi # No uname command or uname output not recognized. set_cc_for_build cat > "$dummy.c" <<EOF #ifdef _SEQUENT_ #include <sys/types.h> #include <sys/utsname.h> #endif #if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) #if defined (vax) || defined (__vax) || defined (__vax__) || defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) #include <signal.h> #if defined(_SIZE_T_) || defined(SIGLOST) #include <sys/utsname.h> #endif #endif #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include <sys/param.h> printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) #if !defined (ultrix) #include <sys/param.h> #if defined (BSD) #if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); #else #if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); #else printf ("vax-dec-bsd\n"); exit (0); #endif #endif #else printf ("vax-dec-bsd\n"); exit (0); #endif #else #if defined(_SIZE_T_) || defined(SIGLOST) struct utsname un; uname (&un); printf ("vax-dec-ultrix%s\n", un.release); exit (0); #else printf ("vax-dec-ultrix\n"); exit (0); #endif #endif #endif #if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) #if defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) #if defined(_SIZE_T_) || defined(SIGLOST) struct utsname *un; uname (&un); printf ("mips-dec-ultrix%s\n", un.release); exit (0); #else printf ("mips-dec-ultrix\n"); exit (0); #endif #endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null && SYSTEM_NAME=`"$dummy"` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo "$ISP-apollo-$SYSTYPE"; exit; } echo "$0: unable to guess system type" >&2 case $UNAME_MACHINE:$UNAME_SYSTEM in mips:Linux | mips64:Linux) # If we got here on MIPS GNU/Linux, output extra information. cat >&2 <<EOF NOTE: MIPS GNU/Linux systems require a C compiler to fully recognize the system type. Please install a C compiler and try again. EOF ;; esac cat >&2 <<EOF This script (version $timestamp), has failed to recognize the operating system you are using. If your script is old, overwrite *all* copies of config.guess and config.sub with the latest versions from: https://git.savannah.gnu.org/cgit/config.git/plain/config.guess and https://git.savannah.gnu.org/cgit/config.git/plain/config.sub EOF our_year=`echo $timestamp | sed 's,-.*,,'` thisyear=`date +%Y` # shellcheck disable=SC2003 script_age=`expr "$thisyear" - "$our_year"` if test "$script_age" -lt 3 ; then cat >&2 <<EOF If $0 has already been updated, send the following data and any information you think might be pertinent to config-patches@gnu.org to provide the necessary 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 fi exit 1 # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/build-aux/texinfo.tex����������������������������������������������������������������������0000644�0001750�0001750�00001346306�14436424417�016444� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������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{2023-03-27.21} % % Copyright 1985, 1986, 1988, 1990-2023 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 <https://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: % https://ftp.gnu.org/gnu/texinfo/ (the Texinfo release area), or % https://ftpmirror.gnu.org/texinfo/ (same, via a mirror), or % https://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 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 https://www.gnu.org/software/texinfo. \message{Loading texinfo [version \texinfoversion]:} % LaTeX's \typeout. This ensures that the messages it is used for % are identical in format to the corresponding ones from latex/pdflatex. \def\typeout{\immediate\write17}% \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\ptexsp=\sp \let\ptexstar=\* \let\ptexsup=\sup \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 % Give the space character the catcode for a space. \def\spaceisspace{\catcode`\ =10\relax} % Likewise for ^^M, the end of line character. \def\endlineisspace{\catcode13=10\relax} \chardef\dashChar = `\- \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 } % 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} % Output routine % % 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 } % 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. % \domark is called twice inside \chapmacro, to add one % mark before the section break, and one after. % In the second call \prevchapterdefs is the same as \currentchapterdefs, % and \prevsectiondefs is the same as \currentsectiondefs. % Then if the page is not broken at the mark, some of the previous % section appears on the page, and we can get the name of this section % from \firstmark for @everyheadingmarks top. % @everyheadingmarks bottom uses \botmark. % % See page 260 of The TeXbook. \def\domark{% \toks0=\expandafter{\currentchapterdefs}% \toks2=\expandafter{\currentsectiondefs}% \toks4=\expandafter{\prevchapterdefs}% \toks6=\expandafter{\prevsectiondefs}% \toks8=\expandafter{\currentcolordefs}% \mark{% \the\toks0 \the\toks2 % 0: marks for @everyheadingmarks top \noexpand\or \the\toks4 \the\toks6 % 1: for @everyheadingmarks bottom \noexpand\else \the\toks8 % 2: color marks }% } % \gettopheadingmarks, \getbottomheadingmarks, % \getcolormarks - extract needed part of mark. % % \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\the\savedtopmark\fi \ifx\thischapter\empty \ifcase0\firstmark\fi \fi } \def\getbottomheadingmarks{\ifcase1\botmark\fi} \def\getcolormarks{\ifcase2\the\savedtopmark\fi} % Avoid "undefined control sequence" errors. \def\currentchapterdefs{} \def\currentsectiondefs{} \def\currentsection{} \def\prevchapterdefs{} \def\prevsectiondefs{} \def\currentcolordefs{} % Margin to add to right of even pages, to left of odd pages. \newdimen\bindingoffset \newdimen\normaloffset \newdimen\txipagewidth \newdimen\txipageheight % Main output routine. % \chardef\PAGE = 255 \newtoks\defaultoutput \defaultoutput = {\savetopmark\onepageout{\pagecontents\PAGE}} \output=\expandafter{\the\defaultoutput} \newbox\headlinebox \newbox\footlinebox % When outputting the double column layout for indices, an output routine % is run several times, hiding the original value of \topmark. Hence, save % \topmark at the beginning. % \newtoks\savedtopmark \newif\iftopmarksaved \topmarksavedtrue \def\savetopmark{% \iftopmarksaved\else \global\savedtopmark=\expandafter{\topmark}% \global\topmarksavedtrue \fi } % \onepageout takes a vbox as an argument. % \shipout a vbox for a single page, adding an optional header, footer % and footnote. This also causes index entries for this page to be written % to the auxiliary files. % \def\onepageout#1{% \hoffset=\normaloffset % \ifodd\pageno \advance\hoffset by \bindingoffset \else \advance\hoffset by -\bindingoffset\fi % \checkchapterpage % % Make the heading and footing. \makeheadline and \makefootline % use the contents of \headline and \footline. \def\commonheadfootline{\let\hsize=\txipagewidth \texinfochars} \ifodd\pageno \getoddheadingmarks \else \getevenheadingmarks \fi \global\setbox\headlinebox = \vbox{\commonheadfootline \makeheadline}% \ifodd\pageno \getoddfootingmarks \else \getevenfootingmarks \fi \global\setbox\footlinebox = \vbox{\commonheadfootline \makefootline}% % {% % Set context for writing to auxiliary files like index files. % 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. % \atdummies % don't expand commands in the output. \turnoffactive \shipout\vbox{% % Do this early so pdf references go to the beginning of the page. \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\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 % }% }% \global\topmarksavedfalse \advancepageno \ifnum\outputpenalty>-20000 \else\dosupereject\fi } \newinsert\margin \dimen\margin=\maxdimen % Main part of page, including any footnotes \def\pagebody#1{\vbox to\txipageheight{\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} } % Check if we are on the first page of a chapter. Used for printing headings. \newif\ifchapterpage \def\checkchapterpage{% % Get the chapter that was current at the end of the last page \ifcase1\the\savedtopmark\fi \let\prevchaptername\thischaptername % \ifodd\pageno \getoddheadingmarks \else \getevenheadingmarks \fi \let\curchaptername\thischaptername % \ifx\curchaptername\prevchaptername \chapterpagefalse \else \chapterpagetrue \fi } % Argument parsing % 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. % For example, \def\foo{\parsearg\fooxxx}. % \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. Pass the result on to % \argcheckspaces. \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 - define a command taking an argument on the line % % \parseargdef\foo{...} % is roughly equivalent to % \def\foo{\parsearg\Xfoo} % \def\Xfoo#1{...} \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}} \long\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 calls \checkenv and executes the definition of \Efoo. \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 % @- allows explicit insertion of hyphenation points \def\-{\discretionary{\normaldash}{}{}}% % @. 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} % @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. \addgroupbox \prevdepth = \dimen1 \checkinserts } \def\addgroupbox{ % \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 = \txipageheight \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\txipageheight \page \fi \fi \box\groupbox } % % 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 % This is similar to the 'needspace' module in LaTeX. % The first penalty allows a break if the end of the page is % not too far away. Following penalties and skips are discarded. % Otherwise, require at least \dimen0 of vertical space. % % (We used to use a \vtop to reserve space, but this had spacing issues % when followed by a section heading, as it was not a "discardable item". % This also has the benefit of providing glue before the page break if % there isn't enough space.) \vskip0pt plus \dimen0 \penalty-100 \vskip0pt plus -\dimen0 \vskip \dimen0 \penalty9999 \vskip -\dimen0 \penalty0\relax % this hides the above glue from \safewhatsit and \dobreak \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 } % @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\c{\begingroup \catcode`\^^M=\active% \catcode`\@=\other \catcode`\{=\other \catcode`\}=\other% \cxxx} {\catcode`\^^M=\active \gdef\cxxx#1^^M{\endgroup}} % \let\comment\c % @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 = {}% } % leave vertical mode without cancelling any first paragraph indent \gdef\imageindent{% \toks0=\everypar \everypar={}% \ptexnoindent \global\everypar=\toks0 } % @refill is a no-op. \let\refill=\relax % @setfilename INFO-FILENAME - ignored \let\setfilename=\comment % @bye. \outer\def\bye{\chappager\pagelabels\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 \newbox\boxB \newcount\countA \newif\ifpdf \newif\ifpdfmakepagedest % % For LuaTeX % \newif\iftxiuseunicodedestname \txiuseunicodedestnamefalse % For pdfTeX etc. \ifx\luatexversion\thisisundefined \else % Use Unicode destination names \txiuseunicodedestnametrue % Escape PDF strings with converting UTF-16 from UTF-8 \begingroup \catcode`\%=12 \directlua{ function UTF16oct(str) tex.sprint(string.char(0x5c) .. '376' .. string.char(0x5c) .. '377') for c in string.utfvalues(str) do if c < 0x10000 then tex.sprint( string.format(string.char(0x5c) .. string.char(0x25) .. '03o' .. string.char(0x5c) .. string.char(0x25) .. '03o', math.floor(c / 256), math.floor(c % 256))) else c = c - 0x10000 local c_hi = c / 1024 + 0xd800 local c_lo = c % 1024 + 0xdc00 tex.sprint( string.format(string.char(0x5c) .. string.char(0x25) .. '03o' .. string.char(0x5c) .. string.char(0x25) .. '03o' .. string.char(0x5c) .. string.char(0x25) .. '03o' .. string.char(0x5c) .. string.char(0x25) .. '03o', math.floor(c_hi / 256), math.floor(c_hi % 256), math.floor(c_lo / 256), math.floor(c_lo % 256))) end end end } \endgroup \def\pdfescapestrutfsixteen#1{\directlua{UTF16oct('\luaescapestring{#1}')}} % Escape PDF strings without converting \begingroup \directlua{ function PDFescstr(str) for c in string.bytes(str) do if c <= 0x20 or c >= 0x80 or c == 0x28 or c == 0x29 or c == 0x5c then tex.sprint(-2, string.format(string.char(0x5c) .. string.char(0x25) .. '03o', c)) else tex.sprint(-2, string.char(c)) end end end } % The -2 in the arguments here gives all the input to TeX catcode 12 % (other) or 10 (space), preventing undefined control sequence errors. See % https://lists.gnu.org/archive/html/bug-texinfo/2019-08/msg00031.html % \endgroup \def\pdfescapestring#1{\directlua{PDFescstr('\luaescapestring{#1}')}} \ifnum\luatexversion>84 % For LuaTeX >= 0.85 \def\pdfdest{\pdfextension dest} \let\pdfoutput\outputmode \def\pdfliteral{\pdfextension literal} \def\pdfcatalog{\pdfextension catalog} \def\pdftexversion{\numexpr\pdffeedback version\relax} \let\pdfximage\saveimageresource \let\pdfrefximage\useimageresource \let\pdflastximage\lastsavedimageresourceindex \def\pdfendlink{\pdfextension endlink\relax} \def\pdfoutline{\pdfextension outline} \def\pdfstartlink{\pdfextension startlink} \def\pdffontattr{\pdfextension fontattr} \def\pdfobj{\pdfextension obj} \def\pdflastobj{\numexpr\pdffeedback lastobj\relax} \let\pdfpagewidth\pagewidth \let\pdfpageheight\pageheight \edef\pdfhorigin{\pdfvariable horigin} \edef\pdfvorigin{\pdfvariable vorigin} \fi \fi % 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 \newif\ifpdforxetex \pdforxetexfalse \ifpdf \pdforxetextrue \fi \ifx\XeTeXrevision\thisisundefined\else \pdforxetextrue \fi % Output page labels information. % See PDF reference v.1.7 p.594, section 8.3.1. % Page label ranges must be increasing. \ifpdf \def\pagelabels{% \def\title{0 << /P (T-) /S /D >>}% % % support @contents at very end of document \ifnum\contentsendcount=\pagecount \ifnum\arabiccount<\romancount \pdfcatalog{/PageLabels << /Nums [\title \the\arabiccount << /S /D >> \the\romancount << /S /r >> ] >> }\relax \fi % no contents in document \else\ifnum\contentsendcount=0 \pdfcatalog{/PageLabels << /Nums [\title \the\arabiccount << /S /D >> ] >> }\relax \else \pdfcatalog{/PageLabels << /Nums [\title \the\romancount << /S /r >> \the\contentsendcount << /S /D >> ] >> }\relax \fi\fi } \else \let\pagelabels\relax \fi \newcount\pagecount \pagecount=0 \newcount\romancount \romancount=0 \newcount\arabiccount \arabiccount=0 \newcount\contentsendcount \contentsendcount=0 \ifpdf \let\ptxadvancepageno\advancepageno \def\advancepageno{% \ptxadvancepageno\global\advance\pagecount by 1 } \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. \xdef#1{#1}% \else % The expandable \pdfescapestring primitive escapes parentheses, % backslashes, and other special chars. \xdef#1{\pdfescapestring{#1}}% \fi } \def\txiescapepdfutfsixteen#1{% \ifx\pdfescapestrutfsixteen\thisisundefined % No UTF-16 converting macro available. \txiescapepdf{#1}% \else \xdef#1{\pdfescapestrutfsixteen{#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 using ideas from 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. The dark red here is dark enough to print on paper as % nearly black, but still distinguishable for online viewing. We use % black by default, though. \def\rgbDarkRed{0.50 0.09 0.12} \def\rgbBlack{0 0 0} % % rg sets the color for filling (usual text, etc.); % RG 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\curcolor{0 0 0}% \def\setcolor#1{% \ifx#1\curcolor\else \xdef\currentcolordefs{\gdef\noexpand\thiscolor{#1}}% \domark \pdfsetcolor{#1}% \xdef\curcolor{#1}% \fi } % \let\maincolor\rgbBlack \pdfsetcolor{\maincolor} \edef\thiscolor{\maincolor} \def\currentcolordefs{} % \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\setpdfdestname#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 \makevalueexpandable \turnoffactive \iftxiuseunicodedestname \ifx \declaredencoding \latone % Pass through Latin-1 characters. % LuaTeX with byte wise I/O converts Latin-1 characters to Unicode. \else \ifx \declaredencoding \utfeight % Pass through Unicode characters. \else % Use ASCII approximations in destination names. \passthroughcharsfalse \fi \fi \else % Use ASCII approximations in destination names. \passthroughcharsfalse \fi \def\pdfdestname{#1}% \txiescapepdf\pdfdestname }} % \def\setpdfoutlinetext#1{{% \indexnofonts \makevalueexpandable \turnoffactive \ifx \declaredencoding \latone % The PDF format can use an extended form of Latin-1 in bookmark % strings. See Appendix D of the PDF Reference, Sixth Edition, for % the "PDFDocEncoding". \passthroughcharstrue % Pass through Latin-1 characters. % LuaTeX: Convert to Unicode % pdfTeX: Use Latin-1 as PDFDocEncoding \def\pdfoutlinetext{#1}% \else \ifx \declaredencoding \utfeight \ifx\luatexversion\thisisundefined % For pdfTeX with UTF-8. % TODO: the PDF format can use UTF-16 in bookmark strings, % but the code for this isn't done yet. % Use ASCII approximations. \passthroughcharsfalse \def\pdfoutlinetext{#1}% \else % For LuaTeX with UTF-8. % Pass through Unicode characters for title texts. \passthroughcharstrue \def\pdfoutlinetext{#1}% \fi \else % For non-Latin-1 or non-UTF-8 encodings. % Use ASCII approximations. \passthroughcharsfalse \def\pdfoutlinetext{#1}% \fi \fi % LuaTeX: Convert to UTF-16 % pdfTeX: Use Latin-1 as PDFDocEncoding \txiescapepdfutfsixteen\pdfoutlinetext }} % \def\pdfmkdest#1{% \setpdfdestname{#1}% \safewhatsit{\pdfdest name{\pdfdestname} xyz}% } % % used to mark target names; must be expandable. \def\pdfmkpgn#1{#1} % % by default, use black for everything. \def\urlcolor{\rgbBlack} \let\linkcolor\rgbBlack \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. \setpdfoutlinetext{#1} \setpdfdestname{#3} \ifx\pdfdestname\empty \def\pdfdestname{#4}% \fi % \pdfoutline goto name{\pdfmkpgn{\pdfdestname}}#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. % % Currently we prefix the section name with the section number % for chapter and appendix headings only in order to avoid too much % horizontal space being required in the PDF viewer. \def\numchapentry##1##2##3##4{% \dopdfoutline{##2 ##1}{count-\expnumber{chap##2}}{##3}{##4}}% \def\unnchapentry##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} % \pdfgettoks - Surround page numbers in #1 with @pdflink. #1 may % be a simple number, or a list of numbers in the case of an index % entry. \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{\pdflinkpage{#1}{#1}}% \def\pdflinkpage#1#2{% \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}} \setcolor{\linkcolor}#2\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 % % For XeTeX % \ifx\XeTeXrevision\thisisundefined \else % % XeTeX version check % \ifnum\strcmp{\the\XeTeXversion\XeTeXrevision}{0.99996}>-1 % TeX Live 2016 contains XeTeX 0.99996 and xdvipdfmx 20160307. % It can use the `dvipdfmx:config' special (from TeX Live SVN r40941). % For avoiding PDF destination name replacement, we use this special % instead of xdvipdfmx's command line option `-C 0x0010'. \special{dvipdfmx:config C 0x0010} % XeTeX 0.99995+ comes with xdvipdfmx 20160307+. % It can handle Unicode destination names for PDF. \txiuseunicodedestnametrue \else % XeTeX < 0.99996 (TeX Live < 2016) cannot use the % `dvipdfmx:config' special. % So for avoiding PDF destination name replacement, % xdvipdfmx's command line option `-C 0x0010' is necessary. % % XeTeX < 0.99995 can not handle Unicode destination names for PDF % because xdvipdfmx 20150315 has a UTF-16 conversion issue. % It is fixed by xdvipdfmx 20160106 (TeX Live SVN r39753). \txiuseunicodedestnamefalse \fi % % Color support % \def\rgbDarkRed{0.50 0.09 0.12} \def\rgbBlack{0 0 0} % \def\pdfsetcolor#1{\special{pdf:scolor [#1]}} % % Set color, and create a mark which defines \thiscolor accordingly, % so that \makeheadline knows which color to restore. \def\setcolor#1{% \xdef\currentcolordefs{\gdef\noexpand\thiscolor{#1}}% \domark \pdfsetcolor{#1}% } % \def\maincolor{\rgbBlack} \pdfsetcolor{\maincolor} \edef\thiscolor{\maincolor} \def\currentcolordefs{} % \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 } % % PDF outline support % % Emulate pdfTeX primitive \def\pdfdest name#1 xyz{% \special{pdf:dest (#1) [@thispage /XYZ @xpos @ypos null]}% } % \def\setpdfdestname#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 \makevalueexpandable \turnoffactive \iftxiuseunicodedestname % Pass through Unicode characters. \else % Use ASCII approximations in destination names. \passthroughcharsfalse \fi \def\pdfdestname{#1}% \txiescapepdf\pdfdestname }} % \def\setpdfoutlinetext#1{{% \turnoffactive % Always use Unicode characters in title texts. \def\pdfoutlinetext{#1}% % For XeTeX, xdvipdfmx converts to UTF-16. % So we do not convert. \txiescapepdf\pdfoutlinetext }} % \def\pdfmkdest#1{% \setpdfdestname{#1}% \safewhatsit{\pdfdest name{\pdfdestname} xyz}% } % % by default, use black for everything. \def\urlcolor{\rgbBlack} \def\linkcolor{\rgbBlack} \def\endlink{\setcolor{\maincolor}\pdfendlink} % \def\dopdfoutline#1#2#3#4{% \setpdfoutlinetext{#1} \setpdfdestname{#3} \ifx\pdfdestname\empty \def\pdfdestname{#4}% \fi % \special{pdf:out [-] #2 << /Title (\pdfoutlinetext) /A << /S /GoTo /D (\pdfdestname) >> >> }% } % \def\pdfmakeoutlines{% \begingroup % % For XeTeX, counts of subentries are not necessary. % Therefore, we read toc only once. % % We use node names as destinations. % % Currently we prefix the section name with the section number % for chapter and appendix headings only in order to avoid too much % horizontal space being required in the PDF viewer. \def\partentry##1##2##3##4{}% ignore parts in the outlines \def\numchapentry##1##2##3##4{% \dopdfoutline{##2 ##1}{1}{##3}{##4}}% \def\numsecentry##1##2##3##4{% \dopdfoutline{##1}{2}{##3}{##4}}% \def\numsubsecentry##1##2##3##4{% \dopdfoutline{##1}{3}{##3}{##4}}% \def\numsubsubsecentry##1##2##3##4{% \dopdfoutline{##1}{4}{##3}{##4}}% % \let\appentry\numchapentry% \let\appsecentry\numsecentry% \let\appsubsecentry\numsubsecentry% \let\appsubsubsecentry\numsubsubsecentry% \def\unnchapentry##1##2##3##4{% \dopdfoutline{##1}{1}{##3}{##4}}% \let\unnsecentry\numsecentry% \let\unnsubsecentry\numsubsecentry% \let\unnsubsubsecentry\numsubsubsecentry% % % For XeTeX, xdvipdfmx converts strings to UTF-16. % Therefore, the encoding and the language may not be considered. % \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[}]% ] \special{pdf:docview << /PageMode /UseOutlines >> } % ``\special{pdf:tounicode ...}'' is not necessary % because xdvipdfmx converts strings from UTF-8 to UTF-16 without it. % However, due to a UTF-16 conversion issue of xdvipdfmx 20150315, % ``\special{pdf:dest ...}'' cannot handle non-ASCII strings. % It is fixed by xdvipdfmx 20160106 (TeX Live SVN r39753). % \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 } % 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}% \special{pdf:bann << /Border [0 0 0] /Subtype /Link /A << /S /URI /URI (#1) >> >>}% \endgroup} \def\endlink{\setcolor{\maincolor}\special{pdf:eann}} \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{\pdflinkpage{#1}{#1}}% \def\pdflinkpage#1#2{% \special{pdf:bann << /Border [0 0 0] /Type /Annot /Subtype /Link /A << /S /GoTo /D (#1) >> >>}% \setcolor{\linkcolor}#2\endlink} \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st} % % % @image support % % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto). \def\doxeteximage#1#2#3{% \def\xeteximagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}% \def\xeteximageheight{#3}\setbox2 = \hbox{\ignorespaces #3}% % % XeTeX (and the PDF format) supports .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\xeteximgext=\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 \errmessage{Could not find image file #1 for XeTeX}% \else \gdef\xeteximgext{JPG}% \fi \else \gdef\xeteximgext{jpeg}% \fi \else \gdef\xeteximgext{jpg}% \fi \else \gdef\xeteximgext{png}% \fi \else \gdef\xeteximgext{PDF}% \fi \else \gdef\xeteximgext{pdf}% \fi \closein 1 \endgroup % % Putting an \hbox around the image can prevent an over-long line % after the image. \hbox\bgroup \def\xetexpdfext{pdf}% \ifx\xeteximgext\xetexpdfext \XeTeXpdffile "#1".\xeteximgext "" \else \def\xetexpdfext{PDF}% \ifx\xeteximgext\xetexpdfext \XeTeXpdffile "#1".\xeteximgext "" \else \XeTeXpicfile "#1".\xeteximgext "" \fi \fi \ifdim \wd0 >0pt width \xeteximagewidth \fi \ifdim \wd2 >0pt height \xeteximageheight \fi \relax \egroup } \fi % \message{fonts,} % 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 % % This is what gets called when #5 of \setfont is empty. \let\cmap\gobble % % (end of cmaps) % 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% \ifx#2\ttshape\hyphenchar#1=-1 \fi \ifx#2\ttbshape\hyphenchar#1=-1 \fi \ifx#2\ttslshape\hyphenchar#1=-1 \fi } % 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\defsl\slshape{10}{\magstep1}{OT1} \setfont\defttsl\ttslshape{10}{\magstep1}{OT1TT} \def\df{\let\ttfont=\deftt \let\bffont = \defbf \let\ttslfont=\defttsl \let\slfont=\defsl \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 math mode superscripts (7pt). \def\sevennominalsize{7pt} \setfont\sevenrm\rmshape{7}{1000}{OT1} \setfont\seventt\ttshape{10}{700}{OT1TT} \setfont\sevenbf\bfshape{10}{700}{OT1} \setfont\sevenit\itshape{7}{1000}{OT1IT} \setfont\sevensl\slshape{10}{700}{OT1} \setfont\sevensf\sfshape{10}{700}{OT1} \setfont\sevensc\scshape{10}{700}{OT1} \setfont\seventtsl\ttslshape{10}{700}{OT1TT} \font\seveni=cmmi7 \font\sevensy=cmsy7 \def\sevenecsize{0700} % 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\secrmnotbold\rmshape{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 @acronym 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\defsl\slshape{10}{\magstephalf}{OT1} \setfont\defttsl\ttslshape{10}{\magstephalf}{OT1TT} \def\df{\let\ttfont=\deftt \let\bffont = \defbf \let\slfont=\defsl \let\ttslfont=\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 math mode superscripts (7pt). \def\sevennominalsize{7pt} \setfont\sevenrm\rmshape{7}{1000}{OT1} \setfont\seventt\ttshape{10}{700}{OT1TT} \setfont\sevenbf\bfshape{10}{700}{OT1} \setfont\sevenit\itshape{7}{1000}{OT1IT} \setfont\sevensl\slshape{10}{700}{OT1} \setfont\sevensf\sfshape{10}{700}{OT1} \setfont\sevensc\scshape{10}{700}{OT1} \setfont\seventtsl\ttslshape{10}{700}{OT1TT} \font\seveni=cmmi7 \font\sevensy=cmsy7 \def\sevenecsize{0700} % 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 @acronym 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 % 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} % 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 } % % 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 #1font\endcsname % change the current font } \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}} % 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}} % We don't need math for this font style. \def\ttsl{\setfontstyle{ttsl}} % In order for the font changes to affect most math symbols and letters, % we have to define the \textfont of the standard families. % We don't bother to reset \scriptscriptfont; awaiting user need. % \def\resetmathfonts{% \textfont0=\rmfont \textfont1=\ifont \textfont2=\syfont \textfont\itfam=\itfont \textfont\slfam=\slfont \textfont\bffam=\bffont \textfont\ttfam=\ttfont \textfont\sffam=\sffont % % Fonts for superscript. Note that the 7pt fonts are used regardless % of the current font size. \scriptfont0=\sevenrm \scriptfont1=\seveni \scriptfont2=\sevensy \scriptfont\itfam=\sevenit \scriptfont\slfam=\sevensl \scriptfont\bffam=\sevenbf \scriptfont\ttfam=\seventt \scriptfont\sffam=\sevensf } % \defineassignfonts{SIZE} - % Define sequence \assignfontsSIZE, which switches between font sizes % by redefining the meanings of \STYLEfont. (Just \STYLE additionally sets % the current \fam for math mode.) % \def\defineassignfonts#1{% \expandafter\edef\csname assignfonts#1\endcsname{% \let\noexpand\rmfont\csname #1rm\endcsname \let\noexpand\itfont\csname #1it\endcsname \let\noexpand\slfont\csname #1sl\endcsname \let\noexpand\bffont\csname #1bf\endcsname \let\noexpand\ttfont\csname #1tt\endcsname \let\noexpand\smallcaps\csname #1sc\endcsname \let\noexpand\sffont \csname #1sf\endcsname \let\noexpand\ifont \csname #1i\endcsname \let\noexpand\syfont \csname #1sy\endcsname \let\noexpand\ttslfont\csname #1ttsl\endcsname } } \def\assignfonts#1{% \csname assignfonts#1\endcsname } \newif\ifrmisbold % Select smaller font size with the current style. Used to change font size % in, e.g., the LaTeX logo and acronyms. If we are using bold fonts for % normal roman text, also use bold fonts for roman text in the smaller size. \def\switchtolllsize{% \expandafter\assignfonts\expandafter{\lllsize}% \ifrmisbold \let\rmfont\bffont \fi \csname\curfontstyle\endcsname }% \def\switchtolsize{% \expandafter\assignfonts\expandafter{\lsize}% \ifrmisbold \let\rmfont\bffont \fi \csname\curfontstyle\endcsname }% % Define the font-changing commands (all called \...fonts). % Each font-changing command also sets the names \lsize (one size lower) % and \lllsize (three sizes lower). These relative commands are used % in, e.g., the LaTeX logo and acronyms. % % Note: The fonts used for \ifont are for "math italics" (\itfont is for % italics in regular text). \syfont is also used in math mode only. % \def\definefontsetatsize#1#2#3#4#5{% \defineassignfonts{#1}% \expandafter\def\csname #1fonts\endcsname{% \def\curfontsize{#1}% \def\lsize{#2}\def\lllsize{#3}% \csname rmisbold#5\endcsname \csname assignfonts#1\endcsname \resetmathfonts \setleading{#4}% }} \definefontsetatsize{text} {reduced}{smaller}{\textleading}{false} \definefontsetatsize{title} {chap} {subsec} {27pt} {true} \definefontsetatsize{chap} {sec} {text} {19pt} {true} \definefontsetatsize{sec} {subsec} {reduced}{17pt} {true} \definefontsetatsize{ssec} {text} {small} {15pt} {true} \definefontsetatsize{reduced}{small} {smaller}{10.5pt}{false} \definefontsetatsize{small} {smaller}{smaller}{10.5pt}{false} \definefontsetatsize{smaller}{smaller}{smaller}{9.5pt} {false} \def\titlefont#1{{\titlefonts\rm #1}} \let\subsecfonts = \ssecfonts \let\subsubsecfonts = \ssecfonts % 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 % 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. #1 is what to % print if we are indeed using \tt; #2 is what to print otherwise. \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} % Check if internal flag is clear, i.e. has not been @set. \def\ifflagclear#1#2#3{% \expandafter\ifx\csname SET#1\endcsname\relax #2\else#3\fi } { \catcode`\'=\active \catcode`\`=\active \gdef\setcodequotes{\let`\codequoteleft \let'\codequoteright} \gdef\setregularquotes{\let`\lq \let'\rq} } \setregularquotes % output for ' in @code % in tt font hex 0D (undirected) or 27 (curly right quote) % \def\codequoteright{% \ifusingtt {\ifflagclear{txicodequoteundirected}% {\ifflagclear{codequoteundirected}% {'}% {\char"0D }}% {\char"0D }}% {'}% } % output for ` in @code % in tt font hex 12 (grave accent) or 60 (curly left quote) % \relax disables Spanish ligatures ?` and !` of \tt font. % \def\codequoteleft{% \ifusingtt {\ifflagclear{txicodequotebacktick}% {\ifflagclear{codequotebacktick}% {\relax`}% {\char"12 }}% {\char"12 }}% {\relax`}% } % 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 } % Turn them on by default \let\SETtxicodequoteundirected = t \let\SETtxicodequotebacktick = t % [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}\smartitaliccorrection}}% \next } \def\smartslanted{\dosmartslant\sl} \def\smartitalic{\dosmartslant\it} % Output an italic correction unless the following character is such as % not to need one. \def\smartitaliccorrection{\futurelet\next\smartitaliccorrectionx} \def\smartitaliccorrectionx{% \ifx\next,% \else\ifx\next-% \else\ifx\next.% \else\ifx\next\.% \else\ifx\next\comma% \else\ptexslash \fi\fi\fi\fi\fi \aftersmartic } % @cite unconditionally uses \sl with \smartitaliccorrection. \def\cite#1{{\sl #1}\smartitaliccorrection} % @var unconditionally uses \sl. This gives consistency for % parameter names whether they are in @def, @table @code or a % regular paragraph. % To get ttsl font for @var when used in code context, @set txicodevaristt. % The \null is to reset \spacefactor. \def\aftersmartic{} \def\var#1{% \let\saveaftersmartic = \aftersmartic \def\aftersmartic{\null\let\aftersmartic=\saveaftersmartic}% % \ifflagclear{txicodevaristt}% {\def\varnext{{{\sl #1}}\smartitaliccorrection}}% {\def\varnext{\smartslanted{#1}}}% \varnext } % To be removed after next release \def\SETtxicodevaristt{}% @set txicodevaristt \let\i=\smartitalic \let\slanted=\smartslanted \let\dfn=\smartslanted \let\emph=\smartitalic % @r for roman font, used for code comment \def\r#1{{% \usenormaldash % get --, --- ligatures even if in @code \defcharsdefault % in case on def line \rm #1}} {\catcode`-=\active \gdef\usenormaldash{\let-\normaldash}} % @sc, undocumented @ii. \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}} \newif\iffrenchspacing \frenchspacingfalse % 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{% \iffrenchspacing\else \frenchspacingtrue \sfcode`\.=\@m \sfcode`\?=\@m \sfcode`\!=\@m \sfcode`\:=\@m \sfcode`\;=\@m \sfcode`\,=\@m \def\endofsentencespacefactor{1000}% for @. and friends \fi } \def\plainnonfrenchspacing{% \iffrenchspacing \frenchspacingfalse \sfcode`\.3000\sfcode`\?3000\sfcode`\!3000 \sfcode`\:2000\sfcode`\;1500\sfcode`\,1250 \def\endofsentencespacefactor{3000}% for @. and friends \fi } \catcode`@=\other \def\endofsentencespacefactor{3000}% default % @frenchspacing on|off says whether to put extra space after punctuation. % \def\onword{on} \def\offword{off} % \let\frenchspacingsetting\plainnonfrenchspacing % used in output routine \parseargdef\frenchspacing{% \def\temp{#1}% \ifx\temp\onword \let\frenchspacingsetting\plainfrenchspacing \else\ifx\temp\offword \let\frenchspacingsetting\plainnonfrenchspacing \else \errhelp = \EMsimple \errmessage{Unknown @frenchspacing option `\temp', must be on|off}% \fi\fi \frenchspacingsetting } % @t, explicit typewriter. \def\t#1{% {\tt \defcharsdefault \plainfrenchspacing #1}% \null } % @samp. \def\samp#1{{\setcodequotes\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 % % `\ ' produces the large typewriter interword space. \def\ {{\spaceskip = 0pt{} }}% % \plainfrenchspacing #1% }% \null % reset spacefactor to 1000 } % This is for LuaTeX: It is not sufficient to disable hyphenation at % explicit dashes by setting `\hyphenchar` to -1. \def\dashnobreak{% \normaldash \penalty 10000 } % 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. % We explicitly allow hyphenation at these characters % using \discretionary. % % Hyphenation at - and hyphenation within words was turned off % by default for the tt fonts using the \hyphenchar parameter of TeX. { \catcode`\-=\active \catcode`\_=\active \catcode`\'=\active \catcode`\`=\active \global\let'=\rq \global\let`=\lq % default definitions % \global\def\code{\begingroup \setcodequotes \catcode\dashChar=\active \catcode\underChar=\active \ifallowcodebreaks \let-\codedash \let_\codeunder \else \let-\dashnobreak \let_\realunder \fi \codex } % \gdef\codedash{\futurelet\next\codedashfinish} \gdef\codedashfinish{% \normaldash % always output the dash character itself. % % Now, output a discretionary to allow a line break, unless % (a) the next character is a -, or % (b) the preceding character is a -, or % (c) we are at the start of the string. % In both cases (b) and (c), \codedashnobreak should be set to \codedash. % % E.g., given --posix, we do not want to allow a break after either -. % Given --foo-bar, we do want to allow a break between the - and the b. \ifx\next\codedash \else \ifx\codedashnobreak\codedash \else \discretionary{}{}{}\fi \fi % we need the space after the = for the case when \next itself is a % space token; it would get swallowed otherwise. As in @code{- a}. \global\let\codedashnobreak= \next } } \def\normaldash{-} % \def\codex #1{\tclose{% % Given -foo (with a single dash), we do not want to allow a break % after the -. \codedashnobreak is set to the first character in % @code. \futurelet\codedashnobreak\relax #1% }\endgroup} \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') aka @url 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. % TeX-only option to allow changing PDF output to show only the second % arg (if given), and not the url (which is then just the link target). \newif\ifurefurlonlylink % The default \pretolerance setting stops the penalty inserted in % \urefallowbreak being a discouragement to line breaking. Set it to % a negative value for this paragraph only. Hopefully this does not % conflict with redefinitions of \par done elsewhere. \def\nopretolerance{% \pretolerance=-1 \def\par{\endgraf\pretolerance=100 \let\par\endgraf}% } % The main macro is \urefbreak, which allows breaking at expected % places within the url. \def\urefbreak{\nopretolerance \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}% look for second arg \ifdim\wd0 > 0pt \ifpdf % For pdfTeX and LuaTeX \ifurefurlonlylink % PDF plus option to not display url, show just arg \unhbox0 \else % PDF, normally display both arg and url for consistency, % visibility, if the pdf is eventually used to print, etc. \unhbox0\ (\urefcode{#1})% \fi \else \ifx\XeTeXrevision\thisisundefined \unhbox0\ (\urefcode{#1})% DVI, always show arg and url \else % For XeTeX \ifurefurlonlylink % PDF plus option to not display url, show just arg \unhbox0 \else % PDF, normally display both arg and url for consistency, % visibility, if the pdf is eventually used to print, etc. \unhbox0\ (\urefcode{#1})% \fi \fi \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`\&=\active \catcode`\.=\active \catcode`\#=\active \catcode`\?=\active \catcode`\/=\active } { \urefcatcodes % \global\def\urefcode{\begingroup \setcodequotes \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} } \def\urefcodeamp{\urefprebreak \&\urefpostbreak} \def\urefcodedot{\urefprebreak .\urefpostbreak} \def\urefcodehash{\urefprebreak \#\urefpostbreak} \def\urefcodequest{\urefprebreak ?\urefpostbreak} \def\urefcodeslash{\futurelet\next\urefcodeslashfinish} { \catcode`\/=\active \global\def\urefcodeslashfinish{% \urefprebreak \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 \urefpostbreak \fi } } % 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{\urefallowbreak}\def\urefpostbreak{\nobreak} \else\ifx\txiarg\wordafter \def\urefprebreak{\nobreak}\def\urefpostbreak{\urefallowbreak} \else \errhelp = \EMsimple \errmessage{Unknown @urefbreakstyle setting `\txiarg'}% \fi\fi\fi } \def\wordafter{after} \def\wordbefore{before} \def\wordnone{none} % Allow a ragged right output to aid breaking long URL's. There can % be a break at the \allowbreak with no extra glue (if the existing stretch in % the line is sufficient), a break at the \penalty with extra glue added % at the end of the line, or no break at all here. % Changing the value of the penalty and/or the amount of stretch affects how % preferable one choice is over the other. \def\urefallowbreak{% \penalty0\relax \hskip 0pt plus 2 em\relax \penalty1000\relax \hskip 0pt plus -2 em\relax } \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} \ifpdforxetex \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 \def\kbd#1{% \tclose{\kbdfont\setcodequotes#1}% } % 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. % \def\key#1{{\setregularquotes \tt #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} % @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{% {\switchtolsize #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{% \ifmmode\else % only go into math if not in math mode already \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 % have to provide another name for sup operator \let\mathopsup=\sup $\expandafter\finishmath\fi } \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 } } % for @sub and @sup, if in math mode, just do a normal sub/superscript. % If in text, use math to place as sub/superscript, but switch % into text mode, with smaller fonts. This is a different font than the % one used for real math sub/superscripts (8pt vs. 7pt), but let's not % fix it (significant additions to font machinery) until someone notices. % \def\sub{\ifmmode \expandafter\sb \else \expandafter\finishsub\fi} \def\finishsub#1{$\sb{\hbox{\switchtolllsize #1}}$}% % \def\sup{\ifmmode \expandafter\ptexsp \else \expandafter\finishsup\fi} \def\finishsup#1{$\ptexsp{\hbox{\switchtolllsize #1}}$}% % provide this command from LaTeX as it is very common \def\frac#1#2{{{#1}\over{#2}}} % @displaymath. % \globaldefs is needed to recognize the end lines in \tex and % \end tex. Set \thisenv as @end displaymath is seen before @end tex. {\obeylines \globaldefs=1 \envdef\displaymath{% \tex% \def\thisenv{\displaymath}% \begingroup\let\end\displaymathend% $$% } \def\displaymathend{$$\endgroup\end}% \def\Edisplaymath{% \def\thisenv{\tex}% \end tex }} % @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 } % % @inlinefmtifelse{FMTNAME,THEN-TEXT,ELSE-TEXT} expands THEN-TEXT if % FMTNAME is tex, else ELSE-TEXT. \long\def\inlinefmtifelse#1{\doinlinefmtifelse #1,,,\finish} \long\def\doinlinefmtifelse#1,#2,#3,#4,\finish{% \def\inlinefmtname{#1}% \ifx\inlinefmtname\outfmtnametex \ignorespaces #2\else \ignorespaces #3\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. } % @inlineifset{VAR, TEXT} expands TEXT if VAR is @set. % \long\def\inlineifset#1{\doinlineifset #1,\finish} \long\def\doinlineifset#1,#2,\finish{% \def\inlinevarname{#1}% \expandafter\ifx\csname SET\inlinevarname\endcsname\relax \else\ignorespaces#2\fi } % @inlineifclear{VAR, TEXT} expands TEXT if VAR is not @set. % \long\def\inlineifclear#1{\doinlineifclear #1,\finish} \long\def\doinlineifclear#1,#2,\finish{% \def\inlinevarname{#1}% \expandafter\ifx\csname SET\inlinevarname\endcsname\relax \ignorespaces#2\fi } \message{glyphs,} % and logos. % @@ prints an @, as does @atchar{}. \def\@{\char64 } \let\atchar=\@ % @{ @} @lbracechar{} @rbracechar{} all generate brace characters. \def\lbracechar{{\ifusingtt{\char123}{\ensuremath\lbrace}}} \def\rbracechar{{\ifusingtt{\char125}{\ensuremath\rbrace}}} \let\{=\lbracechar \let\}=\rbracechar % @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{\switchtolllsize \underbar{a}}} \def\ordm{\leavevmode\raise1ex\hbox{\switchtolllsize \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 \ifx\curfontsize\smallword % For footnotes and indices \count255=\the\fam $\fam\count255 \scriptstyle A$% \else % For 11pt, we can use our lllsize. \switchtolllsize A% \fi \fi }% \vss }}% \kern-.15em \TeX } \def\smallword{small} % Some math mode symbols. Define \ensuremath to switch into math mode % unless we are already there. Expansion tricks may not be needed here, % but safer, and can't hurt. \def\ensuremath{\ifmmode \expandafter\asis \else\expandafter\ensuredmath \fi} \def\ensuredmath#1{$\relax#1$} % \def\bullet{\ensuremath\ptexbullet} \def\geq{\ensuremath\ge} \def\leq{\ensuremath\le} \def\minus{\ensuremath-} % @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 % {\ttfont \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{{\ifusingtt{\ecfont\char"BF}{\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}} % \def\L{{\ecfont \char"8A}} % L with stroke \def\l{{\ecfont \char"AA}} % l with stroke % % 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 European Computer Modern fonts (cm-super in outline format) % for non-CM glyphs. That is ec* for regular text and tc* for the text % companion symbols (LaTeX TS1 encoding). Both are part of the ec % package and follow the same conventions. % \def\ecfont{\etcfont{e}} \def\tcfont{\etcfont{t}} % \def\etcfont#1{% % 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}% \ifusingtt % typewriter: {\font\thisecfont = #1ctt\ecsize \space at \nominalsize}% % else {\ifx\curfontstyle\bfstylename % bold: \font\thisecfont = #1cb\ifusingit{i}{x}\ecsize \space at \nominalsize \else % regular: \font\thisecfont = #1c\ifusingit{ti}{rm}\ecsize \space at \nominalsize \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{\switchtolllsize R}% \hfil\crcr\Orb}}% }$% } % @textdegree - the normal degrees sign. % \def\textdegree{% \ifmmode ^\circ \else {\tcfont \char 176}% \fi} % 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\quoteleft=`\` \chardef\quoteright=`\' % only change font for tt for correct kerning and to avoid using % \ecfont unless necessary. \def\quotedblleft{% \ifusingtt{{\ecfont\char"10}}{{\char"5C}}% } \def\quotedblright{% \ifusingtt{{\ecfont\char"11}}{{\char`\"}}% } \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 % @setcontentsaftertitlepage used to do an implicit @contents or % @shortcontents after @end titlepage, but it is now obsolete. \def\setcontentsaftertitlepage{% \errmessage{@setcontentsaftertitlepage has been removed as a Texinfo command; move your @contents command if you want the contents after the title page.}}% \def\setshortcontentsaftertitlepage{% \errmessage{@setshortcontentsaftertitlepage has been removed as a Texinfo command; move your @shortcontents and @contents commands if you want the contents after the title page.}}% \parseargdef\shorttitlepage{% {\headingsoff \begingroup \hbox{}\vskip 1.5in \chaprm \centerline{#1}% \endgroup\page\hbox{}\page}\pageone} \envdef\titlepage{% % Open one extra group, as we want to close it in the middle of \Etitlepage. \begingroup \parindent=0pt \textfonts \headingsoff % 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 \pageone \endgroup % } \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. \par should % be specified before the end of the \vbox, since a vbox is a group. % \def\raggedtitlesettings{% \rm \hyphenpenalty=10000 \parindent=0pt \tolerance=5000 \ptexraggedright } % Macros to be used within @titlepage: \let\subtitlerm=\rmfont \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\rm \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\evenchapheadline% headline on even pages with a new chapter \newtoks\oddchapheadline % headline on odd pages with a new chapter \newtoks\evenfootline % footline on even pages \newtoks\oddfootline % footline on odd pages % Now make \makeheadline and \makefootline in Plain TeX use those variables \headline={{\textfonts\rm\frenchspacingsetting \ifchapterpage \ifodd\pageno\the\oddchapheadline\else\the\evenchapheadline\fi \else \ifodd\pageno\the\oddheadline\else\the\evenheadline\fi \fi}} \footline={{\textfonts\rm\frenchspacingsetting \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}} \global\evenchapheadline=\evenheadline} \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}}% \global\oddchapheadline=\oddheadline} \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\txipageheight 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 % These define \getoddheadingmarks, \getevenheadingmarks, % \getoddfootingmarks, and \getevenfootingmarks, each to one of % \gettopheadingmarks, \getbottomheadingmarks. % \def\evenheadingmarks{\headingmarks{even}{heading}} \def\oddheadingmarks{\headingmarks{odd}{heading}} \def\evenfootingmarks{\headingmarks{even}{footing}} \def\oddfootingmarks{\headingmarks{odd}{footing}} \parseargdef\everyheadingmarks{\headingmarks{even}{heading}{#1} \headingmarks{odd}{heading}{#1} } \parseargdef\everyfootingmarks{\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. \parseargdef\headings{\csname HEADINGS#1\endcsname} \def\headingsoff{% non-global headings elimination \evenheadline={\hfil}\evenfootline={\hfil}\evenchapheadline={\hfil}% \oddheadline={\hfil}\oddfootline={\hfil}\oddchapheadline={\hfil}% } \def\HEADINGSoff{{\globaldefs=1 \headingsoff}} % global setting % Set the page number to 1. \def\pageone{ \global\pageno=1 \global\arabiccount = \pagecount } \let\contentsalignmacro = \chappager % \def\HEADINGSon{\HEADINGSdouble} % defined by \CHAPPAGon % 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\HEADINGSafter{\let\HEADINGShook=\HEADINGSdouble} \let\HEADINGSdoubleafter=\HEADINGSafter \def\HEADINGSdouble{% \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\folio\hfil\thistitle}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\evenchapheadline={\line{\folio\hfil\thistitle}} \global\oddchapheadline={\line{\hfil\folio}} \global\let\contentsalignmacro = \chapoddpage } % For single-sided printing, chapter title goes across top left of page, % page number on top right. \def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsingle} \def\HEADINGSsingle{% \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\thischapter\hfil\folio}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\evenchapheadline={\line{\hfil\folio}} \global\oddchapheadline={\line{\hfil\folio}} \global\let\contentsalignmacro = \chappager } % for @setchapternewpage off \def\HEADINGSsinglechapoff{% \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\thischapter\hfil\folio}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\evenchapheadline=\evenheadline \global\oddchapheadline=\oddheadline \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 so 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}% % \ifinner\else \vadjust{\penalty 1200}% not good to break after first line of item. \fi % We can be in inner vertical mode in a footnote, although an % @itemize looks awful there. }% \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 } % @multitable macros % 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 } % @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 below 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{% \crcr % must appear first \gdef\headitemcrhook{\nobreak}% attempt to avoid page break after headings \global\everytab={\bf}% can't use \headitemfont since the parsing differs \the\everytab % for the first item }% % % default for tables with no headings. \let\headitemcrhook=\relax % \def\tab{\checkenv\multitable &\the\everytab}% \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 \parskip=0pt \parindent=6pt \overfullrule=0pt \global\colcount=0 % \everycr = {% \noalign{% \global\everytab={}% Reset from possible headitem. \global\colcount=0 % Reset the column counter. % % Check for saved footnotes, etc.: \checkinserts % % Perhaps a \nobreak, then reset: \headitemcrhook \global\let\headitemcrhook=\relax }% }% % \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 \strut \vtop{% \advance\hsize by -1\leftskip % Find the correct column width \hsize=\expandafter\csname col\the\colcount\endcsname % \advance\rightskip by -1\rightskip % Zero leaving only any stretch \ifnum\colcount=1 \advance\hsize by\leftskip % Add indent of surrounding text \else % In order to keep entries from bumping into each other. \leftskip=12pt \ifsetpercent \else % If a template has been used \advance\hsize by \leftskip \fi \fi \noindent\ignorespaces##\unskip\strut }\cr } \def\Emultitable{% \crcr \egroup % end the \halign \global\setpercentfalse } \message{conditionals,} % @iftex, @ifnotdocbook, @ifnothtml, @ifnotinfo, @ifnotlatex, @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{ifnotlatex} \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\iflatex{\doignore{iflatex}} \def\ifnottex{\doignore{ifnottex}} \def\ifplaintext{\doignore{ifplaintext}} \def\ifxml{\doignore{ifxml}} \def\ignore{\doignore{ignore}} \def\latex{\doignore{latex}} \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 } } \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 } % Like \expandablevalue, but completely expandable (the \message in the % definition above operates at the execution level of TeX). Used when % writing to auxiliary files, due to the expansion that \write does. % If flag is undefined, pass through an unexpanded @value command: maybe it % will be set by the time it is read back in. % % NB flag names containing - or _ may not work here. \def\dummyvalue#1{% \expandafter\ifx\csname SET#1\endcsname\relax \string\value{#1}% \else \csname SET#1\endcsname \fi } % Used for @value's in index entries to form the sort key: expand the @value % if possible, otherwise sort late. \def\indexnofontsvalue#1{% \expandafter\ifx\csname SET#1\endcsname\relax ZZZZZZZ% \else \csname SET#1\endcsname \fi } % @ifset VAR ... @end ifset reads the `...' iff VAR has been defined % with @set. % % To get the special treatment we need for `@end ifset,' we call % \makecond and then 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 {IX} defines an index named IX. % It automatically defines \IXindex such that % \IXindex ...rest of line... puts an entry in the index IX. % It also defines \IXindfile to be the number of the output channel for % the file that accumulates this index. The file's extension is IX. % \def\newindex#1{% \expandafter\chardef\csname#1indfile\endcsname=0 \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{% \expandafter\chardef\csname#1indfile\endcsname=0 \expandafter\xdef\csname#1index\endcsname{% \noexpand\docodeindex{#1}}% } % The default indices: \newindex{cp}% concepts, \newcodeindex{fn}% functions, \newcodeindex{vr}% variables, \newcodeindex{tp}% types, \newcodeindex{ky}% keys \newcodeindex{pg}% and programs. % @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{% \requireopenindexfile{#3}% % 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 index macros. % Argument #1 is generated by the calling \fooindex macro, % and it is the two-letter name of the index. \def\doindex#1{\edef\indexname{#1}\parsearg\doindexxxx} \def\doindexxxx #1{\doind{\indexname}{#1}} % like the previous two, but they put @code around the argument. \def\docodeindex#1{\edef\indexname{#1}\parsearg\docodeindexxxx} \def\docodeindexxxx #1{\docind{\indexname}{#1}} % \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. % % 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). % % For control letters, we have \definedummyletter, which omits the % space. % \def\definedummyword #1{\def#1{\string#1\space}}% \def\definedummyletter#1{\def#1{\string#1}}% % Used for the aux, toc and index files to prevent expansion of Texinfo % commands. Most of the commands are controlled through the % \ifdummies conditional. % \def\atdummies{% \dummiestrue % \definedummyletter\@% \definedummyletter\ % \definedummyletter\{% \definedummyletter\}% \definedummyletter\&% % \definedummyletter\_% \definedummyletter\-% % \definedummyword\subentry % % We want to disable all macros so that they are not expanded by \write. \let\commondummyword\definedummyword \macrolist \let\value\dummyvalue % \turnoffactive } \newif\ifdummies \newif\ifindexnofonts \def\commondummyletter#1{% \expandafter\let\csname\string#1:impl\endcsname#1% \edef#1{% \noexpand\ifindexnofonts % empty expansion \noexpand\else \noexpand\ifdummies\string#1% \noexpand\else \noexpand\jumptwofi % dispose of the \fi \expandafter\noexpand\csname\string#1:impl\endcsname \noexpand\fi \noexpand\fi}% } \def\commondummyaccent#1{% \expandafter\let\csname\string#1:impl\endcsname#1% \edef#1{% \noexpand\ifindexnofonts \noexpand\expandafter % dispose of \else ... \fi \noexpand\asis \noexpand\else \noexpand\ifdummies\string#1% \noexpand\else \noexpand\jumptwofi % dispose of the \fi \expandafter\noexpand\csname\string#1:impl\endcsname \noexpand\fi \noexpand\fi}% } % Like \commondummyaccent but add a \space at the end of the dummy expansion % #2 is the expansion used for \indexnofonts. #2 is always followed by % \asis to remove a pair of following braces. \def\commondummyword#1#2{% \expandafter\let\csname\string#1:impl\endcsname#1% \expandafter\def\csname\string#1:ixnf\endcsname{#2\asis}% \edef#1{% \noexpand\ifindexnofonts \noexpand\expandafter % dispose of \else ... \fi \expandafter\noexpand\csname\string#1:ixnf\endcsname \noexpand\else \noexpand\ifdummies\string#1\space \noexpand\else \noexpand\jumptwofi % dispose of the \fi \fi \expandafter\noexpand\csname\string#1:impl\endcsname \noexpand\fi \noexpand\fi}% } \def\jumptwofi#1\fi\fi{\fi\fi#1} % For \atdummies and \indexnofonts. \atdummies sets % \dummiestrue and \indexnofonts sets \indexnofontstrue. \def\definedummies{ % @-sign is always an escape character when reading auxiliary files \escapechar = `\@ % \commondummyletter\!% \commondummyaccent\"% \commondummyaccent\'% \commondummyletter\*% \commondummyaccent\,% \commondummyletter\.% \commondummyletter\/% \commondummyletter\:% \commondummyaccent\=% \commondummyletter\?% \commondummyaccent\^% \commondummyaccent\`% \commondummyaccent\~% % % Control letters and accents. \commondummyword\u {}% \commondummyword\v {}% \commondummyword\H {}% \commondummyword\dotaccent {}% \commondummyword\ogonek {}% \commondummyword\ringaccent {}% \commondummyword\tieaccent {}% \commondummyword\ubaraccent {}% \commondummyword\udotaccent {}% \commondummyword\dotless {}% % % Texinfo font commands. \commondummyword\b {}% \commondummyword\i {}% \commondummyword\r {}% \commondummyword\sansserif {}% \commondummyword\sc {}% \commondummyword\slanted {}% \commondummyword\t {}% % % Commands that take arguments. \commondummyword\abbr {}% \commondummyword\acronym {}% \commondummyword\anchor {}% \commondummyword\cite {}% \commondummyword\code {}% \commondummyword\command {}% \commondummyword\dfn {}% \commondummyword\dmn {}% \commondummyword\email {}% \commondummyword\emph {}% \commondummyword\env {}% \commondummyword\file {}% \commondummyword\image {}% \commondummyword\indicateurl{}% \commondummyword\inforef {}% \commondummyword\kbd {}% \commondummyword\key {}% \commondummyword\math {}% \commondummyword\option {}% \commondummyword\pxref {}% \commondummyword\ref {}% \commondummyword\samp {}% \commondummyword\strong {}% \commondummyword\tie {}% \commondummyword\U {}% \commondummyword\uref {}% \commondummyword\url {}% \commondummyword\var {}% \commondummyword\verb {}% \commondummyword\w {}% \commondummyword\xref {}% % \commondummyword\AA {AA}% \commondummyword\AE {AE}% \commondummyword\DH {DZZ}% \commondummyword\L {L}% \commondummyword\O {O}% \commondummyword\OE {OE}% \commondummyword\TH {TH}% \commondummyword\aa {aa}% \commondummyword\ae {ae}% \commondummyword\dh {dzz}% \commondummyword\exclamdown {!}% \commondummyword\l {l}% \commondummyword\o {o}% \commondummyword\oe {oe}% \commondummyword\ordf {a}% \commondummyword\ordm {o}% \commondummyword\questiondown {?}% \commondummyword\ss {ss}% \commondummyword\th {th}% % \commondummyword\LaTeX {LaTeX}% \commondummyword\TeX {TeX}% % % Assorted special characters. \commondummyword\ampchar {\normalamp}% \commondummyword\atchar {\@}% \commondummyword\arrow {->}% \commondummyword\backslashchar {\realbackslash}% \commondummyword\bullet {bullet}% \commondummyword\comma {,}% \commondummyword\copyright {copyright}% \commondummyword\dots {...}% \commondummyword\enddots {...}% \commondummyword\entrybreak {}% \commondummyword\equiv {===}% \commondummyword\error {error}% \commondummyword\euro {euro}% \commondummyword\expansion {==>}% \commondummyword\geq {>=}% \commondummyword\guillemetleft {<<}% \commondummyword\guillemetright {>>}% \commondummyword\guilsinglleft {<}% \commondummyword\guilsinglright {>}% \commondummyword\lbracechar {\{}% \commondummyword\leq {<=}% \commondummyword\mathopsup {sup}% \commondummyword\minus {-}% \commondummyword\pounds {pounds}% \commondummyword\point {.}% \commondummyword\print {-|}% \commondummyword\quotedblbase {"}% \commondummyword\quotedblleft {"}% \commondummyword\quotedblright {"}% \commondummyword\quoteleft {`}% \commondummyword\quoteright {'}% \commondummyword\quotesinglbase {,}% \commondummyword\rbracechar {\}}% \commondummyword\registeredsymbol {R}% \commondummyword\result {=>}% \commondummyword\sub {}% \commondummyword\sup {}% \commondummyword\textdegree {o}% } \let\indexlbrace\relax \let\indexrbrace\relax \let\indexatchar\relax \let\indexbackslash\relax {\catcode`\@=0 \catcode`\\=13 @gdef@backslashdisappear{@def\{}} } { \catcode`\<=13 \catcode`\-=13 \catcode`\`=13 \gdef\indexnonalnumdisappear{% \ifflagclear{txiindexlquoteignore}{}{% % @set txiindexlquoteignore makes us ignore left quotes in the sort term. % (Introduced for FSFS 2nd ed.) \let`=\empty }% % \ifflagclear{txiindexbackslashignore}{}{% \backslashdisappear }% \ifflagclear{txiindexhyphenignore}{}{% \def-{}% }% \ifflagclear{txiindexlessthanignore}{}{% \def<{}% }% \ifflagclear{txiindexatsignignore}{}{% \def\@{}% }% } \gdef\indexnonalnumreappear{% \let-\normaldash \let<\normalless } } % \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{% \indexnofontstrue % \def\ { }% \def\@{@}% \def\_{\normalunderscore}% \def\-{}% @- shouldn't affect sorting % \uccode`\1=`\{ \uppercase{\def\{{1}}% \uccode`\1=`\} \uppercase{\def\}{1}}% \let\lbracechar\{% \let\rbracechar\}% % % % 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. % % 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. % \def\commondummyword##1{\let##1\asis}% \macrolist \let\value\indexnofontsvalue } % #1 is the index name, #2 is the entry text. \def\doind#1#2{% \iflinks {% % \requireopenindexfile{#1}% \edef\writeto{\csname#1indfile\endcsname}% % \def\indextext{#2}% \safewhatsit\doindwrite }% \fi } % Same as \doind, but for code indices \def\docind#1#2{% \iflinks {% % \requireopenindexfile{#1}% \edef\writeto{\csname#1indfile\endcsname}% % \def\indextext{#2}% \safewhatsit\docindwrite }% \fi } % Check if an index file has been opened, and if not, open it. \def\requireopenindexfile#1{% \ifnum\csname #1indfile\endcsname=0 \expandafter\newwrite \csname#1indfile\endcsname \edef\suffix{#1}% % A .fls suffix would conflict with the file extension for the output % of -recorder, so use .f1s instead. \ifx\suffix\indexisfl\def\suffix{f1}\fi % Open the file \immediate\openout\csname#1indfile\endcsname \jobname.\suffix % Using \immediate above here prevents an object entering into the current % box, which could confound checks such as those in \safewhatsit for % preceding skips. \typeout{Writing index file \jobname.\suffix}% \fi} \def\indexisfl{fl} % Definition for writing index entry sort key. { \catcode`\-=13 \gdef\indexwritesortas{% \begingroup \indexnonalnumreappear \indexwritesortasxxx} \gdef\indexwritesortasxxx#1{% \xdef\indexsortkey{#1}\endgroup} } \def\indexwriteseealso#1{ \gdef\pagenumbertext{\string\seealso{#1}}% } \def\indexwriteseeentry#1{ \gdef\pagenumbertext{\string\seeentry{#1}}% } % The default definitions \def\sortas#1{}% \def\seealso#1{\i{\putwordSeeAlso}\ #1}% for sorted index file only \def\putwordSeeAlso{See also} \def\seeentry#1{\i{\putwordSee}\ #1}% for sorted index file only % Given index entry text like "aaa @subentry bbb @sortas{ZZZ}": % * Set \bracedtext to "{aaa}{bbb}" % * Set \fullindexsortkey to "aaa @subentry ZZZ" % * If @seealso occurs, set \pagenumbertext % \def\splitindexentry#1{% \gdef\fullindexsortkey{}% \xdef\bracedtext{}% \def\sep{}% \def\seealso##1{}% \def\seeentry##1{}% \expandafter\doindexsegment#1\subentry\finish\subentry } % append the results from the next segment \def\doindexsegment#1\subentry{% \def\segment{#1}% \ifx\segment\isfinish \else % % Fully expand the segment, throwing away any @sortas directives, and % trim spaces. \edef\trimmed{\segment}% \edef\trimmed{\expandafter\eatspaces\expandafter{\trimmed}}% \ifincodeindex \edef\trimmed{\noexpand\code{\trimmed}}% \fi % \xdef\bracedtext{\bracedtext{\trimmed}}% % % Get the string to sort by. Process the segment with all % font commands turned off. \bgroup \let\sortas\indexwritesortas \let\seealso\indexwriteseealso \let\seeentry\indexwriteseeentry \indexnofonts % The braces around the commands are recognized by texindex. \def\lbracechar{{\string\indexlbrace}}% \def\rbracechar{{\string\indexrbrace}}% \let\{=\lbracechar \let\}=\rbracechar \def\@{{\string\indexatchar}}% \def\atchar##1{\@}% \def\backslashchar{{\string\indexbackslash}}% \uccode`\~=`\\ \uppercase{\let~\backslashchar}% % \let\indexsortkey\empty \global\let\pagenumbertext\empty % Execute the segment and throw away the typeset output. This executes % any @sortas or @seealso commands in this segment. \setbox\dummybox = \hbox{\segment}% \ifx\indexsortkey\empty{% \indexnonalnumdisappear \xdef\trimmed{\segment}% \xdef\trimmed{\expandafter\eatspaces\expandafter{\trimmed}}% \xdef\indexsortkey{\trimmed}% \ifx\indexsortkey\empty \message{Empty index sort key near line \the\inputlineno}% \xdef\indexsortkey{ }% \fi }\fi % % Append to \fullindexsortkey. \edef\tmp{\gdef\noexpand\fullindexsortkey{% \fullindexsortkey\sep\indexsortkey}}% \tmp \egroup \def\sep{\subentry}% % \expandafter\doindexsegment \fi } \def\isfinish{\finish}% \newbox\dummybox % used above \let\subentry\relax % Use \ instead of @ in index files. To support old texi2dvi and texindex. % This works without changing the escape character used in the toc or aux % files because the index entries are fully expanded here, and \string uses % the current value of \escapechar. \def\escapeisbackslash{\escapechar=`\\} % Use \ in index files by default. texi2dvi didn't support @ as the escape % character (as it checked for "\entry" in the files, and not "@entry"). When % the new version of texi2dvi has had a chance to become more prevalent, then % the escape character can change back to @ again. This should be an easy % change to make now because both @ and \ are only used as escape characters in % index files, never standing for themselves. % \set txiindexescapeisbackslash % Write the entry in \indextext to the index file. % \newif\ifincodeindex \def\doindwrite{\incodeindexfalse\doindwritex} \def\docindwrite{\incodeindextrue\doindwritex} \def\doindwritex{% \maybemarginindex % \atdummies % \ifflagclear{txiindexescapeisbackslash}{}{\escapeisbackslash}% % % For texindex which always views { and } as separators. \def\{{\lbracechar{}}% \def\}{\rbracechar{}}% \uccode`\~=`\\ \uppercase{\def~{\backslashchar{}}}% % % Split the entry into primary entry and any subentries, and get the index % sort key. \splitindexentry\indextext % % 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{\fullindexsortkey}% {\ifx\pagenumbertext\empty\noexpand\folio\else\pagenumbertext\fi}% \bracedtext}% }% \temp } % Put the index entry in the margin if desired (undocumented). \def\maybemarginindex{% \ifx\SETmarginindex\relax\else \insert\margin{\hbox{\vrule height8pt depth3pt width0pt \relax\indextext}}% \fi } \let\SETmarginindex=\relax % 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} % \entry {topic}{} % for the beginning of a topic that is used with subtopics % \secondary {subtopic}{pagelist} % for each subtopic. % \secondary {subtopic}{} % for a subtopic with sub-subtopics % \tertiary {subtopic}{subsubtopic}{pagelist} % for each sub-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} % 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 comment in \requireopenindexfile. \def\indexname{#1}\ifx\indexname\indexisfl\def\indexname{f1}\fi % % See if the index file exists and is nonempty. \openin 1 \jobname.\indexname s \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 \typeout{No file \jobname.\indexname s.}% \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 \thisline \ifeof 1 \putwordIndexIsEmpty \else \expandafter\printindexzz\thisline\relax\relax\finish% \fi \fi \closein 1 \endgroup} % If the index file starts with a backslash, forgo reading the index % file altogether. If somebody upgrades texinfo.tex they may still have % old index files using \ as the escape character. Reading this would % at best lead to typesetting garbage, at worst a TeX syntax error. \def\printindexzz#1#2\finish{% \ifflagclear{txiindexescapeisbackslash}{% \uccode`\~=`\\ \uppercase{\if\noexpand~}\noexpand#1 \ifflagclear{txiskipindexfileswithbackslash}{% \errmessage{% ERROR: A sorted index file in an obsolete format was skipped. To fix this problem, please upgrade your version of 'texi2dvi' or 'texi2pdf' to that at <https://ftp.gnu.org/gnu/texinfo>. If you are using an old version of 'texindex' (part of the Texinfo distribution), you may also need to upgrade to a newer version (at least 6.0). You may be able to typeset the index if you run 'texindex \jobname.\indexname' yourself. You could also try setting the 'txiindexescapeisbackslash' flag by running a command like 'texi2dvi -t "@set txiindexescapeisbackslash" \jobname.texi'. If you do this, Texinfo will try to use index files in the old format. If you continue to have problems, deleting the index files and starting again might help (with 'rm \jobname.?? \jobname.??s')% }% }{% (Skipped sorted index file in obsolete format) }% \else \begindoublecolumns \input \jobname.\indexname s \enddoublecolumns \fi }{% \begindoublecolumns \catcode`\\=0\relax % % Make @ an escape character to give macros a chance to work. This % should work because we (hopefully) don't otherwise use @ in index files. %\catcode`\@=12\relax \catcode`\@=0\relax \input \jobname.\indexname s \enddoublecolumns }% } % These macros are used by the sorted index file itself. % Change them to control the appearance of the index. {\catcode`\/=13 \catcode`\-=13 \catcode`\^=13 \catcode`\~=13 \catcode`\_=13 \catcode`\|=13 \catcode`\<=13 \catcode`\>=13 \catcode`\+=13 \catcode`\"=13 \catcode`\$=3 \gdef\initialglyphs{% % special control sequences used in the index sort key \let\indexlbrace\{% \let\indexrbrace\}% \let\indexatchar\@% \def\indexbackslash{\math{\backslash}}% % % Some changes for non-alphabetic characters. Using the glyphs from the % math fonts looks more consistent than the typewriter font used elsewhere % for these characters. \uccode`\~=`\\ \uppercase{\def~{\math{\backslash}}} % % In case @\ is used for backslash \uppercase{\let\\=~} % Can't get bold backslash so don't use bold forward slash \catcode`\/=13 \def/{{\secrmnotbold \normalslash}}% \def-{{\normaldash\normaldash}}% en dash `--' \def^{{\chapbf \normalcaret}}% \def~{{\chapbf \normaltilde}}% \def\_{% \leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em }% \def|{$\vert$}% \def<{$\less$}% \def>{$\gtr$}% \def+{$\normalplus$}% }} \def\initial{% \bgroup \initialglyphs \initialx } \def\initialx#1{% % Remove any glue we may have, we'll be inserting our own. \removelastskip % % We like breaks before the index initials, so insert a bonus. % The glue before the bonus allows a little bit of space at the % bottom of a column to reduce an increase in inter-line spacing. \nobreak \vskip 0pt plus 5\baselineskip \penalty -300 \vskip 0pt plus -5\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 1\baselineskip \leftline{\secfonts \kern-0.05em \secbf #1}% % \secfonts is inside the argument of \leftline so that the change of % \baselineskip will not affect any glue inserted before the vbox that % \leftline creates. % Do our best not to break after the initial. \nobreak \vskip .33\baselineskip plus .1\baselineskip \egroup % \initialglyphs } \newdimen\entryrightmargin \entryrightmargin=0pt % for PDF output, whether to make the text of the entry a link to the page % number. set for @contents and @shortcontents where there is only one % page number. \newif\iflinkentrytext % \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. % \def\entry{% \begingroup % % Start a new paragraph if necessary, so our assignments below can't % affect previous text. \par % % No extra space above this paragraph. \parskip = 0in % % 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}% An undocumented command % % Swallow the left brace of the text (first parameter): \afterassignment\doentry \let\temp = } \def\entrybreak{\unskip\space\ignorespaces}% \def\doentry{% % Save the text of the entry in \boxA \global\setbox\boxA=\hbox\bgroup \bgroup % Instead of the swallowed brace. \noindent \aftergroup\finishentry % And now comes the text of the entry. % Not absorbing as a macro argument reduces the chance of problems % with catcodes occurring. } {\catcode`\@=11 % #1 is the page number \gdef\finishentry#1{% \egroup % end \boxA \dimen@ = \wd\boxA % Length of text of entry % add any leaders and page number to \boxA. \global\setbox\boxA=\hbox\bgroup \ifpdforxetex \iflinkentrytext \pdflinkpage{#1}{\unhbox\boxA}% \else \unhbox\boxA \fi \else \unhbox\boxA \fi % % Get the width of the page numbers, and only use % leaders if they are present. \global\setbox\boxB = \hbox{#1}% \ifdim\wd\boxB = 0pt \null\nobreak\hfill\ % \else % \null\nobreak\indexdotfill % Have leaders before the page number. % \ifpdforxetex \pdfgettoks#1.% \hskip\skip\thinshrinkable\the\toksA \else \hskip\skip\thinshrinkable #1% \fi \fi \egroup % end \boxA % % now output \ifdim\wd\boxB = 0pt \noindent\unhbox\boxA\par \nobreak \else\bgroup % We want the text of the entries to be aligned to the left, and the % page numbers to be aligned to the right. % \parindent = 0pt \advance\leftskip by 0pt plus 1fil \advance\leftskip by 0pt plus -1fill \rightskip = 0pt plus -1fil \advance\rightskip by 0pt plus 1fill % Cause last line, which could consist of page numbers on their own % if the list of page numbers is long, to be aligned to the right. \parfillskip=0pt plus -1fill % \advance\rightskip by \entryrightmargin % Determine how far we can stretch into the margin. % This allows, e.g., "Appendix H GNU Free Documentation License" to % fit on one line in @letterpaper format. \ifdim\entryrightmargin>2.1em \dimen@i=2.1em \else \dimen@i=0em \fi \advance \parfillskip by 0pt minus 1\dimen@i % \dimen@ii = \hsize \advance\dimen@ii by -1\leftskip \advance\dimen@ii by -1\entryrightmargin \advance\dimen@ii by 1\dimen@i \ifdim\wd\boxA > \dimen@ii % If the entry doesn't fit in one line \ifdim\dimen@ > 0.8\dimen@ii % due to long index text % Try to split the text roughly evenly. \dimen@ will be the length of % the first line. \dimen@ = 0.7\dimen@ \dimen@ii = \hsize \ifnum\dimen@>\dimen@ii % If the entry is too long (for example, if it needs more than % two lines), use all the space in the first line. \dimen@ = \dimen@ii \fi \advance\leftskip by 0pt plus 1fill % ragged right \advance \dimen@ by 1\rightskip \parshape = 2 0pt \dimen@ 0em \dimen@ii % Ideally we'd add a finite glue at the end of the first line only, % instead of using \parshape with explicit line lengths, but TeX % doesn't seem to provide a way to do such a thing. % % Indent all lines but the first one. \advance\leftskip by 1em \advance\parindent by -1em \fi\fi \indent % start paragraph \unhbox\boxA % % Do not prefer a separate line ending with a hyphen to fewer lines. \finalhyphendemerits = 0 % % Word spacing - no stretch \spaceskip=\fontdimen2\font minus \fontdimen4\font % \linepenalty=1000 % Discourage line breaks. \hyphenpenalty=5000 % Discourage hyphenation. % \par % format the paragraph \egroup % The \vbox \fi \endgroup }} \newskip\thinshrinkable \skip\thinshrinkable=.15em minus .15em % Like plain.tex's \dotfill, except uses up at least 1 em. % The filll stretch here overpowers both the fil and fill stretch to push % the page number to the right. \def\indexdotfill{\cleaders \hbox{$\mathsurround=0pt \mkern1.5mu.\mkern1.5mu$}\hskip 1em plus 1filll} \def\primary #1{\line{#1\hfil}} \def\secondary{\indententry{0.5cm}} \def\tertiary{\indententry{1cm}} \def\indententry#1#2#3{% \bgroup \leftskip=#1 \entry{#2}{#3}% \egroup } % 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 % private names \newbox\partialpage \newdimen\doublecolumnhsize \def\begindoublecolumns{\begingroup % ended by \enddoublecolumns % If not much space left on page, start a new page. \ifdim\pagetotal>0.8\vsize\vfill\eject\fi % % Grab any single-column material above us. \output = {% \savetopmark % \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 % % Get the available space for the double columns -- the normal % (undoubled) page height minus any material left over from the % previous page. \advance\vsize by -\ht\partialpage \vsize = 2\vsize % % For the benefit of balancing columns \advance\baselineskip by 0pt plus 0.5pt } % The double-column output routine for all double-column pages except % the last, which is done by \balancecolumns. % \def\doublecolumnout{% % \savetopmark \splittopskip=\topskip \splitmaxdepth=\maxdepth \dimen@ = \vsize \divide\dimen@ by 2 % % box0 will be the left-hand column, box2 the right. \setbox0=\vsplit\PAGE to\dimen@ \setbox2=\vsplit\PAGE to\dimen@ \global\advance\vsize by 2\ht\partialpage \onepageout\pagesofar % empty except for the first time we are called \unvbox\PAGE \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\txipagewidth{\box0\hfil\box2}% } % Finished 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 \txipageheight (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. \savetopmark \balancecolumns }% \eject % call the \output just set \ifdim\pagetotal=0pt % Having called \balancecolumns once, we do not % want to call it again. Therefore, reset \output to its normal % definition right away. \global\output=\expandafter{\the\defaultoutput} % \endgroup % started in \begindoublecolumns % Leave the double-column material on the current page, no automatic % page break. \box\balancedcolumns % % \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. \global\vsize = \txipageheight % \pagegoal = \txipageheight % \else % We had some left-over material. This might happen when \doublecolumnout % is called in \balancecolumns. Try again. \expandafter\enddoublecolumns \fi } \newbox\balancedcolumns \setbox\balancedcolumns=\vbox{shouldnt see this}% % % Only called for the last of the double column material. \doublecolumnout % does the others. \def\balancecolumns{% \setbox0 = \vbox{\unvbox\PAGE}% like \box255 but more efficient, see p.120. \dimen@ = \ht0 \ifdim\dimen@<7\baselineskip % Don't split a short final column in two. \setbox2=\vbox{}% \global\setbox\balancedcolumns=\vbox{\pagesofar}% \else % double the leading vertical space \advance\dimen@ by \topskip \advance\dimen@ by-\baselineskip \divide\dimen@ by 2 % target to split to \dimen@ii = \dimen@ \splittopskip = \topskip % Loop until left column is at least as high as the right column. {% \vbadness = 10000 \loop \global\setbox3 = \copy0 \global\setbox1 = \vsplit3 to \dimen@ \ifdim\ht1<\ht3 \global\advance\dimen@ by 1pt \repeat }% % Now the left column is in box 1, and the right column in box 3. % % Check whether the left column has come out higher than the page itself. % (Note that we have doubled \vsize for the double columns, so % the actual height of the page is 0.5\vsize). \ifdim2\ht1>\vsize % It appears that we have been called upon to balance too much material. % Output some of it with \doublecolumnout, leaving the rest on the page. \setbox\PAGE=\box0 \doublecolumnout \else % Compare the heights of the two columns. \ifdim4\ht1>5\ht3 % Column heights are too different, so don't make their bottoms % flush with each other. \setbox2=\vbox to \ht1 {\unvbox3\vfill}% \setbox0=\vbox to \ht1 {\unvbox1\vfill}% \else % Make column bottoms flush with each other. \setbox2=\vbox to\ht1{\unvbox3\unskip}% \setbox0=\vbox to\ht1{\unvbox1\unskip}% \fi \global\setbox\balancedcolumns=\vbox{\pagesofar}% \fi \fi % } \catcode`\@ = \other \message{sectioning,} % Chapters, sections, etc. % Let's start with @part. \parseargdef\part{\partzzz{#1}} \def\partzzz#1{% \chapoddpage \null \vskip.3\vsize % move it down on the page a bit \begingroup \noindent \titlefonts\rm #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 % This outputs a mark at the end of the page that clears \thischapter % and \thissection, as is done in \startcontents. \let\pchapsepmacro\relax \chapmacro{}{Yomitfromtoc}{}% \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} % @lowersections: treat @chapter as section, @section as subsection, etc. \def\lowersections{\global\advance\secbase by 1} % 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{% \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}} % Start a new page \def\chappager{\par\vfill\supereject} % \chapoddpage - start on an odd page for a new chapter % 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 } \parseargdef\setchapternewpage{\csname CHAPPAG#1\endcsname\HEADINGSon} \def\CHAPPAGoff{% \global\let\contentsalignmacro = \chappager \global\let\pchapsepmacro=\chapbreak \global\def\HEADINGSon{\HEADINGSsinglechapoff}} \def\CHAPPAGon{% \global\let\contentsalignmacro = \chappager \global\let\pchapsepmacro=\chappager \global\def\HEADINGSon{\HEADINGSsingle}} \def\CHAPPAGodd{% \global\let\contentsalignmacro = \chapoddpage \global\let\pchapsepmacro=\chapoddpage \global\def\HEADINGSon{\HEADINGSdouble}} \setchapternewpage on % \chapmacro - Chapter opening. % % #1 is the text, #2 is the section type (Ynumbered, Ynothing, % Yappendix, Yomitfromtoc), #3 the chapter number. % Not used for @heading series. % % To test against our argument. \def\Ynothingkeyword{Ynothing} \def\Yappendixkeyword{Yappendix} \def\Yomitfromtockeyword{Yomitfromtoc} % % % Definitions for @thischapter. These can be overridden in translation % files. \def\thischapterAppendix{% \putwordAppendix{} \thischapternum: \thischaptername} \def\thischapterChapter{% \putwordChapter{} \thischapternum: \thischaptername} % % \def\chapmacro#1#2#3{% \expandafter\ifx\thisenv\titlepage\else \checkenv{}% chapters, etc., should not start inside an environment. \fi % Insert the first mark before the heading break (see notes for \domark). \let\prevchapterdefs=\currentchapterdefs \let\prevsectiondefs=\currentsectiondefs \gdef\currentsectiondefs{\gdef\thissectionname{}\gdef\thissectionnum{}% \gdef\thissection{}}% % \def\temptype{#2}% \ifx\temptype\Ynothingkeyword \gdef\currentchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}% \gdef\thischapter{\thischaptername}}% \else\ifx\temptype\Yomitfromtockeyword \gdef\currentchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}% \gdef\thischapter{}}% \else\ifx\temptype\Yappendixkeyword \toks0={#1}% \xdef\currentchapterdefs{% \gdef\noexpand\thischaptername{\the\toks0}% \gdef\noexpand\thischapternum{\appendixletter}% \let\noexpand\thischapter\noexpand\thischapterAppendix }% \else \toks0={#1}% \xdef\currentchapterdefs{% \gdef\noexpand\thischaptername{\the\toks0}% \gdef\noexpand\thischapternum{\the\chapno}% \let\noexpand\thischapter\noexpand\thischapterChapter }% \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=\currentchapterdefs \let\prevsectiondefs=\currentsectiondefs \domark % {% \chapfonts \rm \let\footnote=\errfootnoteheading % give better error message % % Have to define \currentsection 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\currentsection{#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 } % 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} % Definition for @thissection. This can be overridden in translation % files. \def\thissectionDef{% \putwordSection{} \thissectionnum: \thissectionname} % % Print any size, any type, section title. % % #1 is the text of the title, % #2 is the section level (sec/subsec/subsubsec), % #3 is the section type (Ynumbered, Ynothing, Yappendix, Yomitfromtoc), % #4 is the section number. % \def\seckeyword{sec} % \def\sectionheading#1#2#3#4{% {% \def\sectionlevel{#2}% \def\temptype{#3}% % % It is ok for the @heading series commands to appear inside an % environment (it's been historically allowed, though the logic is % dubious), but not the others. \ifx\temptype\Yomitfromtockeyword\else \checkenv{}% non-@*heading should not be in an environment. \fi \let\footnote=\errfootnoteheading % % Switch to the right set of fonts. \csname #2fonts\endcsname \rm % % Insert first mark before the heading break (see notes for \domark). \let\prevsectiondefs=\currentsectiondefs \ifx\temptype\Ynothingkeyword \ifx\sectionlevel\seckeyword \gdef\currentsectiondefs{\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\currentsectiondefs{% \gdef\noexpand\thissectionname{\the\toks0}% \gdef\noexpand\thissectionnum{#4}% \let\noexpand\thissection\noexpand\thissectionDef }% \fi \else \ifx\sectionlevel\seckeyword \toks0={#1}% \xdef\currentsectiondefs{% \gdef\noexpand\thissectionname{\the\toks0}% \gdef\noexpand\thissectionnum{#4}% \let\noexpand\thissection\noexpand\thissectionDef }% \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. \global\let\prevsectiondefs=\currentsectiondefs \domark % % Only insert the space after the number if we have a section number. \ifx\temptype\Ynothingkeyword \setbox0 = \hbox{}% \def\toctype{unn}% \gdef\currentsection{#1}% \else\ifx\temptype\Yomitfromtockeyword % for @headings -- no section number, don't include in toc, % and don't redefine \currentsection. \setbox0 = \hbox{}% \def\toctype{omit}% \let\sectionlevel=\empty \else\ifx\temptype\Yappendixkeyword \setbox0 = \hbox{#4\enspace}% \def\toctype{app}% \gdef\currentsection{#1}% \else \setbox0 = \hbox{#4\enspace}% \def\toctype{num}% \gdef\currentsection{#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'. \ifpdforxetex \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. \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. \entryrightmargin=\contentsrightmargin % Don't use the full line length. % % Roman numerals for page numbers. \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi \def\thistitle{}% no title in double-sided headings % Record where the Roman numerals started. \ifnum\romancount=0 \global\romancount=\pagecount \fi \linkentrytexttrue } % \raggedbottom in plain.tex hardcodes \topskip so override it \catcode`\@=11 \def\raggedbottom{\advance\topskip by 0pt plus60pt \r@ggedbottomtrue} \catcode`\@=\other % 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 \contentsendroman } % 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 \contentsendroman } \let\shortcontents = \summarycontents % Get ready to use Arabic numerals again \def\contentsendroman{% \lastnegativepageno = \pageno \global\pageno=1 \contentsendcount = \pagecount } % 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{% % Add stretch and a bonus for breaking the page before the part heading. % This reduces the chance of the page being broken immediately after the % part heading, before a following chapter heading. \vskip 0pt plus 5\baselineskip \penalty-300 \vskip 0pt plus -5\baselineskip \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}{#4}% } % 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}\hskip.7em#1}{#4}} % Unnumbered chapters. \def\unnchapentry#1#2#3#4{\dochapentry{#1}{#4}} \def\shortunnchapentry#1#2#3#4{\tocentry{#1}{#4}} % 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 % Move the page numbers slightly to the right \advance\entryrightmargin by -0.05em \chapentryfonts \tocentry{#1}{#2}% \endgroup \nobreak\vskip .25\baselineskip plus.1\baselineskip } \def\dosecentry#1#2{\begingroup \secentryfonts \leftskip=\tocindent \tocentry{#1}{#2}% \endgroup} \def\dosubsecentry#1#2{\begingroup \subsecentryfonts \leftskip=2\tocindent \tocentry{#1}{#2}% \endgroup} \def\dosubsubsecentry#1#2{\begingroup \subsubsecentryfonts \leftskip=3\tocindent \tocentry{#1}{#2}% \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\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{% \setregularquotes \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 % % ' 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 % % Inverse of the list at the beginning of the file. \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\sp=\ptexsp \let\*=\ptexstar %\let\sup=\ptexsup % do not redefine, we want @sup to work in math mode \let\t=\ptext \expandafter \let\csname top\endcsname=\ptextop % we've made it 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 \ifnum\lastpenalty<10000 % Penalize breaking before the environment, because preceding text % often leads into it. \penalty100 \fi \vskip\envskipamount \fi \fi }} \def\afterenvbreak{{% % =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 }} % \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. % \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 % only require the font if @cartouche is actually used \def\cartouchefontdefs{% \font\circle=lcircle10\relax \circthick=\fontdimen8\circle } \newdimen\circthick \newdimen\cartouter\newdimen\cartinner \newskip\normbskip\newskip\normpskip\newskip\normlskip \envparseargdef\cartouche{% \cartouchefontdefs \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*. % % Set paragraph width for text inside cartouche. There are % left and right margins of 3pt each plus two vrules 0.4pt each. \cartinner=\hsize \advance\cartinner by-\lskip \advance\cartinner by-\rskip \advance\cartinner by -6.8pt % % For drawing top and bottom of cartouche. Each corner char % adds 6pt and we take off the width of a rule to line up with the % right boundary perfectly. \cartouter=\hsize \advance\cartouter by 11.6pt % \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip % % 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 % \setbox\groupbox=\vtop\bgroup \baselineskip=0pt\parskip=0pt\lineskip=0pt \carttop \hbox\bgroup \hskip\lskip \vrule\kern3pt \vbox\bgroup \hsize=\cartinner \baselineskip=\normbskip \lineskip=\normlskip \parskip=\normpskip \def\arg{#1}% \ifx\arg\empty\else \centerV{\hfil \bf #1 \hfil}% \fi \kern3pt \vskip -\parskip } \def\Ecartouche{% \ifhmode\par\fi \kern3pt \egroup \kern3pt\vrule \hskip\rskip \egroup \cartbot \egroup \addgroupbox \checkinserts } % This macro is called at the beginning of all the @example variants, % inside a group. \newdimen\nonfillparindent \def\nonfillstart{% \aboveenvbreak \ifdim\hfuzz < 12pt \hfuzz = 12pt \fi % 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, @verbatim % \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\setcodequotes \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special. \parsearg\gobble } % @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 plus2.4em \spaceskip.3333em \xspaceskip.5em\relax } \let\Eraggedright\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 \def\par{\leavevmode\endgraf}% \parindent = 0pt \setcodequotes \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. \newbox\verbbox \def\starttabbox{\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 \leavevmode\box\verbbox \starttabbox }% } \endgroup % start the verbatim environment. \def\setupverbatim{% \let\nonarrowing = t% \nonfillstart \tt % easiest (and conventionally used) font for verbatim \def\par{\egroup\leavevmode\box\verbbox\endgraf\starttabbox}% \tabexpand \setcodequotes % Respect line breaks, % print special symbols as themselves, and % make each space count. % Must do in this order: \obeylines \uncatcodespecials \sepspaces } % 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{% \starttabbox#2\egroup\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. % The \egroup ends the \verbbox started at the end of the last line in % the block. \endgroup % \envdef\verbatim{% \setnormaldispenv\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}% \edef\tmp{\noexpand\input #1 } \expandafter }\expandafter\starttabbox\tmp\egroup \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 desirable. % \def\copying{\checkenv{}\begingroup\macrobodyctxt\docopying} {\catcode`\ =\other \gdef\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 } % Called as \printdefunline \deffooheader{text} % \def\printdefunline#1#2{% \begingroup \plainfrenchspacing % call \deffooheader: #1#2 \endheader % common ending: \interlinepenalty = 10000 \advance\rightskip by 0pt plus 1fil\relax \endgraf \nobreak\vskip -\parskip \penalty\defunpenalty % signal to \startdefun and \deffoox % 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} % @defblock, @defline do not automatically create index entries \envdef\defblock{% \startdefun } \let\Edefblock\Edefun \def\defline{% \doingtypefnfalse \parseargusing\activeparens{\printdefunline\deflineheader}% } \def\deflineheader#1 #2 #3\endheader{% \printdefname{#1}{}{#2}\magicamp\defunargs{#3\unskip}% } \def\deftypeline{% \doingtypefntrue \parseargusing\activeparens{\printdefunline\deflineheader}% } % \makedefun{deffoo} (\deffooheader parameters) { (\deffooheader expansion) } % % Define \deffoo, \deffoox \Edeffoo and \deffooheader. \def\makedefun#1{% \expandafter\let\csname E#1\endcsname = \Edefun \edef\temp{\noexpand\domakedefun \makecsname{#1}\makecsname{#1x}\makecsname{#1header}}% \temp } \def\domakedefun#1#2#3{% \envdef#1{% \startdefun \doingtypefnfalse % distinguish typed functions from all else \parseargusing\activeparens{\printdefunline#3}% }% \def#2{% % First, check whether we are in the right environment: \checkenv#1% % % As in \startdefun, 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 % \doingtypefnfalse % distinguish typed functions from all else \parseargusing\activeparens{\printdefunline#3}% }% \def#3% definition of \deffooheader follows } \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}#1 #2 #3\endheader{% \doind{fn}{\code{#2}}% \printdefname{#1}{}{#2}\magicamp\defunargs{#3\unskip}% } % @defop category class name args \makedefun{defop}#1 {\defopheaderx{#1\ \putwordon}} \def\defopheaderx#1#2 #3 #4\endheader{% \doind{fn}{\code{#3}\space\putwordon\ \code{#2}}% \printdefname{#1\ \code{#2}}{}{#3}\magicamp\defunargs{#4\unskip}% } % Typed functions: % @deftypefn category type name args \makedefun{deftypefn}#1 #2 #3 #4\endheader{% \doind{fn}{\code{#3}}% \doingtypefntrue \printdefname{#1}{#2}{#3}\defunargs{#4\unskip}% } % @deftypeop category class type name args \makedefun{deftypeop}#1 {\deftypeopheaderx{#1\ \putwordon}} \def\deftypeopheaderx#1#2 #3 #4 #5\endheader{% \doind{fn}{\code{#4}\space\putwordon\ \code{#1\ \code{#2}}}% \doingtypefntrue \printdefname{#1\ \code{#2}}{#3}{#4}\defunargs{#5\unskip}% } % Typed variables: % @deftypevr category type var args \makedefun{deftypevr}#1 #2 #3 #4\endheader{% \doind{vr}{\code{#3}}% \printdefname{#1}{#2}{#3}\defunargs{#4\unskip}% } % @deftypecv category class type var args \makedefun{deftypecv}#1 {\deftypecvheaderx{#1\ \putwordof}} \def\deftypecvheaderx#1#2 #3 #4 #5\endheader{% \doind{vr}{\code{#4}\space\putwordof\ \code{#2}}% \printdefname{#1\ \code{#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 {\defcvheaderx{#1\ \putwordof}} \def\defcvheaderx#1#2 {\deftypecvheaderx{#1}#2 {} } % Types: % @deftp category name args \makedefun{deftp}#1 #2 #3\endheader{% \doind{tp}{\code{#2}}% \printdefname{#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}{\defopheaderx\putwordMethodon} \makedefun{deftypemethod}{\deftypeopheaderx\putwordMethodon} \makedefun{defivar}{\defcvheaderx\putwordInstanceVariableof} \makedefun{deftypeivar}{\deftypecvheaderx\putwordInstanceVariableof} % \printdefname, 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\printdefname#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: \ifflagclear{txideftypefnnl}{}{\rettypeownlinetrue}% \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 }% \ifflagclear{txidefnamenospace}{% {\rm\enskip}% hskip 0.5 em of \rmfont }{}% % \boldbrax % arguments will be output next, if any. } % Print arguments. Use slanted for @def*, typewriter for @deftype*. \def\defunargs#1{% \bgroup \df \ifdoingtypefn \tt \else \sl \fi \ifflagclear{txicodevaristt}{}% {\def\var##1{{\setregularquotes \ttsl ##1}}}% #1% \egroup } % 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 \gdef\defcharsdefault{% \let(=\lparen \let)=\rparen \let[=\lbrack \let]=\rbrack \let& = \&% } \globaldefs=1 \defcharsdefault \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb} \gdef\magicamp{\let&=\amprm} } \let\ampchar\& \newcount\parencount % If we encounter &foo, then turn on ()-hacking afterwards \newif\ifampseen \def\amprm#1 {\ampseentrue{\rm\ }} \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 \let\E=\expandafter % Used at the time of macro expansion. % Argument is macro body with arguments substituted \def\scanmacro#1{% \newlinechar`\^^M % expand the expansion of \eatleadingcr twice to maybe remove a leading % newline (and \else and \fi tokens), then call \eatspaces on the result. \def\xeatspaces##1{% \E\E\E\E\E\E\E\eatspaces\E\E\E\E\E\E\E{\eatleadingcr##1% }}% \def\xempty##1{}% % % Process the macro body under the current catcode regime. \scantokens{#1@comment}% % % The \comment is to remove the \newlinechar added by \scantokens, and % can be noticed by \parsearg. Note \c isn't used because this means cedilla % in math mode. } % Used for copying and captions \def\scanexp#1{% \expandafter\scanmacro\expandafter{#1}% } \newcount\paramno % Count of parameters \newtoks\macname % Macro name \newif\ifrecursive % Is it recursive? % List of all defined macros in the form % \commondummyword\macro1\commondummyword\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\commondummyword#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} } {\catcode`\^^M=\other% \gdef\eatleadingcr#1{\if\noexpand#1\noexpand^^M\else\E#1\fi}}% % Warning: this won't work for a delimited argument % or for an empty argument % 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 \catcode`\^^M=\other \catcode`\\=\active \passthroughcharstrue } \def\macrobodyctxt{% used for @macro definitions and @copying \scanctxt \catcode`\ =\other \catcode`\{=\other \catcode`\}=\other } % Used when scanning braced macro arguments. Note, however, that catcode % changes here are ineffectual if the macro invocation was nested inside % an argument to another Texinfo command. \def\macroargctxt{% \scanctxt \catcode`\ =\active } \def\macrolineargctxt{% used for whole-line arguments without braces \scanctxt \catcode`\{=\other \catcode`\}=\other } % \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 \usembodybackslash \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\commondummyword\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\commondummyword \noexpand#1% \fi } % \getargs -- Parse the arguments to a @macro line. Set \macname to % the name of the macro, and \argl to the braced argument list. \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}} % This made use of the 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. % Parse the optional {params} list to @macro or @rmacro. % Set \paramno to the number of arguments, % and \paramlist to a parameter text for the macro (e.g. #1,#2,#3 for a % three-param macro.) Define \macarg.BLAH for each BLAH in the params % list to some hook where the argument is 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). % % If there are 10 or more arguments, a different technique is used: see % \parsemmanyargdef. % \def\parsemargdef#1;{% \paramno=0\def\paramlist{}% \let\hash\relax % \hash is redefined to `#' later to get it into definitions \let\xeatspaces\relax \let\xempty\relax \parsemargdefxxx#1,;,% \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\noexpand\xempty{}}}% \edef\paramlist{\paramlist\hash\the\paramno,}% \fi\next} % the \xempty{} is to give \eatleadingcr an argument in the case of an % empty macro argument. % \parsemacbody, \parsermacbody % % Read recursive and nonrecursive macro bodies. (They're different since % rec and nonrec macros end differently.) % % We are in \macrobodyctxt, and the \xdef causes backslashshes in the macro % body to be transformed. % Set \macrobody to the body of the macro, and call \macrodef. % {\catcode`\ =\other\long\gdef\parsemacbody#1@end macro{% \xdef\macrobody{\eatcr{#1}}\endgroup\macrodef}}% {\catcode`\ =\other\long\gdef\parsermacbody#1@end rmacro{% \xdef\macrobody{\eatcr{#1}}\endgroup\macrodef}}% % Make @ a letter, so that we can make private-to-Texinfo macro names. \edef\texiatcatcode{\the\catcode`\@} \catcode `@=11\relax %%%%%%%%%%%%%% Code for > 10 arguments only %%%%%%%%%%%%%%%%%% % 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 under which the body was input). % % If you compile with TeX (not eTeX), and you have macros with 10 or more % arguments, no macro can have more than 256 arguments (else error). % % 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. \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} \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}% } % Define the named-macro outside of this group and then close this group. % \def\macargexpandinbody@{% \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 } % Trailing 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}% } %%%%%%%%%%%%%% End of code for > 10 arguments %%%%%%%%%%%%%%%%%% % This defines a Texinfo @macro or @rmacro, called by \parsemacbody. % \macrobody has the body of the macro in it, with placeholders for % its parameters, looking like "\xeatspaces{\hash 1}". % \paramno is the number of parameters % \paramlist is a TeX parameter text, e.g. "#1,#2,#3," % There are four cases: macros of zero, one, up to nine, and many arguments. % \xdef is used so that macro definitions will survive the file % they're defined in: @include reads the file inside a group. % \def\macrodef{% \let\hash=##% convert placeholders to macro parameter chars \ifnum\paramno=1 \long\def\xeatspaces##1{##1}% % We don't use \xeatspaces for single-argument macros, because we % want to keep ends of lines. This definition removes \xeatspaces % when \macrobody is expanded below. \else \def\xeatspaces{\string\xeatspaces}% % This expands \xeatspaces as a sequence of character tokens, which % stops \scantokens inserting an extra space after the control sequence. \fi \ifcase\paramno % 0 \expandafter\xdef\csname\the\macname\endcsname{% \begingroup \noexpand\spaceisspace \noexpand\endlineisspace \noexpand\expandafter % skip any whitespace after the macro name. \expandafter\noexpand\csname\the\macname @@@\endcsname}% \expandafter\xdef\csname\the\macname @@@\endcsname{% \endgroup \noexpand\scanmacro{\macrobody}}% \or % 1 \expandafter\xdef\csname\the\macname\endcsname{% \begingroup \noexpand\braceorline \expandafter\noexpand\csname\the\macname @@@\endcsname}% \expandafter\xdef\csname\the\macname @@@\endcsname##1{% \endgroup \noexpand\scanmacro{\macrobody}% }% \else % at most 9 \ifnum\paramno<10\relax % @MACNAME sets the context for reading the macro argument % @MACNAME@@ gets the argument, processes backslashes and appends a % comma. % @MACNAME@@@ removes braces surrounding the argument list. % @MACNAME@@@@ scans the macro body with arguments substituted. \expandafter\xdef\csname\the\macname\endcsname{% \begingroup \noexpand\expandafter % This \expandafter skip any spaces after the \noexpand\macroargctxt % macro before we change the catcode of space. \noexpand\expandafter \expandafter\noexpand\csname\the\macname @@\endcsname}% \expandafter\xdef\csname\the\macname @@\endcsname##1{% \noexpand\passargtomacro \expandafter\noexpand\csname\the\macname @@@\endcsname{##1,}}% \expandafter\xdef\csname\the\macname @@@\endcsname##1{% \expandafter\noexpand\csname\the\macname @@@@\endcsname ##1}% \expandafter\expandafter \expandafter\xdef \expandafter\expandafter \csname\the\macname @@@@\endcsname\paramlist{% \endgroup\noexpand\scanmacro{\macrobody}}% \else % 10 or more: \expandafter\xdef\csname\the\macname\endcsname{% \noexpand\getargvals@{\the\macname}{\argl}% }% \global\expandafter\let\csname mac.\the\macname .body\endcsname\macrobody \global\expandafter\let\csname mac.\the\macname .recurse\endcsname\gobble \fi \fi} \catcode `\@\texiatcatcode\relax % end private-to-Texinfo catcodes \def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % {\catcode`\@=0 \catcode`\\=13 % We need to manipulate \ so use @ as escape @catcode`@_=11 % private names @catcode`@!=11 % used as argument separator % \passargtomacro#1#2 - % Call #1 with a list of tokens #2, with any doubled backslashes in #2 % compressed to one. % % This implementation works by expansion, and not execution (so we cannot use % \def or similar). This reduces the risk of this failing in contexts where % complete expansion is done with no execution (for example, in writing out to % an auxiliary file for an index entry). % % State is kept in the input stream: the argument passed to % @look_ahead, @gobble_and_check_finish and @add_segment is % % THE_MACRO ARG_RESULT ! {PENDING_BS} NEXT_TOKEN (... rest of input) % % where: % THE_MACRO - name of the macro we want to call % ARG_RESULT - argument list we build to pass to that macro % PENDING_BS - either a backslash or nothing % NEXT_TOKEN - used to look ahead in the input stream to see what's coming next @gdef@passargtomacro#1#2{% @add_segment #1!{}@relax#2\@_finish\% } @gdef@_finish{@_finishx} @global@let@_finishx@relax % #1 - THE_MACRO ARG_RESULT % #2 - PENDING_BS % #3 - NEXT_TOKEN % #4 used to look ahead % % If the next token is not a backslash, process the rest of the argument; % otherwise, remove the next token. @gdef@look_ahead#1!#2#3#4{% @ifx#4\% @expandafter@gobble_and_check_finish @else @expandafter@add_segment @fi#1!{#2}#4#4% } % #1 - THE_MACRO ARG_RESULT % #2 - PENDING_BS % #3 - NEXT_TOKEN % #4 should be a backslash, which is gobbled. % #5 looks ahead % % Double backslash found. Add a single backslash, and look ahead. @gdef@gobble_and_check_finish#1!#2#3#4#5{% @add_segment#1\!{}#5#5% } @gdef@is_fi{@fi} % #1 - THE_MACRO ARG_RESULT % #2 - PENDING_BS % #3 - NEXT_TOKEN % #4 is input stream until next backslash % % Input stream is either at the start of the argument, or just after a % backslash sequence, either a lone backslash, or a doubled backslash. % NEXT_TOKEN contains the first token in the input stream: if it is \finish, % finish; otherwise, append to ARG_RESULT the segment of the argument up until % the next backslash. PENDING_BACKSLASH contains a backslash to represent % a backslash just before the start of the input stream that has not been % added to ARG_RESULT. @gdef@add_segment#1!#2#3#4\{% @ifx#3@_finish @call_the_macro#1!% @else % append the pending backslash to the result, followed by the next segment @expandafter@is_fi@look_ahead#1#2#4!{\}@fi % this @fi is discarded by @look_ahead. % we can't get rid of it with \expandafter because we don't know how % long #4 is. } % #1 - THE_MACRO % #2 - ARG_RESULT % #3 discards the res of the conditional in @add_segment, and @is_fi ends the % conditional. @gdef@call_the_macro#1#2!#3@fi{@is_fi #1{#2}} } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \braceorline MAC is used for a one-argument macro MAC. It checks % whether the next non-whitespace character is a {. It sets the context % for reading the argument (slightly different in the two cases). Then, % to read the argument, in the whole-line case, it then calls the regular % \parsearg MAC; in the lbrace case, it calls \passargtomacro MAC. % \def\braceorline#1{\let\macnamexxx=#1\futurelet\nchar\braceorlinexxx} \def\braceorlinexxx{% \ifx\nchar\bgroup \macroargctxt \expandafter\passargtomacro \else \macrolineargctxt\expandafter\parsearg \fi \macnamexxx} % @linemacro \parseargdef\linemacro{% \getargs{#1}% now \macname is the macname and \argl the arglist \ifx\argl\empty \paramno=0 \let\hash\relax \def\paramlist{\hash 1\endlinemacro}% \else \expandafter\linegetparamlist\argl;% \fi \begingroup \macrobodyctxt \usembodybackslash \parselinemacrobody } % Build up \paramlist which will be used as the parameter text for the macro. % At the end it will be like "#1 #2 #3\endlinemacro". \def\linegetparamlist#1;{% \paramno=0\def\paramlist{}% \let\hash\relax \linegetparamlistxxx#1,;,% } \def\linegetparamlistxxx#1,{% \if#1;\let\next=\linegetparamlistxxxx \else \let\next=\linegetparamlistxxx \advance\paramno by 1 \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname {\hash\the\paramno}% \edef\paramlist{\paramlist\hash\the\paramno\space}% \fi\next} \def\linegetparamlistxxxx{% \expandafter\fixparamlist\paramlist\fixparamlist } % Replace final space token \def\fixparamlist#1 \fixparamlist{% \def\paramlist{#1\endlinemacro}% } % Read the body of the macro, replacing backslash-surrounded variables % {\catcode`\ =\other\long\gdef\parselinemacrobody#1@end linemacro{% \xdef\macrobody{#1}% \endgroup \linemacrodef }} % Make the definition \def\linemacrodef{% \let\hash=##% \expandafter\xdef\csname\the\macname\endcsname{% \bgroup \noexpand\parsearg \expandafter\noexpand\csname\the\macname @@\endcsname } \expandafter\xdef\csname\the\macname @@\endcsname##1{% \egroup \expandafter\noexpand \csname\the\macname @@@\endcsname##1\noexpand\endlinemacro } \expandafter\expandafter \expandafter\xdef \expandafter\expandafter\csname\the\macname @@@\endcsname\paramlist{% \newlinechar=13 % split \macrobody into lines \noexpand\scantokens{\macrobody}% } } % @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}\omittopnode} % Used so that the @top node doesn't have to be wrapped in an @ifnottex % conditional. % \doignore goes to more effort to skip nested conditionals but we don't need % that here. \def\omittopnode{% \ifx\lastnode\wordTop \expandafter\ignorenode\fi } \def\wordTop{Top} % Until the next @node, @part or @bye command, divert output to a box that % is not output. \def\ignorenode{\setbox\dummybox\vbox\bgroup \def\part{\egroup\part}% \def\node{\egroup\node}% \ignorenodebye } {\let\bye\relax \gdef\ignorenodebye{\let\bye\ignorenodebyedef} \gdef\ignorenodebyedef{\egroup(`Top' node ignored)\bye}} % The redefinition of \bye here is because it is declared \outer \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 \currentsection, % 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 {% \requireauxfile \atdummies % preserve commands, but don't expand them % match definition in \xrdef, \refx, \xrefX. \def\value##1{##1}% \edef\writexrdef##1##2{% \write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef ##1}{##2}}% these are parameters of \writexrdef }% \toks0 = \expandafter{\currentsection}% \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{\putwordsee{} \xrefXX} \def\xref{\putwordSee{} \xrefXX} \def\ref{\xrefXX} \def\xrefXX#1{\def\xrefXXarg{#1}\futurelet\tokenafterxref\xrefXXX} \def\xrefXXX{\expandafter\xrefX\expandafter[\xrefXXarg,,,,,,,]} % \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 % For pdfTeX and LuaTeX {\indexnofonts \makevalueexpandable \turnoffactive % 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. \setpdfdestname{#1}% % \ifx\pdfdestname\empty \def\pdfdestname{Top}% no empty targets \fi % \leavevmode \startlink attr{/Border [0 0 0]}% \ifnum\filenamelength>0 goto file{\the\filename.pdf} name{\pdfdestname}% \else goto name{\pdfmkpgn{\pdfdestname}}% \fi }% \setcolor{\linkcolor}% \else \ifx\XeTeXrevision\thisisundefined \else % For XeTeX {\indexnofonts \makevalueexpandable \turnoffactive % 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. \setpdfdestname{#1}% % \ifx\pdfdestname\empty \def\pdfdestname{Top}% no empty targets \fi % \leavevmode \ifnum\filenamelength>0 % With default settings, % XeTeX (xdvipdfmx) replaces link destination names with integers. % In this case, the replaced destination names of % remote PDFs are no longer known. In order to avoid a replacement, % you can use xdvipdfmx's command line option `-C 0x0010'. % If you use XeTeX 0.99996+ (TeX Live 2016+), % this command line option is no longer necessary % because we can use the `dvipdfmx:config' special. \special{pdf:bann << /Border [0 0 0] /Type /Annot /Subtype /Link /A << /S /GoToR /F (\the\filename.pdf) /D (\pdfdestname) >> >>}% \else \special{pdf:bann << /Border [0 0 0] /Type /Annot /Subtype /Link /A << /S /GoTo /D (\pdfdestname) >> >>}% \fi }% \setcolor{\linkcolor}% \fi \fi {% % Have to otherify everything special to allow the \csname to % include an _ in the xref name, etc. \indexnofonts \turnoffactive \def\value##1{##1}% \expandafter\global\expandafter\let\expandafter\Xthisreftitle \csname XR#1-title\endcsname }% % % Float references are printed completely differently: "Figure 1.2" % instead of "[somenode], p.3". \iffloat distinguishes them by % \Xthisreftitle being set to a magic string. \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. % % Only output a following space if the -snt ref is nonempty, as the ref % will be empty for @unnumbered and @anchor. \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 % \ifflagclear{txiomitxrefpg}{% % We always want a comma ,% % output the `page 3'. \turnoffactive \putpageref{#1}% % Add a , if xref followed by a space \if\space\noexpand\tokenafterxref ,% \else\ifx\ \tokenafterxref ,% @TAB \else\ifx\*\tokenafterxref ,% @* \else\ifx\ \tokenafterxref ,% @SPACE \else\ifx\ \tokenafterxref ,% @NL \else\ifx\tie\tokenafterxref ,% @tie \fi\fi\fi\fi\fi\fi }{}% \fi\fi \fi \endlink \endgroup} % can be overridden in translation files \def\putpageref#1{% \space\putwordpage\tie\refx{#1-pg}} % 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 } % \refx{NAME} - reference a cross-reference string named NAME. \def\refx#1{% \requireauxfile {% \indexnofonts \turnoffactive \def\value##1{##1}% \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 } % This is the macro invoked by entries in the aux file. Define a control % sequence for a cross-reference target (we prepend XR to the control sequence % name to avoid collisions). The value is the page number. If this is a float % type, we have more work to do. % \def\xrdef#1#2{% {% Expand the node or anchor name to remove control sequences. % \turnoffactive stops 8-bit characters being changed to commands % like @'e. \refx does the same to retrieve the value in the definition. \indexnofonts \turnoffactive \def\value##1{##1}% \xdef\safexrefname{#1}% }% % \bgroup \expandafter\gdef\csname XR\safexrefname\endcsname{#2}% \egroup % We put the \gdef inside a group to avoid the definitions building up on % TeX's save stack, which can cause it to run out of space for aux files with % thousands of lines. \gdef doesn't use the save stack, but \csname does % when it defines an unknown control sequence as \relax. % % 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 } % 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 at the beginning of the file. % \newif\iflinks \linkstrue % by default we want the aux files. \let\novalidate = \linksfalse % Used when writing to the aux file, or when using data from it. \def\requireauxfile{% \iflinks \tryauxfile % Open the new aux file. TeX will close it automatically at exit. \immediate\openout\auxfile=\jobname.aux \fi \global\let\requireauxfile=\relax % Only do this once. } % 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 \catcode`\^=\other % % Special characters. Should be turned off anyway, but... \catcode`\~=\other \catcode`\[=\other \catcode`\]=\other \catcode`\"=\other \catcode`\_=\active \catcode`\|=\active \catcode`\<=\active \catcode`\>=\active \catcode`\$=\other \catcode`\#=\other \catcode`\&=\other \catcode`\%=\other \catcode`+=\other % avoid \+ for paranoia even though we've turned it off % \catcode`\\=\active % % @ 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{% \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 % % Nested footnotes are not supported in TeX, that would take a lot % more work. (\startsavinginserts does not suffice.) \let\footnote=\errfootnotenest % % 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=\txipagewidth \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 \def\errfootnotenest{% \errhelp=\EMsimple \errmessage{Nested footnotes not supported in texinfo.tex, even though they work in makeinfo; sorry} } \def\errfootnoteheading{% \errhelp=\EMsimple \errmessage{Footnotes in chapters, sections, etc., are not supported} } % 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 https://ctan.org/texarchive/macros/texinfo/texinfo/doc/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 } % Approximate height of a line in the standard text font. \newdimen\capheight \setbox0=\vbox{\tenrm H} \capheight=\ht0 % % 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 \makevalueexpandable \ifvmode \imagevmodetrue \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. \vskip\parskip % % Place image in a \vtop for a top page margin that is (close to) correct, % as \topskip glue is relative to the first baseline. \vtop\bgroup \kern -\capheight \vskip-\parskip \fi % \ifx\centersub\centerV % For @center @image, enter vertical mode and add vertical space % Enter an extra \parskip because @center doesn't add space itself. \vbox\bgroup\vskip\parskip\medskip\vskip\parskip \else % Enter horizontal 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. \imageindent \fi % % Output the image. \ifpdf % For pdfTeX and LuaTeX <= 0.80 \dopdfimage{#1}{#2}{#3}% \else \ifx\XeTeXrevision\thisisundefined % For epsf.tex % \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}% \else % For XeTeX \doxeteximage{#1}{#2}{#3}% \fi \fi % \ifimagevmode \egroup \medskip % space after a standalone image \fi \ifx\centersub\centerV % @center @image \medskip \egroup % close \vbox \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 \currentsection 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\currentsection{\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. {% \requireauxfile \atdummies % \ifx\thisshortcaption\empty \def\gtemp{\thiscaption}% \else \def\gtemp{\thisshortcaption}% \fi \immediate\write\auxfile{@xrdef{\floatlabel-lof}{\floatident \ifx\gtemp\empty \else : \gtemp \fi}}% }% \fi \egroup % end of \vtop % \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\scanctxt\docaptionz} \def\docaptionz#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 % \currentsection 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{% \tex % read txi-??.tex file in plain TeX. % Read the file by the name they passed if it exists. \let_ = \normalunderscore % normal _ character for filename test \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 } % % 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 } % XeTeX and LuaTeX can handle Unicode natively. % Their default I/O uses UTF-8 sequences instead of a byte-wise operation. % Other TeX engines' I/O (pdfTeX, etc.) is byte-wise. % \newif\iftxinativeunicodecapable \newif\iftxiusebytewiseio \ifx\XeTeXrevision\thisisundefined \ifx\luatexversion\thisisundefined \txinativeunicodecapablefalse \txiusebytewiseiotrue \else \txinativeunicodecapabletrue \txiusebytewiseiofalse \fi \else \txinativeunicodecapabletrue \txiusebytewiseiofalse \fi % Set I/O by bytes instead of UTF-8 sequence for XeTeX and LuaTex % for non-UTF-8 (byte-wise) encodings. % \def\setbytewiseio{% \ifx\XeTeXrevision\thisisundefined \else \XeTeXdefaultencoding "bytes" % For subsequent files to be read \XeTeXinputencoding "bytes" % For document root file % Unfortunately, there seems to be no corresponding XeTeX command for % output encoding. This is a problem for auxiliary index and TOC files. % The only solution would be perhaps to write out @U{...} sequences in % place of non-ASCII characters. \fi \ifx\luatexversion\thisisundefined \else \directlua{ local utf8_char, byte, gsub = unicode.utf8.char, string.byte, string.gsub local function convert_char (char) return utf8_char(byte(char)) end local function convert_line (line) return gsub(line, ".", convert_char) end callback.register("process_input_buffer", convert_line) local function convert_line_out (line) local line_out = "" for c in string.utfvalues(line) do line_out = line_out .. string.char(c) end return line_out end callback.register("process_output_buffer", convert_line_out) } \fi \txiusebytewiseiotrue } % 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. % \def\documentencoding{\parseargusing\filenamecatcodes\documentencodingzzz} \def\documentencodingzzz#1{% % % 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 \iftxinativeunicodecapable \setbytewiseio \fi \setnonasciicharscatcode\active \lattwochardefs % \else \ifx \declaredencoding \latone \iftxinativeunicodecapable \setbytewiseio \fi \setnonasciicharscatcode\active \latonechardefs % \else \ifx \declaredencoding \latnine \iftxinativeunicodecapable \setbytewiseio \fi \setnonasciicharscatcode\active \latninechardefs % \else \ifx \declaredencoding \utfeight \iftxinativeunicodecapable % For native Unicode handling (XeTeX and LuaTeX) \nativeunicodechardefs \else % For treating UTF-8 as byte sequences (TeX, eTeX and pdfTeX). % Since we already invoke \utfeightchardefs at the top level, % making non-ascii chars active is sufficient. \setnonasciicharscatcode\active \fi % \else \message{Ignoring unknown document encoding: #1.}% % \fi % utfeight \fi % latnine \fi % latone \fi % lattwo \fi % ascii % \ifx\XeTeXrevision\thisisundefined \else \ifx \declaredencoding \utfeight \else \ifx \declaredencoding \ascii \else \message{Warning: XeTeX with non-UTF-8 encodings cannot handle % non-ASCII characters in auxiliary files.}% \fi \fi \fi } % A message to be logged when using a character that isn't available % the default font encoding (OT1). % \def\missingcharmsg#1{\message{Character missing, sorry: #1.}} % Take account of \c (plain) vs. \, (Texinfo) difference. \def\cedilla#1{\ifx\c\ptexc\c{#1}\else\,{#1}\fi} \def\gdefchar#1#2{% \gdef#1{% \ifpassthroughchars \string#1% \else #2% \fi }} \begingroup % Make non-ASCII characters active for defining the character definition % macros. \setnonasciicharscatcode\active % Latin1 (ISO-8859-1) character definitions. \gdef\latonechardefs{% \gdefchar^^a0{\tie} \gdefchar^^a1{\exclamdown} \gdefchar^^a2{{\tcfont \char162}} % cent \gdefchar^^a3{\pounds{}} \gdefchar^^a4{{\tcfont \char164}} % currency \gdefchar^^a5{{\tcfont \char165}} % yen \gdefchar^^a6{{\tcfont \char166}} % broken bar \gdefchar^^a7{\S} \gdefchar^^a8{\"{}} \gdefchar^^a9{\copyright{}} \gdefchar^^aa{\ordf} \gdefchar^^ab{\guillemetleft{}} \gdefchar^^ac{\ensuremath\lnot} \gdefchar^^ad{\-} \gdefchar^^ae{\registeredsymbol{}} \gdefchar^^af{\={}} % \gdefchar^^b0{\textdegree} \gdefchar^^b1{$\pm$} \gdefchar^^b2{$^2$} \gdefchar^^b3{$^3$} \gdefchar^^b4{\'{}} \gdefchar^^b5{$\mu$} \gdefchar^^b6{\P} \gdefchar^^b7{\ensuremath\cdot} \gdefchar^^b8{\cedilla\ } \gdefchar^^b9{$^1$} \gdefchar^^ba{\ordm} \gdefchar^^bb{\guillemetright{}} \gdefchar^^bc{$1\over4$} \gdefchar^^bd{$1\over2$} \gdefchar^^be{$3\over4$} \gdefchar^^bf{\questiondown} % \gdefchar^^c0{\`A} \gdefchar^^c1{\'A} \gdefchar^^c2{\^A} \gdefchar^^c3{\~A} \gdefchar^^c4{\"A} \gdefchar^^c5{\ringaccent A} \gdefchar^^c6{\AE} \gdefchar^^c7{\cedilla C} \gdefchar^^c8{\`E} \gdefchar^^c9{\'E} \gdefchar^^ca{\^E} \gdefchar^^cb{\"E} \gdefchar^^cc{\`I} \gdefchar^^cd{\'I} \gdefchar^^ce{\^I} \gdefchar^^cf{\"I} % \gdefchar^^d0{\DH} \gdefchar^^d1{\~N} \gdefchar^^d2{\`O} \gdefchar^^d3{\'O} \gdefchar^^d4{\^O} \gdefchar^^d5{\~O} \gdefchar^^d6{\"O} \gdefchar^^d7{$\times$} \gdefchar^^d8{\O} \gdefchar^^d9{\`U} \gdefchar^^da{\'U} \gdefchar^^db{\^U} \gdefchar^^dc{\"U} \gdefchar^^dd{\'Y} \gdefchar^^de{\TH} \gdefchar^^df{\ss} % \gdefchar^^e0{\`a} \gdefchar^^e1{\'a} \gdefchar^^e2{\^a} \gdefchar^^e3{\~a} \gdefchar^^e4{\"a} \gdefchar^^e5{\ringaccent a} \gdefchar^^e6{\ae} \gdefchar^^e7{\cedilla c} \gdefchar^^e8{\`e} \gdefchar^^e9{\'e} \gdefchar^^ea{\^e} \gdefchar^^eb{\"e} \gdefchar^^ec{\`{\dotless i}} \gdefchar^^ed{\'{\dotless i}} \gdefchar^^ee{\^{\dotless i}} \gdefchar^^ef{\"{\dotless i}} % \gdefchar^^f0{\dh} \gdefchar^^f1{\~n} \gdefchar^^f2{\`o} \gdefchar^^f3{\'o} \gdefchar^^f4{\^o} \gdefchar^^f5{\~o} \gdefchar^^f6{\"o} \gdefchar^^f7{$\div$} \gdefchar^^f8{\o} \gdefchar^^f9{\`u} \gdefchar^^fa{\'u} \gdefchar^^fb{\^u} \gdefchar^^fc{\"u} \gdefchar^^fd{\'y} \gdefchar^^fe{\th} \gdefchar^^ff{\"y} } % Latin9 (ISO-8859-15) encoding character definitions. \gdef\latninechardefs{% % Encoding is almost identical to Latin1. \latonechardefs % \gdefchar^^a4{\euro{}} \gdefchar^^a6{\v S} \gdefchar^^a8{\v s} \gdefchar^^b4{\v Z} \gdefchar^^b8{\v z} \gdefchar^^bc{\OE} \gdefchar^^bd{\oe} \gdefchar^^be{\"Y} } % Latin2 (ISO-8859-2) character definitions. \gdef\lattwochardefs{% \gdefchar^^a0{\tie} \gdefchar^^a1{\ogonek{A}} \gdefchar^^a2{\u{}} \gdefchar^^a3{\L} \gdefchar^^a4{\missingcharmsg{CURRENCY SIGN}} \gdefchar^^a5{\v L} \gdefchar^^a6{\'S} \gdefchar^^a7{\S} \gdefchar^^a8{\"{}} \gdefchar^^a9{\v S} \gdefchar^^aa{\cedilla S} \gdefchar^^ab{\v T} \gdefchar^^ac{\'Z} \gdefchar^^ad{\-} \gdefchar^^ae{\v Z} \gdefchar^^af{\dotaccent Z} % \gdefchar^^b0{\textdegree} \gdefchar^^b1{\ogonek{a}} \gdefchar^^b2{\ogonek{ }} \gdefchar^^b3{\l} \gdefchar^^b4{\'{}} \gdefchar^^b5{\v l} \gdefchar^^b6{\'s} \gdefchar^^b7{\v{}} \gdefchar^^b8{\cedilla\ } \gdefchar^^b9{\v s} \gdefchar^^ba{\cedilla s} \gdefchar^^bb{\v t} \gdefchar^^bc{\'z} \gdefchar^^bd{\H{}} \gdefchar^^be{\v z} \gdefchar^^bf{\dotaccent z} % \gdefchar^^c0{\'R} \gdefchar^^c1{\'A} \gdefchar^^c2{\^A} \gdefchar^^c3{\u A} \gdefchar^^c4{\"A} \gdefchar^^c5{\'L} \gdefchar^^c6{\'C} \gdefchar^^c7{\cedilla C} \gdefchar^^c8{\v C} \gdefchar^^c9{\'E} \gdefchar^^ca{\ogonek{E}} \gdefchar^^cb{\"E} \gdefchar^^cc{\v E} \gdefchar^^cd{\'I} \gdefchar^^ce{\^I} \gdefchar^^cf{\v D} % \gdefchar^^d0{\DH} \gdefchar^^d1{\'N} \gdefchar^^d2{\v N} \gdefchar^^d3{\'O} \gdefchar^^d4{\^O} \gdefchar^^d5{\H O} \gdefchar^^d6{\"O} \gdefchar^^d7{$\times$} \gdefchar^^d8{\v R} \gdefchar^^d9{\ringaccent U} \gdefchar^^da{\'U} \gdefchar^^db{\H U} \gdefchar^^dc{\"U} \gdefchar^^dd{\'Y} \gdefchar^^de{\cedilla T} \gdefchar^^df{\ss} % \gdefchar^^e0{\'r} \gdefchar^^e1{\'a} \gdefchar^^e2{\^a} \gdefchar^^e3{\u a} \gdefchar^^e4{\"a} \gdefchar^^e5{\'l} \gdefchar^^e6{\'c} \gdefchar^^e7{\cedilla c} \gdefchar^^e8{\v c} \gdefchar^^e9{\'e} \gdefchar^^ea{\ogonek{e}} \gdefchar^^eb{\"e} \gdefchar^^ec{\v e} \gdefchar^^ed{\'{\dotless{i}}} \gdefchar^^ee{\^{\dotless{i}}} \gdefchar^^ef{\v d} % \gdefchar^^f0{\dh} \gdefchar^^f1{\'n} \gdefchar^^f2{\v n} \gdefchar^^f3{\'o} \gdefchar^^f4{\^o} \gdefchar^^f5{\H o} \gdefchar^^f6{\"o} \gdefchar^^f7{$\div$} \gdefchar^^f8{\v r} \gdefchar^^f9{\ringaccent u} \gdefchar^^fa{\'u} \gdefchar^^fb{\H u} \gdefchar^^fc{\"u} \gdefchar^^fd{\'y} \gdefchar^^fe{\cedilla t} \gdefchar^^ff{\dotaccent{}} } \endgroup % active chars % 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 } % Give non-ASCII bytes the active definitions for processing UTF-8 sequences \begingroup \catcode`\~13 \catcode`\$12 \catcode`\"12 % Loop from \countUTFx to \countUTFy, performing \UTFviiiTmp % substituting ~ and $ with a character token of that value. \def\UTFviiiLoop{% \global\catcode\countUTFx\active \uccode`\~\countUTFx \uccode`\$\countUTFx \uppercase\expandafter{\UTFviiiTmp}% \advance\countUTFx by 1 \ifnum\countUTFx < \countUTFy \expandafter\UTFviiiLoop \fi} % For bytes other than the first in a UTF-8 sequence. Not expected to % be expanded except when writing to auxiliary files. \countUTFx = "80 \countUTFy = "C2 \def\UTFviiiTmp{% \gdef~{% \ifpassthroughchars $\fi}}% \UTFviiiLoop \countUTFx = "C2 \countUTFy = "E0 \def\UTFviiiTmp{% \gdef~{% \ifpassthroughchars $% \else\expandafter\UTFviiiTwoOctets\expandafter$\fi}}% \UTFviiiLoop \countUTFx = "E0 \countUTFy = "F0 \def\UTFviiiTmp{% \gdef~{% \ifpassthroughchars $% \else\expandafter\UTFviiiThreeOctets\expandafter$\fi}}% \UTFviiiLoop \countUTFx = "F0 \countUTFy = "F4 \def\UTFviiiTmp{% \gdef~{% \ifpassthroughchars $% \else\expandafter\UTFviiiFourOctets\expandafter$\fi }}% \UTFviiiLoop \endgroup \def\globallet{\global\let} % save some \expandafter's below % @U{xxxx} to produce U+xxxx, if we support it. \def\U#1{% \expandafter\ifx\csname uni:#1\endcsname \relax \iftxinativeunicodecapable % All Unicode characters can be used if native Unicode handling is % active. However, if the font does not have the glyph, % letters are missing. \begingroup \uccode`\.="#1\relax \uppercase{.} \endgroup \else \errhelp = \EMsimple \errmessage{Unicode character U+#1 not supported, sorry}% \fi \else \csname uni:#1\endcsname \fi } % These macros are used here to construct the name of a control % sequence to be defined. \def\UTFviiiTwoOctetsName#1#2{% \csname u8:#1\string #2\endcsname}% \def\UTFviiiThreeOctetsName#1#2#3{% \csname u8:#1\string #2\string #3\endcsname}% \def\UTFviiiFourOctetsName#1#2#3#4{% \csname u8:#1\string #2\string #3\string #4\endcsname}% % For UTF-8 byte sequences (TeX, e-TeX and pdfTeX), % provide a definition macro to replace a Unicode character; % this gets used by the @U command % \begingroup \catcode`\"=12 \catcode`\<=12 \catcode`\.=12 \catcode`\,=12 \catcode`\;=12 \catcode`\!=12 \catcode`\~=13 \gdef\DeclareUnicodeCharacterUTFviii#1#2{% \countUTFz = "#1\relax \begingroup \parseXMLCharref % Give \u8:... its definition. The sequence of seven \expandafter's % expands after the \gdef three times, e.g. % % 1. \UTFviiTwoOctetsName B1 B2 % 2. \csname u8:B1 \string B2 \endcsname % 3. \u8: B1 B2 (a single control sequence token) % \expandafter\expandafter \expandafter\expandafter \expandafter\expandafter \expandafter\gdef \UTFviiiTmp{#2}% % \expandafter\ifx\csname uni:#1\endcsname \relax \else \message{Internal error, already defined: #1}% \fi % % define an additional control sequence for this code point. \expandafter\globallet\csname uni:#1\endcsname \UTFviiiTmp \endgroup} % % Given the value in \countUTFz as a Unicode code point, set \UTFviiiTmp % to the corresponding UTF-8 sequence. \gdef\parseXMLCharref{% \ifnum\countUTFz < "20\relax \errhelp = \EMsimple \errmessage{Cannot define Unicode char value < 0020}% \else\ifnum\countUTFz < "800\relax \parseUTFviiiA,% \parseUTFviiiB C\UTFviiiTwoOctetsName.,% \else\ifnum\countUTFz < "10000\relax \parseUTFviiiA;% \parseUTFviiiA,% \parseUTFviiiB E\UTFviiiThreeOctetsName.{,;}% \else \parseUTFviiiA;% \parseUTFviiiA,% \parseUTFviiiA!% \parseUTFviiiB F\UTFviiiFourOctetsName.{!,;}% \fi\fi\fi } % Extract a byte from the end of the UTF-8 representation of \countUTFx. % It must be a non-initial byte in the sequence. % Change \uccode of #1 for it to be used in \parseUTFviiiB as one % of the bytes. \gdef\parseUTFviiiA#1{% \countUTFx = \countUTFz \divide\countUTFz by 64 \countUTFy = \countUTFz % Save to be the future value of \countUTFz. \multiply\countUTFz by 64 % \countUTFz is now \countUTFx with the last 5 bits cleared. Subtract % in order to get the last five bits. \advance\countUTFx by -\countUTFz % Convert this to the byte in the UTF-8 sequence. \advance\countUTFx by 128 \uccode `#1\countUTFx \countUTFz = \countUTFy} % Used to put a UTF-8 byte sequence into \UTFviiiTmp % #1 is the increment for \countUTFz to yield a the first byte of the UTF-8 % sequence. % #2 is one of the \UTFviii*OctetsName macros. % #3 is always a full stop (.) % #4 is a template for the other bytes in the sequence. The values for these % bytes is substituted in here with \uppercase using the \uccode's. \gdef\parseUTFviiiB#1#2#3#4{% \advance\countUTFz by "#10\relax \uccode `#3\countUTFz \uppercase{\gdef\UTFviiiTmp{#2#3#4}}} \endgroup % For native Unicode handling (XeTeX and LuaTeX), % provide a definition macro that sets a catcode to `other' non-globally % \def\DeclareUnicodeCharacterNativeOther#1#2{% \catcode"#1=\other } % https://en.wikipedia.org/wiki/Plane_(Unicode)#Basic_M % U+0000..U+007F = https://en.wikipedia.org/wiki/Basic_Latin_(Unicode_block) % U+0080..U+00FF = https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block) % U+0100..U+017F = https://en.wikipedia.org/wiki/Latin_Extended-A % U+0180..U+024F = https://en.wikipedia.org/wiki/Latin_Extended-B % % Many of our renditions are less than wonderful, and all the missing % characters are available somewhere. Loading the necessary fonts % awaits user request. We can't truly support Unicode without % reimplementing everything that's been done in LaTeX for many years, % plus probably using luatex or xetex, and who knows what else. % We won't be doing that here in this simple file. But we can try to at % least make most of the characters not bomb out. % \def\unicodechardefs{% \DeclareUnicodeCharacter{0020}{ } % space \DeclareUnicodeCharacter{0021}{\char"21 }% % space to terminate number \DeclareUnicodeCharacter{0022}{\char"22 }% \DeclareUnicodeCharacter{0023}{\char"23 }% \DeclareUnicodeCharacter{0024}{\char"24 }% \DeclareUnicodeCharacter{0025}{\char"25 }% \DeclareUnicodeCharacter{0026}{\char"26 }% \DeclareUnicodeCharacter{0027}{\char"27 }% \DeclareUnicodeCharacter{0028}{\char"28 }% \DeclareUnicodeCharacter{0029}{\char"29 }% \DeclareUnicodeCharacter{002A}{\char"2A }% \DeclareUnicodeCharacter{002B}{\char"2B }% \DeclareUnicodeCharacter{002C}{\char"2C }% \DeclareUnicodeCharacter{002D}{\char"2D }% \DeclareUnicodeCharacter{002E}{\char"2E }% \DeclareUnicodeCharacter{002F}{\char"2F }% \DeclareUnicodeCharacter{0030}{0}% \DeclareUnicodeCharacter{0031}{1}% \DeclareUnicodeCharacter{0032}{2}% \DeclareUnicodeCharacter{0033}{3}% \DeclareUnicodeCharacter{0034}{4}% \DeclareUnicodeCharacter{0035}{5}% \DeclareUnicodeCharacter{0036}{6}% \DeclareUnicodeCharacter{0037}{7}% \DeclareUnicodeCharacter{0038}{8}% \DeclareUnicodeCharacter{0039}{9}% \DeclareUnicodeCharacter{003A}{\char"3A }% \DeclareUnicodeCharacter{003B}{\char"3B }% \DeclareUnicodeCharacter{003C}{\char"3C }% \DeclareUnicodeCharacter{003D}{\char"3D }% \DeclareUnicodeCharacter{003E}{\char"3E }% \DeclareUnicodeCharacter{003F}{\char"3F }% \DeclareUnicodeCharacter{0040}{\char"40 }% \DeclareUnicodeCharacter{0041}{A}% \DeclareUnicodeCharacter{0042}{B}% \DeclareUnicodeCharacter{0043}{C}% \DeclareUnicodeCharacter{0044}{D}% \DeclareUnicodeCharacter{0045}{E}% \DeclareUnicodeCharacter{0046}{F}% \DeclareUnicodeCharacter{0047}{G}% \DeclareUnicodeCharacter{0048}{H}% \DeclareUnicodeCharacter{0049}{I}% \DeclareUnicodeCharacter{004A}{J}% \DeclareUnicodeCharacter{004B}{K}% \DeclareUnicodeCharacter{004C}{L}% \DeclareUnicodeCharacter{004D}{M}% \DeclareUnicodeCharacter{004E}{N}% \DeclareUnicodeCharacter{004F}{O}% \DeclareUnicodeCharacter{0050}{P}% \DeclareUnicodeCharacter{0051}{Q}% \DeclareUnicodeCharacter{0052}{R}% \DeclareUnicodeCharacter{0053}{S}% \DeclareUnicodeCharacter{0054}{T}% \DeclareUnicodeCharacter{0055}{U}% \DeclareUnicodeCharacter{0056}{V}% \DeclareUnicodeCharacter{0057}{W}% \DeclareUnicodeCharacter{0058}{X}% \DeclareUnicodeCharacter{0059}{Y}% \DeclareUnicodeCharacter{005A}{Z}% \DeclareUnicodeCharacter{005B}{\char"5B }% \DeclareUnicodeCharacter{005C}{\char"5C }% \DeclareUnicodeCharacter{005D}{\char"5D }% \DeclareUnicodeCharacter{005E}{\char"5E }% \DeclareUnicodeCharacter{005F}{\char"5F }% \DeclareUnicodeCharacter{0060}{\char"60 }% \DeclareUnicodeCharacter{0061}{a}% \DeclareUnicodeCharacter{0062}{b}% \DeclareUnicodeCharacter{0063}{c}% \DeclareUnicodeCharacter{0064}{d}% \DeclareUnicodeCharacter{0065}{e}% \DeclareUnicodeCharacter{0066}{f}% \DeclareUnicodeCharacter{0067}{g}% \DeclareUnicodeCharacter{0068}{h}% \DeclareUnicodeCharacter{0069}{i}% \DeclareUnicodeCharacter{006A}{j}% \DeclareUnicodeCharacter{006B}{k}% \DeclareUnicodeCharacter{006C}{l}% \DeclareUnicodeCharacter{006D}{m}% \DeclareUnicodeCharacter{006E}{n}% \DeclareUnicodeCharacter{006F}{o}% \DeclareUnicodeCharacter{0070}{p}% \DeclareUnicodeCharacter{0071}{q}% \DeclareUnicodeCharacter{0072}{r}% \DeclareUnicodeCharacter{0073}{s}% \DeclareUnicodeCharacter{0074}{t}% \DeclareUnicodeCharacter{0075}{u}% \DeclareUnicodeCharacter{0076}{v}% \DeclareUnicodeCharacter{0077}{w}% \DeclareUnicodeCharacter{0078}{x}% \DeclareUnicodeCharacter{0079}{y}% \DeclareUnicodeCharacter{007A}{z}% \DeclareUnicodeCharacter{007B}{\char"7B }% \DeclareUnicodeCharacter{007C}{\char"7C }% \DeclareUnicodeCharacter{007D}{\char"7D }% \DeclareUnicodeCharacter{007E}{\char"7E }% % \DeclareUnicodeCharacter{007F}{} % DEL % \DeclareUnicodeCharacter{00A0}{\tie}% \DeclareUnicodeCharacter{00A1}{\exclamdown}% \DeclareUnicodeCharacter{00A2}{{\tcfont \char162}}% 0242=cent \DeclareUnicodeCharacter{00A3}{\pounds{}}% \DeclareUnicodeCharacter{00A4}{{\tcfont \char164}}% 0244=currency \DeclareUnicodeCharacter{00A5}{{\tcfont \char165}}% 0245=yen \DeclareUnicodeCharacter{00A6}{{\tcfont \char166}}% 0246=brokenbar \DeclareUnicodeCharacter{00A7}{\S}% \DeclareUnicodeCharacter{00A8}{\"{ }}% \DeclareUnicodeCharacter{00A9}{\copyright{}}% \DeclareUnicodeCharacter{00AA}{\ordf}% \DeclareUnicodeCharacter{00AB}{\guillemetleft{}}% \DeclareUnicodeCharacter{00AC}{\ensuremath\lnot}% \DeclareUnicodeCharacter{00AD}{\-}% \DeclareUnicodeCharacter{00AE}{\registeredsymbol{}}% \DeclareUnicodeCharacter{00AF}{\={ }}% % \DeclareUnicodeCharacter{00B0}{\textdegree}% \DeclareUnicodeCharacter{00B1}{\ensuremath\pm}% \DeclareUnicodeCharacter{00B2}{$^2$}% \DeclareUnicodeCharacter{00B3}{$^3$}% \DeclareUnicodeCharacter{00B4}{\'{ }}% \DeclareUnicodeCharacter{00B5}{$\mu$}% \DeclareUnicodeCharacter{00B6}{\P}% \DeclareUnicodeCharacter{00B7}{\ensuremath\cdot}% \DeclareUnicodeCharacter{00B8}{\cedilla{ }}% \DeclareUnicodeCharacter{00B9}{$^1$}% \DeclareUnicodeCharacter{00BA}{\ordm}% \DeclareUnicodeCharacter{00BB}{\guillemetright{}}% \DeclareUnicodeCharacter{00BC}{$1\over4$}% \DeclareUnicodeCharacter{00BD}{$1\over2$}% \DeclareUnicodeCharacter{00BE}{$3\over4$}% \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{00D7}{\ensuremath\times}% \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{00F7}{\ensuremath\div}% \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{010A}{\dotaccent{C}}% \DeclareUnicodeCharacter{010B}{\dotaccent{c}}% \DeclareUnicodeCharacter{010C}{\v{C}}% \DeclareUnicodeCharacter{010D}{\v{c}}% \DeclareUnicodeCharacter{010E}{\v{D}}% \DeclareUnicodeCharacter{010F}{d'}% % \DeclareUnicodeCharacter{0110}{\DH}% \DeclareUnicodeCharacter{0111}{\dh}% \DeclareUnicodeCharacter{0112}{\=E}% \DeclareUnicodeCharacter{0113}{\=e}% \DeclareUnicodeCharacter{0114}{\u{E}}% \DeclareUnicodeCharacter{0115}{\u{e}}% \DeclareUnicodeCharacter{0116}{\dotaccent{E}}% \DeclareUnicodeCharacter{0117}{\dotaccent{e}}% \DeclareUnicodeCharacter{0118}{\ogonek{E}}% \DeclareUnicodeCharacter{0119}{\ogonek{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{0122}{\cedilla{G}}% \DeclareUnicodeCharacter{0123}{\cedilla{g}}% \DeclareUnicodeCharacter{0124}{\^H}% \DeclareUnicodeCharacter{0125}{\^h}% \DeclareUnicodeCharacter{0126}{\missingcharmsg{H WITH STROKE}}% \DeclareUnicodeCharacter{0127}{\missingcharmsg{h WITH STROKE}}% \DeclareUnicodeCharacter{0128}{\~I}% \DeclareUnicodeCharacter{0129}{\~{\dotless{i}}}% \DeclareUnicodeCharacter{012A}{\=I}% \DeclareUnicodeCharacter{012B}{\={\dotless{i}}}% \DeclareUnicodeCharacter{012C}{\u{I}}% \DeclareUnicodeCharacter{012D}{\u{\dotless{i}}}% \DeclareUnicodeCharacter{012E}{\ogonek{I}}% \DeclareUnicodeCharacter{012F}{\ogonek{i}}% % \DeclareUnicodeCharacter{0130}{\dotaccent{I}}% \DeclareUnicodeCharacter{0131}{\dotless{i}}% \DeclareUnicodeCharacter{0132}{IJ}% \DeclareUnicodeCharacter{0133}{ij}% \DeclareUnicodeCharacter{0134}{\^J}% \DeclareUnicodeCharacter{0135}{\^{\dotless{j}}}% \DeclareUnicodeCharacter{0136}{\cedilla{K}}% \DeclareUnicodeCharacter{0137}{\cedilla{k}}% \DeclareUnicodeCharacter{0138}{\ensuremath\kappa}% \DeclareUnicodeCharacter{0139}{\'L}% \DeclareUnicodeCharacter{013A}{\'l}% \DeclareUnicodeCharacter{013B}{\cedilla{L}}% \DeclareUnicodeCharacter{013C}{\cedilla{l}}% \DeclareUnicodeCharacter{013D}{L'}% should kern \DeclareUnicodeCharacter{013E}{l'}% should kern \DeclareUnicodeCharacter{013F}{L\U{00B7}}% % \DeclareUnicodeCharacter{0140}{l\U{00B7}}% \DeclareUnicodeCharacter{0141}{\L}% \DeclareUnicodeCharacter{0142}{\l}% \DeclareUnicodeCharacter{0143}{\'N}% \DeclareUnicodeCharacter{0144}{\'n}% \DeclareUnicodeCharacter{0145}{\cedilla{N}}% \DeclareUnicodeCharacter{0146}{\cedilla{n}}% \DeclareUnicodeCharacter{0147}{\v{N}}% \DeclareUnicodeCharacter{0148}{\v{n}}% \DeclareUnicodeCharacter{0149}{'n}% \DeclareUnicodeCharacter{014A}{\missingcharmsg{ENG}}% \DeclareUnicodeCharacter{014B}{\missingcharmsg{eng}}% \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{0156}{\cedilla{R}}% \DeclareUnicodeCharacter{0157}{\cedilla{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{0165}{\v{t}}% \DeclareUnicodeCharacter{0166}{\missingcharmsg{H WITH STROKE}}% \DeclareUnicodeCharacter{0167}{\missingcharmsg{h WITH STROKE}}% \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{0172}{\ogonek{U}}% \DeclareUnicodeCharacter{0173}{\ogonek{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{017F}{\missingcharmsg{LONG S}}% % \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{02BC}{'}% % \DeclareUnicodeCharacter{02DB}{\ogonek{ }}% % % Greek letters upper case \DeclareUnicodeCharacter{0391}{{\it A}}% \DeclareUnicodeCharacter{0392}{{\it B}}% \DeclareUnicodeCharacter{0393}{\ensuremath{\mit\Gamma}}% \DeclareUnicodeCharacter{0394}{\ensuremath{\mit\Delta}}% \DeclareUnicodeCharacter{0395}{{\it E}}% \DeclareUnicodeCharacter{0396}{{\it Z}}% \DeclareUnicodeCharacter{0397}{{\it H}}% \DeclareUnicodeCharacter{0398}{\ensuremath{\mit\Theta}}% \DeclareUnicodeCharacter{0399}{{\it I}}% \DeclareUnicodeCharacter{039A}{{\it K}}% \DeclareUnicodeCharacter{039B}{\ensuremath{\mit\Lambda}}% \DeclareUnicodeCharacter{039C}{{\it M}}% \DeclareUnicodeCharacter{039D}{{\it N}}% \DeclareUnicodeCharacter{039E}{\ensuremath{\mit\Xi}}% \DeclareUnicodeCharacter{039F}{{\it O}}% \DeclareUnicodeCharacter{03A0}{\ensuremath{\mit\Pi}}% \DeclareUnicodeCharacter{03A1}{{\it P}}% %\DeclareUnicodeCharacter{03A2}{} % none - corresponds to final sigma \DeclareUnicodeCharacter{03A3}{\ensuremath{\mit\Sigma}}% \DeclareUnicodeCharacter{03A4}{{\it T}}% \DeclareUnicodeCharacter{03A5}{\ensuremath{\mit\Upsilon}}% \DeclareUnicodeCharacter{03A6}{\ensuremath{\mit\Phi}}% \DeclareUnicodeCharacter{03A7}{{\it X}}% \DeclareUnicodeCharacter{03A8}{\ensuremath{\mit\Psi}}% \DeclareUnicodeCharacter{03A9}{\ensuremath{\mit\Omega}}% % % Vowels with accents \DeclareUnicodeCharacter{0390}{\ensuremath{\ddot{\acute\iota}}}% \DeclareUnicodeCharacter{03AC}{\ensuremath{\acute\alpha}}% \DeclareUnicodeCharacter{03AD}{\ensuremath{\acute\epsilon}}% \DeclareUnicodeCharacter{03AE}{\ensuremath{\acute\eta}}% \DeclareUnicodeCharacter{03AF}{\ensuremath{\acute\iota}}% \DeclareUnicodeCharacter{03B0}{\ensuremath{\acute{\ddot\upsilon}}}% % % Standalone accent \DeclareUnicodeCharacter{0384}{\ensuremath{\acute{\ }}}% % % Greek letters lower case \DeclareUnicodeCharacter{03B1}{\ensuremath\alpha}% \DeclareUnicodeCharacter{03B2}{\ensuremath\beta}% \DeclareUnicodeCharacter{03B3}{\ensuremath\gamma}% \DeclareUnicodeCharacter{03B4}{\ensuremath\delta}% \DeclareUnicodeCharacter{03B5}{\ensuremath\epsilon}% \DeclareUnicodeCharacter{03B6}{\ensuremath\zeta}% \DeclareUnicodeCharacter{03B7}{\ensuremath\eta}% \DeclareUnicodeCharacter{03B8}{\ensuremath\theta}% \DeclareUnicodeCharacter{03B9}{\ensuremath\iota}% \DeclareUnicodeCharacter{03BA}{\ensuremath\kappa}% \DeclareUnicodeCharacter{03BB}{\ensuremath\lambda}% \DeclareUnicodeCharacter{03BC}{\ensuremath\mu}% \DeclareUnicodeCharacter{03BD}{\ensuremath\nu}% \DeclareUnicodeCharacter{03BE}{\ensuremath\xi}% \DeclareUnicodeCharacter{03BF}{{\it o}}% omicron \DeclareUnicodeCharacter{03C0}{\ensuremath\pi}% \DeclareUnicodeCharacter{03C1}{\ensuremath\rho}% \DeclareUnicodeCharacter{03C2}{\ensuremath\varsigma}% \DeclareUnicodeCharacter{03C3}{\ensuremath\sigma}% \DeclareUnicodeCharacter{03C4}{\ensuremath\tau}% \DeclareUnicodeCharacter{03C5}{\ensuremath\upsilon}% \DeclareUnicodeCharacter{03C6}{\ensuremath\phi}% \DeclareUnicodeCharacter{03C7}{\ensuremath\chi}% \DeclareUnicodeCharacter{03C8}{\ensuremath\psi}% \DeclareUnicodeCharacter{03C9}{\ensuremath\omega}% % % More Greek vowels with accents \DeclareUnicodeCharacter{03CA}{\ensuremath{\ddot\iota}}% \DeclareUnicodeCharacter{03CB}{\ensuremath{\ddot\upsilon}}% \DeclareUnicodeCharacter{03CC}{\ensuremath{\acute o}}% \DeclareUnicodeCharacter{03CD}{\ensuremath{\acute\upsilon}}% \DeclareUnicodeCharacter{03CE}{\ensuremath{\acute\omega}}% % % Variant Greek letters \DeclareUnicodeCharacter{03D1}{\ensuremath\vartheta}% \DeclareUnicodeCharacter{03D6}{\ensuremath\varpi}% \DeclareUnicodeCharacter{03F1}{\ensuremath\varrho}% % \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}% % % Exotic spaces \DeclareUnicodeCharacter{2007}{\hphantom{0}}% % % Punctuation \DeclareUnicodeCharacter{2013}{--}% \DeclareUnicodeCharacter{2014}{---}% \DeclareUnicodeCharacter{2018}{\quoteleft{}}% \DeclareUnicodeCharacter{2019}{\quoteright{}}% \DeclareUnicodeCharacter{201A}{\quotesinglbase{}}% \DeclareUnicodeCharacter{201C}{\quotedblleft{}}% \DeclareUnicodeCharacter{201D}{\quotedblright{}}% \DeclareUnicodeCharacter{201E}{\quotedblbase{}}% \DeclareUnicodeCharacter{2020}{\ensuremath\dagger}% \DeclareUnicodeCharacter{2021}{\ensuremath\ddagger}% \DeclareUnicodeCharacter{2022}{\bullet{}}% \DeclareUnicodeCharacter{202F}{\thinspace}% \DeclareUnicodeCharacter{2026}{\dots{}}% \DeclareUnicodeCharacter{2039}{\guilsinglleft{}}% \DeclareUnicodeCharacter{203A}{\guilsinglright{}}% % \DeclareUnicodeCharacter{20AC}{\euro{}}% % \DeclareUnicodeCharacter{2192}{\arrow}% \DeclareUnicodeCharacter{21D2}{\result{}}% % % Mathematical symbols \DeclareUnicodeCharacter{2200}{\ensuremath\forall}% \DeclareUnicodeCharacter{2203}{\ensuremath\exists}% \DeclareUnicodeCharacter{2208}{\ensuremath\in}% \DeclareUnicodeCharacter{2212}{\minus{}}% \DeclareUnicodeCharacter{2217}{\ast}% \DeclareUnicodeCharacter{221E}{\ensuremath\infty}% \DeclareUnicodeCharacter{2225}{\ensuremath\parallel}% \DeclareUnicodeCharacter{2227}{\ensuremath\wedge}% \DeclareUnicodeCharacter{2229}{\ensuremath\cap}% \DeclareUnicodeCharacter{2261}{\equiv{}}% \DeclareUnicodeCharacter{2264}{\ensuremath\leq}% \DeclareUnicodeCharacter{2265}{\ensuremath\geq}% \DeclareUnicodeCharacter{2282}{\ensuremath\subset}% \DeclareUnicodeCharacter{2287}{\ensuremath\supseteq}% % \DeclareUnicodeCharacter{2016}{\ensuremath\Vert}% \DeclareUnicodeCharacter{2032}{\ensuremath\prime}% \DeclareUnicodeCharacter{210F}{\ensuremath\hbar}% \DeclareUnicodeCharacter{2111}{\ensuremath\Im}% \DeclareUnicodeCharacter{2113}{\ensuremath\ell}% \DeclareUnicodeCharacter{2118}{\ensuremath\wp}% \DeclareUnicodeCharacter{211C}{\ensuremath\Re}% \DeclareUnicodeCharacter{2135}{\ensuremath\aleph}% \DeclareUnicodeCharacter{2190}{\ensuremath\leftarrow}% \DeclareUnicodeCharacter{2191}{\ensuremath\uparrow}% \DeclareUnicodeCharacter{2193}{\ensuremath\downarrow}% \DeclareUnicodeCharacter{2194}{\ensuremath\leftrightarrow}% \DeclareUnicodeCharacter{2195}{\ensuremath\updownarrow}% \DeclareUnicodeCharacter{2196}{\ensuremath\nwarrow}% \DeclareUnicodeCharacter{2197}{\ensuremath\nearrow}% \DeclareUnicodeCharacter{2198}{\ensuremath\searrow}% \DeclareUnicodeCharacter{2199}{\ensuremath\swarrow}% \DeclareUnicodeCharacter{21A6}{\ensuremath\mapsto}% \DeclareUnicodeCharacter{21A9}{\ensuremath\hookleftarrow}% \DeclareUnicodeCharacter{21AA}{\ensuremath\hookrightarrow}% \DeclareUnicodeCharacter{21BC}{\ensuremath\leftharpoonup}% \DeclareUnicodeCharacter{21BD}{\ensuremath\leftharpoondown}% \DeclareUnicodeCharacter{21C0}{\ensuremath\rightharpoonup}% \DeclareUnicodeCharacter{21C1}{\ensuremath\rightharpoondown}% \DeclareUnicodeCharacter{21CC}{\ensuremath\rightleftharpoons}% \DeclareUnicodeCharacter{21D0}{\ensuremath\Leftarrow}% \DeclareUnicodeCharacter{21D1}{\ensuremath\Uparrow}% \DeclareUnicodeCharacter{21D3}{\ensuremath\Downarrow}% \DeclareUnicodeCharacter{21D4}{\ensuremath\Leftrightarrow}% \DeclareUnicodeCharacter{21D5}{\ensuremath\Updownarrow}% \DeclareUnicodeCharacter{2202}{\ensuremath\partial}% \DeclareUnicodeCharacter{2205}{\ensuremath\emptyset}% \DeclareUnicodeCharacter{2207}{\ensuremath\nabla}% \DeclareUnicodeCharacter{2209}{\ensuremath\notin}% \DeclareUnicodeCharacter{220B}{\ensuremath\owns}% \DeclareUnicodeCharacter{220F}{\ensuremath\prod}% \DeclareUnicodeCharacter{2210}{\ensuremath\coprod}% \DeclareUnicodeCharacter{2211}{\ensuremath\sum}% \DeclareUnicodeCharacter{2213}{\ensuremath\mp}% \DeclareUnicodeCharacter{2218}{\ensuremath\circ}% \DeclareUnicodeCharacter{221A}{\ensuremath\surd}% \DeclareUnicodeCharacter{221D}{\ensuremath\propto}% \DeclareUnicodeCharacter{2220}{\ensuremath\angle}% \DeclareUnicodeCharacter{2223}{\ensuremath\mid}% \DeclareUnicodeCharacter{2228}{\ensuremath\vee}% \DeclareUnicodeCharacter{222A}{\ensuremath\cup}% \DeclareUnicodeCharacter{222B}{\ensuremath\smallint}% \DeclareUnicodeCharacter{222E}{\ensuremath\oint}% \DeclareUnicodeCharacter{223C}{\ensuremath\sim}% \DeclareUnicodeCharacter{2240}{\ensuremath\wr}% \DeclareUnicodeCharacter{2243}{\ensuremath\simeq}% \DeclareUnicodeCharacter{2245}{\ensuremath\cong}% \DeclareUnicodeCharacter{2248}{\ensuremath\approx}% \DeclareUnicodeCharacter{224D}{\ensuremath\asymp}% \DeclareUnicodeCharacter{2250}{\ensuremath\doteq}% \DeclareUnicodeCharacter{2260}{\ensuremath\neq}% \DeclareUnicodeCharacter{226A}{\ensuremath\ll}% \DeclareUnicodeCharacter{226B}{\ensuremath\gg}% \DeclareUnicodeCharacter{227A}{\ensuremath\prec}% \DeclareUnicodeCharacter{227B}{\ensuremath\succ}% \DeclareUnicodeCharacter{2283}{\ensuremath\supset}% \DeclareUnicodeCharacter{2286}{\ensuremath\subseteq}% \DeclareUnicodeCharacter{228E}{\ensuremath\uplus}% \DeclareUnicodeCharacter{2291}{\ensuremath\sqsubseteq}% \DeclareUnicodeCharacter{2292}{\ensuremath\sqsupseteq}% \DeclareUnicodeCharacter{2293}{\ensuremath\sqcap}% \DeclareUnicodeCharacter{2294}{\ensuremath\sqcup}% \DeclareUnicodeCharacter{2295}{\ensuremath\oplus}% \DeclareUnicodeCharacter{2296}{\ensuremath\ominus}% \DeclareUnicodeCharacter{2297}{\ensuremath\otimes}% \DeclareUnicodeCharacter{2298}{\ensuremath\oslash}% \DeclareUnicodeCharacter{2299}{\ensuremath\odot}% \DeclareUnicodeCharacter{22A2}{\ensuremath\vdash}% \DeclareUnicodeCharacter{22A3}{\ensuremath\dashv}% \DeclareUnicodeCharacter{22A4}{\ensuremath\ptextop}% \DeclareUnicodeCharacter{22A5}{\ensuremath\bot}% \DeclareUnicodeCharacter{22A8}{\ensuremath\models}% \DeclareUnicodeCharacter{22C0}{\ensuremath\bigwedge}% \DeclareUnicodeCharacter{22C1}{\ensuremath\bigvee}% \DeclareUnicodeCharacter{22C2}{\ensuremath\bigcap}% \DeclareUnicodeCharacter{22C3}{\ensuremath\bigcup}% \DeclareUnicodeCharacter{22C4}{\ensuremath\diamond}% \DeclareUnicodeCharacter{22C5}{\ensuremath\cdot}% \DeclareUnicodeCharacter{22C6}{\ensuremath\star}% \DeclareUnicodeCharacter{22C8}{\ensuremath\bowtie}% \DeclareUnicodeCharacter{2308}{\ensuremath\lceil}% \DeclareUnicodeCharacter{2309}{\ensuremath\rceil}% \DeclareUnicodeCharacter{230A}{\ensuremath\lfloor}% \DeclareUnicodeCharacter{230B}{\ensuremath\rfloor}% \DeclareUnicodeCharacter{2322}{\ensuremath\frown}% \DeclareUnicodeCharacter{2323}{\ensuremath\smile}% % \DeclareUnicodeCharacter{25B3}{\ensuremath\triangle}% \DeclareUnicodeCharacter{25B7}{\ensuremath\triangleright}% \DeclareUnicodeCharacter{25BD}{\ensuremath\bigtriangledown}% \DeclareUnicodeCharacter{25C1}{\ensuremath\triangleleft}% \DeclareUnicodeCharacter{25C7}{\ensuremath\diamond}% \DeclareUnicodeCharacter{2660}{\ensuremath\spadesuit}% \DeclareUnicodeCharacter{2661}{\ensuremath\heartsuit}% \DeclareUnicodeCharacter{2662}{\ensuremath\diamondsuit}% \DeclareUnicodeCharacter{2663}{\ensuremath\clubsuit}% \DeclareUnicodeCharacter{266D}{\ensuremath\flat}% \DeclareUnicodeCharacter{266E}{\ensuremath\natural}% \DeclareUnicodeCharacter{266F}{\ensuremath\sharp}% \DeclareUnicodeCharacter{26AA}{\ensuremath\bigcirc}% \DeclareUnicodeCharacter{27B9}{\ensuremath\rangle}% \DeclareUnicodeCharacter{27C2}{\ensuremath\perp}% \DeclareUnicodeCharacter{27E8}{\ensuremath\langle}% \DeclareUnicodeCharacter{27F5}{\ensuremath\longleftarrow}% \DeclareUnicodeCharacter{27F6}{\ensuremath\longrightarrow}% \DeclareUnicodeCharacter{27F7}{\ensuremath\longleftrightarrow}% \DeclareUnicodeCharacter{27FC}{\ensuremath\longmapsto}% \DeclareUnicodeCharacter{29F5}{\ensuremath\setminus}% \DeclareUnicodeCharacter{2A00}{\ensuremath\bigodot}% \DeclareUnicodeCharacter{2A01}{\ensuremath\bigoplus}% \DeclareUnicodeCharacter{2A02}{\ensuremath\bigotimes}% \DeclareUnicodeCharacter{2A04}{\ensuremath\biguplus}% \DeclareUnicodeCharacter{2A06}{\ensuremath\bigsqcup}% \DeclareUnicodeCharacter{2A3F}{\ensuremath\amalg}% \DeclareUnicodeCharacter{2AAF}{\ensuremath\preceq}% \DeclareUnicodeCharacter{2AB0}{\ensuremath\succeq}% % \global\mathchardef\checkmark="1370% actually the square root sign \DeclareUnicodeCharacter{2713}{\ensuremath\checkmark}% }% end of \unicodechardefs % UTF-8 byte sequence (pdfTeX) definitions (replacing and @U command) % It makes the setting that replace UTF-8 byte sequence. \def\utfeightchardefs{% \let\DeclareUnicodeCharacter\DeclareUnicodeCharacterUTFviii \unicodechardefs } % Whether the active definitions of non-ASCII characters expand to % non-active tokens with the same character code. This is used to % write characters literally, instead of using active definitions for % printing the correct glyphs. \newif\ifpassthroughchars \passthroughcharsfalse % For native Unicode handling (XeTeX and LuaTeX), % provide a definition macro to replace/pass-through a Unicode character % \def\DeclareUnicodeCharacterNative#1#2{% \ifnum"#1>"7F % only make non-ASCII chars active \catcode"#1=\active \def\dodeclareunicodecharacternative##1##2##3{% \begingroup \uccode`\~="##2\relax \uppercase{\gdef~}{% \ifpassthroughchars ##1% \else ##3% \fi } \endgroup } \begingroup \uccode`\.="#1\relax \uppercase{\def\UTFNativeTmp{.}}% \expandafter\dodeclareunicodecharacternative\UTFNativeTmp{#1}{#2}% \endgroup \fi } % Native Unicode handling (XeTeX and LuaTeX) character replacing definition. % It activates the setting that replaces Unicode characters. \def\nativeunicodechardefs{% \let\DeclareUnicodeCharacter\DeclareUnicodeCharacterNative \unicodechardefs } % For native Unicode handling (XeTeX and LuaTeX), % make the character token expand % to the sequences given in \unicodechardefs for printing. \def\DeclareUnicodeCharacterNativeAtU#1#2{% \def\UTFAtUTmp{#2} \expandafter\globallet\csname uni:#1\endcsname \UTFAtUTmp } % @U command definitions for native Unicode handling (XeTeX and LuaTeX). \def\nativeunicodechardefsatu{% \let\DeclareUnicodeCharacter\DeclareUnicodeCharacterNativeAtU \unicodechardefs } % US-ASCII character definitions. \def\asciichardefs{% nothing need be done \relax } % Define all Unicode characters we know about \iftxinativeunicodecapable \nativeunicodechardefsatu \else \utfeightchardefs \fi \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 \txipageheight = \vsize % \hsize = #2\relax \txipagewidth = \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 \else \ifx\XeTeXrevision\thisisundefined \special{papersize=#8,#7}% \else \pdfpageheight #7\relax \pdfpagewidth #8\relax % XeTeX does not have \pdfhorigin and \pdfvorigin. \fi \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 \contentsrightmargin = 0pt \defbodyindent = .5cm }} % 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 \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}{-11.4mm}% {\bindingoffset}{8pt}% {210mm}{148mm}% % \lispnarrowing = 0.2in \tolerance = 800 \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 }} \def\bsixpaper{{\globaldefs = 1 \afourpaper \internalpagesizes{140mm}{100mm}% {-6.35mm}{-12.7mm}% {\bindingoffset}{14pt}% {176mm}{125mm}% \let\SETdispenvsize=\smallword \lispnarrowing = 0.2in \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 2.5in % default 1in margin above heading line % and 1.5in to include heading, footing and % bottom margin % \dimen2 = \hsize \advance\dimen2 by 2in % default to 1 inch margin on each side % \internalpagesizes{#1}{\hsize}% {\voffset}{\normaloffset}% {\bindingoffset}{44pt}% {\dimen0}{\dimen2}% }} % Set default to letter. % \letterpaper % Default value of \hfuzz, for suppressing warnings about overfull hboxes. \hfuzz = 1pt \message{microtype,} % protrusion, from Thanh's protcode.tex. \def\mtsetprotcode#1{% \rpcode#1`\!=200 \rpcode#1`\,=700 \rpcode#1`\-=700 \rpcode#1`\.=700 \rpcode#1`\;=500 \rpcode#1`\:=500 \rpcode#1`\?=200 \rpcode#1`\'=700 \rpcode#1 34=500 % '' \rpcode#1 123=300 % -- \rpcode#1 124=200 % --- \rpcode#1`\)=50 \rpcode#1`\A=50 \rpcode#1`\F=50 \rpcode#1`\K=50 \rpcode#1`\L=50 \rpcode#1`\T=50 \rpcode#1`\V=50 \rpcode#1`\W=50 \rpcode#1`\X=50 \rpcode#1`\Y=50 \rpcode#1`\k=50 \rpcode#1`\r=50 \rpcode#1`\t=50 \rpcode#1`\v=50 \rpcode#1`\w=50 \rpcode#1`\x=50 \rpcode#1`\y=50 % \lpcode#1`\`=700 \lpcode#1 92=500 % `` \lpcode#1`\(=50 \lpcode#1`\A=50 \lpcode#1`\J=50 \lpcode#1`\T=50 \lpcode#1`\V=50 \lpcode#1`\W=50 \lpcode#1`\X=50 \lpcode#1`\Y=50 \lpcode#1`\v=50 \lpcode#1`\w=50 \lpcode#1`\x=50 \lpcode#1`\y=0 % \mtadjustprotcode#1\relax } \newcount\countC \def\mtadjustprotcode#1{% \countC=0 \loop \ifcase\lpcode#1\countC\else \mtadjustcp\lpcode#1\countC \fi \ifcase\rpcode#1\countC\else \mtadjustcp\rpcode#1\countC \fi \advance\countC 1 \ifnum\countC < 256 \repeat } \newcount\countB \def\mtadjustcp#1#2#3{% \setbox\boxA=\hbox{% \ifx#2\font\else#2\fi \char#3}% \countB=\wd\boxA \multiply\countB #1#2#3\relax \divide\countB \fontdimen6 #2\relax #1#2#3=\countB\relax } \ifx\XeTeXrevision\thisisundefined \ifx\luatexversion\thisisundefined \ifpdf % pdfTeX \mtsetprotcode\textrm \def\mtfontexpand#1{\pdffontexpand#1 20 20 1 autoexpand\relax} \else % TeX \def\mtfontexpand#1{} \fi \else % LuaTeX \mtsetprotcode\textrm \def\mtfontexpand#1{\expandglyphsinfont#1 20 20 1\relax} \fi \else % XeTeX \mtsetprotcode\textrm \def\mtfontexpand#1{} \fi \newif\ifmicrotype \def\microtypeON{% \microtypetrue % \ifx\XeTeXrevision\thisisundefined \ifx\luatexversion\thisisundefined \ifpdf % pdfTeX \pdfadjustspacing=2 \pdfprotrudechars=2 \fi \else % LuaTeX \adjustspacing=2 \protrudechars=2 \fi \else % XeTeX \XeTeXprotrudechars=2 \fi % \mtfontexpand\textrm \mtfontexpand\textsl \mtfontexpand\textbf } \def\microtypeOFF{% \microtypefalse % \ifx\XeTeXrevision\thisisundefined \ifx\luatexversion\thisisundefined \ifpdf % pdfTeX \pdfadjustspacing=0 \pdfprotrudechars=0 \fi \else % LuaTeX \adjustspacing=0 \protrudechars=0 \fi \else % XeTeX \XeTeXprotrudechars=0 \fi } \microtypeOFF \parseargdef\microtype{% \def\txiarg{#1}% \ifx\txiarg\onword \microtypeON \else\ifx\txiarg\offword \microtypeOFF \else \errhelp = \EMsimple \errmessage{Unknown @microtype option `\txiarg', must be on|off}% \fi\fi } \message{and turning on texinfo input format.} % Make UTF-8 the default encoding. \documentencodingzzz{UTF-8} \def^^L{\par} % remove \outer, so ^L can appear in an @comment \catcode`\^^K = 10 % treat vertical tab as whitespace % 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{~} % Set catcodes for Texinfo file % Active characters for printing the wanted glyph. % 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\activetilde{{\tt\char126}} \let~ = \activetilde \chardef\hatchar=`\^ \catcode`\^=\active \def\activehat{{\tt \hatchar}} \let^ = \activehat \catcode`\_=\active \def_{\ifusingtt\normalunderscore\_} \def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em } \let\realunder=_ \catcode`\|=\active \def|{{\tt\char124}} \chardef \less=`\< \catcode`\<=\active \def\activeless{{\tt \less}}\let< = \activeless \chardef \gtr=`\> \catcode`\>=\active \def\activegtr{{\tt \gtr}}\let> = \activegtr \catcode`\+=\active \def+{{\tt \char 43}} \catcode`\$=\active \def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix \catcode`\-=\active \let-=\normaldash % used for headline/footline in the output routine, in case the page % breaks in the middle of an @tex block. \def\texinfochars{% \let< = \activeless \let> = \activegtr \let~ = \activetilde \let^ = \activehat \setregularquotes \let\b = \strong \let\i = \smartitalic % in principle, all other definitions in \tex have to be undone too. } % Used sometimes to turn off (effectively) the active characters even after % parsing them. \def\turnoffactive{% \passthroughcharstrue \let-=\normaldash \let"=\normaldoublequote \let$=\normaldollar %$ font-lock fix \let+=\normalplus \let<=\normalless \let>=\normalgreater \let^=\normalcaret \let_=\normalunderscore \let|=\normalverticalbar \let~=\normaltilde \otherbackslash \setregularquotes \unsepspaces } % 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 \loadconf turn them back on. \catcode`+=\other \catcode`\_=\other % \backslashcurfont outputs one backslash character in current font, % as in \char`\\. \global\chardef\backslashcurfont=`\\ % Print a typewriter backslash. For math mode, we can't simply use % \backslashcurfont: 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). 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\ttbackslash{{\tt \ifmmode \mathchar29020 \else \backslashcurfont \fi}} \let\backslashchar = \ttbackslash % \backslashchar{} is for user documents. % These are made active for url-breaking, so need % active definitions as the normal characters. \def\normaldot{.} \def\normalquest{?} \def\normalslash{/} % \newlinesloadsconf - call \loadconf as soon as possible in the % file, e.g. at the first newline. % {\catcode`\^=7 \catcode`\^^M=13 \gdef\newlineloadsconf{% \catcode`\^^M=13 % \newlineloadsconfzz% } \gdef\newlineloadsconfzz#1^^M{% \def\c{\loadconf\c}% % Definition for the first newline read in the file \def ^^M{\loadconf}% % In case the first line has a whole-line command on it \let\originalparsearg\parsearg% \def\parsearg{\loadconf\originalparsearg}% }} % Emergency active definition of newline, in case an active newline token % appears by mistake. {\catcode`\^=7 \catcode13=13% \gdef\enableemergencynewline{% \gdef^^M{% \par% %<warning: active newline>\par% }}} % \loadconf gets called at the beginning of every Texinfo file. % If texinfo.cnf is present on the system, read it. Useful for site-wide % @afourpaper, etc. Not opening texinfo.cnf directly in texinfo.tex % makes it possible to make a format file for Texinfo. % \gdef\loadconf{% \relax % Terminate the filename if running as "tex '&texinfo' FILE.texi". % % Turn off the definitions that trigger \loadconf \everyjobreset \catcode13=5 % regular end of line \enableemergencynewline \let\c=\comment \let\parsearg\originalparsearg % % Also turn back on active characters that might appear in the input % file name, in case not using a pre-dumped format. \catcode`+=\active \catcode`\_=\active % \openin 1 texinfo.cnf \ifeof 1 \else \input texinfo.cnf \fi \closein 1 } % Redefine some control sequences to be controlled by the \ifdummies % and \ifindexnofonts switches. Do this at the end so that the control % sequences are all defined. \definedummies \catcode`\@=0 % \realbackslash is an actual character `\' with catcode other. {\catcode`\\=\other @gdef@realbackslash{\}} % In Texinfo, backslash is an active character; it prints the backslash % in fixed width font. \catcode`\\=\active % @ for escape char from now on. @let\ = @ttbackslash % If in a .fmt file, print the version number. % \eatinput stops the `\input texinfo' from showing up. % After that, `\' should revert to printing a backslash. % 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]}% @global@let\ = @eatinput @catcode`+=@active @catcode`@_=@active} {@catcode`@^=7 @catcode`@^^M=13% @gdef@eatinput input texinfo#1^^M{@loadconf}} @def@everyjobreset{@ifx\@eatinput @let\ = @ttbackslash @fi} % \otherbackslash defines an active \ to be a literal `\' character with % catcode other. @gdef@otherbackslash{@let\=@realbackslash} % Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of % the literal character `\'. % {@catcode`- = @active @gdef@normalturnoffactive{% @turnoffactive @let\=@ttbackslash } } % Say @foo, not \foo, in error messages. @escapechar = `@@ % 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 @c Local variables: @c eval: (add-hook 'before-save-hook 'time-stamp nil t) @c time-stamp-pattern: "texinfoversion{%Y-%02m-%02d.%02H}" @c page-delimiter: "^\\\\message" @c End: @newlineloadsconf ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/src/���������������������������������������������������������������������������������������0000755�0001750�0001750�00000000000�14655401530�013120� 5����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/src/transform.c����������������������������������������������������������������������������0000644�0001750�0001750�00000030423�14643176121�015303� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* This file is part of GNU Rush. Copyright (C) 2006-2024 Sergey Poznyakoff. (using my implementation for the GNU tar). GNU Rush is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GNU Rush is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. */ #include <rush.h> enum transform_type { transform_first, transform_global }; enum replace_segm_type { segm_literal, /* Literal segment */ segm_backref, /* Back-reference segment */ segm_case_ctl /* Case control segment (GNU extension) */ }; enum case_ctl_type { ctl_stop, /* Stop case conversion */ ctl_upcase_next,/* Turn the next character to uppercase */ ctl_locase_next,/* Turn the next character to lowercase */ ctl_upcase, /* Turn the replacement to uppercase until ctl_stop */ ctl_locase /* Turn the replacement to lowercase until ctl_stop */ }; struct replace_segm { struct replace_segm *next; enum replace_segm_type type; union { struct { char *ptr; size_t size; } literal; /* type == segm_literal */ size_t ref; /* type == segm_backref */ enum case_ctl_type ctl; /* type == segm_case_ctl */ } v; }; struct transform { struct transform *next; enum transform_type transform_type; unsigned match_number; regex_t regex; /* Compiled replacement expression */ struct replace_segm *repl_head, *repl_tail; size_t segm_count; /* Number of elements in the above list */ }; struct transform_list { struct transform *head, *tail; }; static struct transform * new_transform (struct transform_list *tlist) { struct transform *p = xzalloc (sizeof *p); if (tlist->tail) tlist->tail->next = p; else tlist->head = p; tlist->tail = p; return p; } static struct replace_segm * add_segment (struct transform *tf) { struct replace_segm *segm = xmalloc (sizeof *segm); segm->next = NULL; if (tf->repl_tail) tf->repl_tail->next = segm; else tf->repl_head = segm; tf->repl_tail = segm; tf->segm_count++; return segm; } static void add_literal_segment (struct transform *tf, char *str, char *end) { size_t len = end - str; if (len) { struct replace_segm *segm = add_segment (tf); segm->type = segm_literal; segm->v.literal.ptr = xmalloc (len + 1); memcpy (segm->v.literal.ptr, str, len); segm->v.literal.ptr[len] = 0; segm->v.literal.size = len; } } static void add_char_segment (struct transform *tf, int chr) { struct replace_segm *segm = add_segment (tf); segm->type = segm_literal; segm->v.literal.ptr = xmalloc (2); segm->v.literal.ptr[0] = chr; segm->v.literal.ptr[1] = 0; segm->v.literal.size = 1; } static void add_backref_segment (struct transform *tf, size_t ref) { struct replace_segm *segm = add_segment (tf); segm->type = segm_backref; segm->v.ref = ref; } static void add_case_ctl_segment (struct transform *tf, enum case_ctl_type ctl) { struct replace_segm *segm = add_segment (tf); segm->type = segm_case_ctl; segm->v.ctl = ctl; } static const char * parse_transform_expr (struct transform_list *tlist, const char *expr, int cflags, struct cfloc *loc) { int delim; int i, j, rc; char *str, *beg, *cur; const char *p; struct transform *tf = new_transform (tlist); if (expr[0] != 's') die_usage (loc, "%s", _("Transform expression must start with 's' followed by a punctuation character")); delim = expr[1]; /* Scan regular expression */ for (i = 2; expr[i] && expr[i] != delim; i++) if (expr[i] == '\\' && expr[i+1]) i++; if (expr[i] != delim) die_usage (loc, _("Missing 2nd delimiter in position %d of expression %s"), i, expr); /* Scan replacement expression */ for (j = i + 1; expr[j] && expr[j] != delim; j++) if (expr[j] == '\\' && expr[j+1]) j++; if (expr[j] != delim) die_usage (loc, _("Missing trailing delimiter in position %d of expression %s"), j, expr); /* Check flags */ tf->transform_type = transform_first; for (p = expr + j + 1; *p && *p != ';'; p++) switch (*p) { case 'g': tf->transform_type = transform_global; break; case 'i': cflags |= REG_ICASE; break; case 'x': cflags |= REG_EXTENDED; break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': tf->match_number = strtoul (p, (char**) &p, 0); p--; break; default: die_usage (loc, _("Unknown flag in transform expression: %c"), *p); } if (*p == ';') p++; /* Extract and compile regex */ str = xmalloc (i - 1); memcpy (str, expr + 2, i - 2); str[i - 2] = 0; rc = regcomp (&tf->regex, str, cflags); if (rc) { char errbuf[512]; regerror (rc, &tf->regex, errbuf, sizeof (errbuf)); die_usage (loc, _("Invalid transform expression: %s"), errbuf); } if (str[0] == '^' || str[strlen (str) - 1] == '$') tf->transform_type = transform_first; free (str); /* Extract and compile replacement expr */ i++; str = xmalloc (j - i + 1); memcpy (str, expr + i, j - i); str[j - i] = 0; for (cur = beg = str; *cur;) { if (*cur == '\\') { size_t n; add_literal_segment (tf, beg, cur); switch (*++cur) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': n = strtoul (cur, &cur, 10); if (n > tf->regex.re_nsub) die_usage (loc, _("Invalid transform replacement: " "back reference out of range")); add_backref_segment (tf, n); break; case '\\': add_char_segment (tf, '\\'); cur++; break; case 'a': add_char_segment (tf, '\a'); cur++; break; case 'b': add_char_segment (tf, '\b'); cur++; break; case 'f': add_char_segment (tf, '\f'); cur++; break; case 'n': add_char_segment (tf, '\n'); cur++; break; case 'r': add_char_segment (tf, '\r'); cur++; break; case 't': add_char_segment (tf, '\t'); cur++; break; case 'v': add_char_segment (tf, '\v'); cur++; break; case '&': add_char_segment (tf, '&'); cur++; break; case 'L': /* Turn the replacement to lowercase until a `\U' or `\E' is found, */ add_case_ctl_segment (tf, ctl_locase); cur++; break; case 'l': /* Turn the next character to lowercase, */ add_case_ctl_segment (tf, ctl_locase_next); cur++; break; case 'U': /* Turn the replacement to uppercase until a `\L' or `\E' is found, */ add_case_ctl_segment (tf, ctl_upcase); cur++; break; case 'u': /* Turn the next character to uppercase, */ add_case_ctl_segment (tf, ctl_upcase_next); cur++; break; case 'E': /* Stop case conversion started by `\L' or `\U'. */ add_case_ctl_segment (tf, ctl_stop); cur++; break; default: /* Try to be nice */ { char buf[2]; buf[0] = '\\'; buf[1] = *cur; add_literal_segment (tf, buf, buf + 2); } cur++; break; } beg = cur; } else if (*cur == '&') { add_literal_segment (tf, beg, cur); add_backref_segment (tf, 0); beg = ++cur; } else cur++; } add_literal_segment (tf, beg, cur); return p; } transform_t compile_transform_expr (const char *expr, int cflags, struct cfloc *loc) { struct transform_list tlist = { NULL, NULL }; while (*expr) expr = parse_transform_expr (&tlist, expr, cflags, loc); return tlist.head; } /* Run case conversion specified by CASE_CTL on array PTR of SIZE characters. Returns pointer to statically allocated storage. */ static const char * run_case_conv (enum case_ctl_type case_ctl, const char *ptr, size_t size) { static char *case_ctl_buffer; static size_t case_ctl_bufsize; char *p; if (case_ctl_bufsize < size) { case_ctl_bufsize = size; case_ctl_buffer = xrealloc (case_ctl_buffer, case_ctl_bufsize); } memcpy (case_ctl_buffer, ptr, size); switch (case_ctl) { case ctl_upcase_next: case_ctl_buffer[0] = c_toupper (case_ctl_buffer[0]); break; case ctl_locase_next: case_ctl_buffer[0] = c_tolower (case_ctl_buffer[0]); break; case ctl_upcase: for (p = case_ctl_buffer; p < case_ctl_buffer + size; p++) *p = c_toupper (*p); break; case ctl_locase: for (p = case_ctl_buffer; p < case_ctl_buffer + size; p++) *p = c_tolower (*p); break; case ctl_stop: break; } return case_ctl_buffer; } void _single_transform_name_to_slist (struct transform *tf, slist_t slist, const char *input) { regmatch_t *rmp; int rc; size_t nmatches = 0; enum case_ctl_type case_ctl = ctl_stop, /* Current case conversion op */ save_ctl = ctl_stop; /* Saved case_ctl for \u and \l */ /* Reset case conversion after a single-char operation */ #define CASE_CTL_RESET() if (case_ctl == ctl_upcase_next \ || case_ctl == ctl_locase_next) \ { \ case_ctl = save_ctl; \ save_ctl = ctl_stop; \ } rmp = xmalloc ((tf->regex.re_nsub + 1) * sizeof (*rmp)); while (*input) { size_t disp; const char *ptr; rc = regexec (&tf->regex, input, tf->regex.re_nsub + 1, rmp, 0); if (rc == 0) { struct replace_segm *segm; disp = rmp[0].rm_eo; nmatches++; if (tf->match_number && nmatches < tf->match_number) { slist_append (slist, input, disp); input += disp; continue; } if (rmp[0].rm_so) slist_append (slist, input, rmp[0].rm_so); for (segm = tf->repl_head; segm; segm = segm->next) { switch (segm->type) { case segm_literal: /* Literal segment */ if (case_ctl == ctl_stop) ptr = segm->v.literal.ptr; else { ptr = run_case_conv (case_ctl, segm->v.literal.ptr, segm->v.literal.size); CASE_CTL_RESET(); } slist_append (slist, ptr, segm->v.literal.size); break; case segm_backref: /* Back-reference segment */ if (rmp[segm->v.ref].rm_so != -1 && rmp[segm->v.ref].rm_eo != -1) { size_t size = rmp[segm->v.ref].rm_eo - rmp[segm->v.ref].rm_so; ptr = input + rmp[segm->v.ref].rm_so; if (case_ctl != ctl_stop) { ptr = run_case_conv (case_ctl, ptr, size); CASE_CTL_RESET(); } slist_append (slist, ptr, size); } break; case segm_case_ctl: switch (segm->v.ctl) { case ctl_upcase_next: case ctl_locase_next: switch (save_ctl) { case ctl_stop: case ctl_upcase: case ctl_locase: save_ctl = case_ctl; default: break; } /*FALL THROUGH*/ case ctl_upcase: case ctl_locase: case ctl_stop: case_ctl = segm->v.ctl; } } } } else { disp = strlen (input); slist_append (slist, input, disp); } input += disp; if (tf->transform_type == transform_first) { slist_append (slist, input, strlen (input)); break; } } free (rmp); } char * transform_string (transform_t tf, const char *input) { if (tf) { slist_t slist = slist_create (); char *buf = NULL; size_t size = 0; for (; tf; tf = tf->next) { _single_transform_name_to_slist (tf, slist, input); input = slist_reduce (slist, &buf, &size); } slist_free(slist); } return xstrdup (input); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/src/rlopt.h��������������������������������������������������������������������������������0000644�0001750�0001750�00000040360�14643176476�014453� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- buffer-read-only: t -*- vi: set ro: THIS FILE IS GENERATED AUTOMATICALLY. PLEASE DO NOT EDIT. */ #line 1 "rlopt.opt" /* This file is part of GNU Rush. Copyright (C) 2008-2024 Sergey Poznyakoff GNU Rush is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GNU Rush is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. */ static int numeric_option; #line 20 "rlopt.opt" #line 20 void print_help(void); #line 20 void print_usage(void); #line 80 "rlopt.opt" #line 80 /* Option codes */ #line 80 enum { #line 80 _OPTION_INIT=255, #line 80 #line 38 "rlopt.opt" #line 38 OPTION_FORWARD, #line 80 "rlopt.opt" #line 80 OPTION_USAGE, #line 80 "rlopt.opt" #line 80 OPTION_VERSION, #line 80 "rlopt.opt" MAX_OPTION #line 80 }; #line 80 static struct option long_options[] = { #line 80 #line 24 "rlopt.opt" #line 24 { "format", required_argument, 0, 'F' }, #line 31 "rlopt.opt" #line 31 { "file", required_argument, 0, 'f' }, #line 38 "rlopt.opt" #line 38 { "forward", no_argument, 0, OPTION_FORWARD }, #line 45 "rlopt.opt" #line 45 { "no-header", no_argument, 0, 'H' }, #line 52 "rlopt.opt" #line 52 { "count", required_argument, 0, 'n' }, #line 80 "rlopt.opt" #line 80 { "help", no_argument, 0, 'h' }, #line 80 "rlopt.opt" #line 80 { "usage", no_argument, 0, OPTION_USAGE }, #line 80 "rlopt.opt" #line 80 { "version", no_argument, 0, OPTION_VERSION }, #line 80 "rlopt.opt" {0, 0, 0, 0} #line 80 }; #line 80 static struct opthelp { #line 80 const char *opt; #line 80 const char *arg; #line 80 int is_optional; #line 80 const char *descr; #line 80 } opthelp[] = { #line 80 #line 26 "rlopt.opt" #line 26 { "-F, --format", N_("STRING"), 0, N_("Use STRING instead of the default format.") }, #line 33 "rlopt.opt" #line 33 { "-f, --file", N_("DIR"), 0, N_("Look for database files in DIR.") }, #line 40 "rlopt.opt" #line 40 { "--forward", NULL, 0, N_("Show entries in chronological order.") }, #line 47 "rlopt.opt" #line 47 { "-H, --no-header", NULL, 0, N_("Do not display header line.") }, #line 54 "rlopt.opt" #line 54 { "-n, --count", N_("NUMBER"), 0, N_("Show at most NUM records.") }, #line 80 "rlopt.opt" #line 80 { NULL, NULL, 0, N_("Other options") }, #line 80 "rlopt.opt" #line 80 { "-h, --help", NULL, 0, N_("Give this help list") }, #line 80 "rlopt.opt" #line 80 { "--usage", NULL, 0, N_("Give a short usage message") }, #line 80 "rlopt.opt" #line 80 { "--version", NULL, 0, N_("Print program version") }, #line 80 "rlopt.opt" }; #line 20 "rlopt.opt" #line 20 const char *program_version = "rushlast" " (" PACKAGE_STRING ")"; #line 20 static char doc[] = N_("rushlast - show listing of last Rush logins."); #line 20 static char args_doc[] = N_("[user [user...]]"); #line 20 const char *program_bug_address = "<" PACKAGE_BUGREPORT ">"; #line 20 #line 20 #define DESCRCOLUMN 30 #line 20 #define RMARGIN 79 #line 20 #define GROUPCOLUMN 2 #line 20 #define USAGECOLUMN 13 #line 20 #line 20 static void #line 20 indent (size_t start, size_t col) #line 20 { #line 20 for (; start < col; start++) #line 20 putchar (' '); #line 20 } #line 20 #line 20 static void #line 20 print_option_descr (const char *descr, size_t lmargin, size_t rmargin) #line 20 { #line 20 while (*descr) #line 20 { #line 20 int s = 0; #line 20 int i; #line 20 size_t width = rmargin - lmargin; #line 20 #line 20 for (i = 0; ; i++) #line 20 { #line 20 if (descr[i] == 0 || isspace (descr[i])) #line 20 { #line 20 if (i > width) #line 20 break; #line 20 s = i; #line 20 if (descr[i] == 0) #line 20 break; #line 20 } #line 20 } #line 20 printf ("%*.*s\n", s, s, descr); #line 20 descr += s; #line 20 if (*descr) #line 20 { #line 20 indent (0, lmargin); #line 20 descr++; #line 20 } #line 20 } #line 20 } #line 20 #line 20 void #line 20 print_help(void) #line 20 { #line 20 unsigned i; #line 20 #line 20 printf ("%s %s [%s]...", _("Usage:"), "rushlast", _("OPTION")); #line 20 if (args_doc[0]) #line 20 printf(" %s", gettext(args_doc)); #line 20 printf("\n"); #line 20 if (doc[0]) #line 20 print_option_descr(gettext (doc), 0, RMARGIN); #line 20 putchar ('\n'); #line 20 #line 20 for (i = 0; i < sizeof (opthelp) / sizeof (opthelp[0]); i++) #line 20 { #line 20 unsigned n; #line 20 if (opthelp[i].opt) #line 20 { #line 20 n = printf (" %s", opthelp[i].opt); #line 20 if (opthelp[i].arg) #line 20 { #line 20 char *cb, *ce; #line 20 if (strlen (opthelp[i].opt) == 2) #line 20 { #line 20 if (!opthelp[i].is_optional) #line 20 { #line 20 putchar (' '); #line 20 n++; #line 20 } #line 20 } #line 20 else #line 20 { #line 20 putchar ('='); #line 20 n++; #line 20 } #line 20 if (opthelp[i].is_optional) #line 20 { #line 20 cb = "["; #line 20 ce = "]"; #line 20 } #line 20 else #line 20 cb = ce = ""; #line 20 n += printf ("%s%s%s", cb, gettext (opthelp[i].arg), ce); #line 20 } #line 20 if (n >= DESCRCOLUMN) #line 20 { #line 20 putchar ('\n'); #line 20 n = 0; #line 20 } #line 20 indent (n, DESCRCOLUMN); #line 20 print_option_descr (gettext (opthelp[i].descr), DESCRCOLUMN, RMARGIN); #line 20 } #line 20 else #line 20 { #line 20 if (i) #line 20 putchar ('\n'); #line 20 indent (0, GROUPCOLUMN); #line 20 print_option_descr (gettext (opthelp[i].descr), #line 20 GROUPCOLUMN, RMARGIN); #line 20 putchar ('\n'); #line 20 } #line 20 } #line 20 #line 20 putchar ('\n'); #line 20 print_option_descr (_("Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options."), 0, RMARGIN); #line 20 putchar ('\n'); #line 20 printf (_("Report bugs to %s.\n"), program_bug_address); #line 20 } #line 20 #line 20 static int #line 20 cmpidx_short(const void *a, const void *b) #line 20 { #line 20 struct opthelp const **opta = (struct opthelp const **)a; #line 20 struct opthelp const **optb = (struct opthelp const **)b; #line 20 #line 20 return (*opta)->opt[1] - (*optb)->opt[1]; #line 20 } #line 20 #line 20 static int #line 20 cmpidx_long(const void *a, const void *b) #line 20 { #line 20 struct opthelp const **ap = (struct opthelp const **)a; #line 20 struct opthelp const **bp = (struct opthelp const **)b; #line 20 char const *opta, *optb; #line 20 size_t lena, lenb; #line 20 #line 20 if ((*ap)->opt[1] == '-') #line 20 opta = (*ap)->opt; #line 20 else #line 20 opta = (*ap)->opt + 4; #line 20 lena = strcspn(opta, ","); #line 20 #line 20 if ((*bp)->opt[1] == '-') #line 20 optb = (*bp)->opt; #line 20 else #line 20 optb = (*bp)->opt + 4; #line 20 lenb = strcspn(optb, ","); #line 20 return strncmp(opta, optb, lena > lenb ? lenb : lena); #line 20 } #line 20 #line 20 void #line 20 print_usage(void) #line 20 { #line 20 unsigned i; #line 20 unsigned n; #line 20 char *buf; #line 20 size_t bufsize; #line 20 unsigned nidx; #line 20 struct opthelp **optidx; #line 20 size_t optcount = sizeof(opthelp) / sizeof(opthelp[0]); #line 20 #line 20 #define FLUSH do { buf[n] = 0; printf("%s\n", buf); n = USAGECOLUMN; memset(buf, ' ', n); } while (0) #line 20 #define ADDC(c) do { if (n == RMARGIN) FLUSH; buf[n++] = c; } while (0) #line 20 #line 20 optidx = calloc(optcount, sizeof(optidx[0])); #line 20 if (!optidx) #line 20 abort(); #line 20 bufsize = RMARGIN + 1; #line 20 buf = malloc(bufsize); #line 20 if (!buf) #line 20 abort(); #line 20 #line 20 n = snprintf(buf, bufsize, "%s %s ", _("Usage:"), "rushlast"); #line 20 #line 20 /* Print a list of short options without arguments. */ #line 20 for (i = nidx = 0; i < optcount; i++) #line 20 if (opthelp[i].opt && #line 20 opthelp[i].descr && #line 20 opthelp[i].opt[1] != '-' && #line 20 opthelp[i].arg == NULL) #line 20 optidx[nidx++] = opthelp + i; #line 20 #line 20 if (nidx) { #line 20 qsort(optidx, nidx, sizeof(optidx[0]), cmpidx_short); #line 20 #line 20 ADDC('['); #line 20 ADDC('-'); #line 20 for (i = 0; i < nidx; i++) { #line 20 ADDC(optidx[i]->opt[1]); #line 20 } #line 20 ADDC(']'); #line 20 } #line 20 #line 20 /* Print a list of short options with arguments. */ #line 20 for (i = nidx = 0; i < optcount; i++) { #line 20 if (opthelp[i].opt && #line 20 opthelp[i].descr && #line 20 opthelp[i].opt[1] != '-' && #line 20 opthelp[i].arg) #line 20 optidx[nidx++] = opthelp + i; #line 20 } #line 20 #line 20 if (nidx) { #line 20 qsort(optidx, nidx, sizeof(optidx[0]), cmpidx_short); #line 20 #line 20 for (i = 0; i < nidx; i++) { #line 20 struct opthelp *opt = optidx[i]; #line 20 size_t len = 5 + strlen(opt->arg) #line 20 + (opt->is_optional ? 2 : 1); #line 20 #line 20 if (n + len > RMARGIN) #line 20 FLUSH; #line 20 buf[n++] = ' '; #line 20 buf[n++] = '['; #line 20 buf[n++] = '-'; #line 20 buf[n++] = opt->opt[1]; #line 20 if (opt->is_optional) { #line 20 buf[n++] = '['; #line 20 strcpy(&buf[n], opt->arg); #line 20 n += strlen(opt->arg); #line 20 buf[n++] = ']'; #line 20 } else { #line 20 buf[n++] = ' '; #line 20 strcpy(&buf[n], opt->arg); #line 20 n += strlen(opt->arg); #line 20 } #line 20 buf[n++] = ']'; #line 20 } #line 20 } #line 20 #line 20 /* Print a list of long options */ #line 20 for (i = nidx = 0; i < optcount; i++) { #line 20 if (opthelp[i].opt && opthelp[i].descr #line 20 && (opthelp[i].opt[1] == '-' || opthelp[i].opt[2] == ',')) #line 20 optidx[nidx++] = opthelp + i; #line 20 } #line 20 #line 20 if (nidx) { #line 20 qsort(optidx, nidx, sizeof(optidx[0]), cmpidx_long); #line 20 #line 20 for (i = 0; i < nidx; i++) { #line 20 struct opthelp *opt = optidx[i]; #line 20 size_t len; #line 20 const char *longopt; #line 20 #line 20 if (opt->opt[1] == '-') #line 20 longopt = opt->opt; #line 20 else if (opt->opt[2] == ',') #line 20 longopt = opt->opt + 4; #line 20 else #line 20 continue; #line 20 #line 20 len = 3 + strlen(longopt) #line 20 + (opt->arg ? 1 + strlen(opt->arg) #line 20 + (opt->is_optional ? 2 : 0) : 0); #line 20 if (n + len > RMARGIN) { #line 20 FLUSH; #line 20 /* Make sure we have enough buffer space if the string cannot be split */ #line 20 if (n + len > bufsize) { #line 20 bufsize = n + len; #line 20 buf = realloc(buf, bufsize); #line 20 if (!buf) #line 20 abort(); #line 20 } #line 20 } #line 20 buf[n++] = ' '; #line 20 buf[n++] = '['; #line 20 strcpy(&buf[n], longopt); #line 20 n += strlen(longopt); #line 20 if (opt->arg) { #line 20 buf[n++] = '='; #line 20 if (opt->is_optional) { #line 20 buf[n++] = '['; #line 20 strcpy(&buf[n], opt->arg); #line 20 n += strlen(opt->arg); #line 20 buf[n++] = ']'; #line 20 } else { #line 20 strcpy(&buf[n], opt->arg); #line 20 n += strlen(opt->arg); #line 20 } #line 20 } #line 20 buf[n++] = ']'; #line 20 } #line 20 } #line 20 #line 20 /* Print argument list */ #line 20 if (args_doc[0]) { #line 20 char const *docstr = gettext(args_doc); #line 20 size_t len = strlen(docstr) + 1; #line 20 if (n + len <= RMARGIN) { #line 20 buf[n++] = ' '; #line 20 strcpy(buf + n, docstr); #line 20 n += len; #line 20 } else { #line 20 struct wordsplit ws; #line 20 #line 20 if (wordsplit(docstr, &ws, #line 20 WRDSF_SHOWERR | #line 20 WRDSF_NOVAR | #line 20 WRDSF_NOCMD | #line 20 WRDSF_QUOTE | #line 20 WRDSF_SQUEEZE_DELIMS)) #line 20 abort(); #line 20 #line 20 for (i = 0; i < ws.ws_wordc; i++) { #line 20 len = strlen(ws.ws_wordv[i]) + 1; #line 20 if (n + len > RMARGIN) { #line 20 FLUSH; #line 20 /* Make sure we have enough buffer space if the string cannot be split */ #line 20 if (n + len > bufsize) { #line 20 bufsize = n + len; #line 20 buf = realloc(buf, bufsize); #line 20 if (!buf) #line 20 abort(); #line 20 } #line 20 } #line 20 buf[n++] = ' '; #line 20 strcpy(buf + n, ws.ws_wordv[i]); #line 20 n += len; #line 20 } #line 20 } #line 20 } #line 20 #line 20 FLUSH; #line 20 #line 20 free(optidx); #line 20 free(buf); #line 20 } #line 20 #line 20 const char version_etc_copyright[] = #line 20 /* Do *not* mark this string for translation. %s is a copyright symbol suitable for this locale, and %d is the copyright year. */ #line 20 "Copyright %s 2008-%d Sergey Poznyakoff"; #line 20 int rush_copyright_year = 2024; #line 20 #line 20 void #line 20 print_version_only(const char *program_version, FILE *stream) #line 20 { #line 20 fprintf (stream, "%s\n", program_version); #line 20 /* 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. */ #line 20 fprintf (stream, version_etc_copyright, _("(C)"), rush_copyright_year); #line 20 fputc ('\n', stream); #line 20 } #line 20 #line 20 void #line 20 print_version(const char *program_version, FILE *stream) #line 20 { #line 20 print_version_only(program_version, stream); #line 20 #line 20 fputs (_("License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\nThis is free software: you are free to change and redistribute it.\nThere is NO WARRANTY, to the extent permitted by law.\n\n"), #line 20 stream); #line 20 #line 20 } #line 20 #line 80 "rlopt.opt" #line 80 void get_options(int argc, char *argv[]) { #line 85 { #line 85 int optchar; #line 85 #line 85 #line 85 while ((optchar = getopt_long(argc, argv, "F:f:Hn:0123456789h", #line 85 long_options, NULL)) != EOF) #line 85 { #line 85 switch (optchar) #line 85 { #line 85 default: #line 85 exit(1); #line 85 #line 85 #line 26 "rlopt.opt" case 'F': #line 26 { #line 26 numeric_option = 0; format = optarg; #line 29 break; #line 29 } #line 33 "rlopt.opt" case 'f': #line 33 { #line 33 numeric_option = 0; base_name = optarg; #line 36 break; #line 36 } #line 40 "rlopt.opt" case OPTION_FORWARD: #line 40 { #line 40 numeric_option = 0; forward = 1; #line 43 break; #line 43 } #line 47 "rlopt.opt" case 'H': #line 47 { #line 47 numeric_option = 0; display_header = 0; #line 50 break; #line 50 } #line 54 "rlopt.opt" case 'n': #line 54 { #line 54 char *p; numeric_option = 0; count = strtoul(optarg, &p, 10); if (*p) error(1, 0, _("invalid number (%s)"), optarg); #line 60 break; #line 60 } #line 72 "rlopt.opt" case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': #line 72 { #line 72 if (!numeric_option) { count = 0; numeric_option = 1; } count = count * 10 + optchar - '0'; #line 78 break; #line 78 } #line 80 "rlopt.opt" case 'h': #line 80 { #line 80 #line 80 print_help (); #line 80 exit (0); #line 80 #line 80 break; #line 80 } #line 80 "rlopt.opt" case OPTION_USAGE: #line 80 { #line 80 #line 80 print_usage (); #line 80 exit (0); #line 80 #line 80 break; #line 80 } #line 80 "rlopt.opt" case OPTION_VERSION: #line 80 { #line 80 #line 80 /* Give version */ #line 80 print_version(program_version, stdout); #line 80 exit (0); #line 80 #line 80 break; #line 80 } #line 85 "rlopt.opt" } #line 85 } #line 85 } #line 85 ; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/src/cflex.l��������������������������������������������������������������������������������0000644�0001750�0001750�00000046333�14643176120�014410� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������%top{ #include <config.h> } /* This file is part of GNU Rush. Copyright (C) 2008-2024 Sergey Poznyakoff GNU Rush is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GNU Rush is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. */ %{ #include <rush.h> #include <sys/stat.h> #include <cf.h> #include <cfgram.h> /* Current input stream (yyin is not used) */ static CFSTREAM *input_stream; /* Buffer for composing string values */ static struct stringbuf sb; /* Names of the source files form a singly-linked list. They remain in the memory until the end of run because various objects refer to them (most notably, rush_rule). */ struct source_file { struct source_file *prev; char filename[1]; }; struct source_file *source_file_last; char const * new_source_file_name(char const *f) { struct source_file *file; for (file = source_file_last; file; file = file->prev) { if (strcmp(file->filename, f) == 0) return file->filename; } file = xmalloc(sizeof(file[0]) + strlen(f)); strcpy(file->filename, f); file->prev = source_file_last; source_file_last = file; return file->filename; } /* Current input location */ struct cfloc curloc; /* User action is set uo to update end column. */ #define YY_USER_ACTION (curloc.end.column += yyleng); /* Advance the end point of the current location N lines. */ static inline void advance_line(size_t n) { curloc.end.line += n; curloc.end.column = 1; } /* Reset the start point of the current location to its end point. This starts the next token. */ static inline void reset_loc(void) { curloc.beg = curloc.end; } /* This is used in the scanner actions below to return token types. */ static inline int tok(int c) { yylloc = curloc; yylloc.end.column--; reset_loc(); return c; } /* The scanner implements several exclusive conditions, some of which are preserved on stack. */ struct start_cond { struct start_cond *next; int start; }; static struct start_cond *start_tos; static inline void pushstart(int newstart) { struct start_cond *sc = malloc(sizeof(sc[0])); sc->start = YY_START; sc->next = start_tos; start_tos = sc; BEGIN(newstart); } static inline void popstart(void) { struct start_cond *tos = start_tos; if (!tos) die(system_error, NULL, _("INTERNAL ERROR at %s:%d: state stack is empty"), __FILE__, __LINE__); start_tos = tos->next; BEGIN(tos->start); free(tos); } static int in_var(void); /* Read next chunk of the input. */ #undef YY_INPUT #define YY_INPUT(buf,result,max_size) \ (result) = cfstream_read(input_stream, buf, max_size) /* Additional stringbuf function for use when processing escape sequences. SB is the string buffer, TEXT is the input text ending with '\' + something, LENG is number of bytes in it. */ /* Default function: TEXT ends with a C-style escape sequence (e.g. \v) or rush-specific \% escape. Unrecognized escape sequence is reported and transferred varbatim to the output. Within a ${V:-""} construct, only "\\n" and "\%" are processed, the rest is retained. It will be expanded by wordsplit. */ static void stringbuf_add_escape_dfl(struct stringbuf *sb, char const *text, size_t leng) { int c = text[leng - 1]; if (in_var()) { if (c != '\n' && c != '%') { stringbuf_add_array(sb, text, leng); return; } } stringbuf_add_array(sb, text, leng - 2); switch (c) { case 'a': stringbuf_add_char(sb, '\a'); break; case 'b': stringbuf_add_char(sb, '\b'); break; case 'f': stringbuf_add_char(sb, '\f'); break; case 'n': stringbuf_add_char(sb, '\n'); break; case 'r': stringbuf_add_char(sb, '\r'); break; case 't': stringbuf_add_char(sb, '\t'); break; case 'v': stringbuf_add_char(sb, '\v'); break; case '\\': case '\"': stringbuf_add_char(sb, c); break; case '\n': advance_line(1); break; case '%': stringbuf_add_array(sb, text + leng - 2, 2); break; default: { struct cfloc loc; loc.beg = loc.end = curloc.end; loc.beg.column -= 2; cferror(&loc, _("unrecognized escape \\%c"), c); stringbuf_add_array(sb, text + leng - 2, 2); } } } /* TEXT ends with a '\' followed by a 3-byte octal number. No expansion occurs within a ${V:-""} construct. */ static void stringbuf_add_escape_octal(struct stringbuf *sb, char const *text, size_t leng) { if (in_var()) { stringbuf_add_array(sb, text, leng); } else { stringbuf_add_array(sb, text, leng - 4); stringbuf_add_char(sb, strtoul(text + leng - 3, NULL, 8)); } } /* TEXT ends with a '\x' followed by a 2-byte hex number. No expansion occurs within a ${V:-""} construct. */ static void stringbuf_add_escape_hex(struct stringbuf *sb, char const *text, size_t leng) { if (in_var()) { stringbuf_add_array(sb, text, leng); } else { stringbuf_add_array(sb, text, leng - 4); stringbuf_add_char(sb, strtoul(text + leng - 2, NULL, 16)); } } /* Input_Stream context stack */ struct inpctx { struct inpctx *prev; struct cfloc loc; /* Location */ CFSTREAM *input_stream; YY_BUFFER_STATE buf; /* lex buffer state */ }; static struct inpctx *inpctx_tos; /* Returns 1 if an included file is being processed. */ static inline int in_included_file(void) { return inpctx_tos != NULL; } /* Look up in the stack for the input context matching the device and inode numbers from ST. */ static struct inpctx * inpctx_locate(struct stat *st) { struct inpctx *ctx; for (ctx = inpctx_tos; ctx; ctx = ctx->prev) if (cfstream_same_file(ctx->input_stream, st)) break; return ctx; } /* Push current input context on stack. */ static void inpctx_push(void) { struct inpctx *ctx = xmalloc(sizeof(ctx[0])); ctx->loc = curloc; ctx->input_stream = input_stream; ctx->buf = YY_CURRENT_BUFFER; ctx->prev = inpctx_tos; inpctx_tos = ctx; yy_switch_to_buffer(yy_create_buffer(yyin, YY_BUF_SIZE)); } /* Pop the top of stack into the current input context. */ static int inpctx_pop(void) { struct inpctx *ctx = inpctx_tos; if (!ctx) return 1; inpctx_tos = ctx->prev; curloc = ctx->loc; input_stream = ctx->input_stream; yy_delete_buffer(YY_CURRENT_BUFFER); yy_switch_to_buffer(ctx->buf); free(ctx); return 0; } /* Forward declarations */ static void straychar(int); static int noinc(void); %} %x NORMAL ARGS QSTR VAR %option nounput %% /* INITIAL: The scanner is processing the initial portion of the input file, until the version clause ("rush X.Y\n"), upon which the NORMAL state is activated, or any other token, upon which the control is transferred to the legacy parser (see config.c). */ <INITIAL>{ "rush" return RUSH; [0-9]+\.[0-9]+ { char *p; yylval.version.major = strtoul(yytext, &p, 10); yylval.version.minor = strtoul(p + 1, NULL, 10); return tok(T_VERSION); } \\\n { advance_line(1); } #.*\n { advance_line(1); return EOL; } \n { advance_line(1); return EOL; } [ \t]+ reset_loc(); . return tok(BOGUS); } <NORMAL,ARGS>{ \\\n { advance_line(1); } #.*\n { advance_line(1); BEGIN(NORMAL); return tok(EOL); } \n { advance_line(1); BEGIN(NORMAL); return tok(EOL); } [ \t]+ reset_loc(); } /* NORMAL: The input point is before the next keyword. */ <NORMAL>{ "rule" { if (!noinc()) { BEGIN(ARGS); return tok(RULE); } } "global" { if (!noinc()) return tok(GLOBAL); } "set" { BEGIN(ARGS); return tok(SET); } "unset" { BEGIN(ARGS); return tok(UNSET); } "insert" { BEGIN(ARGS); return tok(INSERT); } "match" { BEGIN(ARGS); return tok(MATCH); } "fallthrough"|"fall-through" { BEGIN(ARGS); return tok(FALLTHROUGH); } "include" { BEGIN(ARGS); return tok(INCLUDE); } "limits" { BEGIN(ARGS); return tok(LIMITS); } "clrenv" { BEGIN(ARGS); return tok(CLRENV); } "setenv" { BEGIN(ARGS); return tok(SETENV); } "unsetenv" { BEGIN(ARGS); return tok(UNSETENV); } "keepenv" { BEGIN(ARGS); return tok(KEEPENV); } "evalenv" { BEGIN(ARGS); return tok(EVALENV); } "delete" { BEGIN(ARGS); return tok(DELETE); } "exit" { BEGIN(ARGS); return tok(EXIT); } "map" { BEGIN(ARGS); return tok(MAP); } "remopt" { BEGIN(ARGS); return tok(REMOPT); } [A-Za-z_][A-Za-z_0-9-]* { if ((yylval.attrib = rule_attrib_lookup(yytext))) { BEGIN(ARGS); return tok(ATTRIB); } else if ((yylval.global_attrib = global_attrib_lookup(yytext))) { BEGIN(ARGS); return tok(GLATTRIB); } else { yylval.str = xstrdup(yytext); return tok(IDENT); } } . return tok(yytext[0]); } /* ARGS: Processing arguments to a configuration statement. */ <ARGS>{ "&&" return tok(AND); "||" return tok(OR); "!" return tok(NOT); "==" return tok(EQ); "!=" return tok(NE); "<" return tok(LT); "<=" return tok(LE); ">" return tok(GT); ">=" return tok(GE); "!~" return tok(NM); "in" return tok(IN); "group" return tok(GROUP); -[bcdefgGkOprsSuwx] { yylval.fstest = yytext[1]; return tok(TEST); } -[hL] { yylval.fstest = fs_symlink; return tok(TEST); } [+-]?[0-9]+ { yylval.num.strval = xstrdup(yytext); yylval.num.intval = atoi(yytext); return tok(NUMBER); } [A-Za-z_][A-Za-z0-9_-]* { yylval.str = xstrdup(yytext); return tok(IDENT); } [^ \t\n\\\"!=<>(){}\[\]\$%&|~#]+ { yylval.str = xstrdup(yytext); return tok(STRING); } \$[A-Za-z_][A-Za-z_0-9-]* { yylval.str = xstrdup(yytext); return tok(STRING); } \$\{[A-Za-z_][A-Za-z_0-9-]*\} { yylval.str = xstrdup(yytext); return tok(STRING); } \$\{[A-Za-z_][A-Za-z_0-9-]*:?[-+=\?] { stringbuf_init(&sb); stringbuf_add_array(&sb, yytext, yyleng); pushstart(VAR); } \$[0-9]|\$\{-?[0-9]+\} { yylval.str = xstrdup(yytext); return tok(STRING); } \$\{-?[0-9]+:?[-+=\?] { stringbuf_init(&sb); stringbuf_add_array(&sb, yytext, yyleng); pushstart(VAR); } \$[#@*]|%([0-9]|(\{[0-9]+\})) { yylval.str = xstrdup(yytext); return tok(STRING); } \"[^\\\"\n]*\" { yylval.str = xmalloc(yyleng-1); memcpy(yylval.str, yytext + 1, yyleng - 2); yylval.str[yyleng - 2] = 0; return tok(STRING); } \"[^\\\"\n]*\\[0-9]{3} { stringbuf_init(&sb); stringbuf_add_escape_octal(&sb, yytext + 1, yyleng - 1); pushstart(QSTR); } \"[^\\\"\n]*\\[xX][a-fA-F0-9]{2} { stringbuf_init(&sb); stringbuf_add_escape_hex(&sb, yytext + 1, yyleng - 1); pushstart(QSTR); } \"[^\\\"\n]*\\.|\"[^\\\"\n]*\\\n { stringbuf_init(&sb); stringbuf_add_escape_dfl(&sb, yytext + 1, yyleng - 1); pushstart(QSTR); } "=~" return tok(XF); . return tok(yytext[0]); } /* QSTR: Composing a quoted string. */ <QSTR>{ [^\\\"\n]*\" { stringbuf_add_array(&sb, yytext, yyleng - 1); popstart(); if (YY_START == ARGS) { stringbuf_finish(&sb); yylval.str = sb.buffer; return tok(STRING); } else stringbuf_add_char(&sb, yytext[yyleng-1]); } [^\\\"\n]*\\[0-9]{3} { stringbuf_add_escape_octal(&sb, yytext, yyleng); } [^\\\"\n]*\\[xX][a-fA-F0-9]{2} { stringbuf_add_escape_hex(&sb, yytext, yyleng); } [^\\\"\n]*\\.|[^\\\"\n]*\\\n { stringbuf_add_escape_dfl(&sb, yytext, yyleng); } \n { advance_line(1); yyerror("unescaped newline in quoted string"); } . { straychar(yytext[0]); } } /* VAR: The scanner is processing an unquoted variable reference with a default value (e.g. ${X:-0}). */ <VAR>{ \} { stringbuf_add_char(&sb, yytext[0]); popstart(); if (YY_START != VAR) { stringbuf_finish(&sb); yylval.str = sb.buffer; return tok(STRING); } } \$([0-9]|(\{-?[0-9]+\})|([A-Za-z_][A-Za-z_0-9-]*)|(\{[A-Za-z_][A-Za-z_0-9-]*\})) { stringbuf_add_array(&sb, yytext, yyleng); } \$\{((-?[0-9]+)|([A-Za-z_][A-Za-z_0-9-]*)):?[-+=\?] { stringbuf_add_array(&sb, yytext, yyleng); pushstart(VAR); } \"[^\\\"\n]*\" { stringbuf_add_array(&sb, yytext, yyleng); } \"[^\\\"\n]*\\.|\"[^\\\"\n]*\\\n { stringbuf_add_escape_dfl(&sb, yytext, yyleng); pushstart(QSTR); } \"[^\\\"\n]*\\[0-9]{3} { stringbuf_add_escape_octal(&sb, yytext, yyleng); pushstart(QSTR); } \"[^\\\"\n]*\\[xX][a-fA-F0-9]{2} { stringbuf_add_escape_hex(&sb, yytext, yyleng); pushstart(QSTR); } [^}\"\$%]+ { stringbuf_add_array(&sb, yytext, yyleng); } . { straychar(yytext[0]); stringbuf_add_char(&sb, yytext[0]); } } %% /* * If processing the included file, report an error, drain the input, and * return 1. Otherwise, return 0. * * NOTE ABOUT FLEX input() FUNCTION * * The yyinput (input) function used to return EOF on end of file. This * was broken by commit f863c949[1] in flex, which changed its return value * to 0. Unfortunately the committer didn't consider it necessary to explain * the rationale, let alone to fix the documentation. The change was released * with flex version 2.6.1 and caused grief in many projects: [2] and [3], to * name a few. * * The issue was reported to flex[4]. At the time of this writing it remained * without response for more than a year. * * To stay on the safe side, the code below checks for both 0 and EOF. * * [1] https://github.com/westes/flex/commit/f863c9490e6912ffcaeb12965fb3a567a10745ff * [2] https://sourceforge.net/p/sdcc/bugs/3012 * [3] https://www.redhat.com/archives/libguestfs/2016-July/msg00252.html * [4] https://github.com/westes/flex/issues/448 */ static int noinc(void) { if (in_included_file()) { int c; yyerror(_("the %s statement is not allowed in included file"), yytext); cferror(&curloc, _("skipping to the end of file")); while ((c = input()) != EOF && c != 0) ; return 1; } return 0; } /* Return true if the quoted string being expanded occurs within a variable construct -- ${V:-"string"} */ static int in_var(void) { return (start_tos && start_tos->start == VAR); } /* Report a stray character C */ static void straychar(int c) { static char *start_name[] = { [INITIAL] = N_("looking for rush version clause"), [NORMAL] = N_("looking for rule"), [ARGS] = N_("scanning arguments"), [QSTR] = N_("scanning quoted string"), [VAR] = N_("scanning variable reference") }; if (isprint(c)) { yyerror(_("stray character %c while %s"), c, gettext(start_name[YY_START])); } else { yyerror(_("stray character %03o while %s"), c, gettext(start_name[YY_START])); } } /* * Skip the input up to the next '\n' character. * See the "NOTE ABOUT FLEX input() FUNCTION", above. */ void skiptoeol(void) { int c; while ((c = input()) != EOF && c != 0 && c != '\n') ; } /* Clear the start state stack and switch scanner to the NORMAL state. */ void restorenormal(void) { while (start_tos) popstart(); BEGIN(NORMAL); } /* Initialize current location to point to this filename and line number. */ static void curloc_init(char const *filename, int line) { curloc.beg.filename = new_source_file_name(filename); curloc.beg.line = line; curloc.beg.column = 1; curloc.end = curloc.beg; } /* Switch to input from CF. FILENAME and LINE give the initial location. */ void cflex_setup(CFSTREAM *cf, char const *filename, int line) { curloc_init(filename, line); input_stream = cf; YY_FLUSH_BUFFER; } /* Set scanner debug level to V. */ void cflex_debug(int v) { #ifdef FLEX_DEBUG yy_flex_debug = v; #endif } /* Switch to the NORMAL condition. */ void cflex_normal(void) { BEGIN(NORMAL); } /* Include FILENAME. Return 0 on success, -1 on error. */ int cflex_include(char const *filename, struct cfloc const *loc) { char *name = expand_tilde(filename, rush_pw->pw_dir); struct stat st; struct inpctx *ctx; if (trimslash(name) == 0) { free(name); cferror(loc, _("invalid include file name")); return -1; } if (stat(name, &st)) { if (errno == ENOENT) { debug(1, _("Ignoring non-existing include file %s"), name); free(name); return 0; } else { cferror(loc, _("cannot stat file %s: %s"), name, strerror(errno)); free(name); return -1; } } if (S_ISDIR(st.st_mode)) { char *file = make_file_name(name, rush_pw->pw_name); free(name); name = file; if (access(name, F_OK)) { if (errno == ENOENT) { debug(1, _("Ignoring non-existing include file %s"), name); free(name); return 0; } else { cferror(loc, "access(%s): %s", name, strerror(errno)); free(name); return -1; } } } inpctx_push(); if ((ctx = inpctx_locate(&st))) { ctx = ctx->prev; if (ctx) { cferror(loc, "%s already included", name); cferror(&ctx->loc, "%s already included here", name); } else cferror(loc, "%s: main configuration file cannot be included", name); inpctx_pop(); free(name); return -1; } cflex_setup(cfstream_open_file(name), name, 1); free(name); return 0; } int yywrap(void) { return inpctx_pop(); } /* Preserve the current start state on stack and switch to ARGS. */ void cflex_pushargs(void) { pushstart(ARGS); } /* Extern interface to popstart */ void cflex_popargs(void) { popstart(); } /* Remove trailing whitespace from S. */ void trimws(char *s) { size_t len = strlen(s); while (len > 0 && ISWS(s[len-1])) s[--len] = 0; } /* Remove trailing slashes from S. Return the length of the resulting string. */ size_t trimslash(char *s) { size_t len = strlen(s); while (len > 0 && s[len-1] == '\\') s[--len] = 0; return len; } /* Rewind the input stream to the beginning and parse it as a legacy configuration. */ int parse_old_rc(void) { CFSTREAM *cf = input_stream; char const *filename = curloc.beg.filename; YY_FLUSH_BUFFER; input_stream = NULL; cfstream_rewind(cf); return cfparse_old(cf, filename, 1); } void cflex_test(char const *filename) { int c; CFSTREAM *cf; if (filename) { cf = cfstream_open_file(filename); } else { cf = cfstream_open_stdin(); filename = "stdin"; } cflex_setup(cf, filename, 1); BEGIN(NORMAL); while ((c = yylex()) != 0) { printf("state %d, ",YY_START); YY_LOCATION_PRINT(stdout, yylloc); printf(": "); switch (c) { case STRING: printf("STRING "); dumpstr(yylval.str, stdout); break; case IDENT: printf("IDENT %s", yylval.str); break; case NUMBER: printf("NUMBER %s", yylval.num.strval); break; case ATTRIB: printf("ATTRIB %s", yytext); break; case GLATTRIB: printf("GLATTRIB %s", yylval.global_attrib->name); break; case EOL: printf("EOL"); break; default: printf("'%s'", yytext); } putchar('\n'); } exit(0); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/src/rushopt.opt����������������������������������������������������������������������������0000644�0001750�0001750�00000004234�14643176121�015355� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* This file is part of GNU Rush. Copyright (C) 2008-2024 Sergey Poznyakoff GNU Rush is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GNU Rush is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. */ #include <error.h> OPTIONS_BEGIN(gnu, "rush", [<rush - restricted user shell.>], [<[FILE]>]) OPTION(debug,d,NUMBER, [<Set debugging level.>]) BEGIN debug_level = atoi(optarg); debug_option = 1; END OPTION(test,t,, [<Run in test mode.>]) ALIAS(lint) BEGIN lint_option = 1; END OPTION(,T,, [<Scanner test.>]) BEGIN scanner_test = 1; END OPTION(trace,x,, [<Print grammar and lexical analyzer traces>]) BEGIN parser_traces++; END OPTION(user,u,NAME, [<Supply user name in test mode.>]) BEGIN lint_option = 1; if (getuid()) die(usage_error, NULL, _("the --user option is allowed " "for the superuser only")); test_user_name = optarg; END OPTION(,c,COMMAND, [<Execute COMMAND.>]) BEGIN command = optarg; END OPTION(,i,, [<Force interactive shell.>]) BEGIN lint_option = 1; interactive = 1; END OPTION(dump,D,KEYWORDS, [<Dump final request in test mode.>]) BEGIN dump_option = optarg; lint_option = 1; END OPTION(security-check,C,CHECK, [<Add or remove configuration security check.>]) BEGIN if (cfck_keyword(optarg)) die(usage_error, NULL, _("unknown keyword: %s"), optarg); END OPTION(show-default,,, [<Show default configuration.>]) BEGIN #ifdef RUSH_DEFAULT_CONFIG printf("%s\n", RUSH_DEFAULT_CONFIG); exit(0); #else error(1, 0, _("No default configuration")); #endif END OPTIONS_END void get_options(int argc, char *argv[]) { GETOPT(argc, argv) } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/src/rush.h���������������������������������������������������������������������������������0000644�0001750�0001750�00000024474�14643176121�014267� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* This file is part of GNU Rush. Copyright (C) 2008-2024 Sergey Poznyakoff GNU Rush is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GNU Rush is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include <stdlib.h> #include <stdio.h> #include <stdarg.h> #include <errno.h> #include <pwd.h> #include <grp.h> #include <string.h> #include <sys/types.h> #include <sys/stat.h> #include <sys/time.h> #include <sys/wait.h> #include <sys/resource.h> #include <syslog.h> #include <unistd.h> #include <fcntl.h> #include <signal.h> #include <getopt.h> #include <ctype.h> #include <sys/socket.h> #include <netinet/in.h> #include <sys/un.h> #include <netdb.h> #include <arpa/inet.h> #include <xalloc.h> #include <regex.h> #include <c-ctype.h> #include <inttostr.h> #include <defines.h> #include <librush.h> #include <wordsplit.h> #ifndef SYSCONFDIR # define SYSCONFDIR "/usr/local/etc" #endif #define CONFIG_FILE SYSCONFDIR "/rush.rc" #ifndef CANONICAL_PROGRAM_NAME # define CANONICAL_PROGRAM_NAME "/usr/local/sbin/rush" #endif #define RUSH_DB LOCALSTATEDIR "/rush" #if defined HAVE_SYSCONF && defined _SC_OPEN_MAX # define getmaxfd() sysconf(_SC_OPEN_MAX) #elif defined (HAVE_GETDTABLESIZE) # define getmaxfd() getdtablesize() #else # define getmaxfd() 256 #endif #ifndef LOG_AUTHPRIV # define LOG_AUTHPRIV LOG_AUTH #endif #define ISWS(c) ((c) == ' ' || (c) == '\t') enum error_type { usage_error, nologin_error, config_error, system_error }; typedef struct limits_rec *limits_record_t; typedef struct transform *transform_t; struct rush_map { char *file; char *delim; char *key; unsigned key_field; unsigned val_field; char *defval; }; enum transform_target_type { target_readonly, /* Read-only variable */ target_command, /* Command line */ target_program, /* Executable program name */ target_arg, /* Single command line argument */ target_var, /* Variable */ target_env /* Environment variable */ }; struct transform_target { enum transform_target_type type; union { char *name; struct { int idx; int ins; } arg; } v; }; enum transform_node_type { transform_set, transform_delete, transform_map, transform_remopt, }; struct option_defn { char *s_opt; /* short option name with optional argument designator */ char *l_opt; /* optional long option name */ }; struct transform_node { struct transform_node *next; enum transform_node_type type; struct transform_target target; union { struct { char *pattern; transform_t trans; } xf; struct rush_map map; /* For transform_map */ int arg_end; /* For tranform_delete, if target.type is target_arg */ struct option_defn remopt; /* For transform_remopt */ } v; }; enum test_type { test_cmpn, test_cmps, test_in, test_group, test_and, test_or, test_not, test_fstest }; enum cmp_op { cmp_eq, cmp_ne, cmp_lt, cmp_le, cmp_gt, cmp_ge, cmp_match, cmp_in }; enum fstest_op { fs_block_special = 'b', fs_char_special = 'c', fs_directory = 'd', fs_exists = 'e', fs_regular = 'f', fs_set_gid = 'g', fs_owner_egid = 'G', fs_symlink = 'h', fs_sticky = 'k', fs_owner_euid = 'O', fs_pipe = 'p', fs_readable = 'r', fs_size = 's', fs_socket = 'S', fs_set_uid = 'u', fs_writable = 'w', fs_executable = 'x' }; typedef unsigned long rush_num_t; struct test_node { enum test_type type; union { struct { enum cmp_op op; char *larg; union { char *str; char **strv; regex_t rx; rush_num_t num; } rarg; } cmp; char **groups; struct test_node *arg[2]; struct { int op; char *arg; } fstest; } v; }; struct rush_sockaddr { socklen_t len; struct sockaddr *sa; }; enum rush_three_state { rush_undefined = -1, rush_false, rush_true }; typedef enum rush_three_state rush_bool_t; struct rush_i18n { char *text_domain; /* Gettext domain, if any */ char *localedir; /* Locale directory, if any */ char *locale; }; struct rush_error { /* Rush error object */ int fd; /* File descriptor to write to */ int idx; /* Index of the standard error message, or -1 for user-defined message */ }; enum envar_type { envar_set, /* Set variable */ envar_unset, /* Unset variable(s) */ envar_keep, /* Preserve variable(s) while clearing the environment */ envar_eval /* Evaluate string for side effects. Discard the result */ }; struct envar { struct envar *next; enum envar_type type; char *name; char *value; }; struct rush_rule { struct rush_rule *next; /* Next rule in the list */ char *tag; int fall_through; int interactive; /* Source location */ const char *file; /* Configuration file name */ int line; /* and line number. */ /* Match parameters */ struct test_node *test_node; /* Transformation parameters: */ struct transform_node *transform_head, *transform_tail; /* Environment modification: */ int clrenv; struct envar *envar_head, *envar_tail; /* If not NULL, print this message on ERROR_FD and exit */ struct rush_error *error; struct rush_i18n i18n; mode_t mask; /* umask */ char *chroot_dir; /* chroot directory */ char *home_dir; /* home directory */ gid_t gid; /* primary group ID */ limits_record_t limits; /* resource limits */ enum rush_three_state fork; /* Fork a subprocess */ enum rush_three_state acct; /* Run accounting */ struct rush_sockaddr post_sockaddr; }; struct rush_backref { char *subject; regmatch_t *match; size_t nmatch; size_t maxmatch; }; struct rush_request { char *cmdline; /* Command line */ size_t argc; /* Number of elements in argv */ char **argv; /* Command line in parsed form */ int interactive; /* Request for interactive shell */ char *prog; /* Program file name, if different from argv[0] */ struct passwd *pw; /* User passwd entry */ unsigned umask; char *chroot_dir; char *home_dir; gid_t gid; enum rush_three_state fork; enum rush_three_state acct; const struct rush_sockaddr *post_sockaddr; struct rush_i18n i18n; /* Backreferences The backref field contains backreferences from the recent and penultimate regex matches. The backref_cur field indexes the recent backreferences. Remaining slot is used as a temporary storage during eventual next match. If that match succeeds, the value of backref_cur is updated to reflect the fact. The backref_count field keeps the actual number of backreferences used in the recent match. */ struct rush_backref backref[2]; int backref_cur; size_t backref_count; /* Constructed environment */ char **env; size_t env_count; size_t env_max; /* Temporary variable storage */ char **var_kv; size_t var_count; size_t var_max; }; #define PROGFILE(req) ((req)->prog ? (req)->prog : (req)->argv[0]) #define NO_UMASK ((mode_t)-1) #define NO_GID ((gid_t)-1) extern char *rush_config_file; extern int lint_option; extern unsigned sleep_time; extern struct rush_rule *rule_head, *rule_tail; extern unsigned debug_level; extern char *dump_option; extern int debug_option; extern struct passwd *rush_pw; #define __debug_p(x) ((x) <= debug_level) #define debug(lev,fmt,...) \ do { \ if (__debug_p(lev)) \ logmsg(LOG_DEBUG, fmt, __VA_ARGS__); \ } while(0) struct cfloc; void die(enum error_type type, struct rush_i18n *i18n, const char *fmt, ...) RUSH_NORETURN RUSH_PRINTFLIKE(3,4); void die_usage(struct cfloc const *loc, char const *fmt, ...) RUSH_NORETURN RUSH_PRINTFLIKE(2,3); void logmsg(int prio, const char *fmt, ...) RUSH_PRINTFLIKE(2,3); void vlogmsg(int prio, const char *fmt, va_list ap); enum { lrec_ok = 0, lrec_error = 1, lrec_badval = 2 }; limits_record_t limits_record_create(void); int limits_record_add(limits_record_t lrec, char *str, char **endp); int parse_limits(limits_record_t *plrec, char *str, char **endp); int set_user_limits(const char *name, struct limits_rec *lrec); transform_t compile_transform_expr (const char *expr, int cflags, struct cfloc *loc); char *transform_string (struct transform *tf, const char *input); int post_socket_send(const struct rush_sockaddr *sockaddr, const struct rush_rule *rule, const struct rush_request *req); char *make_file_name(const char *dir, const char *name); char *expand_tilde(const char *dir, const char *home); /* cfck.c */ #define RUSH_CHK_OWNER 0x0001 #define RUSH_CHK_IWGRP 0x0002 #define RUSH_CHK_IWOTH 0x0004 #define RUSH_CHK_LINK 0x0008 #define RUSH_CHK_DIR_IWGRP 0x0010 #define RUSH_CHK_DIR_IWOTH 0x0020 #define RUSH_CHK_ALL \ (RUSH_CHK_OWNER|RUSH_CHK_IWGRP|RUSH_CHK_IWOTH|\ RUSH_CHK_LINK|RUSH_CHK_DIR_IWGRP|RUSH_CHK_DIR_IWOTH) #ifndef RUSH_CHK_DEFAULT # define RUSH_CHK_DEFAULT RUSH_CHK_ALL #endif int check_config_permissions(const char *filename, struct stat *st); int cfck_keyword(const char *name); /* map.c */ char *map_string(struct rush_map *map, struct rush_request *req); char *rush_expand_string(const char *string, struct rush_request *req); char **rush_getvarptr(struct rush_request *req, char const *varname); void rush_request_delvar(struct rush_request *req, char const *varname); enum transform_target_type rush_variable_target(char const *varname); void rush_ws_error (const char *fmt, ...); /* dump.c */ void dump_request(struct rush_request *req, FILE *fp); /* rush_error management */ void set_error_msg(enum error_type type, char *text); int string_to_error_index(const char *name); struct rush_error *new_standard_error(int fd, int idx); struct rush_error *new_error(int fd, char const *text, int unescape); char const *rush_error_msg(struct rush_error const *err, struct rush_i18n const *i18n); ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/src/Makefile.am����������������������������������������������������������������������������0000644�0001750�0001750�00000004742�14643176120�015164� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of GNU Rush. # Copyright (C) 2008-2024 Sergey Poznyakoff # # GNU Rush is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Rush is distributed in the hope that 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/>. sbin_PROGRAMS=rush bin_PROGRAMS=rushlast rushwho bin_SCRIPTS = rush-po rush_SOURCES=\ cfck.c\ config.c\ defines.h\ dump.c\ limits.c\ map.c\ rush.c\ rush.h\ rushopt.h\ socket.c\ transform.c\ cflex.l\ cfgram.y\ cfgram.h\ cf.h\ cf.c rushlast_SOURCES=rushlast.c rlopt.h rushwho_SOURCES=rushwho.c rwopt.h rushlast.c: rlopt.h rushwho.c: rwopt.h EXTRA_DIST = rush-po rushopt.opt rlopt.opt rwopt.opt getopt.m4 defconf.sed cfgram.output AM_CPPFLAGS=\ -I$(top_srcdir)\ -I$(top_srcdir)/gnu\ -I$(top_builddir)/gnu\ -I$(top_srcdir)/lib\ -I$(top_srcdir)/lib/wordsplit LDADD=../lib/librush.a ../gnu/libgnu.a @LTLIBINTL@ AM_INSTALLCHECK_STD_OPTIONS_EXEMPT=rush-po change-suid-mode: @proglist='$(sbin_PROGRAMS)'; \ for prog in $$proglist; do \ prog=$(DESTDIR)$(sbindir)/`echo $$prog | sed '$(transform)'`; \ if chown 0:0 $$prog && chmod u+s $$prog; then :; else \ echo "Cannot change $$prog to setuid root"; \ fi;\ done install-exec-hook: change-suid-mode BUILT_SOURCES = defines.h rushopt.h rwopt.h rlopt.h CLEANFILES = defines.h MAINTAINER_CLEANFILES = rushopt.h rwopt.h rlopt.h defines.h: Makefile $(AM_V_GEN)p=`echo rush | sed 's/$(EXEEXT)$$//'`; \ f=`echo "$$p" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'` ; \ echo "#define CANONICAL_PROGRAM_NAME \"$(sbindir)/$$f\"" | tr -s / > $@-t; \ echo "#define SYSCONFDIR \"$(sysconfdir)\"" >> $@-t; \ echo "#define LOCALSTATEDIR \"$(localstatedir)\"" >> $@-t; \ if test -n "$(RUSH_DEFAULT_CONFIG)" && \ test -f "$(RUSH_DEFAULT_CONFIG)"; then \ echo "#define RUSH_DEFAULT_CONFIG \\" >> $@-t; \ sed -f $(srcdir)/defconf.sed "$(RUSH_DEFAULT_CONFIG)" >> $@-t; \ fi; \ mv $@-t $@ SUFFIXES=.opt .c .h .opt.h: $(AM_V_GEN)m4 -s $(srcdir)/getopt.m4 $< | sed '1d' > $@ AM_YFLAGS=-dtv AM_LFLAGS=-d cflex.c: cfgram.h cfgram.h: cfgram.c ������������������������������rush-2.4/src/socket.c�������������������������������������������������������������������������������0000644�0001750�0001750�00000003453�14643176121�014563� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* This file is part of GNU Rush. Copyright (C) 2008-2024 Sergey Poznyakoff GNU Rush is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GNU Rush is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. */ #include <rush.h> int post_socket_send(const struct rush_sockaddr *sockaddr, const struct rush_rule *rule, const struct rush_request *req) { int domain; int fd; FILE *fp; char buf[128]; char *p; switch (sockaddr->sa->sa_family) { case AF_UNIX: domain = PF_UNIX; break; case AF_INET: domain = PF_INET; break; default: /* should not happen */ abort(); } fd = socket(domain, SOCK_STREAM, 0); if (fd == -1) { logmsg(LOG_ERR, "socket: %s", strerror(errno)); return 1; } if (connect(fd, sockaddr->sa, sockaddr->len)) { logmsg(LOG_ERR, "connect: %s", strerror(errno)); return 1; } fp = fdopen(fd, "a+"); /* Communication takes place in accordance with TCPMUX protocol (RFC 1078). The rule tag is used as service name. */ fprintf(fp, "%s\r\n", rule->tag); p = fgets(buf, sizeof(buf), fp); if (!p) logmsg(LOG_ERR, _("%s: TCPMUX did not respond"), rule->tag); else if (*p == '+') fprintf(fp, "%s %s\r\n", req->pw->pw_name, req->cmdline); else logmsg(LOG_ERR, _("%s: TCPMUX returned %s"), rule->tag, p); fflush(fp); fclose(fp); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/src/cflex.c��������������������������������������������������������������������������������0000644�0001750�0001750�00000247352�14643176420�014406� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#line 2 "cflex.l" #include <config.h> #line 7 "cflex.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 yyconst const #else #define yyconst #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 (yy_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 (((yy_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 yyrestart(yyin ) #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(yy_state_type)) #ifndef YY_TYPEDEF_YY_BUFFER_STATE #define YY_TYPEDEF_YY_BUFFER_STATE typedef struct yy_buffer_state *YY_BUFFER_STATE; #endif #ifndef YY_TYPEDEF_YY_SIZE_T #define YY_TYPEDEF_YY_SIZE_T typedef size_t yy_size_t; #endif /* %if-not-reentrant */ extern yy_size_t yyleng; /* %endif */ /* %if-c-only */ /* %if-not-reentrant */ extern FILE *yyin, *yyout; /* %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 yyless(n) \ do \ { \ /* Undo effects of setting up yytext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ *yy_cp = (yy_hold_char); \ YY_RESTORE_YY_MORE_OFFSET \ (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ YY_DO_BEFORE_ACTION; /* set up yytext again */ \ } \ while ( 0 ) #define unput(c) yyunput( c, (yytext_ptr) ) #ifndef YY_STRUCT_YY_BUFFER_STATE #define YY_STRUCT_YY_BUFFER_STATE struct yy_buffer_state { /* %if-c-only */ FILE *yy_input_file; /* %endif */ /* %if-c++-only */ /* %endif */ char *yy_ch_buf; /* input buffer */ char *yy_buf_pos; /* current position in input buffer */ /* Size of input buffer in bytes, not including room for EOB * characters. */ yy_size_t yy_buf_size; /* Number of characters read into yy_ch_buf, not including EOB * characters. */ yy_size_t yy_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 yy_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 yy_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 yy_at_bol; int yy_bs_lineno; /**< The line count. */ int yy_bs_column; /**< The column count. */ /* Whether to try to fill the input buffer when we reach the * end of it. */ int yy_fill_buffer; int yy_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 yyrestart()), so that the user can continue scanning by * just pointing yyin 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 yy_buffer_stack_top = 0; /**< index of top of stack. */ static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */ static YY_BUFFER_STATE * yy_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 ( (yy_buffer_stack) \ ? (yy_buffer_stack)[(yy_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 (yy_buffer_stack)[(yy_buffer_stack_top)] /* %if-c-only Standard (non-C++) definition */ /* %if-not-reentrant */ /* %not-for-header */ /* yy_hold_char holds the character lost when yytext is formed. */ static char yy_hold_char; static yy_size_t yy_n_chars; /* number of characters read into yy_ch_buf */ yy_size_t yyleng; /* Points to current character in buffer. */ static char *yy_c_buf_p = (char *) 0; static int yy_init = 0; /* whether we need to initialize */ static int yy_start = 0; /* start state number */ /* Flag which is used to allow yywrap()'s to do buffer switches * instead of setting up a fresh yyin. A bit of a hack ... */ static int yy_did_buffer_switch_on_eof; /* %ok-for-header */ /* %endif */ void yyrestart (FILE *input_file ); void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ); YY_BUFFER_STATE yy_create_buffer (FILE *file,int size ); void yy_delete_buffer (YY_BUFFER_STATE b ); void yy_flush_buffer (YY_BUFFER_STATE b ); void yypush_buffer_state (YY_BUFFER_STATE new_buffer ); void yypop_buffer_state (void ); static void yyensure_buffer_stack (void ); static void yy_load_buffer_state (void ); static void yy_init_buffer (YY_BUFFER_STATE b,FILE *file ); #define YY_FLUSH_BUFFER yy_flush_buffer(YY_CURRENT_BUFFER ) YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size ); YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str ); YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,yy_size_t len ); /* %endif */ void *yyalloc (yy_size_t ); void *yyrealloc (void *,yy_size_t ); void yyfree (void * ); #define yy_new_buffer yy_create_buffer #define yy_set_interactive(is_interactive) \ { \ if ( ! YY_CURRENT_BUFFER ){ \ yyensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ yy_create_buffer(yyin,YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ } #define yy_set_bol(at_bol) \ { \ if ( ! YY_CURRENT_BUFFER ){\ yyensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ yy_create_buffer(yyin,YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ } #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) /* %% [1.0] yytext/yyin/yyout/yy_state_type/yylineno etc. def's & init go here */ /* Begin user sect3 */ #define FLEX_DEBUG typedef unsigned char YY_CHAR; FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0; typedef int yy_state_type; extern int yylineno; int yylineno = 1; extern char *yytext; #ifdef yytext_ptr #undef yytext_ptr #endif #define yytext_ptr yytext /* %% [1.5] DFA */ /* %if-c-only Standard (non-C++) definition */ static yy_state_type yy_get_previous_state (void ); static yy_state_type yy_try_NUL_trans (yy_state_type current_state ); static int yy_get_next_buffer (void ); #if defined(__GNUC__) && __GNUC__ >= 3 __attribute__((__noreturn__)) #endif static void yy_fatal_error (yyconst char msg[] ); /* %endif */ /* Done after the current pattern has been matched and before the * corresponding action - sets up yytext. */ #define YY_DO_BEFORE_ACTION \ (yytext_ptr) = yy_bp; \ /* %% [2.0] code to fiddle yytext and yyleng for yymore() goes here \ */\ yyleng = (size_t) (yy_cp - yy_bp); \ (yy_hold_char) = *yy_cp; \ *yy_cp = '\0'; \ /* %% [3.0] code to copy yytext_ptr to yytext[] goes here, if %array \ */\ (yy_c_buf_p) = yy_cp; /* %% [4.0] data tables for the DFA and the user's section 1 definitions go here */ #define YY_NUM_RULES 76 #define YY_END_OF_BUFFER 77 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info { flex_int32_t yy_verify; flex_int32_t yy_nxt; }; static yyconst flex_int16_t yy_accept[247] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 7, 6, 5, 7, 7, 7, 7, 31, 11, 10, 31, 30, 31, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 48, 11, 34, 60, 60, 60, 60, 60, 60, 48, 48, 46, 37, 60, 39, 47, 60, 47, 47, 60, 66, 65, 61, 66, 74, 74, 75, 75, 75, 67, 6, 0, 4, 0, 0, 3, 0, 11, 0, 9, 30, 8, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 48, 36, 41, 0, 55, 0, 54, 52, 49, 0, 0, 32, 46, 44, 45, 38, 35, 59, 40, 47, 47, 42, 33, 0, 61, 0, 64, 64, 64, 74, 0, 70, 0, 68, 68, 0, 2, 0, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 28, 30, 30, 30, 14, 30, 58, 58, 58, 49, 0, 0, 0, 0, 47, 0, 0, 71, 71, 71, 68, 0, 0, 0, 1, 30, 30, 30, 27, 30, 30, 30, 30, 30, 30, 30, 30, 12, 30, 30, 0, 0, 53, 0, 51, 51, 0, 0, 50, 47, 62, 63, 0, 0, 69, 0, 69, 0, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 17, 30, 30, 15, 56, 57, 43, 72, 73, 21, 26, 30, 30, 30, 13, 30, 16, 30, 20, 29, 22, 30, 25, 30, 30, 19, 24, 30, 30, 30, 23, 30, 30, 30, 30, 30, 18, 0 } ; static yyconst YY_CHAR yy_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, 4, 5, 6, 7, 8, 9, 1, 10, 10, 11, 12, 1, 13, 14, 1, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 16, 1, 17, 18, 19, 20, 11, 21, 21, 21, 21, 21, 21, 22, 23, 23, 23, 23, 24, 23, 23, 22, 23, 23, 23, 22, 23, 23, 23, 23, 25, 23, 23, 10, 26, 10, 1, 23, 1, 27, 28, 29, 30, 31, 32, 33, 34, 35, 23, 36, 37, 38, 39, 40, 41, 23, 42, 43, 44, 45, 46, 22, 47, 23, 23, 48, 49, 50, 51, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 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 yyconst YY_CHAR yy_meta[52] = { 0, 1, 2, 3, 2, 4, 5, 4, 4, 2, 2, 6, 7, 8, 1, 9, 7, 2, 10, 2, 7, 9, 11, 11, 11, 11, 2, 9, 9, 9, 9, 9, 9, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 2, 13, 2 } ; static yyconst flex_uint16_t yy_base[276] = { 0, 0, 2, 44, 0, 95, 0, 4, 7, 144, 150, 606, 607, 603, 607, 601, 4, 600, 557, 607, 599, 607, 597, 0, 596, 561, 566, 113, 569, 558, 555, 562, 557, 564, 117, 559, 550, 0, 586, 132, 6, 584, 150, 139, 577, 607, 570, 186, 569, 565, 145, 564, 23, 578, 165, 125, 531, 15, 607, 607, 155, 0, 0, 163, 156, 607, 607, 577, 574, 607, 555, 7, 607, 520, 557, 539, 607, 0, 607, 496, 483, 481, 462, 433, 426, 143, 430, 422, 134, 421, 421, 410, 409, 0, 607, 607, 164, 607, 159, 607, 607, 0, 1, 436, 607, 423, 0, 0, 607, 607, 607, 607, 392, 151, 387, 607, 177, 607, 196, 607, 413, 0, 0, 183, 607, 198, 607, 0, 10, 412, 392, 392, 323, 316, 308, 314, 322, 312, 317, 306, 310, 0, 315, 303, 311, 310, 309, 607, 324, 0, 0, 323, 222, 234, 180, 194, 322, 0, 607, 321, 0, 0, 320, 243, 253, 607, 295, 289, 301, 0, 213, 304, 285, 287, 297, 283, 292, 281, 0, 281, 275, 298, 0, 607, 262, 607, 265, 274, 284, 607, 183, 607, 607, 296, 0, 607, 287, 296, 305, 264, 275, 262, 254, 261, 254, 259, 244, 240, 233, 0, 226, 222, 236, 607, 607, 222, 607, 607, 0, 0, 216, 226, 211, 0, 220, 0, 203, 0, 0, 0, 209, 0, 202, 201, 0, 0, 186, 172, 160, 0, 154, 164, 159, 139, 6, 0, 607, 355, 368, 381, 394, 407, 413, 424, 435, 444, 456, 467, 480, 493, 505, 510, 522, 528, 532, 29, 543, 549, 553, 27, 558, 22, 20, 565, 18, 4 } ; static yyconst flex_int16_t yy_def[276] = { 0, 247, 247, 246, 3, 246, 5, 248, 248, 249, 249, 246, 246, 246, 246, 250, 246, 246, 246, 246, 246, 246, 251, 252, 246, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 253, 246, 246, 254, 251, 255, 246, 246, 246, 253, 253, 253, 246, 246, 246, 256, 246, 256, 54, 246, 257, 246, 246, 258, 259, 259, 260, 261, 246, 246, 246, 250, 246, 246, 246, 246, 246, 246, 251, 246, 252, 246, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 253, 246, 246, 254, 246, 262, 246, 246, 263, 264, 246, 246, 253, 253, 253, 246, 246, 246, 246, 54, 54, 54, 246, 257, 246, 258, 246, 246, 265, 259, 260, 246, 266, 246, 267, 268, 246, 246, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 246, 246, 269, 263, 246, 246, 270, 246, 54, 246, 271, 246, 246, 272, 267, 246, 246, 273, 246, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 246, 274, 246, 246, 246, 270, 270, 246, 246, 54, 246, 246, 246, 275, 246, 246, 273, 273, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 246, 246, 54, 246, 246, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 0, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246 } ; static yyconst flex_uint16_t yy_nxt[659] = { 0, 246, 13, 14, 13, 14, 15, 58, 15, 59, 58, 97, 59, 217, 151, 16, 152, 16, 70, 71, 117, 70, 71, 162, 93, 163, 17, 214, 17, 194, 60, 192, 98, 60, 93, 93, 182, 93, 157, 93, 245, 118, 18, 93, 18, 19, 20, 21, 19, 19, 22, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 23, 23, 23, 23, 23, 24, 23, 23, 25, 26, 27, 28, 29, 23, 30, 31, 32, 33, 23, 23, 23, 34, 35, 23, 36, 23, 23, 19, 19, 19, 19, 37, 38, 21, 39, 40, 41, 42, 43, 44, 45, 37, 46, 47, 37, 48, 37, 49, 50, 51, 37, 52, 52, 52, 52, 52, 53, 52, 52, 52, 52, 52, 52, 54, 52, 55, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 45, 56, 45, 45, 62, 89, 63, 94, 64, 65, 62, 99, 63, 99, 64, 65, 81, 82, 99, 90, 109, 114, 100, 93, 112, 124, 97, 120, 126, 137, 245, 148, 141, 93, 93, 142, 93, 121, 93, 117, 95, 149, 93, 138, 103, 124, 125, 98, 155, 244, 112, 66, 154, 110, 243, 102, 242, 66, 105, 121, 118, 128, 241, 149, 113, 106, 125, 107, 120, 240, 159, 106, 106, 106, 106, 106, 106, 107, 121, 106, 160, 215, 112, 202, 106, 106, 106, 99, 106, 239, 106, 183, 183, 112, 152, 184, 190, 183, 238, 183, 121, 237, 160, 185, 186, 236, 235, 188, 234, 185, 233, 185, 195, 195, 203, 163, 196, 232, 195, 231, 195, 112, 195, 197, 230, 229, 196, 228, 195, 100, 195, 183, 183, 227, 185, 186, 226, 183, 188, 183, 185, 189, 185, 185, 186, 225, 224, 188, 223, 185, 126, 185, 222, 185, 185, 221, 195, 195, 220, 185, 126, 185, 195, 219, 195, 195, 197, 218, 216, 196, 213, 195, 189, 195, 195, 197, 212, 211, 196, 210, 195, 189, 195, 209, 208, 207, 206, 205, 204, 201, 200, 199, 163, 193, 191, 152, 181, 180, 179, 178, 177, 176, 175, 126, 174, 173, 172, 171, 170, 169, 168, 167, 126, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 77, 77, 166, 77, 93, 165, 129, 156, 112, 93, 93, 93, 93, 112, 93, 96, 96, 105, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 101, 101, 154, 146, 101, 145, 101, 101, 112, 144, 143, 140, 139, 112, 112, 112, 112, 136, 112, 116, 116, 135, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 122, 122, 122, 134, 122, 122, 122, 122, 122, 122, 122, 122, 123, 123, 133, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 127, 132, 127, 127, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 150, 150, 131, 150, 153, 153, 76, 153, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 161, 161, 74, 161, 164, 164, 130, 164, 187, 187, 187, 187, 187, 129, 187, 198, 198, 198, 198, 198, 69, 198, 67, 115, 78, 111, 108, 105, 105, 104, 76, 74, 92, 91, 88, 87, 86, 85, 84, 83, 80, 79, 78, 76, 74, 73, 72, 69, 67, 246, 11, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246 } ; static yyconst flex_int16_t yy_chk[659] = { 0, 0, 1, 1, 2, 2, 1, 7, 2, 7, 8, 40, 8, 275, 102, 1, 102, 2, 16, 16, 57, 71, 71, 128, 52, 128, 1, 274, 2, 272, 7, 271, 40, 8, 52, 52, 269, 52, 265, 52, 244, 57, 1, 52, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 9, 34, 9, 39, 9, 9, 10, 43, 10, 42, 10, 10, 27, 27, 42, 34, 50, 55, 42, 54, 55, 63, 96, 60, 64, 85, 243, 98, 88, 54, 54, 88, 54, 60, 54, 116, 39, 98, 54, 85, 43, 123, 63, 96, 113, 242, 113, 9, 154, 50, 241, 42, 240, 10, 47, 60, 116, 64, 238, 98, 54, 47, 123, 47, 118, 237, 125, 47, 47, 47, 47, 47, 47, 47, 118, 47, 125, 190, 190, 170, 47, 47, 47, 154, 47, 236, 47, 152, 152, 155, 152, 152, 155, 152, 233, 152, 118, 232, 125, 153, 153, 230, 226, 153, 224, 153, 222, 153, 163, 163, 170, 163, 163, 221, 163, 220, 163, 215, 164, 164, 212, 211, 164, 210, 164, 152, 164, 184, 184, 208, 186, 186, 207, 184, 186, 184, 186, 153, 186, 187, 187, 206, 205, 187, 204, 187, 163, 187, 203, 188, 188, 202, 196, 196, 201, 188, 164, 188, 196, 200, 196, 197, 197, 199, 193, 197, 181, 197, 186, 197, 198, 198, 180, 179, 198, 177, 198, 187, 198, 176, 175, 174, 173, 172, 171, 168, 167, 166, 162, 159, 156, 151, 148, 146, 145, 144, 143, 142, 140, 197, 139, 138, 137, 136, 135, 134, 133, 132, 198, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 252, 252, 131, 252, 253, 130, 129, 120, 114, 253, 253, 253, 253, 112, 253, 254, 254, 105, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 255, 255, 103, 92, 255, 91, 255, 255, 256, 90, 89, 87, 86, 256, 256, 256, 256, 84, 256, 257, 257, 83, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 259, 259, 259, 82, 259, 259, 259, 259, 259, 259, 259, 259, 260, 260, 81, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 261, 80, 261, 261, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 263, 263, 79, 263, 264, 264, 75, 264, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 267, 267, 74, 267, 268, 268, 73, 268, 270, 270, 270, 270, 270, 70, 270, 273, 273, 273, 273, 273, 68, 273, 67, 56, 53, 51, 49, 48, 46, 44, 41, 38, 36, 35, 33, 32, 31, 30, 29, 28, 26, 25, 24, 22, 20, 18, 17, 15, 13, 11, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246 } ; static yy_state_type yy_last_accepting_state; static char *yy_last_accepting_cpos; extern int yy_flex_debug; int yy_flex_debug = 1; static yyconst flex_int16_t yy_rule_linenum[76] = { 0, 296, 297, 301, 302, 303, 304, 305, 309, 310, 313, 316, 322, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 356, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 379, 381, 383, 385, 387, 391, 393, 398, 400, 404, 408, 413, 418, 419, 425, 434, 435, 437, 438, 440, 447, 455, 456, 459, 460, 462, 464, 465, 466 } ; /* 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 yymore() yymore_used_but_not_detected #define YY_MORE_ADJ 0 #define YY_RESTORE_YY_MORE_OFFSET char *yytext; #line 1 "cflex.l" /* This file is part of GNU Rush. Copyright (C) 2008-2024 Sergey Poznyakoff GNU Rush is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GNU Rush is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. */ #line 21 "cflex.l" #include <rush.h> #include <sys/stat.h> #include <cf.h> #include <cfgram.h> /* Current input stream (yyin is not used) */ static CFSTREAM *input_stream; /* Buffer for composing string values */ static struct stringbuf sb; /* Names of the source files form a singly-linked list. They remain in the memory until the end of run because various objects refer to them (most notably, rush_rule). */ struct source_file { struct source_file *prev; char filename[1]; }; struct source_file *source_file_last; char const * new_source_file_name(char const *f) { struct source_file *file; for (file = source_file_last; file; file = file->prev) { if (strcmp(file->filename, f) == 0) return file->filename; } file = xmalloc(sizeof(file[0]) + strlen(f)); strcpy(file->filename, f); file->prev = source_file_last; source_file_last = file; return file->filename; } /* Current input location */ struct cfloc curloc; /* User action is set uo to update end column. */ #define YY_USER_ACTION (curloc.end.column += yyleng); /* Advance the end point of the current location N lines. */ static inline void advance_line(size_t n) { curloc.end.line += n; curloc.end.column = 1; } /* Reset the start point of the current location to its end point. This starts the next token. */ static inline void reset_loc(void) { curloc.beg = curloc.end; } /* This is used in the scanner actions below to return token types. */ static inline int tok(int c) { yylloc = curloc; yylloc.end.column--; reset_loc(); return c; } /* The scanner implements several exclusive conditions, some of which are preserved on stack. */ struct start_cond { struct start_cond *next; int start; }; static struct start_cond *start_tos; static inline void pushstart(int newstart) { struct start_cond *sc = malloc(sizeof(sc[0])); sc->start = YY_START; sc->next = start_tos; start_tos = sc; BEGIN(newstart); } static inline void popstart(void) { struct start_cond *tos = start_tos; if (!tos) die(system_error, NULL, _("INTERNAL ERROR at %s:%d: state stack is empty"), __FILE__, __LINE__); start_tos = tos->next; BEGIN(tos->start); free(tos); } static int in_var(void); /* Read next chunk of the input. */ #undef YY_INPUT #define YY_INPUT(buf,result,max_size) \ (result) = cfstream_read(input_stream, buf, max_size) /* Additional stringbuf function for use when processing escape sequences. SB is the string buffer, TEXT is the input text ending with '\' + something, LENG is number of bytes in it. */ /* Default function: TEXT ends with a C-style escape sequence (e.g. \v) or rush-specific \% escape. Unrecognized escape sequence is reported and transferred varbatim to the output. Within a ${V:-""} construct, only "\\n" and "\%" are processed, the rest is retained. It will be expanded by wordsplit. */ static void stringbuf_add_escape_dfl(struct stringbuf *sb, char const *text, size_t leng) { int c = text[leng - 1]; if (in_var()) { if (c != '\n' && c != '%') { stringbuf_add_array(sb, text, leng); return; } } stringbuf_add_array(sb, text, leng - 2); switch (c) { case 'a': stringbuf_add_char(sb, '\a'); break; case 'b': stringbuf_add_char(sb, '\b'); break; case 'f': stringbuf_add_char(sb, '\f'); break; case 'n': stringbuf_add_char(sb, '\n'); break; case 'r': stringbuf_add_char(sb, '\r'); break; case 't': stringbuf_add_char(sb, '\t'); break; case 'v': stringbuf_add_char(sb, '\v'); break; case '\\': case '\"': stringbuf_add_char(sb, c); break; case '\n': advance_line(1); break; case '%': stringbuf_add_array(sb, text + leng - 2, 2); break; default: { struct cfloc loc; loc.beg = loc.end = curloc.end; loc.beg.column -= 2; cferror(&loc, _("unrecognized escape \\%c"), c); stringbuf_add_array(sb, text + leng - 2, 2); } } } /* TEXT ends with a '\' followed by a 3-byte octal number. No expansion occurs within a ${V:-""} construct. */ static void stringbuf_add_escape_octal(struct stringbuf *sb, char const *text, size_t leng) { if (in_var()) { stringbuf_add_array(sb, text, leng); } else { stringbuf_add_array(sb, text, leng - 4); stringbuf_add_char(sb, strtoul(text + leng - 3, NULL, 8)); } } /* TEXT ends with a '\x' followed by a 2-byte hex number. No expansion occurs within a ${V:-""} construct. */ static void stringbuf_add_escape_hex(struct stringbuf *sb, char const *text, size_t leng) { if (in_var()) { stringbuf_add_array(sb, text, leng); } else { stringbuf_add_array(sb, text, leng - 4); stringbuf_add_char(sb, strtoul(text + leng - 2, NULL, 16)); } } /* Input_Stream context stack */ struct inpctx { struct inpctx *prev; struct cfloc loc; /* Location */ CFSTREAM *input_stream; YY_BUFFER_STATE buf; /* lex buffer state */ }; static struct inpctx *inpctx_tos; /* Returns 1 if an included file is being processed. */ static inline int in_included_file(void) { return inpctx_tos != NULL; } /* Look up in the stack for the input context matching the device and inode numbers from ST. */ static struct inpctx * inpctx_locate(struct stat *st) { struct inpctx *ctx; for (ctx = inpctx_tos; ctx; ctx = ctx->prev) if (cfstream_same_file(ctx->input_stream, st)) break; return ctx; } /* Push current input context on stack. */ static void inpctx_push(void) { struct inpctx *ctx = xmalloc(sizeof(ctx[0])); ctx->loc = curloc; ctx->input_stream = input_stream; ctx->buf = YY_CURRENT_BUFFER; ctx->prev = inpctx_tos; inpctx_tos = ctx; yy_switch_to_buffer(yy_create_buffer(yyin,YY_BUF_SIZE)); } /* Pop the top of stack into the current input context. */ static int inpctx_pop(void) { struct inpctx *ctx = inpctx_tos; if (!ctx) return 1; inpctx_tos = ctx->prev; curloc = ctx->loc; input_stream = ctx->input_stream; yy_delete_buffer(YY_CURRENT_BUFFER); yy_switch_to_buffer(ctx->buf); free(ctx); return 0; } /* Forward declarations */ static void straychar(int); static int noinc(void); #line 1080 "cflex.c" #define INITIAL 0 #define NORMAL 1 #define ARGS 2 #define QSTR 3 #define VAR 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 yy_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 yylex_destroy (void ); int yyget_debug (void ); void yyset_debug (int debug_flag ); YY_EXTRA_TYPE yyget_extra (void ); void yyset_extra (YY_EXTRA_TYPE user_defined ); FILE *yyget_in (void ); void yyset_in (FILE * _in_str ); FILE *yyget_out (void ); void yyset_out (FILE * _out_str ); yy_size_t yyget_leng (void ); char *yyget_text (void ); int yyget_lineno (void ); void yyset_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 yywrap (void ); #else extern int yywrap (void ); #endif #endif /* %not-for-header */ #ifndef YY_NO_UNPUT #endif /* %ok-for-header */ /* %endif */ #ifndef yytext_ptr static void yy_flex_strncpy (char *,yyconst char *,int ); #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * ); #endif #ifndef YY_NO_INPUT /* %if-c-only Standard (non-C++) definition */ /* %not-for-header */ #ifdef __cplusplus static int yyinput (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( yytext, yyleng, 1, yyout )) {} } 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->yy_is_interactive ) \ { \ int c = '*'; \ size_t n; \ for ( n = 0; n < max_size && \ (c = getc( yyin )) != EOF && c != '\n'; ++n ) \ buf[n] = (char) c; \ if ( c == '\n' ) \ buf[n++] = (char) c; \ if ( c == EOF && ferror( yyin ) ) \ YY_FATAL_ERROR( "input in flex scanner failed" ); \ result = n; \ } \ else \ { \ errno=0; \ while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \ { \ if( errno != EINTR) \ { \ YY_FATAL_ERROR( "input in flex scanner failed" ); \ break; \ } \ errno=0; \ clearerr(yyin); \ } \ }\ \ /* %if-c++-only C++ definition \ */\ /* %endif */ #endif /* No semi-colon after return; correct usage is to write "yyterminate();" - * we don't want an extra ';' after the "return" because that will cause * some compilers to complain about unreachable statements. */ #ifndef yyterminate #define yyterminate() 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) yy_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-yydmap 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 yylex (void); #define YY_DECL int yylex (void) /* %endif */ /* %if-c++-only C++ definition */ /* %endif */ #endif /* !YY_DECL */ /* Code executed at the beginning of each rule, after yytext and yyleng * 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 { yy_state_type yy_current_state; char *yy_cp, *yy_bp; int yy_act; if ( !(yy_init) ) { (yy_init) = 1; #ifdef YY_USER_INIT YY_USER_INIT; #endif if ( ! (yy_start) ) (yy_start) = 1; /* first start state */ if ( ! yyin ) /* %if-c-only */ yyin = stdin; /* %endif */ /* %if-c++-only */ /* %endif */ if ( ! yyout ) /* %if-c-only */ yyout = stdout; /* %endif */ /* %if-c++-only */ /* %endif */ if ( ! YY_CURRENT_BUFFER ) { yyensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = yy_create_buffer(yyin,YY_BUF_SIZE ); } yy_load_buffer_state( ); } { /* %% [7.0] user's declarations go here */ #line 289 "cflex.l" /* INITIAL: The scanner is processing the initial portion of the input file, until the version clause ("rush X.Y\n"), upon which the NORMAL state is activated, or any other token, upon which the control is transferred to the legacy parser (see config.c). */ #line 1374 "cflex.c" while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { /* %% [8.0] yymore()-related code goes here */ yy_cp = (yy_c_buf_p); /* Support of yytext. */ *yy_cp = (yy_hold_char); /* yy_bp points to the position in yy_ch_buf of the start of * the current run. */ yy_bp = yy_cp; /* %% [9.0] code to set up and find next match goes here */ yy_current_state = (yy_start); yy_match: do { YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ; if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 247 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; ++yy_cp; } while ( yy_base[yy_current_state] != 607 ); yy_find_action: /* %% [10.0] code to find the action number goes here */ yy_act = yy_accept[yy_current_state]; if ( yy_act == 0 ) { /* have to back up */ yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); yy_act = yy_accept[yy_current_state]; } YY_DO_BEFORE_ACTION; /* %% [11.0] code for yylineno update goes here */ do_action: /* This label is used only to access EOF actions. */ /* %% [12.0] debug code goes here */ if ( yy_flex_debug ) { if ( yy_act == 0 ) fprintf( stderr, "--scanner backing up\n" ); else if ( yy_act < 76 ) fprintf( stderr, "--accepting rule at line %ld (\"%s\")\n", (long)yy_rule_linenum[yy_act], yytext ); else if ( yy_act == 76 ) fprintf( stderr, "--accepting default rule (\"%s\")\n", yytext ); else if ( yy_act == 77 ) fprintf( stderr, "--(end of buffer or a NUL)\n" ); else fprintf( stderr, "--EOF (start condition %d)\n", YY_START ); } switch ( yy_act ) { /* beginning of action switch */ /* %% [13.0] actions go here */ case 0: /* must back up */ /* undo the effects of YY_DO_BEFORE_ACTION */ *yy_cp = (yy_hold_char); yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); goto yy_find_action; case 1: YY_RULE_SETUP #line 296 "cflex.l" return RUSH; YY_BREAK case 2: YY_RULE_SETUP #line 297 "cflex.l" { char *p; yylval.version.major = strtoul(yytext, &p, 10); yylval.version.minor = strtoul(p + 1, NULL, 10); return tok(T_VERSION); } YY_BREAK case 3: /* rule 3 can match eol */ YY_RULE_SETUP #line 301 "cflex.l" { advance_line(1); } YY_BREAK case 4: /* rule 4 can match eol */ YY_RULE_SETUP #line 302 "cflex.l" { advance_line(1); return EOL; } YY_BREAK case 5: /* rule 5 can match eol */ YY_RULE_SETUP #line 303 "cflex.l" { advance_line(1); return EOL; } YY_BREAK case 6: YY_RULE_SETUP #line 304 "cflex.l" reset_loc(); YY_BREAK case 7: YY_RULE_SETUP #line 305 "cflex.l" return tok(BOGUS); YY_BREAK case 8: /* rule 8 can match eol */ YY_RULE_SETUP #line 309 "cflex.l" { advance_line(1); } YY_BREAK case 9: /* rule 9 can match eol */ YY_RULE_SETUP #line 310 "cflex.l" { advance_line(1); BEGIN(NORMAL); return tok(EOL); } YY_BREAK case 10: /* rule 10 can match eol */ YY_RULE_SETUP #line 313 "cflex.l" { advance_line(1); BEGIN(NORMAL); return tok(EOL); } YY_BREAK case 11: YY_RULE_SETUP #line 316 "cflex.l" reset_loc(); YY_BREAK /* NORMAL: The input point is before the next keyword. */ case 12: YY_RULE_SETUP #line 322 "cflex.l" { if (!noinc()) { BEGIN(ARGS); return tok(RULE); } } YY_BREAK case 13: YY_RULE_SETUP #line 327 "cflex.l" { if (!noinc()) return tok(GLOBAL); } YY_BREAK case 14: YY_RULE_SETUP #line 328 "cflex.l" { BEGIN(ARGS); return tok(SET); } YY_BREAK case 15: YY_RULE_SETUP #line 329 "cflex.l" { BEGIN(ARGS); return tok(UNSET); } YY_BREAK case 16: YY_RULE_SETUP #line 330 "cflex.l" { BEGIN(ARGS); return tok(INSERT); } YY_BREAK case 17: YY_RULE_SETUP #line 331 "cflex.l" { BEGIN(ARGS); return tok(MATCH); } YY_BREAK case 18: YY_RULE_SETUP #line 332 "cflex.l" { BEGIN(ARGS); return tok(FALLTHROUGH); } YY_BREAK case 19: YY_RULE_SETUP #line 333 "cflex.l" { BEGIN(ARGS); return tok(INCLUDE); } YY_BREAK case 20: YY_RULE_SETUP #line 334 "cflex.l" { BEGIN(ARGS); return tok(LIMITS); } YY_BREAK case 21: YY_RULE_SETUP #line 335 "cflex.l" { BEGIN(ARGS); return tok(CLRENV); } YY_BREAK case 22: YY_RULE_SETUP #line 336 "cflex.l" { BEGIN(ARGS); return tok(SETENV); } YY_BREAK case 23: YY_RULE_SETUP #line 337 "cflex.l" { BEGIN(ARGS); return tok(UNSETENV); } YY_BREAK case 24: YY_RULE_SETUP #line 338 "cflex.l" { BEGIN(ARGS); return tok(KEEPENV); } YY_BREAK case 25: YY_RULE_SETUP #line 339 "cflex.l" { BEGIN(ARGS); return tok(EVALENV); } YY_BREAK case 26: YY_RULE_SETUP #line 340 "cflex.l" { BEGIN(ARGS); return tok(DELETE); } YY_BREAK case 27: YY_RULE_SETUP #line 341 "cflex.l" { BEGIN(ARGS); return tok(EXIT); } YY_BREAK case 28: YY_RULE_SETUP #line 342 "cflex.l" { BEGIN(ARGS); return tok(MAP); } YY_BREAK case 29: YY_RULE_SETUP #line 343 "cflex.l" { BEGIN(ARGS); return tok(REMOPT); } YY_BREAK case 30: YY_RULE_SETUP #line 344 "cflex.l" { if ((yylval.attrib = rule_attrib_lookup(yytext))) { BEGIN(ARGS); return tok(ATTRIB); } else if ((yylval.global_attrib = global_attrib_lookup(yytext))) { BEGIN(ARGS); return tok(GLATTRIB); } else { yylval.str = xstrdup(yytext); return tok(IDENT); } } YY_BREAK case 31: YY_RULE_SETUP #line 356 "cflex.l" return tok(yytext[0]); YY_BREAK /* ARGS: Processing arguments to a configuration statement. */ case 32: YY_RULE_SETUP #line 362 "cflex.l" return tok(AND); YY_BREAK case 33: YY_RULE_SETUP #line 363 "cflex.l" return tok(OR); YY_BREAK case 34: YY_RULE_SETUP #line 364 "cflex.l" return tok(NOT); YY_BREAK case 35: YY_RULE_SETUP #line 365 "cflex.l" return tok(EQ); YY_BREAK case 36: YY_RULE_SETUP #line 366 "cflex.l" return tok(NE); YY_BREAK case 37: YY_RULE_SETUP #line 367 "cflex.l" return tok(LT); YY_BREAK case 38: YY_RULE_SETUP #line 368 "cflex.l" return tok(LE); YY_BREAK case 39: YY_RULE_SETUP #line 369 "cflex.l" return tok(GT); YY_BREAK case 40: YY_RULE_SETUP #line 370 "cflex.l" return tok(GE); YY_BREAK case 41: YY_RULE_SETUP #line 371 "cflex.l" return tok(NM); YY_BREAK case 42: YY_RULE_SETUP #line 372 "cflex.l" return tok(IN); YY_BREAK case 43: YY_RULE_SETUP #line 373 "cflex.l" return tok(GROUP); YY_BREAK case 44: YY_RULE_SETUP #line 374 "cflex.l" { yylval.fstest = yytext[1]; return tok(TEST); } YY_BREAK case 45: YY_RULE_SETUP #line 375 "cflex.l" { yylval.fstest = fs_symlink; return tok(TEST); } YY_BREAK case 46: YY_RULE_SETUP #line 376 "cflex.l" { yylval.num.strval = xstrdup(yytext); yylval.num.intval = atoi(yytext); return tok(NUMBER); } YY_BREAK case 47: YY_RULE_SETUP #line 379 "cflex.l" { yylval.str = xstrdup(yytext); return tok(IDENT); } YY_BREAK case 48: YY_RULE_SETUP #line 381 "cflex.l" { yylval.str = xstrdup(yytext); return tok(STRING); } YY_BREAK case 49: YY_RULE_SETUP #line 383 "cflex.l" { yylval.str = xstrdup(yytext); return tok(STRING); } YY_BREAK case 50: YY_RULE_SETUP #line 385 "cflex.l" { yylval.str = xstrdup(yytext); return tok(STRING); } YY_BREAK case 51: YY_RULE_SETUP #line 387 "cflex.l" { stringbuf_init(&sb); stringbuf_add_array(&sb, yytext, yyleng); pushstart(VAR); } YY_BREAK case 52: YY_RULE_SETUP #line 391 "cflex.l" { yylval.str = xstrdup(yytext); return tok(STRING); } YY_BREAK case 53: YY_RULE_SETUP #line 393 "cflex.l" { stringbuf_init(&sb); stringbuf_add_array(&sb, yytext, yyleng); pushstart(VAR); } YY_BREAK case 54: YY_RULE_SETUP #line 398 "cflex.l" { yylval.str = xstrdup(yytext); return tok(STRING); } YY_BREAK case 55: YY_RULE_SETUP #line 400 "cflex.l" { yylval.str = xmalloc(yyleng-1); memcpy(yylval.str, yytext + 1, yyleng - 2); yylval.str[yyleng - 2] = 0; return tok(STRING); } YY_BREAK case 56: YY_RULE_SETUP #line 404 "cflex.l" { stringbuf_init(&sb); stringbuf_add_escape_octal(&sb, yytext + 1, yyleng - 1); pushstart(QSTR); } YY_BREAK case 57: YY_RULE_SETUP #line 408 "cflex.l" { stringbuf_init(&sb); stringbuf_add_escape_hex(&sb, yytext + 1, yyleng - 1); pushstart(QSTR); } YY_BREAK case 58: /* rule 58 can match eol */ YY_RULE_SETUP #line 413 "cflex.l" { stringbuf_init(&sb); stringbuf_add_escape_dfl(&sb, yytext + 1, yyleng - 1); pushstart(QSTR); } YY_BREAK case 59: YY_RULE_SETUP #line 418 "cflex.l" return tok(XF); YY_BREAK case 60: YY_RULE_SETUP #line 419 "cflex.l" return tok(yytext[0]); YY_BREAK /* QSTR: Composing a quoted string. */ case 61: YY_RULE_SETUP #line 425 "cflex.l" { stringbuf_add_array(&sb, yytext, yyleng - 1); popstart(); if (YY_START == ARGS) { stringbuf_finish(&sb); yylval.str = sb.buffer; return tok(STRING); } else stringbuf_add_char(&sb, yytext[yyleng-1]); } YY_BREAK case 62: YY_RULE_SETUP #line 434 "cflex.l" { stringbuf_add_escape_octal(&sb, yytext, yyleng); } YY_BREAK case 63: YY_RULE_SETUP #line 435 "cflex.l" { stringbuf_add_escape_hex(&sb, yytext, yyleng); } YY_BREAK case 64: /* rule 64 can match eol */ YY_RULE_SETUP #line 437 "cflex.l" { stringbuf_add_escape_dfl(&sb, yytext, yyleng); } YY_BREAK case 65: /* rule 65 can match eol */ YY_RULE_SETUP #line 438 "cflex.l" { advance_line(1); yyerror("unescaped newline in quoted string"); } YY_BREAK case 66: YY_RULE_SETUP #line 440 "cflex.l" { straychar(yytext[0]); } YY_BREAK /* VAR: The scanner is processing an unquoted variable reference with a default value (e.g. ${X:-0}). */ case 67: YY_RULE_SETUP #line 447 "cflex.l" { stringbuf_add_char(&sb, yytext[0]); popstart(); if (YY_START != VAR) { stringbuf_finish(&sb); yylval.str = sb.buffer; return tok(STRING); } } YY_BREAK case 68: YY_RULE_SETUP #line 455 "cflex.l" { stringbuf_add_array(&sb, yytext, yyleng); } YY_BREAK case 69: YY_RULE_SETUP #line 456 "cflex.l" { stringbuf_add_array(&sb, yytext, yyleng); pushstart(VAR); } YY_BREAK case 70: YY_RULE_SETUP #line 459 "cflex.l" { stringbuf_add_array(&sb, yytext, yyleng); } YY_BREAK case 71: /* rule 71 can match eol */ YY_RULE_SETUP #line 460 "cflex.l" { stringbuf_add_escape_dfl(&sb, yytext, yyleng); pushstart(QSTR); } YY_BREAK case 72: YY_RULE_SETUP #line 462 "cflex.l" { stringbuf_add_escape_octal(&sb, yytext, yyleng); pushstart(QSTR); } YY_BREAK case 73: YY_RULE_SETUP #line 464 "cflex.l" { stringbuf_add_escape_hex(&sb, yytext, yyleng); pushstart(QSTR); } YY_BREAK case 74: /* rule 74 can match eol */ YY_RULE_SETUP #line 465 "cflex.l" { stringbuf_add_array(&sb, yytext, yyleng); } YY_BREAK case 75: YY_RULE_SETUP #line 466 "cflex.l" { straychar(yytext[0]); stringbuf_add_char(&sb, yytext[0]); } YY_BREAK case 76: YY_RULE_SETUP #line 469 "cflex.l" ECHO; YY_BREAK #line 1937 "cflex.c" case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(NORMAL): case YY_STATE_EOF(ARGS): case YY_STATE_EOF(QSTR): case YY_STATE_EOF(VAR): yyterminate(); case YY_END_OF_BUFFER: { /* Amount of text matched not including the EOB char. */ int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1; /* Undo the effects of YY_DO_BEFORE_ACTION. */ *yy_cp = (yy_hold_char); YY_RESTORE_YY_MORE_OFFSET if ( YY_CURRENT_BUFFER_LVALUE->yy_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 yyin at a new source and called * yylex(). 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. */ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; /* %if-c-only */ YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; /* %endif */ /* %if-c++-only */ /* %endif */ YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; } /* Note that here we test for yy_c_buf_p "<=" to the position * of the first EOB in the buffer, since yy_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 ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) { /* This was really a NUL. */ yy_state_type yy_next_state; (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state( ); /* Okay, we're now positioned to make the NUL * transition. We couldn't have * yy_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). */ yy_next_state = yy_try_NUL_trans( yy_current_state ); yy_bp = (yytext_ptr) + YY_MORE_ADJ; if ( yy_next_state ) { /* Consume the NUL. */ yy_cp = ++(yy_c_buf_p); yy_current_state = yy_next_state; goto yy_match; } else { /* %% [14.0] code to do back-up for compressed tables and set up yy_cp goes here */ yy_cp = (yy_c_buf_p); goto yy_find_action; } } else switch ( yy_get_next_buffer( ) ) { case EOB_ACT_END_OF_FILE: { (yy_did_buffer_switch_on_eof) = 0; if ( yywrap( ) ) { /* Note: because we've taken care in * yy_get_next_buffer() to have set up * yytext, we can now set up * yy_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. */ (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ; yy_act = YY_STATE_EOF(YY_START); goto do_action; } else { if ( ! (yy_did_buffer_switch_on_eof) ) YY_NEW_FILE; } break; } case EOB_ACT_CONTINUE_SCAN: (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state( ); yy_cp = (yy_c_buf_p); yy_bp = (yytext_ptr) + YY_MORE_ADJ; goto yy_match; case EOB_ACT_LAST_MATCH: (yy_c_buf_p) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)]; yy_current_state = yy_get_previous_state( ); yy_cp = (yy_c_buf_p); yy_bp = (yytext_ptr) + YY_MORE_ADJ; goto yy_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 yylex */ /* %ok-for-header */ /* %if-c++-only */ /* %not-for-header */ /* %ok-for-header */ /* %endif */ /* yy_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 yy_get_next_buffer (void) /* %endif */ /* %if-c++-only */ /* %endif */ { char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; char *source = (yytext_ptr); yy_size_t number_to_move, i; int ret_val; if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) YY_FATAL_ERROR( "fatal flex scanner internal error--end of buffer missed" ); if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) { /* Don't try to fill the buffer, so this is an EOF. */ if ( (yy_c_buf_p) - (yytext_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 = (yy_size_t) ((yy_c_buf_p) - (yytext_ptr)) - 1; for ( i = 0; i < number_to_move; ++i ) *(dest++) = *(source++); if ( YY_CURRENT_BUFFER_LVALUE->yy_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->yy_n_chars = (yy_n_chars) = 0; else { yy_size_t num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_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 yy_c_buf_p_offset = (int) ((yy_c_buf_p) - b->yy_ch_buf); if ( b->yy_is_our_buffer ) { yy_size_t new_size = b->yy_buf_size * 2; if ( new_size <= 0 ) b->yy_buf_size += b->yy_buf_size / 8; else b->yy_buf_size *= 2; b->yy_ch_buf = (char *) /* Include room in for 2 EOB chars. */ yyrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ); } else /* Can't grow it, we don't own it. */ b->yy_ch_buf = 0; if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "fatal error - scanner input buffer overflow" ); (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset]; num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_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->yy_ch_buf[number_to_move]), (yy_n_chars), num_to_read ); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } if ( (yy_n_chars) == 0 ) { if ( number_to_move == YY_MORE_ADJ ) { ret_val = EOB_ACT_END_OF_FILE; yyrestart(yyin ); } else { ret_val = EOB_ACT_LAST_MATCH; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_EOF_PENDING; } } else ret_val = EOB_ACT_CONTINUE_SCAN; if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { /* Extend the array by 50%, plus the number we really need. */ yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ); if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); } (yy_n_chars) += number_to_move; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; return ret_val; } /* yy_get_previous_state - get the state just before the EOB char was reached */ /* %if-c-only */ /* %not-for-header */ static yy_state_type yy_get_previous_state (void) /* %endif */ /* %if-c++-only */ /* %endif */ { yy_state_type yy_current_state; char *yy_cp; /* %% [15.0] code to get the start state into yy_current_state goes here */ yy_current_state = (yy_start); for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp ) { /* %% [16.0] code to find the next state goes here */ YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 247 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; } return yy_current_state; } /* yy_try_NUL_trans - try to make a transition on the NUL character * * synopsis * next_state = yy_try_NUL_trans( current_state ); */ /* %if-c-only */ static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state ) /* %endif */ /* %if-c++-only */ /* %endif */ { int yy_is_jam; /* %% [17.0] code to find the next state, and perhaps do backing up, goes here */ char *yy_cp = (yy_c_buf_p); YY_CHAR yy_c = 1; if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 247 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; yy_is_jam = (yy_current_state == 246); return yy_is_jam ? 0 : yy_current_state; } #ifndef YY_NO_UNPUT /* %if-c-only */ /* %endif */ #endif /* %if-c-only */ #ifndef YY_NO_INPUT #ifdef __cplusplus static int yyinput (void) #else static int input (void) #endif /* %endif */ /* %if-c++-only */ /* %endif */ { int c; *(yy_c_buf_p) = (yy_hold_char); if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR ) { /* yy_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 ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) /* This was really a NUL. */ *(yy_c_buf_p) = '\0'; else { /* need more input */ yy_size_t offset = (yy_c_buf_p) - (yytext_ptr); ++(yy_c_buf_p); switch ( yy_get_next_buffer( ) ) { case EOB_ACT_LAST_MATCH: /* This happens because yy_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. */ yyrestart(yyin ); /*FALLTHROUGH*/ case EOB_ACT_END_OF_FILE: { if ( yywrap( ) ) return EOF; if ( ! (yy_did_buffer_switch_on_eof) ) YY_NEW_FILE; #ifdef __cplusplus return yyinput(); #else return input(); #endif } case EOB_ACT_CONTINUE_SCAN: (yy_c_buf_p) = (yytext_ptr) + offset; break; } } } c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */ *(yy_c_buf_p) = '\0'; /* preserve yytext */ (yy_hold_char) = *++(yy_c_buf_p); /* %% [19.0] update BOL and yylineno */ 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 yyrestart (FILE * input_file ) /* %endif */ /* %if-c++-only */ /* %endif */ { if ( ! YY_CURRENT_BUFFER ){ yyensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = yy_create_buffer(yyin,YY_BUF_SIZE ); } yy_init_buffer(YY_CURRENT_BUFFER,input_file ); yy_load_buffer_state( ); } /* %if-c++-only */ /* %endif */ /** Switch to a different input buffer. * @param new_buffer The new input buffer. * */ /* %if-c-only */ void yy_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 * yypop_buffer_state(); * yypush_buffer_state(new_buffer); */ yyensure_buffer_stack (); if ( YY_CURRENT_BUFFER == new_buffer ) return; if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(yy_c_buf_p) = (yy_hold_char); YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } YY_CURRENT_BUFFER_LVALUE = new_buffer; yy_load_buffer_state( ); /* We don't actually know whether we did this switch during * EOF (yywrap()) processing, but the only time this flag * is looked at is after yywrap() is called, so it's safe * to go ahead and always set it. */ (yy_did_buffer_switch_on_eof) = 1; } /* %if-c-only */ static void yy_load_buffer_state (void) /* %endif */ /* %if-c++-only */ /* %endif */ { (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; /* %if-c-only */ yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; /* %endif */ /* %if-c++-only */ /* %endif */ (yy_hold_char) = *(yy_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 yy_create_buffer (FILE * file, int size ) /* %endif */ /* %if-c++-only */ /* %endif */ { YY_BUFFER_STATE b; b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); b->yy_buf_size = (yy_size_t)size; /* yy_ch_buf has to be 2 characters longer than the size given because * we need to put in 2 end-of-buffer characters. */ b->yy_ch_buf = (char *) yyalloc(b->yy_buf_size + 2 ); if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); b->yy_is_our_buffer = 1; yy_init_buffer(b,file ); return b; } /* %if-c++-only */ /* %endif */ /** Destroy the buffer. * @param b a buffer created with yy_create_buffer() * */ /* %if-c-only */ void yy_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->yy_is_our_buffer ) yyfree((void *) b->yy_ch_buf ); yyfree((void *) b ); } /* Initializes or reinitializes a buffer. * This function is sometimes called more than once on the same buffer, * such as during a yyrestart() or at EOF. */ /* %if-c-only */ static void yy_init_buffer (YY_BUFFER_STATE b, FILE * file ) /* %endif */ /* %if-c++-only */ /* %endif */ { int oerrno = errno; yy_flush_buffer(b ); /* %if-c-only */ b->yy_input_file = file; /* %endif */ /* %if-c++-only */ /* %endif */ b->yy_fill_buffer = 1; /* If b is the current buffer, then yy_init_buffer was _probably_ * called from yyrestart() or through yy_get_next_buffer. * In that case, we don't want to reset the lineno or column. */ if (b != YY_CURRENT_BUFFER){ b->yy_bs_lineno = 1; b->yy_bs_column = 0; } /* %if-c-only */ b->yy_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 yy_flush_buffer (YY_BUFFER_STATE b ) /* %endif */ /* %if-c++-only */ /* %endif */ { if ( ! b ) return; b->yy_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->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; b->yy_buf_pos = &b->yy_ch_buf[0]; b->yy_at_bol = 1; b->yy_buffer_status = YY_BUFFER_NEW; if ( b == YY_CURRENT_BUFFER ) yy_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 yypush_buffer_state (YY_BUFFER_STATE new_buffer ) /* %endif */ /* %if-c++-only */ /* %endif */ { if (new_buffer == NULL) return; yyensure_buffer_stack(); /* This block is copied from yy_switch_to_buffer. */ if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(yy_c_buf_p) = (yy_hold_char); YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } /* Only push if top exists. Otherwise, replace top. */ if (YY_CURRENT_BUFFER) (yy_buffer_stack_top)++; YY_CURRENT_BUFFER_LVALUE = new_buffer; /* copied from yy_switch_to_buffer. */ yy_load_buffer_state( ); (yy_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 yypop_buffer_state (void) /* %endif */ /* %if-c++-only */ /* %endif */ { if (!YY_CURRENT_BUFFER) return; yy_delete_buffer(YY_CURRENT_BUFFER ); YY_CURRENT_BUFFER_LVALUE = NULL; if ((yy_buffer_stack_top) > 0) --(yy_buffer_stack_top); if (YY_CURRENT_BUFFER) { yy_load_buffer_state( ); (yy_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 yyensure_buffer_stack (void) /* %endif */ /* %if-c++-only */ /* %endif */ { yy_size_t num_to_alloc; if (!(yy_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... (yy_buffer_stack) = (struct yy_buffer_state**)yyalloc (num_to_alloc * sizeof(struct yy_buffer_state*) ); if ( ! (yy_buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; (yy_buffer_stack_top) = 0; return; } if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ /* Increase the buffer to prepare for a possible push. */ yy_size_t grow_size = 8 /* arbitrary grow size */; num_to_alloc = (yy_buffer_stack_max) + grow_size; (yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc ((yy_buffer_stack), num_to_alloc * sizeof(struct yy_buffer_state*) ); if ( ! (yy_buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); /* zero only the new slots.*/ memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); (yy_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 yy_scan_buffer (char * base, yy_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) yyalloc(sizeof( struct yy_buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" ); b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */ b->yy_buf_pos = b->yy_ch_buf = base; b->yy_is_our_buffer = 0; b->yy_input_file = 0; b->yy_n_chars = b->yy_buf_size; b->yy_is_interactive = 0; b->yy_at_bol = 1; b->yy_fill_buffer = 0; b->yy_buffer_status = YY_BUFFER_NEW; yy_switch_to_buffer(b ); return b; } /* %endif */ /* %if-c-only */ /** Setup the input buffer state to scan a string. The next call to yylex() will * scan from a @e copy of @a str. * @param yystr 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 * yy_scan_bytes() instead. */ YY_BUFFER_STATE yy_scan_string (yyconst char * yystr ) { return yy_scan_bytes(yystr,strlen(yystr) ); } /* %endif */ /* %if-c-only */ /** Setup the input buffer state to scan the given bytes. The next call to yylex() will * scan from a @e copy of @a bytes. * @param yybytes the byte buffer to scan * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes. * * @return the newly allocated buffer state object. */ YY_BUFFER_STATE yy_scan_bytes (yyconst char * yybytes, yy_size_t _yybytes_len ) { YY_BUFFER_STATE b; char *buf; yy_size_t n; yy_size_t i; /* Get memory for full buffer, including space for trailing EOB's. */ n = _yybytes_len + 2; buf = (char *) yyalloc(n ); if ( ! buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" ); for ( i = 0; i < _yybytes_len; ++i ) buf[i] = yybytes[i]; buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; b = yy_scan_buffer(buf,n ); if ( ! b ) YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" ); /* It's okay to grow etc. this buffer, and we should throw it * away when we're done. */ b->yy_is_our_buffer = 1; return b; } /* %endif */ #ifndef YY_EXIT_FAILURE #define YY_EXIT_FAILURE 2 #endif /* %if-c-only */ static void yy_fatal_error (yyconst char* msg ) { (void) fprintf( stderr, "%s\n", msg ); exit( YY_EXIT_FAILURE ); } /* %endif */ /* %if-c++-only */ /* %endif */ /* Redefine yyless() so it works in section 3 code. */ #undef yyless #define yyless(n) \ do \ { \ /* Undo effects of setting up yytext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ yytext[yyleng] = (yy_hold_char); \ (yy_c_buf_p) = yytext + yyless_macro_arg; \ (yy_hold_char) = *(yy_c_buf_p); \ *(yy_c_buf_p) = '\0'; \ yyleng = yyless_macro_arg; \ } \ while ( 0 ) /* Accessor methods (get/set functions) to struct members. */ /* %if-c-only */ /* %if-reentrant */ /* %endif */ /** Get the current line number. * */ int yyget_lineno (void) { return yylineno; } /** Get the input stream. * */ FILE *yyget_in (void) { return yyin; } /** Get the output stream. * */ FILE *yyget_out (void) { return yyout; } /** Get the length of the current token. * */ yy_size_t yyget_leng (void) { return yyleng; } /** Get the current token. * */ char *yyget_text (void) { return yytext; } /* %if-reentrant */ /* %endif */ /** Set the current line number. * @param _line_number line number * */ void yyset_lineno (int _line_number ) { yylineno = _line_number; } /** Set the input stream. This does not discard the current * input buffer. * @param _in_str A readable stream. * * @see yy_switch_to_buffer */ void yyset_in (FILE * _in_str ) { yyin = _in_str ; } void yyset_out (FILE * _out_str ) { yyout = _out_str ; } int yyget_debug (void) { return yy_flex_debug; } void yyset_debug (int _bdebug ) { yy_flex_debug = _bdebug ; } /* %endif */ /* %if-reentrant */ /* %if-bison-bridge */ /* %endif */ /* %endif if-c-only */ /* %if-c-only */ static int yy_init_globals (void) { /* Initialization is the same as for the non-reentrant scanner. * This function is called from yylex_destroy(), so don't allocate here. */ (yy_buffer_stack) = 0; (yy_buffer_stack_top) = 0; (yy_buffer_stack_max) = 0; (yy_c_buf_p) = (char *) 0; (yy_init) = 0; (yy_start) = 0; /* Defined in main.c */ #ifdef YY_STDINIT yyin = stdin; yyout = stdout; #else yyin = (FILE *) 0; yyout = (FILE *) 0; #endif /* For future reference: Set errno on error, since we are called by * yylex_init() */ return 0; } /* %endif */ /* %if-c-only SNIP! this currently causes conflicts with the c++ scanner */ /* yylex_destroy is for both reentrant and non-reentrant scanners. */ int yylex_destroy (void) { /* Pop the buffer stack, destroying each element. */ while(YY_CURRENT_BUFFER){ yy_delete_buffer(YY_CURRENT_BUFFER ); YY_CURRENT_BUFFER_LVALUE = NULL; yypop_buffer_state(); } /* Destroy the stack itself. */ yyfree((yy_buffer_stack) ); (yy_buffer_stack) = NULL; /* Reset the globals. This is important in a non-reentrant scanner so the next time * yylex() is called, initialization will occur. */ yy_init_globals( ); /* %if-reentrant */ /* %endif */ return 0; } /* %endif */ /* * Internal utility routines. */ #ifndef yytext_ptr static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) { int i; for ( i = 0; i < n; ++i ) s1[i] = s2[i]; } #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * s ) { int n; for ( n = 0; s[n]; ++n ) ; return n; } #endif void *yyalloc (yy_size_t size ) { return (void *) malloc( size ); } void *yyrealloc (void * ptr, yy_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 yyfree (void * ptr ) { free( (char *) ptr ); /* see yyrealloc() for (char *) cast */ } /* %if-tables-serialization definitions */ /* %define-yytables The name for this specific scanner's tables. */ #define YYTABLES_NAME "yytables" /* %endif */ /* %ok-for-header */ #line 469 "cflex.l" /* * If processing the included file, report an error, drain the input, and * return 1. Otherwise, return 0. * * NOTE ABOUT FLEX input() FUNCTION * * The yyinput (input) function used to return EOF on end of file. This * was broken by commit f863c949[1] in flex, which changed its return value * to 0. Unfortunately the committer didn't consider it necessary to explain * the rationale, let alone to fix the documentation. The change was released * with flex version 2.6.1 and caused grief in many projects: [2] and [3], to * name a few. * * The issue was reported to flex[4]. At the time of this writing it remained * without response for more than a year. * * To stay on the safe side, the code below checks for both 0 and EOF. * * [1] https://github.com/westes/flex/commit/f863c9490e6912ffcaeb12965fb3a567a10745ff * [2] https://sourceforge.net/p/sdcc/bugs/3012 * [3] https://www.redhat.com/archives/libguestfs/2016-July/msg00252.html * [4] https://github.com/westes/flex/issues/448 */ static int noinc(void) { if (in_included_file()) { int c; yyerror(_("the %s statement is not allowed in included file"), yytext); cferror(&curloc, _("skipping to the end of file")); while ((c = input()) != EOF && c != 0) ; return 1; } return 0; } /* Return true if the quoted string being expanded occurs within a variable construct -- ${V:-"string"} */ static int in_var(void) { return (start_tos && start_tos->start == VAR); } /* Report a stray character C */ static void straychar(int c) { static char *start_name[] = { [INITIAL] = N_("looking for rush version clause"), [NORMAL] = N_("looking for rule"), [ARGS] = N_("scanning arguments"), [QSTR] = N_("scanning quoted string"), [VAR] = N_("scanning variable reference") }; if (isprint(c)) { yyerror(_("stray character %c while %s"), c, gettext(start_name[YY_START])); } else { yyerror(_("stray character %03o while %s"), c, gettext(start_name[YY_START])); } } /* * Skip the input up to the next '\n' character. * See the "NOTE ABOUT FLEX input() FUNCTION", above. */ void skiptoeol(void) { int c; while ((c = input()) != EOF && c != 0 && c != '\n') ; } /* Clear the start state stack and switch scanner to the NORMAL state. */ void restorenormal(void) { while (start_tos) popstart(); BEGIN(NORMAL); } /* Initialize current location to point to this filename and line number. */ static void curloc_init(char const *filename, int line) { curloc.beg.filename = new_source_file_name(filename); curloc.beg.line = line; curloc.beg.column = 1; curloc.end = curloc.beg; } /* Switch to input from CF. FILENAME and LINE give the initial location. */ void cflex_setup(CFSTREAM *cf, char const *filename, int line) { curloc_init(filename, line); input_stream = cf; YY_FLUSH_BUFFER; } /* Set scanner debug level to V. */ void cflex_debug(int v) { #ifdef FLEX_DEBUG yy_flex_debug = v; #endif } /* Switch to the NORMAL condition. */ void cflex_normal(void) { BEGIN(NORMAL); } /* Include FILENAME. Return 0 on success, -1 on error. */ int cflex_include(char const *filename, struct cfloc const *loc) { char *name = expand_tilde(filename, rush_pw->pw_dir); struct stat st; struct inpctx *ctx; if (trimslash(name) == 0) { free(name); cferror(loc, _("invalid include file name")); return -1; } if (stat(name, &st)) { if (errno == ENOENT) { debug(1, _("Ignoring non-existing include file %s"), name); free(name); return 0; } else { cferror(loc, _("cannot stat file %s: %s"), name, strerror(errno)); free(name); return -1; } } if (S_ISDIR(st.st_mode)) { char *file = make_file_name(name, rush_pw->pw_name); free(name); name = file; if (access(name, F_OK)) { if (errno == ENOENT) { debug(1, _("Ignoring non-existing include file %s"), name); free(name); return 0; } else { cferror(loc, "access(%s): %s", name, strerror(errno)); free(name); return -1; } } } inpctx_push(); if ((ctx = inpctx_locate(&st))) { ctx = ctx->prev; if (ctx) { cferror(loc, "%s already included", name); cferror(&ctx->loc, "%s already included here", name); } else cferror(loc, "%s: main configuration file cannot be included", name); inpctx_pop(); free(name); return -1; } cflex_setup(cfstream_open_file(name), name, 1); free(name); return 0; } int yywrap(void) { return inpctx_pop(); } /* Preserve the current start state on stack and switch to ARGS. */ void cflex_pushargs(void) { pushstart(ARGS); } /* Extern interface to popstart */ void cflex_popargs(void) { popstart(); } /* Remove trailing whitespace from S. */ void trimws(char *s) { size_t len = strlen(s); while (len > 0 && ISWS(s[len-1])) s[--len] = 0; } /* Remove trailing slashes from S. Return the length of the resulting string. */ size_t trimslash(char *s) { size_t len = strlen(s); while (len > 0 && s[len-1] == '\\') s[--len] = 0; return len; } /* Rewind the input stream to the beginning and parse it as a legacy configuration. */ int parse_old_rc(void) { CFSTREAM *cf = input_stream; char const *filename = curloc.beg.filename; YY_FLUSH_BUFFER; input_stream = NULL; cfstream_rewind(cf); return cfparse_old(cf, filename, 1); } void cflex_test(char const *filename) { int c; CFSTREAM *cf; if (filename) { cf = cfstream_open_file(filename); } else { cf = cfstream_open_stdin(); filename = "stdin"; } cflex_setup(cf, filename, 1); BEGIN(NORMAL); while ((c = yylex()) != 0) { printf("state %d, ",YY_START); YY_LOCATION_PRINT(stdout, yylloc); printf(": "); switch (c) { case STRING: printf("STRING "); dumpstr(yylval.str, stdout); break; case IDENT: printf("IDENT %s", yylval.str); break; case NUMBER: printf("NUMBER %s", yylval.num.strval); break; case ATTRIB: printf("ATTRIB %s", yytext); break; case GLATTRIB: printf("GLATTRIB %s", yylval.global_attrib->name); break; case EOL: printf("EOL"); break; default: printf("'%s'", yytext); } putchar('\n'); } exit(0); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/src/dump.c���������������������������������������������������������������������������������0000644�0001750�0001750�00000016661�14643176120�014244� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* This file is part of GNU Rush. Copyright (C) 2008-2024 Sergey Poznyakoff GNU Rush is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GNU Rush is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. */ #include <rush.h> struct json_dumper { FILE *fp; int indent; int level; int first; }; static void dumper_init(struct json_dumper *dmp, FILE *fp, int indent) { dmp->fp = fp; dmp->indent = indent; dmp->level = 1; dmp->first = 1; } static void dumper_copy(struct json_dumper *dst, struct json_dumper *src) { dst->fp = src->fp; dst->indent = src->indent; dst->level = src->level + 1; dst->first = 1; } static void dump_indent(struct json_dumper *dmp) { int i; for (i = 0; i < dmp->indent * dmp->level; i++) fputc(' ', dmp->fp); } static void dump_separator(struct json_dumper *dmp) { if (dmp->indent) { fputc('\n', dmp->fp); dump_indent(dmp); } else fputc(' ', dmp->fp); } static void dump_delim(struct json_dumper *dmp) { fputc(',', dmp->fp); dump_separator(dmp); } static void dump_id(char const *id, struct json_dumper *dmp) { if (dmp->first) dmp->first = 0; else dump_delim(dmp); fprintf(dmp->fp, "\"%s\":", id); } static void dump_null(char const *id, struct json_dumper *dmp) { dump_id(id, dmp); fputs("null", dmp->fp); } void dumpstr(char const *string, FILE *fp) { int c; fputc('\"', fp); for (; (c = *string) != 0; string++) { int ec; if (c == '\\' || c == '\"') { fputc('\\', fp); fputc(c, fp); } else if (c_isprint(c)) fputc(c, fp); else if ((ec = wordsplit_c_quote_char(c)) != 0) { fputc('\\', fp); fputc(ec, fp); } else { fprintf(fp, "\\%03o", c); } } fputc('\"', fp); } static void dump_string_data(char const *string, struct json_dumper *dmp) { if (!string) { fputs("null", dmp->fp); return; } dumpstr(string, dmp->fp); } static void dump_string(char const *string, char const *id, struct json_dumper *dmp) { dump_id(id, dmp); dump_string_data(string, dmp); } static void dump_raw_argv(char **argv, struct json_dumper *dmp) { size_t i; for (i = 0; argv[i]; i++) { if (i) dump_delim(dmp); dump_string_data(argv[i], dmp); } } static int cmp_ptr(const void *a, const void *b) { char ** const aptr = (char ** const) a; char ** const bptr = (char ** const) b; return strcmp (*aptr, *bptr); } static void dump_argv(char **argv, char const *id, int sort, struct json_dumper *dmp) { size_t i; struct json_dumper nest_dmp; dump_id(id, dmp); if (!argv) { fputs("null", dmp->fp); return; } fputc('[', dmp->fp); if (!argv[0]) { fputc(']', dmp->fp); return; } if (dmp->indent) fputc('\n', dmp->fp); dumper_copy(&nest_dmp, dmp); dump_indent(&nest_dmp); if (sort) { char **newargv; for (i = 0; argv[i]; i++) ; newargv = xcalloc(i+1, sizeof(newargv[0])); for (i = 0; (newargv[i] = argv[i]) != NULL; i++) ; qsort(newargv, i, sizeof(newargv[0]), cmp_ptr); dump_raw_argv(newargv, &nest_dmp); free(newargv); } else { dump_raw_argv(argv, &nest_dmp); } dump_separator(dmp); fputc(']', dmp->fp); } static void dump_umax(uintmax_t val, char const *id, struct json_dumper *dmp) { char buf[INT_BUFSIZE_BOUND(uintmax_t)]; dump_id(id, dmp); fputs(umaxtostr(val, buf), dmp->fp); } static void dump_octal(unsigned val, char const *id, struct json_dumper *dmp) { dump_id(id, dmp); fprintf(dmp->fp, "%03o", val); } static void dump_int(int val, char const *id, struct json_dumper *dmp) { dump_id(id, dmp); fprintf(dmp->fp, "%d", val); } static char **kv_ar; static int cmp_idx(void const *a, void const *b) { size_t const *ai = a; size_t const *bi = b; return strcmp(kv_ar[*ai], kv_ar[*bi]); } static void dump_vars(struct rush_request *req, char const *id, struct json_dumper *dmp) { dump_id(id, dmp); fputc('{', dmp->fp); if (req->var_count) { size_t i, ic; size_t *iv; struct json_dumper nest_dmp; ic = req->var_count / 2; iv = xcalloc(ic, sizeof(iv[0])); for (i = 0; i < ic; i++) { iv[i] = 2*i; } kv_ar = req->var_kv; qsort(iv, ic, sizeof(iv[0]), cmp_idx); dumper_copy(&nest_dmp, dmp); dump_separator(&nest_dmp); for (i = 0; i < ic; i++) { dump_id(req->var_kv[iv[i]], &nest_dmp); dump_string_data(req->var_kv[iv[i]+1], &nest_dmp); } dump_separator(dmp); } fputc('}', dmp->fp); } static char allkw[] = "cmdline," "argv," "prog," "interactive," "pw_name," "pw_uid," "pw_gid," "pw_dir," "umask," "chroot_dir," "home_dir," "gid," "fork," "acct," "text_domain," "localedir," "locale," "environ," "vars"; void dump_request(struct rush_request *req, FILE *fp) { size_t i; struct json_dumper dmp; struct wordsplit ws; ws.ws_delim = ","; if (strcmp(dump_option, "all") == 0) dump_option = allkw; if (wordsplit(dump_option, &ws, WRDSF_DELIM |WRDSF_WS|WRDSF_SQUEEZE_DELIMS |WRDSF_NOVAR|WRDSF_NOCMD|WRDSF_SHOWERR)) abort(); dumper_init(&dmp, fp, 4); fputc('{', fp); dump_separator(&dmp); for (i = 0; i < ws.ws_wordc; i++) { if (strcmp(ws.ws_wordv[i], "cmdline") == 0) dump_string(req->cmdline, "cmdline", &dmp); else if (strcmp(ws.ws_wordv[i], "argv") == 0) dump_argv(req->argv, "argv", 0, &dmp); else if (strcmp(ws.ws_wordv[i], "prog") == 0) dump_string(req->prog, "prog", &dmp); else if (strcmp(ws.ws_wordv[i], "interactive") == 0) dump_int(req->interactive, "interactive", &dmp); else if (strcmp(ws.ws_wordv[i], "pw_name") == 0) dump_string(req->pw->pw_name, "pw_name", &dmp); else if (strcmp(ws.ws_wordv[i], "pw_uid") == 0) dump_umax(req->pw->pw_uid, "pw_uid", &dmp); else if (strcmp(ws.ws_wordv[i], "pw_gid") == 0) dump_umax(req->pw->pw_gid, "pw_gid", &dmp); else if (strcmp(ws.ws_wordv[i], "pw_dir") == 0) dump_string(req->pw->pw_dir, "pw_dir", &dmp); else if (strcmp(ws.ws_wordv[i], "umask") == 0) dump_octal(req->umask, "umask", &dmp); else if (strcmp(ws.ws_wordv[i], "chroot_dir") == 0) dump_string(req->chroot_dir, "chroot_dir", &dmp); else if (strcmp(ws.ws_wordv[i], "home_dir") == 0) dump_string(req->home_dir, "home_dir", &dmp); else if (strcmp(ws.ws_wordv[i], "gid") == 0) { if (req->gid == NO_GID) dump_null("gid", &dmp); else dump_umax(req->gid, "gid", &dmp); } else if (strcmp(ws.ws_wordv[i], "fork") == 0) dump_int(req->fork, "fork", &dmp); else if (strcmp(ws.ws_wordv[i], "acct") == 0) dump_int(req->acct, "acct", &dmp); //FIXME: socket else if (strcmp(ws.ws_wordv[i], "text_domain") == 0) dump_string(req->i18n.text_domain, "text_domain", &dmp); else if (strcmp(ws.ws_wordv[i], "localedir") == 0) dump_string(req->i18n.localedir, "localedir", &dmp); else if (strcmp(ws.ws_wordv[i], "locale") == 0) dump_string(req->i18n.locale, "locale", &dmp); else if (strcmp(ws.ws_wordv[i], "environ") == 0) dump_argv(req->env, "environ", 1, &dmp); else if (strcmp(ws.ws_wordv[i], "vars") == 0) dump_vars(req, "vars", &dmp); else logmsg(LOG_ERR, _("unknown keyword: %s"), ws.ws_wordv[i]); } if (dmp.indent) fputc('\n', fp); fputc('}', fp); fputc('\n', fp); wordsplit_free(&ws); } �������������������������������������������������������������������������������rush-2.4/src/config.c�������������������������������������������������������������������������������0000644�0001750�0001750�00000074140�14643176120�014540� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* This file is part of GNU Rush. Copyright (C) 2008-2024 Sergey Poznyakoff GNU Rush is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GNU Rush is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. */ #include <rush.h> #include <sys/socket.h> #include <netinet/in.h> #include <sys/un.h> #include <netdb.h> #include <arpa/inet.h> #include <cf.h> static char * skipws(char *p) { while (*p && ISWS(*p)) p++; return p; } static char * eow(char *p) { while (*p && !ISWS(*p)) p++; return p; } static int parsegid(char *val, gid_t *pgid) { struct group *grp; if (isdigit(val[0])) { char *p; unsigned long n = strtoul(val, &p, 10); if (*p == 0) { *pgid = n; return 0; } } grp = getgrnam(val); if (!grp) return 1; *pgid = grp->gr_gid; return 0; } static int parseuid(char *val, uid_t *puid) { struct passwd *pwd; if (isdigit(val[0])) { char *p; unsigned long n = strtoul(val, &p, 10); if (*p == 0) { *puid = n; return 0; } } pwd = getpwnam(val); if (!pwd) return 1; *puid = pwd->pw_uid; return 0; } struct input_buf { CFSTREAM *cf; struct cfloc loc; struct input_buf *next; }; typedef struct input_buf *input_buf_ptr; void init_input_buf(input_buf_ptr *ibufptr, input_buf_ptr next, CFSTREAM *cf, char const *filename, int line) { input_buf_ptr ibuf; ibuf = xcalloc(1, sizeof(*ibuf)); ibuf->cf = cf; ibuf->loc.beg.filename = xstrdup(filename); ibuf->loc.beg.line = line; ibuf->next = next; *ibufptr = ibuf; } void free_input_buf(input_buf_ptr *ibufptr) { if (ibufptr && *ibufptr) { input_buf_ptr ibuf = *ibufptr; cfstream_close(ibuf->cf); /* FIXME: We cannot free ibuf->loc.beg.file, because it is stored in rule->tag. Need a hash table for it. */ free(ibuf); *ibufptr = NULL; } } static char * read_line_plain(input_buf_ptr ibuf, char **pbuf, size_t *psize) { char *buf = NULL; size_t size = 0; size_t len = 0; int c; while (1) { c = cfstream_getc(ibuf->cf); if (c == 0) break; if (len == size) buf = x2realloc(buf, &size); buf[len] = c; if (c == '\n') { ibuf->loc.beg.line++; if (len > 0 && buf[len-1] == '\\') { len--; } else break; } else len++; } if (buf) { if (len == size) buf = x2realloc(buf, &size); buf[len] = 0; } *pbuf = buf; *psize = len; return buf; } static char * read_line(input_buf_ptr *ibufptr, char **pbuf, size_t *psize) { do { char *p = read_line_plain(*ibufptr, pbuf, psize); if (p) return p; else { input_buf_ptr next = (*ibufptr)->next; debug(3, _("Finished parsing %s"), (*ibufptr)->loc.beg.filename); free_input_buf(ibufptr); *ibufptr = next; if (next) debug(3, _("Resuming parsing %s from line %d"), next->loc.beg.filename, next->loc.beg.line); } } while (*ibufptr); return NULL; } static int unquote_char (int c) { char *p; static char quotetab[] = "\\\\a\ab\bf\fn\nr\rt\t"; for (p = quotetab; *p; p += 2) if (*p == c) return p[1]; return c; } static char * copy_string(const char *src) { char *p; size_t len = strlen(src); char *dest; int add_nl = len > 0 && src[len-1] != '\n'; dest = xmalloc(len + (add_nl ? 1 : 0) + 1); for (p = dest; *src; ) { char c = *src++; if (c == '\\' && *src) c = unquote_char(*src++); *p++ = c; } if (add_nl) *p++ = '\n'; *p = 0; return dest; } int parse_cmp_op(enum cmp_op *op, char **pstr) { char *str = *pstr; if (*str == '=') { if (*++str == '=') str++; *op = cmp_eq; } else if (*str == '!') { if (*++str == '=') str++; *op = cmp_ne; } else if (*str == '>') { if (*++str == '=') { str++; *op = cmp_ge; } else *op = cmp_gt; } else if (*str == '<') { if (*++str == '=') { str++; *op = cmp_le; } else *op = cmp_lt; } else if (c_isascii(*str) && c_isdigit(*str)) *op = cmp_eq; else return 1; str = skipws(str); *pstr = str; return 0; } static char * _parse_negation(struct test_node **pnode, char *val) { if (val[0] == '!' && val[1] != '=') { struct test_node *neg = new_test_node(test_not); neg->v.arg[0] = *pnode; *pnode = neg; val = skipws(val + 1); } return val; } static int numstrtonum(input_buf_ptr ibuf, char *val, struct test_node *node) { char *q; node->v.cmp.rarg.num = strtoul(val, &q, 10); if (*q) { cferror(&ibuf->loc, _("invalid number: %s"), val); return 1; } return 0; } int parse_numtest(input_buf_ptr ibuf, struct test_node *numtest, char *val, int (*valtonum)(input_buf_ptr, char *, struct test_node *)) { if (parse_cmp_op(&numtest->v.cmp.op, &val) && val[strcspn(val, " \t")]) { cferror(&ibuf->loc, "%s", _("invalid opcode")); return 1; } return valtonum(ibuf, val, numtest); } struct stmt_env { char *kw; /* Keyword (with the index, if specified) */ char *val; /* Value */ int argc; /* Number of arguments (if TOK_ARGN) */ char **argv; /* Parsed out value */ int index; /* Index, if given */ int progmod; /* Modify program name */ struct test_node *node;/* New node */ input_buf_ptr ret_buf; /* Return input buffer, for TOK_NEWBUF */ }; void regexp_error(input_buf_ptr ibuf, regex_t *regex, int rc) { char errbuf[512]; regerror(rc, regex, errbuf, sizeof(errbuf)); cferror(&ibuf->loc, _("invalid regexp: %s"), errbuf); } static int _parse_re_flags(input_buf_ptr ibuf, struct rush_rule *rule, struct stmt_env *env) { int fc = env->argc, i; char **fv = env->argv; for (i = 0; i < fc; i++) { int enable, flag; char *p = fv[i]; switch (*p) { case '+': p++; enable = 1; break; case '-': p++; enable = 0; break; default: enable = 1; } if (strcmp(p, "extended") == 0) flag = REG_EXTENDED; else if (strcmp(p, "basic") == 0) { flag = REG_EXTENDED; enable = !enable; } else if (strcmp(p, "icase") == 0 || strcmp(p, "ignore-case") == 0) flag = REG_ICASE; else { cferror(&ibuf->loc, _("unknown regexp flag: %s"), p); return 1; } if (enable) re_flags |= flag; else re_flags &= ~flag; } return 0; } static int check_argc(input_buf_ptr ibuf, struct stmt_env *env, int min, int max) { if (env->argc < min) { cferror(&ibuf->loc, "%s", _("too few arguments")); return 1; } if (env->argc > max) { cferror(&ibuf->loc, "%s", _("too many arguments")); return 1; } return 0; } static int _parse_command(input_buf_ptr ibuf, struct rush_rule *rule, struct stmt_env *env) { int rc; struct test_node *node; const char *val; node = new_test_node(test_cmps); val = _parse_negation(&node, env->val); rc = regcomp(&node->v.cmp.rarg.rx, val, re_flags); if (rc) regexp_error(ibuf, &node->v.cmp.rarg.rx, rc); else { node->v.cmp.op = cmp_match; node->v.cmp.larg = "$command"; } env->node = node; return rc; } static int _parse_match(input_buf_ptr ibuf, struct rush_rule *rule, struct stmt_env *env) { struct test_node *node; int rc; const char *val; node = new_test_node(test_cmps); val = _parse_negation(&node, env->val); rc = regcomp(&node->v.cmp.rarg.rx, val, re_flags); if (rc) regexp_error(ibuf, &node->v.cmp.rarg.rx, rc); else { char buf[INT_BUFSIZE_BOUND(uintmax_t)]; char *p = umaxtostr(env->index, buf); node->v.cmp.larg = xmalloc(strlen(p) + 4); strcpy(node->v.cmp.larg, "${"); strcat(node->v.cmp.larg, p); strcat(node->v.cmp.larg, "}"); node->v.cmp.op = cmp_match; } env->node = node; return rc; } static int _parse_argc(input_buf_ptr ibuf, struct rush_rule *rule, struct stmt_env *env) { char *val; struct test_node *node = new_test_node(test_cmpn); env->node = node; val = _parse_negation(&env->node, env->val); node->v.cmp.larg = "$#"; return parse_numtest(ibuf, node, val, numstrtonum); } static int uidtonum(input_buf_ptr ibuf, char *str, struct test_node *node) { uid_t uid; if (parseuid(str, &uid)) { cferror(&ibuf->loc, _("no such user: %s"), str); return 1; } node->v.cmp.rarg.num = uid; return 0; } static int _parse_uid(input_buf_ptr ibuf, struct rush_rule *rule, struct stmt_env *env) { char *val; struct test_node *node = new_test_node(test_cmpn); env->node = node; val = _parse_negation(&env->node, env->val); node->v.cmp.larg = "$uid"; return parse_numtest(ibuf, node, val, uidtonum); } static int gidtonum(input_buf_ptr ibuf, char *str, struct test_node *node) { gid_t gid; if (parsegid(str, &gid)) { cferror(&ibuf->loc, _("no such group: %s"), str); return 1; } node->v.cmp.rarg.num = gid; return 0; } static int _parse_gid(input_buf_ptr ibuf, struct rush_rule *rule, struct stmt_env *env) { char *val; struct test_node *node = new_test_node(test_cmpn); env->node = node; val = _parse_negation(&env->node, env->val); node->v.cmp.larg = "$gid"; return parse_numtest(ibuf, node, val, gidtonum); } static int _parse_user(input_buf_ptr ibuf, struct rush_rule *rule, struct stmt_env *env) { char *val; struct test_node *node; if (env->argc == 1) { node = new_test_node(test_cmps); val = _parse_negation(&node, env->val); node->v.cmp.op = cmp_eq; node->v.cmp.larg = "$user"; node->v.cmp.rarg.str = xstrdup(val); } else { size_t i; node = new_test_node(test_in); val = _parse_negation(&node, env->argv[0]); node->v.cmp.op = cmp_in; node->v.cmp.larg = "$user"; node->v.cmp.rarg.strv = xcalloc(env->argc + 1, sizeof node->v.cmp.rarg.strv[0]); node->v.cmp.rarg.strv[0] = xstrdup(val); for (i = 1; i < env->argc; i++) node->v.cmp.rarg.strv[i] = xstrdup(env->argv[i]); node->v.cmp.rarg.strv[i] = NULL; } env->node = node; return 0; } static int _parse_group(input_buf_ptr ibuf, struct rush_rule *rule, struct stmt_env *env) { char *val; struct test_node *node; size_t i; node = new_test_node(test_group); val = _parse_negation(&node, env->argv[0]); node->v.groups = xcalloc(env->argc + 1, sizeof node->v.groups[0]); node->v.groups[0] = xstrdup(val); for (i = 1; i < env->argc; i++) node->v.groups[i] = xstrdup(env->argv[i]); node->v.groups[i] = NULL; env->node = node; return 0; } static int _parse_umask(input_buf_ptr ibuf, struct rush_rule *rule, struct stmt_env *env) { return attrib_umask(rule, env->val, &ibuf->loc); } static int _parse_chroot(input_buf_ptr ibuf, struct rush_rule *rule, struct stmt_env *env) { return attrib_chroot(rule, env->val, &ibuf->loc); } static int _parse_limits(input_buf_ptr ibuf, struct rush_rule *rule, struct stmt_env *env) { char *q; if (parse_limits(&rule->limits, env->val, &q)) { cferror(&ibuf->loc, _("unknown limit: %s"), q); return 1; } return 0; } static struct transform_node * _parse_transform_common(input_buf_ptr ibuf, struct rush_rule *rule, struct stmt_env *env) { struct transform_node *node; char *expr; if (check_argc(ibuf, env, 1, 3)) return NULL; else if (env->argc == 3 && strcmp(env->argv[1], "~")) { cferror(&ibuf->loc, _("expected ~ as the second argument, but found %s"), env->argv[2]); return NULL; } node = new_transform_node(rule, transform_set); switch (env->argc) { case 1: expr = env->argv[0]; break; case 2: expr = env->argv[1]; break; case 3: expr = env->argv[2]; break; default: abort(); } node->v.xf.trans = compile_transform_expr(expr, re_flags, &ibuf->loc); if (env->argc > 1) node->v.xf.pattern = xstrdup(env->argv[0]); else node->v.xf.pattern = NULL; return node; } static int _parse_transform(input_buf_ptr ibuf, struct rush_rule *rule, struct stmt_env *env) { struct transform_node *node = _parse_transform_common(ibuf, rule, env); if (!node) return 1; node->target.type = target_command; return 0; } static int _parse_transform_ar(input_buf_ptr ibuf, struct rush_rule *rule, struct stmt_env *env) { struct transform_node *node = _parse_transform_common(ibuf, rule, env); if (!node) return 1; if (env->progmod) node->target.type = target_program; else { node->target.type = target_arg; node->target.v.arg.ins = 0; node->target.v.arg.idx = env->index; } return 0; } static int _parse_chdir(input_buf_ptr ibuf, struct rush_rule *rule, struct stmt_env *env) { return attrib_chdir(rule, env->val, &ibuf->loc); } static int _parse_env(input_buf_ptr ibuf, struct rush_rule *rule, struct stmt_env *env) { size_t i = 0; if (strcmp(env->argv[0], "-") == 0) { rule->clrenv = 1; i++; } for (; i < env->argc; i++) { char *name = env->argv[i]; size_t len = strcspn(name, "="); char *value; size_t vlen; char *mem = NULL; size_t msize = 0; enum envar_type type; if (name[0] == '-') { /* Unset directive */ name++; len--; if (name[len]) { value = name + len + 1; vlen = strlen(value); } else { value = NULL; vlen = 0; } type = envar_unset; } else if (name[len]) { if (len == 0) /* Skip erroneous entry */ continue; value = name + len + 1; vlen = strlen(value); name[len] = 0; if (name[len-1] == '+') { name[--len] = 0; if (c_ispunct(value[0])) { msize = 2*len + 9 + vlen + 1; mem = xmalloc(msize); snprintf(mem, msize, "${%s:-}${%s+%c}%s", name, name, value[0], value + 1); } else { msize = len + vlen + 6; snprintf(mem, msize, "${%s:-}%s", name, value); } value = mem; vlen = strlen(value); } else if (value[0] == '+') { value++; vlen--; if (vlen > 0 && c_ispunct(value[vlen-1])) { int c = value[vlen-1]; value[--vlen] = 0; msize = 2*len + 10 + vlen + 1; mem = xmalloc(msize); snprintf(mem, msize, "%s${%s+%c}${%s:-}", value, name, c, name); } else { msize = len + vlen + 6; snprintf(mem, msize, "%s${%s:-}", value, name); } value = mem; vlen = strlen(value); } type = envar_set; } else { value = NULL; vlen = 0; type = envar_keep; } new_envar(rule, name, len, value, vlen, type); free(mem); } return 0; } /* Global statements */ static int _parse_debug(input_buf_ptr ibuf, struct rush_rule *rule, struct stmt_env *env) { if (!debug_option) { debug_level = strtoul(env->val, NULL, 0); debug(0, _("debug level set to %d"), debug_level); } return 0; } static int _parse_sleep_time(input_buf_ptr ibuf, struct rush_rule *rule, struct stmt_env *env) { char *q; sleep_time = strtoul(env->val, &q, 10); if (*q) { cferror(&ibuf->loc, _("invalid time: %s"), env->val); return 1; } return 0; } static int _parse_usage_error(input_buf_ptr ibuf, struct rush_rule *rule, struct stmt_env *env) { set_error_msg(usage_error, copy_string(env->val)); return 0; } static int _parse_nologin_error(input_buf_ptr ibuf, struct rush_rule *rule, struct stmt_env *env) { set_error_msg(nologin_error, copy_string(env->val)); return 0; } static int _parse_config_error(input_buf_ptr ibuf, struct rush_rule *rule, struct stmt_env *env) { set_error_msg(config_error, copy_string(env->val)); return 0; } static int _parse_system_error(input_buf_ptr ibuf, struct rush_rule *rule, struct stmt_env *env) { set_error_msg(system_error, copy_string(env->val)); return 0; } static int _parse_fall_through(input_buf_ptr ibuf, struct rush_rule *rule, struct stmt_env *env RUSH_ARG_UNUSED) { rule->fall_through = 1; return 0; } static int _parse_exit(input_buf_ptr ibuf, struct rush_rule *rule, struct stmt_env *env) { const char *val = env->val; int error_fd; if (c_isdigit(val[0])) { char *p; unsigned long n = strtoul(val, &p, 10); if (!ISWS(p[0]) || n > getmaxfd()) { cferror(&ibuf->loc, "%s", _("invalid file descriptor")); return 1; } val = skipws(p); error_fd = n; } else error_fd = 2; if (val[0] == '@') { if (val[1] == '@') rule->error = new_error(error_fd, val + 1, 1); else { int n = string_to_error_index(val + 1); if (n == -1) { cferror(&ibuf->loc, "%s", _("Unknown message reference")); return 1; } rule->error = new_standard_error(error_fd, n); } } else rule->error = new_error(error_fd, val, 1); return 0; } static int _parse_fork(input_buf_ptr ibuf, struct rush_rule *rule, struct stmt_env *env) { return attrib_fork(rule, env->val, &ibuf->loc); } static int _parse_acct(input_buf_ptr ibuf, struct rush_rule *rule, struct stmt_env *env) { return attrib_acct(rule, env->val, &ibuf->loc); } static int _parse_acct_file_mode(input_buf_ptr ibuf, struct rush_rule *rule, struct stmt_env *env) { return parse_file_mode(env->val, &rushdb_file_mode, &ibuf->loc); } static int _parse_acct_dir_mode(input_buf_ptr ibuf, struct rush_rule *rule, struct stmt_env *env) { return parse_file_mode(env->val, &rushdb_dir_mode, &ibuf->loc); } static int _parse_acct_umask(input_buf_ptr ibuf, struct rush_rule *rule, struct stmt_env *env) { return parse_file_mode(env->val, &rushdb_umask, &ibuf->loc); } static int _parse_post_socket(input_buf_ptr ibuf, struct rush_rule *rule, struct stmt_env *env) { return attrib_post_socket(rule, env->val, &ibuf->loc); } static int _parse_text_domain(input_buf_ptr ibuf, struct rush_rule *rule, struct stmt_env *env) { rule->i18n.text_domain = xstrdup(env->val); return 0; } static int _parse_locale_dir(input_buf_ptr ibuf, struct rush_rule *rule, struct stmt_env *env) { rule->i18n.localedir = xstrdup(env->val); return 0; } static int _parse_locale(input_buf_ptr ibuf, struct rush_rule *rule, struct stmt_env *env) { const char *val; if (strcmp(env->val, "\"\"") == 0) val = ""; else val = env->val; rule->i18n.locale = xstrdup(val); return 0; } static int _parse_include(input_buf_ptr ibuf, struct rush_rule *rule, struct stmt_env *env) { char *name; struct stat st; CFSTREAM *cf; name = expand_tilde(env->val, rush_pw->pw_dir); if (trimslash(name) == 0) { cferror(&ibuf->loc, "%s", _("invalid include file name")); free(name); return 1; } if (stat(name, &st)) { if (errno == ENOENT) { debug(1, _("Ignoring non-existing include file %s"), name); free(name); env->ret_buf = NULL; return 0; } cferror(&ibuf->loc, _("cannot stat file %s: %s"), name, strerror(errno)); free(name); return 1; } if (S_ISDIR(st.st_mode)) { char *file = make_file_name(name, rush_pw->pw_name); free(name); if (access(file, F_OK)) { return 0; } name = file; } cf = cfstream_open_file(name); init_input_buf(&env->ret_buf, ibuf, cf, name, 1); free(name); return 0; } static int _parse_include_security(input_buf_ptr ibuf, struct rush_rule *rule, struct stmt_env *env) { int i; int rc = 0; for (i = 0; i < env->argc; i++) { if (cfck_keyword(env->argv[i])) { cferror(&ibuf->loc, _("unknown keyword: %s"), env->argv[i]); rc++; } } return rc; } static int _parse_interactive(input_buf_ptr ibuf, struct rush_rule *rule, struct stmt_env *env) { rule->interactive = 1; return 0; } /* 0 1 2 3 4 5 map[N] FILE DELIM KEY FIELD FIELD [DEFAULT] map[0] /etc/rush/shells : ${user} 1 2 default */ static int _parse_map_ar(input_buf_ptr ibuf, struct rush_rule *rule, struct stmt_env *env) { struct transform_node *node; unsigned long n; char *p; if (check_argc(ibuf, env, 5, 6)) return 1; node = new_transform_node(rule, transform_map); if (env->progmod) node->target.type = target_program; else { node->target.type = target_arg; node->target.v.arg.ins = 0; node->target.v.arg.idx = env->index; } node->v.map.file = xstrdup(env->argv[0]); node->v.map.delim = xstrdup(env->argv[1]); node->v.map.key = xstrdup(env->argv[2]); n = node->v.map.key_field = strtoul(env->argv[3], &p, 10); if (*p || n != node->v.map.key_field) { cferror(&ibuf->loc, "%s", _("key field is not a number")); return 1; } n = node->v.map.val_field = strtoul(env->argv[4], &p, 10); if (*p || n != node->v.map.val_field) { cferror(&ibuf->loc, "%s", _("value field is not a number")); return 1; } if (env->argc == 6) node->v.map.defval = xstrdup(env->argv[5]); return 0; } static int _parse_delete_ar(input_buf_ptr ibuf, struct rush_rule *rule, struct stmt_env *env) { struct transform_node *node = new_transform_node(rule, transform_delete); node->target.type = target_arg; node->target.v.arg.ins = 0; node->target.v.arg.idx = env->index; node->v.arg_end = env->index; return 0; } static int get_arg_index(char *str, char **end) { if (*str == '$') { *end = str + 1; return -1; } return strtol(str, end, 10); } static int _parse_delete(input_buf_ptr ibuf, struct rush_rule *rule, struct stmt_env *env) { struct transform_node *node; int from, to; char *p; if (check_argc(ibuf, env, 2, 2)) return 1; from = get_arg_index(env->argv[0], &p); if (*p) { cferror(&ibuf->loc, _("%s: not a number"), env->argv[0]); return 1; } to = get_arg_index(env->argv[1], &p); if (*p) { cferror(&ibuf->loc, _("%s: not a number"), env->argv[1]); return 1; } node = new_transform_node(rule, transform_delete); node->target.type = target_arg; node->target.v.arg.ins = 0; node->target.v.arg.idx = from; node->v.arg_end = to; return 0; } static int _parse_set(input_buf_ptr ibuf, struct rush_rule *rule, struct stmt_env *env) { struct transform_node *node = new_transform_node(rule, transform_set); node->target.type = target_command; node->v.xf.pattern = xstrdup(env->val); node->v.xf.trans = NULL; return 0; } static int _parse_set_ar(input_buf_ptr ibuf, struct rush_rule *rule, struct stmt_env *env) { struct transform_node *node = new_transform_node(rule, transform_set); if (env->progmod) node->target.type = target_program; else { node->target.type = target_arg; node->target.v.arg.ins = 0; node->target.v.arg.idx = env->index; } node->v.xf.pattern = xstrdup(env->val); node->v.xf.trans = NULL; return 0; } static int _parse_setvar(input_buf_ptr ibuf, struct rush_rule *rule, struct stmt_env *env) { struct transform_node *node = new_transform_node(rule, transform_set); node->target.type = target_var; node->target.v.name = xstrdup(env->argv[0]); node->v.xf.pattern = xstrdup(env->argv[1]); node->v.xf.trans = NULL; return 0; } static int _parse_unsetvar(input_buf_ptr ibuf, struct rush_rule *rule, struct stmt_env *env) { struct transform_node *node = new_transform_node(rule, transform_delete); node->target.type = target_var; node->target.v.name = xstrdup(env->argv[0]); return 0; } static int _parse_newgroup(input_buf_ptr ibuf, struct rush_rule *rule, struct stmt_env *env) { if (parsegid(env->val, &rule->gid)) { cferror(&ibuf->loc, _("no such group: %s"), env->val); return 1; } return 0; } #define TOK_NONE 0x000 /* No flags */ #define TOK_ARG 0x001 /* Token requires an argument */ #define TOK_ARGN 0x002 /* Token requires one or more arguments */ #define TOK_IND 0x004 /* Token must be followed by an index */ #define TOK_RUL 0x008 /* Token is valid only within a rule */ #define TOK_NEWBUF 0x010 /* Token may create new input buffer */ #define TOK_CRT 0x024 /* Index after the token may contain ^ */ #define TOK_SED 0x042 /* Arguments contain sed-exprs */ #define TOK_ENV 0x080 /* Expand environment variables */ #define TOK_ASSC 0x104 /* Token must be followed by associative index */ #define TOK_DFL TOK_ARG|TOK_RUL #define TOK_DFLN TOK_ARGN|TOK_RUL struct token { char *name; size_t namelen; int flags; int (*parser) (input_buf_ptr, struct rush_rule *, struct stmt_env *); }; struct token toktab[] = { #define KW(s) s, sizeof(s)-1 { KW("command"), TOK_DFL, _parse_command }, { KW("match"), TOK_DFL|TOK_IND, _parse_match }, { KW("argc"), TOK_DFL, _parse_argc }, { KW("uid"), TOK_DFL, _parse_uid }, { KW("gid"), TOK_DFL, _parse_gid }, { KW("user"), TOK_DFLN, _parse_user }, { KW("group"), TOK_DFLN, _parse_group }, { KW("transform"), TOK_DFL|TOK_SED, _parse_transform }, { KW("transform"), TOK_DFL|TOK_IND|TOK_SED|TOK_CRT, _parse_transform_ar }, { KW("map"), TOK_RUL|TOK_ARGN|TOK_IND|TOK_CRT, _parse_map_ar }, { KW("delete"), TOK_RUL|TOK_IND, _parse_delete_ar }, { KW("delete"), TOK_RUL|TOK_ARGN, _parse_delete }, { KW("set"), TOK_DFL, _parse_set }, { KW("set"), TOK_DFL|TOK_IND|TOK_CRT, _parse_set_ar }, { KW("setvar"), TOK_RUL|TOK_ARG|TOK_ASSC, _parse_setvar }, { KW("unsetvar"), TOK_RUL|TOK_ASSC, _parse_unsetvar }, { KW("umask"), TOK_DFL, _parse_umask }, { KW("chroot"), TOK_DFL, _parse_chroot }, { KW("limits"), TOK_DFL, _parse_limits }, { KW("chdir"), TOK_DFL, _parse_chdir }, { KW("env"), TOK_DFLN|TOK_ENV, _parse_env }, { KW("fork"), TOK_DFL, _parse_fork }, { KW("acct"), TOK_DFL, _parse_acct }, { KW("post-socket"), TOK_DFL, _parse_post_socket }, { KW("text-domain"), TOK_DFL, _parse_text_domain }, { KW("locale-dir"), TOK_DFL, _parse_locale_dir }, { KW("locale"), TOK_DFL, _parse_locale }, { KW("include"), TOK_ARG|TOK_NEWBUF, _parse_include }, { KW("fall-through"), TOK_RUL, _parse_fall_through }, { KW("exit"), TOK_RUL, _parse_exit }, { KW("debug"), TOK_ARG, _parse_debug }, { KW("sleep-time"), TOK_ARG, _parse_sleep_time }, { KW("usage-error"), TOK_ARG, _parse_usage_error }, { KW("nologin-error"), TOK_ARG, _parse_nologin_error }, { KW("config-error"), TOK_ARG, _parse_config_error }, { KW("system-error"), TOK_ARG, _parse_system_error }, { KW("regexp"), TOK_ARGN, _parse_re_flags }, { KW("include-security"), TOK_ARGN, _parse_include_security }, { KW("interactive"), TOK_RUL, _parse_interactive }, { KW("acct-file-mode"), TOK_ARG, _parse_acct_file_mode }, { KW("acct-dir-mode"), TOK_ARG, _parse_acct_dir_mode }, { KW("acct-umask"), TOK_ARG, _parse_acct_umask }, { KW("newgroup"), TOK_DFL, _parse_newgroup }, { KW("newgrp"), TOK_DFL, _parse_newgroup }, { NULL } #undef KW }; struct token * find_token(const char *name, int *plen) { struct token *tok; int len = strcspn(name, "["); for (tok = toktab; tok->name; tok++) { if (len == tok->namelen && strncmp(tok->name, name, len) == 0 && (name[len] == 0 ? (tok->flags & TOK_IND) == 0 : (tok->flags & TOK_IND))) { *plen = len; return tok; } } return NULL; } int parse_input_buf(input_buf_ptr ibuf) { char *buf = NULL; size_t size = 0; int err = 0; struct rush_rule *rule = NULL; debug(3, _("Parsing %s"), ibuf->loc.beg.filename); while (read_line(&ibuf, &buf, &size)) { char *kw, *val; char *p; struct token *tok; int len; int rc; struct stmt_env env; memset(&env, 0, sizeof env); p = skipws(buf); debug(3, "%s:%d: %s", ibuf->loc.beg.filename, ibuf->loc.beg.line, p); if (p[0] == 0 || p[0] == '#') continue; kw = p; p = eow(kw); if (p[0]) { *p++ = 0; val = skipws(p); trimws(val); } else val = NULL; if (strcmp(kw, "rule") == 0) { rule = new_rush_rule(val); rule->file = ibuf->loc.beg.filename; rule->line = ibuf->loc.beg.line; continue; } tok = find_token(kw, &len); if (!tok) { cferror(&ibuf->loc, _("unknown statement: %s"), kw); err = 1; continue; } env.kw = kw; env.val = val; kw += len; if (tok->flags & TOK_IND) { char *q; if ((tok->flags & TOK_ASSC) == TOK_ASSC) { q = strchr(kw + 1, ']'); if (q) { size_t len = q - kw - 1; env.argc = 2; env.argv = xcalloc(env.argc + 1, sizeof(env.argv[0])); env.argv[0] = xmalloc(len + 1); memcpy(env.argv[0], kw + 1, len); env.argv[0][len] = 0; env.argv[1] = env.val ? xstrdup(env.val) : NULL; } /* else: handled below */ } else if (kw[1] == '$') { env.index = -1; q = kw + 2; } else if (tok->flags & TOK_CRT && kw[1] == '^') { env.progmod = 1; q = kw + 2; } else env.index = strtol(kw + 1, &q, 10); if (*q != ']') { cferror(&ibuf->loc, "%s", _("missing ]")); err = 1; continue; } } if (tok->flags & (TOK_ARG | TOK_ARGN) && !(val && *val)) { cferror(&ibuf->loc, "%s", _("invalid statement: missing value")); err = 1; continue; } if (tok->flags & TOK_ARGN) { int flags = WRDSF_DEFFLAGS|WRDSF_COMMENT; struct wordsplit ws; if (tok->flags & TOK_SED) flags |= WRDSF_SED_EXPR; if (tok->flags & TOK_ENV) { flags &= ~WRDSF_NOVAR; flags |= WRDSF_ENV; ws.ws_env = (const char **) environ; } ws.ws_comment = "#"; if (wordsplit(val, &ws, flags)) { cferror(&ibuf->loc, _("failed to parse value: %s"), wordsplit_strerror(&ws)); err = 1; continue; } env.argc = ws.ws_wordc; env.argv = ws.ws_wordv; ws.ws_wordc = 0; ws.ws_wordv = NULL; wordsplit_free(&ws); } if (tok->flags & TOK_RUL) { if (!rule) { cferror(&ibuf->loc, "%s", _("statement cannot be used outside a rule")); err = 1; continue; } } rc = tok->parser(ibuf, rule, &env); err |= rc; if (rc == 0) { if (tok->flags & TOK_NEWBUF && env.ret_buf) { env.ret_buf->next = ibuf; ibuf = env.ret_buf; debug(3, _("Parsing %s"), ibuf->loc.beg.filename); } if (env.node) { if (rule->test_node) { struct test_node *np = new_test_node(test_and); np->v.arg[0] = rule->test_node; np->v.arg[1] = env.node; rule->test_node = np; } else rule->test_node = env.node; } } if (tok->flags & (TOK_ARGN|TOK_ASSC)) argcv_free(env.argc, env.argv); } free(buf); return err; } int cfparse_old(CFSTREAM *cf, char const *filename, int line) { input_buf_ptr buf; if (strcmp (filename, "<built-in>") == 0) { logmsg(LOG_NOTICE, _("parsing legacy built-in configuration")); } else { logmsg(LOG_NOTICE, _("parsing legacy configuration file %s"), filename); } init_input_buf(&buf, NULL, cf, filename, line - 1); return parse_input_buf(buf); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/src/cfgram.h�������������������������������������������������������������������������������0000644�0001750�0001750�00000010474�14201271741�014532� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A Bison parser, made by GNU Bison 3.0.4. */ /* Bison interface for Yacc-like parsers in C Copyright (C) 1984, 1989-1990, 2000-2015 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_CFGRAM_H_INCLUDED # define YY_YY_CFGRAM_H_INCLUDED /* Debug traces. */ #ifndef YYDEBUG # define YYDEBUG 1 #endif #if YYDEBUG extern int yydebug; #endif /* Token type. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE enum yytokentype { STRING = 258, IDENT = 259, NUMBER = 260, RUSH = 261, T_VERSION = 262, RULE = 263, GLOBAL = 264, EOL = 265, SET = 266, INSERT = 267, REMOPT = 268, MAP = 269, UNSET = 270, MATCH = 271, FALLTHROUGH = 272, INCLUDE = 273, LIMITS = 274, CLRENV = 275, SETENV = 276, UNSETENV = 277, KEEPENV = 278, EVALENV = 279, DELETE = 280, EXIT = 281, ATTRIB = 282, GLATTRIB = 283, BOGUS = 284, OR = 285, AND = 286, NOT = 287, EQ = 288, NE = 289, LT = 290, LE = 291, GT = 292, GE = 293, XF = 294, NM = 295, IN = 296, GROUP = 297, TEST = 298 }; #endif /* Tokens. */ #define STRING 258 #define IDENT 259 #define NUMBER 260 #define RUSH 261 #define T_VERSION 262 #define RULE 263 #define GLOBAL 264 #define EOL 265 #define SET 266 #define INSERT 267 #define REMOPT 268 #define MAP 269 #define UNSET 270 #define MATCH 271 #define FALLTHROUGH 272 #define INCLUDE 273 #define LIMITS 274 #define CLRENV 275 #define SETENV 276 #define UNSETENV 277 #define KEEPENV 278 #define EVALENV 279 #define DELETE 280 #define EXIT 281 #define ATTRIB 282 #define GLATTRIB 283 #define BOGUS 284 #define OR 285 #define AND 286 #define NOT 287 #define EQ 288 #define NE 289 #define LT 290 #define LE 291 #define GT 292 #define GE 293 #define XF 294 #define NM 295 #define IN 296 #define GROUP 297 #define TEST 298 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED union YYSTYPE { #line 37 "cfgram.y" /* yacc.c:1909 */ char *str; struct cfnumber num; int intval; regex_t regex; struct rush_rule rule; struct test_node *node; struct strlist { char **argv; size_t argc; } strlist; struct { int start; int end; } range; struct asgn *asgn; struct { struct asgn *head; struct asgn *tail; } asgn_list; struct limits_rec *lrec; rule_attrib_setter_t attrib; struct global_attrib *global_attrib; struct argval *arg; struct { int argc; struct argval *head; struct argval *tail; } arglist; struct { unsigned major, minor; } version; int fstest; #line 173 "cfgram.h" /* yacc.c:1909 */ }; typedef union YYSTYPE YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define YYSTYPE_IS_DECLARED 1 #endif /* Location type. */ #if ! defined YYLTYPE && ! defined YYLTYPE_IS_DECLARED typedef struct YYLTYPE YYLTYPE; struct YYLTYPE { int first_line; int first_column; int last_line; int last_column; }; # define YYLTYPE_IS_DECLARED 1 # define YYLTYPE_IS_TRIVIAL 1 #endif extern YYSTYPE yylval; extern YYLTYPE yylloc; int yyparse (void); #endif /* !YY_YY_CFGRAM_H_INCLUDED */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/src/rlopt.opt������������������������������������������������������������������������������0000644�0001750�0001750�00000003447�14643176121�015016� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* This file is part of GNU Rush. Copyright (C) 2008-2024 Sergey Poznyakoff GNU Rush is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GNU Rush is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. */ static int numeric_option; define([<OPTSETUP>],[<numeric_option = 0>]) OPTIONS_BEGIN(gnu, "rushlast", [<rushlast - show listing of last Rush logins.>], [<[user [user...]]>]) OPTION(format,F,STRING, [<Use STRING instead of the default format.>]) BEGIN OPTSETUP; format = optarg; END OPTION(file,f,DIR, [<Look for database files in DIR.>]) BEGIN OPTSETUP; base_name = optarg; END OPTION(forward,,, [<Show entries in chronological order.>]) BEGIN OPTSETUP; forward = 1; END OPTION(no-header,H,, [<Do not display header line.>]) BEGIN OPTSETUP; display_header = 0; END OPTION(count,n,NUMBER, [<Show at most NUM records.>]) BEGIN char *p; OPTSETUP; count = strtoul(optarg, &p, 10); if (*p) error(1, 0, _("invalid number (%s)"), optarg); END OPTION(,0,,) ALIAS(,1) ALIAS(,2) ALIAS(,3) ALIAS(,4) ALIAS(,5) ALIAS(,6) ALIAS(,7) ALIAS(,8) ALIAS(,9) BEGIN if (!numeric_option) { count = 0; numeric_option = 1; } count = count * 10 + optchar - '0'; END OPTIONS_END void get_options(int argc, char *argv[]) { GETOPT(argc, argv); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/src/defines.h������������������������������������������������������������������������������0000644�0001750�0001750�00000000201�14655401303�014675� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#define CANONICAL_PROGRAM_NAME "/usr/local/sbin/rush" #define SYSCONFDIR "/usr/local/etc" #define LOCALSTATEDIR "/usr/local/var" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/src/rush.c���������������������������������������������������������������������������������0000644�0001750�0001750�00000104562�14643176121�014257� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* This file is part of GNU Rush. Copyright (C) 2008-2024 Sergey Poznyakoff GNU Rush is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GNU Rush is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. */ #include <rush.h> #include <cf.h> extern char **environ; char *rush_config_file = CONFIG_FILE; int lint_option = 0; int scanner_test = 0; unsigned sleep_time = 5; unsigned debug_level; int debug_option; char *dump_option; int parser_traces; struct rush_rule *rule_head, *rule_tail; struct passwd *rush_pw; #define STDOUT_FILENO 1 #define STDERR_FILENO 2 struct error_msg { char *text; /* Message text */ int custom; /* True, if the message was customized */ }; struct error_msg error_msg[] = { /* usage_error */ { N_("You are not permitted to execute this command.\n" "Contact the systems administrator for further assistance.\n"), }, /* nologin_error */ { N_("You do not have interactive login access to this machine.\n" "Contact the systems administrator for further assistance.\n") }, /* config_error */ { N_("Local configuration error occurred.\n" "Contact the systems administrator for further assistance.\n") }, /* system_error */ { N_("A system error occurred while attempting to execute command.\n" "Contact the systems administrator for further assistance.\n") } }; void set_error_msg(enum error_type type, char *text) { error_msg[type].text = xstrdup(text); error_msg[type].custom = 1; } int string_to_error_index(const char *name) { static const char *error_msg_name[] = { [usage_error] = "usage-error", [nologin_error] = "nologin-error", [config_error] = "config-error", [system_error] = "system-error", NULL }; int i; for (i = 0; error_msg_name[i]; i++) if (strcmp(error_msg_name[i], name) == 0) return i; return -1; } struct rush_error * new_standard_error(int fd, int idx) { struct rush_error *err = xmalloc(sizeof(*err)); err->fd = fd; err->idx = idx; return err; } static inline char * error_text_ptr(struct rush_error const *err) { return (char*)(err + 1); } struct rush_error * new_error(int fd, char const *text, int unescape) { struct rush_error *err; size_t len = strlen(text); int add_nl = len > 0 && text[len-1] != '\n'; int c; char *p; err = xmalloc(sizeof(*err) + strlen(text) + (add_nl ? 1 : 0) + 1); err->fd = fd; err->idx = -1; p = error_text_ptr(err); while ((c = *text++) != 0) { if (unescape && c == '\\' && *text) { int c1 = wordsplit_c_unquote_char(*text); if (c1) c = c1; else c = *text; text++; } *p++ = c; } if (add_nl) *p++ = '\n'; *p = 0; return err; } char const * rush_error_msg(struct rush_error const *err, struct rush_i18n const *i18n) { const char *msg; if (err->idx >= 0) { msg = error_msg[err->idx].text; if (error_msg[err->idx].custom) { /* If it is a customized version, translate it via user-supplied i18n */ if (i18n) msg = user_gettext(i18n->locale, i18n->text_domain, i18n->localedir, msg); } else msg = gettext(msg); } else msg = gettext(error_text_ptr(err)); return msg; } void send_msg(const char *msg, size_t len) { if (write(STDERR_FILENO, msg, len) < 0) { logmsg(LOG_ERR, _("failed to write message to stderr: %s"), strerror(errno)); if (write(STDOUT_FILENO, msg, len) < 0) logmsg(LOG_ERR, _("failed to write message to stdout: %s"), strerror(errno)); } } void vlogmsg(int prio, const char *fmt, va_list ap) { if (lint_option) { fprintf(stderr, "%s: ", program_name); switch (prio) { case LOG_DEBUG: fprintf(stderr, _("Debug: ")); break; case LOG_INFO: fprintf(stderr, _("Info: ")); break; case LOG_NOTICE: fprintf(stderr, _("Notice: ")); break; case LOG_WARNING: fprintf(stderr, _("Warning: ")); break; case LOG_ERR: case LOG_CRIT: case LOG_ALERT: case LOG_EMERG: fprintf(stderr, _("Error: ")); } vfprintf(stderr, fmt, ap); fputs("\n", stderr); } else vsyslog(prio, fmt, ap); } void logmsg(int prio, const char *fmt, ...) { va_list ap; va_start(ap, fmt); vlogmsg(prio, fmt, ap); va_end(ap); } void die(enum error_type type, struct rush_i18n *i18n, const char *fmt, ...) { if (fmt) { va_list ap; va_start(ap, fmt); vlogmsg(LOG_ERR, fmt, ap); va_end(ap); } if (!lint_option) { const char *msg = error_msg[type].text; if (error_msg[type].custom) { /* If it is a customized version, translate it via user-supplied i18n */ if (i18n) msg = user_gettext(i18n->locale, i18n->text_domain, i18n->localedir, msg); } else msg = gettext(msg); send_msg(msg, strlen(msg)); sleep(sleep_time); } exit(1); } void die_usage(struct cfloc const *loc, char const *fmt, ...) { va_list ap; va_start(ap, fmt); vcferror(loc, fmt, ap); va_end(ap); die(usage_error, NULL, NULL); } void xalloc_die() { die(system_error, NULL, _("Not enough memory")); } static rush_bool_t eval_cmpn(struct test_node *node, struct rush_rule *rule, struct rush_request *req) { char *str = rush_expand_string(node->v.cmp.larg, req); char *p; unsigned long n; errno = 0; n = strtoul(str, &p, 0); if (errno || *p) die(system_error, NULL, _("%s: not a number"), str); free(str); switch (node->v.cmp.op) { case cmp_eq: return n == node->v.cmp.rarg.num; case cmp_ne: return n != node->v.cmp.rarg.num; case cmp_lt: return n < node->v.cmp.rarg.num; case cmp_le: return n <= node->v.cmp.rarg.num; case cmp_gt: return n > node->v.cmp.rarg.num; case cmp_ge: return n >= node->v.cmp.rarg.num; default: die(system_error, NULL, _("INTERNAL ERROR at %s:%d: unrecognized opcode %d"), __FILE__, __LINE__, node->v.cmp.op); } } static int eval_regex(struct rush_request *req, regex_t *rx, char const *subj) { int rc; struct rush_backref *bref = &req->backref[!req->backref_cur]; size_t n = rx->re_nsub + 1; if (n > bref->maxmatch) { bref->match = xrealloc(bref->match, sizeof(bref->match[0]) * n); bref->maxmatch = n; } rc = regexec(rx, subj, bref->maxmatch, bref->match, 0); if (rc == 0) { free(bref->subject); bref->subject = xstrdup(subj); bref->nmatch = n; req->backref_cur = !req->backref_cur; } return rc; } static rush_bool_t eval_cmps(struct test_node *node, struct rush_rule *rule, struct rush_request *req) { char *str = rush_expand_string(node->v.cmp.larg, req); rush_bool_t res = rush_false; switch (node->v.cmp.op) { case cmp_eq: res = strcmp(str, node->v.cmp.rarg.str) == 0; break; case cmp_ne: res = strcmp(str, node->v.cmp.rarg.str) != 0; break; case cmp_match: res = ! eval_regex(req, &node->v.cmp.rarg.rx, str); break; default: die(system_error, NULL, _("INTERNAL ERROR at %s:%d: unrecognized opcode %d"), __FILE__, __LINE__, node->v.cmp.op); } free(str); return res; } static rush_bool_t eval_in(struct test_node *node, struct rush_rule *rule, struct rush_request *req) { size_t i; rush_bool_t res = rush_false; char *str = rush_expand_string(node->v.cmp.larg, req); for (i = 0; node->v.cmp.rarg.strv[i]; i++) if (strcmp(str, node->v.cmp.rarg.strv[i]) == 0) { res = rush_true; break; } free(str); return res; } static rush_bool_t groupmember(struct group *grp, struct passwd const *pw) { if (grp) { char **p; if (pw->pw_gid == grp->gr_gid) return rush_true; for (p = grp->gr_mem; *p; p++) { if (strcmp(*p, pw->pw_name) == 0) return rush_true; } } return rush_false; } static rush_bool_t eval_member(struct test_node *node, struct rush_rule *rule, struct rush_request *req) { size_t i; for (i = 0; node->v.groups[i]; i++) { if (groupmember(getgrnam(node->v.groups[i]), req->pw)) return rush_true; } return rush_false; } static rush_bool_t rush_access(struct stat *st, struct rush_request *req, int bit) { if (st->st_mode & bit) return rush_true; bit <<= 3; if ((st->st_mode & bit) && groupmember(getgrgid(st->st_gid), req->pw)) return rush_true; bit <<= 3; if ((st->st_mode & bit) && st->st_uid == req->pw->pw_uid) return rush_true; return rush_false; } static rush_bool_t eval_fstest(struct test_node *node, struct rush_rule *rule, struct rush_request *req) { char *str = rush_expand_string(node->v.fstest.arg, req); struct stat st; if (((node->v.fstest.op == fs_symlink) ? lstat : stat)(str, &st)) { if (errno == ENOENT) { free(str); return rush_false; } die(system_error, &req->i18n, _("%s:%d: %s: can't stat '%s': %s"), rule->file, rule->line, rule->tag, str, strerror(errno)); } free(str); switch (node->v.fstest.op) { case fs_block_special: return S_ISBLK(st.st_mode); case fs_char_special: return S_ISCHR(st.st_mode); case fs_directory: return S_ISDIR(st.st_mode); case fs_exists: return rush_true; case fs_regular: return S_ISREG(st.st_mode); case fs_set_gid: return st.st_mode & S_ISGID; case fs_owner_egid: return st.st_gid == req->pw->pw_gid; case fs_symlink: return S_ISLNK(st.st_mode); case fs_sticky: return st.st_mode & S_ISVTX; case fs_owner_euid: return st.st_uid == req->pw->pw_uid; case fs_pipe: return S_ISFIFO(st.st_mode); case fs_readable: return rush_access(&st, req, 4); case fs_size: return st.st_size > 0; case fs_socket: return S_ISSOCK(st.st_mode); case fs_set_uid: return st.st_mode & S_ISUID; case fs_writable: return rush_access(&st, req, 2); case fs_executable: return rush_access(&st, req, 1); default: die(system_error, NULL, _("INTERNAL ERROR at %s:%d: unrecognized operation %d"), __FILE__, __LINE__, node->v.fstest.op); } } rush_bool_t test_eval(struct test_node *node, struct rush_rule *rule, struct rush_request *req) { switch (node->type) { case test_cmpn: return eval_cmpn(node, rule, req); case test_cmps: return eval_cmps(node, rule, req); case test_in: return eval_in(node, rule, req); case test_group: return eval_member(node, rule, req); case test_and: if (!test_eval(node->v.arg[0], rule, req)) return 0; return test_eval(node->v.arg[1], rule, req); case test_or: if (test_eval(node->v.arg[0], rule, req)) return 1; return test_eval(node->v.arg[1], rule, req); case test_not: return ! test_eval(node->v.arg[0], rule, req); case test_fstest: return eval_fstest(node, rule, req); default: die(system_error, NULL, _("INTERNAL ERROR at %s:%d: unrecognized node type %d"), __FILE__, __LINE__, node->type); } } char * make_file_name(const char *dir, const char *name) { size_t dlen = strlen(dir); size_t len = dlen + strlen(name) + 1; char *res = xmalloc(len + 1); strcpy(res, dir); if (dlen > 0 && res[dlen-1] != '/') res[dlen++] = '/'; strcpy(res + dlen, name); return res; } char * expand_tilde(const char *dir, const char *home) { char *res; if (dir[0] == '~') { if (dir[1] == '/') { size_t hlen = strlen(home); size_t len = hlen + strlen(dir + 1); res = xmalloc(len + 1); strcpy(res, home); if (hlen > 0 && res[hlen-1] != '/') res[hlen++] = '/'; strcpy(res + hlen, dir + 2); } else res = xstrdup(home); } else res = xstrdup(dir); return res; } char * expand_dir(const char *dir, struct rush_request *req) { char *exp = rush_expand_string(dir, req); if (exp[0] == '~') { char *t = expand_tilde(exp, req->pw->pw_dir); free(exp); exp = t; } return exp; } void request_set_env(struct rush_request *req) { size_t i; for (i = 0; environ[i]; i++) ; req->env_count = i; req->env_max = i + 1; req->env = xcalloc(req->env_max, sizeof(req->env[0])); for (i = 0; i < req->env_count; i++) req->env[i] = xstrdup(environ[i]); req->env[i] = NULL; } static ssize_t getenvind(struct rush_request *req, char const *name, char **pval) { size_t i; for (i = 0; i < req->env_count; i++) { char const *p; char *q; for (p = name, q = req->env[i]; *p == *q; p++, q++) ; if (*p == 0 && *q == '=') { if (pval) *pval = q + 1; return i; } } return -1; } /* Return true if VAR[0]@LEN matches EV, false if only the name part matches, and undefined otherwise. Arguments: EV - a pointer to an envar entry, VAR - an entry from the environ array, LEN - length of the variable name part of VAR (in other words, position of the first = character in VAR). */ static enum rush_three_state envarmatch(struct envar *ev, char const *var, int len) { if (ev->value) { if (strncmp(ev->name, var, len) == 0) { return strcmp(var + len + 1, ev->value) == 0 ? rush_true : rush_false; } } else if (wildmatch(ev->name, var, len) == 0) { return rush_true; } return rush_undefined; } /* Return true if environ entry VAR must be kept in the environment, according to RULE. */ static rush_bool_t keep_envar(struct rush_rule *rule, char const *var) { struct envar *ev; int len = strcspn(var, "="); for (ev = rule->envar_head; ev; ev = ev->next) { if (ev->type == envar_keep) { enum rush_three_state res = envarmatch(ev, var, len); switch (res) { case rush_true: case rush_false: return res; case rush_undefined: /* go on */ break; } } } return rush_false; } /* Unset environment variable described by EV. */ static void unset_envar(struct rush_request *req, struct envar *ev) { size_t i; for (i = 0; i < req->env_count; ) { int len = strcspn(req->env[i], "="); if (envarmatch(ev, req->env[i], len) == rush_true) { free(req->env[i]); memmove(req->env + i, req->env + i + 1, (req->env_count - i) * sizeof(req->env[0])); req->env_count--; } else i++; } } static void env_setup(struct rush_rule *rule, struct rush_request *req) { struct envar *ev; size_t i; if (rule->clrenv) { size_t keep_count = 0; for (i = 0; i < req->env_count; i++) { if (keep_envar(rule, req->env[i])) { if (i > keep_count) { req->env[keep_count] = req->env[i]; req->env[i] = NULL; } keep_count++; } else { free(req->env[i]); req->env[i] = NULL; } } req->env_count = keep_count; } for (ev = rule->envar_head; ev; ev = ev->next) { char *val; ssize_t n; size_t len; switch (ev->type) { case envar_keep: /* Skip it */ break; case envar_unset: unset_envar(req, ev); break; case envar_set: val = rush_expand_string(ev->value, req); n = getenvind(req, ev->name, NULL); if (n == -1) { if (req->env_count + 1 >= req->env_max) req->env = x2nrealloc(req->env, &req->env_max, sizeof(req->env[0])); n = req->env_count++; req->env[req->env_count] = NULL; } free(req->env[n]); len = strlen(ev->name) + strlen(val) + 2; req->env[n] = xmalloc(len); strcat(strcat(strcpy(req->env[n], ev->name), "="), val); free(val); break; case envar_eval: free(rush_expand_string(ev->value, req)); break; default: die(system_error, NULL, _("INTERNAL ERROR at %s:%d: invalid envar type %d"), __FILE__, __LINE__, ev->type); } } if (__debug_p(2)) { logmsg(LOG_DEBUG, _("Final environment:")); for (i = 0; req->env[i]; i++) logmsg(LOG_DEBUG, "%4zu: %s", i, req->env[i]); } } static void reparse_cmdline(struct rush_request *req) { struct wordsplit ws; argcv_free(req->argc, req->argv); ws.ws_options = WRDSO_NOVARSPLIT | WRDSO_NOCMDSPLIT; if (wordsplit(req->cmdline, &ws, WRDSF_DEFFLAGS|WRDSF_OPTIONS)) die(system_error, &req->i18n, _("wordsplit(%s) failed: %s"), req->cmdline, wordsplit_strerror(&ws)); wordsplit_get_words(&ws, &req->argc, &req->argv); wordsplit_free(&ws); free(req->prog); req->prog = NULL; } static void rebuild_cmdline(struct rush_request *req) { free(req->cmdline); req->cmdline = argcv_string(req->argc, req->argv); } #define ARG_NO(n,argc) (((n) < 0) ? (argc) + (n) : (n)) static int get_arg_no(int index, struct rush_request *req) { int arg_no = ARG_NO(index, req->argc); if (arg_no < 0 || arg_no > req->argc) die(config_error, &req->i18n, _("no argument at index %d in command: %s"), index, req->cmdline); return arg_no; } /* Remove from the Nth argument of the request REQ the option described by OPT, with its argument (if any). TAIL points to the first character after the option and is used to decide whether the argument follows the option immediately or is placed in the next argv entry. */ static int remove_optarg(struct rush_request *req, struct option_defn *opt, size_t n, char *tail) { size_t c; if (opt->s_opt[1] == ':') { if (*tail) c = 1; else if (opt->s_opt[2] == ':') c = 1; else c = 2; } else c = 1; if (n + c < req->argc) { memmove(&req->argv[n], &req->argv[n + c], (req->argc - n + 1 - c) * sizeof req->argv[0]); req->argc -= c; return 1; } return 0; } /* Remove all occurrences of the option OPT from REQ. For the sake of clarity, in the comments below the word "argument" means an argv entry, and the word "parameter" means argument passed to an option, */ static void remove_option(struct rush_request *req, struct option_defn *opt) { size_t i; /* Length of the long option */ size_t l_len = opt->l_opt ? strlen(opt->l_opt) : 0; /* Flag indicating whether a rebuild is required */ int mod = 0; for (i = 1; i < req->argc; i++) { char *arg = req->argv[i]; if (*arg == '-') { char *p; ++arg; if (*arg == '-') { /* It is a long option */ /* ------------------- */ /* Length of the argument without initial -- */ size_t a_len; /* Skip past the initial -- */ ++arg; if (*arg == 0) /* No more options */ break; if (opt->l_opt == NULL) /* No long option requested */ continue; /* Check if option parameter is supplied */ a_len = strcspn(arg, "="); if (l_len < a_len) /* Argument is longer than the option name. */ continue; if (arg[a_len] == '=' && opt->s_opt[1] != ':') /* A parameter is supplied, but the option does not take any. */ continue; if (memcmp(arg, opt->l_opt, a_len)) /* Argument doesn't match initial option prefix. */ continue; /* Save the character following the option name for further use */ p = arg + a_len; } else if ((p = strchr(arg, opt->s_opt[0]))) { /* It is a short option */ /* -------------------- */ if (opt->s_opt[1] == 0) { /* No parameters. Delete the option letter. */ memmove(p, p + 1, strlen(p + 1) + 1); if (*arg) { /* An option cluster still present in the argument: no need to remove it. */ continue; } /* Remove the argument otherwise. */ } else if (p > arg) { if (p[1] || opt->s_opt[2] == ':') /* A parameter is supplied or option takes an optional parameter. Remove the option and its parameter */ *p = 0; /* Retain the remaining part of the option cluster. */ continue; } /* Advance to the character following the option name */ p++; } else { /* Skip unrecognized short option */ continue; } /* Remove the option (and its parameter, if any) */ if (remove_optarg(req, opt, i, p)) { i--; mod = 1; } } } if (mod) rebuild_cmdline(req); } static void rush_transform(struct transform_node *node, struct rush_request *req) { char **target_ptr; char *target_src; char *newval = NULL; int arg_no; void (*postprocess)(struct rush_request *) = NULL; if (node->type == transform_remopt) { debug(2, _("Removing option %s %s"), node->v.remopt.s_opt, node->v.remopt.l_opt ? node->v.remopt.l_opt : "(null)"); remove_option(req, &node->v.remopt); return; } switch (node->target.type) { case target_command: /* Command line */ target_ptr = &req->cmdline; target_src = req->cmdline; postprocess = reparse_cmdline; debug(2, "%s", _("Transforming command line")); break; case target_program: /* Executable program name */ target_ptr = &req->prog; target_src = PROGFILE(req); debug(2, _("Transforming program name (%s)"), target_src); break; case target_arg: /* Single command line argument */ arg_no = get_arg_no(node->target.v.arg.idx, req); if (arg_no == req->argc || node->target.v.arg.ins) { req->argv = xrealloc(req->argv, (req->argc + 2) * sizeof(req->argv[0])); req->argc++; memmove(&req->argv[arg_no+1], &req->argv[arg_no], (req->argc - arg_no) * sizeof req->argv[0]); req->argv[arg_no] = NULL; } target_ptr = &req->argv[arg_no]; target_src = req->argv[arg_no]; postprocess = rebuild_cmdline; debug(2, _("Transforming argv[%d]"), arg_no); break; case target_var: /* Variable */ target_ptr = rush_getvarptr(req, node->target.v.name); target_src = *target_ptr; debug(2, _("Transforming variable %s=%s"), node->target.v.name, target_src ? target_src : "(null)"); break; case target_env: /* Environment variable */ die(system_error, NULL, _("environment transformation is not yet implemented")); case target_readonly: die(system_error, NULL, _("INTERNAL ERROR at %s:%d: can't modify read-only target"), __FILE__, __LINE__); } switch (node->type) { case transform_set: if (node->v.xf.pattern) { newval = rush_expand_string(node->v.xf.pattern, req); target_src = newval; } if (node->v.xf.trans) { char *p = transform_string(node->v.xf.trans, target_src); free(newval); newval = p; } break; case transform_map: debug(2, _("Transformation map: %s, %s, %s, %u, %u, %s"), node->v.map.file, node->v.map.delim, node->v.map.key, node->v.map.key_field, node->v.map.val_field, node->v.map.defval); newval = map_string(&node->v.map, req); if (!newval) return; break; default: die(system_error, NULL, _("INTERNAL ERROR at %s:%d: invalid node type %d"), __FILE__, __LINE__, node->type); break; } free(*target_ptr); *target_ptr = newval; debug(2, _("transformed value: %s"), newval); if (postprocess) postprocess(req); } static void rush_transform_delete(struct transform_node *node, struct rush_request *req) { int arg_no, arg_end, i; switch (node->target.type) { case target_arg: /* Single command line argument */ arg_no = get_arg_no(node->target.v.arg.idx, req); arg_end = get_arg_no(node->v.arg_end, req); if (arg_end < arg_no) { int x = arg_end; arg_end = arg_no; arg_no = x; } debug(2, _("Deleting arguments %d-%d"), arg_no, arg_end); if (arg_no == 0 || arg_end == 0) die(config_error, &req->i18n, _("Deleting argv[0] is prohibited")); for (i = arg_no; i <= arg_end; i++) free(req->argv[i]); i = arg_end - arg_no + 1; memmove(req->argv + arg_no, req->argv + arg_end + 1, (req->argc - i) * sizeof(req->argv[0])); req->argc -= i; rebuild_cmdline(req); break; case target_var: rush_request_delvar(req, node->target.v.name); break; case target_env: /* Environment variable */ die(system_error, NULL, _("environment transformation is not yet implemented")); default: die(system_error, NULL, _("INTERNAL ERROR at %s:%d: invalid target type %d"), __FILE__, __LINE__, node->type); } } static void run_transforms(struct rush_rule *rule, struct rush_request *req) { struct transform_node *node; for (node = rule->transform_head; node; node = node->next) { if (node->type == transform_delete) rush_transform_delete(node, req); else rush_transform(node, req); } if (__debug_p(2)) { int i; logmsg(LOG_DEBUG, _("Program name: %s"), PROGFILE(req)); logmsg(LOG_DEBUG, _("Final arguments:")); for (i = 0; i < req->argc; i++) logmsg(LOG_DEBUG, "% 4d: %s", i, req->argv[i]); } } static void acct_on(struct rush_rule *rule, struct rush_request *req, pid_t pid) { struct rush_wtmp wtmp; wtmp.pid = pid; wtmp.user = req->pw->pw_name; wtmp.rule = rule->tag; wtmp.command = req->cmdline; if (rushdb_start(&wtmp)) die(system_error, &req->i18n, _("error writing to database %s: %s"), RUSH_DB, strerror(errno)); } static void acct_off(void) { if (rushdb_stop()) logmsg(LOG_ERR, _("error writing stop to database file %s: %s"), RUSH_DB, strerror(errno)); rushdb_close(); } static void fork_process(struct rush_rule *rule, struct rush_request *req) { int status; pid_t pid; signal(SIGCHLD, SIG_DFL); pid = fork(); if (pid == 0) { return; } if (pid == -1) die(system_error, &req->i18n, _("%s:%d: %s: cannot fork: %s"), rule->file, rule->line, rule->tag, strerror(errno)); close(0); close(1); close(2); if (req->acct == rush_true) acct_on(rule, req, pid); debug(2, _("Forked process %lu"), (unsigned long) pid); waitpid(pid, &status, 0); if (WIFEXITED(status)) { status = WEXITSTATUS(status); debug(2, _("%s: subprocess exited with code %d"), rule->tag, status); } else if (WIFSIGNALED(status)) { logmsg(LOG_NOTICE, _("%s: subprocess terminated on signal %d"), rule->tag, WTERMSIG(status)); } else logmsg(LOG_NOTICE, _("%s: subprocess terminated"), rule->tag); if (req->acct == rush_true) acct_off(); if (req->post_sockaddr) post_socket_send(req->post_sockaddr, rule, req); exit(0); } #if !HAVE_GETGROUPLIST 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; } #endif static void get_user_groups(struct rush_request *req, size_t *pgidc, gid_t **pgidv) { size_t gidc = 0, n = 0; gid_t *gidv = NULL; gid_t group = req->gid == NO_GID ? req->pw->pw_gid : req->gid; n = 32; gidv = xcalloc(n, sizeof(gidv[0])); #if HAVE_GETGROUPLIST int max_groups = (int) n; for (;;) { int ng = getgrouplist(req->pw->pw_name, group, gidv, &max_groups); if (ng >= 0) { /* On some systems getgrouplist returns 0 on success. */ gidc = ng > 0 ? ng : max_groups; break; } /* Work around a bug on Darwin, where getgrouplist fails to increase max_groups. */ if (n == max_groups) { if (INT_MAX / 3 * 2 <= n) xalloc_die (); max_groups += (max_groups + 1) / 2; } n = max_groups; gidv = xrealloc(gidv, n * sizeof (gidv[0])); } #else struct group *gr; gidv[0] = group; gidc = 1; setgrent(); while ((gr = getgrent())) { char **p; for (p = gr->gr_mem; *p; p++) if (strcmp(*p, req->pw->pw_name) == 0) { if (n == gidc) { n += 32; gidv = xrealloc(gidv, n * sizeof(gidv[0])); } if (!membergid(gr->gr_gid, gidc, gidv)) gidv[gidc++] = gr->gr_gid; } } endgrent(); #endif *pgidc = gidc; *pgidv = gidv; } static void setowner(struct rush_request *req) { size_t gidc; gid_t *gidv; get_user_groups(req, &gidc, &gidv); if (setgroups(gidc, gidv) < 0) die(system_error, &req->i18n, "setgroups: %s", strerror(errno)); if (setgid(gidv[0])) die(system_error, &req->i18n, _("cannot enforce gid %lu: %s"), (unsigned long) gidv[0], strerror(errno)); free(gidv); if (setuid(req->pw->pw_uid)) die(system_error, &req->i18n, _("cannot enforce uid %lu: %s"), (unsigned long) req->pw->pw_uid, strerror(errno)); if (req->pw->pw_uid && setuid(0) == 0) die(system_error, &req->i18n, _("seteuid(0) succeeded when it should not")); } static void run_rule(struct rush_rule *rule, struct rush_request *req) { debug(2, _("Rule %s at %s:%d matched"), rule->tag, rule->file, rule->line); env_setup(rule, req); if (rule->i18n.text_domain) req->i18n.text_domain = rule->i18n.text_domain; if (rule->i18n.localedir) req->i18n.localedir = rule->i18n.localedir; if (rule->i18n.locale) req->i18n.locale = rule->i18n.locale; if (rule->error) { const char *msg = rush_error_msg(rule->error, &rule->i18n); debug(2, _("Error message: %s"), msg); if (write(rule->error->fd, msg, strlen(msg)) < 0) die(system_error, &req->i18n, _("Error sending diagnostic message to descriptor %d: %s"), rule->error->fd, strerror(errno)); exit(1); } if (set_user_limits (req->pw->pw_name, rule->limits)) die(usage_error, &req->i18n, _("cannot set limits for %s"), req->pw->pw_name); run_transforms(rule, req); if (rule->chroot_dir) { char *dir = expand_dir(rule->chroot_dir, req); debug(2, _("Chroot dir: %s"), dir); free(req->chroot_dir); req->chroot_dir = dir; } if (rule->home_dir) { free(req->home_dir); req->home_dir = expand_dir(rule->home_dir, req); debug(2, _("Home dir: %s"), req->home_dir); } if (rule->gid != NO_GID) { req->gid = rule->gid; debug(2, _("GID: %lu"), (unsigned long) req->gid); } if (rule->post_sockaddr.len) req->post_sockaddr = &rule->post_sockaddr; if (rule->acct != rush_undefined) req->acct = rule->acct; if (req->acct == rush_true) req->fork = rush_true; else if (rule->post_sockaddr.len) req->fork = rush_true; else if (rule->fork != rush_undefined) req->fork = rule->fork; if (rule->mask != NO_UMASK) req->umask = rule->mask; if (rule->fall_through) return; if (req->acct == rush_true && rushdb_open(RUSH_DB, 1) != rushdb_result_ok) die(system_error, &req->i18n, _("cannot open database %s: %s"), RUSH_DB, rushdb_error_string); if (req->chroot_dir) { uid_t uid; struct passwd *pw; if (chroot(req->chroot_dir)) die(system_error, &req->i18n, _("cannot chroot to %s: %s"), req->chroot_dir, strerror(errno)); uid = req->pw->pw_uid; pw = getpwuid(uid); if (!pw) die(req->interactive ? nologin_error : usage_error, NULL, _("invalid uid %lu"), (unsigned long) uid); req->pw = pw; } if (req->home_dir) { debug(2, _("chdir %s"), req->home_dir); if (chdir(req->home_dir)) die(system_error, &req->i18n, _("cannot change to dir %s: %s"), req->home_dir, strerror(errno)); } debug(2, _("Executing %s, %s"), PROGFILE(req), req->cmdline); if (lint_option) { if (dump_option) dump_request(req, stdout); exit(0); } if (req->fork == rush_true) fork_process(rule, req); setowner(req); umask(req->umask); execve(PROGFILE(req), req->argv, req->env); die(system_error, &req->i18n, _("%s:%d: %s: cannot execute %s: %s"), rule->file, rule->line, rule->tag, req->cmdline, strerror(errno)); } static char *command = NULL; static char *test_user_name = NULL; static int interactive; #include "rushopt.h" int main(int argc, char **argv) { uid_t uid; struct rush_rule *rule; struct rush_request req; rush_set_program_name(argv[0]); rush_i18n_init(); umask(~(mode_t)0); openlog(program_name, LOG_NDELAY|LOG_PID, LOG_AUTHPRIV); get_options(argc, argv); cfgram_debug(parser_traces > 0); cflex_debug(parser_traces > 1); if (scanner_test) { cfck_keyword("none"); if (argc > optind + 1) { logmsg(LOG_ERR, "%s", _("too many arguments")); exit(1); } cflex_test(argv[optind]); exit(0); } if (argc == optind + 1) { if (lint_option) rush_config_file = argv[optind]; else die(usage_error, NULL, _("invalid command line")); } else if (argc > optind) die(usage_error, NULL, _("invalid command line")); /* Relinquish root privileges in test mode */ if (lint_option) { if (setuid(getuid())) die(system_error, NULL, "setuid: %s", strerror(errno)); } if (test_user_name) { struct passwd *pw = getpwnam(test_user_name); if (!pw) die(usage_error, NULL, _("invalid user name")); if (setreuid(pw->pw_uid, 0)) die(system_error, NULL, "setreuid: %s", strerror(errno)); } uid = getuid(); if ((rush_pw = getpwuid(uid)) == NULL) die(system_error, NULL, _("invalid uid %lu"), (unsigned long) uid); debug(2, _("user %s, uid %lu"), rush_pw->pw_name, (unsigned long) rush_pw->pw_uid); cfparse(); if (!command) { if (lint_option && !interactive) exit(0); } if (__debug_p(2)) { int i; logmsg(LOG_DEBUG, _("Command line:")); for (i = 0; i < argc; i++) logmsg(LOG_DEBUG, "% 4d: %s", i, argv[i]); logmsg(LOG_DEBUG, _("Environment:")); for (i = 0; environ[i]; i++) logmsg(LOG_DEBUG, "% 4d %s", i, environ[i]); } memset(&req, 0, sizeof(req)); if (!command) { req.interactive = 1; command = "/bin/sh"; } req.cmdline = xstrdup(command); request_set_env(&req); reparse_cmdline(&req); req.pw = rush_pw; req.umask = 022; req.chroot_dir = NULL; req.home_dir = NULL; req.gid = NO_GID; req.fork = rush_undefined; req.acct = rush_undefined; for (rule = rule_head; rule; rule = rule->next) { if (req.interactive != rule->interactive) continue; if (rule->test_node && !test_eval(rule->test_node, rule, &req)) continue; if (debug_level) { if (req.interactive) logmsg(LOG_NOTICE, _("Serving interactive shell request for %s by rule %s"), req.pw->pw_name, rule->tag); else logmsg(LOG_NOTICE, _("Serving request \"%s\" for %s by rule %s"), command, req.pw->pw_name, rule->tag); } run_rule(rule, &req); } die(req.interactive ? nologin_error : usage_error, &req.i18n, _("no matching rule for \"%s\", user %s"), req.cmdline, req.pw->pw_name); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/src/defconf.sed����������������������������������������������������������������������������0000644�0001750�0001750�00000000754�14643176120�015230� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is part of GNU Rush. # Copyright (C) 2009-2024 Sergey Poznyakoff # Distributed under the terms of the GNU General Public License, either # version 3, or (at your option) any later version. See file COPYING # for the text of the license. # Provide leading quote 1i\ "\\ # Provide trailing quote $a\ " # Remove empty lines and comments / *#/d /^ *$/d # Escape quotes and backslashes s/["\]/\\&/g # Add newline and continuation character at the end of each line s/$/\\n\\/ # End ��������������������rush-2.4/src/cfgram.output��������������������������������������������������������������������������0000644�0001750�0001750�00000121334�14201271741�015641� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Grammar 0 $accept: rcfile $end 1 rcfile: skipeol select 2 select: preface skipeol content 3 | "erroneous token" 4 preface: "rush" T_VERSION "end of line" 5 skipeol: %empty 6 | eol 7 eol: "end of line" 8 | eol "end of line" 9 content: %empty 10 | rulelist 11 rulelist: rule 12 | rulelist rule 13 rule: rulehdr rulebody 14 | globhdr globbody 15 globhdr: "global" eol 16 globbody: glob_stmt 17 | globbody glob_stmt 18 glob_stmt: "global attribute" arglist eol 19 arglist: arg 20 | arglist arg 21 arg: literal 22 | "number" 23 rulehdr: "rule" ruleid eol 24 ruleid: %empty 25 | string 26 rulebody: stmt 27 | rulebody stmt 28 stmt: match_stmt eol 29 | set_stmt eol 30 | map_stmt eol 31 | delete_stmt eol 32 | limits_stmt eol 33 | environ_stmt eol 34 | flowctl_stmt eol 35 | attrib_stmt eol 36 | remopt_stmt eol 37 | include_stmt skipeol 38 | error 39 match_stmt: "match" compound_cond 40 compound_cond: simple_cond 41 | compound_cond "&&" simple_cond 42 | compound_cond "||" simple_cond 43 simple_cond: expr 44 | "!" simple_cond 45 | '(' compound_cond ')' 46 expr: string '~' regex 47 | string "!~" regex 48 | string "==" literal 49 | string "!=" literal 50 | string "==" "number" 51 | string "!=" "number" 52 | string "<" "number" 53 | string "<=" "number" 54 | string ">" "number" 55 | string ">=" "number" 56 | string "in" strlist 57 | "group" string 58 | "group" strlist 59 | "test" string 60 literal: "identifier" 61 | "string" 62 string: "identifier" 63 | "string" 64 | "number" 65 regex: string 66 set_stmt: "set" index '=' value 67 | "insert" index '=' value 68 | "set" index "=~" value 69 | "set" index '=' string '~' value 70 | "insert" index '=' string '~' value 71 | "set" "identifier" '=' value 72 | "set" "identifier" "=~" value 73 | "set" "identifier" '=' string '~' value 74 | "unset" "identifier" 75 | "unset" index 76 map_stmt: "map" index value value value "number" "number" defval 77 | "map" "identifier" value value value "number" "number" defval 78 defval: %empty 79 | string 80 index: '[' "number" ']' 81 value: string 82 flowctl_stmt: "fallthrough" 83 | "exit" fdescr "string" 84 | "exit" fdescr "identifier" 85 fdescr: %empty 86 | "number" 87 delete_stmt: "delete" range 88 range: "number" 89 | "number" "number" 90 include_stmt: "include" string "end of line" 91 limits_stmt: "limits" resource_limits 92 resource_limits: "identifier" 93 | resource_limits "identifier" 94 remopt_stmt: "remopt" string optstring 95 optstring: %empty 96 | string 97 environ_stmt: "clrenv" 98 | "setenv" "identifier" '=' string 99 | "evalenv" string 100 | "unsetenv" asgn_list 101 | "keepenv" asgn_list 102 asgn_list: asgn 103 | asgn_list asgn 104 asgn: literal 105 | "identifier" '=' value 106 attrib_stmt: "rule attribute" string 107 $@1: %empty 108 strlist: '(' $@1 arglist ')' Terminals, with rules where they appear $end (0) 0 '(' (40) 45 108 ')' (41) 45 108 '=' (61) 66 67 69 70 71 73 98 105 '[' (91) 80 ']' (93) 80 '~' (126) 46 69 70 73 error (256) 38 "string" (258) 61 63 83 "identifier" (259) 60 62 71 72 73 74 77 84 92 93 98 105 "number" (260) 22 50 51 52 53 54 55 64 76 77 80 86 88 89 "rush" (261) 4 T_VERSION (262) 4 "rule" (263) 23 "global" (264) 15 "end of line" (265) 4 7 8 90 "set" (266) 66 68 69 71 72 73 "insert" (267) 67 70 "remopt" (268) 94 "map" (269) 76 77 "unset" (270) 74 75 "match" (271) 39 "fallthrough" (272) 82 "include" (273) 90 "limits" (274) 91 "clrenv" (275) 97 "setenv" (276) 98 "unsetenv" (277) 100 "keepenv" (278) 101 "evalenv" (279) 99 "delete" (280) 87 "exit" (281) 83 84 "rule attribute" (282) 106 "global attribute" (283) 18 "erroneous token" (284) 3 "||" (285) 42 "&&" (286) 41 "!" (287) 44 "==" (288) 48 50 "!=" (289) 49 51 "<" (290) 52 "<=" (291) 53 ">" (292) 54 ">=" (293) 55 "=~" (294) 68 72 "!~" (295) 47 "in" (296) 56 "group" (297) 57 58 "test" (298) 59 Nonterminals, with rules where they appear $accept (50) on left: 0 rcfile (51) on left: 1, on right: 0 select (52) on left: 2 3, on right: 1 preface (53) on left: 4, on right: 2 skipeol (54) on left: 5 6, on right: 1 2 37 eol (55) on left: 7 8, on right: 6 8 15 18 23 28 29 30 31 32 33 34 35 36 content (56) on left: 9 10, on right: 2 rulelist (57) on left: 11 12, on right: 10 12 rule (58) on left: 13 14, on right: 11 12 globhdr (59) on left: 15, on right: 14 globbody (60) on left: 16 17, on right: 14 17 glob_stmt (61) on left: 18, on right: 16 17 arglist (62) on left: 19 20, on right: 18 20 108 arg (63) on left: 21 22, on right: 19 20 rulehdr (64) on left: 23, on right: 13 ruleid (65) on left: 24 25, on right: 23 rulebody (66) on left: 26 27, on right: 13 27 stmt (67) on left: 28 29 30 31 32 33 34 35 36 37 38, on right: 26 27 match_stmt (68) on left: 39, on right: 28 compound_cond (69) on left: 40 41 42, on right: 39 41 42 45 simple_cond (70) on left: 43 44 45, on right: 40 41 42 44 expr (71) on left: 46 47 48 49 50 51 52 53 54 55 56 57 58 59, on right: 43 literal (72) on left: 60 61, on right: 21 48 49 104 string (73) on left: 62 63 64, on right: 25 46 47 48 49 50 51 52 53 54 55 56 57 59 65 69 70 73 79 81 90 94 96 98 99 106 regex (74) on left: 65, on right: 46 47 set_stmt (75) on left: 66 67 68 69 70 71 72 73 74 75, on right: 29 map_stmt (76) on left: 76 77, on right: 30 defval (77) on left: 78 79, on right: 76 77 index (78) on left: 80, on right: 66 67 68 69 70 75 76 value (79) on left: 81, on right: 66 67 68 69 70 71 72 73 76 77 105 flowctl_stmt (80) on left: 82 83 84, on right: 34 fdescr (81) on left: 85 86, on right: 83 84 delete_stmt (82) on left: 87, on right: 31 range (83) on left: 88 89, on right: 87 include_stmt (84) on left: 90, on right: 37 limits_stmt (85) on left: 91, on right: 32 resource_limits (86) on left: 92 93, on right: 91 93 remopt_stmt (87) on left: 94, on right: 36 optstring (88) on left: 95 96, on right: 94 environ_stmt (89) on left: 97 98 99 100 101, on right: 33 asgn_list (90) on left: 102 103, on right: 100 101 103 asgn (91) on left: 104 105, on right: 102 103 attrib_stmt (92) on left: 106, on right: 35 strlist (93) on left: 108, on right: 56 58 $@1 (94) on left: 107, on right: 108 State 0 0 $accept: . rcfile $end "end of line" shift, and go to state 1 $default reduce using rule 5 (skipeol) rcfile go to state 2 skipeol go to state 3 eol go to state 4 State 1 7 eol: "end of line" . $default reduce using rule 7 (eol) State 2 0 $accept: rcfile . $end $end shift, and go to state 5 State 3 1 rcfile: skipeol . select "rush" shift, and go to state 6 "erroneous token" shift, and go to state 7 select go to state 8 preface go to state 9 State 4 6 skipeol: eol . 8 eol: eol . "end of line" "end of line" shift, and go to state 10 $default reduce using rule 6 (skipeol) State 5 0 $accept: rcfile $end . $default accept State 6 4 preface: "rush" . T_VERSION "end of line" T_VERSION shift, and go to state 11 State 7 3 select: "erroneous token" . $default reduce using rule 3 (select) State 8 1 rcfile: skipeol select . $default reduce using rule 1 (rcfile) State 9 2 select: preface . skipeol content "end of line" shift, and go to state 1 $default reduce using rule 5 (skipeol) skipeol go to state 12 eol go to state 4 State 10 8 eol: eol "end of line" . $default reduce using rule 8 (eol) State 11 4 preface: "rush" T_VERSION . "end of line" "end of line" shift, and go to state 13 State 12 2 select: preface skipeol . content "rule" shift, and go to state 14 "global" shift, and go to state 15 $default reduce using rule 9 (content) content go to state 16 rulelist go to state 17 rule go to state 18 globhdr go to state 19 rulehdr go to state 20 State 13 4 preface: "rush" T_VERSION "end of line" . $default reduce using rule 4 (preface) State 14 23 rulehdr: "rule" . ruleid eol "string" shift, and go to state 21 "identifier" shift, and go to state 22 "number" shift, and go to state 23 $default reduce using rule 24 (ruleid) ruleid go to state 24 string go to state 25 State 15 15 globhdr: "global" . eol "end of line" shift, and go to state 1 eol go to state 26 State 16 2 select: preface skipeol content . $default reduce using rule 2 (select) State 17 10 content: rulelist . 12 rulelist: rulelist . rule "rule" shift, and go to state 14 "global" shift, and go to state 15 $default reduce using rule 10 (content) rule go to state 27 globhdr go to state 19 rulehdr go to state 20 State 18 11 rulelist: rule . $default reduce using rule 11 (rulelist) State 19 14 rule: globhdr . globbody "global attribute" shift, and go to state 28 globbody go to state 29 glob_stmt go to state 30 State 20 13 rule: rulehdr . rulebody error shift, and go to state 31 "set" shift, and go to state 32 "insert" shift, and go to state 33 "remopt" shift, and go to state 34 "map" shift, and go to state 35 "unset" shift, and go to state 36 "match" shift, and go to state 37 "fallthrough" shift, and go to state 38 "include" shift, and go to state 39 "limits" shift, and go to state 40 "clrenv" shift, and go to state 41 "setenv" shift, and go to state 42 "unsetenv" shift, and go to state 43 "keepenv" shift, and go to state 44 "evalenv" shift, and go to state 45 "delete" shift, and go to state 46 "exit" shift, and go to state 47 "rule attribute" shift, and go to state 48 rulebody go to state 49 stmt go to state 50 match_stmt go to state 51 set_stmt go to state 52 map_stmt go to state 53 flowctl_stmt go to state 54 delete_stmt go to state 55 include_stmt go to state 56 limits_stmt go to state 57 remopt_stmt go to state 58 environ_stmt go to state 59 attrib_stmt go to state 60 State 21 63 string: "string" . $default reduce using rule 63 (string) State 22 62 string: "identifier" . $default reduce using rule 62 (string) State 23 64 string: "number" . $default reduce using rule 64 (string) State 24 23 rulehdr: "rule" ruleid . eol "end of line" shift, and go to state 1 eol go to state 61 State 25 25 ruleid: string . $default reduce using rule 25 (ruleid) State 26 8 eol: eol . "end of line" 15 globhdr: "global" eol . "end of line" shift, and go to state 10 $default reduce using rule 15 (globhdr) State 27 12 rulelist: rulelist rule . $default reduce using rule 12 (rulelist) State 28 18 glob_stmt: "global attribute" . arglist eol "string" shift, and go to state 62 "identifier" shift, and go to state 63 "number" shift, and go to state 64 arglist go to state 65 arg go to state 66 literal go to state 67 State 29 14 rule: globhdr globbody . 17 globbody: globbody . glob_stmt "global attribute" shift, and go to state 28 $default reduce using rule 14 (rule) glob_stmt go to state 68 State 30 16 globbody: glob_stmt . $default reduce using rule 16 (globbody) State 31 38 stmt: error . $default reduce using rule 38 (stmt) State 32 66 set_stmt: "set" . index '=' value 68 | "set" . index "=~" value 69 | "set" . index '=' string '~' value 71 | "set" . "identifier" '=' value 72 | "set" . "identifier" "=~" value 73 | "set" . "identifier" '=' string '~' value "identifier" shift, and go to state 69 '[' shift, and go to state 70 index go to state 71 State 33 67 set_stmt: "insert" . index '=' value 70 | "insert" . index '=' string '~' value '[' shift, and go to state 70 index go to state 72 State 34 94 remopt_stmt: "remopt" . string optstring "string" shift, and go to state 21 "identifier" shift, and go to state 22 "number" shift, and go to state 23 string go to state 73 State 35 76 map_stmt: "map" . index value value value "number" "number" defval 77 | "map" . "identifier" value value value "number" "number" defval "identifier" shift, and go to state 74 '[' shift, and go to state 70 index go to state 75 State 36 74 set_stmt: "unset" . "identifier" 75 | "unset" . index "identifier" shift, and go to state 76 '[' shift, and go to state 70 index go to state 77 State 37 39 match_stmt: "match" . compound_cond "string" shift, and go to state 21 "identifier" shift, and go to state 22 "number" shift, and go to state 23 "!" shift, and go to state 78 "group" shift, and go to state 79 "test" shift, and go to state 80 '(' shift, and go to state 81 compound_cond go to state 82 simple_cond go to state 83 expr go to state 84 string go to state 85 State 38 82 flowctl_stmt: "fallthrough" . $default reduce using rule 82 (flowctl_stmt) State 39 90 include_stmt: "include" . string "end of line" "string" shift, and go to state 21 "identifier" shift, and go to state 22 "number" shift, and go to state 23 string go to state 86 State 40 91 limits_stmt: "limits" . resource_limits "identifier" shift, and go to state 87 resource_limits go to state 88 State 41 97 environ_stmt: "clrenv" . $default reduce using rule 97 (environ_stmt) State 42 98 environ_stmt: "setenv" . "identifier" '=' string "identifier" shift, and go to state 89 State 43 100 environ_stmt: "unsetenv" . asgn_list "string" shift, and go to state 62 "identifier" shift, and go to state 90 literal go to state 91 asgn_list go to state 92 asgn go to state 93 State 44 101 environ_stmt: "keepenv" . asgn_list "string" shift, and go to state 62 "identifier" shift, and go to state 90 literal go to state 91 asgn_list go to state 94 asgn go to state 93 State 45 99 environ_stmt: "evalenv" . string "string" shift, and go to state 21 "identifier" shift, and go to state 22 "number" shift, and go to state 23 string go to state 95 State 46 87 delete_stmt: "delete" . range "number" shift, and go to state 96 range go to state 97 State 47 83 flowctl_stmt: "exit" . fdescr "string" 84 | "exit" . fdescr "identifier" "number" shift, and go to state 98 $default reduce using rule 85 (fdescr) fdescr go to state 99 State 48 106 attrib_stmt: "rule attribute" . string "string" shift, and go to state 21 "identifier" shift, and go to state 22 "number" shift, and go to state 23 string go to state 100 State 49 13 rule: rulehdr rulebody . 27 rulebody: rulebody . stmt error shift, and go to state 31 "set" shift, and go to state 32 "insert" shift, and go to state 33 "remopt" shift, and go to state 34 "map" shift, and go to state 35 "unset" shift, and go to state 36 "match" shift, and go to state 37 "fallthrough" shift, and go to state 38 "include" shift, and go to state 39 "limits" shift, and go to state 40 "clrenv" shift, and go to state 41 "setenv" shift, and go to state 42 "unsetenv" shift, and go to state 43 "keepenv" shift, and go to state 44 "evalenv" shift, and go to state 45 "delete" shift, and go to state 46 "exit" shift, and go to state 47 "rule attribute" shift, and go to state 48 $end reduce using rule 13 (rule) "rule" reduce using rule 13 (rule) "global" reduce using rule 13 (rule) stmt go to state 101 match_stmt go to state 51 set_stmt go to state 52 map_stmt go to state 53 flowctl_stmt go to state 54 delete_stmt go to state 55 include_stmt go to state 56 limits_stmt go to state 57 remopt_stmt go to state 58 environ_stmt go to state 59 attrib_stmt go to state 60 State 50 26 rulebody: stmt . $default reduce using rule 26 (rulebody) State 51 28 stmt: match_stmt . eol "end of line" shift, and go to state 1 eol go to state 102 State 52 29 stmt: set_stmt . eol "end of line" shift, and go to state 1 eol go to state 103 State 53 30 stmt: map_stmt . eol "end of line" shift, and go to state 1 eol go to state 104 State 54 34 stmt: flowctl_stmt . eol "end of line" shift, and go to state 1 eol go to state 105 State 55 31 stmt: delete_stmt . eol "end of line" shift, and go to state 1 eol go to state 106 State 56 37 stmt: include_stmt . skipeol "end of line" shift, and go to state 1 $default reduce using rule 5 (skipeol) skipeol go to state 107 eol go to state 4 State 57 32 stmt: limits_stmt . eol "end of line" shift, and go to state 1 eol go to state 108 State 58 36 stmt: remopt_stmt . eol "end of line" shift, and go to state 1 eol go to state 109 State 59 33 stmt: environ_stmt . eol "end of line" shift, and go to state 1 eol go to state 110 State 60 35 stmt: attrib_stmt . eol "end of line" shift, and go to state 1 eol go to state 111 State 61 8 eol: eol . "end of line" 23 rulehdr: "rule" ruleid eol . "end of line" shift, and go to state 10 $default reduce using rule 23 (rulehdr) State 62 61 literal: "string" . $default reduce using rule 61 (literal) State 63 60 literal: "identifier" . $default reduce using rule 60 (literal) State 64 22 arg: "number" . $default reduce using rule 22 (arg) State 65 18 glob_stmt: "global attribute" arglist . eol 20 arglist: arglist . arg "string" shift, and go to state 62 "identifier" shift, and go to state 63 "number" shift, and go to state 64 "end of line" shift, and go to state 1 eol go to state 112 arg go to state 113 literal go to state 67 State 66 19 arglist: arg . $default reduce using rule 19 (arglist) State 67 21 arg: literal . $default reduce using rule 21 (arg) State 68 17 globbody: globbody glob_stmt . $default reduce using rule 17 (globbody) State 69 71 set_stmt: "set" "identifier" . '=' value 72 | "set" "identifier" . "=~" value 73 | "set" "identifier" . '=' string '~' value "=~" shift, and go to state 114 '=' shift, and go to state 115 State 70 80 index: '[' . "number" ']' "number" shift, and go to state 116 State 71 66 set_stmt: "set" index . '=' value 68 | "set" index . "=~" value 69 | "set" index . '=' string '~' value "=~" shift, and go to state 117 '=' shift, and go to state 118 State 72 67 set_stmt: "insert" index . '=' value 70 | "insert" index . '=' string '~' value '=' shift, and go to state 119 State 73 94 remopt_stmt: "remopt" string . optstring "string" shift, and go to state 21 "identifier" shift, and go to state 22 "number" shift, and go to state 23 $default reduce using rule 95 (optstring) string go to state 120 optstring go to state 121 State 74 77 map_stmt: "map" "identifier" . value value value "number" "number" defval "string" shift, and go to state 21 "identifier" shift, and go to state 22 "number" shift, and go to state 23 string go to state 122 value go to state 123 State 75 76 map_stmt: "map" index . value value value "number" "number" defval "string" shift, and go to state 21 "identifier" shift, and go to state 22 "number" shift, and go to state 23 string go to state 122 value go to state 124 State 76 74 set_stmt: "unset" "identifier" . $default reduce using rule 74 (set_stmt) State 77 75 set_stmt: "unset" index . $default reduce using rule 75 (set_stmt) State 78 44 simple_cond: "!" . simple_cond "string" shift, and go to state 21 "identifier" shift, and go to state 22 "number" shift, and go to state 23 "!" shift, and go to state 78 "group" shift, and go to state 79 "test" shift, and go to state 80 '(' shift, and go to state 81 simple_cond go to state 125 expr go to state 84 string go to state 85 State 79 57 expr: "group" . string 58 | "group" . strlist "string" shift, and go to state 21 "identifier" shift, and go to state 22 "number" shift, and go to state 23 '(' shift, and go to state 126 string go to state 127 strlist go to state 128 State 80 59 expr: "test" . string "string" shift, and go to state 21 "identifier" shift, and go to state 22 "number" shift, and go to state 23 string go to state 129 State 81 45 simple_cond: '(' . compound_cond ')' "string" shift, and go to state 21 "identifier" shift, and go to state 22 "number" shift, and go to state 23 "!" shift, and go to state 78 "group" shift, and go to state 79 "test" shift, and go to state 80 '(' shift, and go to state 81 compound_cond go to state 130 simple_cond go to state 83 expr go to state 84 string go to state 85 State 82 39 match_stmt: "match" compound_cond . 41 compound_cond: compound_cond . "&&" simple_cond 42 | compound_cond . "||" simple_cond "||" shift, and go to state 131 "&&" shift, and go to state 132 $default reduce using rule 39 (match_stmt) State 83 40 compound_cond: simple_cond . $default reduce using rule 40 (compound_cond) State 84 43 simple_cond: expr . $default reduce using rule 43 (simple_cond) State 85 46 expr: string . '~' regex 47 | string . "!~" regex 48 | string . "==" literal 49 | string . "!=" literal 50 | string . "==" "number" 51 | string . "!=" "number" 52 | string . "<" "number" 53 | string . "<=" "number" 54 | string . ">" "number" 55 | string . ">=" "number" 56 | string . "in" strlist "==" shift, and go to state 133 "!=" shift, and go to state 134 "<" shift, and go to state 135 "<=" shift, and go to state 136 ">" shift, and go to state 137 ">=" shift, and go to state 138 "!~" shift, and go to state 139 "in" shift, and go to state 140 '~' shift, and go to state 141 State 86 90 include_stmt: "include" string . "end of line" "end of line" shift, and go to state 142 State 87 92 resource_limits: "identifier" . $default reduce using rule 92 (resource_limits) State 88 91 limits_stmt: "limits" resource_limits . 93 resource_limits: resource_limits . "identifier" "identifier" shift, and go to state 143 $default reduce using rule 91 (limits_stmt) State 89 98 environ_stmt: "setenv" "identifier" . '=' string '=' shift, and go to state 144 State 90 60 literal: "identifier" . 105 asgn: "identifier" . '=' value '=' shift, and go to state 145 $default reduce using rule 60 (literal) State 91 104 asgn: literal . $default reduce using rule 104 (asgn) State 92 100 environ_stmt: "unsetenv" asgn_list . 103 asgn_list: asgn_list . asgn "string" shift, and go to state 62 "identifier" shift, and go to state 90 $default reduce using rule 100 (environ_stmt) literal go to state 91 asgn go to state 146 State 93 102 asgn_list: asgn . $default reduce using rule 102 (asgn_list) State 94 101 environ_stmt: "keepenv" asgn_list . 103 asgn_list: asgn_list . asgn "string" shift, and go to state 62 "identifier" shift, and go to state 90 $default reduce using rule 101 (environ_stmt) literal go to state 91 asgn go to state 146 State 95 99 environ_stmt: "evalenv" string . $default reduce using rule 99 (environ_stmt) State 96 88 range: "number" . 89 | "number" . "number" "number" shift, and go to state 147 $default reduce using rule 88 (range) State 97 87 delete_stmt: "delete" range . $default reduce using rule 87 (delete_stmt) State 98 86 fdescr: "number" . $default reduce using rule 86 (fdescr) State 99 83 flowctl_stmt: "exit" fdescr . "string" 84 | "exit" fdescr . "identifier" "string" shift, and go to state 148 "identifier" shift, and go to state 149 State 100 106 attrib_stmt: "rule attribute" string . $default reduce using rule 106 (attrib_stmt) State 101 27 rulebody: rulebody stmt . $default reduce using rule 27 (rulebody) State 102 8 eol: eol . "end of line" 28 stmt: match_stmt eol . "end of line" shift, and go to state 10 $default reduce using rule 28 (stmt) State 103 8 eol: eol . "end of line" 29 stmt: set_stmt eol . "end of line" shift, and go to state 10 $default reduce using rule 29 (stmt) State 104 8 eol: eol . "end of line" 30 stmt: map_stmt eol . "end of line" shift, and go to state 10 $default reduce using rule 30 (stmt) State 105 8 eol: eol . "end of line" 34 stmt: flowctl_stmt eol . "end of line" shift, and go to state 10 $default reduce using rule 34 (stmt) State 106 8 eol: eol . "end of line" 31 stmt: delete_stmt eol . "end of line" shift, and go to state 10 $default reduce using rule 31 (stmt) State 107 37 stmt: include_stmt skipeol . $default reduce using rule 37 (stmt) State 108 8 eol: eol . "end of line" 32 stmt: limits_stmt eol . "end of line" shift, and go to state 10 $default reduce using rule 32 (stmt) State 109 8 eol: eol . "end of line" 36 stmt: remopt_stmt eol . "end of line" shift, and go to state 10 $default reduce using rule 36 (stmt) State 110 8 eol: eol . "end of line" 33 stmt: environ_stmt eol . "end of line" shift, and go to state 10 $default reduce using rule 33 (stmt) State 111 8 eol: eol . "end of line" 35 stmt: attrib_stmt eol . "end of line" shift, and go to state 10 $default reduce using rule 35 (stmt) State 112 8 eol: eol . "end of line" 18 glob_stmt: "global attribute" arglist eol . "end of line" shift, and go to state 10 $default reduce using rule 18 (glob_stmt) State 113 20 arglist: arglist arg . $default reduce using rule 20 (arglist) State 114 72 set_stmt: "set" "identifier" "=~" . value "string" shift, and go to state 21 "identifier" shift, and go to state 22 "number" shift, and go to state 23 string go to state 122 value go to state 150 State 115 71 set_stmt: "set" "identifier" '=' . value 73 | "set" "identifier" '=' . string '~' value "string" shift, and go to state 21 "identifier" shift, and go to state 22 "number" shift, and go to state 23 string go to state 151 value go to state 152 State 116 80 index: '[' "number" . ']' ']' shift, and go to state 153 State 117 68 set_stmt: "set" index "=~" . value "string" shift, and go to state 21 "identifier" shift, and go to state 22 "number" shift, and go to state 23 string go to state 122 value go to state 154 State 118 66 set_stmt: "set" index '=' . value 69 | "set" index '=' . string '~' value "string" shift, and go to state 21 "identifier" shift, and go to state 22 "number" shift, and go to state 23 string go to state 155 value go to state 156 State 119 67 set_stmt: "insert" index '=' . value 70 | "insert" index '=' . string '~' value "string" shift, and go to state 21 "identifier" shift, and go to state 22 "number" shift, and go to state 23 string go to state 157 value go to state 158 State 120 96 optstring: string . $default reduce using rule 96 (optstring) State 121 94 remopt_stmt: "remopt" string optstring . $default reduce using rule 94 (remopt_stmt) State 122 81 value: string . $default reduce using rule 81 (value) State 123 77 map_stmt: "map" "identifier" value . value value "number" "number" defval "string" shift, and go to state 21 "identifier" shift, and go to state 22 "number" shift, and go to state 23 string go to state 122 value go to state 159 State 124 76 map_stmt: "map" index value . value value "number" "number" defval "string" shift, and go to state 21 "identifier" shift, and go to state 22 "number" shift, and go to state 23 string go to state 122 value go to state 160 State 125 44 simple_cond: "!" simple_cond . $default reduce using rule 44 (simple_cond) State 126 108 strlist: '(' . $@1 arglist ')' $default reduce using rule 107 ($@1) $@1 go to state 161 State 127 57 expr: "group" string . $default reduce using rule 57 (expr) State 128 58 expr: "group" strlist . $default reduce using rule 58 (expr) State 129 59 expr: "test" string . $default reduce using rule 59 (expr) State 130 41 compound_cond: compound_cond . "&&" simple_cond 42 | compound_cond . "||" simple_cond 45 simple_cond: '(' compound_cond . ')' "||" shift, and go to state 131 "&&" shift, and go to state 132 ')' shift, and go to state 162 State 131 42 compound_cond: compound_cond "||" . simple_cond "string" shift, and go to state 21 "identifier" shift, and go to state 22 "number" shift, and go to state 23 "!" shift, and go to state 78 "group" shift, and go to state 79 "test" shift, and go to state 80 '(' shift, and go to state 81 simple_cond go to state 163 expr go to state 84 string go to state 85 State 132 41 compound_cond: compound_cond "&&" . simple_cond "string" shift, and go to state 21 "identifier" shift, and go to state 22 "number" shift, and go to state 23 "!" shift, and go to state 78 "group" shift, and go to state 79 "test" shift, and go to state 80 '(' shift, and go to state 81 simple_cond go to state 164 expr go to state 84 string go to state 85 State 133 48 expr: string "==" . literal 50 | string "==" . "number" "string" shift, and go to state 62 "identifier" shift, and go to state 63 "number" shift, and go to state 165 literal go to state 166 State 134 49 expr: string "!=" . literal 51 | string "!=" . "number" "string" shift, and go to state 62 "identifier" shift, and go to state 63 "number" shift, and go to state 167 literal go to state 168 State 135 52 expr: string "<" . "number" "number" shift, and go to state 169 State 136 53 expr: string "<=" . "number" "number" shift, and go to state 170 State 137 54 expr: string ">" . "number" "number" shift, and go to state 171 State 138 55 expr: string ">=" . "number" "number" shift, and go to state 172 State 139 47 expr: string "!~" . regex "string" shift, and go to state 21 "identifier" shift, and go to state 22 "number" shift, and go to state 23 string go to state 173 regex go to state 174 State 140 56 expr: string "in" . strlist '(' shift, and go to state 126 strlist go to state 175 State 141 46 expr: string '~' . regex "string" shift, and go to state 21 "identifier" shift, and go to state 22 "number" shift, and go to state 23 string go to state 173 regex go to state 176 State 142 90 include_stmt: "include" string "end of line" . $default reduce using rule 90 (include_stmt) State 143 93 resource_limits: resource_limits "identifier" . $default reduce using rule 93 (resource_limits) State 144 98 environ_stmt: "setenv" "identifier" '=' . string "string" shift, and go to state 21 "identifier" shift, and go to state 22 "number" shift, and go to state 23 string go to state 177 State 145 105 asgn: "identifier" '=' . value "string" shift, and go to state 21 "identifier" shift, and go to state 22 "number" shift, and go to state 23 string go to state 122 value go to state 178 State 146 103 asgn_list: asgn_list asgn . $default reduce using rule 103 (asgn_list) State 147 89 range: "number" "number" . $default reduce using rule 89 (range) State 148 83 flowctl_stmt: "exit" fdescr "string" . $default reduce using rule 83 (flowctl_stmt) State 149 84 flowctl_stmt: "exit" fdescr "identifier" . $default reduce using rule 84 (flowctl_stmt) State 150 72 set_stmt: "set" "identifier" "=~" value . $default reduce using rule 72 (set_stmt) State 151 73 set_stmt: "set" "identifier" '=' string . '~' value 81 value: string . '~' shift, and go to state 179 $default reduce using rule 81 (value) State 152 71 set_stmt: "set" "identifier" '=' value . $default reduce using rule 71 (set_stmt) State 153 80 index: '[' "number" ']' . $default reduce using rule 80 (index) State 154 68 set_stmt: "set" index "=~" value . $default reduce using rule 68 (set_stmt) State 155 69 set_stmt: "set" index '=' string . '~' value 81 value: string . '~' shift, and go to state 180 $default reduce using rule 81 (value) State 156 66 set_stmt: "set" index '=' value . $default reduce using rule 66 (set_stmt) State 157 70 set_stmt: "insert" index '=' string . '~' value 81 value: string . '~' shift, and go to state 181 $default reduce using rule 81 (value) State 158 67 set_stmt: "insert" index '=' value . $default reduce using rule 67 (set_stmt) State 159 77 map_stmt: "map" "identifier" value value . value "number" "number" defval "string" shift, and go to state 21 "identifier" shift, and go to state 22 "number" shift, and go to state 23 string go to state 122 value go to state 182 State 160 76 map_stmt: "map" index value value . value "number" "number" defval "string" shift, and go to state 21 "identifier" shift, and go to state 22 "number" shift, and go to state 23 string go to state 122 value go to state 183 State 161 108 strlist: '(' $@1 . arglist ')' "string" shift, and go to state 62 "identifier" shift, and go to state 63 "number" shift, and go to state 64 arglist go to state 184 arg go to state 66 literal go to state 67 State 162 45 simple_cond: '(' compound_cond ')' . $default reduce using rule 45 (simple_cond) State 163 42 compound_cond: compound_cond "||" simple_cond . $default reduce using rule 42 (compound_cond) State 164 41 compound_cond: compound_cond "&&" simple_cond . $default reduce using rule 41 (compound_cond) State 165 50 expr: string "==" "number" . $default reduce using rule 50 (expr) State 166 48 expr: string "==" literal . $default reduce using rule 48 (expr) State 167 51 expr: string "!=" "number" . $default reduce using rule 51 (expr) State 168 49 expr: string "!=" literal . $default reduce using rule 49 (expr) State 169 52 expr: string "<" "number" . $default reduce using rule 52 (expr) State 170 53 expr: string "<=" "number" . $default reduce using rule 53 (expr) State 171 54 expr: string ">" "number" . $default reduce using rule 54 (expr) State 172 55 expr: string ">=" "number" . $default reduce using rule 55 (expr) State 173 65 regex: string . $default reduce using rule 65 (regex) State 174 47 expr: string "!~" regex . $default reduce using rule 47 (expr) State 175 56 expr: string "in" strlist . $default reduce using rule 56 (expr) State 176 46 expr: string '~' regex . $default reduce using rule 46 (expr) State 177 98 environ_stmt: "setenv" "identifier" '=' string . $default reduce using rule 98 (environ_stmt) State 178 105 asgn: "identifier" '=' value . $default reduce using rule 105 (asgn) State 179 73 set_stmt: "set" "identifier" '=' string '~' . value "string" shift, and go to state 21 "identifier" shift, and go to state 22 "number" shift, and go to state 23 string go to state 122 value go to state 185 State 180 69 set_stmt: "set" index '=' string '~' . value "string" shift, and go to state 21 "identifier" shift, and go to state 22 "number" shift, and go to state 23 string go to state 122 value go to state 186 State 181 70 set_stmt: "insert" index '=' string '~' . value "string" shift, and go to state 21 "identifier" shift, and go to state 22 "number" shift, and go to state 23 string go to state 122 value go to state 187 State 182 77 map_stmt: "map" "identifier" value value value . "number" "number" defval "number" shift, and go to state 188 State 183 76 map_stmt: "map" index value value value . "number" "number" defval "number" shift, and go to state 189 State 184 20 arglist: arglist . arg 108 strlist: '(' $@1 arglist . ')' "string" shift, and go to state 62 "identifier" shift, and go to state 63 "number" shift, and go to state 64 ')' shift, and go to state 190 arg go to state 113 literal go to state 67 State 185 73 set_stmt: "set" "identifier" '=' string '~' value . $default reduce using rule 73 (set_stmt) State 186 69 set_stmt: "set" index '=' string '~' value . $default reduce using rule 69 (set_stmt) State 187 70 set_stmt: "insert" index '=' string '~' value . $default reduce using rule 70 (set_stmt) State 188 77 map_stmt: "map" "identifier" value value value "number" . "number" defval "number" shift, and go to state 191 State 189 76 map_stmt: "map" index value value value "number" . "number" defval "number" shift, and go to state 192 State 190 108 strlist: '(' $@1 arglist ')' . $default reduce using rule 108 (strlist) State 191 77 map_stmt: "map" "identifier" value value value "number" "number" . defval "string" shift, and go to state 21 "identifier" shift, and go to state 22 "number" shift, and go to state 23 $default reduce using rule 78 (defval) string go to state 193 defval go to state 194 State 192 76 map_stmt: "map" index value value value "number" "number" . defval "string" shift, and go to state 21 "identifier" shift, and go to state 22 "number" shift, and go to state 23 $default reduce using rule 78 (defval) string go to state 193 defval go to state 195 State 193 79 defval: string . $default reduce using rule 79 (defval) State 194 77 map_stmt: "map" "identifier" value value value "number" "number" defval . $default reduce using rule 77 (map_stmt) State 195 76 map_stmt: "map" index value value value "number" "number" defval . $default reduce using rule 76 (map_stmt) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/src/rush-po��������������������������������������������������������������������������������0000755�0001750�0001750�00000006761�14643176121�014457� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh #! -*-perl-*- eval 'exec perl -x -wS $0 ${1+"$@"}' if 0; # This file is part of GNU Rush. # Copyright (C) 2009-2024 Sergey Poznyakoff # # GNU Rush is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Rush is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. use strict; use warnings; use File::Basename; use Getopt::Long qw(:config gnu_getopt no_ignore_case require_order); sub usage { my $code = shift; my $name = basename($0); select(STDERR) if $code; print "usage: $name [-o FILE] [--output=FILE] INPUT\n"; print <<'EOF' Extracts translatable strings from rush.rc to PO file Options: -o, --output=FILE write PO to FILE (default - standard output) Report bugs to <bug-rush@gnu.org> EOF ; exit $code } sub initial_entry { print <<'EOF'; # SOME DESCRIPTIVE TITLE. #, fuzzy msgid "" msgstr "" "Project-Id-Version: rush-config ADDITIONAL-DATA\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" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" "" EOF } sub dequote { my $arg = shift; $arg =~ s/^\"(.*)\"$/$1/; $arg =~ s/\\%/\\\\%/g; return $arg } sub scan { my $filename = shift || '-'; my $fd; if ($filename eq '-') { open($fd, '<&', \*STDIN) or die "can't dup stdin: $!"; } else { open($fd, '<', $filename) or die "can't open file $filename: $!"; } my $line = 0; my $start_line; my $cont_lines = 0; my $version; while (<$fd>) { chomp; if (/\\$/) { $cont_lines++; chop; $_ .= <$fd>; redo; } $start_line = $line + 1; $line = $start_line + $cont_lines; $cont_lines = 0; s/\s+$//; s/^\s+//; if (/^(#.*)?$/) { next; } elsif (!defined($version)) { if (/^rush\s+(\d+\.\d+)$/) { $version = $1; die "unsupported version: $version" unless $version eq '2.0'; $version = 2; next; } else { $version = 1; } } if (/^include\s+(.+)$/) { my $s = $1; if ($version == 2) { $s = dequote($s); } scan($1); next; } if (s/^exit\s+(\d+\s+)?//) { if ($version == 1) { if (s/^\@\@/\@/) { # ok } elsif (/^@/) { next } } elsif (!/^\".*\"$/) { next } } elsif (!s/^(usage|nologin|config)-error\s+//) { next; } if ($version == 1) { s{([\\"])}{\\$1}g } else { $_ = dequote($_) } printf("#: %s:%d\n", $filename, $start_line); printf("msgid \"%s\"\n", $_); printf("msgstr \"\"\n\n"); } close $fd; } my $outfile; GetOptions('output|o=s' => \$outfile, 'help|usage|h' => sub { usage(0) } ) or usage(1); my $input = shift @ARGV or usage(1); usage(1) if @ARGV; if ($input && $input ne '-') { die "input file $input does not exist" unless -f $input; die "input file $input is unreadable" unless -r $input; } else { $input = '-'; } if ($outfile) { open(STDOUT, '>', $outfile) or die "can't open output file $outfile: $!"; } initial_entry(); scan($input); ���������������rush-2.4/src/rushlast.c�����������������������������������������������������������������������������0000644�0001750�0001750�00000005466�14643176121�015146� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* This file is part of GNU Rush. Copyright (C) 2008-2024 Sergey Poznyakoff GNU Rush is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GNU Rush is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. */ #include <rush.h> #include "error.h" char *base_name = RUSH_DB; int display_header = 1; /* Display header line */ int forward = 0; char *format; unsigned long count = 0; #include <rlopt.h> void xalloc_die() { error(1, 0, _("not enough memory")); abort(); } char *default_format = "(user 10 Login) " "(rule 8 Rule) " "(start-time 0 Start) " "(stop-time 0 Stop) " "(duration 7 Time) " "(command 32 Command)"; int want_record(struct rush_wtmp *wtmp, int argc, char **argv) { int i; if (argc == 0) return 1; for (i = 0; i < argc; i++) if (strcmp(argv[i], wtmp->user) == 0) return 1; return 0; } int main(int argc, char **argv) { struct rush_wtmp *wtmp = NULL; rushdb_format_t form; unsigned long i; rush_set_program_name(argv[0]); rush_i18n_init(); format = getenv("RUSHLAST_FORMAT"); if (!format) format = default_format; get_options(argc, argv); argc -= optind; argv += optind; if (format[0] == '@') format = rush_read_format(format + 1); form = rushdb_compile_format(format); if (!form) error(1, 0, _("invalid format: %s"), rushdb_error_string); switch (rushdb_open(base_name, 0)) { case rushdb_result_ok: break; case rushdb_result_eof: exit(0); case rushdb_result_fail: error(1, errno, _("cannot open database file %s"), base_name); } if (display_header) rushdb_print_header(form); if (!forward) rushdb_backward_direction(); i = 0; while (rush_wtmp_read(&wtmp) == 0) { if (want_record(wtmp, argc, argv)) { rushdb_print(form, wtmp, 1); if (count && ++i == count) break; } free(wtmp); } rushdb_close(); exit(0); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/src/cfgram.y�������������������������������������������������������������������������������0000644�0001750�0001750�00000052400�14643176120�014553� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* This file is part of GNU Rush. Copyright (C) 2008-2024 Sergey Poznyakoff GNU Rush is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GNU Rush is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. */ %{ #include <rush.h> #include <cf.h> static int errors; int re_flags = REG_EXTENDED; static struct rush_rule *current_rule; struct asgn { struct asgn *next; char *name; char *value; }; static void add_asgn_list(struct asgn *head, enum envar_type type); static struct transform_node *new_set_node(enum transform_node_type type, char *varname, struct cfloc const *loc); %} %error-verbose %locations %union { char *str; struct cfnumber num; int intval; regex_t regex; struct rush_rule rule; struct test_node *node; struct strlist { char **argv; size_t argc; } strlist; struct { int start; int end; } range; struct asgn *asgn; struct { struct asgn *head; struct asgn *tail; } asgn_list; struct limits_rec *lrec; rule_attrib_setter_t attrib; struct global_attrib *global_attrib; struct argval *arg; struct { int argc; struct argval *head; struct argval *tail; } arglist; struct { unsigned major, minor; } version; int fstest; } %token <str> STRING "string" %token <str> IDENT "identifier" %token <num> NUMBER "number" %token RUSH "rush" %token <version> T_VERSION %token RULE "rule" %token GLOBAL "global" %token EOL "end of line" %token SET "set" %token INSERT "insert" %token REMOPT "remopt" %token MAP "map" %token UNSET "unset" %token MATCH "match" %token FALLTHROUGH "fallthrough" %token INCLUDE "include" %token LIMITS "limits" %token CLRENV "clrenv" %token SETENV "setenv" %token UNSETENV "unsetenv" %token KEEPENV "keepenv" %token EVALENV "evalenv" %token DELETE "delete" %token EXIT "exit" %token <attrib> ATTRIB "rule attribute" %token <global_attrib> GLATTRIB "global attribute" %token BOGUS "erroneous token" %token OR "||" %token AND "&&" %token NOT "!" %token EQ "==" %token NE "!=" %token LT "<" %token LE "<=" %token GT ">" %token GE ">=" %token XF "=~" %token NM "!~" %token IN "in" %token GROUP "group" %token <fstest> TEST "test" %left OR %left AND %left NOT %nonassoc EQ NE LT LE GT GE NM XF '~' IN GROUP %type <intval> fdescr index %type <str> literal string optstring value defval ruleid %type <regex> regex %type <node> expr compound_cond simple_cond %type <range> range %type <lrec> resource_limits %type <asgn> asgn %type <asgn_list> asgn_list %type <strlist> strlist %type <arg> arg %type <arglist> arglist %% rcfile : skipeol select ; select : preface skipeol content { if (errors) YYERROR; } | BOGUS { if (parse_old_rc()) YYERROR; } ; preface : RUSH T_VERSION EOL { if ($2.major == 2 && $2.minor == 0) { cflex_normal(); } else { cferror(&@2, _("unsupported configuration file version")); YYERROR; } } ; skipeol : /* empty */ | eol ; eol : EOL | eol EOL ; content : /* empty */ | rulelist ; rulelist : rule | rulelist rule ; rule : rulehdr rulebody | globhdr globbody ; globhdr : GLOBAL eol ; globbody : glob_stmt | globbody glob_stmt ; glob_stmt : GLATTRIB arglist eol { struct cfloc loc; loc.beg = @1.beg; loc.end = @2.end; global_attrib_set($1, $2.argc, $2.head, &loc); arglist_free($2.head); } ; arglist : arg { $$.head = $$.tail = $1; $$.argc = 1; } | arglist arg { LIST_APPEND($2, $1.head, $1.tail); $1.argc++; $$ = $1; } ; arg : literal { $$ = xcalloc(1, sizeof(*$$)); $$->next = NULL; $$->loc = @1; $$->isnum = 0; $$->strval = $1; } | NUMBER { $$ = xcalloc(1, sizeof(*$$)); $$->next = NULL; $$->loc = @1; $$->isnum = 1; $$->strval = $1.strval; $$->intval = $1.intval; } ; rulehdr : RULE ruleid eol { current_rule = new_rush_rule($2); current_rule->file = @1.beg.filename; current_rule->line = @1.beg.line; free($2); } ; ruleid : /* empty */ { $$ = NULL; } | string ; rulebody : stmt | rulebody stmt ; stmt : match_stmt eol | set_stmt eol | map_stmt eol | delete_stmt eol | limits_stmt eol | environ_stmt eol | flowctl_stmt eol | attrib_stmt eol | remopt_stmt eol | include_stmt skipeol | error { skiptoeol(); restorenormal(); yyerrok; yyclearin; errors = 1; } ; /* ****************** Match statement ****************** */ match_stmt : MATCH compound_cond { if (current_rule->test_node) { struct test_node *np = new_test_node(test_and); np->v.arg[0] = current_rule->test_node; np->v.arg[1] = $2; current_rule->test_node = np; } else current_rule->test_node = $2; } ; compound_cond : simple_cond | compound_cond AND simple_cond { $$ = new_test_node(test_and); $$->v.arg[0] = $1; $$->v.arg[1] = $3; } | compound_cond OR simple_cond { $$ = new_test_node(test_or); $$->v.arg[0] = $1; $$->v.arg[1] = $3; } ; simple_cond: expr | NOT simple_cond { $$ = new_test_node(test_not); $$->v.arg[0] = $2; } | '(' compound_cond ')' { $$ = $2; } ; expr : string '~' regex { $$ = new_test_node(test_cmps); $$->v.cmp.op = cmp_match; $$->v.cmp.larg = $1; $$->v.cmp.rarg.rx = $3; } | string NM regex { struct test_node *np = new_test_node(test_cmps); np->v.cmp.op = cmp_match; np->v.cmp.larg = $1; np->v.cmp.rarg.rx = $3; $$ = new_test_node(test_not); $$->v.arg[0] = np; } | string EQ literal { $$ = new_test_node(test_cmps); $$->v.cmp.op = cmp_eq; $$->v.cmp.larg = $1; $$->v.cmp.rarg.str = $3; } | string NE literal { $$ = new_test_node(test_cmps); $$->v.cmp.op = cmp_ne; $$->v.cmp.larg = $1; $$->v.cmp.rarg.str = $3; } | string EQ NUMBER { $$ = new_test_node(test_cmpn); $$->v.cmp.op = cmp_eq; $$->v.cmp.larg = $1; $$->v.cmp.rarg.num = $3.intval; } | string NE NUMBER { $$ = new_test_node(test_cmpn); $$->v.cmp.op = cmp_ne; $$->v.cmp.larg = $1; $$->v.cmp.rarg.num = $3.intval; } | string LT NUMBER { $$ = new_test_node(test_cmpn); $$->v.cmp.op = cmp_lt; $$->v.cmp.larg = $1; $$->v.cmp.rarg.num = $3.intval; } | string LE NUMBER { $$ = new_test_node(test_cmpn); $$->v.cmp.op = cmp_le; $$->v.cmp.larg = $1; $$->v.cmp.rarg.num = $3.intval; } | string GT NUMBER { $$ = new_test_node(test_cmpn); $$->v.cmp.op = cmp_gt; $$->v.cmp.larg = $1; $$->v.cmp.rarg.num = $3.intval; } | string GE NUMBER { $$ = new_test_node(test_cmpn); $$->v.cmp.op = cmp_ge; $$->v.cmp.larg = $1; $$->v.cmp.rarg.num = $3.intval; } | string IN strlist { $$ = new_test_node(test_in); $$->v.cmp.op = cmp_in; $$->v.cmp.larg = $1; $$->v.cmp.rarg.strv = $3.argv; } | GROUP string { $$ = new_test_node(test_group); $$->v.groups = xcalloc(2, sizeof($$->v.groups[0])); $$->v.groups[0] = $2; $$->v.groups[1] = NULL; } | GROUP strlist { $$ = new_test_node(test_group); $$->v.groups = $2.argv; } | TEST string { $$ = new_test_node(test_fstest); $$->v.fstest.op = $1; $$->v.fstest.arg = $2; } ; literal : IDENT | STRING ; string : IDENT | STRING | NUMBER { $$ = $1.strval; } ; regex : string { int rc = regcomp(&$$, $1, re_flags); if (rc) { char errbuf[512]; regerror(rc, &$$, errbuf, sizeof(errbuf)); cferror(&@1, _("invalid regexp: %s"), $1); YYERROR; } } ; /* ****************** Set statement ****************** */ set_stmt : SET index '=' value { struct transform_node *node; node = new_transform_node(current_rule, transform_set); node->target.type = target_arg; node->target.v.arg.ins = 0; node->target.v.arg.idx = $2; node->v.xf.pattern = $4; node->v.xf.trans = NULL; } | INSERT index '=' value { struct transform_node *node; node = new_transform_node(current_rule, transform_set); node->target.type = target_arg; node->target.v.arg.ins = 1; node->target.v.arg.idx = $2; node->v.xf.pattern = $4; node->v.xf.trans = NULL; } | SET index XF value { struct transform_node *node; node = new_transform_node(current_rule, transform_set); node->target.type = target_arg; node->target.v.arg.ins = 0; node->target.v.arg.idx = $2; node->v.xf.pattern = NULL; node->v.xf.trans = compile_transform_expr($4, re_flags, &@4); } | SET index '=' string '~' value { struct transform_node *node; node = new_transform_node(current_rule, transform_set); node->target.type = target_arg; node->target.v.arg.ins = 0; node->target.v.arg.idx = $2; node->v.xf.pattern = $4; node->v.xf.trans = compile_transform_expr($6, re_flags, &@6); } | INSERT index '=' string '~' value { struct transform_node *node; node = new_transform_node(current_rule, transform_set); node->target.type = target_arg; node->target.v.arg.ins = 1; node->target.v.arg.idx = $2; node->v.xf.pattern = $4; node->v.xf.trans = compile_transform_expr($6, re_flags, &@6); } | SET IDENT '=' value { struct transform_node *node = new_set_node(transform_set, $2, &@2); if (node) { node->v.xf.pattern = $4; node->v.xf.trans = NULL; } } | SET IDENT XF value { struct transform_node *node = new_set_node(transform_set, $2, &@2); if (node) { node->v.xf.pattern = NULL; node->v.xf.trans = compile_transform_expr($4, re_flags, &@4); } } | SET IDENT '=' string '~' value { struct transform_node *node = new_set_node(transform_set, $2, &@2); if (node) { node->v.xf.pattern = $4; node->v.xf.trans = compile_transform_expr($6, re_flags, &@6); } } | UNSET IDENT { struct transform_node *node = new_set_node(transform_delete, $2, &@2); if (node) { node->target.v.name = $2; } } | UNSET index { if ($2 == 0) { cferror(&@2, _("$0 cannot be unset")); errors++; } else { struct transform_node *node = new_transform_node(current_rule, transform_delete); node->target.type = target_arg; node->target.v.arg.ins = 0; node->target.v.arg.idx = $2; node->v.arg_end = $2; } } ; map_stmt : MAP index value value value NUMBER NUMBER defval { struct transform_node *node; node = new_transform_node(current_rule, transform_map); node->target.type = target_arg; node->target.v.arg.ins = 0; node->target.v.arg.idx = $2; node->v.map.file = $3; node->v.map.delim = $4; node->v.map.key = $5; node->v.map.key_field = $6.intval; node->v.map.val_field = $7.intval; node->v.map.defval = $8; free($6.strval); free($7.strval); } | MAP IDENT value value value NUMBER NUMBER defval { struct transform_node *node; node = new_set_node(transform_map, $2, &@2); node->target.v.name = $2; node->v.map.file = $3; node->v.map.delim = $4; node->v.map.key = $5; node->v.map.key_field = $6.intval; node->v.map.val_field = $7.intval; node->v.map.defval = $8; free($6.strval); free($7.strval); } ; defval : /* empty */ { $$ = NULL; } | string ; index : '[' NUMBER ']' { $$ = $2.intval; free($2.strval); } ; value : string ; /* ****************** Flowctl statement ****************** */ flowctl_stmt: FALLTHROUGH { current_rule->fall_through = 1; } | EXIT fdescr STRING { current_rule->error = new_error($2, $3, 0); free($3); } | EXIT fdescr IDENT { int n = string_to_error_index($3); if (n == -1) { cferror(&@1, _("Unknown message reference")); YYERROR; } else current_rule->error = new_standard_error($2, n); free($3); } ; fdescr : /* empty */ { $$ = 2; } | NUMBER { $$ = $1.intval; free($1.strval); } ; /* ****************** Delete statement ****************** */ delete_stmt: DELETE range { if ($2.start == 0 || $2.end == 0) { cferror(&@2, _("$0 cannot be deleted")); errors++; } else { struct transform_node *node = new_transform_node(current_rule, transform_delete); node->target.type = target_arg; node->target.v.arg.ins = 0; node->target.v.arg.idx = $2.start; node->v.arg_end = $2.end; } } ; range : NUMBER { $$.start = $$.end = $1.intval; free($1.strval); } | NUMBER NUMBER { $$.start = $1.intval; $$.end = $2.intval; free($1.strval); free($2.strval); } ; /* ****************** Include statement In contrast to the rest of statements, the EOL must be a part of this one, in order to avoid spurious look-aheads. ****************** */ include_stmt: INCLUDE string EOL { if (cflex_include($2, &@2)) YYERROR; free($2); } ; /* ****************** Limits ****************** */ limits_stmt : LIMITS resource_limits { current_rule->limits = $2; } ; resource_limits: IDENT { char *p; $$ = limits_record_create(); switch (limits_record_add($$, $1, &p)) { case lrec_ok: break; case lrec_error: cferror(&@1, _("unrecognized resource limit: %s"), p); break; case lrec_badval: cferror(&@1, _("bad value: %s"), p); break; } free($1); } | resource_limits IDENT { char *p; switch (limits_record_add($1, $2, &p)) { case lrec_ok: break; case lrec_error: cferror(&@1, _("unrecognized resource limit: %s"), p); break; case lrec_badval: cferror(&@1, _("bad value: %s"), p); break; } free($2); $$ = $1; } ; /* ************************* Remove option statement ************************* */ remopt_stmt: REMOPT string optstring { struct transform_node *node; size_t n; n = strspn($2 + 1, ":"); if ($2[n + 1]) { struct cfloc loc; loc.beg = @2.beg; loc.beg.column += n + 1; loc.end = loc.beg; cferror(&loc, _("invalid character in short option designator")); cferror(&loc, _("short option letter can be followed only by zero to two colons")); errors++; } else { if (n > 2) { struct cfloc loc; loc.beg = @2.beg; loc.beg.column += n; loc.end = loc.beg; cferror(&loc, _("ignoring extra character in short option designator")); cferror(&loc, _("short option letter can be followed only by zero to two colons")); } node = new_transform_node(current_rule, transform_remopt); node->target.type = target_command; node->v.remopt.s_opt = $2; node->v.remopt.l_opt = $3; } } ; optstring : /* empty */ { $$ = NULL; } | string ; /* ************************* Environment modification ************************* */ environ_stmt: CLRENV { current_rule->clrenv = 1; } | SETENV IDENT '=' string { new_envar(current_rule, $2, strlen($2), $4, strlen($4), envar_set); free($2); free($4); } | EVALENV string { new_envar(current_rule, "", 0, $2, strlen($2), envar_eval); free($2); } | UNSETENV asgn_list { add_asgn_list($2.head, envar_unset); } | KEEPENV asgn_list { add_asgn_list($2.head, envar_keep); } ; asgn_list : asgn { $$.head = $$.tail = $1; } | asgn_list asgn { LIST_APPEND($2, $1.head, $1.tail); $$ = $1; } ; asgn : literal { $$ = xmalloc(sizeof(*$$)); $$->next = NULL; $$->name = $1; $$->value = NULL; } | IDENT '=' value { $$ = xmalloc(sizeof(*$$)); $$->next = NULL; $$->name = $1; $$->value = $3; } ; /* ******************* Attribute statement ******************* */ attrib_stmt : ATTRIB string { $1(current_rule, $2, &@2); free($2); } ; strlist : '(' { cflex_pushargs(); } arglist ')' { int i; struct argval *arg; cflex_popargs(); $$.argc = $3.argc; $$.argv = xcalloc($3.argc + 1, sizeof($$.argv[0])); for (i = 0, arg = $3.head; i < $3.argc; i++, arg = arg->next) { $$.argv[i] = arg->strval; arg->strval = NULL; } arglist_free($3.head); } ; %% void yyerror(char const *fmt, ...) { va_list ap; va_start(ap, fmt); vcferror(&curloc, fmt, ap); va_end(ap); errors = 1; } void cfgram_debug(int v) { #ifdef YYDEBUG yydebug = v; #endif } struct rush_rule * new_rush_rule(char const *tag) { struct rush_rule *p = xzalloc(sizeof(*p)); LIST_APPEND(p, rule_head, rule_tail); static unsigned rule_num = 0; rule_num++; if (tag && tag[0]) p->tag = xstrdup(tag); else { char buf[INT_BUFSIZE_BOUND(unsigned)]; char *s = uinttostr(rule_num, buf); p->tag = xmalloc(strlen(s) + 2); p->tag[0] = '#'; strcpy(p->tag + 1, s); } p->mask = NO_UMASK; p->gid = NO_GID; p->fork = rush_undefined; p->acct = rush_undefined; return p; } struct transform_node * new_transform_node(struct rush_rule *rule, enum transform_node_type type) { struct transform_node *p = xzalloc(sizeof(*p)); LIST_APPEND(p, rule->transform_head, rule->transform_tail); p->type = type; return p; } struct test_node * new_test_node(enum test_type type) { struct test_node *p = xzalloc(sizeof(*p)); p->type = type; return p; } struct envar * new_envar(struct rush_rule *rule, char const *name, size_t nlen, char const *value, size_t vlen, enum envar_type type) { struct envar *p = xmalloc(sizeof(*p) + nlen + 1 + (value ? vlen + 1 : 0)); p->next = NULL; p->name = (char*)(p + 1); memcpy(p->name, name, nlen); p->name[nlen] = 0; if (value) { p->value = p->name + nlen + 1; memcpy(p->value, value, vlen); p->value[vlen] = 0; } else { p->value = NULL; } p->type = type; LIST_APPEND(p, rule->envar_head, rule->envar_tail); return p; } static void add_asgn_list(struct asgn *head, enum envar_type type) { for (; head; head = head->next) { new_envar(current_rule, head->name, strlen(head->name), head->value, head->value ? strlen(head->value) : 0, type); free(head->name); free(head->value); } } static struct transform_node * new_set_node(enum transform_node_type type, char *varname, struct cfloc const *loc) { struct transform_node *node; enum transform_target_type tgt; tgt = rush_variable_target(varname); if (tgt == target_readonly) { cferror(loc, _("attempt to modify a read-only variable")); errors++; return NULL; } node = new_transform_node(current_rule, type); node->target.type = tgt; switch (tgt) { case target_command: case target_program: free(varname); if (type == transform_delete) { cferror(loc, _("attempt to unset a read-only variable")); errors++; return NULL; } break; case target_var: node->target.v.name = varname; break; default: die(system_error, NULL, _("INTERNAL ERROR at %s:%d: invalid target type %d"), __FILE__, __LINE__, tgt); } return node; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/src/cf.c�����������������������������������������������������������������������������������0000644�0001750�0001750�00000044511�14643176120�013662� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* This file is part of GNU Rush. Copyright (C) 2008-2024 Sergey Poznyakoff GNU Rush is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GNU Rush is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. */ #include <rush.h> #include <cf.h> void stringbuf_init(struct stringbuf *sb) { sb->buffer = NULL; sb->size = 0; sb->pos = 0; } void stringbuf_free(struct stringbuf *sb) { free(sb->buffer); stringbuf_init(sb); } void stringbuf_add_char(struct stringbuf *sb, int c) { if (sb->pos + 1 > sb->size) sb->buffer = x2realloc(sb->buffer, &sb->size); sb->buffer[sb->pos++] = c; } void stringbuf_add_array(struct stringbuf *sb, char const *str, size_t len) { while (sb->pos + len > sb->size) sb->buffer = x2realloc(sb->buffer, &sb->size); memcpy(sb->buffer + sb->pos, str, len); sb->pos += len; } void stringbuf_add_string(struct stringbuf *sb, char const *str) { stringbuf_add_array(sb, str, strlen(str)); } void stringbuf_add_num(struct stringbuf *sb, unsigned n) { size_t i = sb->pos, j; do { static char dig[] = "0123456789"; stringbuf_add_char(sb, dig[n % 10]); n /= 10; } while (n > 0); for (j = sb->pos-1; j > i; i++, j--) { char c = sb->buffer[i]; sb->buffer[i] = sb->buffer[j]; sb->buffer[j] = c; } } void stringbuf_finish(struct stringbuf *sb) { stringbuf_add_char(sb, 0); } void cfpoint_format(struct cfpoint const *cfp, struct stringbuf *sb) { if (cfp->filename) { stringbuf_add_string(sb, cfp->filename); stringbuf_add_char(sb, ':'); stringbuf_add_num(sb, cfp->line); if (cfp->column) { stringbuf_add_char(sb, '.'); stringbuf_add_num(sb, cfp->column); } } } void cfloc_format(struct cfloc const *cfl, struct stringbuf *sb) { cfpoint_format(&cfl->beg, sb); if (cfl->end.filename) { if (cfl->beg.filename != cfl->end.filename) { stringbuf_add_char(sb, '-'); cfpoint_format(&cfl->end, sb); } else if (cfl->beg.line != cfl->end.line) { stringbuf_add_char(sb, '-'); stringbuf_add_num(sb, cfl->end.line); if (cfl->end.column) { stringbuf_add_char(sb, '.'); stringbuf_add_num(sb, cfl->end.column); } } else if (cfl->beg.column && cfl->beg.column != cfl->end.column) { stringbuf_add_char(sb, '-'); stringbuf_add_num(sb, cfl->end.column); } } } void cfloc_print(struct cfloc const *cfl, FILE *fp) { struct stringbuf sb; stringbuf_init(&sb); cfloc_format(cfl, &sb); fwrite(sb.buffer, sb.pos, 1, fp); stringbuf_free(&sb); } void vcferror(struct cfloc const *loc, char const *fmt, va_list ap) { struct stringbuf sb; stringbuf_init(&sb); cfloc_format(loc, &sb); stringbuf_add_array(&sb, ": ", 2); stringbuf_add_string(&sb, fmt); stringbuf_finish(&sb); vlogmsg(LOG_ERR, sb.buffer, ap); stringbuf_free(&sb); } void cferror(struct cfloc const *loc, char const *fmt, ...) { va_list ap; va_start(ap, fmt); vcferror(loc, fmt, ap); va_end(ap); } struct cfstream_file { CFSTREAM base; FILE *fp; }; #define CFSTREAM_BUFSIZE 1024 static CFSTREAM * cfstream_create(int fd, size_t bs) { CFSTREAM *cf = xmalloc(sizeof(*cf)); cf->fd = fd; cf->buffer = xmalloc(bs); cf->size = bs; cf->level = 0; cf->pos = 0; cf->eol = 0; cf->eof = 0; return cf; } CFSTREAM * cfstream_open_file(char const *filename) { int fd; struct stat st; if (stat(filename, &st)) { die(system_error, NULL, _("cannot stat file %s: %s"), filename, strerror(errno)); } if (check_config_permissions(filename, &st)) die(config_error, NULL, _("%s: file is not safe"), filename); fd = open(filename, O_RDONLY); if (fd == -1) die(system_error, NULL, _("cannot open file %s: %s"), filename, strerror(errno)); return cfstream_create(fd, CFSTREAM_BUFSIZE); } CFSTREAM * cfstream_open_stdin(void) { return cfstream_create(0, CFSTREAM_BUFSIZE); } CFSTREAM * cfstream_open_mem(char const *buffer, size_t len) { CFSTREAM *cf = cfstream_create(-1, len); memcpy(cf->buffer, buffer, len); cf->size = len; cf->level = len; return cf; } void cfstream_close(CFSTREAM *cf) { if (cf->fd != -1) close(cf->fd); free(cf->buffer); free(cf); } void cfstream_rewind(CFSTREAM *cf) { if (cf->fd >= 0) { if (lseek(cf->fd, 0, SEEK_SET) != 0) die(system_error, NULL, "lseek: %s", strerror(errno)); cf->level = 0; } else cf->level = cf->size; cf->pos = 0; cf->eol = 0; cf->eof = 0; } static inline size_t cfstream_buf_avail(CFSTREAM *cf) { return cf->level - cf->pos; } static size_t cfstream_avail(CFSTREAM *cf) { size_t avail = cfstream_buf_avail(cf); if (avail == 0) { if (cf->eof || cf->fd == -1) return 0; else { ssize_t rc; rc = read(cf->fd, cf->buffer, cf->size); if (rc == -1) die(system_error, NULL, "read: %s", strerror(errno)); cf->level = rc; cf->pos = 0; if (rc == 0) { cf->eof = 1; return 0; } avail = cfstream_buf_avail(cf); } } return avail; } static inline char const * cfstream_buf_ptr(CFSTREAM *cf) { return cf->buffer + cf->pos; } static inline void cfstream_buf_advance(CFSTREAM *cf, size_t n) { cf->pos += n; } ssize_t cfstream_read(CFSTREAM *cf, char *bufptr, size_t bufsize) { size_t nrd = 0; if (!cf) return 0; while (nrd < bufsize) { size_t n = bufsize - nrd; size_t avail = cfstream_avail(cf); if (avail == 0) { if (!cf->eol) { /* Force final newline */ bufptr[nrd++] = '\n'; cf->eol = 1; } break; } if (n > avail) n = avail; memcpy(bufptr + nrd, cfstream_buf_ptr(cf), n); cfstream_buf_advance(cf, n); nrd += n; cf->eol = bufptr[nrd-1] == '\n'; } return nrd; } int cfstream_same_file(CFSTREAM *cf, struct stat const *st) { struct stat fst; if (cf->fd < 0) return 0; if (fstat(cf->fd, &fst)) { logmsg(LOG_ERR, "fstat: %s", strerror(errno)); return 0; } return fst.st_dev == st->st_dev && fst.st_ino == st->st_ino; } const char default_entry[] = "" #ifdef RUSH_DEFAULT_CONFIG RUSH_DEFAULT_CONFIG #endif ; void cfparse(void) { CFSTREAM *cf; char const *filename; if (access(rush_config_file, F_OK) == 0) { cf = cfstream_open_file(rush_config_file); filename = rush_config_file; } else if (default_entry[0]) { cf = cfstream_open_mem(default_entry, sizeof(default_entry) - 1); filename = "<built-in>"; } else { die(usage_error, NULL, _("configuration file does not exist and no default is provided")); } cflex_setup(cf, filename, 1); if (yyparse()) die(config_error, NULL, _("errors in configuration file")); } int parse_file_mode(const char *val, mode_t *mode, struct cfloc const *loc) { char *q; unsigned int n = strtoul(val, &q, 8); if (*q || (n & ~0777)) { cferror(loc, "%s", _("not a valid file mode")); return 1; } *mode = n; return 0; } int absolute_dir_p(const char *dir) { const char *p; enum { state_init, state_dot, state_double_dot } state = state_init; if (dir[0] != '/') return 0; for (p = dir; *p; p++) { switch (*p) { case '.': switch (state) { case state_init: state = state_dot; break; case state_dot: state = state_double_dot; break; case state_double_dot: state = state_init; } break; case '/': if (state != state_init) return 0; break; default: state = state_init; } } return state == state_init; } static int check_dir(const char *dir, struct cfloc const *loc) { struct stat st; if (dir[0] == '~') { if (dir[1] && !absolute_dir_p(dir + 1)) { cferror(loc, "%s", _("not an absolute directory name")); return 1; } return 0; } else if (!absolute_dir_p(dir)) { cferror(loc, "%s", _("not an absolute directory name")); return 1; } if (stat(dir, &st)) { cferror(loc, _("cannot stat %s: %s"), dir, strerror(errno)); return 1; } else if (!S_ISDIR(st.st_mode)) { cferror(loc, _("%s is not a directory"), dir); return 1; } return 0; } static int get_bool(const char *val, int *res) { if (strcmp (val, "yes") == 0 || strcmp (val, "on") == 0 || strcmp (val, "t") == 0 || strcmp (val, "true") == 0 || strcmp (val, "1") == 0) *res = 1; else if (strcmp (val, "no") == 0 || strcmp (val, "off") == 0 || strcmp (val, "nil") == 0 || strcmp (val, "false") == 0 || strcmp (val, "0") == 0) *res = 0; else return 1; return 0; } static int copy_part(const char *cstr, const char *p, char **pbuf) { size_t len = p - cstr; char *buf = malloc(len + 1); if (!buf) return 1; memcpy(buf, cstr, len); buf[len] = 0; *pbuf = buf; return 0; } static int parse_conn(const char *cstr, char **pport, char **ppath) { const char *p = strchr (cstr, ':'); if (!p) { *pport = NULL; *ppath = strdup(cstr); return *ppath == NULL; } else if (copy_part(cstr, p, ppath)) return 1; else cstr = p + 1; *pport = strdup(cstr); return *pport == NULL; } struct socket_family { char *name; size_t len; int family; }; static struct socket_family socket_family[] = { #define DEF(s, f) { #s, sizeof(#s)-1, f } DEF(inet, AF_INET), DEF(unix, AF_UNIX), DEF(local, AF_UNIX), { NULL } #undef DEF }; static struct socket_family * find_family(const char *s, size_t len) { struct socket_family *fp; for (fp = socket_family; fp->name; fp++) if (len == fp->len) return fp; return NULL; } static int parse_url(struct cfloc const *loc, const char *cstr, int *pfamily, char **pport, char **ppath) { const char *p; p = strchr(cstr, ':'); if (p) { struct socket_family *fp = find_family(cstr, p - cstr); if (!fp) { cferror(loc, "%s", _("unknown address family")); return 1; } *pfamily = fp->family; cstr = p + 1; if (cstr[0] == '/') { if (cstr[1] == '/') { return parse_conn(cstr + 2, pport, ppath); } else if (*pfamily == AF_UNIX) { *pport = NULL; *ppath = strdup(cstr); return *ppath == NULL; } } else { cferror(loc, "%s", _("malformed URL")); return 1; } } else { *pfamily = AF_UNIX; *pport = NULL; *ppath = strdup(cstr); return *ppath == NULL; } return 0; } static int make_socket(struct cfloc const *loc, int family, char *port, char *path, struct rush_sockaddr *pa) { union { struct sockaddr sa; struct sockaddr_un s_un; struct sockaddr_in s_in; } addr; socklen_t socklen; switch (family) { case AF_UNIX: if (port) { cferror(loc, "%s", _("port is meaningless for UNIX sockets")); return 1; } if (strlen(path) > sizeof addr.s_un.sun_path) { errno = EINVAL; cferror(loc, "%s", _("UNIX socket name too long")); return 1; } addr.sa.sa_family = PF_UNIX; socklen = sizeof(addr.s_un); strcpy(addr.s_un.sun_path, path); break; case AF_INET: { struct addrinfo hints, *res; int rc; memset(&hints, 0, sizeof(hints)); hints.ai_family = AF_INET; hints.ai_socktype = SOCK_STREAM; rc = getaddrinfo(path, port ? port : "tcpmux", &hints, &res); if (rc) { cferror(loc, "%s", _("gettaddrinfo: %s"), gai_strerror(rc)); return 1; } socklen = sizeof(addr.s_in); memmove(&addr.s_in, res->ai_addr, socklen); freeaddrinfo(res); } break; default: cferror(loc, "%s", _("unsupported address family")); return 1; } pa->len = socklen; pa->sa = xmalloc(socklen); memcpy(pa->sa, &addr.sa, socklen); return 0; } int attrib_umask(struct rush_rule *rule, char const *arg, struct cfloc const *loc) { return parse_file_mode(arg, &rule->mask, loc); } int attrib_chroot(struct rush_rule *rule, char const *arg, struct cfloc const *loc) { char *chroot_dir = xstrdup(arg); int rc = 0; if (trimslash(chroot_dir) == 0) { cferror(loc, "%s", _("invalid chroot directory")); rc = 1; } else if (check_dir(chroot_dir, loc)) rc = 1; if (rc) free(chroot_dir); else rule->chroot_dir = chroot_dir; return rc; } int attrib_chdir(struct rush_rule *rule, char const *arg, struct cfloc const *loc) { rule->home_dir = xstrdup(arg); if (trimslash(rule->home_dir) == 0) { cferror(loc, "%s", _("invalid home directory")); return 1; } return 0; } int attrib_fork(struct rush_rule *rule, char const *arg, struct cfloc const *loc) { int yes; if (get_bool(arg, &yes)) { cferror(loc, _("expected boolean value, but found `%s'"), arg); return 1; } rule->fork = yes ? rush_true : rush_false; return 0; } int attrib_acct(struct rush_rule *rule, char const *arg, struct cfloc const *loc) { int yes; if (get_bool(arg, &yes)) { cferror(loc, _("expected boolean value, but found `%s'"), arg); return 1; } rule->acct = yes ? rush_true : rush_false; return 0; } int attrib_post_socket(struct rush_rule *rule, char const *arg, struct cfloc const *loc) { int family; char *path; char *port; int rc; if (parse_url(loc, arg, &family, &port, &path)) return 1; rc = make_socket(loc, family, port ? port : "tcpmux", path, &rule->post_sockaddr); free(port); free(path); return rc; } static int attrib_text_domain(struct rush_rule *rule, char const *arg, struct cfloc const *loc) { rule->i18n.text_domain = xstrdup(arg); return 0; } static int attrib_locale_dir(struct rush_rule *rule, char const *arg, struct cfloc const *loc) { rule->i18n.localedir = xstrdup(arg); return 0; } static int attrib_locale(struct rush_rule *rule, char const *arg, struct cfloc const *loc) { rule->i18n.locale = xstrdup(arg); return 0; } static int attrib_interactive(struct rush_rule *rule, char const *arg, struct cfloc const *loc) { if (get_bool(arg, &rule->interactive)) { cferror(loc, _("expected boolean value, but found `%s'"), arg); return 1; } return 0; } static int attrib_newgroup(struct rush_rule *rule, char const *arg, struct cfloc const *loc) { struct group *grp; if (c_isdigit(arg[0])) { char *p; unsigned long n = strtoul(arg, &p, 10); if (*p == 0) { rule->gid = n; return 0; } } grp = getgrnam(arg); if (!grp) { cferror(loc, _("no such group: %s"), arg); return 1; } rule->gid = grp->gr_gid; return 0; } struct rule_attrib { char const *name; rule_attrib_setter_t setter; }; static struct rule_attrib attrib[] = { { "umask", attrib_umask }, { "chroot", attrib_chroot }, { "chdir", attrib_chdir }, { "fork", attrib_fork }, { "acct", attrib_acct }, { "post-socket", attrib_post_socket }, { "text-domain", attrib_text_domain }, { "locale-dir", attrib_locale_dir }, { "locale", attrib_locale }, { "interactive", attrib_interactive }, { "newgroup", attrib_newgroup }, { "newgrp", attrib_newgroup }, { NULL } }; rule_attrib_setter_t rule_attrib_lookup(char const *name) { struct rule_attrib *ap; for (ap = attrib; ap->name; ap++) if (strcmp(ap->name, name) == 0) return ap->setter; return NULL; } static int glattrib_debug(int argc, struct argval *arghead) { if (debug_level == 0) debug_level = arghead->intval; return 0; } static int glattrib_sleep_time(int argc, struct argval *arghead) { sleep_time = arghead->intval; return 0; } static int glattrib_message(int argc, struct argval *arghead) { int n = string_to_error_index(arghead->strval); if (n == -1) { cferror(&arghead->loc, _("Unknown message reference")); return 1; } set_error_msg(n, arghead->next->strval); return 0; } static int glattrib_regexp(int argc, struct argval *arg) { for (; arg; arg = arg->next) { int enable, flag; char *p = arg->strval; switch (*p) { case '+': p++; enable = 1; break; case '-': p++; enable = 0; break; default: enable = 1; } if (strcmp(p, "extended") == 0) flag = REG_EXTENDED; else if (strcmp(p, "basic") == 0) { flag = REG_EXTENDED; enable = !enable; } else if (strcmp(p, "icase") == 0 || strcmp(p, "ignore-case") == 0) flag = REG_ICASE; else { cferror(&arg->loc, _("unknown regexp flag: %s"), p); return 1; } if (enable) re_flags |= flag; else re_flags &= ~flag; } return 0; } static int glattrib_include_security(int argc, struct argval *arg) { int rc = 0; for (; arg; arg = arg->next) { if (cfck_keyword(arg->strval)) { cferror(&arg->loc, _("unknown keyword: %s"), arg->strval); rc = 1; } } return rc; } static int glattrib_acct_file_mode(int argc, struct argval *arg) { return parse_file_mode(arg->strval, &rushdb_file_mode, &arg->loc); } static int glattrib_acct_dir_mode(int argc, struct argval *arg) { return parse_file_mode(arg->strval, &rushdb_dir_mode, &arg->loc); } static int glattrib_acct_umask(int argc, struct argval *arg) { return parse_file_mode(arg->strval, &rushdb_umask, &arg->loc); } static int glattrib_expand_undef(int argc, struct argval *arg) { expand_undefined = arg->intval; return 0; } static struct global_attrib global_attrib[] = { { "debug", "n", glattrib_debug }, { "sleep-time", "n", glattrib_sleep_time }, { "message", "ss", glattrib_message }, { "regexp", "s.", glattrib_regexp }, { "include-security", "s.", glattrib_include_security }, { "acct-file-mode", "s", glattrib_acct_file_mode }, { "acct-dir-mode", "s", glattrib_acct_dir_mode }, { "acct-umask", "s", glattrib_acct_umask }, { "expand-undefined", "b", glattrib_expand_undef }, { NULL } }; struct global_attrib * global_attrib_lookup(const char *name) { struct global_attrib *ap; for (ap = global_attrib; ap->name; ap++) { if (strcmp(ap->name, name) == 0) return ap; } return NULL; } void global_attrib_set(struct global_attrib *glatt, int argc, struct argval *arghead, struct cfloc const *loc) { struct argval *arg; int i; for (i = 0, arg = arghead; arg; arg = arg->next) { switch (glatt->argt[i]) { case 'n': if (!arg->isnum) { cferror(&arg->loc, "%s", _("expected numeric argument")); return; } i++; break; case 's': i++; break; case 'b': if (get_bool(arg->strval, &arg->intval)) { cferror(loc, _("expected boolean value, but found `%s'"), arg->strval); return; } i++; break; case '.': break; case 0: cferror(&arg->loc, "%s", _("too many arguments")); return; } } if (glatt->argt[i] && glatt->argt[i] != '.') { cferror(loc, "%s", _("not enough many arguments")); return; } glatt->setter(argc, arghead); } void arglist_free(struct argval *arg) { while (arg) { struct argval *next = arg->next; free(arg->strval); free(arg); arg = next; } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/src/Makefile.in����������������������������������������������������������������������������0000644�0001750�0001750�00000214040�14655401223�015165� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # This file is part of GNU Rush. # Copyright (C) 2008-2024 Sergey Poznyakoff # # GNU Rush is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Rush is distributed in the hope that 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/>. 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@ sbin_PROGRAMS = rush$(EXEEXT) bin_PROGRAMS = rushlast$(EXEEXT) rushwho$(EXEEXT) subdir = src ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/doc/imprimatur/imprimatur.m4 \ $(top_srcdir)/m4/00gnulib.m4 $(top_srcdir)/m4/__inline.m4 \ $(top_srcdir)/m4/absolute-header.m4 $(top_srcdir)/m4/alloca.m4 \ $(top_srcdir)/m4/assert_h.m4 $(top_srcdir)/m4/btowc.m4 \ $(top_srcdir)/m4/builtin-expect.m4 $(top_srcdir)/m4/c-bool.m4 \ $(top_srcdir)/m4/calloc.m4 $(top_srcdir)/m4/close.m4 \ $(top_srcdir)/m4/codeset.m4 \ $(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup2.m4 \ $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \ $(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \ $(top_srcdir)/m4/error_h.m4 $(top_srcdir)/m4/extensions.m4 \ $(top_srcdir)/m4/extern-inline.m4 $(top_srcdir)/m4/fcntl-o.m4 \ $(top_srcdir)/m4/fcntl.m4 $(top_srcdir)/m4/fcntl_h.m4 \ $(top_srcdir)/m4/flexmember.m4 $(top_srcdir)/m4/free.m4 \ $(top_srcdir)/m4/fstat.m4 $(top_srcdir)/m4/getdelim.m4 \ $(top_srcdir)/m4/getdtablesize.m4 $(top_srcdir)/m4/getline.m4 \ $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/getprogname.m4 \ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gnulib-common.m4 \ $(top_srcdir)/m4/gnulib-comp.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/include_next.m4 \ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/inttostr.m4 \ $(top_srcdir)/m4/inttypes.m4 $(top_srcdir)/m4/langinfo_h.m4 \ $(top_srcdir)/m4/largefile.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/limits-h.m4 $(top_srcdir)/m4/localcharset.m4 \ $(top_srcdir)/m4/locale-fr.m4 $(top_srcdir)/m4/locale-ja.m4 \ $(top_srcdir)/m4/locale-zh.m4 $(top_srcdir)/m4/locale_h.m4 \ $(top_srcdir)/m4/localeconv.m4 $(top_srcdir)/m4/lock.m4 \ $(top_srcdir)/m4/malloc.m4 $(top_srcdir)/m4/malloca.m4 \ $(top_srcdir)/m4/mbrtowc.m4 $(top_srcdir)/m4/mbsinit.m4 \ $(top_srcdir)/m4/mbstate_t.m4 $(top_srcdir)/m4/mbtowc.m4 \ $(top_srcdir)/m4/minmax.m4 $(top_srcdir)/m4/mktime.m4 \ $(top_srcdir)/m4/mode_t.m4 $(top_srcdir)/m4/msvc-inval.m4 \ $(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \ $(top_srcdir)/m4/musl.m4 $(top_srcdir)/m4/nl_langinfo.m4 \ $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/nocrash.m4 \ $(top_srcdir)/m4/nstrftime.m4 $(top_srcdir)/m4/off_t.m4 \ $(top_srcdir)/m4/open-cloexec.m4 \ $(top_srcdir)/m4/open-slash.m4 $(top_srcdir)/m4/open.m4 \ $(top_srcdir)/m4/pathmax.m4 $(top_srcdir)/m4/po.m4 \ $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/m4/pthread_rwlock_rdlock.m4 \ $(top_srcdir)/m4/realloc.m4 $(top_srcdir)/m4/reallocarray.m4 \ $(top_srcdir)/m4/regex.m4 $(top_srcdir)/m4/setenv.m4 \ $(top_srcdir)/m4/setlocale_null.m4 $(top_srcdir)/m4/ssize_t.m4 \ $(top_srcdir)/m4/stat-time.m4 $(top_srcdir)/m4/stat.m4 \ $(top_srcdir)/m4/stddef_h.m4 $(top_srcdir)/m4/stdint.m4 \ $(top_srcdir)/m4/stdio_h.m4 $(top_srcdir)/m4/stdlib_h.m4 \ $(top_srcdir)/m4/strerror.m4 $(top_srcdir)/m4/string_h.m4 \ $(top_srcdir)/m4/sys_socket_h.m4 \ $(top_srcdir)/m4/sys_stat_h.m4 $(top_srcdir)/m4/sys_types_h.m4 \ $(top_srcdir)/m4/threadlib.m4 $(top_srcdir)/m4/time_h.m4 \ $(top_srcdir)/m4/time_r.m4 $(top_srcdir)/m4/time_rz.m4 \ $(top_srcdir)/m4/timegm.m4 $(top_srcdir)/m4/tm_gmtoff.m4 \ $(top_srcdir)/m4/tzset.m4 $(top_srcdir)/m4/unistd_h.m4 \ $(top_srcdir)/m4/visibility.m4 $(top_srcdir)/m4/warn-on-use.m4 \ $(top_srcdir)/m4/wchar_h.m4 $(top_srcdir)/m4/wchar_t.m4 \ $(top_srcdir)/m4/wcrtomb.m4 $(top_srcdir)/m4/wctype_h.m4 \ $(top_srcdir)/m4/wint_t.m4 $(top_srcdir)/m4/xalloc.m4 \ $(top_srcdir)/m4/zzgnulib.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 = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sbindir)" \ "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) $(sbin_PROGRAMS) am_rush_OBJECTS = cfck.$(OBJEXT) config.$(OBJEXT) dump.$(OBJEXT) \ limits.$(OBJEXT) map.$(OBJEXT) rush.$(OBJEXT) socket.$(OBJEXT) \ transform.$(OBJEXT) cflex.$(OBJEXT) cfgram.$(OBJEXT) \ cf.$(OBJEXT) rush_OBJECTS = $(am_rush_OBJECTS) rush_LDADD = $(LDADD) rush_DEPENDENCIES = ../lib/librush.a ../gnu/libgnu.a am_rushlast_OBJECTS = rushlast.$(OBJEXT) rushlast_OBJECTS = $(am_rushlast_OBJECTS) rushlast_LDADD = $(LDADD) rushlast_DEPENDENCIES = ../lib/librush.a ../gnu/libgnu.a am_rushwho_OBJECTS = rushwho.$(OBJEXT) rushwho_OBJECTS = $(am_rushwho_OBJECTS) rushwho_LDADD = $(LDADD) rushwho_DEPENDENCIES = ../lib/librush.a ../gnu/libgnu.a 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; }; \ } SCRIPTS = $(bin_SCRIPTS) 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__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/cf.Po ./$(DEPDIR)/cfck.Po \ ./$(DEPDIR)/cfgram.Po ./$(DEPDIR)/cflex.Po \ ./$(DEPDIR)/config.Po ./$(DEPDIR)/dump.Po \ ./$(DEPDIR)/limits.Po ./$(DEPDIR)/map.Po ./$(DEPDIR)/rush.Po \ ./$(DEPDIR)/rushlast.Po ./$(DEPDIR)/rushwho.Po \ ./$(DEPDIR)/socket.Po ./$(DEPDIR)/transform.Po 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 = LEXCOMPILE = $(LEX) $(AM_LFLAGS) $(LFLAGS) 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/ YACCCOMPILE = $(YACC) $(AM_YFLAGS) $(YFLAGS) 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 = $(rush_SOURCES) $(rushlast_SOURCES) $(rushwho_SOURCES) DIST_SOURCES = $(rush_SOURCES) $(rushlast_SOURCES) $(rushwho_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)` am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/build-aux/depcomp $(top_srcdir)/build-aux/ylwrap \ cfgram.c cflex.c DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALLOCA_H = @ALLOCA_H@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ ASSERT_H = @ASSERT_H@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOM4TE = @AUTOM4TE@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ GETOPT_H = @GETOPT_H@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GL_CFLAG_ALLOW_WARNINGS = @GL_CFLAG_ALLOW_WARNINGS@ GL_CFLAG_GNULIB_WARNINGS = @GL_CFLAG_GNULIB_WARNINGS@ GL_GNULIB_ACCESS = @GL_GNULIB_ACCESS@ GL_GNULIB_ALIGNED_ALLOC = @GL_GNULIB_ALIGNED_ALLOC@ GL_GNULIB_ATOLL = @GL_GNULIB_ATOLL@ GL_GNULIB_BTOWC = @GL_GNULIB_BTOWC@ GL_GNULIB_CALLOC_GNU = @GL_GNULIB_CALLOC_GNU@ GL_GNULIB_CALLOC_POSIX = @GL_GNULIB_CALLOC_POSIX@ GL_GNULIB_CANONICALIZE_FILE_NAME = @GL_GNULIB_CANONICALIZE_FILE_NAME@ GL_GNULIB_CHDIR = @GL_GNULIB_CHDIR@ GL_GNULIB_CHMOD = @GL_GNULIB_CHMOD@ GL_GNULIB_CHOWN = @GL_GNULIB_CHOWN@ GL_GNULIB_CLOSE = @GL_GNULIB_CLOSE@ GL_GNULIB_COPY_FILE_RANGE = @GL_GNULIB_COPY_FILE_RANGE@ GL_GNULIB_CREAT = @GL_GNULIB_CREAT@ GL_GNULIB_CTIME = @GL_GNULIB_CTIME@ GL_GNULIB_DPRINTF = @GL_GNULIB_DPRINTF@ GL_GNULIB_DUP = @GL_GNULIB_DUP@ GL_GNULIB_DUP2 = @GL_GNULIB_DUP2@ GL_GNULIB_DUP3 = @GL_GNULIB_DUP3@ GL_GNULIB_DUPLOCALE = @GL_GNULIB_DUPLOCALE@ GL_GNULIB_ENVIRON = @GL_GNULIB_ENVIRON@ GL_GNULIB_EUIDACCESS = @GL_GNULIB_EUIDACCESS@ GL_GNULIB_EXECL = @GL_GNULIB_EXECL@ GL_GNULIB_EXECLE = @GL_GNULIB_EXECLE@ GL_GNULIB_EXECLP = @GL_GNULIB_EXECLP@ GL_GNULIB_EXECV = @GL_GNULIB_EXECV@ GL_GNULIB_EXECVE = @GL_GNULIB_EXECVE@ GL_GNULIB_EXECVP = @GL_GNULIB_EXECVP@ GL_GNULIB_EXECVPE = @GL_GNULIB_EXECVPE@ GL_GNULIB_EXPLICIT_BZERO = @GL_GNULIB_EXPLICIT_BZERO@ GL_GNULIB_FACCESSAT = @GL_GNULIB_FACCESSAT@ GL_GNULIB_FCHDIR = @GL_GNULIB_FCHDIR@ GL_GNULIB_FCHMODAT = @GL_GNULIB_FCHMODAT@ GL_GNULIB_FCHOWNAT = @GL_GNULIB_FCHOWNAT@ GL_GNULIB_FCLOSE = @GL_GNULIB_FCLOSE@ GL_GNULIB_FCNTL = @GL_GNULIB_FCNTL@ GL_GNULIB_FDATASYNC = @GL_GNULIB_FDATASYNC@ GL_GNULIB_FDOPEN = @GL_GNULIB_FDOPEN@ GL_GNULIB_FFLUSH = @GL_GNULIB_FFLUSH@ GL_GNULIB_FFSL = @GL_GNULIB_FFSL@ GL_GNULIB_FFSLL = @GL_GNULIB_FFSLL@ GL_GNULIB_FGETC = @GL_GNULIB_FGETC@ GL_GNULIB_FGETS = @GL_GNULIB_FGETS@ GL_GNULIB_FOPEN = @GL_GNULIB_FOPEN@ GL_GNULIB_FOPEN_GNU = @GL_GNULIB_FOPEN_GNU@ GL_GNULIB_FPRINTF = @GL_GNULIB_FPRINTF@ GL_GNULIB_FPRINTF_POSIX = @GL_GNULIB_FPRINTF_POSIX@ GL_GNULIB_FPURGE = @GL_GNULIB_FPURGE@ GL_GNULIB_FPUTC = @GL_GNULIB_FPUTC@ GL_GNULIB_FPUTS = @GL_GNULIB_FPUTS@ GL_GNULIB_FREAD = @GL_GNULIB_FREAD@ GL_GNULIB_FREE_POSIX = @GL_GNULIB_FREE_POSIX@ GL_GNULIB_FREOPEN = @GL_GNULIB_FREOPEN@ GL_GNULIB_FSCANF = @GL_GNULIB_FSCANF@ GL_GNULIB_FSEEK = @GL_GNULIB_FSEEK@ GL_GNULIB_FSEEKO = @GL_GNULIB_FSEEKO@ GL_GNULIB_FSTAT = @GL_GNULIB_FSTAT@ GL_GNULIB_FSTATAT = @GL_GNULIB_FSTATAT@ GL_GNULIB_FSYNC = @GL_GNULIB_FSYNC@ GL_GNULIB_FTELL = @GL_GNULIB_FTELL@ GL_GNULIB_FTELLO = @GL_GNULIB_FTELLO@ GL_GNULIB_FTRUNCATE = @GL_GNULIB_FTRUNCATE@ GL_GNULIB_FUTIMENS = @GL_GNULIB_FUTIMENS@ GL_GNULIB_FWRITE = @GL_GNULIB_FWRITE@ GL_GNULIB_GETC = @GL_GNULIB_GETC@ GL_GNULIB_GETCHAR = @GL_GNULIB_GETCHAR@ GL_GNULIB_GETCWD = @GL_GNULIB_GETCWD@ GL_GNULIB_GETDELIM = @GL_GNULIB_GETDELIM@ GL_GNULIB_GETDOMAINNAME = @GL_GNULIB_GETDOMAINNAME@ GL_GNULIB_GETDTABLESIZE = @GL_GNULIB_GETDTABLESIZE@ GL_GNULIB_GETENTROPY = @GL_GNULIB_GETENTROPY@ GL_GNULIB_GETGROUPS = @GL_GNULIB_GETGROUPS@ GL_GNULIB_GETHOSTNAME = @GL_GNULIB_GETHOSTNAME@ GL_GNULIB_GETLINE = @GL_GNULIB_GETLINE@ GL_GNULIB_GETLOADAVG = @GL_GNULIB_GETLOADAVG@ GL_GNULIB_GETLOGIN = @GL_GNULIB_GETLOGIN@ GL_GNULIB_GETLOGIN_R = @GL_GNULIB_GETLOGIN_R@ GL_GNULIB_GETOPT_POSIX = @GL_GNULIB_GETOPT_POSIX@ GL_GNULIB_GETPAGESIZE = @GL_GNULIB_GETPAGESIZE@ GL_GNULIB_GETPASS = @GL_GNULIB_GETPASS@ GL_GNULIB_GETPASS_GNU = @GL_GNULIB_GETPASS_GNU@ GL_GNULIB_GETPROGNAME = @GL_GNULIB_GETPROGNAME@ GL_GNULIB_GETSUBOPT = @GL_GNULIB_GETSUBOPT@ GL_GNULIB_GETUMASK = @GL_GNULIB_GETUMASK@ GL_GNULIB_GETUSERSHELL = @GL_GNULIB_GETUSERSHELL@ GL_GNULIB_GRANTPT = @GL_GNULIB_GRANTPT@ GL_GNULIB_GROUP_MEMBER = @GL_GNULIB_GROUP_MEMBER@ GL_GNULIB_IMAXABS = @GL_GNULIB_IMAXABS@ GL_GNULIB_IMAXDIV = @GL_GNULIB_IMAXDIV@ GL_GNULIB_ISATTY = @GL_GNULIB_ISATTY@ GL_GNULIB_ISWBLANK = @GL_GNULIB_ISWBLANK@ GL_GNULIB_ISWCTYPE = @GL_GNULIB_ISWCTYPE@ GL_GNULIB_ISWDIGIT = @GL_GNULIB_ISWDIGIT@ GL_GNULIB_ISWXDIGIT = @GL_GNULIB_ISWXDIGIT@ GL_GNULIB_LCHMOD = @GL_GNULIB_LCHMOD@ GL_GNULIB_LCHOWN = @GL_GNULIB_LCHOWN@ GL_GNULIB_LINK = @GL_GNULIB_LINK@ GL_GNULIB_LINKAT = @GL_GNULIB_LINKAT@ GL_GNULIB_LOCALECONV = @GL_GNULIB_LOCALECONV@ GL_GNULIB_LOCALENAME = @GL_GNULIB_LOCALENAME@ GL_GNULIB_LOCALTIME = @GL_GNULIB_LOCALTIME@ GL_GNULIB_LSEEK = @GL_GNULIB_LSEEK@ GL_GNULIB_LSTAT = @GL_GNULIB_LSTAT@ GL_GNULIB_MALLOC_GNU = @GL_GNULIB_MALLOC_GNU@ GL_GNULIB_MALLOC_POSIX = @GL_GNULIB_MALLOC_POSIX@ GL_GNULIB_MBRLEN = @GL_GNULIB_MBRLEN@ GL_GNULIB_MBRTOWC = @GL_GNULIB_MBRTOWC@ GL_GNULIB_MBSCASECMP = @GL_GNULIB_MBSCASECMP@ GL_GNULIB_MBSCASESTR = @GL_GNULIB_MBSCASESTR@ GL_GNULIB_MBSCHR = @GL_GNULIB_MBSCHR@ GL_GNULIB_MBSCSPN = @GL_GNULIB_MBSCSPN@ GL_GNULIB_MBSINIT = @GL_GNULIB_MBSINIT@ GL_GNULIB_MBSLEN = @GL_GNULIB_MBSLEN@ GL_GNULIB_MBSNCASECMP = @GL_GNULIB_MBSNCASECMP@ GL_GNULIB_MBSNLEN = @GL_GNULIB_MBSNLEN@ GL_GNULIB_MBSNRTOWCS = @GL_GNULIB_MBSNRTOWCS@ GL_GNULIB_MBSPBRK = @GL_GNULIB_MBSPBRK@ GL_GNULIB_MBSPCASECMP = @GL_GNULIB_MBSPCASECMP@ GL_GNULIB_MBSRCHR = @GL_GNULIB_MBSRCHR@ GL_GNULIB_MBSRTOWCS = @GL_GNULIB_MBSRTOWCS@ GL_GNULIB_MBSSEP = @GL_GNULIB_MBSSEP@ GL_GNULIB_MBSSPN = @GL_GNULIB_MBSSPN@ GL_GNULIB_MBSSTR = @GL_GNULIB_MBSSTR@ GL_GNULIB_MBSTOK_R = @GL_GNULIB_MBSTOK_R@ GL_GNULIB_MBSTOWCS = @GL_GNULIB_MBSTOWCS@ GL_GNULIB_MBTOWC = @GL_GNULIB_MBTOWC@ GL_GNULIB_MDA_ACCESS = @GL_GNULIB_MDA_ACCESS@ GL_GNULIB_MDA_CHDIR = @GL_GNULIB_MDA_CHDIR@ GL_GNULIB_MDA_CHMOD = @GL_GNULIB_MDA_CHMOD@ GL_GNULIB_MDA_CLOSE = @GL_GNULIB_MDA_CLOSE@ GL_GNULIB_MDA_CREAT = @GL_GNULIB_MDA_CREAT@ GL_GNULIB_MDA_DUP = @GL_GNULIB_MDA_DUP@ GL_GNULIB_MDA_DUP2 = @GL_GNULIB_MDA_DUP2@ GL_GNULIB_MDA_ECVT = @GL_GNULIB_MDA_ECVT@ GL_GNULIB_MDA_EXECL = @GL_GNULIB_MDA_EXECL@ GL_GNULIB_MDA_EXECLE = @GL_GNULIB_MDA_EXECLE@ GL_GNULIB_MDA_EXECLP = @GL_GNULIB_MDA_EXECLP@ GL_GNULIB_MDA_EXECV = @GL_GNULIB_MDA_EXECV@ GL_GNULIB_MDA_EXECVE = @GL_GNULIB_MDA_EXECVE@ GL_GNULIB_MDA_EXECVP = @GL_GNULIB_MDA_EXECVP@ GL_GNULIB_MDA_EXECVPE = @GL_GNULIB_MDA_EXECVPE@ GL_GNULIB_MDA_FCLOSEALL = @GL_GNULIB_MDA_FCLOSEALL@ GL_GNULIB_MDA_FCVT = @GL_GNULIB_MDA_FCVT@ GL_GNULIB_MDA_FDOPEN = @GL_GNULIB_MDA_FDOPEN@ GL_GNULIB_MDA_FILENO = @GL_GNULIB_MDA_FILENO@ GL_GNULIB_MDA_GCVT = @GL_GNULIB_MDA_GCVT@ GL_GNULIB_MDA_GETCWD = @GL_GNULIB_MDA_GETCWD@ GL_GNULIB_MDA_GETPID = @GL_GNULIB_MDA_GETPID@ GL_GNULIB_MDA_GETW = @GL_GNULIB_MDA_GETW@ GL_GNULIB_MDA_ISATTY = @GL_GNULIB_MDA_ISATTY@ GL_GNULIB_MDA_LSEEK = @GL_GNULIB_MDA_LSEEK@ GL_GNULIB_MDA_MEMCCPY = @GL_GNULIB_MDA_MEMCCPY@ GL_GNULIB_MDA_MKDIR = @GL_GNULIB_MDA_MKDIR@ GL_GNULIB_MDA_MKTEMP = @GL_GNULIB_MDA_MKTEMP@ GL_GNULIB_MDA_OPEN = @GL_GNULIB_MDA_OPEN@ GL_GNULIB_MDA_PUTENV = @GL_GNULIB_MDA_PUTENV@ GL_GNULIB_MDA_PUTW = @GL_GNULIB_MDA_PUTW@ GL_GNULIB_MDA_READ = @GL_GNULIB_MDA_READ@ GL_GNULIB_MDA_RMDIR = @GL_GNULIB_MDA_RMDIR@ GL_GNULIB_MDA_STRDUP = @GL_GNULIB_MDA_STRDUP@ GL_GNULIB_MDA_SWAB = @GL_GNULIB_MDA_SWAB@ GL_GNULIB_MDA_TEMPNAM = @GL_GNULIB_MDA_TEMPNAM@ GL_GNULIB_MDA_TZSET = @GL_GNULIB_MDA_TZSET@ GL_GNULIB_MDA_UMASK = @GL_GNULIB_MDA_UMASK@ GL_GNULIB_MDA_UNLINK = @GL_GNULIB_MDA_UNLINK@ GL_GNULIB_MDA_WCSDUP = @GL_GNULIB_MDA_WCSDUP@ GL_GNULIB_MDA_WRITE = @GL_GNULIB_MDA_WRITE@ GL_GNULIB_MEMCHR = @GL_GNULIB_MEMCHR@ GL_GNULIB_MEMMEM = @GL_GNULIB_MEMMEM@ GL_GNULIB_MEMPCPY = @GL_GNULIB_MEMPCPY@ GL_GNULIB_MEMRCHR = @GL_GNULIB_MEMRCHR@ GL_GNULIB_MEMSET_EXPLICIT = @GL_GNULIB_MEMSET_EXPLICIT@ GL_GNULIB_MKDIR = @GL_GNULIB_MKDIR@ GL_GNULIB_MKDIRAT = @GL_GNULIB_MKDIRAT@ GL_GNULIB_MKDTEMP = @GL_GNULIB_MKDTEMP@ GL_GNULIB_MKFIFO = @GL_GNULIB_MKFIFO@ GL_GNULIB_MKFIFOAT = @GL_GNULIB_MKFIFOAT@ GL_GNULIB_MKNOD = @GL_GNULIB_MKNOD@ GL_GNULIB_MKNODAT = @GL_GNULIB_MKNODAT@ GL_GNULIB_MKOSTEMP = @GL_GNULIB_MKOSTEMP@ GL_GNULIB_MKOSTEMPS = @GL_GNULIB_MKOSTEMPS@ GL_GNULIB_MKSTEMP = @GL_GNULIB_MKSTEMP@ GL_GNULIB_MKSTEMPS = @GL_GNULIB_MKSTEMPS@ GL_GNULIB_MKTIME = @GL_GNULIB_MKTIME@ GL_GNULIB_NANOSLEEP = @GL_GNULIB_NANOSLEEP@ GL_GNULIB_NL_LANGINFO = @GL_GNULIB_NL_LANGINFO@ GL_GNULIB_NONBLOCKING = @GL_GNULIB_NONBLOCKING@ GL_GNULIB_OBSTACK_PRINTF = @GL_GNULIB_OBSTACK_PRINTF@ GL_GNULIB_OBSTACK_PRINTF_POSIX = @GL_GNULIB_OBSTACK_PRINTF_POSIX@ GL_GNULIB_OPEN = @GL_GNULIB_OPEN@ GL_GNULIB_OPENAT = @GL_GNULIB_OPENAT@ GL_GNULIB_OVERRIDES_STRUCT_STAT = @GL_GNULIB_OVERRIDES_STRUCT_STAT@ GL_GNULIB_PCLOSE = @GL_GNULIB_PCLOSE@ GL_GNULIB_PERROR = @GL_GNULIB_PERROR@ GL_GNULIB_PIPE = @GL_GNULIB_PIPE@ GL_GNULIB_PIPE2 = @GL_GNULIB_PIPE2@ GL_GNULIB_POPEN = @GL_GNULIB_POPEN@ GL_GNULIB_POSIX_MEMALIGN = @GL_GNULIB_POSIX_MEMALIGN@ GL_GNULIB_POSIX_OPENPT = @GL_GNULIB_POSIX_OPENPT@ GL_GNULIB_PREAD = @GL_GNULIB_PREAD@ GL_GNULIB_PRINTF = @GL_GNULIB_PRINTF@ GL_GNULIB_PRINTF_POSIX = @GL_GNULIB_PRINTF_POSIX@ GL_GNULIB_PTSNAME = @GL_GNULIB_PTSNAME@ GL_GNULIB_PTSNAME_R = @GL_GNULIB_PTSNAME_R@ GL_GNULIB_PUTC = @GL_GNULIB_PUTC@ GL_GNULIB_PUTCHAR = @GL_GNULIB_PUTCHAR@ GL_GNULIB_PUTENV = @GL_GNULIB_PUTENV@ GL_GNULIB_PUTS = @GL_GNULIB_PUTS@ GL_GNULIB_PWRITE = @GL_GNULIB_PWRITE@ GL_GNULIB_QSORT_R = @GL_GNULIB_QSORT_R@ GL_GNULIB_RANDOM = @GL_GNULIB_RANDOM@ GL_GNULIB_RANDOM_R = @GL_GNULIB_RANDOM_R@ GL_GNULIB_RAWMEMCHR = @GL_GNULIB_RAWMEMCHR@ GL_GNULIB_READ = @GL_GNULIB_READ@ GL_GNULIB_READLINK = @GL_GNULIB_READLINK@ GL_GNULIB_READLINKAT = @GL_GNULIB_READLINKAT@ GL_GNULIB_REALLOCARRAY = @GL_GNULIB_REALLOCARRAY@ GL_GNULIB_REALLOC_GNU = @GL_GNULIB_REALLOC_GNU@ GL_GNULIB_REALLOC_POSIX = @GL_GNULIB_REALLOC_POSIX@ GL_GNULIB_REALPATH = @GL_GNULIB_REALPATH@ GL_GNULIB_REMOVE = @GL_GNULIB_REMOVE@ GL_GNULIB_RENAME = @GL_GNULIB_RENAME@ GL_GNULIB_RENAMEAT = @GL_GNULIB_RENAMEAT@ GL_GNULIB_RMDIR = @GL_GNULIB_RMDIR@ GL_GNULIB_RPMATCH = @GL_GNULIB_RPMATCH@ GL_GNULIB_SCANF = @GL_GNULIB_SCANF@ GL_GNULIB_SECURE_GETENV = @GL_GNULIB_SECURE_GETENV@ GL_GNULIB_SETENV = @GL_GNULIB_SETENV@ GL_GNULIB_SETHOSTNAME = @GL_GNULIB_SETHOSTNAME@ GL_GNULIB_SETLOCALE = @GL_GNULIB_SETLOCALE@ GL_GNULIB_SETLOCALE_NULL = @GL_GNULIB_SETLOCALE_NULL@ GL_GNULIB_SIGABBREV_NP = @GL_GNULIB_SIGABBREV_NP@ GL_GNULIB_SIGDESCR_NP = @GL_GNULIB_SIGDESCR_NP@ GL_GNULIB_SLEEP = @GL_GNULIB_SLEEP@ GL_GNULIB_SNPRINTF = @GL_GNULIB_SNPRINTF@ GL_GNULIB_SPRINTF_POSIX = @GL_GNULIB_SPRINTF_POSIX@ GL_GNULIB_STAT = @GL_GNULIB_STAT@ GL_GNULIB_STDIO_H_NONBLOCKING = @GL_GNULIB_STDIO_H_NONBLOCKING@ GL_GNULIB_STDIO_H_SIGPIPE = @GL_GNULIB_STDIO_H_SIGPIPE@ GL_GNULIB_STPCPY = @GL_GNULIB_STPCPY@ GL_GNULIB_STPNCPY = @GL_GNULIB_STPNCPY@ GL_GNULIB_STRCASESTR = @GL_GNULIB_STRCASESTR@ GL_GNULIB_STRCHRNUL = @GL_GNULIB_STRCHRNUL@ GL_GNULIB_STRDUP = @GL_GNULIB_STRDUP@ GL_GNULIB_STRERROR = @GL_GNULIB_STRERROR@ GL_GNULIB_STRERRORNAME_NP = @GL_GNULIB_STRERRORNAME_NP@ GL_GNULIB_STRERROR_R = @GL_GNULIB_STRERROR_R@ GL_GNULIB_STRFTIME = @GL_GNULIB_STRFTIME@ GL_GNULIB_STRNCAT = @GL_GNULIB_STRNCAT@ GL_GNULIB_STRNDUP = @GL_GNULIB_STRNDUP@ GL_GNULIB_STRNLEN = @GL_GNULIB_STRNLEN@ GL_GNULIB_STRPBRK = @GL_GNULIB_STRPBRK@ GL_GNULIB_STRPTIME = @GL_GNULIB_STRPTIME@ GL_GNULIB_STRSEP = @GL_GNULIB_STRSEP@ GL_GNULIB_STRSIGNAL = @GL_GNULIB_STRSIGNAL@ GL_GNULIB_STRSTR = @GL_GNULIB_STRSTR@ GL_GNULIB_STRTOD = @GL_GNULIB_STRTOD@ GL_GNULIB_STRTOIMAX = @GL_GNULIB_STRTOIMAX@ GL_GNULIB_STRTOK_R = @GL_GNULIB_STRTOK_R@ GL_GNULIB_STRTOL = @GL_GNULIB_STRTOL@ GL_GNULIB_STRTOLD = @GL_GNULIB_STRTOLD@ GL_GNULIB_STRTOLL = @GL_GNULIB_STRTOLL@ GL_GNULIB_STRTOUL = @GL_GNULIB_STRTOUL@ GL_GNULIB_STRTOULL = @GL_GNULIB_STRTOULL@ GL_GNULIB_STRTOUMAX = @GL_GNULIB_STRTOUMAX@ GL_GNULIB_STRVERSCMP = @GL_GNULIB_STRVERSCMP@ GL_GNULIB_SYMLINK = @GL_GNULIB_SYMLINK@ GL_GNULIB_SYMLINKAT = @GL_GNULIB_SYMLINKAT@ GL_GNULIB_SYSTEM_POSIX = @GL_GNULIB_SYSTEM_POSIX@ GL_GNULIB_TIME = @GL_GNULIB_TIME@ GL_GNULIB_TIMEGM = @GL_GNULIB_TIMEGM@ GL_GNULIB_TIMESPEC_GET = @GL_GNULIB_TIMESPEC_GET@ GL_GNULIB_TIMESPEC_GETRES = @GL_GNULIB_TIMESPEC_GETRES@ GL_GNULIB_TIME_R = @GL_GNULIB_TIME_R@ GL_GNULIB_TIME_RZ = @GL_GNULIB_TIME_RZ@ GL_GNULIB_TMPFILE = @GL_GNULIB_TMPFILE@ GL_GNULIB_TOWCTRANS = @GL_GNULIB_TOWCTRANS@ GL_GNULIB_TRUNCATE = @GL_GNULIB_TRUNCATE@ GL_GNULIB_TTYNAME_R = @GL_GNULIB_TTYNAME_R@ GL_GNULIB_TZSET = @GL_GNULIB_TZSET@ GL_GNULIB_UNISTD_H_GETOPT = @GL_GNULIB_UNISTD_H_GETOPT@ GL_GNULIB_UNISTD_H_NONBLOCKING = @GL_GNULIB_UNISTD_H_NONBLOCKING@ GL_GNULIB_UNISTD_H_SIGPIPE = @GL_GNULIB_UNISTD_H_SIGPIPE@ GL_GNULIB_UNLINK = @GL_GNULIB_UNLINK@ GL_GNULIB_UNLINKAT = @GL_GNULIB_UNLINKAT@ GL_GNULIB_UNLOCKPT = @GL_GNULIB_UNLOCKPT@ GL_GNULIB_UNSETENV = @GL_GNULIB_UNSETENV@ GL_GNULIB_USLEEP = @GL_GNULIB_USLEEP@ GL_GNULIB_UTIMENSAT = @GL_GNULIB_UTIMENSAT@ GL_GNULIB_VASPRINTF = @GL_GNULIB_VASPRINTF@ GL_GNULIB_VDPRINTF = @GL_GNULIB_VDPRINTF@ GL_GNULIB_VFPRINTF = @GL_GNULIB_VFPRINTF@ GL_GNULIB_VFPRINTF_POSIX = @GL_GNULIB_VFPRINTF_POSIX@ GL_GNULIB_VFSCANF = @GL_GNULIB_VFSCANF@ GL_GNULIB_VPRINTF = @GL_GNULIB_VPRINTF@ GL_GNULIB_VPRINTF_POSIX = @GL_GNULIB_VPRINTF_POSIX@ GL_GNULIB_VSCANF = @GL_GNULIB_VSCANF@ GL_GNULIB_VSNPRINTF = @GL_GNULIB_VSNPRINTF@ GL_GNULIB_VSPRINTF_POSIX = @GL_GNULIB_VSPRINTF_POSIX@ GL_GNULIB_WCPCPY = @GL_GNULIB_WCPCPY@ GL_GNULIB_WCPNCPY = @GL_GNULIB_WCPNCPY@ GL_GNULIB_WCRTOMB = @GL_GNULIB_WCRTOMB@ GL_GNULIB_WCSCASECMP = @GL_GNULIB_WCSCASECMP@ GL_GNULIB_WCSCAT = @GL_GNULIB_WCSCAT@ GL_GNULIB_WCSCHR = @GL_GNULIB_WCSCHR@ GL_GNULIB_WCSCMP = @GL_GNULIB_WCSCMP@ GL_GNULIB_WCSCOLL = @GL_GNULIB_WCSCOLL@ GL_GNULIB_WCSCPY = @GL_GNULIB_WCSCPY@ GL_GNULIB_WCSCSPN = @GL_GNULIB_WCSCSPN@ GL_GNULIB_WCSDUP = @GL_GNULIB_WCSDUP@ GL_GNULIB_WCSFTIME = @GL_GNULIB_WCSFTIME@ GL_GNULIB_WCSLEN = @GL_GNULIB_WCSLEN@ GL_GNULIB_WCSNCASECMP = @GL_GNULIB_WCSNCASECMP@ GL_GNULIB_WCSNCAT = @GL_GNULIB_WCSNCAT@ GL_GNULIB_WCSNCMP = @GL_GNULIB_WCSNCMP@ GL_GNULIB_WCSNCPY = @GL_GNULIB_WCSNCPY@ GL_GNULIB_WCSNLEN = @GL_GNULIB_WCSNLEN@ GL_GNULIB_WCSNRTOMBS = @GL_GNULIB_WCSNRTOMBS@ GL_GNULIB_WCSPBRK = @GL_GNULIB_WCSPBRK@ GL_GNULIB_WCSRCHR = @GL_GNULIB_WCSRCHR@ GL_GNULIB_WCSRTOMBS = @GL_GNULIB_WCSRTOMBS@ GL_GNULIB_WCSSPN = @GL_GNULIB_WCSSPN@ GL_GNULIB_WCSSTR = @GL_GNULIB_WCSSTR@ GL_GNULIB_WCSTOK = @GL_GNULIB_WCSTOK@ GL_GNULIB_WCSWIDTH = @GL_GNULIB_WCSWIDTH@ GL_GNULIB_WCSXFRM = @GL_GNULIB_WCSXFRM@ GL_GNULIB_WCTOB = @GL_GNULIB_WCTOB@ GL_GNULIB_WCTOMB = @GL_GNULIB_WCTOMB@ GL_GNULIB_WCTRANS = @GL_GNULIB_WCTRANS@ GL_GNULIB_WCTYPE = @GL_GNULIB_WCTYPE@ GL_GNULIB_WCWIDTH = @GL_GNULIB_WCWIDTH@ GL_GNULIB_WMEMCHR = @GL_GNULIB_WMEMCHR@ GL_GNULIB_WMEMCMP = @GL_GNULIB_WMEMCMP@ GL_GNULIB_WMEMCPY = @GL_GNULIB_WMEMCPY@ GL_GNULIB_WMEMMOVE = @GL_GNULIB_WMEMMOVE@ GL_GNULIB_WMEMPCPY = @GL_GNULIB_WMEMPCPY@ GL_GNULIB_WMEMSET = @GL_GNULIB_WMEMSET@ GL_GNULIB_WRITE = @GL_GNULIB_WRITE@ GL_GNULIB__EXIT = @GL_GNULIB__EXIT@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GNULIBHEADERS_OVERRIDE_WINT_T = @GNULIBHEADERS_OVERRIDE_WINT_T@ GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@ GREP = @GREP@ HARD_LOCALE_LIB = @HARD_LOCALE_LIB@ HAVE_ALIGNED_ALLOC = @HAVE_ALIGNED_ALLOC@ HAVE_ALLOCA_H = @HAVE_ALLOCA_H@ HAVE_ATOLL = @HAVE_ATOLL@ HAVE_BTOWC = @HAVE_BTOWC@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_COPY_FILE_RANGE = @HAVE_COPY_FILE_RANGE@ HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ HAVE_DECL_ECVT = @HAVE_DECL_ECVT@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_EXECVPE = @HAVE_DECL_EXECVPE@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FCLOSEALL = @HAVE_DECL_FCLOSEALL@ HAVE_DECL_FCVT = @HAVE_DECL_FCVT@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GCVT = @HAVE_DECL_GCVT@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_GETW = @HAVE_DECL_GETW@ HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@ HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_PROGRAM_INVOCATION_NAME = @HAVE_DECL_PROGRAM_INVOCATION_NAME@ HAVE_DECL_PUTW = @HAVE_DECL_PUTW@ HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DECL_WCSDUP = @HAVE_DECL_WCSDUP@ HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ HAVE_ERROR = @HAVE_ERROR@ HAVE_ERROR_AT_LINE = @HAVE_ERROR_AT_LINE@ HAVE_ERROR_H = @HAVE_ERROR_H@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_EXECVPE = @HAVE_EXECVPE@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHMODAT = @HAVE_FCHMODAT@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FCNTL = @HAVE_FCNTL@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FEATURES_H = @HAVE_FEATURES_H@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FREELOCALE = @HAVE_FREELOCALE@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSTATAT = @HAVE_FSTATAT@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_FUTIMENS = @HAVE_FUTIMENS@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETENTROPY = @HAVE_GETENTROPY@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GETPASS = @HAVE_GETPASS@ HAVE_GETPROGNAME = @HAVE_GETPROGNAME@ HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ HAVE_GETUMASK = @HAVE_GETUMASK@ HAVE_GRANTPT = @HAVE_GRANTPT@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_IMAXABS = @HAVE_IMAXABS@ HAVE_IMAXDIV = @HAVE_IMAXDIV@ HAVE_IMAXDIV_T = @HAVE_IMAXDIV_T@ HAVE_INITSTATE = @HAVE_INITSTATE@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_ISWBLANK = @HAVE_ISWBLANK@ HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ HAVE_LANGINFO_ALTMON = @HAVE_LANGINFO_ALTMON@ HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ HAVE_LCHMOD = @HAVE_LCHMOD@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_LSTAT = @HAVE_LSTAT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBRLEN = @HAVE_MBRLEN@ HAVE_MBRTOWC = @HAVE_MBRTOWC@ HAVE_MBSINIT = @HAVE_MBSINIT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ HAVE_MBTOWC = @HAVE_MBTOWC@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MEMSET_EXPLICIT = @HAVE_MEMSET_EXPLICIT@ HAVE_MKDIRAT = @HAVE_MKDIRAT@ HAVE_MKDTEMP = @HAVE_MKDTEMP@ HAVE_MKFIFO = @HAVE_MKFIFO@ HAVE_MKFIFOAT = @HAVE_MKFIFOAT@ HAVE_MKNOD = @HAVE_MKNOD@ HAVE_MKNODAT = @HAVE_MKNODAT@ HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ HAVE_MKSTEMP = @HAVE_MKSTEMP@ HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ HAVE_NEWLOCALE = @HAVE_NEWLOCALE@ HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ HAVE_OPENAT = @HAVE_OPENAT@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_POSIX_MEMALIGN = @HAVE_POSIX_MEMALIGN@ HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PTSNAME = @HAVE_PTSNAME@ HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_QSORT_R = @HAVE_QSORT_R@ HAVE_RANDOM = @HAVE_RANDOM@ HAVE_RANDOM_H = @HAVE_RANDOM_H@ HAVE_RANDOM_R = @HAVE_RANDOM_R@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ HAVE_REALPATH = @HAVE_REALPATH@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_RPMATCH = @HAVE_RPMATCH@ HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ HAVE_SETENV = @HAVE_SETENV@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SETSTATE = @HAVE_SETSTATE@ HAVE_SIGABBREV_NP = @HAVE_SIGABBREV_NP@ HAVE_SIGDESCR_NP = @HAVE_SIGDESCR_NP@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRERRORNAME_NP = @HAVE_STRERRORNAME_NP@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRPTIME = @HAVE_STRPTIME@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRTOD = @HAVE_STRTOD@ HAVE_STRTOL = @HAVE_STRTOL@ HAVE_STRTOLD = @HAVE_STRTOLD@ HAVE_STRTOLL = @HAVE_STRTOLL@ HAVE_STRTOUL = @HAVE_STRTOUL@ HAVE_STRTOULL = @HAVE_STRTOULL@ HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_TIMEGM = @HAVE_TIMEGM@ HAVE_TIMESPEC_GET = @HAVE_TIMESPEC_GET@ HAVE_TIMESPEC_GETRES = @HAVE_TIMESPEC_GETRES@ HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WCPCPY = @HAVE_WCPCPY@ HAVE_WCPNCPY = @HAVE_WCPNCPY@ HAVE_WCRTOMB = @HAVE_WCRTOMB@ HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ HAVE_WCSCAT = @HAVE_WCSCAT@ HAVE_WCSCHR = @HAVE_WCSCHR@ HAVE_WCSCMP = @HAVE_WCSCMP@ HAVE_WCSCOLL = @HAVE_WCSCOLL@ HAVE_WCSCPY = @HAVE_WCSCPY@ HAVE_WCSCSPN = @HAVE_WCSCSPN@ HAVE_WCSDUP = @HAVE_WCSDUP@ HAVE_WCSFTIME = @HAVE_WCSFTIME@ HAVE_WCSLEN = @HAVE_WCSLEN@ HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ HAVE_WCSNCAT = @HAVE_WCSNCAT@ HAVE_WCSNCMP = @HAVE_WCSNCMP@ HAVE_WCSNCPY = @HAVE_WCSNCPY@ HAVE_WCSNLEN = @HAVE_WCSNLEN@ HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ HAVE_WCSPBRK = @HAVE_WCSPBRK@ HAVE_WCSRCHR = @HAVE_WCSRCHR@ HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ HAVE_WCSSPN = @HAVE_WCSSPN@ HAVE_WCSSTR = @HAVE_WCSSTR@ HAVE_WCSTOK = @HAVE_WCSTOK@ HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ HAVE_WCSXFRM = @HAVE_WCSXFRM@ HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE_WINT_T = @HAVE_WINT_T@ HAVE_WMEMCHR = @HAVE_WMEMCHR@ HAVE_WMEMCMP = @HAVE_WMEMCMP@ HAVE_WMEMCPY = @HAVE_WMEMCPY@ HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ HAVE_WMEMPCPY = @HAVE_WMEMPCPY@ HAVE_WMEMSET = @HAVE_WMEMSET@ HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ HAVE__EXIT = @HAVE__EXIT@ IMPRIMATUR_MAKEINFOFLAGS = @IMPRIMATUR_MAKEINFOFLAGS@ IMPRIMATUR_MODULE_DIR = @IMPRIMATUR_MODULE_DIR@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@ INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBGNU_LIBDEPS = @LIBGNU_LIBDEPS@ LIBGNU_LTLIBDEPS = @LIBGNU_LTLIBDEPS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPMULTITHREAD = @LIBPMULTITHREAD@ LIBPTHREAD = @LIBPTHREAD@ LIBS = @LIBS@ LIBSTDTHREAD = @LIBSTDTHREAD@ LIBTHREAD = @LIBTHREAD@ LIB_HARD_LOCALE = @LIB_HARD_LOCALE@ LIB_MBRTOWC = @LIB_MBRTOWC@ LIB_NL_LANGINFO = @LIB_NL_LANGINFO@ LIB_SCHED_YIELD = @LIB_SCHED_YIELD@ LIB_SETLOCALE_NULL = @LIB_SETLOCALE_NULL@ LIMITS_H = @LIMITS_H@ LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ LOCALENAME_ENHANCE_LOCALE_FUNCS = @LOCALENAME_ENHANCE_LOCALE_FUNCS@ LOCALE_FR = @LOCALE_FR@ LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ LOCALE_JA = @LOCALE_JA@ LOCALE_ZH_CN = @LOCALE_ZH_CN@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBTHREAD = @LTLIBTHREAD@ MAKEINFO = @MAKEINFO@ MBRTOWC_LIB = @MBRTOWC_LIB@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NEXT_ASSERT_H = @NEXT_ASSERT_H@ NEXT_AS_FIRST_DIRECTIVE_ASSERT_H = @NEXT_AS_FIRST_DIRECTIVE_ASSERT_H@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_ERROR_H = @NEXT_AS_FIRST_DIRECTIVE_ERROR_H@ NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@ NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_ERROR_H = @NEXT_ERROR_H@ NEXT_FCNTL_H = @NEXT_FCNTL_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_LOCALE_H = @NEXT_LOCALE_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STDLIB_H = @NEXT_STDLIB_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_TIME_H = @NEXT_TIME_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NEXT_WCHAR_H = @NEXT_WCHAR_H@ NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ 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@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PRIPTR_PREFIX = @PRIPTR_PREFIX@ PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ RANLIB = @RANLIB@ RENDITION = @RENDITION@ REPLACE_ACCESS = @REPLACE_ACCESS@ REPLACE_ALIGNED_ALLOC = @REPLACE_ALIGNED_ALLOC@ REPLACE_BTOWC = @REPLACE_BTOWC@ REPLACE_CALLOC_FOR_CALLOC_GNU = @REPLACE_CALLOC_FOR_CALLOC_GNU@ REPLACE_CALLOC_FOR_CALLOC_POSIX = @REPLACE_CALLOC_FOR_CALLOC_POSIX@ REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ REPLACE_CHMOD = @REPLACE_CHMOD@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_COPY_FILE_RANGE = @REPLACE_COPY_FILE_RANGE@ REPLACE_CREAT = @REPLACE_CREAT@ REPLACE_CTIME = @REPLACE_CTIME@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_DUP3 = @REPLACE_DUP3@ REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ REPLACE_ERROR = @REPLACE_ERROR@ REPLACE_ERROR_AT_LINE = @REPLACE_ERROR_AT_LINE@ REPLACE_EXECL = @REPLACE_EXECL@ REPLACE_EXECLE = @REPLACE_EXECLE@ REPLACE_EXECLP = @REPLACE_EXECLP@ REPLACE_EXECV = @REPLACE_EXECV@ REPLACE_EXECVE = @REPLACE_EXECVE@ REPLACE_EXECVP = @REPLACE_EXECVP@ REPLACE_EXECVPE = @REPLACE_EXECVPE@ REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ REPLACE_FCHMODAT = @REPLACE_FCHMODAT@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FCNTL = @REPLACE_FCNTL@ REPLACE_FDATASYNC = @REPLACE_FDATASYNC@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FFSLL = @REPLACE_FFSLL@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FOPEN_FOR_FOPEN_GNU = @REPLACE_FOPEN_FOR_FOPEN_GNU@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREE = @REPLACE_FREE@ REPLACE_FREELOCALE = @REPLACE_FREELOCALE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FSTAT = @REPLACE_FSTAT@ REPLACE_FSTATAT = @REPLACE_FSTATAT@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETENTROPY = @REPLACE_GETENTROPY@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOADAVG = @REPLACE_GETLOADAVG@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_GETPASS = @REPLACE_GETPASS@ REPLACE_GETPASS_FOR_GETPASS_GNU = @REPLACE_GETPASS_FOR_GETPASS_GNU@ REPLACE_GETPROGNAME = @REPLACE_GETPROGNAME@ REPLACE_GETSUBOPT = @REPLACE_GETSUBOPT@ REPLACE_GMTIME = @REPLACE_GMTIME@ REPLACE_IMAXABS = @REPLACE_IMAXABS@ REPLACE_IMAXDIV = @REPLACE_IMAXDIV@ REPLACE_INITSTATE = @REPLACE_INITSTATE@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ REPLACE_ISWDIGIT = @REPLACE_ISWDIGIT@ REPLACE_ISWXDIGIT = @REPLACE_ISWXDIGIT@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_LSTAT = @REPLACE_LSTAT@ REPLACE_MALLOC_FOR_MALLOC_GNU = @REPLACE_MALLOC_FOR_MALLOC_GNU@ REPLACE_MALLOC_FOR_MALLOC_POSIX = @REPLACE_MALLOC_FOR_MALLOC_POSIX@ REPLACE_MBRLEN = @REPLACE_MBRLEN@ REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ REPLACE_MBSINIT = @REPLACE_MBSINIT@ REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ REPLACE_MBSTOWCS = @REPLACE_MBSTOWCS@ REPLACE_MBTOWC = @REPLACE_MBTOWC@ REPLACE_MB_CUR_MAX = @REPLACE_MB_CUR_MAX@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_MEMPCPY = @REPLACE_MEMPCPY@ REPLACE_MKDIR = @REPLACE_MKDIR@ REPLACE_MKFIFO = @REPLACE_MKFIFO@ REPLACE_MKFIFOAT = @REPLACE_MKFIFOAT@ REPLACE_MKNOD = @REPLACE_MKNOD@ REPLACE_MKNODAT = @REPLACE_MKNODAT@ REPLACE_MKOSTEMP = @REPLACE_MKOSTEMP@ REPLACE_MKOSTEMPS = @REPLACE_MKOSTEMPS@ REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ REPLACE_MKTIME = @REPLACE_MKTIME@ REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ REPLACE_NEWLOCALE = @REPLACE_NEWLOCALE@ REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_OPEN = @REPLACE_OPEN@ REPLACE_OPENAT = @REPLACE_OPENAT@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_PIPE2 = @REPLACE_PIPE2@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_POSIX_MEMALIGN = @REPLACE_POSIX_MEMALIGN@ REPLACE_POSIX_OPENPT = @REPLACE_POSIX_OPENPT@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PTSNAME = @REPLACE_PTSNAME@ REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ REPLACE_PUTENV = @REPLACE_PUTENV@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_QSORT_R = @REPLACE_QSORT_R@ REPLACE_RANDOM = @REPLACE_RANDOM@ REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ REPLACE_READ = @REPLACE_READ@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_READLINKAT = @REPLACE_READLINKAT@ REPLACE_REALLOCARRAY = @REPLACE_REALLOCARRAY@ REPLACE_REALLOC_FOR_REALLOC_GNU = @REPLACE_REALLOC_FOR_REALLOC_GNU@ REPLACE_REALLOC_FOR_REALLOC_POSIX = @REPLACE_REALLOC_FOR_REALLOC_POSIX@ REPLACE_REALPATH = @REPLACE_REALPATH@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_SETENV = @REPLACE_SETENV@ REPLACE_SETHOSTNAME = @REPLACE_SETHOSTNAME@ REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ REPLACE_SETSTATE = @REPLACE_SETSTATE@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_STAT = @REPLACE_STAT@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPCPY = @REPLACE_STPCPY@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERRORNAME_NP = @REPLACE_STRERRORNAME_NP@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRFTIME = @REPLACE_STRFTIME@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOD = @REPLACE_STRTOD@ REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_STRTOL = @REPLACE_STRTOL@ REPLACE_STRTOLD = @REPLACE_STRTOLD@ REPLACE_STRTOLL = @REPLACE_STRTOLL@ REPLACE_STRTOUL = @REPLACE_STRTOUL@ REPLACE_STRTOULL = @REPLACE_STRTOULL@ REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ REPLACE_TIME = @REPLACE_TIME@ REPLACE_TIMEGM = @REPLACE_TIMEGM@ REPLACE_TIMESPEC_GET = @REPLACE_TIMESPEC_GET@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_TZSET = @REPLACE_TZSET@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_UNSETENV = @REPLACE_UNSETENV@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ REPLACE_WCSCMP = @REPLACE_WCSCMP@ REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ REPLACE_WCSNCMP = @REPLACE_WCSNCMP@ REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ REPLACE_WCSSTR = @REPLACE_WCSSTR@ REPLACE_WCSTOK = @REPLACE_WCSTOK@ REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ REPLACE_WCTOB = @REPLACE_WCTOB@ REPLACE_WCTOMB = @REPLACE_WCTOMB@ REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ REPLACE_WMEMCMP = @REPLACE_WMEMCMP@ REPLACE_WMEMPCPY = @REPLACE_WMEMPCPY@ REPLACE_WRITE = @REPLACE_WRITE@ REPLACE__EXIT = @REPLACE__EXIT@ RUSH_DEFAULT_CONFIG = @RUSH_DEFAULT_CONFIG@ SCHED_YIELD_LIB = @SCHED_YIELD_LIB@ SED = @SED@ SETLOCALE_NULL_LIB = @SETLOCALE_NULL_LIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ STDCKDINT_H = @STDCKDINT_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_TIME_UTC = @TIME_H_DEFINES_TIME_UTC@ UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@ UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ UNISTD_H_HAVE_SYS_RANDOM_H = @UNISTD_H_HAVE_SYS_RANDOM_H@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ 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@ gl_LIBOBJDEPS = @gl_LIBOBJDEPS@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJDEPS = @gltests_LIBOBJDEPS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ bin_SCRIPTS = rush-po rush_SOURCES = \ cfck.c\ config.c\ defines.h\ dump.c\ limits.c\ map.c\ rush.c\ rush.h\ rushopt.h\ socket.c\ transform.c\ cflex.l\ cfgram.y\ cfgram.h\ cf.h\ cf.c rushlast_SOURCES = rushlast.c rlopt.h rushwho_SOURCES = rushwho.c rwopt.h EXTRA_DIST = rush-po rushopt.opt rlopt.opt rwopt.opt getopt.m4 defconf.sed cfgram.output AM_CPPFLAGS = \ -I$(top_srcdir)\ -I$(top_srcdir)/gnu\ -I$(top_builddir)/gnu\ -I$(top_srcdir)/lib\ -I$(top_srcdir)/lib/wordsplit LDADD = ../lib/librush.a ../gnu/libgnu.a @LTLIBINTL@ AM_INSTALLCHECK_STD_OPTIONS_EXEMPT = rush-po BUILT_SOURCES = defines.h rushopt.h rwopt.h rlopt.h CLEANFILES = defines.h MAINTAINER_CLEANFILES = rushopt.h rwopt.h rlopt.h SUFFIXES = .opt .c .h AM_YFLAGS = -dtv AM_LFLAGS = -d all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: .SUFFIXES: .opt .c .h .l .o .obj .y $(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__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): 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 install-sbinPROGRAMS: $(sbin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(sbindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(sbindir)" || 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)$(sbindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(sbindir)$$dir" || exit $$?; \ } \ ; done uninstall-sbinPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || 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)$(sbindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(sbindir)" && rm -f $$files clean-sbinPROGRAMS: -test -z "$(sbin_PROGRAMS)" || rm -f $(sbin_PROGRAMS) installcheck-sbinPROGRAMS: $(sbin_PROGRAMS) bad=0; pid=$$$$; list="$(sbin_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)$(sbindir)/$$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 rush$(EXEEXT): $(rush_OBJECTS) $(rush_DEPENDENCIES) $(EXTRA_rush_DEPENDENCIES) @rm -f rush$(EXEEXT) $(AM_V_CCLD)$(LINK) $(rush_OBJECTS) $(rush_LDADD) $(LIBS) rushlast$(EXEEXT): $(rushlast_OBJECTS) $(rushlast_DEPENDENCIES) $(EXTRA_rushlast_DEPENDENCIES) @rm -f rushlast$(EXEEXT) $(AM_V_CCLD)$(LINK) $(rushlast_OBJECTS) $(rushlast_LDADD) $(LIBS) rushwho$(EXEEXT): $(rushwho_OBJECTS) $(rushwho_DEPENDENCIES) $(EXTRA_rushwho_DEPENDENCIES) @rm -f rushwho$(EXEEXT) $(AM_V_CCLD)$(LINK) $(rushwho_OBJECTS) $(rushwho_LDADD) $(LIBS) install-binSCRIPTS: $(bin_SCRIPTS) @$(NORMAL_INSTALL) @list='$(bin_SCRIPTS)'; 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 \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n' \ -e 'h;s|.*|.|' \ -e 'p;x;s,.*/,,;$(transform)' | 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; \ if (++n[d] == $(am__install_max)) { \ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ else { print "f", d "/" $$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_SCRIPT) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binSCRIPTS: @$(NORMAL_UNINSTALL) @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || exit 0; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 's,.*/,,;$(transform)'`; \ dir='$(DESTDIR)$(bindir)'; $(am__uninstall_files_from_dir) installcheck-binSCRIPTS: $(bin_SCRIPTS) bad=0; pid=$$$$; list="$(bin_SCRIPTS)"; for p in $$list; do \ case ' $(AM_INSTALLCHECK_STD_OPTIONS_EXEMPT) ' in \ *" $$p "* | *" $(srcdir)/$$p "*) continue;; \ esac; \ f=`echo "$$p" | sed 's,^.*/,,;$(transform)'`; \ 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 mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cf.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cfck.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cfgram.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cflex.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/config.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dump.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/limits.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/map.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rush.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rushlast.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rushwho.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/socket.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/transform.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .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) 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: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-am all-am: Makefile $(PROGRAMS) $(SCRIPTS) installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(bindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-am install-exec: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) 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: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) 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 cfgram.c -rm -f cflex.c -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-sbinPROGRAMS \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/cf.Po -rm -f ./$(DEPDIR)/cfck.Po -rm -f ./$(DEPDIR)/cfgram.Po -rm -f ./$(DEPDIR)/cflex.Po -rm -f ./$(DEPDIR)/config.Po -rm -f ./$(DEPDIR)/dump.Po -rm -f ./$(DEPDIR)/limits.Po -rm -f ./$(DEPDIR)/map.Po -rm -f ./$(DEPDIR)/rush.Po -rm -f ./$(DEPDIR)/rushlast.Po -rm -f ./$(DEPDIR)/rushwho.Po -rm -f ./$(DEPDIR)/socket.Po -rm -f ./$(DEPDIR)/transform.Po -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-binSCRIPTS \ install-sbinPROGRAMS @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) install-exec-hook 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 installcheck-binSCRIPTS \ installcheck-sbinPROGRAMS maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/cf.Po -rm -f ./$(DEPDIR)/cfck.Po -rm -f ./$(DEPDIR)/cfgram.Po -rm -f ./$(DEPDIR)/cflex.Po -rm -f ./$(DEPDIR)/config.Po -rm -f ./$(DEPDIR)/dump.Po -rm -f ./$(DEPDIR)/limits.Po -rm -f ./$(DEPDIR)/map.Po -rm -f ./$(DEPDIR)/rush.Po -rm -f ./$(DEPDIR)/rushlast.Po -rm -f ./$(DEPDIR)/rushwho.Po -rm -f ./$(DEPDIR)/socket.Po -rm -f ./$(DEPDIR)/transform.Po -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 uninstall-binSCRIPTS \ uninstall-sbinPROGRAMS .MAKE: all check install install-am install-exec install-exec-am \ install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-binPROGRAMS clean-generic clean-sbinPROGRAMS \ 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-binSCRIPTS install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-exec-hook \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-sbinPROGRAMS install-strip installcheck \ installcheck-am installcheck-binPROGRAMS \ installcheck-binSCRIPTS installcheck-sbinPROGRAMS 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 \ uninstall-binSCRIPTS uninstall-sbinPROGRAMS .PRECIOUS: Makefile rushlast.c: rlopt.h rushwho.c: rwopt.h change-suid-mode: @proglist='$(sbin_PROGRAMS)'; \ for prog in $$proglist; do \ prog=$(DESTDIR)$(sbindir)/`echo $$prog | sed '$(transform)'`; \ if chown 0:0 $$prog && chmod u+s $$prog; then :; else \ echo "Cannot change $$prog to setuid root"; \ fi;\ done install-exec-hook: change-suid-mode defines.h: Makefile $(AM_V_GEN)p=`echo rush | sed 's/$(EXEEXT)$$//'`; \ f=`echo "$$p" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'` ; \ echo "#define CANONICAL_PROGRAM_NAME \"$(sbindir)/$$f\"" | tr -s / > $@-t; \ echo "#define SYSCONFDIR \"$(sysconfdir)\"" >> $@-t; \ echo "#define LOCALSTATEDIR \"$(localstatedir)\"" >> $@-t; \ if test -n "$(RUSH_DEFAULT_CONFIG)" && \ test -f "$(RUSH_DEFAULT_CONFIG)"; then \ echo "#define RUSH_DEFAULT_CONFIG \\" >> $@-t; \ sed -f $(srcdir)/defconf.sed "$(RUSH_DEFAULT_CONFIG)" >> $@-t; \ fi; \ mv $@-t $@ .opt.h: $(AM_V_GEN)m4 -s $(srcdir)/getopt.m4 $< | sed '1d' > $@ cflex.c: cfgram.h cfgram.h: cfgram.c # 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: ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/src/rwopt.opt������������������������������������������������������������������������������0000644�0001750�0001750�00000002243�14643176121�015022� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* This file is part of GNU Rush. Copyright (C) 2008-2024 Sergey Poznyakoff GNU Rush is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GNU Rush is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. */ OPTIONS_BEGIN(gnu, "rushwho", [<rushwho - show listing of online Rush users.>]) OPTION(format,F,STRING, [<Use STRING instead of the default format.>]) BEGIN format = optarg; END OPTION(file,f,DIR, [<Look for database files in DIR.>]) BEGIN base_name = optarg; END OPTION(no-header,H,, [<Do not display header line.>]) BEGIN display_header = 0; END OPTIONS_END void get_options(int argc, char *argv[]) { GETOPT(argc, argv); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/src/rwopt.h��������������������������������������������������������������������������������0000644�0001750�0001750�00000036034�14643176476�014471� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- buffer-read-only: t -*- vi: set ro: THIS FILE IS GENERATED AUTOMATICALLY. PLEASE DO NOT EDIT. */ #line 1 "rwopt.opt" /* This file is part of GNU Rush. Copyright (C) 2008-2024 Sergey Poznyakoff GNU Rush is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GNU Rush is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. */ #line 17 "rwopt.opt" #line 17 void print_help(void); #line 17 void print_usage(void); #line 38 "rwopt.opt" #line 38 /* Option codes */ #line 38 enum { #line 38 _OPTION_INIT=255, #line 38 #line 38 "rwopt.opt" #line 38 OPTION_USAGE, #line 38 "rwopt.opt" #line 38 OPTION_VERSION, #line 38 "rwopt.opt" MAX_OPTION #line 38 }; #line 38 static struct option long_options[] = { #line 38 #line 20 "rwopt.opt" #line 20 { "format", required_argument, 0, 'F' }, #line 26 "rwopt.opt" #line 26 { "file", required_argument, 0, 'f' }, #line 32 "rwopt.opt" #line 32 { "no-header", no_argument, 0, 'H' }, #line 38 "rwopt.opt" #line 38 { "help", no_argument, 0, 'h' }, #line 38 "rwopt.opt" #line 38 { "usage", no_argument, 0, OPTION_USAGE }, #line 38 "rwopt.opt" #line 38 { "version", no_argument, 0, OPTION_VERSION }, #line 38 "rwopt.opt" {0, 0, 0, 0} #line 38 }; #line 38 static struct opthelp { #line 38 const char *opt; #line 38 const char *arg; #line 38 int is_optional; #line 38 const char *descr; #line 38 } opthelp[] = { #line 38 #line 22 "rwopt.opt" #line 22 { "-F, --format", N_("STRING"), 0, N_("Use STRING instead of the default format.") }, #line 28 "rwopt.opt" #line 28 { "-f, --file", N_("DIR"), 0, N_("Look for database files in DIR.") }, #line 34 "rwopt.opt" #line 34 { "-H, --no-header", NULL, 0, N_("Do not display header line.") }, #line 38 "rwopt.opt" #line 38 { NULL, NULL, 0, N_("Other options") }, #line 38 "rwopt.opt" #line 38 { "-h, --help", NULL, 0, N_("Give this help list") }, #line 38 "rwopt.opt" #line 38 { "--usage", NULL, 0, N_("Give a short usage message") }, #line 38 "rwopt.opt" #line 38 { "--version", NULL, 0, N_("Print program version") }, #line 38 "rwopt.opt" }; #line 17 "rwopt.opt" #line 17 const char *program_version = "rushwho" " (" PACKAGE_STRING ")"; #line 17 static char doc[] = N_("rushwho - show listing of online Rush users."); #line 17 static char args_doc[] = N_(""); #line 17 const char *program_bug_address = "<" PACKAGE_BUGREPORT ">"; #line 17 #line 17 #define DESCRCOLUMN 30 #line 17 #define RMARGIN 79 #line 17 #define GROUPCOLUMN 2 #line 17 #define USAGECOLUMN 13 #line 17 #line 17 static void #line 17 indent (size_t start, size_t col) #line 17 { #line 17 for (; start < col; start++) #line 17 putchar (' '); #line 17 } #line 17 #line 17 static void #line 17 print_option_descr (const char *descr, size_t lmargin, size_t rmargin) #line 17 { #line 17 while (*descr) #line 17 { #line 17 int s = 0; #line 17 int i; #line 17 size_t width = rmargin - lmargin; #line 17 #line 17 for (i = 0; ; i++) #line 17 { #line 17 if (descr[i] == 0 || isspace (descr[i])) #line 17 { #line 17 if (i > width) #line 17 break; #line 17 s = i; #line 17 if (descr[i] == 0) #line 17 break; #line 17 } #line 17 } #line 17 printf ("%*.*s\n", s, s, descr); #line 17 descr += s; #line 17 if (*descr) #line 17 { #line 17 indent (0, lmargin); #line 17 descr++; #line 17 } #line 17 } #line 17 } #line 17 #line 17 void #line 17 print_help(void) #line 17 { #line 17 unsigned i; #line 17 #line 17 printf ("%s %s [%s]...", _("Usage:"), "rushwho", _("OPTION")); #line 17 if (args_doc[0]) #line 17 printf(" %s", gettext(args_doc)); #line 17 printf("\n"); #line 17 if (doc[0]) #line 17 print_option_descr(gettext (doc), 0, RMARGIN); #line 17 putchar ('\n'); #line 17 #line 17 for (i = 0; i < sizeof (opthelp) / sizeof (opthelp[0]); i++) #line 17 { #line 17 unsigned n; #line 17 if (opthelp[i].opt) #line 17 { #line 17 n = printf (" %s", opthelp[i].opt); #line 17 if (opthelp[i].arg) #line 17 { #line 17 char *cb, *ce; #line 17 if (strlen (opthelp[i].opt) == 2) #line 17 { #line 17 if (!opthelp[i].is_optional) #line 17 { #line 17 putchar (' '); #line 17 n++; #line 17 } #line 17 } #line 17 else #line 17 { #line 17 putchar ('='); #line 17 n++; #line 17 } #line 17 if (opthelp[i].is_optional) #line 17 { #line 17 cb = "["; #line 17 ce = "]"; #line 17 } #line 17 else #line 17 cb = ce = ""; #line 17 n += printf ("%s%s%s", cb, gettext (opthelp[i].arg), ce); #line 17 } #line 17 if (n >= DESCRCOLUMN) #line 17 { #line 17 putchar ('\n'); #line 17 n = 0; #line 17 } #line 17 indent (n, DESCRCOLUMN); #line 17 print_option_descr (gettext (opthelp[i].descr), DESCRCOLUMN, RMARGIN); #line 17 } #line 17 else #line 17 { #line 17 if (i) #line 17 putchar ('\n'); #line 17 indent (0, GROUPCOLUMN); #line 17 print_option_descr (gettext (opthelp[i].descr), #line 17 GROUPCOLUMN, RMARGIN); #line 17 putchar ('\n'); #line 17 } #line 17 } #line 17 #line 17 putchar ('\n'); #line 17 print_option_descr (_("Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options."), 0, RMARGIN); #line 17 putchar ('\n'); #line 17 printf (_("Report bugs to %s.\n"), program_bug_address); #line 17 } #line 17 #line 17 static int #line 17 cmpidx_short(const void *a, const void *b) #line 17 { #line 17 struct opthelp const **opta = (struct opthelp const **)a; #line 17 struct opthelp const **optb = (struct opthelp const **)b; #line 17 #line 17 return (*opta)->opt[1] - (*optb)->opt[1]; #line 17 } #line 17 #line 17 static int #line 17 cmpidx_long(const void *a, const void *b) #line 17 { #line 17 struct opthelp const **ap = (struct opthelp const **)a; #line 17 struct opthelp const **bp = (struct opthelp const **)b; #line 17 char const *opta, *optb; #line 17 size_t lena, lenb; #line 17 #line 17 if ((*ap)->opt[1] == '-') #line 17 opta = (*ap)->opt; #line 17 else #line 17 opta = (*ap)->opt + 4; #line 17 lena = strcspn(opta, ","); #line 17 #line 17 if ((*bp)->opt[1] == '-') #line 17 optb = (*bp)->opt; #line 17 else #line 17 optb = (*bp)->opt + 4; #line 17 lenb = strcspn(optb, ","); #line 17 return strncmp(opta, optb, lena > lenb ? lenb : lena); #line 17 } #line 17 #line 17 void #line 17 print_usage(void) #line 17 { #line 17 unsigned i; #line 17 unsigned n; #line 17 char *buf; #line 17 size_t bufsize; #line 17 unsigned nidx; #line 17 struct opthelp **optidx; #line 17 size_t optcount = sizeof(opthelp) / sizeof(opthelp[0]); #line 17 #line 17 #define FLUSH do { buf[n] = 0; printf("%s\n", buf); n = USAGECOLUMN; memset(buf, ' ', n); } while (0) #line 17 #define ADDC(c) do { if (n == RMARGIN) FLUSH; buf[n++] = c; } while (0) #line 17 #line 17 optidx = calloc(optcount, sizeof(optidx[0])); #line 17 if (!optidx) #line 17 abort(); #line 17 bufsize = RMARGIN + 1; #line 17 buf = malloc(bufsize); #line 17 if (!buf) #line 17 abort(); #line 17 #line 17 n = snprintf(buf, bufsize, "%s %s ", _("Usage:"), "rushwho"); #line 17 #line 17 /* Print a list of short options without arguments. */ #line 17 for (i = nidx = 0; i < optcount; i++) #line 17 if (opthelp[i].opt && #line 17 opthelp[i].descr && #line 17 opthelp[i].opt[1] != '-' && #line 17 opthelp[i].arg == NULL) #line 17 optidx[nidx++] = opthelp + i; #line 17 #line 17 if (nidx) { #line 17 qsort(optidx, nidx, sizeof(optidx[0]), cmpidx_short); #line 17 #line 17 ADDC('['); #line 17 ADDC('-'); #line 17 for (i = 0; i < nidx; i++) { #line 17 ADDC(optidx[i]->opt[1]); #line 17 } #line 17 ADDC(']'); #line 17 } #line 17 #line 17 /* Print a list of short options with arguments. */ #line 17 for (i = nidx = 0; i < optcount; i++) { #line 17 if (opthelp[i].opt && #line 17 opthelp[i].descr && #line 17 opthelp[i].opt[1] != '-' && #line 17 opthelp[i].arg) #line 17 optidx[nidx++] = opthelp + i; #line 17 } #line 17 #line 17 if (nidx) { #line 17 qsort(optidx, nidx, sizeof(optidx[0]), cmpidx_short); #line 17 #line 17 for (i = 0; i < nidx; i++) { #line 17 struct opthelp *opt = optidx[i]; #line 17 size_t len = 5 + strlen(opt->arg) #line 17 + (opt->is_optional ? 2 : 1); #line 17 #line 17 if (n + len > RMARGIN) #line 17 FLUSH; #line 17 buf[n++] = ' '; #line 17 buf[n++] = '['; #line 17 buf[n++] = '-'; #line 17 buf[n++] = opt->opt[1]; #line 17 if (opt->is_optional) { #line 17 buf[n++] = '['; #line 17 strcpy(&buf[n], opt->arg); #line 17 n += strlen(opt->arg); #line 17 buf[n++] = ']'; #line 17 } else { #line 17 buf[n++] = ' '; #line 17 strcpy(&buf[n], opt->arg); #line 17 n += strlen(opt->arg); #line 17 } #line 17 buf[n++] = ']'; #line 17 } #line 17 } #line 17 #line 17 /* Print a list of long options */ #line 17 for (i = nidx = 0; i < optcount; i++) { #line 17 if (opthelp[i].opt && opthelp[i].descr #line 17 && (opthelp[i].opt[1] == '-' || opthelp[i].opt[2] == ',')) #line 17 optidx[nidx++] = opthelp + i; #line 17 } #line 17 #line 17 if (nidx) { #line 17 qsort(optidx, nidx, sizeof(optidx[0]), cmpidx_long); #line 17 #line 17 for (i = 0; i < nidx; i++) { #line 17 struct opthelp *opt = optidx[i]; #line 17 size_t len; #line 17 const char *longopt; #line 17 #line 17 if (opt->opt[1] == '-') #line 17 longopt = opt->opt; #line 17 else if (opt->opt[2] == ',') #line 17 longopt = opt->opt + 4; #line 17 else #line 17 continue; #line 17 #line 17 len = 3 + strlen(longopt) #line 17 + (opt->arg ? 1 + strlen(opt->arg) #line 17 + (opt->is_optional ? 2 : 0) : 0); #line 17 if (n + len > RMARGIN) { #line 17 FLUSH; #line 17 /* Make sure we have enough buffer space if the string cannot be split */ #line 17 if (n + len > bufsize) { #line 17 bufsize = n + len; #line 17 buf = realloc(buf, bufsize); #line 17 if (!buf) #line 17 abort(); #line 17 } #line 17 } #line 17 buf[n++] = ' '; #line 17 buf[n++] = '['; #line 17 strcpy(&buf[n], longopt); #line 17 n += strlen(longopt); #line 17 if (opt->arg) { #line 17 buf[n++] = '='; #line 17 if (opt->is_optional) { #line 17 buf[n++] = '['; #line 17 strcpy(&buf[n], opt->arg); #line 17 n += strlen(opt->arg); #line 17 buf[n++] = ']'; #line 17 } else { #line 17 strcpy(&buf[n], opt->arg); #line 17 n += strlen(opt->arg); #line 17 } #line 17 } #line 17 buf[n++] = ']'; #line 17 } #line 17 } #line 17 #line 17 /* Print argument list */ #line 17 if (args_doc[0]) { #line 17 char const *docstr = gettext(args_doc); #line 17 size_t len = strlen(docstr) + 1; #line 17 if (n + len <= RMARGIN) { #line 17 buf[n++] = ' '; #line 17 strcpy(buf + n, docstr); #line 17 n += len; #line 17 } else { #line 17 struct wordsplit ws; #line 17 #line 17 if (wordsplit(docstr, &ws, #line 17 WRDSF_SHOWERR | #line 17 WRDSF_NOVAR | #line 17 WRDSF_NOCMD | #line 17 WRDSF_QUOTE | #line 17 WRDSF_SQUEEZE_DELIMS)) #line 17 abort(); #line 17 #line 17 for (i = 0; i < ws.ws_wordc; i++) { #line 17 len = strlen(ws.ws_wordv[i]) + 1; #line 17 if (n + len > RMARGIN) { #line 17 FLUSH; #line 17 /* Make sure we have enough buffer space if the string cannot be split */ #line 17 if (n + len > bufsize) { #line 17 bufsize = n + len; #line 17 buf = realloc(buf, bufsize); #line 17 if (!buf) #line 17 abort(); #line 17 } #line 17 } #line 17 buf[n++] = ' '; #line 17 strcpy(buf + n, ws.ws_wordv[i]); #line 17 n += len; #line 17 } #line 17 } #line 17 } #line 17 #line 17 FLUSH; #line 17 #line 17 free(optidx); #line 17 free(buf); #line 17 } #line 17 #line 17 const char version_etc_copyright[] = #line 17 /* Do *not* mark this string for translation. %s is a copyright symbol suitable for this locale, and %d is the copyright year. */ #line 17 "Copyright %s 2008-%d Sergey Poznyakoff"; #line 17 int rush_copyright_year = 2024; #line 17 #line 17 void #line 17 print_version_only(const char *program_version, FILE *stream) #line 17 { #line 17 fprintf (stream, "%s\n", program_version); #line 17 /* 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. */ #line 17 fprintf (stream, version_etc_copyright, _("(C)"), rush_copyright_year); #line 17 fputc ('\n', stream); #line 17 } #line 17 #line 17 void #line 17 print_version(const char *program_version, FILE *stream) #line 17 { #line 17 print_version_only(program_version, stream); #line 17 #line 17 fputs (_("License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\nThis is free software: you are free to change and redistribute it.\nThere is NO WARRANTY, to the extent permitted by law.\n\n"), #line 17 stream); #line 17 #line 17 } #line 17 #line 38 "rwopt.opt" #line 38 void get_options(int argc, char *argv[]) { #line 43 { #line 43 int optchar; #line 43 #line 43 #line 43 while ((optchar = getopt_long(argc, argv, "F:f:Hh", #line 43 long_options, NULL)) != EOF) #line 43 { #line 43 switch (optchar) #line 43 { #line 43 default: #line 43 exit(1); #line 43 #line 43 #line 22 "rwopt.opt" case 'F': #line 22 { #line 22 format = optarg; #line 24 break; #line 24 } #line 28 "rwopt.opt" case 'f': #line 28 { #line 28 base_name = optarg; #line 30 break; #line 30 } #line 34 "rwopt.opt" case 'H': #line 34 { #line 34 display_header = 0; #line 36 break; #line 36 } #line 38 "rwopt.opt" case 'h': #line 38 { #line 38 #line 38 print_help (); #line 38 exit (0); #line 38 #line 38 break; #line 38 } #line 38 "rwopt.opt" case OPTION_USAGE: #line 38 { #line 38 #line 38 print_usage (); #line 38 exit (0); #line 38 #line 38 break; #line 38 } #line 38 "rwopt.opt" case OPTION_VERSION: #line 38 { #line 38 #line 38 /* Give version */ #line 38 print_version(program_version, stdout); #line 38 exit (0); #line 38 #line 38 break; #line 38 } #line 43 "rwopt.opt" } #line 43 } #line 43 } #line 43 ; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/src/getopt.m4������������������������������������������������������������������������������0000644�0001750�0001750�00000036200�14643176424�014675� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������dnl This file is part of GNU Rush. dnl Copyright (C) 2007-2024 Sergey Poznyakoff. dnl dnl GNU Rush 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 GNU Rush 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 GNU Rush. If not, see <http://www.gnu.org/licenses/>. divert(-1) changequote([<,>]) changecom(/*,*/) dnl upcase(ARGS...) dnl Concatenate and convert ARGS to upper case. dnl define([<upcase>], [<translit([<$*>], [<a-z>], [<A-Z>])>]) dnl concat(ARGS...) dnl Concatenate arguments, inserting ", " between each of pair of them. dnl define([<concat>],[<ifelse([<$#>],1,[<$1>],[<$1, concat(shift($@))>])>]) dnl flushleft(ARGS...) dnl Concatenate ARGS and remove any leading whitespace dnl define([<flushleft>], [<patsubst([<concat($*)>], [<^[ ]+>])>]) dnl chop(ARGS...) dnl Concatenate ARGS and remove any trailing whitespace dnl define([<chop>], [<patsubst([<$*>], [<[ ]+$>])>]) dnl escape(ARGS...) dnl Concatenate ARGS and escape any occurrences of double-quotes with dnl backslashes. dnl define([<escape>], [<patsubst([<concat($*)>],[<[\"]>],[<\\\&>])>]) dnl prep(ARG) dnl Prepare ARG for including in C strings: replace newlines with any amount dnl of preceding and following whitespace by a single space character, remove dnl leading whitespace, and escape double-quotes. dnl define([<prep>], [<escape(flushleft(patsubst([<$1>],[<[ ]* +[ ]*>],[< >])))>]) dnl SHORT_OPTS dnl Accumulator for the 3rd argument of getopt_long dnl define([<SHORT_OPTS>],[<>]) dnl GROUP(STRING) dnl Begin a named group of options dnl define([<GROUP>],[<dnl divert(3) { NULL, NULL, 0, N_("prep([<$1>])") }, divert(-1)>]) define([<__GATHER_OPTIONS>],[< define([<KEY>],ifelse([<$2>],,[<OPTION_>]upcase(patsubst($1,-,_)),'$2')) ifelse([<$2>],,[< divert(1) KEY, divert(-1) >]) define([<SELECTOR>],ifdef([<SELECTOR>],SELECTOR) case KEY:) ifelse([<$1>],,,[< divert(2) { "$1", ARGTYPE, 0, KEY }, divert(-1)>]) dnl define([<SHORT_OPTS>],SHORT_OPTS[<>]dnl ifelse([<$2>],,,$2[<>]ifelse(ARGTYPE,[<no_argument>],,ARGTYPE,[<required_argument>],:,ARGTYPE,[<optional_argument>],::))) dnl ifelse([<$1>],,,dnl [<define([<LONG_TAG>],ifelse(LONG_TAG,,[<--$1>],[<LONG_TAG; --$1>]))>]) ifelse([<$2>],,,dnl [<define([<SHORT_TAG>],ifelse(SHORT_TAG,,[<-$2>],[<SHORT_TAG; -$2>]))>]) >]) dnl OPTION(long-opt, short-opt, [arg], [descr]) 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>],[< pushdef([<LONG_TAG>]) pushdef([<SHORT_TAG>]) pushdef([<ARGNAME>],[<$3>]) pushdef([<DOCSTRING>],[<prep([<$4>])>]) pushdef([<ARGTYPE>],[<ifelse([<$3>],,[<no_argument>],dnl patsubst([<$3>],[<\[.*\]>]),,[<optional_argument>],dnl [<required_argument>])>]) __GATHER_OPTIONS($@) >]) dnl ALIAS(long-opt, short-opt) 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>],[< __GATHER_OPTIONS($1,$2) >]) dnl BEGIN dnl Start an action associated with the declared option. Must follow OPTION dnl statement, with optional ALIAS statements in between. dnl define([<BEGIN>],[< ifelse(DOCSTRING,,,[< divert(3) { "translit(dnl ifelse(SHORT_TAG,,LONG_TAG,[<SHORT_TAG[<>]ifelse(LONG_TAG,,,; LONG_TAG)>]), [<;>],[<,>])", ifelse(ARGNAME,,[<NULL, 0>], [<ifelse(ARGTYPE,[<optional_argument>], [<patsubst([<ARGNAME>],[<\[\(.*\)\]>],[<N_("\1"), 1>])>],[<N_("ARGNAME"), 0>])>]), N_("DOCSTRING") }, divert(-1)>]) popdef([<ARGTYPE>]) popdef([<ARGNAME>]) popdef([<DOCSTRING>]) divert(4)dnl popdef([<LONG_TAG>])dnl popdef([<SHORT_TAG>])dnl SELECTOR { >]) dnl END dnl Finish the associated action dnl define([<END>],[< break; } divert(-1) undefine([<SELECTOR>])>]) dnl GETOPT(argc, argv, [default]) 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 default Code for the default branch dnl define([<GETOPT>],[< { int optchar; ifelse([<$#>],3,opterr = 0;) while ((optchar = getopt_long($1, $2, "SHORT_OPTS", long_options, NULL)) != EOF) { switch (optchar) { default: ifelse([<$#>],3,$3,[<exit(1)>]); undivert(4) } } } >]) define([<STDFUNC>],[< divert(0) void print_help(void); void print_usage(void); divert(5) const char *program_version = [<$1>]; static char doc[] = N_("[<$3>]"); static char args_doc[] = N_("[<$4>]"); const char *program_bug_address = "<" PACKAGE_BUGREPORT ">"; #define DESCRCOLUMN 30 #define RMARGIN 79 #define GROUPCOLUMN 2 #define USAGECOLUMN 13 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 s = 0; int i; size_t width = rmargin - lmargin; for (i = 0; ; i++) { if (descr[i] == 0 || isspace (descr[i])) { 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++; } } } void print_help(void) { unsigned i; printf ("%s %s [%s]...", _("Usage:"), [<$2>], _("[<OPTION>]")); if (args_doc[0]) printf(" %s", gettext(args_doc)); printf("\n"); if (doc[0]) print_option_descr(gettext (doc), 0, RMARGIN); putchar ('\n'); for (i = 0; i < sizeof (opthelp) / sizeof (opthelp[0]); i++) { unsigned n; if (opthelp[i].opt) { n = printf (" %s", opthelp[i].opt); if (opthelp[i].arg) { char *cb, *ce; 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'); dnl ************************************************************************** dnl This string cannot be split over several lines, because this would trigger dnl a bug in GNU M4 (version 1.4.9 and 1.4.10), which would insert #line dnl directives between the lines. dnl ************************************************************************** print_option_descr (_("Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options."), 0, RMARGIN); putchar ('\n'); printf (_("Report bugs to %s.\n"), program_bug_address); } static int cmpidx_short(const void *a, const void *b) { struct opthelp const **opta = (struct opthelp const **)a; struct opthelp const **optb = (struct opthelp const **)b; return (*opta)->opt[1] - (*optb)->opt[1]; } static int cmpidx_long(const void *a, const void *b) { struct opthelp const **ap = (struct opthelp const **)a; struct opthelp const **bp = (struct 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); } void print_usage(void) { unsigned i; unsigned n; char *buf; size_t bufsize; unsigned nidx; struct opthelp **optidx; size_t optcount = sizeof(opthelp) / sizeof(opthelp[0]); #define FLUSH do { dnl buf[n] = 0; dnl printf("%s\n", buf); dnl n = USAGECOLUMN; dnl memset(buf, ' ', n); dnl } while (0) #define ADDC(c) do { if (n == RMARGIN) FLUSH; buf[n++] = c; } while (0) optidx = calloc(optcount, sizeof(optidx[0])); if (!optidx) abort(); bufsize = RMARGIN + 1; buf = malloc(bufsize); if (!buf) abort(); n = snprintf(buf, bufsize, "%s %s ", _("Usage:"), [<$2>]); /* 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 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++] = ']'; } } /* 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 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 = realloc(buf, bufsize); if (!buf) abort(); } } 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++] = ']'; } } /* Print argument list */ if (args_doc[0]) { char const *docstr = gettext(args_doc); size_t len = strlen(docstr) + 1; if (n + len <= RMARGIN) { buf[n++] = ' '; strcpy(buf + n, docstr); n += len; } else { struct wordsplit ws; if (wordsplit(docstr, &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 = realloc(buf, bufsize); if (!buf) abort(); } } buf[n++] = ' '; strcpy(buf + n, ws.ws_wordv[i]); n += len; } } } FLUSH; free(optidx); free(buf); } const char version_etc_copyright[] = /* Do *not* mark this string for translation. %s is a copyright symbol suitable for this locale, and %d is the copyright year. */ "Copyright %s 2008-%d Sergey Poznyakoff"; int rush_copyright_year = 2024; void print_version_only(const char *program_version, FILE *stream) { fprintf (stream, "%s\n", program_version); /* 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)"), rush_copyright_year); fputc ('\n', stream); } void print_version(const char *program_version, FILE *stream) { print_version_only(program_version, stream); dnl ************************************************************************** dnl This string cannot be split over serveal lines, because this would trigger dnl a bug in GNU M4 (version 1.4.9 and 1.4.10), which would insert #line dnl directives between the lines. dnl ************************************************************************** fputs (_("License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\nThis is free software: you are free to change and redistribute it.\nThere is NO WARRANTY, to the extent permitted by law.\n\n"), stream); dnl /* TRANSLATORS: %s denotes an author name. */ dnl fprintf (stream, _("Written by %s.\n"), "Sergey Poznyakoff"); } divert(-1) popdef([<ADDC>]) popdef([<FLUSH>]) >]) define([<OPTIONS_BEGIN>], [<divert(-1) define([<GETOPT_STYLE>],[<$1>]) ifelse([<$1>],[<gnu>], [<STDFUNC([<$2 " (" PACKAGE_STRING ")">], [<$2>], [<$3>], [<$4>])>]) >]) define([<OPTIONS_END>],[< ifelse(GETOPT_STYLE,[<gnu>],[< GROUP([<Other options>]) OPTION([<help>],h,,[<Give this help list>]) BEGIN print_help (); exit (0); END OPTION([<usage>],,,[<Give a short usage message>]) BEGIN print_usage (); exit (0); END OPTION([<version>],,,[<Print program version>]) BEGIN /* Give version */ print_version(program_version, stdout); exit (0); END>]) divert /* Option codes */ enum { _OPTION_INIT=255, undivert(1) MAX_OPTION }; static struct option long_options[] = { undivert(2) {0, 0, 0, 0} }; static struct opthelp { const char *opt; const char *arg; int is_optional; const char *descr; } opthelp[] = { undivert(3) }; undivert(5) >]) divert(0)dnl /* -*- buffer-read-only: t -*- vi: set ro: THIS FILE IS GENERATED AUTOMATICALLY. PLEASE DO NOT EDIT. */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/src/limits.c�������������������������������������������������������������������������������0000644�0001750�0001750�00000024100�14643176120�014563� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* This file is part of GNU Rush. Copyright (C) 2008-2024 Sergey Poznyakoff GNU Rush is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GNU Rush is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. */ #include <rush.h> #define SET_LIMIT_AS 0x0001 #define SET_LIMIT_CPU 0x0002 #define SET_LIMIT_DATA 0x0004 #define SET_LIMIT_FSIZE 0x0008 #define SET_LIMIT_NPROC 0x0010 #define SET_LIMIT_CORE 0x0020 #define SET_LIMIT_MEMLOCK 0x0040 #define SET_LIMIT_NOFILE 0x0080 #define SET_LIMIT_RSS 0x0100 #define SET_LIMIT_STACK 0x0200 #define SET_LIMIT_LOGINS 0x0400 #define SET_LIMIT_PRIO 0x0800 struct limits_rec { unsigned set; rlim_t limit_as; rlim_t limit_cpu; rlim_t limit_data; rlim_t limit_fsize; rlim_t limit_nproc; rlim_t limit_core; rlim_t limit_memlock; rlim_t limit_nofile; rlim_t limit_rss; rlim_t limit_stack; size_t limit_logins; int limit_prio; }; int do_set_limit(int rlimit, rlim_t limit) { struct rlimit rlim; debug(2, _("Setting limit %d to %lu"), rlimit, (unsigned long) limit); rlim.rlim_cur = limit; rlim.rlim_max = limit; if (setrlimit(rlimit, &rlim)) { logmsg(LOG_NOTICE, _("error setting limit: %s"), strerror(errno)); return 1; } return 0; } static int set_prio(int prio) { debug(2, _("Setting priority to %d"), prio); if (setpriority(PRIO_PROCESS, 0, prio)) { logmsg(LOG_NOTICE, _("error setting priority: %s"), strerror(errno)); return 1; } return 0; } /* Counts the number of user logins and check against the limit */ static int check_logins(const char *name, size_t limit) { size_t count = 0; struct rush_wtmp *wtmp = 0; int status; if (limit == 0) /* maximum 0 logins ? */ { debug(2, _("No logins allowed for `%s'"), name); logmsg(LOG_ERR, _("No logins allowed for `%s'"), name); return 1; } debug(3, _("counting logins for %s"), name); switch (rushdb_open(RUSH_DB, 0)) { case rushdb_result_ok: break; case rushdb_result_eof: debug(3, "%s", _("acct database is empty")); return 0; case rushdb_result_fail: logmsg(LOG_ERR, _("Cannot open database %s: %s"), RUSH_DB, rushdb_error_string); return 0; } while (rush_utmp_read(RUSH_STATUS_MAP_BIT(RUSH_STATUS_INUSE), &status, &wtmp) == 0) { if (strcmp (wtmp->user, name) == 0) { if (++count >= limit) break; } free(wtmp); wtmp = NULL; } free(wtmp); rushdb_close(); debug(3, _("counted %zu/%zu logins for %s"), count, limit, name); /* * This is called after setutmp(), so the number of logins counted * includes the user who is currently trying to log in. */ if (count >= limit) { debug(2, _("Too many logins (max %zu) for %s"), limit, name); logmsg(LOG_ERR, _("Too many logins (max %zu) for %s"), limit, name); return 1; } return 0; } int set_user_limits(const char *name, struct limits_rec *lrec) { int rc = 0; if (!lrec) return 0; debug(2, _("Setting limits for %s"), name); #if defined(RLIMIT_AS) if (lrec->set & SET_LIMIT_AS) rc |= do_set_limit(RLIMIT_AS, lrec->limit_as); #endif #if defined(RLIMIT_CPU) if (lrec->set & SET_LIMIT_CPU) rc |= do_set_limit(RLIMIT_CPU, lrec->limit_cpu); #endif #if defined(RLIMIT_DATA) if (lrec->set & SET_LIMIT_DATA) rc |= do_set_limit(RLIMIT_DATA, lrec->limit_data); #endif #if defined(RLIMIT_FSIZE) if (lrec->set & SET_LIMIT_FSIZE) rc |= do_set_limit(RLIMIT_FSIZE, lrec->limit_fsize); #endif #if defined(RLIMIT_NPROC) if (lrec->set & SET_LIMIT_NPROC) rc |= do_set_limit(RLIMIT_NPROC, lrec->limit_nproc); #endif #if defined(RLIMIT_CORE) if (lrec->set & SET_LIMIT_CORE) rc |= do_set_limit(RLIMIT_CORE, lrec->limit_core); #endif #if defined(RLIMIT_MEMLOCK) if (lrec->set & SET_LIMIT_MEMLOCK) rc |= do_set_limit(RLIMIT_MEMLOCK, lrec->limit_memlock); #endif #if defined(RLIMIT_NOFILE) if (lrec->set & SET_LIMIT_NOFILE) rc |= do_set_limit(RLIMIT_NOFILE, lrec->limit_nofile); #endif #if defined(RLIMIT_RSS) if (lrec->set & SET_LIMIT_RSS) rc |= do_set_limit(RLIMIT_RSS, lrec->limit_rss); #endif #if defined(RLIMIT_STACK) if (lrec->set & SET_LIMIT_STACK) rc |= do_set_limit(RLIMIT_STACK, lrec->limit_stack); #endif if (lrec->set & SET_LIMIT_LOGINS) rc |= check_logins(name, lrec->limit_logins); if (lrec->set & SET_LIMIT_PRIO) rc |= set_prio(lrec->limit_prio); return rc; } int getlimit(char **ptr, rlim_t *rlim, int mul) { unsigned long val; val = strtoul(*ptr, ptr, 10); if (val == 0) return 1; *rlim = val * mul; return 0; } limits_record_t limits_record_create(void) { struct limits_rec *lrec = xmalloc(sizeof(*lrec)); lrec->set = 0; return lrec; } /* Parse limits string and fill appropriate fields in lrec. The string consists of _commands_, optionally separated by any amount of whitespace. A command has the following form: [AaCcDdFfMmNnRrSsTtUuLlPp][0-9]+ i.e. a letter followed by number, and is interpreted as follows: Command ulimit setrlimit() The limit it sets option arg ------------------------------------------------------------- [Aa] a RLIMIT_AS max address space (KB) [Cc] c RLIMIT_CORE max core file size (KB) [Dd] d RLIMIT_DATA max data size (KB) [Ff] f RLIMIT_FSIZE Maximum filesize (KB) [Mm] m RLIMIT_MEMLOCK max locked-in-memory address space (KB) [Nn] n RLIMIT_NOFILE max number of open files [Rr] r RLIMIT_RSS max resident set size (KB) [Ss] s RLIMIT_STACK max stack size (KB) [Tt] t RLIMIT_CPU max CPU time (MIN) [Uu] u RLIMIT_NPROC max number of processes [Ll] l (none) max number of logins for this user [Pp] p (none) process priority -20..20 (negative = high priority) */ int limits_record_add(limits_record_t lrec, char *str, char **endp) { char *p; switch (*str++) { case 'a': case 'A': /* RLIMIT_AS - max address space (KB) */ if (getlimit(&str, &lrec->limit_as, 1024)) { *endp = str; return lrec_badval; } lrec->set |= SET_LIMIT_AS; break; case 't': case 'T': /* RLIMIT_CPU - max CPU time (MIN) */ if (getlimit(&str, &lrec->limit_cpu, 60)) { *endp = str; return lrec_badval; } lrec->set |= SET_LIMIT_CPU; break; case 'd': case 'D': /* RLIMIT_DATA - max data size (KB) */ if (getlimit(&str, &lrec->limit_data, 1024)) { *endp = str; return lrec_badval; } lrec->set |= SET_LIMIT_DATA; break; case 'f': case 'F': /* RLIMIT_FSIZE - Maximum filesize (KB) */ if (getlimit(&str, &lrec->limit_fsize, 1024)) { *endp = str; return lrec_badval; } lrec->set |= SET_LIMIT_FSIZE; break; case 'u': case 'U': /* RLIMIT_NPROC - max number of processes */ if (getlimit(&str, &lrec->limit_nproc, 1)) { *endp = str; return lrec_badval; } lrec->set |= SET_LIMIT_NPROC; break; case 'c': case 'C': /* RLIMIT_CORE - max core file size (KB) */ if (getlimit(&str, &lrec->limit_core, 1024)) { *endp = str; return lrec_badval; } lrec->set |= SET_LIMIT_CORE; break; case 'm': case 'M': /* RLIMIT_MEMLOCK - max locked-in-memory * address space (KB) */ if (getlimit(&str, &lrec->limit_memlock, 1024)) { *endp = str; return lrec_badval; } lrec->set |= SET_LIMIT_MEMLOCK; break; case 'n': case 'N': /* RLIMIT_NOFILE - max number of open files */ if (getlimit(&str, &lrec->limit_nofile, 1)) { *endp = str; return lrec_badval; } lrec->set |= SET_LIMIT_NOFILE; break; case 'r': case 'R': /* RLIMIT_RSS - max resident set size (KB) */ if (getlimit(&str, &lrec->limit_rss, 1024)) { *endp = str; return lrec_badval; } lrec->set |= SET_LIMIT_RSS; break; case 's': case 'S': /* RLIMIT_STACK - max stack size (KB) */ if (getlimit(&str, &lrec->limit_stack, 1024)) { *endp = str; return lrec_badval; } lrec->set |= SET_LIMIT_STACK; break; case 'l': case 'L': lrec->limit_logins = strtoul(str, &p, 10); if (p == str) { *endp = p; return lrec_badval; } lrec->set |= SET_LIMIT_LOGINS; break; case 'p': case 'P': lrec->limit_prio = strtol(str, &p, 10); if (p == str) { *endp = p; return lrec_badval; } if (lrec->limit_prio > 0) lrec->set |= SET_LIMIT_PRIO; break; default: *endp = str-1; return lrec_error; } return 0; } int parse_limits(limits_record_t *plrec, char *str, char **endp) { int c; struct limits_rec *lrec = limits_record_create(); int rc; while ((c = *str++)) { if (ISWS(c)) continue; rc = limits_record_add(lrec, str, endp); if (rc) { free(lrec); return rc; } } *plrec = lrec; return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/src/cf.h�����������������������������������������������������������������������������������0000644�0001750�0001750�00000014343�14643176120�013667� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* This file is part of GNU Rush. Copyright (C) 2008-2024 Sergey Poznyakoff GNU Rush is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GNU Rush is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. */ /* String buffer */ struct stringbuf { char *buffer; /* The buffer itself */ size_t size; /* Size of the buffer */ size_t pos; /* Actual number of characters in the buffer */ }; void stringbuf_init(struct stringbuf *sb); void stringbuf_free(struct stringbuf *sb); void stringbuf_add_char(struct stringbuf *sb, int c); void stringbuf_add_string(struct stringbuf *sb, char const *str); void stringbuf_add_array(struct stringbuf *sb, char const *str, size_t len); void stringbuf_add_num(struct stringbuf *sb, unsigned n); void stringbuf_finish(struct stringbuf *sb); struct cfpoint { /* A point in the configuration file */ char const *filename; int line; int column; }; struct cfloc { /* Location in the configuration file */ struct cfpoint beg; struct cfpoint end; }; #define YYLTYPE struct cfloc #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) \ cfloc_print(&(Loc), File) void cfpoint_format(struct cfpoint const *cfp, struct stringbuf *sb); void cfloc_format(struct cfloc const *cfl, struct stringbuf *sb); void cfloc_print(struct cfloc const *cfl, FILE *fp); struct cfnumber { /* Representation of a "number-like" string */ int intval; /* Numeric value */ char *strval; /* String value */ }; void cferror(struct cfloc const *loc, char const *fmt, ...); void vcferror(struct cfloc const *loc, char const *fmt, va_list ap); void yyerror(char const *msg,...); typedef struct cfstream { int fd; /* File descriptor (-1 for built-in config) */ char *buffer; /* Read buffer */ size_t size; /* Size of buffer */ size_t level; /* Number of data bytes available in the buffer */ size_t pos; /* Current read position */ unsigned eol:1;/* 1 if the last character read was \n, 0 otherwise */ unsigned eof:1;/* 1 if end of file has been reached */ } CFSTREAM; CFSTREAM *cfstream_open_file(char const *filename); CFSTREAM *cfstream_open_stdin(void); CFSTREAM *cfstream_open_mem(char const *buffer, size_t len); ssize_t cfstream_read(CFSTREAM *, char *, size_t); void cfstream_close(CFSTREAM *); void cfstream_rewind(CFSTREAM *cf); static inline int cfstream_getc(CFSTREAM *cf) { char c; if (cfstream_read(cf, &c, 1) == 0) return 0; return c; } int cfstream_same_file(CFSTREAM *cf, struct stat const *st); void cflex_debug(int v); void cfgram_debug(int v); void cflex_test(char const *file); void dumpstr(char const *string, FILE *fp); void cflex_setup(CFSTREAM *cf, char const *filename, int line); int cflex_include(char const *filename, struct cfloc const *loc); void cflex_pushargs(void); void cflex_popargs(void); void cflex_normal(void); void skiptoeol(void); void restorenormal(void); int cfparse_old(CFSTREAM *cf, char const *filename, int line); int yylex(void); int yyparse(void); void cfparse(void); int parse_old_rc(void); struct rush_rule *new_rush_rule(char const *tag); struct transform_node *new_transform_node(struct rush_rule *rule, enum transform_node_type type); struct test_node *new_test_node(enum test_type type); struct envar *new_envar(struct rush_rule *rule, char const *name, size_t nlen, char const *value, size_t vlen, enum envar_type type); typedef int (*rule_attrib_setter_t) (struct rush_rule *rule, char const *arg, struct cfloc const *loc); rule_attrib_setter_t rule_attrib_lookup(char const *name); struct argval { struct argval *next; struct cfloc loc; int isnum; char *strval; int intval; }; void arglist_free(struct argval *arg); typedef int (*global_attrib_setter_t) (int argc, struct argval *arghead); struct global_attrib { char const *name; char *argt; global_attrib_setter_t setter; }; struct global_attrib *global_attrib_lookup(const char *name); void global_attrib_set(struct global_attrib *glatt, int argc, struct argval *arghead, struct cfloc const *loc); extern int re_flags; extern int expand_undefined; extern struct cfloc curloc; /* The following are shared between the two configuration parsers. Once the legacy parses is phased out, they will become static to cf.c */ void trimws(char *s); size_t trimslash(char *s); int attrib_umask(struct rush_rule *rule, char const *arg, struct cfloc const *loc); int attrib_chroot(struct rush_rule *rule, char const *arg, struct cfloc const *loc); int attrib_chdir(struct rush_rule *rule, char const *arg, struct cfloc const *loc); int attrib_fork(struct rush_rule *rule, char const *arg, struct cfloc const *loc); int attrib_acct(struct rush_rule *rule, char const *arg, struct cfloc const *loc); int attrib_post_socket(struct rush_rule *rule, char const *arg, struct cfloc const *loc); int parse_file_mode(const char *val, mode_t *mode, struct cfloc const *loc); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/src/map.c����������������������������������������������������������������������������������0000644�0001750�0001750�00000022263�14643176120�014047� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* This file is part of GNU Rush. Copyright (C) 2008-2024 Sergey Poznyakoff GNU Rush is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GNU Rush is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. */ #include <rush.h> /* Set to 1 if expansion of undefined variables is allowed */ int expand_undefined; static inline int d2n(int d) { static char dig[] = "0123456789"; return strchr(dig, d) - dig; } static int refno(char const *input, int *len) { if (c_isdigit(input[1])) { *len = 2; return d2n(input[1]); } else if (input[1] == '{') { char const *p = input + 1; int n = 0; while (*++p && c_isdigit(*p)) n = n * 10 + d2n(*p); if (*p == '}' && p > &input[1]) { *len = p - input + 1; return n; } } return -1; } /* Expand references to BACKREF in INPUT. A reference begins with one of characters in PFX, followed by the ordinal number of the parenthesized subgroup (in decimal, range [0, 9]). */ static char * expandref(char const *input, struct rush_backref *backref, char *pfx) { char *output; size_t output_len = strlen(input) + 1; size_t istart = 0, ostart = 0; output = xmalloc(output_len); while (input[istart]) { size_t len = strcspn(input + istart, pfx); int n, i; while (ostart + len >= output_len) output = x2realloc(output, &output_len); memcpy(output + ostart, input + istart, len); ostart += len; istart += len; if (!input[istart]) break; else if (istart > 1 && input[istart-1] == '\\') { output[ostart-1] = input[istart]; istart++; } else if ((n = refno(input + istart, &i)) >= 0 && n < backref->nmatch) { len = backref->match[n].rm_eo - backref->match[n].rm_so; while (ostart + len >= output_len) output = x2realloc(output, &output_len); memcpy(output + ostart, backref->subject + backref->match[n].rm_so, len); ostart += len; istart += i; } else { if (ostart + 2 >= output_len) output = x2realloc(output, &output_len); memcpy(output + ostart, input + istart, 2); ostart += 2; istart += 2; } } output[ostart] = 0; return xrealloc(output, ostart + 1); } static const char * var_uid(struct rush_request *req) { static char buf[INT_BUFSIZE_BOUND(uintmax_t)]; return umaxtostr(req->pw->pw_uid, buf); } static const char * var_user(struct rush_request *req) { return req->pw->pw_name; } static const char * var_gid(struct rush_request *req) { static char buf[INT_BUFSIZE_BOUND(uintmax_t)]; return umaxtostr(req->pw->pw_gid, buf); } static const char * var_group(struct rush_request *req) { struct group *grp = getgrgid(req->pw->pw_gid); return grp ? grp->gr_name : var_gid(req); } static const char * var_home(struct rush_request *req) { return req->pw->pw_dir; } static const char * var_gecos(struct rush_request *req) { return req->pw->pw_gecos; } static const char * var_program(struct rush_request *req) { return PROGFILE(req); } static const char * var_command(struct rush_request *req) { return req->cmdline; } struct vardef { char *name; const char *(*expand)(struct rush_request *); enum transform_target_type target; }; static struct vardef request_vars[] = { { "user", var_user, target_readonly }, { "group", var_group, target_readonly }, { "uid", var_uid, target_readonly }, { "gid", var_gid, target_readonly }, { "home", var_home, target_readonly }, { "gecos", var_gecos, target_readonly }, { "program", var_program, target_program }, { "command", var_command, target_command }, { NULL } }; static struct vardef const * find_request_var(char const *name) { struct vardef *vd; for (vd = request_vars; vd->name; vd++) { if (strcmp(vd->name, name) == 0) return vd; } return NULL; } enum transform_target_type rush_variable_target(char const *varname) { struct vardef const *vd = find_request_var(varname); return vd ? vd->target : target_var; } static char ** find_user_varptr(struct rush_request *req, char const *var, size_t len) { size_t i; for (i = 0; i < req->var_count; i += 2) if (strlen(req->var_kv[i]) == len && memcmp(req->var_kv[i], var, len) == 0) return &req->var_kv[i+1]; return NULL; } char ** rush_getvarptr(struct rush_request *req, char const *varname) { if (req->var_kv) { char **ret = find_user_varptr(req, varname, strlen(varname)); if (ret) return ret; } while (req->var_count + 3 >= req->var_max) req->var_kv = x2nrealloc(req->var_kv, &req->var_max, sizeof(req->var_kv[0])); req->var_kv[req->var_count++] = xstrdup(varname); req->var_kv[req->var_count++] = NULL; req->var_kv[req->var_count] = NULL; return &req->var_kv[req->var_count - 1]; } void rush_request_delvar(struct rush_request *req, char const *varname) { size_t i; for (i = 0; i < req->var_count; i += 2) { if (strcmp(req->var_kv[i], varname) == 0) { free(req->var_kv[i]); free(req->var_kv[i+1]); memmove(req->var_kv + i, req->var_kv + i + 2, (req->var_count - (i + 2) + 1) * sizeof req->var_kv[0]); req->var_count -= 2; break; } } } static int getvar(char **ret, const char *var, size_t len, void *clos) { struct rush_request *req = clos; const char *s = NULL; char *p; struct vardef *vd; for (vd = request_vars; vd->name; vd++) { if (strncmp(vd->name, var, len) == 0) { s = vd->expand(clos); break; } } if (!s && req->var_kv) { char **ptr = find_user_varptr(req, var, len); if (ptr) s = *ptr; } if (!s) return WRDSE_UNDEF; p = strdup(s); if (!p) return WRDSE_NOSPACE; *ret = p; return WRDSE_OK; } void rush_ws_error (const char *fmt, ...) { va_list ap; va_start(ap, fmt); vlogmsg(LOG_ERR, fmt, ap); va_end(ap); } char * rush_expand_string(const char *string, struct rush_request *req) { struct wordsplit ws; int wsflags = WRDSF_NOSPLIT | WRDSF_NOCMD | (expand_undefined ? 0: WRDSF_UNDEF) | WRDSF_ENV | WRDSF_GETVAR | WRDSF_CLOSURE | WRDSF_ERROR | WRDSF_OPTIONS; char *result; ws.ws_getvar = getvar; ws.ws_closure = req; ws.ws_paramv = (char const**) req->argv; ws.ws_paramc = req->argc; ws.ws_error = rush_ws_error; ws.ws_options = WRDSO_BSKEEP_QUOTE | WRDSO_NOCMDSPLIT | WRDSO_PARAMV | WRDSO_PARAM_NEGIDX | WRDSO_GETVARPREF; ws.ws_env = (char const**)req->env; result = expandref(string, &req->backref[req->backref_cur], "%"); switch (wordsplit(result, &ws, wsflags)) { case 0: break; case WRDSE_UNDEF: die(config_error, &req->i18n, "%s: %s", wordsplit_strerror(&ws), ws.ws_errctx); break; default: die(system_error, &req->i18n, "%s", wordsplit_strerror(&ws)); } free(result); result = ws.ws_wordv[0]; ws.ws_wordv[0] = NULL; if (ws.ws_envbuf) { size_t i; for (i = 0; i < req->env_count; i++) free (req->env[i]); req->env_count = 0; if (req->env_max < ws.ws_envidx + 1) { req->env = xrealloc(req->env, (ws.ws_envidx + 1) * sizeof(req->env[0])); req->env_max = ws.ws_envidx + 1; } for (i = 0; i < ws.ws_envidx; i++) { size_t len = strcspn(ws.ws_envbuf[i], "="); char **ptr = find_user_varptr(req, ws.ws_envbuf[i], len); if (ptr) { free(*ptr); *ptr = xstrdup(ws.ws_envbuf[i] + len + 1); free(ws.ws_envbuf[i]); } else { req->env[req->env_count++] = ws.ws_envbuf[i]; } } req->env[req->env_count] = NULL; free (ws.ws_envbuf); ws.ws_envbuf = NULL; ws.ws_envidx = 0; ws.ws_envsiz = 0; } wordsplit_free(&ws); return result; } char * map_string(struct rush_map *map, struct rush_request *req) { char *file; FILE *fp; struct stat st; char *buf = NULL; size_t size = 0; size_t line = 0; char *key; char *ret = NULL; file = expand_tilde(map->file, req->pw->pw_dir); if (stat(file, &st)) { die(system_error, &req->i18n, _("cannot stat file %s: %s"), file, strerror(errno)); } if (check_config_permissions(file, &st)) die(config_error, &req->i18n, _("%s: file is not safe"), file); fp = fopen(file, "r"); if (!fp) die(system_error, &req->i18n, _("%s: cannot open map file"), file); key = rush_expand_string(map->key, req); while (getline(&buf, &size, fp) != -1) { size_t len; struct wordsplit ws; line++; len = strlen(buf); while (len > 0 && buf[len-1] == '\n') buf[--len] = 0; ws.ws_delim = map->delim; if (wordsplit(buf, &ws, WRDSF_NOVAR | WRDSF_NOCMD | WRDSF_DELIM)) die(system_error, &req->i18n, _("%s:%lu: failed to parse line: %s"), file, (unsigned long)line, wordsplit_strerror(&ws)); if (map->key_field <= ws.ws_wordc && map->val_field <= ws.ws_wordc && strcmp(ws.ws_wordv[map->key_field - 1], key) == 0) ret = xstrdup(ws.ws_wordv[map->val_field - 1]); wordsplit_free(&ws); if (ret) break; } fclose(fp); free(key); free(file); if (!ret && map->defval) ret = xstrdup(map->defval); return ret; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/src/rushopt.h������������������������������������������������������������������������������0000644�0001750�0001750�00000043230�14643176476�015016� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- buffer-read-only: t -*- vi: set ro: THIS FILE IS GENERATED AUTOMATICALLY. PLEASE DO NOT EDIT. */ #line 1 "rushopt.opt" /* This file is part of GNU Rush. Copyright (C) 2008-2024 Sergey Poznyakoff GNU Rush is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GNU Rush is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. */ #include <error.h> #line 19 "rushopt.opt" #line 19 void print_help(void); #line 19 void print_usage(void); #line 100 "rushopt.opt" #line 100 /* Option codes */ #line 100 enum { #line 100 _OPTION_INIT=255, #line 100 #line 32 "rushopt.opt" #line 32 OPTION_LINT, #line 89 "rushopt.opt" #line 89 OPTION_SHOW_DEFAULT, #line 100 "rushopt.opt" #line 100 OPTION_USAGE, #line 100 "rushopt.opt" #line 100 OPTION_VERSION, #line 100 "rushopt.opt" MAX_OPTION #line 100 }; #line 100 static struct option long_options[] = { #line 100 #line 23 "rushopt.opt" #line 23 { "debug", required_argument, 0, 'd' }, #line 30 "rushopt.opt" #line 30 { "test", no_argument, 0, 't' }, #line 32 "rushopt.opt" #line 32 { "lint", no_argument, 0, OPTION_LINT }, #line 43 "rushopt.opt" #line 43 { "trace", no_argument, 0, 'x' }, #line 49 "rushopt.opt" #line 49 { "user", required_argument, 0, 'u' }, #line 74 "rushopt.opt" #line 74 { "dump", required_argument, 0, 'D' }, #line 81 "rushopt.opt" #line 81 { "security-check", required_argument, 0, 'C' }, #line 89 "rushopt.opt" #line 89 { "show-default", no_argument, 0, OPTION_SHOW_DEFAULT }, #line 100 "rushopt.opt" #line 100 { "help", no_argument, 0, 'h' }, #line 100 "rushopt.opt" #line 100 { "usage", no_argument, 0, OPTION_USAGE }, #line 100 "rushopt.opt" #line 100 { "version", no_argument, 0, OPTION_VERSION }, #line 100 "rushopt.opt" {0, 0, 0, 0} #line 100 }; #line 100 static struct opthelp { #line 100 const char *opt; #line 100 const char *arg; #line 100 int is_optional; #line 100 const char *descr; #line 100 } opthelp[] = { #line 100 #line 25 "rushopt.opt" #line 25 { "-d, --debug", N_("NUMBER"), 0, N_("Set debugging level.") }, #line 33 "rushopt.opt" #line 33 { "-t, --test, --lint", NULL, 0, N_("Run in test mode.") }, #line 39 "rushopt.opt" #line 39 { "-T", NULL, 0, N_("Scanner test.") }, #line 45 "rushopt.opt" #line 45 { "-x, --trace", NULL, 0, N_("Print grammar and lexical analyzer traces") }, #line 51 "rushopt.opt" #line 51 { "-u, --user", N_("NAME"), 0, N_("Supply user name in test mode.") }, #line 63 "rushopt.opt" #line 63 { "-c", N_("COMMAND"), 0, N_("Execute COMMAND.") }, #line 69 "rushopt.opt" #line 69 { "-i", NULL, 0, N_("Force interactive shell.") }, #line 76 "rushopt.opt" #line 76 { "-D, --dump", N_("KEYWORDS"), 0, N_("Dump final request in test mode.") }, #line 83 "rushopt.opt" #line 83 { "-C, --security-check", N_("CHECK"), 0, N_("Add or remove configuration security check.") }, #line 91 "rushopt.opt" #line 91 { "--show-default", NULL, 0, N_("Show default configuration.") }, #line 100 "rushopt.opt" #line 100 { NULL, NULL, 0, N_("Other options") }, #line 100 "rushopt.opt" #line 100 { "-h, --help", NULL, 0, N_("Give this help list") }, #line 100 "rushopt.opt" #line 100 { "--usage", NULL, 0, N_("Give a short usage message") }, #line 100 "rushopt.opt" #line 100 { "--version", NULL, 0, N_("Print program version") }, #line 100 "rushopt.opt" }; #line 19 "rushopt.opt" #line 19 const char *program_version = "rush" " (" PACKAGE_STRING ")"; #line 19 static char doc[] = N_("rush - restricted user shell."); #line 19 static char args_doc[] = N_("[FILE]"); #line 19 const char *program_bug_address = "<" PACKAGE_BUGREPORT ">"; #line 19 #line 19 #define DESCRCOLUMN 30 #line 19 #define RMARGIN 79 #line 19 #define GROUPCOLUMN 2 #line 19 #define USAGECOLUMN 13 #line 19 #line 19 static void #line 19 indent (size_t start, size_t col) #line 19 { #line 19 for (; start < col; start++) #line 19 putchar (' '); #line 19 } #line 19 #line 19 static void #line 19 print_option_descr (const char *descr, size_t lmargin, size_t rmargin) #line 19 { #line 19 while (*descr) #line 19 { #line 19 int s = 0; #line 19 int i; #line 19 size_t width = rmargin - lmargin; #line 19 #line 19 for (i = 0; ; i++) #line 19 { #line 19 if (descr[i] == 0 || isspace (descr[i])) #line 19 { #line 19 if (i > width) #line 19 break; #line 19 s = i; #line 19 if (descr[i] == 0) #line 19 break; #line 19 } #line 19 } #line 19 printf ("%*.*s\n", s, s, descr); #line 19 descr += s; #line 19 if (*descr) #line 19 { #line 19 indent (0, lmargin); #line 19 descr++; #line 19 } #line 19 } #line 19 } #line 19 #line 19 void #line 19 print_help(void) #line 19 { #line 19 unsigned i; #line 19 #line 19 printf ("%s %s [%s]...", _("Usage:"), "rush", _("OPTION")); #line 19 if (args_doc[0]) #line 19 printf(" %s", gettext(args_doc)); #line 19 printf("\n"); #line 19 if (doc[0]) #line 19 print_option_descr(gettext (doc), 0, RMARGIN); #line 19 putchar ('\n'); #line 19 #line 19 for (i = 0; i < sizeof (opthelp) / sizeof (opthelp[0]); i++) #line 19 { #line 19 unsigned n; #line 19 if (opthelp[i].opt) #line 19 { #line 19 n = printf (" %s", opthelp[i].opt); #line 19 if (opthelp[i].arg) #line 19 { #line 19 char *cb, *ce; #line 19 if (strlen (opthelp[i].opt) == 2) #line 19 { #line 19 if (!opthelp[i].is_optional) #line 19 { #line 19 putchar (' '); #line 19 n++; #line 19 } #line 19 } #line 19 else #line 19 { #line 19 putchar ('='); #line 19 n++; #line 19 } #line 19 if (opthelp[i].is_optional) #line 19 { #line 19 cb = "["; #line 19 ce = "]"; #line 19 } #line 19 else #line 19 cb = ce = ""; #line 19 n += printf ("%s%s%s", cb, gettext (opthelp[i].arg), ce); #line 19 } #line 19 if (n >= DESCRCOLUMN) #line 19 { #line 19 putchar ('\n'); #line 19 n = 0; #line 19 } #line 19 indent (n, DESCRCOLUMN); #line 19 print_option_descr (gettext (opthelp[i].descr), DESCRCOLUMN, RMARGIN); #line 19 } #line 19 else #line 19 { #line 19 if (i) #line 19 putchar ('\n'); #line 19 indent (0, GROUPCOLUMN); #line 19 print_option_descr (gettext (opthelp[i].descr), #line 19 GROUPCOLUMN, RMARGIN); #line 19 putchar ('\n'); #line 19 } #line 19 } #line 19 #line 19 putchar ('\n'); #line 19 print_option_descr (_("Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options."), 0, RMARGIN); #line 19 putchar ('\n'); #line 19 printf (_("Report bugs to %s.\n"), program_bug_address); #line 19 } #line 19 #line 19 static int #line 19 cmpidx_short(const void *a, const void *b) #line 19 { #line 19 struct opthelp const **opta = (struct opthelp const **)a; #line 19 struct opthelp const **optb = (struct opthelp const **)b; #line 19 #line 19 return (*opta)->opt[1] - (*optb)->opt[1]; #line 19 } #line 19 #line 19 static int #line 19 cmpidx_long(const void *a, const void *b) #line 19 { #line 19 struct opthelp const **ap = (struct opthelp const **)a; #line 19 struct opthelp const **bp = (struct opthelp const **)b; #line 19 char const *opta, *optb; #line 19 size_t lena, lenb; #line 19 #line 19 if ((*ap)->opt[1] == '-') #line 19 opta = (*ap)->opt; #line 19 else #line 19 opta = (*ap)->opt + 4; #line 19 lena = strcspn(opta, ","); #line 19 #line 19 if ((*bp)->opt[1] == '-') #line 19 optb = (*bp)->opt; #line 19 else #line 19 optb = (*bp)->opt + 4; #line 19 lenb = strcspn(optb, ","); #line 19 return strncmp(opta, optb, lena > lenb ? lenb : lena); #line 19 } #line 19 #line 19 void #line 19 print_usage(void) #line 19 { #line 19 unsigned i; #line 19 unsigned n; #line 19 char *buf; #line 19 size_t bufsize; #line 19 unsigned nidx; #line 19 struct opthelp **optidx; #line 19 size_t optcount = sizeof(opthelp) / sizeof(opthelp[0]); #line 19 #line 19 #define FLUSH do { buf[n] = 0; printf("%s\n", buf); n = USAGECOLUMN; memset(buf, ' ', n); } while (0) #line 19 #define ADDC(c) do { if (n == RMARGIN) FLUSH; buf[n++] = c; } while (0) #line 19 #line 19 optidx = calloc(optcount, sizeof(optidx[0])); #line 19 if (!optidx) #line 19 abort(); #line 19 bufsize = RMARGIN + 1; #line 19 buf = malloc(bufsize); #line 19 if (!buf) #line 19 abort(); #line 19 #line 19 n = snprintf(buf, bufsize, "%s %s ", _("Usage:"), "rush"); #line 19 #line 19 /* Print a list of short options without arguments. */ #line 19 for (i = nidx = 0; i < optcount; i++) #line 19 if (opthelp[i].opt && #line 19 opthelp[i].descr && #line 19 opthelp[i].opt[1] != '-' && #line 19 opthelp[i].arg == NULL) #line 19 optidx[nidx++] = opthelp + i; #line 19 #line 19 if (nidx) { #line 19 qsort(optidx, nidx, sizeof(optidx[0]), cmpidx_short); #line 19 #line 19 ADDC('['); #line 19 ADDC('-'); #line 19 for (i = 0; i < nidx; i++) { #line 19 ADDC(optidx[i]->opt[1]); #line 19 } #line 19 ADDC(']'); #line 19 } #line 19 #line 19 /* Print a list of short options with arguments. */ #line 19 for (i = nidx = 0; i < optcount; i++) { #line 19 if (opthelp[i].opt && #line 19 opthelp[i].descr && #line 19 opthelp[i].opt[1] != '-' && #line 19 opthelp[i].arg) #line 19 optidx[nidx++] = opthelp + i; #line 19 } #line 19 #line 19 if (nidx) { #line 19 qsort(optidx, nidx, sizeof(optidx[0]), cmpidx_short); #line 19 #line 19 for (i = 0; i < nidx; i++) { #line 19 struct opthelp *opt = optidx[i]; #line 19 size_t len = 5 + strlen(opt->arg) #line 19 + (opt->is_optional ? 2 : 1); #line 19 #line 19 if (n + len > RMARGIN) #line 19 FLUSH; #line 19 buf[n++] = ' '; #line 19 buf[n++] = '['; #line 19 buf[n++] = '-'; #line 19 buf[n++] = opt->opt[1]; #line 19 if (opt->is_optional) { #line 19 buf[n++] = '['; #line 19 strcpy(&buf[n], opt->arg); #line 19 n += strlen(opt->arg); #line 19 buf[n++] = ']'; #line 19 } else { #line 19 buf[n++] = ' '; #line 19 strcpy(&buf[n], opt->arg); #line 19 n += strlen(opt->arg); #line 19 } #line 19 buf[n++] = ']'; #line 19 } #line 19 } #line 19 #line 19 /* Print a list of long options */ #line 19 for (i = nidx = 0; i < optcount; i++) { #line 19 if (opthelp[i].opt && opthelp[i].descr #line 19 && (opthelp[i].opt[1] == '-' || opthelp[i].opt[2] == ',')) #line 19 optidx[nidx++] = opthelp + i; #line 19 } #line 19 #line 19 if (nidx) { #line 19 qsort(optidx, nidx, sizeof(optidx[0]), cmpidx_long); #line 19 #line 19 for (i = 0; i < nidx; i++) { #line 19 struct opthelp *opt = optidx[i]; #line 19 size_t len; #line 19 const char *longopt; #line 19 #line 19 if (opt->opt[1] == '-') #line 19 longopt = opt->opt; #line 19 else if (opt->opt[2] == ',') #line 19 longopt = opt->opt + 4; #line 19 else #line 19 continue; #line 19 #line 19 len = 3 + strlen(longopt) #line 19 + (opt->arg ? 1 + strlen(opt->arg) #line 19 + (opt->is_optional ? 2 : 0) : 0); #line 19 if (n + len > RMARGIN) { #line 19 FLUSH; #line 19 /* Make sure we have enough buffer space if the string cannot be split */ #line 19 if (n + len > bufsize) { #line 19 bufsize = n + len; #line 19 buf = realloc(buf, bufsize); #line 19 if (!buf) #line 19 abort(); #line 19 } #line 19 } #line 19 buf[n++] = ' '; #line 19 buf[n++] = '['; #line 19 strcpy(&buf[n], longopt); #line 19 n += strlen(longopt); #line 19 if (opt->arg) { #line 19 buf[n++] = '='; #line 19 if (opt->is_optional) { #line 19 buf[n++] = '['; #line 19 strcpy(&buf[n], opt->arg); #line 19 n += strlen(opt->arg); #line 19 buf[n++] = ']'; #line 19 } else { #line 19 strcpy(&buf[n], opt->arg); #line 19 n += strlen(opt->arg); #line 19 } #line 19 } #line 19 buf[n++] = ']'; #line 19 } #line 19 } #line 19 #line 19 /* Print argument list */ #line 19 if (args_doc[0]) { #line 19 char const *docstr = gettext(args_doc); #line 19 size_t len = strlen(docstr) + 1; #line 19 if (n + len <= RMARGIN) { #line 19 buf[n++] = ' '; #line 19 strcpy(buf + n, docstr); #line 19 n += len; #line 19 } else { #line 19 struct wordsplit ws; #line 19 #line 19 if (wordsplit(docstr, &ws, #line 19 WRDSF_SHOWERR | #line 19 WRDSF_NOVAR | #line 19 WRDSF_NOCMD | #line 19 WRDSF_QUOTE | #line 19 WRDSF_SQUEEZE_DELIMS)) #line 19 abort(); #line 19 #line 19 for (i = 0; i < ws.ws_wordc; i++) { #line 19 len = strlen(ws.ws_wordv[i]) + 1; #line 19 if (n + len > RMARGIN) { #line 19 FLUSH; #line 19 /* Make sure we have enough buffer space if the string cannot be split */ #line 19 if (n + len > bufsize) { #line 19 bufsize = n + len; #line 19 buf = realloc(buf, bufsize); #line 19 if (!buf) #line 19 abort(); #line 19 } #line 19 } #line 19 buf[n++] = ' '; #line 19 strcpy(buf + n, ws.ws_wordv[i]); #line 19 n += len; #line 19 } #line 19 } #line 19 } #line 19 #line 19 FLUSH; #line 19 #line 19 free(optidx); #line 19 free(buf); #line 19 } #line 19 #line 19 const char version_etc_copyright[] = #line 19 /* Do *not* mark this string for translation. %s is a copyright symbol suitable for this locale, and %d is the copyright year. */ #line 19 "Copyright %s 2008-%d Sergey Poznyakoff"; #line 19 int rush_copyright_year = 2024; #line 19 #line 19 void #line 19 print_version_only(const char *program_version, FILE *stream) #line 19 { #line 19 fprintf (stream, "%s\n", program_version); #line 19 /* 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. */ #line 19 fprintf (stream, version_etc_copyright, _("(C)"), rush_copyright_year); #line 19 fputc ('\n', stream); #line 19 } #line 19 #line 19 void #line 19 print_version(const char *program_version, FILE *stream) #line 19 { #line 19 print_version_only(program_version, stream); #line 19 #line 19 fputs (_("License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\nThis is free software: you are free to change and redistribute it.\nThere is NO WARRANTY, to the extent permitted by law.\n\n"), #line 19 stream); #line 19 #line 19 } #line 19 #line 100 "rushopt.opt" #line 100 void get_options(int argc, char *argv[]) { #line 105 { #line 105 int optchar; #line 105 #line 105 #line 105 while ((optchar = getopt_long(argc, argv, "d:tTxu:c:iD:C:h", #line 105 long_options, NULL)) != EOF) #line 105 { #line 105 switch (optchar) #line 105 { #line 105 default: #line 105 exit(1); #line 105 #line 105 #line 25 "rushopt.opt" case 'd': #line 25 { #line 25 debug_level = atoi(optarg); debug_option = 1; #line 28 break; #line 28 } #line 33 "rushopt.opt" case 't': case OPTION_LINT: #line 33 { #line 33 lint_option = 1; #line 35 break; #line 35 } #line 39 "rushopt.opt" case 'T': #line 39 { #line 39 scanner_test = 1; #line 41 break; #line 41 } #line 45 "rushopt.opt" case 'x': #line 45 { #line 45 parser_traces++; #line 47 break; #line 47 } #line 51 "rushopt.opt" case 'u': #line 51 { #line 51 lint_option = 1; if (getuid()) die(usage_error, NULL, _("the --user option is allowed " "for the superuser only")); test_user_name = optarg; #line 59 break; #line 59 } #line 63 "rushopt.opt" case 'c': #line 63 { #line 63 command = optarg; #line 65 break; #line 65 } #line 69 "rushopt.opt" case 'i': #line 69 { #line 69 lint_option = 1; interactive = 1; #line 72 break; #line 72 } #line 76 "rushopt.opt" case 'D': #line 76 { #line 76 dump_option = optarg; lint_option = 1; #line 79 break; #line 79 } #line 83 "rushopt.opt" case 'C': #line 83 { #line 83 if (cfck_keyword(optarg)) die(usage_error, NULL, _("unknown keyword: %s"), optarg); #line 87 break; #line 87 } #line 91 "rushopt.opt" case OPTION_SHOW_DEFAULT: #line 91 { #line 91 #ifdef RUSH_DEFAULT_CONFIG printf("%s\n", RUSH_DEFAULT_CONFIG); exit(0); #else error(1, 0, _("No default configuration")); #endif #line 98 break; #line 98 } #line 100 "rushopt.opt" case 'h': #line 100 { #line 100 #line 100 print_help (); #line 100 exit (0); #line 100 #line 100 break; #line 100 } #line 100 "rushopt.opt" case OPTION_USAGE: #line 100 { #line 100 #line 100 print_usage (); #line 100 exit (0); #line 100 #line 100 break; #line 100 } #line 100 "rushopt.opt" case OPTION_VERSION: #line 100 { #line 100 #line 100 /* Give version */ #line 100 print_version(program_version, stdout); #line 100 exit (0); #line 100 #line 100 break; #line 100 } #line 105 "rushopt.opt" } #line 105 } #line 105 } #line 105 } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/src/rushwho.c������������������������������������������������������������������������������0000644�0001750�0001750�00000004040�14643176121�014763� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* This file is part of GNU Rush. Copyright (C) 2008-2024 Sergey Poznyakoff GNU Rush is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GNU Rush is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. */ #include <rush.h> #include "error.h" char *base_name = RUSH_DB; struct rush_wtmp *wtmp = NULL; int display_header = 1; /* Display header line */ char *format; #include "rwopt.h" void xalloc_die() { error(1, 0, _("not enough memory")); abort(); } char *default_format = "(user 10 Login) " "(rule 8 Rule) " "(start-time 0 Start) " "(duration 10 Time) " "(pid 10 PID) " "(command 28 Command)"; int main(int argc, char **argv) { int status; rushdb_format_t form; rush_set_program_name(argv[0]); rush_i18n_init(); format = getenv("RUSHWHO_FORMAT"); if (!format) format = default_format; get_options(argc, argv); argc -= optind; argv += optind; if (argc) error(1, 0, _("extra arguments")); if (format[0] == '@') format = rush_read_format(format + 1); form = rushdb_compile_format(format); if (!form) error(1, 0, _("invalid format: %s"), rushdb_error_string); switch (rushdb_open(base_name, 0)) { case rushdb_result_ok: break; case rushdb_result_eof: exit(0); case rushdb_result_fail: error(1, errno, _("cannot open database file %s"), base_name); } if (display_header) rushdb_print_header(form); while (rush_utmp_read(RUSH_STATUS_MAP_BIT(RUSH_STATUS_INUSE), &status, &wtmp) == rushdb_result_ok) { rushdb_print(form, wtmp, 1); free(wtmp); } rushdb_close(); exit(0); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/src/cfck.c���������������������������������������������������������������������������������0000644�0001750�0001750�00000010437�14643176120�014200� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* This file is part of GNU Rush. Copyright (C) 2008-2024 Sergey Poznyakoff GNU Rush is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GNU Rush is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. */ #include <rush.h> #include "dirname.h" int config_file_checks = RUSH_CHK_DEFAULT; /* Functions for checking file mode of the configuration file and its directory. Each of these checks certain bits and returns 0 if they are OK and non-0 otherwise. */ static int check_nonroot_owner(struct stat *filest, struct stat *dirst) { return filest->st_uid != 0; } static int check_iwgrp(struct stat *filest, struct stat *dirst) { return filest->st_mode & S_IWGRP; } static int check_iwoth(struct stat *filest, struct stat *dirst) { return filest->st_mode & S_IWOTH; } static int check_linked_wrdir(struct stat *filest, struct stat *dirst) { return ((filest->st_mode & S_IFMT) == S_IFLNK) && (dirst->st_mode & (S_IWGRP | S_IWOTH)); } static int check_dir_iwgrp(struct stat *filest, struct stat *dirst) { return dirst->st_mode & S_IWGRP; } static int check_dir_iwoth(struct stat *filest, struct stat *dirst) { return dirst->st_mode & S_IWOTH; } /* The table of permission checkers below has this type: */ struct perm_checker { int flag; /* RUSH_CHK_ flag that enables this entry */ char *descr; /* Textual description to use if FUN returns !0 */ int (*fun) (struct stat *filest, struct stat *dirst); /* Checker function */ }; static struct perm_checker perm_check_tab[] = { { RUSH_CHK_OWNER, N_("file not owned by root"), check_nonroot_owner }, { RUSH_CHK_IWGRP, N_("group writable configuration file"), check_iwgrp }, { RUSH_CHK_IWOTH, N_("world writable configuration file"), check_iwoth }, { RUSH_CHK_LINK, N_("linked configuration file in writable dir"), check_linked_wrdir }, { RUSH_CHK_DIR_IWGRP, N_("configuration file in group writable directory"), check_dir_iwgrp }, { RUSH_CHK_DIR_IWOTH, N_("configuration file in world writable directory"), check_dir_iwoth }, { 0 } }; /* Check if the file FILENAME has right permissions and file mode. */ int check_config_permissions(const char *filename, struct stat *st) { int i; struct stat dirst; char *dirname; dirname = dir_name(filename); if (stat(dirname, &dirst)) { logmsg(LOG_NOTICE, _("%s: cannot stat directory: %s"), dirname, strerror(errno)); free(dirname); return 1; } free(dirname); for (i = 0; perm_check_tab[i].flag; i++) if ((config_file_checks & perm_check_tab[i].flag) && perm_check_tab[i].fun(st, &dirst)) { logmsg(LOG_NOTICE, "%s: %s", filename, gettext(perm_check_tab[i].descr)); return 1; } return 0; } static struct check_kw { int bits; char const *keyword; } chk_args[] = { { RUSH_CHK_ALL, "all" }, { RUSH_CHK_OWNER, "owner" }, { RUSH_CHK_IWGRP, "iwgrp" }, { RUSH_CHK_IWGRP, "groupwritablefile" }, { RUSH_CHK_IWOTH, "iwoth" }, { RUSH_CHK_IWOTH, "worldwritablefile" }, { RUSH_CHK_LINK, "link" }, { RUSH_CHK_DIR_IWGRP, "dir_iwgrp" }, { RUSH_CHK_DIR_IWGRP, "groupwritabledir" }, { RUSH_CHK_DIR_IWOTH, "dir_iwoth" }, { RUSH_CHK_DIR_IWOTH, "worldwritabledir" }, { 0, NULL } }; int cfck_keyword(const char *name) { int negate = 0; char *str; char *kw; int i; str = xstrdup(name); for (kw = str; *kw; kw++) *kw = tolower(*kw); kw = str; if (strcmp(kw, "none") == 0) { negate = 1; kw = "all"; } else if (strlen(kw) > 2 && strncmp(kw, "no", 2) == 0) { negate = 1; kw += 2; } for (i = 0; chk_args[i].keyword; i++) if (strcmp(chk_args[i].keyword, kw) == 0) break; if (chk_args[i].keyword == NULL) return -1; if (negate) config_file_checks &= ~chk_args[i].bits; else config_file_checks |= chk_args[i].bits; return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rush-2.4/src/cfgram.c�������������������������������������������������������������������������������0000644�0001750�0001750�00000251750�14643176420�014541� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A Bison parser, made by GNU Bison 3.0.4. */ /* Bison implementation for Yacc-like parsers in C Copyright (C) 1984, 1989-1990, 2000-2015 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 yy 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 "3.0.4" /* 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 17 "cfgram.y" /* yacc.c:339 */ #include <rush.h> #include <cf.h> static int errors; int re_flags = REG_EXTENDED; static struct rush_rule *current_rule; struct asgn { struct asgn *next; char *name; char *value; }; static void add_asgn_list(struct asgn *head, enum envar_type type); static struct transform_node *new_set_node(enum transform_node_type type, char *varname, struct cfloc const *loc); #line 83 "cfgram.c" /* yacc.c:339 */ # ifndef YY_NULLPTR # if defined __cplusplus && 201103L <= __cplusplus # define YY_NULLPTR nullptr # else # define YY_NULLPTR 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_CFGRAM_H_INCLUDED # define YY_YY_CFGRAM_H_INCLUDED /* Debug traces. */ #ifndef YYDEBUG # define YYDEBUG 1 #endif #if YYDEBUG extern int yydebug; #endif /* Token type. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE enum yytokentype { STRING = 258, IDENT = 259, NUMBER = 260, RUSH = 261, T_VERSION = 262, RULE = 263, GLOBAL = 264, EOL = 265, SET = 266, INSERT = 267, REMOPT = 268, MAP = 269, UNSET = 270, MATCH = 271, FALLTHROUGH = 272, INCLUDE = 273, LIMITS = 274, CLRENV = 275, SETENV = 276, UNSETENV = 277, KEEPENV = 278, EVALENV = 279, DELETE = 280, EXIT = 281, ATTRIB = 282, GLATTRIB = 283, BOGUS = 284, OR = 285, AND = 286, NOT = 287, EQ = 288, NE = 289, LT = 290, LE = 291, GT = 292, GE = 293, XF = 294, NM = 295, IN = 296, GROUP = 297, TEST = 298 }; #endif /* Tokens. */ #define STRING 258 #define IDENT 259 #define NUMBER 260 #define RUSH 261 #define T_VERSION 262 #define RULE 263 #define GLOBAL 264 #define EOL 265 #define SET 266 #define INSERT 267 #define REMOPT 268 #define MAP 269 #define UNSET 270 #define MATCH 271 #define FALLTHROUGH 272 #define INCLUDE 273 #define LIMITS 274 #define CLRENV 275 #define SETENV 276 #define UNSETENV 277 #define KEEPENV 278 #define EVALENV 279 #define DELETE 280 #define EXIT 281 #define ATTRIB 282 #define GLATTRIB 283 #define BOGUS 284 #define OR 285 #define AND 286 #define NOT 287 #define EQ 288 #define NE 289 #define LT 290 #define LE 291 #define GT 292 #define GE 293 #define XF 294 #define NM 295 #define IN 296 #define GROUP 297 #define TEST 298 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED union YYSTYPE { #line 37 "cfgram.y" /* yacc.c:355 */ char *str; struct cfnumber num; int intval; regex_t regex; struct rush_rule rule; struct test_node *node; struct strlist { char **argv; size_t argc; } strlist; struct { int start; int end; } range; struct asgn *asgn; struct { struct asgn *head; struct asgn *tail; } asgn_list; struct limits_rec *lrec; rule_attrib_setter_t attrib; struct global_attrib *global_attrib; struct argval *arg; struct { int argc; struct argval *head; struct argval *tail; } arglist; struct { unsigned major, minor; } version; int fstest; #line 242 "cfgram.c" /* yacc.c:355 */ }; typedef union YYSTYPE YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define YYSTYPE_IS_DECLARED 1 #endif /* Location type. */ #if ! defined YYLTYPE && ! defined YYLTYPE_IS_DECLARED typedef struct YYLTYPE YYLTYPE; struct YYLTYPE { int first_line; int first_column; int last_line; int last_column; }; # define YYLTYPE_IS_DECLARED 1 # define YYLTYPE_IS_TRIVIAL 1 #endif extern YYSTYPE yylval; extern YYLTYPE yylloc; int yyparse (void); #endif /* !YY_YY_CFGRAM_H_INCLUDED */ /* Copy the second part of user declarations. */ #line 273 "cfgram.c" /* yacc.c:358 */ #ifdef short # undef short #endif #ifdef YYTYPE_UINT8 typedef YYTYPE_UINT8 yytype_uint8; #else typedef unsigned char yytype_uint8; #endif #ifdef YYTYPE_INT8 typedef YYTYPE_INT8 yytype_int8; #else typedef signed char yytype_int8; #endif #ifdef YYTYPE_UINT16 typedef YYTYPE_UINT16 yytype_uint16; #else typedef unsigned short int yytype_uint16; #endif #ifdef YYTYPE_INT16 typedef YYTYPE_INT16 yytype_int16; #else typedef short int yytype_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 # 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 #ifndef YY_ATTRIBUTE # if (defined __GNUC__ \ && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__))) \ || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C # define YY_ATTRIBUTE(Spec) __attribute__(Spec) # else # define YY_ATTRIBUTE(Spec) /* empty */ # endif #endif #ifndef YY_ATTRIBUTE_PURE # define YY_ATTRIBUTE_PURE YY_ATTRIBUTE ((__pure__)) #endif #ifndef YY_ATTRIBUTE_UNUSED # define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__)) #endif #if !defined _Noreturn \ && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112) # if defined _MSC_VER && 1200 <= _MSC_VER # define _Noreturn __declspec (noreturn) # else # define _Noreturn YY_ATTRIBUTE ((__noreturn__)) # 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 #if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ /* Suppress an incorrect diagnostic about yylval being uninitialized. */ # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ _Pragma ("GCC diagnostic push") \ _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\ _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") # define YY_IGNORE_MAYBE_UNINITIALIZED_END \ _Pragma ("GCC diagnostic pop") #else # define YY_INITIAL_VALUE(Value) Value #endif #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 #if ! defined yyoverflow || 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 # 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 (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 void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ # endif # endif # ifndef YYFREE # define YYFREE free # if ! defined free && ! defined EXIT_SUCCESS void free (void *); /* INFRINGES ON USER NAME SPACE */ # endif # endif # endif #endif /* ! defined yyoverflow || YYERROR_VERBOSE */ #if (! defined yyoverflow \ && (! 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 yyalloc { yytype_int16 yyss_alloc; YYSTYPE yyvs_alloc; YYLTYPE yyls_alloc; }; /* The size of the maximum gap between one aligned stack and the next. */ # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) /* The size of an array large to enough to hold all stacks, each with N elements. */ # define YYSTACK_BYTES(N) \ ((N) * (sizeof (yytype_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 yynewbytes; \ YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ Stack = &yyptr->Stack_alloc; \ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ yyptr += yynewbytes / sizeof (*yyptr); \ } \ while (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 yyi; \ for (yyi = 0; yyi < (Count); yyi++) \ (Dst)[yyi] = (Src)[yyi]; \ } \ while (0) # endif # endif #endif /* !YYCOPY_NEEDED */ /* YYFINAL -- State number of the termination state. */ #define YYFINAL 5 /* YYLAST -- Last index in YYTABLE. */ #define YYLAST 206 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 50 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 45 /* YYNRULES -- Number of rules. */ #define YYNRULES 109 /* YYNSTATES -- Number of states. */ #define YYNSTATES 196 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned by yylex, with out-of-bounds checking. */ #define YYUNDEFTOK 2 #define YYMAXUTOK 298 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) /* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM as returned by yylex, without out-of-bounds checking. */ static const yytype_uint8 yytranslate[] = { 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, 45, 46, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 47, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 48, 2, 49, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 44, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 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, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43 }; #if YYDEBUG /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { 0, 132, 132, 135, 140, 147, 158, 159, 162, 163, 166, 167, 170, 171, 174, 175, 178, 181, 182, 185, 195, 200, 208, 216, 227, 237, 240, 243, 244, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 270, 282, 283, 289, 297, 298, 303, 309, 316, 326, 333, 340, 347, 354, 361, 368, 375, 382, 389, 396, 401, 409, 410, 413, 414, 415, 421, 436, 447, 458, 470, 482, 494, 503, 514, 525, 533, 550, 568, 587, 590, 593, 600, 606, 610, 615, 628, 631, 641, 658, 663, 678, 689, 695, 715, 740, 778, 781, 787, 791, 800, 808, 812, 818, 822, 829, 836, 848, 855, 855 }; #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 yytname[] = { "$end", "error", "$undefined", "\"string\"", "\"identifier\"", "\"number\"", "\"rush\"", "T_VERSION", "\"rule\"", "\"global\"", "\"end of line\"", "\"set\"", "\"insert\"", "\"remopt\"", "\"map\"", "\"unset\"", "\"match\"", "\"fallthrough\"", "\"include\"", "\"limits\"", "\"clrenv\"", "\"setenv\"", "\"unsetenv\"", "\"keepenv\"", "\"evalenv\"", "\"delete\"", "\"exit\"", "\"rule attribute\"", "\"global attribute\"", "\"erroneous token\"", "\"||\"", "\"&&\"", "\"!\"", "\"==\"", "\"!=\"", "\"<\"", "\"<=\"", "\">\"", "\">=\"", "\"=~\"", "\"!~\"", "\"in\"", "\"group\"", "\"test\"", "'~'", "'('", "')'", "'='", "'['", "']'", "$accept", "rcfile", "select", "preface", "skipeol", "eol", "content", "rulelist", "rule", "globhdr", "globbody", "glob_stmt", "arglist", "arg", "rulehdr", "ruleid", "rulebody", "stmt", "match_stmt", "compound_cond", "simple_cond", "expr", "literal", "string", "regex", "set_stmt", "map_stmt", "defval", "index", "value", "flowctl_stmt", "fdescr", "delete_stmt", "range", "include_stmt", "limits_stmt", "resource_limits", "remopt_stmt", "optstring", "environ_stmt", "asgn_list", "asgn", "attrib_stmt", "strlist", "$@1", YY_NULLPTR }; #endif # ifdef YYPRINT /* YYTOKNUM[NUM] -- (External) token number corresponding to the (internal) symbol number NUM (which must be that of a token). */ static const yytype_uint16 yytoknum[] = { 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 126, 40, 41, 61, 91, 93 }; # endif #define YYPACT_NINF -85 #define yypact_value_is_default(Yystate) \ (!!((Yystate) == (-85))) #define YYTABLE_NINF -15 #define yytable_value_is_error(Yytable_value) \ 0 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ static const yytype_int16 yypact[] = { 9, -85, 26, 3, 14, -85, 36, -85, -85, 9, -85, 38, 27, -85, 86, 9, -85, 27, -85, 30, 168, -85, -85, -85, 9, -85, 14, -85, 95, 30, -85, -85, 1, 20, 86, 7, 8, 92, -85, 86, 69, -85, 75, 59, 59, 86, 87, 97, 86, 131, -85, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 14, -85, -85, -85, 106, -85, -85, -85, -26, 98, -17, 68, 86, 86, 86, -85, -85, 92, 24, 86, 92, 40, -85, -85, 126, 116, -85, 115, 82, 89, -85, 59, -85, 59, -85, 123, -85, -85, 81, -85, -85, 14, 14, 14, 14, 14, -85, 14, 14, 14, 14, 14, -85, 86, 86, 84, 86, 86, 86, -85, -85, -85, 86, 86, -85, -85, -85, -85, -85, -13, 92, 92, 109, 118, 133, 136, 160, 163, 86, 127, 86, -85, -85, 86, 86, -85, -85, -85, -85, -85, 129, -85, -85, -85, 130, -85, 132, -85, 86, 86, 95, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, 86, 86, 86, 166, 170, 11, -85, -85, -85, 191, 192, -85, 86, 86, -85, -85, -85 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. Performed when YYTABLE does not specify something else to do. Zero means the default is an error. */ static const yytype_uint8 yydefact[] = { 6, 8, 0, 0, 7, 1, 0, 4, 2, 6, 9, 0, 10, 5, 25, 0, 3, 11, 12, 0, 0, 64, 63, 65, 0, 26, 16, 13, 0, 15, 17, 39, 0, 0, 0, 0, 0, 0, 83, 0, 0, 98, 0, 0, 0, 0, 0, 86, 0, 0, 27, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 24, 62, 61, 23, 0, 20, 22, 18, 0, 0, 0, 0, 96, 0, 0, 75, 76, 0, 0, 0, 0, 40, 41, 44, 0, 0, 93, 92, 0, 61, 105, 101, 103, 102, 100, 89, 88, 87, 0, 107, 28, 29, 30, 31, 35, 32, 38, 33, 37, 34, 36, 19, 21, 0, 0, 0, 0, 0, 0, 97, 95, 82, 0, 0, 45, 108, 58, 59, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 94, 0, 0, 104, 90, 84, 85, 73, 82, 72, 81, 69, 82, 67, 82, 68, 0, 0, 0, 46, 43, 42, 51, 49, 52, 50, 53, 54, 55, 56, 66, 48, 57, 47, 99, 106, 0, 0, 0, 0, 0, 0, 74, 70, 71, 0, 0, 109, 79, 79, 80, 78, 77 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { -85, -85, -85, -85, -3, 23, -85, -85, 181, -85, -85, 171, 41, -64, -85, -85, -85, 150, -85, 120, -71, -85, -40, -14, 62, -85, -85, 12, 4, -73, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, 161, -84, -85, 66, -85 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { -1, 2, 8, 9, 3, 4, 16, 17, 18, 19, 29, 30, 65, 66, 20, 24, 49, 50, 51, 82, 83, 84, 67, 122, 174, 52, 53, 194, 71, 123, 54, 99, 55, 97, 56, 57, 88, 58, 121, 59, 92, 93, 60, 128, 161 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule whose number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_int16 yytable[] = { 25, 113, 124, 91, 91, 69, 12, 125, 146, 6, 146, 74, 76, 114, 62, 63, 64, 131, 132, 1, 73, 115, 117, 85, 10, 86, 5, 21, 22, 23, 118, 95, 7, 162, 100, 14, 15, 72, 26, 75, 77, 150, 152, 11, 154, 156, 158, 61, 13, 70, 159, 160, 91, 107, 91, 70, 70, 190, 28, 120, 163, 164, 62, 90, 85, 127, 129, 85, 70, 126, 131, 132, 178, 87, 102, 103, 104, 105, 106, 89, 108, 109, 110, 111, 148, 149, 182, 183, 112, 21, 22, 23, 96, 166, 168, 21, 22, 23, 62, 63, 64, 151, 98, 116, 155, 157, 185, 186, 187, 62, 63, 64, 62, 63, 165, 119, 1, 85, 85, 143, 113, 62, 63, 167, 78, 173, 142, 173, 147, 144, 177, -14, 31, 153, 79, 80, 145, 81, 169, -14, -14, 170, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 133, 134, 135, 136, 137, 138, 171, 139, 140, 172, 31, 141, 188, 126, 179, 180, 189, 181, 193, 193, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 191, 192, 27, 101, 68, 130, 184, 176, 195, 94, 175 }; static const yytype_uint8 yycheck[] = { 14, 65, 75, 43, 44, 4, 9, 78, 92, 6, 94, 4, 4, 39, 3, 4, 5, 30, 31, 10, 34, 47, 39, 37, 10, 39, 0, 3, 4, 5, 47, 45, 29, 46, 48, 8, 9, 33, 15, 35, 36, 114, 115, 7, 117, 118, 119, 24, 10, 48, 123, 124, 92, 56, 94, 48, 48, 46, 28, 73, 131, 132, 3, 4, 78, 79, 80, 81, 48, 45, 30, 31, 145, 4, 51, 52, 53, 54, 55, 4, 57, 58, 59, 60, 3, 4, 159, 160, 65, 3, 4, 5, 5, 133, 134, 3, 4, 5, 3, 4, 5, 115, 5, 5, 118, 119, 179, 180, 181, 3, 4, 5, 3, 4, 5, 47, 10, 131, 132, 4, 184, 3, 4, 5, 32, 139, 10, 141, 5, 47, 144, 0, 1, 49, 42, 43, 47, 45, 5, 8, 9, 5, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 33, 34, 35, 36, 37, 38, 5, 40, 41, 5, 1, 44, 5, 45, 44, 44, 5, 44, 191, 192, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 5, 5, 17, 49, 29, 81, 161, 141, 192, 44, 140 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint8 yystos[] = { 0, 10, 51, 54, 55, 0, 6, 29, 52, 53, 10, 7, 54, 10, 8, 9, 56, 57, 58, 59, 64, 3, 4, 5, 65, 73, 55, 58, 28, 60, 61, 1, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 66, 67, 68, 75, 76, 80, 82, 84, 85, 87, 89, 92, 55, 3, 4, 5, 62, 63, 72, 61, 4, 48, 78, 78, 73, 4, 78, 4, 78, 32, 42, 43, 45, 69, 70, 71, 73, 73, 4, 86, 4, 4, 72, 90, 91, 90, 73, 5, 83, 5, 81, 73, 67, 55, 55, 55, 55, 55, 54, 55, 55, 55, 55, 55, 63, 39, 47, 5, 39, 47, 47, 73, 88, 73, 79, 79, 70, 45, 73, 93, 73, 69, 30, 31, 33, 34, 35, 36, 37, 38, 40, 41, 44, 10, 4, 47, 47, 91, 5, 3, 4, 79, 73, 79, 49, 79, 73, 79, 73, 79, 79, 79, 94, 46, 70, 70, 5, 72, 5, 72, 5, 5, 5, 5, 73, 74, 93, 74, 73, 79, 44, 44, 44, 79, 79, 62, 79, 79, 79, 5, 5, 46, 5, 5, 73, 77, 77 }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint8 yyr1[] = { 0, 50, 51, 52, 52, 53, 54, 54, 55, 55, 56, 56, 57, 57, 58, 58, 59, 60, 60, 61, 62, 62, 63, 63, 64, 65, 65, 66, 66, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 68, 69, 69, 69, 70, 70, 70, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 72, 72, 73, 73, 73, 74, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 76, 76, 77, 77, 78, 79, 80, 80, 80, 81, 81, 82, 83, 83, 84, 85, 86, 86, 87, 88, 88, 89, 89, 89, 89, 89, 90, 90, 91, 91, 92, 94, 93 }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ static const yytype_uint8 yyr2[] = { 0, 2, 2, 3, 1, 3, 0, 1, 1, 2, 0, 1, 1, 2, 2, 2, 2, 1, 2, 3, 1, 2, 1, 1, 3, 0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 1, 3, 3, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 4, 4, 4, 6, 6, 4, 4, 6, 2, 2, 8, 8, 0, 1, 3, 1, 1, 3, 3, 0, 1, 2, 1, 2, 3, 2, 1, 2, 3, 0, 1, 1, 4, 2, 2, 2, 1, 2, 1, 3, 2, 0, 4 }; #define yyerrok (yyerrstatus = 0) #define yyclearin (yychar = YYEMPTY) #define YYEMPTY (-2) #define YYEOF 0 #define YYACCEPT goto yyacceptlab #define YYABORT goto yyabortlab #define YYERROR goto yyerrorlab #define YYRECOVERING() (!!yyerrstatus) #define YYBACKUP(Token, Value) \ do \ if (yychar == YYEMPTY) \ { \ yychar = (Token); \ yylval = (Value); \ YYPOPSTACK (yylen); \ yystate = *yyssp; \ goto yybackup; \ } \ else \ { \ yyerror (YY_("syntax error: cannot back up")); \ YYERROR; \ } \ while (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 (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 (0) #endif #define YYRHSLOC(Rhs, K) ((Rhs)[K]) /* 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 (yydebug) \ YYFPRINTF Args; \ } while (0) /* 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. */ YY_ATTRIBUTE_UNUSED static unsigned yy_location_print_ (FILE *yyo, YYLTYPE const * const yylocp) { unsigned res = 0; int end_col = 0 != yylocp->last_column ? yylocp->last_column - 1 : 0; if (0 <= yylocp->first_line) { res += YYFPRINTF (yyo, "%d", yylocp->first_line); if (0 <= yylocp->first_column) res += YYFPRINTF (yyo, ".%d", yylocp->first_column); } if (0 <= yylocp->last_line) { if (yylocp->first_line < yylocp->last_line) { res += YYFPRINTF (yyo, "-%d", yylocp->last_line); if (0 <= end_col) res += YYFPRINTF (yyo, ".%d", end_col); } else if (0 <= end_col && yylocp->first_column < end_col) res += YYFPRINTF (yyo, "-%d", end_col); } return res; } # define YY_LOCATION_PRINT(File, Loc) \ yy_location_print_ (File, &(Loc)) # else # define YY_LOCATION_PRINT(File, Loc) ((void) 0) # endif #endif # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ do { \ if (yydebug) \ { \ YYFPRINTF (stderr, "%s ", Title); \ yy_symbol_print (stderr, \ Type, Value, Location); \ YYFPRINTF (stderr, "\n"); \ } \ } while (0) /*----------------------------------------. | Print this symbol's value on YYOUTPUT. | `----------------------------------------*/ static void yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, YYLTYPE const * const yylocationp) { FILE *yyo = yyoutput; YYUSE (yyo); YYUSE (yylocationp); if (!yyvaluep) return; # ifdef YYPRINT if (yytype < YYNTOKENS) YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); # endif YYUSE (yytype); } /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ static void yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, YYLTYPE const * const yylocationp) { YYFPRINTF (yyoutput, "%s %s (", yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]); YY_LOCATION_PRINT (yyoutput, *yylocationp); YYFPRINTF (yyoutput, ": "); yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp); YYFPRINTF (yyoutput, ")"); } /*------------------------------------------------------------------. | yy_stack_print -- Print the state stack from its BOTTOM up to its | | TOP (included). | `------------------------------------------------------------------*/ static void yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop) { YYFPRINTF (stderr, "Stack now"); for (; yybottom <= yytop; yybottom++) { int yybot = *yybottom; YYFPRINTF (stderr, " %d", yybot); } YYFPRINTF (stderr, "\n"); } # define YY_STACK_PRINT(Bottom, Top) \ do { \ if (yydebug) \ yy_stack_print ((Bottom), (Top)); \ } while (0) /*------------------------------------------------. | Report that the YYRULE is going to be reduced. | `------------------------------------------------*/ static void yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, YYLTYPE *yylsp, int yyrule) { unsigned long int yylno = yyrline[yyrule]; int yynrhs = yyr2[yyrule]; int yyi; YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", yyrule - 1, yylno); /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { YYFPRINTF (stderr, " $%d = ", yyi + 1); yy_symbol_print (stderr, yystos[yyssp[yyi + 1 - yynrhs]], &(yyvsp[(yyi + 1) - (yynrhs)]) , &(yylsp[(yyi + 1) - (yynrhs)]) ); YYFPRINTF (stderr, "\n"); } } # define YY_REDUCE_PRINT(Rule) \ do { \ if (yydebug) \ yy_reduce_print (yyssp, yyvsp, yylsp, Rule); \ } while (0) /* Nonzero means print parse trace. It is left uninitialized so that multiple parsers can coexist. */ int yydebug; #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 yystrlen # if defined __GLIBC__ && defined _STRING_H # define yystrlen strlen # else /* Return the length of YYSTR. */ static YYSIZE_T yystrlen (const char *yystr) { YYSIZE_T yylen; for (yylen = 0; yystr[yylen]; yylen++) continue; return yylen; } # endif # endif # ifndef yystpcpy # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE # define yystpcpy stpcpy # else /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in YYDEST. */ static char * yystpcpy (char *yydest, const char *yysrc) { char *yyd = yydest; const char *yys = yysrc; while ((*yyd++ = *yys++) != '\0') continue; return yyd - 1; } # endif # endif # ifndef yytnamerr /* Copy to YYRES the contents of YYSTR after stripping away unnecessary quotes and backslashes, so that it's suitable for yyerror. 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 yytname. If YYRES is null, do not copy; instead, return the length of what the result would have been. */ static YYSIZE_T yytnamerr (char *yyres, const char *yystr) { if (*yystr == '"') { YYSIZE_T yyn = 0; char const *yyp = yystr; for (;;) switch (*++yyp) { case '\'': case ',': goto do_not_strip_quotes; case '\\': if (*++yyp != '\\') goto do_not_strip_quotes; /* Fall through. */ default: if (yyres) yyres[yyn] = *yyp; yyn++; break; case '"': if (yyres) yyres[yyn] = '\0'; return yyn; } do_not_strip_quotes: ; } if (! yyres) return yystrlen (yystr); return yystpcpy (yyres, yystr) - yyres; } # 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 yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, yytype_int16 *yyssp, int yytoken) { YYSIZE_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]); YYSIZE_T yysize = yysize0; enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; /* Internationalized format string. */ const char *yyformat = YY_NULLPTR; /* Arguments of yyformat. */ char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; /* Number of reported tokens (one for the "unexpected", one per "expected"). */ int yycount = 0; /* There are many possibilities here to consider: - 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 yychar) 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 yychar. - 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 (yytoken != YYEMPTY) { int yyn = yypact[*yyssp]; yyarg[yycount++] = yytname[yytoken]; if (!yypact_value_is_default (yyn)) { /* 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 yyxbegin = yyn < 0 ? -yyn : 0; /* Stay within bounds of both yycheck and yytname. */ int yychecklim = YYLAST - yyn + 1; int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; int yyx; for (yyx = yyxbegin; yyx < yyxend; ++yyx) if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR && !yytable_value_is_error (yytable[yyx + yyn])) { if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) { yycount = 1; yysize = yysize0; break; } yyarg[yycount++] = yytname[yyx]; { YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]); if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) return 2; yysize = yysize1; } } } } switch (yycount) { # define YYCASE_(N, S) \ case N: \ yyformat = 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 yysize1 = yysize + yystrlen (yyformat); if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) return 2; yysize = yysize1; } if (*yymsg_alloc < yysize) { *yymsg_alloc = 2 * yysize; if (! (yysize <= *yymsg_alloc && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM)) *yymsg_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 *yyp = *yymsg; int yyi = 0; while ((*yyp = *yyformat) != '\0') if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount) { yyp += yytnamerr (yyp, yyarg[yyi++]); yyformat += 2; } else { yyp++; yyformat++; } } return 0; } #endif /* YYERROR_VERBOSE */ /*-----------------------------------------------. | Release the memory associated to this symbol. | `-----------------------------------------------*/ static void yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocationp) { YYUSE (yyvaluep); YYUSE (yylocationp); if (!yymsg) yymsg = "Deleting"; YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN YYUSE (yytype); YY_IGNORE_MAYBE_UNINITIALIZED_END } /* The lookahead symbol. */ int yychar; /* The semantic value of the lookahead symbol. */ YYSTYPE yylval; /* Location data for the lookahead symbol. */ YYLTYPE yylloc # if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL = { 1, 1, 1, 1 } # endif ; /* Number of syntax errors so far. */ int yynerrs; /*----------. | yyparse. | `----------*/ int yyparse (void) { int yystate; /* Number of tokens to shift before error messages enabled. */ int yyerrstatus; /* The stacks and their tools: 'yyss': related to states. 'yyvs': related to semantic values. 'yyls': related to locations. Refer to the stacks through separate pointers, to allow yyoverflow to reallocate them elsewhere. */ /* The state stack. */ yytype_int16 yyssa[YYINITDEPTH]; yytype_int16 *yyss; yytype_int16 *yyssp; /* The semantic value stack. */ YYSTYPE yyvsa[YYINITDEPTH]; YYSTYPE *yyvs; YYSTYPE *yyvsp; /* The location stack. */ YYLTYPE yylsa[YYINITDEPTH]; YYLTYPE *yyls; YYLTYPE *yylsp; /* The locations where the error started and ended. */ YYLTYPE yyerror_range[3]; YYSIZE_T yystacksize; int yyn; int yyresult; /* Lookahead token as an internal (translated) token number. */ int yytoken = 0; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE yyval; YYLTYPE yyloc; #if YYERROR_VERBOSE /* Buffer for error messages, and its allocated size. */ char yymsgbuf[128]; char *yymsg = yymsgbuf; YYSIZE_T yymsg_alloc = sizeof yymsgbuf; #endif #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N), yylsp -= (N)) /* The number of symbols on the RHS of the reduced rule. Keep to zero when no symbol should be popped. */ int yylen = 0; yyssp = yyss = yyssa; yyvsp = yyvs = yyvsa; yylsp = yyls = yylsa; yystacksize = YYINITDEPTH; YYDPRINTF ((stderr, "Starting parse\n")); yystate = 0; yyerrstatus = 0; yynerrs = 0; yychar = YYEMPTY; /* Cause a token to be read. */ yylsp[0] = yylloc; goto yysetstate; /*------------------------------------------------------------. | yynewstate -- Push a new state, which is found in yystate. | `------------------------------------------------------------*/ yynewstate: /* In all cases, when you get here, the value and location stacks have just been pushed. So pushing a state here evens the stacks. */ yyssp++; yysetstate: *yyssp = yystate; if (yyss + yystacksize - 1 <= yyssp) { /* Get the current used size of the three stacks, in elements. */ YYSIZE_T yysize = yyssp - yyss + 1; #ifdef yyoverflow { /* 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 *yyvs1 = yyvs; yytype_int16 *yyss1 = yyss; YYLTYPE *yyls1 = yyls; /* 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 yyoverflow is a macro. */ yyoverflow (YY_("memory exhausted"), &yyss1, yysize * sizeof (*yyssp), &yyvs1, yysize * sizeof (*yyvsp), &yyls1, yysize * sizeof (*yylsp), &yystacksize); yyls = yyls1; yyss = yyss1; yyvs = yyvs1; } #else /* no yyoverflow */ # ifndef YYSTACK_RELOCATE goto yyexhaustedlab; # else /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) goto yyexhaustedlab; yystacksize *= 2; if (YYMAXDEPTH < yystacksize) yystacksize = YYMAXDEPTH; { yytype_int16 *yyss1 = yyss; union yyalloc *yyptr = (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); if (! yyptr) goto yyexhaustedlab; YYSTACK_RELOCATE (yyss_alloc, yyss); YYSTACK_RELOCATE (yyvs_alloc, yyvs); YYSTACK_RELOCATE (yyls_alloc, yyls); # undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); } # endif #endif /* no yyoverflow */ yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; yylsp = yyls + yysize - 1; YYDPRINTF ((stderr, "Stack size increased to %lu\n", (unsigned long int) yystacksize)); if (yyss + yystacksize - 1 <= yyssp) YYABORT; } YYDPRINTF ((stderr, "Entering state %d\n", yystate)); if (yystate == YYFINAL) YYACCEPT; goto yybackup; /*-----------. | yybackup. | `-----------*/ yybackup: /* 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. */ yyn = yypact[yystate]; if (yypact_value_is_default (yyn)) goto yydefault; /* Not known => get a lookahead token if don't already have one. */ /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ if (yychar == YYEMPTY) { YYDPRINTF ((stderr, "Reading a token: ")); yychar = yylex (); } if (yychar <= YYEOF) { yychar = yytoken = YYEOF; YYDPRINTF ((stderr, "Now at end of input.\n")); } else { yytoken = YYTRANSLATE (yychar); YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); } /* If the proper action on seeing token YYTOKEN is to reduce or to detect an error, take that action. */ yyn += yytoken; if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) goto yydefault; yyn = yytable[yyn]; if (yyn <= 0) { if (yytable_value_is_error (yyn)) goto yyerrlab; yyn = -yyn; goto yyreduce; } /* Count tokens shifted since error; after three, turn off error status. */ if (yyerrstatus) yyerrstatus--; /* Shift the lookahead token. */ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); /* Discard the shifted token. */ yychar = YYEMPTY; yystate = yyn; YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; YY_IGNORE_MAYBE_UNINITIALIZED_END *++yylsp = yylloc; goto yynewstate; /*-----------------------------------------------------------. | yydefault -- do the default action for the current state. | `-----------------------------------------------------------*/ yydefault: yyn = yydefact[yystate]; if (yyn == 0) goto yyerrlab; goto yyreduce; /*-----------------------------. | yyreduce -- Do a reduction. | `-----------------------------*/ yyreduce: /* yyn is the number of a rule to reduce with. */ yylen = yyr2[yyn]; /* 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. */ yyval = yyvsp[1-yylen]; /* Default location. */ YYLLOC_DEFAULT (yyloc, (yylsp - yylen), yylen); YY_REDUCE_PRINT (yyn); switch (yyn) { case 3: #line 136 "cfgram.y" /* yacc.c:1646 */ { if (errors) YYERROR; } #line 1594 "cfgram.c" /* yacc.c:1646 */ break; case 4: #line 141 "cfgram.y" /* yacc.c:1646 */ { if (parse_old_rc()) YYERROR; } #line 1603 "cfgram.c" /* yacc.c:1646 */ break; case 5: #line 148 "cfgram.y" /* yacc.c:1646 */ { if ((yyvsp[-1].version).major == 2 && (yyvsp[-1].version).minor == 0) { cflex_normal(); } else { cferror(&(yylsp[-1]), _("unsupported configuration file version")); YYERROR; } } #line 1616 "cfgram.c" /* yacc.c:1646 */ break; case 19: #line 186 "cfgram.y" /* yacc.c:1646 */ { struct cfloc loc; loc.beg = (yylsp[-2]).beg; loc.end = (yylsp[-1]).end; global_attrib_set((yyvsp[-2].global_attrib), (yyvsp[-1].arglist).argc, (yyvsp[-1].arglist).head, &loc); arglist_free((yyvsp[-1].arglist).head); } #line 1628 "cfgram.c" /* yacc.c:1646 */ break; case 20: #line 196 "cfgram.y" /* yacc.c:1646 */ { (yyval.arglist).head = (yyval.arglist).tail = (yyvsp[0].arg); (yyval.arglist).argc = 1; } #line 1637 "cfgram.c" /* yacc.c:1646 */ break; case 21: #line 201 "cfgram.y" /* yacc.c:1646 */ { LIST_APPEND((yyvsp[0].arg), (yyvsp[-1].arglist).head, (yyvsp[-1].arglist).tail); (yyvsp[-1].arglist).argc++; (yyval.arglist) = (yyvsp[-1].arglist); } #line 1647 "cfgram.c" /* yacc.c:1646 */ break; case 22: #line 209 "cfgram.y" /* yacc.c:1646 */ { (yyval.arg) = xcalloc(1, sizeof(*(yyval.arg))); (yyval.arg)->next = NULL; (yyval.arg)->loc = (yylsp[0]); (yyval.arg)->isnum = 0; (yyval.arg)->strval = (yyvsp[0].str); } #line 1659 "cfgram.c" /* yacc.c:1646 */ break; case 23: #line 217 "cfgram.y" /* yacc.c:1646 */ { (yyval.arg) = xcalloc(1, sizeof(*(yyval.arg))); (yyval.arg)->next = NULL; (yyval.arg)->loc = (yylsp[0]); (yyval.arg)->isnum = 1; (yyval.arg)->strval = (yyvsp[0].num).strval; (yyval.arg)->intval = (yyvsp[0].num).intval; } #line 1672 "cfgram.c" /* yacc.c:1646 */ break; case 24: #line 228 "cfgram.y" /* yacc.c:1646 */ { current_rule = new_rush_rule((yyvsp[-1].str)); current_rule->file = (yylsp[-2]).beg.filename; current_rule->line = (yylsp[-2]).beg.line; free((yyvsp[-1].str)); } #line 1683 "cfgram.c" /* yacc.c:1646 */ break; case 25: #line 237 "cfgram.y" /* yacc.c:1646 */ { (yyval.str) = NULL; } #line 1691 "cfgram.c" /* yacc.c:1646 */ break; case 39: #line 258 "cfgram.y" /* yacc.c:1646 */ { skiptoeol(); restorenormal(); yyerrok; yyclearin; errors = 1; } #line 1703 "cfgram.c" /* yacc.c:1646 */ break; case 40: #line 271 "cfgram.y" /* yacc.c:1646 */ { if (current_rule->test_node) { struct test_node *np = new_test_node(test_and); np->v.arg[0] = current_rule->test_node; np->v.arg[1] = (yyvsp[0].node); current_rule->test_node = np; } else current_rule->test_node = (yyvsp[0].node); } #line 1717 "cfgram.c" /* yacc.c:1646 */ break; case 42: #line 284 "cfgram.y" /* yacc.c:1646 */ { (yyval.node) = new_test_node(test_and); (yyval.node)->v.arg[0] = (yyvsp[-2].node); (yyval.node)->v.arg[1] = (yyvsp[0].node); } #line 1727 "cfgram.c" /* yacc.c:1646 */ break; case 43: #line 290 "cfgram.y" /* yacc.c:1646 */ { (yyval.node) = new_test_node(test_or); (yyval.node)->v.arg[0] = (yyvsp[-2].node); (yyval.node)->v.arg[1] = (yyvsp[0].node); } #line 1737 "cfgram.c" /* yacc.c:1646 */ break; case 45: #line 299 "cfgram.y" /* yacc.c:1646 */ { (yyval.node) = new_test_node(test_not); (yyval.node)->v.arg[0] = (yyvsp[0].node); } #line 1746 "cfgram.c" /* yacc.c:1646 */ break; case 46: #line 304 "cfgram.y" /* yacc.c:1646 */ { (yyval.node) = (yyvsp[-1].node); } #line 1754 "cfgram.c" /* yacc.c:1646 */ break; case 47: #line 310 "cfgram.y" /* yacc.c:1646 */ { (yyval.node) = new_test_node(test_cmps); (yyval.node)->v.cmp.op = cmp_match; (yyval.node)->v.cmp.larg = (yyvsp[-2].str); (yyval.node)->v.cmp.rarg.rx = (yyvsp[0].regex); } #line 1765 "cfgram.c" /* yacc.c:1646 */ break; case 48: #line 317 "cfgram.y" /* yacc.c:1646 */ { struct test_node *np = new_test_node(test_cmps); np->v.cmp.op = cmp_match; np->v.cmp.larg = (yyvsp[-2].str); np->v.cmp.rarg.rx = (yyvsp[0].regex); (yyval.node) = new_test_node(test_not); (yyval.node)->v.arg[0] = np; } #line 1779 "cfgram.c" /* yacc.c:1646 */ break; case 49: #line 327 "cfgram.y" /* yacc.c:1646 */ { (yyval.node) = new_test_node(test_cmps); (yyval.node)->v.cmp.op = cmp_eq; (yyval.node)->v.cmp.larg = (yyvsp[-2].str); (yyval.node)->v.cmp.rarg.str = (yyvsp[0].str); } #line 1790 "cfgram.c" /* yacc.c:1646 */ break; case 50: #line 334 "cfgram.y" /* yacc.c:1646 */ { (yyval.node) = new_test_node(test_cmps); (yyval.node)->v.cmp.op = cmp_ne; (yyval.node)->v.cmp.larg = (yyvsp[-2].str); (yyval.node)->v.cmp.rarg.str = (yyvsp[0].str); } #line 1801 "cfgram.c" /* yacc.c:1646 */ break; case 51: #line 341 "cfgram.y" /* yacc.c:1646 */ { (yyval.node) = new_test_node(test_cmpn); (yyval.node)->v.cmp.op = cmp_eq; (yyval.node)->v.cmp.larg = (yyvsp[-2].str); (yyval.node)->v.cmp.rarg.num = (yyvsp[0].num).intval; } #line 1812 "cfgram.c" /* yacc.c:1646 */ break; case 52: #line 348 "cfgram.y" /* yacc.c:1646 */ { (yyval.node) = new_test_node(test_cmpn); (yyval.node)->v.cmp.op = cmp_ne; (yyval.node)->v.cmp.larg = (yyvsp[-2].str); (yyval.node)->v.cmp.rarg.num = (yyvsp[0].num).intval; } #line 1823 "cfgram.c" /* yacc.c:1646 */ break; case 53: #line 355 "cfgram.y" /* yacc.c:1646 */ { (yyval.node) = new_test_node(test_cmpn); (yyval.node)->v.cmp.op = cmp_lt; (yyval.node)->v.cmp.larg = (yyvsp[-2].str); (yyval.node)->v.cmp.rarg.num = (yyvsp[0].num).intval; } #line 1834 "cfgram.c" /* yacc.c:1646 */ break; case 54: #line 362 "cfgram.y" /* yacc.c:1646 */ { (yyval.node) = new_test_node(test_cmpn); (yyval.node)->v.cmp.op = cmp_le; (yyval.node)->v.cmp.larg = (yyvsp[-2].str); (yyval.node)->v.cmp.rarg.num = (yyvsp[0].num).intval; } #line 1845 "cfgram.c" /* yacc.c:1646 */ break; case 55: #line 369 "cfgram.y" /* yacc.c:1646 */ { (yyval.node) = new_test_node(test_cmpn); (yyval.node)->v.cmp.op = cmp_gt; (yyval.node)->v.cmp.larg = (yyvsp[-2].str); (yyval.node)->v.cmp.rarg.num = (yyvsp[0].num).intval; } #line 1856 "cfgram.c" /* yacc.c:1646 */ break; case 56: #line 376 "cfgram.y" /* yacc.c:1646 */ { (yyval.node) = new_test_node(test_cmpn); (yyval.node)->v.cmp.op = cmp_ge; (yyval.node)->v.cmp.larg = (yyvsp[-2].str); (yyval.node)->v.cmp.rarg.num = (yyvsp[0].num).intval; } #line 1867 "cfgram.c" /* yacc.c:1646 */ break; case 57: #line 383 "cfgram.y" /* yacc.c:1646 */ { (yyval.node) = new_test_node(test_in); (yyval.node)->v.cmp.op = cmp_in; (yyval.node)->v.cmp.larg = (yyvsp[-2].str); (yyval.node)->v.cmp.rarg.strv = (yyvsp[0].strlist).argv; } #line 1878 "cfgram.c" /* yacc.c:1646 */ break; case 58: #line 390 "cfgram.y" /* yacc.c:1646 */ { (yyval.node) = new_test_node(test_group); (yyval.node)->v.groups = xcalloc(2, sizeof((yyval.node)->v.groups[0])); (yyval.node)->v.groups[0] = (yyvsp[0].str); (yyval.node)->v.groups[1] = NULL; } #line 1889 "cfgram.c" /* yacc.c:1646 */ break; case 59: #line 397 "cfgram.y" /* yacc.c:1646 */ { (yyval.node) = new_test_node(test_group); (yyval.node)->v.groups = (yyvsp[0].strlist).argv; } #line 1898 "cfgram.c" /* yacc.c:1646 */ break; case 60: #line 402 "cfgram.y" /* yacc.c:1646 */ { (yyval.node) = new_test_node(test_fstest); (yyval.node)->v.fstest.op = (yyvsp[-1].fstest); (yyval.node)->v.fstest.arg = (yyvsp[0].str); } #line 1908 "cfgram.c" /* yacc.c:1646 */ break; case 65: #line 416 "cfgram.y" /* yacc.c:1646 */ { (yyval.str) = (yyvsp[0].num).strval; } #line 1916 "cfgram.c" /* yacc.c:1646 */ break; case 66: #line 422 "cfgram.y" /* yacc.c:1646 */ { int rc = regcomp(&(yyval.regex), (yyvsp[0].str), re_flags); if (rc) { char errbuf[512]; regerror(rc, &(yyval.regex), errbuf, sizeof(errbuf)); cferror(&(yylsp[0]), _("invalid regexp: %s"), (yyvsp[0].str)); YYERROR; } } #line 1930 "cfgram.c" /* yacc.c:1646 */ break; case 67: #line 437 "cfgram.y" /* yacc.c:1646 */ { struct transform_node *node; node = new_transform_node(current_rule, transform_set); node->target.type = target_arg; node->target.v.arg.ins = 0; node->target.v.arg.idx = (yyvsp[-2].intval); node->v.xf.pattern = (yyvsp[0].str); node->v.xf.trans = NULL; } #line 1945 "cfgram.c" /* yacc.c:1646 */ break; case 68: #line 448 "cfgram.y" /* yacc.c:1646 */ { struct transform_node *node; node = new_transform_node(current_rule, transform_set); node->target.type = target_arg; node->target.v.arg.ins = 1; node->target.v.arg.idx = (yyvsp[-2].intval); node->v.xf.pattern = (yyvsp[0].str); node->v.xf.trans = NULL; } #line 1960 "cfgram.c" /* yacc.c:1646 */ break; case 69: #line 459 "cfgram.y" /* yacc.c:1646 */ { struct transform_node *node; node = new_transform_node(current_rule, transform_set); node->target.type = target_arg; node->target.v.arg.ins = 0; node->target.v.arg.idx = (yyvsp[-2].intval); node->v.xf.pattern = NULL; node->v.xf.trans = compile_transform_expr((yyvsp[0].str), re_flags, &(yylsp[0])); } #line 1976 "cfgram.c" /* yacc.c:1646 */ break; case 70: #line 471 "cfgram.y" /* yacc.c:1646 */ { struct transform_node *node; node = new_transform_node(current_rule, transform_set); node->target.type = target_arg; node->target.v.arg.ins = 0; node->target.v.arg.idx = (yyvsp[-4].intval); node->v.xf.pattern = (yyvsp[-2].str); node->v.xf.trans = compile_transform_expr((yyvsp[0].str), re_flags, &(yylsp[0])); } #line 1992 "cfgram.c" /* yacc.c:1646 */ break; case 71: #line 483 "cfgram.y" /* yacc.c:1646 */ { struct transform_node *node; node = new_transform_node(current_rule, transform_set); node->target.type = target_arg; node->target.v.arg.ins = 1; node->target.v.arg.idx = (yyvsp[-4].intval); node->v.xf.pattern = (yyvsp[-2].str); node->v.xf.trans = compile_transform_expr((yyvsp[0].str), re_flags, &(yylsp[0])); } #line 2008 "cfgram.c" /* yacc.c:1646 */ break; case 72: #line 495 "cfgram.y" /* yacc.c:1646 */ { struct transform_node *node = new_set_node(transform_set, (yyvsp[-2].str), &(yylsp[-2])); if (node) { node->v.xf.pattern = (yyvsp[0].str); node->v.xf.trans = NULL; } } #line 2021 "cfgram.c" /* yacc.c:1646 */ break; case 73: #line 504 "cfgram.y" /* yacc.c:1646 */ { struct transform_node *node = new_set_node(transform_set, (yyvsp[-2].str), &(yylsp[-2])); if (node) { node->v.xf.pattern = NULL; node->v.xf.trans = compile_transform_expr((yyvsp[0].str), re_flags, &(yylsp[0])); } } #line 2036 "cfgram.c" /* yacc.c:1646 */ break; case 74: #line 515 "cfgram.y" /* yacc.c:1646 */ { struct transform_node *node = new_set_node(transform_set, (yyvsp[-4].str), &(yylsp[-4])); if (node) { node->v.xf.pattern = (yyvsp[-2].str); node->v.xf.trans = compile_transform_expr((yyvsp[0].str), re_flags, &(yylsp[0])); } } #line 2051 "cfgram.c" /* yacc.c:1646 */ break; case 75: #line 526 "cfgram.y" /* yacc.c:1646 */ { struct transform_node *node = new_set_node(transform_delete, (yyvsp[0].str), &(yylsp[0])); if (node) { node->target.v.name = (yyvsp[0].str); } } #line 2063 "cfgram.c" /* yacc.c:1646 */ break; case 76: #line 534 "cfgram.y" /* yacc.c:1646 */ { if ((yyvsp[0].intval) == 0) { cferror(&(yylsp[0]), _("$0 cannot be unset")); errors++; } else { struct transform_node *node = new_transform_node(current_rule, transform_delete); node->target.type = target_arg; node->target.v.arg.ins = 0; node->target.v.arg.idx = (yyvsp[0].intval); node->v.arg_end = (yyvsp[0].intval); } } #line 2082 "cfgram.c" /* yacc.c:1646 */ break; case 77: #line 551 "cfgram.y" /* yacc.c:1646 */ { struct transform_node *node; node = new_transform_node(current_rule, transform_map); node->target.type = target_arg; node->target.v.arg.ins = 0; node->target.v.arg.idx = (yyvsp[-6].intval); node->v.map.file = (yyvsp[-5].str); node->v.map.delim = (yyvsp[-4].str); node->v.map.key = (yyvsp[-3].str); node->v.map.key_field = (yyvsp[-2].num).intval; node->v.map.val_field = (yyvsp[-1].num).intval; node->v.map.defval = (yyvsp[0].str); free((yyvsp[-2].num).strval); free((yyvsp[-1].num).strval); } #line 2104 "cfgram.c" /* yacc.c:1646 */ break; case 78: #line 569 "cfgram.y" /* yacc.c:1646 */ { struct transform_node *node; node = new_set_node(transform_map, (yyvsp[-6].str), &(yylsp[-6])); node->target.v.name = (yyvsp[-6].str); node->v.map.file = (yyvsp[-5].str); node->v.map.delim = (yyvsp[-4].str); node->v.map.key = (yyvsp[-3].str); node->v.map.key_field = (yyvsp[-2].num).intval; node->v.map.val_field = (yyvsp[-1].num).intval; node->v.map.defval = (yyvsp[0].str); free((yyvsp[-2].num).strval); free((yyvsp[-1].num).strval); } #line 2124 "cfgram.c" /* yacc.c:1646 */ break; case 79: #line 587 "cfgram.y" /* yacc.c:1646 */ { (yyval.str) = NULL; } #line 2132 "cfgram.c" /* yacc.c:1646 */ break; case 81: #line 594 "cfgram.y" /* yacc.c:1646 */ { (yyval.intval) = (yyvsp[-1].num).intval; free((yyvsp[-1].num).strval); } #line 2141 "cfgram.c" /* yacc.c:1646 */ break; case 83: #line 607 "cfgram.y" /* yacc.c:1646 */ { current_rule->fall_through = 1; } #line 2149 "cfgram.c" /* yacc.c:1646 */ break; case 84: #line 611 "cfgram.y" /* yacc.c:1646 */ { current_rule->error = new_error((yyvsp[-1].intval), (yyvsp[0].str), 0); free((yyvsp[0].str)); } #line 2158 "cfgram.c" /* yacc.c:1646 */ break; case 85: #line 616 "cfgram.y" /* yacc.c:1646 */ { int n = string_to_error_index((yyvsp[0].str)); if (n == -1) { cferror(&(yylsp[-2]), _("Unknown message reference")); YYERROR; } else current_rule->error = new_standard_error((yyvsp[-1].intval), n); free((yyvsp[0].str)); } #line 2172 "cfgram.c" /* yacc.c:1646 */ break; case 86: #line 628 "cfgram.y" /* yacc.c:1646 */ { (yyval.intval) = 2; } #line 2180 "cfgram.c" /* yacc.c:1646 */ break; case 87: #line 632 "cfgram.y" /* yacc.c:1646 */ { (yyval.intval) = (yyvsp[0].num).intval; free((yyvsp[0].num).strval); } #line 2189 "cfgram.c" /* yacc.c:1646 */ break; case 88: #line 642 "cfgram.y" /* yacc.c:1646 */ { if ((yyvsp[0].range).start == 0 || (yyvsp[0].range).end == 0) { cferror(&(yylsp[0]), _("$0 cannot be deleted")); errors++; } else { struct transform_node *node = new_transform_node(current_rule, transform_delete); node->target.type = target_arg; node->target.v.arg.ins = 0; node->target.v.arg.idx = (yyvsp[0].range).start; node->v.arg_end = (yyvsp[0].range).end; } } #line 2208 "cfgram.c" /* yacc.c:1646 */ break; case 89: #line 659 "cfgram.y" /* yacc.c:1646 */ { (yyval.range).start = (yyval.range).end = (yyvsp[0].num).intval; free((yyvsp[0].num).strval); } #line 2217 "cfgram.c" /* yacc.c:1646 */ break; case 90: #line 664 "cfgram.y" /* yacc.c:1646 */ { (yyval.range).start = (yyvsp[-1].num).intval; (yyval.range).end = (yyvsp[0].num).intval; free((yyvsp[-1].num).strval); free((yyvsp[0].num).strval); } #line 2228 "cfgram.c" /* yacc.c:1646 */ break; case 91: #line 679 "cfgram.y" /* yacc.c:1646 */ { if (cflex_include((yyvsp[-1].str), &(yylsp[-1]))) YYERROR; free((yyvsp[-1].str)); } #line 2238 "cfgram.c" /* yacc.c:1646 */ break; case 92: #line 690 "cfgram.y" /* yacc.c:1646 */ { current_rule->limits = (yyvsp[0].lrec); } #line 2246 "cfgram.c" /* yacc.c:1646 */ break; case 93: #line 696 "cfgram.y" /* yacc.c:1646 */ { char *p; (yyval.lrec) = limits_record_create(); switch (limits_record_add((yyval.lrec), (yyvsp[0].str), &p)) { case lrec_ok: break; case lrec_error: cferror(&(yylsp[0]), _("unrecognized resource limit: %s"), p); break; case lrec_badval: cferror(&(yylsp[0]), _("bad value: %s"), p); break; } free((yyvsp[0].str)); } #line 2270 "cfgram.c" /* yacc.c:1646 */ break; case 94: #line 716 "cfgram.y" /* yacc.c:1646 */ { char *p; switch (limits_record_add((yyvsp[-1].lrec), (yyvsp[0].str), &p)) { case lrec_ok: break; case lrec_error: cferror(&(yylsp[-1]), _("unrecognized resource limit: %s"), p); break; case lrec_badval: cferror(&(yylsp[-1]), _("bad value: %s"), p); break; } free((yyvsp[0].str)); (yyval.lrec) = (yyvsp[-1].lrec); } #line 2294 "cfgram.c" /* yacc.c:1646 */ break; case 95: #line 741 "cfgram.y" /* yacc.c:1646 */ { struct transform_node *node; size_t n; n = strspn((yyvsp[-1].str) + 1, ":"); if ((yyvsp[-1].str)[n + 1]) { struct cfloc loc; loc.beg = (yylsp[-1]).beg; loc.beg.column += n + 1; loc.end = loc.beg; cferror(&loc, _("invalid character in short option designator")); cferror(&loc, _("short option letter can be followed only by zero to two colons")); errors++; } else { if (n > 2) { struct cfloc loc; loc.beg = (yylsp[-1]).beg; loc.beg.column += n; loc.end = loc.beg; cferror(&loc, _("ignoring extra character in short option designator")); cferror(&loc, _("short option letter can be followed only by zero to two colons")); } node = new_transform_node(current_rule, transform_remopt); node->target.type = target_command; node->v.remopt.s_opt = (yyvsp[-1].str); node->v.remopt.l_opt = (yyvsp[0].str); } } #line 2333 "cfgram.c" /* yacc.c:1646 */ break; case 96: #line 778 "cfgram.y" /* yacc.c:1646 */ { (yyval.str) = NULL; } #line 2341 "cfgram.c" /* yacc.c:1646 */ break; case 98: #line 788 "cfgram.y" /* yacc.c:1646 */ { current_rule->clrenv = 1; } #line 2349 "cfgram.c" /* yacc.c:1646 */ break; case 99: #line 792 "cfgram.y" /* yacc.c:1646 */ { new_envar(current_rule, (yyvsp[-2].str), strlen((yyvsp[-2].str)), (yyvsp[0].str), strlen((yyvsp[0].str)), envar_set); free((yyvsp[-2].str)); free((yyvsp[0].str)); } #line 2362 "cfgram.c" /* yacc.c:1646 */ break; case 100: #line 801 "cfgram.y" /* yacc.c:1646 */ { new_envar(current_rule, "", 0, (yyvsp[0].str), strlen((yyvsp[0].str)), envar_eval); free((yyvsp[0].str)); } #line 2374 "cfgram.c" /* yacc.c:1646 */ break; case 101: #line 809 "cfgram.y" /* yacc.c:1646 */ { add_asgn_list((yyvsp[0].asgn_list).head, envar_unset); } #line 2382 "cfgram.c" /* yacc.c:1646 */ break; case 102: #line 813 "cfgram.y" /* yacc.c:1646 */ { add_asgn_list((yyvsp[0].asgn_list).head, envar_keep); } #line 2390 "cfgram.c" /* yacc.c:1646 */ break; case 103: #line 819 "cfgram.y" /* yacc.c:1646 */ { (yyval.asgn_list).head = (yyval.asgn_list).tail = (yyvsp[0].asgn); } #line 2398 "cfgram.c" /* yacc.c:1646 */ break; case 104: #line 823 "cfgram.y" /* yacc.c:1646 */ { LIST_APPEND((yyvsp[0].asgn), (yyvsp[-1].asgn_list).head, (yyvsp[-1].asgn_list).tail); (yyval.asgn_list) = (yyvsp[-1].asgn_list); } #line 2407 "cfgram.c" /* yacc.c:1646 */ break; case 105: #line 830 "cfgram.y" /* yacc.c:1646 */ { (yyval.asgn) = xmalloc(sizeof(*(yyval.asgn))); (yyval.asgn)->next = NULL; (yyval.asgn)->name = (yyvsp[0].str); (yyval.asgn)->value = NULL; } #line 2418 "cfgram.c" /* yacc.c:1646 */ break; case 106: #line 837 "cfgram.y" /* yacc.c:1646 */ { (yyval.asgn) = xmalloc(sizeof(*(yyval.asgn))); (yyval.asgn)->next = NULL; (yyval.asgn)->name = (yyvsp[-2].str); (yyval.asgn)->value = (yyvsp[0].str); } #line 2429 "cfgram.c" /* yacc.c:1646 */ break; case 107: #line 849 "cfgram.y" /* yacc.c:1646 */ { (yyvsp[-1].attrib)(current_rule, (yyvsp[0].str), &(yylsp[0])); free((yyvsp[0].str)); } #line 2438 "cfgram.c" /* yacc.c:1646 */ break; case 108: #line 855 "cfgram.y" /* yacc.c:1646 */ { cflex_pushargs(); } #line 2444 "cfgram.c" /* yacc.c:1646 */ break; case 109: #line 856 "cfgram.y" /* yacc.c:1646 */ { int i; struct argval *arg; cflex_popargs(); (yyval.strlist).argc = (yyvsp[-1].arglist).argc; (yyval.strlist).argv = xcalloc((yyvsp[-1].arglist).argc + 1, sizeof((yyval.strlist).argv[0])); for (i = 0, arg = (yyvsp[-1].arglist).head; i < (yyvsp[-1].arglist).argc; i++, arg = arg->next) { (yyval.strlist).argv[i] = arg->strval; arg->strval = NULL; } arglist_free((yyvsp[-1].arglist).head); } #line 2462 "cfgram.c" /* yacc.c:1646 */ break; #line 2466 "cfgram.c" /* yacc.c:1646 */ default: break; } /* User semantic actions sometimes alter yychar, and that requires that yytoken be updated with the new translation. We take the approach of translating immediately before every use of yytoken. 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 yychar 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 ("-> $$ =", yyr1[yyn], &yyval, &yyloc); YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); *++yyvsp = yyval; *++yylsp = yyloc; /* 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. */ yyn = yyr1[yyn]; yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) yystate = yytable[yystate]; else yystate = yydefgoto[yyn - YYNTOKENS]; goto yynewstate; /*--------------------------------------. | yyerrlab -- here on detecting error. | `--------------------------------------*/ yyerrlab: /* Make sure we have latest lookahead translation. See comments at user semantic actions for why this is necessary. */ yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar); /* If not already recovering from an error, report this error. */ if (!yyerrstatus) { ++yynerrs; #if ! YYERROR_VERBOSE yyerror (YY_("syntax error")); #else # define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \ yyssp, yytoken) { char const *yymsgp = YY_("syntax error"); int yysyntax_error_status; yysyntax_error_status = YYSYNTAX_ERROR; if (yysyntax_error_status == 0) yymsgp = yymsg; else if (yysyntax_error_status == 1) { if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc); if (!yymsg) { yymsg = yymsgbuf; yymsg_alloc = sizeof yymsgbuf; yysyntax_error_status = 2; } else { yysyntax_error_status = YYSYNTAX_ERROR; yymsgp = yymsg; } } yyerror (yymsgp); if (yysyntax_error_status == 2) goto yyexhaustedlab; } # undef YYSYNTAX_ERROR #endif } yyerror_range[1] = yylloc; if (yyerrstatus == 3) { /* If just tried and failed to reuse lookahead token after an error, discard it. */ if (yychar <= YYEOF) { /* Return failure if at end of input. */ if (yychar == YYEOF) YYABORT; } else { yydestruct ("Error: discarding", yytoken, &yylval, &yylloc); yychar = YYEMPTY; } } /* Else will try to reuse lookahead token after shifting the error token. */ goto yyerrlab1; /*---------------------------------------------------. | yyerrorlab -- error raised explicitly by YYERROR. | `---------------------------------------------------*/ yyerrorlab: /* Pacify compilers like GCC when the user code never invokes YYERROR and the label yyerrorlab therefore never appears in user code. */ if (/*CONSTCOND*/ 0) goto yyerrorlab; yyerror_range[1] = yylsp[1-yylen]; /* Do not reclaim the symbols of the rule whose action triggered this YYERROR. */ YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); yystate = *yyssp; goto yyerrlab1; /*-------------------------------------------------------------. | yyerrlab1 -- common code for both syntax error and YYERROR. | `-------------------------------------------------------------*/ yyerrlab1: yyerrstatus = 3; /* Each real token shifted decrements this. */ for (;;) { yyn = yypact[yystate]; if (!yypact_value_is_default (yyn)) { yyn += YYTERROR; if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) { yyn = yytable[yyn]; if (0 < yyn) break; } } /* Pop the current state because it cannot handle the error token. */ if (yyssp == yyss) YYABORT; yyerror_range[1] = *yylsp; yydestruct ("Error: popping", yystos[yystate], yyvsp, yylsp); YYPOPSTACK (1); yystate = *yyssp; YY_STACK_PRINT (yyss, yyssp); } YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; YY_IGNORE_MAYBE_UNINITIALIZED_END yyerror_range[2] = yylloc; /* Using YYLLOC is tempting, but would change the location of the lookahead. YYLOC is available though. */ YYLLOC_DEFAULT (yyloc, yyerror_range, 2); *++yylsp = yyloc; /* Shift the error token. */ YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); yystate = yyn; goto yynewstate; /*-------------------------------------. | yyacceptlab -- YYACCEPT comes here. | `-------------------------------------*/ yyacceptlab: yyresult = 0; goto yyreturn; /*-----------------------------------. | yyabortlab -- YYABORT comes here. | `-----------------------------------*/ yyabortlab: yyresult = 1; goto yyreturn; #if !defined yyoverflow || YYERROR_VERBOSE /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | `-------------------------------------------------*/ yyexhaustedlab: yyerror (YY_("memory exhausted")); yyresult = 2; /* Fall through. */ #endif yyreturn: if (yychar != YYEMPTY) { /* Make sure we have latest lookahead translation. See comments at user semantic actions for why this is necessary. */ yytoken = YYTRANSLATE (yychar); yydestruct ("Cleanup: discarding lookahead", yytoken, &yylval, &yylloc); } /* Do not reclaim the symbols of the rule whose action triggered this YYABORT or YYACCEPT. */ YYPOPSTACK (yylen); YY_STACK_PRINT (yyss, yyssp); while (yyssp != yyss) { yydestruct ("Cleanup: popping", yystos[*yyssp], yyvsp, yylsp); YYPOPSTACK (1); } #ifndef yyoverflow if (yyss != yyssa) YYSTACK_FREE (yyss); #endif #if YYERROR_VERBOSE if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); #endif return yyresult; } #line 871 "cfgram.y" /* yacc.c:1906 */ void yyerror(char const *fmt, ...) { va_list ap; va_start(ap, fmt); vcferror(&curloc, fmt, ap); va_end(ap); errors = 1; } void cfgram_debug(int v) { #ifdef YYDEBUG yydebug = v; #endif } struct rush_rule * new_rush_rule(char const *tag) { struct rush_rule *p = xzalloc(sizeof(*p)); LIST_APPEND(p, rule_head, rule_tail); static unsigned rule_num = 0; rule_num++; if (tag && tag[0]) p->tag = xstrdup(tag); else { char buf[INT_BUFSIZE_BOUND(unsigned)]; char *s = uinttostr(rule_num, buf); p->tag = xmalloc(strlen(s) + 2); p->tag[0] = '#'; strcpy(p->tag + 1, s); } p->mask = NO_UMASK; p->gid = NO_GID; p->fork = rush_undefined; p->acct = rush_undefined; return p; } struct transform_node * new_transform_node(struct rush_rule *rule, enum transform_node_type type) { struct transform_node *p = xzalloc(sizeof(*p)); LIST_APPEND(p, rule->transform_head, rule->transform_tail); p->type = type; return p; } struct test_node * new_test_node(enum test_type type) { struct test_node *p = xzalloc(sizeof(*p)); p->type = type; return p; } struct envar * new_envar(struct rush_rule *rule, char const *name, size_t nlen, char const *value, size_t vlen, enum envar_type type) { struct envar *p = xmalloc(sizeof(*p) + nlen + 1 + (value ? vlen + 1 : 0)); p->next = NULL; p->name = (char*)(p + 1); memcpy(p->name, name, nlen); p->name[nlen] = 0; if (value) { p->value = p->name + nlen + 1; memcpy(p->value, value, vlen); p->value[vlen] = 0; } else { p->value = NULL; } p->type = type; LIST_APPEND(p, rule->envar_head, rule->envar_tail); return p; } static void add_asgn_list(struct asgn *head, enum envar_type type) { for (; head; head = head->next) { new_envar(current_rule, head->name, strlen(head->name), head->value, head->value ? strlen(head->value) : 0, type); free(head->name); free(head->value); } } static struct transform_node * new_set_node(enum transform_node_type type, char *varname, struct cfloc const *loc) { struct transform_node *node; enum transform_target_type tgt; tgt = rush_variable_target(varname); if (tgt == target_readonly) { cferror(loc, _("attempt to modify a read-only variable")); errors++; return NULL; } node = new_transform_node(current_rule, type); node->target.type = tgt; switch (tgt) { case target_command: case target_program: free(varname); if (type == transform_delete) { cferror(loc, _("attempt to unset a read-only variable")); errors++; return NULL; } break; case target_var: node->target.v.name = varname; break; default: die(system_error, NULL, _("INTERNAL ERROR at %s:%d: invalid target type %d"), __FILE__, __LINE__, tgt); } return node; } ������������������������rush-2.4/configure����������������������������������������������������������������������������������0000755�0001750�0001750�00003062240�14655401227�014252� 0����������������������������������������������������������������������������������������������������ustar�00gray����������������������������gray����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.71 for GNU rush 2.4. # # Report bugs to <bug-rush@gnu.org>. # # # Copyright (C) 1992-1996, 1998-2017, 2020-2021 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 as_nop=: if test ${ZSH_VERSION+y} && (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 $as_nop case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0</dev/null; fi if (exec 3>&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; 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 # 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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 printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # 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'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 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="as_nop=: if test \${ZSH_VERSION+y} && (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 \$as_nop 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 \$as_nop exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 blah=\$(echo \$(echo blah)) test x\"\$blah\" = xblah || 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_nop as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null then : else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$as_shell as_have_required=yes if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null then : break 2 fi fi done;; esac as_found=false done IFS=$as_save_IFS if $as_found then : else $as_nop if { test -f "$SHELL" || test -f "$SHELL.exe"; } && as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$SHELL as_have_required=yes fi fi 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'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno then : printf "%s\n" "$0: This script requires a shell more modern than all" printf "%s\n" "$0: the shells that I found on your system." if test ${ZSH_VERSION+y} ; then printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should" printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later." else printf "%s\n" "$0: Please tell bug-autoconf@gnu.org and bug-rush@gnu.org $0: about your system, including any error possibly output $0: before this message. Then install a modern shell, or $0: manually run the script under such a shell if you do $0: 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_nop # --------- # Do nothing but, unlike ":", preserve the value of $?. as_fn_nop () { return $? } as_nop=as_fn_nop # 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=`printf "%s\n" "$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 || printf "%s\n" 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_nop 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_nop as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_nop # --------- # Do nothing but, unlike ":", preserve the value of $?. as_fn_nop () { return $? } as_nop=as_fn_nop # 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 printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$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 || printf "%s\n" 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" || { printf "%s\n" "$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 } # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. 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 # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_echo='printf %s\n' as_echo_n='printf %s' 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 rush' PACKAGE_TARNAME='rush' PACKAGE_VERSION='2.4' PACKAGE_STRING='GNU rush 2.4' PACKAGE_BUGREPORT='bug-rush@gnu.org' PACKAGE_URL='https://www.gnu.org.ua/software/rush/' ac_unique_file="src/rush.c" # Factoring default headers for most tests. ac_includes_default="\ #include <stddef.h> #ifdef HAVE_STDIO_H # include <stdio.h> #endif #ifdef HAVE_STDLIB_H # include <stdlib.h> #endif #ifdef HAVE_STRING_H # include <string.h> #endif #ifdef HAVE_INTTYPES_H # include <inttypes.h> #endif #ifdef HAVE_STDINT_H # include <stdint.h> #endif #ifdef HAVE_STRINGS_H # include <strings.h> #endif #ifdef HAVE_SYS_TYPES_H # include <sys/types.h> #endif #ifdef HAVE_SYS_STAT_H # include <sys/stat.h> #endif #ifdef HAVE_UNISTD_H # include <unistd.h> #endif" ac_header_c_list= gl_use_threads_default= gl_use_winpthreads_default=no ac_func_c_list= gl_getopt_required=POSIX gt_needs= enable_year2038=no ac_subst_vars='gltests_LIBOBJDEPS gltests_LTLIBOBJS gltests_LIBOBJS gl_LIBOBJDEPS gl_LTLIBOBJS gl_LIBOBJS am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS AUTOM4TE RUSH_DEFAULT_CONFIG IMPRIMATUR_COND_DIST_INFO_FALSE IMPRIMATUR_COND_DIST_INFO_TRUE IMPRIMATUR_COND_FRENCHSPACING_FALSE IMPRIMATUR_COND_FRENCHSPACING_TRUE IMPRIMATUR_COND_MAKEDOC_FALSE IMPRIMATUR_COND_MAKEDOC_TRUE IMPRIMATUR_MAKEINFOFLAGS RENDITION IMPRIMATUR_MODULE_DIR POSUB INTLLIBS INTL_MACOSX_LIBS XGETTEXT_EXTRA_OPTIONS MSGMERGE XGETTEXT_015 XGETTEXT GMSGFMT_015 MSGFMT_015 GMSGFMT MSGFMT GETTEXT_MACRO_VERSION USE_NLS SED LTLIBICONV LIBICONV LIBGNU_LTLIBDEPS LIBGNU_LIBDEPS GL_CFLAG_GNULIB_WARNINGS GL_CFLAG_ALLOW_WARNINGS gltests_WITNESS GL_COND_OBJ_WINDOWS_RWLOCK_FALSE GL_COND_OBJ_WINDOWS_RWLOCK_TRUE GL_COND_OBJ_WINDOWS_RECMUTEX_FALSE GL_COND_OBJ_WINDOWS_RECMUTEX_TRUE GL_COND_OBJ_WINDOWS_ONCE_FALSE GL_COND_OBJ_WINDOWS_ONCE_TRUE GL_COND_OBJ_WINDOWS_MUTEX_FALSE GL_COND_OBJ_WINDOWS_MUTEX_TRUE GL_GNULIB_TOWCTRANS GL_GNULIB_WCTRANS GL_GNULIB_ISWCTYPE GL_GNULIB_WCTYPE GL_GNULIB_ISWXDIGIT GL_GNULIB_ISWDIGIT GL_GNULIB_ISWBLANK REPLACE_TOWLOWER REPLACE_ISWCNTRL HAVE_WCTYPE_H NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H NEXT_WCTYPE_H HAVE_ISWCNTRL REPLACE_ISWXDIGIT REPLACE_ISWDIGIT REPLACE_ISWBLANK HAVE_WCTRANS_T HAVE_WCTYPE_T HAVE_ISWBLANK GL_COND_OBJ_WCRTOMB_FALSE GL_COND_OBJ_WCRTOMB_TRUE HAVE_CRTDEFS_H HAVE_WINT_T HAVE_FEATURES_H NEXT_AS_FIRST_DIRECTIVE_WCHAR_H NEXT_WCHAR_H GL_COND_OBJ_UNSETENV_FALSE GL_COND_OBJ_UNSETENV_TRUE HAVE_UNISTD_H NEXT_AS_FIRST_DIRECTIVE_UNISTD_H NEXT_UNISTD_H GL_COND_OBJ_TZSET_FALSE GL_COND_OBJ_TZSET_TRUE GL_COND_OBJ_TIMEGM_FALSE GL_COND_OBJ_TIMEGM_TRUE GL_COND_OBJ_TIME_RZ_FALSE GL_COND_OBJ_TIME_RZ_TRUE GL_COND_OBJ_TIME_R_FALSE GL_COND_OBJ_TIME_R_TRUE TIME_H_DEFINES_TIME_UTC UNISTD_H_DEFINES_STRUCT_TIMESPEC PTHREAD_H_DEFINES_STRUCT_TIMESPEC SYS_TIME_H_DEFINES_STRUCT_TIMESPEC TIME_H_DEFINES_STRUCT_TIMESPEC NEXT_AS_FIRST_DIRECTIVE_TIME_H NEXT_TIME_H WINDOWS_STAT_INODES WINDOWS_64_BIT_OFF_T NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H NEXT_SYS_TYPES_H NEXT_AS_FIRST_DIRECTIVE_STRING_H NEXT_STRING_H GL_COND_OBJ_STRERROR_OVERRIDE_FALSE GL_COND_OBJ_STRERROR_OVERRIDE_TRUE GL_GNULIB_MDA_STRDUP GL_GNULIB_MDA_MEMCCPY GL_GNULIB_STRVERSCMP GL_GNULIB_STRSIGNAL GL_GNULIB_SIGDESCR_NP GL_GNULIB_SIGABBREV_NP GL_GNULIB_STRERRORNAME_NP GL_GNULIB_STRERROR_R GL_GNULIB_STRERROR GL_GNULIB_MBSTOK_R GL_GNULIB_MBSSEP GL_GNULIB_MBSSPN GL_GNULIB_MBSPBRK GL_GNULIB_MBSCSPN GL_GNULIB_MBSCASESTR GL_GNULIB_MBSPCASECMP GL_GNULIB_MBSNCASECMP GL_GNULIB_MBSCASECMP GL_GNULIB_MBSSTR GL_GNULIB_MBSRCHR GL_GNULIB_MBSCHR GL_GNULIB_MBSNLEN GL_GNULIB_MBSLEN GL_GNULIB_STRTOK_R GL_GNULIB_STRCASESTR GL_GNULIB_STRSTR GL_GNULIB_STRSEP GL_GNULIB_STRPBRK GL_GNULIB_STRNLEN GL_GNULIB_STRNDUP GL_GNULIB_STRNCAT GL_GNULIB_STRDUP GL_GNULIB_STRCHRNUL GL_GNULIB_STPNCPY GL_GNULIB_STPCPY GL_GNULIB_RAWMEMCHR GL_GNULIB_MEMSET_EXPLICIT GL_GNULIB_MEMRCHR GL_GNULIB_MEMPCPY GL_GNULIB_MEMMEM GL_GNULIB_MEMCHR GL_GNULIB_FFSLL GL_GNULIB_FFSL GL_GNULIB_EXPLICIT_BZERO GL_COND_OBJ_STRERROR_FALSE GL_COND_OBJ_STRERROR_TRUE UNDEFINE_STRTOK_R REPLACE_STRSIGNAL REPLACE_STRERRORNAME_NP REPLACE_STRERROR_R REPLACE_STRERROR REPLACE_STRTOK_R REPLACE_STRCASESTR REPLACE_STRSTR REPLACE_STRNLEN REPLACE_STRNDUP REPLACE_STRNCAT REPLACE_STRDUP REPLACE_STRCHRNUL REPLACE_STPNCPY REPLACE_STPCPY REPLACE_MEMPCPY REPLACE_MEMMEM REPLACE_MEMCHR REPLACE_FFSLL HAVE_STRVERSCMP HAVE_DECL_STRSIGNAL HAVE_SIGDESCR_NP HAVE_SIGABBREV_NP HAVE_STRERRORNAME_NP HAVE_DECL_STRERROR_R HAVE_DECL_STRTOK_R HAVE_STRCASESTR HAVE_STRSEP HAVE_STRPBRK HAVE_DECL_STRNLEN HAVE_DECL_STRNDUP HAVE_DECL_STRDUP HAVE_STRCHRNUL HAVE_STPNCPY HAVE_STPCPY HAVE_RAWMEMCHR HAVE_DECL_MEMRCHR HAVE_MEMSET_EXPLICIT HAVE_MEMPCPY HAVE_DECL_MEMMEM HAVE_FFSLL HAVE_FFSL HAVE_EXPLICIT_BZERO HAVE_MBSLEN NEXT_AS_FIRST_DIRECTIVE_STDLIB_H NEXT_STDLIB_H GL_COND_OBJ_STDIO_WRITE_FALSE GL_COND_OBJ_STDIO_WRITE_TRUE GL_COND_OBJ_STDIO_READ_FALSE GL_COND_OBJ_STDIO_READ_TRUE NEXT_AS_FIRST_DIRECTIVE_STDIO_H NEXT_STDIO_H GL_GENERATE_STDINT_H_FALSE GL_GENERATE_STDINT_H_TRUE STDINT_H GL_GENERATE_STDDEF_H_FALSE GL_GENERATE_STDDEF_H_TRUE STDDEF_H GL_GENERATE_STDCKDINT_H_FALSE GL_GENERATE_STDCKDINT_H_TRUE STDCKDINT_H GL_COND_OBJ_STAT_FALSE GL_COND_OBJ_STAT_TRUE GL_COND_OBJ_SETLOCALE_LOCK_FALSE GL_COND_OBJ_SETLOCALE_LOCK_TRUE GL_COND_OBJ_SETENV_FALSE GL_COND_OBJ_SETENV_TRUE GL_COND_OBJ_REGEX_FALSE GL_COND_OBJ_REGEX_TRUE GL_COND_OBJ_REALLOCARRAY_FALSE GL_COND_OBJ_REALLOCARRAY_TRUE GL_COND_OBJ_OPEN_FALSE GL_COND_OBJ_OPEN_TRUE GL_COND_OBJ_NL_LANGINFO_LOCK_FALSE GL_COND_OBJ_NL_LANGINFO_LOCK_TRUE GL_COND_OBJ_NL_LANGINFO_FALSE GL_COND_OBJ_NL_LANGINFO_TRUE LIB_NL_LANGINFO GL_COND_OBJ_MSVC_NOTHROW_FALSE GL_COND_OBJ_MSVC_NOTHROW_TRUE GL_COND_OBJ_MSVC_INVAL_FALSE GL_COND_OBJ_MSVC_INVAL_TRUE GL_GNULIB_MDA_TZSET GL_GNULIB_TZSET GL_GNULIB_TIME_RZ GL_GNULIB_TIME_R GL_GNULIB_TIMESPEC_GETRES GL_GNULIB_TIMESPEC_GET GL_GNULIB_TIMEGM GL_GNULIB_TIME GL_GNULIB_STRPTIME GL_GNULIB_STRFTIME GL_GNULIB_NANOSLEEP GL_GNULIB_LOCALTIME GL_GNULIB_MKTIME GL_GNULIB_CTIME REPLACE_LOCALTIME REPLACE_GMTIME GNULIB_GETTIMEOFDAY REPLACE_TZSET REPLACE_TIMESPEC_GET REPLACE_TIMEGM REPLACE_TIME REPLACE_STRFTIME REPLACE_NANOSLEEP REPLACE_MKTIME REPLACE_LOCALTIME_R REPLACE_CTIME HAVE_TIMEZONE_T HAVE_TIMESPEC_GETRES HAVE_TIMESPEC_GET HAVE_TIMEGM HAVE_STRPTIME HAVE_NANOSLEEP HAVE_DECL_LOCALTIME_R GL_COND_OBJ_MBTOWC_FALSE GL_COND_OBJ_MBTOWC_TRUE GL_COND_OBJ_MBSINIT_FALSE GL_COND_OBJ_MBSINIT_TRUE HAVE_VISIBILITY CFLAG_VISIBILITY GL_COND_OBJ_MBRTOWC_FALSE GL_COND_OBJ_MBRTOWC_TRUE LIB_MBRTOWC MBRTOWC_LIB LOCALE_ZH_CN LOCALE_FR_UTF8 LOCALE_JA LTLIBMULTITHREAD LIBMULTITHREAD LTLIBTHREAD LIBTHREAD LIBSTDTHREAD GL_COND_OBJ_LOCALECONV_FALSE GL_COND_OBJ_LOCALECONV_TRUE GL_GNULIB_LOCALENAME GL_GNULIB_DUPLOCALE GL_GNULIB_SETLOCALE_NULL GL_GNULIB_SETLOCALE GL_GNULIB_LOCALECONV NEXT_AS_FIRST_DIRECTIVE_LOCALE_H NEXT_LOCALE_H HAVE_XLOCALE_H NEXT_AS_FIRST_DIRECTIVE_STDDEF_H NEXT_STDDEF_H HAVE_WCHAR_T HAVE_MAX_ALIGN_T REPLACE_NULL LOCALENAME_ENHANCE_LOCALE_FUNCS REPLACE_STRUCT_LCONV REPLACE_FREELOCALE REPLACE_DUPLOCALE REPLACE_NEWLOCALE REPLACE_SETLOCALE REPLACE_LOCALECONV HAVE_FREELOCALE HAVE_DUPLOCALE HAVE_NEWLOCALE LOCALCHARSET_TESTS_ENVIRONMENT GL_GENERATE_LIMITS_H_FALSE GL_GENERATE_LIMITS_H_TRUE LIMITS_H GL_GNULIB_NL_LANGINFO HAVE_LANGINFO_YESEXPR HAVE_LANGINFO_ERA HAVE_LANGINFO_ALTMON HAVE_LANGINFO_T_FMT_AMPM HAVE_LANGINFO_CODESET HAVE_LANGINFO_H NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H NEXT_LANGINFO_H REPLACE_NL_LANGINFO HAVE_NL_LANGINFO GL_GNULIB_STRTOUMAX GL_GNULIB_STRTOIMAX GL_GNULIB_IMAXDIV GL_GNULIB_IMAXABS NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H NEXT_INTTYPES_H UINT64_MAX_EQ_ULONG_MAX UINT32_MAX_LT_UINTMAX_MAX PRIPTR_PREFIX INT64_MAX_EQ_LONG_MAX INT32_MAX_LT_INTMAX_MAX REPLACE_STRTOUMAX REPLACE_STRTOIMAX REPLACE_IMAXDIV REPLACE_IMAXABS HAVE_IMAXDIV HAVE_IMAXABS HAVE_IMAXDIV_T HAVE_DECL_STRTOUMAX HAVE_DECL_STRTOIMAX HAVE_DECL_IMAXDIV HAVE_DECL_IMAXABS HAVE_SYS_INTTYPES_H HAVE_SYS_BITYPES_H HAVE_C99_STDINT_H WINT_T_SUFFIX WCHAR_T_SUFFIX SIG_ATOMIC_T_SUFFIX SIZE_T_SUFFIX PTRDIFF_T_SUFFIX HAVE_SIGNED_WINT_T HAVE_SIGNED_WCHAR_T HAVE_SIGNED_SIG_ATOMIC_T BITSIZEOF_WINT_T BITSIZEOF_WCHAR_T BITSIZEOF_SIG_ATOMIC_T BITSIZEOF_SIZE_T BITSIZEOF_PTRDIFF_T APPLE_UNIVERSAL_BUILD HAVE_STDINT_H NEXT_AS_FIRST_DIRECTIVE_STDINT_H NEXT_STDINT_H HAVE_SYS_TYPES_H HAVE_INTTYPES_H HAVE_WCHAR_H GNULIBHEADERS_OVERRIDE_WINT_T NEXT_AS_FIRST_DIRECTIVE_LIMITS_H NEXT_LIMITS_H LIB_HARD_LOCALE HARD_LOCALE_LIB LIB_SETLOCALE_NULL SETLOCALE_NULL_LIB LIB_SCHED_YIELD SCHED_YIELD_LIB LIBPMULTITHREAD LIBPTHREAD LTLIBINTL LIBINTL GL_COND_OBJ_GETPROGNAME_FALSE GL_COND_OBJ_GETPROGNAME_TRUE GL_COND_OBJ_GETOPT_FALSE GL_COND_OBJ_GETOPT_TRUE GL_GENERATE_GETOPT_CDEFS_H_FALSE GL_GENERATE_GETOPT_CDEFS_H_TRUE GETOPT_CDEFS_H GL_GENERATE_GETOPT_H_FALSE GL_GENERATE_GETOPT_H_TRUE GETOPT_H HAVE_SYS_CDEFS_H HAVE_GETOPT_H NEXT_AS_FIRST_DIRECTIVE_GETOPT_H NEXT_GETOPT_H GL_COND_OBJ_GETLINE_FALSE GL_COND_OBJ_GETLINE_TRUE GL_COND_OBJ_GETDTABLESIZE_FALSE GL_COND_OBJ_GETDTABLESIZE_TRUE GL_GNULIB_MDA_TEMPNAM GL_GNULIB_MDA_PUTW GL_GNULIB_MDA_GETW GL_GNULIB_MDA_FILENO GL_GNULIB_MDA_FDOPEN GL_GNULIB_MDA_FCLOSEALL GL_GNULIB_VSPRINTF_POSIX GL_GNULIB_VSNPRINTF GL_GNULIB_VPRINTF_POSIX GL_GNULIB_VPRINTF GL_GNULIB_VFPRINTF_POSIX GL_GNULIB_VFPRINTF GL_GNULIB_VDPRINTF GL_GNULIB_VSCANF GL_GNULIB_VFSCANF GL_GNULIB_VASPRINTF GL_GNULIB_TMPFILE GL_GNULIB_STDIO_H_SIGPIPE GL_GNULIB_STDIO_H_NONBLOCKING GL_GNULIB_SPRINTF_POSIX GL_GNULIB_SNPRINTF GL_GNULIB_SCANF GL_GNULIB_RENAMEAT GL_GNULIB_RENAME GL_GNULIB_REMOVE GL_GNULIB_PUTS GL_GNULIB_PUTCHAR GL_GNULIB_PUTC GL_GNULIB_PRINTF_POSIX GL_GNULIB_PRINTF GL_GNULIB_POPEN GL_GNULIB_PERROR GL_GNULIB_PCLOSE GL_GNULIB_OBSTACK_PRINTF_POSIX GL_GNULIB_OBSTACK_PRINTF GL_GNULIB_GETLINE GL_GNULIB_GETDELIM GL_GNULIB_GETCHAR GL_GNULIB_GETC GL_GNULIB_FWRITE GL_GNULIB_FTELLO GL_GNULIB_FTELL GL_GNULIB_FSEEKO GL_GNULIB_FSEEK GL_GNULIB_FSCANF GL_GNULIB_FREOPEN GL_GNULIB_FREAD GL_GNULIB_FPUTS GL_GNULIB_FPUTC GL_GNULIB_FPURGE GL_GNULIB_FPRINTF_POSIX GL_GNULIB_FPRINTF GL_GNULIB_FOPEN_GNU GL_GNULIB_FOPEN GL_GNULIB_FGETS GL_GNULIB_FGETC GL_GNULIB_FFLUSH GL_GNULIB_FDOPEN GL_GNULIB_FCLOSE GL_GNULIB_DPRINTF GL_COND_OBJ_GETDELIM_FALSE GL_COND_OBJ_GETDELIM_TRUE REPLACE_VSPRINTF REPLACE_VSNPRINTF REPLACE_VPRINTF REPLACE_VFPRINTF REPLACE_VDPRINTF REPLACE_VASPRINTF REPLACE_TMPFILE REPLACE_STDIO_WRITE_FUNCS REPLACE_STDIO_READ_FUNCS REPLACE_SPRINTF REPLACE_SNPRINTF REPLACE_RENAMEAT REPLACE_RENAME REPLACE_REMOVE REPLACE_PRINTF REPLACE_POPEN REPLACE_PERROR REPLACE_OBSTACK_PRINTF REPLACE_GETLINE REPLACE_GETDELIM REPLACE_FTELLO REPLACE_FTELL REPLACE_FSEEKO REPLACE_FSEEK REPLACE_FREOPEN REPLACE_FPURGE REPLACE_FPRINTF REPLACE_FOPEN_FOR_FOPEN_GNU REPLACE_FOPEN REPLACE_FFLUSH REPLACE_FDOPEN REPLACE_FCLOSE REPLACE_DPRINTF HAVE_VDPRINTF HAVE_VASPRINTF HAVE_RENAMEAT HAVE_POPEN HAVE_PCLOSE HAVE_FTELLO HAVE_FSEEKO HAVE_DPRINTF HAVE_DECL_VSNPRINTF HAVE_DECL_SNPRINTF HAVE_DECL_PUTW HAVE_DECL_OBSTACK_PRINTF HAVE_DECL_GETW HAVE_DECL_GETLINE HAVE_DECL_GETDELIM HAVE_DECL_FTELLO HAVE_DECL_FSEEKO HAVE_DECL_FPURGE HAVE_DECL_FCLOSEALL GL_GNULIB_MDA_UMASK GL_GNULIB_MDA_MKDIR GL_GNULIB_MDA_CHMOD GL_GNULIB_OVERRIDES_STRUCT_STAT GL_GNULIB_UTIMENSAT GL_GNULIB_STAT GL_GNULIB_MKNODAT GL_GNULIB_MKNOD GL_GNULIB_MKFIFOAT GL_GNULIB_MKFIFO GL_GNULIB_MKDIRAT GL_GNULIB_MKDIR GL_GNULIB_LSTAT GL_GNULIB_LCHMOD GL_GNULIB_GETUMASK GL_GNULIB_FUTIMENS GL_GNULIB_FSTATAT GL_GNULIB_FSTAT GL_GNULIB_FCHMODAT GL_GNULIB_CHMOD WINDOWS_64_BIT_ST_SIZE WINDOWS_STAT_TIMESPEC NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H NEXT_SYS_STAT_H GL_COND_OBJ_FSTAT_FALSE GL_COND_OBJ_FSTAT_TRUE REPLACE_UTIMENSAT REPLACE_STAT REPLACE_MKNODAT REPLACE_MKNOD REPLACE_MKFIFOAT REPLACE_MKFIFO REPLACE_MKDIR REPLACE_LSTAT REPLACE_FUTIMENS REPLACE_FSTATAT REPLACE_FSTAT REPLACE_FCHMODAT REPLACE_CHMOD HAVE_UTIMENSAT HAVE_MKNODAT HAVE_MKNOD HAVE_MKFIFOAT HAVE_MKFIFO HAVE_MKDIRAT HAVE_LSTAT HAVE_LCHMOD HAVE_GETUMASK HAVE_FUTIMENS HAVE_FSTATAT HAVE_FCHMODAT GL_COND_OBJ_FREE_FALSE GL_COND_OBJ_FREE_TRUE NEXT_AS_FIRST_DIRECTIVE_FCNTL_H NEXT_FCNTL_H GL_GNULIB_MDA_OPEN GL_GNULIB_MDA_CREAT GL_GNULIB_OPENAT GL_GNULIB_OPEN GL_GNULIB_NONBLOCKING GL_GNULIB_FCNTL GL_GNULIB_CREAT GL_COND_OBJ_FCNTL_FALSE GL_COND_OBJ_FCNTL_TRUE REPLACE_OPENAT REPLACE_OPEN REPLACE_FCNTL REPLACE_CREAT HAVE_OPENAT HAVE_FCNTL GL_COND_OBJ_ERROR_FALSE GL_COND_OBJ_ERROR_TRUE REPLACE_ERROR_AT_LINE REPLACE_ERROR HAVE_ERROR_AT_LINE HAVE_ERROR HAVE_ERROR_H NEXT_AS_FIRST_DIRECTIVE_ERROR_H NEXT_ERROR_H GL_GENERATE_ERRNO_H_FALSE GL_GENERATE_ERRNO_H_TRUE ERRNO_H EOVERFLOW_VALUE EOVERFLOW_HIDDEN ENOLINK_VALUE ENOLINK_HIDDEN EMULTIHOP_VALUE EMULTIHOP_HIDDEN NEXT_AS_FIRST_DIRECTIVE_ERRNO_H NEXT_ERRNO_H GL_COND_OBJ_DUP2_FALSE GL_COND_OBJ_DUP2_TRUE GL_GNULIB_MDA_WRITE GL_GNULIB_MDA_UNLINK GL_GNULIB_MDA_SWAB GL_GNULIB_MDA_RMDIR GL_GNULIB_MDA_READ GL_GNULIB_MDA_LSEEK GL_GNULIB_MDA_ISATTY GL_GNULIB_MDA_GETPID GL_GNULIB_MDA_GETCWD GL_GNULIB_MDA_EXECVPE GL_GNULIB_MDA_EXECVP GL_GNULIB_MDA_EXECVE GL_GNULIB_MDA_EXECV GL_GNULIB_MDA_EXECLP GL_GNULIB_MDA_EXECLE GL_GNULIB_MDA_EXECL GL_GNULIB_MDA_DUP2 GL_GNULIB_MDA_DUP GL_GNULIB_MDA_CLOSE GL_GNULIB_MDA_CHDIR GL_GNULIB_MDA_ACCESS GL_GNULIB_WRITE GL_GNULIB_USLEEP GL_GNULIB_UNLINKAT GL_GNULIB_UNLINK GL_GNULIB_UNISTD_H_SIGPIPE GL_GNULIB_UNISTD_H_NONBLOCKING GL_GNULIB_UNISTD_H_GETOPT GL_GNULIB_TTYNAME_R GL_GNULIB_TRUNCATE GL_GNULIB_SYMLINKAT GL_GNULIB_SYMLINK GL_GNULIB_SLEEP GL_GNULIB_SETHOSTNAME GL_GNULIB_RMDIR GL_GNULIB_READLINKAT GL_GNULIB_READLINK GL_GNULIB_READ GL_GNULIB_PWRITE GL_GNULIB_PREAD GL_GNULIB_PIPE2 GL_GNULIB_PIPE GL_GNULIB_LSEEK GL_GNULIB_LINKAT GL_GNULIB_LINK GL_GNULIB_LCHOWN GL_GNULIB_ISATTY GL_GNULIB_GROUP_MEMBER GL_GNULIB_GETUSERSHELL GL_GNULIB_GETPASS_GNU GL_GNULIB_GETPASS GL_GNULIB_GETPAGESIZE GL_GNULIB_GETOPT_POSIX GL_GNULIB_GETLOGIN_R GL_GNULIB_GETLOGIN GL_GNULIB_GETHOSTNAME GL_GNULIB_GETGROUPS GL_GNULIB_GETENTROPY GL_GNULIB_GETDTABLESIZE GL_GNULIB_GETDOMAINNAME GL_GNULIB_GETCWD GL_GNULIB_FTRUNCATE GL_GNULIB_FSYNC GL_GNULIB_FDATASYNC GL_GNULIB_FCHOWNAT GL_GNULIB_FCHDIR GL_GNULIB_FACCESSAT GL_GNULIB_EXECVPE GL_GNULIB_EXECVP GL_GNULIB_EXECVE GL_GNULIB_EXECV GL_GNULIB_EXECLP GL_GNULIB_EXECLE GL_GNULIB_EXECL GL_GNULIB_EUIDACCESS GL_GNULIB_ENVIRON GL_GNULIB_DUP3 GL_GNULIB_DUP2 GL_GNULIB_DUP GL_GNULIB_COPY_FILE_RANGE GL_GNULIB_CLOSE GL_GNULIB_CHOWN GL_GNULIB_CHDIR GL_GNULIB_ACCESS GL_COND_OBJ_CLOSE_FALSE GL_COND_OBJ_CLOSE_TRUE HAVE_WINSOCK2_H HAVE_MSVC_INVALID_PARAMETER_HANDLER UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS UNISTD_H_HAVE_WINSOCK2_H UNISTD_H_HAVE_SYS_RANDOM_H REPLACE_WRITE REPLACE_USLEEP REPLACE_UNLINKAT REPLACE_UNLINK REPLACE_TTYNAME_R REPLACE_TRUNCATE REPLACE_SYMLINKAT REPLACE_SYMLINK REPLACE_SLEEP REPLACE_SETHOSTNAME REPLACE_RMDIR REPLACE_READLINKAT REPLACE_READLINK REPLACE_READ REPLACE_PWRITE REPLACE_PREAD REPLACE_PIPE2 REPLACE_LSEEK REPLACE_LINKAT REPLACE_LINK REPLACE_LCHOWN REPLACE_ISATTY REPLACE_GETPASS_FOR_GETPASS_GNU REPLACE_GETPASS REPLACE_GETPAGESIZE REPLACE_GETGROUPS REPLACE_GETLOGIN_R REPLACE_GETENTROPY REPLACE_GETDTABLESIZE REPLACE_GETDOMAINNAME REPLACE_GETCWD REPLACE_FTRUNCATE REPLACE_FDATASYNC REPLACE_FCHOWNAT REPLACE_FACCESSAT REPLACE_EXECVPE REPLACE_EXECVP REPLACE_EXECVE REPLACE_EXECV REPLACE_EXECLP REPLACE_EXECLE REPLACE_EXECL REPLACE_DUP3 REPLACE_DUP2 REPLACE_DUP REPLACE_COPY_FILE_RANGE REPLACE_CLOSE REPLACE_CHOWN REPLACE_ACCESS HAVE_SYS_PARAM_H HAVE_OS_H HAVE_DECL_TTYNAME_R HAVE_DECL_TRUNCATE HAVE_DECL_SETHOSTNAME HAVE_DECL_GETUSERSHELL HAVE_DECL_GETPAGESIZE HAVE_DECL_GETLOGIN_R HAVE_DECL_GETLOGIN HAVE_DECL_GETDOMAINNAME HAVE_DECL_FDATASYNC HAVE_DECL_FCHDIR HAVE_DECL_EXECVPE HAVE_DECL_ENVIRON HAVE_USLEEP HAVE_UNLINKAT HAVE_SYMLINKAT HAVE_SYMLINK HAVE_SLEEP HAVE_SETHOSTNAME HAVE_READLINKAT HAVE_READLINK HAVE_PWRITE HAVE_PREAD HAVE_PIPE2 HAVE_PIPE HAVE_LINKAT HAVE_LINK HAVE_LCHOWN HAVE_GROUP_MEMBER HAVE_GETPASS HAVE_GETPAGESIZE HAVE_GETLOGIN HAVE_GETHOSTNAME HAVE_GETGROUPS HAVE_GETENTROPY HAVE_GETDTABLESIZE HAVE_FTRUNCATE HAVE_FSYNC HAVE_FDATASYNC HAVE_FCHOWNAT HAVE_FCHDIR HAVE_FACCESSAT HAVE_EXECVPE HAVE_EUIDACCESS HAVE_DUP3 HAVE_COPY_FILE_RANGE HAVE_CHOWN REPLACE_WCTOMB REPLACE_UNSETENV REPLACE_STRTOULL REPLACE_STRTOUL REPLACE_STRTOLL REPLACE_STRTOLD REPLACE_STRTOL REPLACE_STRTOD REPLACE_SETSTATE REPLACE_SETENV REPLACE_REALPATH REPLACE_REALLOCARRAY REPLACE_REALLOC_FOR_REALLOC_POSIX REPLACE_REALLOC_FOR_REALLOC_GNU REPLACE_RANDOM_R REPLACE_RANDOM REPLACE_QSORT_R REPLACE_PUTENV REPLACE_PTSNAME_R REPLACE_PTSNAME REPLACE_POSIX_OPENPT REPLACE_POSIX_MEMALIGN REPLACE_MKSTEMP REPLACE_MKOSTEMPS REPLACE_MKOSTEMP REPLACE_MBTOWC REPLACE_MBSTOWCS REPLACE_MB_CUR_MAX REPLACE_MALLOC_FOR_MALLOC_POSIX REPLACE_MALLOC_FOR_MALLOC_GNU REPLACE_INITSTATE REPLACE_GETSUBOPT REPLACE_GETPROGNAME REPLACE_GETLOADAVG REPLACE_FREE REPLACE_CANONICALIZE_FILE_NAME REPLACE_CALLOC_FOR_CALLOC_POSIX REPLACE_CALLOC_FOR_CALLOC_GNU REPLACE_ALIGNED_ALLOC REPLACE__EXIT HAVE_DECL_UNSETENV HAVE_UNLOCKPT HAVE_SYS_LOADAVG_H HAVE_STRUCT_RANDOM_DATA HAVE_STRTOULL HAVE_STRTOUL HAVE_STRTOLL HAVE_STRTOLD HAVE_STRTOL HAVE_STRTOD HAVE_DECL_SETSTATE HAVE_SETSTATE HAVE_DECL_SETENV HAVE_SETENV HAVE_SECURE_GETENV HAVE_RPMATCH HAVE_REALPATH HAVE_REALLOCARRAY HAVE_RANDOM_R HAVE_RANDOM_H HAVE_RANDOM HAVE_QSORT_R HAVE_PTSNAME_R HAVE_PTSNAME HAVE_POSIX_OPENPT HAVE_POSIX_MEMALIGN HAVE_MKSTEMPS HAVE_MKSTEMP HAVE_MKOSTEMPS HAVE_MKOSTEMP HAVE_MKDTEMP HAVE_MBTOWC HAVE_DECL_INITSTATE HAVE_INITSTATE HAVE_GRANTPT HAVE_GETSUBOPT HAVE_GETPROGNAME HAVE_DECL_PROGRAM_INVOCATION_NAME HAVE_DECL_GETLOADAVG HAVE_DECL_GCVT HAVE_DECL_FCVT HAVE_DECL_ECVT HAVE_CANONICALIZE_FILE_NAME HAVE_ATOLL HAVE_ALIGNED_ALLOC HAVE__EXIT GL_GNULIB_MDA_PUTENV GL_GNULIB_MDA_MKTEMP GL_GNULIB_MDA_GCVT GL_GNULIB_MDA_FCVT GL_GNULIB_MDA_ECVT GL_GNULIB_WCTOMB GL_GNULIB_UNSETENV GL_GNULIB_UNLOCKPT GL_GNULIB_SYSTEM_POSIX GL_GNULIB_STRTOULL GL_GNULIB_STRTOUL GL_GNULIB_STRTOLL GL_GNULIB_STRTOLD GL_GNULIB_STRTOL GL_GNULIB_STRTOD GL_GNULIB_SETENV GL_GNULIB_SECURE_GETENV GL_GNULIB_RPMATCH GL_GNULIB_REALPATH GL_GNULIB_REALLOC_POSIX GL_GNULIB_REALLOC_GNU GL_GNULIB_REALLOCARRAY GL_GNULIB_RANDOM_R GL_GNULIB_RANDOM GL_GNULIB_QSORT_R GL_GNULIB_PUTENV GL_GNULIB_PTSNAME_R GL_GNULIB_PTSNAME GL_GNULIB_POSIX_OPENPT GL_GNULIB_POSIX_MEMALIGN GL_GNULIB_MKSTEMPS GL_GNULIB_MKSTEMP GL_GNULIB_MKOSTEMPS GL_GNULIB_MKOSTEMP GL_GNULIB_MKDTEMP GL_GNULIB_MBTOWC GL_GNULIB_MBSTOWCS GL_GNULIB_MALLOC_POSIX GL_GNULIB_MALLOC_GNU GL_GNULIB_GRANTPT GL_GNULIB_GETSUBOPT GL_GNULIB_GETPROGNAME GL_GNULIB_GETLOADAVG GL_GNULIB_FREE_POSIX GL_GNULIB_CANONICALIZE_FILE_NAME GL_GNULIB_CALLOC_POSIX GL_GNULIB_CALLOC_GNU GL_GNULIB_ATOLL GL_GNULIB_ALIGNED_ALLOC GL_GNULIB__EXIT GL_GNULIB_MDA_WCSDUP GL_GNULIB_WCSFTIME GL_GNULIB_WCSWIDTH GL_GNULIB_WCSTOK GL_GNULIB_WCSSTR GL_GNULIB_WCSPBRK GL_GNULIB_WCSSPN GL_GNULIB_WCSCSPN GL_GNULIB_WCSRCHR GL_GNULIB_WCSCHR GL_GNULIB_WCSDUP GL_GNULIB_WCSXFRM GL_GNULIB_WCSCOLL GL_GNULIB_WCSNCASECMP GL_GNULIB_WCSCASECMP GL_GNULIB_WCSNCMP GL_GNULIB_WCSCMP GL_GNULIB_WCSNCAT GL_GNULIB_WCSCAT GL_GNULIB_WCPNCPY GL_GNULIB_WCSNCPY GL_GNULIB_WCPCPY GL_GNULIB_WCSCPY GL_GNULIB_WCSNLEN GL_GNULIB_WCSLEN GL_GNULIB_WMEMSET GL_GNULIB_WMEMPCPY GL_GNULIB_WMEMMOVE GL_GNULIB_WMEMCPY GL_GNULIB_WMEMCMP GL_GNULIB_WMEMCHR GL_GNULIB_WCWIDTH GL_GNULIB_WCSNRTOMBS GL_GNULIB_WCSRTOMBS GL_GNULIB_WCRTOMB GL_GNULIB_MBSNRTOWCS GL_GNULIB_MBSRTOWCS GL_GNULIB_MBRLEN GL_GNULIB_MBRTOWC GL_GNULIB_MBSINIT GL_GNULIB_WCTOB GL_GNULIB_BTOWC GL_COND_OBJ_BTOWC_FALSE GL_COND_OBJ_BTOWC_TRUE LOCALE_FR REPLACE_WMEMPCPY REPLACE_WMEMCMP REPLACE_WCSTOK REPLACE_WCSSTR REPLACE_WCSNCMP REPLACE_WCSCMP REPLACE_WCSFTIME REPLACE_WCSWIDTH REPLACE_WCWIDTH REPLACE_WCSNRTOMBS REPLACE_WCSRTOMBS REPLACE_WCRTOMB REPLACE_MBSNRTOWCS REPLACE_MBSRTOWCS REPLACE_MBRLEN REPLACE_MBRTOWC REPLACE_MBSINIT REPLACE_WCTOB REPLACE_BTOWC REPLACE_MBSTATE_T HAVE_DECL_WCWIDTH HAVE_DECL_WCSDUP HAVE_DECL_WCTOB HAVE_WCSFTIME HAVE_WCSWIDTH HAVE_WCSTOK HAVE_WCSSTR HAVE_WCSPBRK HAVE_WCSSPN HAVE_WCSCSPN HAVE_WCSRCHR HAVE_WCSCHR HAVE_WCSDUP HAVE_WCSXFRM HAVE_WCSCOLL HAVE_WCSNCASECMP HAVE_WCSCASECMP HAVE_WCSNCMP HAVE_WCSCMP HAVE_WCSNCAT HAVE_WCSCAT HAVE_WCPNCPY HAVE_WCSNCPY HAVE_WCPCPY HAVE_WCSCPY HAVE_WCSNLEN HAVE_WCSLEN HAVE_WMEMSET HAVE_WMEMPCPY HAVE_WMEMMOVE HAVE_WMEMCPY HAVE_WMEMCMP HAVE_WMEMCHR HAVE_WCSNRTOMBS HAVE_WCSRTOMBS HAVE_WCRTOMB HAVE_MBSNRTOWCS HAVE_MBSRTOWCS HAVE_MBRLEN HAVE_MBRTOWC HAVE_MBSINIT HAVE_BTOWC GL_GENERATE_ASSERT_H_FALSE GL_GENERATE_ASSERT_H_TRUE ASSERT_H NEXT_AS_FIRST_DIRECTIVE_ASSERT_H NEXT_ASSERT_H PRAGMA_COLUMNS PRAGMA_SYSTEM_HEADER INCLUDE_NEXT_AS_FIRST_DIRECTIVE INCLUDE_NEXT GL_GENERATE_ALLOCA_H_FALSE GL_GENERATE_ALLOCA_H_TRUE ALLOCA_H HAVE_ALLOCA_H GL_COND_LIBTOOL_FALSE GL_COND_LIBTOOL_TRUE ALLOCA LIBOBJS LEXLIB LEX_OUTPUT_ROOT LEX YFLAGS YACC RANLIB ARFLAGS AR EGREP GREP CPP host_os host_vendor host_cpu host build_os build_vendor build_cpu build am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V CSCOPE ETAGS CTAGS 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 runstatedir 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 am__quote' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_dependency_tracking enable_largefile enable_threads enable_cross_guesses with_included_regex with_gnu_ld enable_rpath with_libiconv_prefix enable_nls with_libintl_prefix with_default_config enable_year2038 ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP YACC YFLAGS' # 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' runstatedir='${localstatedir}/run' 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 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=`printf "%s\n" "$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=`printf "%s\n" "$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 ;; -runstatedir | --runstatedir | --runstatedi | --runstated \ | --runstate | --runstat | --runsta | --runst | --runs \ | --run | --ru | --r) ac_prev=runstatedir ;; -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ | --run=* | --ru=* | --r=*) runstatedir=$ac_optarg ;; -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=`printf "%s\n" "$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=`printf "%s\n" "$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. printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && printf "%s\n" "$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" ;; *) printf "%s\n" "$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 runstatedir 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 || printf "%s\n" 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 rush 2.4 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] --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --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/rush] --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 rush 2.4:";; 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-largefile omit support for large files --enable-threads={isoc|posix|isoc+posix|windows} specify multithreading API --disable-threads build without multithread safety --enable-cross-guesses={conservative|risky} specify policy for cross-compilation guesses --disable-rpath do not hardcode runtime library paths --disable-nls do not use Native Language Support --enable-year2038 support timestamps after 2038 Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --without-included-regex don't compile regex; this is the default on systems with recent-enough versions of the GNU C Library (use with caution on other systems). --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-default-config=FILE read the default configuration from FILE 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. 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-rush@gnu.org>. GNU rush home page: <https://www.gnu.org.ua/software/rush/>. General help using GNU software: <https://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=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$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 configure.gnu first; this name is used for a wrapper for # Metaconfig's "Configure" on case-insensitive file systems. 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 printf "%s\n" "$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 rush configure 2.4 generated by GNU Autoconf 2.71 Copyright (C) 2021 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 conftest.beam 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\"" printf "%s\n" "$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 printf "%s\n" "$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_nop printf "%s\n" "$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_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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 else $as_nop 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 $as_nop eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # 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\"" printf "%s\n" "$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 printf "%s\n" "$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_nop printf "%s\n" "$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_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.beam 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\"" printf "%s\n" "$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 printf "%s\n" "$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_nop printf "%s\n" "$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_type LINENO TYPE VAR INCLUDES # ------------------------------------------- # Tests whether TYPE exists after having included INCLUDES, setting cache # variable VAR accordingly. ac_fn_c_check_type () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 else $as_nop eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main (void) { if (sizeof ($2)) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main (void) { if (sizeof (($2))) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else $as_nop eval "$3=yes" fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_type # ac_fn_c_try_run LINENO # ---------------------- # Try to run 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\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$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\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; } then : ac_retval=0 else $as_nop printf "%s\n" "$as_me: program exited with status $ac_status" >&5 printf "%s\n" "$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_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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 else $as_nop 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. */ #include <limits.h> #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 (void) { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : eval "$3=yes" else $as_nop eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func # ac_fn_c_compute_int LINENO EXPR VAR INCLUDES # -------------------------------------------- # Tries to find the compile-time value of EXPR in a program that includes # INCLUDES, setting VAR accordingly. Returns whether the value could be # computed ac_fn_c_compute_int () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main (void) { static int test_array [1 - 2 * !(($2) >= 0)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_lo=0 ac_mid=0 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main (void) { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_hi=$ac_mid; break else $as_nop as_fn_arith $ac_mid + 1 && ac_lo=$as_val if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main (void) { static int test_array [1 - 2 * !(($2) < 0)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_hi=-1 ac_mid=-1 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main (void) { static int test_array [1 - 2 * !(($2) >= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_lo=$ac_mid; break else $as_nop as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done else $as_nop ac_lo= ac_hi= fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main (void) { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_hi=$ac_mid else $as_nop as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done case $ac_lo in #(( ?*) eval "$3=\$ac_lo"; ac_retval=0 ;; '') ac_retval=1 ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 static long int longval (void) { return $2; } static unsigned long int ulongval (void) { return $2; } #include <stdio.h> #include <stdlib.h> int main (void) { FILE *f = fopen ("conftest.val", "w"); if (! f) return 1; if (($2) < 0) { long int i = longval (); if (i != ($2)) return 1; fprintf (f, "%ld", i); } else { unsigned long int i = ulongval (); if (i != ($2)) return 1; fprintf (f, "%lu", i); } /* Do not output a trailing newline, as this causes \r\n confusion on some platforms. */ return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : echo >>conftest.val; read $3 <conftest.val; ac_retval=0 else $as_nop ac_retval=1 fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext rm -f conftest.val fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_compute_int # ac_fn_check_decl LINENO SYMBOL VAR INCLUDES EXTRA-OPTIONS FLAG-VAR # ------------------------------------------------------------------ # Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR # accordingly. Pass EXTRA-OPTIONS to the compiler, using FLAG-VAR. ac_fn_check_decl () { ac_save_ac_compile="$ac_compile" if test -n "$ac_compile_for_check_decl"; then ac_compile="$ac_compile_for_check_decl" fi as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack as_decl_name=`echo $2|sed 's/ *(.*//'` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5 printf %s "checking whether $as_decl_name is declared... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 else $as_nop as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'` eval ac_save_FLAGS=\$$6 as_fn_append $6 " $5" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main (void) { #ifndef $as_decl_name #ifdef __cplusplus (void) $as_decl_use; #else (void) $as_decl_name; #endif #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$3=yes" else $as_nop eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext eval $6=\$ac_save_FLAGS fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno ac_compile="$ac_save_ac_compile" } # ac_fn_check_decl # ac_fn_c_check_member LINENO AGGR MEMBER VAR INCLUDES # ---------------------------------------------------- # Tries to find if the field MEMBER exists in type AGGR, after including # INCLUDES, setting cache variable VAR accordingly. ac_fn_c_check_member () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5 printf %s "checking for $2.$3... " >&6; } if eval test \${$4+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $5 int main (void) { static $2 ac_aggr; if (ac_aggr.$3) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$4=yes" else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $5 int main (void) { static $2 ac_aggr; if (sizeof ac_aggr.$3) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$4=yes" else $as_nop eval "$4=no" fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi eval ac_res=\$$4 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_member ac_configure_args_raw= for ac_arg do case $ac_arg in *\'*) ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append ac_configure_args_raw " '$ac_arg'" done case $ac_configure_args_raw in *$as_nl*) ac_safe_unquote= ;; *) ac_unsafe_z='|&;<>()$`\\"*?[ '' ' # This string ends in space, tab. ac_unsafe_a="$ac_unsafe_z#~" ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g" ac_configure_args_raw=` printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;; esac 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 rush $as_me 2.4, which was generated by GNU Autoconf 2.71. Invocation command line was $ $0$ac_configure_args_raw _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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac printf "%s\n" "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=`printf "%s\n" "$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=$? # Sanitize IFS. IFS=" "" $as_nl" # Save into config.log some information that might help in debugging. { echo printf "%s\n" "## ---------------- ## ## 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_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 printf "%s\n" "$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 printf "%s\n" "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then printf "%s\n" "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then printf "%s\n" "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && printf "%s\n" "$as_me: caught signal $ac_signal" printf "%s\n" "$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 printf "%s\n" "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. printf "%s\n" "#define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h printf "%s\n" "#define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h printf "%s\n" "#define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h printf "%s\n" "#define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h printf "%s\n" "#define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h printf "%s\n" "#define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. if test -n "$CONFIG_SITE"; then ac_site_files="$CONFIG_SITE" elif test "x$prefix" != xNONE; then ac_site_files="$prefix/share/config.site $prefix/etc/config.site" else ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi for ac_site_file in $ac_site_files do case $ac_site_file in #( */*) : ;; #( *) : ac_site_file=./$ac_site_file ;; esac if test -f "$ac_site_file" && test -r "$ac_site_file"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 printf "%s\n" "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 printf "%s\n" "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Test code for whether the C compiler supports C89 (global declarations) ac_c_conftest_c89_globals=' /* Does the compiler advertise C89 conformance? Do not test the value of __STDC__, because some compilers set it to 0 while being otherwise adequately conformant. */ #if !defined __STDC__ # error "Compiler does not advertise C89 conformance" #endif #include <stddef.h> #include <stdarg.h> struct stat; /* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */ struct buf { int x; }; struct buf * (*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 do not provoke an error unfortunately, instead are silently treated as an "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 is necessary to write \x00 == 0 to get something that is 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 **, int *(*)(struct buf *, struct stat *, int), int, int);' # Test code for whether the C compiler supports C89 (body of main). ac_c_conftest_c89_main=' ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]); ' # Test code for whether the C compiler supports C99 (global declarations) ac_c_conftest_c99_globals=' // Does the compiler advertise C99 conformance? #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L # error "Compiler does not advertise C99 conformance" #endif #include <stdbool.h> extern int puts (const char *); extern int printf (const char *, ...); extern int dprintf (int, const char *, ...); extern void *malloc (size_t); // Check varargs macros. These examples are taken from C99 6.10.3.5. // dprintf is used instead of fprintf to avoid needing to declare // FILE and stderr. #define debug(...) dprintf (2, __VA_ARGS__) #define showlist(...) puts (#__VA_ARGS__) #define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) static void test_varargs_macros (void) { int x = 1234; int y = 5678; debug ("Flag"); debug ("X = %d\n", x); showlist (The first, second, and third items.); report (x>y, "x is %d but y is %d", x, y); } // Check long long types. #define BIG64 18446744073709551615ull #define BIG32 4294967295ul #define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) #if !BIG_OK #error "your preprocessor is broken" #endif #if BIG_OK #else #error "your preprocessor is broken" #endif static long long int bignum = -9223372036854775807LL; static unsigned long long int ubignum = BIG64; struct incomplete_array { int datasize; double data[]; }; struct named_init { int number; const wchar_t *name; double average; }; typedef const char *ccp; static inline int test_restrict (ccp restrict text) { // See if C++-style comments work. // Iterate through items via the restricted pointer. // Also check for declarations in for loops. for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i) continue; return 0; } // Check varargs and va_copy. static bool test_varargs (const char *format, ...) { va_list args; va_start (args, format); va_list args_copy; va_copy (args_copy, args); const char *str = ""; int number = 0; float fnumber = 0; while (*format) { switch (*format++) { case '\''s'\'': // string str = va_arg (args_copy, const char *); break; case '\''d'\'': // int number = va_arg (args_copy, int); break; case '\''f'\'': // float fnumber = va_arg (args_copy, double); break; default: break; } } va_end (args_copy); va_end (args); return *str && number && fnumber; } ' # Test code for whether the C compiler supports C99 (body of main). ac_c_conftest_c99_main=' // Check bool. _Bool success = false; success |= (argc != 0); // Check restrict. if (test_restrict ("String literal") == 0) success = true; char *restrict newvar = "Another string"; // Check varargs. success &= test_varargs ("s, d'\'' f .", "string", 65, 34.234); test_varargs_macros (); // Check flexible array members. struct incomplete_array *ia = malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); ia->datasize = 10; for (int i = 0; i < ia->datasize; ++i) ia->data[i] = i * 1.234; // Check named initializers. struct named_init ni = { .number = 34, .name = L"Test wide string", .average = 543.34343, }; ni.number = 58; int dynamic_array[ni.number]; dynamic_array[0] = argv[0][0]; dynamic_array[ni.number - 1] = 543; // work around unused variable warnings ok |= (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == '\''x'\'' || dynamic_array[ni.number - 1] != 543); ' # Test code for whether the C compiler supports C11 (global declarations) ac_c_conftest_c11_globals=' // Does the compiler advertise C11 conformance? #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L # error "Compiler does not advertise C11 conformance" #endif // Check _Alignas. char _Alignas (double) aligned_as_double; char _Alignas (0) no_special_alignment; extern char aligned_as_int; char _Alignas (0) _Alignas (int) aligned_as_int; // Check _Alignof. enum { int_alignment = _Alignof (int), int_array_alignment = _Alignof (int[100]), char_alignment = _Alignof (char) }; _Static_assert (0 < -_Alignof (int), "_Alignof is signed"); // Check _Noreturn. int _Noreturn does_not_return (void) { for (;;) continue; } // Check _Static_assert. struct test_static_assert { int x; _Static_assert (sizeof (int) <= sizeof (long int), "_Static_assert does not work in struct"); long int y; }; // Check UTF-8 literals. #define u8 syntax error! char const utf8_literal[] = u8"happens to be ASCII" "another string"; // Check duplicate typedefs. typedef long *long_ptr; typedef long int *long_ptr; typedef long_ptr long_ptr; // Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1. struct anonymous { union { struct { int i; int j; }; struct { int k; long int l; } w; }; int m; } v1; ' # Test code for whether the C compiler supports C11 (body of main). ac_c_conftest_c11_main=' _Static_assert ((offsetof (struct anonymous, i) == offsetof (struct anonymous, w.k)), "Anonymous union alignment botch"); v1.i = 2; v1.w.k = 5; ok |= v1.i != 5; ' # Test code for whether the C compiler supports C11 (complete). ac_c_conftest_c11_program="${ac_c_conftest_c89_globals} ${ac_c_conftest_c99_globals} ${ac_c_conftest_c11_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} ${ac_c_conftest_c99_main} ${ac_c_conftest_c11_main} return ok; } " # Test code for whether the C compiler supports C99 (complete). ac_c_conftest_c99_program="${ac_c_conftest_c89_globals} ${ac_c_conftest_c99_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} ${ac_c_conftest_c99_main} return ok; } " # Test code for whether the C compiler supports C89 (complete). ac_c_conftest_c89_program="${ac_c_conftest_c89_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} return ok; } " as_fn_append ac_header_c_list " stdio.h stdio_h HAVE_STDIO_H" as_fn_append ac_header_c_list " stdlib.h stdlib_h HAVE_STDLIB_H" as_fn_append ac_header_c_list " string.h string_h HAVE_STRING_H" as_fn_append ac_header_c_list " inttypes.h inttypes_h HAVE_INTTYPES_H" as_fn_append ac_header_c_list " stdint.h stdint_h HAVE_STDINT_H" as_fn_append ac_header_c_list " strings.h strings_h HAVE_STRINGS_H" as_fn_append ac_header_c_list " sys/stat.h sys_stat_h HAVE_SYS_STAT_H" as_fn_append ac_header_c_list " sys/types.h sys_types_h HAVE_SYS_TYPES_H" as_fn_append ac_header_c_list " unistd.h unistd_h HAVE_UNISTD_H" as_fn_append ac_header_c_list " wchar.h wchar_h HAVE_WCHAR_H" as_fn_append ac_header_c_list " minix/config.h minix_config_h HAVE_MINIX_CONFIG_H" as_fn_append ac_func_c_list " btowc HAVE_BTOWC" as_fn_append ac_func_c_list " mbrtowc HAVE_MBRTOWC" as_fn_append ac_func_c_list " _set_invalid_parameter_handler HAVE__SET_INVALID_PARAMETER_HANDLER" as_fn_append ac_header_c_list " sys/socket.h sys_socket_h HAVE_SYS_SOCKET_H" as_fn_append ac_header_c_list " error.h error_h HAVE_ERROR_H" as_fn_append ac_func_c_list " fcntl HAVE_FCNTL" as_fn_append ac_func_c_list " symlink HAVE_SYMLINK" as_fn_append ac_func_c_list " getdtablesize HAVE_GETDTABLESIZE" gl_getopt_required=GNU as_fn_append ac_header_c_list " getopt.h getopt_h HAVE_GETOPT_H" as_fn_append ac_header_c_list " sys/cdefs.h sys_cdefs_h HAVE_SYS_CDEFS_H" as_fn_append ac_func_c_list " getexecname HAVE_GETEXECNAME" as_fn_append ac_header_c_list " threads.h threads_h HAVE_THREADS_H" as_fn_append ac_header_c_list " limits.h limits_h HAVE_LIMITS_H" as_fn_append ac_header_c_list " langinfo.h langinfo_h HAVE_LANGINFO_H" as_fn_append ac_header_c_list " xlocale.h xlocale_h HAVE_XLOCALE_H" as_fn_append ac_func_c_list " mbsinit HAVE_MBSINIT" as_fn_append ac_func_c_list " lstat HAVE_LSTAT" as_fn_append ac_header_c_list " sys/param.h sys_param_h HAVE_SYS_PARAM_H" as_fn_append ac_header_c_list " malloc.h malloc_h HAVE_MALLOC_H" as_fn_append ac_func_c_list " isblank HAVE_ISBLANK" as_fn_append ac_func_c_list " iswctype HAVE_ISWCTYPE" as_fn_append ac_func_c_list " setenv HAVE_SETENV" as_fn_append ac_header_c_list " sys/time.h sys_time_h HAVE_SYS_TIME_H" as_fn_append ac_header_c_list " stdbool.h stdbool_h HAVE_STDBOOL_H" as_fn_append ac_header_c_list " stdckdint.h stdckdint_h HAVE_STDCKDINT_H" as_fn_append ac_func_c_list " localtime_r HAVE_LOCALTIME_R" as_fn_append ac_header_c_list " features.h features_h HAVE_FEATURES_H" as_fn_append ac_header_c_list " crtdefs.h crtdefs_h HAVE_CRTDEFS_H" as_fn_append ac_func_c_list " wcrtomb HAVE_WCRTOMB" as_fn_append ac_func_c_list " iswcntrl HAVE_ISWCNTRL" as_fn_append ac_header_c_list " wctype.h wctype_h HAVE_WCTYPE_H" gt_needs="$gt_needs need-formatstring-macros" # Auxiliary files required by this configure script. ac_aux_files="config.rpath config.guess config.sub compile missing install-sh" # Locations in which to look for auxiliary files. ac_aux_dir_candidates="${srcdir}/build-aux" # Search for a directory containing all of the required auxiliary files, # $ac_aux_files, from the $PATH-style list $ac_aux_dir_candidates. # If we don't find one directory that contains all the files we need, # we report the set of missing files from the *first* directory in # $ac_aux_dir_candidates and give up. ac_missing_aux_files="" ac_first_candidate=: printf "%s\n" "$as_me:${as_lineno-$LINENO}: looking for aux files: $ac_aux_files" >&5 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in $ac_aux_dir_candidates do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac as_found=: printf "%s\n" "$as_me:${as_lineno-$LINENO}: trying $as_dir" >&5 ac_aux_dir_found=yes ac_install_sh= for ac_aux in $ac_aux_files do # As a special case, if "install-sh" is required, that requirement # can be satisfied by any of "install-sh", "install.sh", or "shtool", # and $ac_install_sh is set appropriately for whichever one is found. if test x"$ac_aux" = x"install-sh" then if test -f "${as_dir}install-sh"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install-sh found" >&5 ac_install_sh="${as_dir}install-sh -c" elif test -f "${as_dir}install.sh"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install.sh found" >&5 ac_install_sh="${as_dir}install.sh -c" elif test -f "${as_dir}shtool"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}shtool found" >&5 ac_install_sh="${as_dir}shtool install -c" else ac_aux_dir_found=no if $ac_first_candidate; then ac_missing_aux_files="${ac_missing_aux_files} install-sh" else break fi fi else if test -f "${as_dir}${ac_aux}"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}${ac_aux} found" >&5 else ac_aux_dir_found=no if $ac_first_candidate; then ac_missing_aux_files="${ac_missing_aux_files} ${ac_aux}" else break fi fi fi done if test "$ac_aux_dir_found" = yes; then ac_aux_dir="$as_dir" break fi ac_first_candidate=false as_found=false done IFS=$as_save_IFS if $as_found then : else $as_nop as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$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. if test -f "${ac_aux_dir}config.guess"; then ac_config_guess="$SHELL ${ac_aux_dir}config.guess" fi if test -f "${ac_aux_dir}config.sub"; then ac_config_sub="$SHELL ${ac_aux_dir}config.sub" fi if test -f "$ac_aux_dir/configure"; then ac_configure="$SHELL ${ac_aux_dir}configure" fi # 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,) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 printf "%s\n" "$as_me: former value: \`$ac_old_val'" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 printf "%s\n" "$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=`printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`${MAKE-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" am__api_version='1.16' # 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. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 printf %s "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if test ${ac_cv_path_install+y} then : printf %s "(cached) " >&6 else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac # Account for fact that we put trailing slashes in our PATH walk. 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+y}; 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 printf "%s\n" "$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' { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 printf %s "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "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=`printf "%s\n" "$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 MISSING="\${SHELL} '$am_aux_dir/missing'" fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_STRIP+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 printf "%s\n" "$STRIP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_STRIP+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 printf "%s\n" "$ac_ct_STRIP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$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" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a race-free mkdir -p" >&5 printf %s "checking for a race-free mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if test ${ac_cv_path_mkdir+y} then : printf %s "(cached) " >&6 else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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 ('*'coreutils) '* | \ 'BusyBox '* | \ '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+y}; 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_AWK+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 printf "%s\n" "$AWK" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$AWK" && break done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 printf %s "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`printf "%s\n" "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval test \${ac_cv_prog_make_${ac_make}_set+y} then : printf %s "(cached) " >&6 else $as_nop 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } SET_MAKE= else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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+y} 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} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 printf %s "checking whether $am_make supports nested variables... " >&6; } if test ${am_cv_make_support_nested_variables+y} then : printf %s "(cached) " >&6 else $as_nop if printf "%s\n" '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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 printf "%s\n" "$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='rush' VERSION='2.4' printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h printf "%s\n" "#define VERSION \"$VERSION\"" >>confdefs.h # 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: # <https://lists.gnu.org/archive/html/automake/2012-07/msg00001.html> # <https://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` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether UID '$am_uid' is supported by ustar format" >&5 printf %s "checking whether UID '$am_uid' is supported by ustar format... " >&6; } if test $am_uid -le $am_max_uid; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } _am_tools=none fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether GID '$am_gid' is supported by ustar format" >&5 printf %s "checking whether GID '$am_gid' is supported by ustar format... " >&6; } if test $am_gid -le $am_max_gid; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } _am_tools=none fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to create a ustar tar archive" >&5 printf %s "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 test ${am_cv_prog_tar_ustar+y} then : printf %s "(cached) " >&6 else $as_nop am_cv_prog_tar_ustar=$_am_tool fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_tar_ustar" >&5 printf "%s\n" "$am_cv_prog_tar_ustar" >&6; } # Variables for tags utilities; see am/tags.am if test -z "$CTAGS"; then CTAGS=ctags fi if test -z "$ETAGS"; then ETAGS=etags fi if test -z "$CSCOPE"; then CSCOPE=cscope fi # 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: <https://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+y} 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} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 printf %s "checking whether $am_make supports nested variables... " >&6; } if test ${am_cv_make_support_nested_variables+y} then : printf %s "(cached) " >&6 else $as_nop if printf "%s\n" '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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 printf "%s\n" "$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. 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. set dummy ${ac_tool_prefix}clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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}clang" printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "clang", so it can be a program name with args. set dummy clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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="clang" printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$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 fi test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$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. printf "%s\n" "$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 -version; 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\"" printf "%s\n" "$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 printf "%s\n" "$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 (void) { ; 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. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 printf %s "checking whether the C compiler works... " >&6; } ac_link_default=`printf "%s\n" "$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\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? printf "%s\n" "$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+y} && 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 $as_nop ac_file='' fi if test -z "$ac_file" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$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_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 printf %s "checking for C compiler default output file name... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 printf %s "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\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$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_nop { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 printf "%s\n" "$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 (void) { 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. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 printf %s "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\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$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\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? printf "%s\n" "$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 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 printf "%s\n" "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 printf %s "checking for suffix of object files... " >&6; } if test ${ac_cv_objext+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; 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\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? printf "%s\n" "$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_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 printf "%s\n" "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 printf %s "checking whether the compiler supports GNU C... " >&6; } if test ${ac_cv_c_compiler_gnu+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_compiler_gnu=yes else $as_nop ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_c_compiler_gnu if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+y} ac_save_CFLAGS=$CFLAGS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 printf %s "checking whether $CC accepts -g... " >&6; } if test ${ac_cv_prog_cc_g+y} then : printf %s "(cached) " >&6 else $as_nop 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 (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes else $as_nop CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else $as_nop ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; 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.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 printf "%s\n" "$ac_cv_prog_cc_g" >&6; } if test $ac_test_CFLAGS; 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 ac_prog_cc_stdc=no if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 printf %s "checking for $CC option to enable C11 features... " >&6; } if test ${ac_cv_prog_cc_c11+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cc_c11=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c11_program _ACEOF for ac_arg in '' -std=gnu11 do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c11=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c11" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c11" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cc_c11" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } CC="$CC $ac_cv_prog_cc_c11" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 ac_prog_cc_stdc=c11 fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 printf %s "checking for $CC option to enable C99 features... " >&6; } if test ${ac_cv_prog_cc_c99+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c99_program _ACEOF for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c99=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c99" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cc_c99" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } CC="$CC $ac_cv_prog_cc_c99" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 ac_prog_cc_stdc=c99 fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 printf %s "checking for $CC option to enable C89 features... " >&6; } if test ${ac_cv_prog_cc_c89+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c89_program _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 conftest.beam test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c89" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cc_c89" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } CC="$CC $ac_cv_prog_cc_c89" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 ac_prog_cc_stdc=c89 fi 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 printf %s "checking whether $CC understands -c and -o together... " >&6; } if test ${am_cv_prog_cc_c_o+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler is clang" >&5 printf %s "checking whether the compiler is clang... " >&6; } if test ${gl_cv_compiler_clang+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __clang__ barfbarf #endif int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_compiler_clang=no else $as_nop gl_cv_compiler_clang=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_compiler_clang" >&5 printf "%s\n" "$gl_cv_compiler_clang" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for compiler option needed when checking for declarations" >&5 printf %s "checking for compiler option needed when checking for declarations... " >&6; } if test ${gl_cv_compiler_check_decl_option+y} then : printf %s "(cached) " >&6 else $as_nop if test $gl_cv_compiler_clang = yes; then save_ac_compile="$ac_compile" ac_compile="$ac_compile -Werror=implicit-function-declaration" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_compiler_check_decl_option='-Werror=implicit-function-declaration' else $as_nop gl_cv_compiler_check_decl_option=none fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_compile="$save_ac_compile" else gl_cv_compiler_check_decl_option=none fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_compiler_check_decl_option" >&5 printf "%s\n" "$gl_cv_compiler_check_decl_option" >&6; } if test "x$gl_cv_compiler_check_decl_option" != xnone; then ac_compile_for_check_decl="$ac_compile $gl_cv_compiler_check_decl_option" else ac_compile_for_check_decl="$ac_compile" fi DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} supports the include directive" >&5 printf %s "checking whether ${MAKE-make} supports the include directive... " >&6; } cat > confinc.mk << 'END' am__doit: @echo this is the am__doit target >confinc.out .PHONY: am__doit END am__include="#" am__quote= # BSD make does it like this. echo '.include "confinc.mk" # ignored' > confmf.BSD # Other make implementations (GNU, Solaris 10, AIX) do it like this. echo 'include confinc.mk # ignored' > confmf.GNU _am_result=no for s in GNU BSD; do { echo "$as_me:$LINENO: ${MAKE-make} -f confmf.$s && cat confinc.out" >&5 (${MAKE-make} -f confmf.$s && cat confinc.out) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } case $?:`cat confinc.out 2>/dev/null` in #( '0:this is the am__doit target') : case $s in #( BSD) : am__include='.include' am__quote='"' ;; #( *) : am__include='include' am__quote='' ;; esac ;; #( *) : ;; esac if test "$am__include" != "#"; then _am_result="yes ($s style)" break fi done rm -f confinc.* confmf.* { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${_am_result}" >&5 printf "%s\n" "${_am_result}" >&6; } # Check whether --enable-dependency-tracking was given. if test ${enable_dependency_tracking+y} 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= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 printf %s "checking dependency style of $depcc... " >&6; } if test ${am_cv_CC_dependencies_compiler_type+y} then : printf %s "(cached) " >&6 else $as_nop 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 printf "%s\n" "$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 ac_header= ac_cache= for ac_item in $ac_header_c_list do if test $ac_cache; then ac_fn_c_check_header_compile "$LINENO" $ac_header ac_cv_header_$ac_cache "$ac_includes_default" if eval test \"x\$ac_cv_header_$ac_cache\" = xyes; then printf "%s\n" "#define $ac_item 1" >> confdefs.h fi ac_header= ac_cache= elif test $ac_header; then ac_cache=$ac_item else ac_header=$ac_item fi done if test $ac_cv_header_stdlib_h = yes && test $ac_cv_header_string_h = yes then : printf "%s\n" "#define STDC_HEADERS 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5 printf %s "checking whether it is safe to define __EXTENSIONS__... " >&6; } if test ${ac_cv_safe_to_define___extensions__+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # define __EXTENSIONS__ 1 $ac_includes_default int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_safe_to_define___extensions__=yes else $as_nop ac_cv_safe_to_define___extensions__=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5 printf "%s\n" "$ac_cv_safe_to_define___extensions__" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether _XOPEN_SOURCE should be defined" >&5 printf %s "checking whether _XOPEN_SOURCE should be defined... " >&6; } if test ${ac_cv_should_define__xopen_source+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_should_define__xopen_source=no if test $ac_cv_header_wchar_h = yes then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <wchar.h> mbstate_t x; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _XOPEN_SOURCE 500 #include <wchar.h> mbstate_t x; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_should_define__xopen_source=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_should_define__xopen_source" >&5 printf "%s\n" "$ac_cv_should_define__xopen_source" >&6; } printf "%s\n" "#define _ALL_SOURCE 1" >>confdefs.h printf "%s\n" "#define _DARWIN_C_SOURCE 1" >>confdefs.h printf "%s\n" "#define _GNU_SOURCE 1" >>confdefs.h printf "%s\n" "#define _HPUX_ALT_XOPEN_SOCKET_API 1" >>confdefs.h printf "%s\n" "#define _NETBSD_SOURCE 1" >>confdefs.h printf "%s\n" "#define _OPENBSD_SOURCE 1" >>confdefs.h printf "%s\n" "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h printf "%s\n" "#define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1" >>confdefs.h printf "%s\n" "#define __STDC_WANT_IEC_60559_BFP_EXT__ 1" >>confdefs.h printf "%s\n" "#define __STDC_WANT_IEC_60559_DFP_EXT__ 1" >>confdefs.h printf "%s\n" "#define __STDC_WANT_IEC_60559_EXT__ 1" >>confdefs.h printf "%s\n" "#define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1" >>confdefs.h printf "%s\n" "#define __STDC_WANT_IEC_60559_TYPES_EXT__ 1" >>confdefs.h printf "%s\n" "#define __STDC_WANT_LIB_EXT2__ 1" >>confdefs.h printf "%s\n" "#define __STDC_WANT_MATH_SPEC_FUNCS__ 1" >>confdefs.h printf "%s\n" "#define _TANDEM_SOURCE 1" >>confdefs.h if test $ac_cv_header_minix_config_h = yes then : MINIX=yes printf "%s\n" "#define _MINIX 1" >>confdefs.h printf "%s\n" "#define _POSIX_SOURCE 1" >>confdefs.h printf "%s\n" "#define _POSIX_1_SOURCE 2" >>confdefs.h else $as_nop MINIX= fi if test $ac_cv_safe_to_define___extensions__ = yes then : printf "%s\n" "#define __EXTENSIONS__ 1" >>confdefs.h fi if test $ac_cv_should_define__xopen_source = yes then : printf "%s\n" "#define _XOPEN_SOURCE 500" >>confdefs.h fi # 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 printf %s "checking build system type... " >&6; } if test ${ac_cv_build+y} then : printf %s "(cached) " >&6 else $as_nop 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 printf %s "checking host system type... " >&6; } if test ${ac_cv_host+y} then : printf %s "(cached) " >&6 else $as_nop 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 printf "%s\n" "$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 case "$host_os" in openbsd*) printf "%s\n" "#define _ISOC11_SOURCE 1" >>confdefs.h ;; esac 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 printf %s "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 test ${ac_cv_prog_CPP+y} then : printf %s "(cached) " >&6 else $as_nop # Double quotes because $CC needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" 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. # 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. */ #include <limits.h> Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO" then : else $as_nop # 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 $as_nop # 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 printf "%s\n" "$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. # 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. */ #include <limits.h> Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO" then : else $as_nop # 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 $as_nop # 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_nop { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 printf %s "checking for grep that handles long lines and -e... " >&6; } if test ${ac_cv_path_GREP+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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 printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" printf "%s\n" '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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 printf "%s\n" "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 printf %s "checking for egrep... " >&6; } if test ${ac_cv_path_EGREP+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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 printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" printf "%s\n" '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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 printf "%s\n" "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Minix Amsterdam compiler" >&5 printf %s "checking for Minix Amsterdam compiler... " >&6; } if test ${gl_cv_c_amsterdam_compiler+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __ACK__ Amsterdam #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Amsterdam" >/dev/null 2>&1 then : gl_cv_c_amsterdam_compiler=yes else $as_nop gl_cv_c_amsterdam_compiler=no fi rm -rf conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_c_amsterdam_compiler" >&5 printf "%s\n" "$gl_cv_c_amsterdam_compiler" >&6; } if test $gl_cv_c_amsterdam_compiler = yes; then if test -z "$AR"; then AR='cc -c.a' fi if test -z "$ARFLAGS"; then ARFLAGS='-o' fi else : fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_AR+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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_AR="${ac_tool_prefix}ar" printf "%s\n" "$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 AR=$ac_cv_prog_AR if test -n "$AR"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 printf "%s\n" "$AR" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_AR"; then ac_ct_AR=$AR # Extract the first word of "ar", so it can be a program name with args. set dummy ar; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_AR+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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_AR="ar" printf "%s\n" "$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_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 printf "%s\n" "$ac_ct_AR" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_AR" = x; then AR="ar" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi else AR="$ac_cv_prog_AR" fi if test -z "$ARFLAGS"; then ARFLAGS='cr' fi if test -z "$RANLIB"; then if test $gl_cv_c_amsterdam_compiler = yes; then RANLIB=':' else 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_RANLIB+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 printf "%s\n" "$RANLIB" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_RANLIB+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 printf "%s\n" "$ac_ct_RANLIB" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$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 fi fi # Check whether --enable-largefile was given. if test ${enable_largefile+y} then : enableval=$enable_largefile; fi if test "$enable_largefile,$enable_year2038" != no,no then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable large file support" >&5 printf %s "checking for $CC option to enable large file support... " >&6; } if test ${ac_cv_sys_largefile_opts+y} then : printf %s "(cached) " >&6 else $as_nop ac_save_CC="$CC" ac_opt_found=no for ac_opt in "none needed" "-D_FILE_OFFSET_BITS=64" "-D_LARGE_FILES=1" "-n32"; do if test x"$ac_opt" != x"none needed" then : CC="$ac_save_CC $ac_opt" fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_sys_largefile_opts="$ac_opt" ac_opt_found=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext test $ac_opt_found = no || break done CC="$ac_save_CC" if test $ac_opt_found != yes; then case $host_os in #( mingw*) : ac_cv_sys_largefile_opts="supported through gnulib" ac_opt_found=yes ;; #( *) : ;; esac fi test $ac_opt_found = yes || ac_cv_sys_largefile_opts="support not detected" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_opts" >&5 printf "%s\n" "$ac_cv_sys_largefile_opts" >&6; } ac_have_largefile=yes case $ac_cv_sys_largefile_opts in #( "none needed") : ;; #( "supported through gnulib") : ;; #( "support not detected") : ac_have_largefile=no ;; #( "-D_FILE_OFFSET_BITS=64") : printf "%s\n" "#define _FILE_OFFSET_BITS 64" >>confdefs.h ;; #( "-D_LARGE_FILES=1") : printf "%s\n" "#define _LARGE_FILES 1" >>confdefs.h ;; #( "-n32") : CC="$CC -n32" ;; #( *) : as_fn_error $? "internal error: bad value for \$ac_cv_sys_largefile_opts" "$LINENO" 5 ;; esac if test "$enable_year2038" != no then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option for timestamps after 2038" >&5 printf %s "checking for $CC option for timestamps after 2038... " >&6; } if test ${ac_cv_sys_year2038_opts+y} then : printf %s "(cached) " >&6 else $as_nop ac_save_CPPFLAGS="$CPPFLAGS" ac_opt_found=no for ac_opt in "none needed" "-D_TIME_BITS=64" "-D__MINGW_USE_VC2005_COMPAT" "-U_USE_32_BIT_TIME_T -D__MINGW_USE_VC2005_COMPAT"; do if test x"$ac_opt" != x"none needed" then : CPPFLAGS="$ac_save_CPPFLAGS $ac_opt" fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <time.h> /* Check that time_t can represent 2**32 - 1 correctly. */ #define LARGE_TIME_T \\ ((time_t) (((time_t) 1 << 30) - 1 + 3 * ((time_t) 1 << 30))) int verify_time_t_range[(LARGE_TIME_T / 65537 == 65535 && LARGE_TIME_T % 65537 == 0) ? 1 : -1]; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_sys_year2038_opts="$ac_opt" ac_opt_found=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext test $ac_opt_found = no || break done CPPFLAGS="$ac_save_CPPFLAGS" test $ac_opt_found = yes || ac_cv_sys_year2038_opts="support not detected" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_year2038_opts" >&5 printf "%s\n" "$ac_cv_sys_year2038_opts" >&6; } ac_have_year2038=yes case $ac_cv_sys_year2038_opts in #( "none needed") : ;; #( "support not detected") : ac_have_year2038=no ;; #( "-D_TIME_BITS=64") : printf "%s\n" "#define _TIME_BITS 64" >>confdefs.h ;; #( "-D__MINGW_USE_VC2005_COMPAT") : printf "%s\n" "#define __MINGW_USE_VC2005_COMPAT 1" >>confdefs.h ;; #( "-U_USE_32_BIT_TIME_T"*) : { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "the 'time_t' type is currently forced to be 32-bit. It will stop working after mid-January 2038. Remove _USE_32BIT_TIME_T from the compiler flags. See \`config.log' for more details" "$LINENO" 5; } ;; #( *) : as_fn_error $? "internal error: bad value for \$ac_cv_sys_year2038_opts" "$LINENO" 5 ;; esac fi fi # Check whether --enable-threads was given. if test ${enable_threads+y} then : enableval=$enable_threads; gl_use_threads=$enableval else $as_nop if test -n "$gl_use_threads_default"; then gl_use_threads="$gl_use_threads_default" else case "$host_os" in osf*) gl_use_threads=no ;; cygwin*) case `uname -r` in 1.[0-5].*) gl_use_threads=no ;; *) gl_use_threads=yes ;; esac ;; mingw*) case "$gl_use_winpthreads_default" in yes) gl_use_threads=posix ;; no) gl_use_threads=windows ;; *) gl_use_threads=yes ;; esac ;; *) gl_use_threads=yes ;; esac fi fi if test "$gl_use_threads" = yes \ || test "$gl_use_threads" = isoc \ || test "$gl_use_threads" = posix \ || test "$gl_use_threads" = isoc+posix; then # For using <threads.h> or <pthread.h>: if test -z "$gl_anythreadlib_early_done"; then case "$host_os" in osf*) # On OSF/1, the compiler needs the flag -D_REENTRANT so that it # groks <pthread.h>. cc also understands the flag -pthread, but # we don't use it because 1. gcc-2.95 doesn't understand -pthread, # 2. putting a flag into CPPFLAGS that has an effect on the linker # causes the AC_LINK_IFELSE test below to succeed unexpectedly, # leading to wrong values of LIBTHREAD and LTLIBTHREAD. CPPFLAGS="$CPPFLAGS -D_REENTRANT" ;; esac # Some systems optimize for single-threaded programs by default, and # need special flags to disable these optimizations. For example, the # definition of 'errno' in <errno.h>. case "$host_os" in aix* | freebsd*) CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE" ;; solaris*) CPPFLAGS="$CPPFLAGS -D_REENTRANT" ;; esac gl_anythreadlib_early_done=done fi fi # Pre-early section. # Code from module absolute-header: # Code from module alloca-opt: # Code from module assert-h: # Code from module attribute: # Code from module basename-lgpl: # Code from module btowc: # Code from module builtin-expect: # Code from module c-ctype: # Code from module c99: # Code from module calloc-gnu: # Code from module calloc-posix: # Code from module cloexec: # Code from module close: # Code from module dirname: # Code from module dirname-lgpl: # Code from module double-slash-root: # Code from module dup2: # Code from module environ: # Code from module errno: # Code from module error: # Code from module error-h: # Code from module extensions: # Code from module extern-inline: # Code from module fcntl: # Code from module fcntl-h: # Code from module fd-hook: # Code from module filename: # Code from module flexmember: # Code from module fprintftime: # Code from module free-posix: # Code from module fstat: # Code from module gen-header: # Code from module getdelim: # Code from module getdtablesize: # Code from module getline: # Code from module getopt-gnu: # Code from module getopt-posix: # Code from module getprogname: # Code from module gettext-h: # Code from module gitlog-to-changelog: # Code from module glibc-internal/dynarray: # Code from module hard-locale: # Code from module ialloc: # Code from module idx: # Code from module include_next: # Code from module intprops: # Code from module inttostr: # Code from module inttypes-incomplete: # Code from module langinfo: # Code from module largefile: # Code from module libc-config: # Code from module limits-h: # Code from module localcharset: # Code from module locale: # Code from module localeconv: # Code from module lock: # Code from module malloc-gnu: # Code from module malloc-posix: # Code from module malloca: # Code from module mbrtowc: # Code from module mbsinit: # Code from module mbtowc: # Code from module minmax: # Code from module mktime: # Code from module mktime-internal: # Code from module msvc-inval: # Code from module msvc-nothrow: # Code from module multiarch: # Code from module nl_langinfo: # Code from module nocrash: # Code from module nstrftime: # Code from module open: # Code from module pathmax: # Code from module realloc-gnu: # Code from module realloc-posix: # Code from module reallocarray: # Code from module regex: # Code from module setenv: # Code from module setlocale-null: # Code from module snippet/_Noreturn: # Code from module snippet/arg-nonnull: # Code from module snippet/c++defs: # Code from module snippet/warn-on-use: # Code from module ssize_t: # Code from module stat: # Code from module stat-time: # Code from module std-gnu11: # Code from module stdbool: # Code from module stdckdint: # Code from module stddef: # Code from module stdint: # Code from module stdio: printf "%s\n" "#define __USE_MINGW_ANSI_STDIO 1" >>confdefs.h # Code from module stdlib: # Code from module streq: # Code from module strerror: # Code from module strerror-override: # Code from module string: # Code from module sys_stat: # Code from module sys_types: # Code from module threadlib: # Code from module time-h: # Code from module time_r: # Code from module time_rz: # Code from module timegm: # Code from module tzset: # Code from module unistd: # Code from module unsetenv: # Code from module vararrays: # Code from module verify: # Code from module wchar: # Code from module wcrtomb: # Code from module wctype-h: # Code from module windows-mutex: # Code from module windows-once: # Code from module windows-recmutex: # Code from module windows-rwlock: # Code from module xalloc: # Code from module xalloc-oversized: 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_RANLIB+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 printf "%s\n" "$RANLIB" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_RANLIB+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 printf "%s\n" "$ac_ct_RANLIB" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$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 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_YACC+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $YACC" >&5 printf "%s\n" "$YACC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$YACC" && break done test -n "$YACC" || YACC="yacc" 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_LEX+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LEX" >&5 printf "%s\n" "$LEX" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$LEX" && break done test -n "$LEX" || LEX=":" if test "x$LEX" != "x:"; then cat >conftest.l <<_ACEOF %{ #ifdef __cplusplus extern "C" #endif int yywrap(void); %} %% a { ECHO; } b { REJECT; } c { yymore (); } d { yyless (1); } e { /* IRIX 6.5 flex 2.5.4 underquotes its yyless argument. */ #ifdef __cplusplus yyless ((yyinput () != 0)); #else yyless ((input () != 0)); #endif } f { unput (yytext[0]); } . { BEGIN INITIAL; } %% #ifdef YYTEXT_POINTER extern char *yytext; #endif int yywrap (void) { return 1; } int main (void) { return ! yylex (); } _ACEOF { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for lex output file root" >&5 printf %s "checking for lex output file root... " >&6; } if test ${ac_cv_prog_lex_root+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_lex_root=unknown { { 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\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$LEX conftest.l") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && 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 fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_lex_root" >&5 printf "%s\n" "$ac_cv_prog_lex_root" >&6; } if test "$ac_cv_prog_lex_root" = unknown then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot find output from $LEX; giving up on $LEX" >&5 printf "%s\n" "$as_me: WARNING: cannot find output from $LEX; giving up on $LEX" >&2;} LEX=: LEXLIB= fi LEX_OUTPUT_ROOT=$ac_cv_prog_lex_root if test ${LEXLIB+y} then : else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for lex library" >&5 printf %s "checking for lex library... " >&6; } if test ${ac_cv_lib_lex+y} then : printf %s "(cached) " >&6 else $as_nop ac_save_LIBS="$LIBS" ac_found=false for ac_cv_lib_lex in 'none needed' -lfl -ll 'not found'; do case $ac_cv_lib_lex in #( 'none needed') : ;; #( 'not found') : break ;; #( *) : LIBS="$ac_cv_lib_lex $ac_save_LIBS" ;; #( *) : ;; esac 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_found=: fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if $ac_found; then break fi done LIBS="$ac_save_LIBS" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lex" >&5 printf "%s\n" "$ac_cv_lib_lex" >&6; } if test "$ac_cv_lib_lex" = 'not found' then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: required lex library not found; giving up on $LEX" >&5 printf "%s\n" "$as_me: WARNING: required lex library not found; giving up on $LEX" >&2;} LEX=: LEXLIB= elif test "$ac_cv_lib_lex" = 'none needed' then : LEXLIB='' else $as_nop LEXLIB=$ac_cv_lib_lex fi fi if test "$LEX" != : then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether yytext is a pointer" >&5 printf %s "checking whether yytext is a pointer... " >&6; } if test ${ac_cv_prog_lex_yytext_pointer+y} then : printf %s "(cached) " >&6 else $as_nop # 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 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_compile "$LINENO" then : ac_cv_prog_lex_yytext_pointer=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_lex_yytext_pointer" >&5 printf "%s\n" "$ac_cv_prog_lex_yytext_pointer" >&6; } if test $ac_cv_prog_lex_yytext_pointer = yes; then printf "%s\n" "#define YYTEXT_POINTER 1" >>confdefs.h fi fi rm -f conftest.l $LEX_OUTPUT_ROOT.c fi # Checks for header files. ac_fn_c_check_header_compile "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default" if test "x$ac_cv_header_stdlib_h" = xyes then : printf "%s\n" "#define HAVE_STDLIB_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "string.h" "ac_cv_header_string_h" "$ac_includes_default" if test "x$ac_cv_header_string_h" = xyes then : printf "%s\n" "#define HAVE_STRING_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "socket.h" "ac_cv_header_socket_h" "$ac_includes_default" if test "x$ac_cv_header_socket_h" = xyes then : printf "%s\n" "#define HAVE_SOCKET_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "sys/socket.h" "ac_cv_header_sys_socket_h" "$ac_includes_default" if test "x$ac_cv_header_sys_socket_h" = xyes then : printf "%s\n" "#define HAVE_SYS_SOCKET_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "syslog.h" "ac_cv_header_syslog_h" "$ac_includes_default" if test "x$ac_cv_header_syslog_h" = xyes then : printf "%s\n" "#define HAVE_SYSLOG_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "unistd.h" "ac_cv_header_unistd_h" "$ac_includes_default" if test "x$ac_cv_header_unistd_h" = xyes then : printf "%s\n" "#define HAVE_UNISTD_H 1" >>confdefs.h fi # Checks for typedefs, structures, and compiler characteristics. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 printf %s "checking for an ANSI C-conforming const... " >&6; } if test ${ac_cv_c_const+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { #ifndef __cplusplus /* Ultrix mips cc rejects this sort of thing. */ typedef int charset[2]; const charset cs = { 0, 0 }; /* SunOS 4.1.1 cc rejects this. */ char const *const *pcpcc; char **ppc; /* NEC SVR4.0.2 mips cc rejects this. */ struct point {int x, y;}; static struct point const zero = {0,0}; /* IBM XL C 1.02.0.0 rejects this. It does not let you subtract one const X* pointer from another in an arm of an if-expression whose if-part is not a constant expression */ const char *g = "string"; pcpcc = &g + (g ? g-g : 0); /* HPUX 7.0 cc rejects these. */ ++pcpcc; ppc = (char**) pcpcc; pcpcc = (char const *const *) ppc; { /* SCO 3.2v4 cc rejects this sort of thing. */ char tx; char *t = &tx; char const *s = 0 ? (char *) 0 : (char const *) 0; *t++ = 0; if (s) return 0; } { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ int x[] = {25, 17}; const int *foo = &x[0]; ++foo; } { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ typedef const int *iptr; iptr p = 0; ++p; } { /* IBM XL C 1.02.0.0 rejects this sort of thing, saying "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ struct s { int j; const int *ap[3]; } bx; struct s *b = &bx; b->j = 5; } { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ const int foo = 10; if (!foo) return 0; } return !cs[0] && !zero.x; #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_c_const=yes else $as_nop ac_cv_c_const=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 printf "%s\n" "$ac_cv_c_const" >&6; } if test $ac_cv_c_const = no; then printf "%s\n" "#define const /**/" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for uid_t in sys/types.h" >&5 printf %s "checking for uid_t in sys/types.h... " >&6; } if test ${ac_cv_type_uid_t+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "uid_t" >/dev/null 2>&1 then : ac_cv_type_uid_t=yes else $as_nop ac_cv_type_uid_t=no fi rm -rf conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_uid_t" >&5 printf "%s\n" "$ac_cv_type_uid_t" >&6; } if test $ac_cv_type_uid_t = no; then printf "%s\n" "#define uid_t int" >>confdefs.h printf "%s\n" "#define gid_t int" >>confdefs.h fi ac_fn_c_check_type "$LINENO" "mode_t" "ac_cv_type_mode_t" "$ac_includes_default" if test "x$ac_cv_type_mode_t" = xyes then : else $as_nop printf "%s\n" "#define mode_t int" >>confdefs.h fi ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" if test "x$ac_cv_type_size_t" = xyes then : else $as_nop printf "%s\n" "#define size_t unsigned int" >>confdefs.h fi ac_fn_c_check_type "$LINENO" "socklen_t" "ac_cv_type_socklen_t" " #if HAVE_SYS_TYPES_H # include <sys/types.h> #endif #ifdef HAVE_SYS_SOCKET_H # include <sys/socket.h> #endif #ifdef HAVE_SOCKET_H # include <socket.h> #endif " if test "x$ac_cv_type_socklen_t" = xyes then : else $as_nop printf "%s\n" "#define socklen_t int" >>confdefs.h fi # Checks for library functions. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking type of array argument to getgroups" >&5 printf %s "checking type of array argument to getgroups... " >&6; } if test ${ac_cv_type_getgroups+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : ac_cv_type_getgroups=cross else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Thanks to Mike Rendell for this test. */ $ac_includes_default #define NGID 256 #undef MAX #define MAX(x, y) ((x) > (y) ? (x) : (y)) int main (void) { gid_t gidset[NGID]; int i, n; union { gid_t gval; long int lval; } val; val.lval = -1; for (i = 0; i < NGID; i++) gidset[i] = val.gval; n = getgroups (sizeof (gidset) / MAX (sizeof (int), sizeof (gid_t)) - 1, gidset); /* Exit non-zero if getgroups seems to require an array of ints. This happens when gid_t is short int but getgroups modifies an array of ints. */ return n > 0 && gidset[n] != val.gval; } _ACEOF if ac_fn_c_try_run "$LINENO" then : ac_cv_type_getgroups=gid_t else $as_nop ac_cv_type_getgroups=int fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi if test $ac_cv_type_getgroups = cross; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <unistd.h> _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "getgroups.*int.*gid_t" >/dev/null 2>&1 then : ac_cv_type_getgroups=gid_t else $as_nop ac_cv_type_getgroups=int fi rm -rf conftest* fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_getgroups" >&5 printf "%s\n" "$ac_cv_type_getgroups" >&6; } printf "%s\n" "#define GETGROUPS_T $ac_cv_type_getgroups" >>confdefs.h ac_fn_c_check_func "$LINENO" "getgroups" "ac_cv_func_getgroups" if test "x$ac_cv_func_getgroups" = xyes then : fi # If we don't yet have getgroups, see if it's in -lbsd. # This is reported to be necessary on an ITOS 3000WS running SEIUX 3.1. ac_save_LIBS=$LIBS if test $ac_cv_func_getgroups = no; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for getgroups in -lbsd" >&5 printf %s "checking for getgroups in -lbsd... " >&6; } if test ${ac_cv_lib_bsd_getgroups+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lbsd $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* 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. */ char getgroups (); int main (void) { return getgroups (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_bsd_getgroups=yes else $as_nop ac_cv_lib_bsd_getgroups=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bsd_getgroups" >&5 printf "%s\n" "$ac_cv_lib_bsd_getgroups" >&6; } if test "x$ac_cv_lib_bsd_getgroups" = xyes then : GETGROUPS_LIB=-lbsd fi fi # Run the program to test the functionality of the system-supplied # getgroups function only if there is such a function. if test $ac_cv_func_getgroups = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working getgroups" >&5 printf %s "checking for working getgroups... " >&6; } if test ${ac_cv_func_getgroups_works+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case "$host_os" in # (( # Guess yes on glibc systems. *-gnu*) ac_cv_func_getgroups_works="guessing yes" ;; # If we don't know, assume the worst. *) ac_cv_func_getgroups_works="guessing no" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main (void) { /* On Ultrix 4.3, getgroups (0, 0) always fails. */ return getgroups (0, 0) == -1; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : ac_cv_func_getgroups_works=yes else $as_nop ac_cv_func_getgroups_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 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_getgroups_works" >&5 printf "%s\n" "$ac_cv_func_getgroups_works" >&6; } else ac_cv_func_getgroups_works=no fi case "$ac_cv_func_getgroups_works" in *yes) printf "%s\n" "#define HAVE_GETGROUPS 1" >>confdefs.h ;; esac LIBS=$ac_save_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether malloc (0) returns nonnull" >&5 printf %s "checking whether malloc (0) returns nonnull... " >&6; } if test ${ac_cv_func_malloc_0_nonnull+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on platforms where we know the result. *-gnu* | freebsd* | netbsd* | openbsd* | bitrig* \ | gnu* | *-musl* | midipix* | midnightbsd* \ | hpux* | solaris* | cygwin* | mingw* | msys* ) ac_cv_func_malloc_0_nonnull="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) ac_cv_func_malloc_0_nonnull="$gl_cross_guess_normal" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdlib.h> int main (void) { void *p = malloc (0); int result = !p; free (p); return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : ac_cv_func_malloc_0_nonnull=yes else $as_nop ac_cv_func_malloc_0_nonnull=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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_malloc_0_nonnull" >&5 printf "%s\n" "$ac_cv_func_malloc_0_nonnull" >&6; } case $ac_cv_func_malloc_0_nonnull in #( *yes) : printf "%s\n" "#define HAVE_MALLOC 1" >>confdefs.h ;; #( *) : printf "%s\n" "#define HAVE_MALLOC 0" >>confdefs.h case " $LIBOBJS " in *" malloc.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS malloc.$ac_objext" ;; esac printf "%s\n" "#define malloc rpl_malloc" >>confdefs.h ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working memcmp" >&5 printf %s "checking for working memcmp... " >&6; } if test ${ac_cv_func_memcmp_working+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : ac_cv_func_memcmp_working=no else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main (void) { /* Some versions of memcmp are not 8-bit clean. */ char c0 = '\100', c1 = '\200', c2 = '\201'; if (memcmp(&c0, &c2, 1) >= 0 || memcmp(&c1, &c2, 1) >= 0) return 1; /* The Next x86 OpenStep bug shows up only when comparing 16 bytes or more and with at least one buffer not starting on a 4-byte boundary. William Lewis provided this test program. */ { char foo[21]; char bar[21]; int i; for (i = 0; i < 4; i++) { char *a = foo + i; char *b = bar + i; strcpy (a, "--------01111111"); strcpy (b, "--------10000000"); if (memcmp (a, b, 16) >= 0) return 1; } return 0; } ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : ac_cv_func_memcmp_working=yes else $as_nop ac_cv_func_memcmp_working=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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_memcmp_working" >&5 printf "%s\n" "$ac_cv_func_memcmp_working" >&6; } test $ac_cv_func_memcmp_working = no && case " $LIBOBJS " in *" memcmp.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS memcmp.$ac_objext" ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether realloc (0, 0) returns nonnull" >&5 printf %s "checking whether realloc (0, 0) returns nonnull... " >&6; } if test ${ac_cv_func_realloc_0_nonnull+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on platforms where we know the result. *-gnu* | freebsd* | netbsd* | openbsd* | bitrig* \ | gnu* | *-musl* | midipix* | midnightbsd* \ | hpux* | solaris* | cygwin* | mingw* | msys* ) ac_cv_func_realloc_0_nonnull="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) ac_cv_func_realloc_0_nonnull="$gl_cross_guess_normal" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdlib.h> int main (void) { void *p = realloc (0, 0); int result = !p; free (p); return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : ac_cv_func_realloc_0_nonnull=yes else $as_nop ac_cv_func_realloc_0_nonnull=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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_realloc_0_nonnull" >&5 printf "%s\n" "$ac_cv_func_realloc_0_nonnull" >&6; } case $ac_cv_func_realloc_0_nonnull in #( *yes) : printf "%s\n" "#define HAVE_REALLOC 1" >>confdefs.h ;; #( *) : printf "%s\n" "#define HAVE_REALLOC 0" >>confdefs.h case " $LIBOBJS " in *" realloc.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS realloc.$ac_objext" ;; esac printf "%s\n" "#define realloc rpl_realloc" >>confdefs.h ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether lstat correctly handles trailing slash" >&5 printf %s "checking whether lstat correctly handles trailing slash... " >&6; } if test ${ac_cv_func_lstat_dereferences_slashed_symlink+y} then : printf %s "(cached) " >&6 else $as_nop rm -f conftest.sym conftest.file echo >conftest.file if test "$as_ln_s" = "ln -s" && ln -s conftest.file conftest.sym; then if test "$cross_compiling" = yes then : case "$host_os" in # (( # Guess yes on glibc systems. *-gnu*) ac_cv_func_lstat_dereferences_slashed_symlink=yes ;; # If we don't know, assume the worst. *) ac_cv_func_lstat_dereferences_slashed_symlink=no ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main (void) { struct stat sbuf; /* Linux will dereference the symlink and fail, as required by POSIX. That is better in the sense that it means we will not have to compile and use the lstat wrapper. */ return lstat ("conftest.sym/", &sbuf) == 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : ac_cv_func_lstat_dereferences_slashed_symlink=yes else $as_nop ac_cv_func_lstat_dereferences_slashed_symlink=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi else # If the `ln -s' command failed, then we probably don't even # have an lstat function. ac_cv_func_lstat_dereferences_slashed_symlink=no fi rm -f conftest.sym conftest.file fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_lstat_dereferences_slashed_symlink" >&5 printf "%s\n" "$ac_cv_func_lstat_dereferences_slashed_symlink" >&6; } test $ac_cv_func_lstat_dereferences_slashed_symlink = yes && printf "%s\n" "#define LSTAT_FOLLOWS_SLASHED_SYMLINK 1" >>confdefs.h if test "x$ac_cv_func_lstat_dereferences_slashed_symlink" = xno; then case " $LIBOBJS " in *" lstat.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS lstat.$ac_objext" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether stat accepts an empty string" >&5 printf %s "checking whether stat accepts an empty string... " >&6; } if test ${ac_cv_func_stat_empty_string_bug+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : ac_cv_func_stat_empty_string_bug=yes else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main (void) { struct stat sbuf; return stat ("", &sbuf) == 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : ac_cv_func_stat_empty_string_bug=no else $as_nop ac_cv_func_stat_empty_string_bug=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_stat_empty_string_bug" >&5 printf "%s\n" "$ac_cv_func_stat_empty_string_bug" >&6; } if test $ac_cv_func_stat_empty_string_bug = yes; then case " $LIBOBJS " in *" stat.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS stat.$ac_objext" ;; esac printf "%s\n" "#define HAVE_STAT_EMPTY_STRING_BUG 1" >>confdefs.h fi # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works # for constant arguments. Useless! { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working alloca.h" >&5 printf %s "checking for working alloca.h... " >&6; } if test ${ac_cv_working_alloca_h+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <alloca.h> int main (void) { char *p = (char *) alloca (2 * sizeof (int)); if (p) return 0; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_working_alloca_h=yes else $as_nop ac_cv_working_alloca_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_working_alloca_h" >&5 printf "%s\n" "$ac_cv_working_alloca_h" >&6; } if test $ac_cv_working_alloca_h = yes; then printf "%s\n" "#define HAVE_ALLOCA_H 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for alloca" >&5 printf %s "checking for alloca... " >&6; } if test ${ac_cv_func_alloca_works+y} then : printf %s "(cached) " >&6 else $as_nop if test $ac_cv_working_alloca_h = yes; then ac_cv_func_alloca_works=yes else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdlib.h> #include <stddef.h> #ifndef alloca # ifdef __GNUC__ # define alloca __builtin_alloca # elif defined _MSC_VER # include <malloc.h> # define alloca _alloca # else # ifdef __cplusplus extern "C" # endif void *alloca (size_t); # endif #endif int main (void) { char *p = (char *) alloca (1); if (p) return 0; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_func_alloca_works=yes else $as_nop ac_cv_func_alloca_works=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_alloca_works" >&5 printf "%s\n" "$ac_cv_func_alloca_works" >&6; } fi if test $ac_cv_func_alloca_works = yes; then printf "%s\n" "#define HAVE_ALLOCA 1" >>confdefs.h else # The SVR3 libPW and SVR4 libucb both contain incompatible functions # that cause trouble. Some versions do not even contain alloca or # contain a buggy version. If you still want to use their alloca, # use ar to extract alloca.o from them instead of compiling alloca.c. ALLOCA=\${LIBOBJDIR}alloca.$ac_objext printf "%s\n" "#define C_ALLOCA 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking stack direction for C alloca" >&5 printf %s "checking stack direction for C alloca... " >&6; } if test ${ac_cv_c_stack_direction+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : ac_cv_c_stack_direction=0 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int find_stack_direction (int *addr, int depth) { int dir, dummy = 0; if (! addr) addr = &dummy; *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1; dir = depth ? find_stack_direction (addr, depth - 1) : 0; return dir + dummy; } int main (int argc, char **argv) { return find_stack_direction (0, argc + !argv + 20) < 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : ac_cv_c_stack_direction=1 else $as_nop ac_cv_c_stack_direction=-1 fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_stack_direction" >&5 printf "%s\n" "$ac_cv_c_stack_direction" >&6; } printf "%s\n" "#define STACK_DIRECTION $ac_cv_c_stack_direction" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "strdup" "ac_cv_func_strdup" if test "x$ac_cv_func_strdup" = xyes then : printf "%s\n" "#define HAVE_STRDUP 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "strerror" "ac_cv_func_strerror" if test "x$ac_cv_func_strerror" = xyes then : printf "%s\n" "#define HAVE_STRERROR 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "strrchr" "ac_cv_func_strrchr" if test "x$ac_cv_func_strrchr" = xyes then : printf "%s\n" "#define HAVE_STRRCHR 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "strtoul" "ac_cv_func_strtoul" if test "x$ac_cv_func_strtoul" = xyes then : printf "%s\n" "#define HAVE_STRTOUL 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "sysconf" "ac_cv_func_sysconf" if test "x$ac_cv_func_sysconf" = xyes then : printf "%s\n" "#define HAVE_SYSCONF 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "getdtablesize" "ac_cv_func_getdtablesize" if test "x$ac_cv_func_getdtablesize" = xyes then : printf "%s\n" "#define HAVE_GETDTABLESIZE 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "flock" "ac_cv_func_flock" if test "x$ac_cv_func_flock" = xyes then : printf "%s\n" "#define HAVE_FLOCK 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "ftruncate" "ac_cv_func_ftruncate" if test "x$ac_cv_func_ftruncate" = xyes then : printf "%s\n" "#define HAVE_FTRUNCATE 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "getgrouplist" "ac_cv_func_getgrouplist" if test "x$ac_cv_func_getgrouplist" = xyes then : printf "%s\n" "#define HAVE_GETGROUPLIST 1" >>confdefs.h fi # Check whether --enable-cross-guesses was given. if test ${enable_cross_guesses+y} then : enableval=$enable_cross_guesses; if test "x$enableval" != xconservative && test "x$enableval" != xrisky; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: invalid argument supplied to --enable-cross-guesses" >&5 printf "%s\n" "$as_me: WARNING: invalid argument supplied to --enable-cross-guesses" >&2;} enableval=conservative fi gl_cross_guesses="$enableval" else $as_nop gl_cross_guesses=conservative fi if test $gl_cross_guesses = risky; then gl_cross_guess_normal="guessing yes" gl_cross_guess_inverted="guessing no" else gl_cross_guess_normal="guessing no" gl_cross_guess_inverted="guessing yes" fi LIBC_FATAL_STDERR_=1 export LIBC_FATAL_STDERR_ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the preprocessor supports include_next" >&5 printf %s "checking whether the preprocessor supports include_next... " >&6; } if test ${gl_cv_have_include_next+y} then : printf %s "(cached) " >&6 else $as_nop rm -rf conftestd1a conftestd1b conftestd2 mkdir conftestd1a conftestd1b conftestd2 cat <<EOF > conftestd1a/conftest.h #define DEFINED_IN_CONFTESTD1 #include_next <conftest.h> #ifdef DEFINED_IN_CONFTESTD2 int foo; #else #error "include_next doesn't work" #endif EOF cat <<EOF > conftestd1b/conftest.h #define DEFINED_IN_CONFTESTD1 #include <stdio.h> #include_next <conftest.h> #ifdef DEFINED_IN_CONFTESTD2 int foo; #else #error "include_next doesn't work" #endif EOF cat <<EOF > conftestd2/conftest.h #ifndef DEFINED_IN_CONFTESTD1 #error "include_next test doesn't work" #endif #define DEFINED_IN_CONFTESTD2 EOF gl_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1b -Iconftestd2" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <conftest.h> _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_have_include_next=yes else $as_nop CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1a -Iconftestd2" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <conftest.h> _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_have_include_next=buggy else $as_nop gl_cv_have_include_next=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CPPFLAGS="$gl_save_CPPFLAGS" rm -rf conftestd1a conftestd1b conftestd2 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_have_include_next" >&5 printf "%s\n" "$gl_cv_have_include_next" >&6; } PRAGMA_SYSTEM_HEADER= if test $gl_cv_have_include_next = yes; then INCLUDE_NEXT=include_next INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next if test -n "$GCC"; then PRAGMA_SYSTEM_HEADER='#pragma GCC system_header' fi else if test $gl_cv_have_include_next = buggy; then INCLUDE_NEXT=include INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next else INCLUDE_NEXT=include INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether source code line length is unlimited" >&5 printf %s "checking whether source code line length is unlimited... " >&6; } if test ${gl_cv_source_line_length_unlimited+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __TANDEM choke me #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "choke me" >/dev/null 2>&1 then : gl_cv_source_line_length_unlimited=no else $as_nop gl_cv_source_line_length_unlimited=yes fi rm -rf conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_source_line_length_unlimited" >&5 printf "%s\n" "$gl_cv_source_line_length_unlimited" >&6; } if test $gl_cv_source_line_length_unlimited = no; then PRAGMA_COLUMNS="#pragma COLUMNS 10000" else PRAGMA_COLUMNS= fi HAVE_BTOWC=1; HAVE_MBSINIT=1; HAVE_MBRTOWC=1; HAVE_MBRLEN=1; HAVE_MBSRTOWCS=1; HAVE_MBSNRTOWCS=1; HAVE_WCRTOMB=1; HAVE_WCSRTOMBS=1; HAVE_WCSNRTOMBS=1; HAVE_WMEMCHR=1; HAVE_WMEMCMP=1; HAVE_WMEMCPY=1; HAVE_WMEMMOVE=1; HAVE_WMEMPCPY=1; HAVE_WMEMSET=1; HAVE_WCSLEN=1; HAVE_WCSNLEN=1; HAVE_WCSCPY=1; HAVE_WCPCPY=1; HAVE_WCSNCPY=1; HAVE_WCPNCPY=1; HAVE_WCSCAT=1; HAVE_WCSNCAT=1; HAVE_WCSCMP=1; HAVE_WCSNCMP=1; HAVE_WCSCASECMP=1; HAVE_WCSNCASECMP=1; HAVE_WCSCOLL=1; HAVE_WCSXFRM=1; HAVE_WCSDUP=1; HAVE_WCSCHR=1; HAVE_WCSRCHR=1; HAVE_WCSCSPN=1; HAVE_WCSSPN=1; HAVE_WCSPBRK=1; HAVE_WCSSTR=1; HAVE_WCSTOK=1; HAVE_WCSWIDTH=1; HAVE_WCSFTIME=1; HAVE_DECL_WCTOB=1; HAVE_DECL_WCSDUP=1; HAVE_DECL_WCWIDTH=1; REPLACE_MBSTATE_T=0; REPLACE_BTOWC=0; REPLACE_WCTOB=0; REPLACE_MBSINIT=0; REPLACE_MBRTOWC=0; REPLACE_MBRLEN=0; REPLACE_MBSRTOWCS=0; REPLACE_MBSNRTOWCS=0; REPLACE_WCRTOMB=0; REPLACE_WCSRTOMBS=0; REPLACE_WCSNRTOMBS=0; REPLACE_WCWIDTH=0; REPLACE_WCSWIDTH=0; REPLACE_WCSFTIME=0; REPLACE_WCSCMP=0; REPLACE_WCSNCMP=0; REPLACE_WCSSTR=0; REPLACE_WCSTOK=0; REPLACE_WMEMCMP=0; REPLACE_WMEMPCPY=0; { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether <wchar.h> uses 'inline' correctly" >&5 printf %s "checking whether <wchar.h> uses 'inline' correctly... " >&6; } if test ${gl_cv_header_wchar_h_correct_inline+y} then : printf %s "(cached) " >&6 else $as_nop gl_cv_header_wchar_h_correct_inline=yes case "$host_os" in *-gnu* | gnu*) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define wcstod renamed_wcstod #include <wchar.h> extern int zero (void); int main () { return zero(); } _ACEOF save_ac_compile="$ac_compile" ac_compile=`echo "$save_ac_compile" | sed s/conftest/conftest1/` if echo '#include "conftest.c"' >conftest1.c \ && { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define wcstod renamed_wcstod #include <wchar.h> int zero (void) { return 0; } _ACEOF ac_compile=`echo "$save_ac_compile" | sed s/conftest/conftest2/` if echo '#include "conftest.c"' >conftest2.c \ && { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then if $CC -o conftest$ac_exeext $CFLAGS $LDFLAGS conftest1.$ac_objext conftest2.$ac_objext $LIBS >&5 2>&1; then : else gl_cv_header_wchar_h_correct_inline=no fi fi fi ac_compile="$save_ac_compile" rm -f conftest12.c conftest12.$ac_objext conftest$ac_exeext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_wchar_h_correct_inline" >&5 printf "%s\n" "$gl_cv_header_wchar_h_correct_inline" >&6; } if test $gl_cv_header_wchar_h_correct_inline = no; then as_fn_error $? "<wchar.h> cannot be used with this compiler ($CC $CFLAGS $CPPFLAGS). This is a known interoperability problem of glibc <= 2.5 with gcc >= 4.3 in C99 mode. You have four options: - Add the flag -fgnu89-inline to CC and reconfigure, or - Fix your include files, using parts of <https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=b037a293a48718af30d706c2e18c929d0e69a621>, or - Use a gcc version older than 4.3, or - Don't use the flags -std=c99 or -std=gnu99. Configuration aborted." "$LINENO" 5 fi ac_func= for ac_item in $ac_func_c_list do if test $ac_func; then ac_fn_c_check_func "$LINENO" $ac_func ac_cv_func_$ac_func if eval test \"x\$ac_cv_func_$ac_func\" = xyes; then echo "#define $ac_item 1" >> confdefs.h fi ac_func= else ac_func=$ac_item fi done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for nl_langinfo and CODESET" >&5 printf %s "checking for nl_langinfo and CODESET... " >&6; } if test ${am_cv_langinfo_codeset+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <langinfo.h> int main (void) { char* cs = nl_langinfo(CODESET); return !cs; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : am_cv_langinfo_codeset=yes else $as_nop am_cv_langinfo_codeset=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_langinfo_codeset" >&5 printf "%s\n" "$am_cv_langinfo_codeset" >&6; } if test $am_cv_langinfo_codeset = yes; then printf "%s\n" "#define HAVE_LANGINFO_CODESET 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a traditional french locale" >&5 printf %s "checking for a traditional french locale... " >&6; } if test ${gt_cv_locale_fr+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> #include <time.h> #if HAVE_LANGINFO_CODESET # include <langinfo.h> #endif #include <stdlib.h> #include <string.h> struct tm t; char buf[16]; int main () { /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl imitates locale dependent behaviour by looking at the environment variables, and all locales use the UTF-8 encoding. */ #if defined __BEOS__ || defined __HAIKU__ return 1; #else /* Check whether the given locale name is recognized by the system. */ # if defined _WIN32 && !defined __CYGWIN__ /* On native Windows, setlocale(category, "") looks at the system settings, not at the environment variables. Also, when an encoding suffix such as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE category of the locale to "C". */ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) return 1; # else if (setlocale (LC_ALL, "") == NULL) return 1; # endif /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) is empty, and the behaviour of Tcl 8.4 in this locale is not useful. On OpenBSD 4.0, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "646". In this situation, some unit tests fail. On MirBSD 10, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "UTF-8". */ # if HAVE_LANGINFO_CODESET { const char *cs = nl_langinfo (CODESET); if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0 || strcmp (cs, "UTF-8") == 0) return 1; } # endif # ifdef __CYGWIN__ /* On Cygwin, avoid locale names without encoding suffix, because the locale_charset() function relies on the encoding suffix. Note that LC_ALL is set on the command line. */ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; # endif /* Check whether in the abbreviation of the second month, the second character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is only one byte long. This excludes the UTF-8 encoding. */ t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; if (strftime (buf, sizeof (buf), "%b", &t) < 3 || buf[2] != 'v') return 1; # if !defined __BIONIC__ /* Bionic libc's 'struct lconv' is just a dummy. */ /* Check whether the decimal separator is a comma. On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point are nl_langinfo(RADIXCHAR) are both ".". */ if (localeconv () ->decimal_point[0] != ',') return 1; # endif return 0; #endif } _ACEOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest$ac_exeext; then case "$host_os" in # Handle native Windows specially, because there setlocale() interprets # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", # "fr" or "fra" as "French" or "French_France.1252", # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", # "ja" as "Japanese" or "Japanese_Japan.932", # and similar. mingw*) # Test for the native Windows locale name. if (LC_ALL=French_France.1252 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=French_France.1252 else # None found. gt_cv_locale_fr=none fi ;; *) # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the # configure script would override the LC_ALL setting. Likewise for # LC_CTYPE, which is also set at the beginning of the configure script. # Test for the usual locale name. if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=fr_FR else # Test for the locale name with explicit encoding suffix. if (LC_ALL=fr_FR.ISO-8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=fr_FR.ISO-8859-1 else # Test for the AIX, OSF/1, FreeBSD, NetBSD, OpenBSD locale name. if (LC_ALL=fr_FR.ISO8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=fr_FR.ISO8859-1 else # Test for the HP-UX locale name. if (LC_ALL=fr_FR.iso88591 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=fr_FR.iso88591 else # Test for the Solaris 7 locale name. if (LC_ALL=fr LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=fr else # None found. gt_cv_locale_fr=none fi fi fi fi fi ;; esac fi rm -fr conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_fr" >&5 printf "%s\n" "$gt_cv_locale_fr" >&6; } LOCALE_FR=$gt_cv_locale_fr GL_GNULIB_BTOWC=0 GL_GNULIB_WCTOB=0 GL_GNULIB_MBSINIT=0 GL_GNULIB_MBRTOWC=0 GL_GNULIB_MBRLEN=0 GL_GNULIB_MBSRTOWCS=0 GL_GNULIB_MBSNRTOWCS=0 GL_GNULIB_WCRTOMB=0 GL_GNULIB_WCSRTOMBS=0 GL_GNULIB_WCSNRTOMBS=0 GL_GNULIB_WCWIDTH=0 GL_GNULIB_WMEMCHR=0 GL_GNULIB_WMEMCMP=0 GL_GNULIB_WMEMCPY=0 GL_GNULIB_WMEMMOVE=0 GL_GNULIB_WMEMPCPY=0 GL_GNULIB_WMEMSET=0 GL_GNULIB_WCSLEN=0 GL_GNULIB_WCSNLEN=0 GL_GNULIB_WCSCPY=0 GL_GNULIB_WCPCPY=0 GL_GNULIB_WCSNCPY=0 GL_GNULIB_WCPNCPY=0 GL_GNULIB_WCSCAT=0 GL_GNULIB_WCSNCAT=0 GL_GNULIB_WCSCMP=0 GL_GNULIB_WCSNCMP=0 GL_GNULIB_WCSCASECMP=0 GL_GNULIB_WCSNCASECMP=0 GL_GNULIB_WCSCOLL=0 GL_GNULIB_WCSXFRM=0 GL_GNULIB_WCSDUP=0 GL_GNULIB_WCSCHR=0 GL_GNULIB_WCSRCHR=0 GL_GNULIB_WCSCSPN=0 GL_GNULIB_WCSSPN=0 GL_GNULIB_WCSPBRK=0 GL_GNULIB_WCSSTR=0 GL_GNULIB_WCSTOK=0 GL_GNULIB_WCSWIDTH=0 GL_GNULIB_WCSFTIME=0 GL_GNULIB_MDA_WCSDUP=1 GL_GNULIB__EXIT=0 GL_GNULIB_ALIGNED_ALLOC=0 GL_GNULIB_ATOLL=0 GL_GNULIB_CALLOC_GNU=0 GL_GNULIB_CALLOC_POSIX=0 GL_GNULIB_CANONICALIZE_FILE_NAME=0 GL_GNULIB_FREE_POSIX=0 GL_GNULIB_GETLOADAVG=0 GL_GNULIB_GETPROGNAME=0 GL_GNULIB_GETSUBOPT=0 GL_GNULIB_GRANTPT=0 GL_GNULIB_MALLOC_GNU=0 GL_GNULIB_MALLOC_POSIX=0 GL_GNULIB_MBSTOWCS=0 GL_GNULIB_MBTOWC=0 GL_GNULIB_MKDTEMP=0 GL_GNULIB_MKOSTEMP=0 GL_GNULIB_MKOSTEMPS=0 GL_GNULIB_MKSTEMP=0 GL_GNULIB_MKSTEMPS=0 GL_GNULIB_POSIX_MEMALIGN=0 GL_GNULIB_POSIX_OPENPT=0 GL_GNULIB_PTSNAME=0 GL_GNULIB_PTSNAME_R=0 GL_GNULIB_PUTENV=0 GL_GNULIB_QSORT_R=0 GL_GNULIB_RANDOM=0 GL_GNULIB_RANDOM_R=0 GL_GNULIB_REALLOCARRAY=0 GL_GNULIB_REALLOC_GNU=0 GL_GNULIB_REALLOC_POSIX=0 GL_GNULIB_REALPATH=0 GL_GNULIB_RPMATCH=0 GL_GNULIB_SECURE_GETENV=0 GL_GNULIB_SETENV=0 GL_GNULIB_STRTOD=0 GL_GNULIB_STRTOL=0 GL_GNULIB_STRTOLD=0 GL_GNULIB_STRTOLL=0 GL_GNULIB_STRTOUL=0 GL_GNULIB_STRTOULL=0 GL_GNULIB_SYSTEM_POSIX=0 GL_GNULIB_UNLOCKPT=0 GL_GNULIB_UNSETENV=0 GL_GNULIB_WCTOMB=0 GL_GNULIB_MDA_ECVT=1 GL_GNULIB_MDA_FCVT=1 GL_GNULIB_MDA_GCVT=1 GL_GNULIB_MDA_MKTEMP=1 GL_GNULIB_MDA_PUTENV=1 HAVE__EXIT=1; HAVE_ALIGNED_ALLOC=1; HAVE_ATOLL=1; HAVE_CANONICALIZE_FILE_NAME=1; HAVE_DECL_ECVT=1; HAVE_DECL_FCVT=1; HAVE_DECL_GCVT=1; HAVE_DECL_GETLOADAVG=1; HAVE_DECL_PROGRAM_INVOCATION_NAME=1; HAVE_GETPROGNAME=1; HAVE_GETSUBOPT=1; HAVE_GRANTPT=1; HAVE_INITSTATE=1; HAVE_DECL_INITSTATE=1; HAVE_MBTOWC=1; HAVE_MKDTEMP=1; HAVE_MKOSTEMP=1; HAVE_MKOSTEMPS=1; HAVE_MKSTEMP=1; HAVE_MKSTEMPS=1; HAVE_POSIX_MEMALIGN=1; HAVE_POSIX_OPENPT=1; HAVE_PTSNAME=1; HAVE_PTSNAME_R=1; HAVE_QSORT_R=1; HAVE_RANDOM=1; HAVE_RANDOM_H=1; HAVE_RANDOM_R=1; HAVE_REALLOCARRAY=1; HAVE_REALPATH=1; HAVE_RPMATCH=1; HAVE_SECURE_GETENV=1; HAVE_SETENV=1; HAVE_DECL_SETENV=1; HAVE_SETSTATE=1; HAVE_DECL_SETSTATE=1; HAVE_STRTOD=1; HAVE_STRTOL=1; HAVE_STRTOLD=1; HAVE_STRTOLL=1; HAVE_STRTOUL=1; HAVE_STRTOULL=1; HAVE_STRUCT_RANDOM_DATA=1; HAVE_SYS_LOADAVG_H=0; HAVE_UNLOCKPT=1; HAVE_DECL_UNSETENV=1; REPLACE__EXIT=0; REPLACE_ALIGNED_ALLOC=0; REPLACE_CALLOC_FOR_CALLOC_GNU=0; REPLACE_CALLOC_FOR_CALLOC_POSIX=0; REPLACE_CANONICALIZE_FILE_NAME=0; REPLACE_FREE=0; REPLACE_GETLOADAVG=0; REPLACE_GETPROGNAME=0; REPLACE_GETSUBOPT=0; REPLACE_INITSTATE=0; REPLACE_MALLOC_FOR_MALLOC_GNU=0; REPLACE_MALLOC_FOR_MALLOC_POSIX=0; REPLACE_MB_CUR_MAX=0; REPLACE_MBSTOWCS=0; REPLACE_MBTOWC=0; REPLACE_MKOSTEMP=0; REPLACE_MKOSTEMPS=0; REPLACE_MKSTEMP=0; REPLACE_POSIX_MEMALIGN=0; REPLACE_POSIX_OPENPT=0; REPLACE_PTSNAME=0; REPLACE_PTSNAME_R=0; REPLACE_PUTENV=0; REPLACE_QSORT_R=0; REPLACE_RANDOM=0; REPLACE_RANDOM_R=0; REPLACE_REALLOC_FOR_REALLOC_GNU=0; REPLACE_REALLOC_FOR_REALLOC_POSIX=0; REPLACE_REALLOCARRAY=0; REPLACE_REALPATH=0; REPLACE_SETENV=0; REPLACE_SETSTATE=0; REPLACE_STRTOD=0; REPLACE_STRTOL=0; REPLACE_STRTOLD=0; REPLACE_STRTOLL=0; REPLACE_STRTOUL=0; REPLACE_STRTOULL=0; REPLACE_UNSETENV=0; REPLACE_WCTOMB=0; { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether malloc is ptrdiff_t safe" >&5 printf %s "checking whether malloc is ptrdiff_t safe... " >&6; } if test ${gl_cv_malloc_ptrdiff+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdint.h> int main (void) { /* 64-bit ptrdiff_t is so wide that no practical platform can exceed it. */ #define WIDE_PTRDIFF (PTRDIFF_MAX >> 31 >> 31 != 0) /* On rare machines where size_t fits in ptrdiff_t there is no problem. */ #define NARROW_SIZE (SIZE_MAX <= PTRDIFF_MAX) /* glibc 2.30 and later malloc refuses to exceed ptrdiff_t bounds even on 32-bit platforms. We don't know which non-glibc systems are safe. */ #define KNOWN_SAFE (2 < __GLIBC__ + (30 <= __GLIBC_MINOR__)) #if WIDE_PTRDIFF || NARROW_SIZE || KNOWN_SAFE return 0; #else #error "malloc might not be ptrdiff_t safe" syntax error #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_malloc_ptrdiff=yes else $as_nop gl_cv_malloc_ptrdiff=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_malloc_ptrdiff" >&5 printf "%s\n" "$gl_cv_malloc_ptrdiff" >&6; } test "$gl_cv_malloc_ptrdiff" = yes || REPLACE_MALLOC_FOR_MALLOC_POSIX=1 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether malloc, realloc, calloc set errno on failure" >&5 printf %s "checking whether malloc, realloc, calloc set errno on failure... " >&6; } if test ${gl_cv_func_malloc_posix+y} then : printf %s "(cached) " >&6 else $as_nop case "$host_os" in mingw*) gl_cv_func_malloc_posix=no ;; irix* | solaris*) gl_cv_func_malloc_posix=no ;; *) gl_cv_func_malloc_posix=yes ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_malloc_posix" >&5 printf "%s\n" "$gl_cv_func_malloc_posix" >&6; } if test "$gl_cv_func_malloc_posix" = yes; then printf "%s\n" "#define HAVE_MALLOC_POSIX 1" >>confdefs.h else REPLACE_MALLOC_FOR_MALLOC_POSIX=1 fi if test $REPLACE_MALLOC_FOR_MALLOC_POSIX = 1; then REPLACE_CALLOC_FOR_CALLOC_POSIX=1 fi HAVE_CHOWN=1; HAVE_COPY_FILE_RANGE=1; HAVE_DUP3=1; HAVE_EUIDACCESS=1; HAVE_EXECVPE=1; HAVE_FACCESSAT=1; HAVE_FCHDIR=1; HAVE_FCHOWNAT=1; HAVE_FDATASYNC=1; HAVE_FSYNC=1; HAVE_FTRUNCATE=1; HAVE_GETDTABLESIZE=1; HAVE_GETENTROPY=1; HAVE_GETGROUPS=1; HAVE_GETHOSTNAME=1; HAVE_GETLOGIN=1; HAVE_GETPAGESIZE=1; HAVE_GETPASS=1; HAVE_GROUP_MEMBER=1; HAVE_LCHOWN=1; HAVE_LINK=1; HAVE_LINKAT=1; HAVE_PIPE=1; HAVE_PIPE2=1; HAVE_PREAD=1; HAVE_PWRITE=1; HAVE_READLINK=1; HAVE_READLINKAT=1; HAVE_SETHOSTNAME=1; HAVE_SLEEP=1; HAVE_SYMLINK=1; HAVE_SYMLINKAT=1; HAVE_UNLINKAT=1; HAVE_USLEEP=1; HAVE_DECL_ENVIRON=1; HAVE_DECL_EXECVPE=1; HAVE_DECL_FCHDIR=1; HAVE_DECL_FDATASYNC=1; HAVE_DECL_GETDOMAINNAME=1; HAVE_DECL_GETLOGIN=1; HAVE_DECL_GETLOGIN_R=1; HAVE_DECL_GETPAGESIZE=1; HAVE_DECL_GETUSERSHELL=1; HAVE_DECL_SETHOSTNAME=1; HAVE_DECL_TRUNCATE=1; HAVE_DECL_TTYNAME_R=1; HAVE_OS_H=0; HAVE_SYS_PARAM_H=0; REPLACE_ACCESS=0; REPLACE_CHOWN=0; REPLACE_CLOSE=0; REPLACE_COPY_FILE_RANGE=0; REPLACE_DUP=0; REPLACE_DUP2=0; REPLACE_DUP3=0; REPLACE_EXECL=0; REPLACE_EXECLE=0; REPLACE_EXECLP=0; REPLACE_EXECV=0; REPLACE_EXECVE=0; REPLACE_EXECVP=0; REPLACE_EXECVPE=0; REPLACE_FACCESSAT=0; REPLACE_FCHOWNAT=0; REPLACE_FDATASYNC=0; REPLACE_FTRUNCATE=0; REPLACE_GETCWD=0; REPLACE_GETDOMAINNAME=0; REPLACE_GETDTABLESIZE=0; REPLACE_GETENTROPY=0; REPLACE_GETLOGIN_R=0; REPLACE_GETGROUPS=0; REPLACE_GETPAGESIZE=0; REPLACE_GETPASS=0; REPLACE_GETPASS_FOR_GETPASS_GNU=0; REPLACE_ISATTY=0; REPLACE_LCHOWN=0; REPLACE_LINK=0; REPLACE_LINKAT=0; REPLACE_LSEEK=0; REPLACE_PIPE2=0; REPLACE_PREAD=0; REPLACE_PWRITE=0; REPLACE_READ=0; REPLACE_READLINK=0; REPLACE_READLINKAT=0; REPLACE_RMDIR=0; REPLACE_SETHOSTNAME=0; REPLACE_SLEEP=0; REPLACE_SYMLINK=0; REPLACE_SYMLINKAT=0; REPLACE_TRUNCATE=0; REPLACE_TTYNAME_R=0; REPLACE_UNLINK=0; REPLACE_UNLINKAT=0; REPLACE_USLEEP=0; REPLACE_WRITE=0; UNISTD_H_HAVE_SYS_RANDOM_H=0; UNISTD_H_HAVE_WINSOCK2_H=0; UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS=0; if test $ac_cv_func__set_invalid_parameter_handler = yes; then HAVE_MSVC_INVALID_PARAMETER_HANDLER=1 printf "%s\n" "#define HAVE_MSVC_INVALID_PARAMETER_HANDLER 1" >>confdefs.h else HAVE_MSVC_INVALID_PARAMETER_HANDLER=0 fi if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then REPLACE_CLOSE=1 fi if test $ac_cv_header_sys_socket_h != yes; then ac_fn_c_check_header_compile "$LINENO" "winsock2.h" "ac_cv_header_winsock2_h" "$ac_includes_default" if test "x$ac_cv_header_winsock2_h" = xyes then : printf "%s\n" "#define HAVE_WINSOCK2_H 1" >>confdefs.h fi fi if test "$ac_cv_header_winsock2_h" = yes; then HAVE_WINSOCK2_H=1 UNISTD_H_HAVE_WINSOCK2_H=1 SYS_IOCTL_H_HAVE_WINSOCK2_H=1 else HAVE_WINSOCK2_H=0 fi if test $UNISTD_H_HAVE_WINSOCK2_H = 1; then REPLACE_CLOSE=1 fi GL_GNULIB_ACCESS=0 GL_GNULIB_CHDIR=0 GL_GNULIB_CHOWN=0 GL_GNULIB_CLOSE=0 GL_GNULIB_COPY_FILE_RANGE=0 GL_GNULIB_DUP=0 GL_GNULIB_DUP2=0 GL_GNULIB_DUP3=0 GL_GNULIB_ENVIRON=0 GL_GNULIB_EUIDACCESS=0 GL_GNULIB_EXECL=0 GL_GNULIB_EXECLE=0 GL_GNULIB_EXECLP=0 GL_GNULIB_EXECV=0 GL_GNULIB_EXECVE=0 GL_GNULIB_EXECVP=0 GL_GNULIB_EXECVPE=0 GL_GNULIB_FACCESSAT=0 GL_GNULIB_FCHDIR=0 GL_GNULIB_FCHOWNAT=0 GL_GNULIB_FDATASYNC=0 GL_GNULIB_FSYNC=0 GL_GNULIB_FTRUNCATE=0 GL_GNULIB_GETCWD=0 GL_GNULIB_GETDOMAINNAME=0 GL_GNULIB_GETDTABLESIZE=0 GL_GNULIB_GETENTROPY=0 GL_GNULIB_GETGROUPS=0 GL_GNULIB_GETHOSTNAME=0 GL_GNULIB_GETLOGIN=0 GL_GNULIB_GETLOGIN_R=0 GL_GNULIB_GETOPT_POSIX=0 GL_GNULIB_GETPAGESIZE=0 GL_GNULIB_GETPASS=0 GL_GNULIB_GETPASS_GNU=0 GL_GNULIB_GETUSERSHELL=0 GL_GNULIB_GROUP_MEMBER=0 GL_GNULIB_ISATTY=0 GL_GNULIB_LCHOWN=0 GL_GNULIB_LINK=0 GL_GNULIB_LINKAT=0 GL_GNULIB_LSEEK=0 GL_GNULIB_PIPE=0 GL_GNULIB_PIPE2=0 GL_GNULIB_PREAD=0 GL_GNULIB_PWRITE=0 GL_GNULIB_READ=0 GL_GNULIB_READLINK=0 GL_GNULIB_READLINKAT=0 GL_GNULIB_RMDIR=0 GL_GNULIB_SETHOSTNAME=0 GL_GNULIB_SLEEP=0 GL_GNULIB_SYMLINK=0 GL_GNULIB_SYMLINKAT=0 GL_GNULIB_TRUNCATE=0 GL_GNULIB_TTYNAME_R=0 GL_GNULIB_UNISTD_H_GETOPT=0 GL_GNULIB_UNISTD_H_NONBLOCKING=0 GL_GNULIB_UNISTD_H_SIGPIPE=0 GL_GNULIB_UNLINK=0 GL_GNULIB_UNLINKAT=0 GL_GNULIB_USLEEP=0 GL_GNULIB_WRITE=0 GL_GNULIB_MDA_ACCESS=1 GL_GNULIB_MDA_CHDIR=1 GL_GNULIB_MDA_CLOSE=1 GL_GNULIB_MDA_DUP=1 GL_GNULIB_MDA_DUP2=1 GL_GNULIB_MDA_EXECL=1 GL_GNULIB_MDA_EXECLE=1 GL_GNULIB_MDA_EXECLP=1 GL_GNULIB_MDA_EXECV=1 GL_GNULIB_MDA_EXECVE=1 GL_GNULIB_MDA_EXECVP=1 GL_GNULIB_MDA_EXECVPE=1 GL_GNULIB_MDA_GETCWD=1 GL_GNULIB_MDA_GETPID=1 GL_GNULIB_MDA_ISATTY=1 GL_GNULIB_MDA_LSEEK=1 GL_GNULIB_MDA_READ=1 GL_GNULIB_MDA_RMDIR=1 GL_GNULIB_MDA_SWAB=1 GL_GNULIB_MDA_UNLINK=1 GL_GNULIB_MDA_WRITE=1 gl_mda_defines=' #if defined _WIN32 && !defined __CYGWIN__ #define access _access #define chdir _chdir #define chmod _chmod #define close _close #define creat _creat #define dup _dup #define dup2 _dup2 #define ecvt _ecvt #define execl _execl #define execle _execle #define execlp _execlp #define execv _execv #define execve _execve #define execvp _execvp #define execvpe _execvpe #define fcloseall _fcloseall #define fcvt _fcvt #define fdopen _fdopen #define fileno _fileno #define gcvt _gcvt #define getcwd _getcwd #define getpid _getpid #define getw _getw #define isatty _isatty #define j0 _j0 #define j1 _j1 #define jn _jn #define lfind _lfind #define lsearch _lsearch #define lseek _lseek #define memccpy _memccpy #define mkdir _mkdir #define mktemp _mktemp #define open _open #define putenv _putenv #define putw _putw #define read _read #define rmdir _rmdir #define strdup _strdup #define swab _swab #define tempnam _tempnam #define tzset _tzset #define umask _umask #define unlink _unlink #define utime _utime #define wcsdup _wcsdup #define write _write #define y0 _y0 #define y1 _y1 #define yn _yn #endif ' { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if environ is properly declared" >&5 printf %s "checking if environ is properly declared... " >&6; } if test ${gt_cv_var_environ_declaration+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if HAVE_UNISTD_H #include <unistd.h> #endif /* mingw, BeOS, Haiku declare environ in <stdlib.h>, not in <unistd.h>. */ #include <stdlib.h> typedef struct { int foo; } foo_t; extern foo_t environ; int main (void) { environ.foo = 1; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gt_cv_var_environ_declaration=no else $as_nop gt_cv_var_environ_declaration=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_var_environ_declaration" >&5 printf "%s\n" "$gt_cv_var_environ_declaration" >&6; } if test $gt_cv_var_environ_declaration = yes; then printf "%s\n" "#define HAVE_ENVIRON_DECL 1" >>confdefs.h fi if test $gt_cv_var_environ_declaration != yes; then HAVE_DECL_ENVIRON=0 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for complete errno.h" >&5 printf %s "checking for complete errno.h... " >&6; } if test ${gl_cv_header_errno_h_complete+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <errno.h> #if !defined ETXTBSY booboo #endif #if !defined ENOMSG booboo #endif #if !defined EIDRM booboo #endif #if !defined ENOLINK booboo #endif #if !defined EPROTO booboo #endif #if !defined EMULTIHOP booboo #endif #if !defined EBADMSG booboo #endif #if !defined EOVERFLOW booboo #endif #if !defined ENOTSUP booboo #endif #if !defined ENETRESET booboo #endif #if !defined ECONNABORTED booboo #endif #if !defined ESTALE booboo #endif #if !defined EDQUOT booboo #endif #if !defined ECANCELED booboo #endif #if !defined EOWNERDEAD booboo #endif #if !defined ENOTRECOVERABLE booboo #endif #if !defined EILSEQ booboo #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "booboo" >/dev/null 2>&1 then : gl_cv_header_errno_h_complete=no else $as_nop gl_cv_header_errno_h_complete=yes fi rm -rf conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_errno_h_complete" >&5 printf "%s\n" "$gl_cv_header_errno_h_complete" >&6; } if test $gl_cv_header_errno_h_complete = yes; then GL_GENERATE_ERRNO_H=false else if test $gl_cv_have_include_next = yes; then gl_cv_next_errno_h='<'errno.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <errno.h>" >&5 printf %s "checking absolute name of <errno.h>... " >&6; } if test ${gl_cv_next_errno_h+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <errno.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'errno.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_errno_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_errno_h gl_cv_next_errno_h='"'$gl_header'"' fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_errno_h" >&5 printf "%s\n" "$gl_cv_next_errno_h" >&6; } fi NEXT_ERRNO_H=$gl_cv_next_errno_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'errno.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_errno_h fi NEXT_AS_FIRST_DIRECTIVE_ERRNO_H=$gl_next_as_first_directive GL_GENERATE_ERRNO_H=true fi if $GL_GENERATE_ERRNO_H; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for EMULTIHOP value" >&5 printf %s "checking for EMULTIHOP value... " >&6; } if test ${gl_cv_header_errno_h_EMULTIHOP+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <errno.h> #ifdef EMULTIHOP yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "yes" >/dev/null 2>&1 then : gl_cv_header_errno_h_EMULTIHOP=yes else $as_nop gl_cv_header_errno_h_EMULTIHOP=no fi rm -rf conftest* if test $gl_cv_header_errno_h_EMULTIHOP = no; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _XOPEN_SOURCE_EXTENDED 1 #include <errno.h> #ifdef EMULTIHOP yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "yes" >/dev/null 2>&1 then : gl_cv_header_errno_h_EMULTIHOP=hidden fi rm -rf conftest* if test $gl_cv_header_errno_h_EMULTIHOP = hidden; then if ac_fn_c_compute_int "$LINENO" "EMULTIHOP" "gl_cv_header_errno_h_EMULTIHOP" " #define _XOPEN_SOURCE_EXTENDED 1 #include <errno.h> /* The following two lines are a workaround against an autoconf-2.52 bug. */ #include <stdio.h> #include <stdlib.h> " then : fi fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_errno_h_EMULTIHOP" >&5 printf "%s\n" "$gl_cv_header_errno_h_EMULTIHOP" >&6; } case $gl_cv_header_errno_h_EMULTIHOP in yes | no) EMULTIHOP_HIDDEN=0; EMULTIHOP_VALUE= ;; *) EMULTIHOP_HIDDEN=1; EMULTIHOP_VALUE="$gl_cv_header_errno_h_EMULTIHOP" ;; esac fi if $GL_GENERATE_ERRNO_H; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ENOLINK value" >&5 printf %s "checking for ENOLINK value... " >&6; } if test ${gl_cv_header_errno_h_ENOLINK+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <errno.h> #ifdef ENOLINK yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "yes" >/dev/null 2>&1 then : gl_cv_header_errno_h_ENOLINK=yes else $as_nop gl_cv_header_errno_h_ENOLINK=no fi rm -rf conftest* if test $gl_cv_header_errno_h_ENOLINK = no; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _XOPEN_SOURCE_EXTENDED 1 #include <errno.h> #ifdef ENOLINK yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "yes" >/dev/null 2>&1 then : gl_cv_header_errno_h_ENOLINK=hidden fi rm -rf conftest* if test $gl_cv_header_errno_h_ENOLINK = hidden; then if ac_fn_c_compute_int "$LINENO" "ENOLINK" "gl_cv_header_errno_h_ENOLINK" " #define _XOPEN_SOURCE_EXTENDED 1 #include <errno.h> /* The following two lines are a workaround against an autoconf-2.52 bug. */ #include <stdio.h> #include <stdlib.h> " then : fi fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_errno_h_ENOLINK" >&5 printf "%s\n" "$gl_cv_header_errno_h_ENOLINK" >&6; } case $gl_cv_header_errno_h_ENOLINK in yes | no) ENOLINK_HIDDEN=0; ENOLINK_VALUE= ;; *) ENOLINK_HIDDEN=1; ENOLINK_VALUE="$gl_cv_header_errno_h_ENOLINK" ;; esac fi if $GL_GENERATE_ERRNO_H; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for EOVERFLOW value" >&5 printf %s "checking for EOVERFLOW value... " >&6; } if test ${gl_cv_header_errno_h_EOVERFLOW+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <errno.h> #ifdef EOVERFLOW yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "yes" >/dev/null 2>&1 then : gl_cv_header_errno_h_EOVERFLOW=yes else $as_nop gl_cv_header_errno_h_EOVERFLOW=no fi rm -rf conftest* if test $gl_cv_header_errno_h_EOVERFLOW = no; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _XOPEN_SOURCE_EXTENDED 1 #include <errno.h> #ifdef EOVERFLOW yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "yes" >/dev/null 2>&1 then : gl_cv_header_errno_h_EOVERFLOW=hidden fi rm -rf conftest* if test $gl_cv_header_errno_h_EOVERFLOW = hidden; then if ac_fn_c_compute_int "$LINENO" "EOVERFLOW" "gl_cv_header_errno_h_EOVERFLOW" " #define _XOPEN_SOURCE_EXTENDED 1 #include <errno.h> /* The following two lines are a workaround against an autoconf-2.52 bug. */ #include <stdio.h> #include <stdlib.h> " then : fi fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_errno_h_EOVERFLOW" >&5 printf "%s\n" "$gl_cv_header_errno_h_EOVERFLOW" >&6; } case $gl_cv_header_errno_h_EOVERFLOW in yes | no) EOVERFLOW_HIDDEN=0; EOVERFLOW_VALUE= ;; *) EOVERFLOW_HIDDEN=1; EOVERFLOW_VALUE="$gl_cv_header_errno_h_EOVERFLOW" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC options needed to detect all undeclared functions" >&5 printf %s "checking for $CC options needed to detect all undeclared functions... " >&6; } if test ${ac_cv_c_undeclared_builtin_options+y} then : printf %s "(cached) " >&6 else $as_nop ac_save_CFLAGS=$CFLAGS ac_cv_c_undeclared_builtin_options='cannot detect' for ac_arg in '' -fno-builtin; do CFLAGS="$ac_save_CFLAGS $ac_arg" # This test program should *not* compile successfully. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { (void) strchr; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else $as_nop # This test program should compile successfully. # No library function is consistently available on # freestanding implementations, so test against a dummy # declaration. Include always-available headers on the # off chance that they somehow elicit warnings. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <float.h> #include <limits.h> #include <stdarg.h> #include <stddef.h> extern void ac_decl (int, char *); int main (void) { (void) ac_decl (0, (char *) 0); (void) ac_decl; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : if test x"$ac_arg" = x then : ac_cv_c_undeclared_builtin_options='none needed' else $as_nop ac_cv_c_undeclared_builtin_options=$ac_arg fi break fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done CFLAGS=$ac_save_CFLAGS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_undeclared_builtin_options" >&5 printf "%s\n" "$ac_cv_c_undeclared_builtin_options" >&6; } case $ac_cv_c_undeclared_builtin_options in #( 'cannot detect') : { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot make $CC report undeclared builtins See \`config.log' for more details" "$LINENO" 5; } ;; #( 'none needed') : ac_c_undeclared_builtin_options='' ;; #( *) : ac_c_undeclared_builtin_options=$ac_cv_c_undeclared_builtin_options ;; esac if test $gl_cv_have_include_next = yes; then gl_cv_next_error_h='<'error.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <error.h>" >&5 printf %s "checking absolute name of <error.h>... " >&6; } if test ${gl_cv_next_error_h+y} then : printf %s "(cached) " >&6 else $as_nop if test $ac_cv_header_error_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <error.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'error.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_error_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_error_h gl_cv_next_error_h='"'$gl_header'"' else gl_cv_next_error_h='<'error.h'>' fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_error_h" >&5 printf "%s\n" "$gl_cv_next_error_h" >&6; } fi NEXT_ERROR_H=$gl_cv_next_error_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'error.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_error_h fi NEXT_AS_FIRST_DIRECTIVE_ERROR_H=$gl_next_as_first_directive if test $ac_cv_header_error_h = yes; then HAVE_ERROR_H=1 else HAVE_ERROR_H=0 fi REPLACE_ERROR=0 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for error" >&5 printf %s "checking for error... " >&6; } if test ${gl_cv_onwards_func_error+y} then : printf %s "(cached) " >&6 else $as_nop exec 9>&6 6>/dev/null case "$host_os" in linux*-android*) ac_fn_check_decl "$LINENO" "error" "ac_cv_have_decl_error" "#include <error.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_error" = xyes then : fi if test $ac_cv_have_decl_error = yes; then ac_fn_c_check_func "$LINENO" "error" "ac_cv_func_error" if test "x$ac_cv_func_error" = xyes then : fi if test $ac_cv_func_error = yes; then gl_cv_onwards_func_error=yes else gl_cv_onwards_func_error='future OS version' fi else gl_cv_onwards_func_error='future OS version' fi ;; *) ac_fn_c_check_func "$LINENO" "error" "ac_cv_func_error" if test "x$ac_cv_func_error" = xyes then : fi gl_cv_onwards_func_error=$ac_cv_func_error ;; esac exec 6>&9 9>&- fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_onwards_func_error" >&5 printf "%s\n" "$gl_cv_onwards_func_error" >&6; } case "$gl_cv_onwards_func_error" in future*) ac_cv_func_error=no ;; *) ac_cv_func_error=$gl_cv_onwards_func_error ;; esac if test $ac_cv_func_error = yes; then printf "%s\n" "#define HAVE_ERROR 1" >>confdefs.h fi if test $ac_cv_func_error = yes; then HAVE_ERROR=1 else HAVE_ERROR=0 case "$gl_cv_onwards_func_error" in future*) REPLACE_ERROR=1 ;; esac fi ac_fn_check_decl "$LINENO" "error_at_line" "ac_cv_have_decl_error_at_line" "#include <error.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_error_at_line" = xyes then : fi if test $ac_cv_have_decl_error_at_line = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for error_at_line" >&5 printf %s "checking for error_at_line... " >&6; } if test ${ac_cv_lib_error_at_line+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <error.h> int main (void) { error_at_line (0, 0, "", 0, "an error occurred"); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_error_at_line=yes else $as_nop ac_cv_lib_error_at_line=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_error_at_line" >&5 printf "%s\n" "$ac_cv_lib_error_at_line" >&6; } else ac_cv_lib_error_at_line=no fi if test $ac_cv_lib_error_at_line = yes; then HAVE_ERROR_AT_LINE=1 else HAVE_ERROR_AT_LINE=0 fi REPLACE_ERROR_AT_LINE=0 if test $ac_cv_func_error = yes && test $ac_cv_lib_error_at_line = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working error function" >&5 printf %s "checking for working error function... " >&6; } if test ${gl_cv_func_working_error+y} then : printf %s "(cached) " >&6 else $as_nop if test $cross_compiling != yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <error.h> static void print_no_progname (void) {} int main (void) { error_print_progname = print_no_progname; error (0, 0, "foo"); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : rm -f conftest.out if test -s conftest$ac_exeext \ && ./conftest$ac_exeext 2> conftest.out; then if grep ' ' conftest.out >/dev/null; then gl_cv_func_working_error=no else gl_cv_func_working_error=yes fi else gl_cv_func_working_error=no fi rm -f conftest.out else $as_nop gl_cv_func_working_error=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <error.h> int main (void) { error (0, 0, "foo"); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_working_error="guessing yes" ;; # Guess no on Android. linux*-android*) gl_cv_func_working_error="guessing no" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_working_error="$gl_cross_guess_normal" ;; esac else $as_nop gl_cv_func_working_error=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_working_error" >&5 printf "%s\n" "$gl_cv_func_working_error" >&6; } case "$gl_cv_func_working_error" in *no) REPLACE_ERROR=1 REPLACE_ERROR_AT_LINE=1 ;; esac fi if test $HAVE_ERROR = 0 || test $REPLACE_ERROR = 1 \ || test $HAVE_ERROR_AT_LINE = 0 || test $REPLACE_ERROR_AT_LINE = 1; then COMPILE_ERROR_C=1 else COMPILE_ERROR_C=0 fi ac_fn_check_decl "$LINENO" "strerror_r" "ac_cv_have_decl_strerror_r" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_strerror_r" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_STRERROR_R $ac_have_decl" >>confdefs.h if test $ac_cv_have_decl_strerror_r = yes; then # For backward compatibility's sake, define HAVE_STRERROR_R. # (We used to run AC_CHECK_FUNCS_ONCE for strerror_r, as well # as AC_CHECK_DECLS_ONCE.) printf "%s\n" "#define HAVE_STRERROR_R 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether strerror_r returns char *" >&5 printf %s "checking whether strerror_r returns char *... " >&6; } if test ${ac_cv_func_strerror_r_char_p+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_func_strerror_r_char_p=no if test $ac_cv_have_decl_strerror_r = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <string.h> int main (void) { char buf[100]; char x = *strerror_r (0, buf, sizeof buf); char *p = strerror_r (0, buf, sizeof buf); return !p || x; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_func_strerror_r_char_p=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_strerror_r_char_p" >&5 printf "%s\n" "$ac_cv_func_strerror_r_char_p" >&6; } if test $ac_cv_func_strerror_r_char_p = yes; then printf "%s\n" "#define STRERROR_R_CHAR_P 1" >>confdefs.h fi XGETTEXT_EXTRA_OPTIONS= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ctype.h defines __header_inline" >&5 printf %s "checking whether ctype.h defines __header_inline... " >&6; } if test ${gl_cv_have___header_inline+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <ctype.h> #ifndef __header_inline #error "<ctype.h> does not define __header_inline" #endif _ACEOF if ac_fn_c_try_cpp "$LINENO" then : gl_cv_have___header_inline=yes else $as_nop gl_cv_have___header_inline=no fi rm -f conftest.err conftest.i conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_have___header_inline" >&5 printf "%s\n" "$gl_cv_have___header_inline" >&6; } if test "$gl_cv_have___header_inline" = yes; then printf "%s\n" "#define HAVE___HEADER_INLINE 1" >>confdefs.h fi HAVE_FCNTL=1; HAVE_OPENAT=1; REPLACE_CREAT=0; REPLACE_FCNTL=0; REPLACE_OPEN=0; REPLACE_OPENAT=0; GL_GNULIB_CREAT=0 GL_GNULIB_FCNTL=0 GL_GNULIB_NONBLOCKING=0 GL_GNULIB_OPEN=0 GL_GNULIB_OPENAT=0 GL_GNULIB_MDA_CREAT=1 GL_GNULIB_MDA_OPEN=1 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working fcntl.h" >&5 printf %s "checking for working fcntl.h... " >&6; } if test ${gl_cv_header_working_fcntl_h+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case "$host_os" in # Guess 'no' on native Windows. mingw*) gl_cv_header_working_fcntl_h='no' ;; *) gl_cv_header_working_fcntl_h=cross-compiling ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> #include <sys/stat.h> #if HAVE_UNISTD_H # include <unistd.h> #else /* on Windows with MSVC */ # include <io.h> # include <stdlib.h> # defined sleep(n) _sleep ((n) * 1000) #endif #include <fcntl.h> $gl_mda_defines #ifndef O_NOATIME #define O_NOATIME 0 #endif #ifndef O_NOFOLLOW #define O_NOFOLLOW 0 #endif static int const constants[] = { O_CREAT, O_EXCL, O_NOCTTY, O_TRUNC, O_APPEND, O_NONBLOCK, O_SYNC, O_ACCMODE, O_RDONLY, O_RDWR, O_WRONLY }; int main (void) { int result = !constants; #if HAVE_SYMLINK { static char const sym[] = "conftest.sym"; if (symlink ("/dev/null", sym) != 0) result |= 2; else { int fd = open (sym, O_WRONLY | O_NOFOLLOW | O_CREAT, 0); if (fd >= 0) { close (fd); result |= 4; } } if (unlink (sym) != 0 || symlink (".", sym) != 0) result |= 2; else { int fd = open (sym, O_RDONLY | O_NOFOLLOW); if (fd >= 0) { close (fd); result |= 4; } } unlink (sym); } #endif { static char const file[] = "confdefs.h"; int fd = open (file, O_RDONLY | O_NOATIME); if (fd < 0) result |= 8; else { struct stat st0; if (fstat (fd, &st0) != 0) result |= 16; else { char c; sleep (1); if (read (fd, &c, 1) != 1) result |= 24; else { if (close (fd) != 0) result |= 32; else { struct stat st1; if (stat (file, &st1) != 0) result |= 40; else if (st0.st_atime != st1.st_atime) result |= 64; } } } } } return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_header_working_fcntl_h=yes else $as_nop case $? in #( 4) gl_cv_header_working_fcntl_h='no (bad O_NOFOLLOW)';; #( 64) gl_cv_header_working_fcntl_h='no (bad O_NOATIME)';; #( 68) gl_cv_header_working_fcntl_h='no (bad O_NOATIME, O_NOFOLLOW)';; #( *) gl_cv_header_working_fcntl_h='no';; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_working_fcntl_h" >&5 printf "%s\n" "$gl_cv_header_working_fcntl_h" >&6; } case $gl_cv_header_working_fcntl_h in #( *O_NOATIME* | no | cross-compiling) ac_val=0;; #( *) ac_val=1;; esac printf "%s\n" "#define HAVE_WORKING_O_NOATIME $ac_val" >>confdefs.h case $gl_cv_header_working_fcntl_h in #( *O_NOFOLLOW* | no | cross-compiling) ac_val=0;; #( *) ac_val=1;; esac printf "%s\n" "#define HAVE_WORKING_O_NOFOLLOW $ac_val" >>confdefs.h ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default " if test "x$ac_cv_type_pid_t" = xyes then : else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined _WIN64 && !defined __CYGWIN__ LLP64 #endif int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_pid_type='int' else $as_nop ac_pid_type='__int64' fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext printf "%s\n" "#define pid_t $ac_pid_type" >>confdefs.h fi if test $gl_cv_have_include_next = yes; then gl_cv_next_fcntl_h='<'fcntl.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <fcntl.h>" >&5 printf %s "checking absolute name of <fcntl.h>... " >&6; } if test ${gl_cv_next_fcntl_h+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <fcntl.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'fcntl.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_fcntl_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_fcntl_h gl_cv_next_fcntl_h='"'$gl_header'"' fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_fcntl_h" >&5 printf "%s\n" "$gl_cv_next_fcntl_h" >&6; } fi NEXT_FCNTL_H=$gl_cv_next_fcntl_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'fcntl.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_fcntl_h fi NEXT_AS_FIRST_DIRECTIVE_FCNTL_H=$gl_next_as_first_directive HAVE_FCHMODAT=1; HAVE_FSTATAT=1; HAVE_FUTIMENS=1; HAVE_GETUMASK=1; HAVE_LCHMOD=1; HAVE_LSTAT=1; HAVE_MKDIRAT=1; HAVE_MKFIFO=1; HAVE_MKFIFOAT=1; HAVE_MKNOD=1; HAVE_MKNODAT=1; HAVE_UTIMENSAT=1; REPLACE_CHMOD=0; REPLACE_FCHMODAT=0; REPLACE_FSTAT=0; REPLACE_FSTATAT=0; REPLACE_FUTIMENS=0; REPLACE_LSTAT=0; REPLACE_MKDIR=0; REPLACE_MKFIFO=0; REPLACE_MKFIFOAT=0; REPLACE_MKNOD=0; REPLACE_MKNODAT=0; REPLACE_STAT=0; REPLACE_UTIMENSAT=0; { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether stat file-mode macros are broken" >&5 printf %s "checking whether stat file-mode macros are broken... " >&6; } if test ${ac_cv_header_stat_broken+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> #include <sys/stat.h> #if defined S_ISBLK && defined S_IFDIR extern char c1[S_ISBLK (S_IFDIR) ? -1 : 1]; #endif #if defined S_ISBLK && defined S_IFCHR extern char c2[S_ISBLK (S_IFCHR) ? -1 : 1]; #endif #if defined S_ISLNK && defined S_IFREG extern char c3[S_ISLNK (S_IFREG) ? -1 : 1]; #endif #if defined S_ISSOCK && defined S_IFREG extern char c4[S_ISSOCK (S_IFREG) ? -1 : 1]; #endif _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_header_stat_broken=no else $as_nop ac_cv_header_stat_broken=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stat_broken" >&5 printf "%s\n" "$ac_cv_header_stat_broken" >&6; } if test $ac_cv_header_stat_broken = yes; then printf "%s\n" "#define STAT_MACROS_BROKEN 1" >>confdefs.h fi case "$host_os" in mingw*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 64-bit off_t" >&5 printf %s "checking for 64-bit off_t... " >&6; } if test ${gl_cv_type_off_t_64+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> int verify_off_t_size[sizeof (off_t) >= 8 ? 1 : -1]; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_type_off_t_64=yes else $as_nop gl_cv_type_off_t_64=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_type_off_t_64" >&5 printf "%s\n" "$gl_cv_type_off_t_64" >&6; } if test $gl_cv_type_off_t_64 = no; then WINDOWS_64_BIT_OFF_T=1 else WINDOWS_64_BIT_OFF_T=0 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 64-bit st_size" >&5 printf %s "checking for 64-bit st_size... " >&6; } if test ${gl_cv_member_st_size_64+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> struct stat buf; int verify_st_size_size[sizeof (buf.st_size) >= 8 ? 1 : -1]; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_member_st_size_64=yes else $as_nop gl_cv_member_st_size_64=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_member_st_size_64" >&5 printf "%s\n" "$gl_cv_member_st_size_64" >&6; } if test $gl_cv_member_st_size_64 = no; then WINDOWS_64_BIT_ST_SIZE=1 else WINDOWS_64_BIT_ST_SIZE=0 fi ;; *) WINDOWS_64_BIT_OFF_T=0 WINDOWS_64_BIT_ST_SIZE=0 ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C/C++ restrict keyword" >&5 printf %s "checking for C/C++ restrict keyword... " >&6; } if test ${ac_cv_c_restrict+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_c_restrict=no # Put '__restrict__' first, to avoid problems with glibc and non-GCC; see: # https://lists.gnu.org/archive/html/bug-autoconf/2016-02/msg00006.html # Put 'restrict' last, because C++ lacks it. for ac_kw in __restrict__ __restrict _Restrict restrict; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ typedef int *int_ptr; int foo (int_ptr $ac_kw ip) { return ip[0]; } int bar (int [$ac_kw]); /* Catch GCC bug 14050. */ int bar (int ip[$ac_kw]) { return ip[0]; } int main (void) { int s[1]; int *$ac_kw t = s; t[0] = 0; return foo (t) + bar (t); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_c_restrict=$ac_kw fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext test "$ac_cv_c_restrict" != no && break done fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_restrict" >&5 printf "%s\n" "$ac_cv_c_restrict" >&6; } case $ac_cv_c_restrict in restrict) ;; no) printf "%s\n" "#define restrict /**/" >>confdefs.h ;; *) printf "%s\n" "#define restrict $ac_cv_c_restrict" >>confdefs.h ;; esac if test $gl_cv_have_include_next = yes; then gl_cv_next_sys_stat_h='<'sys/stat.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <sys/stat.h>" >&5 printf %s "checking absolute name of <sys/stat.h>... " >&6; } if test ${gl_cv_next_sys_stat_h+y} then : printf %s "(cached) " >&6 else $as_nop if test $ac_cv_header_sys_stat_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/stat.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'sys/stat.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_sys_stat_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_sys_stat_h gl_cv_next_sys_stat_h='"'$gl_header'"' else gl_cv_next_sys_stat_h='<'sys/stat.h'>' fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sys_stat_h" >&5 printf "%s\n" "$gl_cv_next_sys_stat_h" >&6; } fi NEXT_SYS_STAT_H=$gl_cv_next_sys_stat_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'sys/stat.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_sys_stat_h fi NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H=$gl_next_as_first_directive WINDOWS_STAT_TIMESPEC=0 ac_fn_c_check_type "$LINENO" "nlink_t" "ac_cv_type_nlink_t" "#include <sys/types.h> #include <sys/stat.h> " if test "x$ac_cv_type_nlink_t" = xyes then : else $as_nop printf "%s\n" "#define nlink_t int" >>confdefs.h fi case "$host_os" in mingw*) ac_fn_c_check_header_compile "$LINENO" "sdkddkver.h" "ac_cv_header_sdkddkver_h" "$ac_includes_default" if test "x$ac_cv_header_sdkddkver_h" = xyes then : printf "%s\n" "#define HAVE_SDKDDKVER_H 1" >>confdefs.h fi ;; esac GL_GNULIB_CHMOD=0 GL_GNULIB_FCHMODAT=0 GL_GNULIB_FSTAT=0 GL_GNULIB_FSTATAT=0 GL_GNULIB_FUTIMENS=0 GL_GNULIB_GETUMASK=0 GL_GNULIB_LCHMOD=0 GL_GNULIB_LSTAT=0 GL_GNULIB_MKDIR=0 GL_GNULIB_MKDIRAT=0 GL_GNULIB_MKFIFO=0 GL_GNULIB_MKFIFOAT=0 GL_GNULIB_MKNOD=0 GL_GNULIB_MKNODAT=0 GL_GNULIB_STAT=0 GL_GNULIB_UTIMENSAT=0 GL_GNULIB_OVERRIDES_STRUCT_STAT=0 GL_GNULIB_MDA_CHMOD=1 GL_GNULIB_MDA_MKDIR=1 GL_GNULIB_MDA_UMASK=1 HAVE_DECL_FCLOSEALL=1; HAVE_DECL_FPURGE=1; HAVE_DECL_FSEEKO=1; HAVE_DECL_FTELLO=1; HAVE_DECL_GETDELIM=1; HAVE_DECL_GETLINE=1; HAVE_DECL_GETW=1; HAVE_DECL_OBSTACK_PRINTF=1; HAVE_DECL_PUTW=1; HAVE_DECL_SNPRINTF=1; HAVE_DECL_VSNPRINTF=1; HAVE_DPRINTF=1; HAVE_FSEEKO=1; HAVE_FTELLO=1; HAVE_PCLOSE=1; HAVE_POPEN=1; HAVE_RENAMEAT=1; HAVE_VASPRINTF=1; HAVE_VDPRINTF=1; REPLACE_DPRINTF=0; REPLACE_FCLOSE=0; REPLACE_FDOPEN=0; REPLACE_FFLUSH=0; REPLACE_FOPEN=0; REPLACE_FOPEN_FOR_FOPEN_GNU=0; REPLACE_FPRINTF=0; REPLACE_FPURGE=0; REPLACE_FREOPEN=0; REPLACE_FSEEK=0; REPLACE_FSEEKO=0; REPLACE_FTELL=0; REPLACE_FTELLO=0; REPLACE_GETDELIM=0; REPLACE_GETLINE=0; REPLACE_OBSTACK_PRINTF=0; REPLACE_PERROR=0; REPLACE_POPEN=0; REPLACE_PRINTF=0; REPLACE_REMOVE=0; REPLACE_RENAME=0; REPLACE_RENAMEAT=0; REPLACE_SNPRINTF=0; REPLACE_SPRINTF=0; REPLACE_STDIO_READ_FUNCS=0; REPLACE_STDIO_WRITE_FUNCS=0; REPLACE_TMPFILE=0; REPLACE_VASPRINTF=0; REPLACE_VDPRINTF=0; REPLACE_VFPRINTF=0; REPLACE_VPRINTF=0; REPLACE_VSNPRINTF=0; REPLACE_VSPRINTF=0; ac_fn_check_decl "$LINENO" "getdelim" "ac_cv_have_decl_getdelim" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_getdelim" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_GETDELIM $ac_have_decl" >>confdefs.h GL_GNULIB_DPRINTF=0 GL_GNULIB_FCLOSE=0 GL_GNULIB_FDOPEN=0 GL_GNULIB_FFLUSH=0 GL_GNULIB_FGETC=0 GL_GNULIB_FGETS=0 GL_GNULIB_FOPEN=0 GL_GNULIB_FOPEN_GNU=0 GL_GNULIB_FPRINTF=0 GL_GNULIB_FPRINTF_POSIX=0 GL_GNULIB_FPURGE=0 GL_GNULIB_FPUTC=0 GL_GNULIB_FPUTS=0 GL_GNULIB_FREAD=0 GL_GNULIB_FREOPEN=0 GL_GNULIB_FSCANF=0 GL_GNULIB_FSEEK=0 GL_GNULIB_FSEEKO=0 GL_GNULIB_FTELL=0 GL_GNULIB_FTELLO=0 GL_GNULIB_FWRITE=0 GL_GNULIB_GETC=0 GL_GNULIB_GETCHAR=0 GL_GNULIB_GETDELIM=0 GL_GNULIB_GETLINE=0 GL_GNULIB_OBSTACK_PRINTF=0 GL_GNULIB_OBSTACK_PRINTF_POSIX=0 GL_GNULIB_PCLOSE=0 GL_GNULIB_PERROR=0 GL_GNULIB_POPEN=0 GL_GNULIB_PRINTF=0 GL_GNULIB_PRINTF_POSIX=0 GL_GNULIB_PUTC=0 GL_GNULIB_PUTCHAR=0 GL_GNULIB_PUTS=0 GL_GNULIB_REMOVE=0 GL_GNULIB_RENAME=0 GL_GNULIB_RENAMEAT=0 GL_GNULIB_SCANF=0 GL_GNULIB_SNPRINTF=0 GL_GNULIB_SPRINTF_POSIX=0 GL_GNULIB_STDIO_H_NONBLOCKING=0 GL_GNULIB_STDIO_H_SIGPIPE=0 GL_GNULIB_TMPFILE=0 GL_GNULIB_VASPRINTF=0 GL_GNULIB_VFSCANF=0 GL_GNULIB_VSCANF=0 GL_GNULIB_VDPRINTF=0 GL_GNULIB_VFPRINTF=0 GL_GNULIB_VFPRINTF_POSIX=0 GL_GNULIB_VPRINTF=0 GL_GNULIB_VPRINTF_POSIX=0 GL_GNULIB_VSNPRINTF=0 GL_GNULIB_VSPRINTF_POSIX=0 GL_GNULIB_MDA_FCLOSEALL=1 GL_GNULIB_MDA_FDOPEN=1 GL_GNULIB_MDA_FILENO=1 GL_GNULIB_MDA_GETW=1 GL_GNULIB_MDA_PUTW=1 GL_GNULIB_MDA_TEMPNAM=1 ac_fn_check_decl "$LINENO" "getdtablesize" "ac_cv_have_decl_getdtablesize" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_getdtablesize" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_GETDTABLESIZE $ac_have_decl" >>confdefs.h ac_fn_check_decl "$LINENO" "getline" "ac_cv_have_decl_getline" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_getline" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_GETLINE $ac_have_decl" >>confdefs.h if test $gl_cv_have_include_next = yes; then gl_cv_next_getopt_h='<'getopt.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <getopt.h>" >&5 printf %s "checking absolute name of <getopt.h>... " >&6; } if test ${gl_cv_next_getopt_h+y} then : printf %s "(cached) " >&6 else $as_nop if test $ac_cv_header_getopt_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <getopt.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'getopt.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_getopt_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_getopt_h gl_cv_next_getopt_h='"'$gl_header'"' else gl_cv_next_getopt_h='<'getopt.h'>' fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_getopt_h" >&5 printf "%s\n" "$gl_cv_next_getopt_h" >&6; } fi NEXT_GETOPT_H=$gl_cv_next_getopt_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'getopt.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_getopt_h fi NEXT_AS_FIRST_DIRECTIVE_GETOPT_H=$gl_next_as_first_directive if test $ac_cv_header_getopt_h = yes; then HAVE_GETOPT_H=1 else HAVE_GETOPT_H=0 fi gl_replace_getopt= if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then for ac_header in getopt.h do : ac_fn_c_check_header_compile "$LINENO" "getopt.h" "ac_cv_header_getopt_h" "$ac_includes_default" if test "x$ac_cv_header_getopt_h" = xyes then : printf "%s\n" "#define HAVE_GETOPT_H 1" >>confdefs.h else $as_nop gl_replace_getopt=yes fi done fi if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then for ac_func in getopt_long_only do : ac_fn_c_check_func "$LINENO" "getopt_long_only" "ac_cv_func_getopt_long_only" if test "x$ac_cv_func_getopt_long_only" = xyes then : printf "%s\n" "#define HAVE_GETOPT_LONG_ONLY 1" >>confdefs.h else $as_nop gl_replace_getopt=yes fi done fi if test -z "$gl_replace_getopt"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether getopt is POSIX compatible" >&5 printf %s "checking whether getopt is POSIX compatible... " >&6; } if test ${gl_cv_func_getopt_posix+y} then : printf %s "(cached) " >&6 else $as_nop if test $cross_compiling = no; then if test "$cross_compiling" = yes then : { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run test program while cross compiling See \`config.log' for more details" "$LINENO" 5; } else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <unistd.h> #include <stdlib.h> #include <string.h> int main () { static char program[] = "program"; static char a[] = "-a"; static char foo[] = "foo"; static char bar[] = "bar"; char *argv[] = { program, a, foo, bar, NULL }; int c; c = getopt (4, argv, "ab"); if (!(c == 'a')) return 1; c = getopt (4, argv, "ab"); if (!(c == -1)) return 2; if (!(optind == 2)) return 3; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_getopt_posix=maybe else $as_nop gl_cv_func_getopt_posix=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi if test $gl_cv_func_getopt_posix = maybe; then if test "$cross_compiling" = yes then : { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run test program while cross compiling See \`config.log' for more details" "$LINENO" 5; } else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <unistd.h> #include <stdlib.h> #include <string.h> int main () { static char program[] = "program"; static char donald[] = "donald"; static char p[] = "-p"; static char billy[] = "billy"; static char duck[] = "duck"; static char a[] = "-a"; static char bar[] = "bar"; char *argv[] = { program, donald, p, billy, duck, a, bar, NULL }; int c; c = getopt (7, argv, "+abp:q:"); if (!(c == -1)) return 4; if (!(strcmp (argv[0], "program") == 0)) return 5; if (!(strcmp (argv[1], "donald") == 0)) return 6; if (!(strcmp (argv[2], "-p") == 0)) return 7; if (!(strcmp (argv[3], "billy") == 0)) return 8; if (!(strcmp (argv[4], "duck") == 0)) return 9; if (!(strcmp (argv[5], "-a") == 0)) return 10; if (!(strcmp (argv[6], "bar") == 0)) return 11; if (!(optind == 1)) return 12; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_getopt_posix=maybe else $as_nop gl_cv_func_getopt_posix=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 if test $gl_cv_func_getopt_posix = maybe; then if test "$cross_compiling" = yes then : { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run test program while cross compiling See \`config.log' for more details" "$LINENO" 5; } else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <unistd.h> #include <stdlib.h> #include <string.h> int main () { static char program[] = "program"; static char ab[] = "-ab"; char *argv[3] = { program, ab, NULL }; if (getopt (2, argv, "ab:") != 'a') return 13; if (getopt (2, argv, "ab:") != '?') return 14; if (optopt != 'b') return 15; if (optind != 2) return 16; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_getopt_posix=yes else $as_nop gl_cv_func_getopt_posix=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 else case "$host_os" in darwin* | aix* | mingw*) gl_cv_func_getopt_posix="guessing no";; *) gl_cv_func_getopt_posix="guessing yes";; esac fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_getopt_posix" >&5 printf "%s\n" "$gl_cv_func_getopt_posix" >&6; } case "$gl_cv_func_getopt_posix" in *no) gl_replace_getopt=yes ;; esac fi if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working GNU getopt function" >&5 printf %s "checking for working GNU getopt function... " >&6; } if test ${gl_cv_func_getopt_gnu+y} then : printf %s "(cached) " >&6 else $as_nop # Even with POSIXLY_CORRECT, the GNU extension of leading '-' in the # optstring is necessary for programs like m4 that have POSIX-mandated # semantics for supporting options interspersed with files. # Also, since getopt_long is a GNU extension, we require optind=0. # Bash ties 'set -o posix' to a non-exported POSIXLY_CORRECT; # so take care to revert to the correct (non-)export state. gl_awk_probe='BEGIN { if ("POSIXLY_CORRECT" in ENVIRON) print "x" }' case ${POSIXLY_CORRECT+x}`$AWK "$gl_awk_probe" </dev/null` in xx) gl_had_POSIXLY_CORRECT=exported ;; x) gl_had_POSIXLY_CORRECT=yes ;; *) gl_had_POSIXLY_CORRECT= ;; esac POSIXLY_CORRECT=1 export POSIXLY_CORRECT if test "$cross_compiling" = yes then : gl_cv_func_getopt_gnu="$gl_cross_guess_normal" else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <getopt.h> #include <stddef.h> #include <string.h> #include <stdlib.h> #if defined __MACH__ && defined __APPLE__ /* Avoid a crash on Mac OS X. */ #include <mach/mach.h> #include <mach/mach_error.h> #include <mach/thread_status.h> #include <mach/exception.h> #include <mach/task.h> #include <pthread.h> /* The exception port on which our thread listens. */ static mach_port_t our_exception_port; /* The main function of the thread listening for exceptions of type EXC_BAD_ACCESS. */ static void * mach_exception_thread (void *arg) { /* Buffer for a message to be received. */ struct { mach_msg_header_t head; mach_msg_body_t msgh_body; char data[1024]; } msg; mach_msg_return_t retval; /* Wait for a message on the exception port. */ retval = mach_msg (&msg.head, MACH_RCV_MSG | MACH_RCV_LARGE, 0, sizeof (msg), our_exception_port, MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL); if (retval != MACH_MSG_SUCCESS) abort (); exit (1); } static void nocrash_init (void) { mach_port_t self = mach_task_self (); /* Allocate a port on which the thread shall listen for exceptions. */ if (mach_port_allocate (self, MACH_PORT_RIGHT_RECEIVE, &our_exception_port) == KERN_SUCCESS) { /* See https://web.mit.edu/darwin/src/modules/xnu/osfmk/man/mach_port_insert_right.html. */ if (mach_port_insert_right (self, our_exception_port, our_exception_port, MACH_MSG_TYPE_MAKE_SEND) == KERN_SUCCESS) { /* The exceptions we want to catch. Only EXC_BAD_ACCESS is interesting for us. */ exception_mask_t mask = EXC_MASK_BAD_ACCESS; /* Create the thread listening on the exception port. */ pthread_attr_t attr; pthread_t thread; if (pthread_attr_init (&attr) == 0 && pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED) == 0 && pthread_create (&thread, &attr, mach_exception_thread, NULL) == 0) { pthread_attr_destroy (&attr); /* Replace the exception port info for these exceptions with our own. Note that we replace the exception port for the entire task, not only for a particular thread. This has the effect that when our exception port gets the message, the thread specific exception port has already been asked, and we don't need to bother about it. See https://web.mit.edu/darwin/src/modules/xnu/osfmk/man/task_set_exception_ports.html. */ task_set_exception_ports (self, mask, our_exception_port, EXCEPTION_DEFAULT, MACHINE_THREAD_STATE); } } } } #elif defined _WIN32 && ! defined __CYGWIN__ /* Avoid a crash on native Windows. */ #define WIN32_LEAN_AND_MEAN #include <windows.h> #include <winerror.h> static LONG WINAPI exception_filter (EXCEPTION_POINTERS *ExceptionInfo) { switch (ExceptionInfo->ExceptionRecord->ExceptionCode) { case EXCEPTION_ACCESS_VIOLATION: case EXCEPTION_IN_PAGE_ERROR: case EXCEPTION_STACK_OVERFLOW: case EXCEPTION_GUARD_PAGE: case EXCEPTION_PRIV_INSTRUCTION: case EXCEPTION_ILLEGAL_INSTRUCTION: case EXCEPTION_DATATYPE_MISALIGNMENT: case EXCEPTION_ARRAY_BOUNDS_EXCEEDED: case EXCEPTION_NONCONTINUABLE_EXCEPTION: exit (1); } return EXCEPTION_CONTINUE_SEARCH; } static void nocrash_init (void) { SetUnhandledExceptionFilter ((LPTOP_LEVEL_EXCEPTION_FILTER) exception_filter); } #else /* Avoid a crash on POSIX systems. */ #include <signal.h> #include <unistd.h> /* A POSIX signal handler. */ static void exception_handler (int sig) { _exit (1); } static void nocrash_init (void) { #ifdef SIGSEGV signal (SIGSEGV, exception_handler); #endif #ifdef SIGBUS signal (SIGBUS, exception_handler); #endif } #endif int main (void) { int result = 0; nocrash_init(); /* This code succeeds on glibc 2.8, OpenBSD 4.0, Cygwin, mingw, and fails on Mac OS X 10.5, AIX 5.2, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 10. */ { static char conftest[] = "conftest"; static char plus[] = "-+"; char *argv[3] = { conftest, plus, NULL }; opterr = 0; if (getopt (2, argv, "+a") != '?') result |= 1; } /* This code succeeds on glibc 2.8, mingw, and fails on Mac OS X 10.5, OpenBSD 4.0, AIX 5.2, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 10, Cygwin 1.5.x. */ { static char program[] = "program"; static char p[] = "-p"; static char foo[] = "foo"; static char bar[] = "bar"; char *argv[] = { program, p, foo, bar, NULL }; optind = 1; if (getopt (4, argv, "p::") != 'p') result |= 2; else if (optarg != NULL) result |= 4; else if (getopt (4, argv, "p::") != -1) result |= 6; else if (optind != 2) result |= 8; } /* This code succeeds on glibc 2.8 and fails on Cygwin 1.7.0. */ { static char program[] = "program"; static char foo[] = "foo"; static char p[] = "-p"; char *argv[] = { program, foo, p, NULL }; optind = 0; if (getopt (3, argv, "-p") != 1) result |= 16; else if (getopt (3, argv, "-p") != 'p') result |= 16; } /* This code fails on glibc 2.11. */ { static char program[] = "program"; static char b[] = "-b"; static char a[] = "-a"; char *argv[] = { program, b, a, NULL }; optind = opterr = 0; if (getopt (3, argv, "+:a:b") != 'b') result |= 32; else if (getopt (3, argv, "+:a:b") != ':') result |= 32; } /* This code dumps core on glibc 2.14. */ { static char program[] = "program"; static char w[] = "-W"; static char dummy[] = "dummy"; char *argv[] = { program, w, dummy, NULL }; optind = opterr = 1; if (getopt (3, argv, "W;") != 'W') result |= 64; } return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_getopt_gnu=yes else $as_nop gl_cv_func_getopt_gnu=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi case $gl_had_POSIXLY_CORRECT in exported) ;; yes) { POSIXLY_CORRECT=; unset POSIXLY_CORRECT;}; POSIXLY_CORRECT=1 ;; *) { POSIXLY_CORRECT=; unset POSIXLY_CORRECT;} ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_getopt_gnu" >&5 printf "%s\n" "$gl_cv_func_getopt_gnu" >&6; } if test "$gl_cv_func_getopt_gnu" != yes; then gl_replace_getopt=yes else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working GNU getopt_long function" >&5 printf %s "checking for working GNU getopt_long function... " >&6; } if test ${gl_cv_func_getopt_long_gnu+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case "$host_os" in openbsd*) gl_cv_func_getopt_long_gnu="guessing no";; *) gl_cv_func_getopt_long_gnu="guessing yes";; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <getopt.h> #include <stddef.h> #include <string.h> int main (void) { static const struct option long_options[] = { { "xtremely-",no_argument, NULL, 1003 }, { "xtra", no_argument, NULL, 1001 }, { "xtreme", no_argument, NULL, 1002 }, { "xtremely", no_argument, NULL, 1003 }, { NULL, 0, NULL, 0 } }; /* This code fails on OpenBSD 5.0. */ { static char program[] = "program"; static char xtremel[] = "--xtremel"; char *argv[] = { program, xtremel, NULL }; int option_index; optind = 1; opterr = 0; if (getopt_long (2, argv, "", long_options, &option_index) != 1003) return 1; } return 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_getopt_long_gnu=yes else $as_nop gl_cv_func_getopt_long_gnu=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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_getopt_long_gnu" >&5 printf "%s\n" "$gl_cv_func_getopt_long_gnu" >&6; } case "$gl_cv_func_getopt_long_gnu" in *yes) ;; *) gl_replace_getopt=yes ;; esac fi fi if test -z "$gl_pthreadlib_body_done"; then gl_pthread_api=no LIBPTHREAD= LIBPMULTITHREAD= # On OSF/1, the compiler needs the flag -pthread or -D_REENTRANT so that # it groks <pthread.h>. It's added above, in gl_ANYTHREADLIB_EARLY. ac_fn_c_check_header_compile "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default" if test "x$ac_cv_header_pthread_h" = xyes then : gl_have_pthread_h=yes else $as_nop gl_have_pthread_h=no fi if test "$gl_have_pthread_h" = yes; then # Other possible tests: # -lpthreads (FSU threads, PCthreads) # -lgthreads # Test whether both pthread_mutex_lock and pthread_mutexattr_init exist # in libc. IRIX 6.5 has the first one in both libc and libpthread, but # the second one only in libpthread, and lock.c needs it. # # If -pthread works, prefer it to -lpthread, since Ubuntu 14.04 # needs -pthread for some reason. See: # https://lists.gnu.org/r/bug-gnulib/2014-09/msg00023.html save_LIBS=$LIBS for gl_pthread in '' '-pthread'; do LIBS="$LIBS $gl_pthread" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <pthread.h> pthread_mutex_t m; pthread_mutexattr_t ma; int main (void) { pthread_mutex_lock (&m); pthread_mutexattr_init (&ma); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_pthread_api=yes LIBPTHREAD=$gl_pthread LIBPMULTITHREAD=$gl_pthread fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$save_LIBS test $gl_pthread_api = yes && break done echo "$as_me:12827: gl_pthread_api=$gl_pthread_api" >&5 echo "$as_me:12828: LIBPTHREAD=$LIBPTHREAD" >&5 gl_pthread_in_glibc=no # On Linux with glibc >= 2.34, libc contains the fully functional # pthread functions. case "$host_os" in linux*) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <features.h> #ifdef __GNU_LIBRARY__ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 34) || (__GLIBC__ > 2) Lucky user #endif #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Lucky user" >/dev/null 2>&1 then : gl_pthread_in_glibc=yes fi rm -rf conftest* ;; esac echo "$as_me:12854: gl_pthread_in_glibc=$gl_pthread_in_glibc" >&5 # Test for libpthread by looking for pthread_kill. (Not pthread_self, # since it is defined as a macro on OSF/1.) if test $gl_pthread_api = yes && test -z "$LIBPTHREAD"; then # The program links fine without libpthread. But it may actually # need to link with libpthread in order to create multiple threads. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lpthread" >&5 printf %s "checking for pthread_kill in -lpthread... " >&6; } if test ${ac_cv_lib_pthread_pthread_kill+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lpthread $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* 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. */ char pthread_kill (); int main (void) { return pthread_kill (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_pthread_pthread_kill=yes else $as_nop ac_cv_lib_pthread_pthread_kill=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_kill" >&5 printf "%s\n" "$ac_cv_lib_pthread_pthread_kill" >&6; } if test "x$ac_cv_lib_pthread_pthread_kill" = xyes then : if test $gl_pthread_in_glibc = yes; then LIBPMULTITHREAD= else LIBPMULTITHREAD=-lpthread # On Solaris and HP-UX, most pthread functions exist also in libc. # Therefore pthread_in_use() needs to actually try to create a # thread: pthread_create from libc will fail, whereas # pthread_create will actually create a thread. # On Solaris 10 or newer, this test is no longer needed, because # libc contains the fully functional pthread functions. case "$host_os" in solaris | solaris2.[1-9] | solaris2.[1-9].* | hpux*) printf "%s\n" "#define PTHREAD_IN_USE_DETECTION_HARD 1" >>confdefs.h esac fi fi elif test $gl_pthread_api != yes; then # Some library is needed. Try libpthread and libc_r. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lpthread" >&5 printf %s "checking for pthread_kill in -lpthread... " >&6; } if test ${ac_cv_lib_pthread_pthread_kill+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lpthread $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* 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. */ char pthread_kill (); int main (void) { return pthread_kill (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_pthread_pthread_kill=yes else $as_nop ac_cv_lib_pthread_pthread_kill=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_kill" >&5 printf "%s\n" "$ac_cv_lib_pthread_pthread_kill" >&6; } if test "x$ac_cv_lib_pthread_pthread_kill" = xyes then : gl_pthread_api=yes LIBPTHREAD=-lpthread LIBPMULTITHREAD=-lpthread fi if test $gl_pthread_api != yes; then # For FreeBSD 4. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lc_r" >&5 printf %s "checking for pthread_kill in -lc_r... " >&6; } if test ${ac_cv_lib_c_r_pthread_kill+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lc_r $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* 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. */ char pthread_kill (); int main (void) { return pthread_kill (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_c_r_pthread_kill=yes else $as_nop ac_cv_lib_c_r_pthread_kill=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_r_pthread_kill" >&5 printf "%s\n" "$ac_cv_lib_c_r_pthread_kill" >&6; } if test "x$ac_cv_lib_c_r_pthread_kill" = xyes then : gl_pthread_api=yes LIBPTHREAD=-lc_r LIBPMULTITHREAD=-lc_r fi fi fi echo "$as_me:13008: LIBPMULTITHREAD=$LIBPMULTITHREAD" >&5 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether POSIX threads API is available" >&5 printf %s "checking whether POSIX threads API is available... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_pthread_api" >&5 printf "%s\n" "$gl_pthread_api" >&6; } if test $gl_pthread_api = yes; then printf "%s\n" "#define HAVE_PTHREAD_API 1" >>confdefs.h fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sched.h> int main (void) { sched_yield (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : SCHED_YIELD_LIB= else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sched_yield in -lrt" >&5 printf %s "checking for sched_yield in -lrt... " >&6; } if test ${ac_cv_lib_rt_sched_yield+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lrt $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* 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. */ char sched_yield (); int main (void) { return sched_yield (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_rt_sched_yield=yes else $as_nop ac_cv_lib_rt_sched_yield=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_sched_yield" >&5 printf "%s\n" "$ac_cv_lib_rt_sched_yield" >&6; } if test "x$ac_cv_lib_rt_sched_yield" = xyes then : SCHED_YIELD_LIB=-lrt else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sched_yield in -lposix4" >&5 printf %s "checking for sched_yield in -lposix4... " >&6; } if test ${ac_cv_lib_posix4_sched_yield+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lposix4 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* 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. */ char sched_yield (); int main (void) { return sched_yield (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_posix4_sched_yield=yes else $as_nop ac_cv_lib_posix4_sched_yield=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_posix4_sched_yield" >&5 printf "%s\n" "$ac_cv_lib_posix4_sched_yield" >&6; } if test "x$ac_cv_lib_posix4_sched_yield" = xyes then : SCHED_YIELD_LIB=-lposix4 fi fi fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIB_SCHED_YIELD="$SCHED_YIELD_LIB" gl_pthreadlib_body_done=done fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether setlocale (LC_ALL, NULL) is multithread-safe" >&5 printf %s "checking whether setlocale (LC_ALL, NULL) is multithread-safe... " >&6; } if test ${gl_cv_func_setlocale_null_all_mtsafe+y} then : printf %s "(cached) " >&6 else $as_nop case "$host_os" in # Guess no on musl libc, macOS, FreeBSD, NetBSD, OpenBSD, AIX, Haiku. *-musl* | midipix* | darwin* | freebsd* | midnightbsd* | netbsd* | openbsd* | aix* | haiku*) gl_cv_func_setlocale_null_all_mtsafe=no ;; # Guess no on Cygwin < 3.4.6. cygwin*) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined __CYGWIN__ #include <cygwin/version.h> #if CYGWIN_VERSION_DLL_COMBINED >= CYGWIN_VERSION_DLL_MAKE_COMBINED (3004, 6) Lucky user #endif #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Lucky user" >/dev/null 2>&1 then : gl_cv_func_setlocale_null_all_mtsafe=yes else $as_nop gl_cv_func_setlocale_null_all_mtsafe=no fi rm -rf conftest* ;; # Guess yes on glibc, HP-UX, IRIX, Solaris, native Windows. *-gnu* | gnu* | hpux* | irix* | solaris* | mingw*) gl_cv_func_setlocale_null_all_mtsafe=yes ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_setlocale_null_all_mtsafe="$gl_cross_guess_normal" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_setlocale_null_all_mtsafe" >&5 printf "%s\n" "$gl_cv_func_setlocale_null_all_mtsafe" >&6; } case "$host_os" in mingw*) ;; *) if test $gl_pthread_api = no && test $ac_cv_header_threads_h = no; then gl_cv_func_setlocale_null_all_mtsafe="trivially yes" fi ;; esac case "$gl_cv_func_setlocale_null_all_mtsafe" in *yes) SETLOCALE_NULL_ALL_MTSAFE=1 ;; *) SETLOCALE_NULL_ALL_MTSAFE=0 ;; esac printf "%s\n" "#define SETLOCALE_NULL_ALL_MTSAFE $SETLOCALE_NULL_ALL_MTSAFE" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether setlocale (category, NULL) is multithread-safe" >&5 printf %s "checking whether setlocale (category, NULL) is multithread-safe... " >&6; } if test ${gl_cv_func_setlocale_null_one_mtsafe+y} then : printf %s "(cached) " >&6 else $as_nop case "$host_os" in # Guess no on OpenBSD, AIX. openbsd* | aix*) gl_cv_func_setlocale_null_one_mtsafe=no ;; # Guess yes on glibc, musl libc, macOS, FreeBSD, NetBSD, HP-UX, IRIX, Solaris, Haiku, Cygwin, native Windows. *-gnu* | gnu* | *-musl* | midipix* | darwin* | freebsd* | midnightbsd* | netbsd* | hpux* | irix* | solaris* | haiku* | cygwin* | mingw*) gl_cv_func_setlocale_null_one_mtsafe=yes ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_setlocale_null_one_mtsafe="$gl_cross_guess_normal" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_setlocale_null_one_mtsafe" >&5 printf "%s\n" "$gl_cv_func_setlocale_null_one_mtsafe" >&6; } case "$host_os" in mingw*) ;; *) if test $gl_pthread_api = no && test $ac_cv_header_threads_h = no; then gl_cv_func_setlocale_null_one_mtsafe="trivially yes" fi ;; esac case "$gl_cv_func_setlocale_null_one_mtsafe" in *yes) SETLOCALE_NULL_ONE_MTSAFE=1 ;; *) SETLOCALE_NULL_ONE_MTSAFE=0 ;; esac printf "%s\n" "#define SETLOCALE_NULL_ONE_MTSAFE $SETLOCALE_NULL_ONE_MTSAFE" >>confdefs.h if test $SETLOCALE_NULL_ALL_MTSAFE = 0 || test $SETLOCALE_NULL_ONE_MTSAFE = 0; then case "$host_os" in mingw*) SETLOCALE_NULL_LIB= ;; *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether imported symbols can be declared weak" >&5 printf %s "checking whether imported symbols can be declared weak... " >&6; } if test ${gl_cv_have_weak+y} then : printf %s "(cached) " >&6 else $as_nop case "$host_os" in cygwin* | mingw*) gl_cv_have_weak="guessing no" ;; *) gl_cv_have_weak=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern void xyzzy (); #pragma weak xyzzy int main (void) { xyzzy(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_cv_have_weak=maybe fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test $gl_cv_have_weak = maybe; then if test "$cross_compiling" = yes then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __ELF__ Extensible Linking Format #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Extensible Linking Format" >/dev/null 2>&1 then : gl_cv_have_weak="guessing yes" else $as_nop gl_cv_have_weak="guessing no" fi rm -rf conftest* else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdio.h> #pragma weak fputs int main () { return (fputs == NULL); } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_have_weak=yes else $as_nop gl_cv_have_weak=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 ;; esac case " $LDFLAGS " in *" -static "*) gl_cv_have_weak=no ;; esac case "$gl_cv_have_weak" in *yes) case "$host_os" in freebsd* | dragonfly* | midnightbsd*) : > conftest1.c $CC $CPPFLAGS $CFLAGS $LDFLAGS -fPIC -shared -o libempty.so conftest1.c -lpthread >&5 2>&1 cat <<EOF > conftest2.c #include <pthread.h> #pragma weak pthread_mutexattr_gettype int main () { return (pthread_mutexattr_gettype != NULL); } EOF $CC $CPPFLAGS $CFLAGS $LDFLAGS -o conftest conftest2.c libempty.so >&5 2>&1 \ || gl_cv_have_weak=no rm -f conftest1.c libempty.so conftest2.c conftest ;; esac ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_have_weak" >&5 printf "%s\n" "$gl_cv_have_weak" >&6; } case "$gl_cv_have_weak" in *yes) printf "%s\n" "#define HAVE_WEAK_SYMBOLS 1" >>confdefs.h ;; esac case "$gl_cv_have_weak" in *yes) SETLOCALE_NULL_LIB= ;; *) SETLOCALE_NULL_LIB="$LIBPTHREAD" ;; esac ;; esac else SETLOCALE_NULL_LIB= fi LIB_SETLOCALE_NULL="$SETLOCALE_NULL_LIB" ac_fn_c_check_type "$LINENO" "off_t" "ac_cv_type_off_t" "$ac_includes_default" if test "x$ac_cv_type_off_t" = xyes then : else $as_nop printf "%s\n" "#define off_t long int" >>confdefs.h fi if test $gl_cv_have_include_next = yes; then gl_cv_next_limits_h='<'limits.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <limits.h>" >&5 printf %s "checking absolute name of <limits.h>... " >&6; } if test ${gl_cv_next_limits_h+y} then : printf %s "(cached) " >&6 else $as_nop if test $ac_cv_header_limits_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <limits.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'limits.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_limits_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_limits_h gl_cv_next_limits_h='"'$gl_header'"' else gl_cv_next_limits_h='<'limits.h'>' fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_limits_h" >&5 printf "%s\n" "$gl_cv_next_limits_h" >&6; } fi NEXT_LIMITS_H=$gl_cv_next_limits_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'limits.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_limits_h fi NEXT_AS_FIRST_DIRECTIVE_LIMITS_H=$gl_next_as_first_directive { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether limits.h has WORD_BIT, BOOL_WIDTH etc." >&5 printf %s "checking whether limits.h has WORD_BIT, BOOL_WIDTH etc.... " >&6; } if test ${gl_cv_header_limits_width+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __STDC_WANT_IEC_60559_BFP_EXT__ #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 #endif #include <limits.h> long long llm = LLONG_MAX; int wb = WORD_BIT; int ullw = ULLONG_WIDTH; int bw = BOOL_WIDTH; int bm = BOOL_MAX; int mblm = MB_LEN_MAX; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_header_limits_width=yes else $as_nop gl_cv_header_limits_width=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_limits_width" >&5 printf "%s\n" "$gl_cv_header_limits_width" >&6; } GL_GENERATE_LIMITS_H=true if test "$gl_cv_header_limits_width" = yes then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether limits.h has SSIZE_MAX" >&5 printf %s "checking whether limits.h has SSIZE_MAX... " >&6; } if test ${gl_cv_header_limits_ssize_max+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <limits.h> #ifndef SSIZE_MAX #error "SSIZE_MAX is not defined" #endif _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_header_limits_ssize_max=yes else $as_nop gl_cv_header_limits_ssize_max=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_limits_ssize_max" >&5 printf "%s\n" "$gl_cv_header_limits_ssize_max" >&6; } if test "$gl_cv_header_limits_ssize_max" = yes; then GL_GENERATE_LIMITS_H=false fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for wint_t" >&5 printf %s "checking for wint_t... " >&6; } if test ${gt_cv_c_wint_t+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <wchar.h> wint_t foo = (wchar_t)'\0'; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gt_cv_c_wint_t=yes else $as_nop gt_cv_c_wint_t=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_wint_t" >&5 printf "%s\n" "$gt_cv_c_wint_t" >&6; } if test $gt_cv_c_wint_t = yes; then printf "%s\n" "#define HAVE_WINT_T 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether wint_t is large enough" >&5 printf %s "checking whether wint_t is large enough... " >&6; } if test ${gl_cv_type_wint_t_large_enough+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <wchar.h> int verify[sizeof (wint_t) < sizeof (int) ? -1 : 1]; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_type_wint_t_large_enough=yes else $as_nop gl_cv_type_wint_t_large_enough=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_type_wint_t_large_enough" >&5 printf "%s\n" "$gl_cv_type_wint_t_large_enough" >&6; } if test $gl_cv_type_wint_t_large_enough = no; then GNULIBHEADERS_OVERRIDE_WINT_T=1 else GNULIBHEADERS_OVERRIDE_WINT_T=0 fi else GNULIBHEADERS_OVERRIDE_WINT_T=0 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler produces multi-arch binaries" >&5 printf %s "checking whether the compiler produces multi-arch binaries... " >&6; } if test ${gl_cv_c_multiarch+y} then : printf %s "(cached) " >&6 else $as_nop gl_cv_c_multiarch=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __APPLE_CC__ not a universal capable compiler #endif typedef int dummy; _ACEOF if ac_fn_c_try_compile "$LINENO" then : arch= prev= for word in ${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS}; do if test -n "$prev"; then case $word in i?86 | x86_64 | ppc | ppc64 | arm | arm64) if test -z "$arch" || test "$arch" = "$word"; then arch="$word" else gl_cv_c_multiarch=yes fi ;; esac prev= else if test "x$word" = "x-arch"; then prev=arch fi fi done fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_c_multiarch" >&5 printf "%s\n" "$gl_cv_c_multiarch" >&6; } if test $gl_cv_c_multiarch = yes; then APPLE_UNIVERSAL_BUILD=1 else APPLE_UNIVERSAL_BUILD=0 fi printf "%s\n" "#define HAVE_LONG_LONG_INT 1" >>confdefs.h printf "%s\n" "#define HAVE_UNSIGNED_LONG_LONG_INT 1" >>confdefs.h if test $ac_cv_header_wchar_h = yes; then HAVE_WCHAR_H=1 else HAVE_WCHAR_H=0 fi if test $ac_cv_header_inttypes_h = yes; then HAVE_INTTYPES_H=1 else HAVE_INTTYPES_H=0 fi if test $ac_cv_header_sys_types_h = yes; then HAVE_SYS_TYPES_H=1 else HAVE_SYS_TYPES_H=0 fi if test $gl_cv_have_include_next = yes; then gl_cv_next_stdint_h='<'stdint.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <stdint.h>" >&5 printf %s "checking absolute name of <stdint.h>... " >&6; } if test ${gl_cv_next_stdint_h+y} then : printf %s "(cached) " >&6 else $as_nop if test $ac_cv_header_stdint_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdint.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'stdint.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_stdint_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_stdint_h gl_cv_next_stdint_h='"'$gl_header'"' else gl_cv_next_stdint_h='<'stdint.h'>' fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stdint_h" >&5 printf "%s\n" "$gl_cv_next_stdint_h" >&6; } fi NEXT_STDINT_H=$gl_cv_next_stdint_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'stdint.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_stdint_h fi NEXT_AS_FIRST_DIRECTIVE_STDINT_H=$gl_next_as_first_directive if test $ac_cv_header_stdint_h = yes; then HAVE_STDINT_H=1 else HAVE_STDINT_H=0 fi if test $ac_cv_header_stdint_h = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether stdint.h conforms to C99" >&5 printf %s "checking whether stdint.h conforms to C99... " >&6; } if test ${gl_cv_header_working_stdint_h+y} then : printf %s "(cached) " >&6 else $as_nop gl_cv_header_working_stdint_h=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ #define __STDC_CONSTANT_MACROS 1 #define __STDC_LIMIT_MACROS 1 #include <stdint.h> /* Dragonfly defines WCHAR_MIN, WCHAR_MAX only in <wchar.h>. */ #if !(defined WCHAR_MIN && defined WCHAR_MAX) #error "WCHAR_MIN, WCHAR_MAX not defined in <stdint.h>" #endif #include <stddef.h> #include <signal.h> #if HAVE_WCHAR_H # include <wchar.h> #endif #ifdef INT8_MAX int8_t a1 = INT8_MAX; int8_t a1min = INT8_MIN; #endif #ifdef INT16_MAX int16_t a2 = INT16_MAX; int16_t a2min = INT16_MIN; #endif #ifdef INT32_MAX int32_t a3 = INT32_MAX; int32_t a3min = INT32_MIN; #endif #ifdef INT64_MAX int64_t a4 = INT64_MAX; int64_t a4min = INT64_MIN; #endif #ifdef UINT8_MAX uint8_t b1 = UINT8_MAX; #else typedef int b1[(unsigned char) -1 != 255 ? 1 : -1]; #endif #ifdef UINT16_MAX uint16_t b2 = UINT16_MAX; #endif #ifdef UINT32_MAX uint32_t b3 = UINT32_MAX; #endif #ifdef UINT64_MAX uint64_t b4 = UINT64_MAX; #endif int_least8_t c1 = INT8_C (0x7f); int_least8_t c1max = INT_LEAST8_MAX; int_least8_t c1min = INT_LEAST8_MIN; int_least16_t c2 = INT16_C (0x7fff); int_least16_t c2max = INT_LEAST16_MAX; int_least16_t c2min = INT_LEAST16_MIN; int_least32_t c3 = INT32_C (0x7fffffff); int_least32_t c3max = INT_LEAST32_MAX; int_least32_t c3min = INT_LEAST32_MIN; int_least64_t c4 = INT64_C (0x7fffffffffffffff); int_least64_t c4max = INT_LEAST64_MAX; int_least64_t c4min = INT_LEAST64_MIN; uint_least8_t d1 = UINT8_C (0xff); uint_least8_t d1max = UINT_LEAST8_MAX; uint_least16_t d2 = UINT16_C (0xffff); uint_least16_t d2max = UINT_LEAST16_MAX; uint_least32_t d3 = UINT32_C (0xffffffff); uint_least32_t d3max = UINT_LEAST32_MAX; uint_least64_t d4 = UINT64_C (0xffffffffffffffff); uint_least64_t d4max = UINT_LEAST64_MAX; int_fast8_t e1 = INT_FAST8_MAX; int_fast8_t e1min = INT_FAST8_MIN; int_fast16_t e2 = INT_FAST16_MAX; int_fast16_t e2min = INT_FAST16_MIN; int_fast32_t e3 = INT_FAST32_MAX; int_fast32_t e3min = INT_FAST32_MIN; int_fast64_t e4 = INT_FAST64_MAX; int_fast64_t e4min = INT_FAST64_MIN; uint_fast8_t f1 = UINT_FAST8_MAX; uint_fast16_t f2 = UINT_FAST16_MAX; uint_fast32_t f3 = UINT_FAST32_MAX; uint_fast64_t f4 = UINT_FAST64_MAX; #ifdef INTPTR_MAX intptr_t g = INTPTR_MAX; intptr_t gmin = INTPTR_MIN; #endif #ifdef UINTPTR_MAX uintptr_t h = UINTPTR_MAX; #endif intmax_t i = INTMAX_MAX; uintmax_t j = UINTMAX_MAX; /* Check that SIZE_MAX has the correct type, if possible. */ #if 201112 <= __STDC_VERSION__ int k = _Generic (SIZE_MAX, size_t: 0); #elif (2 <= __GNUC__ || 4 <= __clang_major__ || defined __IBM__TYPEOF__ \ || (0x5110 <= __SUNPRO_C && !__STDC__)) extern size_t k; extern __typeof__ (SIZE_MAX) k; #endif #include <limits.h> /* for CHAR_BIT */ #define TYPE_MINIMUM(t) \ ((t) ((t) 0 < (t) -1 ? (t) 0 : ~ TYPE_MAXIMUM (t))) #define TYPE_MAXIMUM(t) \ ((t) ((t) 0 < (t) -1 \ ? (t) -1 \ : ((((t) 1 << (sizeof (t) * CHAR_BIT - 2)) - 1) * 2 + 1))) struct s { int check_PTRDIFF: PTRDIFF_MIN == TYPE_MINIMUM (ptrdiff_t) && PTRDIFF_MAX == TYPE_MAXIMUM (ptrdiff_t) ? 1 : -1; /* Detect bug in FreeBSD 6.0/ia64 and FreeBSD 13.0/arm64. */ int check_SIG_ATOMIC: SIG_ATOMIC_MIN == TYPE_MINIMUM (sig_atomic_t) && SIG_ATOMIC_MAX == TYPE_MAXIMUM (sig_atomic_t) ? 1 : -1; int check_SIZE: SIZE_MAX == TYPE_MAXIMUM (size_t) ? 1 : -1; int check_WCHAR: WCHAR_MIN == TYPE_MINIMUM (wchar_t) && WCHAR_MAX == TYPE_MAXIMUM (wchar_t) ? 1 : -1; /* Detect bug in mingw. */ int check_WINT: WINT_MIN == TYPE_MINIMUM (wint_t) && WINT_MAX == TYPE_MAXIMUM (wint_t) ? 1 : -1; /* Detect bugs in glibc 2.4 and Solaris 10 stdint.h, among others. */ int check_UINT8_C: (-1 < UINT8_C (0)) == (-1 < (uint_least8_t) 0) ? 1 : -1; int check_UINT16_C: (-1 < UINT16_C (0)) == (-1 < (uint_least16_t) 0) ? 1 : -1; /* Detect bugs in OpenBSD 3.9 stdint.h. */ #ifdef UINT8_MAX int check_uint8: (uint8_t) -1 == UINT8_MAX ? 1 : -1; #endif #ifdef UINT16_MAX int check_uint16: (uint16_t) -1 == UINT16_MAX ? 1 : -1; #endif #ifdef UINT32_MAX int check_uint32: (uint32_t) -1 == UINT32_MAX ? 1 : -1; #endif #ifdef UINT64_MAX int check_uint64: (uint64_t) -1 == UINT64_MAX ? 1 : -1; #endif int check_uint_least8: (uint_least8_t) -1 == UINT_LEAST8_MAX ? 1 : -1; int check_uint_least16: (uint_least16_t) -1 == UINT_LEAST16_MAX ? 1 : -1; int check_uint_least32: (uint_least32_t) -1 == UINT_LEAST32_MAX ? 1 : -1; int check_uint_least64: (uint_least64_t) -1 == UINT_LEAST64_MAX ? 1 : -1; int check_uint_fast8: (uint_fast8_t) -1 == UINT_FAST8_MAX ? 1 : -1; int check_uint_fast16: (uint_fast16_t) -1 == UINT_FAST16_MAX ? 1 : -1; int check_uint_fast32: (uint_fast32_t) -1 == UINT_FAST32_MAX ? 1 : -1; int check_uint_fast64: (uint_fast64_t) -1 == UINT_FAST64_MAX ? 1 : -1; int check_uintptr: (uintptr_t) -1 == UINTPTR_MAX ? 1 : -1; int check_uintmax: (uintmax_t) -1 == UINTMAX_MAX ? 1 : -1; int check_size: (size_t) -1 == SIZE_MAX ? 1 : -1; }; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on native Windows. mingw*) gl_cv_header_working_stdint_h="guessing yes" ;; # In general, assume it works. *) gl_cv_header_working_stdint_h="guessing yes" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ #define __STDC_CONSTANT_MACROS 1 #define __STDC_LIMIT_MACROS 1 #include <stdint.h> #include <stddef.h> #include <signal.h> #if HAVE_WCHAR_H # include <wchar.h> #endif #include <stdio.h> #include <string.h> #define MVAL(macro) MVAL1(macro) #define MVAL1(expression) #expression static const char *macro_values[] = { #ifdef INT8_MAX MVAL (INT8_MAX), #endif #ifdef INT16_MAX MVAL (INT16_MAX), #endif #ifdef INT32_MAX MVAL (INT32_MAX), #endif #ifdef INT64_MAX MVAL (INT64_MAX), #endif #ifdef UINT8_MAX MVAL (UINT8_MAX), #endif #ifdef UINT16_MAX MVAL (UINT16_MAX), #endif #ifdef UINT32_MAX MVAL (UINT32_MAX), #endif #ifdef UINT64_MAX MVAL (UINT64_MAX), #endif NULL }; int main (void) { const char **mv; for (mv = macro_values; *mv != NULL; mv++) { const char *value = *mv; /* Test whether it looks like a cast expression. */ if (strncmp (value, "((unsigned int)"/*)*/, 15) == 0 || strncmp (value, "((unsigned short)"/*)*/, 17) == 0 || strncmp (value, "((unsigned char)"/*)*/, 16) == 0 || strncmp (value, "((int)"/*)*/, 6) == 0 || strncmp (value, "((signed short)"/*)*/, 15) == 0 || strncmp (value, "((signed char)"/*)*/, 14) == 0) return mv - macro_values + 1; } return 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_header_working_stdint_h=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_working_stdint_h" >&5 printf "%s\n" "$gl_cv_header_working_stdint_h" >&6; } fi HAVE_C99_STDINT_H=0 HAVE_SYS_BITYPES_H=0 HAVE_SYS_INTTYPES_H=0 GL_GENERATE_STDINT_H=true case "$gl_cv_header_working_stdint_h" in *yes) HAVE_C99_STDINT_H=1 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether stdint.h works without ISO C predefines" >&5 printf %s "checking whether stdint.h works without ISO C predefines... " >&6; } if test ${gl_cv_header_stdint_without_STDC_macros+y} then : printf %s "(cached) " >&6 else $as_nop gl_cv_header_stdint_without_STDC_macros=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ #include <stdint.h> #include <stddef.h> #include <signal.h> #if HAVE_WCHAR_H # include <wchar.h> #endif intmax_t im = INTMAX_MAX; int32_t i32 = INT32_C (0x7fffffff); int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_header_stdint_without_STDC_macros=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_stdint_without_STDC_macros" >&5 printf "%s\n" "$gl_cv_header_stdint_without_STDC_macros" >&6; } if test $gl_cv_header_stdint_without_STDC_macros = no; then printf "%s\n" "#define __STDC_CONSTANT_MACROS 1" >>confdefs.h printf "%s\n" "#define __STDC_LIMIT_MACROS 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether stdint.h has UINTMAX_WIDTH etc." >&5 printf %s "checking whether stdint.h has UINTMAX_WIDTH etc.... " >&6; } if test ${gl_cv_header_stdint_width+y} then : printf %s "(cached) " >&6 else $as_nop gl_cv_header_stdint_width=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Work if build is not clean. */ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 #ifndef __STDC_WANT_IEC_60559_BFP_EXT__ #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 #endif #include <stdint.h> #include <stddef.h> #include <signal.h> #if HAVE_WCHAR_H # include <wchar.h> #endif int iw = UINTMAX_WIDTH; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_header_stdint_width=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_stdint_width" >&5 printf "%s\n" "$gl_cv_header_stdint_width" >&6; } if test "$gl_cv_header_stdint_width" = yes; then GL_GENERATE_STDINT_H=false fi ;; *) ac_fn_c_check_header_compile "$LINENO" "sys/inttypes.h" "ac_cv_header_sys_inttypes_h" "$ac_includes_default" if test "x$ac_cv_header_sys_inttypes_h" = xyes then : printf "%s\n" "#define HAVE_SYS_INTTYPES_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "sys/bitypes.h" "ac_cv_header_sys_bitypes_h" "$ac_includes_default" if test "x$ac_cv_header_sys_bitypes_h" = xyes then : printf "%s\n" "#define HAVE_SYS_BITYPES_H 1" >>confdefs.h fi if test $ac_cv_header_sys_inttypes_h = yes; then HAVE_SYS_INTTYPES_H=1 fi if test $ac_cv_header_sys_bitypes_h = yes; then HAVE_SYS_BITYPES_H=1 fi if test $APPLE_UNIVERSAL_BUILD = 0; then for gltype in ptrdiff_t size_t ; do { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for bit size of $gltype" >&5 printf %s "checking for bit size of $gltype... " >&6; } if eval test \${gl_cv_bitsizeof_${gltype}+y} then : printf %s "(cached) " >&6 else $as_nop if ac_fn_c_compute_int "$LINENO" "sizeof ($gltype) * CHAR_BIT" "result" " #include <stddef.h> #include <signal.h> #if HAVE_WCHAR_H # include <wchar.h> #endif #include <limits.h>" then : else $as_nop result=unknown fi eval gl_cv_bitsizeof_${gltype}=\$result fi eval ac_res=\$gl_cv_bitsizeof_${gltype} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval result=\$gl_cv_bitsizeof_${gltype} if test $result = unknown; then result=0 fi GLTYPE=`echo "$gltype" | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` printf "%s\n" "#define BITSIZEOF_${GLTYPE} $result" >>confdefs.h eval BITSIZEOF_${GLTYPE}=\$result done fi for gltype in sig_atomic_t wchar_t wint_t ; do { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for bit size of $gltype" >&5 printf %s "checking for bit size of $gltype... " >&6; } if eval test \${gl_cv_bitsizeof_${gltype}+y} then : printf %s "(cached) " >&6 else $as_nop if ac_fn_c_compute_int "$LINENO" "sizeof ($gltype) * CHAR_BIT" "result" " #include <stddef.h> #include <signal.h> #if HAVE_WCHAR_H # include <wchar.h> #endif #include <limits.h>" then : else $as_nop result=unknown fi eval gl_cv_bitsizeof_${gltype}=\$result fi eval ac_res=\$gl_cv_bitsizeof_${gltype} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval result=\$gl_cv_bitsizeof_${gltype} if test $result = unknown; then result=0 fi GLTYPE=`echo "$gltype" | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` printf "%s\n" "#define BITSIZEOF_${GLTYPE} $result" >>confdefs.h eval BITSIZEOF_${GLTYPE}=\$result done for gltype in sig_atomic_t wchar_t wint_t ; do { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $gltype is signed" >&5 printf %s "checking whether $gltype is signed... " >&6; } if eval test \${gl_cv_type_${gltype}_signed+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stddef.h> #include <signal.h> #if HAVE_WCHAR_H # include <wchar.h> #endif int verify[2 * (($gltype) -1 < ($gltype) 0) - 1]; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : result=yes else $as_nop result=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext eval gl_cv_type_${gltype}_signed=\$result fi eval ac_res=\$gl_cv_type_${gltype}_signed { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval result=\$gl_cv_type_${gltype}_signed GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` if test "$result" = yes; then printf "%s\n" "#define HAVE_SIGNED_${GLTYPE} 1" >>confdefs.h eval HAVE_SIGNED_${GLTYPE}=1 else eval HAVE_SIGNED_${GLTYPE}=0 fi done gl_cv_type_ptrdiff_t_signed=yes gl_cv_type_size_t_signed=no if test $APPLE_UNIVERSAL_BUILD = 0; then for gltype in ptrdiff_t size_t ; do { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $gltype integer literal suffix" >&5 printf %s "checking for $gltype integer literal suffix... " >&6; } if eval test \${gl_cv_type_${gltype}_suffix+y} then : printf %s "(cached) " >&6 else $as_nop eval gl_cv_type_${gltype}_suffix=no eval result=\$gl_cv_type_${gltype}_signed if test "$result" = yes; then glsufu= else glsufu=u fi for glsuf in "$glsufu" ${glsufu}l ${glsufu}ll ${glsufu}i64; do case $glsuf in '') gltype1='int';; l) gltype1='long int';; ll) gltype1='long long int';; i64) gltype1='__int64';; u) gltype1='unsigned int';; ul) gltype1='unsigned long int';; ull) gltype1='unsigned long long int';; ui64)gltype1='unsigned __int64';; esac cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stddef.h> #include <signal.h> #if HAVE_WCHAR_H # include <wchar.h> #endif extern $gltype foo; extern $gltype1 foo; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval gl_cv_type_${gltype}_suffix=\$glsuf fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext eval result=\$gl_cv_type_${gltype}_suffix test "$result" != no && break done fi eval ac_res=\$gl_cv_type_${gltype}_suffix { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` eval result=\$gl_cv_type_${gltype}_suffix test "$result" = no && result= eval ${GLTYPE}_SUFFIX=\$result printf "%s\n" "#define ${GLTYPE}_SUFFIX $result" >>confdefs.h done fi for gltype in sig_atomic_t wchar_t wint_t ; do { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $gltype integer literal suffix" >&5 printf %s "checking for $gltype integer literal suffix... " >&6; } if eval test \${gl_cv_type_${gltype}_suffix+y} then : printf %s "(cached) " >&6 else $as_nop eval gl_cv_type_${gltype}_suffix=no eval result=\$gl_cv_type_${gltype}_signed if test "$result" = yes; then glsufu= else glsufu=u fi for glsuf in "$glsufu" ${glsufu}l ${glsufu}ll ${glsufu}i64; do case $glsuf in '') gltype1='int';; l) gltype1='long int';; ll) gltype1='long long int';; i64) gltype1='__int64';; u) gltype1='unsigned int';; ul) gltype1='unsigned long int';; ull) gltype1='unsigned long long int';; ui64)gltype1='unsigned __int64';; esac cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stddef.h> #include <signal.h> #if HAVE_WCHAR_H # include <wchar.h> #endif extern $gltype foo; extern $gltype1 foo; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval gl_cv_type_${gltype}_suffix=\$glsuf fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext eval result=\$gl_cv_type_${gltype}_suffix test "$result" != no && break done fi eval ac_res=\$gl_cv_type_${gltype}_suffix { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` eval result=\$gl_cv_type_${gltype}_suffix test "$result" = no && result= eval ${GLTYPE}_SUFFIX=\$result printf "%s\n" "#define ${GLTYPE}_SUFFIX $result" >>confdefs.h done if test $GNULIBHEADERS_OVERRIDE_WINT_T = 1; then BITSIZEOF_WINT_T=32 fi ;; esac GL_GENERATE_LIMITS_H=true HAVE_DECL_IMAXABS=1; HAVE_DECL_IMAXDIV=1; HAVE_DECL_STRTOIMAX=1; HAVE_DECL_STRTOUMAX=1; HAVE_IMAXDIV_T=1; HAVE_IMAXABS=1; HAVE_IMAXDIV=1; REPLACE_IMAXABS=0; REPLACE_IMAXDIV=0; REPLACE_STRTOIMAX=0; REPLACE_STRTOUMAX=0; INT32_MAX_LT_INTMAX_MAX=1; INT64_MAX_EQ_LONG_MAX='defined _LP64'; PRIPTR_PREFIX=__PRIPTR_PREFIX; UINT32_MAX_LT_UINTMAX_MAX=1; UINT64_MAX_EQ_ULONG_MAX='defined _LP64'; if test $gl_cv_have_include_next = yes; then gl_cv_next_inttypes_h='<'inttypes.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <inttypes.h>" >&5 printf %s "checking absolute name of <inttypes.h>... " >&6; } if test ${gl_cv_next_inttypes_h+y} then : printf %s "(cached) " >&6 else $as_nop if test $ac_cv_header_inttypes_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <inttypes.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'inttypes.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_inttypes_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_inttypes_h gl_cv_next_inttypes_h='"'$gl_header'"' else gl_cv_next_inttypes_h='<'inttypes.h'>' fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_inttypes_h" >&5 printf "%s\n" "$gl_cv_next_inttypes_h" >&6; } fi NEXT_INTTYPES_H=$gl_cv_next_inttypes_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'inttypes.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_inttypes_h fi NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H=$gl_next_as_first_directive GL_GNULIB_IMAXABS=0 GL_GNULIB_IMAXDIV=0 GL_GNULIB_STRTOIMAX=0 GL_GNULIB_STRTOUMAX=0 HAVE_NL_LANGINFO=1; REPLACE_NL_LANGINFO=0; if test $gl_cv_have_include_next = yes; then gl_cv_next_langinfo_h='<'langinfo.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <langinfo.h>" >&5 printf %s "checking absolute name of <langinfo.h>... " >&6; } if test ${gl_cv_next_langinfo_h+y} then : printf %s "(cached) " >&6 else $as_nop if test $ac_cv_header_langinfo_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <langinfo.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'langinfo.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_langinfo_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_langinfo_h gl_cv_next_langinfo_h='"'$gl_header'"' else gl_cv_next_langinfo_h='<'langinfo.h'>' fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_langinfo_h" >&5 printf "%s\n" "$gl_cv_next_langinfo_h" >&6; } fi NEXT_LANGINFO_H=$gl_cv_next_langinfo_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'langinfo.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_langinfo_h fi NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H=$gl_next_as_first_directive HAVE_LANGINFO_CODESET=0 HAVE_LANGINFO_T_FMT_AMPM=0 HAVE_LANGINFO_ALTMON=0 HAVE_LANGINFO_ERA=0 HAVE_LANGINFO_YESEXPR=0 if test $ac_cv_header_langinfo_h = yes; then HAVE_LANGINFO_H=1 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether langinfo.h defines CODESET" >&5 printf %s "checking whether langinfo.h defines CODESET... " >&6; } if test ${gl_cv_header_langinfo_codeset+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <langinfo.h> int a = CODESET; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_header_langinfo_codeset=yes else $as_nop gl_cv_header_langinfo_codeset=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_langinfo_codeset" >&5 printf "%s\n" "$gl_cv_header_langinfo_codeset" >&6; } if test $gl_cv_header_langinfo_codeset = yes; then HAVE_LANGINFO_CODESET=1 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether langinfo.h defines T_FMT_AMPM" >&5 printf %s "checking whether langinfo.h defines T_FMT_AMPM... " >&6; } if test ${gl_cv_header_langinfo_t_fmt_ampm+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <langinfo.h> int a = T_FMT_AMPM; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_header_langinfo_t_fmt_ampm=yes else $as_nop gl_cv_header_langinfo_t_fmt_ampm=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_langinfo_t_fmt_ampm" >&5 printf "%s\n" "$gl_cv_header_langinfo_t_fmt_ampm" >&6; } if test $gl_cv_header_langinfo_t_fmt_ampm = yes; then HAVE_LANGINFO_T_FMT_AMPM=1 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether langinfo.h defines ALTMON_1" >&5 printf %s "checking whether langinfo.h defines ALTMON_1... " >&6; } if test ${gl_cv_header_langinfo_altmon+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <langinfo.h> int a = ALTMON_1; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_header_langinfo_altmon=yes else $as_nop gl_cv_header_langinfo_altmon=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_langinfo_altmon" >&5 printf "%s\n" "$gl_cv_header_langinfo_altmon" >&6; } if test $gl_cv_header_langinfo_altmon = yes; then HAVE_LANGINFO_ALTMON=1 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether langinfo.h defines ERA" >&5 printf %s "checking whether langinfo.h defines ERA... " >&6; } if test ${gl_cv_header_langinfo_era+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <langinfo.h> int a = ERA; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_header_langinfo_era=yes else $as_nop gl_cv_header_langinfo_era=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_langinfo_era" >&5 printf "%s\n" "$gl_cv_header_langinfo_era" >&6; } if test $gl_cv_header_langinfo_era = yes; then HAVE_LANGINFO_ERA=1 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether langinfo.h defines YESEXPR" >&5 printf %s "checking whether langinfo.h defines YESEXPR... " >&6; } if test ${gl_cv_header_langinfo_yesexpr+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <langinfo.h> int a = YESEXPR; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_header_langinfo_yesexpr=yes else $as_nop gl_cv_header_langinfo_yesexpr=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_langinfo_yesexpr" >&5 printf "%s\n" "$gl_cv_header_langinfo_yesexpr" >&6; } if test $gl_cv_header_langinfo_yesexpr = yes; then HAVE_LANGINFO_YESEXPR=1 fi else HAVE_LANGINFO_H=0 fi GL_GNULIB_NL_LANGINFO=0 HAVE_NEWLOCALE=1; HAVE_DUPLOCALE=1; HAVE_FREELOCALE=1; REPLACE_LOCALECONV=0; REPLACE_SETLOCALE=0; REPLACE_NEWLOCALE=0; REPLACE_DUPLOCALE=0; REPLACE_FREELOCALE=0; REPLACE_STRUCT_LCONV=0; LOCALENAME_ENHANCE_LOCALE_FUNCS=0; REPLACE_NULL=0; HAVE_MAX_ALIGN_T=1; HAVE_WCHAR_T=1; { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for wchar_t" >&5 printf %s "checking for wchar_t... " >&6; } if test ${gt_cv_c_wchar_t+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stddef.h> wchar_t foo = (wchar_t)'\0'; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gt_cv_c_wchar_t=yes else $as_nop gt_cv_c_wchar_t=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_wchar_t" >&5 printf "%s\n" "$gt_cv_c_wchar_t" >&6; } if test $gt_cv_c_wchar_t = yes; then printf "%s\n" "#define HAVE_WCHAR_T 1" >>confdefs.h fi GL_GENERATE_STDDEF_H=false { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for good max_align_t" >&5 printf %s "checking for good max_align_t... " >&6; } if test ${gl_cv_type_max_align_t+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* On FreeBSD 12.0/x86, max_align_t defined by <stddef.h> has the correct alignment with the default (wrong) definition of _Alignof, but a wrong alignment as soon as we activate an ISO C compliant _Alignof definition. */ #if ((defined __GNUC__ && 4 <= __GNUC__) || defined __clang__) && !defined __cplusplus #define _Alignof(type) __builtin_offsetof (struct { char __a; type __b; }, __b) #endif #include <stddef.h> unsigned int s = sizeof (max_align_t); #if defined __GNUC__ || defined __clang__ || defined __IBM__ALIGNOF__ int check1[2 * (__alignof__ (double) <= __alignof__ (max_align_t)) - 1]; int check2[2 * (__alignof__ (long double) <= __alignof__ (max_align_t)) - 1]; #endif typedef struct { char a; max_align_t b; } max_helper; typedef struct { char a; long b; } long_helper; typedef struct { char a; double b; } double_helper; typedef struct { char a; long double b; } long_double_helper; int check3[2 * (offsetof (long_helper, b) <= offsetof (max_helper, b)) - 1]; int check4[2 * (offsetof (double_helper, b) <= offsetof (max_helper, b)) - 1]; int check5[2 * (offsetof (long_double_helper, b) <= offsetof (max_helper, b)) - 1]; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_type_max_align_t=yes else $as_nop gl_cv_type_max_align_t=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_type_max_align_t" >&5 printf "%s\n" "$gl_cv_type_max_align_t" >&6; } if test $gl_cv_type_max_align_t = no; then HAVE_MAX_ALIGN_T=0 GL_GENERATE_STDDEF_H=true fi if test $gt_cv_c_wchar_t = no; then HAVE_WCHAR_T=0 GL_GENERATE_STDDEF_H=true fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether NULL can be used in arbitrary expressions" >&5 printf %s "checking whether NULL can be used in arbitrary expressions... " >&6; } if test ${gl_cv_decl_null_works+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stddef.h> int test[2 * (sizeof NULL == sizeof (void *)) -1]; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_decl_null_works=yes else $as_nop gl_cv_decl_null_works=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_decl_null_works" >&5 printf "%s\n" "$gl_cv_decl_null_works" >&6; } if test $gl_cv_decl_null_works = no; then REPLACE_NULL=1 GL_GENERATE_STDDEF_H=true fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for unreachable" >&5 printf %s "checking for unreachable... " >&6; } if test ${gl_cv_func_unreachable+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stddef.h> int main (void) { unreachable (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_cv_func_unreachable=yes else $as_nop gl_cv_func_unreachable=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_unreachable" >&5 printf "%s\n" "$gl_cv_func_unreachable" >&6; } if test $gl_cv_func_unreachable = no; then GL_GENERATE_STDDEF_H=true fi if $GL_GENERATE_STDDEF_H; then if test $gl_cv_have_include_next = yes; then gl_cv_next_stddef_h='<'stddef.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <stddef.h>" >&5 printf %s "checking absolute name of <stddef.h>... " >&6; } if test ${gl_cv_next_stddef_h+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stddef.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'stddef.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_stddef_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_stddef_h gl_cv_next_stddef_h='"'$gl_header'"' fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stddef_h" >&5 printf "%s\n" "$gl_cv_next_stddef_h" >&6; } fi NEXT_STDDEF_H=$gl_cv_next_stddef_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'stddef.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_stddef_h fi NEXT_AS_FIRST_DIRECTIVE_STDDEF_H=$gl_next_as_first_directive fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether locale.h defines locale_t" >&5 printf %s "checking whether locale.h defines locale_t... " >&6; } if test ${gl_cv_header_locale_has_locale_t+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> locale_t x; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_header_locale_has_locale_t=yes else $as_nop gl_cv_header_locale_has_locale_t=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_locale_has_locale_t" >&5 printf "%s\n" "$gl_cv_header_locale_has_locale_t" >&6; } if test $ac_cv_header_xlocale_h = yes; then HAVE_XLOCALE_H=1 if test $gl_cv_header_locale_has_locale_t = yes; then gl_cv_header_locale_h_needs_xlocale_h=no else gl_cv_header_locale_h_needs_xlocale_h=yes fi HAVE_LOCALE_T=1 else HAVE_XLOCALE_H=0 gl_cv_header_locale_h_needs_xlocale_h=no if test $gl_cv_header_locale_has_locale_t = yes; then HAVE_LOCALE_T=1 else HAVE_LOCALE_T=0 fi fi case "$host_os" in solaris*) printf "%s\n" "#define _LCONV_C99 1" >>confdefs.h ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether locale.h conforms to POSIX:2001" >&5 printf %s "checking whether locale.h conforms to POSIX:2001... " >&6; } if test ${gl_cv_header_locale_h_posix2001+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> int x = LC_MESSAGES; int y = sizeof (((struct lconv *) 0)->decimal_point); int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_header_locale_h_posix2001=yes else $as_nop gl_cv_header_locale_h_posix2001=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_locale_h_posix2001" >&5 printf "%s\n" "$gl_cv_header_locale_h_posix2001" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether struct lconv is properly defined" >&5 printf %s "checking whether struct lconv is properly defined... " >&6; } if test ${gl_cv_sys_struct_lconv_ok+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> struct lconv l; int x = sizeof (l.decimal_point); int y = sizeof (l.int_p_cs_precedes); int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_sys_struct_lconv_ok=yes else $as_nop gl_cv_sys_struct_lconv_ok=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_sys_struct_lconv_ok" >&5 printf "%s\n" "$gl_cv_sys_struct_lconv_ok" >&6; } if test $gl_cv_sys_struct_lconv_ok = no; then case "$host_os" in mingw*) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef _MSC_VER Special #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Special" >/dev/null 2>&1 then : else $as_nop REPLACE_STRUCT_LCONV=1 fi rm -rf conftest* ;; *) REPLACE_STRUCT_LCONV=1 ;; esac fi if test $gl_cv_have_include_next = yes; then gl_cv_next_locale_h='<'locale.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <locale.h>" >&5 printf %s "checking absolute name of <locale.h>... " >&6; } if test ${gl_cv_next_locale_h+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'locale.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_locale_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_locale_h gl_cv_next_locale_h='"'$gl_header'"' fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_locale_h" >&5 printf "%s\n" "$gl_cv_next_locale_h" >&6; } fi NEXT_LOCALE_H=$gl_cv_next_locale_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'locale.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_locale_h fi NEXT_AS_FIRST_DIRECTIVE_LOCALE_H=$gl_next_as_first_directive GL_GNULIB_LOCALECONV=0 GL_GNULIB_SETLOCALE=0 GL_GNULIB_SETLOCALE_NULL=0 GL_GNULIB_DUPLOCALE=0 GL_GNULIB_LOCALENAME=0 gl_threads_api=none LIBTHREAD= LTLIBTHREAD= LIBMULTITHREAD= LTLIBMULTITHREAD= if test "$gl_use_threads" != no; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether imported symbols can be declared weak" >&5 printf %s "checking whether imported symbols can be declared weak... " >&6; } if test ${gl_cv_have_weak+y} then : printf %s "(cached) " >&6 else $as_nop case "$host_os" in cygwin* | mingw*) gl_cv_have_weak="guessing no" ;; *) gl_cv_have_weak=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern void xyzzy (); #pragma weak xyzzy int main (void) { xyzzy(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_cv_have_weak=maybe fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test $gl_cv_have_weak = maybe; then if test "$cross_compiling" = yes then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __ELF__ Extensible Linking Format #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Extensible Linking Format" >/dev/null 2>&1 then : gl_cv_have_weak="guessing yes" else $as_nop gl_cv_have_weak="guessing no" fi rm -rf conftest* else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdio.h> #pragma weak fputs int main () { return (fputs == NULL); } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_have_weak=yes else $as_nop gl_cv_have_weak=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 ;; esac case " $LDFLAGS " in *" -static "*) gl_cv_have_weak=no ;; esac case "$gl_cv_have_weak" in *yes) case "$host_os" in freebsd* | dragonfly* | midnightbsd*) : > conftest1.c $CC $CPPFLAGS $CFLAGS $LDFLAGS -fPIC -shared -o libempty.so conftest1.c -lpthread >&5 2>&1 cat <<EOF > conftest2.c #include <pthread.h> #pragma weak pthread_mutexattr_gettype int main () { return (pthread_mutexattr_gettype != NULL); } EOF $CC $CPPFLAGS $CFLAGS $LDFLAGS -o conftest conftest2.c libempty.so >&5 2>&1 \ || gl_cv_have_weak=no rm -f conftest1.c libempty.so conftest2.c conftest ;; esac ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_have_weak" >&5 printf "%s\n" "$gl_cv_have_weak" >&6; } case "$gl_cv_have_weak" in *yes) printf "%s\n" "#define HAVE_WEAK_SYMBOLS 1" >>confdefs.h ;; esac if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then : fi if test "$gl_use_threads" = isoc || test "$gl_use_threads" = isoc+posix; then gl_have_isoc_threads="$ac_cv_header_threads_h" fi if test "$gl_use_threads" = yes \ || test "$gl_use_threads" = posix \ || test "$gl_use_threads" = isoc+posix; then if test -z "$gl_pthreadlib_body_done"; then gl_pthread_api=no LIBPTHREAD= LIBPMULTITHREAD= # On OSF/1, the compiler needs the flag -pthread or -D_REENTRANT so that # it groks <pthread.h>. It's added above, in gl_ANYTHREADLIB_EARLY. ac_fn_c_check_header_compile "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default" if test "x$ac_cv_header_pthread_h" = xyes then : gl_have_pthread_h=yes else $as_nop gl_have_pthread_h=no fi if test "$gl_have_pthread_h" = yes; then # Other possible tests: # -lpthreads (FSU threads, PCthreads) # -lgthreads # Test whether both pthread_mutex_lock and pthread_mutexattr_init exist # in libc. IRIX 6.5 has the first one in both libc and libpthread, but # the second one only in libpthread, and lock.c needs it. # # If -pthread works, prefer it to -lpthread, since Ubuntu 14.04 # needs -pthread for some reason. See: # https://lists.gnu.org/r/bug-gnulib/2014-09/msg00023.html save_LIBS=$LIBS for gl_pthread in '' '-pthread'; do LIBS="$LIBS $gl_pthread" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <pthread.h> pthread_mutex_t m; pthread_mutexattr_t ma; int main (void) { pthread_mutex_lock (&m); pthread_mutexattr_init (&ma); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_pthread_api=yes LIBPTHREAD=$gl_pthread LIBPMULTITHREAD=$gl_pthread fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$save_LIBS test $gl_pthread_api = yes && break done echo "$as_me:15584: gl_pthread_api=$gl_pthread_api" >&5 echo "$as_me:15585: LIBPTHREAD=$LIBPTHREAD" >&5 gl_pthread_in_glibc=no # On Linux with glibc >= 2.34, libc contains the fully functional # pthread functions. case "$host_os" in linux*) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <features.h> #ifdef __GNU_LIBRARY__ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 34) || (__GLIBC__ > 2) Lucky user #endif #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Lucky user" >/dev/null 2>&1 then : gl_pthread_in_glibc=yes fi rm -rf conftest* ;; esac echo "$as_me:15611: gl_pthread_in_glibc=$gl_pthread_in_glibc" >&5 # Test for libpthread by looking for pthread_kill. (Not pthread_self, # since it is defined as a macro on OSF/1.) if test $gl_pthread_api = yes && test -z "$LIBPTHREAD"; then # The program links fine without libpthread. But it may actually # need to link with libpthread in order to create multiple threads. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lpthread" >&5 printf %s "checking for pthread_kill in -lpthread... " >&6; } if test ${ac_cv_lib_pthread_pthread_kill+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lpthread $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* 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. */ char pthread_kill (); int main (void) { return pthread_kill (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_pthread_pthread_kill=yes else $as_nop ac_cv_lib_pthread_pthread_kill=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_kill" >&5 printf "%s\n" "$ac_cv_lib_pthread_pthread_kill" >&6; } if test "x$ac_cv_lib_pthread_pthread_kill" = xyes then : if test $gl_pthread_in_glibc = yes; then LIBPMULTITHREAD= else LIBPMULTITHREAD=-lpthread # On Solaris and HP-UX, most pthread functions exist also in libc. # Therefore pthread_in_use() needs to actually try to create a # thread: pthread_create from libc will fail, whereas # pthread_create will actually create a thread. # On Solaris 10 or newer, this test is no longer needed, because # libc contains the fully functional pthread functions. case "$host_os" in solaris | solaris2.[1-9] | solaris2.[1-9].* | hpux*) printf "%s\n" "#define PTHREAD_IN_USE_DETECTION_HARD 1" >>confdefs.h esac fi fi elif test $gl_pthread_api != yes; then # Some library is needed. Try libpthread and libc_r. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lpthread" >&5 printf %s "checking for pthread_kill in -lpthread... " >&6; } if test ${ac_cv_lib_pthread_pthread_kill+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lpthread $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* 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. */ char pthread_kill (); int main (void) { return pthread_kill (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_pthread_pthread_kill=yes else $as_nop ac_cv_lib_pthread_pthread_kill=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_kill" >&5 printf "%s\n" "$ac_cv_lib_pthread_pthread_kill" >&6; } if test "x$ac_cv_lib_pthread_pthread_kill" = xyes then : gl_pthread_api=yes LIBPTHREAD=-lpthread LIBPMULTITHREAD=-lpthread fi if test $gl_pthread_api != yes; then # For FreeBSD 4. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lc_r" >&5 printf %s "checking for pthread_kill in -lc_r... " >&6; } if test ${ac_cv_lib_c_r_pthread_kill+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lc_r $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* 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. */ char pthread_kill (); int main (void) { return pthread_kill (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_c_r_pthread_kill=yes else $as_nop ac_cv_lib_c_r_pthread_kill=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_r_pthread_kill" >&5 printf "%s\n" "$ac_cv_lib_c_r_pthread_kill" >&6; } if test "x$ac_cv_lib_c_r_pthread_kill" = xyes then : gl_pthread_api=yes LIBPTHREAD=-lc_r LIBPMULTITHREAD=-lc_r fi fi fi echo "$as_me:15765: LIBPMULTITHREAD=$LIBPMULTITHREAD" >&5 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether POSIX threads API is available" >&5 printf %s "checking whether POSIX threads API is available... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_pthread_api" >&5 printf "%s\n" "$gl_pthread_api" >&6; } if test $gl_pthread_api = yes; then printf "%s\n" "#define HAVE_PTHREAD_API 1" >>confdefs.h fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sched.h> int main (void) { sched_yield (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : SCHED_YIELD_LIB= else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sched_yield in -lrt" >&5 printf %s "checking for sched_yield in -lrt... " >&6; } if test ${ac_cv_lib_rt_sched_yield+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lrt $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* 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. */ char sched_yield (); int main (void) { return sched_yield (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_rt_sched_yield=yes else $as_nop ac_cv_lib_rt_sched_yield=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_sched_yield" >&5 printf "%s\n" "$ac_cv_lib_rt_sched_yield" >&6; } if test "x$ac_cv_lib_rt_sched_yield" = xyes then : SCHED_YIELD_LIB=-lrt else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sched_yield in -lposix4" >&5 printf %s "checking for sched_yield in -lposix4... " >&6; } if test ${ac_cv_lib_posix4_sched_yield+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lposix4 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* 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. */ char sched_yield (); int main (void) { return sched_yield (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_posix4_sched_yield=yes else $as_nop ac_cv_lib_posix4_sched_yield=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_posix4_sched_yield" >&5 printf "%s\n" "$ac_cv_lib_posix4_sched_yield" >&6; } if test "x$ac_cv_lib_posix4_sched_yield" = xyes then : SCHED_YIELD_LIB=-lposix4 fi fi fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIB_SCHED_YIELD="$SCHED_YIELD_LIB" gl_pthreadlib_body_done=done fi LIBTHREAD=$LIBPTHREAD LTLIBTHREAD=$LIBPTHREAD LIBMULTITHREAD=$LIBPMULTITHREAD LTLIBMULTITHREAD=$LIBPMULTITHREAD if test $gl_pthread_api = yes; then if test "$gl_use_threads" = isoc+posix && test "$gl_have_isoc_threads" = yes; then gl_threads_api='isoc+posix' printf "%s\n" "#define USE_ISOC_AND_POSIX_THREADS 1" >>confdefs.h LIBTHREAD= LTLIBTHREAD= else gl_threads_api=posix printf "%s\n" "#define USE_POSIX_THREADS 1" >>confdefs.h if test -z "$LIBMULTITHREAD" && test -z "$LTLIBMULTITHREAD"; then printf "%s\n" "#define USE_POSIX_THREADS_FROM_LIBC 1" >>confdefs.h else if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then printf "%s\n" "#define USE_POSIX_THREADS_WEAK 1" >>confdefs.h LIBTHREAD= LTLIBTHREAD= else case "$host_os" in freebsd* | dragonfly* | midnightbsd*) if test "x$LIBTHREAD" != "x$LIBMULTITHREAD"; then printf "%s\n" "#define PTHREAD_IN_USE_DETECTION_HARD 1" >>confdefs.h fi ;; esac fi fi fi fi fi if test $gl_threads_api = none; then if test "$gl_use_threads" = isoc && test "$gl_have_isoc_threads" = yes; then if test -z "$gl_stdthreadlib_body_done"; then case "$host_os" in mingw*) LIBSTDTHREAD= ;; *) if test -z "$gl_pthreadlib_body_done"; then gl_pthread_api=no LIBPTHREAD= LIBPMULTITHREAD= # On OSF/1, the compiler needs the flag -pthread or -D_REENTRANT so that # it groks <pthread.h>. It's added above, in gl_ANYTHREADLIB_EARLY. ac_fn_c_check_header_compile "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default" if test "x$ac_cv_header_pthread_h" = xyes then : gl_have_pthread_h=yes else $as_nop gl_have_pthread_h=no fi if test "$gl_have_pthread_h" = yes; then # Other possible tests: # -lpthreads (FSU threads, PCthreads) # -lgthreads # Test whether both pthread_mutex_lock and pthread_mutexattr_init exist # in libc. IRIX 6.5 has the first one in both libc and libpthread, but # the second one only in libpthread, and lock.c needs it. # # If -pthread works, prefer it to -lpthread, since Ubuntu 14.04 # needs -pthread for some reason. See: # https://lists.gnu.org/r/bug-gnulib/2014-09/msg00023.html save_LIBS=$LIBS for gl_pthread in '' '-pthread'; do LIBS="$LIBS $gl_pthread" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <pthread.h> pthread_mutex_t m; pthread_mutexattr_t ma; int main (void) { pthread_mutex_lock (&m); pthread_mutexattr_init (&ma); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_pthread_api=yes LIBPTHREAD=$gl_pthread LIBPMULTITHREAD=$gl_pthread fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$save_LIBS test $gl_pthread_api = yes && break done echo "$as_me:15995: gl_pthread_api=$gl_pthread_api" >&5 echo "$as_me:15996: LIBPTHREAD=$LIBPTHREAD" >&5 gl_pthread_in_glibc=no # On Linux with glibc >= 2.34, libc contains the fully functional # pthread functions. case "$host_os" in linux*) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <features.h> #ifdef __GNU_LIBRARY__ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 34) || (__GLIBC__ > 2) Lucky user #endif #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Lucky user" >/dev/null 2>&1 then : gl_pthread_in_glibc=yes fi rm -rf conftest* ;; esac echo "$as_me:16022: gl_pthread_in_glibc=$gl_pthread_in_glibc" >&5 # Test for libpthread by looking for pthread_kill. (Not pthread_self, # since it is defined as a macro on OSF/1.) if test $gl_pthread_api = yes && test -z "$LIBPTHREAD"; then # The program links fine without libpthread. But it may actually # need to link with libpthread in order to create multiple threads. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lpthread" >&5 printf %s "checking for pthread_kill in -lpthread... " >&6; } if test ${ac_cv_lib_pthread_pthread_kill+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lpthread $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* 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. */ char pthread_kill (); int main (void) { return pthread_kill (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_pthread_pthread_kill=yes else $as_nop ac_cv_lib_pthread_pthread_kill=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_kill" >&5 printf "%s\n" "$ac_cv_lib_pthread_pthread_kill" >&6; } if test "x$ac_cv_lib_pthread_pthread_kill" = xyes then : if test $gl_pthread_in_glibc = yes; then LIBPMULTITHREAD= else LIBPMULTITHREAD=-lpthread # On Solaris and HP-UX, most pthread functions exist also in libc. # Therefore pthread_in_use() needs to actually try to create a # thread: pthread_create from libc will fail, whereas # pthread_create will actually create a thread. # On Solaris 10 or newer, this test is no longer needed, because # libc contains the fully functional pthread functions. case "$host_os" in solaris | solaris2.[1-9] | solaris2.[1-9].* | hpux*) printf "%s\n" "#define PTHREAD_IN_USE_DETECTION_HARD 1" >>confdefs.h esac fi fi elif test $gl_pthread_api != yes; then # Some library is needed. Try libpthread and libc_r. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lpthread" >&5 printf %s "checking for pthread_kill in -lpthread... " >&6; } if test ${ac_cv_lib_pthread_pthread_kill+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lpthread $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* 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. */ char pthread_kill (); int main (void) { return pthread_kill (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_pthread_pthread_kill=yes else $as_nop ac_cv_lib_pthread_pthread_kill=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_kill" >&5 printf "%s\n" "$ac_cv_lib_pthread_pthread_kill" >&6; } if test "x$ac_cv_lib_pthread_pthread_kill" = xyes then : gl_pthread_api=yes LIBPTHREAD=-lpthread LIBPMULTITHREAD=-lpthread fi if test $gl_pthread_api != yes; then # For FreeBSD 4. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lc_r" >&5 printf %s "checking for pthread_kill in -lc_r... " >&6; } if test ${ac_cv_lib_c_r_pthread_kill+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lc_r $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* 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. */ char pthread_kill (); int main (void) { return pthread_kill (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_c_r_pthread_kill=yes else $as_nop ac_cv_lib_c_r_pthread_kill=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_r_pthread_kill" >&5 printf "%s\n" "$ac_cv_lib_c_r_pthread_kill" >&6; } if test "x$ac_cv_lib_c_r_pthread_kill" = xyes then : gl_pthread_api=yes LIBPTHREAD=-lc_r LIBPMULTITHREAD=-lc_r fi fi fi echo "$as_me:16176: LIBPMULTITHREAD=$LIBPMULTITHREAD" >&5 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether POSIX threads API is available" >&5 printf %s "checking whether POSIX threads API is available... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_pthread_api" >&5 printf "%s\n" "$gl_pthread_api" >&6; } if test $gl_pthread_api = yes; then printf "%s\n" "#define HAVE_PTHREAD_API 1" >>confdefs.h fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sched.h> int main (void) { sched_yield (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : SCHED_YIELD_LIB= else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sched_yield in -lrt" >&5 printf %s "checking for sched_yield in -lrt... " >&6; } if test ${ac_cv_lib_rt_sched_yield+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lrt $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* 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. */ char sched_yield (); int main (void) { return sched_yield (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_rt_sched_yield=yes else $as_nop ac_cv_lib_rt_sched_yield=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_sched_yield" >&5 printf "%s\n" "$ac_cv_lib_rt_sched_yield" >&6; } if test "x$ac_cv_lib_rt_sched_yield" = xyes then : SCHED_YIELD_LIB=-lrt else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sched_yield in -lposix4" >&5 printf %s "checking for sched_yield in -lposix4... " >&6; } if test ${ac_cv_lib_posix4_sched_yield+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lposix4 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* 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. */ char sched_yield (); int main (void) { return sched_yield (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_posix4_sched_yield=yes else $as_nop ac_cv_lib_posix4_sched_yield=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_posix4_sched_yield" >&5 printf "%s\n" "$ac_cv_lib_posix4_sched_yield" >&6; } if test "x$ac_cv_lib_posix4_sched_yield" = xyes then : SCHED_YIELD_LIB=-lposix4 fi fi fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIB_SCHED_YIELD="$SCHED_YIELD_LIB" gl_pthreadlib_body_done=done fi if test $ac_cv_header_threads_h = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for thrd_create" >&5 printf %s "checking for thrd_create... " >&6; } if test ${gl_cv_onwards_func_thrd_create+y} then : printf %s "(cached) " >&6 else $as_nop exec 9>&6 6>/dev/null case "$host_os" in linux*-android*) ac_fn_check_decl "$LINENO" "thrd_create" "ac_cv_have_decl_thrd_create" "#include <threads.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_thrd_create" = xyes then : fi if test $ac_cv_have_decl_thrd_create = yes; then ac_fn_c_check_func "$LINENO" "thrd_create" "ac_cv_func_thrd_create" if test "x$ac_cv_func_thrd_create" = xyes then : fi if test $ac_cv_func_thrd_create = yes; then gl_cv_onwards_func_thrd_create=yes else gl_cv_onwards_func_thrd_create='future OS version' fi else gl_cv_onwards_func_thrd_create='future OS version' fi ;; *) ac_fn_c_check_func "$LINENO" "thrd_create" "ac_cv_func_thrd_create" if test "x$ac_cv_func_thrd_create" = xyes then : fi gl_cv_onwards_func_thrd_create=$ac_cv_func_thrd_create ;; esac exec 6>&9 9>&- fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_onwards_func_thrd_create" >&5 printf "%s\n" "$gl_cv_onwards_func_thrd_create" >&6; } case "$gl_cv_onwards_func_thrd_create" in future*) ac_cv_func_thrd_create=no ;; *) ac_cv_func_thrd_create=$gl_cv_onwards_func_thrd_create ;; esac if test $ac_cv_func_thrd_create = yes; then printf "%s\n" "#define HAVE_THRD_CREATE 1" >>confdefs.h fi if test $ac_cv_func_thrd_create = yes; then LIBSTDTHREAD= else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for thrd_create in -lstdthreads" >&5 printf %s "checking for thrd_create in -lstdthreads... " >&6; } if test ${ac_cv_lib_stdthreads_thrd_create+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lstdthreads $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* 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. */ char thrd_create (); int main (void) { return thrd_create (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_stdthreads_thrd_create=yes else $as_nop ac_cv_lib_stdthreads_thrd_create=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_stdthreads_thrd_create" >&5 printf "%s\n" "$ac_cv_lib_stdthreads_thrd_create" >&6; } if test "x$ac_cv_lib_stdthreads_thrd_create" = xyes then : LIBSTDTHREAD='-lstdthreads -lpthread' else $as_nop LIBSTDTHREAD="$LIBPMULTITHREAD" fi fi else LIBSTDTHREAD="$LIBPMULTITHREAD $SCHED_YIELD_LIB" fi ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ISO C threads API is available" >&5 printf %s "checking whether ISO C threads API is available... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_threads_h" >&5 printf "%s\n" "$ac_cv_header_threads_h" >&6; } gl_stdthreadlib_body_done=done fi LIBTHREAD=$LIBSTDTHREAD LTLIBTHREAD=$LIBSTDTHREAD LIBMULTITHREAD=$LIBSTDTHREAD LTLIBMULTITHREAD=$LIBSTDTHREAD gl_threads_api=isoc printf "%s\n" "#define USE_ISOC_THREADS 1" >>confdefs.h fi fi if test $gl_threads_api = none; then case "$gl_use_threads" in yes | windows | win32) # The 'win32' is for backward compatibility. if { case "$host_os" in mingw*) true;; *) false;; esac }; then gl_threads_api=windows printf "%s\n" "#define USE_WINDOWS_THREADS 1" >>confdefs.h fi ;; esac fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for multithread API to use" >&5 printf %s "checking for multithread API to use... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_threads_api" >&5 printf "%s\n" "$gl_threads_api" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether malloc (0) returns nonnull" >&5 printf %s "checking whether malloc (0) returns nonnull... " >&6; } if test ${ac_cv_func_malloc_0_nonnull+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on platforms where we know the result. *-gnu* | freebsd* | netbsd* | openbsd* | bitrig* \ | gnu* | *-musl* | midipix* | midnightbsd* \ | hpux* | solaris* | cygwin* | mingw* | msys* ) ac_cv_func_malloc_0_nonnull="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) ac_cv_func_malloc_0_nonnull="$gl_cross_guess_normal" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdlib.h> int main (void) { void *p = malloc (0); int result = !p; free (p); return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : ac_cv_func_malloc_0_nonnull=yes else $as_nop ac_cv_func_malloc_0_nonnull=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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_malloc_0_nonnull" >&5 printf "%s\n" "$ac_cv_func_malloc_0_nonnull" >&6; } case $ac_cv_func_malloc_0_nonnull in #( *yes) : gl_cv_func_malloc_0_nonnull=1 ;; #( *) : gl_cv_func_malloc_0_nonnull=0 ;; esac printf "%s\n" "#define MALLOC_0_IS_NONNULL $gl_cv_func_malloc_0_nonnull" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for mbstate_t" >&5 printf %s "checking for mbstate_t... " >&6; } if test ${ac_cv_type_mbstate_t+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default #include <wchar.h> int main (void) { mbstate_t x; return sizeof x; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_type_mbstate_t=yes else $as_nop ac_cv_type_mbstate_t=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_mbstate_t" >&5 printf "%s\n" "$ac_cv_type_mbstate_t" >&6; } if test $ac_cv_type_mbstate_t = yes; then printf "%s\n" "#define HAVE_MBSTATE_T 1" >>confdefs.h else printf "%s\n" "#define mbstate_t int" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a traditional japanese locale" >&5 printf %s "checking for a traditional japanese locale... " >&6; } if test ${gt_cv_locale_ja+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> #include <time.h> #if HAVE_LANGINFO_CODESET # include <langinfo.h> #endif #include <stdlib.h> #include <string.h> struct tm t; char buf[16]; int main () { /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl imitates locale dependent behaviour by looking at the environment variables, and all locales use the UTF-8 encoding. */ #if defined __BEOS__ || defined __HAIKU__ return 1; #else /* Check whether the given locale name is recognized by the system. */ # if defined _WIN32 && !defined __CYGWIN__ /* On native Windows, setlocale(category, "") looks at the system settings, not at the environment variables. Also, when an encoding suffix such as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE category of the locale to "C". */ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) return 1; # else if (setlocale (LC_ALL, "") == NULL) return 1; # endif /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) is empty, and the behaviour of Tcl 8.4 in this locale is not useful. On OpenBSD 4.0, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "646". In this situation, some unit tests fail. On MirBSD 10, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "UTF-8". */ # if HAVE_LANGINFO_CODESET { const char *cs = nl_langinfo (CODESET); if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0 || strcmp (cs, "UTF-8") == 0) return 1; } # endif # ifdef __CYGWIN__ /* On Cygwin, avoid locale names without encoding suffix, because the locale_charset() function relies on the encoding suffix. Note that LC_ALL is set on the command line. */ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; # endif /* Check whether MB_CUR_MAX is > 1. This excludes the dysfunctional locales on Cygwin 1.5.x. */ if (MB_CUR_MAX == 1) return 1; /* Check whether in a month name, no byte in the range 0x80..0x9F occurs. This excludes the UTF-8 encoding (except on MirBSD). */ { const char *p; t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1; for (p = buf; *p != '\0'; p++) if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0) return 1; } return 0; #endif } _ACEOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest$ac_exeext; then case "$host_os" in # Handle native Windows specially, because there setlocale() interprets # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", # "fr" or "fra" as "French" or "French_France.1252", # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", # "ja" as "Japanese" or "Japanese_Japan.932", # and similar. mingw*) # Note that on native Windows, the Japanese locale is # Japanese_Japan.932, and CP932 is very different from EUC-JP, so we # cannot use it here. gt_cv_locale_ja=none ;; *) # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the # configure script would override the LC_ALL setting. Likewise for # LC_CTYPE, which is also set at the beginning of the configure script. # Test for the AIX locale name. if (LC_ALL=ja_JP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_ja=ja_JP else # Test for the locale name with explicit encoding suffix. if (LC_ALL=ja_JP.EUC-JP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_ja=ja_JP.EUC-JP else # Test for the HP-UX, OSF/1, NetBSD locale name. if (LC_ALL=ja_JP.eucJP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_ja=ja_JP.eucJP else # Test for the IRIX, FreeBSD locale name. if (LC_ALL=ja_JP.EUC LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_ja=ja_JP.EUC else # Test for the Solaris 7 locale name. if (LC_ALL=ja LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_ja=ja else # Special test for NetBSD 1.6. if test -f /usr/share/locale/ja_JP.eucJP/LC_CTYPE; then gt_cv_locale_ja=ja_JP.eucJP else # None found. gt_cv_locale_ja=none fi fi fi fi fi fi ;; esac fi rm -fr conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_ja" >&5 printf "%s\n" "$gt_cv_locale_ja" >&6; } LOCALE_JA=$gt_cv_locale_ja { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a french Unicode locale" >&5 printf %s "checking for a french Unicode locale... " >&6; } if test ${gt_cv_locale_fr_utf8+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> #include <time.h> #if HAVE_LANGINFO_CODESET # include <langinfo.h> #endif #include <stdlib.h> #include <string.h> struct tm t; char buf[16]; int main () { /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl imitates locale dependent behaviour by looking at the environment variables, and all locales use the UTF-8 encoding. */ #if !(defined __BEOS__ || defined __HAIKU__) /* Check whether the given locale name is recognized by the system. */ # if defined _WIN32 && !defined __CYGWIN__ /* On native Windows, setlocale(category, "") looks at the system settings, not at the environment variables. Also, when an encoding suffix such as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE category of the locale to "C". */ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) return 1; # else if (setlocale (LC_ALL, "") == NULL) return 1; # endif /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) is empty, and the behaviour of Tcl 8.4 in this locale is not useful. On OpenBSD 4.0, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "646". In this situation, some unit tests fail. */ # if HAVE_LANGINFO_CODESET { const char *cs = nl_langinfo (CODESET); if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) return 1; } # endif # ifdef __CYGWIN__ /* On Cygwin, avoid locale names without encoding suffix, because the locale_charset() function relies on the encoding suffix. Note that LC_ALL is set on the command line. */ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; # endif /* Check whether in the abbreviation of the second month, the second character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is two bytes long, with UTF-8 encoding. */ t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; if (strftime (buf, sizeof (buf), "%b", &t) < 4 || buf[1] != (char) 0xc3 || buf[2] != (char) 0xa9 || buf[3] != 'v') return 1; #endif #if !defined __BIONIC__ /* Bionic libc's 'struct lconv' is just a dummy. */ /* Check whether the decimal separator is a comma. On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point are nl_langinfo(RADIXCHAR) are both ".". */ if (localeconv () ->decimal_point[0] != ',') return 1; #endif return 0; } _ACEOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest$ac_exeext; then case "$host_os" in # Handle native Windows specially, because there setlocale() interprets # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", # "fr" or "fra" as "French" or "French_France.1252", # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", # "ja" as "Japanese" or "Japanese_Japan.932", # and similar. mingw*) # Test for the hypothetical native Windows locale name. if (LC_ALL=French_France.65001 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr_utf8=French_France.65001 else # None found. gt_cv_locale_fr_utf8=none fi ;; *) # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the # configure script would override the LC_ALL setting. Likewise for # LC_CTYPE, which is also set at the beginning of the configure script. # Test for the usual locale name. if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr_utf8=fr_FR else # Test for the locale name with explicit encoding suffix. if (LC_ALL=fr_FR.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr_utf8=fr_FR.UTF-8 else # Test for the Solaris 7 locale name. if (LC_ALL=fr.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr_utf8=fr.UTF-8 else # None found. gt_cv_locale_fr_utf8=none fi fi fi ;; esac fi rm -fr conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_fr_utf8" >&5 printf "%s\n" "$gt_cv_locale_fr_utf8" >&6; } LOCALE_FR_UTF8=$gt_cv_locale_fr_utf8 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a transitional chinese locale" >&5 printf %s "checking for a transitional chinese locale... " >&6; } if test ${gt_cv_locale_zh_CN+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> #include <stdlib.h> #include <time.h> #if HAVE_LANGINFO_CODESET # include <langinfo.h> #endif #include <stdlib.h> #include <string.h> struct tm t; char buf[16]; int main () { /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl imitates locale dependent behaviour by looking at the environment variables, and all locales use the UTF-8 encoding. */ #if defined __BEOS__ || defined __HAIKU__ return 1; #else /* Check whether the given locale name is recognized by the system. */ # if defined _WIN32 && !defined __CYGWIN__ /* On native Windows, setlocale(category, "") looks at the system settings, not at the environment variables. Also, when an encoding suffix such as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE category of the locale to "C". */ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) return 1; # else if (setlocale (LC_ALL, "") == NULL) return 1; # endif /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) is empty, and the behaviour of Tcl 8.4 in this locale is not useful. On OpenBSD 4.0, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "646". In this situation, some unit tests fail. On MirBSD 10, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "UTF-8". */ # if HAVE_LANGINFO_CODESET { const char *cs = nl_langinfo (CODESET); if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0 || strcmp (cs, "UTF-8") == 0) return 1; } # endif # ifdef __CYGWIN__ /* On Cygwin, avoid locale names without encoding suffix, because the locale_charset() function relies on the encoding suffix. Note that LC_ALL is set on the command line. */ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; # endif /* Check whether in a month name, no byte in the range 0x80..0x9F occurs. This excludes the UTF-8 encoding (except on MirBSD). */ { const char *p; t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1; for (p = buf; *p != '\0'; p++) if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0) return 1; } /* Check whether a typical GB18030 multibyte sequence is recognized as a single wide character. This excludes the GB2312 and GBK encodings. */ if (mblen ("\203\062\332\066", 5) != 4) return 1; return 0; #endif } _ACEOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest$ac_exeext; then case "$host_os" in # Handle native Windows specially, because there setlocale() interprets # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", # "fr" or "fra" as "French" or "French_France.1252", # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", # "ja" as "Japanese" or "Japanese_Japan.932", # and similar. mingw*) # Test for the hypothetical native Windows locale name. if (LC_ALL=Chinese_China.54936 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_zh_CN=Chinese_China.54936 else # None found. gt_cv_locale_zh_CN=none fi ;; solaris2.8) # On Solaris 8, the locales zh_CN.GB18030, zh_CN.GBK, zh.GBK are # broken. One witness is the test case in gl_MBRTOWC_SANITYCHECK. # Another witness is that "LC_ALL=zh_CN.GB18030 bash -c true" dumps core. gt_cv_locale_zh_CN=none ;; *) # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the # configure script would override the LC_ALL setting. Likewise for # LC_CTYPE, which is also set at the beginning of the configure script. # Test for the locale name without encoding suffix. if (LC_ALL=zh_CN LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_zh_CN=zh_CN else # Test for the locale name with explicit encoding suffix. if (LC_ALL=zh_CN.GB18030 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_zh_CN=zh_CN.GB18030 else # None found. gt_cv_locale_zh_CN=none fi fi ;; esac else # If there was a link error, due to mblen(), the system is so old that # it certainly doesn't have a chinese locale. gt_cv_locale_zh_CN=none fi rm -fr conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_zh_CN" >&5 printf "%s\n" "$gt_cv_locale_zh_CN" >&6; } LOCALE_ZH_CN=$gt_cv_locale_zh_CN if case "$host_os" in mingw*) true ;; *) test $ac_cv_func_mbsinit = yes ;; esac \ && test $ac_cv_func_mbrtowc = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc handles incomplete characters" >&5 printf %s "checking whether mbrtowc handles incomplete characters... " >&6; } if test ${gl_cv_func_mbrtowc_incomplete_state+y} then : printf %s "(cached) " >&6 else $as_nop case "$host_os" in # Guess no on AIX and OSF/1. aix* | osf*) gl_cv_func_mbrtowc_incomplete_state="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbrtowc_incomplete_state="guessing yes" ;; esac if test $LOCALE_JA != none; then if test "$cross_compiling" = yes then : : else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> #include <string.h> #include <wchar.h> int main () { if (setlocale (LC_ALL, "$LOCALE_JA") != NULL) { const char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) if (mbsinit (&state)) return 2; } return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_mbrtowc_incomplete_state=yes else $as_nop gl_cv_func_mbrtowc_incomplete_state=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi else if test $LOCALE_FR_UTF8 != none; then if test "$cross_compiling" = yes then : : else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> #include <string.h> #include <wchar.h> int main () { if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) { const char input[] = "B\303\274\303\237er"; /* "Büßer" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) if (mbsinit (&state)) return 2; } return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_mbrtowc_incomplete_state=yes else $as_nop gl_cv_func_mbrtowc_incomplete_state=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 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_incomplete_state" >&5 printf "%s\n" "$gl_cv_func_mbrtowc_incomplete_state" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc works as well as mbtowc" >&5 printf %s "checking whether mbrtowc works as well as mbtowc... " >&6; } if test ${gl_cv_func_mbrtowc_sanitycheck+y} then : printf %s "(cached) " >&6 else $as_nop case "$host_os" in # Guess no on Solaris 8. solaris2.8) gl_cv_func_mbrtowc_sanitycheck="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbrtowc_sanitycheck="guessing yes" ;; esac if test $LOCALE_ZH_CN != none; then if test "$cross_compiling" = yes then : : else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> #include <stdlib.h> #include <string.h> #include <wchar.h> int main () { /* This fails on Solaris 8: mbrtowc returns 2, and sets wc to 0x00F0. mbtowc returns 4 (correct) and sets wc to 0x5EDC. */ if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) { char input[] = "B\250\271\201\060\211\070er"; /* "Büßer" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 3, 6, &state) != 4 && mbtowc (&wc, input + 3, 6) == 4) return 2; } return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_mbrtowc_sanitycheck=yes else $as_nop gl_cv_func_mbrtowc_sanitycheck=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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_sanitycheck" >&5 printf "%s\n" "$gl_cv_func_mbrtowc_sanitycheck" >&6; } REPLACE_MBSTATE_T=0 case "$gl_cv_func_mbrtowc_incomplete_state" in *yes) ;; *) REPLACE_MBSTATE_T=1 ;; esac case "$gl_cv_func_mbrtowc_sanitycheck" in *yes) ;; *) REPLACE_MBSTATE_T=1 ;; esac else REPLACE_MBSTATE_T=1 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 printf %s "checking for inline... " >&6; } if test ${ac_cv_c_inline+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __cplusplus typedef int foo_t; static $ac_kw foo_t static_foo (void) {return 0; } $ac_kw foo_t foo (void) {return 0; } #endif _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_c_inline=$ac_kw fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext test "$ac_cv_c_inline" != no && break done fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 printf "%s\n" "$ac_cv_c_inline" >&6; } case $ac_cv_c_inline in inline | yes) ;; *) case $ac_cv_c_inline in no) ac_val=;; *) ac_val=$ac_cv_c_inline;; esac cat >>confdefs.h <<_ACEOF #ifndef __cplusplus #define inline $ac_val #endif _ACEOF ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether <limits.h> defines MIN and MAX" >&5 printf %s "checking whether <limits.h> defines MIN and MAX... " >&6; } if test ${gl_cv_minmax_in_limits_h+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <limits.h> int x = MIN (42, 17); int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_minmax_in_limits_h=yes else $as_nop gl_cv_minmax_in_limits_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_minmax_in_limits_h" >&5 printf "%s\n" "$gl_cv_minmax_in_limits_h" >&6; } if test $gl_cv_minmax_in_limits_h = yes; then printf "%s\n" "#define HAVE_MINMAX_IN_LIMITS_H 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether <sys/param.h> defines MIN and MAX" >&5 printf %s "checking whether <sys/param.h> defines MIN and MAX... " >&6; } if test ${gl_cv_minmax_in_sys_param_h+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/param.h> int x = MIN (42, 17); int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_minmax_in_sys_param_h=yes else $as_nop gl_cv_minmax_in_sys_param_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_minmax_in_sys_param_h" >&5 printf "%s\n" "$gl_cv_minmax_in_sys_param_h" >&6; } if test $gl_cv_minmax_in_sys_param_h = yes; then printf "%s\n" "#define HAVE_MINMAX_IN_SYS_PARAM_H 1" >>confdefs.h fi HAVE_DECL_LOCALTIME_R=1; HAVE_NANOSLEEP=1; HAVE_STRPTIME=1; HAVE_TIMEGM=1; HAVE_TIMESPEC_GET=1; HAVE_TIMESPEC_GETRES=1; HAVE_TIMEZONE_T=0; REPLACE_CTIME=GNULIB_PORTCHECK; REPLACE_LOCALTIME_R=GNULIB_PORTCHECK; REPLACE_MKTIME=GNULIB_PORTCHECK; REPLACE_NANOSLEEP=GNULIB_PORTCHECK; REPLACE_STRFTIME=GNULIB_PORTCHECK; REPLACE_TIME=0; REPLACE_TIMEGM=GNULIB_PORTCHECK; REPLACE_TIMESPEC_GET=GNULIB_PORTCHECK; REPLACE_TZSET=GNULIB_PORTCHECK; : ${GNULIB_GETTIMEOFDAY=0}; REPLACE_GMTIME=0; REPLACE_LOCALTIME=0; { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether time_t is signed" >&5 printf %s "checking whether time_t is signed... " >&6; } if test ${gl_cv_time_t_is_signed+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <time.h> char time_t_signed[(time_t) -1 < 0 ? 1 : -1]; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_time_t_is_signed=yes else $as_nop gl_cv_time_t_is_signed=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_time_t_is_signed" >&5 printf "%s\n" "$gl_cv_time_t_is_signed" >&6; } if test $gl_cv_time_t_is_signed = yes; then printf "%s\n" "#define TIME_T_IS_SIGNED 1" >>confdefs.h fi ac_fn_check_decl "$LINENO" "alarm" "ac_cv_have_decl_alarm" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_alarm" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_ALARM $ac_have_decl" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working mktime" >&5 printf %s "checking for working mktime... " >&6; } if test ${gl_cv_func_working_mktime+y} then : printf %s "(cached) " >&6 else $as_nop if test $APPLE_UNIVERSAL_BUILD = 1; then # A universal build on Apple Mac OS X platforms. # The test result would be 'yes' in 32-bit mode and 'no' in 64-bit mode. # But we need a configuration result that is valid in both modes. gl_cv_func_working_mktime="guessing no" else if test "$cross_compiling" = yes then : case "$host_os" in # Guess no on native Windows. mingw*) gl_cv_func_working_mktime="guessing no" ;; *) gl_cv_func_working_mktime="$gl_cross_guess_normal" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Test program from Paul Eggert and Tony Leneis. */ #include <limits.h> #include <stdlib.h> #include <time.h> #ifdef HAVE_UNISTD_H # include <unistd.h> #endif #if HAVE_DECL_ALARM # include <signal.h> #endif $gl_mda_defines #ifndef TIME_T_IS_SIGNED # define TIME_T_IS_SIGNED 0 #endif static time_t time_t_max; static time_t time_t_min; /* Values we'll use to set the TZ environment variable. */ static char *tz_strings[] = { (char *) 0, "TZ=GMT0", "TZ=JST-9", "TZ=EST+3EDT+2,M10.1.0/00:00:00,M2.3.0/00:00:00" }; #define N_STRINGS (sizeof (tz_strings) / sizeof (tz_strings[0])) /* Return 0 if mktime fails to convert a date in the spring-forward gap. Based on a problem report from Andreas Jaeger. */ static int spring_forward_gap () { /* glibc (up to about 1998-10-07) failed this test. */ struct tm tm; /* Use the portable POSIX.1 specification "TZ=PST8PDT,M4.1.0,M10.5.0" instead of "TZ=America/Vancouver" in order to detect the bug even on systems that don't support the Olson extension, or don't have the full zoneinfo tables installed. */ if (putenv ("TZ=PST8PDT,M4.1.0,M10.5.0") != 0) return -1; tm.tm_year = 98; tm.tm_mon = 3; tm.tm_mday = 5; tm.tm_hour = 2; tm.tm_min = 0; tm.tm_sec = 0; tm.tm_isdst = -1; return mktime (&tm) != (time_t) -1; } static int mktime_test1 (time_t now) { struct tm *lt; return ! (lt = localtime (&now)) || mktime (lt) == now; } static int mktime_test (time_t now) { return (mktime_test1 (now) && mktime_test1 ((time_t) (time_t_max - now)) && mktime_test1 ((time_t) (time_t_min + now))); } static int irix_6_4_bug () { /* Based on code from Ariel Faigon. */ struct tm tm; tm.tm_year = 96; tm.tm_mon = 3; tm.tm_mday = 0; tm.tm_hour = 0; tm.tm_min = 0; tm.tm_sec = 0; tm.tm_isdst = -1; mktime (&tm); return tm.tm_mon == 2 && tm.tm_mday == 31; } static int bigtime_test (int j) { struct tm tm; time_t now; tm.tm_year = tm.tm_mon = tm.tm_mday = tm.tm_hour = tm.tm_min = tm.tm_sec = j; now = mktime (&tm); if (now != (time_t) -1) { struct tm *lt = localtime (&now); if (! (lt && lt->tm_year == tm.tm_year && lt->tm_mon == tm.tm_mon && lt->tm_mday == tm.tm_mday && lt->tm_hour == tm.tm_hour && lt->tm_min == tm.tm_min && lt->tm_sec == tm.tm_sec && lt->tm_yday == tm.tm_yday && lt->tm_wday == tm.tm_wday && ((lt->tm_isdst < 0 ? -1 : 0 < lt->tm_isdst) == (tm.tm_isdst < 0 ? -1 : 0 < tm.tm_isdst)))) return 0; } return 1; } static int year_2050_test () { /* The correct answer for 2050-02-01 00:00:00 in Pacific time, ignoring leap seconds. */ unsigned long int answer = 2527315200UL; struct tm tm; time_t t; tm.tm_year = 2050 - 1900; tm.tm_mon = 2 - 1; tm.tm_mday = 1; tm.tm_hour = tm.tm_min = tm.tm_sec = 0; tm.tm_isdst = -1; /* Use the portable POSIX.1 specification "TZ=PST8PDT,M4.1.0,M10.5.0" instead of "TZ=America/Vancouver" in order to detect the bug even on systems that don't support the Olson extension, or don't have the full zoneinfo tables installed. */ if (putenv ("TZ=PST8PDT,M4.1.0,M10.5.0") != 0) return -1; t = mktime (&tm); /* Check that the result is either a failure, or close enough to the correct answer that we can assume the discrepancy is due to leap seconds. */ return (t == (time_t) -1 || (0 < t && answer - 120 <= t && t <= answer + 120)); } static int indiana_test () { if (putenv ("TZ=America/Indiana/Indianapolis") != 0) return -1; struct tm tm; tm.tm_year = 1986 - 1900; tm.tm_mon = 4 - 1; tm.tm_mday = 28; tm.tm_hour = 16; tm.tm_min = 24; tm.tm_sec = 50; tm.tm_isdst = 0; time_t std = mktime (&tm); if (! (std == 515107490 || std == 515107503)) return 1; /* This platform supports TZDB, either without or with leap seconds. Return true if GNU Bug#48085 is absent. */ tm.tm_isdst = 1; time_t dst = mktime (&tm); return std - dst == 60 * 60; } int main () { int result = 0; time_t t, delta; int i, j; int time_t_signed_magnitude = (time_t) ~ (time_t) 0 < (time_t) -1; #if HAVE_DECL_ALARM /* This test makes some buggy mktime implementations loop. Give up after 60 seconds; a mktime slower than that isn't worth using anyway. */ signal (SIGALRM, SIG_DFL); alarm (60); #endif time_t_max = (! TIME_T_IS_SIGNED ? (time_t) -1 : ((((time_t) 1 << (sizeof (time_t) * CHAR_BIT - 2)) - 1) * 2 + 1)); time_t_min = (! TIME_T_IS_SIGNED ? (time_t) 0 : time_t_signed_magnitude ? ~ (time_t) 0 : ~ time_t_max); delta = time_t_max / 997; /* a suitable prime number */ for (i = 0; i < N_STRINGS; i++) { if (tz_strings[i]) putenv (tz_strings[i]); for (t = 0; t <= time_t_max - delta && (result & 1) == 0; t += delta) if (! mktime_test (t)) result |= 1; if ((result & 2) == 0 && ! (mktime_test ((time_t) 1) && mktime_test ((time_t) (60 * 60)) && mktime_test ((time_t) (60 * 60 * 24)))) result |= 2; for (j = 1; (result & 4) == 0; j <<= 1) { if (! bigtime_test (j)) result |= 4; if (INT_MAX / 2 < j) break; } if ((result & 8) == 0 && ! bigtime_test (INT_MAX)) result |= 8; } if (! irix_6_4_bug ()) result |= 16; if (! spring_forward_gap ()) result |= 32; if (! year_2050_test () || ! indiana_test ()) result |= 64; return result; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_working_mktime=yes else $as_nop gl_cv_func_working_mktime=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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_working_mktime" >&5 printf "%s\n" "$gl_cv_func_working_mktime" >&6; } GL_GNULIB_CTIME=0 GL_GNULIB_MKTIME=0 GL_GNULIB_LOCALTIME=0 GL_GNULIB_NANOSLEEP=0 GL_GNULIB_STRFTIME=0 GL_GNULIB_STRPTIME=0 GL_GNULIB_TIME=0 GL_GNULIB_TIMEGM=0 GL_GNULIB_TIMESPEC_GET=0 GL_GNULIB_TIMESPEC_GETRES=0 GL_GNULIB_TIME_R=0 GL_GNULIB_TIME_RZ=0 GL_GNULIB_TZSET=0 GL_GNULIB_MDA_TZSET=1 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether struct tm is in sys/time.h or time.h" >&5 printf %s "checking whether struct tm is in sys/time.h or time.h... " >&6; } if test ${ac_cv_struct_tm+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> #include <time.h> int main (void) { struct tm tm; int *p = &tm.tm_sec; return !p; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_struct_tm=time.h else $as_nop ac_cv_struct_tm=sys/time.h fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_tm" >&5 printf "%s\n" "$ac_cv_struct_tm" >&6; } if test $ac_cv_struct_tm = sys/time.h; then printf "%s\n" "#define TM_IN_SYS_TIME 1" >>confdefs.h fi ac_fn_c_check_member "$LINENO" "struct tm" "tm_zone" "ac_cv_member_struct_tm_tm_zone" "#include <sys/types.h> #include <$ac_cv_struct_tm> " if test "x$ac_cv_member_struct_tm_tm_zone" = xyes then : printf "%s\n" "#define HAVE_STRUCT_TM_TM_ZONE 1" >>confdefs.h fi if test "$ac_cv_member_struct_tm_tm_zone" = yes; then printf "%s\n" "#define HAVE_TM_ZONE 1" >>confdefs.h else ac_fn_check_decl "$LINENO" "tzname" "ac_cv_have_decl_tzname" "#include <time.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_tzname" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_TZNAME $ac_have_decl" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tzname" >&5 printf %s "checking for tzname... " >&6; } if test ${ac_cv_var_tzname+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <time.h> #if !HAVE_DECL_TZNAME extern char *tzname[]; #endif int main (void) { return tzname[0][0]; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_var_tzname=yes else $as_nop ac_cv_var_tzname=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_var_tzname" >&5 printf "%s\n" "$ac_cv_var_tzname" >&6; } if test $ac_cv_var_tzname = yes; then printf "%s\n" "#define HAVE_TZNAME 1" >>confdefs.h fi fi ac_fn_c_check_member "$LINENO" "struct tm" "tm_gmtoff" "ac_cv_member_struct_tm_tm_gmtoff" "#include <time.h> " if test "x$ac_cv_member_struct_tm_tm_gmtoff" = xyes then : printf "%s\n" "#define HAVE_TM_GMTOFF 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for O_CLOEXEC" >&5 printf %s "checking for O_CLOEXEC... " >&6; } if test ${gl_cv_macro_O_CLOEXEC+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <fcntl.h> #ifndef O_CLOEXEC choke me; #endif int main (void) { return O_CLOEXEC; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_macro_O_CLOEXEC=yes else $as_nop gl_cv_macro_O_CLOEXEC=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_macro_O_CLOEXEC" >&5 printf "%s\n" "$gl_cv_macro_O_CLOEXEC" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for promoted mode_t type" >&5 printf %s "checking for promoted mode_t type... " >&6; } if test ${gl_cv_promoted_mode_t+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> int main (void) { typedef int array[2 * (sizeof (mode_t) < sizeof (int)) - 1]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_promoted_mode_t='int' else $as_nop gl_cv_promoted_mode_t='mode_t' fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_promoted_mode_t" >&5 printf "%s\n" "$gl_cv_promoted_mode_t" >&6; } printf "%s\n" "#define PROMOTED_MODE_T $gl_cv_promoted_mode_t" >>confdefs.h if test $REPLACE_MALLOC_FOR_MALLOC_POSIX = 1; then REPLACE_REALLOC_FOR_REALLOC_POSIX=1 fi ac_fn_check_decl "$LINENO" "setenv" "ac_cv_have_decl_setenv" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_setenv" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_SETENV $ac_have_decl" >>confdefs.h if test $ac_cv_have_decl_setenv = no; then HAVE_DECL_SETENV=0 fi ac_fn_c_check_header_compile "$LINENO" "search.h" "ac_cv_header_search_h" "$ac_includes_default" if test "x$ac_cv_header_search_h" = xyes then : printf "%s\n" "#define HAVE_SEARCH_H 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tsearch" >&5 printf %s "checking for tsearch... " >&6; } if test ${gl_cv_onwards_func_tsearch+y} then : printf %s "(cached) " >&6 else $as_nop exec 9>&6 6>/dev/null case "$host_os" in linux*-android*) ac_fn_check_decl "$LINENO" "tsearch" "ac_cv_have_decl_tsearch" "#include <search.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_tsearch" = xyes then : fi if test $ac_cv_have_decl_tsearch = yes; then ac_fn_c_check_func "$LINENO" "tsearch" "ac_cv_func_tsearch" if test "x$ac_cv_func_tsearch" = xyes then : fi if test $ac_cv_func_tsearch = yes; then gl_cv_onwards_func_tsearch=yes else gl_cv_onwards_func_tsearch='future OS version' fi else gl_cv_onwards_func_tsearch='future OS version' fi ;; *) ac_fn_c_check_func "$LINENO" "tsearch" "ac_cv_func_tsearch" if test "x$ac_cv_func_tsearch" = xyes then : fi gl_cv_onwards_func_tsearch=$ac_cv_func_tsearch ;; esac exec 6>&9 9>&- fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_onwards_func_tsearch" >&5 printf "%s\n" "$gl_cv_onwards_func_tsearch" >&6; } case "$gl_cv_onwards_func_tsearch" in future*) ac_cv_func_tsearch=no ;; *) ac_cv_func_tsearch=$gl_cv_onwards_func_tsearch ;; esac if test $ac_cv_func_tsearch = yes; then printf "%s\n" "#define HAVE_TSEARCH 1" >>confdefs.h fi case "$host_os" in *-musl* | midipix*) printf "%s\n" "#define MUSL_LIBC 1" >>confdefs.h ;; esac ac_fn_check_decl "$LINENO" "fcloseall" "ac_cv_have_decl_fcloseall" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_fcloseall" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_FCLOSEALL $ac_have_decl" >>confdefs.h ac_fn_check_decl "$LINENO" "getw" "ac_cv_have_decl_getw" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_getw" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_GETW $ac_have_decl" >>confdefs.h ac_fn_check_decl "$LINENO" "putw" "ac_cv_have_decl_putw" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_putw" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_PUTW $ac_have_decl" >>confdefs.h if test $gl_cv_have_include_next = yes; then gl_cv_next_stdio_h='<'stdio.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <stdio.h>" >&5 printf %s "checking absolute name of <stdio.h>... " >&6; } if test ${gl_cv_next_stdio_h+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdio.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'stdio.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_stdio_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_stdio_h gl_cv_next_stdio_h='"'$gl_header'"' fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stdio_h" >&5 printf "%s\n" "$gl_cv_next_stdio_h" >&6; } fi NEXT_STDIO_H=$gl_cv_next_stdio_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'stdio.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_stdio_h fi NEXT_AS_FIRST_DIRECTIVE_STDIO_H=$gl_next_as_first_directive { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking which flavor of printf attribute matches inttypes macros" >&5 printf %s "checking which flavor of printf attribute matches inttypes macros... " >&6; } if test ${gl_cv_func_printf_attribute_flavor+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define __STDC_FORMAT_MACROS 1 #include <stdio.h> #include <inttypes.h> /* For non-mingw systems, compilation will trivially succeed. For mingw, compilation will succeed for older mingw (system printf, "I64d") and fail for newer mingw (gnu printf, "lld"). */ #if (defined _WIN32 && ! defined __CYGWIN__) && \ (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) extern char PRIdMAX_probe[sizeof PRIdMAX == sizeof "I64d" ? 1 : -1]; #endif int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_func_printf_attribute_flavor=system else $as_nop gl_cv_func_printf_attribute_flavor=gnu fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_printf_attribute_flavor" >&5 printf "%s\n" "$gl_cv_func_printf_attribute_flavor" >&6; } if test "$gl_cv_func_printf_attribute_flavor" = gnu; then printf "%s\n" "#define GNULIB_PRINTF_ATTRIBUTE_FLAVOR_GNU 1" >>confdefs.h fi if test $ac_cv_have_decl_fcloseall = no; then HAVE_DECL_FCLOSEALL=0 fi if test $ac_cv_have_decl_getw = no; then HAVE_DECL_GETW=0 fi if test $ac_cv_have_decl_putw = no; then HAVE_DECL_PUTW=0 fi ac_fn_check_decl "$LINENO" "ecvt" "ac_cv_have_decl_ecvt" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_ecvt" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_ECVT $ac_have_decl" >>confdefs.h ac_fn_check_decl "$LINENO" "fcvt" "ac_cv_have_decl_fcvt" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_fcvt" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_FCVT $ac_have_decl" >>confdefs.h ac_fn_check_decl "$LINENO" "gcvt" "ac_cv_have_decl_gcvt" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_gcvt" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_GCVT $ac_have_decl" >>confdefs.h if test $gl_cv_have_include_next = yes; then gl_cv_next_stdlib_h='<'stdlib.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <stdlib.h>" >&5 printf %s "checking absolute name of <stdlib.h>... " >&6; } if test ${gl_cv_next_stdlib_h+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdlib.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'stdlib.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_stdlib_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_stdlib_h gl_cv_next_stdlib_h='"'$gl_header'"' fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stdlib_h" >&5 printf "%s\n" "$gl_cv_next_stdlib_h" >&6; } fi NEXT_STDLIB_H=$gl_cv_next_stdlib_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'stdlib.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_stdlib_h fi NEXT_AS_FIRST_DIRECTIVE_STDLIB_H=$gl_next_as_first_directive { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether MB_CUR_MAX is correct" >&5 printf %s "checking whether MB_CUR_MAX is correct... " >&6; } if test ${gl_cv_macro_MB_CUR_MAX_good+y} then : printf %s "(cached) " >&6 else $as_nop case "$host_os" in # Guess no on Solaris. solaris*) gl_cv_macro_MB_CUR_MAX_good="guessing no" ;; # Guess yes otherwise. *) gl_cv_macro_MB_CUR_MAX_good="guessing yes" ;; esac if test $LOCALE_FR_UTF8 != none; then if test "$cross_compiling" = yes then : : else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> #include <stdlib.h> int main () { int result = 0; if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) { if (MB_CUR_MAX < 4) result |= 1; } return result; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_macro_MB_CUR_MAX_good=yes else $as_nop gl_cv_macro_MB_CUR_MAX_good=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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_macro_MB_CUR_MAX_good" >&5 printf "%s\n" "$gl_cv_macro_MB_CUR_MAX_good" >&6; } case "$gl_cv_macro_MB_CUR_MAX_good" in *yes) ;; *) REPLACE_MB_CUR_MAX=1 ;; esac if test $ac_cv_have_decl_ecvt = no; then HAVE_DECL_ECVT=0 fi if test $ac_cv_have_decl_fcvt = no; then HAVE_DECL_FCVT=0 fi if test $ac_cv_have_decl_gcvt = no; then HAVE_DECL_GCVT=0 fi HAVE_MBSLEN=0; HAVE_EXPLICIT_BZERO=1; HAVE_FFSL=1; HAVE_FFSLL=1; HAVE_DECL_MEMMEM=1; HAVE_MEMPCPY=1; HAVE_MEMSET_EXPLICIT=1; HAVE_DECL_MEMRCHR=1; HAVE_RAWMEMCHR=1; HAVE_STPCPY=1; HAVE_STPNCPY=1; HAVE_STRCHRNUL=1; HAVE_DECL_STRDUP=1; HAVE_DECL_STRNDUP=1; HAVE_DECL_STRNLEN=1; HAVE_STRPBRK=1; HAVE_STRSEP=1; HAVE_STRCASESTR=1; HAVE_DECL_STRTOK_R=1; HAVE_DECL_STRERROR_R=1; HAVE_STRERRORNAME_NP=1; HAVE_SIGABBREV_NP=1; HAVE_SIGDESCR_NP=1; HAVE_DECL_STRSIGNAL=1; HAVE_STRVERSCMP=1; REPLACE_FFSLL=0; REPLACE_MEMCHR=0; REPLACE_MEMMEM=0; REPLACE_MEMPCPY=0; REPLACE_STPCPY=0; REPLACE_STPNCPY=0; REPLACE_STRCHRNUL=0; REPLACE_STRDUP=0; REPLACE_STRNCAT=0; REPLACE_STRNDUP=0; REPLACE_STRNLEN=0; REPLACE_STRSTR=0; REPLACE_STRCASESTR=0; REPLACE_STRTOK_R=0; REPLACE_STRERROR=0; REPLACE_STRERROR_R=0; REPLACE_STRERRORNAME_NP=0; REPLACE_STRSIGNAL=0; UNDEFINE_STRTOK_R=0; REPLACE_STRERROR_0=0 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether strerror(0) succeeds" >&5 printf %s "checking whether strerror(0) succeeds... " >&6; } if test ${gl_cv_func_strerror_0_works+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_strerror_0_works="guessing yes" ;; # Guess yes on musl systems. *-musl* | midipix*) gl_cv_func_strerror_0_works="guessing yes" ;; # Guess yes on native Windows. mingw*) gl_cv_func_strerror_0_works="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_strerror_0_works="$gl_cross_guess_normal" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <string.h> #include <errno.h> int main (void) { int result = 0; char *str; errno = 0; str = strerror (0); if (!*str) result |= 1; if (errno) result |= 2; if (strstr (str, "nknown") || strstr (str, "ndefined")) result |= 4; return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_strerror_0_works=yes else $as_nop gl_cv_func_strerror_0_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 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_strerror_0_works" >&5 printf "%s\n" "$gl_cv_func_strerror_0_works" >&6; } case "$gl_cv_func_strerror_0_works" in *yes) ;; *) REPLACE_STRERROR_0=1 printf "%s\n" "#define REPLACE_STRERROR_0 1" >>confdefs.h ;; esac GL_GNULIB_EXPLICIT_BZERO=0 GL_GNULIB_FFSL=0 GL_GNULIB_FFSLL=0 GL_GNULIB_MEMCHR=0 GL_GNULIB_MEMMEM=0 GL_GNULIB_MEMPCPY=0 GL_GNULIB_MEMRCHR=0 GL_GNULIB_MEMSET_EXPLICIT=0 GL_GNULIB_RAWMEMCHR=0 GL_GNULIB_STPCPY=0 GL_GNULIB_STPNCPY=0 GL_GNULIB_STRCHRNUL=0 GL_GNULIB_STRDUP=0 GL_GNULIB_STRNCAT=0 GL_GNULIB_STRNDUP=0 GL_GNULIB_STRNLEN=0 GL_GNULIB_STRPBRK=0 GL_GNULIB_STRSEP=0 GL_GNULIB_STRSTR=0 GL_GNULIB_STRCASESTR=0 GL_GNULIB_STRTOK_R=0 GL_GNULIB_MBSLEN=0 GL_GNULIB_MBSNLEN=0 GL_GNULIB_MBSCHR=0 GL_GNULIB_MBSRCHR=0 GL_GNULIB_MBSSTR=0 GL_GNULIB_MBSCASECMP=0 GL_GNULIB_MBSNCASECMP=0 GL_GNULIB_MBSPCASECMP=0 GL_GNULIB_MBSCASESTR=0 GL_GNULIB_MBSCSPN=0 GL_GNULIB_MBSPBRK=0 GL_GNULIB_MBSSPN=0 GL_GNULIB_MBSSEP=0 GL_GNULIB_MBSTOK_R=0 GL_GNULIB_STRERROR=0 GL_GNULIB_STRERROR_R=0 GL_GNULIB_STRERRORNAME_NP=0 GL_GNULIB_SIGABBREV_NP=0 GL_GNULIB_SIGDESCR_NP=0 GL_GNULIB_STRSIGNAL=0 GL_GNULIB_STRVERSCMP=0 GL_GNULIB_MDA_MEMCCPY=1 GL_GNULIB_MDA_STRDUP=1 if test $gl_cv_have_include_next = yes; then gl_cv_next_string_h='<'string.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <string.h>" >&5 printf %s "checking absolute name of <string.h>... " >&6; } if test ${gl_cv_next_string_h+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <string.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'string.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_string_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_string_h gl_cv_next_string_h='"'$gl_header'"' fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_string_h" >&5 printf "%s\n" "$gl_cv_next_string_h" >&6; } fi NEXT_STRING_H=$gl_cv_next_string_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'string.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_string_h fi NEXT_AS_FIRST_DIRECTIVE_STRING_H=$gl_next_as_first_directive printf "%s\n" "#define _USE_STD_STAT 1" >>confdefs.h if test $gl_cv_have_include_next = yes; then gl_cv_next_sys_types_h='<'sys/types.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <sys/types.h>" >&5 printf %s "checking absolute name of <sys/types.h>... " >&6; } if test ${gl_cv_next_sys_types_h+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'sys/types.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_sys_types_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_sys_types_h gl_cv_next_sys_types_h='"'$gl_header'"' fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sys_types_h" >&5 printf "%s\n" "$gl_cv_next_sys_types_h" >&6; } fi NEXT_SYS_TYPES_H=$gl_cv_next_sys_types_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'sys/types.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_sys_types_h fi NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H=$gl_next_as_first_directive WINDOWS_STAT_INODES=0 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for struct timespec in <time.h>" >&5 printf %s "checking for struct timespec in <time.h>... " >&6; } if test ${gl_cv_sys_struct_timespec_in_time_h+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <time.h> int main (void) { static struct timespec x; x.tv_sec = x.tv_nsec; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_sys_struct_timespec_in_time_h=yes else $as_nop gl_cv_sys_struct_timespec_in_time_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_sys_struct_timespec_in_time_h" >&5 printf "%s\n" "$gl_cv_sys_struct_timespec_in_time_h" >&6; } TIME_H_DEFINES_STRUCT_TIMESPEC=0 SYS_TIME_H_DEFINES_STRUCT_TIMESPEC=0 PTHREAD_H_DEFINES_STRUCT_TIMESPEC=0 UNISTD_H_DEFINES_STRUCT_TIMESPEC=0 if test $gl_cv_sys_struct_timespec_in_time_h = yes; then TIME_H_DEFINES_STRUCT_TIMESPEC=1 else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for struct timespec in <sys/time.h>" >&5 printf %s "checking for struct timespec in <sys/time.h>... " >&6; } if test ${gl_cv_sys_struct_timespec_in_sys_time_h+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/time.h> int main (void) { static struct timespec x; x.tv_sec = x.tv_nsec; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_sys_struct_timespec_in_sys_time_h=yes else $as_nop gl_cv_sys_struct_timespec_in_sys_time_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_sys_struct_timespec_in_sys_time_h" >&5 printf "%s\n" "$gl_cv_sys_struct_timespec_in_sys_time_h" >&6; } if test $gl_cv_sys_struct_timespec_in_sys_time_h = yes; then SYS_TIME_H_DEFINES_STRUCT_TIMESPEC=1 else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for struct timespec in <pthread.h>" >&5 printf %s "checking for struct timespec in <pthread.h>... " >&6; } if test ${gl_cv_sys_struct_timespec_in_pthread_h+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <pthread.h> int main (void) { static struct timespec x; x.tv_sec = x.tv_nsec; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_sys_struct_timespec_in_pthread_h=yes else $as_nop gl_cv_sys_struct_timespec_in_pthread_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_sys_struct_timespec_in_pthread_h" >&5 printf "%s\n" "$gl_cv_sys_struct_timespec_in_pthread_h" >&6; } if test $gl_cv_sys_struct_timespec_in_pthread_h = yes; then PTHREAD_H_DEFINES_STRUCT_TIMESPEC=1 else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for struct timespec in <unistd.h>" >&5 printf %s "checking for struct timespec in <unistd.h>... " >&6; } if test ${gl_cv_sys_struct_timespec_in_unistd_h+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <unistd.h> int main (void) { static struct timespec x; x.tv_sec = x.tv_nsec; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_sys_struct_timespec_in_unistd_h=yes else $as_nop gl_cv_sys_struct_timespec_in_unistd_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_sys_struct_timespec_in_unistd_h" >&5 printf "%s\n" "$gl_cv_sys_struct_timespec_in_unistd_h" >&6; } if test $gl_cv_sys_struct_timespec_in_unistd_h = yes; then UNISTD_H_DEFINES_STRUCT_TIMESPEC=1 fi fi fi fi if test $gl_cv_have_include_next = yes; then gl_cv_next_time_h='<'time.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <time.h>" >&5 printf %s "checking absolute name of <time.h>... " >&6; } if test ${gl_cv_next_time_h+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <time.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'time.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_time_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_time_h gl_cv_next_time_h='"'$gl_header'"' fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_time_h" >&5 printf "%s\n" "$gl_cv_next_time_h" >&6; } fi NEXT_TIME_H=$gl_cv_next_time_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'time.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_time_h fi NEXT_AS_FIRST_DIRECTIVE_TIME_H=$gl_next_as_first_directive { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for TIME_UTC in <time.h>" >&5 printf %s "checking for TIME_UTC in <time.h>... " >&6; } if test ${gl_cv_time_h_has_TIME_UTC+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <time.h> int main (void) { static int x = TIME_UTC; x++; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_time_h_has_TIME_UTC=yes else $as_nop gl_cv_time_h_has_TIME_UTC=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_time_h_has_TIME_UTC" >&5 printf "%s\n" "$gl_cv_time_h_has_TIME_UTC" >&6; } if test $gl_cv_time_h_has_TIME_UTC = yes; then TIME_H_DEFINES_TIME_UTC=1 else TIME_H_DEFINES_TIME_UTC=0 fi ac_fn_check_decl "$LINENO" "execvpe" "ac_cv_have_decl_execvpe" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_execvpe" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_EXECVPE $ac_have_decl" >>confdefs.h if test $gl_cv_have_include_next = yes; then gl_cv_next_unistd_h='<'unistd.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <unistd.h>" >&5 printf %s "checking absolute name of <unistd.h>... " >&6; } if test ${gl_cv_next_unistd_h+y} then : printf %s "(cached) " >&6 else $as_nop if test $ac_cv_header_unistd_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <unistd.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'unistd.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_unistd_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_unistd_h gl_cv_next_unistd_h='"'$gl_header'"' else gl_cv_next_unistd_h='<'unistd.h'>' fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_unistd_h" >&5 printf "%s\n" "$gl_cv_next_unistd_h" >&6; } fi NEXT_UNISTD_H=$gl_cv_next_unistd_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'unistd.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_unistd_h fi NEXT_AS_FIRST_DIRECTIVE_UNISTD_H=$gl_next_as_first_directive if test $ac_cv_header_unistd_h = yes; then HAVE_UNISTD_H=1 else HAVE_UNISTD_H=0 fi if test $ac_cv_have_decl_execvpe = no; then HAVE_DECL_EXECVPE=0 fi ac_fn_check_decl "$LINENO" "unsetenv" "ac_cv_have_decl_unsetenv" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_unsetenv" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_UNSETENV $ac_have_decl" >>confdefs.h if test $ac_cv_header_features_h = yes; then HAVE_FEATURES_H=1 else HAVE_FEATURES_H=0 fi if test $ac_cv_header_crtdefs_h = yes; then HAVE_CRTDEFS_H=1 else HAVE_CRTDEFS_H=0 fi if test $gl_cv_have_include_next = yes; then gl_cv_next_wchar_h='<'wchar.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <wchar.h>" >&5 printf %s "checking absolute name of <wchar.h>... " >&6; } if test ${gl_cv_next_wchar_h+y} then : printf %s "(cached) " >&6 else $as_nop if test $ac_cv_header_wchar_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <wchar.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'wchar.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_wchar_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_wchar_h gl_cv_next_wchar_h='"'$gl_header'"' else gl_cv_next_wchar_h='<'wchar.h'>' fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_wchar_h" >&5 printf "%s\n" "$gl_cv_next_wchar_h" >&6; } fi NEXT_WCHAR_H=$gl_cv_next_wchar_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'wchar.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_wchar_h fi NEXT_AS_FIRST_DIRECTIVE_WCHAR_H=$gl_next_as_first_directive if test $ac_cv_header_wchar_h = yes; then HAVE_WCHAR_H=1 else HAVE_WCHAR_H=0 fi if test $gt_cv_c_wint_t = yes; then HAVE_WINT_T=1 else HAVE_WINT_T=0 fi ac_fn_check_decl "$LINENO" "wcsdup" "ac_cv_have_decl_wcsdup" " #include <wchar.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_wcsdup" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_WCSDUP $ac_have_decl" >>confdefs.h if test $ac_cv_have_decl_wcsdup = no; then HAVE_DECL_WCSDUP=0 fi HAVE_ISWBLANK=1; HAVE_WCTYPE_T=1; HAVE_WCTRANS_T=1; REPLACE_ISWBLANK=0; REPLACE_ISWDIGIT=0; REPLACE_ISWXDIGIT=0; if test $ac_cv_func_iswcntrl = yes; then HAVE_ISWCNTRL=1 else HAVE_ISWCNTRL=0 fi if test $gt_cv_c_wint_t = yes; then HAVE_WINT_T=1 else HAVE_WINT_T=0 fi if test $gl_cv_have_include_next = yes; then gl_cv_next_wctype_h='<'wctype.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <wctype.h>" >&5 printf %s "checking absolute name of <wctype.h>... " >&6; } if test ${gl_cv_next_wctype_h+y} then : printf %s "(cached) " >&6 else $as_nop if test $ac_cv_header_wctype_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <wctype.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'wctype.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_wctype_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_wctype_h gl_cv_next_wctype_h='"'$gl_header'"' else gl_cv_next_wctype_h='<'wctype.h'>' fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_wctype_h" >&5 printf "%s\n" "$gl_cv_next_wctype_h" >&6; } fi NEXT_WCTYPE_H=$gl_cv_next_wctype_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'wctype.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_wctype_h fi NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H=$gl_next_as_first_directive if test $ac_cv_header_wctype_h = yes; then if test $ac_cv_func_iswcntrl = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether iswcntrl works" >&5 printf %s "checking whether iswcntrl works... " >&6; } if test ${gl_cv_func_iswcntrl_works+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdlib.h> #if __GNU_LIBRARY__ == 1 Linux libc5 i18n is broken. #endif int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_func_iswcntrl_works="guessing yes" else $as_nop gl_cv_func_iswcntrl_works="guessing no" fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <wchar.h> #include <wctype.h> int main () { return iswprint ('x') == 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_iswcntrl_works=yes else $as_nop gl_cv_func_iswcntrl_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 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_iswcntrl_works" >&5 printf "%s\n" "$gl_cv_func_iswcntrl_works" >&6; } fi HAVE_WCTYPE_H=1 else HAVE_WCTYPE_H=0 fi if test $GNULIBHEADERS_OVERRIDE_WINT_T = 1; then REPLACE_ISWCNTRL=1 else case "$gl_cv_func_iswcntrl_works" in *yes) REPLACE_ISWCNTRL=0 ;; *) REPLACE_ISWCNTRL=1 ;; esac fi if test $HAVE_ISWCNTRL = 0 || test $REPLACE_ISWCNTRL = 1; then : fi if test $REPLACE_ISWCNTRL = 1; then REPLACE_TOWLOWER=1 else ac_fn_c_check_func "$LINENO" "towlower" "ac_cv_func_towlower" if test "x$ac_cv_func_towlower" = xyes then : printf "%s\n" "#define HAVE_TOWLOWER 1" >>confdefs.h fi if test $ac_cv_func_towlower = yes; then REPLACE_TOWLOWER=0 else ac_fn_check_decl "$LINENO" "towlower" "ac_cv_have_decl_towlower" "#include <wchar.h> #if HAVE_WCTYPE_H # include <wctype.h> #endif " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_towlower" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_TOWLOWER $ac_have_decl" >>confdefs.h if test $ac_cv_have_decl_towlower = yes; then REPLACE_TOWLOWER=1 else REPLACE_TOWLOWER=0 fi fi fi if test $HAVE_ISWCNTRL = 0 || test $REPLACE_TOWLOWER = 1; then : fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for wctype_t" >&5 printf %s "checking for wctype_t... " >&6; } if test ${gl_cv_type_wctype_t+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <wchar.h> #if HAVE_WCTYPE_H # include <wctype.h> #endif wctype_t a; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_type_wctype_t=yes else $as_nop gl_cv_type_wctype_t=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_type_wctype_t" >&5 printf "%s\n" "$gl_cv_type_wctype_t" >&6; } if test $gl_cv_type_wctype_t = no; then HAVE_WCTYPE_T=0 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for wctrans_t" >&5 printf %s "checking for wctrans_t... " >&6; } if test ${gl_cv_type_wctrans_t+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <wchar.h> #include <wctype.h> wctrans_t a; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_type_wctrans_t=yes else $as_nop gl_cv_type_wctrans_t=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_type_wctrans_t" >&5 printf "%s\n" "$gl_cv_type_wctrans_t" >&6; } if test $gl_cv_type_wctrans_t = no; then HAVE_WCTRANS_T=0 fi GL_GNULIB_ISWBLANK=0 GL_GNULIB_ISWDIGIT=0 GL_GNULIB_ISWXDIGIT=0 GL_GNULIB_WCTYPE=0 GL_GNULIB_ISWCTYPE=0 GL_GNULIB_WCTRANS=0 GL_GNULIB_TOWCTRANS=0 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler option to allow warnings" >&5 printf %s "checking for C compiler option to allow warnings... " >&6; } if test ${gl_cv_cc_wallow+y} then : printf %s "(cached) " >&6 else $as_nop rm -f conftest* echo 'int dummy;' > conftest.c { ac_try='${CC-cc} $CFLAGS $CPPFLAGS -c conftest.c 2>conftest1.err' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 (eval $ac_try) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; } >/dev/null { ac_try='${CC-cc} $CFLAGS $CPPFLAGS -Wno-error -c conftest.c 2>conftest2.err' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 (eval $ac_try) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; } >/dev/null if test $? = 0 && test `wc -l < conftest1.err` = `wc -l < conftest2.err`; then gl_cv_cc_wallow='-Wno-error' else gl_cv_cc_wallow=none fi rm -f conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_wallow" >&5 printf "%s\n" "$gl_cv_cc_wallow" >&6; } case "$gl_cv_cc_wallow" in none) GL_CFLAG_ALLOW_WARNINGS='' ;; *) GL_CFLAG_ALLOW_WARNINGS="$gl_cv_cc_wallow" ;; esac GL_CFLAG_GNULIB_WARNINGS='' if test -n "$GL_CFLAG_ALLOW_WARNINGS"; then cat > conftest.c <<\EOF #if __GNUC__ >= 3 || (__clang_major__ + (__clang_minor__ >= 9) > 3) -Wno-cast-qual -Wno-conversion -Wno-float-equal -Wno-sign-compare -Wno-undef -Wno-unused-function -Wno-unused-parameter #endif #if __GNUC__ + (__GNUC_MINOR__ >= 9) > 4 || (__clang_major__ + (__clang_minor__ >= 9) > 3) -Wno-float-conversion #endif #if __GNUC__ >= 7 || (__clang_major__ + (__clang_minor__ >= 9) > 3) -Wimplicit-fallthrough #endif #if __GNUC__ + (__GNUC_MINOR__ >= 8) > 4 || (__clang_major__ + (__clang_minor__ >= 9) > 3) -Wno-pedantic #endif #if __GNUC__ + (__GNUC_MINOR__ >= 3) > 4 || (__clang_major__ + (__clang_minor__ >= 9) > 3) -Wno-sign-conversion -Wno-type-limits #endif #if __GNUC__ + (__GNUC_MINOR__ >= 5) > 4 -Wno-unsuffixed-float-constants #endif EOF gl_command="$CC $CFLAGS $CPPFLAGS -E conftest.c > conftest.out" if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gl_command\""; } >&5 (eval $gl_command) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then gl_options=`grep -v '#' conftest.out` for word in $gl_options; do GL_CFLAG_GNULIB_WARNINGS="$GL_CFLAG_GNULIB_WARNINGS $word" done fi rm -f conftest.c conftest.out fi if false; then GL_COND_LIBTOOL_TRUE= GL_COND_LIBTOOL_FALSE='#' else GL_COND_LIBTOOL_TRUE='#' GL_COND_LIBTOOL_FALSE= fi gl_cond_libtool=false gl_libdeps= gl_ltlibdeps= gl_m4_base='m4' gl_source_base='gnu' gl_source_base_prefix= if test $ac_cv_func_alloca_works = no; then : fi # Define an additional variable used in the Makefile substitution. if test $ac_cv_working_alloca_h = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for alloca as a compiler built-in" >&5 printf %s "checking for alloca as a compiler built-in... " >&6; } if test ${gl_cv_rpl_alloca+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined __GNUC__ || defined _AIX || defined _MSC_VER Need own alloca #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Need own alloca" >/dev/null 2>&1 then : gl_cv_rpl_alloca=yes else $as_nop gl_cv_rpl_alloca=no fi rm -rf conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_rpl_alloca" >&5 printf "%s\n" "$gl_cv_rpl_alloca" >&6; } if test $gl_cv_rpl_alloca = yes; then printf "%s\n" "#define HAVE_ALLOCA 1" >>confdefs.h GL_GENERATE_ALLOCA_H=true else GL_GENERATE_ALLOCA_H=false fi else GL_GENERATE_ALLOCA_H=true fi if test $ac_cv_working_alloca_h = yes; then HAVE_ALLOCA_H=1 else HAVE_ALLOCA_H=0 fi case "$GL_GENERATE_ALLOCA_H" in false) ALLOCA_H='' ;; true) if test -z "$ALLOCA_H"; then ALLOCA_H="${gl_source_base_prefix}alloca.h" fi ;; *) echo "*** GL_GENERATE_ALLOCA_H is not set correctly" 1>&2; exit 1 ;; esac if $GL_GENERATE_ALLOCA_H; then GL_GENERATE_ALLOCA_H_TRUE= GL_GENERATE_ALLOCA_H_FALSE='#' else GL_GENERATE_ALLOCA_H_TRUE='#' GL_GENERATE_ALLOCA_H_FALSE= fi : if test -z "${GL_GENERATE_ALLOCA_H_TRUE}" && test -z "${GL_GENERATE_ALLOCA_H_FALSE}"; then GL_GENERATE_ALLOCA_H_TRUE='#' GL_GENERATE_ALLOCA_H_FALSE='#' fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for static_assert" >&5 printf %s "checking for static_assert... " >&6; } if test ${gl_cv_static_assert+y} then : printf %s "(cached) " >&6 else $as_nop gl_save_CFLAGS=$CFLAGS for gl_working in "yes, a keyword" "yes, an <assert.h> macro"; do case $gl_working in #( *assert.h*) : CFLAGS="$gl_save_CFLAGS -DINCLUDE_ASSERT_H" ;; #( *) : ;; esac cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined __clang__ && __STDC_VERSION__ < 202311 #pragma clang diagnostic error "-Wc2x-extensions" #pragma clang diagnostic error "-Wc++1z-extensions" #endif #ifdef INCLUDE_ASSERT_H #include <assert.h> #endif static_assert (2 + 2 == 4, "arithmetic does not work"); static_assert (2 + 2 == 4); int main (void) { static_assert (sizeof (char) == 1, "sizeof does not work"); static_assert (sizeof (char) == 1); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_static_assert=$gl_working else $as_nop gl_cv_static_assert=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS=$gl_save_CFLAGS test "$gl_cv_static_assert" != no && break done fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_static_assert" >&5 printf "%s\n" "$gl_cv_static_assert" >&6; } GL_GENERATE_ASSERT_H=false case $gl_cv_static_assert in #( yes*keyword*) : printf "%s\n" "#define HAVE_C_STATIC_ASSERT 1" >>confdefs.h ;; #( no) : GL_GENERATE_ASSERT_H=true if test $gl_cv_have_include_next = yes; then gl_cv_next_assert_h='<'assert.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <assert.h>" >&5 printf %s "checking absolute name of <assert.h>... " >&6; } if test ${gl_cv_next_assert_h+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <assert.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'assert.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_assert_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_assert_h gl_cv_next_assert_h='"'$gl_header'"' fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_assert_h" >&5 printf "%s\n" "$gl_cv_next_assert_h" >&6; } fi NEXT_ASSERT_H=$gl_cv_next_assert_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'assert.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_assert_h fi NEXT_AS_FIRST_DIRECTIVE_ASSERT_H=$gl_next_as_first_directive ;; #( *) : ;; esac case "$GL_GENERATE_ASSERT_H" in false) ASSERT_H='' ;; true) if test -z "$ASSERT_H"; then ASSERT_H="${gl_source_base_prefix}assert.h" fi ;; *) echo "*** GL_GENERATE_ASSERT_H is not set correctly" 1>&2; exit 1 ;; esac if $GL_GENERATE_ASSERT_H; then GL_GENERATE_ASSERT_H_TRUE= GL_GENERATE_ASSERT_H_FALSE='#' else GL_GENERATE_ASSERT_H_TRUE='#' GL_GENERATE_ASSERT_H_FALSE= fi : if test -z "${GL_GENERATE_ASSERT_H_TRUE}" && test -z "${GL_GENERATE_ASSERT_H_FALSE}"; then GL_GENERATE_ASSERT_H_TRUE='#' GL_GENERATE_ASSERT_H_FALSE='#' fi if test $ac_cv_func_btowc = no; then HAVE_BTOWC=0 else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether btowc(0) is correct" >&5 printf %s "checking whether btowc(0) is correct... " >&6; } if test ${gl_cv_func_btowc_nul+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case "$host_os" in # Guess no on Cygwin. cygwin*) gl_cv_func_btowc_nul="guessing no" ;; # Guess yes on native Windows. mingw*) gl_cv_func_btowc_nul="guessing yes" ;; # Guess yes otherwise. *) gl_cv_func_btowc_nul="guessing yes" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <wchar.h> int main () { if (btowc ('\0') != 0) return 1; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_btowc_nul=yes else $as_nop gl_cv_func_btowc_nul=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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_btowc_nul" >&5 printf "%s\n" "$gl_cv_func_btowc_nul" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether btowc(EOF) is correct" >&5 printf %s "checking whether btowc(EOF) is correct... " >&6; } if test ${gl_cv_func_btowc_eof+y} then : printf %s "(cached) " >&6 else $as_nop case "$host_os" in # Guess no on IRIX. irix*) gl_cv_func_btowc_eof="guessing no" ;; # Guess yes on native Windows. mingw*) gl_cv_func_btowc_eof="guessing yes" ;; # Guess yes otherwise. *) gl_cv_func_btowc_eof="guessing yes" ;; esac if test $LOCALE_FR != none; then if test "$cross_compiling" = yes then : : else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> #include <stdio.h> #include <wchar.h> int main () { if (setlocale (LC_ALL, "$LOCALE_FR") != NULL) { if (btowc (EOF) != WEOF) return 1; } return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_btowc_eof=yes else $as_nop gl_cv_func_btowc_eof=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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_btowc_eof" >&5 printf "%s\n" "$gl_cv_func_btowc_eof" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether btowc is consistent with mbrtowc in the C locale" >&5 printf %s "checking whether btowc is consistent with mbrtowc in the C locale... " >&6; } if test ${gl_cv_func_btowc_consistent+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case "$host_os" in # Guess no on mingw. mingw*) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __MINGW32__ Problem #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Problem" >/dev/null 2>&1 then : gl_cv_func_btowc_consistent="guessing no" else $as_nop gl_cv_func_btowc_consistent="guessing yes" fi rm -rf conftest* ;; # Guess yes otherwise. *) gl_cv_func_btowc_consistent="guessing yes" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdlib.h> #include <string.h> #include <wchar.h> int main () { #if HAVE_MBRTOWC wint_t wc1 = btowc (0x80); wchar_t wc2 = (wchar_t) 0xbadface; char buf[1] = { 0x80 }; mbstate_t state; memset (&state, 0, sizeof (mbstate_t)); if (mbrtowc (&wc2, buf, 1, &state) != 1 || wc1 != wc2) return 1; #endif return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_btowc_consistent=yes else $as_nop gl_cv_func_btowc_consistent=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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_btowc_consistent" >&5 printf "%s\n" "$gl_cv_func_btowc_consistent" >&6; } case "$gl_cv_func_btowc_nul" in *yes) ;; *) REPLACE_BTOWC=1 ;; esac case "$gl_cv_func_btowc_eof" in *yes) ;; *) REPLACE_BTOWC=1 ;; esac case "$gl_cv_func_btowc_consistent" in *yes) ;; *) REPLACE_BTOWC=1 ;; esac if test $REPLACE_BTOWC = 0; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C locale is free of encoding errors" >&5 printf %s "checking whether the C locale is free of encoding errors... " >&6; } if test ${gl_cv_func_mbrtowc_C_locale_sans_EILSEQ+y} then : printf %s "(cached) " >&6 else $as_nop gl_cv_func_mbrtowc_C_locale_sans_EILSEQ="$gl_cross_guess_normal" if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on native Windows. mingw*) gl_cv_func_mbrtowc_C_locale_sans_EILSEQ="guessing yes" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <limits.h> #include <locale.h> #include <wchar.h> int main (void) { int i; char *locale = setlocale (LC_ALL, "C"); if (! locale) return 2; for (i = CHAR_MIN; i <= CHAR_MAX; i++) { char c = i; wchar_t wc; mbstate_t mbs = { 0, }; size_t ss = mbrtowc (&wc, &c, 1, &mbs); if (1 < ss) return 3; } return 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_mbrtowc_C_locale_sans_EILSEQ=yes else $as_nop gl_cv_func_mbrtowc_C_locale_sans_EILSEQ=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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_C_locale_sans_EILSEQ" >&5 printf "%s\n" "$gl_cv_func_mbrtowc_C_locale_sans_EILSEQ" >&6; } case "$gl_cv_func_mbrtowc_C_locale_sans_EILSEQ" in *yes) ;; *) REPLACE_BTOWC=1 ;; esac fi fi if test $HAVE_BTOWC = 0 || test $REPLACE_BTOWC = 1; then GL_COND_OBJ_BTOWC_TRUE= GL_COND_OBJ_BTOWC_FALSE='#' else GL_COND_OBJ_BTOWC_TRUE='#' GL_COND_OBJ_BTOWC_FALSE= fi : if test -z "${GL_COND_OBJ_BTOWC_TRUE}" && test -z "${GL_COND_OBJ_BTOWC_FALSE}"; then GL_COND_OBJ_BTOWC_TRUE='#' GL_COND_OBJ_BTOWC_FALSE='#' fi if test -z "$GL_COND_OBJ_BTOWC_TRUE"; then : : fi GL_GNULIB_BTOWC=1 printf "%s\n" "#define GNULIB_TEST_BTOWC 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for __builtin_expect" >&5 printf %s "checking for __builtin_expect... " >&6; } if test ${gl_cv___builtin_expect+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (int argc, char **argv) { argc = __builtin_expect (argc, 100); return argv[argc != 100][0]; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_cv___builtin_expect=yes else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <builtins.h> int main (int argc, char **argv) { argc = __builtin_expect (argc, 100); return argv[argc != 100][0]; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_cv___builtin_expect="in <builtins.h>" else $as_nop gl_cv___builtin_expect=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv___builtin_expect" >&5 printf "%s\n" "$gl_cv___builtin_expect" >&6; } if test "$gl_cv___builtin_expect" = yes; then printf "%s\n" "#define HAVE___BUILTIN_EXPECT 1" >>confdefs.h elif test "$gl_cv___builtin_expect" = "in <builtins.h>"; then printf "%s\n" "#define HAVE___BUILTIN_EXPECT 2" >>confdefs.h fi REPLACE_CALLOC_FOR_CALLOC_GNU="$REPLACE_CALLOC_FOR_CALLOC_POSIX" if test $REPLACE_CALLOC_FOR_CALLOC_GNU = 0; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether calloc (0, n) and calloc (n, 0) return nonnull" >&5 printf %s "checking whether calloc (0, n) and calloc (n, 0) return nonnull... " >&6; } if test ${ac_cv_func_calloc_0_nonnull+y} then : printf %s "(cached) " >&6 else $as_nop if test $cross_compiling != yes; then ac_cv_func_calloc_0_nonnull=yes if test "$cross_compiling" = yes then : { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run test program while cross compiling See \`config.log' for more details" "$LINENO" 5; } else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main (void) { int result = 0; char * volatile p = calloc (0, 0); if (!p) result |= 1; free (p); return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : else $as_nop ac_cv_func_calloc_0_nonnull=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi else case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) ac_cv_func_calloc_0_nonnull="guessing yes" ;; # Guess yes on musl systems. *-musl* | midipix*) ac_cv_func_calloc_0_nonnull="guessing yes" ;; # Guess yes on native Windows. mingw*) ac_cv_func_calloc_0_nonnull="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) ac_cv_func_calloc_0_nonnull="$gl_cross_guess_normal" ;; esac fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_calloc_0_nonnull" >&5 printf "%s\n" "$ac_cv_func_calloc_0_nonnull" >&6; } case $ac_cv_func_calloc_0_nonnull in #( *yes) : ;; #( *) : REPLACE_CALLOC_FOR_CALLOC_GNU=1 ;; esac fi if test $REPLACE_CALLOC_FOR_CALLOC_GNU = 1; then gl_LIBOBJS="$gl_LIBOBJS calloc.$ac_objext" fi GL_GNULIB_CALLOC_GNU=1 printf "%s\n" "#define GNULIB_TEST_CALLOC_GNU 1" >>confdefs.h if test $REPLACE_MALLOC_FOR_MALLOC_POSIX = 1; then REPLACE_CALLOC_FOR_CALLOC_POSIX=1 fi if test $REPLACE_CALLOC_FOR_CALLOC_POSIX = 1; then gl_LIBOBJS="$gl_LIBOBJS calloc.$ac_objext" fi GL_GNULIB_CALLOC_POSIX=1 printf "%s\n" "#define GNULIB_TEST_CALLOC_POSIX 1" >>confdefs.h printf "%s\n" "#define GNULIB_TEST_CLOEXEC 1" >>confdefs.h if test $REPLACE_CLOSE = 1; then GL_COND_OBJ_CLOSE_TRUE= GL_COND_OBJ_CLOSE_FALSE='#' else GL_COND_OBJ_CLOSE_TRUE='#' GL_COND_OBJ_CLOSE_FALSE= fi : if test -z "${GL_COND_OBJ_CLOSE_TRUE}" && test -z "${GL_COND_OBJ_CLOSE_FALSE}"; then GL_COND_OBJ_CLOSE_TRUE='#' GL_COND_OBJ_CLOSE_FALSE='#' fi GL_GNULIB_CLOSE=1 printf "%s\n" "#define GNULIB_TEST_CLOSE 1" >>confdefs.h printf "%s\n" "#define GNULIB_DIRNAME 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether // is distinct from /" >&5 printf %s "checking whether // is distinct from /... " >&6; } if test ${gl_cv_double_slash_root+y} then : printf %s "(cached) " >&6 else $as_nop if test x"$cross_compiling" = xyes ; then # When cross-compiling, there is no way to tell whether // is special # short of a list of hosts. However, the only known hosts to date # that have a distinct // are Apollo DomainOS (too old to port to), # Cygwin, and z/OS. If anyone knows of another system for which // has # special semantics and is distinct from /, please report it to # <bug-gnulib@gnu.org>. case $host in *-cygwin | i370-ibm-openedition) gl_cv_double_slash_root=yes ;; *) # Be optimistic and assume that / and // are the same when we # don't know. gl_cv_double_slash_root='unknown, assuming no' ;; esac else set x `ls -di / // 2>/dev/null` if test "$2" = "$4" && wc //dev/null >/dev/null 2>&1; then gl_cv_double_slash_root=no else gl_cv_double_slash_root=yes fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_double_slash_root" >&5 printf "%s\n" "$gl_cv_double_slash_root" >&6; } if test "$gl_cv_double_slash_root" = yes; then printf "%s\n" "#define DOUBLE_SLASH_IS_DISTINCT_ROOT 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether dup2 works" >&5 printf %s "checking whether dup2 works... " >&6; } if test ${gl_cv_func_dup2_works+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case "$host_os" in mingw*) # on this platform, dup2 always returns 0 for success gl_cv_func_dup2_works="guessing no" ;; cygwin*) # on cygwin 1.5.x, dup2(1,1) returns 0 gl_cv_func_dup2_works="guessing no" ;; aix* | freebsd*) # on AIX 7.1 and FreeBSD 6.1, dup2 (1,toobig) gives EMFILE, # not EBADF. gl_cv_func_dup2_works="guessing no" ;; haiku*) # on Haiku alpha 2, dup2(1, 1) resets FD_CLOEXEC. gl_cv_func_dup2_works="guessing no" ;; *-android*) # implemented using dup3(), which fails if oldfd == newfd gl_cv_func_dup2_works="guessing no" ;; os2*) # on OS/2 kLIBC, dup2() does not work on a directory fd. gl_cv_func_dup2_works="guessing no" ;; *) gl_cv_func_dup2_works="guessing yes" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <errno.h> #include <fcntl.h> #include <limits.h> #include <sys/resource.h> #include <unistd.h> $gl_mda_defines #ifndef RLIM_SAVED_CUR # define RLIM_SAVED_CUR RLIM_INFINITY #endif #ifndef RLIM_SAVED_MAX # define RLIM_SAVED_MAX RLIM_INFINITY #endif int main (void) { int result = 0; int bad_fd = INT_MAX; struct rlimit rlim; if (getrlimit (RLIMIT_NOFILE, &rlim) == 0 && 0 <= rlim.rlim_cur && rlim.rlim_cur <= INT_MAX && rlim.rlim_cur != RLIM_INFINITY && rlim.rlim_cur != RLIM_SAVED_MAX && rlim.rlim_cur != RLIM_SAVED_CUR) bad_fd = rlim.rlim_cur; #ifdef FD_CLOEXEC if (fcntl (1, F_SETFD, FD_CLOEXEC) == -1) result |= 1; #endif if (dup2 (1, 1) != 1) result |= 2; #ifdef FD_CLOEXEC if (fcntl (1, F_GETFD) != FD_CLOEXEC) result |= 4; #endif close (0); if (dup2 (0, 0) != -1) result |= 8; /* Many gnulib modules require POSIX conformance of EBADF. */ if (dup2 (2, bad_fd) == -1 && errno != EBADF) result |= 16; /* Flush out some cygwin core dumps. */ if (dup2 (2, -1) != -1 || errno != EBADF) result |= 32; dup2 (2, 255); dup2 (2, 256); /* On OS/2 kLIBC, dup2() does not work on a directory fd. */ { int fd = open (".", O_RDONLY); if (fd == -1) result |= 64; else if (dup2 (fd, fd + 1) == -1) result |= 128; close (fd); } return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_dup2_works=yes else $as_nop gl_cv_func_dup2_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 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_dup2_works" >&5 printf "%s\n" "$gl_cv_func_dup2_works" >&6; } case "$gl_cv_func_dup2_works" in *yes) ;; *) REPLACE_DUP2=1 ac_fn_c_check_func "$LINENO" "setdtablesize" "ac_cv_func_setdtablesize" if test "x$ac_cv_func_setdtablesize" = xyes then : printf "%s\n" "#define HAVE_SETDTABLESIZE 1" >>confdefs.h fi ;; esac if test $REPLACE_DUP2 = 1; then GL_COND_OBJ_DUP2_TRUE= GL_COND_OBJ_DUP2_FALSE='#' else GL_COND_OBJ_DUP2_TRUE='#' GL_COND_OBJ_DUP2_FALSE= fi : if test -z "${GL_COND_OBJ_DUP2_TRUE}" && test -z "${GL_COND_OBJ_DUP2_FALSE}"; then GL_COND_OBJ_DUP2_TRUE='#' GL_COND_OBJ_DUP2_FALSE='#' fi if test -z "$GL_COND_OBJ_DUP2_TRUE"; then : fi GL_GNULIB_DUP2=1 printf "%s\n" "#define GNULIB_TEST_DUP2 1" >>confdefs.h GL_GNULIB_ENVIRON=1 printf "%s\n" "#define GNULIB_TEST_ENVIRON 1" >>confdefs.h case "$GL_GENERATE_ERRNO_H" in false) ERRNO_H='' ;; true) if test -z "$ERRNO_H"; then ERRNO_H="${gl_source_base_prefix}errno.h" fi ;; *) echo "*** GL_GENERATE_ERRNO_H is not set correctly" 1>&2; exit 1 ;; esac if $GL_GENERATE_ERRNO_H; then GL_GENERATE_ERRNO_H_TRUE= GL_GENERATE_ERRNO_H_FALSE='#' else GL_GENERATE_ERRNO_H_TRUE='#' GL_GENERATE_ERRNO_H_FALSE= fi : if test -z "${GL_GENERATE_ERRNO_H_TRUE}" && test -z "${GL_GENERATE_ERRNO_H_FALSE}"; then GL_GENERATE_ERRNO_H_TRUE='#' GL_GENERATE_ERRNO_H_FALSE='#' fi if test $COMPILE_ERROR_C = 1; then GL_COND_OBJ_ERROR_TRUE= GL_COND_OBJ_ERROR_FALSE='#' else GL_COND_OBJ_ERROR_TRUE='#' GL_COND_OBJ_ERROR_FALSE= fi : if test -z "${GL_COND_OBJ_ERROR_TRUE}" && test -z "${GL_COND_OBJ_ERROR_FALSE}"; then GL_COND_OBJ_ERROR_TRUE='#' GL_COND_OBJ_ERROR_FALSE='#' fi if test -z "$GL_COND_OBJ_ERROR_TRUE"; then : : fi XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS --flag=error:3:c-format" XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS --flag=error_at_line:5:c-format" if test $ac_cv_func_fcntl = no; then if test $ac_cv_func_fcntl = no; then HAVE_FCNTL=0 else REPLACE_FCNTL=1 fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether fcntl handles F_DUPFD correctly" >&5 printf %s "checking whether fcntl handles F_DUPFD correctly... " >&6; } if test ${gl_cv_func_fcntl_f_dupfd_works+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case $host_os in aix* | cygwin* | haiku*) gl_cv_func_fcntl_f_dupfd_works="guessing no" ;; *) gl_cv_func_fcntl_f_dupfd_works="guessing yes" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <errno.h> #include <fcntl.h> #include <limits.h> #include <sys/resource.h> #include <unistd.h> $gl_mda_defines #ifndef RLIM_SAVED_CUR # define RLIM_SAVED_CUR RLIM_INFINITY #endif #ifndef RLIM_SAVED_MAX # define RLIM_SAVED_MAX RLIM_INFINITY #endif int main (void) { int result = 0; int bad_fd = INT_MAX; struct rlimit rlim; if (getrlimit (RLIMIT_NOFILE, &rlim) == 0 && 0 <= rlim.rlim_cur && rlim.rlim_cur <= INT_MAX && rlim.rlim_cur != RLIM_INFINITY && rlim.rlim_cur != RLIM_SAVED_MAX && rlim.rlim_cur != RLIM_SAVED_CUR) bad_fd = rlim.rlim_cur; if (fcntl (0, F_DUPFD, -1) != -1) result |= 1; if (errno != EINVAL) result |= 2; if (fcntl (0, F_DUPFD, bad_fd) != -1) result |= 4; if (errno != EINVAL) result |= 8; /* On OS/2 kLIBC, F_DUPFD does not work on a directory fd */ { int fd; fd = open (".", O_RDONLY); if (fd == -1) result |= 16; else if (fcntl (fd, F_DUPFD, STDERR_FILENO + 1) == -1) result |= 32; close (fd); } return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_fcntl_f_dupfd_works=yes else $as_nop gl_cv_func_fcntl_f_dupfd_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 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_fcntl_f_dupfd_works" >&5 printf "%s\n" "$gl_cv_func_fcntl_f_dupfd_works" >&6; } case $gl_cv_func_fcntl_f_dupfd_works in *yes) ;; *) if test $ac_cv_func_fcntl = no; then HAVE_FCNTL=0 else REPLACE_FCNTL=1 fi printf "%s\n" "#define FCNTL_DUPFD_BUGGY 1" >>confdefs.h ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether fcntl understands F_DUPFD_CLOEXEC" >&5 printf %s "checking whether fcntl understands F_DUPFD_CLOEXEC... " >&6; } if test ${gl_cv_func_fcntl_f_dupfd_cloexec+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case "$host_os" in # Guess no on NetBSD. netbsd*) gl_cv_func_fcntl_f_dupfd_cloexec="guessing no" ;; *) gl_cv_func_fcntl_f_dupfd_cloexec="$gl_cross_guess_normal" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <fcntl.h> #include <unistd.h> int main (int argc, char *argv[]) { if (argc == 1) /* parent process */ { if (fcntl (1, F_DUPFD_CLOEXEC, 10) < 0) return 1; return execl ("./conftest", "./conftest", "child", NULL); } else /* child process */ return (fcntl (10, F_GETFL) < 0 ? 0 : 42); } _ACEOF if ac_fn_c_try_run "$LINENO" then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __linux__ /* The Linux kernel only added F_DUPFD_CLOEXEC in 2.6.24, so we always replace it to support the semantics on older kernels that failed with EINVAL. */ choke me #endif int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_func_fcntl_f_dupfd_cloexec=yes else $as_nop gl_cv_func_fcntl_f_dupfd_cloexec="needs runtime check" fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext else $as_nop gl_cv_func_fcntl_f_dupfd_cloexec=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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_fcntl_f_dupfd_cloexec" >&5 printf "%s\n" "$gl_cv_func_fcntl_f_dupfd_cloexec" >&6; } case "$gl_cv_func_fcntl_f_dupfd_cloexec" in *yes) ;; *) if test $ac_cv_func_fcntl = no; then HAVE_FCNTL=0 else REPLACE_FCNTL=1 fi ;; esac fi if test $HAVE_FCNTL = 0 || test $REPLACE_FCNTL = 1; then GL_COND_OBJ_FCNTL_TRUE= GL_COND_OBJ_FCNTL_FALSE='#' else GL_COND_OBJ_FCNTL_TRUE='#' GL_COND_OBJ_FCNTL_FALSE= fi : if test -z "${GL_COND_OBJ_FCNTL_TRUE}" && test -z "${GL_COND_OBJ_FCNTL_FALSE}"; then GL_COND_OBJ_FCNTL_TRUE='#' GL_COND_OBJ_FCNTL_FALSE='#' fi GL_GNULIB_FCNTL=1 printf "%s\n" "#define GNULIB_TEST_FCNTL 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for flexible array member" >&5 printf %s "checking for flexible array member... " >&6; } if test ${ac_cv_c_flexmember+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdlib.h> #include <stdio.h> #include <stddef.h> struct m { struct m *next, **list; char name[]; }; struct s { struct s *p; struct m *m; int n; double d[]; }; int main (void) { int m = getchar (); size_t nbytes = offsetof (struct s, d) + m * sizeof (double); nbytes += sizeof (struct s) - 1; nbytes -= nbytes % sizeof (struct s); struct s *p = malloc (nbytes); p->p = p; p->m = NULL; p->d[0] = 0.0; return p->d != (double *) NULL; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_c_flexmember=yes else $as_nop ac_cv_c_flexmember=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_flexmember" >&5 printf "%s\n" "$ac_cv_c_flexmember" >&6; } if test $ac_cv_c_flexmember = yes; then printf "%s\n" "#define FLEXIBLE_ARRAY_MEMBER /**/" >>confdefs.h else printf "%s\n" "#define FLEXIBLE_ARRAY_MEMBER 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether free is known to preserve errno" >&5 printf %s "checking whether free is known to preserve errno... " >&6; } if test ${gl_cv_func_free_preserves_errno+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdlib.h> int main (void) { #if 2 < __GLIBC__ + (33 <= __GLIBC_MINOR__) #elif defined __OpenBSD__ #elif defined __sun #else #error "'free' is not known to preserve errno" #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_func_free_preserves_errno=yes else $as_nop gl_cv_func_free_preserves_errno=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_free_preserves_errno" >&5 printf "%s\n" "$gl_cv_func_free_preserves_errno" >&6; } case $gl_cv_func_free_preserves_errno in *yes) printf "%s\n" "#define HAVE_FREE_POSIX 1" >>confdefs.h ;; *) REPLACE_FREE=1 ;; esac if test $REPLACE_FREE = 1; then GL_COND_OBJ_FREE_TRUE= GL_COND_OBJ_FREE_FALSE='#' else GL_COND_OBJ_FREE_TRUE='#' GL_COND_OBJ_FREE_FALSE= fi : if test -z "${GL_COND_OBJ_FREE_TRUE}" && test -z "${GL_COND_OBJ_FREE_FALSE}"; then GL_COND_OBJ_FREE_TRUE='#' GL_COND_OBJ_FREE_FALSE='#' fi if test -z "$GL_COND_OBJ_FREE_TRUE"; then : : fi GL_GNULIB_FREE_POSIX=1 printf "%s\n" "#define GNULIB_TEST_FREE_POSIX 1" >>confdefs.h case "$host_os" in mingw* | solaris*) REPLACE_FSTAT=1 ;; esac if test $REPLACE_FSTAT = 1; then GL_COND_OBJ_FSTAT_TRUE= GL_COND_OBJ_FSTAT_FALSE='#' else GL_COND_OBJ_FSTAT_TRUE='#' GL_COND_OBJ_FSTAT_FALSE= fi : if test -z "${GL_COND_OBJ_FSTAT_TRUE}" && test -z "${GL_COND_OBJ_FSTAT_FALSE}"; then GL_COND_OBJ_FSTAT_TRUE='#' GL_COND_OBJ_FSTAT_FALSE='#' fi if test -z "$GL_COND_OBJ_FSTAT_TRUE"; then : case "$host_os" in mingw*) gl_LIBOBJS="$gl_LIBOBJS stat-w32.$ac_objext" ;; esac : fi GL_GNULIB_FSTAT=1 printf "%s\n" "#define GNULIB_TEST_FSTAT 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for getdelim" >&5 printf %s "checking for getdelim... " >&6; } if test ${gl_cv_onwards_func_getdelim+y} then : printf %s "(cached) " >&6 else $as_nop exec 9>&6 6>/dev/null case "$host_os" in linux*-android*) ac_fn_check_decl "$LINENO" "getdelim" "ac_cv_have_decl_getdelim" "#include <stdio.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_getdelim" = xyes then : fi if test $ac_cv_have_decl_getdelim = yes; then ac_fn_c_check_func "$LINENO" "getdelim" "ac_cv_func_getdelim" if test "x$ac_cv_func_getdelim" = xyes then : fi if test $ac_cv_func_getdelim = yes; then gl_cv_onwards_func_getdelim=yes else gl_cv_onwards_func_getdelim='future OS version' fi else gl_cv_onwards_func_getdelim='future OS version' fi ;; *) ac_fn_c_check_func "$LINENO" "getdelim" "ac_cv_func_getdelim" if test "x$ac_cv_func_getdelim" = xyes then : fi gl_cv_onwards_func_getdelim=$ac_cv_func_getdelim ;; esac exec 6>&9 9>&- fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_onwards_func_getdelim" >&5 printf "%s\n" "$gl_cv_onwards_func_getdelim" >&6; } case "$gl_cv_onwards_func_getdelim" in future*) ac_cv_func_getdelim=no ;; *) ac_cv_func_getdelim=$gl_cv_onwards_func_getdelim ;; esac if test $ac_cv_func_getdelim = yes; then printf "%s\n" "#define HAVE_GETDELIM 1" >>confdefs.h fi if test $ac_cv_func_getdelim = yes; then HAVE_GETDELIM=1 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working getdelim function" >&5 printf %s "checking for working getdelim function... " >&6; } if test ${gl_cv_func_working_getdelim+y} then : printf %s "(cached) " >&6 else $as_nop case "$host_os" in darwin*) gl_cv_func_working_getdelim=no ;; *) echo fooNbarN | tr -d '\012' | tr N '\012' > conftest.data if test "$cross_compiling" = yes then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <features.h> #ifdef __GNU_LIBRARY__ #if (__GLIBC__ >= 2) && !defined __UCLIBC__ Lucky GNU user #endif #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Lucky GNU user" >/dev/null 2>&1 then : gl_cv_func_working_getdelim="guessing yes" else $as_nop case "$host_os" in *-musl* | midipix*) gl_cv_func_working_getdelim="guessing yes" ;; *) gl_cv_func_working_getdelim="$gl_cross_guess_normal" ;; esac fi rm -rf conftest* else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # include <stdio.h> # include <stdlib.h> # include <string.h> int main () { FILE *in = fopen ("./conftest.data", "r"); if (!in) return 1; { /* Test result for a NULL buffer and a zero size. Based on a test program from Karl Heuer. */ char *line = NULL; size_t siz = 0; int len = getdelim (&line, &siz, '\n', in); if (!(len == 4 && line && strcmp (line, "foo\n") == 0)) { free (line); fclose (in); return 2; } free (line); } { /* Test result for a NULL buffer and a non-zero size. This crashes on FreeBSD 8.0. */ char *line = NULL; size_t siz = (size_t)(~0) / 4; if (getdelim (&line, &siz, '\n', in) == -1) { fclose (in); return 3; } free (line); } fclose (in); return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_working_getdelim=yes else $as_nop gl_cv_func_working_getdelim=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_working_getdelim" >&5 printf "%s\n" "$gl_cv_func_working_getdelim" >&6; } case "$gl_cv_func_working_getdelim" in *yes) ;; *) REPLACE_GETDELIM=1 ;; esac else HAVE_GETDELIM=0 case "$gl_cv_onwards_func_getdelim" in future*) REPLACE_GETDELIM=1 ;; esac fi if test $ac_cv_have_decl_getdelim = no; then HAVE_DECL_GETDELIM=0 fi if test $HAVE_GETDELIM = 0 || test $REPLACE_GETDELIM = 1; then GL_COND_OBJ_GETDELIM_TRUE= GL_COND_OBJ_GETDELIM_FALSE='#' else GL_COND_OBJ_GETDELIM_TRUE='#' GL_COND_OBJ_GETDELIM_FALSE= fi : if test -z "${GL_COND_OBJ_GETDELIM_TRUE}" && test -z "${GL_COND_OBJ_GETDELIM_FALSE}"; then GL_COND_OBJ_GETDELIM_TRUE='#' GL_COND_OBJ_GETDELIM_FALSE='#' fi if test -z "$GL_COND_OBJ_GETDELIM_TRUE"; then : ac_fn_c_check_func "$LINENO" "flockfile" "ac_cv_func_flockfile" if test "x$ac_cv_func_flockfile" = xyes then : printf "%s\n" "#define HAVE_FLOCKFILE 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "funlockfile" "ac_cv_func_funlockfile" if test "x$ac_cv_func_funlockfile" = xyes then : printf "%s\n" "#define HAVE_FUNLOCKFILE 1" >>confdefs.h fi ac_fn_check_decl "$LINENO" "getc_unlocked" "ac_cv_have_decl_getc_unlocked" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_getc_unlocked" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_GETC_UNLOCKED $ac_have_decl" >>confdefs.h fi GL_GNULIB_GETDELIM=1 printf "%s\n" "#define GNULIB_TEST_GETDELIM 1" >>confdefs.h if test $ac_cv_func_getdtablesize = yes && test $ac_cv_have_decl_getdtablesize = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether getdtablesize works" >&5 printf %s "checking whether getdtablesize works... " >&6; } if test ${gl_cv_func_getdtablesize_works+y} then : printf %s "(cached) " >&6 else $as_nop case "$host_os" in vms*) gl_cv_func_getdtablesize_works="no (limitation)" ;; *) if test "$cross_compiling" = yes then : case "$host_os" in cygwin*) # on cygwin 1.5.25, getdtablesize() automatically grows gl_cv_func_getdtablesize_works="guessing no" ;; *) gl_cv_func_getdtablesize_works="guessing yes" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <unistd.h> $gl_mda_defines int main (void) { int size = getdtablesize(); if (dup2 (0, getdtablesize()) != -1) return 1; if (size != getdtablesize()) return 2; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_getdtablesize_works=yes else $as_nop gl_cv_func_getdtablesize_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 ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_getdtablesize_works" >&5 printf "%s\n" "$gl_cv_func_getdtablesize_works" >&6; } case "$gl_cv_func_getdtablesize_works" in *yes | "no (limitation)") ;; *) REPLACE_GETDTABLESIZE=1 ;; esac else HAVE_GETDTABLESIZE=0 fi if test $HAVE_GETDTABLESIZE = 0 || test $REPLACE_GETDTABLESIZE = 1; then GL_COND_OBJ_GETDTABLESIZE_TRUE= GL_COND_OBJ_GETDTABLESIZE_FALSE='#' else GL_COND_OBJ_GETDTABLESIZE_TRUE='#' GL_COND_OBJ_GETDTABLESIZE_FALSE= fi : if test -z "${GL_COND_OBJ_GETDTABLESIZE_TRUE}" && test -z "${GL_COND_OBJ_GETDTABLESIZE_FALSE}"; then GL_COND_OBJ_GETDTABLESIZE_TRUE='#' GL_COND_OBJ_GETDTABLESIZE_FALSE='#' fi if test -z "$GL_COND_OBJ_GETDTABLESIZE_TRUE"; then : : fi GL_GNULIB_GETDTABLESIZE=1 printf "%s\n" "#define GNULIB_TEST_GETDTABLESIZE 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for getline" >&5 printf %s "checking for getline... " >&6; } if test ${gl_cv_onwards_func_getline+y} then : printf %s "(cached) " >&6 else $as_nop exec 9>&6 6>/dev/null case "$host_os" in linux*-android*) ac_fn_check_decl "$LINENO" "getline" "ac_cv_have_decl_getline" "#include <stdio.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_getline" = xyes then : fi if test $ac_cv_have_decl_getline = yes; then ac_fn_c_check_func "$LINENO" "getline" "ac_cv_func_getline" if test "x$ac_cv_func_getline" = xyes then : fi if test $ac_cv_func_getline = yes; then gl_cv_onwards_func_getline=yes else gl_cv_onwards_func_getline='future OS version' fi else gl_cv_onwards_func_getline='future OS version' fi ;; *) ac_fn_c_check_func "$LINENO" "getline" "ac_cv_func_getline" if test "x$ac_cv_func_getline" = xyes then : fi gl_cv_onwards_func_getline=$ac_cv_func_getline ;; esac exec 6>&9 9>&- fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_onwards_func_getline" >&5 printf "%s\n" "$gl_cv_onwards_func_getline" >&6; } case "$gl_cv_onwards_func_getline" in future*) ac_cv_func_getline=no ;; *) ac_cv_func_getline=$gl_cv_onwards_func_getline ;; esac if test $ac_cv_func_getline = yes; then printf "%s\n" "#define HAVE_GETLINE 1" >>confdefs.h fi if test $ac_cv_func_getline = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working getline function" >&5 printf %s "checking for working getline function... " >&6; } if test ${am_cv_func_working_getline+y} then : printf %s "(cached) " >&6 else $as_nop echo fooNbarN | tr -d '\012' | tr N '\012' > conftest.data if test "$cross_compiling" = yes then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <features.h> #ifdef __GNU_LIBRARY__ #if (__GLIBC__ >= 2) && !defined __UCLIBC__ Lucky GNU user #endif #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Lucky GNU user" >/dev/null 2>&1 then : am_cv_func_working_getline="guessing yes" else $as_nop case "$host_os" in *-musl* | midipix*) am_cv_func_working_getline="guessing yes" ;; *) am_cv_func_working_getline="$gl_cross_guess_normal" ;; esac fi rm -rf conftest* else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # include <stdio.h> # include <stdlib.h> # include <string.h> int main () { FILE *in = fopen ("./conftest.data", "r"); if (!in) return 1; { /* Test result for a NULL buffer and a zero size. Based on a test program from Karl Heuer. */ char *line = NULL; size_t siz = 0; int len = getline (&line, &siz, in); if (!(len == 4 && line && strcmp (line, "foo\n") == 0)) { free (line); fclose (in); return 2; } free (line); } { /* Test result for a NULL buffer and a non-zero size. This crashes on FreeBSD 8.0. */ char *line = NULL; size_t siz = (size_t)(~0) / 4; if (getline (&line, &siz, in) == -1) { fclose (in); return 3; } free (line); } fclose (in); return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : am_cv_func_working_getline=yes else $as_nop am_cv_func_working_getline=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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_working_getline" >&5 printf "%s\n" "$am_cv_func_working_getline" >&6; } else am_cv_func_working_getline=no case "$gl_cv_onwards_func_getline" in future*) REPLACE_GETLINE=1 ;; esac fi if test $ac_cv_have_decl_getline = no; then HAVE_DECL_GETLINE=0 fi case "$am_cv_func_working_getline" in *yes) ;; *) REPLACE_GETLINE=1 ;; esac if test $REPLACE_GETLINE = 1; then GL_COND_OBJ_GETLINE_TRUE= GL_COND_OBJ_GETLINE_FALSE='#' else GL_COND_OBJ_GETLINE_TRUE='#' GL_COND_OBJ_GETLINE_FALSE= fi : if test -z "${GL_COND_OBJ_GETLINE_TRUE}" && test -z "${GL_COND_OBJ_GETLINE_FALSE}"; then GL_COND_OBJ_GETLINE_TRUE='#' GL_COND_OBJ_GETLINE_FALSE='#' fi if test -z "$GL_COND_OBJ_GETLINE_TRUE"; then : : fi GL_GNULIB_GETLINE=1 printf "%s\n" "#define GNULIB_TEST_GETLINE 1" >>confdefs.h REPLACE_GETOPT=0 if test -n "$gl_replace_getopt"; then REPLACE_GETOPT=1 fi GL_GENERATE_GETOPT_H=false GL_GENERATE_GETOPT_CDEFS_H=false if test $REPLACE_GETOPT = 1; then if test $ac_cv_header_sys_cdefs_h = yes; then HAVE_SYS_CDEFS_H=1 else HAVE_SYS_CDEFS_H=0 fi printf "%s\n" "#define __GETOPT_PREFIX rpl_" >>confdefs.h GL_GENERATE_GETOPT_H=true GL_GENERATE_GETOPT_CDEFS_H=true fi case "$GL_GENERATE_GETOPT_H" in false) GETOPT_H='' ;; true) if test -z "$GETOPT_H"; then GETOPT_H="${gl_source_base_prefix}getopt.h" fi ;; *) echo "*** GL_GENERATE_GETOPT_H is not set correctly" 1>&2; exit 1 ;; esac if $GL_GENERATE_GETOPT_H; then GL_GENERATE_GETOPT_H_TRUE= GL_GENERATE_GETOPT_H_FALSE='#' else GL_GENERATE_GETOPT_H_TRUE='#' GL_GENERATE_GETOPT_H_FALSE= fi : if test -z "${GL_GENERATE_GETOPT_H_TRUE}" && test -z "${GL_GENERATE_GETOPT_H_FALSE}"; then GL_GENERATE_GETOPT_H_TRUE='#' GL_GENERATE_GETOPT_H_FALSE='#' fi case "$GL_GENERATE_GETOPT_CDEFS_H" in false) GETOPT_CDEFS_H='' ;; true) if test -z "$GETOPT_CDEFS_H"; then GETOPT_CDEFS_H="${gl_source_base_prefix}getopt-cdefs.h" fi ;; *) echo "*** GL_GENERATE_GETOPT_CDEFS_H is not set correctly" 1>&2; exit 1 ;; esac if $GL_GENERATE_GETOPT_CDEFS_H; then GL_GENERATE_GETOPT_CDEFS_H_TRUE= GL_GENERATE_GETOPT_CDEFS_H_FALSE='#' else GL_GENERATE_GETOPT_CDEFS_H_TRUE='#' GL_GENERATE_GETOPT_CDEFS_H_FALSE= fi : if test -z "${GL_GENERATE_GETOPT_CDEFS_H_TRUE}" && test -z "${GL_GENERATE_GETOPT_CDEFS_H_FALSE}"; then GL_GENERATE_GETOPT_CDEFS_H_TRUE='#' GL_GENERATE_GETOPT_CDEFS_H_FALSE='#' fi if test $REPLACE_GETOPT = 1; then GL_COND_OBJ_GETOPT_TRUE= GL_COND_OBJ_GETOPT_FALSE='#' else GL_COND_OBJ_GETOPT_TRUE='#' GL_COND_OBJ_GETOPT_FALSE= fi : if test -z "${GL_COND_OBJ_GETOPT_TRUE}" && test -z "${GL_COND_OBJ_GETOPT_FALSE}"; then GL_COND_OBJ_GETOPT_TRUE='#' GL_COND_OBJ_GETOPT_FALSE='#' fi if test -z "$GL_COND_OBJ_GETOPT_TRUE"; then : GL_GNULIB_UNISTD_H_GETOPT=1 fi GL_GNULIB_GETOPT_POSIX=1 printf "%s\n" "#define GNULIB_TEST_GETOPT_POSIX 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for getprogname" >&5 printf %s "checking for getprogname... " >&6; } if test ${gl_cv_onwards_func_getprogname+y} then : printf %s "(cached) " >&6 else $as_nop exec 9>&6 6>/dev/null case "$host_os" in linux*-android*) ac_fn_check_decl "$LINENO" "getprogname" "ac_cv_have_decl_getprogname" "#include <stdlib.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_getprogname" = xyes then : fi if test $ac_cv_have_decl_getprogname = yes; then ac_fn_c_check_func "$LINENO" "getprogname" "ac_cv_func_getprogname" if test "x$ac_cv_func_getprogname" = xyes then : fi if test $ac_cv_func_getprogname = yes; then gl_cv_onwards_func_getprogname=yes else gl_cv_onwards_func_getprogname='future OS version' fi else gl_cv_onwards_func_getprogname='future OS version' fi ;; *) ac_fn_c_check_func "$LINENO" "getprogname" "ac_cv_func_getprogname" if test "x$ac_cv_func_getprogname" = xyes then : fi gl_cv_onwards_func_getprogname=$ac_cv_func_getprogname ;; esac exec 6>&9 9>&- fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_onwards_func_getprogname" >&5 printf "%s\n" "$gl_cv_onwards_func_getprogname" >&6; } case "$gl_cv_onwards_func_getprogname" in future*) ac_cv_func_getprogname=no ;; *) ac_cv_func_getprogname=$gl_cv_onwards_func_getprogname ;; esac if test $ac_cv_func_getprogname = yes; then printf "%s\n" "#define HAVE_GETPROGNAME 1" >>confdefs.h fi if test $ac_cv_func_getprogname = no; then HAVE_GETPROGNAME=0 case "$gl_cv_onwards_func_getprogname" in future*) REPLACE_GETPROGNAME=1 ;; esac fi ac_fn_check_decl "$LINENO" "program_invocation_name" "ac_cv_have_decl_program_invocation_name" "#include <errno.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_program_invocation_name" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_PROGRAM_INVOCATION_NAME $ac_have_decl" >>confdefs.h if test $ac_have_decl = 1 then : else $as_nop HAVE_DECL_PROGRAM_INVOCATION_NAME=0 fi if test $HAVE_GETPROGNAME = 0 || test $REPLACE_GETPROGNAME = 1; then GL_COND_OBJ_GETPROGNAME_TRUE= GL_COND_OBJ_GETPROGNAME_FALSE='#' else GL_COND_OBJ_GETPROGNAME_TRUE='#' GL_COND_OBJ_GETPROGNAME_FALSE= fi : if test -z "${GL_COND_OBJ_GETPROGNAME_TRUE}" && test -z "${GL_COND_OBJ_GETPROGNAME_FALSE}"; then GL_COND_OBJ_GETPROGNAME_TRUE='#' GL_COND_OBJ_GETPROGNAME_FALSE='#' fi if test -z "$GL_COND_OBJ_GETPROGNAME_TRUE"; then : ac_found=0 ac_fn_check_decl "$LINENO" "program_invocation_name" "ac_cv_have_decl_program_invocation_name" "#include <errno.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_program_invocation_name" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_PROGRAM_INVOCATION_NAME $ac_have_decl" >>confdefs.h if test $ac_have_decl = 1 then : ac_found=1 fi ac_fn_check_decl "$LINENO" "program_invocation_short_name" "ac_cv_have_decl_program_invocation_short_name" "#include <errno.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_program_invocation_short_name" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME $ac_have_decl" >>confdefs.h if test $ac_have_decl = 1 then : ac_found=1 fi ac_fn_check_decl "$LINENO" "__argv" "ac_cv_have_decl___argv" "#include <stdlib.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl___argv" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL___ARGV $ac_have_decl" >>confdefs.h if test $ac_have_decl = 1 then : ac_found=1 fi # Incur the cost of this test only if none of the above worked. if test $ac_found = 0; then # On OpenBSD 5.1, using the global __progname variable appears to be # the only way to implement getprogname. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether __progname is defined in default libraries" >&5 printf %s "checking whether __progname is defined in default libraries... " >&6; } if test ${gl_cv_var___progname+y} then : printf %s "(cached) " >&6 else $as_nop gl_cv_var___progname= cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern char *__progname; int main (void) { return *__progname; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_cv_var___progname=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_var___progname" >&5 printf "%s\n" "$gl_cv_var___progname" >&6; } if test "$gl_cv_var___progname" = yes; then printf "%s\n" "#define HAVE_VAR___PROGNAME 1" >>confdefs.h fi fi fi GL_GNULIB_GETPROGNAME=1 printf "%s\n" "#define GNULIB_TEST_GETPROGNAME 1" >>confdefs.h HARD_LOCALE_LIB="$SETLOCALE_NULL_LIB" LIB_HARD_LOCALE="$HARD_LOCALE_LIB" : : : : : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports the __inline keyword" >&5 printf %s "checking whether the compiler supports the __inline keyword... " >&6; } if test ${gl_cv_c___inline+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ typedef int foo_t; static __inline foo_t foo (void) { return 0; } int main (void) { return foo (); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_c___inline=yes else $as_nop gl_cv_c___inline=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_c___inline" >&5 printf "%s\n" "$gl_cv_c___inline" >&6; } if test $gl_cv_c___inline = yes; then printf "%s\n" "#define HAVE___INLINE 1" >>confdefs.h fi case "$GL_GENERATE_LIMITS_H" in false) LIMITS_H='' ;; true) if test -z "$LIMITS_H"; then LIMITS_H="${gl_source_base_prefix}limits.h" fi ;; *) echo "*** GL_GENERATE_LIMITS_H is not set correctly" 1>&2; exit 1 ;; esac if $GL_GENERATE_LIMITS_H; then GL_GENERATE_LIMITS_H_TRUE= GL_GENERATE_LIMITS_H_FALSE='#' else GL_GENERATE_LIMITS_H_TRUE='#' GL_GENERATE_LIMITS_H_FALSE= fi : if test -z "${GL_GENERATE_LIMITS_H_TRUE}" && test -z "${GL_GENERATE_LIMITS_H_FALSE}"; then GL_GENERATE_LIMITS_H_TRUE='#' GL_GENERATE_LIMITS_H_FALSE='#' fi LOCALCHARSET_TESTS_ENVIRONMENT= if test $REPLACE_STRUCT_LCONV = 1; then REPLACE_LOCALECONV=1 fi if test $REPLACE_LOCALECONV = 0; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether localeconv works" >&5 printf %s "checking whether localeconv works... " >&6; } if test ${gl_cv_func_localeconv_works+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_localeconv_works="guessing yes" ;; # Guess yes on musl systems. *-musl* | midipix*) gl_cv_func_localeconv_works="guessing yes" ;; # Guess no on native Windows. mingw*) gl_cv_func_localeconv_works="guessing no" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_localeconv_works="$gl_cross_guess_normal" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> #include <limits.h> int main () { struct lconv *l = localeconv (); return l->frac_digits != CHAR_MAX && l->frac_digits < 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_localeconv_works=yes else $as_nop gl_cv_func_localeconv_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 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_localeconv_works" >&5 printf "%s\n" "$gl_cv_func_localeconv_works" >&6; } case "$gl_cv_func_localeconv_works" in *yes) ;; *) REPLACE_LOCALECONV=1 ;; esac fi if test $REPLACE_LOCALECONV = 1; then GL_COND_OBJ_LOCALECONV_TRUE= GL_COND_OBJ_LOCALECONV_FALSE='#' else GL_COND_OBJ_LOCALECONV_TRUE='#' GL_COND_OBJ_LOCALECONV_FALSE= fi : if test -z "${GL_COND_OBJ_LOCALECONV_TRUE}" && test -z "${GL_COND_OBJ_LOCALECONV_FALSE}"; then GL_COND_OBJ_LOCALECONV_TRUE='#' GL_COND_OBJ_LOCALECONV_FALSE='#' fi if test -z "$GL_COND_OBJ_LOCALECONV_TRUE"; then : ac_fn_c_check_member "$LINENO" "struct lconv" "decimal_point" "ac_cv_member_struct_lconv_decimal_point" "#include <locale.h> " if test "x$ac_cv_member_struct_lconv_decimal_point" = xyes then : printf "%s\n" "#define HAVE_STRUCT_LCONV_DECIMAL_POINT 1" >>confdefs.h fi ac_fn_c_check_member "$LINENO" "struct lconv" "int_p_cs_precedes" "ac_cv_member_struct_lconv_int_p_cs_precedes" "#include <locale.h> " if test "x$ac_cv_member_struct_lconv_int_p_cs_precedes" = xyes then : printf "%s\n" "#define HAVE_STRUCT_LCONV_INT_P_CS_PRECEDES 1" >>confdefs.h fi fi GL_GNULIB_LOCALECONV=1 printf "%s\n" "#define GNULIB_TEST_LOCALECONV 1" >>confdefs.h if test "$gl_threads_api" = posix; then # OSF/1 4.0 and Mac OS X 10.1 lack the pthread_rwlock_t type and the # pthread_rwlock_* functions. has_rwlock=false ac_fn_c_check_type "$LINENO" "pthread_rwlock_t" "ac_cv_type_pthread_rwlock_t" "#include <pthread.h> " if test "x$ac_cv_type_pthread_rwlock_t" = xyes then : has_rwlock=true printf "%s\n" "#define HAVE_PTHREAD_RWLOCK 1" >>confdefs.h fi if $has_rwlock; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether pthread_rwlock_rdlock prefers a writer to a reader" >&5 printf %s "checking whether pthread_rwlock_rdlock prefers a writer to a reader... " >&6; } if test ${gl_cv_pthread_rwlock_rdlock_prefer_writer+y} then : printf %s "(cached) " >&6 else $as_nop save_LIBS="$LIBS" LIBS="$LIBS $LIBMULTITHREAD" if test "$cross_compiling" = yes then : case "$host_os" in # Guess no on glibc systems. *-gnu* | gnu*) gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing no" ;; # Guess no on musl systems. *-musl* | midipix*) gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing no" ;; # Guess no on bionic systems. *-android*) gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing no" ;; # Guess yes on native Windows with the mingw-w64 winpthreads library. # Guess no on native Windows with the gnulib windows-rwlock module. mingw*) if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing yes" else gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing no" fi ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_pthread_rwlock_rdlock_prefer_writer="$gl_cross_guess_normal" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <errno.h> #include <pthread.h> #include <stdlib.h> #include <unistd.h> #define SUCCEED() exit (0) #define FAILURE() exit (1) #define UNEXPECTED(n) (exit (10 + (n))) /* The main thread creates the waiting writer and the requesting reader threads in the default way; this guarantees that they have the same priority. We can reuse the main thread as first reader thread. */ static pthread_rwlock_t lock; static pthread_t reader1; static pthread_t writer; static pthread_t reader2; static pthread_t timer; /* Used to pass control from writer to reader2 and from reader2 to timer, as in a relay race. Passing control from one running thread to another running thread is most likely faster than to create the second thread. */ static pthread_mutex_t baton; static void * timer_func (void *ignored) { /* Step 13 (can be before or after step 12): The timer thread takes the baton, then waits a moment to make sure it can tell whether the second reader thread is blocked at step 12. */ if (pthread_mutex_lock (&baton)) UNEXPECTED (13); usleep (100000); /* By the time we get here, it's clear that the second reader thread is blocked at step 12. This is the desired behaviour. */ SUCCEED (); } static void * reader2_func (void *ignored) { int err; /* Step 8 (can be before or after step 7): The second reader thread takes the baton, then waits a moment to make sure the writer thread has reached step 7. */ if (pthread_mutex_lock (&baton)) UNEXPECTED (8); usleep (100000); /* Step 9: The second reader thread requests the lock. */ err = pthread_rwlock_tryrdlock (&lock); if (err == 0) FAILURE (); else if (err != EBUSY) UNEXPECTED (9); /* Step 10: Launch a timer, to test whether the next call blocks. */ if (pthread_create (&timer, NULL, timer_func, NULL)) UNEXPECTED (10); /* Step 11: Release the baton. */ if (pthread_mutex_unlock (&baton)) UNEXPECTED (11); /* Step 12: The second reader thread requests the lock. */ err = pthread_rwlock_rdlock (&lock); if (err == 0) FAILURE (); else UNEXPECTED (12); } static void * writer_func (void *ignored) { /* Step 4: Take the baton, so that the second reader thread does not go ahead too early. */ if (pthread_mutex_lock (&baton)) UNEXPECTED (4); /* Step 5: Create the second reader thread. */ if (pthread_create (&reader2, NULL, reader2_func, NULL)) UNEXPECTED (5); /* Step 6: Release the baton. */ if (pthread_mutex_unlock (&baton)) UNEXPECTED (6); /* Step 7: The writer thread requests the lock. */ if (pthread_rwlock_wrlock (&lock)) UNEXPECTED (7); return NULL; } int main () { reader1 = pthread_self (); /* Step 1: The main thread initializes the lock and the baton. */ if (pthread_rwlock_init (&lock, NULL)) UNEXPECTED (1); if (pthread_mutex_init (&baton, NULL)) UNEXPECTED (1); /* Step 2: The main thread acquires the lock as a reader. */ if (pthread_rwlock_rdlock (&lock)) UNEXPECTED (2); /* Step 3: Create the writer thread. */ if (pthread_create (&writer, NULL, writer_func, NULL)) UNEXPECTED (3); /* Job done. Go to sleep. */ for (;;) { sleep (1); } } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_pthread_rwlock_rdlock_prefer_writer=yes else $as_nop gl_cv_pthread_rwlock_rdlock_prefer_writer=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="$save_LIBS" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_pthread_rwlock_rdlock_prefer_writer" >&5 printf "%s\n" "$gl_cv_pthread_rwlock_rdlock_prefer_writer" >&6; } case "$gl_cv_pthread_rwlock_rdlock_prefer_writer" in *yes) printf "%s\n" "#define HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER 1" >>confdefs.h ;; esac fi # glibc defines PTHREAD_MUTEX_RECURSIVE as enum, not as a macro. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <pthread.h> int main (void) { #if __FreeBSD__ == 4 error "No, in FreeBSD 4.0 recursive mutexes actually don't work." #elif (defined __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ \ && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 1070) error "No, in Mac OS X < 10.7 recursive mutexes actually don't work." #else int x = (int)PTHREAD_MUTEX_RECURSIVE; return !x; #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : printf "%s\n" "#define HAVE_PTHREAD_MUTEX_RECURSIVE 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi : printf "%s\n" "#define GNULIB_LOCK 1" >>confdefs.h REPLACE_MALLOC_FOR_MALLOC_GNU="$REPLACE_MALLOC_FOR_MALLOC_POSIX" if test $REPLACE_MALLOC_FOR_MALLOC_GNU = 0; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether malloc (0) returns nonnull" >&5 printf %s "checking whether malloc (0) returns nonnull... " >&6; } if test ${ac_cv_func_malloc_0_nonnull+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on platforms where we know the result. *-gnu* | freebsd* | netbsd* | openbsd* | bitrig* \ | gnu* | *-musl* | midipix* | midnightbsd* \ | hpux* | solaris* | cygwin* | mingw* | msys* ) ac_cv_func_malloc_0_nonnull="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) ac_cv_func_malloc_0_nonnull="$gl_cross_guess_normal" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdlib.h> int main (void) { void *p = malloc (0); int result = !p; free (p); return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : ac_cv_func_malloc_0_nonnull=yes else $as_nop ac_cv_func_malloc_0_nonnull=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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_malloc_0_nonnull" >&5 printf "%s\n" "$ac_cv_func_malloc_0_nonnull" >&6; } case $ac_cv_func_malloc_0_nonnull in #( *yes) : ;; #( *) : REPLACE_MALLOC_FOR_MALLOC_GNU=1 ;; esac fi if test $REPLACE_MALLOC_FOR_MALLOC_GNU = 1; then gl_LIBOBJS="$gl_LIBOBJS malloc.$ac_objext" fi GL_GNULIB_MALLOC_GNU=1 printf "%s\n" "#define GNULIB_TEST_MALLOC_GNU 1" >>confdefs.h if test $REPLACE_MALLOC_FOR_MALLOC_POSIX = 1; then gl_LIBOBJS="$gl_LIBOBJS malloc.$ac_objext" fi GL_GNULIB_MALLOC_POSIX=1 printf "%s\n" "#define GNULIB_TEST_MALLOC_POSIX 1" >>confdefs.h if test $ac_cv_func_mbrtowc = no; then HAVE_MBRTOWC=0 ac_fn_check_decl "$LINENO" "mbrtowc" "ac_cv_have_decl_mbrtowc" " #include <wchar.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_mbrtowc" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_MBRTOWC $ac_have_decl" >>confdefs.h if test $ac_cv_have_decl_mbrtowc = yes; then REPLACE_MBRTOWC=1 fi else if test $REPLACE_MBSTATE_T = 1; then REPLACE_MBRTOWC=1 else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc handles a NULL pwc argument" >&5 printf %s "checking whether mbrtowc handles a NULL pwc argument... " >&6; } if test ${gl_cv_func_mbrtowc_null_arg1+y} then : printf %s "(cached) " >&6 else $as_nop case "$host_os" in # Guess no on Solaris. solaris*) gl_cv_func_mbrtowc_null_arg1="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbrtowc_null_arg1="guessing yes" ;; esac if test $LOCALE_FR_UTF8 != none; then if test "$cross_compiling" = yes then : : else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> #include <stdlib.h> #include <string.h> #include <wchar.h> int main () { int result = 0; if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) { char input[] = "\303\237er"; mbstate_t state; wchar_t wc; size_t ret; memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input, 5, &state); if (ret != 2) result |= 1; if (!mbsinit (&state)) result |= 2; memset (&state, '\0', sizeof (mbstate_t)); ret = mbrtowc (NULL, input, 5, &state); if (ret != 2) /* Solaris 7 fails here: ret is -1. */ result |= 4; if (!mbsinit (&state)) result |= 8; } return result; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_mbrtowc_null_arg1=yes else $as_nop gl_cv_func_mbrtowc_null_arg1=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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_null_arg1" >&5 printf "%s\n" "$gl_cv_func_mbrtowc_null_arg1" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc handles a NULL string argument" >&5 printf %s "checking whether mbrtowc handles a NULL string argument... " >&6; } if test ${gl_cv_func_mbrtowc_null_arg2+y} then : printf %s "(cached) " >&6 else $as_nop case "$host_os" in # Guess no on OSF/1. osf*) gl_cv_func_mbrtowc_null_arg2="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbrtowc_null_arg2="guessing yes" ;; esac if test $LOCALE_FR_UTF8 != none; then if test "$cross_compiling" = yes then : : else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> #include <string.h> #include <wchar.h> int main () { if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) { mbstate_t state; wchar_t wc; int ret; memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; mbrtowc (&wc, NULL, 5, &state); /* Check that wc was not modified. */ if (wc != (wchar_t) 0xBADFACE) return 2; } return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_mbrtowc_null_arg2=yes else $as_nop gl_cv_func_mbrtowc_null_arg2=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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_null_arg2" >&5 printf "%s\n" "$gl_cv_func_mbrtowc_null_arg2" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc has a correct return value" >&5 printf %s "checking whether mbrtowc has a correct return value... " >&6; } if test ${gl_cv_func_mbrtowc_retval+y} then : printf %s "(cached) " >&6 else $as_nop case "$host_os" in # Guess no on HP-UX, Solaris, native Windows. hpux* | solaris* | mingw*) gl_cv_func_mbrtowc_retval="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbrtowc_retval="guessing yes" ;; esac if test $LOCALE_FR_UTF8 != none || test $LOCALE_JA != none \ || { case "$host_os" in mingw*) true;; *) false;; esac; }; then if test "$cross_compiling" = yes then : : else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> #include <string.h> #include <wchar.h> int main () { int result = 0; int found_some_locale = 0; /* This fails on Solaris. */ if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) { char input[] = "B\303\274\303\237er"; /* "Büßer" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) { input[1] = '\0'; if (mbrtowc (&wc, input + 2, 5, &state) != 1) result |= 1; } found_some_locale = 1; } /* This fails on HP-UX 11.11. */ if (setlocale (LC_ALL, "$LOCALE_JA") != NULL) { char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) { input[1] = '\0'; if (mbrtowc (&wc, input + 2, 5, &state) != 2) result |= 2; } found_some_locale = 1; } /* This fails on native Windows. */ if (setlocale (LC_ALL, "Japanese_Japan.932") != NULL) { char input[] = "<\223\372\226\173\214\352>"; /* "<日本語>" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 3, 1, &state) == (size_t)(-2)) { input[3] = '\0'; if (mbrtowc (&wc, input + 4, 4, &state) != 1) result |= 4; } found_some_locale = 1; } if (setlocale (LC_ALL, "Chinese_Taiwan.950") != NULL) { char input[] = "<\244\351\245\273\273\171>"; /* "<日本語>" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 3, 1, &state) == (size_t)(-2)) { input[3] = '\0'; if (mbrtowc (&wc, input + 4, 4, &state) != 1) result |= 8; } found_some_locale = 1; } if (setlocale (LC_ALL, "Chinese_China.936") != NULL) { char input[] = "<\310\325\261\276\325\132>"; /* "<日本語>" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 3, 1, &state) == (size_t)(-2)) { input[3] = '\0'; if (mbrtowc (&wc, input + 4, 4, &state) != 1) result |= 16; } found_some_locale = 1; } return (found_some_locale ? result : 77); } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_mbrtowc_retval=yes else $as_nop if test $? != 77; then gl_cv_func_mbrtowc_retval=no fi 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_retval" >&5 printf "%s\n" "$gl_cv_func_mbrtowc_retval" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc returns 0 when parsing a NUL character" >&5 printf %s "checking whether mbrtowc returns 0 when parsing a NUL character... " >&6; } if test ${gl_cv_func_mbrtowc_nul_retval+y} then : printf %s "(cached) " >&6 else $as_nop case "$host_os" in # Guess no on Solaris 8 and 9. solaris2.[89]) gl_cv_func_mbrtowc_nul_retval="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbrtowc_nul_retval="guessing yes" ;; esac if test $LOCALE_ZH_CN != none; then if test "$cross_compiling" = yes then : : else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> #include <string.h> #include <wchar.h> int main () { /* This fails on Solaris 8 and 9. */ if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) { mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, "", 1, &state) != 0) return 2; } return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_mbrtowc_nul_retval=yes else $as_nop gl_cv_func_mbrtowc_nul_retval=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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_nul_retval" >&5 printf "%s\n" "$gl_cv_func_mbrtowc_nul_retval" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc stores incomplete characters" >&5 printf %s "checking whether mbrtowc stores incomplete characters... " >&6; } if test ${gl_cv_func_mbrtowc_stores_incomplete+y} then : printf %s "(cached) " >&6 else $as_nop case "$host_os" in # Guess yes on native Windows. mingw*) gl_cv_func_mbrtowc_stores_incomplete="guessing yes" ;; *) gl_cv_func_mbrtowc_stores_incomplete="guessing no" ;; esac case "$host_os" in mingw*) if test "$cross_compiling" = yes then : : else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> #include <string.h> #include <wchar.h> int main () { int result = 0; if (setlocale (LC_ALL, "French_France.65001") != NULL) { wchar_t wc = (wchar_t) 0xBADFACE; mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, "\303", 1, &state) == (size_t)(-2) && wc != (wchar_t) 0xBADFACE) result |= 1; } if (setlocale (LC_ALL, "Japanese_Japan.932") != NULL) { wchar_t wc = (wchar_t) 0xBADFACE; mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, "\226", 1, &state) == (size_t)(-2) && wc != (wchar_t) 0xBADFACE) result |= 2; } if (setlocale (LC_ALL, "Chinese_Taiwan.950") != NULL) { wchar_t wc = (wchar_t) 0xBADFACE; mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, "\245", 1, &state) == (size_t)(-2) && wc != (wchar_t) 0xBADFACE) result |= 4; } if (setlocale (LC_ALL, "Chinese_China.936") != NULL) { wchar_t wc = (wchar_t) 0xBADFACE; mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, "\261", 1, &state) == (size_t)(-2) && wc != (wchar_t) 0xBADFACE) result |= 8; } return result; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_mbrtowc_stores_incomplete=no else $as_nop gl_cv_func_mbrtowc_stores_incomplete=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi ;; *) if test $LOCALE_FR_UTF8 != none; then if test "$cross_compiling" = yes then : : else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> #include <string.h> #include <wchar.h> int main () { if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) { wchar_t wc = (wchar_t) 0xBADFACE; mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, "\303", 1, &state) == (size_t)(-2) && wc != (wchar_t) 0xBADFACE) return 1; } return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_mbrtowc_stores_incomplete=no else $as_nop gl_cv_func_mbrtowc_stores_incomplete=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_stores_incomplete" >&5 printf "%s\n" "$gl_cv_func_mbrtowc_stores_incomplete" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc works on empty input" >&5 printf %s "checking whether mbrtowc works on empty input... " >&6; } if test ${gl_cv_func_mbrtowc_empty_input+y} then : printf %s "(cached) " >&6 else $as_nop case "$host_os" in # Guess no on AIX and glibc systems. aix* | *-gnu* | gnu*) gl_cv_func_mbrtowc_empty_input="guessing no" ;; # Guess yes on native Windows. mingw*) gl_cv_func_mbrtowc_empty_input="guessing yes" ;; *) gl_cv_func_mbrtowc_empty_input="guessing yes" ;; esac if test "$cross_compiling" = yes then : : else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <wchar.h> static wchar_t wc; static mbstate_t mbs; int main (void) { return mbrtowc (&wc, "", 0, &mbs) != (size_t) -2; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_mbrtowc_empty_input=yes else $as_nop gl_cv_func_mbrtowc_empty_input=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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_empty_input" >&5 printf "%s\n" "$gl_cv_func_mbrtowc_empty_input" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C locale is free of encoding errors" >&5 printf %s "checking whether the C locale is free of encoding errors... " >&6; } if test ${gl_cv_func_mbrtowc_C_locale_sans_EILSEQ+y} then : printf %s "(cached) " >&6 else $as_nop gl_cv_func_mbrtowc_C_locale_sans_EILSEQ="$gl_cross_guess_normal" if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on native Windows. mingw*) gl_cv_func_mbrtowc_C_locale_sans_EILSEQ="guessing yes" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <limits.h> #include <locale.h> #include <wchar.h> int main (void) { int i; char *locale = setlocale (LC_ALL, "C"); if (! locale) return 2; for (i = CHAR_MIN; i <= CHAR_MAX; i++) { char c = i; wchar_t wc; mbstate_t mbs = { 0, }; size_t ss = mbrtowc (&wc, &c, 1, &mbs); if (1 < ss) return 3; } return 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_mbrtowc_C_locale_sans_EILSEQ=yes else $as_nop gl_cv_func_mbrtowc_C_locale_sans_EILSEQ=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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_C_locale_sans_EILSEQ" >&5 printf "%s\n" "$gl_cv_func_mbrtowc_C_locale_sans_EILSEQ" >&6; } case "$gl_cv_func_mbrtowc_null_arg1" in *yes) ;; *) printf "%s\n" "#define MBRTOWC_NULL_ARG1_BUG 1" >>confdefs.h REPLACE_MBRTOWC=1 ;; esac case "$gl_cv_func_mbrtowc_null_arg2" in *yes) ;; *) printf "%s\n" "#define MBRTOWC_NULL_ARG2_BUG 1" >>confdefs.h REPLACE_MBRTOWC=1 ;; esac case "$gl_cv_func_mbrtowc_retval" in *yes) ;; *) printf "%s\n" "#define MBRTOWC_RETVAL_BUG 1" >>confdefs.h REPLACE_MBRTOWC=1 ;; esac case "$gl_cv_func_mbrtowc_nul_retval" in *yes) ;; *) printf "%s\n" "#define MBRTOWC_NUL_RETVAL_BUG 1" >>confdefs.h REPLACE_MBRTOWC=1 ;; esac case "$gl_cv_func_mbrtowc_stores_incomplete" in *no) ;; *) printf "%s\n" "#define MBRTOWC_STORES_INCOMPLETE_BUG 1" >>confdefs.h REPLACE_MBRTOWC=1 ;; esac case "$gl_cv_func_mbrtowc_empty_input" in *yes) ;; *) printf "%s\n" "#define MBRTOWC_EMPTY_INPUT_BUG 1" >>confdefs.h REPLACE_MBRTOWC=1 ;; esac case "$gl_cv_func_mbrtowc_C_locale_sans_EILSEQ" in *yes) ;; *) printf "%s\n" "#define MBRTOWC_IN_C_LOCALE_MAYBE_EILSEQ 1" >>confdefs.h REPLACE_MBRTOWC=1 ;; esac fi fi if test $REPLACE_MBSTATE_T = 1; then case "$host_os" in mingw*) MBRTOWC_LIB= ;; *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether imported symbols can be declared weak" >&5 printf %s "checking whether imported symbols can be declared weak... " >&6; } if test ${gl_cv_have_weak+y} then : printf %s "(cached) " >&6 else $as_nop case "$host_os" in cygwin* | mingw*) gl_cv_have_weak="guessing no" ;; *) gl_cv_have_weak=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern void xyzzy (); #pragma weak xyzzy int main (void) { xyzzy(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_cv_have_weak=maybe fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test $gl_cv_have_weak = maybe; then if test "$cross_compiling" = yes then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __ELF__ Extensible Linking Format #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Extensible Linking Format" >/dev/null 2>&1 then : gl_cv_have_weak="guessing yes" else $as_nop gl_cv_have_weak="guessing no" fi rm -rf conftest* else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdio.h> #pragma weak fputs int main () { return (fputs == NULL); } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_have_weak=yes else $as_nop gl_cv_have_weak=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 ;; esac case " $LDFLAGS " in *" -static "*) gl_cv_have_weak=no ;; esac case "$gl_cv_have_weak" in *yes) case "$host_os" in freebsd* | dragonfly* | midnightbsd*) : > conftest1.c $CC $CPPFLAGS $CFLAGS $LDFLAGS -fPIC -shared -o libempty.so conftest1.c -lpthread >&5 2>&1 cat <<EOF > conftest2.c #include <pthread.h> #pragma weak pthread_mutexattr_gettype int main () { return (pthread_mutexattr_gettype != NULL); } EOF $CC $CPPFLAGS $CFLAGS $LDFLAGS -o conftest conftest2.c libempty.so >&5 2>&1 \ || gl_cv_have_weak=no rm -f conftest1.c libempty.so conftest2.c conftest ;; esac ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_have_weak" >&5 printf "%s\n" "$gl_cv_have_weak" >&6; } case "$gl_cv_have_weak" in *yes) printf "%s\n" "#define HAVE_WEAK_SYMBOLS 1" >>confdefs.h ;; esac case "$gl_cv_have_weak" in *yes) MBRTOWC_LIB= ;; *) MBRTOWC_LIB="$LIBPTHREAD" ;; esac ;; esac else MBRTOWC_LIB= fi LIB_MBRTOWC="$MBRTOWC_LIB" if test $HAVE_MBRTOWC = 0 || test $REPLACE_MBRTOWC = 1; then GL_COND_OBJ_MBRTOWC_TRUE= GL_COND_OBJ_MBRTOWC_FALSE='#' else GL_COND_OBJ_MBRTOWC_TRUE='#' GL_COND_OBJ_MBRTOWC_FALSE= fi : if test -z "${GL_COND_OBJ_MBRTOWC_TRUE}" && test -z "${GL_COND_OBJ_MBRTOWC_FALSE}"; then GL_COND_OBJ_MBRTOWC_TRUE='#' GL_COND_OBJ_MBRTOWC_FALSE='#' fi if test -z "$GL_COND_OBJ_MBRTOWC_TRUE"; then : if test $REPLACE_MBSTATE_T = 1; then gl_LIBOBJS="$gl_LIBOBJS lc-charset-dispatch.$ac_objext" gl_LIBOBJS="$gl_LIBOBJS mbtowc-lock.$ac_objext" CFLAG_VISIBILITY= HAVE_VISIBILITY=0 if test -n "$GCC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the -Werror option is usable" >&5 printf %s "checking whether the -Werror option is usable... " >&6; } if test ${gl_cv_cc_vis_werror+y} then : printf %s "(cached) " >&6 else $as_nop gl_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Werror" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_cc_vis_werror=yes else $as_nop gl_cv_cc_vis_werror=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS="$gl_save_CFLAGS" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_vis_werror" >&5 printf "%s\n" "$gl_cv_cc_vis_werror" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for simple visibility declarations" >&5 printf %s "checking for simple visibility declarations... " >&6; } if test ${gl_cv_cc_visibility+y} then : printf %s "(cached) " >&6 else $as_nop gl_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -fvisibility=hidden" if test $gl_cv_cc_vis_werror = yes; then CFLAGS="$CFLAGS -Werror" fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern __attribute__((__visibility__("hidden"))) int hiddenvar; extern __attribute__((__visibility__("default"))) int exportedvar; extern __attribute__((__visibility__("hidden"))) int hiddenfunc (void); extern __attribute__((__visibility__("default"))) int exportedfunc (void); void dummyfunc (void); int hiddenvar; int exportedvar; int hiddenfunc (void) { return 51; } int exportedfunc (void) { return 1225736919; } void dummyfunc (void) {} int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_cc_visibility=yes else $as_nop gl_cv_cc_visibility=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS="$gl_save_CFLAGS" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_visibility" >&5 printf "%s\n" "$gl_cv_cc_visibility" >&6; } if test $gl_cv_cc_visibility = yes; then CFLAG_VISIBILITY="-fvisibility=hidden" HAVE_VISIBILITY=1 fi fi printf "%s\n" "#define HAVE_VISIBILITY $HAVE_VISIBILITY" >>confdefs.h fi : fi GL_GNULIB_MBRTOWC=1 printf "%s\n" "#define GNULIB_TEST_MBRTOWC 1" >>confdefs.h if test $ac_cv_func_mbsinit = no; then HAVE_MBSINIT=0 ac_fn_check_decl "$LINENO" "mbsinit" "ac_cv_have_decl_mbsinit" " #include <wchar.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_mbsinit" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_MBSINIT $ac_have_decl" >>confdefs.h if test $ac_cv_have_decl_mbsinit = yes; then REPLACE_MBSINIT=1 fi else if test $REPLACE_MBSTATE_T = 1; then REPLACE_MBSINIT=1 else case "$host_os" in mingw*) REPLACE_MBSINIT=1 ;; esac fi fi if test $HAVE_MBSINIT = 0 || test $REPLACE_MBSINIT = 1; then GL_COND_OBJ_MBSINIT_TRUE= GL_COND_OBJ_MBSINIT_FALSE='#' else GL_COND_OBJ_MBSINIT_TRUE='#' GL_COND_OBJ_MBSINIT_FALSE= fi : if test -z "${GL_COND_OBJ_MBSINIT_TRUE}" && test -z "${GL_COND_OBJ_MBSINIT_FALSE}"; then GL_COND_OBJ_MBSINIT_TRUE='#' GL_COND_OBJ_MBSINIT_FALSE='#' fi if test -z "$GL_COND_OBJ_MBSINIT_TRUE"; then : : fi GL_GNULIB_MBSINIT=1 printf "%s\n" "#define GNULIB_TEST_MBSINIT 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for mbtowc" >&5 printf %s "checking for mbtowc... " >&6; } if test ${gl_cv_onwards_func_mbtowc+y} then : printf %s "(cached) " >&6 else $as_nop exec 9>&6 6>/dev/null case "$host_os" in linux*-android*) ac_fn_check_decl "$LINENO" "mbtowc" "ac_cv_have_decl_mbtowc" "#include <stdlib.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_mbtowc" = xyes then : fi if test $ac_cv_have_decl_mbtowc = yes; then ac_fn_c_check_func "$LINENO" "mbtowc" "ac_cv_func_mbtowc" if test "x$ac_cv_func_mbtowc" = xyes then : fi if test $ac_cv_func_mbtowc = yes; then gl_cv_onwards_func_mbtowc=yes else gl_cv_onwards_func_mbtowc='future OS version' fi else gl_cv_onwards_func_mbtowc='future OS version' fi ;; *) ac_fn_c_check_func "$LINENO" "mbtowc" "ac_cv_func_mbtowc" if test "x$ac_cv_func_mbtowc" = xyes then : fi gl_cv_onwards_func_mbtowc=$ac_cv_func_mbtowc ;; esac exec 6>&9 9>&- fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_onwards_func_mbtowc" >&5 printf "%s\n" "$gl_cv_onwards_func_mbtowc" >&6; } case "$gl_cv_onwards_func_mbtowc" in future*) ac_cv_func_mbtowc=no ;; *) ac_cv_func_mbtowc=$gl_cv_onwards_func_mbtowc ;; esac if test $ac_cv_func_mbtowc = yes; then printf "%s\n" "#define HAVE_MBTOWC 1" >>confdefs.h fi if test $ac_cv_func_mbtowc = no; then HAVE_MBTOWC=0 case "$gl_cv_onwards_func_mbtowc" in future*) REPLACE_MBTOWC=1 ;; esac else if false; then REPLACE_MBTOWC=1 fi fi if test $HAVE_MBTOWC = 0 || test $REPLACE_MBTOWC = 1; then GL_COND_OBJ_MBTOWC_TRUE= GL_COND_OBJ_MBTOWC_FALSE='#' else GL_COND_OBJ_MBTOWC_TRUE='#' GL_COND_OBJ_MBTOWC_FALSE= fi : if test -z "${GL_COND_OBJ_MBTOWC_TRUE}" && test -z "${GL_COND_OBJ_MBTOWC_FALSE}"; then GL_COND_OBJ_MBTOWC_TRUE='#' GL_COND_OBJ_MBTOWC_FALSE='#' fi if test -z "$GL_COND_OBJ_MBTOWC_TRUE"; then : : fi GL_GNULIB_MBTOWC=1 printf "%s\n" "#define GNULIB_TEST_MBTOWC 1" >>confdefs.h REPLACE_MKTIME=0 if test "$gl_cv_func_working_mktime" != yes; then REPLACE_MKTIME=1 printf "%s\n" "#define NEED_MKTIME_WORKING 1" >>confdefs.h fi case "$host_os" in mingw*) REPLACE_MKTIME=1 printf "%s\n" "#define NEED_MKTIME_WINDOWS 1" >>confdefs.h ;; esac if test $REPLACE_MKTIME = 1; then gl_LIBOBJS="$gl_LIBOBJS mktime.$ac_objext" : fi GL_GNULIB_MKTIME=1 printf "%s\n" "#define GNULIB_TEST_MKTIME 1" >>confdefs.h WANT_MKTIME_INTERNAL=0 ac_fn_c_check_func "$LINENO" "__mktime_internal" "ac_cv_func___mktime_internal" if test "x$ac_cv_func___mktime_internal" = xyes then : printf "%s\n" "#define mktime_internal __mktime_internal" >>confdefs.h else $as_nop WANT_MKTIME_INTERNAL=1 printf "%s\n" "#define NEED_MKTIME_INTERNAL 1" >>confdefs.h fi if test $WANT_MKTIME_INTERNAL = 1; then gl_LIBOBJS="$gl_LIBOBJS mktime.$ac_objext" : fi if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then GL_COND_OBJ_MSVC_INVAL_TRUE= GL_COND_OBJ_MSVC_INVAL_FALSE='#' else GL_COND_OBJ_MSVC_INVAL_TRUE='#' GL_COND_OBJ_MSVC_INVAL_FALSE= fi : if test -z "${GL_COND_OBJ_MSVC_INVAL_TRUE}" && test -z "${GL_COND_OBJ_MSVC_INVAL_FALSE}"; then GL_COND_OBJ_MSVC_INVAL_TRUE='#' GL_COND_OBJ_MSVC_INVAL_FALSE='#' fi if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then GL_COND_OBJ_MSVC_NOTHROW_TRUE= GL_COND_OBJ_MSVC_NOTHROW_FALSE='#' else GL_COND_OBJ_MSVC_NOTHROW_TRUE='#' GL_COND_OBJ_MSVC_NOTHROW_FALSE= fi : if test -z "${GL_COND_OBJ_MSVC_NOTHROW_TRUE}" && test -z "${GL_COND_OBJ_MSVC_NOTHROW_FALSE}"; then GL_COND_OBJ_MSVC_NOTHROW_TRUE='#' GL_COND_OBJ_MSVC_NOTHROW_FALSE='#' fi printf "%s\n" "#define GNULIB_MSVC_NOTHROW 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for nl_langinfo" >&5 printf %s "checking for nl_langinfo... " >&6; } if test ${gl_cv_onwards_func_nl_langinfo+y} then : printf %s "(cached) " >&6 else $as_nop exec 9>&6 6>/dev/null case "$host_os" in linux*-android*) ac_fn_check_decl "$LINENO" "nl_langinfo" "ac_cv_have_decl_nl_langinfo" "#include <langinfo.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_nl_langinfo" = xyes then : fi if test $ac_cv_have_decl_nl_langinfo = yes; then ac_fn_c_check_func "$LINENO" "nl_langinfo" "ac_cv_func_nl_langinfo" if test "x$ac_cv_func_nl_langinfo" = xyes then : fi if test $ac_cv_func_nl_langinfo = yes; then gl_cv_onwards_func_nl_langinfo=yes else gl_cv_onwards_func_nl_langinfo='future OS version' fi else gl_cv_onwards_func_nl_langinfo='future OS version' fi ;; *) ac_fn_c_check_func "$LINENO" "nl_langinfo" "ac_cv_func_nl_langinfo" if test "x$ac_cv_func_nl_langinfo" = xyes then : fi gl_cv_onwards_func_nl_langinfo=$ac_cv_func_nl_langinfo ;; esac exec 6>&9 9>&- fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_onwards_func_nl_langinfo" >&5 printf "%s\n" "$gl_cv_onwards_func_nl_langinfo" >&6; } case "$gl_cv_onwards_func_nl_langinfo" in future*) ac_cv_func_nl_langinfo=no ;; *) ac_cv_func_nl_langinfo=$gl_cv_onwards_func_nl_langinfo ;; esac if test $ac_cv_func_nl_langinfo = yes; then printf "%s\n" "#define HAVE_NL_LANGINFO 1" >>confdefs.h fi if test $ac_cv_func_nl_langinfo = yes; then # On Irix 6.5, YESEXPR is defined, but nl_langinfo(YESEXPR) is broken. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether YESEXPR works" >&5 printf %s "checking whether YESEXPR works... " >&6; } if test ${gl_cv_func_nl_langinfo_yesexpr_works+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case "$host_os" in # Guess no on irix systems. irix*) gl_cv_func_nl_langinfo_yesexpr_works="guessing no";; # Guess yes elsewhere. *) gl_cv_func_nl_langinfo_yesexpr_works="guessing yes";; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <langinfo.h> int main (void) { return !*nl_langinfo(YESEXPR); ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_nl_langinfo_yesexpr_works=yes else $as_nop gl_cv_func_nl_langinfo_yesexpr_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 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_nl_langinfo_yesexpr_works" >&5 printf "%s\n" "$gl_cv_func_nl_langinfo_yesexpr_works" >&6; } case $gl_cv_func_nl_langinfo_yesexpr_works in *yes) FUNC_NL_LANGINFO_YESEXPR_WORKS=1 ;; *) FUNC_NL_LANGINFO_YESEXPR_WORKS=0 ;; esac printf "%s\n" "#define FUNC_NL_LANGINFO_YESEXPR_WORKS $FUNC_NL_LANGINFO_YESEXPR_WORKS" >>confdefs.h # On Solaris 10 and Solaris 11.3, nl_langinfo is not multithread-safe. case "$host_os" in solaris*) NL_LANGINFO_MTSAFE=0 ;; *) NL_LANGINFO_MTSAFE=1 ;; esac printf "%s\n" "#define NL_LANGINFO_MTSAFE $NL_LANGINFO_MTSAFE" >>confdefs.h if test $HAVE_LANGINFO_CODESET = 1 \ && test $HAVE_LANGINFO_T_FMT_AMPM = 1 \ && test $HAVE_LANGINFO_ALTMON = 1 \ && test $HAVE_LANGINFO_ERA = 1 \ && test $FUNC_NL_LANGINFO_YESEXPR_WORKS = 1 \ && test $NL_LANGINFO_MTSAFE = 1; then : else REPLACE_NL_LANGINFO=1 printf "%s\n" "#define REPLACE_NL_LANGINFO 1" >>confdefs.h fi else HAVE_NL_LANGINFO=0 case "$gl_cv_onwards_func_nl_langinfo" in future*) REPLACE_NL_LANGINFO=1 ;; esac fi if test $HAVE_NL_LANGINFO = 0 || test $HAVE_LANGINFO_CODESET = 0; then LIB_NL_LANGINFO="$SETLOCALE_NULL_LIB" else LIB_NL_LANGINFO= fi if test $HAVE_NL_LANGINFO = 0 || test $REPLACE_NL_LANGINFO = 1; then GL_COND_OBJ_NL_LANGINFO_TRUE= GL_COND_OBJ_NL_LANGINFO_FALSE='#' else GL_COND_OBJ_NL_LANGINFO_TRUE='#' GL_COND_OBJ_NL_LANGINFO_FALSE= fi : if test -z "${GL_COND_OBJ_NL_LANGINFO_TRUE}" && test -z "${GL_COND_OBJ_NL_LANGINFO_FALSE}"; then GL_COND_OBJ_NL_LANGINFO_TRUE='#' GL_COND_OBJ_NL_LANGINFO_FALSE='#' fi if test $REPLACE_NL_LANGINFO = 1 && test $NL_LANGINFO_MTSAFE = 0; then GL_COND_OBJ_NL_LANGINFO_LOCK_TRUE= GL_COND_OBJ_NL_LANGINFO_LOCK_FALSE='#' else GL_COND_OBJ_NL_LANGINFO_LOCK_TRUE='#' GL_COND_OBJ_NL_LANGINFO_LOCK_FALSE= fi : if test -z "${GL_COND_OBJ_NL_LANGINFO_LOCK_TRUE}" && test -z "${GL_COND_OBJ_NL_LANGINFO_LOCK_FALSE}"; then GL_COND_OBJ_NL_LANGINFO_LOCK_TRUE='#' GL_COND_OBJ_NL_LANGINFO_LOCK_FALSE='#' fi if test $REPLACE_NL_LANGINFO = 1 && test $NL_LANGINFO_MTSAFE = 0; then CFLAG_VISIBILITY= HAVE_VISIBILITY=0 if test -n "$GCC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the -Werror option is usable" >&5 printf %s "checking whether the -Werror option is usable... " >&6; } if test ${gl_cv_cc_vis_werror+y} then : printf %s "(cached) " >&6 else $as_nop gl_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Werror" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_cc_vis_werror=yes else $as_nop gl_cv_cc_vis_werror=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS="$gl_save_CFLAGS" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_vis_werror" >&5 printf "%s\n" "$gl_cv_cc_vis_werror" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for simple visibility declarations" >&5 printf %s "checking for simple visibility declarations... " >&6; } if test ${gl_cv_cc_visibility+y} then : printf %s "(cached) " >&6 else $as_nop gl_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -fvisibility=hidden" if test $gl_cv_cc_vis_werror = yes; then CFLAGS="$CFLAGS -Werror" fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern __attribute__((__visibility__("hidden"))) int hiddenvar; extern __attribute__((__visibility__("default"))) int exportedvar; extern __attribute__((__visibility__("hidden"))) int hiddenfunc (void); extern __attribute__((__visibility__("default"))) int exportedfunc (void); void dummyfunc (void); int hiddenvar; int exportedvar; int hiddenfunc (void) { return 51; } int exportedfunc (void) { return 1225736919; } void dummyfunc (void) {} int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_cc_visibility=yes else $as_nop gl_cv_cc_visibility=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS="$gl_save_CFLAGS" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_visibility" >&5 printf "%s\n" "$gl_cv_cc_visibility" >&6; } if test $gl_cv_cc_visibility = yes; then CFLAG_VISIBILITY="-fvisibility=hidden" HAVE_VISIBILITY=1 fi fi printf "%s\n" "#define HAVE_VISIBILITY $HAVE_VISIBILITY" >>confdefs.h fi GL_GNULIB_NL_LANGINFO=1 printf "%s\n" "#define GNULIB_TEST_NL_LANGINFO 1" >>confdefs.h # This defines (or not) HAVE_TZNAME and HAVE_STRUCT_TM_TM_ZONE. printf "%s\n" "#define my_strftime nstrftime" >>confdefs.h case "$host_os" in mingw* | pw*) REPLACE_OPEN=1 ;; *) if test "$gl_cv_macro_O_CLOEXEC" != yes; then REPLACE_OPEN=1 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether open recognizes a trailing slash" >&5 printf %s "checking whether open recognizes a trailing slash... " >&6; } if test ${gl_cv_func_open_slash+y} then : printf %s "(cached) " >&6 else $as_nop # Assume that if we have lstat, we can also check symlinks. if test $ac_cv_func_lstat = yes; then touch conftest.tmp ln -s conftest.tmp conftest.lnk fi if test "$cross_compiling" = yes then : case "$host_os" in freebsd* | aix* | hpux* | solaris2.[0-9] | solaris2.[0-9].*) gl_cv_func_open_slash="guessing no" ;; *) gl_cv_func_open_slash="guessing yes" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <fcntl.h> #if HAVE_UNISTD_H # include <unistd.h> #endif $gl_mda_defines int main () { int result = 0; #if HAVE_LSTAT if (open ("conftest.lnk/", O_RDONLY) != -1) result |= 1; #endif if (open ("conftest.sl/", O_CREAT, 0600) >= 0) result |= 2; return result; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_open_slash=yes else $as_nop gl_cv_func_open_slash=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f conftest.sl conftest.tmp conftest.lnk fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_open_slash" >&5 printf "%s\n" "$gl_cv_func_open_slash" >&6; } case "$gl_cv_func_open_slash" in *no) printf "%s\n" "#define OPEN_TRAILING_SLASH_BUG 1" >>confdefs.h ;; esac case "$gl_cv_func_open_slash" in *no) REPLACE_OPEN=1 ;; esac ;; esac if test $REPLACE_OPEN = 1; then GL_COND_OBJ_OPEN_TRUE= GL_COND_OBJ_OPEN_FALSE='#' else GL_COND_OBJ_OPEN_TRUE='#' GL_COND_OBJ_OPEN_FALSE= fi : if test -z "${GL_COND_OBJ_OPEN_TRUE}" && test -z "${GL_COND_OBJ_OPEN_FALSE}"; then GL_COND_OBJ_OPEN_TRUE='#' GL_COND_OBJ_OPEN_FALSE='#' fi if test -z "$GL_COND_OBJ_OPEN_TRUE"; then : : fi GL_GNULIB_OPEN=1 printf "%s\n" "#define GNULIB_TEST_OPEN 1" >>confdefs.h if test $REPLACE_REALLOC_FOR_REALLOC_GNU = 0; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether realloc (0, 0) returns nonnull" >&5 printf %s "checking whether realloc (0, 0) returns nonnull... " >&6; } if test ${ac_cv_func_realloc_0_nonnull+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on platforms where we know the result. *-gnu* | freebsd* | netbsd* | openbsd* | bitrig* \ | gnu* | *-musl* | midipix* | midnightbsd* \ | hpux* | solaris* | cygwin* | mingw* | msys* ) ac_cv_func_realloc_0_nonnull="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) ac_cv_func_realloc_0_nonnull="$gl_cross_guess_normal" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdlib.h> int main (void) { void *p = realloc (0, 0); int result = !p; free (p); return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : ac_cv_func_realloc_0_nonnull=yes else $as_nop ac_cv_func_realloc_0_nonnull=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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_realloc_0_nonnull" >&5 printf "%s\n" "$ac_cv_func_realloc_0_nonnull" >&6; } case $ac_cv_func_realloc_0_nonnull in #( *yes) : ;; #( *) : REPLACE_REALLOC_FOR_REALLOC_GNU=1 ;; esac fi if test $REPLACE_REALLOC_FOR_REALLOC_GNU = 1; then gl_LIBOBJS="$gl_LIBOBJS realloc.$ac_objext" fi GL_GNULIB_REALLOC_GNU=1 printf "%s\n" "#define GNULIB_TEST_REALLOC_GNU 1" >>confdefs.h if test $REPLACE_MALLOC_FOR_MALLOC_POSIX = 1; then REPLACE_REALLOC_FOR_REALLOC_POSIX=1 fi if test $REPLACE_REALLOC_FOR_REALLOC_POSIX = 1; then gl_LIBOBJS="$gl_LIBOBJS realloc.$ac_objext" fi GL_GNULIB_REALLOC_POSIX=1 printf "%s\n" "#define GNULIB_TEST_REALLOC_POSIX 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for reallocarray" >&5 printf %s "checking for reallocarray... " >&6; } if test ${gl_cv_onwards_func_reallocarray+y} then : printf %s "(cached) " >&6 else $as_nop exec 9>&6 6>/dev/null case "$host_os" in linux*-android*) ac_fn_check_decl "$LINENO" "reallocarray" "ac_cv_have_decl_reallocarray" "#include <stdlib.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_reallocarray" = xyes then : fi if test $ac_cv_have_decl_reallocarray = yes; then ac_fn_c_check_func "$LINENO" "reallocarray" "ac_cv_func_reallocarray" if test "x$ac_cv_func_reallocarray" = xyes then : fi if test $ac_cv_func_reallocarray = yes; then gl_cv_onwards_func_reallocarray=yes else gl_cv_onwards_func_reallocarray='future OS version' fi else gl_cv_onwards_func_reallocarray='future OS version' fi ;; *) ac_fn_c_check_func "$LINENO" "reallocarray" "ac_cv_func_reallocarray" if test "x$ac_cv_func_reallocarray" = xyes then : fi gl_cv_onwards_func_reallocarray=$ac_cv_func_reallocarray ;; esac exec 6>&9 9>&- fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_onwards_func_reallocarray" >&5 printf "%s\n" "$gl_cv_onwards_func_reallocarray" >&6; } case "$gl_cv_onwards_func_reallocarray" in future*) ac_cv_func_reallocarray=no ;; *) ac_cv_func_reallocarray=$gl_cv_onwards_func_reallocarray ;; esac if test $ac_cv_func_reallocarray = yes; then printf "%s\n" "#define HAVE_REALLOCARRAY 1" >>confdefs.h fi if test "$ac_cv_func_reallocarray" = no; then HAVE_REALLOCARRAY=0 case "$gl_cv_onwards_func_reallocarray" in future*) REPLACE_REALLOCARRAY=1 ;; esac elif test "$gl_cv_malloc_ptrdiff" = no; then REPLACE_REALLOCARRAY=1 fi if test $HAVE_REALLOCARRAY = 0 || test $REPLACE_REALLOCARRAY = 1; then GL_COND_OBJ_REALLOCARRAY_TRUE= GL_COND_OBJ_REALLOCARRAY_FALSE='#' else GL_COND_OBJ_REALLOCARRAY_TRUE='#' GL_COND_OBJ_REALLOCARRAY_FALSE= fi : if test -z "${GL_COND_OBJ_REALLOCARRAY_TRUE}" && test -z "${GL_COND_OBJ_REALLOCARRAY_FALSE}"; then GL_COND_OBJ_REALLOCARRAY_TRUE='#' GL_COND_OBJ_REALLOCARRAY_FALSE='#' fi if test -z "$GL_COND_OBJ_REALLOCARRAY_TRUE"; then : : fi printf "%s\n" "#define GNULIB_REALLOCARRAY 1" >>confdefs.h GL_GNULIB_REALLOCARRAY=1 printf "%s\n" "#define GNULIB_TEST_REALLOCARRAY 1" >>confdefs.h # Check whether --with-included-regex was given. if test ${with_included_regex+y} then : withval=$with_included_regex; fi case $with_included_regex in #( yes|no) ac_use_included_regex=$with_included_regex ;; '') # If the system regex support is good enough that it passes the # following run test, then default to *not* using the included regex.c. # If cross compiling, assume the test would fail and use the included # regex.c. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working re_compile_pattern" >&5 printf %s "checking for working re_compile_pattern... " >&6; } if test ${gl_cv_func_re_compile_pattern_working+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case "$host_os" in # Guess no on native Windows. mingw*) gl_cv_func_re_compile_pattern_working="guessing no" ;; # Otherwise obey --enable-cross-guesses. *) gl_cv_func_re_compile_pattern_working="$gl_cross_guess_normal" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <regex.h> #include <locale.h> #include <limits.h> #include <string.h> #if defined M_CHECK_ACTION || HAVE_DECL_ALARM # include <signal.h> # include <unistd.h> #endif #if HAVE_MALLOC_H # include <malloc.h> #endif #ifdef M_CHECK_ACTION /* Exit with distinguishable exit code. */ static void sigabrt_no_core (int sig) { raise (SIGTERM); } #endif int main (void) { int result = 0; static struct re_pattern_buffer regex; unsigned char folded_chars[UCHAR_MAX + 1]; int i; const char *s; struct re_registers regs; /* Some builds of glibc go into an infinite loop on this test. Use alarm to force death, and mallopt to avoid malloc recursion in diagnosing the corrupted heap. */ #if HAVE_DECL_ALARM signal (SIGALRM, SIG_DFL); alarm (2); #endif #ifdef M_CHECK_ACTION signal (SIGABRT, sigabrt_no_core); mallopt (M_CHECK_ACTION, 2); #endif if (setlocale (LC_ALL, "en_US.UTF-8")) { { /* https://sourceware.org/ml/libc-hacker/2006-09/msg00008.html This test needs valgrind to catch the bug on Debian GNU/Linux 3.1 x86, but it might catch the bug better on other platforms and it shouldn't hurt to try the test here. */ static char const pat[] = "insert into"; static char const data[] = "\xFF\0\x12\xA2\xAA\xC4\xB1,K\x12\xC4\xB1*\xACK"; re_set_syntax (RE_SYNTAX_GREP | RE_HAT_LISTS_NOT_NEWLINE | RE_ICASE); memset (®ex, 0, sizeof regex); s = re_compile_pattern (pat, sizeof pat - 1, ®ex); if (s) result |= 1; else { if (re_search (®ex, data, sizeof data - 1, 0, sizeof data - 1, ®s) != -1) result |= 1; regfree (®ex); } } { /* This test is from glibc bug 15078. The test case is from Andreas Schwab in <https://sourceware.org/ml/libc-alpha/2013-01/msg00967.html>. */ static char const pat[] = "[^x]x"; static char const data[] = /* <U1000><U103B><U103D><U1014><U103A><U102F><U1015><U103A> */ "\xe1\x80\x80" "\xe1\x80\xbb" "\xe1\x80\xbd" "\xe1\x80\x94" "\xe1\x80\xba" "\xe1\x80\xaf" "\xe1\x80\x95" "\xe1\x80\xba" "x"; re_set_syntax (0); memset (®ex, 0, sizeof regex); s = re_compile_pattern (pat, sizeof pat - 1, ®ex); if (s) result |= 1; else { i = re_search (®ex, data, sizeof data - 1, 0, sizeof data - 1, 0); if (i != 0 && i != 21) result |= 1; regfree (®ex); } } if (! setlocale (LC_ALL, "C")) return 1; } /* This test is from glibc bug 3957, reported by Andrew Mackey. */ re_set_syntax (RE_SYNTAX_EGREP | RE_HAT_LISTS_NOT_NEWLINE); memset (®ex, 0, sizeof regex); s = re_compile_pattern ("a[^x]b", 6, ®ex); if (s) result |= 2; else { /* This should fail, but succeeds for glibc-2.5. */ if (re_search (®ex, "a\nb", 3, 0, 3, ®s) != -1) result |= 2; regfree (®ex); } /* This regular expression is from Spencer ere test number 75 in grep-2.3. */ re_set_syntax (RE_SYNTAX_POSIX_EGREP); memset (®ex, 0, sizeof regex); for (i = 0; i <= UCHAR_MAX; i++) folded_chars[i] = i; regex.translate = folded_chars; s = re_compile_pattern ("a[[:]:]]b\n", 11, ®ex); /* This should fail with _Invalid character class name_ error. */ if (!s) { result |= 4; regfree (®ex); } /* Ensure that [b-a] is diagnosed as invalid, when using RE_NO_EMPTY_RANGES. */ re_set_syntax (RE_SYNTAX_POSIX_EGREP | RE_NO_EMPTY_RANGES); memset (®ex, 0, sizeof regex); s = re_compile_pattern ("a[b-a]", 6, ®ex); if (s == 0) { result |= 8; regfree (®ex); } /* This should succeed, but does not for glibc-2.1.3. */ memset (®ex, 0, sizeof regex); s = re_compile_pattern ("{1", 2, ®ex); if (s) result |= 8; else regfree (®ex); /* The following example is derived from a problem report against gawk from Jorge Stolfi <stolfi@ic.unicamp.br>. */ memset (®ex, 0, sizeof regex); s = re_compile_pattern ("[an\371]*n", 7, ®ex); if (s) result |= 8; else { /* This should match, but does not for glibc-2.2.1. */ if (re_match (®ex, "an", 2, 0, ®s) != 2) result |= 8; else { free (regs.start); free (regs.end); } regfree (®ex); } memset (®ex, 0, sizeof regex); s = re_compile_pattern ("x", 1, ®ex); if (s) result |= 8; else { /* glibc-2.2.93 does not work with a negative RANGE argument. */ if (re_search (®ex, "wxy", 3, 2, -2, ®s) != 1) result |= 8; else { free (regs.start); free (regs.end); } regfree (®ex); } /* The version of regex.c in older versions of gnulib ignored RE_ICASE. Detect that problem too. */ re_set_syntax (RE_SYNTAX_EMACS | RE_ICASE); memset (®ex, 0, sizeof regex); s = re_compile_pattern ("x", 1, ®ex); if (s) result |= 16; else { if (re_search (®ex, "WXY", 3, 0, 3, ®s) < 0) result |= 16; else { free (regs.start); free (regs.end); } regfree (®ex); } /* Catch a bug reported by Vin Shelton in https://lists.gnu.org/r/bug-coreutils/2007-06/msg00089.html */ re_set_syntax (RE_SYNTAX_POSIX_BASIC & ~RE_CONTEXT_INVALID_DUP & ~RE_NO_EMPTY_RANGES); memset (®ex, 0, sizeof regex); s = re_compile_pattern ("[[:alnum:]_-]\\\\+\$", 16, ®ex); if (s) result |= 32; else regfree (®ex); /* REG_STARTEND was added to glibc on 2004-01-15. Reject older versions. */ if (! REG_STARTEND) result |= 64; /* Matching with the compiled form of this regexp would provoke an assertion failure prior to glibc-2.28: regexec.c:1375: pop_fail_stack: Assertion 'num >= 0' failed With glibc-2.28, compilation fails and reports the invalid back reference. */ re_set_syntax (RE_SYNTAX_POSIX_EGREP); memset (®ex, 0, sizeof regex); s = re_compile_pattern ("0|()0|\\\\1|0", 10, ®ex); if (!s) { memset (®s, 0, sizeof regs); i = re_search (®ex, "x", 1, 0, 1, ®s); if (i != -1) result |= 64; if (0 <= i) { free (regs.start); free (regs.end); } regfree (®ex); } else { if (strcmp (s, "Invalid back reference")) result |= 64; } /* glibc bug 11053. */ re_set_syntax (RE_SYNTAX_POSIX_BASIC); memset (®ex, 0, sizeof regex); static char const pat_sub2[] = "\\\\(a*\\\\)*a*\\\\1"; s = re_compile_pattern (pat_sub2, sizeof pat_sub2 - 1, ®ex); if (s) result |= 64; else { memset (®s, 0, sizeof regs); static char const data[] = "a"; int datalen = sizeof data - 1; i = re_search (®ex, data, datalen, 0, datalen, ®s); if (i != 0) result |= 64; else if (regs.num_regs < 2) result |= 64; else if (! (regs.start[0] == 0 && regs.end[0] == 1)) result |= 64; else if (! (regs.start[1] == 0 && regs.end[1] == 0)) result |= 64; regfree (®ex); free (regs.start); free (regs.end); } #if 0 /* It would be nice to reject hosts whose regoff_t values are too narrow (including glibc on hosts with 64-bit ptrdiff_t and 32-bit int), but we should wait until glibc implements this feature. Otherwise, support for equivalence classes and multibyte collation symbols would always be broken except when compiling --without-included-regex. */ if (sizeof (regoff_t) < sizeof (ptrdiff_t) || sizeof (regoff_t) < sizeof (ssize_t)) result |= 64; #endif return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_re_compile_pattern_working=yes else $as_nop gl_cv_func_re_compile_pattern_working=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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_re_compile_pattern_working" >&5 printf "%s\n" "$gl_cv_func_re_compile_pattern_working" >&6; } case "$gl_cv_func_re_compile_pattern_working" in #( *yes) ac_use_included_regex=no;; #( *no) ac_use_included_regex=yes;; esac ;; *) as_fn_error $? "Invalid value for --with-included-regex: $with_included_regex" "$LINENO" 5 ;; esac if test $ac_use_included_regex = yes; then printf "%s\n" "#define _REGEX_INCLUDE_LIMITS_H 1" >>confdefs.h printf "%s\n" "#define _REGEX_LARGE_OFFSETS 1" >>confdefs.h printf "%s\n" "#define re_syntax_options rpl_re_syntax_options" >>confdefs.h printf "%s\n" "#define re_set_syntax rpl_re_set_syntax" >>confdefs.h printf "%s\n" "#define re_compile_pattern rpl_re_compile_pattern" >>confdefs.h printf "%s\n" "#define re_compile_fastmap rpl_re_compile_fastmap" >>confdefs.h printf "%s\n" "#define re_search rpl_re_search" >>confdefs.h printf "%s\n" "#define re_search_2 rpl_re_search_2" >>confdefs.h printf "%s\n" "#define re_match rpl_re_match" >>confdefs.h printf "%s\n" "#define re_match_2 rpl_re_match_2" >>confdefs.h printf "%s\n" "#define re_set_registers rpl_re_set_registers" >>confdefs.h printf "%s\n" "#define re_comp rpl_re_comp" >>confdefs.h printf "%s\n" "#define re_exec rpl_re_exec" >>confdefs.h printf "%s\n" "#define regcomp rpl_regcomp" >>confdefs.h printf "%s\n" "#define regexec rpl_regexec" >>confdefs.h printf "%s\n" "#define regerror rpl_regerror" >>confdefs.h printf "%s\n" "#define regfree rpl_regfree" >>confdefs.h fi if test $ac_use_included_regex = yes; then GL_COND_OBJ_REGEX_TRUE= GL_COND_OBJ_REGEX_FALSE='#' else GL_COND_OBJ_REGEX_TRUE='#' GL_COND_OBJ_REGEX_FALSE= fi : if test -z "${GL_COND_OBJ_REGEX_TRUE}" && test -z "${GL_COND_OBJ_REGEX_FALSE}"; then GL_COND_OBJ_REGEX_TRUE='#' GL_COND_OBJ_REGEX_FALSE='#' fi if test -z "$GL_COND_OBJ_REGEX_TRUE"; then : ac_fn_c_check_header_compile "$LINENO" "libintl.h" "ac_cv_header_libintl_h" "$ac_includes_default" if test "x$ac_cv_header_libintl_h" = xyes then : printf "%s\n" "#define HAVE_LIBINTL_H 1" >>confdefs.h fi ac_fn_check_decl "$LINENO" "isblank" "ac_cv_have_decl_isblank" "#include <ctype.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_isblank" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_ISBLANK $ac_have_decl" >>confdefs.h fi if test $ac_cv_func_setenv = no; then HAVE_SETENV=0 else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether setenv validates arguments" >&5 printf %s "checking whether setenv validates arguments... " >&6; } if test ${gl_cv_func_setenv_works+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_setenv_works="guessing yes" ;; # Guess yes on musl systems. *-musl* | midipix*) gl_cv_func_setenv_works="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_setenv_works="$gl_cross_guess_normal" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdlib.h> #include <errno.h> #include <string.h> int main (void) { int result = 0; { if (setenv ("", "", 0) != -1) result |= 1; else if (errno != EINVAL) result |= 2; } { if (setenv ("a", "=", 1) != 0) result |= 4; else if (strcmp (getenv ("a"), "=") != 0) result |= 8; } return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_setenv_works=yes else $as_nop gl_cv_func_setenv_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 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_setenv_works" >&5 printf "%s\n" "$gl_cv_func_setenv_works" >&6; } case "$gl_cv_func_setenv_works" in *yes) ;; *) REPLACE_SETENV=1 ;; esac fi if test $HAVE_SETENV = 0 || test $REPLACE_SETENV = 1; then GL_COND_OBJ_SETENV_TRUE= GL_COND_OBJ_SETENV_FALSE='#' else GL_COND_OBJ_SETENV_TRUE='#' GL_COND_OBJ_SETENV_FALSE= fi : if test -z "${GL_COND_OBJ_SETENV_TRUE}" && test -z "${GL_COND_OBJ_SETENV_FALSE}"; then GL_COND_OBJ_SETENV_TRUE='#' GL_COND_OBJ_SETENV_FALSE='#' fi GL_GNULIB_SETENV=1 printf "%s\n" "#define GNULIB_TEST_SETENV 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether setlocale (LC_ALL, NULL) is multithread-safe" >&5 printf %s "checking whether setlocale (LC_ALL, NULL) is multithread-safe... " >&6; } if test ${gl_cv_func_setlocale_null_all_mtsafe+y} then : printf %s "(cached) " >&6 else $as_nop case "$host_os" in # Guess no on musl libc, macOS, FreeBSD, NetBSD, OpenBSD, AIX, Haiku. *-musl* | midipix* | darwin* | freebsd* | midnightbsd* | netbsd* | openbsd* | aix* | haiku*) gl_cv_func_setlocale_null_all_mtsafe=no ;; # Guess no on Cygwin < 3.4.6. cygwin*) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined __CYGWIN__ #include <cygwin/version.h> #if CYGWIN_VERSION_DLL_COMBINED >= CYGWIN_VERSION_DLL_MAKE_COMBINED (3004, 6) Lucky user #endif #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Lucky user" >/dev/null 2>&1 then : gl_cv_func_setlocale_null_all_mtsafe=yes else $as_nop gl_cv_func_setlocale_null_all_mtsafe=no fi rm -rf conftest* ;; # Guess yes on glibc, HP-UX, IRIX, Solaris, native Windows. *-gnu* | gnu* | hpux* | irix* | solaris* | mingw*) gl_cv_func_setlocale_null_all_mtsafe=yes ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_setlocale_null_all_mtsafe="$gl_cross_guess_normal" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_setlocale_null_all_mtsafe" >&5 printf "%s\n" "$gl_cv_func_setlocale_null_all_mtsafe" >&6; } case "$host_os" in mingw*) ;; *) if test $gl_pthread_api = no && test $ac_cv_header_threads_h = no; then gl_cv_func_setlocale_null_all_mtsafe="trivially yes" fi ;; esac case "$gl_cv_func_setlocale_null_all_mtsafe" in *yes) SETLOCALE_NULL_ALL_MTSAFE=1 ;; *) SETLOCALE_NULL_ALL_MTSAFE=0 ;; esac printf "%s\n" "#define SETLOCALE_NULL_ALL_MTSAFE $SETLOCALE_NULL_ALL_MTSAFE" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether setlocale (category, NULL) is multithread-safe" >&5 printf %s "checking whether setlocale (category, NULL) is multithread-safe... " >&6; } if test ${gl_cv_func_setlocale_null_one_mtsafe+y} then : printf %s "(cached) " >&6 else $as_nop case "$host_os" in # Guess no on OpenBSD, AIX. openbsd* | aix*) gl_cv_func_setlocale_null_one_mtsafe=no ;; # Guess yes on glibc, musl libc, macOS, FreeBSD, NetBSD, HP-UX, IRIX, Solaris, Haiku, Cygwin, native Windows. *-gnu* | gnu* | *-musl* | midipix* | darwin* | freebsd* | midnightbsd* | netbsd* | hpux* | irix* | solaris* | haiku* | cygwin* | mingw*) gl_cv_func_setlocale_null_one_mtsafe=yes ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_setlocale_null_one_mtsafe="$gl_cross_guess_normal" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_setlocale_null_one_mtsafe" >&5 printf "%s\n" "$gl_cv_func_setlocale_null_one_mtsafe" >&6; } case "$host_os" in mingw*) ;; *) if test $gl_pthread_api = no && test $ac_cv_header_threads_h = no; then gl_cv_func_setlocale_null_one_mtsafe="trivially yes" fi ;; esac case "$gl_cv_func_setlocale_null_one_mtsafe" in *yes) SETLOCALE_NULL_ONE_MTSAFE=1 ;; *) SETLOCALE_NULL_ONE_MTSAFE=0 ;; esac printf "%s\n" "#define SETLOCALE_NULL_ONE_MTSAFE $SETLOCALE_NULL_ONE_MTSAFE" >>confdefs.h if test $SETLOCALE_NULL_ALL_MTSAFE = 0 || test $SETLOCALE_NULL_ONE_MTSAFE = 0; then case "$host_os" in mingw*) SETLOCALE_NULL_LIB= ;; *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether imported symbols can be declared weak" >&5 printf %s "checking whether imported symbols can be declared weak... " >&6; } if test ${gl_cv_have_weak+y} then : printf %s "(cached) " >&6 else $as_nop case "$host_os" in cygwin* | mingw*) gl_cv_have_weak="guessing no" ;; *) gl_cv_have_weak=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern void xyzzy (); #pragma weak xyzzy int main (void) { xyzzy(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_cv_have_weak=maybe fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test $gl_cv_have_weak = maybe; then if test "$cross_compiling" = yes then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __ELF__ Extensible Linking Format #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Extensible Linking Format" >/dev/null 2>&1 then : gl_cv_have_weak="guessing yes" else $as_nop gl_cv_have_weak="guessing no" fi rm -rf conftest* else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdio.h> #pragma weak fputs int main () { return (fputs == NULL); } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_have_weak=yes else $as_nop gl_cv_have_weak=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 ;; esac case " $LDFLAGS " in *" -static "*) gl_cv_have_weak=no ;; esac case "$gl_cv_have_weak" in *yes) case "$host_os" in freebsd* | dragonfly* | midnightbsd*) : > conftest1.c $CC $CPPFLAGS $CFLAGS $LDFLAGS -fPIC -shared -o libempty.so conftest1.c -lpthread >&5 2>&1 cat <<EOF > conftest2.c #include <pthread.h> #pragma weak pthread_mutexattr_gettype int main () { return (pthread_mutexattr_gettype != NULL); } EOF $CC $CPPFLAGS $CFLAGS $LDFLAGS -o conftest conftest2.c libempty.so >&5 2>&1 \ || gl_cv_have_weak=no rm -f conftest1.c libempty.so conftest2.c conftest ;; esac ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_have_weak" >&5 printf "%s\n" "$gl_cv_have_weak" >&6; } case "$gl_cv_have_weak" in *yes) printf "%s\n" "#define HAVE_WEAK_SYMBOLS 1" >>confdefs.h ;; esac case "$gl_cv_have_weak" in *yes) SETLOCALE_NULL_LIB= ;; *) SETLOCALE_NULL_LIB="$LIBPTHREAD" ;; esac ;; esac else SETLOCALE_NULL_LIB= fi LIB_SETLOCALE_NULL="$SETLOCALE_NULL_LIB" if test $SETLOCALE_NULL_ALL_MTSAFE = 0 || test $SETLOCALE_NULL_ONE_MTSAFE = 0; then GL_COND_OBJ_SETLOCALE_LOCK_TRUE= GL_COND_OBJ_SETLOCALE_LOCK_FALSE='#' else GL_COND_OBJ_SETLOCALE_LOCK_TRUE='#' GL_COND_OBJ_SETLOCALE_LOCK_FALSE= fi : if test -z "${GL_COND_OBJ_SETLOCALE_LOCK_TRUE}" && test -z "${GL_COND_OBJ_SETLOCALE_LOCK_FALSE}"; then GL_COND_OBJ_SETLOCALE_LOCK_TRUE='#' GL_COND_OBJ_SETLOCALE_LOCK_FALSE='#' fi if test -z "$GL_COND_OBJ_SETLOCALE_LOCK_TRUE"; then : CFLAG_VISIBILITY= HAVE_VISIBILITY=0 if test -n "$GCC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the -Werror option is usable" >&5 printf %s "checking whether the -Werror option is usable... " >&6; } if test ${gl_cv_cc_vis_werror+y} then : printf %s "(cached) " >&6 else $as_nop gl_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Werror" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_cc_vis_werror=yes else $as_nop gl_cv_cc_vis_werror=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS="$gl_save_CFLAGS" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_vis_werror" >&5 printf "%s\n" "$gl_cv_cc_vis_werror" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for simple visibility declarations" >&5 printf %s "checking for simple visibility declarations... " >&6; } if test ${gl_cv_cc_visibility+y} then : printf %s "(cached) " >&6 else $as_nop gl_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -fvisibility=hidden" if test $gl_cv_cc_vis_werror = yes; then CFLAGS="$CFLAGS -Werror" fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern __attribute__((__visibility__("hidden"))) int hiddenvar; extern __attribute__((__visibility__("default"))) int exportedvar; extern __attribute__((__visibility__("hidden"))) int hiddenfunc (void); extern __attribute__((__visibility__("default"))) int exportedfunc (void); void dummyfunc (void); int hiddenvar; int exportedvar; int hiddenfunc (void) { return 51; } int exportedfunc (void) { return 1225736919; } void dummyfunc (void) {} int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_cc_visibility=yes else $as_nop gl_cv_cc_visibility=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS="$gl_save_CFLAGS" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_visibility" >&5 printf "%s\n" "$gl_cv_cc_visibility" >&6; } if test $gl_cv_cc_visibility = yes; then CFLAG_VISIBILITY="-fvisibility=hidden" HAVE_VISIBILITY=1 fi fi printf "%s\n" "#define HAVE_VISIBILITY $HAVE_VISIBILITY" >>confdefs.h fi GL_GNULIB_SETLOCALE_NULL=1 printf "%s\n" "#define GNULIB_TEST_SETLOCALE_NULL 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ssize_t" >&5 printf %s "checking for ssize_t... " >&6; } if test ${gl_cv_ssize_t+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> int main (void) { int x = sizeof (ssize_t *) + sizeof (ssize_t); return !x; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_ssize_t=yes else $as_nop gl_cv_ssize_t=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_ssize_t" >&5 printf "%s\n" "$gl_cv_ssize_t" >&6; } if test $gl_cv_ssize_t = no; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether size_t is wider than 'long'" >&5 printf %s "checking whether size_t is wider than 'long'... " >&6; } if test ${gl_cv_size_t_large+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> typedef int array [2 * (sizeof (size_t) > sizeof (long)) - 1]; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_size_t_large=yes else $as_nop gl_cv_size_t_large=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_size_t_large" >&5 printf "%s\n" "$gl_cv_size_t_large" >&6; } if test $gl_cv_size_t_large = yes; then gl_def_ssize_t='long long' else gl_def_ssize_t='long' fi printf "%s\n" "#define ssize_t $gl_def_ssize_t" >>confdefs.h fi case "$host_os" in mingw*) REPLACE_STAT=1 ;; *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether stat handles trailing slashes on files" >&5 printf %s "checking whether stat handles trailing slashes on files... " >&6; } if test ${gl_cv_func_stat_file_slash+y} then : printf %s "(cached) " >&6 else $as_nop touch conftest.tmp # Assume that if we have lstat, we can also check symlinks. if test $ac_cv_func_lstat = yes; then ln -s conftest.tmp conftest.lnk fi if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on Linux systems. linux-* | linux) gl_cv_func_stat_file_slash="guessing yes" ;; # Guess yes on systems that emulate the Linux system calls. midipix*) gl_cv_func_stat_file_slash="guessing yes" ;; # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_stat_file_slash="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_stat_file_slash="$gl_cross_guess_normal" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/stat.h> int main (void) { int result = 0; struct stat st; if (!stat ("conftest.tmp/", &st)) result |= 1; #if HAVE_LSTAT if (!stat ("conftest.lnk/", &st)) result |= 2; #endif return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_stat_file_slash=yes else $as_nop gl_cv_func_stat_file_slash=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f conftest.tmp conftest.lnk fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_stat_file_slash" >&5 printf "%s\n" "$gl_cv_func_stat_file_slash" >&6; } case $gl_cv_func_stat_file_slash in *no) REPLACE_STAT=1 printf "%s\n" "#define REPLACE_FUNC_STAT_FILE 1" >>confdefs.h ;; esac case $host_os in solaris*) REPLACE_FSTAT=1 ;; esac ;; esac if test $REPLACE_STAT = 1; then GL_COND_OBJ_STAT_TRUE= GL_COND_OBJ_STAT_FALSE='#' else GL_COND_OBJ_STAT_TRUE='#' GL_COND_OBJ_STAT_FALSE= fi : if test -z "${GL_COND_OBJ_STAT_TRUE}" && test -z "${GL_COND_OBJ_STAT_FALSE}"; then GL_COND_OBJ_STAT_TRUE='#' GL_COND_OBJ_STAT_FALSE='#' fi if test -z "$GL_COND_OBJ_STAT_TRUE"; then : case "$host_os" in mingw*) gl_LIBOBJS="$gl_LIBOBJS stat-w32.$ac_objext" ;; esac : fi GL_GNULIB_STAT=1 printf "%s\n" "#define GNULIB_TEST_STAT 1" >>confdefs.h ac_fn_c_check_member "$LINENO" "struct stat" "st_atim.tv_nsec" "ac_cv_member_struct_stat_st_atim_tv_nsec" "#include <sys/types.h> #include <sys/stat.h> " if test "x$ac_cv_member_struct_stat_st_atim_tv_nsec" = xyes then : printf "%s\n" "#define HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether struct stat.st_atim is of type struct timespec" >&5 printf %s "checking whether struct stat.st_atim is of type struct timespec... " >&6; } if test ${ac_cv_typeof_struct_stat_st_atim_is_struct_timespec+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> #include <sys/stat.h> #if HAVE_SYS_TIME_H # include <sys/time.h> #endif #include <time.h> struct timespec ts; struct stat st; int main (void) { st.st_atim = ts; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_typeof_struct_stat_st_atim_is_struct_timespec=yes else $as_nop ac_cv_typeof_struct_stat_st_atim_is_struct_timespec=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_typeof_struct_stat_st_atim_is_struct_timespec" >&5 printf "%s\n" "$ac_cv_typeof_struct_stat_st_atim_is_struct_timespec" >&6; } if test $ac_cv_typeof_struct_stat_st_atim_is_struct_timespec = yes; then printf "%s\n" "#define TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC 1" >>confdefs.h fi else $as_nop ac_fn_c_check_member "$LINENO" "struct stat" "st_atimespec.tv_nsec" "ac_cv_member_struct_stat_st_atimespec_tv_nsec" "#include <sys/types.h> #include <sys/stat.h> " if test "x$ac_cv_member_struct_stat_st_atimespec_tv_nsec" = xyes then : printf "%s\n" "#define HAVE_STRUCT_STAT_ST_ATIMESPEC_TV_NSEC 1" >>confdefs.h else $as_nop ac_fn_c_check_member "$LINENO" "struct stat" "st_atimensec" "ac_cv_member_struct_stat_st_atimensec" "#include <sys/types.h> #include <sys/stat.h> " if test "x$ac_cv_member_struct_stat_st_atimensec" = xyes then : printf "%s\n" "#define HAVE_STRUCT_STAT_ST_ATIMENSEC 1" >>confdefs.h else $as_nop ac_fn_c_check_member "$LINENO" "struct stat" "st_atim.st__tim.tv_nsec" "ac_cv_member_struct_stat_st_atim_st__tim_tv_nsec" "#include <sys/types.h> #include <sys/stat.h> " if test "x$ac_cv_member_struct_stat_st_atim_st__tim_tv_nsec" = xyes then : printf "%s\n" "#define HAVE_STRUCT_STAT_ST_ATIM_ST__TIM_TV_NSEC 1" >>confdefs.h fi fi fi fi ac_fn_c_check_member "$LINENO" "struct stat" "st_birthtimespec.tv_nsec" "ac_cv_member_struct_stat_st_birthtimespec_tv_nsec" "#include <sys/types.h> #include <sys/stat.h> " if test "x$ac_cv_member_struct_stat_st_birthtimespec_tv_nsec" = xyes then : printf "%s\n" "#define HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC 1" >>confdefs.h else $as_nop ac_fn_c_check_member "$LINENO" "struct stat" "st_birthtimensec" "ac_cv_member_struct_stat_st_birthtimensec" "#include <sys/types.h> #include <sys/stat.h> " if test "x$ac_cv_member_struct_stat_st_birthtimensec" = xyes then : printf "%s\n" "#define HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC 1" >>confdefs.h else $as_nop ac_fn_c_check_member "$LINENO" "struct stat" "st_birthtim.tv_nsec" "ac_cv_member_struct_stat_st_birthtim_tv_nsec" "#include <sys/types.h> #include <sys/stat.h> " if test "x$ac_cv_member_struct_stat_st_birthtim_tv_nsec" = xyes then : printf "%s\n" "#define HAVE_STRUCT_STAT_ST_BIRTHTIM_TV_NSEC 1" >>confdefs.h fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for bool, true, false" >&5 printf %s "checking for bool, true, false... " >&6; } if test ${gl_cv_c_bool+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if true == false #error "true == false" #endif extern bool b; bool b = true == false; _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_c_bool=yes else $as_nop gl_cv_c_bool=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_c_bool" >&5 printf "%s\n" "$gl_cv_c_bool" >&6; } if test "$gl_cv_c_bool" = yes; then printf "%s\n" "#define HAVE_C_BOOL 1" >>confdefs.h fi if test $ac_cv_header_stdckdint_h = yes; then GL_GENERATE_STDCKDINT_H=false else GL_GENERATE_STDCKDINT_H=true fi case "$GL_GENERATE_STDCKDINT_H" in false) STDCKDINT_H='' ;; true) if test -z "$STDCKDINT_H"; then STDCKDINT_H="${gl_source_base_prefix}stdckdint.h" fi ;; *) echo "*** GL_GENERATE_STDCKDINT_H is not set correctly" 1>&2; exit 1 ;; esac if $GL_GENERATE_STDCKDINT_H; then GL_GENERATE_STDCKDINT_H_TRUE= GL_GENERATE_STDCKDINT_H_FALSE='#' else GL_GENERATE_STDCKDINT_H_TRUE='#' GL_GENERATE_STDCKDINT_H_FALSE= fi : if test -z "${GL_GENERATE_STDCKDINT_H_TRUE}" && test -z "${GL_GENERATE_STDCKDINT_H_FALSE}"; then GL_GENERATE_STDCKDINT_H_TRUE='#' GL_GENERATE_STDCKDINT_H_FALSE='#' fi case "$GL_GENERATE_STDDEF_H" in false) STDDEF_H='' ;; true) if test -z "$STDDEF_H"; then STDDEF_H="${gl_source_base_prefix}stddef.h" fi ;; *) echo "*** GL_GENERATE_STDDEF_H is not set correctly" 1>&2; exit 1 ;; esac if $GL_GENERATE_STDDEF_H; then GL_GENERATE_STDDEF_H_TRUE= GL_GENERATE_STDDEF_H_FALSE='#' else GL_GENERATE_STDDEF_H_TRUE='#' GL_GENERATE_STDDEF_H_FALSE= fi : if test -z "${GL_GENERATE_STDDEF_H_TRUE}" && test -z "${GL_GENERATE_STDDEF_H_FALSE}"; then GL_GENERATE_STDDEF_H_TRUE='#' GL_GENERATE_STDDEF_H_FALSE='#' fi case "$GL_GENERATE_STDINT_H" in false) STDINT_H='' ;; true) if test -z "$STDINT_H"; then STDINT_H="${gl_source_base_prefix}stdint.h" fi ;; *) echo "*** GL_GENERATE_STDINT_H is not set correctly" 1>&2; exit 1 ;; esac if $GL_GENERATE_STDINT_H; then GL_GENERATE_STDINT_H_TRUE= GL_GENERATE_STDINT_H_FALSE='#' else GL_GENERATE_STDINT_H_TRUE='#' GL_GENERATE_STDINT_H_FALSE= fi : if test -z "${GL_GENERATE_STDINT_H_TRUE}" && test -z "${GL_GENERATE_STDINT_H_FALSE}"; then GL_GENERATE_STDINT_H_TRUE='#' GL_GENERATE_STDINT_H_FALSE='#' fi case "$GL_GENERATE_LIMITS_H" in false) LIMITS_H='' ;; true) if test -z "$LIMITS_H"; then LIMITS_H="${gl_source_base_prefix}limits.h" fi ;; *) echo "*** GL_GENERATE_LIMITS_H is not set correctly" 1>&2; exit 1 ;; esac if $GL_GENERATE_LIMITS_H; then GL_GENERATE_LIMITS_H_TRUE= GL_GENERATE_LIMITS_H_FALSE='#' else GL_GENERATE_LIMITS_H_TRUE='#' GL_GENERATE_LIMITS_H_FALSE= fi : if test -z "${GL_GENERATE_LIMITS_H_TRUE}" && test -z "${GL_GENERATE_LIMITS_H_FALSE}"; then GL_GENERATE_LIMITS_H_TRUE='#' GL_GENERATE_LIMITS_H_FALSE='#' fi if test $REPLACE_STDIO_READ_FUNCS = 1; then GL_COND_OBJ_STDIO_READ_TRUE= GL_COND_OBJ_STDIO_READ_FALSE='#' else GL_COND_OBJ_STDIO_READ_TRUE='#' GL_COND_OBJ_STDIO_READ_FALSE= fi : if test -z "${GL_COND_OBJ_STDIO_READ_TRUE}" && test -z "${GL_COND_OBJ_STDIO_READ_FALSE}"; then GL_COND_OBJ_STDIO_READ_TRUE='#' GL_COND_OBJ_STDIO_READ_FALSE='#' fi if test $REPLACE_STDIO_WRITE_FUNCS = 1; then GL_COND_OBJ_STDIO_WRITE_TRUE= GL_COND_OBJ_STDIO_WRITE_FALSE='#' else GL_COND_OBJ_STDIO_WRITE_TRUE='#' GL_COND_OBJ_STDIO_WRITE_FALSE= fi : if test -z "${GL_COND_OBJ_STDIO_WRITE_TRUE}" && test -z "${GL_COND_OBJ_STDIO_WRITE_FALSE}"; then GL_COND_OBJ_STDIO_WRITE_TRUE='#' GL_COND_OBJ_STDIO_WRITE_FALSE='#' fi GL_GNULIB_FSCANF=1 printf "%s\n" "#define GNULIB_TEST_FSCANF 1" >>confdefs.h printf "%s\n" "#define GNULIB_FSCANF 1" >>confdefs.h GL_GNULIB_SCANF=1 printf "%s\n" "#define GNULIB_TEST_SCANF 1" >>confdefs.h printf "%s\n" "#define GNULIB_SCANF 1" >>confdefs.h GL_GNULIB_FGETC=1 printf "%s\n" "#define GNULIB_TEST_FGETC 1" >>confdefs.h GL_GNULIB_GETC=1 printf "%s\n" "#define GNULIB_TEST_GETC 1" >>confdefs.h GL_GNULIB_GETCHAR=1 printf "%s\n" "#define GNULIB_TEST_GETCHAR 1" >>confdefs.h GL_GNULIB_FGETS=1 printf "%s\n" "#define GNULIB_TEST_FGETS 1" >>confdefs.h GL_GNULIB_FREAD=1 printf "%s\n" "#define GNULIB_TEST_FREAD 1" >>confdefs.h GL_GNULIB_FPRINTF=1 printf "%s\n" "#define GNULIB_TEST_FPRINTF 1" >>confdefs.h GL_GNULIB_PRINTF=1 printf "%s\n" "#define GNULIB_TEST_PRINTF 1" >>confdefs.h GL_GNULIB_VFPRINTF=1 printf "%s\n" "#define GNULIB_TEST_VFPRINTF 1" >>confdefs.h GL_GNULIB_VPRINTF=1 printf "%s\n" "#define GNULIB_TEST_VPRINTF 1" >>confdefs.h GL_GNULIB_FPUTC=1 printf "%s\n" "#define GNULIB_TEST_FPUTC 1" >>confdefs.h GL_GNULIB_PUTC=1 printf "%s\n" "#define GNULIB_TEST_PUTC 1" >>confdefs.h GL_GNULIB_PUTCHAR=1 printf "%s\n" "#define GNULIB_TEST_PUTCHAR 1" >>confdefs.h GL_GNULIB_FPUTS=1 printf "%s\n" "#define GNULIB_TEST_FPUTS 1" >>confdefs.h GL_GNULIB_PUTS=1 printf "%s\n" "#define GNULIB_TEST_PUTS 1" >>confdefs.h GL_GNULIB_FWRITE=1 printf "%s\n" "#define GNULIB_TEST_FWRITE 1" >>confdefs.h if test "$GL_GENERATE_ERRNO_H:$REPLACE_STRERROR_0" = false:0; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working strerror function" >&5 printf %s "checking for working strerror function... " >&6; } if test ${gl_cv_func_working_strerror+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_working_strerror="guessing yes" ;; # Guess yes on musl systems. *-musl* | midipix*) gl_cv_func_working_strerror="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_working_strerror="$gl_cross_guess_normal" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <string.h> int main (void) { if (!*strerror (-2)) return 1; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_working_strerror=yes else $as_nop gl_cv_func_working_strerror=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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_working_strerror" >&5 printf "%s\n" "$gl_cv_func_working_strerror" >&6; } case "$gl_cv_func_working_strerror" in *yes) ;; *) REPLACE_STRERROR=1 ;; esac else REPLACE_STRERROR=1 fi if test $REPLACE_STRERROR = 1; then GL_COND_OBJ_STRERROR_TRUE= GL_COND_OBJ_STRERROR_FALSE='#' else GL_COND_OBJ_STRERROR_TRUE='#' GL_COND_OBJ_STRERROR_FALSE= fi : if test -z "${GL_COND_OBJ_STRERROR_TRUE}" && test -z "${GL_COND_OBJ_STRERROR_FALSE}"; then GL_COND_OBJ_STRERROR_TRUE='#' GL_COND_OBJ_STRERROR_FALSE='#' fi printf "%s\n" "#define GNULIB_STRERROR 1" >>confdefs.h GL_GNULIB_STRERROR=1 printf "%s\n" "#define GNULIB_TEST_STRERROR 1" >>confdefs.h if test -n "$ERRNO_H" || test $REPLACE_STRERROR_0 = 1; then GL_COND_OBJ_STRERROR_OVERRIDE_TRUE= GL_COND_OBJ_STRERROR_OVERRIDE_FALSE='#' else GL_COND_OBJ_STRERROR_OVERRIDE_TRUE='#' GL_COND_OBJ_STRERROR_OVERRIDE_FALSE= fi : if test -z "${GL_COND_OBJ_STRERROR_OVERRIDE_TRUE}" && test -z "${GL_COND_OBJ_STRERROR_OVERRIDE_FALSE}"; then GL_COND_OBJ_STRERROR_OVERRIDE_TRUE='#' GL_COND_OBJ_STRERROR_OVERRIDE_FALSE='#' fi if test -z "$GL_COND_OBJ_STRERROR_OVERRIDE_TRUE"; then : if test $ac_cv_header_sys_socket_h != yes; then ac_fn_c_check_header_compile "$LINENO" "winsock2.h" "ac_cv_header_winsock2_h" "$ac_includes_default" if test "x$ac_cv_header_winsock2_h" = xyes then : printf "%s\n" "#define HAVE_WINSOCK2_H 1" >>confdefs.h fi fi if test "$ac_cv_header_winsock2_h" = yes; then HAVE_WINSOCK2_H=1 UNISTD_H_HAVE_WINSOCK2_H=1 SYS_IOCTL_H_HAVE_WINSOCK2_H=1 else HAVE_WINSOCK2_H=0 fi fi ac_fn_check_decl "$LINENO" "localtime_r" "ac_cv_have_decl_localtime_r" "/* mingw's <time.h> provides the functions asctime_r, ctime_r, gmtime_r, localtime_r only if <unistd.h> or <pthread.h> has been included before. */ #if defined __MINGW32__ # include <unistd.h> #endif #include <time.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_localtime_r" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_LOCALTIME_R $ac_have_decl" >>confdefs.h if test $ac_cv_have_decl_localtime_r = no; then HAVE_DECL_LOCALTIME_R=0 fi if test $ac_cv_func_localtime_r = yes; then HAVE_LOCALTIME_R=1 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether localtime_r is compatible with its POSIX signature" >&5 printf %s "checking whether localtime_r is compatible with its POSIX signature... " >&6; } if test ${gl_cv_time_r_posix+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* mingw's <time.h> provides the functions asctime_r, ctime_r, gmtime_r, localtime_r only if <unistd.h> or <pthread.h> has been included before. */ #if defined __MINGW32__ # include <unistd.h> #endif #include <time.h> int main (void) { /* We don't need to append 'restrict's to the argument types, even though the POSIX signature has the 'restrict's, since C99 says they can't affect type compatibility. */ struct tm * (*ptr) (time_t const *, struct tm *) = localtime_r; if (ptr) return 0; /* Check the return type is a pointer. On HP-UX 10 it is 'int'. */ *localtime_r (0, 0); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_time_r_posix=yes else $as_nop gl_cv_time_r_posix=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_time_r_posix" >&5 printf "%s\n" "$gl_cv_time_r_posix" >&6; } if test $gl_cv_time_r_posix = yes; then REPLACE_LOCALTIME_R=0 else REPLACE_LOCALTIME_R=1 fi else HAVE_LOCALTIME_R=0 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether localtime_r exists as an inline function" >&5 printf %s "checking whether localtime_r exists as an inline function... " >&6; } if test ${gl_cv_func_localtime_r_inline+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* mingw's <time.h> provides the functions asctime_r, ctime_r, gmtime_r, localtime_r only if <unistd.h> or <pthread.h> has been included before. */ #if defined __MINGW32__ # include <unistd.h> #endif #include <time.h> int main (void) { time_t a; struct tm r; localtime_r (&a, &r); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_cv_func_localtime_r_inline=yes else $as_nop gl_cv_func_localtime_r_inline=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_localtime_r_inline" >&5 printf "%s\n" "$gl_cv_func_localtime_r_inline" >&6; } if test $gl_cv_func_localtime_r_inline = yes; then REPLACE_LOCALTIME_R=1 fi fi if test $HAVE_LOCALTIME_R = 0 || test $REPLACE_LOCALTIME_R = 1; then GL_COND_OBJ_TIME_R_TRUE= GL_COND_OBJ_TIME_R_FALSE='#' else GL_COND_OBJ_TIME_R_TRUE='#' GL_COND_OBJ_TIME_R_FALSE= fi : if test -z "${GL_COND_OBJ_TIME_R_TRUE}" && test -z "${GL_COND_OBJ_TIME_R_FALSE}"; then GL_COND_OBJ_TIME_R_TRUE='#' GL_COND_OBJ_TIME_R_FALSE='#' fi if test -z "$GL_COND_OBJ_TIME_R_TRUE"; then : : fi GL_GNULIB_TIME_R=1 printf "%s\n" "#define GNULIB_TEST_TIME_R 1" >>confdefs.h # On Mac OS X 10.6, localtime loops forever with some time_t values. # See Bug#27706, Bug#27736, and # https://lists.gnu.org/r/bug-gnulib/2017-07/msg00142.html { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether localtime works even near extrema" >&5 printf %s "checking whether localtime works even near extrema... " >&6; } if test ${gl_cv_func_localtime_works+y} then : printf %s "(cached) " >&6 else $as_nop gl_cv_func_localtime_works=yes if test "$cross_compiling" = yes then : gl_cv_func_localtime_works="guessing yes" else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdlib.h> #include <string.h> #include <unistd.h> #include <time.h> int main (void) { time_t t = -67768038400666600; struct tm *tm; char *tz = getenv ("TZ"); if (! (tz && strcmp (tz, "QQQ0") == 0)) return 0; alarm (2); tm = localtime (&t); /* Use TM and *TM to suppress over-optimization. */ return tm && tm->tm_isdst; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : (TZ=QQQ0 ./conftest$EXEEXT) >/dev/null 2>&1 || gl_cv_func_localtime_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 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_localtime_works" >&5 printf "%s\n" "$gl_cv_func_localtime_works" >&6; } if test "$gl_cv_func_localtime_works" = no; then printf "%s\n" "#define HAVE_LOCALTIME_INFLOOP_BUG 1" >>confdefs.h fi ac_fn_c_check_type "$LINENO" "timezone_t" "ac_cv_type_timezone_t" "#include <time.h> " if test "x$ac_cv_type_timezone_t" = xyes then : printf "%s\n" "#define HAVE_TIMEZONE_T 1" >>confdefs.h fi if test "$ac_cv_type_timezone_t" = yes; then HAVE_TIMEZONE_T=1 fi if test $HAVE_TIMEZONE_T = 0; then GL_COND_OBJ_TIME_RZ_TRUE= GL_COND_OBJ_TIME_RZ_FALSE='#' else GL_COND_OBJ_TIME_RZ_TRUE='#' GL_COND_OBJ_TIME_RZ_FALSE= fi : if test -z "${GL_COND_OBJ_TIME_RZ_TRUE}" && test -z "${GL_COND_OBJ_TIME_RZ_FALSE}"; then GL_COND_OBJ_TIME_RZ_TRUE='#' GL_COND_OBJ_TIME_RZ_FALSE='#' fi GL_GNULIB_TIME_RZ=1 printf "%s\n" "#define GNULIB_TEST_TIME_RZ 1" >>confdefs.h REPLACE_TIMEGM=0 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for timegm" >&5 printf %s "checking for timegm... " >&6; } if test ${gl_cv_onwards_func_timegm+y} then : printf %s "(cached) " >&6 else $as_nop exec 9>&6 6>/dev/null case "$host_os" in linux*-android*) ac_fn_check_decl "$LINENO" "timegm" "ac_cv_have_decl_timegm" "#include <time.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_timegm" = xyes then : fi if test $ac_cv_have_decl_timegm = yes; then ac_fn_c_check_func "$LINENO" "timegm" "ac_cv_func_timegm" if test "x$ac_cv_func_timegm" = xyes then : fi if test $ac_cv_func_timegm = yes; then gl_cv_onwards_func_timegm=yes else gl_cv_onwards_func_timegm='future OS version' fi else gl_cv_onwards_func_timegm='future OS version' fi ;; *) ac_fn_c_check_func "$LINENO" "timegm" "ac_cv_func_timegm" if test "x$ac_cv_func_timegm" = xyes then : fi gl_cv_onwards_func_timegm=$ac_cv_func_timegm ;; esac exec 6>&9 9>&- fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_onwards_func_timegm" >&5 printf "%s\n" "$gl_cv_onwards_func_timegm" >&6; } case "$gl_cv_onwards_func_timegm" in future*) ac_cv_func_timegm=no ;; *) ac_cv_func_timegm=$gl_cv_onwards_func_timegm ;; esac if test $ac_cv_func_timegm = yes; then printf "%s\n" "#define HAVE_TIMEGM 1" >>confdefs.h fi if test $ac_cv_func_timegm = yes; then if test "$gl_cv_func_working_mktime" != yes; then # Assume that timegm is buggy if mktime is. REPLACE_TIMEGM=1 fi else HAVE_TIMEGM=0 case "$gl_cv_onwards_func_timegm" in future*) REPLACE_TIMEGM=1 ;; esac fi if test $HAVE_TIMEGM = 0 || test $REPLACE_TIMEGM = 1; then GL_COND_OBJ_TIMEGM_TRUE= GL_COND_OBJ_TIMEGM_FALSE='#' else GL_COND_OBJ_TIMEGM_TRUE='#' GL_COND_OBJ_TIMEGM_FALSE= fi : if test -z "${GL_COND_OBJ_TIMEGM_TRUE}" && test -z "${GL_COND_OBJ_TIMEGM_FALSE}"; then GL_COND_OBJ_TIMEGM_TRUE='#' GL_COND_OBJ_TIMEGM_FALSE='#' fi if test -z "$GL_COND_OBJ_TIMEGM_TRUE"; then : : fi GL_GNULIB_TIMEGM=1 printf "%s\n" "#define GNULIB_TEST_TIMEGM 1" >>confdefs.h REPLACE_TZSET=0 case "$host_os" in mingw*) REPLACE_TZSET=1 ;; esac if test $REPLACE_TZSET = 1; then GL_COND_OBJ_TZSET_TRUE= GL_COND_OBJ_TZSET_FALSE='#' else GL_COND_OBJ_TZSET_TRUE='#' GL_COND_OBJ_TZSET_FALSE= fi : if test -z "${GL_COND_OBJ_TZSET_TRUE}" && test -z "${GL_COND_OBJ_TZSET_FALSE}"; then GL_COND_OBJ_TZSET_TRUE='#' GL_COND_OBJ_TZSET_FALSE='#' fi GL_GNULIB_TZSET=1 printf "%s\n" "#define GNULIB_TEST_TZSET 1" >>confdefs.h if test $ac_cv_have_decl_unsetenv = no; then HAVE_DECL_UNSETENV=0 fi ac_fn_c_check_func "$LINENO" "unsetenv" "ac_cv_func_unsetenv" if test "x$ac_cv_func_unsetenv" = xyes then : printf "%s\n" "#define HAVE_UNSETENV 1" >>confdefs.h fi if test $ac_cv_func_unsetenv = no; then HAVE_UNSETENV=0 else HAVE_UNSETENV=1 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for unsetenv() return type" >&5 printf %s "checking for unsetenv() return type... " >&6; } if test ${gt_cv_func_unsetenv_ret+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #undef _BSD #define _BSD 1 /* unhide unsetenv declaration in OSF/1 5.1 <stdlib.h> */ #include <stdlib.h> extern #ifdef __cplusplus "C" #endif int unsetenv (const char *name); int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gt_cv_func_unsetenv_ret='int' else $as_nop gt_cv_func_unsetenv_ret='void' fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_unsetenv_ret" >&5 printf "%s\n" "$gt_cv_func_unsetenv_ret" >&6; } if test $gt_cv_func_unsetenv_ret = 'void'; then printf "%s\n" "#define VOID_UNSETENV 1" >>confdefs.h REPLACE_UNSETENV=1 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether unsetenv obeys POSIX" >&5 printf %s "checking whether unsetenv obeys POSIX... " >&6; } if test ${gl_cv_func_unsetenv_works+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on glibc systems. *-gnu*) gl_cv_func_unsetenv_works="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_unsetenv_works="$gl_cross_guess_normal" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdlib.h> #include <errno.h> extern char **environ; $gl_mda_defines int main (void) { char entry1[] = "a=1"; char entry2[] = "b=2"; char *env[] = { entry1, entry2, NULL }; if (putenv ((char *) "a=1")) return 1; if (putenv (entry2)) return 2; entry2[0] = 'a'; unsetenv ("a"); if (getenv ("a")) return 3; if (!unsetenv ("") || errno != EINVAL) return 4; entry2[0] = 'b'; environ = env; if (!getenv ("a")) return 5; entry2[0] = 'a'; unsetenv ("a"); if (getenv ("a")) return 6; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_unsetenv_works=yes else $as_nop gl_cv_func_unsetenv_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 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_unsetenv_works" >&5 printf "%s\n" "$gl_cv_func_unsetenv_works" >&6; } case "$gl_cv_func_unsetenv_works" in *yes) ;; *) REPLACE_UNSETENV=1 ;; esac fi if test $HAVE_UNSETENV = 0 || test $REPLACE_UNSETENV = 1; then GL_COND_OBJ_UNSETENV_TRUE= GL_COND_OBJ_UNSETENV_FALSE='#' else GL_COND_OBJ_UNSETENV_TRUE='#' GL_COND_OBJ_UNSETENV_FALSE= fi : if test -z "${GL_COND_OBJ_UNSETENV_TRUE}" && test -z "${GL_COND_OBJ_UNSETENV_FALSE}"; then GL_COND_OBJ_UNSETENV_TRUE='#' GL_COND_OBJ_UNSETENV_FALSE='#' fi if test -z "$GL_COND_OBJ_UNSETENV_TRUE"; then : fi GL_GNULIB_UNSETENV=1 printf "%s\n" "#define GNULIB_TEST_UNSETENV 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for variable-length arrays" >&5 printf %s "checking for variable-length arrays... " >&6; } if test ${ac_cv_c_vararrays+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC_NO_VLA__ defined #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "defined" >/dev/null 2>&1 then : ac_cv_c_vararrays='no: __STDC_NO_VLA__ is defined' else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Test for VLA support. This test is partly inspired from examples in the C standard. Use at least two VLA functions to detect the GCC 3.4.3 bug described in: https://lists.gnu.org/archive/html/bug-gnulib/2014-08/msg00014.html */ #ifdef __STDC_NO_VLA__ syntax error; #else extern int n; int B[100]; int fvla (int m, int C[m][m]); int simple (int count, int all[static count]) { return all[count - 1]; } int fvla (int m, int C[m][m]) { typedef int VLA[m][m]; VLA x; int D[m]; static int (*q)[m] = &B; int (*s)[n] = q; return C && &x[0][0] == &D[0] && &D[0] == s[0]; } #endif int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_c_vararrays=yes else $as_nop ac_cv_c_vararrays=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -rf conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_vararrays" >&5 printf "%s\n" "$ac_cv_c_vararrays" >&6; } if test "$ac_cv_c_vararrays" = yes; then printf "%s\n" "#define HAVE_C_VARARRAYS 1" >>confdefs.h elif test "$ac_cv_c_vararrays" = no; then printf "%s\n" "#define __STDC_NO_VLA__ 1" >>confdefs.h fi if test $ac_cv_func_wcrtomb = no; then HAVE_WCRTOMB=0 ac_fn_check_decl "$LINENO" "wcrtomb" "ac_cv_have_decl_wcrtomb" " #include <wchar.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_wcrtomb" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_WCRTOMB $ac_have_decl" >>confdefs.h if test $ac_cv_have_decl_wcrtomb = yes; then REPLACE_WCRTOMB=1 fi else if test $REPLACE_WCRTOMB = 0; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether wcrtomb works in the C locale" >&5 printf %s "checking whether wcrtomb works in the C locale... " >&6; } if test ${gl_cv_func_wcrtomb_works+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case "$host_os" in # Guess no on Android. linux*-android*) gl_cv_func_wcrtomb_works="guessing no";; # Guess yes otherwise. *) gl_cv_func_wcrtomb_works="guessing yes";; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <string.h> #include <stdlib.h> #include <wchar.h> int main () { mbstate_t state; char out[64]; int count; memset (&state, 0, sizeof (state)); out[0] = 'x'; count = wcrtomb (out, L'a', &state); return !(count == 1 && out[0] == 'a'); } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_wcrtomb_works=yes else $as_nop gl_cv_func_wcrtomb_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 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_wcrtomb_works" >&5 printf "%s\n" "$gl_cv_func_wcrtomb_works" >&6; } case "$gl_cv_func_wcrtomb_works" in *yes) ;; *) printf "%s\n" "#define WCRTOMB_C_LOCALE_BUG 1" >>confdefs.h REPLACE_WCRTOMB=1 ;; esac fi if test $REPLACE_WCRTOMB = 0; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether wcrtomb return value is correct" >&5 printf %s "checking whether wcrtomb return value is correct... " >&6; } if test ${gl_cv_func_wcrtomb_retval+y} then : printf %s "(cached) " >&6 else $as_nop case "$host_os" in # Guess no on AIX 4, OSF/1, Solaris, native Windows. aix4* | osf* | solaris* | mingw*) gl_cv_func_wcrtomb_retval="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_wcrtomb_retval="guessing yes" ;; esac if test $LOCALE_FR != none || test $LOCALE_FR_UTF8 != none || test $LOCALE_JA != none || test $LOCALE_ZH_CN != none; then if test "$cross_compiling" = yes then : : else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> #include <string.h> #include <wchar.h> #include <stdlib.h> int main () { int result = 0; if (setlocale (LC_ALL, "$LOCALE_FR") != NULL) { if (wcrtomb (NULL, 0, NULL) != 1) result |= 1; } if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) { if (wcrtomb (NULL, 0, NULL) != 1) result |= 2; { wchar_t wc = (wchar_t) 0xBADFACE; if (mbtowc (&wc, "\303\274", 2) == 2) if (wcrtomb (NULL, wc, NULL) != 1) result |= 2; } } if (setlocale (LC_ALL, "$LOCALE_JA") != NULL) { if (wcrtomb (NULL, 0, NULL) != 1) result |= 4; } if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) { if (wcrtomb (NULL, 0, NULL) != 1) result |= 8; } return result; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_wcrtomb_retval=yes else $as_nop gl_cv_func_wcrtomb_retval=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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_wcrtomb_retval" >&5 printf "%s\n" "$gl_cv_func_wcrtomb_retval" >&6; } case "$gl_cv_func_wcrtomb_retval" in *yes) ;; *) printf "%s\n" "#define WCRTOMB_RETVAL_BUG 1" >>confdefs.h REPLACE_WCRTOMB=1 ;; esac fi fi if test $HAVE_WCRTOMB = 0 || test $REPLACE_WCRTOMB = 1; then GL_COND_OBJ_WCRTOMB_TRUE= GL_COND_OBJ_WCRTOMB_FALSE='#' else GL_COND_OBJ_WCRTOMB_TRUE='#' GL_COND_OBJ_WCRTOMB_FALSE= fi : if test -z "${GL_COND_OBJ_WCRTOMB_TRUE}" && test -z "${GL_COND_OBJ_WCRTOMB_FALSE}"; then GL_COND_OBJ_WCRTOMB_TRUE='#' GL_COND_OBJ_WCRTOMB_FALSE='#' fi if test -z "$GL_COND_OBJ_WCRTOMB_TRUE"; then : : fi GL_GNULIB_WCRTOMB=1 printf "%s\n" "#define GNULIB_TEST_WCRTOMB 1" >>confdefs.h if case "$host_os" in mingw*) true;; *) false;; esac; then GL_COND_OBJ_WINDOWS_MUTEX_TRUE= GL_COND_OBJ_WINDOWS_MUTEX_FALSE='#' else GL_COND_OBJ_WINDOWS_MUTEX_TRUE='#' GL_COND_OBJ_WINDOWS_MUTEX_FALSE= fi : if test -z "${GL_COND_OBJ_WINDOWS_MUTEX_TRUE}" && test -z "${GL_COND_OBJ_WINDOWS_MUTEX_FALSE}"; then GL_COND_OBJ_WINDOWS_MUTEX_TRUE='#' GL_COND_OBJ_WINDOWS_MUTEX_FALSE='#' fi if case "$host_os" in mingw*) true;; *) false;; esac; then GL_COND_OBJ_WINDOWS_ONCE_TRUE= GL_COND_OBJ_WINDOWS_ONCE_FALSE='#' else GL_COND_OBJ_WINDOWS_ONCE_TRUE='#' GL_COND_OBJ_WINDOWS_ONCE_FALSE= fi : if test -z "${GL_COND_OBJ_WINDOWS_ONCE_TRUE}" && test -z "${GL_COND_OBJ_WINDOWS_ONCE_FALSE}"; then GL_COND_OBJ_WINDOWS_ONCE_TRUE='#' GL_COND_OBJ_WINDOWS_ONCE_FALSE='#' fi if case "$host_os" in mingw*) true;; *) false;; esac; then GL_COND_OBJ_WINDOWS_RECMUTEX_TRUE= GL_COND_OBJ_WINDOWS_RECMUTEX_FALSE='#' else GL_COND_OBJ_WINDOWS_RECMUTEX_TRUE='#' GL_COND_OBJ_WINDOWS_RECMUTEX_FALSE= fi : if test -z "${GL_COND_OBJ_WINDOWS_RECMUTEX_TRUE}" && test -z "${GL_COND_OBJ_WINDOWS_RECMUTEX_FALSE}"; then GL_COND_OBJ_WINDOWS_RECMUTEX_TRUE='#' GL_COND_OBJ_WINDOWS_RECMUTEX_FALSE='#' fi if case "$host_os" in mingw*) true;; *) false;; esac; then GL_COND_OBJ_WINDOWS_RWLOCK_TRUE= GL_COND_OBJ_WINDOWS_RWLOCK_FALSE='#' else GL_COND_OBJ_WINDOWS_RWLOCK_TRUE='#' GL_COND_OBJ_WINDOWS_RWLOCK_FALSE= fi : if test -z "${GL_COND_OBJ_WINDOWS_RWLOCK_TRUE}" && test -z "${GL_COND_OBJ_WINDOWS_RWLOCK_FALSE}"; then GL_COND_OBJ_WINDOWS_RWLOCK_TRUE='#' GL_COND_OBJ_WINDOWS_RWLOCK_FALSE='#' fi : printf "%s\n" "#define GNULIB_XALLOC 1" >>confdefs.h # End of code from modules gltests_libdeps= gltests_ltlibdeps= gl_source_base='tests' gl_source_base_prefix= gltests_WITNESS=IN_`echo "${PACKAGE-$PACKAGE_TARNAME}" | LC_ALL=C tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ | LC_ALL=C sed -e 's/[^A-Z0-9_]/_/g'`_GNULIB_TESTS gl_module_indicator_condition=$gltests_WITNESS LIBGNU_LIBDEPS="$gl_libdeps" LIBGNU_LTLIBDEPS="$gl_ltlibdeps" # Gettext. 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+y} then : withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else $as_nop with_gnu_ld=no fi # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which # contains only /bin. Note that ksh looks also at the FPATH variable, # so we have to set that as well for the test. 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 ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 printf %s "checking for ld used by $CC... " >&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. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 printf %s "checking for GNU ld... " >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 printf %s "checking for non-GNU ld... " >&6; } fi if test ${acl_cv_path_LD+y} then : printf %s "(cached) " >&6 else $as_nop if test -z "$LD"; then acl_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$acl_save_ifs" 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 variants of GNU ld 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="$acl_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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 printf "%s\n" "$LD" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 printf %s "checking if the linker ($LD) is GNU ld... " >&6; } if test ${acl_cv_prog_gnu_ld+y} then : printf %s "(cached) " >&6 else $as_nop # I'd rather use --version here, but apparently some GNU lds 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $acl_cv_prog_gnu_ld" >&5 printf "%s\n" "$acl_cv_prog_gnu_ld" >&6; } with_gnu_ld=$acl_cv_prog_gnu_ld { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for shared library run path origin" >&5 printf %s "checking for shared library run path origin... " >&6; } if test ${acl_cv_rpath+y} then : printf %s "(cached) " >&6 else $as_nop 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $acl_cv_rpath" >&5 printf "%s\n" "$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+y} then : enableval=$enable_rpath; : else $as_nop enable_rpath=yes fi acl_libdirstem=lib acl_libdirstem2= case "$host_os" in solaris*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 64-bit host" >&5 printf %s "checking for 64-bit host... " >&6; } if test ${gl_cv_solaris_64bit+y} then : printf %s "(cached) " >&6 else $as_nop 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 $as_nop gl_cv_solaris_64bit=no fi rm -rf conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_solaris_64bit" >&5 printf "%s\n" "$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+y} 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for iconv" >&5 printf %s "checking for iconv... " >&6; } if test ${am_cv_func_iconv+y} then : printf %s "(cached) " >&6 else $as_nop 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 (void) { 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.beam \ 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 (void) { 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.beam \ conftest$ac_exeext conftest.$ac_ext LIBS="$am_save_LIBS" fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv" >&5 printf "%s\n" "$am_cv_func_iconv" >&6; } if test "$am_cv_func_iconv" = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working iconv" >&5 printf %s "checking for working iconv... " >&6; } if test ${am_cv_func_iconv_works+y} then : printf %s "(cached) " >&6 else $as_nop 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 $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <iconv.h> #include <string.h> int main () { int result = 0; /* 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) result |= 1; iconv_close (cd_utf8_to_88591); } } /* 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) result |= 2; iconv_close (cd_ascii_to_88591); } } /* Test against AIX 6.1..7.1 bug: Buffer overrun. */ { iconv_t cd_88591_to_utf8 = iconv_open ("UTF-8", "ISO-8859-1"); if (cd_88591_to_utf8 != (iconv_t)(-1)) { static const char input[] = "\304"; static char buf[2] = { (char)0xDE, (char)0xAD }; const char *inptr = input; size_t inbytesleft = 1; char *outptr = buf; size_t outbytesleft = 1; size_t res = iconv (cd_88591_to_utf8, (char **) &inptr, &inbytesleft, &outptr, &outbytesleft); if (res != (size_t)(-1) || outptr - buf > 1 || buf[1] != (char)0xAD) result |= 4; iconv_close (cd_88591_to_utf8); } } #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) result |= 8; iconv_close (cd_88591_to_utf8); } } #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)) result |= 16; return result; } _ACEOF if ac_fn_c_try_run "$LINENO" then : am_cv_func_iconv_works=yes else $as_nop 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv_works" >&5 printf "%s\n" "$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 printf "%s\n" "#define HAVE_ICONV 1" >>confdefs.h fi if test "$am_cv_lib_iconv" = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to link with libiconv" >&5 printf %s "checking how to link with libiconv... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LIBICONV" >&5 printf "%s\n" "$LIBICONV" >&6; } else CPPFLAGS="$am_save_CPPFLAGS" LIBICONV= LTLIBICONV= fi if test "$am_cv_func_iconv" = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for iconv declaration" >&5 printf %s "checking for iconv declaration... " >&6; } if test ${am_cv_proto_iconv+y} then : printf %s "(cached) " >&6 else $as_nop 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(_MSC_VER) || 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 (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : am_cv_proto_iconv_arg1="" else $as_nop am_cv_proto_iconv_arg1="const" fi rm -f core conftest.err conftest.$ac_objext conftest.beam 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/( /(/'` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_proto_iconv" >&5 printf "%s\n" " $am_cv_proto_iconv" >&6; } printf "%s\n" "#define ICONV_CONST $am_cv_proto_iconv_arg1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 printf %s "checking for a sed that does not truncate output... " >&6; } if test ${ac_cv_path_SED+y} then : printf %s "(cached) " >&6 else $as_nop ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed { ac_script=; unset ac_script;} if test -z "$SED"; then ac_path_SED_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 do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in sed gsed do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_SED="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED case `"$ac_path_SED" --version 2>&1` in *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; *) ac_count=0 printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" printf "%s\n" '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "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_SED_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_SED="$ac_path_SED" ac_path_SED_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_SED_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_SED"; then as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 fi else ac_cv_path_SED=$SED fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 printf "%s\n" "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5 printf %s "checking whether NLS is requested... " >&6; } # Check whether --enable-nls was given. if test ${enable_nls+y} then : enableval=$enable_nls; USE_NLS=$enableval else $as_nop USE_NLS=yes fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 printf "%s\n" "$USE_NLS" >&6; } GETTEXT_MACRO_VERSION=0.19 # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which # contains only /bin. Note that ksh looks also at the FPATH variable, # so we have to set that as well for the test. 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 # 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_MSGFMT+y} then : printf %s "(cached) " >&6 else $as_nop 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5 printf "%s\n" "$MSGFMT" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi # Extract the first word of "gmsgfmt", so it can be a program name with args. set dummy gmsgfmt; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_GMSGFMT+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5 printf "%s\n" "$GMSGFMT" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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 # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which # contains only /bin. Note that ksh looks also at the FPATH variable, # so we have to set that as well for the test. 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 # 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_XGETTEXT+y} then : printf %s "(cached) " >&6 else $as_nop 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5 printf "%s\n" "$XGETTEXT" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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 # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which # contains only /bin. Note that ksh looks also at the FPATH variable, # so we have to set that as well for the test. 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 # 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_MSGMERGE+y} then : printf %s "(cached) " >&6 else $as_nop 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MSGMERGE" >&5 printf "%s\n" "$MSGMERGE" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for CFPreferencesCopyAppValue" >&5 printf %s "checking for CFPreferencesCopyAppValue... " >&6; } if test ${gt_cv_func_CFPreferencesCopyAppValue+y} then : printf %s "(cached) " >&6 else $as_nop 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 (void) { CFPreferencesCopyAppValue(NULL, NULL) ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gt_cv_func_CFPreferencesCopyAppValue=yes else $as_nop gt_cv_func_CFPreferencesCopyAppValue=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS="$gt_save_LIBS" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5 printf "%s\n" "$gt_cv_func_CFPreferencesCopyAppValue" >&6; } if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then printf "%s\n" "#define HAVE_CFPREFERENCESCOPYAPPVALUE 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for CFLocaleCopyCurrent" >&5 printf %s "checking for CFLocaleCopyCurrent... " >&6; } if test ${gt_cv_func_CFLocaleCopyCurrent+y} then : printf %s "(cached) " >&6 else $as_nop 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 (void) { CFLocaleCopyCurrent(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gt_cv_func_CFLocaleCopyCurrent=yes else $as_nop gt_cv_func_CFLocaleCopyCurrent=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS="$gt_save_LIBS" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFLocaleCopyCurrent" >&5 printf "%s\n" "$gt_cv_func_CFLocaleCopyCurrent" >&6; } if test $gt_cv_func_CFLocaleCopyCurrent = yes; then printf "%s\n" "#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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libc" >&5 printf %s "checking for GNU gettext in libc... " >&6; } if eval test \${$gt_func_gnugettext_libc+y} then : printf %s "(cached) " >&6 else $as_nop 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 (void) { 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 $as_nop eval "$gt_func_gnugettext_libc=no" fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$gt_func_gnugettext_libc { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for iconv" >&5 printf %s "checking for iconv... " >&6; } if test ${am_cv_func_iconv+y} then : printf %s "(cached) " >&6 else $as_nop 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 (void) { 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.beam \ 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 (void) { 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.beam \ conftest$ac_exeext conftest.$ac_ext LIBS="$am_save_LIBS" fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv" >&5 printf "%s\n" "$am_cv_func_iconv" >&6; } if test "$am_cv_func_iconv" = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working iconv" >&5 printf %s "checking for working iconv... " >&6; } if test ${am_cv_func_iconv_works+y} then : printf %s "(cached) " >&6 else $as_nop 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 $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <iconv.h> #include <string.h> int main () { int result = 0; /* 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) result |= 1; iconv_close (cd_utf8_to_88591); } } /* 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) result |= 2; iconv_close (cd_ascii_to_88591); } } /* Test against AIX 6.1..7.1 bug: Buffer overrun. */ { iconv_t cd_88591_to_utf8 = iconv_open ("UTF-8", "ISO-8859-1"); if (cd_88591_to_utf8 != (iconv_t)(-1)) { static const char input[] = "\304"; static char buf[2] = { (char)0xDE, (char)0xAD }; const char *inptr = input; size_t inbytesleft = 1; char *outptr = buf; size_t outbytesleft = 1; size_t res = iconv (cd_88591_to_utf8, (char **) &inptr, &inbytesleft, &outptr, &outbytesleft); if (res != (size_t)(-1) || outptr - buf > 1 || buf[1] != (char)0xAD) result |= 4; iconv_close (cd_88591_to_utf8); } } #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) result |= 8; iconv_close (cd_88591_to_utf8); } } #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)) result |= 16; return result; } _ACEOF if ac_fn_c_try_run "$LINENO" then : am_cv_func_iconv_works=yes else $as_nop 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv_works" >&5 printf "%s\n" "$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 printf "%s\n" "#define HAVE_ICONV 1" >>confdefs.h fi if test "$am_cv_lib_iconv" = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to link with libiconv" >&5 printf %s "checking how to link with libiconv... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LIBICONV" >&5 printf "%s\n" "$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+y} 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libintl" >&5 printf %s "checking for GNU gettext in libintl... " >&6; } if eval test \${$gt_func_gnugettext_libintl+y} then : printf %s "(cached) " >&6 else $as_nop 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 (void) { 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 $as_nop eval "$gt_func_gnugettext_libintl=no" fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ 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 (void) { 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.beam \ conftest$ac_exeext conftest.$ac_ext fi CPPFLAGS="$gt_save_CPPFLAGS" LIBS="$gt_save_LIBS" fi eval ac_res=\$$gt_func_gnugettext_libintl { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$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 printf "%s\n" "#define ENABLE_NLS 1" >>confdefs.h else USE_NLS=no fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to use NLS" >&5 printf %s "checking whether to use NLS... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 printf "%s\n" "$USE_NLS" >&6; } if test "$USE_NLS" = "yes"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking where the gettext function comes from" >&5 printf %s "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_source" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to link with libintl" >&5 printf %s "checking how to link with libintl... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LIBINTL" >&5 printf "%s\n" "$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 printf "%s\n" "#define HAVE_GETTEXT 1" >>confdefs.h printf "%s\n" "#define HAVE_DCGETTEXT 1" >>confdefs.h fi POSUB=po fi INTLLIBS="$LIBINTL" IMPRIMATUR_MODULE_DIR=doc/imprimatur # Doc hints. # Select a rendition level: # DISTRIB for stable releases (at most one dot in the version number) # and maintenance releases (two dots, patchlevel < 50) # PROOF for alpha releases. # PUBLISH can only be required manually when running make in doc/ case `echo $VERSION|sed 's/[^.]//g'` in ""|".") RENDITION=DISTRIB;; "..") if test `echo $VERSION | sed 's/.*\.//'` -lt 50; then RENDITION=DISTRIB else RENDITION=PROOF fi;; *) RENDITION=PROOF;; esac IMPRIMATUR_MAKEINFOFLAGS='-I $(top_srcdir)/doc/imprimatur -D $(RENDITION)' if false; then IMPRIMATUR_COND_MAKEDOC_TRUE= IMPRIMATUR_COND_MAKEDOC_FALSE='#' else IMPRIMATUR_COND_MAKEDOC_TRUE='#' IMPRIMATUR_COND_MAKEDOC_FALSE= fi if false; then IMPRIMATUR_COND_FRENCHSPACING_TRUE= IMPRIMATUR_COND_FRENCHSPACING_FALSE='#' else IMPRIMATUR_COND_FRENCHSPACING_TRUE='#' IMPRIMATUR_COND_FRENCHSPACING_FALSE= fi if false; then IMPRIMATUR_COND_DIST_INFO_TRUE= IMPRIMATUR_COND_DIST_INFO_FALSE='#' else IMPRIMATUR_COND_DIST_INFO_TRUE='#' IMPRIMATUR_COND_DIST_INFO_FALSE= fi ac_config_files="$ac_config_files doc/imprimatur/Makefile" if test -z "$IMPRIMATUR_COND_MAKEDOC_TRUE"; then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Add doc/imprimatur/Makedoc to your config files" >&5 printf "%s\n" "$as_me: Add doc/imprimatur/Makedoc to your config files" >&6;} fi # Check whether --with-default-config was given. if test ${with_default_config+y} then : withval=$with_default_config; dir=`$as_dirname -- "$withval" || $as_expr X"$withval" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$withval" : 'X\(//\)[^/]' \| \ X"$withval" : 'X\(//\)$' \| \ X"$withval" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$withval" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` if test -d $dir; then dir=`cd $dir; pwd` else as_fn_error $? "No such directory: $dir" "$LINENO" 5 fi name=`expr x"$withval" : '.*/\(.*\)'` RUSH_DEFAULT_CONFIG=$dir/$name fi printf "%s\n" "#define GNULIB_XALLOC_DIE 1" >>confdefs.h # Initialize the test suite. ac_config_commands="$ac_config_commands tests/atconfig" ac_config_files="$ac_config_files tests/Makefile tests/atlocal" AUTOM4TE=${AUTOM4TE-"${am_missing_run}autom4te"} ac_config_files="$ac_config_files Makefile gnu/Makefile lib/Makefile src/Makefile etc/Makefile doc/Makefile po/Makefile.in" 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_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 printf "%s\n" "$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+y} || &/ 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 printf "%s\n" "$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=`printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 printf %s "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: done" >&5 printf "%s\n" "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 # Check whether --enable-year2038 was given. if test ${enable_year2038+y} then : enableval=$enable_year2038; fi if test -z "${GL_COND_LIBTOOL_TRUE}" && test -z "${GL_COND_LIBTOOL_FALSE}"; then as_fn_error $? "conditional \"GL_COND_LIBTOOL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi gl_libobjs= gl_ltlibobjs= gl_libobjdeps= if test -n "$gl_LIBOBJS"; then # Remove the extension. sed_drop_objext='s/\.o$//;s/\.obj$//' sed_dirname1='s,//*,/,g' sed_dirname2='s,\(.\)/$,\1,' sed_dirname3='s,^[^/]*$,.,' sed_dirname4='s,\(.\)/[^/]*$,\1,' sed_basename1='s,.*/,,' for i in `for i in $gl_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do gl_libobjs="$gl_libobjs $i.$ac_objext" gl_ltlibobjs="$gl_ltlibobjs $i.lo" i_dir=`echo "$i" | sed -e "$sed_dirname1" -e "$sed_dirname2" -e "$sed_dirname3" -e "$sed_dirname4"` i_base=`echo "$i" | sed -e "$sed_basename1"` gl_libobjdeps="$gl_libobjdeps $i_dir/\$(DEPDIR)/$i_base.Po" done fi gl_LIBOBJS=$gl_libobjs gl_LTLIBOBJS=$gl_ltlibobjs gl_LIBOBJDEPS=$gl_libobjdeps gltests_libobjs= gltests_ltlibobjs= gltests_libobjdeps= if test -n "$gltests_LIBOBJS"; then # Remove the extension. sed_drop_objext='s/\.o$//;s/\.obj$//' sed_dirname1='s,//*,/,g' sed_dirname2='s,\(.\)/$,\1,' sed_dirname3='s,^[^/]*$,.,' sed_dirname4='s,\(.\)/[^/]*$,\1,' sed_basename1='s,.*/,,' for i in `for i in $gltests_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do gltests_libobjs="$gltests_libobjs $i.$ac_objext" gltests_ltlibobjs="$gltests_ltlibobjs $i.lo" i_dir=`echo "$i" | sed -e "$sed_dirname1" -e "$sed_dirname2" -e "$sed_dirname3" -e "$sed_dirname4"` i_base=`echo "$i" | sed -e "$sed_basename1"` gltests_libobjdeps="$gltests_libobjdeps $i_dir/\$(DEPDIR)/$i_base.Po" done fi gltests_LIBOBJS=$gltests_libobjs gltests_LTLIBOBJS=$gltests_ltlibobjs gltests_LIBOBJDEPS=$gltests_libobjdeps if test -z "${IMPRIMATUR_COND_MAKEDOC_TRUE}" && test -z "${IMPRIMATUR_COND_MAKEDOC_FALSE}"; then as_fn_error $? "conditional \"IMPRIMATUR_COND_MAKEDOC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${IMPRIMATUR_COND_FRENCHSPACING_TRUE}" && test -z "${IMPRIMATUR_COND_FRENCHSPACING_FALSE}"; then as_fn_error $? "conditional \"IMPRIMATUR_COND_FRENCHSPACING\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${IMPRIMATUR_COND_DIST_INFO_TRUE}" && test -z "${IMPRIMATUR_COND_DIST_INFO_FALSE}"; then as_fn_error $? "conditional \"IMPRIMATUR_COND_DIST_INFO\" 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" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 printf "%s\n" "$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 as_nop=: if test ${ZSH_VERSION+y} && (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 $as_nop case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0</dev/null; fi if (exec 3>&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; 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 # 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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 printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # 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 printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$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_nop 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_nop 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 || printf "%s\n" 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 # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. 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 # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_echo='printf %s\n' as_echo_n='printf %s' 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=`printf "%s\n" "$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 || printf "%s\n" 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 rush $as_me 2.4, which was generated by GNU Autoconf 2.71. 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-rush@gnu.org>. GNU rush home page: <https://www.gnu.org.ua/software/rush/>. General help using GNU software: <https://www.gnu.org/gethelp/>." _ACEOF ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"` ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"` cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ GNU rush config.status 2.4 configured by $0, generated by GNU Autoconf 2.71, with options \\"\$ac_cs_config\\" Copyright (C) 2021 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 ) printf "%s\n" "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) printf "%s\n" "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`printf "%s\n" "$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=`printf "%s\n" "$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 ) printf "%s\n" "$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 \printf "%s\n" "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 printf "%s\n" "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}" # 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%}" ac_cv_exeext="$ac_cv_exeext" _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" ;; "po-directories") CONFIG_COMMANDS="$CONFIG_COMMANDS po-directories" ;; "doc/imprimatur/Makefile") CONFIG_FILES="$CONFIG_FILES doc/imprimatur/Makefile" ;; "tests/atconfig") CONFIG_COMMANDS="$CONFIG_COMMANDS tests/atconfig" ;; "tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;; "tests/atlocal") CONFIG_FILES="$CONFIG_FILES tests/atlocal" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "gnu/Makefile") CONFIG_FILES="$CONFIG_FILES gnu/Makefile" ;; "lib/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Makefile" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "etc/Makefile") CONFIG_FILES="$CONFIG_FILES etc/Makefile" ;; "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;; *) 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+y} || CONFIG_FILES=$config_files test ${CONFIG_HEADERS+y} || CONFIG_HEADERS=$config_headers test ${CONFIG_COMMANDS+y} || 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=`printf "%s\n" "$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 '` printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 printf "%s\n" "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`printf "%s\n" "$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 || printf "%s\n" 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=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$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@*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 printf "%s\n" "$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"; } && { printf "%s\n" "$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 printf "%s\n" "$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 { printf "%s\n" "/* $configure_input */" >&1 \ && 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 printf "%s\n" "$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 printf "%s\n" "/* $configure_input */" >&1 \ && 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 || printf "%s\n" 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) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 printf "%s\n" "$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. # TODO: see whether this extra hack can be removed once we start # requiring Autoconf 2.70 or later. case $CONFIG_FILES in #( *\'*) : eval set x "$CONFIG_FILES" ;; #( *) : set x $CONFIG_FILES ;; #( *) : ;; esac shift # Used to flag and report bootstrapping failures. am_rc=0 for am_mf do # Strip MF so we end up with the name of the file. am_mf=`printf "%s\n" "$am_mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile which includes # dependency-tracking related rules and includes. # Grep'ing the whole file directly is not great: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ || continue am_dirpart=`$as_dirname -- "$am_mf" || $as_expr X"$am_mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$am_mf" : 'X\(//\)[^/]' \| \ X"$am_mf" : 'X\(//\)$' \| \ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$am_mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` am_filepart=`$as_basename -- "$am_mf" || $as_expr X/"$am_mf" : '.*/\([^/][^/]*\)/*$' \| \ X"$am_mf" : 'X\(//\)$' \| \ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$am_mf" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` { echo "$as_me:$LINENO: cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles" >&5 (cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } || am_rc=$? done if test $am_rc -ne 0; then { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "Something went wrong bootstrapping makefile fragments for automatic dependency tracking. If GNU make was not used, consider re-running the configure script with MAKE=\"gmake\" (or whatever is necessary). You can also try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See \`config.log' for more details" "$LINENO" 5; } fi { am_dirpart=; unset am_dirpart;} { am_filepart=; unset am_filepart;} { am_mf=; unset am_mf;} { am_rc=; unset am_rc;} rm -f conftest-deps.mk } ;; "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" gt_tab=`printf '\t'` cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ${gt_tab}]*\$/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 assignment 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 assignment 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) 2021 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 EXEEXT='$ac_cv_exeext' AUTOTEST_PATH='tests' SHELL=\${CONFIG_SHELL-'$SHELL'} ATEOF ;; 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������